Revision 1672

View differences:

org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.swing/org.gvsig.raster.swing.api/src/main/java/org/gvsig/raster/swing/RasterSwingManager.java
34 34
import org.gvsig.raster.swing.newlayer.CreateNewLayerPanel;
35 35
import org.gvsig.raster.swing.newlayer.FileNameManagement;
36 36
import org.gvsig.raster.swing.openfile.OpenFileContainer;
37
import org.gvsig.raster.swing.pagedtable.ModelLoader;
38
import org.gvsig.raster.swing.pagedtable.PagedTable;
37 39
import org.gvsig.raster.swing.preview.DataSourcePreview;
38 40
import org.gvsig.raster.swing.preview.PreviewPanel;
39 41
import org.gvsig.raster.swing.preview.PreviewRenderProcess;
......
160 162
     * @return
161 163
     */
162 164
    public ROIPanel createROIPanel();
165
    
166
    /**
167
     * Creates a paged table component
168
     * @param modelLoader
169
     * @return
170
     */
171
    public PagedTable createPagedTable(ModelLoader modelLoader);
163 172
}
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.swing/org.gvsig.raster.swing.api/src/main/java/org/gvsig/raster/swing/pagedtable/PagedTable.java
23 23
 */
24 24
package org.gvsig.raster.swing.pagedtable;
25 25

  
26
import javax.swing.JComponent;
27

  
28
import org.gvsig.gui.beans.table.exceptions.NotInitializeException;
29

  
26 30
/**
27 31
 * API for a <code>PagedTable</code>
28 32
 * @author Nacho Brodin (nachobrodin@gmail.com)
......
71 75
	 */
72 76
	public void setSelectedRow(int row);
73 77
	
78
	/**
79
	 * Increase the selected row
80
	 */
74 81
	public void increaseSelectedRows();
75 82
	
83
	/**
84
	 * Decrease the selected row
85
	 */
76 86
	public void decreaseSelectedRows();
77 87
	
78 88
	/**
......
82 92
	public void addSelectedRow(int row);
83 93
	
84 94
	/**
95
	 * Selects the next page
96
	 */
97
	public void nextPage();
98
	
99
	/**
100
	 * Selects the previous page
101
	 */
102
	public void prevPage();
103
	
104
	/**
105
	 * Sets the page selected
106
	 * @param pageNumber
107
	 */
108
	public void setSelectedPage(int pageNumber);
109
	
110
	/**
85 111
	 * Gets the table data model
86 112
	 * @return
87 113
	 */
88 114
	public TableModel getTableModel();
115
	
116
	/**
117
	 * Gets the component
118
	 * @return
119
	 */
120
	public JComponent getComponent();
89 121
}
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.swing/org.gvsig.raster.swing.impl/src/main/java/org/gvsig/raster/swing/impl/DefaultRasterSwingManager.java
38 38
import org.gvsig.raster.swing.impl.infobypoint.MainInfoByPointPanelImpl;
39 39
import org.gvsig.raster.swing.impl.newlayer.CreateNewLayerPanelImpl;
40 40
import org.gvsig.raster.swing.impl.openfile.OpenFileContainerImpl;
41
import org.gvsig.raster.swing.impl.pagedtable.PagedTableImpl;
41 42
import org.gvsig.raster.swing.impl.preview.PreviewBasePanel;
42 43
import org.gvsig.raster.swing.impl.preview.SinglePreviewPanel;
43 44
import org.gvsig.raster.swing.impl.roi.DefaultROIPanel;
......
45 46
import org.gvsig.raster.swing.newlayer.CreateNewLayerPanel;
46 47
import org.gvsig.raster.swing.newlayer.FileNameManagement;
47 48
import org.gvsig.raster.swing.openfile.OpenFileContainer;
49
import org.gvsig.raster.swing.pagedtable.ModelLoader;
50
import org.gvsig.raster.swing.pagedtable.PagedTable;
48 51
import org.gvsig.raster.swing.preview.DataSourcePreview;
49 52
import org.gvsig.raster.swing.preview.PreviewPanel;
50 53
import org.gvsig.raster.swing.preview.PreviewRenderProcess;
......
191 194
    public ROIPanel createROIPanel() {
192 195
    	return new DefaultROIPanel();
193 196
    }
197

  
198
	public PagedTable createPagedTable(ModelLoader modelLoader) {
199
		return new PagedTableImpl(modelLoader);
200
	}
194 201
}
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.swing/org.gvsig.raster.swing.impl/src/main/java/org/gvsig/raster/swing/impl/pagedtable/TableControllerListener.java
49 49
	 * Constructor
50 50
	 * @param tableContainer
51 51
	 */
52
	public TableControllerListener(PagedTableImpl tableContainer){
52
	public TableControllerListener(PagedTable tableContainer){
53 53
		this.pagedTable = tableContainer;
54 54
	}
55 55

  
......
140 140
		if (e.getSource() == controlPanel.getCPoint()) {
141 141
			pagedTable.setSelectedRow(controlPanel.getCPoint().getSelectedIndex());
142 142
		}
143
		
144
		if (e.getSource() == paginationBarPanel.getButtonUp()) {
145
			pagedTable.prevPage();
146
		}
147
		
148
		if (e.getSource() == paginationBarPanel.getButtonDown()) {
149
			pagedTable.nextPage();
150
		}
143 151

  
144 152
		comboEventEnable = true;
145 153
	}
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.swing/org.gvsig.raster.swing.impl/src/main/java/org/gvsig/raster/swing/impl/pagedtable/PagedTablePanel.java
1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2012 gvSIG Association.
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 2
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23
 */
24
package org.gvsig.raster.swing.impl.pagedtable;
25

  
26
import java.awt.FlowLayout;
27
import java.awt.GridBagConstraints;
28
import java.awt.GridBagLayout;
29
import java.awt.event.MouseEvent;
30
import java.awt.event.MouseListener;
31
import java.util.List;
32
import java.util.Observable;
33
import java.util.Observer;
34

  
35
import javax.swing.JPanel;
36
import javax.swing.JTable;
37
import javax.swing.table.DefaultTableModel;
38
import javax.swing.table.TableColumn;
39

  
40
import org.gvsig.raster.swing.pagedtable.ModelLoader;
41
import org.gvsig.raster.swing.pagedtable.TableModel;
42

  
43

  
44
/**
45
 * Paged table
46
 * 
47
 * @author Nacho Brodin (nachobrodin@gmail.com)
48
 */
49
public class PagedTablePanel extends JPanel implements MouseListener, Observer {
50
	private static final long          serialVersionUID       = 1L;
51
	private PagedJTable                jTable                 = null;
52
	private ModelLoader                modelLoader            = null;
53
	private DefaultTableModel          model                  = null;
54
	private Pager                      pager                  = null;
55
	private int                        heightLine             = 16;
56
	
57
	public class PagedJTable extends JTable {
58
		private static final long serialVersionUID = 1L;
59

  
60
		public PagedJTable(DefaultTableModel model) {
61
			super(model);
62
		}
63
		
64
		/**
65
		 * Reimplemented to calculate the number of pages when the component gets
66
		 * a resize event
67
		 */
68
		public void setBounds(int x, int y, int width, int height) {
69
	        super.setBounds(x, y, width, height);
70
	        int entriesPerPage = (int)(getHeight() / (double)heightLine);
71
			getPager(entriesPerPage);
72
	    }
73
	}
74
	
75
	public PagedTablePanel(ModelLoader modelLoader,
76
			Pager pager, 
77
			PaginationBarPanel paginationBar,
78
			MoveRowsPanel moveRowsPanel, 
79
			TableEntryControllerPanel tableEntryControllerPanel) {
80
		this.modelLoader = modelLoader;
81
		this.pager = pager;
82
		this.model = (DefaultTableModel)modelLoader.getTableModel();
83
		initGUI(paginationBar, moveRowsPanel, tableEntryControllerPanel);
84
		
85
	}
86
	
87
	private void initGUI(
88
			PaginationBarPanel paginationBar, 
89
			MoveRowsPanel moveRowsPanel, 
90
			TableEntryControllerPanel tableEntryControllerPanel) {
91
		setLayout(new GridBagLayout());
92
		GridBagConstraints gbc = new GridBagConstraints();
93
		gbc.fill = GridBagConstraints.BOTH;
94
		gbc.weightx = 1;
95
		gbc.weighty = 1;
96
		gbc.gridx = 0;
97
		gbc.gridy = 0;
98
		
99
		add(getJTable(), gbc);
100
		
101
		gbc.fill = GridBagConstraints.VERTICAL;
102
		gbc.weightx = 0;
103
		gbc.weighty = 1;
104
		gbc.gridx = 1;
105
		gbc.gridy = 0;
106
		
107
		add(paginationBar, gbc);
108
		
109
		gbc.fill = GridBagConstraints.HORIZONTAL;
110
		gbc.weightx = 1;
111
		gbc.weighty = 0;
112
		gbc.gridx = 0;
113
		gbc.gridy = 1;
114
		gbc.gridwidth = 2;
115
		
116
		JPanel panel = new JPanel();
117
		panel.setLayout(new FlowLayout(FlowLayout.CENTER, 0, 0));
118
		panel.add(tableEntryControllerPanel);
119
		panel.add(moveRowsPanel);
120
		add(panel, gbc);
121
	}
122
	
123
	public Pager getPager(int nEntriesPerPage) {
124
		pager.setEntriesPerPage(nEntriesPerPage);
125
		return pager;
126
	}
127
	
128
	/**
129
	 * Obtiene la Tabla
130
	 * @return Tabla de bandas de la imagen
131
	 */
132
	public JTable getJTable() {
133
		if (jTable == null) {
134
			jTable = new PagedJTable(model);
135
			jTable.addMouseListener(this);
136

  
137
			TableColumn column = null;
138

  
139
			int widthPerColumn = (int) (this.getWidth() / modelLoader.getColumnNames().length);
140
			for (int i = 0; i < modelLoader.getColumnNames().length; i++) {
141
				column = jTable.getColumnModel().getColumn(i);
142
				column.setResizable(true);
143
				if (modelLoader.getColumnWidths() == null)
144
					column.setPreferredWidth(widthPerColumn);
145
				else
146
					column.setPreferredWidth(modelLoader.getColumnWidths()[i]);
147
			}
148
		}
149

  
150
		return jTable;
151
	} 
152
	
153
	public void setLineHeight(int height) {
154
		this.heightLine = height;
155
	}
156
	
157
	//************************************************
158
	//                    API
159
	//************************************************
160
	
161
	public void addRow(Object[] list) {
162
		pager.addEntry(list);
163
	}
164
	
165
	public void delRow(int i) {
166
		pager.removeEntry(i);
167
	}
168
	
169
	public void removeAllRows() {
170
		pager.removeAllEntries();
171
	}
172
	
173
	public int[] getSelectedRows() {
174
		return pager.getSelectedRows();
175
	}
176
	
177
	public void swapRow(int i, int j) {
178
		if ((i < 0) || (j < 0))
179
			return;
180
		if ((i >= model.getRowCount()) || (j >= model.getRowCount()))
181
			return;
182
		model.moveRow(i, i, j);
183
		pager.swapRow(i, j);
184
	}
185
	
186
	public void setSelectedRows(int[] rows) {
187
		pager.setSelectedRows(rows);
188
	}
189
	
190
	public void setSelectedRow(int row) {
191
		if(row == -1) {
192
			pager.setSelectedRows(new int[]{pager.getEntriesCount() - 1});
193
		} else {
194
			pager.setSelectedRows(new int[]{row});
195
		}
196
	}
197
	
198
	public void addSelectedRow(int row) {
199
		pager.addSelectedRow(row);
200
	}
201
	
202
	public void increaseSelectedRows() {
203
		pager.increaseSelectedRows();
204
	}
205
	
206
	public void decreaseSelectedRows() {
207
		pager.decreaseSelectedRows();
208
	}
209
	
210
	public void nextPage() {
211
		pager.increaseSelectedPage();
212
	}
213
	
214
	public void prevPage() {
215
		pager.decreaseSelectedPage();
216
	}
217
	
218
	public void setSelectedPage(int pageNumber) {
219
		pager.setSelectedPage(pageNumber);
220
	}
221
	
222
	public TableModel getTableModel() {
223
		return modelLoader.getTableModel();
224
	}
225
	
226
	//************************************************
227
	
228
	/**
229
	 * Gets the number of rows in this table
230
	 * @return N?mero de filas de la tabla
231
	 */
232
	public int getRowTableCount() {
233
		return model.getRowCount();
234
	}
235
	
236
	/**
237
	 * Gets the selected point
238
	 * @return position of the selected point
239
	 */
240
	public int getSelectedTableRow() {
241
		return getJTable().getSelectedRow();
242
	}
243
	
244
	/**
245
	 * Reloads the selected page in the visual table
246
	 */
247
	private int reloadPage() {
248
		model.setNumRows(0);
249
		List<Object> lines = pager.getSelectedPage();
250
		if(lines == null)
251
			return pager.getSelectedPageNumber();
252
		for (int i = 0; i < lines.size(); i++) {
253
			model.addRow((Object[])lines.get(i));
254
		}
255
		return pager.getSelectedPageNumber();
256
	}
257
	
258
	
259
//	private void loadPageInTable(int page, int selection) {
260
//		for (int i = model.getRowCount() - 1; i >= 0; i--) {
261
//			model.removeRow(i);
262
//		}
263
//		List<Object> pageElements = pager.getPage(page);
264
//		for (int i = 0; i < pageElements.size(); i++) {
265
//			model.addRow((Object[])pageElements.get(i));
266
//		}
267
//		if(selection >= 0 && selection < model.getRowCount()) {
268
//			getJTable().setRowSelectionInterval(selection, selection);
269
//		}
270
//	}
271

  
272
	public void mouseClicked(MouseEvent e) {
273
		if(e.getSource() == jTable) {
274
			//When the user clicks on table, it selects the entry in the table control
275
			int selVisualRow = getSelectedTableRow();
276
			if(selVisualRow >= 0) {
277
				int selRow = pager.getSelectedPageNumber() * pager.getEntriesPerPage() + selVisualRow;
278
				pager.setSelectedRows(new int[]{selRow});
279
			}
280
		}
281
	}
282

  
283
	public void mouseEntered(MouseEvent e) {
284
		
285
	}
286

  
287
	public void mouseExited(MouseEvent e) {
288
		
289
	}
290

  
291
	public void mousePressed(MouseEvent e) {
292
		
293
	}
294

  
295
	public void mouseReleased(MouseEvent e) {
296
		
297
	}
298

  
299
	
300
	public void update(Observable o, Object arg) {
301
		if(o instanceof Pager && arg instanceof Integer) {
302
			int option = ((Integer)arg).intValue();
303
			if(option == Pager.EVENT_SELECTED_ROWS ) {
304
				Pager pager = (Pager)o;
305
				int[] selectedRows = pager.getSelectedRows();
306
				if(selectedRows != null && selectedRows.length > 0) {
307
					if(!pager.isInCurrentPage(selectedRows[0])) {
308
						pager.setSelectedPage(pager.getPageFromRow(selectedRows[0]));
309
						reloadPage();
310
					}
311
					int r = selectedRows[0] % pager.getEntriesPerPage();
312
					if(r >= 0 && r < model.getRowCount())
313
						getJTable().setRowSelectionInterval(r, r);
314
				}
315
			}
316
			
317
			if(option == Pager.EVENT_ADD_ENTRY ) {
318
				model.addRow(pager.getLastEntry());
319
				int lastTableRow = model.getRowCount() - 1;
320
				getJTable().setRowSelectionInterval(lastTableRow, lastTableRow);
321
			}
322
			
323
			if(option == Pager.EVENT_REMOVE_ENTRY ) {
324
				int[] selectedRows = pager.getSelectedRows();
325
				reloadPage();
326
				if(selectedRows != null) {
327
					int r = selectedRows[0] % pager.getEntriesPerPage();
328
					if(r >= 0 && r < model.getRowCount()) {
329
						getJTable().setRowSelectionInterval(r, r);
330
					}
331
				}
332
			}
333
			
334
			if(option == Pager.EVENT_REMOVE_ALL ) {
335
				model.setNumRows(0);
336
			}
337
			
338
			if(option == Pager.EVENT_SELECTED_PAGE ) {
339
				reloadPage();
340
				int[] selectedRows = pager.getSelectedRows();
341
				if(selectedRows != null) {
342
					int r = selectedRows[0] % pager.getEntriesPerPage();
343
					if(r >= 0 && r < model.getRowCount()) {
344
						getJTable().setRowSelectionInterval(r, r);
345
					}
346
				}
347
			}
348
			
349
		}
350
	}
351
}
0 352

  
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.swing/org.gvsig.raster.swing.impl/src/main/java/org/gvsig/raster/swing/impl/pagedtable/PagedTableImpl.java
23 23
 */
24 24
package org.gvsig.raster.swing.impl.pagedtable;
25 25

  
26
import java.awt.FlowLayout;
27
import java.awt.GridBagConstraints;
28
import java.awt.GridBagLayout;
29
import java.awt.event.MouseEvent;
30
import java.awt.event.MouseListener;
31
import java.util.List;
32
import java.util.Observable;
33
import java.util.Observer;
34

  
35
import javax.swing.JPanel;
36
import javax.swing.JTable;
26
import javax.swing.JComponent;
37 27
import javax.swing.table.DefaultTableModel;
38
import javax.swing.table.TableColumn;
39 28

  
40 29
import org.gvsig.raster.swing.pagedtable.ModelLoader;
41 30
import org.gvsig.raster.swing.pagedtable.PagedTable;
......
47 36
 * 
48 37
 * @author Nacho Brodin (nachobrodin@gmail.com)
49 38
 */
50
public class PagedTableImpl extends JPanel implements PagedTable, MouseListener, Observer {
39
public class PagedTableImpl implements PagedTable {
51 40
	private static final long          serialVersionUID       = 1L;
52
	private PagedJTable                jTable                 = null;
53 41
	private ModelLoader                modelLoader            = null;
54 42
	private DefaultTableModel          model                  = null;
43
	private PagedTablePanel            panel                  = null;
55 44
	private PaginationBarPanel         paginationBar          = null;
56 45
	private TableEntryControllerPanel  tableEntryController   = null;
57 46
	private TableControllerListener    tableListener          = null;
58 47
	private MoveRowsPanel              moveRowsPanel          = null;
59 48
	private Pager                      pager                  = null;
60
	private int                        heightLine             = 16;
61
	private int                        currentPage            = 0;
62 49
	
63
	public class PagedJTable extends JTable {
64
		private static final long serialVersionUID = 1L;
65

  
66
		public PagedJTable(DefaultTableModel model) {
67
			super(model);
68
		}
69
		
70
		/**
71
		 * Reimplemented to calculate the number of pages when the component gets
72
		 * a resize event
73
		 */
74
		public void setBounds(int x, int y, int width, int height) {
75
	        super.setBounds(x, y, width, height);
76
	        int entriesPerPage = (int)(getHeight() / (double)heightLine);
77
			getPager(entriesPerPage);
78
			reloadPage();
79
	    }
80
	}
81
	
82 50
	public PagedTableImpl(ModelLoader modelLoader) {
83 51
		this.modelLoader = modelLoader;
84 52
		this.model = (DefaultTableModel)modelLoader.getTableModel();
85 53
		tableListener = new TableControllerListener(this);
86
		init();
87
		getPager(0).addObserver(getTableEntryController());
88
		getPager(0).addObserver(this);
89
		getPager(0).addObserver(getPaginationBar());
54
		getPager().addObserver(getTableEntryController());
55
		getPager().addObserver(getPaginationBar());
56
		getPager().addObserver(getPagedTablePanel());
90 57
	}
91 58
	
92
	private void init() {
93
		setLayout(new GridBagLayout());
94
		GridBagConstraints gbc = new GridBagConstraints();
95
		gbc.fill = GridBagConstraints.BOTH;
96
		gbc.weightx = 1;
97
		gbc.weighty = 1;
98
		gbc.gridx = 0;
99
		gbc.gridy = 0;
100
		
101
		add(getJTable(), gbc);
102
		
103
		gbc.fill = GridBagConstraints.VERTICAL;
104
		gbc.weightx = 0;
105
		gbc.weighty = 1;
106
		gbc.gridx = 1;
107
		gbc.gridy = 0;
108
		
109
		add(getPaginationBar(), gbc);
110
		
111
		gbc.fill = GridBagConstraints.HORIZONTAL;
112
		gbc.weightx = 1;
113
		gbc.weighty = 0;
114
		gbc.gridx = 0;
115
		gbc.gridy = 1;
116
		gbc.gridwidth = 2;
117
		
118
		JPanel panel = new JPanel();
119
		panel.setLayout(new FlowLayout(FlowLayout.CENTER, 0, 0));
120
		panel.add(getTableEntryController());
121
		panel.add(getMoveRowsPanel());
122
		add(panel, gbc);
123
	}
124
	
125
	public Pager getPager(int nEntriesPerPage) {
59
	public Pager getPager() {
126 60
		if(pager == null) {
127
			pager = new Pager(nEntriesPerPage);
128
		} else
129
			pager.setEntriesPerPage(nEntriesPerPage);
61
			pager = new Pager(0);
62
		}
130 63
		return pager;
131 64
	}
132 65
	
......
137 70
		return tableEntryController;
138 71
	}
139 72
	
140
	public PaginationBarPanel getPaginationBar() {
141
		if(paginationBar == null) {
142
			paginationBar = new PaginationBarPanel(tableListener);
73
	public PagedTablePanel getPagedTablePanel() {
74
		if(panel == null) {
75
			panel = new PagedTablePanel(modelLoader, 
76
					getPager(), 
77
					getPaginationBar(), 
78
					getMoveRowsPanel(),
79
					getTableEntryController());
143 80
		}
144
		return paginationBar;
81
		return panel;
145 82
	}
146 83
	
147
	/**
148
	 * This method initializes jPanel
149
	 * @return javax.swing.JPanel
150
	 */
151 84
	public MoveRowsPanel getMoveRowsPanel() {
152 85
		if (moveRowsPanel == null) {
153 86
			moveRowsPanel = new MoveRowsPanel(tableListener);
......
156 89
		return moveRowsPanel;
157 90
	}
158 91
	
159
	/**
160
	 * Obtiene la Tabla
161
	 * @return Tabla de bandas de la imagen
162
	 */
163
	public JTable getJTable() {
164
		if (jTable == null) {
165
			jTable = new PagedJTable(model);
166
			jTable.addMouseListener(this);
167

  
168
			TableColumn column = null;
169

  
170
			int widthPerColumn = (int) (this.getWidth() / modelLoader.getColumnNames().length);
171
			for (int i = 0; i < modelLoader.getColumnNames().length; i++) {
172
				column = jTable.getColumnModel().getColumn(i);
173
				column.setResizable(true);
174
				if (modelLoader.getColumnWidths() == null)
175
					column.setPreferredWidth(widthPerColumn);
176
				else
177
					column.setPreferredWidth(modelLoader.getColumnWidths()[i]);
178
			}
92
	public PaginationBarPanel getPaginationBar() {
93
		if(paginationBar == null) {
94
			paginationBar = new PaginationBarPanel(tableListener);
179 95
		}
180

  
181
		return jTable;
182
	} 
183
	
184
	public void setLineHeight(int height) {
185
		this.heightLine = height;
96
		return paginationBar;
186 97
	}
187 98
	
188
	//************************************************
189
	//                    API
190
	//************************************************
191
	
192 99
	public void addRow(Object[] list) {
193 100
		pager.addEntry(list);
194 101
	}
195 102
	
196 103
	public void delRow(int i) {
197
		currentPage = pager.getSelectedPageNumber();
198 104
		pager.removeEntry(i);
199 105
	}
200 106
	
......
239 145
		pager.decreaseSelectedRows();
240 146
	}
241 147
	
242
	public TableModel getTableModel() {
243
		return modelLoader.getTableModel();
148
	public void nextPage() {
149
		pager.increaseSelectedPage();
244 150
	}
245 151
	
246
	//************************************************
247
	
248
	/**
249
	 * Gets the number of rows in this table
250
	 * @return N?mero de filas de la tabla
251
	 */
252
	public int getRowTableCount() {
253
		return model.getRowCount();
152
	public void prevPage() {
153
		pager.decreaseSelectedPage();
254 154
	}
255 155
	
256
	/**
257
	 * Gets the selected point
258
	 * @return position of the selected point
259
	 */
260
	public int getSelectedTableRow() {
261
		return getJTable().getSelectedRow();
156
	public void setSelectedPage(int pageNumber) {
157
		pager.setSelectedPage(pageNumber);
262 158
	}
263 159
	
264
	/**
265
	 * Reloads the selected page in the visual table
266
	 */
267
	private int reloadPage() {
268
		model.setNumRows(0);
269
		List<Object> lines = pager.getSelectedPage();
270
		if(lines == null)
271
			return pager.getSelectedPageNumber();
272
		for (int i = 0; i < lines.size(); i++) {
273
			model.addRow((Object[])lines.get(i));
274
		}
275
		return pager.getSelectedPageNumber();
160
	public TableModel getTableModel() {
161
		return modelLoader.getTableModel();
276 162
	}
277 163
	
278
	
279
	private void loadPageInTable(int page, int selection) {
280
		for (int i = model.getRowCount() - 1; i >= 0; i--) {
281
			model.removeRow(i);
282
		}
283
		List<Object> pageElements = pager.getPage(page);
284
		for (int i = 0; i < pageElements.size(); i++) {
285
			model.addRow((Object[])pageElements.get(i));
286
		}
287
		if(selection >= 0 && selection < model.getRowCount()) {
288
			getJTable().setRowSelectionInterval(selection, selection);
289
		}
164
	public JComponent getComponent() {
165
		return panel;
290 166
	}
291

  
292
	public void mouseClicked(MouseEvent e) {
293
		if(e.getSource() == jTable) {
294
			//When the user clicks on table, it selects the entry in the table control
295
			int selVisualRow = getSelectedTableRow();
296
			if(selVisualRow >= 0) {
297
				int selRow = pager.getSelectedPageNumber() * pager.getEntriesPerPage() + selVisualRow;
298
				pager.setSelectedRows(new int[]{selRow});
299
			}
300
		}
301
	}
302

  
303
	public void mouseEntered(MouseEvent e) {
304
		
305
	}
306

  
307
	public void mouseExited(MouseEvent e) {
308
		
309
	}
310

  
311
	public void mousePressed(MouseEvent e) {
312
		
313
	}
314

  
315
	public void mouseReleased(MouseEvent e) {
316
		
317
	}
318

  
319
	
320
	public void update(Observable o, Object arg) {
321
		if(o instanceof Pager && arg instanceof Integer) {
322
			int option = ((Integer)arg).intValue();
323
			if(option == Pager.CHANGE_SELECTED_ROWS ) {
324
				Pager pager = (Pager)o;
325
				int[] selectedRows = pager.getSelectedRows();
326
				if(selectedRows != null && selectedRows.length > 0) {
327
					if(!pager.isInCurrentPage(selectedRows[0])) {
328
						pager.setSelectedPage(pager.getPageFromRow(selectedRows[0]));
329
						reloadPage();
330
					}
331
					int r = selectedRows[0] % pager.getEntriesPerPage();
332
					if(r >= 0 && r < model.getRowCount())
333
						getJTable().setRowSelectionInterval(r, r);
334
				}
335
			}
336
			
337
			if(option == Pager.CHANGE_ADD_ENTRY ) {
338
				//Cambio de p?gina
339
				if(model.getRowCount() >= pager.getEntriesPerPage()) {
340
					for (int i = model.getRowCount() - 1; i >= 0; i--) {
341
						model.removeRow(i);
342
					}
343
					pager.increaseSelectedPage();
344
					getPaginationBar().getSelectedPage().setText(pager.getSelectedPageNumber() + "");
345
				}
346
				model.addRow(pager.getLastEntry());
347
				int lastTableRow = model.getRowCount() - 1;
348
				getJTable().setRowSelectionInterval(lastTableRow, lastTableRow);
349
			}
350
			
351
			if(option == Pager.CHANGE_REMOVE_ENTRY ) {
352
				int[] selectedRows = pager.getSelectedRows();
353
				int pageLoaded = reloadPage();
354
				
355
				//Se ha cargado una nueva p?gina
356
				if(currentPage != pageLoaded) { 
357
					int r = model.getRowCount() - 1;
358
					getJTable().setRowSelectionInterval(r, r);
359
				} else {
360
					int r = selectedRows[0] % pager.getEntriesPerPage();
361
					if(r >= 0 && r < model.getRowCount()) {
362
						getJTable().setRowSelectionInterval(r, r);
363
					}
364
				}
365
			}
366
			
367
			if(option == Pager.CHANGE_REMOVE_ALL ) {
368
				model.setNumRows(0);
369
			}
370
			
371
		}
372
	}
373 167
}
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.swing/org.gvsig.raster.swing.impl/src/main/java/org/gvsig/raster/swing/impl/pagedtable/TableEntryControllerPanel.java
434 434
		Pager pager = (Pager)o;
435 435
		if(o instanceof Pager && arg instanceof Integer) {
436 436
			int option = ((Integer)arg).intValue();
437
			if(option == Pager.CHANGE_SELECTED_ROWS ) {
437
			if(option == Pager.EVENT_SELECTED_ROWS ) {
438 438
				int[] selectedRows = pager.getSelectedRows();
439 439
				if(selectedRows != null && selectedRows.length > 0)
440 440
					setSelectedIndex(selectedRows[0]);
441 441
			}
442 442
			
443
			if(option == Pager.CHANGE_ADD_ENTRY ) {
443
			if(option == Pager.EVENT_ADD_ENTRY ) {
444 444
				addPointToTable(pager.getEntriesCount());
445 445
			}
446 446
			
447
			if(option == Pager.CHANGE_REMOVE_ENTRY ) {
447
			if(option == Pager.EVENT_REMOVE_ENTRY ) {
448 448
				setNItems(pager.getEntriesCount());
449 449
				int[] selectedRows = pager.getSelectedRows();
450 450
				if(selectedRows != null && selectedRows.length >= 1) {
......
452 452
				}
453 453
			}
454 454
			
455
			if(option == Pager.CHANGE_REMOVE_ALL ) {
455
			if(option == Pager.EVENT_REMOVE_ALL ) {
456 456
				setNItems(0);
457 457
			}
458 458
		}
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.swing/org.gvsig.raster.swing.impl/src/main/java/org/gvsig/raster/swing/impl/pagedtable/Pager.java
37 37
	private int                      selectedPage           = 0;
38 38
	private int[]                    selectedRows           = null;
39 39
	
40
	public static int                CHANGE_SELECTED_ROWS   = 0;
41
	public static int                CHANGE_ADD_ENTRY       = 1; 
42
	public static int                CHANGE_REMOVE_ENTRY    = 2;
43
	public static int                CHANGE_REMOVE_ALL      = 3;
44
	public static int                CHANGE_SELECTED_PAGE   = 4;
45
	//public static int                CHANGE_SWAP_ROWS       = 5;
40
	public static int                EVENT_SELECTED_ROWS    = 0;
41
	public static int                EVENT_ADD_ENTRY        = 1; 
42
	public static int                EVENT_REMOVE_ENTRY     = 2;
43
	public static int                EVENT_REMOVE_ALL       = 3;
44
	public static int                EVENT_SELECTED_PAGE    = 4;
46 45
		
47 46
	public Pager(int entriesPerPage) {
48 47
		this.entriesPerPage = entriesPerPage;
49 48
		entries = new ArrayList<Object>();
50 49
	}
51 50
	
52
	public void setEntriesPerPage(int n) {
53
		this.entriesPerPage = n;
54
	}
51
	//*************ROWS**********************
55 52
	
56
	public void increaseSelectedPage() {
57
		if(selectedPage < getPageCount() - 1) {
58
			selectedPage ++;
59
			setChanged();
60
		    notifyObservers(CHANGE_SELECTED_PAGE);
61
		}
62
	}
63
	
64
	public void decreaseSelectedPage() {
65
		if (selectedPage > 0) {
66
			selectedPage --;
67
			setChanged();
68
		    notifyObservers(CHANGE_SELECTED_PAGE);
69
		}
70
	}
71
	
72 53
	public void setSelectedRows(int[] rows) {
73 54
		selectedRows = rows;
74 55
		setChanged();
75
	    notifyObservers(CHANGE_SELECTED_ROWS);
56
	    notifyObservers(EVENT_SELECTED_ROWS);
76 57
	}
77 58
	
78 59
	public void increaseSelectedRows() {
......
85 66
		}
86 67
		if(change) {
87 68
			setChanged();
88
			notifyObservers(CHANGE_SELECTED_ROWS);
69
			notifyObservers(EVENT_SELECTED_ROWS);
89 70
		}
90 71
	}
91 72
	
......
99 80
		}
100 81
		if(change) {
101 82
			setChanged();
102
			notifyObservers(CHANGE_SELECTED_ROWS);
83
			notifyObservers(EVENT_SELECTED_ROWS);
103 84
		}
104 85
	}
105 86
	
......
111 92
		newSelected[newSelected.length - 1] = row;
112 93
		selectedRows = newSelected;
113 94
		setChanged();
114
	    notifyObservers(CHANGE_SELECTED_ROWS);
95
	    notifyObservers(EVENT_SELECTED_ROWS);
115 96
	}
116 97
	
117 98
	public int[] getSelectedRows() {
118 99
		return selectedRows;
119 100
	}
120 101
	
121
	public void setSelectedPage(int page) {
122
		if(page >= 0 && page < getPageCount()) {
123
			selectedPage = page;
102
	/**
103
	 * Adds a new entry. In the first place, if it is necessary 
104
	 * changes the selected page and throws the event to actualize the
105
	 * table and controls. Next it will notify the "add entry" event 
106
	 * 
107
	 * @param entry
108
	 */
109
	public void addEntry(Object entry) {
110
		int newSelectedRow = entries.size();
111
		
112
		if(!isInCurrentPage(newSelectedRow)) {
113
			setSelectedPage(getPageFromRow(newSelectedRow));
124 114
			setChanged();
125
		    notifyObservers(CHANGE_SELECTED_PAGE);
115
		    notifyObservers(EVENT_SELECTED_PAGE);
126 116
		}
127
	}
128
	
129
	public int getPageFromRow(int row) {
130
		return (int)(row / getEntriesPerPage());
131
	}
132
	
133
	public List<Object> getSelectedPage() {
134
		return getPage(getSelectedPageNumber());
135
	}
136
	
137
	public void addEntry(Object entry) {
117
		
138 118
		entries.add(entry);
139 119
		setChanged();
140
	    notifyObservers(CHANGE_ADD_ENTRY);
141
	    setSelectedRows(new int[]{entries.size() - 1});
120
	    notifyObservers(EVENT_ADD_ENTRY);
121
	    setSelectedRows(new int[]{newSelectedRow});
142 122
	}
143 123
	
144 124
	public void removeEntry(int pos) {
145 125
		if(pos >= 0 && pos < entries.size()) {
126
			int oldSelectedPageInRow = getPageFromRow(pos);
127
			int oldSelectedPage = getSelectedPageNumber();
128
			
129
			entries.remove(pos);
130
			
146 131
			if(isRowSelected(pos)) {
147
				selectAlternative(pos);
148
			}
149
			entries.remove(pos);
132
				//La p?gina donde est? la entrada a borrar est? en la p?gina seleccionada
133
				if(oldSelectedPageInRow == oldSelectedPage) { 
134
					int newRowSelected = selectAlternativeRow(pos);
135
					int newPageSelected = getPageFromRow(newRowSelected);
136
					if(newPageSelected != oldSelectedPage) {
137
						setSelectedPage(newPageSelected);
138
						setChanged();
139
					    notifyObservers(EVENT_SELECTED_PAGE);
140
					    return;
141
					}
142
				}
143
			} 
150 144
			setChanged();
151
		    notifyObservers(CHANGE_REMOVE_ENTRY);
145
			notifyObservers(EVENT_REMOVE_ENTRY);
152 146
		}
153 147
	}
154 148
	
155
	private void selectAlternative(int row) {
149
	private int selectAlternativeRow(int row) {
156 150
		for (int i = 0; i < selectedRows.length; i++) {
157 151
			if(selectedRows[i] == row && selectedRows[i] != 0) {
158 152
				selectedRows[i] --;
153
				return selectedRows[i];
159 154
			}
160 155
		}
156
		return row;
161 157
	}
162 158
	
163 159
	private boolean isRowSelected(int row) {
......
196 192
		return false;
197 193
	}
198 194
	
195
	public int getEntriesCount() {
196
		return entries.size();
197
	}
198
	
199
	public Object[] getLastEntry() {
200
		return (Object[])entries.get(entries.size() - 1);
201
	}
202
	
203
	public void removeAllEntries() {
204
		entries.clear();
205
		setChanged();
206
	    notifyObservers(EVENT_REMOVE_ALL);
207
	}
208
	
209
	//*************PAGE**********************
210
	
211
	public void setEntriesPerPage(int n) {
212
		this.entriesPerPage = n;
213
		setChanged();
214
	    notifyObservers(EVENT_SELECTED_PAGE);
215
	}
216
	
217
	public void increaseSelectedPage() {
218
		if(selectedPage < getPageCount() - 1) {
219
			selectedPage ++;
220
			setChanged();
221
		    notifyObservers(EVENT_SELECTED_PAGE);
222
		}
223
	}
224
	
225
	public void decreaseSelectedPage() {
226
		if (selectedPage > 0) {
227
			selectedPage --;
228
			setChanged();
229
		    notifyObservers(EVENT_SELECTED_PAGE);
230
		}
231
	}
232
	
233
	public void setSelectedPage(int page) {
234
		if(page >= 0 && page < getPageCount()) {
235
			selectedPage = page;
236
			setChanged();
237
		    notifyObservers(EVENT_SELECTED_PAGE);
238
		}
239
	}
240
	
241
	public int getPageFromRow(int row) {
242
		return (int)(row / getEntriesPerPage());
243
	}
244
	
245
	public List<Object> getSelectedPage() {
246
		return getPage(getSelectedPageNumber());
247
	}
248
	
199 249
	public void removePage(int page) {
200 250
		if(page >= 0 && page < getPageCount()) {
201 251
			int init = entriesPerPage * page;
......
232 282
		return entriesPerPage;
233 283
	}
234 284
	
235
	public int getEntriesCount() {
236
		return entries.size();
237
	}
238
	
239
	public Object[] getLastEntry() {
240
		return (Object[])entries.get(entries.size() - 1);
241
	}
242
	
243 285
	public int getSelectedPageNumber() {
244 286
		if(selectedPage >= getPageCount()) {
245 287
			selectedPage = getPageCount() - 1;
......
249 291
		return selectedPage;
250 292
	}
251 293
	
252
	public void removeAllEntries() {
253
		entries.clear();
254
		setChanged();
255
	    notifyObservers(CHANGE_REMOVE_ALL);
256
	}
257 294
}
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.swing/org.gvsig.raster.swing.impl/src/main/java/org/gvsig/raster/swing/impl/pagedtable/PaginationBarPanel.java
69 69
		gbc1.fill = GridBagConstraints.NONE;
70 70
		gbc1.gridx = 0;
71 71
		gbc1.gridy = 0;
72
		p.add(getSelectedPage(), gbc1);		
73
		gbc1.gridy = 1;
72 74
		p.add(getNPages(), gbc1);
73
		gbc1.gridy = 1;
74
		p.add(getSelectedPage(), gbc1);
75 75
		add(p, gbc);
76 76
		
77 77
		gbc.weighty = 0;
......
135 135
	public void update(Observable o, Object arg) {
136 136
		Pager pager = (Pager)o;
137 137
		if(o instanceof Pager && arg instanceof Integer) {
138
			if(pager.getPageCount() == 0) {
139
				getNPages().setText("-");
140
				getSelectedPage().setText("-");
141
			} else {
142
				getNPages().setText(pager.getPageCount() + "");
143
				getSelectedPage().setText(pager.getSelectedPageNumber() + 1 + "");
144
			}
145
			if(pager.getSelectedPageNumber() == pager.getPageCount());
146
				
138
			setPageNumberText(pager);
139
			checkArrows(pager);	
147 140
		}
148 141
	}
142
	
143
	/**
144
	 * Sets the text of page number selected and number of pages
145
	 * @param pager
146
	 */
147
	private void setPageNumberText(Pager pager) {
148
		if(pager.getPageCount() == 0) {
149
			getNPages().setText("-");
150
			getSelectedPage().setText("-");
151
		} else {
152
			getNPages().setText(pager.getPageCount() + "");
153
			getSelectedPage().setText(pager.getSelectedPageNumber() + 1 + "");
154
		}	
155
	}
156
	
157
	/**
158
	 * Checks whether the buttons are enabled o disabled
159
	 * @param pager
160
	 */
161
	private void checkArrows(Pager pager) {
162
		if(pager.getPageCount() == 0) {
163
			getButtonDown().setEnabled(false);
164
			getButtonUp().setEnabled(false);
165
			return;
166
		}
167
		if(pager.getSelectedPageNumber() < pager.getPageCount() - 1) {
168
			getButtonDown().setEnabled(true);
169
		} else {
170
			getButtonDown().setEnabled(false);
171
		}
172
		
173
		if(pager.getSelectedPageNumber() <= 0) {
174
			getButtonUp().setEnabled(false);
175
		} else {
176
			getButtonUp().setEnabled(true);
177
		}
178
	}
149 179
}
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.swing/org.gvsig.raster.swing.impl/src/test/java/org/gvsig/raster/swing/impl/pagedtable/TestPagedTablePanel.java
24 24
package org.gvsig.raster.swing.impl.pagedtable;
25 25

  
26 26

  
27
import java.awt.BorderLayout;
28
import java.awt.Dimension;
27 29
import java.awt.event.ActionEvent;
28 30
import java.awt.event.ActionListener;
29 31

  
32
import javax.swing.BorderFactory;
30 33
import javax.swing.JFrame;
34
import javax.swing.JPanel;
31 35

  
32 36
import org.gvsig.raster.swing.pagedtable.ModelLoader;
33 37

  
34 38
public class TestPagedTablePanel implements ActionListener {
35 39
	private int                          w        = 500;
36
	private int                          h        = 150;
40
	private int                          h        = 350;
37 41
	private JFrame                       frame    = new JFrame();
38
	private PagedTableImpl                   desc     = null;
42
	private PagedTableImpl               desc     = null;
39 43

  
40 44
	public TestPagedTablePanel() {
41 45
		String[] c = new String[]{"uno", "dos", "tres"};
......
47 51
		modelLoader.setCellEditorForColumn(0, e);
48 52
		modelLoader.setColumnNames(c);
49 53
		desc = new PagedTableImpl(modelLoader);
50
		frame.getContentPane().add(desc);
54
		JPanel table = (JPanel)desc.getComponent();
55
		table.setBorder(BorderFactory.createTitledBorder("My table"));
56
		
57
		JPanel p = new JPanel();
58
		p.setLayout(new BorderLayout());
59
		p.add(table, BorderLayout.CENTER);
60
		
61
		JPanel p1 = new JPanel();
62
		p1.setPreferredSize(new Dimension(80, 0));
63
		p.add(p1, BorderLayout.EAST);
64
		
65
		JPanel p2 = new JPanel();
66
		p2.setPreferredSize(new Dimension(0, 80));
67
		p.add(p2, BorderLayout.NORTH);
68
		
69
		frame.getContentPane().add(p);
51 70
		frame.setSize(w, h);
52 71
		frame.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
53 72
		frame.setVisible(true);
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.swing/org.gvsig.raster.swing.impl/src/test/java/org/gvsig/raster/swing/impl/pagedtable/TestPagedBarPanel.java
6 6

  
7 7
import javax.swing.JFrame;
8 8

  
9
import org.gvsig.raster.swing.impl.roi.DefaultROIPanel;
10
import org.gvsig.raster.swing.roi.ROIPanel;
11
import org.gvsig.raster.swing.roi.ROIPanelDataModel;
12

  
13 9
public class TestPagedBarPanel implements ActionListener {
14 10
		private int                          w        = 50;
15 11
		private int                          h        = 250;

Also available in: Unified diff