Statistics
| Revision:

root / trunk / extensions / extCAD / src / com / iver / cit / gvsig / gui / preferences / SnapConfigPage.java @ 30232

History | View | Annotate | Download (6.6 KB)

1
package com.iver.cit.gvsig.gui.preferences;
2

    
3
import java.util.ArrayList;
4
import java.util.Comparator;
5
import java.util.Iterator;
6
import java.util.TreeMap;
7
import java.util.prefs.Preferences;
8

    
9
import javax.swing.ImageIcon;
10
import javax.swing.JPanel;
11

    
12
import com.iver.andami.PluginServices;
13
import com.iver.andami.messages.NotificationManager;
14
import com.iver.andami.preferences.AbstractPreferencePage;
15
import com.iver.andami.preferences.StoreException;
16
import com.iver.cit.gvsig.project.documents.view.snapping.ISnapper;
17
import com.iver.cit.gvsig.project.documents.view.snapping.gui.SnapConfig;
18
import com.iver.utiles.extensionPoints.ExtensionPoint;
19
import com.iver.utiles.extensionPoints.ExtensionPoints;
20
import com.iver.utiles.extensionPoints.ExtensionPointsSingleton;
21

    
22

    
23
/**
24
 * Preferencias de snapping.
25
 *
26
 * @author Vicente Caballero Navarro
27
 */
28
public class SnapConfigPage extends AbstractPreferencePage {
29
    private static Preferences prefs = Preferences.userRoot().node("snappers");
30
    private ImageIcon icon;
31
    private SnapConfig snapConfig;
32
    private ArrayList<ISnapper> snappers = new ArrayList<ISnapper>();
33
        private static boolean applySnappers=true;
34
    @SuppressWarnings("unchecked")
35
        public static TreeMap<ISnapper,Boolean> selected = new TreeMap<ISnapper,Boolean>(new Comparator<ISnapper>(){
36

    
37
                public int compare(ISnapper o1, ISnapper o2) {
38
                        if (o1.getClass().equals(o2.getClass()))
39
                                return 0;
40
                        if (o1.getPriority()>o2.getPriority())
41
                                return 1;
42
                        else
43
                                return -1;
44
                }
45

    
46
        });
47
    static {
48
            new SnapConfigPage().initializeValues();
49
    }
50

    
51

    
52
    public SnapConfigPage() {
53
        super();
54
        icon = new ImageIcon(this.getClass().getClassLoader().getResource("images/Snapper.png"));
55
        snapConfig = new SnapConfig();
56
        snappers = getSnappers();
57
        snapConfig.setSnappers(snappers);
58
        addComponent(snapConfig);
59
    }
60

    
61
    /**
62
     * DOCUMENT ME!
63
     *
64
     * @return DOCUMENT ME!
65
     */
66
    private static ArrayList<ISnapper> getSnappers() {
67
        ArrayList<ISnapper> snappers = new ArrayList<ISnapper>();
68
        ExtensionPoints extensionPoints = ExtensionPointsSingleton.getInstance();
69

    
70
        ExtensionPoint extensionPoint = (ExtensionPoint) extensionPoints.get(
71
                "Snapper");
72
        Iterator iterator = extensionPoint.keySet().iterator();
73

    
74
        while (iterator.hasNext()) {
75
            try {
76
                ISnapper snapper = (ISnapper) extensionPoint.create((String) iterator.next());
77
                snappers.add(snapper);
78
            } catch (InstantiationException e) {
79
                    NotificationManager.addError(e.getMessage(),e);
80
            } catch (IllegalAccessException e) {
81
                    NotificationManager.addError(e.getMessage(),e);
82
            }
83
        }
84

    
85
        return snappers;
86
    }
87
    /**
88
     * DOCUMENT ME!
89
     *
90
     * @return DOCUMENT ME!
91
     */
92
    public static ArrayList<ISnapper> getActivesSnappers() {
93
       if (!applySnappers)
94
               return new ArrayList<ISnapper>();
95
       return new ArrayList<ISnapper>(selected.keySet());
96
    }
97

    
98
    /**
99
     * DOCUMENT ME!
100
     *
101
     * @throws StoreException DOCUMENT ME!
102
     */
103
    public void storeValues() throws StoreException {
104
        selected.clear();
105
            for (int n = 0; n < snappers.size(); n++) {
106
            Boolean b = (Boolean) snapConfig.getTableModel().getValueAt(n, 0);
107
            ISnapper snp = (ISnapper) snappers.get(n);
108
            String nameClass=snp.getClass().getName();
109
            nameClass=nameClass.substring(nameClass.lastIndexOf('.'));
110
            prefs.putBoolean("snapper_activated" + nameClass, b.booleanValue());
111
            if (b.booleanValue())
112
                    selected.put(snp, b);
113
            prefs.putInt("snapper_priority"+ nameClass,snp.getPriority());
114
        }
115
        boolean b=snapConfig.applySnappers();
116
        prefs.putBoolean("apply-snappers",b);
117
        applySnappers=b;
118
    }
119

    
120
    /**
121
     * DOCUMENT ME!
122
     */
123
    public void setChangesApplied() {
124
            setChanged(false);
125
    }
126

    
127
    /**
128
     * DOCUMENT ME!
129
     *
130
     * @return DOCUMENT ME!
131
     */
132
    public String getID() {
133
        return this.getClass().getName();
134
    }
135

    
136
    /**
137
     * DOCUMENT ME!
138
     *
139
     * @return DOCUMENT ME!
140
     */
141
    public String getTitle() {
142
        return PluginServices.getText(this, "Snapping");
143
    }
144

    
145
    /**
146
     * DOCUMENT ME!
147
     *
148
     * @return DOCUMENT ME!
149
     */
150
    public JPanel getPanel() {
151
        return this;
152
    }
153

    
154
    /**
155
     * DOCUMENT ME!
156
     */
157
    public void initializeValues() {
158
            if (prefs.get("apply-snappers", null) == null){
159
                    initializeDefaults();
160
            }
161
        for (int n = 0; n < snappers.size(); n++) {
162
            ISnapper snp = (ISnapper) snappers.get(n);
163
            String nameClass=snp.getClass().getName();
164
            nameClass=nameClass.substring(nameClass.lastIndexOf('.'));
165
            boolean select = prefs.getBoolean("snapper_activated" + nameClass, false);
166
            int priority = prefs.getInt("snapper_priority" + nameClass,3);
167
            snp.setPriority(priority);
168
            if (select)
169
                    selected.put(snp, new Boolean(select));
170

    
171
        }
172
        applySnappers = prefs.getBoolean("apply-snappers",true);
173
        snapConfig.setApplySnappers(applySnappers);
174
        snapConfig.selectSnappers(selected);
175

    
176
    }
177

    
178
    /**
179
     * DOCUMENT ME!
180
     */
181
    public void initializeDefaults() {
182
            for (int n = 0; n < snappers.size(); n++) {
183
            ISnapper snp = (ISnapper) snappers.get(n);
184
            String nameClass=snp.getClass().getName();
185
            nameClass=nameClass.substring(nameClass.lastIndexOf('.'));
186
            if (nameClass.equals(".FinalPointSnapper")){
187
                    selected.put(snp, new Boolean(true));
188
                    int priority = 1;
189
                    prefs.putInt("snapper_priority" + nameClass, priority);
190
                snp.setPriority(priority);
191
            }else if (nameClass.equals(".NearestPointSnapper")){
192
                    selected.put(snp, new Boolean(true));
193
                    int priority = 2;
194
                    prefs.putInt("snapper_priority" + nameClass, priority);
195
                snp.setPriority(priority);
196
            }else{
197
                    selected.put(snp, new Boolean(false));
198
                    int priority = 3;
199
                    prefs.putInt("snapper_priority" + nameClass, priority);
200
                snp.setPriority(priority);
201
            }
202
        }
203
        applySnappers = true;
204
        snapConfig.setApplySnappers(applySnappers);
205
        snapConfig.selectSnappers(selected);
206
    }
207

    
208
    /**
209
     * DOCUMENT ME!
210
     *
211
     * @return DOCUMENT ME!
212
     */
213
    public ImageIcon getIcon() {
214
        return icon;
215
    }
216

    
217
    /**
218
     * DOCUMENT ME!
219
     *
220
     * @return DOCUMENT ME!
221
     */
222
    public boolean isValueChanged() {
223
            return super.hasChanged();
224
    }
225
}