Statistics
| Revision:

root / trunk / applications / appgvSIG / src / com / iver / cit / gvsig / gui / Table.java @ 5086

History | View | Annotate | Download (42.7 KB)

1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2004 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
package com.iver.cit.gvsig.gui;
42

    
43
import java.awt.Color;
44
import java.awt.Component;
45
import java.awt.event.KeyAdapter;
46
import java.awt.event.KeyEvent;
47
import java.awt.event.KeyListener;
48
import java.awt.event.MouseAdapter;
49
import java.awt.event.MouseEvent;
50
import java.beans.PropertyChangeEvent;
51
import java.beans.PropertyChangeListener;
52
import java.io.File;
53
import java.io.IOException;
54
import java.text.ParseException;
55
import java.util.BitSet;
56
import java.util.Enumeration;
57
import java.util.EventListener;
58
import java.util.EventObject;
59

    
60
import javax.swing.DefaultCellEditor;
61
import javax.swing.DefaultListSelectionModel;
62
import javax.swing.FocusManager;
63
import javax.swing.JComponent;
64
import javax.swing.JFileChooser;
65
import javax.swing.JFrame;
66
import javax.swing.JLabel;
67
import javax.swing.JOptionPane;
68
import javax.swing.JPanel;
69
import javax.swing.JTextField;
70
import javax.swing.ListSelectionModel;
71
import javax.swing.event.ListSelectionEvent;
72
import javax.swing.event.ListSelectionListener;
73
import javax.swing.event.TableColumnModelEvent;
74
import javax.swing.event.TableColumnModelListener;
75
import javax.swing.table.AbstractTableModel;
76
import javax.swing.table.DefaultTableColumnModel;
77
import javax.swing.table.TableColumn;
78

    
79
import org.apache.log4j.Logger;
80

    
81
import com.hardcode.driverManager.DriverLoadException;
82
import com.hardcode.gdbms.engine.data.driver.DriverException;
83
import com.hardcode.gdbms.engine.values.Value;
84
import com.hardcode.gdbms.engine.values.ValueFactory;
85
import com.iver.andami.PluginServices;
86
import com.iver.andami.messages.NotificationManager;
87
import com.iver.andami.ui.mdiFrame.MainFrame;
88
import com.iver.andami.ui.mdiManager.SingletonView;
89
import com.iver.andami.ui.mdiManager.View;
90
import com.iver.andami.ui.mdiManager.ViewInfo;
91
import com.iver.andami.ui.mdiManager.ViewListener;
92
import com.iver.andami.ui.mdiManager.ViewTransform;
93
import com.iver.cit.gvsig.fmap.FMap;
94
import com.iver.cit.gvsig.fmap.core.DefaultFeature;
95
import com.iver.cit.gvsig.fmap.core.DefaultRow;
96
import com.iver.cit.gvsig.fmap.core.IFeature;
97
import com.iver.cit.gvsig.fmap.core.IGeometry;
98
import com.iver.cit.gvsig.fmap.core.IRow;
99
import com.iver.cit.gvsig.fmap.drivers.DriverIOException;
100
import com.iver.cit.gvsig.fmap.edition.EditionException;
101
import com.iver.cit.gvsig.fmap.edition.IEditableSource;
102
import com.iver.cit.gvsig.fmap.edition.IRowEdited;
103
import com.iver.cit.gvsig.fmap.edition.VectorialEditableAdapter;
104
import com.iver.cit.gvsig.fmap.edition.commands.CommandListener;
105
import com.iver.cit.gvsig.fmap.edition.writers.dbf.DbfWriter;
106
import com.iver.cit.gvsig.fmap.edition.writers.shp.ShpWriter;
107
import com.iver.cit.gvsig.fmap.layers.FLayer;
108
import com.iver.cit.gvsig.fmap.layers.FLayers;
109
import com.iver.cit.gvsig.fmap.layers.FLyrVect;
110
import com.iver.cit.gvsig.fmap.layers.LayerFactory;
111
import com.iver.cit.gvsig.fmap.layers.SelectableDataSource;
112
import com.iver.cit.gvsig.fmap.layers.SelectionEvent;
113
import com.iver.cit.gvsig.fmap.layers.SelectionListener;
114
import com.iver.cit.gvsig.gui.tables.Column;
115
import com.iver.cit.gvsig.gui.tables.EditionTable;
116
import com.iver.cit.gvsig.gui.tables.PopupMenu;
117
import com.iver.cit.gvsig.project.ProjectTable;
118
import com.iver.utiles.SimpleFileFilter;
119
import com.iver.utiles.swing.jtable.FieldSelectionEvent;
120
import com.iver.utiles.swing.jtable.FieldSelectionListener;
121
import com.iver.utiles.swing.jtable.JTable;
122
import com.iver.utiles.swing.jtable.SelectionHeaderSupport;
123

    
124
/**
125
 * DOCUMENT ME!
126
 *
127
 * @author Fernando Gonz?lez Cort?s
128
 */
129
public class Table extends JPanel implements SingletonView, EditionTable,
130
    ViewListener,CommandListener, ViewTransform {
131
    private static Logger logger = Logger.getLogger(Table.class.getName());
132
    private javax.swing.JScrollPane jScrollPane = null;
133
    private JTable table = null;
134
    private ProjectTable model = null;
135
    private JLabel jLabelStatus = null;
136
    private FMap fmap;
137
    private boolean updating = false;
138
    private TableSelectionListener selectionListener = new TableSelectionListener();
139
    private long numReg = 0;
140
    private SelectionHeaderSupport headerSelectionSupport = new SelectionHeaderSupport();
141
    private long[] orderIndexes = null;
142
    private long[] orderIndexesInverted = null;
143
    private IRow[] rowsCopied = null;
144
    private ViewInfo m_viewInfo = null;
145
        private boolean isPalette=false;
146

    
147
    /**
148
     * This is the default constructor
149
     */
150
    public Table() {
151
        super();
152
        initialize();
153
    }
154

    
155
    /**
156
     * DOCUMENT ME!
157
     *
158
     * @return DOCUMENT ME!
159
     */
160
    public ProjectTable getModel() {
161
        return model;
162
    }
163

    
164
    /**
165
     * DOCUMENT ME!
166
     *
167
     * @return DOCUMENT ME!
168
     */
169
    public BitSet getSelectedFieldIndices() {
170
        return headerSelectionSupport.getSelectedColumns();
171
    }
172

    
173
    /**
174
     * DOCUMENT ME!
175
     *
176
     * @return DOCUMENT ME!
177
     */
178
    public int[] getSelectedRowIndices() {
179
        return getTable().getSelectedRows();
180
    }
181

    
182
    /**
183
     * DOCUMENT ME!
184
     */
185
    private void refreshControls() {
186
        try {
187
            MainFrame mF = PluginServices.getMainFrame();
188

    
189
            if (mF != null) {
190
                PluginServices.getMDIManager().getViewInfo(Table.this).setTitle(PluginServices.getText(
191
                        this, "Tabla") + ": " + model.getName());
192
            }
193

    
194
            if (model.getAssociatedTable() != null) {
195
                this.fmap = ((FLayer) model.getAssociatedTable()).getFMap();
196
            } else {
197
                this.fmap = null;
198
            }
199

    
200
            SelectableDataSource dataSource = (SelectableDataSource) model.getModelo()
201
                                                                          .getRecordset();
202
            logger.debug("dataSource.start()");
203
            dataSource.start();
204

    
205

    
206
            ColumnModel cm=new ColumnModel();
207
            cm.setDataModel(model);
208
            getTable().setColumnModel(cm);
209

    
210
            AbstractTableModel dataModel = new DataSourceDataModel(model);
211

    
212
            getTable().setModel(dataModel);
213
            TableColumn column = null;
214
                        for (int i = 0; i < model.getColumnCount(); i++) {
215
                            column = table.getColumnModel().getColumn(i);
216
                            int w=model.getColumn(i).getWidth();
217
                            column.setPreferredWidth(w); //sport column is bigger
218

    
219
                        }
220
                        headerSelectionSupport.setTableHeader(getTable().getTableHeader());
221
            headerSelectionSupport.addFieldSelectionListener(new FieldSelectionListener() {
222
                    public void fieldSelected(FieldSelectionEvent e) {
223
                        if (PluginServices.getMainFrame() != null) {
224
                            PluginServices.getMainFrame().enableControls();
225
                        }
226
                    }
227
                });
228

    
229
            model.getModelo().getRecordset().addSelectionListener(selectionListener);
230

    
231
            updateSelection();
232
        } catch (DriverException e) {
233
            NotificationManager.addError("No se pudo leer la informaci?n", e);
234
        } catch (DriverLoadException e) {
235
            NotificationManager.addError("No se pudo leer la informaci?n", e);
236
        }
237
    }
238

    
239
    /**
240
     * DOCUMENT ME!
241
     *
242
     * @param table DOCUMENT ME!
243
     */
244
    public void setModel(ProjectTable table) {
245
        model = table;
246

    
247
        //Gesti?n del nombre de la ventana
248
        model.addPropertyChangeListener(new PropertyChangeListener() {
249
                public void propertyChange(PropertyChangeEvent evt) {
250
                    if (evt.getPropertyName().equals("name")) {
251
                        PluginServices.getMDIManager().getViewInfo(Table.this)
252
                                      .setTitle(PluginServices.getText(this,
253
                                "Tabla") + ": " + (String) evt.getNewValue());
254
                    } else if (evt.getPropertyName().equals("model")) {
255
                        refreshControls();
256
                    }
257
                }
258
            });
259

    
260
        refreshControls();
261
    }
262

    
263
    /**
264
     *
265
     */
266
    private void updateSelection() {
267
        updating = true;
268

    
269
        try {
270
            DefaultListSelectionModel sm = (DefaultListSelectionModel) getTable()
271
                                                                           .getSelectionModel();
272
            sm.clearSelection();
273

    
274
            BitSet bs = (model.getModelo().getRecordset()).getSelection();
275
            sm.setValueIsAdjusting(true);
276

    
277
            if (orderIndexes != null) {
278
                for (int i = 0; i < orderIndexes.length; i++) {
279
                    if (bs.get(i)) {
280
                        sm.addSelectionInterval((int) orderIndexesInverted[i],
281
                            (int) orderIndexesInverted[i]);
282
                    }
283
                }
284
            } else {
285
                for (int i = bs.nextSetBit(0); i >= 0;
286
                        i = bs.nextSetBit(i + 1)) {
287
                    sm.addSelectionInterval(i, i);
288
                }
289
            }
290

    
291
            sm.setValueIsAdjusting(false);
292
            try {
293
                numReg = model.getModelo().getRowCount();
294
            } catch (IOException e) {
295
                e.printStackTrace();
296
            }
297

    
298
            jLabelStatus.setText(" " +
299
                ((SelectableDataSource) model.getModelo().getRecordset()).getSelection()
300
                 .cardinality() + " / " + numReg + " " +
301
                PluginServices.getText(this, "registros_seleccionados_total") +
302
                ".");
303
        } catch (DriverIOException e) {
304
            e.printStackTrace();
305
        } catch (DriverLoadException e) {
306
            e.printStackTrace();
307
        }
308

    
309
        updating = false;
310
    }
311

    
312
    /**
313
     * This method initializes this
314
     */
315
    private void initialize() {
316
        jLabelStatus = new JLabel();
317
        setLayout(new java.awt.BorderLayout());
318
        jLabelStatus.setText("");
319
        jLabelStatus.setName("");
320
        jLabelStatus.setPreferredSize(new java.awt.Dimension(100, 18));
321
        add(getJScrollPane(), java.awt.BorderLayout.CENTER);
322
        this.add(jLabelStatus, java.awt.BorderLayout.SOUTH);
323
    }
324

    
325
    /**
326
     * This method initializes table
327
     *
328
     * @return javax.swing.JTable
329
     */
330
    public JTable getTable() {
331
        if (table == null) {
332
            table = new JTable();
333
            table.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);
334
            table.setSelectionModel(new DefaultListSelectionModel());
335
            table.getTableHeader().addMouseListener(new MouseHandler());
336
            table.addKeyListener(new TableKeyListener());
337
            table.addMouseListener(new MouseRow());
338
            table.setSelectionForeground(Color.blue);
339
                    table.setSelectionBackground(Color.yellow);
340
                    table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
341
                    public void valueChanged(ListSelectionEvent e) {
342

    
343
                            if (updating) {
344
                                 return;
345
                        }
346

    
347
                        SelectableDataSource dataModel = null;
348

    
349
                        try {
350
                            dataModel = Table.this.model.getModelo()
351
                                                        .getRecordset();
352
                        } catch (DriverLoadException e1) {
353
                            e1.printStackTrace();
354
                        }
355

    
356
                        DefaultListSelectionModel model = (DefaultListSelectionModel) table.getSelectionModel();
357
                        BitSet selection = dataModel.getSelection();
358

    
359
                        for (int i = e.getFirstIndex(); i <= e.getLastIndex();
360
                                i++) {
361
                            if (orderIndexes != null) {
362
                                selection.set((int) orderIndexes[i],
363
                                    model.isSelectedIndex(i));
364
                            } else {
365
                                selection.set(i, model.isSelectedIndex(i));
366
                            }
367
                        }
368

    
369
                        if (e.getValueIsAdjusting() == false) {
370
                            if (fmap != null) {
371
                                fmap.endAtomicEvent();
372
                            }
373

    
374
                            dataModel.fireSelectionEvents();
375
                        } else {
376
                            if (fmap != null) {
377
                                fmap.beginAtomicEvent();
378
                            }
379
                        }
380

    
381
                        jLabelStatus.setText(" " + selection.cardinality() +
382
                            " / " + numReg + " " +
383
                            PluginServices.getText(this,
384
                                "registros_seleccionados_total") + ".");
385

    
386
                    }
387
                });
388

    
389
                       JTextField tf=new JTextField();
390
                    table.setDefaultEditor(Number.class, new DefaultEditor(tf));
391
            table.setDefaultEditor(String.class, new DefaultEditor(tf));
392
            table.setDefaultEditor(Object.class, new DefaultEditor(tf));
393
        }
394

    
395
        return table;
396
    }
397
    protected class DefaultEditor extends DefaultCellEditor {
398
                public Component getTableCellEditorComponent(javax.swing.JTable table,
399
                                Object value, boolean isSelected, int row, int column) {
400
                        JTextField tf=(JTextField)super.getTableCellEditorComponent(table, value, isSelected,
401
                                        row, column);
402
                        if (isSelected){
403
                                tf.setBackground(new Color(230,220,220));
404
                                tf.selectAll();
405

    
406
                        }
407
                        return tf;
408
                }
409

    
410
                public DefaultEditor(JTextField tf) {
411
                        super(tf);
412
                        getComponent().addKeyListener(new KeyAdapter() {
413
                                int keyPressed = 0;
414

    
415
                                public void keyPressed(KeyEvent ke) {
416
                                        if (ke.getKeyCode() != KeyEvent.VK_TAB)
417
                                                keyPressed++;
418
                                        JTextField tf = (JTextField) getComponent();
419

    
420

    
421
                                        if (ke.getKeyCode() == KeyEvent.VK_RIGHT
422
                                                        || ke.getKeyCode() == KeyEvent.VK_ENTER) {
423
                                                int caretPosition = tf.getCaretPosition();
424
                                                if (caretPosition >= tf.getText().length()) {
425
                                                        int x = table.getSelectedColumn();
426
                                                        int y = table.getSelectedRow();
427
                                                        if (x + 1 >= table.getColumnCount()) {
428
                                                                x = 0;
429
                                                                y++;
430
                                                        } else {
431
                                                                x++;
432
                                                        }
433
                                                        //table.changeSelection(y, x, false, true);
434
                                                        //initEditField(x,y);
435
                                                        getComponent().setEnabled(false);
436
                                                }
437

    
438
                                        } else if (ke.getKeyCode() == KeyEvent.VK_LEFT) {
439
                                                int caretPosition = tf.getCaretPosition();
440
                                                if (caretPosition <= 0) {
441
                                                        int x = table.getSelectedColumn();
442
                                                        int y = table.getSelectedRow();
443
                                                        if (x == 0) {
444
                                                                x = table.getColumnCount() - 1;
445
                                                                if (y - 1 < 0)
446
                                                                        y = table.getRowCount() - 1;
447
                                                                else
448
                                                                        y--;
449
                                                        } else {
450
                                                                x--;
451
                                                        }
452
                                                        //table.changeSelection(y, x, false, true);
453
                                                        //initEditField(x,y);
454
                                                        getComponent().setEnabled(false);
455
                                                }
456

    
457
                                        }
458
                                }
459

    
460
                                public void keyReleased(KeyEvent ke) {
461
                                        JComponent editor = (JComponent) DefaultEditor.this
462
                                                        .getComponent();
463
                                        if (editor instanceof JTextField) {
464
                                                if (keyPressed == 0) {
465
                                                        ((JTextField) editor).setText(String.valueOf(ke
466
                                                                        .getKeyChar()));
467
                                                }
468
                                        }
469
                                        keyPressed--;
470
                                        if (keyPressed < 0)
471
                                                keyPressed = 0;
472
                                        getComponent().setEnabled(true);
473
                                }
474
                        });
475

    
476
                }
477

    
478
                public Object getCellEditorValue() {
479
                        String s = ((JTextField) (DefaultEditor.this.getComponent()))
480
                                        .getText();
481
                        getComponent().setEnabled(true);
482
                        // getComponent().setBackground(Color.orange);
483
                        return s;
484
                }
485

    
486
                public boolean isCellEditable(EventObject event) {
487
                        // IF NUMBER OF CLICKS IS LESS THAN THE CLICKCOUNTTOSTART RETURN
488
                        // FALSE
489
                        // FOR CELL EDITING.
490
                        if (event instanceof MouseEvent) {
491
                                return ((MouseEvent) event).getClickCount() >= getClickCountToStart();
492
                        }
493

    
494
                        return true;
495
                }
496
        }
497

    
498

    
499

    
500

    
501
    /**
502
         * This method initializes jScrollPane
503
         *
504
         * @return javax.swing.JScrollPane
505
         */
506
    private javax.swing.JScrollPane getJScrollPane() {
507
        if (jScrollPane == null) {
508
            jScrollPane = new javax.swing.JScrollPane();
509
            jScrollPane.setViewportView(getTable());
510
        }
511

    
512
        return jScrollPane;
513
    }
514

    
515
    /**
516
         * @see com.iver.mdiApp.ui.MDIManager.SingletonView#getViewModel()
517
         */
518
    public Object getViewModel() {
519
        return model;
520
    }
521

    
522
    /**
523
         * This method is used to get <strong>an initial</strong> ViewInfo object
524
         * for this Table. It is not intended to retrieve the ViewInfo object in a
525
         * later time. <strong>Use PluginServices.getMDIManager().getViewInfo(view)
526
         * to retrieve the ViewInfo object at any time after the creation of the
527
         * object.
528
         *
529
         * @see com.iver.mdiApp.ui.MDIManager.View#getViewInfo()
530
         */
531
    public ViewInfo getViewInfo() {
532
            if (m_viewInfo==null) {
533
                    m_viewInfo = new ViewInfo(ViewInfo.ICONIFIABLE |
534
                        ViewInfo.MAXIMIZABLE | ViewInfo.RESIZABLE);
535
                    m_viewInfo.setTitle(PluginServices.getText(this, "Tabla"));
536
                    m_viewInfo.setWidth(300);
537
                    m_viewInfo.setHeight(200);
538
            }
539
        return m_viewInfo;
540
    }
541

    
542
    /**
543
     * DOCUMENT ME!
544
     *
545
     * @param indexes
546
     *
547
     * @throws IOException
548
     */
549
    public void setOrder(long[] indexes) throws IOException {
550
        orderIndexes = indexes;
551
        orderIndexesInverted = new long[orderIndexes.length];
552

    
553
        for (int i = 0; i < indexes.length; i++) {
554
            orderIndexesInverted[(int) indexes[i]] = i;
555
        }
556

    
557
        updating = true;
558
        ((DataSourceDataModel) getTable().getModel()).fireTableDataChanged();
559
        updating = false;
560
        updateSelection();
561
    }
562

    
563
    /*  public void startEditing() throws DriverException{
564
       // dw = model.getModelo().getDataWare(DataSourceFactory.DATA_WARE_COHERENT_ROW_ORDER);
565
       // dw.beginTrans();
566
       }
567
     */
568

    
569
    /**
570
     * DOCUMENT ME!
571
     */
572

    
573
    /*  public void cancelEditing() throws DriverException {
574
       dw.rollBackTrans();
575
       dw = null;
576
       }
577
     */
578

    
579
    /**
580
     * DOCUMENT ME!
581
     */
582

    
583
    /*  public void stopEditing() throws DriverException {
584
       // dw.commitTrans();
585
       // dw = null;
586
       // model.getModelo().stop();
587
       // model.getModelo().start();
588
       }
589
     */
590

    
591
    /**
592
     * DOCUMENT ME!
593
     */
594

    
595
    /*  public boolean isEditing() {
596
       return dw != null;
597
       }
598
     */
599

    
600
    /**
601
     * Quita los campos seleccionados
602
     */
603
    public void clearSelectedFields() {
604
        headerSelectionSupport.clearSelectedColumns();
605
    }
606

    
607
    /**
608
     * DOCUMENT ME!
609
     *
610
     * @param index DOCUMENT ME!
611
     *
612
     * @return DOCUMENT ME!
613
     */
614
    public Value[] getValueRow(int index) {
615
        DataSourceDataModel dsdm = (DataSourceDataModel) getTable().getModel();
616
        Value[] values = new Value[dsdm.getColumnCount()];
617

    
618
        for (int i = 0; i < dsdm.getColumnCount(); i++) {
619
            values[i] = (Value) dsdm.getValueAt(index, i);
620
        }
621

    
622
        return values;
623
    }
624

    
625
    /* private void refresh() throws DriverException{
626
       //dw.commitTrans();
627
       //model.getModelo().stop();
628
       //dw.beginTrans();
629
           //DataSourceDataModel dsdm=(DataSourceDataModel)getTable().getModel();
630
           //dsdm.fireTableDataChanged();
631
       }*/
632
    /*  public void addEmptyRow() throws DriverException{
633
       ValueCollection valuePK=new ValueCollection();
634
           valuePK.setValues(new Value[]{ValueFactory.createValue(dw.getRowCount())});
635
           dw.insertEmptyRow(valuePK);
636
           refresh();
637
       }
638
     */
639
    /*        public void copySelectedRows() throws DriverException{
640
       int[] sel=getSelectedRowIndices();
641
       for(int i=0;i<sel.length;i++){
642
               rowsCopied.add(getValueRow(sel[i]));
643
       }
644
       }
645
     */
646
    /*        public void addSelectionToEnd() throws DriverException {
647
       for (int i=0;i<rowsCopied.size();i++){
648
               dw.insertFilledRow((Value[])rowsCopied.get(i));
649
       }
650
       refresh();
651
       }
652
     */
653
    /*public void delSelectionRow() throws DriverException{
654
       int[] sel=getSelectedRowIndices();
655
       for(int i=sel.length-1;i>=0;i--){
656
               dw.deleteRow(sel[i]);
657
       }
658
       refresh();
659
       }
660
     */
661
    /*public boolean isCopy(){
662
       return !rowsCopied.isEmpty();
663
       }
664
     */
665
    /*
666
       public void addSelectionToRow() throws DriverException {
667
                   int[] sel=getSelectedRowIndices();
668
                           dw.insertFilledRow((Value[])rowsCopied.get(i),sel[0]);
669
                   refresh();
670
           }
671
     */
672
    public void startEditing() throws EditionException {
673
       getModel().getModelo().startEdition();
674
       int row=table.getSelectedRow();
675
       int column=table.getSelectedColumn();
676
       if (row!=-1 && column!=-1)
677
               initEditField(column,row);
678

    
679
       View[] views = (View[]) PluginServices.getMDIManager().getAllViews();
680

    
681
                for (int i=0 ; i<views.length ; i++){
682
                        if (views[i] instanceof com.iver.cit.gvsig.gui.View){
683
                                com.iver.cit.gvsig.gui.View view=(com.iver.cit.gvsig.gui.View)views[i];
684
                                FLayers layers =view.getMapControl().getMapContext().getLayers();
685
                                for (int j=0;j<layers.getLayersCount();j++){
686
                                        if (layers.getLayer(i).equals(this.getModel().getAssociatedTable())){
687
                                                view.showConsole();
688
                                                ((FLyrVect)layers.getLayer(i)).setEditing(true);
689
                                        }
690
                                }
691
                        }
692
                }
693
    }
694
    private void initEditField(int x,int y){
695
            if (isEditing()){
696
            table.editCellAt(y,x);
697
        JTextField tf=(JTextField)table.getEditorComponent();
698
        if (tf!=null){
699
                tf.selectAll();
700
        }
701
        getTable().setRowSelectionInterval(y,y);
702
        getTable().setColumnSelectionInterval(x,x);
703
            }
704
    }
705
    /**
706
     * DOCUMENT ME!
707
     */
708
    public void stopEditing() {
709
        try {
710
            FLyrVect lyr = (FLyrVect) getModel().getAssociatedTable();
711

    
712
            if ((lyr != null) &&
713
                    lyr.getSource() instanceof VectorialEditableAdapter) {
714
                JFileChooser jfc = new JFileChooser();
715
                SimpleFileFilter filterShp = new SimpleFileFilter("shp",
716
                        "Ficheros .shp");
717
                jfc.setFileFilter(filterShp);
718

    
719
                if (jfc.showSaveDialog(
720
                            (Component) PluginServices.getMainFrame()) == JFileChooser.APPROVE_OPTION) {
721
                    File newFile = jfc.getSelectedFile();
722

    
723
                    //VectorialEditableAdapter vea = (VectorialEditableAdapter) layer.getSource();
724
                    // File newFile = vea.getDriver().
725
                    VectorialEditableAdapter vea = (VectorialEditableAdapter) lyr.getSource();
726
                    ShpWriter writer = (ShpWriter)LayerFactory.getWM().getWriter("Shape Writer");
727
                    writer.setFile(newFile);
728
                    writer.initialize(lyr);
729
                    vea.stopEdition(writer);
730
                    lyr.setSource(vea.getOriginalAdapter());
731
                    lyr.setEditing(false);
732

    
733

    
734
                    View[] views = (View[]) PluginServices.getMDIManager().getAllViews();
735

    
736
                            for (int i=0 ; i<views.length ; i++){
737
                                    if (views[i] instanceof com.iver.cit.gvsig.gui.View){
738
                                            com.iver.cit.gvsig.gui.View view=(com.iver.cit.gvsig.gui.View)views[i];
739
                                            FLayers layers =view.getMapControl().getMapContext().getLayers();
740
                                            for (int j=0;j<layers.getLayersCount();j++){
741
                                                    if (layers.getLayer(i).equals(this.getModel().getAssociatedTable())){
742
                                                            view.showConsole();
743
                                                            ((FLyrVect)layers.getLayer(i)).setEditing(false);
744
                                                    }
745
                                            }
746
                                    }
747
                            }
748

    
749

    
750

    
751
                    ///vista.hideConsole();
752
                }
753
            } else {
754

    
755
                     JFileChooser jfc = new JFileChooser();
756
                 SimpleFileFilter filterShp = new SimpleFileFilter("dbf",
757
                         "Ficheros .dbf");
758
                 jfc.setFileFilter(filterShp);
759

    
760
                 if (jfc.showSaveDialog(
761
                             (Component) PluginServices.getMainFrame()) == JFileChooser.APPROVE_OPTION) {
762
                     File newFile = jfc.getSelectedFile();
763

    
764
                     IEditableSource ies=getModel().getModelo();
765
                     DbfWriter writer = (DbfWriter)LayerFactory.getWM().getWriter("DBF Writer");
766
                     writer.initialize(newFile,getModel().getModelo());
767
                     ies.stopEdition(writer);
768

    
769
                     ///vista.hideConsole();
770
                 }
771

    
772
/*
773
                GdbmsWriter gdbmswriter = new GdbmsWriter(getModel().getModelo()
774
                                                              .getRecordset()
775
                                                              .getDataWare(DataSourceFactory.DATA_WARE_COHERENT_ROW_ORDER));
776
                gdbmswriter.preProcess();
777

778
                for (int i = 0; i < getModel().getModelo().getRowCount();
779
                        i++) {
780
                    gdbmswriter.process(getModel().getModelo().getRow(i));
781
                }
782

783
                gdbmswriter.postProcess();
784
  */
785
            }
786

    
787
            //layer.setSource(getModel().getModelo().getOriginalAdapter());
788
            //layer.setEditing(false);
789
            //vista.hideConsole();
790
            //}
791
        } catch (Exception e) {
792
            NotificationManager.addError("No se pudo guardar la edici?n", e);
793
        }
794
    }
795

    
796
    /**
797
     * DOCUMENT ME!
798
     *
799
     * @param index DOCUMENT ME!
800
     */
801
    public void hideColumns(int[] index) {
802
        // TODO Auto-generated method stub
803
    }
804

    
805
    /**
806
     * DOCUMENT ME!
807
     *
808
     * @param index DOCUMENT ME!
809
     */
810
    public void setUneditableColumns(int[] index) {
811
        // TODO Auto-generated method stub
812
    }
813

    
814
    /**
815
     * DOCUMENT ME!
816
     *
817
     * @param numColumns DOCUMENT ME!
818
     * @param values DOCUMENT ME!
819
     */
820
    public void setDefaultValues(int[] numColumns, Value[] values) {
821
        // TODO Auto-generated method stub
822
    }
823

    
824
    /**
825
     * DOCUMENT ME!
826
     *
827
     * @return DOCUMENT ME!
828
     */
829
    public Value getDefaultValue() {
830
        // TODO Auto-generated method stub
831
        return null;
832
    }
833

    
834
    /**
835
     * DOCUMENT ME!
836
     *
837
     * @return DOCUMENT ME!
838
     */
839
    public int[] getSelectedColumns() {
840
        return null;
841
    }
842

    
843
    /**
844
     * DOCUMENT ME!
845
     *
846
     * @throws IOException DOCUMENT ME!
847
     */
848
    public void cancelEditing() throws IOException {
849
        getModel().getModelo().cancelEdition();
850
        refresh();
851
    }
852

    
853
    /**
854
     * DOCUMENT ME!
855
     *
856
     * @return DOCUMENT ME!
857
     */
858
    public boolean isEditing() {
859
        return getModel().getModelo().isEditing();
860
    }
861

    
862
    /**
863
     * DOCUMENT ME!
864
     */
865
    public void refresh() {
866
            int row=table.getSelectedRow();
867
            int column=table.getSelectedColumn();
868
            if (row!=-1 && column!=-1 && table.getEditorComponent()!=null){
869
                    Value[] values=getValueRow(row);
870
                    JTextField jtf=(JTextField)table.getEditorComponent();
871
                    jtf.setText(values[column].toString());
872
            }
873
        updating = true;
874
        ((DataSourceDataModel) getTable().getModel()).fireTableDataChanged();
875

    
876
        updating = false;
877
        updateSelection();
878

    
879

    
880
    }
881

    
882
    /**
883
     * Add the rows that are passed like parameter and if parameter is null a
884
     * row is added empties.
885
     *
886
     * @param rows Rows to add or null.
887
     *
888
     * @throws DriverIOException
889
     * @throws IOException
890
     */
891
    public void addRow(IRow[] rows) throws DriverIOException, IOException {
892
        try {
893
            if (rows == null) {
894
                    if (getModel().getAssociatedTable()!=null){
895
                            JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),"No se puede a?adir una fila a una tabla asociada a una capa.");
896
                            return;
897
                    }
898
                IRow row;
899
                int numAttr=getModel().getModelo()
900
                        .getRecordset()
901
                        .getFieldCount();
902
                    Value[] values=new Value[numAttr];
903
                    for (int i=0;i<numAttr;i++){
904
                            values[i]=ValueFactory.createNullValue();
905
                    }
906
                row = new DefaultRow(values);
907
                getModel().getModelo().addRow(row,"Fila en blanco");
908
            } else {
909
                    getModel().getModelo().startComplexRow();
910
                for (int i = 0; i < rows.length; i++) {
911
                    getModel().getModelo().addRow(((IRowEdited) rows[i]).getLinkedRow(),"Pegar filas");
912
                }
913
                getModel().getModelo().endComplexRow();
914
            }
915
        } catch (DriverException e) {
916
            // TODO Auto-generated catch block
917
            e.printStackTrace();
918
        } catch (DriverLoadException e) {
919
            // TODO Auto-generated catch block
920
            e.printStackTrace();
921
        }
922

    
923
        refresh();
924
    }
925

    
926
    /**
927
     * Copy in the arraylist the rows that be selected just then.
928
     *
929
     * @throws DriverIOException
930
     * @throws IOException
931
     */
932
    public void copyRow() throws DriverIOException, IOException {
933
        int[] index = getSelectedRowIndices();
934
        rowsCopied = new IRow[index.length];
935

    
936
        for (int i = 0; i < index.length; i++) {
937
            rowsCopied[i] = getModel().getModelo().getRow(index[i]);
938
        }
939
    }
940

    
941
    /**
942
     * Cut the rows that be selected just then.
943
     *
944
     * @throws DriverIOException
945
     * @throws IOException
946
     */
947
    public void cutRow() throws DriverIOException, IOException {
948
        int[] index = getSelectedRowIndices();
949
        rowsCopied = new IRow[index.length];
950

    
951
        for (int i = 0; i < index.length; i++) {
952
            rowsCopied[i] = getModel().getModelo().getRow(index[i]);
953
        }
954

    
955
        removeRow();
956
    }
957

    
958
    /**
959
     * Remove in the rows that be selected just then.
960
     *
961
     * @throws DriverIOException
962
     * @throws IOException
963
     */
964
    public void removeRow() throws DriverIOException, IOException {
965
        int[] index = getSelectedRowIndices();
966
        getModel().getModelo().startComplexRow();
967
        for (int i = 0; i < index.length; i++) {
968
            getModel().getModelo().removeRow(index[i],"Eliminar fila");
969
        }
970
        getModel().getModelo().endComplexRow();
971
        refresh();
972
    }
973

    
974
    /**
975
     * DOCUMENT ME!
976
     */
977
    public void addColumn() {
978
        // TODO Auto-generated method stub
979
        refresh();
980
    }
981

    
982
    /**
983
     * DOCUMENT ME!
984
     */
985
    public void removeColumn() {
986
        // TODO Auto-generated method stub
987
        refresh();
988
    }
989

    
990
    /**
991
     * Return if we have rows copied or not.
992
     *
993
     * @return True if we have rows copied.
994
     */
995
    public boolean isCopied() {
996
        return (rowsCopied != null);
997
    }
998

    
999
    /**
1000
     * Paste the arraylist rows.
1001
     *
1002
     * @throws DriverIOException
1003
     * @throws IOException
1004
     */
1005
    public void pasteRow() throws DriverIOException, IOException {
1006
        addRow(rowsCopied);
1007
    }
1008

    
1009
    /**
1010
     * DOCUMENT ME!
1011
     */
1012
    public void viewActivated() {
1013
        //if (isEditing() && getModel().getModelo() instanceof VectorialEditableAdapter)
1014
        updateSelection();
1015
    }
1016

    
1017
    /**
1018
     * DOCUMENT ME!
1019
     */
1020
    public void viewClosed() {
1021
        // TODO Auto-generated method stub
1022
    }
1023

    
1024
    /**
1025
     * DOCUMENT ME!
1026
     *
1027
     * @author Fernando Gonz?lez Cort?s
1028
     */
1029
    public class DataSourceDataModel extends AbstractTableModel {
1030
        //private SelectableDataSource dataSource;
1031
        private IEditableSource des;
1032
        private String[] aliases;
1033
        private int[] mapping;
1034

    
1035
        /**
1036
         * Crea un nuevo DataSourceDataModel.
1037
         *
1038
         * @param pt DOCUMENT ME!
1039
         */
1040
        public DataSourceDataModel(ProjectTable pt) {
1041
            this.des = pt.getModelo();
1042

    
1043
            //try {
1044
            //dataSource = pt.getModelo().getRecordset();
1045
            //} catch (DriverLoadException e) {
1046
            // TODO Auto-generated catch block
1047
            //        e.printStackTrace();
1048
            //}
1049
            aliases = pt.getAliases();
1050
            mapping = pt.getMapping();
1051
        }
1052

    
1053
        /**
1054
         * Returns the name of the field.
1055
         *
1056
         * @param col index of field
1057
         *
1058
         * @return Name of field
1059
         */
1060
        public String getColumnName(int col) {
1061
            return aliases[mapping[col]];
1062
        }
1063

    
1064
        /**
1065
         * Returns the number of fields.
1066
         *
1067
         * @return number of fields
1068
         */
1069
        public int getColumnCount() {
1070
            return mapping.length;
1071
        }
1072

    
1073
        /**
1074
         * Returns number of rows.
1075
         *
1076
         * @return number of rows.
1077
         */
1078
        public int getRowCount() {
1079
            try {
1080
                return (int) des.getRowCount();
1081
            } catch (DriverIOException e) {
1082
                return 0;
1083
            } catch (IOException e) {
1084
                return 0;
1085
            }
1086
        }
1087

    
1088
        /**
1089
         * DOCUMENT ME!
1090
         *
1091
         * @param row DOCUMENT ME!
1092
         * @param col DOCUMENT ME!
1093
         *
1094
         * @return DOCUMENT ME!
1095
         */
1096
        public Object getValueAt(int row, int col) {
1097
            SelectableDataSource sds=des.getRecordset();
1098

    
1099
                try {
1100
                                if (orderIndexes != null) {
1101
                                        return sds.getFieldValue(row, col);
1102
                                } else {
1103
                                        Object obj = sds.getFieldValue(row, col);
1104
                                        return obj;
1105
                                }
1106
                        } catch (DriverException e) {
1107
                                return ValueFactory.createValue("").toString();
1108
                        }
1109
            }
1110

    
1111
        /**
1112
         * DOCUMENT ME!
1113
         *
1114
         * @param rowIndex DOCUMENT ME!
1115
         * @param columnIndex DOCUMENT ME!
1116
         *
1117
         * @return DOCUMENT ME!
1118
         */
1119
        public boolean isCellEditable(int rowIndex, int columnIndex) {
1120
            return isEditing();
1121
        }
1122

    
1123
        /**
1124
         * DOCUMENT ME!
1125
         *
1126
         * @param aValue DOCUMENT ME!
1127
         * @param rowIndex DOCUMENT ME!
1128
         * @param columnIndex DOCUMENT ME!
1129
         *
1130
         * @throws RuntimeException DOCUMENT ME!
1131
         */
1132
        public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
1133
            Value v;
1134
            if (getValueAt(rowIndex,columnIndex).toString().equals(aValue))
1135
                    return;
1136
            try {
1137
                v = ValueFactory.createValueByType(aValue.toString(),
1138
                        des.getRecordset().getFieldType(columnIndex));
1139

    
1140
                IRowEdited row = des.getRow(rowIndex); //.getAttribute(columnIndex);
1141
                Value[] values = row.getAttributes();
1142
                values[columnIndex] = v;
1143

    
1144
                IRow newRow = null;
1145

    
1146
                if (row.getLinkedRow() instanceof IFeature) {
1147
                    IGeometry geometry = ((DefaultFeature) row.getLinkedRow()).getGeometry();
1148
                    newRow = new DefaultFeature(geometry, values);
1149
                } else {
1150
                    newRow = new DefaultRow(values);
1151
                }
1152

    
1153
                des.modifyRow(rowIndex, newRow,"Editar valor");
1154
            } catch (DriverException e1) {
1155
                throw new RuntimeException(e1);
1156
            } catch (ParseException e) {
1157
                throw new RuntimeException(e);
1158
            } catch (DriverLoadException e) {
1159
                throw new RuntimeException(e);
1160
            } catch (DriverIOException e) {
1161
                throw new RuntimeException(e);
1162
            } catch (IOException e) {
1163
                throw new RuntimeException(e);
1164
            } catch (NumberFormatException e) {
1165
                        /*        NotificationManager.addError(PluginServices.getText(this,"numero_incorrecto")+
1166
                                                "\n"+PluginServices.getText(this,"fila")+" = "+rowIndex+
1167
                                                "\n"+PluginServices.getText(this,"columna")+ " = "+columnIndex,e);
1168
                        */
1169
                        }
1170
        }
1171
    }
1172
    public class ColumnModel extends DefaultTableColumnModel{
1173
            private ProjectTable pt;
1174
                public ColumnModel() {
1175
                }
1176

    
1177
                public void setDataModel(ProjectTable model) {
1178
                        this.pt=model;
1179
                }
1180

    
1181
                public void addColumn(TableColumn tc) {
1182
                        super.addColumn(tc);
1183
                }
1184

    
1185
                public TableColumn getColumn(int i) {
1186
                        TableColumn tc=super.getColumn(i);
1187
                        return tc;
1188
                }
1189

    
1190
                public int getColumnCount() {
1191
                        return super.getColumnCount();
1192
                }
1193

    
1194
                public void removeColumn(TableColumn arg0) {
1195
                        super.removeColumn(arg0);
1196
                }
1197

    
1198
                public int getColumnIndex(Object arg0) {
1199
                        return super.getColumnIndex(arg0);
1200
                }
1201

    
1202
                public int getColumnIndexAtX(int arg0) {
1203
                        return super.getColumnIndexAtX(arg0);
1204
                }
1205

    
1206
                public int getColumnMargin() {
1207
                        return super.getColumnMargin();
1208
                }
1209

    
1210
                public Enumeration getColumns() {
1211
                        return super.getColumns();
1212
                }
1213

    
1214
                public int getTotalColumnWidth() {
1215
                        int w=0;
1216
                        for (int i=0;i<getColumnCount();i++){
1217
                                w+=pt.getColumn(i).getWidth();
1218
                        }
1219
                        return super.getTotalColumnWidth();
1220
                }
1221

    
1222
                public void moveColumn(int arg0, int arg1) {
1223
                        super.moveColumn(arg0, arg1);
1224
                }
1225

    
1226
                public void addColumnModelListener(TableColumnModelListener arg0) {
1227
                        super.addColumnModelListener(arg0);
1228
                }
1229

    
1230
                protected ListSelectionModel createSelectionModel() {
1231
                        return super.createSelectionModel();
1232
                }
1233

    
1234
                protected void fireColumnAdded(TableColumnModelEvent arg0) {
1235
                        super.fireColumnAdded(arg0);
1236
                }
1237

    
1238
                protected void fireColumnMarginChanged() {
1239
                        super.fireColumnMarginChanged();
1240
                }
1241

    
1242
                protected void fireColumnMoved(TableColumnModelEvent arg0) {
1243
                        super.fireColumnMoved(arg0);
1244
                }
1245

    
1246
                protected void fireColumnRemoved(TableColumnModelEvent arg0) {
1247
                        super.fireColumnRemoved(arg0);
1248
                }
1249

    
1250
                protected void fireColumnSelectionChanged(ListSelectionEvent arg0) {
1251
                        super.fireColumnSelectionChanged(arg0);
1252
                }
1253

    
1254
                public TableColumnModelListener[] getColumnModelListeners() {
1255
                        return super.getColumnModelListeners();
1256
                }
1257

    
1258
                public boolean getColumnSelectionAllowed() {
1259
                        return super.getColumnSelectionAllowed();
1260
                }
1261

    
1262
                public EventListener[] getListeners(Class arg0) {
1263
                        return super.getListeners(arg0);
1264
                }
1265

    
1266
                public int getSelectedColumnCount() {
1267
                        return super.getSelectedColumnCount();
1268
                }
1269

    
1270
                public int[] getSelectedColumns() {
1271
                        return super.getSelectedColumns();
1272
                }
1273

    
1274
                public ListSelectionModel getSelectionModel() {
1275
                        return super.getSelectionModel();
1276
                }
1277

    
1278
                public void propertyChange(PropertyChangeEvent arg0) {
1279
                        super.propertyChange(arg0);
1280
                        int w=((Integer)arg0.getNewValue()).intValue();
1281
                        if (arg0.getSource() instanceof TableColumn && (w!=75)){
1282
                                TableColumn tc=(TableColumn)arg0.getSource();
1283
                                Column column=pt.getColumn(tc.getModelIndex());
1284
                                column.setWidth(w);
1285
                                System.out.println("Index guardar = "+tc.getModelIndex()+" , "+"Anchura = "+w);
1286
                        }
1287

    
1288
                }
1289
                protected void recalcWidthCache() {
1290
                        super.recalcWidthCache();
1291
                }
1292

    
1293
                public void removeColumnModelListener(TableColumnModelListener arg0) {
1294
                        super.removeColumnModelListener(arg0);
1295
                }
1296

    
1297
                public void setColumnMargin(int arg0) {
1298
                        super.setColumnMargin(arg0);
1299
                }
1300

    
1301
                public void setColumnSelectionAllowed(boolean arg0) {
1302
                        super.setColumnSelectionAllowed(arg0);
1303
                }
1304

    
1305
                public void setSelectionModel(ListSelectionModel arg0) {
1306
                        super.setSelectionModel(arg0);
1307
                }
1308

    
1309
                public void valueChanged(ListSelectionEvent arg0) {
1310
                        super.valueChanged(arg0);
1311
                }
1312

    
1313
                public int hashCode() {
1314
                        return super.hashCode();
1315
                }
1316

    
1317
                protected void finalize() throws Throwable {
1318
                        super.finalize();
1319
                }
1320

    
1321
                protected Object clone() throws CloneNotSupportedException {
1322
                        return super.clone();
1323
                }
1324

    
1325
                public boolean equals(Object arg0) {
1326
                        return super.equals(arg0);
1327
                }
1328

    
1329
                public String toString() {
1330
                        return super.toString();
1331
                }
1332
        }
1333
    /**
1334
     * DOCUMENT ME!
1335
     *
1336
     * @author Vicente Caballero Navarro
1337
     */
1338
    public class TableSelectionListener implements SelectionListener {
1339
        /**
1340
         * @see com.iver.cit.gvsig.fmap.layers.LegendListener#selectionChanged(com.iver.cit.gvsig.fmap.layers.LayerEvent)
1341
         */
1342
        public void selectionChanged(SelectionEvent e) {
1343
            updateSelection();
1344
            Table.this.repaint();
1345
        }
1346
    }
1347

    
1348
    /**
1349
     * DOCUMENT ME!
1350
     *
1351
     * @author Vicente Caballero Navarro
1352
     */
1353
    private class MouseHandler extends MouseAdapter {
1354
        /**
1355
         * DOCUMENT ME!
1356
         *
1357
         * @param e DOCUMENT ME!
1358
         */
1359
        public void mouseClicked(MouseEvent e) {
1360
            /* JTableHeader h = (JTableHeader) e.getSource();
1361
               TableColumnModel columnModel = h.getColumnModel();
1362
               int viewColumn = columnModel.getColumnIndexAtX(e.getX());
1363
               int column = columnModel.getColumn(viewColumn).getModelIndex();
1364
               if (column != -1) {
1365
               }*/
1366
        }
1367
    }
1368
    /**
1369
     * DOCUMENT ME!
1370
     *
1371
     * @author Vicente Caballero Navarro
1372
     */
1373
    private class TableKeyListener implements KeyListener {
1374

    
1375
                public void keyPressed(KeyEvent arg0) {
1376
                        //JTextField tf=(JTextField)table.getEditorComponent();
1377
                        //table.setCellSelectionEnabled(true);
1378
                        //FocusManager fm = FocusManager.getCurrentManager();
1379
                        //fm.focusPreviousComponent(table);
1380
                }
1381

    
1382
                public void keyReleased(KeyEvent ke) {
1383
                        int row=table.getSelectedRow();
1384
                    int column=table.getSelectedColumn();
1385
                    initEditField(column,row);
1386
                }
1387

    
1388
                public void keyTyped(KeyEvent arg0) {
1389
                        // TODO Auto-generated method stub
1390

    
1391
                }
1392

    
1393
    }
1394

    
1395
    /**
1396
     * DOCUMENT ME!
1397
     *
1398
     * @author Vicente Caballero Navarro
1399
     */
1400
    private class MouseRow extends MouseAdapter {
1401
               public void mouseReleased(MouseEvent arg0) {
1402
                        super.mouseReleased(arg0);
1403
                        int row=table.getSelectedRow();
1404
                    int column=table.getSelectedColumn();
1405
                    initEditField(column,row);
1406
                }
1407

    
1408
                /**
1409
         * DOCUMENT ME!
1410
         *
1411
         * @param e DOCUMENT ME!
1412
         */
1413
        public void mouseClicked(MouseEvent e) {
1414
            super.mouseClicked(e);
1415
                PluginServices.getMainFrame().enableControls();
1416

    
1417
            if (e.getButton() == MouseEvent.BUTTON3) {
1418
                new PopupMenu(e.getPoint());
1419
            }
1420
        }
1421
    }
1422

    
1423
        public void commandRepaint() {
1424
                refresh();
1425
        }
1426

    
1427
        public void commandRefresh() {
1428
                commandRepaint();
1429
        }
1430

    
1431
        public void toPalette() {
1432
                isPalette=true;
1433
                m_viewInfo = new ViewInfo(ViewInfo.ICONIFIABLE |
1434
                                ViewInfo.MODELESSDIALOG | ViewInfo.RESIZABLE | ViewInfo.PALETTE);
1435
        PluginServices.getMDIManager().changeViewInfo(this,getViewInfo());
1436
        }
1437

    
1438
        public void restore() {
1439
                isPalette=false;
1440
                m_viewInfo = new ViewInfo(ViewInfo.ICONIFIABLE |
1441
                    ViewInfo.MAXIMIZABLE | ViewInfo.RESIZABLE);
1442
                PluginServices.getMDIManager().changeViewInfo(this,getViewInfo());
1443
        }
1444

    
1445
        public boolean isPalette() {
1446
                return isPalette;
1447
        }
1448

    
1449

    
1450
        private void addNumbers(){
1451
                TableColumn tc=new TableColumn();
1452
                tc.setWidth(40);
1453
                tc.setResizable(false);
1454
                getTable().addColumn(tc);
1455
        }
1456
        public static void main(String[] args) {
1457
                JTextField tf=new JTextField("hola");
1458
                tf.selectAll();
1459
                JFrame frame=new JFrame();
1460
                frame.getContentPane().add(tf);
1461
                frame.show(true);
1462
        }
1463
}