Prefs: add a way to backup preferences file
[scilab.git] / scilab / modules / preferences / src / java / org / scilab / modules / preferences / Component / Select.java
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2011 - Pierre GRADIT
4  *
5  * This file must be used under the terms of the CeCILL.
6  * This source file is licensed as described in the file COPYING, which
7  * you should have received as part of this distribution.  The terms
8  * are also available at
9  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10  *
11  */
12
13 package org.scilab.modules.preferences.Component;
14
15 import java.awt.Dimension;
16
17 import org.scilab.modules.preferences.XComponent;
18 import org.scilab.modules.preferences.XChooser;
19 import org.scilab.modules.preferences.XConfigManager;
20 import javax.swing.JComboBox;
21 import org.w3c.dom.Node;
22 import org.w3c.dom.NodeList;
23
24 //TODO ScilabSwing class for this?
25
26 /** Implementation of Select compliant with extended management.
27 *
28 * @author Pierre GRADIT
29 *
30 */
31 public class Select extends JComboBox implements XComponent, XChooser {
32
33     /** Universal identifier for serialization.
34      *
35      */
36     private static final long serialVersionUID = -6127289363733321914L;
37
38     /** Define the set of actuators.
39     *
40     * @return array of actuator names.
41     */
42     public final String [] actuators() {
43         String [] actuators = {"enable"};
44         return actuators;
45     }
46
47     /** Constructor.
48     *
49     * @param peer : associated view DOM node.
50     */
51     public Select(final Node peer) {
52         super();
53         //setMinimumSize(new Dimension(200,30));
54         //setPreferredSize(new Dimension(200,30));
55         NodeList nodelist = peer.getChildNodes();
56         int select = 0;
57         int index = 0;
58         for (int i = 0; i < nodelist.getLength(); i++) {
59             Node node = nodelist.item(i);
60             if (node.getNodeName().equals("option")) {
61                 String value = XConfigManager.getAttribute(node, "value");
62                 String selected = XConfigManager.getAttribute(node, "selected");
63                 addItem(value);
64                 if (selected.equals("selected")) {
65                     select = index;
66                 }
67                 index += 1;
68             }
69         }
70
71         if (select < getItemCount()) {
72             setSelectedIndex(select);
73         }
74     }
75
76     /** Refresh the component by the use of actuators.
77     *
78     * @param peer the corresponding view DOM node
79     */
80     public void refresh(final Node peer) {
81         NodeList nodelist = peer.getChildNodes();
82         int select = 0;
83         int index = 0;
84         for (int i = 0; i < nodelist.getLength(); i++) {
85             Node node = nodelist.item(i);
86             if (node.getNodeName().equals("option")) {
87                 String selected = XConfigManager.getAttribute(node , "selected");
88                 if (selected.equals("selected")) {
89                     select = index;
90                 }
91                 index += 1;
92             }
93         }
94         if (select != getSelectedIndex() && select < getItemCount()) {
95             setEnabled(false);
96             setSelectedIndex(select);
97         }
98         String enable = XConfigManager.getAttribute(peer , "enable", "true");
99         setEnabled(enable.equals("true"));
100     }
101
102     /** Actual response read by the listener.
103     *
104     * @return response read by the listener.
105     */
106     public final Object choose() {
107         if (isEnabled()) {
108             return (String) getSelectedItem();
109         }
110         return null;
111     }
112
113     /** Developer serialization method.
114     *
115     * @return equivalent signature.
116     */
117     public final String toString() {
118         String signature = "Select";
119         return signature;
120     }
121 }
122