blob: 00ce10d3e6366b05d701ec94bfe3f5fbb69fca95 (
plain) (
tree)
|
|
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.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JPanel;
import org.apache.log4j.Logger;
import org.openslx.dozmod.filetransfer.TransferEvent;
import org.openslx.dozmod.filetransfer.TransferEventEmitter;
import org.openslx.dozmod.filetransfer.TransferEventListener;
import org.openslx.dozmod.gui.Gui;
import org.openslx.dozmod.gui.control.BlockProgressBar;
import org.openslx.dozmod.gui.control.QLabel;
@SuppressWarnings("serial")
public abstract class TransferPanel extends ActivityPanel implements TransferEventListener {
protected final QLabel lblStatus;
protected final QLabel lblError;
protected final QLabel lblSpeed;
protected final QLabel lblRemaining;
protected final QLabel lblFilename;
protected final JButton btnClose;
protected final BlockProgressBar progress;
private final TransferEventEmitter transfer;
private final TransferPanel panel = this;
private final Color defaultLabelColor;
protected final JPanel header;
private int errorCountdown = 0;
private final static Logger LOGGER = Logger.getLogger(TransferPanel.class);
private JPanel progressWrapper;
protected JPanel footer;
public TransferPanel(TransferEventEmitter transfer, String displayName, String fileName) {
setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
// Header: [status] VM-Name ---- fileName [Button]
header = new JPanel();
header.setLayout(new BoxLayout(header, BoxLayout.LINE_AXIS));
lblStatus = new QLabel("Initialisiere");
header.add(lblStatus);
header.add(Box.createHorizontalStrut(10));
QLabel vmName = new QLabel(displayName);
vmName.setMinimumSize(new Dimension(0, 0));
vmName.setFont(vmName.getFont().deriveFont(Font.BOLD));
header.add(vmName);
header.add(Box.createHorizontalGlue());
lblFilename = new QLabel(fileName);
lblFilename.setMinimumSize(new Dimension(0, 0));
header.add(lblFilename);
header.add(Box.createHorizontalStrut(10));
btnClose = new JButton("Abbrechen");
header.add(btnClose);
add(header);
progressWrapper = new JPanel();
progressWrapper.setLayout(new GridLayout(1, 1));
progressWrapper.setMinimumSize(Gui.getScaledDimension(0, 50));
progressWrapper.setPreferredSize(progressWrapper.getMinimumSize());
progress = new BlockProgressBar(null);
progressWrapper.add(progress);
add(progressWrapper);
footer = new JPanel();
footer.setLayout(new BoxLayout(footer, BoxLayout.LINE_AXIS));
lblError = new QLabel();
lblSpeed = new QLabel("-");
lblRemaining = new QLabel("-");
lblSpeed.setMinimumSize(Gui.getScaledDimension(50, 0));
lblRemaining.setMinimumSize(Gui.getScaledDimension(60, 0));
footer.add(lblError);
footer.add(Box.createGlue());
footer.add(lblSpeed);
footer.add(Box.createRigidArea(Gui.getScaledDimension(6, 6)));
footer.add(lblRemaining);
add(footer);
this.transfer = transfer;
defaultLabelColor = lblError.getForeground();
}
@Override
public boolean wantConfirmQuit() {
return transfer != null && !transfer.isCanceled();
}
@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) {
String status;
switch (event.state) {
case ERROR:
errorCountdown = 20;
status = "Fehler";
if (transfer.isCanceled()) {
transfer.removeListener(panel);
}
break;
case FINISHED:
transferDone();
status = "Beendet";
break;
case IDLE:
status = "Inaktiv";
break;
case WORKING:
status = "Übertragung läuft";
break;
default:
status = event.state.toString();
break;
}
lblStatus.setText(status);
}
// Remaining + Speed
if (event.remainingRaw != 0) {
lblRemaining.setText(event.remaining);
}
if (event.speedRaw != 0) {
if (event.virtualSpeedRaw != 0) {
lblSpeed.setText(event.speed + " (" + event.virtualSpeed + ")");
} else {
lblSpeed.setText(event.speed);
}
}
// Progress bar
if (event.progress != null) {
progress.setStatus(event.progress);
}
panel.validate();
}
});
}
private void transferDone() {
transfer.removeListener(panel);
lblRemaining.setText("-");
btnClose.setText("Schließen");
lblFilename.setText("");
footer.setVisible(false);
progressWrapper.setVisible(false);
}
}
|