Statistics
| Revision:

root / trunk / extensions / extGraph_predes / src / com / iver / cit / gvsig / graph / gui / RouteControPanel.java @ 8258

History | View | Annotate | Download (16.4 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: RouteControPanel.java 8258 2006-10-23 16:00:20Z jaume $
45
* $Log$
46
* Revision 1.3  2006-10-23 16:00:20  jaume
47
* *** empty log message ***
48
*
49
* Revision 1.2  2006/10/23 08:05:39  jaume
50
* GUI
51
*
52
* Revision 1.1  2006/10/20 12:02:50  jaume
53
* GUI
54
*
55
*
56
*/
57
package com.iver.cit.gvsig.graph.gui;
58

    
59
import java.awt.BorderLayout;
60
import java.awt.Color;
61
import java.awt.Component;
62
import java.awt.Dimension;
63
import java.awt.FlowLayout;
64
import java.awt.Font;
65
import java.awt.event.ActionEvent;
66
import java.awt.event.ActionListener;
67
import java.util.ArrayList;
68
import java.util.EventObject;
69

    
70
import javax.swing.ImageIcon;
71
import javax.swing.JCheckBox;
72
import javax.swing.JLabel;
73
import javax.swing.JPanel;
74
import javax.swing.JScrollPane;
75
import javax.swing.JTable;
76
import javax.swing.JTextField;
77
import javax.swing.event.CellEditorListener;
78
import javax.swing.table.DefaultTableCellRenderer;
79
import javax.swing.table.DefaultTableModel;
80
import javax.swing.table.TableCellEditor;
81
import javax.swing.table.TableCellRenderer;
82
import javax.swing.table.TableColumnModel;
83
import javax.swing.table.TableModel;
84

    
85
import org.gvsig.gui.beans.swing.GridBagLayoutPanel;
86
import org.gvsig.gui.beans.swing.JBlank;
87
import org.gvsig.gui.beans.swing.JButton;
88

    
89
import com.iver.andami.PluginServices;
90
import com.iver.andami.ui.mdiManager.IWindow;
91
import com.iver.andami.ui.mdiManager.WindowInfo;
92
import com.iver.cit.gvsig.graph.core.GvFlag;
93

    
94

    
95
public class RouteControPanel extends JPanel implements IWindow, ActionListener {
96
    WindowInfo wi;
97
    private JPanel westPanel = null;
98
    private JScrollPane scrlStages = null;
99
    private JTable tblStages = null;
100
    private GridBagLayoutPanel eastPanel = null;
101
    private DefaultTableModel tableModel = null;  //  @jve:decl-index=0:visual-constraint=""
102
    private JButton btnLoadStage = null;
103
    private JButton btnSaveStage = null;
104
    private ArrayList routeFlags;
105
    private ArrayList costs;
106
        private JLabel lblCost;
107
        private JLabel lblFlagAmout;
108
        private JButton btnPullDownStage;
109
        private JButton btnPushUpStage;
110
        private JButton btnRemoveStage;
111
        private JPanel southPanel;
112
        final String[] colName = new String[] {
113

    
114
            PluginServices.getText(this, "enable"),
115
            PluginServices.getText(this, "stage"),
116
            PluginServices.getText(this, "cost"),
117
    };
118
    /**
119
     * This method initializes
120
     *
121
     */
122
    public RouteControPanel() {
123
        super();
124
        initialize();
125
    }
126

    
127
    public void setCostUnits(String unitsName) {
128
            colName[2] = unitsName;
129
            getTblStages().repaint();
130
    }
131

    
132
    /**
133
     * This method initializes this
134
     *
135
     */
136
    private void initialize() {
137
        BorderLayout borderLayout = new BorderLayout();
138
        borderLayout.setHgap(10);
139
        borderLayout.setVgap(10);
140
        JPanel cont = new JPanel(borderLayout);
141
        cont.setPreferredSize(new Dimension(400,320));
142
        this.setSize(new Dimension(550,320));
143
        cont.add(getWestPanel(), BorderLayout.WEST);
144
        cont.add(getEastPanel(), BorderLayout.EAST);
145
        cont.add(getSouthPanel(), BorderLayout.SOUTH);
146
        this.add(cont);
147

    
148
        addFlag(new GvFlag(0, 0, "FakeFlag1", 0));
149
        addFlag(new GvFlag(0, 0, "FakeFlag2", 0));
150
        addFlag(new GvFlag(0, 0, "FakeFlag3", 0));
151
        addFlag(new GvFlag(0, 0, "FakeFlag4", 0));
152
        addFlag(new GvFlag(0, 0, "FakeFlag5", 0));
153

    
154
    }
155

    
156
    private JPanel getSouthPanel() {
157
            if (southPanel == null) {
158
                    southPanel = new JPanel(new FlowLayout(FlowLayout.LEADING));
159
                    southPanel.add(getBtnRemoveStage());
160
                    southPanel.add(new JBlank(50, 20));
161
                    southPanel.add(getBtnPushUpStage());
162
                    southPanel.add(getBtnPullDownStage());
163
                    southPanel.add(new JLabel(PluginServices.getText(this, "flag_amount")));
164
                    lblFlagAmout = new JLabel();
165
                    lblFlagAmout.setFont(lblFlagAmout.getFont().deriveFont(Font.BOLD));
166
                    southPanel.add(lblFlagAmout);
167
            }
168
            return southPanel;
169
    }
170

    
171
        public Object getWindowModel() {
172
        return this.getClass();
173
    }
174

    
175
    public WindowInfo getWindowInfo() {
176
        if (wi==null) {
177
            wi = new WindowInfo(WindowInfo.RESIZABLE);
178
            wi.setWidth(450);
179
            wi.setHeight(320);
180
            wi.setTitle(PluginServices.getText(this, "create_network") + "...");
181
        }
182
        return wi;
183
    }
184

    
185
    /**
186
     * This method initializes westPanel
187
     *
188
     * @return javax.swing.JPanel
189
     */
190
    private JPanel getWestPanel() {
191
        if (westPanel == null) {
192
            westPanel = new JPanel(new BorderLayout(5, 5));
193
            lblCost = new JLabel();
194
            lblCost.setFont(lblCost.getFont().deriveFont(Font.BOLD));
195
            GridBagLayoutPanel aux = new GridBagLayoutPanel();
196
            aux.addComponent(PluginServices.getText(this, "total_route_cost")+":", lblCost);
197
            aux.addComponent(getScrlStages());
198

    
199
            westPanel.add(aux);
200
        }
201
        return westPanel;
202
    }
203

    
204
    private JButton getBtnPullDownStage() {
205
                if (btnPullDownStage == null) {
206
                        btnPullDownStage = new JButton(new ImageIcon(this.getClass().getClassLoader().getResource("images/down-arrow.png")));
207
                        btnPullDownStage.setName("btnPullDownStage");
208
                        btnPullDownStage.addActionListener(this);
209
                }
210
                return btnPullDownStage;
211
        }
212

    
213
        private JButton getBtnPushUpStage() {
214
                if (btnPushUpStage == null) {
215
                        btnPushUpStage = new JButton(new ImageIcon(this.getClass().getClassLoader().getResource("images/up-arrow.png")));
216
                        btnPushUpStage.setName("btnPushUpStage");
217
                        btnPushUpStage.addActionListener(this);
218
                }
219
                return btnPushUpStage;
220
        }
221

    
222
        private JButton getBtnRemoveStage() {
223
                if (btnRemoveStage == null) {
224
                        btnRemoveStage = new JButton(new ImageIcon(this.getClass().getClassLoader().getResource("images/delete.png")));
225
                        btnRemoveStage.setName("btnRemoveStage");
226
                        btnRemoveStage.addActionListener(this);
227
                }
228
                return btnRemoveStage;
229
        }
230

    
231
        /**
232
     * This method initializes scrlStages
233
     *
234
     * @return javax.swing.JScrollPane
235
     */
236
    private JScrollPane getScrlStages() {
237
        if (scrlStages == null) {
238
            scrlStages = new JScrollPane();
239
            scrlStages.setViewportView(getTblStages());
240
            scrlStages.setPreferredSize(new Dimension(300, 200));
241
        }
242
        return scrlStages;
243
    }
244

    
245
    public void addFlag(GvFlag flag) {
246
        _getFlags().add(flag);
247
        lblFlagAmout.setText(String.valueOf(_getFlags().size()));
248
        getTblStages().repaint();
249
    }
250

    
251
    public void removeFlag(GvFlag flag) {
252
            removeFlag(_getFlags().indexOf(flag));
253
    }
254

    
255
    public void removeFlag(int index) {
256
            _getFlags().remove(index);
257
            lblFlagAmout.setText(String.valueOf(_getFlags().size()));
258
            getTblStages().repaint();
259
    }
260
    /**
261
     * This method initializes tblStages
262
     *
263
     * @return javax.swing.JTable
264
     */
265
    private JTable getTblStages() {
266
            if (tblStages == null) {
267
                    tblStages = new JTable();
268
                    tblStages.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS);
269
                    tblStages.setModel(getTableModel());
270
                    TableCellRenderer tcr = new DefaultTableCellRenderer() {
271

    
272
                            public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, final int row, int column) {
273
                                    Object myValue = null;
274
                                    if (row >= getFlagCount())
275
                                            return null;
276
                                    if (column == 0) {
277
                                            JPanel p = new JPanel(new FlowLayout(FlowLayout.CENTER, 5,0));
278

    
279
                                            final JCheckBox chk = new JCheckBox("", isSelected(row));
280

    
281
                                            p.setBackground(Color.WHITE);
282
                                            p.add(chk);
283
                                            return p;
284
                                    } else if ( column == 1 ) {
285
                                            myValue = ((GvFlag) _getFlags().get(row)).toString();
286
                                    } else if (column == 2) {
287
                                            myValue = String.valueOf(((GvFlag) _getFlags().get(row)).getCost());
288
                                    }
289
                                    return super.getTableCellRendererComponent(table, myValue, isSelected, hasFocus, row, column);
290
                            }
291
                    };
292
                    TableCellEditor tce = new TableCellEditor() {
293

    
294
                            public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, final int row, int column) {
295
                                    if (row > getFlagCount() - 1) {
296
                                            return null;
297
                                    }
298

    
299
                                    if (column == 0) {
300
                                            JPanel p = new JPanel(new FlowLayout(FlowLayout.CENTER, 5,0));
301
                                            final JCheckBox chk = new JCheckBox("", isSelected(row));
302
                                            chk.addActionListener(new ActionListener() {
303
                                                    public void actionPerformed(java.awt.event.ActionEvent e) {
304
                                                            ((GvFlag)_getFlags().get(row)).setEnabled(chk.isSelected());
305
                                                    };
306
                                            });
307
                                            p.setBackground(Color.WHITE);
308
                                            p.add(chk);
309
                                            return p;
310
                                    } else if (column == 1) {
311
                                            final JTextField txt = new JTextField(((GvFlag) _getFlags().get(row)).toString());
312
                                            txt.addActionListener(new ActionListener() {
313
                                                    public void actionPerformed(ActionEvent e) {
314
                                                            GvFlag flag = (GvFlag) _getFlags().get(row);
315
                                                            flag.setDescription(txt.getText());
316
                                                    }
317
                                            });
318
                                            return txt;
319
                                    }
320
                                    return null;
321

    
322
                            }
323
                            public void cancelCellEditing() {}
324

    
325
                            public boolean stopCellEditing() {
326
                                    return false;
327
                            }
328

    
329
                            public Object getCellEditorValue() {
330
                                    return null;
331
                            }
332

    
333
                            public boolean isCellEditable(EventObject anEvent) {
334
                                    return true;
335
                            }
336

    
337
                            public boolean shouldSelectCell(EventObject anEvent) {
338
                                    return false;
339
                            }
340

    
341
                            public void addCellEditorListener(CellEditorListener l) {}
342

    
343
                            public void removeCellEditorListener(CellEditorListener l) {}
344

    
345
                    };
346
                    TableColumnModel cm = tblStages.getColumnModel();
347
                    for (int i = 0; i < tblStages.getColumnCount(); i++) {
348
                            cm.getColumn(0).setCellEditor(tce);
349
                            cm.getColumn(0).setCellRenderer(tcr);
350
                    }
351

    
352
                    int tablePreferredWidth = (int) tblStages.getPreferredSize().getWidth();
353
                    int colSize = tblStages.
354
                            getFontMetrics(tblStages.getFont()).
355
                            stringWidth(tblStages.getModel().getColumnName(0))*2;
356
                    cm.getColumn(0).setPreferredWidth((int) (colSize));
357
                    cm.getColumn(0).setMinWidth((int) (colSize));
358
                    cm.getColumn(0).setMaxWidth((int) (colSize));
359
                    tablePreferredWidth -= colSize;
360
                    cm.getColumn(1).setPreferredWidth((int) (tablePreferredWidth * 0.7));
361
                    cm.getColumn(2).setPreferredWidth((int) (tablePreferredWidth * 0.3));
362
            }
363
            return tblStages;
364
    }
365

    
366
    protected int getFlagCount() {
367
        return _getFlags().size();
368
    }
369

    
370

    
371
    private ArrayList _getFlags() {
372
        if (routeFlags == null) {
373
            routeFlags = new ArrayList();
374
        }
375
        return routeFlags;
376
    }
377

    
378
    protected boolean isSelected(int row) {
379
        return ((GvFlag) _getFlags().get(row)).isEnabled();
380
    }
381

    
382
    /**
383
     * This method initializes eastPanel
384
     *
385
     * @return javax.swing.JPanel
386
     */
387
    private JPanel getEastPanel() {
388
        if (eastPanel == null) {
389
            eastPanel = new GridBagLayoutPanel();
390
            eastPanel.addComponent(getBtnLoadStage());
391
            eastPanel.add(getBtnSaveStage());
392
        }
393
        return eastPanel;
394
    }
395

    
396
    /**
397
     * This method initializes defaultTableModel
398
     *
399
     * @return javax.swing.table.DefaultTableModel
400
     */
401
    private TableModel getTableModel() {
402
        if (tableModel == null) {
403
            tableModel = new DefaultTableModel() {
404

    
405

    
406
                public String getColumnName(int column) {
407
                    return colName[column];
408
                }
409

    
410
                public Object getValueAt(int row, int column) {
411
                    if (row > getFlagCount()-1)
412
                        return null;
413
                    switch (column) {
414
                    case 0:
415
                            return new Boolean(((GvFlag) _getFlags().get(row)).isEnabled());
416
                    case 1:
417
                        return _getFlags().get(row);
418
                    case 2:
419
                            return new Double(((GvFlag) _getFlags().get(row)).getCost());
420
                    }
421
                    return null;
422
                }
423

    
424
                public void setValueAt(Object aValue, int row, int column) {
425
                    if (row > getFlagCount()-1)
426
                        return;
427
                    switch (column) {
428
                    case 0:
429
                            ((GvFlag) _getFlags().get(row)).setEnabled(((Boolean) aValue).booleanValue());
430
                        break;
431
                    case 1:
432
                        ((GvFlag) _getFlags().get(row)).setDescription((String) aValue);
433
                        break;
434
                    /*case 2:
435
                        getCosts().set(row, new Double((String) aValue));
436
                        break;*/
437
                    }
438

    
439
                }
440
            };
441
            tableModel.setColumnCount(3);
442
            int i = getFlagCount();
443
            if (i<10)
444
                i = 10;
445

    
446
            tableModel.setRowCount(i);
447
        }
448
        return tableModel;
449
    }
450

    
451
    /**
452
     * This method initializes btnLoadStage
453
     *
454
     * @return javax.swing.JButton
455
     */
456
    private JButton getBtnLoadStage() {
457
        if (btnLoadStage == null) {
458
            btnLoadStage = new JButton();
459
            btnLoadStage.setText(PluginServices.getText(this, "load_stages"));
460
            btnLoadStage.addActionListener(this);
461
        }
462
        return btnLoadStage;
463
    }
464

    
465
    /**
466
     * This method initializes btnSaveStages
467
     *
468
     * @return javax.swing.JButton
469
     */
470
    private JButton getBtnSaveStage() {
471
        if (btnSaveStage == null) {
472
            btnSaveStage = new JButton();
473
            btnSaveStage.setText(PluginServices.getText(this, "save_stages"));
474
            btnSaveStage.addActionListener(this);
475
        }
476
        return btnSaveStage;
477
    }
478

    
479
        public void actionPerformed(ActionEvent e) {
480
                String name = ((Component) e.getSource()).getName();
481
                if (name.equals(getBtnLoadStage().getName())) {
482
                        // load
483

    
484
                } else if (name.equals(getBtnSaveStage().getName())) {
485
                        // save
486

    
487
                } else if (name.equals(getBtnPushUpStage().getName())) {
488
                        // push up
489
                        int[] selected = tblStages.getSelectedRows();
490
                        if (selected.length == 0 || selected[0] == 0)
491
                                return;
492

    
493
                        tblStages.clearSelection();
494

    
495
                        for (int i = 0; i < selected.length; i++) {
496
                                Object aux = _getFlags().get(selected[i]-1);
497
                                _getFlags().set(selected[i]-1, _getFlags().get(selected[i]));
498
                                _getFlags().set(selected[i], aux);
499
                                selected[i]--;
500
                                tblStages.addRowSelectionInterval(selected[i], selected[i]);
501

    
502
                        }
503
                        // move selection
504
                        for (int i = 1; i < selected.length; i++) {
505
                        }
506
                } else if (name.equals(getBtnPullDownStage().getName())) {
507
                        // pull down
508
                        int[] selected = tblStages.getSelectedRows();
509
                        if (selected.length == 0 || selected[selected.length-1] >= _getFlags().size()-1)
510
                                return;
511

    
512
                        // move rows
513
                        tblStages.clearSelection();
514
                        for (int i = selected.length-1; i >=0 ; i--) {
515
                                Object aux = _getFlags().get(selected[i]+1);
516
                                _getFlags().set(selected[i]+1, _getFlags().get(selected[i]));
517
                                _getFlags().set(selected[i], aux);
518
                                selected[i]++;
519
                                tblStages.addRowSelectionInterval(selected[i], selected[i]);
520

    
521
                        }
522

    
523
                        // move selection
524
                        for (int i = 1; i < selected.length; i++) {
525
                        }
526
                } else if (name.equals(getBtnRemoveStage().getName())) {
527
                        // remove
528
                        int[] selected = tblStages.getSelectedRows();
529
                        for (int i = selected.length-1; i >=0 ; i--) {
530
                                try {
531
                                        removeFlag(selected[i]);
532
                                } catch (IndexOutOfBoundsException iobEx) {}
533

    
534
                        }
535
                        tblStages.clearSelection();
536

    
537
                }
538
                repaint();
539
        }
540

    
541
        public GvFlag[] getFlags() {
542
                return (GvFlag[]) _getFlags().toArray(new GvFlag[0]);
543
        }
544

    
545
}  //  @jve:decl-index=0:visual-constraint="10,10"