diff options
author | Simon Rettberg | 2015-08-11 19:19:03 +0200 |
---|---|---|
committer | Simon Rettberg | 2015-08-11 19:19:03 +0200 |
commit | 3946cc23a61fdb4bc830a64e5993817abf055b1b (patch) | |
tree | 9dbd00563e2e0d55804381217677054116f29476 /dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity | |
parent | [client] Back off with reconnects for file transfers if it fails too often (diff) | |
download | tutor-module-3946cc23a61fdb4bc830a64e5993817abf055b1b.tar.gz tutor-module-3946cc23a61fdb4bc830a64e5993817abf055b1b.tar.xz tutor-module-3946cc23a61fdb4bc830a64e5993817abf055b1b.zip |
[client] Add DownloadPanel to show progress of images being downloaded
Diffstat (limited to 'dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity')
3 files changed, 183 insertions, 120 deletions
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/DownloadPanel.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/DownloadPanel.java new file mode 100644 index 00000000..27e17f53 --- /dev/null +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/DownloadPanel.java @@ -0,0 +1,42 @@ +package org.openslx.dozmod.gui.activity; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import org.openslx.dozmod.filetransfer.DownloadTask; +import org.openslx.dozmod.gui.Gui; +import org.openslx.dozmod.gui.helper.MessageType; + +@SuppressWarnings("serial") +public class DownloadPanel extends TransferPanel { + + private final DownloadPanel panel = this; + + private final DownloadTask download; + + public DownloadPanel(String displayName, String diskFile, DownloadTask download) { + super(download, displayName, diskFile); + btnClose.addActionListener(new ButtonAction()); + this.download = download; + download.addListener(this); + } + + @Override + public boolean wantConfirmQuit() { + return download != null && !download.isCanceled(); + } + + private class ButtonAction implements ActionListener { + @Override + public void actionPerformed(ActionEvent e) { + if (!download.isCanceled()) { + if (!Gui.showMessageBox(panel, "Wollen Sie diesen Transfer wirklich abbrechen?", + MessageType.QUESTION_YESNO, null, null)) + return; + download.cancel(); + } + download.removeListener(panel); + close(); + } + } +} diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/TransferPanel.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/TransferPanel.java new file mode 100644 index 00000000..f847a8ef --- /dev/null +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/TransferPanel.java @@ -0,0 +1,138 @@ +package org.openslx.dozmod.gui.activity; + +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.GridLayout; + +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.filetransfer.TransferEvent; +import org.openslx.dozmod.filetransfer.TransferEventListener; +import org.openslx.dozmod.filetransfer.TransferTask; +import org.openslx.dozmod.gui.Gui; +import org.openslx.dozmod.gui.control.BlockProgressBar; + +@SuppressWarnings("serial") +public abstract class TransferPanel extends ActivityPanel implements TransferEventListener { + + protected final JLabel lblStatus; + + protected final JLabel lblError; + + protected final JLabel lblSpeed; + + protected final JLabel lblRemaining; + + protected final JButton btnClose; + + protected final BlockProgressBar progress; + + private final TransferTask transfer; + + private final TransferPanel panel = this; + + private final Color defaultLabelColor; + + private int errorCountdown = 0; + + public TransferPanel(TransferTask transfer, String displayName, String fileName) { + 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(displayName); + vmName.setFont(vmName.getFont().deriveFont(Font.BOLD)); + header.add(vmName); + header.add(Box.createHorizontalGlue()); + header.add(new JLabel(fileName)); + header.add(Box.createHorizontalStrut(10)); + btnClose = new JButton("Abbrechen"); + header.add(btnClose); + 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); + // Speed & error + JPanel footer = new JPanel(); + footer.setLayout(new BoxLayout(footer, BoxLayout.LINE_AXIS)); + lblError = new JLabel(); + lblSpeed = new JLabel("-"); + lblRemaining = new JLabel("-"); + lblSpeed.setMinimumSize(new Dimension(50, 0)); + lblRemaining.setMinimumSize(new Dimension(60, 0)); + footer.add(lblError); + footer.add(Box.createGlue()); + footer.add(lblSpeed); + footer.add(Box.createRigidArea(new Dimension(6, 6))); + footer.add(lblRemaining); + add(footer); + this.transfer = transfer; + defaultLabelColor = lblError.getForeground(); + } + + @Override + public void update(final TransferEvent event) { + Gui.asyncExec(new Runnable() { + @Override + public void run() { + // Any error message? + if (event.errorMessage != null && !event.errorMessage.isEmpty()) { + lblError.setText(event.errorMessage); + lblError.setForeground(Color.RED); + errorCountdown = 20; + } else if (errorCountdown > 0) { + errorCountdown--; + if (errorCountdown == 10) { + lblError.setForeground(defaultLabelColor); + } else if (errorCountdown == 0) { + lblError.setText(""); + } + } + // Status? + if (event.state != null) { + switch (event.state) { + case ERROR: + errorCountdown = 20; + break; + case FINISHED: + btnClose.setText("Schließen"); + lblRemaining.setText("-"); + transfer.removeListener(panel); + break; + default: + break; + } + lblStatus.setText(event.state.toString()); + } + // Remaining + Speed + if (event.remainingRaw != 0) { + lblRemaining.setText(event.remaining); + } + if (event.speedRaw != 0) { + lblSpeed.setText(event.speed); + } + // Progress bar + if (event.progress != null) { + progress.setStatus(event.progress); + } + panel.validate(); + } + }); + } + +} 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 index 46ffb51c..480a612b 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/UploadPanel.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/UploadPanel.java @@ -1,24 +1,10 @@ package org.openslx.dozmod.gui.activity; -import java.awt.Color; -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.apache.log4j.Logger; -import org.openslx.dozmod.filetransfer.TransferEvent; -import org.openslx.dozmod.filetransfer.TransferEventListener; import org.openslx.dozmod.gui.Gui; -import org.openslx.dozmod.gui.control.BlockProgressBar; import org.openslx.dozmod.gui.helper.MessageType; import org.openslx.dozmod.state.UploadWizardState; import org.openslx.thrifthelper.ThriftManager; @@ -26,73 +12,18 @@ import org.openslx.util.QuickTimer; import org.openslx.util.QuickTimer.Task; @SuppressWarnings("serial") -public class UploadPanel extends ActivityPanel implements TransferEventListener { +public class UploadPanel extends TransferPanel { private static final Logger LOGGER = Logger.getLogger(UploadPanel.class); - private final JLabel lblStatus; - - private final JLabel lblError; - - private final JLabel lblSpeed; - - private final JLabel lblRemaining; - - private final BlockProgressBar progress; - private final UploadWizardState state; private final UploadPanel panel = this; - private final Color defaultLabelColor; - - private int errorCountdown = 0; - - private final JButton btnClose; - public UploadPanel(UploadWizardState state) { - 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)); - btnClose = new JButton("Abbrechen"); + super(state.uploadTask, state.name, state.diskFile.getName()); btnClose.addActionListener(new ButtonAction()); - header.add(btnClose); - 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); - // Speed & error - JPanel footer = new JPanel(); - footer.setLayout(new BoxLayout(footer, BoxLayout.LINE_AXIS)); - lblError = new JLabel(); - lblSpeed = new JLabel("-"); - lblRemaining = new JLabel("-"); - lblSpeed.setMinimumSize(new Dimension(50, 0)); - lblRemaining.setMinimumSize(new Dimension(60, 0)); - footer.add(lblError); - footer.add(Box.createGlue()); - footer.add(lblSpeed); - footer.add(Box.createRigidArea(new Dimension(6, 6))); - footer.add(lblRemaining); - add(footer); - defaultLabelColor = lblError.getForeground(); + this.state = state; state.uploadTask.addListener(this); } @@ -124,52 +55,4 @@ public class UploadPanel extends ActivityPanel implements TransferEventListener close(); } } - - @Override - public void update(final TransferEvent event) { - Gui.asyncExec(new Runnable() { - @Override - public void run() { - // Any error message? - if (event.errorMessage != null && !event.errorMessage.isEmpty()) { - lblError.setText(event.errorMessage); - lblError.setForeground(Color.RED); - errorCountdown = 20; - } else if (errorCountdown > 0) { - errorCountdown--; - if (errorCountdown == 10) { - lblError.setForeground(defaultLabelColor); - } else if (errorCountdown == 0) { - lblError.setText(""); - } - } - // Status? - if (event.state != null) { - switch (event.state) { - case ERROR: - errorCountdown = 20; - break; - case FINISHED: - btnClose.setText("Schließen"); - lblRemaining.setText("-"); - state.uploadTask.removeListener(panel); - break; - } - lblStatus.setText(event.state.toString()); - } - // Remaining + Speed - if (event.remainingRaw != 0) { - lblRemaining.setText(event.remaining); - } - if (event.speedRaw != 0) { - lblSpeed.setText(event.speed); - } - // Progress bar - if (event.progress != null) { - progress.setStatus(event.progress); - } - panel.validate(); - } - }); - } } |