diff options
7 files changed, 105 insertions, 72 deletions
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImagePermissionTable.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImagePermissionTable.java index cec937c2..482f80ac 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImagePermissionTable.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImagePermissionTable.java @@ -8,11 +8,11 @@ import org.openslx.dozmod.util.FormatHelper; @SuppressWarnings("serial") public class ImagePermissionTable extends ListTable<UserImagePermissions> { - private static final ListTableColumn COL_USER = new ListTableColumn("Benutzer"); - private static final ListTableColumn COL_LINK = new ListTableColumn(Boolean.class, "Link"); - private static final ListTableColumn COL_DOWNLOAD = new ListTableColumn(Boolean.class, "Download"); - private static final ListTableColumn COL_EDIT = new ListTableColumn(Boolean.class, "Edit"); - private static final ListTableColumn COL_ADMIN = new ListTableColumn(Boolean.class, "Admin"); + public static final ListTableColumn COL_USER = new ListTableColumn("Benutzer"); + public static final ListTableColumn COL_LINK = new ListTableColumn("Link", Boolean.class); + public static final ListTableColumn COL_DOWNLOAD = new ListTableColumn("Download", Boolean.class); + public static final ListTableColumn COL_EDIT = new ListTableColumn("Edit", Boolean.class); + public static final ListTableColumn COL_ADMIN = new ListTableColumn("Admin", Boolean.class); public ImagePermissionTable() { super(COL_USER, COL_LINK, COL_DOWNLOAD, COL_EDIT, COL_ADMIN); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImageTable.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImageTable.java index 9f757592..8af9a291 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImageTable.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImageTable.java @@ -11,13 +11,13 @@ import org.openslx.dozmod.util.FormatHelper; @SuppressWarnings("serial") public class ImageTable extends ListTable<ImageSummaryRead> { - private static final ListTableColumn COL_TEMPLATE = new ListTableColumn(Boolean.class, "Vorlage"); - private static final ListTableColumn COL_USABLE = new ListTableColumn(Boolean.class, "Verwendbar"); - private static final ListTableColumn COL_SIZE = new ListTableColumn(Long.class, "Größe"); - private static final ListTableColumn COL_LASTCHANGE = new ListTableColumn(Long.class, "Geändert"); - private static final ListTableColumn COL_OWNER = new ListTableColumn("Besitzer"); - private static final ListTableColumn COL_OS = new ListTableColumn("OS"); - private static final ListTableColumn COL_NAME = new ListTableColumn("Name"); + public static final ListTableColumn COL_TEMPLATE = new ListTableColumn("Vorlage", Boolean.class); + public static final ListTableColumn COL_USABLE = new ListTableColumn("Verwendbar", Boolean.class); + public static final ListTableColumn COL_SIZE = new ListTableColumn("Größe", Long.class); + public static final ListTableColumn COL_LASTCHANGE = new ListTableColumn("Geändert", Long.class); + public static final ListTableColumn COL_OWNER = new ListTableColumn("Besitzer", Sorters.userNameById); + public static final ListTableColumn COL_OS = new ListTableColumn("OS", Sorters.osNameById); + public static final ListTableColumn COL_NAME = new ListTableColumn("Name"); public ImageTable() { super(new Comparator<ImageSummaryRead>() { @@ -32,15 +32,6 @@ public class ImageTable extends ListTable<ImageSummaryRead> { return o1.imageBaseId.compareTo(o2.imageBaseId); } }, COL_NAME, COL_OS, COL_OWNER, COL_LASTCHANGE, COL_SIZE, COL_USABLE, COL_TEMPLATE); - - // first column doesn't have to be set, because standard comparator already compares strings - // second column, compares the OS - getRowSorter().setComparator(1, Sorters.osNameById); - // third column compares the owner - getRowSorter().setComparator(2, Sorters.userNameById); - // fourth and fifth column are both longs (last update and size), use default - // sixth column (version id) is string again, doesn't have to be set - // seventh column is boolean, use default } // return the right value of our image (row) depending on given column diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImageVersionTable.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImageVersionTable.java index fdd2caeb..9c940af8 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImageVersionTable.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImageVersionTable.java @@ -7,11 +7,11 @@ import org.openslx.dozmod.util.FormatHelper; @SuppressWarnings("serial") public class ImageVersionTable extends ListTable<ImageVersionDetails> { - private static final ListTableColumn COL_CREATED = new ListTableColumn(Long.class, "Erstellungszeitpunkt"); - private static final ListTableColumn COL_UPLOADER = new ListTableColumn("Ersteller"); - private static final ListTableColumn COL_VALID = new ListTableColumn(Boolean.class, "Verwendbar"); - private static final ListTableColumn COL_SIZE = new ListTableColumn(Long.class, "Größe"); - private static final ListTableColumn COL_ID = new ListTableColumn("Interne ID"); + public static final ListTableColumn COL_CREATED = new ListTableColumn("Erstellungszeitpunkt", Long.class); + public static final ListTableColumn COL_UPLOADER = new ListTableColumn("Ersteller"); + public static final ListTableColumn COL_VALID = new ListTableColumn("Verwendbar", Boolean.class); + public static final ListTableColumn COL_SIZE = new ListTableColumn("Größe", Long.class); + public static final ListTableColumn COL_ID = new ListTableColumn("Interne ID"); public ImageVersionTable() { super(COL_CREATED, COL_UPLOADER, COL_VALID, COL_SIZE, COL_ID); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/LecturePermissionTable.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/LecturePermissionTable.java index 8279dba9..f420e7f0 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/LecturePermissionTable.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/LecturePermissionTable.java @@ -8,9 +8,9 @@ import org.openslx.dozmod.util.FormatHelper; @SuppressWarnings("serial") public class LecturePermissionTable extends ListTable<UserLecturePermissions> { - private static final ListTableColumn COL_USER = new ListTableColumn("Benutzer"); - private static final ListTableColumn COL_EDIT = new ListTableColumn(Boolean.class, "Edit"); - private static final ListTableColumn COL_ADMIN = new ListTableColumn(Boolean.class, "Admin"); + public static final ListTableColumn COL_USER = new ListTableColumn("Benutzer"); + public static final ListTableColumn COL_EDIT = new ListTableColumn("Edit", Boolean.class); + public static final ListTableColumn COL_ADMIN = new ListTableColumn("Admin", Boolean.class); public LecturePermissionTable() { super(COL_USER, COL_EDIT, COL_ADMIN); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/LectureTable.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/LectureTable.java index 4f849e86..4d7c793a 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/LectureTable.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/LectureTable.java @@ -16,12 +16,12 @@ import org.openslx.dozmod.util.FormatHelper; @SuppressWarnings("serial") public class LectureTable extends ListTable<LectureSummary> { - private static final ListTableColumn COL_NAME = new ListTableColumn("Name"); - private static final ListTableColumn COL_OWNER = new ListTableColumn("Besitzer"); - private static final ListTableColumn COL_STARTTIME = new ListTableColumn(Long.class, "Startzeit"); - private static final ListTableColumn COL_ENDTIME = new ListTableColumn(Long.class, "Ablaufzeitpunkt"); - private static final ListTableColumn COL_ENABLED = new ListTableColumn(Boolean.class, "Aktiviert"); - private static final ListTableColumn COL_VALID = new ListTableColumn(Boolean.class, "VM gültig"); + public static final ListTableColumn COL_NAME = new ListTableColumn("Name"); + public static final ListTableColumn COL_OWNER = new ListTableColumn("Besitzer", Sorters.userNameById); + public static final ListTableColumn COL_STARTTIME = new ListTableColumn("Startzeit", Long.class); + public static final ListTableColumn COL_ENDTIME = new ListTableColumn("Ablaufzeitpunkt", Long.class); + public static final ListTableColumn COL_ENABLED = new ListTableColumn("Aktiviert", Boolean.class); + public static final ListTableColumn COL_VALID = new ListTableColumn("VM gültig", Boolean.class); private final Font boldFont; @@ -29,10 +29,6 @@ public class LectureTable extends ListTable<LectureSummary> { public LectureTable() { super(COL_NAME, COL_OWNER, COL_STARTTIME, COL_ENDTIME, COL_ENABLED, COL_VALID); - // first column doesn't have to be set, because standard comparator already compares strings - // second column compares the owner - getRowSorter().setComparator(1, Sorters.userNameById); - // third and fourth column are both longs (last update and size), use default comparator boldFont = getFont().deriveFont(Font.BOLD); Color fg = UIManager.getColor("Table.foreground"); Color bg = UIManager.getColor("Table.background"); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ListTable.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ListTable.java index fe62b125..1763bb42 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ListTable.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ListTable.java @@ -37,15 +37,24 @@ public abstract class ListTable<T> extends JTable { public ListTable(Comparator<T> itemComparator, ListTableColumn... columns) { super(); + for (int i = 0; i < columns.length; i++) { + TableColumn tc = new TableColumn(i); + tc.setHeaderValue(columns[i].colName); + addColumn(tc); + } this.model = new ListModel<T>(this, columns); this.sorter = new TableRowSorter<ListModel<T>>(model); + // for (int i = 0; i < columns.length; ++i) { + // if (columns[i].sortComparator != null) { + // sorter.setComparator(i, columns[i].sortComparator); + // } + // } this.adjuster = new TableColumnAdjuster(this, 5); this.itemComparator = itemComparator; this.setModel(model); this.setRowSorter(sorter); this.setShowGrid(false); this.setCellSelectionEnabled(false); - this.createDefaultColumnsFromModel(); this.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); this.getTableHeader().setReorderingAllowed(false); this.setDefaultRenderer(Object.class, new ListTableRenderer()); @@ -53,12 +62,6 @@ public abstract class ListTable<T> extends JTable { this.setDefaultEditor(Boolean.class, getDefaultEditor(Boolean.class)); this.setRowSelectionAllowed(true); this.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); - TableColumnModel cm = getColumnModel(); - for (int i = 0; i < columns.length; ++i) { - columns[i].tableColumn = cm.getColumn(i); - columns[i].columnModel = cm; - } - } protected abstract Object getValueAtInternal(T item, ListTableColumn column); @@ -126,11 +129,26 @@ public abstract class ListTable<T> extends JTable { } } + /** + * Show or hide the given column of the table + * + * @param column + * @param visible + */ + public void setColumnVisible(ListTableColumn column, boolean visible) { + model.setVisible(column, visible); + } + @Override public TableRowSorter<ListModel<T>> getRowSorter() { return sorter; } + @Override + public ListModel<T> getModel() { + return model; + } + /** * Called when rendering a column is being prepared. This is a good time to * change the color or font for the given cell. @@ -171,7 +189,7 @@ public abstract class ListTable<T> extends JTable { */ public static class ListModel<T> extends AbstractTableModel { - private final ListTableColumn[] columns; + private final ColumnState[] columns; private ArrayList<T> data = null; @@ -179,7 +197,10 @@ public abstract class ListTable<T> extends JTable { public ListModel(ListTable<T> table, ListTableColumn... columns) { this.table = table; - this.columns = columns; + this.columns = new ColumnState[columns.length]; + for (int i = 0; i < columns.length; ++i) { + this.columns[i] = new ColumnState(columns[i]); + } } public void setData(List<T> list) { @@ -188,7 +209,28 @@ public abstract class ListTable<T> extends JTable { } public ListTableColumn getColumn(int modelColumnIndex) { - return columns[modelColumnIndex]; + return columns[modelColumnIndex].column; + } + + public void setVisible(ListTableColumn column, boolean visible) { + TableColumnModel cm = table.getColumnModel(); + for (int i = 0; i < columns.length; ++i) { + ColumnState c = columns[i]; + if (c.column != column) + continue; + if ((c.hiddenColumn == null && visible) || (c.hiddenColumn != null && !visible)) + return; + if (visible) { + cm.addColumn(c.hiddenColumn); + cm.moveColumn(cm.getColumnCount() - 1, c.oldIndex); + c.hiddenColumn = null; + } else { + c.oldIndex = table.convertColumnIndexToView(i); + c.hiddenColumn = cm.getColumn(c.oldIndex); + cm.removeColumn(c.hiddenColumn); + } + break; + } } @Override @@ -203,19 +245,29 @@ public abstract class ListTable<T> extends JTable { @Override public String getColumnName(int col) { - return columns[col].colName; + return columns[col].column.colName; } @Override public Class<?> getColumnClass(int col) { - return columns[col].colClass; + return columns[col].column.colClass; } @Override public Object getValueAt(int rowIndex, int columnIndex) { T item = table.getModelRow(rowIndex); - int realColumn = table.convertColumnIndexToModel(columnIndex); - return table.getValueAtInternal(item, columns[realColumn]); + return table.getValueAtInternal(item, columns[columnIndex].column); + } + + private static class ColumnState { + int oldIndex; + final ListTableColumn column; + TableColumn hiddenColumn = null; + + ColumnState(ListTableColumn column) { + this.column = column; + } + } } @@ -238,33 +290,26 @@ public abstract class ListTable<T> extends JTable { } public static class ListTableColumn { - private boolean hidden = false; - private TableColumn tableColumn = null; - private TableColumnModel columnModel = null; public final Class<?> colClass; public final String colName; + public final Comparator<?> sortComparator; public ListTableColumn(String colName) { - this(String.class, colName); + this(colName, String.class, null); } - public ListTableColumn(Class<?> colClass, String colName) { - this.colClass = colClass; - this.colName = colName; + public ListTableColumn(String colName, Class<?> colClass) { + this(colName, colClass, null); } - public void show() { - if (!hidden) - return; - columnModel.addColumn(tableColumn); - hidden = false; + public ListTableColumn(String colName, Class<?> colClass, Comparator<?> sortComparator) { + this.colName = colName; + this.colClass = colClass; + this.sortComparator = sortComparator; } - public void hide() { - if (hidden) - return; - columnModel.removeColumn(tableColumn); - hidden = true; + public ListTableColumn(String colName, Comparator<?> sortComparator) { + this(colName, String.class, sortComparator); } } diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/UserTable.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/UserTable.java index bfdf9b26..b227916e 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/UserTable.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/UserTable.java @@ -6,8 +6,8 @@ import org.openslx.dozmod.util.FormatHelper; @SuppressWarnings("serial") public class UserTable extends ListTable<UserInfo> { - private static final ListTableColumn COL_NAME = new ListTableColumn("Name"); - private static final ListTableColumn COL_MAIL = new ListTableColumn("Mail"); + public static final ListTableColumn COL_NAME = new ListTableColumn("Name"); + public static final ListTableColumn COL_MAIL = new ListTableColumn("Mail"); public UserTable() { super(COL_NAME, COL_MAIL); @@ -21,4 +21,5 @@ public class UserTable extends ListTable<UserInfo> { return row.eMail; throw new IndexOutOfBoundsException(); } + } |
