diff options
author | Stephan Schwaer | 2015-10-08 15:55:01 +0200 |
---|---|---|
committer | Stephan Schwaer | 2015-10-08 15:55:01 +0200 |
commit | a09b5cb802c98738274f7b31a233f8a3e7f5d38c (patch) | |
tree | d951c6f492e1cb182305c30f3f604ada13276d70 /dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageDetailsWindow.java | |
parent | [client] Disabled checkboxes for not implemented features (internet access an... (diff) | |
download | tutor-module-a09b5cb802c98738274f7b31a233f8a3e7f5d38c.tar.gz tutor-module-a09b5cb802c98738274f7b31a233f8a3e7f5d38c.tar.xz tutor-module-a09b5cb802c98738274f7b31a233f8a3e7f5d38c.zip |
[client] Added multi select, delete and del key to versionList in imageDetails.
Diffstat (limited to 'dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageDetailsWindow.java')
-rw-r--r-- | dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageDetailsWindow.java | 77 |
1 files changed, 64 insertions, 13 deletions
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageDetailsWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageDetailsWindow.java index e5bd99ad..0262a914 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageDetailsWindow.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageDetailsWindow.java @@ -5,6 +5,7 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; +import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.WindowAdapter; @@ -16,11 +17,18 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; +import javax.swing.AbstractAction; +import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JMenuItem; import javax.swing.JOptionPane; +import javax.swing.KeyStroke; +import javax.swing.ListSelectionModel; +import javax.swing.SwingUtilities; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; import org.apache.log4j.Logger; import org.apache.thrift.TException; @@ -103,7 +111,7 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout implements UiFe /** * Popup menu items */ - private JMenuItem popupItemNew = new JMenuItem("Neue Veranstaltung"); + private JMenuItem popupItemNewLecture = new JMenuItem("Neue Veranstaltung"); private JMenuItem popupItemDownload = new JMenuItem("Download"); private JMenuItem popupItemDelete = new JMenuItem("Löschen"); @@ -192,6 +200,8 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout implements UiFe } }); + versionTable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); + /** * Popup menu for the version table on the right side */ @@ -200,7 +210,7 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout implements UiFe ImageVersionDetails selected = versionTable.getSelectedItem(); if (selected == null) return; - if (e.getSource().equals(popupItemNew)) { + if (e.getSource().equals(popupItemNewLecture)) { ImageSummaryRead summary = new ImageSummaryRead(); summary.setImageName(image.getImageName()); // Maybe create a helper class/function some day that transforms all fields new LectureWizard(me, summary, selected.getVersionId()).setVisible(true); @@ -209,16 +219,27 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout implements UiFe performImageDownload(selected); } if (e.getSource().equals(popupItemDelete)) { - deleteVersion(selected); + deleteVersions(versionTable.getSelectedItems()); } } }); - pop.addMenuItem(popupItemNew); + pop.addMenuItem(popupItemNewLecture); pop.addMenuItem(popupItemDownload); pop.addSeparator(); pop.addMenuItem(popupItemDelete); + + // Some keyboard shortcuts + versionTable.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put( + KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0), "delete"); + versionTable.getActionMap().put("delete", new AbstractAction() { + @Override + public void actionPerformed(ActionEvent ae) { + deleteVersions(versionTable.getSelectedItems()); + } + }); + /** * Mouse adapter for the version table */ @@ -234,22 +255,36 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout implements UiFe } private void processClick(MouseEvent e) { - int r = versionTable.rowAtPoint(e.getPoint()); - if (r >= 0 && r < versionTable.getRowCount()) { - // highlight the row and popup the menu - versionTable.setRowSelectionInterval(r, r); + // rowIndex at mouse cursor + int mouseRowIndex = versionTable.rowAtPoint(e.getPoint()); + + // is the click event on an already selected row? + boolean alreadySelectedRow = false; + for (int i : versionTable.getSelectedRows()) { + if (i == mouseRowIndex) { + alreadySelectedRow = true; + break; + } + } + + if (mouseRowIndex >= 0 && mouseRowIndex < versionTable.getRowCount() + && SwingUtilities.isRightMouseButton(e)) { + // select row if it wasn't in selection before + if (!alreadySelectedRow) { + versionTable.setRowSelectionInterval(mouseRowIndex, mouseRowIndex); + } if (e.isPopupTrigger()) { - popupItemNew.setEnabled(versionTable.getSelectedItem().isValid - && ImagePerms.canLink(image)); + boolean multiSelection = versionTable.getSelectedRowCount() != 1; + popupItemNewLecture.setEnabled(versionTable.getSelectedItem().isValid + && ImagePerms.canLink(image) && !multiSelection); popupItemDownload.setEnabled(versionTable.getSelectedItem().isValid - && ImagePerms.canDownload(image)); + && ImagePerms.canDownload(image) && !multiSelection); popupItemDelete.setEnabled(versionTable.getSelectedItem().isValid && ImagePerms.canAdmin(image)); pop.show(e.getComponent(), e.getX(), e.getY()); } - } else { - versionTable.clearSelection(); } + } }; versionTableScrollPane.addMouseListener(ma); @@ -448,6 +483,19 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout implements UiFe }); } + /** + * Triggers the deletion of a list of versions + * + * @param versions list of versions to delete + */ + private void deleteVersions(List<ImageVersionDetails> versions) { + if (versions == null || versions.isEmpty()) + return; + for (ImageVersionDetails version : versions) { + deleteVersion(version); + } + } + /******************************************************************************** * * General UI helpers @@ -541,6 +589,9 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout implements UiFe // set the versions of the image to the table versionTable.setData(image.getVersions(), true); + popupItemDelete.setEnabled(ImagePerms.canAdmin(image)); + popupItemDownload.setEnabled(ImagePerms.canDownload(image)); + popupItemNewLecture.setEnabled(ImagePerms.canAdmin(image)); // make fields editable is allowed makeEditable(true); // finally do show it all |