summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonathan Bauer2015-08-08 12:05:37 +0200
committerJonathan Bauer2015-08-08 12:05:37 +0200
commit78803491a82ac1de3f64bdc6d62d4a8041d56529 (patch)
tree921f6453df5570c4e71c05e047d1c36bae5f39ca
parent[client] imagedetails stuff (diff)
parent[client] Add UiFeedback interface for top level windows (diff)
downloadtutor-module-78803491a82ac1de3f64bdc6d62d4a8041d56529.tar.gz
tutor-module-78803491a82ac1de3f64bdc6d62d4a8041d56529.tar.xz
tutor-module-78803491a82ac1de3f64bdc6d62d4a8041d56529.zip
Merge branch 'v1.1' of git.openslx.org:openslx-ng/tutor-module into v1.1
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/MainWindow.java19
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/UiFeedback.java20
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageDetailsWindow.java37
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageDetailsWindowLayout.java67
4 files changed, 95 insertions, 48 deletions
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/MainWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/MainWindow.java
index 295cf413..600f6a1e 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/MainWindow.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/MainWindow.java
@@ -34,6 +34,7 @@ import org.openslx.dozmod.gui.activity.UploadPanel;
import org.openslx.dozmod.gui.helper.CompositePage;
import org.openslx.dozmod.gui.helper.DebugWindow;
import org.openslx.dozmod.gui.helper.MessageType;
+import org.openslx.dozmod.gui.helper.UiFeedback;
import org.openslx.dozmod.gui.window.DisclaimerWindow;
import org.openslx.dozmod.gui.window.ImageListWindow;
import org.openslx.dozmod.gui.window.LectureListWindow;
@@ -170,12 +171,20 @@ public abstract class MainWindow {
KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(new KeyEventDispatcher() {
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
- if (event.getKeyChar() == 17) { // Ctrl-Q = Quit
- if (!isQuitQuestionOpen) {
+ int type = event.getID();
+ int code = event.getKeyChar();
+ if (code == 17) { // Ctrl-Q = Quit
+ if (type == KeyEvent.KEY_RELEASED && !isQuitQuestionOpen) {
isQuitQuestionOpen = true;
askApplicationQuit();
}
event.consume();
+ } else if (code == 27 && type == KeyEvent.KEY_PRESSED) {
+ Window window = KeyboardFocusManager.getCurrentKeyboardFocusManager().getActiveWindow();
+ if (window instanceof UiFeedback) {
+ ((UiFeedback) window).escapePressed();
+ event.consume();
+ }
}
return event.isConsumed();
}
@@ -248,6 +257,12 @@ public abstract class MainWindow {
break;
}
}
+ if (!open) {
+ Window window = KeyboardFocusManager.getCurrentKeyboardFocusManager().getActiveWindow();
+ if (window instanceof UiFeedback) {
+ open = ((UiFeedback) window).wantConfirmQuit();
+ }
+ }
if (!open
|| Gui.showMessageBox(mainWindow, "Are you sure you want to quit?",
MessageType.QUESTION_YESNO, null, null)) {
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/UiFeedback.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/UiFeedback.java
new file mode 100644
index 00000000..f7216692
--- /dev/null
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/UiFeedback.java
@@ -0,0 +1,20 @@
+package org.openslx.dozmod.gui.helper;
+
+public interface UiFeedback {
+
+ /**
+ * If this window wants to prevent the user from closing the application,
+ * it should return true. This makes the application ask the user to confirm
+ * quitting.
+ *
+ * @return true to ask the user for confirmation
+ */
+ public boolean wantConfirmQuit();
+
+ /**
+ * Called if the user pressed the ESC key and the window currently has
+ * the focus.
+ */
+ public void escapePressed();
+
+}
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 f8baddb7..7705f792 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
@@ -30,8 +30,6 @@ import javax.swing.event.ListDataListener;
import org.apache.log4j.Logger;
import org.openslx.bwlp.thrift.iface.ImageDetailsRead;
-import org.openslx.bwlp.thrift.iface.ImagePermissions;
-import org.openslx.bwlp.thrift.iface.ImageVersionDetails;
import org.openslx.bwlp.thrift.iface.OperatingSystem;
import org.openslx.bwlp.thrift.iface.ShareMode;
import org.openslx.bwlp.thrift.iface.Virtualizer;
@@ -39,6 +37,7 @@ 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.helper.UiFeedback;
import org.openslx.dozmod.gui.window.layout.ImageDetailsWindowLayout;
import org.openslx.dozmod.permissions.ImagePerms;
import org.openslx.dozmod.thrift.MetaDataCache;
@@ -50,14 +49,14 @@ import org.openslx.util.QuickTimer;
import org.openslx.util.QuickTimer.Task;
@SuppressWarnings("serial")
-public class ImageDetailsWindow extends ImageDetailsWindowLayout {
+public class ImageDetailsWindow extends ImageDetailsWindowLayout implements UiFeedback {
private static final Logger LOGGER = Logger.getLogger(ImageDetailsWindow.class);
private final ImageDetailsWindow me = this;
private ImageDetailsRead image = null;
-
+
private final JMenuItem[] popupMenuItems = new JMenuItem[2];
public ImageDetailsWindow(Frame modalParent) {
@@ -65,13 +64,11 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout {
setFocusable(true);
btnSaveChanges.setEnabled(false);
- // ESC closes this window
- addKeyListener(new KeyAdapter() {
+ // Close button closes window
+ btnClose.addActionListener(new ActionListener() {
@Override
- public void keyPressed(KeyEvent e) {
- if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
- dispose();
- }
+ public void actionPerformed(ActionEvent e) {
+ dispose();
}
});
@@ -119,10 +116,12 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout {
public void mousePressed(MouseEvent e) {
processClick(e);
}
+
@Override
public void mouseReleased(MouseEvent e) {
processClick(e);
}
+
private void processClick(MouseEvent e) {
int r = versionTable.rowAtPoint(e.getPoint());
if (r >= 0 && r < versionTable.getRowCount()) {
@@ -142,7 +141,6 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout {
}
-
/**
* @param imageBaseId the id of the image to be displayed
*/
@@ -194,9 +192,8 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout {
lblUpdater.setUser(UserCache.find(image.getUpdaterId()));
lblCreateTime.setText(FormatHelper.longDate(image.getCreateTime()));
lblUpdateTime.setText(FormatHelper.longDate(image.getUpdateTime()));
- txtId.setText(image.getImageBaseId());
txtVersion.setText(image.getLatestVersionId());
-
+ setTitle(image.getImageName());
List<OperatingSystem> osList = MetaDataCache.getOperatingSystems();
// all fine, lets sort it
@@ -276,7 +273,7 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout {
* @param editable true to make fields editable, false otherwise.
*/
private void makeEditable(boolean editable) {
- txtTitle.setEnabled(editable);
+ txtTitle.setEditable(editable);
txtDescription.setEditable(editable);
txtTags.setEditable(editable);
txtVersion.setEditable(editable);
@@ -298,4 +295,16 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout {
win.setImage(imageBaseId);
}
+ @Override
+ public boolean wantConfirmQuit() {
+ // Maybe return true if the user changed one of the fields, but not really a priority
+ return false;
+ }
+
+ @Override
+ public void escapePressed() {
+ // Also ask if applicable
+ this.dispose();
+ }
+
}
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageDetailsWindowLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageDetailsWindowLayout.java
index 845bddcb..23a9e27c 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageDetailsWindowLayout.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageDetailsWindowLayout.java
@@ -32,7 +32,7 @@ import org.openslx.dozmod.gui.helper.GridPos;
@SuppressWarnings("serial")
public abstract class ImageDetailsWindowLayout extends JDialog {
- protected final JLabel txtTitle;
+ protected final JTextField txtTitle;
protected final JTextArea txtDescription;
protected final PersonLabel lblOwner;
@@ -58,7 +58,7 @@ public abstract class ImageDetailsWindowLayout extends JDialog {
// TODO: Permissions, ...
public ImageDetailsWindowLayout(Frame modalParent) {
- super(modalParent, "Platzhalter wärend das Fenster sich noch nicht gefüllt hat", ModalityType.APPLICATION_MODAL);
+ super(modalParent, "<init>", ModalityType.APPLICATION_MODAL);
setResizable(true);
setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
setLayout(new BorderLayout());
@@ -72,33 +72,35 @@ public abstract class ImageDetailsWindowLayout extends JDialog {
infoPanel.setLayout(new GridBagLayout());
infoPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
// -- name --
- txtTitle = new JLabel();
+ txtTitle = new JTextField();
txtTitle.setFont(txtTitle.getFont().deriveFont(Font.BOLD, txtTitle.getFont().getSize2D() * 2));
- infoPanel.add(txtTitle, GridPos.get(0, row++, 2, 1, true, false));
+ infoPanel.add(txtTitle, GridPos.get(0, row++, 2, 1, true, false));
// description
txtDescription = new JTextArea();
txtDescription.setLineWrap(true);
- txtDescription.setPreferredSize(new Dimension(450, 100));
+ txtDescription.setWrapStyleWord(true);
+ txtDescription.setMinimumSize(new Dimension(0, 100));
infoPanel.add(new JLabel("Beschreibung"), GridPos.get(0, row, false, false));
- infoPanel.add(new JScrollPane(txtDescription), GridPos.get(1, row++, true, true));
+ infoPanel.add(new JScrollPane(txtDescription, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
+ JScrollPane.HORIZONTAL_SCROLLBAR_NEVER), GridPos.get(1, row++, true, true));
// owner
lblOwner = new PersonLabel();
- infoPanel.add(new JLabel("Besitzer"), GridPos.get(0, row, false, false));
- infoPanel.add(lblOwner, GridPos.get(1, row++, true, false));
+ infoPanel.add(new JLabel("Besitzer"), GridPos.get(0, row, false, false));
+ infoPanel.add(lblOwner, GridPos.get(1, row++, true, false));
// creation time
lblCreateTime = new JLabel();
- infoPanel.add(new JLabel("Erstellt"), GridPos.get(0, row, false, false));
- infoPanel.add(lblCreateTime, GridPos.get(1, row++, true, false));
+ infoPanel.add(new JLabel("Erstellt"), GridPos.get(0, row, false, false));
+ infoPanel.add(lblCreateTime, GridPos.get(1, row++, true, false));
// last updater
lblUpdater = new PersonLabel();
- infoPanel.add(new JLabel("Geändert durch"), GridPos.get(0, row, false, false));
- infoPanel.add(lblUpdater, GridPos.get(1, row++, true, false));
+ infoPanel.add(new JLabel("Geändert durch"), GridPos.get(0, row, false, false));
+ infoPanel.add(lblUpdater, GridPos.get(1, row++, true, false));
// last updated
lblUpdateTime = new JLabel();
- infoPanel.add(new JLabel("Änderungszeitpunkt"), GridPos.get(0, row, false, false));
- infoPanel.add(lblUpdateTime, GridPos.get(1, row++, true, false));
+ infoPanel.add(new JLabel("Änderungszeitpunkt"), GridPos.get(0, row, false, false));
+ infoPanel.add(lblUpdateTime, GridPos.get(1, row++, true, false));
// os
cboOperatingSystem = new JComboBox<>();
cboOperatingSystem.setEditable(false);
@@ -113,32 +115,33 @@ public abstract class ImageDetailsWindowLayout extends JDialog {
return this;
}
});
- infoPanel.add(new JLabel("Betriebssystem"), GridPos.get(0, row, false, false));
- infoPanel.add(cboOperatingSystem, GridPos.get(1, row++, true, false));
+ infoPanel.add(new JLabel("Betriebssystem"), GridPos.get(0, row, false, false));
+ infoPanel.add(cboOperatingSystem, GridPos.get(1, row++, true, false));
// virtualizer
lblVirtualizer = new JLabel();
- infoPanel.add(new JLabel("Virtualizer"), GridPos.get(0, row, false, false));
- infoPanel.add(lblVirtualizer, GridPos.get(1, row++, true, false));
+ infoPanel.add(new JLabel("Virtualizer"), GridPos.get(0, row, false, false));
+ infoPanel.add(lblVirtualizer, GridPos.get(1, row++, true, false));
// tags
txtTags = new JTextField();
- infoPanel.add(new JLabel("Tags"), GridPos.get(0, row, false, false));
- infoPanel.add(txtTags, GridPos.get(1, row++, true, false));
+ infoPanel.add(new JLabel("Tags"), GridPos.get(0, row, false, false));
+ infoPanel.add(txtTags, GridPos.get(1, row++, true, false));
// share mode
cboShareMode = new JComboBox<ShareMode>();
- infoPanel.add(new JLabel("Freigabemodus"), GridPos.get(0, row, false, false));
- infoPanel.add(cboShareMode, GridPos.get(1, row++, true, false));
+ infoPanel.add(new JLabel("Freigabemodus"), GridPos.get(0, row, false, false));
+ infoPanel.add(cboShareMode, GridPos.get(1, row++, true, false));
// template
btnIsTemplate = new JCheckBox();
- infoPanel.add(new JLabel("Vorlage"), GridPos.get(0, row, false, false));
- infoPanel.add(btnIsTemplate, GridPos.get(1, row++, true, false));
+ infoPanel.add(new JLabel("Vorlage"), GridPos.get(0, row, false, false));
+ infoPanel.add(btnIsTemplate, GridPos.get(1, row++, true, false));
txtVersion = new JTextField();
- infoPanel.add(new JLabel("Version"), GridPos.get(0, row, false, false));
- infoPanel.add(txtVersion, GridPos.get(1, row++, true, false));
+ infoPanel.add(new JLabel("Version"), GridPos.get(0, row, false, false));
+ infoPanel.add(txtVersion, GridPos.get(1, row++, true, false));
txtId = new JTextField();
- infoPanel.add(new JLabel("ID"), GridPos.get(0, row, false, false));
- infoPanel.add(txtId, GridPos.get(1, row++, true, false));
+ txtId.setEditable(false);
+ infoPanel.add(new JLabel("ID"), GridPos.get(0, row, false, false));
+ infoPanel.add(txtId, GridPos.get(1, row++, true, false));
infoPanel.setPreferredSize(new Dimension(500, 400));
@@ -153,7 +156,7 @@ public abstract class ImageDetailsWindowLayout extends JDialog {
buttonPanel.add(btnSaveChanges);
buttonPanel.add(Box.createGlue());
buttonPanel.add(btnClose);
- add(buttonPanel, BorderLayout.SOUTH);
+ add(buttonPanel, BorderLayout.PAGE_END);
// --- Version table on the right (EAST) side
JPanel versionTablePanel = new JPanel();
@@ -161,11 +164,11 @@ public abstract class ImageDetailsWindowLayout extends JDialog {
versionTablePanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
JLabel lblVersion = new JLabel("Image Versionen");
lblVersion.setFont(lblVersion.getFont().deriveFont(Font.BOLD));
- versionTablePanel.add(lblVersion, BorderLayout.NORTH);
+ versionTablePanel.add(lblVersion, BorderLayout.PAGE_START);
versionTable = new ImageVersionTable();
- versionTablePanel.setPreferredSize(new Dimension(400, 200));
+ versionTablePanel.setPreferredSize(new Dimension(450, 200));
versionTableScrollPane = new JScrollPane(versionTable);
versionTablePanel.add(versionTableScrollPane, BorderLayout.CENTER);
- add(versionTablePanel, BorderLayout.EAST);
+ add(versionTablePanel, BorderLayout.LINE_END);
}
}