diff options
author | Stephan Schwaer | 2015-10-05 17:52:28 +0200 |
---|---|---|
committer | Stephan Schwaer | 2015-10-05 17:52:28 +0200 |
commit | 8c90c0716a148272d6e5b2216597c0f940825d9b (patch) | |
tree | 076e18ab730629c3101f8e8bc4768a36fa48761e /dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageListWindow.java | |
parent | [client] Fixed NPE when opening links. (diff) | |
download | tutor-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.java | 79 |
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 */ |