diff options
author | Jonathan Bauer | 2015-08-26 13:27:58 +0200 |
---|---|---|
committer | Jonathan Bauer | 2015-08-26 13:27:58 +0200 |
commit | d4be3885d13a2211d376f3740dc7bf6c337bf98b (patch) | |
tree | 30ea495151c44c838aae21b86888e43ca671c2d5 /dozentenmodul/src/main/java/org | |
parent | [client] Mark lectures that are out of their validity date range, mark own le... (diff) | |
download | tutor-module-d4be3885d13a2211d376f3740dc7bf6c337bf98b.tar.gz tutor-module-d4be3885d13a2211d376f3740dc7bf6c337bf98b.tar.xz tutor-module-d4be3885d13a2211d376f3740dc7bf6c337bf98b.zip |
[client] lectureList popup menu
Diffstat (limited to 'dozentenmodul/src/main/java/org')
-rw-r--r-- | dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureListWindow.java | 151 | ||||
-rw-r--r-- | dozentenmodul/src/main/java/org/openslx/dozmod/permissions/LecturePerms.java | 8 |
2 files changed, 132 insertions, 27 deletions
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureListWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureListWindow.java index 272d5e55..05de0bf7 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureListWindow.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureListWindow.java @@ -13,20 +13,30 @@ import java.util.Date; import java.util.List; import javax.swing.JFrame; +import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.RowFilter; import javax.swing.SwingUtilities; import javax.swing.UIManager; 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.openslx.bwlp.thrift.iface.ImageSummaryRead; +import org.openslx.bwlp.thrift.iface.ImageVersionDetails; import org.openslx.bwlp.thrift.iface.LectureSummary; import org.openslx.dozmod.gui.Gui; import org.openslx.dozmod.gui.MainWindow; import org.openslx.dozmod.gui.helper.MessageType; +import org.openslx.dozmod.gui.helper.PopupMenu; +import org.openslx.dozmod.gui.window.ImageDetailsWindow.ImageUpdatedCallback; import org.openslx.dozmod.gui.window.LectureDetailsWindow.LectureUpdatedCallback; import org.openslx.dozmod.gui.window.layout.LectureListWindowLayout; +import org.openslx.dozmod.gui.wizard.LectureWizard; +import org.openslx.dozmod.permissions.ImagePerms; +import org.openslx.dozmod.permissions.LecturePerms; import org.openslx.dozmod.thrift.Session; import org.openslx.dozmod.thrift.ThriftActions; import org.openslx.dozmod.thrift.ThriftActions.DeleteLectureCallback; @@ -41,6 +51,13 @@ public class LectureListWindow extends LectureListWindowLayout { public final LectureListWindow me = this; + /** + * Popup menu items + */ + private JMenuItem popupItemNew = new JMenuItem("Neu"); + private JMenuItem popupItemEdit = new JMenuItem("Bearbeiten"); + private JMenuItem popupItemDelete = new JMenuItem("Löschen"); + public LectureListWindow() { super(); @@ -68,25 +85,6 @@ public class LectureListWindow extends LectureListWindowLayout { } }); - - lectureTable.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - if (e.getClickCount() == 2) { - openSelectedLectureDetails(); - } - } - }); - - lectureTable.addKeyListener(new KeyAdapter() { - @Override - public void keyReleased(KeyEvent e) { - if (e.getKeyCode() == KeyEvent.VK_F5) { - refreshList(true); - } - } - }); - newButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { @@ -100,7 +98,7 @@ public class LectureListWindow extends LectureListWindowLayout { editButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - openSelectedLectureDetails(); + openLectureDetails(lectureTable.getSelectedItem()); } }); @@ -108,7 +106,7 @@ public class LectureListWindow extends LectureListWindowLayout { deleteButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - deleteSelectedLecture(); + deleteLecture(lectureTable.getSelectedItem()); } }); @@ -119,10 +117,104 @@ public class LectureListWindow extends LectureListWindowLayout { MainWindow.showPage(MainMenuWindow.class); } }); - } - private void openSelectedLectureDetails() { - LectureSummary lecture = lectureTable.getSelectedItem(); + /** + * Popup menu for the version table on the right side + */ + final PopupMenu pop = new PopupMenu(new ActionListener() { + public void actionPerformed(ActionEvent e) { + LectureSummary lecture = lectureTable.getSelectedItem(); + if (lecture == null) + return; + if (e.getSource().equals(popupItemNew)) { + if (Gui.showMessageBox(me, "Um eine Veranstaltung zu erstellen, müssen Sie ein Image auswählen. Zur Imageauswahl wechseln?", + MessageType.QUESTION_YESNO, LOGGER, null)) { + MainWindow.showPage(ImageListWindow.class); + } + } + if (e.getSource().equals(popupItemEdit)) { + openLectureDetails(lecture); + } + if (e.getSource().equals(popupItemDelete)) { + deleteLecture(lecture); + } + + } + }); + pop.addMenuItem(popupItemNew); + pop.addMenuItem(popupItemEdit); + pop.addSeparator(); + pop.addMenuItem(popupItemDelete); + + // finally the table listeners + lectureTable.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + + } + @Override + public void mousePressed(MouseEvent e) { + processClick(e); + } + @Override + public void mouseReleased(MouseEvent e) { + processClick(e); + } + private void processClick(MouseEvent e) { + // left double click => open details + if (SwingUtilities.isLeftMouseButton(e) && e.getClickCount() == 2) { + openLectureDetails(lectureTable.getSelectedItem()); + return; + } + // else, check if we are a popup trigger + int r = lectureTable.rowAtPoint(e.getPoint()); + if (r >= 0 && r < lectureTable.getRowCount()) { + // highlight the row and popup the menu + lectureTable.setRowSelectionInterval(r, r); + if (e.isPopupTrigger()) { + pop.show(e.getComponent(), e.getX(), e.getY()); + } + } else { + lectureTable.clearSelection(); + } + } + }); + + lectureTable.addKeyListener(new KeyAdapter() { + @Override + public void keyReleased(KeyEvent e) { + if (e.getKeyCode() == KeyEvent.VK_F5) { + refreshList(true); + } + } + }); + + lectureTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() { + @Override + public void valueChanged(ListSelectionEvent e) { + LectureSummary item = lectureTable.getSelectedItem(); + updateAvailableOptions(item); + } + }); + updateAvailableOptions(null); + } + /** + * Updates the buttons/popup menu items according to the user's permissions + * + * @param item the image to check the user's permissions for + */ + private void updateAvailableOptions(LectureSummary lecture) { + boolean edit = LecturePerms.canEdit(lecture); + boolean admin = LecturePerms.canAdmin(lecture); + editButton.setEnabled(edit); + deleteButton.setEnabled(admin); + popupItemEdit.setEnabled(edit); + popupItemDelete.setEnabled(admin); + } + /** + * Opens the given lecture's details as a popup window + */ + private void openLectureDetails(final LectureSummary lecture) { if (lecture == null) return; LectureDetailsWindow.open((JFrame)SwingUtilities.getWindowAncestor(me), lecture.getLectureId(), new LectureUpdatedCallback() { @@ -133,10 +225,14 @@ public class LectureListWindow extends LectureListWindowLayout { }); } - private void deleteSelectedLecture() { - LectureSummary lecture = lectureTable.getSelectedItem(); + /** + * Deletes the given lecture + */ + private void deleteLecture(final LectureSummary lecture) { if (lecture == null) return; + if (!Gui.showMessageBox(this, "Wollen Sie diese Veranstaltung wirklich löschen?", MessageType.QUESTION_YESNO, LOGGER, null)) + return; ThriftActions.deleteLecture(JOptionPane.getFrameForComponent(me), lecture.getLectureId(), new DeleteLectureCallback() { @Override @@ -145,6 +241,9 @@ public class LectureListWindow extends LectureListWindowLayout { } }); } + /** + * Applies the filter entered in the search field to the table + */ private void applyFilterOnTable() { try { // List for filters diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/permissions/LecturePerms.java b/dozentenmodul/src/main/java/org/openslx/dozmod/permissions/LecturePerms.java index 9f941610..335913fd 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/permissions/LecturePerms.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/permissions/LecturePerms.java @@ -1,6 +1,7 @@ package org.openslx.dozmod.permissions; import org.openslx.bwlp.thrift.iface.LectureRead; +import org.openslx.bwlp.thrift.iface.LectureSummary; /** * Class for checking, whether user can edit given lecture @@ -9,8 +10,13 @@ public class LecturePerms { public static boolean canEdit(LectureRead lecture) { return lecture != null && lecture.userPermissions != null && lecture.userPermissions.edit; } - + public static boolean canEdit(LectureSummary lecture) { + return lecture != null && lecture.userPermissions != null && lecture.userPermissions.edit; + } public static boolean canAdmin(LectureRead lecture) { return lecture != null && lecture.userPermissions != null && lecture.userPermissions.admin; } + public static boolean canAdmin(LectureSummary lecture) { + return lecture != null && lecture.userPermissions != null && lecture.userPermissions.admin; + } } |