svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.plugin / org.gvsig.app / org.gvsig.app.mainplugin / src / main / java / org / gvsig / app / gui / preferencespage / LayerOrderPage.java @ 43983
History | View | Annotate | Download (6.07 KB)
1 | 40713 | jldominguez | package org.gvsig.app.gui.preferencespage; |
---|---|---|---|
2 | |||
3 | import java.awt.Color; |
||
4 | import java.awt.Component; |
||
5 | import java.awt.Dimension; |
||
6 | import java.awt.Font; |
||
7 | import java.awt.GridBagConstraints; |
||
8 | import java.awt.GridBagLayout; |
||
9 | import java.awt.GridLayout; |
||
10 | import java.awt.Insets; |
||
11 | import java.awt.event.ActionEvent; |
||
12 | import java.awt.event.ActionListener; |
||
13 | import java.util.Iterator; |
||
14 | import java.util.List; |
||
15 | |||
16 | import javax.swing.ImageIcon; |
||
17 | import javax.swing.JComboBox; |
||
18 | import javax.swing.JLabel; |
||
19 | import javax.swing.JPanel; |
||
20 | import javax.swing.JTextArea; |
||
21 | |||
22 | import org.gvsig.andami.IconThemeHelper; |
||
23 | import org.gvsig.andami.PluginsLocator; |
||
24 | import org.gvsig.andami.PluginsManager; |
||
25 | import org.gvsig.andami.preferences.AbstractPreferencePage; |
||
26 | import org.gvsig.andami.preferences.StoreException; |
||
27 | import org.gvsig.app.extension.AddLayer; |
||
28 | import org.gvsig.fmap.mapcontext.MapContextLocator; |
||
29 | import org.gvsig.fmap.mapcontext.layers.order.LayerOrderManager; |
||
30 | import org.gvsig.i18n.Messages; |
||
31 | import org.gvsig.tools.dynobject.DynObject; |
||
32 | import org.slf4j.Logger; |
||
33 | import org.slf4j.LoggerFactory; |
||
34 | |||
35 | public class LayerOrderPage extends AbstractPreferencePage implements ActionListener { |
||
36 | |||
37 | private static Logger logger = LoggerFactory.getLogger(LayerOrderPage.class); |
||
38 | public static String PREFERENCES_ID = "current_layer_order_manager"; |
||
39 | |||
40 | private ImageIcon icon; |
||
41 | private JComboBox orderCombo = null; |
||
42 | private JTextArea descArea = null; |
||
43 | |||
44 | public LayerOrderPage() {
|
||
45 | super();
|
||
46 | setParentID(ViewPage.id); |
||
47 | initUI(); |
||
48 | } |
||
49 | |||
50 | |||
51 | private void initUI() { |
||
52 | |||
53 | JPanel panel = new JPanel(new GridBagLayout()); |
||
54 | |||
55 | GridBagConstraints gbc = new GridBagConstraints(); |
||
56 | |||
57 | gbc.insets = new Insets(5, 8, 5, 8); |
||
58 | gbc.anchor = GridBagConstraints.NORTHWEST;
|
||
59 | |||
60 | gbc.gridx = 0;
|
||
61 | gbc.gridy = 0;
|
||
62 | panel.add(new JLabel(Messages.getText("_Order")), gbc); |
||
63 | |||
64 | gbc.gridx = 1;
|
||
65 | panel.add(getOrderCombo(), gbc); |
||
66 | |||
67 | gbc.gridx = 0;
|
||
68 | gbc.gridy = 1;
|
||
69 | panel.add(new JLabel(Messages.getText("_Description")), gbc); |
||
70 | |||
71 | gbc.gridx = 1;
|
||
72 | panel.add(getDescArea(getOrderCombo().getFont(), panel.getBackground()), gbc); |
||
73 | |||
74 | this.addComponent(panel);
|
||
75 | |||
76 | } |
||
77 | |||
78 | |||
79 | private JTextArea getDescArea(Font fnt, Color bg) { |
||
80 | |||
81 | if (descArea == null) { |
||
82 | |||
83 | descArea = new JTextArea(); |
||
84 | descArea.setWrapStyleWord(true);
|
||
85 | descArea.setLineWrap(true);
|
||
86 | descArea.setPreferredSize(new Dimension(250, 80)); |
||
87 | if (fnt != null) { |
||
88 | descArea.setFont(fnt); |
||
89 | } |
||
90 | if (bg != null) { |
||
91 | descArea.setBackground(bg); |
||
92 | } |
||
93 | } |
||
94 | return descArea;
|
||
95 | } |
||
96 | |||
97 | |||
98 | private JComboBox getOrderCombo() { |
||
99 | |||
100 | if (orderCombo == null) { |
||
101 | orderCombo = new JComboBox(); |
||
102 | orderCombo.addActionListener(this);
|
||
103 | |||
104 | } |
||
105 | return orderCombo;
|
||
106 | } |
||
107 | |||
108 | |||
109 | public String getID() { |
||
110 | return this.getClass().getName(); |
||
111 | } |
||
112 | |||
113 | public String getTitle() { |
||
114 | return Messages.getText("_Layer_order_in_TOC"); |
||
115 | } |
||
116 | |||
117 | public JPanel getPanel() { |
||
118 | return this; |
||
119 | } |
||
120 | |||
121 | public void initializeValues() { |
||
122 | |||
123 | this.getOrderCombo().removeAllItems();
|
||
124 | loadAvailables(); |
||
125 | |||
126 | DynObject props = this.getPluginProperties();
|
||
127 | // current_layer_order_manager
|
||
128 | Object val_obj = null; |
||
129 | if (props.hasDynValue(PREFERENCES_ID)) {
|
||
130 | val_obj = props.getDynValue(PREFERENCES_ID); |
||
131 | } |
||
132 | if (val_obj != null && val_obj instanceof LayerOrderManager) { |
||
133 | LayerOrderManager lom = (LayerOrderManager) val_obj; |
||
134 | String code = lom.getCode();
|
||
135 | setSelected(code); |
||
136 | return;
|
||
137 | } |
||
138 | // init to default
|
||
139 | LayerOrderManager lom = MapContextLocator.getDefaultOrderManager(); |
||
140 | if (lom != null) { |
||
141 | setSelected(lom.getCode()); |
||
142 | } else {
|
||
143 | logger.warn("No default order manager set!");
|
||
144 | } |
||
145 | } |
||
146 | |||
147 | private void setSelected(String code) { |
||
148 | |||
149 | int n = this.getOrderCombo().getItemCount(); |
||
150 | LayerOrderManager lom = null;
|
||
151 | for (int i=0; i<n; i++) { |
||
152 | lom = ((LayerOrderComboItem) getOrderCombo().getItemAt(i)).getManager(); |
||
153 | if (lom.getCode().compareTo(code) == 0) { |
||
154 | this.getOrderCombo().setSelectedIndex(i);
|
||
155 | return;
|
||
156 | } |
||
157 | } |
||
158 | |||
159 | logger.warn("Did not find code in list of order managers: " + code);
|
||
160 | getOrderCombo().setSelectedIndex(0);
|
||
161 | } |
||
162 | |||
163 | |||
164 | private void loadAvailables() { |
||
165 | |||
166 | List avs = MapContextLocator.getOrderManagers();
|
||
167 | LayerOrderManager lom = null;
|
||
168 | Iterator iter = avs.iterator();
|
||
169 | while (iter.hasNext()) {
|
||
170 | lom = (LayerOrderManager) iter.next(); |
||
171 | this.getOrderCombo().addItem(new LayerOrderComboItem(lom)); |
||
172 | } |
||
173 | |||
174 | } |
||
175 | |||
176 | |||
177 | public void initializeDefaults() { |
||
178 | |||
179 | this.getOrderCombo().removeAllItems();
|
||
180 | loadAvailables(); |
||
181 | // init to default
|
||
182 | LayerOrderManager lom = MapContextLocator.getDefaultOrderManager(); |
||
183 | if (lom != null) { |
||
184 | setSelected(lom.getCode()); |
||
185 | } else {
|
||
186 | logger.warn("No default order manager set!");
|
||
187 | } |
||
188 | |||
189 | } |
||
190 | |||
191 | public ImageIcon getIcon() { |
||
192 | |||
193 | if (icon == null) { |
||
194 | icon = IconThemeHelper.getImageIcon("layer-order-preferences");
|
||
195 | } |
||
196 | return icon;
|
||
197 | } |
||
198 | |||
199 | public boolean isValueChanged() { |
||
200 | return true; |
||
201 | } |
||
202 | |||
203 | public void storeValues() throws StoreException { |
||
204 | |||
205 | LayerOrderComboItem loci = |
||
206 | (LayerOrderComboItem) getOrderCombo().getSelectedItem(); |
||
207 | |||
208 | DynObject props = this.getPluginProperties();
|
||
209 | props.setDynValue(PREFERENCES_ID, loci.getManager()); |
||
210 | } |
||
211 | |||
212 | |||
213 | public void setChangesApplied() { |
||
214 | } |
||
215 | |||
216 | |||
217 | private DynObject getPluginProperties() {
|
||
218 | PluginsManager pluginsManager = PluginsLocator.getManager(); |
||
219 | return pluginsManager.getPlugin(AddLayer.class).getPluginProperties();
|
||
220 | } |
||
221 | |||
222 | |||
223 | public class LayerOrderComboItem { |
||
224 | |||
225 | private LayerOrderManager lom = null; |
||
226 | |||
227 | public LayerOrderComboItem(LayerOrderManager _lom) {
|
||
228 | lom = _lom; |
||
229 | } |
||
230 | |||
231 | public String toString() { |
||
232 | return lom.getName();
|
||
233 | } |
||
234 | |||
235 | public LayerOrderManager getManager() {
|
||
236 | return lom;
|
||
237 | } |
||
238 | } |
||
239 | |||
240 | |||
241 | public void actionPerformed(ActionEvent e) { |
||
242 | |||
243 | Object src = e.getSource();
|
||
244 | if (src == getOrderCombo()) {
|
||
245 | LayerOrderComboItem item = null;
|
||
246 | item = (LayerOrderComboItem) getOrderCombo().getSelectedItem(); |
||
247 | if (item == null) { |
||
248 | return;
|
||
249 | } |
||
250 | String desc = item.getManager().getDescription();
|
||
251 | this.getDescArea(null, null).setText(desc); |
||
252 | } |
||
253 | |||
254 | } |
||
255 | |||
256 | } |