From 0639a920e264a11176b90f9b1c0e116973d27de7 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Mon, 3 Aug 2015 17:13:24 +0200 Subject: [client] Add ActivityPanel to MainWindow --- .../java/org/openslx/dozmod/gui/MainWindow.java | 51 ++++++++++++++-- .../openslx/dozmod/gui/activity/ActivityPanel.java | 23 +++++++ .../openslx/dozmod/gui/activity/UploadPanel.java | 70 ++++++++++++++++++++++ 3 files changed, 138 insertions(+), 6 deletions(-) create mode 100644 dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/ActivityPanel.java create mode 100644 dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/UploadPanel.java (limited to 'dozentenmodul/src') 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 369ce084..efef7a0c 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/MainWindow.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/MainWindow.java @@ -10,6 +10,9 @@ import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; +import java.io.File; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -24,6 +27,8 @@ import org.apache.log4j.Logger; import org.openslx.dozmod.App; import org.openslx.dozmod.Config; import org.openslx.dozmod.gui.Gui.GuiCallable; +import org.openslx.dozmod.gui.activity.ActivityPanel; +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; @@ -33,6 +38,7 @@ import org.openslx.dozmod.gui.window.LectureListWindow; import org.openslx.dozmod.gui.window.LoginWindow; import org.openslx.dozmod.gui.window.MainMenuWindow; import org.openslx.dozmod.gui.window.VirtualizerNoticeWindow; +import org.openslx.dozmod.state.UploadWizardState; import org.openslx.dozmod.thrift.Session; import org.openslx.thrifthelper.ThriftManager; import org.openslx.thrifthelper.ThriftManager.ErrorCallback; @@ -42,7 +48,8 @@ public abstract class MainWindow { private final static Logger LOGGER = Logger.getLogger(MainWindow.class); private static final JFrame mainWindow; - private static final JPanel mainContainer = new JPanel(); + private static final JPanel mainContainer; + private static final JPanel activityPanel; private static CompositePage currentPage; @@ -50,6 +57,8 @@ public abstract class MainWindow { private static final Map, CompositePage> pages = new ConcurrentHashMap<>(); + private static final List activities = new ArrayList<>(); + private static final String THRIFT_CONNECTION_ERROR = "Lost connection to the masterserver. Do you want to retry?"; /** @@ -84,13 +93,24 @@ public abstract class MainWindow { } static { - JFrame ret = Gui.syncExec(new GuiCallable() { + mainWindow = Gui.syncExec(new GuiCallable() { @Override public JFrame run() { return new JFrame("bwLehrstuhl"); } }); - mainWindow = ret; + mainContainer = Gui.syncExec(new GuiCallable() { + @Override + public JPanel run() { + return new JPanel(); + } + }); + activityPanel = Gui.syncExec(new GuiCallable() { + @Override + public JPanel run() { + return new JPanel(); + } + }); } /** @@ -177,6 +197,8 @@ public abstract class MainWindow { win.setPreferredSize(win.getMinimumSize()); mainWindow.getContentPane().add(win, BorderLayout.PAGE_START); } + activityPanel.setLayout(new BoxLayout(activityPanel, BoxLayout.PAGE_AXIS)); + mainWindow.getContentPane().add(activityPanel, BorderLayout.PAGE_END); // center the window on the primary monitor mainWindow.getContentPane().add(mainContainer, BorderLayout.CENTER); @@ -197,6 +219,11 @@ public abstract class MainWindow { // Show main menu by default showPage(MainMenuWindow.class); + + UploadWizardState test = new UploadWizardState(); + test.name = "TEST TEST"; + test.diskFile = new File("/bla/blu/blubb.blsdfg.vmdk"); + addUpload(test); } /** @@ -204,9 +231,16 @@ public abstract class MainWindow { * confirmation. */ protected static void askApplicationQuit() { - // TODO: Only ask if an upload or download is running,, wizard is open etc.. - if (Gui.showMessageBox(mainWindow, "Are you sure you want to quit?", MessageType.QUESTION_YESNO, - null, null)) { + boolean open = false; + for (ActivityPanel activity : activities) { + if (activity.wantConfirmQuit()) { + open = true; + break; + } + } + if (!open + || Gui.showMessageBox(mainWindow, "Are you sure you want to quit?", + MessageType.QUESTION_YESNO, null, null)) { Gui.exit(0); } isQuitQuestionOpen = false; @@ -226,6 +260,11 @@ public abstract class MainWindow { window.setVisible(false); } + public static void addUpload(UploadWizardState state) { + activities.add(new UploadPanel(activityPanel, state)); + activityPanel.validate(); + } + private static void createMenu() { // the File menu button JMenuBar menuBar = new JMenuBar(); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/ActivityPanel.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/ActivityPanel.java new file mode 100644 index 00000000..eb651fef --- /dev/null +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/ActivityPanel.java @@ -0,0 +1,23 @@ +package org.openslx.dozmod.gui.activity; + +import javax.swing.JPanel; + +public abstract class ActivityPanel extends JPanel { + + private final JPanel container; + + public ActivityPanel(JPanel container) { + this.container = container; + container.add(this); + } + + /** + * If this activity 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 abstract boolean wantConfirmQuit(); + +} diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/UploadPanel.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/UploadPanel.java new file mode 100644 index 00000000..430f6ae6 --- /dev/null +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/UploadPanel.java @@ -0,0 +1,70 @@ +package org.openslx.dozmod.gui.activity; + +import java.awt.Dimension; +import java.awt.Font; +import java.awt.GridLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.BorderFactory; +import javax.swing.Box; +import javax.swing.BoxLayout; +import javax.swing.JButton; +import javax.swing.JLabel; +import javax.swing.JPanel; + +import org.openslx.dozmod.gui.control.BlockProgressBar; +import org.openslx.dozmod.state.UploadWizardState; + +@SuppressWarnings("serial") +public class UploadPanel extends ActivityPanel { + + private final JLabel lblStatus; + + private final BlockProgressBar progress; + + private final UploadWizardState state; + + public UploadPanel(JPanel container, UploadWizardState state) { + super(container); + this.state = state; + setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS)); + setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4)); + // Header: [status] VM-Name ---- fileName [Button] + JPanel header = new JPanel(); + header.setLayout(new BoxLayout(header, BoxLayout.LINE_AXIS)); + lblStatus = new JLabel("[init]"); + header.add(lblStatus); + header.add(Box.createHorizontalStrut(10)); + JLabel vmName = new JLabel(state.name); + vmName.setFont(vmName.getFont().deriveFont(Font.BOLD)); + header.add(vmName); + header.add(Box.createHorizontalGlue()); + header.add(new JLabel(state.diskFile.getName())); + header.add(Box.createHorizontalStrut(10)); + JButton button = new JButton("Knopf"); + button.addActionListener(new ButtonAction()); + header.add(button); + add(header); + // ProgressBar + JPanel progressWrapper = new JPanel(); + progressWrapper.setLayout(new GridLayout(1, 1)); + progressWrapper.setMinimumSize(new Dimension(0, 50)); + progressWrapper.setPreferredSize(progressWrapper.getMinimumSize()); + progress = new BlockProgressBar(null); + progressWrapper.add(progress); + add(progressWrapper); + } + + @Override + public boolean wantConfirmQuit() { + return false; + } + + private class ButtonAction implements ActionListener { + @Override + public void actionPerformed(ActionEvent e) { + } + } + +} -- cgit v1.2.3-55-g7522