/* * Copyright 2004 - 2012 Christian Sprajc. All rights reserved. * * This file is part of PowerFolder. * * PowerFolder 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. * * PowerFolder 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 PowerFolder. If not, see <http://www.gnu.org/licenses/>. * * $Id: SingleFileRestoreTable.java 5178 2008-09-10 14:59:17Z harry $ */ package de.dal33t.powerfolder.ui.wizard.table; import de.dal33t.powerfolder.ui.util.Icons; import de.dal33t.powerfolder.ui.util.ColorUtil; import de.dal33t.powerfolder.ui.render.SortedTableHeaderRenderer; import de.dal33t.powerfolder.light.FileInfo; import de.dal33t.powerfolder.ui.wizard.data.SingleFileRestoreItem; import de.dal33t.powerfolder.util.Format; import javax.swing.*; import javax.swing.table.TableColumn; import javax.swing.table.JTableHeader; import javax.swing.table.TableModel; import javax.swing.table.DefaultTableCellRenderer; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; public class SingleFileRestoreTable extends JTable { public SingleFileRestoreTable(SingleFileRestoreTableModel model) { super(model); setRowHeight(Icons.getIconById(Icons.NODE_CONNECTED).getIconHeight() + 3); setColumnSelectionAllowed(false); setShowGrid(false); setupColumns(); setDefaultRenderer(FileInfo.class, new MyDefaultTreeCellRenderer()); getTableHeader().addMouseListener(new TableHeaderMouseListener()); // Associate a header renderer with all columns. SortedTableHeaderRenderer.associateHeaderRenderer(model, getColumnModel(), 0, true); } /** * Sets the column sizes of the table */ private void setupColumns() { int totalWidth = getWidth(); // Otherwise the table header is not visible: getTableHeader().setPreferredSize(new Dimension(totalWidth, 20)); TableColumn column = getColumn(getColumnName(0)); column.setPreferredWidth(100); column = getColumn(getColumnName(1)); column.setPreferredWidth(100); column = getColumn(getColumnName(2)); column.setPreferredWidth(100); column = getColumn(getColumnName(3)); column.setPreferredWidth(100); } public void setSelectedFileInfo(FileInfo selectedFileInfo) { if (selectedFileInfo != null) { for (int i = 0; i < getModel().getRowCount(); i++) { FileInfo value = (FileInfo) getModel().getValueAt(i, 1); if (value.isVersionDateAndSizeIdentical(selectedFileInfo)) { ListSelectionModel model = getSelectionModel(); model.setSelectionInterval(i, i); break; } } } } public SingleFileRestoreItem getSelectedRestoreItem() { int row = getSelectedRow(); if (row < 0) { return null; } return (SingleFileRestoreItem) getValueAt(row, 0); } /** * Listener on table header, takes care about the sorting of table * * @author <a href="mailto:totmacher@powerfolder.com">Christian Sprajc </a> */ private static class TableHeaderMouseListener extends MouseAdapter { public void mouseClicked(MouseEvent e) { if (SwingUtilities.isLeftMouseButton(e)) { JTableHeader tableHeader = (JTableHeader) e.getSource(); int columnNo = tableHeader.columnAtPoint(e.getPoint()); TableColumn column = tableHeader.getColumnModel().getColumn(columnNo); int modelColumnNo = column.getModelIndex(); TableModel model = tableHeader.getTable().getModel(); if (model instanceof SingleFileRestoreTableModel) { SingleFileRestoreTableModel restoreFilesTableModel = (SingleFileRestoreTableModel) model; boolean freshSorted = restoreFilesTableModel.sortBy(modelColumnNo); if (!freshSorted) { // reverse list restoreFilesTableModel.reverseList(); } } } } } private static class MyDefaultTreeCellRenderer extends DefaultTableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { SingleFileRestoreItem restoreItem = (SingleFileRestoreItem) value; setIcon(null); String myValue = ""; switch (column) { case SingleFileRestoreTableModel.COL_MODIFIED_DATE: // modified date myValue = Format.formatDateShort(restoreItem.getFileInfo().getModifiedDate()); setHorizontalAlignment(RIGHT); break; case SingleFileRestoreTableModel.COL_VERSION: // version myValue = Format.formatLong(restoreItem.getFileInfo().getVersion()); setHorizontalAlignment(RIGHT); break; case SingleFileRestoreTableModel.COL_SIZE: // size myValue = Format.formatBytesShort(restoreItem.getFileInfo().getSize()); setHorizontalAlignment(RIGHT); break; case SingleFileRestoreTableModel.COL_LOCAL: // size myValue = Format.formatBoolean(restoreItem.isLocal()); setHorizontalAlignment(RIGHT); break; } Component c = super.getTableCellRendererComponent(table, myValue, isSelected, hasFocus, row, column); if (!isSelected) { setBackground(row % 2 == 0 ? ColorUtil.EVEN_TABLE_ROW_COLOR : ColorUtil.ODD_TABLE_ROW_COLOR); } return c; } } }