package org.appwork.utils.swing.table.columns; import javax.swing.BorderFactory; import javax.swing.JComponent; import javax.swing.JProgressBar; import org.appwork.utils.swing.table.ExtColumn; import org.appwork.utils.swing.table.ExtDefaultRowSorter; import org.appwork.utils.swing.table.ExtTable; import org.appwork.utils.swing.table.ExtTableModel; abstract public class ExtProgressColumn<E> extends ExtColumn<E> { private static final long serialVersionUID = -2473320164484034664L; protected JProgressBar bar; /** * */ public ExtProgressColumn(final String title) { this(title, null); } public ExtProgressColumn(final String name, final ExtTableModel<E> table) { super(name, table); this.bar = new JProgressBar(); this.bar.setOpaque(false); this.bar.setStringPainted(true); this.bar.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1), this.bar.getBorder())); this.setRowSorter(new ExtDefaultRowSorter<E>() { @Override public int compare(final E o1, final E o2) { final long v1 = ExtProgressColumn.this.getValue(o1); final long v2 = ExtProgressColumn.this.getValue(o2); if (v1 == v2) { return 0; } if (this.isSortOrderToggle()) { return v1 > v2 ? -1 : 1; } else { return v2 < v1 ? -1 : 1; } } }); } /* * (non-Javadoc) * * @see * com.rapidshare.rsmanager.gui.components.table.ExtColumn#getCellEditorValue * () */ @Override public Object getCellEditorValue() { return null; } protected long getMax(final E value) { return 100; } @Override public JComponent getRendererComponent(final ExtTable<E> table, final E value, final boolean isSelected, final boolean hasFocus, final int row, final int column) { this.bar.setIndeterminate(false); // Normalize value and maxvalue to fit in the integer range long v = this.getValue(value); long m = this.getMax(value); final double factor = Math.max(v / (double) Integer.MAX_VALUE, m / (double) Integer.MAX_VALUE); if (factor >= 1.0) { v /= factor; m /= factor; } // take care to set the maximum before the value!! this.bar.setMaximum((int) m); this.bar.setValue((int) v); this.bar.setString(this.getString(value)); if (isSelected) { this.bar.setForeground(this.getModel().getTable().getColumnForegroundSelected()); this.bar.setBackground(this.getModel().getTable().getColumnBackgroundSelected()); } else { this.bar.setForeground(this.getModel().getTable().getColumnForeground()); this.bar.setBackground(this.getModel().getTable().getColumnBackground()); } this.bar.setOpaque(true); this.bar.setEnabled(this.isEnabled(value)); this.bar.setToolTipText(this.bar.getString()); return this.bar; } abstract protected String getString(E value); abstract protected long getValue(E value); /* * (non-Javadoc) * * @see * com.rapidshare.rsmanager.gui.components.table.ExtColumn#isEditable(java * .lang.Object) */ @Override public boolean isEditable(final E obj) { return false; } /* * (non-Javadoc) * * @see * com.rapidshare.rsmanager.gui.components.table.ExtColumn#isEnabled(java * .lang.Object) */ @Override public boolean isEnabled(final E obj) { return true; } /* * (non-Javadoc) * * @see * com.rapidshare.rsmanager.gui.components.table.ExtColumn#isSortable(java * .lang.Object) */ @Override public boolean isSortable(final E obj) { return true; } /* * (non-Javadoc) * * @see * com.rapidshare.rsmanager.gui.components.table.ExtColumn#setValue(java * .lang.Object, java.lang.Object) */ @Override public void setValue(final Object value, final E object) { } }