From dc15299324a96ae6bb5cf601ec35ec340290fef0 Mon Sep 17 00:00:00 2001 From: Jacob Wisor Date: Thu, 3 Oct 2013 14:54:25 +0200 Subject: * Cache viewer update: - Can be closed by ESC key - Enabling and disabling of operational buttons is handled properly - Time consuming operations are indicated by a mouse busy cursor - "Size" and "Last Modified" columns display localized data * netx/net/sourceforge/jnlp/controlpanel/CachePane.java: Moved JButtons to members. (addComponents): Modified to make use of new NonEditableTableModel. Added ListSelectionListener to propertly handle enabling and disabling of operational JButtons when selecting a resource from the cache table. Moved inital populating of the cache table to CacheViewer's constructor until after the CachePane has been instatiated. Added a general purpose Comparator for all non-String columns in the table model. Added a TableCellRenderer with proper localized rendering of "Size" and "Last Modified" columns as well as the content of "Name" and "Path" columns. (createButtonPanel): Moved delete operation into new method invokeDeleteLater(), added mouse cursor busy indicator, and proper handling of enabling and disabling of operational JButtons when pushing the delete button. Moved refresh operation when pushing the refresh button into new method invokePopulateLater() and added proper handling of enabling and disabling of operational JButtons while refreshing. Replaced closing the cache viewer dialog via JDialog.dispose() when pushing the delete button by a post of the WindowEvent.WINDOW_CLOSING event to the CacheViewer dialog in order to effectively remove the newly introduced KeyEventDispatcher. (invokeDeleteLater): New method: Posts an event to the event queue deleting the currently selected resource. (invokePopulateLater): New method: Posts an event to the event queue repopulating the cache table. (populateTable): Added mouse cursor busy indicator. (generateData): Modified cache table's per row data model for proper rendering and sorting to: DirectoryNode, File, String, String, Long, Date. * netx/net/sourceforge/jnlp/controlpanel/CacheViewer.java: (CacheViewer): Added null parameter check. Added a KeyEventDispatcher to enable closing the CacheViewer dialog on a KeyEvent.VK_ESCAPE key event. Replaced closing the cache viewer dialog via JDialog.dispose() by a post of the WindowEvent.WINDOW_CLOSING event to the CacheViewer dialog in order to effectively remove the newly introduced KeyEventDispatcher. * netx/net/sourceforge/jnlp/util/ui/NonEditableTableModel.java: Added a new table model that in effect is a javax.swing.table.DefaultTableModel except for no cell being editable. * netx/net/sourceforge/jnlp/util/ui/package-info.java: Added new package for UI common and recurrung UI tasks with documentation --- .../jnlp/util/ui/NonEditableTableModel.java | 124 +++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 netx/net/sourceforge/jnlp/util/ui/NonEditableTableModel.java (limited to 'netx/net/sourceforge/jnlp/util/ui/NonEditableTableModel.java') diff --git a/netx/net/sourceforge/jnlp/util/ui/NonEditableTableModel.java b/netx/net/sourceforge/jnlp/util/ui/NonEditableTableModel.java new file mode 100644 index 0000000..4f2c409 --- /dev/null +++ b/netx/net/sourceforge/jnlp/util/ui/NonEditableTableModel.java @@ -0,0 +1,124 @@ +/* NonEditableTableModel.java + Copyright (C) 2013 Red Hat, Inc. + +This file is part of IcedTea. + +IcedTea is free software; you can redistribute it and/or modify it under the +terms of the GNU General Public License as published by the Free Software +Foundation, version 2. + +IcedTea is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +IcedTea; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is making a +combined work based on this library. Thus, the terms and conditions of the GNU +General Public License cover the whole combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent modules, and +to copy and distribute the resulting executable under terms of your choice, +provided that you also meet, for each linked independent module, the terms and +conditions of the license of that module. An independent module is a module +which is not derived from or based on this library. If you modify this +library, you may extend this exception to your version of the library, but you +are not obligated to do so. If you do not wish to do so, delete this exception +statement from your version. +*/ +package net.sourceforge.jnlp.util.ui; + +import java.util.Vector; +import javax.swing.table.DefaultTableModel; + +/** + * A table model that in effect is a {@link DefaultTableModel} except for no + * cell being editable. + * @see DefaultTableModel + * @since IcedTea-Web 1.5 + */ +public class NonEditableTableModel extends DefaultTableModel { + /** + * Constructs a {@link javax.swing.table.TableModel} that serves only one + * purpose: make cells of certificate tables not editable. + * @see DefaultTableModel#DefaultTableModel() + */ + public NonEditableTableModel() { + super(); + } + + /** + * Constructs a {@link javax.swing.table.TableModel} that serves only one + * purpose: make cells of certificate tables not editable. + * @param rowCount the number of rows the table holds + * @param columnCount the number of columns the table holds + * @see DefaultTableModel#DefaultTableModel(int,int) + */ + public NonEditableTableModel(final int rowCount, final int columnCount) { + super(rowCount, columnCount); + } + + /** + * Constructs a {@link javax.swing.table.TableModel} that serves only one + * purpose: make cells of certificate tables not editable. + * @param data the data of the table + * @param columnNames the names of the columns + * @see DefaultTableModel#DefaultTableModel(Object[][],Object[]) + */ + public NonEditableTableModel(final Object[][] data, final Object[] columnNames) { + super(data, columnNames); + } + + /** + * Constructs a {@link javax.swing.table.TableModel} that serves only one + * purpose: make cells of certificate tables not editable. + * @param columnNames {@code array} containing the names of the new columns; + * if this is {@code null} then the model has no columns + * @param rowCount the number of rows the table holds + * @see DefaultTableModel#DefaultTableModel(Object[],int) + */ + public NonEditableTableModel(final Object[] columnNames, final int rowCount) { + super(columnNames, rowCount); + } + + /** + * Constructs a {@link javax.swing.table.TableModel} that serves only one + * purpose: make cells of certificate tables not editable. + * @param columnNames {@code vector} containing the names of the new columns; + * if this is {@code null} then the model has no columns + * @param rowCount the number of rows the table holds + * @see DefaultTableModel#DefaultTableModel(Vector,int) + */ + public NonEditableTableModel(final Vector columnNames, final int rowCount) { + super(columnNames, rowCount); + } + + /** + * Constructs a {@link javax.swing.table.TableModel} that serves only one + * purpose: make cells of certificate tables not editable. + * @param data the data of the table, a {@code Vector} of {@code Vector}s + * of {@code Object} values + * @param columnNames {@code vector} containing the names of the new columns + * @see DefaultTableModel#DefaultTableModel(Vector,Vector) + */ + public NonEditableTableModel(final Vector data, final Vector columnNames) { + super(data, columnNames); + } + + /** + * This method always returns {@code false} to make the table's cells not + * editable. + * @param row the row whose value to be queried + * @param column the column whose value to be queried + * @return always {@code false} + */ + @Override + public boolean isCellEditable(final int row, final int column) { + return false; + } +} -- cgit v1.2.3