Statistics
| Revision:

root / trunk / applications / appgvSIG / src / com / iver / cit / gvsig / gui / styling / StyleSelector.java @ 11055

History | View | Annotate | Download (7.94 KB)

1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
4
 *
5
 * This program is free software; you can redistribute it and/or
6
 * modify it under the terms of the GNU General Public License
7
 * as published by the Free Software Foundation; either version 2
8
 * of the License, or (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
18
 *
19
 * For more information, contact:
20
 *
21
 *  Generalitat Valenciana
22
 *   Conselleria d'Infraestructures i Transport
23
 *   Av. Blasco Ib??ez, 50
24
 *   46010 VALENCIA
25
 *   SPAIN
26
 *
27
 *      +34 963862235
28
 *   gvsig@gva.es
29
 *      www.gvsig.gva.es
30
 *
31
 *    or
32
 *
33
 *   IVER T.I. S.A
34
 *   Salamanca 50
35
 *   46005 Valencia
36
 *   Spain
37
 *
38
 *   +34 963163400
39
 *   dac@iver.es
40
 */
41

    
42
/* CVS MESSAGES:
43
*
44
* $Id: StyleSelector.java 11055 2007-04-04 16:01:14Z jaume $
45
* $Log$
46
* Revision 1.4  2007-04-04 16:01:14  jaume
47
* *** empty log message ***
48
*
49
* Revision 1.2  2007/03/09 11:25:00  jaume
50
* Advanced symbology (start committing)
51
*
52
* Revision 1.1.2.4  2007/02/21 07:35:14  jaume
53
* *** empty log message ***
54
*
55
* Revision 1.1.2.3  2007/02/08 15:43:04  jaume
56
* some bug fixes in the editor and removed unnecessary imports
57
*
58
* Revision 1.1.2.2  2007/01/30 18:10:10  jaume
59
* start commiting labeling stuff
60
*
61
* Revision 1.1.2.1  2007/01/26 13:49:03  jaume
62
* *** empty log message ***
63
*
64
*
65
*/
66
package com.iver.cit.gvsig.gui.styling;
67

    
68
import java.awt.Color;
69
import java.awt.Component;
70
import java.awt.Dimension;
71
import java.io.File;
72
import java.io.FileFilter;
73
import java.util.prefs.Preferences;
74

    
75
import javax.swing.BoxLayout;
76
import javax.swing.JComponent;
77
import javax.swing.JLabel;
78
import javax.swing.JList;
79
import javax.swing.JPanel;
80
import javax.swing.ListCellRenderer;
81
import javax.swing.event.ListSelectionEvent;
82
import javax.swing.event.ListSelectionListener;
83
import javax.swing.event.TreeModelListener;
84
import javax.swing.tree.TreeModel;
85
import javax.swing.tree.TreePath;
86

    
87
import org.gvsig.gui.beans.swing.GridBagLayoutPanel;
88

    
89
import com.iver.andami.PluginServices;
90
import com.iver.cit.gvsig.fmap.core.styles.IStyle;
91
import com.iver.cit.gvsig.fmap.core.symbols.ISymbol;
92

    
93
/**
94
 *
95
 * @author jaume dominguez faus - jaume.dominguez@iver.es
96
 *
97
 */
98
public class StyleSelector extends SymbolSelector {
99

    
100
        public StyleSelector(IStyle style, int shapeType) {
101
                this(style, shapeType, new SelectorFilter() {
102
                        public boolean accepts(Object obj) {
103
                                return obj instanceof IStyle;
104
                        }
105
                });
106
        }
107

    
108
        public StyleSelector(IStyle style, int shapeType, SelectorFilter filter) {
109
                super(null, shapeType, filter);
110
                selectedElement = style;
111
            Preferences prefs = Preferences.userRoot().node( "gvsig.foldering" );
112
                rootDir = new File(prefs.get("SymbolStylesFolder", System.getProperty("user.home")+"/gvSIG/Styles"));
113
                if (!rootDir.exists())
114
                        rootDir.mkdir();
115
                lblTitle.setText(PluginServices.getText(this, "label_styles"));
116
                treeRootName = PluginServices.getText(this, "style_library");
117
                treeModel = new TreeModel() {
118
                    final class MyFile extends File {
119
                            public MyFile(String pathname) {
120
                                    super(pathname);
121
                            }
122

    
123
                            public String toString() {
124
                                    if (this.equals(root))
125
                                            return treeRootName;
126
                                    String path = getAbsolutePath();
127
                                    String prefixToRemove = rootDir.getAbsolutePath();
128
                                    path = path.substring(prefixToRemove.length()+1, path.length());
129
                                    return path;
130
                            }
131
                    };
132
                    MyFile root = new MyFile(rootDir.getAbsolutePath());
133

    
134
                    private FileFilter ff = new FileFilter() {
135
                            public boolean accept(File pathname) {
136
                                    return pathname.isDirectory();
137
                            }
138
                    };
139

    
140
                    public Object getRoot() {
141
                            return root;
142
                    }
143

    
144
                    public int getChildCount(Object parent) {
145
                            return ((File) parent).listFiles(ff).length;
146
                    }
147

    
148
                    public boolean isLeaf(Object node) {
149
                            return getChildCount(node)==0;
150
                    }
151

    
152
                    public void addTreeModelListener(TreeModelListener l) {
153
                            // TODO Necessite?
154

    
155
                    }
156

    
157
                    public void removeTreeModelListener(TreeModelListener l) {
158
                            // TODO Necessite?
159
                    }
160

    
161
                    public Object getChild(Object parent, int index) {
162
                            return new MyFile(((File) parent).listFiles(ff)[index].getAbsolutePath());
163
                    }
164

    
165
                    public int getIndexOfChild(Object parent, Object child) {
166
                            if (parent == null)
167
                                    return -1;
168
                            File[] files = ((File) parent).listFiles(ff);
169
                            for (int i = 0; i < files.length; i++) {
170
                                    if (files[i].equals((File) child))
171
                                            return i;
172
                            }
173
                            return -1;
174
                    }
175

    
176
                    public void valueForPathChanged(TreePath path, Object newValue) {
177
                            // TODO Auto-generated method stub
178
                    }
179

    
180
            };
181
                getTreeFav().setModel(treeModel);
182
        }
183

    
184
        protected SymbolSelectorListModel newListModel() {
185
                StyleSelectorListModel listModel = new StyleSelectorListModel(
186
                                dir,
187
                                selectedElement,
188
                                sFilter,
189
                                StyleSelectorListModel.STYLE_FILE_EXTENSION);
190
                return listModel;
191

    
192
        }
193

    
194
        protected JPanel getJPanelOptions() {
195
                if (jPanelOptions == null) {
196
                        jPanelOptions = new GridBagLayoutPanel();
197
                        // nothing in the panel
198

    
199
                }
200
            return jPanelOptions;
201
    }
202

    
203
    /**
204
     * This method initializes jList
205
     *
206
     * @return javax.swing.JList
207
     */
208
    protected JList getJListSymbols() {
209
            if (jListSymbols == null) {
210
                    jListSymbols = new JList();
211
                    jListSymbols.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
212
            jListSymbols.setLayoutOrientation(JList.HORIZONTAL_WRAP);
213
            jListSymbols.setVisibleRowCount(-1);
214
            jListSymbols.addListSelectionListener(new ListSelectionListener() {
215
                    public void valueChanged(ListSelectionEvent e) {
216
                            setStyle(jListSymbols.getSelectedValue());
217
                            updateOptionsPanel();
218
                    }
219
            });
220
            ListCellRenderer renderer = new ListCellRenderer() {
221
                        private Color mySelectedBGColor = new Color(255,145,100,255);
222
                            public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
223
                                    IStyle sty = (IStyle) value;
224
                                    JPanel pnl = new JPanel();
225
                                    BoxLayout layout = new BoxLayout(pnl, BoxLayout.Y_AXIS);
226
                                    pnl.setLayout(layout);
227
                                    Color bgColor = (isSelected) ? mySelectedBGColor
228
                                                             : getJListSymbols().getBackground();
229

    
230
                                    pnl.setBackground(bgColor);
231
                                    StylePreviewer sp = new StylePreviewer();
232
                                    sp.setShowOutline(false);
233
                                    sp.setAlignmentX(Component.CENTER_ALIGNMENT);
234
                                    sp.setPreferredSize(new Dimension(50, 50));
235
                                    sp.setStyle(sty);
236
                                    sp.setBackground(bgColor);
237
                                    pnl.add(sp);
238
                                    JLabel lbl = new JLabel(sty.getDescription());
239
                                    lbl.setBackground(bgColor);
240
                                    lbl.setAlignmentX(Component.CENTER_ALIGNMENT);
241
                                    pnl.add(lbl);
242

    
243
                                    return pnl;
244
                            }
245

    
246
                };
247
                jListSymbols.setCellRenderer(renderer);
248
            }
249
            return jListSymbols;
250
    }
251

    
252
        protected void setStyle(Object selectedValue) {
253
                // TODO missing change SymbolPreviewer by a StylePrevier and apply it
254
                // the new style
255
                selectedElement = selectedValue;
256
        }
257

    
258
        protected void propertiesPressed() {
259
                StyleEditor se = new StyleEditor((IStyle) selectedElement);
260
                PluginServices.getMDIManager().addWindow(se);
261
        }
262

    
263
    /**
264
     * This method initializes jPanel1
265
     *
266
     * @return javax.swing.JPanel
267
     */
268
    protected JComponent getJPanelPreview() {
269
            if (jPanelPreview == null) {
270
                    jPanelPreview = new SymbolPreviewer();
271
                    jPanelPreview.setPreferredSize(new java.awt.Dimension(100,100));
272
                    jPanelPreview.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));
273
            }
274
            return jPanelPreview;
275
    }
276
}