Statistics
| Revision:

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
}