Statistics
| Revision:

svn-gvsig-desktop / branches / v2_0_0_prep / applications / appgvSIG / src / com / iver / cit / gvsig / gui / command / CommandStackDialog.java @ 27243

History | View | Annotate | Download (9.11 KB)

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

    
3
import java.awt.*;
4

    
5
import javax.swing.*;
6
import javax.swing.table.DefaultTableCellRenderer;
7
import javax.swing.table.TableColumn;
8

    
9
import org.gvsig.fmap.dal.DataStoreNotification;
10
import org.gvsig.gui.beans.DefaultBean;
11
import org.gvsig.tools.observer.Observable;
12
import org.gvsig.tools.observer.Observer;
13
import org.gvsig.tools.undo.UndoRedoInfo;
14
import org.gvsig.tools.undo.UndoRedoStack;
15

    
16
import com.iver.andami.PluginServices;
17
import com.iver.andami.ui.mdiManager.IWindowListener;
18
import com.iver.andami.ui.mdiManager.SingletonWindow;
19
import com.iver.andami.ui.mdiManager.WindowInfo;
20

    
21
public class CommandStackDialog extends DefaultBean implements SingletonWindow, IWindowListener,Observer{
22

    
23
        private JTable jTable = null;
24
        private JPanel jPanel = null;
25
        private UndoRedoStack undoRedoStack;
26
        private JSlider jSlider = null;
27
        //private int itemCount;
28
        private int lowLimit;
29
        private int currentValue=-1;
30
        private JPanel jPanel1 = null;
31
        protected boolean refreshing;
32
        private JPanel pCenter = null;
33
        private JScrollPane jScrollPane = null;
34
        private static final ImageIcon imodify=PluginServices.getIconTheme()
35
                .get("edition-modify-command");
36
        private static final ImageIcon iadd= PluginServices.getIconTheme()
37
                .get("edition-add-command");
38

    
39
        private static final ImageIcon idel = PluginServices.getIconTheme()
40
                .get("edition-del-command");
41

    
42
        private MyModel mymodel = null;
43
        /**
44
         * This is the default constructor
45
         */
46
        public CommandStackDialog() {
47
                super();
48
                initialize();
49
        }
50
        public void setModel(UndoRedoStack cr1){
51
        if (this.undoRedoStack != null) {
52
            if (this.undoRedoStack.equals(cr1)) {
53
                return;
54
            } else {
55
                this.undoRedoStack.deleteObserver(this);
56
            }
57
                }
58
                this.undoRedoStack=cr1;
59
                this.undoRedoStack.addObserver(this);
60
                initTable();
61
                initSlider();
62
                currentValue=mymodel.getPos();
63
            refreshControls();
64
                refreshScroll();
65
        }
66
        /**
67
         * This method initializes this
68
         *
69
         * @return void
70
         */
71
        private void initialize() {
72
                this.setLayout(new BorderLayout());
73
                this.setSize(328, 229);
74
                this.add(getJPanel(), java.awt.BorderLayout.NORTH);
75
                this.add(getJScrollPane(), java.awt.BorderLayout.CENTER);
76
        }
77

    
78
        /**
79
         * This method initializes jList
80
         *
81
         * @return javax.swing.JList
82
         */
83
        private JTable getTable() {
84
                if (jTable == null) {
85
                        jTable = new JTable();
86
                }
87
                return jTable;
88
        }
89
        private void initTable(){
90
                mymodel=new MyModel(undoRedoStack);
91
                jTable.setModel(mymodel);
92
                jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
93
                jTable.setSelectionBackground(Color.orange);
94
                jTable.setSelectionForeground(Color.black);
95
                jTable.setShowGrid(false);
96
                jTable.getTableHeader().setBackground(Color.white);
97
                TableColumn tc = jTable.getColumnModel().getColumn(0);
98
                tc.setCellRenderer(new DefaultTableCellRenderer() {
99
                           public Component getTableCellRendererComponent(JTable table,
100
                                                                       Object value,
101
                                                                       boolean isSelected,
102
                                                                       boolean hasFocus,
103
                                                                       int row,
104
                                                                       int column)
105
                              {
106
                                 JLabel label = (JLabel)
107
                                    super.getTableCellRendererComponent
108
                                       (table, value, isSelected, hasFocus, row, column);
109
                                    UndoRedoInfo info = (UndoRedoInfo) value;
110
                                    switch (info.getType()) {
111
                            case UndoRedoInfo.INSERT:
112
                                label.setIcon(iadd);
113
                                break;
114
                            case UndoRedoInfo.DELETE:
115
                                label.setIcon(idel);
116
                                break;
117
                            default:
118
                                label.setIcon(imodify);
119
                        }
120
                                 if (mymodel.getPos()<row){
121
                                         label.setBackground(Color.lightGray);
122
                                 }else {
123
                                                label.setBackground(Color.orange);
124
                                 }
125
                                    return label;
126
                              }
127
                        });
128

    
129
                jTable.addMouseListener(new java.awt.event.MouseAdapter() {
130
                        public void mousePressed(java.awt.event.MouseEvent e) {
131
                                int newpos=jTable.getSelectedRow();
132
                                mymodel.setPos(newpos);
133
                                PluginServices.getMainFrame().enableControls();
134
                        }
135
                });
136
        }
137
        /**
138
         * This method initializes jPanel
139
         *
140
         * @return javax.swing.JPanel
141
         */
142
        private JPanel getJPanel() {
143
                if (jPanel == null) {
144
                        jPanel = new JPanel();
145
                }
146
                return jPanel;
147
        }
148

    
149
        public WindowInfo getWindowInfo() {
150
                WindowInfo m_viewinfo = new WindowInfo(WindowInfo.ICONIFIABLE |
151
                                WindowInfo.MODELESSDIALOG | WindowInfo.RESIZABLE | WindowInfo.PALETTE);
152
                m_viewinfo.setTitle(PluginServices.getText(this,
153
                                "pila_de_comandos"));
154
                return m_viewinfo;
155
        }
156

    
157
        public Object getWindowModel() {
158
                return mymodel.getClass().getName();
159
        }
160

    
161
        public void windowActivated() {
162
                this.validateTree();
163
        }
164

    
165
        public void windowClosed() {
166
                // TODO Auto-generated method stub
167

    
168
        }
169

    
170
        /* (non-Javadoc)
171
         * @see com.iver.cit.gvsig.fmap.edition.commands.CommandListener#executeCommand(com.iver.cit.gvsig.fmap.edition.commands.CommandEvent)
172
         */
173
        public void commandRepaint() {
174
                setValue(mymodel.getPos()+1,true);
175
                refreshControls();
176
                refreshScroll();
177
        }
178
        private void refreshScroll(){
179
                Dimension size=new Dimension(jSlider.getPreferredSize().width,((mymodel.getRowCount())*getTable().getRowHeight()));
180
                JScrollBar verticalScrollBar=getJScrollPane().getVerticalScrollBar();//ove(size.width,size.height);
181
                verticalScrollBar.setValue(mymodel.getPos()*getTable().getRowHeight());
182
                jSlider.setPreferredSize(size);
183
                jSlider.setSize(size);
184
                validateTree();
185
        }
186
        /**
187
         * This method initializes jSlider
188
         *
189
         * @return javax.swing.JSlider
190
         */
191
        private JSlider getJSlider() {
192
                if (jSlider == null) {
193
                        jSlider = new JSlider();
194
                }
195
                return jSlider;
196
        }
197
        private void initSlider(){
198
                jSlider.setOrientation(SwingConstants.VERTICAL);
199
                jSlider.setPreferredSize(new Dimension(jSlider.getPreferredSize().width,((getTable().getRowCount())*getTable().getRowHeight())));
200
                jSlider.addMouseListener(new java.awt.event.MouseAdapter() {
201
                public void mouseReleased(java.awt.event.MouseEvent e) {
202

    
203
                    }
204
            });
205
            jSlider.addChangeListener(new javax.swing.event.ChangeListener() {
206

    
207

    
208
                                public void stateChanged(javax.swing.event.ChangeEvent e) {
209
                                        int value = (int) (getJSlider().getValue() * mymodel.getRowCount() * 0.01);
210
                           if (!refreshing) {
211
                                                mymodel.setPos(mymodel.getRowCount()-1-value);
212
                                                //System.out.println("setPos = "+(cr.getCommandCount()-1-value));
213
                                        }
214
                            }
215
                    });
216
            setValue(mymodel.getRowCount()-1-mymodel.getPos(),true);
217
        }
218
    public void setValue(int number, boolean fireEvent) {
219
        int rowCount=mymodel.getRowCount();
220
        if (number < lowLimit) {
221
                        number = lowLimit;
222
                }
223
        if (number > rowCount) {
224
                        number = rowCount;
225
                }
226
        if (number != currentValue) {
227
                currentValue = number;
228
                refreshControls();
229
                if (fireEvent) {
230
                                callValueChanged(new Integer(currentValue));
231
                        }
232
        }
233
        int selpos=rowCount-1-number;
234
        if (selpos>=0){
235
                        getTable().setRowSelectionInterval(selpos,selpos);
236
        } else {
237
                        getTable().clearSelection();
238
                }
239
    }
240
    /**
241
     * Refreshes all the mutable controls in this component.
242
     */
243
    private void refreshControls() {
244
            int normalizedValue = (int) (((mymodel.getRowCount()-currentValue) / (float) mymodel.getRowCount())*100);
245
                refreshSlider(normalizedValue);
246
                jTable.repaint();
247
        }
248
    /**
249
         * Sets the slider to the correct (scaled) position.
250
     * @param normalizedValue
251
     */
252
    private void refreshSlider(int normalizedValue) {
253
            refreshing = true;
254
        getJSlider().setValue(normalizedValue);
255
        refreshing = false;
256
    }
257

    
258
        /**
259
         * This method initializes jPanel1
260
         *
261
         * @return javax.swing.JPanel
262
         */
263
        private JPanel getJPanel1() {
264
                if (jPanel1 == null) {
265
                        jPanel1 = new JPanel();
266
                        jPanel1.add(getJSlider());
267
                }
268
                return jPanel1;
269
        }
270

    
271

    
272

    
273
        /**
274
         * This method initializes pCenter
275
         *
276
         * @return javax.swing.JPanel
277
         */
278
        private JPanel getPCenter() {
279
                if (pCenter == null) {
280
                        pCenter = new JPanel();
281
                        pCenter.setLayout(new BorderLayout());
282
                        pCenter.add(getTable(), java.awt.BorderLayout.CENTER);
283
                        pCenter.add(getJPanel1(), java.awt.BorderLayout.WEST);
284
                }
285
                return pCenter;
286
        }
287

    
288
        /**
289
         * This method initializes jScrollPane
290
         *
291
         * @return javax.swing.JScrollPane
292
         */
293
        private JScrollPane getJScrollPane() {
294
                if (jScrollPane == null) {
295
                        jScrollPane = new JScrollPane();
296
                        jScrollPane.setViewportView(getPCenter());
297
                }
298
                return jScrollPane;
299
        }
300
        public void update(Observable observable, Object notification) {
301
//            if (notification instanceof DataStoreNotification) {
302
//            DataStoreNotification storeNotification = (DataStoreNotification) notification;
303
//            if (DataStoreNotification.SELECTION_CHANGE.equals(storeNotification
304
//                    .getType())) {
305
//                commandRepaint();
306
//            }
307
//        }
308
            commandRepaint();
309
        }
310

    
311
        public Object getWindowProfile() {
312
                return WindowInfo.DIALOG_PROFILE;
313
        }
314

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