summaryrefslogtreecommitdiffstats
path: root/dozentenmodul/src/main/java/org
diff options
context:
space:
mode:
authorJonathan Bauer2015-08-26 13:27:58 +0200
committerJonathan Bauer2015-08-26 13:27:58 +0200
commitd4be3885d13a2211d376f3740dc7bf6c337bf98b (patch)
tree30ea495151c44c838aae21b86888e43ca671c2d5 /dozentenmodul/src/main/java/org
parent[client] Mark lectures that are out of their validity date range, mark own le... (diff)
downloadtutor-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.java151
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/permissions/LecturePerms.java8
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;
+ }
}