blob: 80f5d5297c8f9fe88370488abb8b911c18dbedb7 (
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.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;
import org.openslx.dozmod.gui.helper.I18n;
public abstract class TransferPanel extends ActivityPanel implements TransferEventListener {
/**
* Version for serialization.
*/
private static final long serialVersionUID = -8094141830153862958L;
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 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(I18n.ACTIVITY.getString("TransferPanel.TransferState.initialize"));
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(I18n.ACTIVITY.getString("TransferPanel.Button.close.text.0"));
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 = I18n.ACTIVITY.getString("TransferPanel.TransferState.error");
if (transfer.isCanceled()) {
transfer.removeListener(panel);
releaseResources();
}
break;
case FINISHED:
transferDone();
status = I18n.ACTIVITY.getString("TransferPanel.TransferState.finished");
releaseResources();
break;
case IDLE:
status = I18n.ACTIVITY.getString("TransferPanel.TransferState.idle");
break;
case WORKING:
status = I18n.ACTIVITY.getString("TransferPanel.TransferState.working");
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);
}
panel.validate();
}
});
}
/**
* Called when the transfer is finished, or cancelled due to an error
*/
protected abstract void releaseResources();
private void transferDone() {
transfer.removeListener(panel);
lblRemaining.setText("-");
btnClose.setText(I18n.ACTIVITY.getString("TransferPanel.Button.close.text.1"));
lblFilename.setText("");
footer.setVisible(false);
progressWrapper.setVisible(false);
}
}
|