Statistics
| Revision:

svn-gvsig-desktop / branches / v2_0_0_prep / extensions / extCAD / src / com / iver / cit / gvsig / project / documents / view / legend / gui / tablelayers / TableLayers.java @ 23424

History | View | Annotate | Download (15.9 KB)

1
package com.iver.cit.gvsig.project.documents.view.legend.gui.tablelayers;
2

    
3
import java.awt.Component;
4
import java.awt.Dimension;
5
import java.awt.GridLayout;
6
import java.awt.event.MouseEvent;
7
import java.awt.event.MouseListener;
8
import java.util.ArrayList;
9

    
10
import javax.swing.ImageIcon;
11
import javax.swing.JFrame;
12
import javax.swing.JPanel;
13
import javax.swing.JScrollPane;
14
import javax.swing.JTable;
15
import javax.swing.table.AbstractTableModel;
16
import javax.swing.table.TableCellRenderer;
17
import javax.swing.table.TableColumn;
18

    
19
import org.gvsig.fmap.data.feature.FeatureStore;
20
import org.gvsig.fmap.geom.primitive.FShape;
21
import org.gvsig.fmap.mapcontext.rendering.legend.IVectorLegend;
22
import org.gvsig.fmap.mapcontext.rendering.symbols.SymbologyFactory;
23

    
24
import com.iver.andami.PluginServices;
25
import com.iver.cit.gvsig.fmap.rendering.EditionManagerLegend;
26
import com.iver.cit.gvsig.project.documents.gui.TableSymbolCellRenderer;
27
import com.iver.cit.gvsig.project.documents.view.legend.edition.gui.ActivatedCellEditor;
28
import com.iver.cit.gvsig.project.documents.view.legend.edition.gui.BlockedCellEditor;
29
import com.iver.cit.gvsig.project.documents.view.legend.edition.gui.CellIconOptionRenderer;
30
import com.iver.cit.gvsig.project.documents.view.legend.edition.gui.DisabledCellEditor;
31
import com.iver.cit.gvsig.project.documents.view.legend.edition.gui.FilledCellEditor;
32
import com.iver.cit.gvsig.project.documents.view.legend.edition.gui.PresentCellEditor;
33
import com.iver.cit.gvsig.project.documents.view.legend.edition.gui.ValueCellEditor;
34

    
35

    
36
/**
37
 * DOCUMENT ME!
38
 *
39
 * @author Vicente Caballero Navarro
40
 */
41
public class TableLayers extends JPanel {
42
    private ImageIcon selected = PluginServices.getIconTheme().get("images-selected-icon");
43
    private ImageIcon notselected = PluginServices.getIconTheme().get("images-notselected-icon");
44
    private ImageIcon blocked = PluginServices.getIconTheme().get("images-blocked-icon");
45
    private ImageIcon unblocked = PluginServices.getIconTheme().get("images-unblocked-icon");
46
    private ImageIcon active = PluginServices.getIconTheme().get("images-active-icon");
47
    private ImageIcon defuse = PluginServices.getIconTheme().get("images-defuse-icon");
48
    private ImageIcon disable = PluginServices.getIconTheme().get("images-disabled-icon");
49
    private ImageIcon notdisable =PluginServices.getIconTheme().get("images-notdisabled-icon");
50
    private ImageIcon fill = PluginServices.getIconTheme().get("images-fill-icon");
51
    private ImageIcon notfill = PluginServices.getIconTheme().get("images-notfill-icon");
52
    private boolean DEBUG = false;
53
    private FeatureStore store;
54
    private EditionManagerLegend eml;
55
    private JTable table;
56
        private ArrayList statusListeners=new ArrayList();
57

    
58
    public TableLayers(FeatureStore store, IVectorLegend legend2) {
59
        super(new GridLayout(1, 0));
60
        this.store = store;
61
        this.eml = new EditionManagerLegend(legend2);
62

    
63
        table = new JTable(new MyTableModel());
64
        table.setPreferredScrollableViewportSize(new Dimension(500, 70));
65
        table.setShowHorizontalLines(false);
66

    
67
        //Create the scroll pane and add the table to it.
68
        JScrollPane scrollPane = new JScrollPane(table);
69

    
70
        //Set up column sizes.
71
        initColumnSizes(table);
72

    
73
        setUpStatusColumn(table, table.getColumnModel().getColumn(0));
74
        setUpValueColumn(table, table.getColumnModel().getColumn(1));
75
        setUpActivateColumn(table, table.getColumnModel().getColumn(2));
76
        setUpDisableColumn(table, table.getColumnModel().getColumn(3));
77
        setUpBlockColumn(table, table.getColumnModel().getColumn(4));
78
        setUpFillColumn(table, table.getColumnModel().getColumn(5));
79
        setUpSymbolColumn(table, table.getColumnModel().getColumn(6));
80

    
81
        //Add the scroll pane to this panel.
82
        add(scrollPane);
83
    }
84

    
85
    /*
86
     * This method picks good column sizes.
87
     * If all column heads are wider than the column's cells'
88
     * contents, then you can just use column.sizeWidthToFit().
89
     */
90
    private void initColumnSizes(JTable table) {
91
        MyTableModel model = (MyTableModel) table.getModel();
92
        TableColumn column = null;
93
        Component comp = null;
94
        int headerWidth = 0;
95
        int cellWidth = 0;
96
        Object[] longValues = model.longValues;
97
        TableCellRenderer headerRenderer = table.getTableHeader()
98
                                                .getDefaultRenderer();
99

    
100
        for (int i = 0; i < 7; i++) {
101
            column = table.getColumnModel().getColumn(i);
102

    
103
            comp = headerRenderer.getTableCellRendererComponent(null,
104
                    column.getHeaderValue(), false, false, 0, 0);
105
            headerWidth = comp.getPreferredSize().width;
106

    
107
            comp = table.getDefaultRenderer(model.getColumnClass(i))
108
                        .getTableCellRendererComponent(table, longValues[i],
109
                    false, false, 0, i);
110
            cellWidth = comp.getPreferredSize().width;
111

    
112
            if (DEBUG) {
113
                System.out.println("Initializing width of column " + i + ". " +
114
                    "headerWidth = " + headerWidth + "; cellWidth = " +
115
                    cellWidth);
116
            }
117

    
118
            ///column.setPreferredWidth(Math.max(headerWidth, cellWidth));
119
            column.setPreferredWidth((headerWidth + cellWidth) / 2);
120
        }
121
    }
122

    
123
    /**
124
     * DOCUMENT ME!
125
     *
126
     * @param table DOCUMENT ME!
127
     * @param column DOCUMENT ME!
128
     */
129
    public void setUpSymbolColumn(JTable table, TableColumn column) {
130
        ///SymbolCellEditor symboleditor = new SymbolCellEditor();
131
        ///column.setCellEditor(symboleditor);
132

    
133
        TableSymbolCellRenderer renderer = new TableSymbolCellRenderer(true);
134
        column.setCellRenderer(renderer);
135
    }
136
    public void setUpValueColumn(JTable table, TableColumn column) {
137
        ValueCellEditor valueEditor = new ValueCellEditor();
138
        column.setCellEditor(valueEditor);
139
    }
140
    /**
141
     * DOCUMENT ME!
142
     *
143
     * @param table DOCUMENT ME!
144
     * @param column DOCUMENT ME!
145
     */
146
    public void setUpStatusColumn(JTable table, TableColumn column) {
147

    
148
        PresentCellEditor presenteditor = new PresentCellEditor(eml,table,selected,
149
                notselected);
150
        presenteditor.addMouseListener(new MouseListener(){
151

    
152
                        public void mouseClicked(MouseEvent e) {
153
                                if (e.getClickCount()==2){
154
                                        for (int i=0;i<statusListeners.size();i++) {
155
                                                ((StatusListener)statusListeners.get(i)).click();
156
                                        }
157
                                }
158
                        }
159

    
160
                        public void mouseEntered(MouseEvent e) {
161
                        }
162

    
163
                        public void mouseExited(MouseEvent e) {
164
                        }
165

    
166
                        public void mousePressed(MouseEvent e) {
167
                        }
168

    
169
                        public void mouseReleased(MouseEvent e) {
170
                        }
171

    
172
                });
173
        column.setCellEditor(presenteditor);
174

    
175
        CellIconOptionRenderer renderer = new CellIconOptionRenderer(true);
176
        column.setCellRenderer(renderer);
177
    }
178

    
179
    /**
180
     * DOCUMENT ME!
181
     *
182
     * @param table DOCUMENT ME!
183
     * @param column DOCUMENT ME!
184
     */
185
    public void setUpActivateColumn(JTable table, TableColumn column) {
186
        ActivatedCellEditor activatededitor = new ActivatedCellEditor(eml,table,active,
187
                defuse);
188
        column.setCellEditor(activatededitor);
189

    
190
        CellIconOptionRenderer renderer = new CellIconOptionRenderer(true);
191
        column.setCellRenderer(renderer);
192
    }
193

    
194
    /**
195
     * DOCUMENT ME!
196
     *
197
     * @param table DOCUMENT ME!
198
     * @param column DOCUMENT ME!
199
     */
200
    public void setUpDisableColumn(JTable table, TableColumn column) {
201
        DisabledCellEditor disablededitor = new DisabledCellEditor(eml,table,notdisable,
202
                disable);
203
        column.setCellEditor(disablededitor);
204

    
205
        CellIconOptionRenderer renderer = new CellIconOptionRenderer(true);
206
        column.setCellRenderer(renderer);
207
    }
208

    
209
    /**
210
     * DOCUMENT ME!
211
     *
212
     * @param table DOCUMENT ME!
213
     * @param column DOCUMENT ME!
214
     */
215
    public void setUpBlockColumn(JTable table, TableColumn column) {
216
        BlockedCellEditor blockeditor = new BlockedCellEditor(eml,table,blocked,
217
                unblocked);
218
        column.setCellEditor(blockeditor);
219

    
220
        CellIconOptionRenderer renderer = new CellIconOptionRenderer(true);
221
        column.setCellRenderer(renderer);
222
    }
223

    
224
    /**
225
     * DOCUMENT ME!
226
     *
227
     * @param table DOCUMENT ME!
228
     * @param column DOCUMENT ME!
229
     */
230
    public void setUpFillColumn(JTable table, TableColumn column) {
231
        FilledCellEditor fillededitor = new FilledCellEditor(eml,table,fill,
232
                notfill);
233
        column.setCellEditor(fillededitor);
234

    
235
        CellIconOptionRenderer renderer = new CellIconOptionRenderer(true);
236
        column.setCellRenderer(renderer);
237
    }
238

    
239
    /**
240
     * Create the GUI and show it.  For thread safety, this method should be
241
     * invoked from the event-dispatching thread.
242
     */
243
    private static void createAndShowGUI() {
244
        //Create and set up the window.
245
        JFrame frame = new JFrame("TableRenderDemo");
246
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
247

    
248
        //Create and set up the content pane.
249
        TableLayers newContentPane = new TableLayers(null, null);
250
        newContentPane.setOpaque(true); //content panes must be opaque
251
        newContentPane.DEBUG = true;
252
        frame.setContentPane(newContentPane);
253

    
254
        //Display the window.
255
        frame.pack();
256
        frame.setVisible(true);
257
    }
258

    
259
    /**
260
     * DOCUMENT ME!
261
     *
262
     * @param args DOCUMENT ME!
263
     */
264
    public static void main(String[] args) {
265
        //Schedule a job for the event-dispatching thread:
266
        //creating and showing this application's GUI.
267
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
268
                public void run() {
269
                    createAndShowGUI();
270
                }
271
            });
272
    }
273

    
274
    /**
275
     * DOCUMENT ME!
276
     *
277
     * @param source DOCUMENT ME!
278
     */
279
    public void setStore(FeatureStore store) {
280
        this.store = store;
281
    }
282

    
283
    /**
284
     * DOCUMENT ME!
285
     *
286
     * @param legend DOCUMENT ME!
287
     */
288
    public void setLegend(IVectorLegend legend) {
289
        this.eml = new EditionManagerLegend(legend);
290
    }
291

    
292
    class MyTableModel extends AbstractTableModel {
293
        private String[] columnNames = {
294
                PluginServices.getText(this, "estado"),
295
                PluginServices.getText(this, "nombre"),
296
                PluginServices.getText(this, "activar"),
297
                PluginServices.getText(this, "inutilizar"),
298
                PluginServices.getText(this, "bloquear"),
299
                PluginServices.getText(this, "relleno"),
300
                PluginServices.getText(this, "simbolo")
301
            };
302

    
303
        //        private Object[][] data = {
304
        //            {new Boolean(true), "Nombre1",new Boolean(true) ,new Boolean(false),new Boolean(false),
305
        //                    "s?mbolo"},
306
        //                    {new Boolean(false), "Nombre2",new Boolean(true),new Boolean(false),new Boolean(false),
307
        //                    "s?mbolo"},
308
        //                    {new Boolean(false), "Nombre3",new Boolean(true),new Boolean(false),new Boolean(false),
309
        //                    "s?mbolo"},
310
        //                    {new Boolean(false), "Nombre4",new Boolean(true),new Boolean(false),new Boolean(false),
311
        //                    "s?mbolo"},
312
        //                    {new Boolean(false), "Nombre5",new Boolean(true),new Boolean(false),new Boolean(false),
313
        //                    "s?mbolo"}
314
        //        };
315
        public final Object[] longValues = {
316
                new ImageIcon(), "Nombre1", new ImageIcon(), new ImageIcon(),
317
                new ImageIcon(), new ImageIcon(),
318
                SymbologyFactory.createDefaultSymbolByShapeType(FShape.MULTI)
319
            };
320

    
321
        public int getColumnCount() {
322
            return columnNames.length;
323
        }
324

    
325
        public int getRowCount() {
326
            return eml.getRowCount();
327
        }
328

    
329
        public String getColumnName(int col) {
330
            return columnNames[col];
331
        }
332

    
333
        public Object getValueAt(int row, int col) {
334
            switch (col) {
335
            case 0:
336

    
337
                if (eml.isPresent(row)) {
338
                    return selected;
339
                }
340

    
341
                return notselected;
342

    
343
            case 1:
344
                return eml.getValue(row);
345

    
346
            case 2:
347

    
348
                if (eml.isActived(row)) {
349
                    return active;
350
                }
351

    
352
                return defuse;
353

    
354
            case 3:
355

    
356
                if (eml.isDisable(row)) {
357
                    return notdisable;
358
                }
359

    
360
                return disable;
361

    
362
            case 4:
363

    
364
                if (eml.isBlocked(row)) {
365
                    return blocked;
366
                }
367

    
368
                return unblocked;
369

    
370
            case 5:
371

    
372
                if (eml.isFilled(row)) {
373
                    return fill;
374
                }
375

    
376
                return notfill;
377

    
378
            case 6:
379
                    return eml.getSymbol(row);
380

    
381
            default:
382
                return null;
383
            }
384
        }
385

    
386
        /*
387
         * JTable uses this method to determine the default renderer/
388
         * editor for each cell.  If we didn't implement this method,
389
         * then the last column would contain text ("true"/"false"),
390
         * rather than a check box.
391
         */
392
        public Class getColumnClass(int c) {
393
            return getValueAt(0, c).getClass();
394
        }
395

    
396
        /*
397
         * Don't need to implement this method unless your table's
398
         * editable.
399
         */
400
        public boolean isCellEditable(int row, int col) {
401
                return true;
402
        }
403

    
404
        /*
405
         * Don't need to implement this method unless your table's
406
         * data can change.
407
         */
408
        public void setValueAt(Object value, int row, int col) {
409
//            if (DEBUG) {
410
//                System.out.println("Setting value at " + row + "," + col +
411
//                    " to " + value + " (an instance of " + value.getClass() +
412
//                    ")");
413
//            }
414
//
415
//            ///data[row][col] = value;
416
//            ////////////////
417
//            switch (col) {
418
//            case 0:
419
//                    if (value.equals(selected)) {
420
//                    eml.setPresent(row,true);
421
//                }else {
422
//                        eml.setPresent(row,false);
423
//                }
424
//            case 1:
425
//                eml.setValue(row,value);
426
//            case 2:
427
//                    if (value.equals(active)) {
428
//                    eml.setActived(row,true);
429
//                }else {
430
//                        eml.setActived(row,false);
431
//                }
432
//            case 3:
433
//                    if (value.equals(disable)) {
434
//                    eml.setDisable(row,true);
435
//                }else {
436
//                        eml.setDisable(row,false);
437
//                }
438
//            case 4:
439
//                    if (value.equals(blocked)) {
440
//                    eml.setBlocked(row,true);
441
//                }else {
442
//                        eml.setBlocked(row,false);
443
//                }
444
//            case 5:
445
//                    if (value.equals(fill)) {
446
//                    eml.setFilled(row,true);
447
//                }else {
448
//                        eml.setFilled(row,false);
449
//                }
450
//            case 6:
451
//               eml.setSymbol(row,value);
452
//            }
453
//            /////////////
454
//            fireTableCellUpdated(row, col);
455
//
456
//            if (DEBUG) {
457
//                System.out.println("New value of data:");
458
//                printDebugData();
459
//            }
460
        }
461

    
462
        private void printDebugData() {
463
            int numRows = getRowCount();
464
            int numCols = getColumnCount();
465

    
466
            for (int i = 0; i < numRows; i++) {
467
                System.out.print("    row " + i + ":");
468

    
469
                for (int j = 0; j < numCols; j++) {
470
                    /// System.out.print("  " + data[i][j]);
471
                }
472

    
473
                System.out.println();
474
            }
475

    
476
            System.out.println("--------------------------");
477
        }
478
    }
479

    
480
        public String getPresentSubLayer() {
481
                return eml.getPresentSubLayer();
482
        }
483
        public void addStatusListener(StatusListener listener) {
484
                statusListeners.add(listener);
485
        }
486
}