diff options
author | Stephan Schwaer | 2015-08-25 17:50:56 +0200 |
---|---|---|
committer | Stephan Schwaer | 2015-08-25 17:50:56 +0200 |
commit | 5ebff25e09415f632a129f5df5478064496dcc8e (patch) | |
tree | 12c42bbbdc43e9f90e5ebe368cc9e854bbec3bd3 /dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/ImageListViewer.java | |
parent | [client] fix description label beeing sucky (diff) | |
download | tutor-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.java | 192 |
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; + } + +} |