root / org.gvsig.toolbox / trunk / org.gvsig.toolbox / org.gvsig.toolbox.gui / src / main / java / es / unex / sextante / gui / settings / SextanteConfigurationDialog.java @ 119
History | View | Annotate | Download (8.3 KB)
1 |
package es.unex.sextante.gui.settings; |
---|---|
2 |
|
3 |
|
4 |
import info.clearthought.layout.TableLayout; |
5 |
import info.clearthought.layout.TableLayoutConstants; |
6 |
|
7 |
import java.awt.event.ActionEvent; |
8 |
import java.awt.event.ActionListener; |
9 |
import java.awt.event.MouseAdapter; |
10 |
import java.awt.event.MouseEvent; |
11 |
import java.awt.event.MouseListener; |
12 |
import java.util.ArrayList; |
13 |
import java.util.HashMap; |
14 |
import java.util.Iterator; |
15 |
import java.util.Set; |
16 |
|
17 |
import javax.swing.JButton; |
18 |
import javax.swing.JDialog; |
19 |
import javax.swing.JOptionPane; |
20 |
import javax.swing.JSplitPane; |
21 |
import javax.swing.JTree; |
22 |
import javax.swing.JLabel; |
23 |
import javax.swing.tree.DefaultMutableTreeNode; |
24 |
import javax.swing.tree.DefaultTreeModel; |
25 |
import javax.swing.tree.TreePath; |
26 |
|
27 |
import es.unex.sextante.core.Sextante; |
28 |
import es.unex.sextante.gui.core.IAlgorithmProvider; |
29 |
import es.unex.sextante.gui.core.SextanteGUI; |
30 |
import es.unex.sextante.gui.exceptions.WrongSettingValuesException; |
31 |
import es.unex.sextante.gui.toolbox.ToolboxPanel; |
32 |
|
33 |
public class SextanteConfigurationDialog |
34 |
extends
|
35 |
JDialog {
|
36 |
|
37 |
private final Setting[] m_Settings; |
38 |
private SettingPanel m_CurrentPanel;
|
39 |
private TreePath m_Path; |
40 |
private final HashMap<String, String> m_Values; |
41 |
|
42 |
private JButton jButtonCancel; |
43 |
private JTree jTree; |
44 |
private JSplitPane jSplitPane; |
45 |
private JButton jButtonOk; |
46 |
private JLabel jLabelVersion; |
47 |
|
48 |
public static final double SPACER_SMALL = 3.0; |
49 |
public static final double SPACER_MEDIUM = 6.0; |
50 |
public static final double SPACER_LARGE = 9.0; |
51 |
|
52 |
/**
|
53 |
* Constructor
|
54 |
*
|
55 |
* @param panel
|
56 |
* the current toolbox panel. It will be updated with the changes made in this dialog
|
57 |
* @param parent
|
58 |
* The parent dialog of this settings dialog
|
59 |
*/
|
60 |
public SextanteConfigurationDialog(final ToolboxPanel panel, |
61 |
final JDialog parent) { |
62 |
|
63 |
super(parent, Sextante.getText("Toolbox")+ " - " + Sextante.getText("Settings"), true); |
64 |
|
65 |
final Setting[] settings = new Setting[] { new SextanteGeneralSettings() }; |
66 |
final ArrayList<IAlgorithmProvider> providers = SextanteGUI.getAlgorithmProviders(); |
67 |
m_Settings = new Setting[settings.length + providers.size()];
|
68 |
System.arraycopy(settings, 0, m_Settings, 0, settings.length); |
69 |
for (int i = 0; i < providers.size(); i++) { |
70 |
m_Settings[i + settings.length] = providers.get(i).getSettings(); |
71 |
} |
72 |
|
73 |
m_Values = new HashMap<String, String>(); |
74 |
|
75 |
initGUI(); |
76 |
setLocationRelativeTo(null);
|
77 |
|
78 |
} |
79 |
|
80 |
|
81 |
/**
|
82 |
* Constructor. Uses the main frame as the parent component
|
83 |
*
|
84 |
* @param panel
|
85 |
* the current toolbox panel. It will be updated with the changes made in this dialog
|
86 |
*/
|
87 |
public SextanteConfigurationDialog(final ToolboxPanel panel) { |
88 |
|
89 |
super(SextanteGUI.getMainFrame(), Sextante.getText("Toolbox")+ " - " + Sextante.getText("Settings"), true); |
90 |
|
91 |
final Setting[] settings = new Setting[] { new SextanteGeneralSettings() }; // add more Setting objects here if required |
92 |
final ArrayList<IAlgorithmProvider> providers = SextanteGUI.getAlgorithmProviders(); |
93 |
m_Settings = new Setting[settings.length + providers.size()];
|
94 |
System.arraycopy(settings, 0, m_Settings, 0, settings.length); |
95 |
for (int i = 0; i < providers.size(); i++) { |
96 |
m_Settings[i + settings.length] = providers.get(i).getSettings(); |
97 |
} |
98 |
|
99 |
m_Values = new HashMap<String, String>(); |
100 |
|
101 |
initGUI(); |
102 |
setLocationRelativeTo(null);
|
103 |
|
104 |
} |
105 |
|
106 |
|
107 |
protected void changeSetting() { |
108 |
|
109 |
if (m_Path != null) { |
110 |
final DefaultMutableTreeNode node = (DefaultMutableTreeNode) m_Path.getLastPathComponent(); |
111 |
final Object obj = node.getUserObject(); |
112 |
if (obj instanceof Setting) { |
113 |
final Setting setting = (Setting) obj;
|
114 |
try {
|
115 |
final HashMap<String, String> values = m_CurrentPanel.getValues(); |
116 |
jSplitPane.remove(m_CurrentPanel); |
117 |
m_CurrentPanel = setting.getPanel(); |
118 |
jSplitPane.add(m_CurrentPanel, JSplitPane.RIGHT);
|
119 |
m_CurrentPanel.setPreferredSize(new java.awt.Dimension(389, 211)); |
120 |
final Set<String> set = values.keySet(); |
121 |
final Iterator<String> iter = set.iterator(); |
122 |
while (iter.hasNext()) {
|
123 |
final String key = iter.next(); |
124 |
m_Values.put(key, values.get(key)); |
125 |
} |
126 |
} |
127 |
catch (final WrongSettingValuesException e) { |
128 |
JOptionPane.showMessageDialog(null, e.getMessage(), "", JOptionPane.WARNING_MESSAGE); |
129 |
} |
130 |
} |
131 |
} |
132 |
|
133 |
} |
134 |
|
135 |
|
136 |
private void fillTree() { |
137 |
|
138 |
final DefaultMutableTreeNode mainNode = new DefaultMutableTreeNode(Sextante.getText("Settings")); |
139 |
for (final Setting element : m_Settings) { |
140 |
final DefaultMutableTreeNode node = new DefaultMutableTreeNode(element); |
141 |
mainNode.add(node); |
142 |
} |
143 |
final DefaultTreeModel model = new DefaultTreeModel(mainNode); |
144 |
jTree.setModel(model); |
145 |
|
146 |
} |
147 |
|
148 |
|
149 |
private void initGUI() { |
150 |
|
151 |
final TableLayout thisLayout = new TableLayout(new double[][] { { 3.0, 160.0, TableLayoutConstants.FILL, 170.0, 3.0, 170.0, 3.0 }, |
152 |
{ TableLayoutConstants.FILL, 3.0, 30.0, 3.0 } }); |
153 |
thisLayout.setHGap(5);
|
154 |
thisLayout.setVGap(5);
|
155 |
getContentPane().setLayout(thisLayout); |
156 |
this.setResizable(false); |
157 |
{ |
158 |
jLabelVersion = new JLabel(); |
159 |
jLabelVersion.setText("<html><i>" + Sextante.getText("version") + |
160 |
" " + Sextante.getVersionNumber() + "</i></html>"); |
161 |
getContentPane().add(jLabelVersion, "1, 2");
|
162 |
} |
163 |
{ |
164 |
jButtonCancel = new JButton(); |
165 |
getContentPane().add(jButtonCancel, "3, 2");
|
166 |
jButtonCancel.setText(Sextante.getText("Cancel"));
|
167 |
jButtonCancel.addActionListener(new ActionListener() { |
168 |
public void actionPerformed(final ActionEvent evt) { |
169 |
jButtonCancelActionPerformed(evt); |
170 |
} |
171 |
}); |
172 |
} |
173 |
{ |
174 |
jButtonOk = new JButton(); |
175 |
getContentPane().add(jButtonOk, "5, 2");
|
176 |
jButtonOk.setText(Sextante.getText("OK"));
|
177 |
jButtonOk.addActionListener(new ActionListener() { |
178 |
public void actionPerformed(final ActionEvent evt) { |
179 |
jButtonOkActionPerformed(evt); |
180 |
} |
181 |
}); |
182 |
} |
183 |
{ |
184 |
jSplitPane = new JSplitPane(); |
185 |
getContentPane().add(jSplitPane, "0, 0, 6, 1");
|
186 |
{ |
187 |
jTree = new JTree(); |
188 |
jTree.setPreferredSize(new java.awt.Dimension(164, 422)); |
189 |
jSplitPane.add(jTree, JSplitPane.LEFT);
|
190 |
final MouseListener ml = new MouseAdapter() { |
191 |
@Override
|
192 |
public void mousePressed(MouseEvent e) { |
193 |
m_Path = jTree.getPathForLocation(e.getX(), e.getY()); |
194 |
changeSetting(); |
195 |
} |
196 |
}; |
197 |
jTree.addMouseListener(ml); |
198 |
fillTree(); |
199 |
} |
200 |
} |
201 |
this.setSize(634, 466); |
202 |
|
203 |
m_CurrentPanel = m_Settings[0].getPanel();
|
204 |
jSplitPane.add(m_CurrentPanel, JSplitPane.RIGHT);
|
205 |
jTree.setSelectionRow(1);
|
206 |
|
207 |
} |
208 |
|
209 |
|
210 |
private void jButtonOkActionPerformed(final ActionEvent evt) { |
211 |
|
212 |
try {
|
213 |
final HashMap<String, String> values = m_CurrentPanel.getValues(); |
214 |
final Set<String> set = values.keySet(); |
215 |
final Iterator<String> iter = set.iterator(); |
216 |
while (iter.hasNext()) {
|
217 |
final String key = iter.next(); |
218 |
m_Values.put(key, values.get(key)); |
219 |
} |
220 |
|
221 |
SextanteGUI.setSettings(m_Values); |
222 |
SextanteGUI.saveSettings(); |
223 |
|
224 |
dispose(); |
225 |
setVisible(false);
|
226 |
|
227 |
SextanteGUI.getGUIFactory().updateToolbox(); |
228 |
} |
229 |
catch (final WrongSettingValuesException e) { |
230 |
JOptionPane.showMessageDialog(null, e.getMessage(), "", JOptionPane.WARNING_MESSAGE); |
231 |
} |
232 |
|
233 |
} |
234 |
|
235 |
|
236 |
private void jButtonCancelActionPerformed(final ActionEvent evt) { |
237 |
|
238 |
dispose(); |
239 |
setVisible(false);
|
240 |
|
241 |
} |
242 |
|
243 |
} |