Statistics
| Revision:

svn-gvsig-desktop / trunk / applications / appgvSIG / src / com / iver / cit / gvsig / gui / command / CommandStackDialog.java @ 4529

History | View | Annotate | Download (8.94 KB)

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

    
3
import java.awt.BorderLayout;
4
import java.awt.Color;
5
import java.awt.Component;
6
import java.awt.Dimension;
7
import java.io.IOException;
8

    
9
import javax.swing.ImageIcon;
10
import javax.swing.JLabel;
11
import javax.swing.JPanel;
12
import javax.swing.JScrollBar;
13
import javax.swing.JScrollPane;
14
import javax.swing.JSlider;
15
import javax.swing.JTable;
16
import javax.swing.ListSelectionModel;
17
import javax.swing.table.DefaultTableCellRenderer;
18
import javax.swing.table.TableColumn;
19

    
20
import org.gvsig.gui.beans.DefaultBean;
21

    
22
import com.iver.andami.PluginServices;
23
import com.iver.andami.ui.mdiManager.SingletonView;
24
import com.iver.andami.ui.mdiManager.ViewInfo;
25
import com.iver.andami.ui.mdiManager.ViewListener;
26
import com.iver.cit.gvsig.AddLayer;
27
import com.iver.cit.gvsig.fmap.drivers.DriverIOException;
28
import com.iver.cit.gvsig.fmap.edition.commands.AddRowCommand;
29
import com.iver.cit.gvsig.fmap.edition.commands.CommandListener;
30
import com.iver.cit.gvsig.fmap.edition.commands.CommandRecord;
31
import com.iver.cit.gvsig.fmap.edition.commands.RemoveRowCommand;
32

    
33
public class CommandStackDialog extends DefaultBean implements SingletonView, ViewListener,CommandListener{
34

    
35
        private JTable jTable = null;
36
        private JPanel jPanel = null;
37
        private CommandRecord cr;
38
        private JSlider jSlider = null;
39
        //private int itemCount;
40
        private int lowLimit;
41
        private int currentValue=-1;
42
        private JPanel jPanel1 = null;
43
        protected boolean refreshing;
44
        private JPanel pCenter = null;
45
        private JScrollPane jScrollPane = null;
46
        private static final ImageIcon imodify = new ImageIcon(AddLayer.class.getClassLoader()
47
                        .getResource("images/ModifyCommand.png"));
48
        private static final ImageIcon iadd = new ImageIcon(AddLayer.class.getClassLoader()
49
                        .getResource("images/AddCommand.png"));
50

    
51
        private static final ImageIcon idel = new ImageIcon(AddLayer.class.getClassLoader()
52
                        .getResource("images/DelCommand.png"));
53

    
54

    
55
        /**
56
         * This is the default constructor
57
         */
58
        public CommandStackDialog(CommandRecord cr) {
59
                super();
60
                this.cr=cr;
61
                cr.addCommandListener(this);
62
                initialize();
63
        }
64

    
65
        /**
66
         * This method initializes this
67
         *
68
         * @return void
69
         */
70
        private void initialize() {
71
                this.setLayout(new BorderLayout());
72
                this.setSize(328, 229);
73
                this.add(getJPanel(), java.awt.BorderLayout.NORTH);
74
                this.add(getJScrollPane(), java.awt.BorderLayout.CENTER);
75
                refreshScroll();
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
                        MyModel mymodel=new MyModel(cr);
87
                        jTable.setModel(mymodel);
88
                        jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
89
                        jTable.setSelectionBackground(Color.orange);
90
                        jTable.setSelectionForeground(Color.black);
91
                        jTable.setShowGrid(false);
92
                        jTable.getTableHeader().setBackground(Color.white);
93
                        TableColumn tc = jTable.getColumnModel().getColumn(0);
94
                        tc.setCellRenderer(new DefaultTableCellRenderer() {
95
                                   public Component getTableCellRendererComponent(JTable table,
96
                                                                               Object value,
97
                                                                               boolean isSelected,
98
                                                                               boolean hasFocus,
99
                                                                               int row,
100
                                                                               int column)
101
                                      {
102
                                         JLabel label = (JLabel)
103
                                            super.getTableCellRendererComponent
104
                                               (table, value, isSelected, hasFocus, row, column);
105
                                            if (value instanceof AddRowCommand){
106
                                                    label.setIcon(iadd);
107
                                            }else if (value instanceof RemoveRowCommand){
108
                                                    label.setIcon(idel);
109
                                            }else{
110
                                                    label.setIcon(imodify);
111
                                            }
112
                                         if (cr.getPos()<row){
113
                                                 label.setBackground(Color.lightGray);
114
                                         }else {
115
                                                /* if (cr.getPos()==row){
116
                                                         label.setBackground(Color.orange);
117
                                                 }else{*/
118
                                                         label.setBackground(Color.orange);
119
                                                 //}
120
                                         }
121
                                            return label;
122
                                      }
123
                                });
124

    
125
                        jTable.addMouseListener(new java.awt.event.MouseAdapter() {
126
                                public void mousePressed(java.awt.event.MouseEvent e) {
127
                                        int newpos=jTable.getSelectedRow();
128
                                        try {
129
                                                cr.setPos(newpos);
130
                                                PluginServices.getMainFrame().enableControls();
131
                                        } catch (DriverIOException e1) {
132
                                                e1.printStackTrace();
133
                                        } catch (IOException e1) {
134
                                                e1.printStackTrace();
135
                                        }
136
                                }
137
                        });
138

    
139
                }
140
                return jTable;
141
        }
142

    
143
        /**
144
         * This method initializes jPanel
145
         *
146
         * @return javax.swing.JPanel
147
         */
148
        private JPanel getJPanel() {
149
                if (jPanel == null) {
150
                        jPanel = new JPanel();
151
                }
152
                return jPanel;
153
        }
154

    
155
        public ViewInfo getViewInfo() {
156
                ViewInfo m_viewinfo = new ViewInfo(ViewInfo.ICONIFIABLE | 
157
                                ViewInfo.MODELESSDIALOG | ViewInfo.RESIZABLE | ViewInfo.PALETTE);
158
                m_viewinfo.setTitle(PluginServices.getText(this,
159
                                "pila_de_comandos"));
160
                return m_viewinfo;
161
        }
162

    
163
        public Object getViewModel() {
164
                return "CommandStack";
165
        }
166

    
167
        public void viewActivated() {
168
                this.validateTree();
169
        }
170

    
171
        public void viewClosed() {
172
                // TODO Auto-generated method stub
173

    
174
        }
175

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

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

    
208

    
209
                                        public void stateChanged(javax.swing.event.ChangeEvent e) {
210
                                                int value = (int) (getJSlider().getValue() * cr.getCommandCount() * 0.01);
211
                                try {
212
                                    if (!refreshing)
213
                                    cr.setPos(cr.getCommandCount()-1-value);
214
                                    System.out.println("setPos = "+(cr.getCommandCount()-1-value));
215
                                                } catch (DriverIOException e1) {
216
                                                        e1.printStackTrace();
217
                                                } catch (IOException e1) {
218
                                                        e1.printStackTrace();
219
                                                }
220

    
221
                        }
222
                            });
223
                    setValue(cr.getCommandCount()-1-cr.getPos(),true);
224
                }
225
                return jSlider;
226
        }
227

    
228
    public void setValue(int number, boolean fireEvent) {
229
        if (number < lowLimit)
230
            number = lowLimit;
231
        if (number > cr.getCommandCount())
232
            number = cr.getCommandCount();
233
        if (number != currentValue) {
234
                currentValue = number;
235
                refreshControls();
236
                if (fireEvent)
237
                        callValueChanged(new Integer(currentValue));
238
        }
239
        int selpos=cr.getCommandCount()-1-number;
240
        if (selpos>=0){
241
                getTable().setRowSelectionInterval(selpos,selpos);
242
        } else
243
                        getTable().clearSelection();
244
    }
245
    /**
246
     * Refreshes all the mutable controls in this component.
247
     */
248
    private void refreshControls() {
249
            int normalizedValue = (int) ((currentValue / (float) cr.getCommandCount())*100);
250
                refreshSlider(normalizedValue);
251
        }
252
    /**
253
         * Sets the slider to the correct (scaled) position.
254
     * @param normalizedValue
255
     */
256
    private void refreshSlider(int normalizedValue) {
257
            refreshing = true;
258
        getJSlider().setValue(normalizedValue);
259
        refreshing = false;
260
    }
261

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

    
275

    
276

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

    
292
        /**
293
         * This method initializes jScrollPane
294
         *
295
         * @return javax.swing.JScrollPane
296
         */
297
        private JScrollPane getJScrollPane() {
298
                if (jScrollPane == null) {
299
                        jScrollPane = new JScrollPane();
300
                        jScrollPane.setViewportView(getPCenter());
301
                }
302
                return jScrollPane;
303
        }
304

    
305
        public void commandRefresh() {
306
                commandRepaint();
307

    
308
        }
309

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