summaryrefslogtreecommitdiffstats
path: root/dozentenmodul/src/main/java/org
diff options
context:
space:
mode:
authorSimon Rettberg2015-08-27 14:00:50 +0200
committerSimon Rettberg2015-08-27 14:00:50 +0200
commitf63e6eed89cf610f892802233335ca80f6aff0ec (patch)
tree7c39a3c2d2d547a17cb2cbeae1d4786cdb51e839 /dozentenmodul/src/main/java/org
parent[client] Changes to column handling in ListTable (diff)
downloadtutor-module-f63e6eed89cf610f892802233335ca80f6aff0ec.tar.gz
tutor-module-f63e6eed89cf610f892802233335ca80f6aff0ec.tar.xz
tutor-module-f63e6eed89cf610f892802233335ca80f6aff0ec.zip
[client] ListTable: Support showing and hiding columns; set sorter through Column class
Diffstat (limited to 'dozentenmodul/src/main/java/org')
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImagePermissionTable.java10
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImageTable.java23
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImageVersionTable.java10
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/LecturePermissionTable.java6
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/LectureTable.java16
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ListTable.java107
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/UserTable.java5
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();
}
+
}