summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephan Schwaer2015-10-08 15:55:01 +0200
committerStephan Schwaer2015-10-08 15:55:01 +0200
commita09b5cb802c98738274f7b31a233f8a3e7f5d38c (patch)
treed951c6f492e1cb182305c30f3f604ada13276d70
parent[client] Disabled checkboxes for not implemented features (internet access an... (diff)
downloadtutor-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.
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageDetailsWindow.java77
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/state/LectureWizardState.java1
2 files changed, 64 insertions, 14 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
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/state/LectureWizardState.java b/dozentenmodul/src/main/java/org/openslx/dozmod/state/LectureWizardState.java
index acffa792..559a7bb3 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/state/LectureWizardState.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/state/LectureWizardState.java
@@ -20,7 +20,6 @@ public class LectureWizardState {
public Date start = null;
public Date end = null;
// default permissions assigned to that lecture by the user
- // TODO: defaults per sat
public LecturePermissions defaultPermissions = Session.getSatelliteConfig().defaultLecturePermissions;
// explicit permissions per user as set by the creator
public Map<String, LecturePermissions> permissionMap = null;