diff options
| author | Jonathan Bauer | 2015-08-03 18:21:40 +0200 |
|---|---|---|
| committer | Jonathan Bauer | 2015-08-03 18:21:40 +0200 |
| commit | 59de878b3a3ec171b12957bdc119827fefabd9ab (patch) | |
| tree | 60ffd0b45f2464fa88b5a575176be5b304ab585b /dozentenmodul/src/main/java | |
| parent | Merge branch 'v1.1' of git.openslx.org:openslx-ng/tutor-module into v1.1 (diff) | |
| download | tutor-module-59de878b3a3ec171b12957bdc119827fefabd9ab.tar.gz tutor-module-59de878b3a3ec171b12957bdc119827fefabd9ab.tar.xz tutor-module-59de878b3a3ec171b12957bdc119827fefabd9ab.zip | |
[client] add column classes to generic ListTable
better handling of view vs model idnex getters
Diffstat (limited to 'dozentenmodul/src/main/java')
6 files changed, 93 insertions, 16 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 bfab9ede..9092e8af 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 @@ -1,5 +1,6 @@ package org.openslx.dozmod.gui.control.table; +import org.apache.log4j.Logger; import org.openslx.bwlp.thrift.iface.ImagePermissions; import org.openslx.dozmod.gui.control.table.ImagePermissionTable.UserImagePermissions; import org.openslx.dozmod.thrift.UserCache; @@ -8,15 +9,19 @@ import org.openslx.dozmod.util.FormatHelper; @SuppressWarnings("serial") public class ImagePermissionTable extends ListTable<UserImagePermissions> { + private final static Logger LOGGER = Logger.getLogger(ImagePermissionTable.class); + private static String[] columnNames = { "Benutzer", "Link", "Download", "Bearbeiten", "Admin" }; + private static Class<?>[] columnClasses = { String.class, Boolean.class, Boolean.class, Boolean.class, Boolean.class }; + public ImagePermissionTable() { - super(columnNames); + super(columnNames, columnClasses); } @Override protected Object getValueAtInternal(int rowIndex, int columnIndex) { - UserImagePermissions row = get(rowIndex); + UserImagePermissions row = getModelRow(rowIndex); if (columnIndex == 0) return FormatHelper.userName(UserCache.find(row.userId)); if (columnIndex == 1) @@ -29,6 +34,27 @@ public class ImagePermissionTable extends ListTable<UserImagePermissions> { return row.permissions.admin; throw new IndexOutOfBoundsException(); } + @Override + public boolean isCellEditable(int row, int col) { + // TODO actual permission checks + return col != 0; + } + @Override + public void setValueAt(Object aValue, int rowIndex, int columnIndex) { + // aValue must be boolean + if (!(aValue instanceof Boolean)) return; + // TODO convert index to model index + UserImagePermissions row = getViewRow(rowIndex); + if (columnIndex == 1) + row.permissions.link = (boolean) aValue; + if (columnIndex == 2) + row.permissions.download = (boolean) aValue; + if (columnIndex == 3) + row.permissions.edit = (boolean) aValue; + if (columnIndex == 4) + row.permissions.admin = (boolean) aValue; + return; + } /** * Helper class for linking UserIds to permissions of an image. 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 b6ccba23..dfe0858a 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,16 @@ public class ImageTable extends ListTable<ImageSummaryRead> { private static String[] columnNames = { "Name", "OS", "Verantwortlicher", "Letztes Update", "Größe" }; + private static Class<?>[] columnClasses = + { String.class, String.class, String.class, String.class, String.class }; + public ImageTable() { - super(columnNames); + super(columnNames, columnClasses); } @Override protected Object getValueAtInternal(int rowIndex, int columnIndex) { - ImageSummaryRead row = get(rowIndex); + ImageSummaryRead row = getModelRow(rowIndex); if (columnIndex == 0) return row.getImageName(); if (columnIndex == 1) @@ -30,5 +33,4 @@ public class ImageTable extends ListTable<ImageSummaryRead> { return row.getCurrentVersionId() == null ? "-" : FormatHelper.bytes(row.getFileSize(), false); throw new IndexOutOfBoundsException(); } - } 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 67a7e53d..28ff9f9b 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 @@ -11,12 +11,12 @@ public class LecturePermissionTable extends ListTable<UserLecturePermissions> { private static String[] columnNames = { "Benutzer", "Bearbeiten", "Admin" }; public LecturePermissionTable() { - super(columnNames); + super(columnNames, null); } @Override protected Object getValueAtInternal(int rowIndex, int columnIndex) { - UserLecturePermissions row = get(rowIndex); + UserLecturePermissions row = getModelRow(rowIndex); if (columnIndex == 0) return FormatHelper.userName(UserCache.find(row.userId)); if (columnIndex == 1) 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 dc2c93f8..97e553bc 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 @@ -10,12 +10,12 @@ public class LectureTable extends ListTable<LectureSummary> { private static String[] columnNames = { "Name", "Verantwortlicher" }; public LectureTable() { - super(columnNames); + super(columnNames, null); } @Override protected Object getValueAtInternal(int rowIndex, int columnIndex) { - LectureSummary row = get(rowIndex); + LectureSummary row = getModelRow(rowIndex); if (columnIndex == 0) return row.getLectureName(); if (columnIndex == 1) 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 cf1a4c5f..18f3d015 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 @@ -10,6 +10,8 @@ import javax.swing.RowSorter; import javax.swing.SortOrder; import javax.swing.table.AbstractTableModel; import javax.swing.table.DefaultTableCellRenderer; +import javax.swing.table.TableCellEditor; +import javax.swing.table.TableCellRenderer; import javax.swing.table.TableRowSorter; import org.openslx.dozmod.gui.helper.TableColumnAdjuster; @@ -20,14 +22,14 @@ public abstract class ListTable<T> extends JTable { private final ListModel model; private final TableRowSorter<ListModel> sorter; + private List<RowSorter.SortKey> sortKeys = new ArrayList<>(); private final TableColumnAdjuster adjuster; - public ListTable(String[] columnNames) { - //System.setProperty("sun.awt.noerasebackground", "true"); needed? + public ListTable(String[] columnNames, Class<?>[] columnClasses) { super(); - this.model = new ListModel(columnNames); + this.model = new ListModel(columnNames, columnClasses); this.sorter = new TableRowSorter<ListModel>(model); this.adjuster = new TableColumnAdjuster(this, 5); this.setModel(model); @@ -44,17 +46,21 @@ public abstract class ListTable<T> extends JTable { protected abstract Object getValueAtInternal(int rowIndex, int columnIndex); - public T get(int rowIndex) { + public T getModelRow(int rowIndex) { if (rowIndex < 0 || rowIndex >= model.getRowCount()) throw new IndexOutOfBoundsException(); return model.data.get(rowIndex); } + public T getViewRow(int rowIndex) { + return getModelRow(convertRowIndexToModel(rowIndex)); + } + public T getSelectedItem() { int rowIndex = getSelectedRow(); if (rowIndex == -1) return null; - return get(convertRowIndexToModel(rowIndex)); + return getViewRow(rowIndex); } public void setData(List<T> data, boolean sort) { @@ -74,6 +80,40 @@ public abstract class ListTable<T> extends JTable { public TableRowSorter<ListModel> getRowSorter() { return sorter; } + private Class<?> editingClass; + + @Override + public TableCellRenderer getCellRenderer(int row, int column) { + editingClass = null; + int modelColumn = convertColumnIndexToModel(column); + if (modelColumn >= 1) { + Class<?> rowClass = getModel().getValueAt(row, modelColumn).getClass(); + return getDefaultRenderer(rowClass); + } else { + return super.getCellRenderer(row, column); + } + } + + @Override + public TableCellEditor getCellEditor(int row, int column) { + editingClass = null; + int modelColumn = convertColumnIndexToModel(column); + if (modelColumn > 0) { + editingClass = getModel().getValueAt(row, modelColumn).getClass(); + return getDefaultEditor(editingClass); + } else { + return super.getCellEditor(row, column); + } + } + // This method is also invoked by the editor when the value in the editor + // component is saved in the TableModel. The class was saved when the + // editor was invoked so the proper class can be created. + + @Override + public Class<?> getColumnClass(int column) { + return editingClass != null ? editingClass : model.getColumnClass(column); + } + /** * Model for our table @@ -82,10 +122,14 @@ public abstract class ListTable<T> extends JTable { private final String[] columnNames; + private final Class<?>[] columnClasses; + protected List<T> data = null; - public ListModel(String[] columnNames) { + public ListModel(String[] columnNames, Class<?>[] columnClasses) { this.columnNames = columnNames; + this.columnClasses = columnClasses; + // TODO check same length or IllegalArgumentException } public void setData(List<T> list) { @@ -110,6 +154,9 @@ public abstract class ListTable<T> extends JTable { @Override public Class<?> getColumnClass(int c) { + if (columnClasses != null && c < columnClasses.length) { + return columnClasses[c]; + } return String.class; } diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageListWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageListWindow.java index 65084021..af70b22b 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageListWindow.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageListWindow.java @@ -6,6 +6,7 @@ import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.List; +import java.util.regex.PatternSyntaxException; import javax.swing.JFrame; import javax.swing.JTextField; @@ -41,6 +42,7 @@ public class ImageListWindow extends ImageListWindowLayout { // filter the objects in the table depending on the search field searchTextField.getDocument().addDocumentListener(new DocumentListener() { + @Override public void removeUpdate(DocumentEvent e) { changedUpdate(e); @@ -56,7 +58,7 @@ public class ImageListWindow extends ImageListWindowLayout { // stuff try { imageTable.getRowSorter().setRowFilter(RowFilter.regexFilter("(?i)"+searchTextField.getText(), 0, 1, 2)); - } catch (Exception ex) { + } catch (IllegalArgumentException ex) { // TODO set background color of search field to something redish searchTextField.setBackground(Color.RED); } |
