summaryrefslogtreecommitdiffstats
path: root/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/ImageListViewer.java
diff options
context:
space:
mode:
authorStephan Schwaer2015-08-25 17:50:56 +0200
committerStephan Schwaer2015-08-25 17:50:56 +0200
commit5ebff25e09415f632a129f5df5478064496dcc8e (patch)
tree12c42bbbdc43e9f90e5ebe368cc9e854bbec3bd3 /dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/ImageListViewer.java
parent[client] fix description label beeing sucky (diff)
downloadtutor-module-5ebff25e09415f632a129f5df5478064496dcc8e.tar.gz
tutor-module-5ebff25e09415f632a129f5df5478064496dcc8e.tar.xz
tutor-module-5ebff25e09415f632a129f5df5478064496dcc8e.zip
[client] Extracted ImageList from imageListWindow to ImageListViewer.
Diffstat (limited to 'dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/ImageListViewer.java')
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/ImageListViewer.java192
1 files changed, 192 insertions, 0 deletions
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/ImageListViewer.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/ImageListViewer.java
new file mode 100644
index 00000000..f0b41693
--- /dev/null
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/ImageListViewer.java
@@ -0,0 +1,192 @@
+package org.openslx.dozmod.gui.control;
+
+import java.awt.Color;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.BoxLayout;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextField;
+import javax.swing.RowFilter;
+import javax.swing.UIManager;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
+
+import org.openslx.bwlp.thrift.iface.ImageSummaryRead;
+import org.openslx.dozmod.gui.Gui;
+import org.openslx.dozmod.gui.control.table.ImageTable;
+import org.openslx.dozmod.gui.helper.GridManager;
+import org.openslx.dozmod.permissions.ImagePerms;
+import org.openslx.dozmod.thrift.Session;
+import org.openslx.dozmod.thrift.cache.ImageCache;
+import org.openslx.util.QuickTimer;
+import org.openslx.util.QuickTimer.Task;
+
+@SuppressWarnings("serial")
+public class ImageListViewer extends JLabel {
+
+ protected JTextField searchTextField;
+ protected ImageTable imageTable;
+ protected JComboBox<FilterType> filterCbo;
+
+ protected final static String[] filterLabels = {"Alle anzeigen", "Nur eigene Anzeigen", "Nur editierbare anzeigen", "Nur Vorlagen zeigen"};
+
+ protected static enum FilterType{
+ ALL("Alle anzeigen"),
+ OWN("Nur eigene Anzeigen"),
+ EDITABLE("Nur editierbare anzeigen"),
+ TEMPLATES("Nur Vorlagen zeigen");
+
+ private final String name;
+
+ private FilterType(String name){
+ this.name = name;
+ }
+
+ @Override
+ public String toString(){
+ return name;
+ }
+ }
+
+ public ImageListViewer(){
+ super();
+ GridManager grid = new GridManager(this, 1);
+
+ // --------------------------------------
+ // the panel for the table and search field
+ // the search field and filter combo box
+ JPanel filterPanel = new JPanel();
+ filterPanel.setLayout(new BoxLayout(filterPanel, BoxLayout.LINE_AXIS));
+ searchTextField = new JTextField();
+ filterCbo = new JComboBox<FilterType>();
+ for (FilterType s: FilterType.values()){
+ filterCbo.addItem(s);
+ }
+ filterPanel.add(searchTextField);
+ filterPanel.add(filterCbo);
+
+
+ // the actual table
+ imageTable = new ImageTable();
+
+
+ grid.add(filterPanel).fill(true, false).expand(true,false);
+ grid.nextRow();
+ grid.add(new JScrollPane(imageTable)).fill(true, true).expand(true,true);
+ grid.finish(false);
+
+ /**
+ * ActionListeners
+ */
+ // filter the objects in the table depending on the search field
+ searchTextField.getDocument().addDocumentListener(new DocumentListener() {
+ @Override
+ public void removeUpdate(DocumentEvent e) {
+ changedUpdate(e);
+ }
+
+ @Override
+ public void insertUpdate(DocumentEvent e) {
+ changedUpdate(e);
+ }
+
+ @Override
+ public void changedUpdate(DocumentEvent e) {
+ // stuff
+ applyFilterOnTable();
+ }
+ });
+
+ filterCbo.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ applyFilterOnTable();
+ }
+ });
+ }
+
+ /**
+ * Filters the image list according to the filter text entered by the user
+ */
+ private void applyFilterOnTable() {
+ try {
+ // List for filters
+ List<RowFilter<Object, Object>> filters = new ArrayList<RowFilter<Object, Object>>(3);
+
+ // string for text in filter text field
+ String filterField = searchTextField.getText();
+ filters.add(RowFilter.regexFilter("(?i)" + filterField, 0, 1, 2));
+
+ FilterType filterType = (FilterType) filterCbo.getSelectedItem();
+ // filter for user (only show own)
+ switch (filterType) {
+ case ALL:
+ // no additional filters
+ break;
+ case OWN:
+ // filter for owner
+ String userFilter = Session.getUserId();
+ filters.add(RowFilter.regexFilter("(?i)" + userFilter, 2));
+ break;
+ case EDITABLE:
+ // filter for editable
+ RowFilter<Object, Object> filter = new RowFilter<Object, Object>() {
+ public boolean include(Entry entry) {
+ return ImagePerms.canEdit(imageTable.getModelRow((Integer) entry.getIdentifier()));
+ }
+ };
+ filters.add(filter);
+ break;
+ case TEMPLATES:
+ // show only templates
+ RowFilter<Object, Object> templateFilter = new RowFilter<Object, Object>() {
+ public boolean include(Entry entry) {
+ return imageTable.getModelRow((Integer) entry.getIdentifier()).isTemplate;
+ }
+ };
+ filters.add(templateFilter);
+ default:
+ break;
+ }
+ // for using multiple filters
+ RowFilter<Object, Object> andFilters = RowFilter.andFilter(filters);
+ imageTable.getRowSorter().setRowFilter(andFilters);
+
+ searchTextField.setForeground(UIManager.getColor("TextField.foreground"));
+ } catch (IllegalArgumentException ex) {
+ // TODO set background color of search field to something redish
+ searchTextField.setForeground(Color.RED);
+ }
+ }
+
+ /**
+ * Refreshes the image list in the table
+ *
+ * @param forceRefresh true to force a refresh, false to use the cached list
+ */
+ public void refreshList(final boolean forceRefresh, int delay) {
+ QuickTimer.scheduleOnce(new Task() {
+ @Override
+ public void fire() {
+ final List<ImageSummaryRead> imageList = ImageCache.get(forceRefresh);
+ Gui.asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ imageTable.setData(imageList, true);
+ }
+ });
+ }
+ }, delay);
+ }
+
+ public ImageTable getImageTable(){
+ return imageTable;
+ }
+
+}