summaryrefslogtreecommitdiffstats
path: root/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageListWindow.java
diff options
context:
space:
mode:
authorStephan Schwaer2015-10-05 17:52:28 +0200
committerStephan Schwaer2015-10-05 17:52:28 +0200
commit8c90c0716a148272d6e5b2216597c0f940825d9b (patch)
tree076e18ab730629c3101f8e8bc4768a36fa48761e /dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageListWindow.java
parent[client] Fixed NPE when opening links. (diff)
downloadtutor-module-8c90c0716a148272d6e5b2216597c0f940825d9b.tar.gz
tutor-module-8c90c0716a148272d6e5b2216597c0f940825d9b.tar.xz
tutor-module-8c90c0716a148272d6e5b2216597c0f940825d9b.zip
[client] Now possible to delete multiple images. Needs cleanup
Diffstat (limited to 'dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageListWindow.java')
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageListWindow.java79
1 files changed, 64 insertions, 15 deletions
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 86f6468b..31d047c9 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.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
+import java.util.List;
import javax.swing.AbstractAction;
import javax.swing.JComponent;
@@ -13,6 +14,7 @@ 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.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
@@ -81,11 +83,13 @@ public class ImageListWindow extends ImageListWindowLayout implements DownloadCa
performImageDownload(imageTable.getSelectedItem());
}
if (e.getSource().equals(popupItemDelete)) {
- deleteBaseImage(imageTable.getSelectedItem());
+ deleteImages(imageTable.getSelectedItems());
}
}
});
+ imageTable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
+
// add them to the popup menu
pop.addMenuItem(popupItemNewLecture);
pop.addMenuItem(popupItemEdit);
@@ -133,14 +137,31 @@ public class ImageListWindow extends ImageListWindowLayout implements DownloadCa
}
private void processClick(MouseEvent e) {
- int r = imageTable.rowAtPoint(e.getPoint());
- if (r >= 0 && r < imageTable.getRowCount()) {
- // highlight the row and popup the menu
- imageTable.setRowSelectionInterval(r, r);
+ // rowIndex at mouse cursor
+ int mouseRowIndex = imageTable.rowAtPoint(e.getPoint());
+
+ // is the click event on an already selected row?
+ boolean alreadySelectedRow = false;
+ for (int i : imageTable.getSelectedRows()) {
+ if (i == mouseRowIndex) {
+ alreadySelectedRow = true;
+ break;
+ }
+ }
+
+ if (mouseRowIndex >= 0 && mouseRowIndex < imageTable.getRowCount()
+ && SwingUtilities.isRightMouseButton(e)) {
+ // select row if it wasn't in selection before
+ if (!alreadySelectedRow) {
+ imageTable.setRowSelectionInterval(mouseRowIndex, mouseRowIndex);
+ }
if (e.isPopupTrigger()) {
pop.show(e.getComponent(), e.getX(), e.getY());
}
- } else {
+ }
+ // TODO This doesn't work, make deselection possible by clicking on empty table space
+ else if (SwingUtilities.isLeftMouseButton(e)
+ && (mouseRowIndex < 0 || mouseRowIndex > imageTable.getRowCount())) {
imageTable.clearSelection();
}
}
@@ -176,8 +197,8 @@ public class ImageListWindow extends ImageListWindowLayout implements DownloadCa
});
deleteButton.addActionListener(new ActionListener() {
@Override
- public void actionPerformed(ActionEvent ae) {
- deleteBaseImage(imageTable.getSelectedItem());
+ public void actionPerformed(ActionEvent e) {
+ deleteImages(imageTable.getSelectedItems());
}
});
switchViewButton.addActionListener(new ActionListener() {
@@ -238,15 +259,18 @@ public class ImageListWindow extends ImageListWindowLayout implements DownloadCa
*/
private void updateAvailableOptions(ImageSummaryRead item) {
boolean isValid = item != null && item.getLatestVersionId() != null;
+ boolean singleSelection = !(imageTable.getSelectedRows().length > 1);
boolean download = isValid && ImagePerms.canDownload(item);
boolean link = isValid && ImagePerms.canLink(item);
boolean admin = ImagePerms.canAdmin(item);
- downloadButton.setEnabled(true);
- newLectureButton.setEnabled(link);
- deleteButton.setEnabled(admin);
- popupItemDownload.setEnabled(download);
- popupItemNewLecture.setEnabled(link);
- popupItemDelete.setEnabled(admin);
+ downloadButton.setEnabled(download && singleSelection);
+ newLectureButton.setEnabled(link && singleSelection);
+ deleteButton.setEnabled(admin || !singleSelection);
+ popupItemDownload.setEnabled(download && singleSelection);
+ popupItemNewLecture.setEnabled(link && singleSelection);
+ popupItemDelete.setEnabled(admin || !singleSelection);
+ editButton.setEnabled(singleSelection);
+
}
/********************************************************************************
@@ -318,12 +342,37 @@ public class ImageListWindow extends ImageListWindowLayout implements DownloadCa
*
* @param image image to delete
*/
+ //TODO seems like it's no longer needed.
private void deleteBaseImage(final ImageSummaryRead image) {
ThriftActions.deleteImageBase(JOptionPane.getFrameForComponent(this), image.getImageBaseId(), this);
}
/**
- * Callback when download initialized
+ * Delete a list of images and display the images, which couldn't be
+ * deleted.
+ *
+ * @param imageList the images to be deleted.
+ */
+ private void deleteImages(List<ImageSummaryRead> imageList) {
+ boolean failedToDeleteAll = false;
+ StringBuilder builder = new StringBuilder();
+ for (ImageSummaryRead image : imageList) {
+ if (ImagePerms.canAdmin(image)) {
+ deleteBaseImage(image);
+ } else {
+ failedToDeleteAll = true;
+ builder.append('\n');
+ builder.append(image.imageName);
+ }
+ }
+ if (failedToDeleteAll) {
+ Gui.showMessageBox("Folgende images konnten nicht gelöscht werden: " + builder.toString(),
+ MessageType.INFO, LOGGER, null);
+ }
+ }
+
+ /**
+ * Callback when download initialised
*
* @param success true if downloading, false otherwise
*/