/*
* Copyright (c) 2014 tabletoptool.com team.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Public License v3.0
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/gpl.html
*
* Contributors:
* rptools.com team - initial implementation
* tabletoptool.com team - further development
*/
package com.t3.client.ui.token;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.Serializable;
import java.text.NumberFormat;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableColumnModel;
import com.t3.client.TabletopTool;
import com.t3.client.swing.AbeillePanel;
import com.t3.client.swing.GenericDialog;
import com.t3.model.Token;
import com.t3.transfer.AssetConsumer;
import com.t3.transfer.ConsumerListener;
/**
* This dialog is used to display all of the assets being transferred
*/
public class TransferProgressDialog extends AbeillePanel<Token> implements ConsumerListener {
private GenericDialog dialog;
public TransferProgressDialog() {
super("com/t3/client/ui/forms/transferProgressDialog.xml");
panelInit();
}
public void showDialog() {
dialog = new GenericDialog("Assets in Transit", TabletopTool.getFrame(), this, false) {
@Override
public void showDialog() {
TabletopTool.getAssetTransferManager().addConsumerListener(TransferProgressDialog.this);
super.showDialog();
}
@Override
public void closeDialog() {
TabletopTool.getAssetTransferManager().removeConsumerListener(TransferProgressDialog.this);
super.closeDialog();
}
};
getRootPane().setDefaultButton(getCloseButton());
dialog.showDialog();
}
public JButton getCloseButton() {
return (JButton) getComponent("closeButton");
}
public JTable getTransferTable() {
return (JTable) getComponent("transferTable");
}
public void initCloseButton() {
getCloseButton().addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dialog.closeDialog();
}
});
}
private void updateTransferTable() {
final TransferTableModel model = new TransferTableModel();
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
getTransferTable().setModel(model);
TableColumnModel colModel = getTransferTable().getColumnModel();
colModel.getColumn(1).setMaxWidth(100);
colModel.getColumn(2).setMaxWidth(75);
}
});
}
public void initTransferTable() {
getTransferTable().setBackground(Color.white);
updateTransferTable();
}
private static class TransferTableModel extends AbstractTableModel {
private final List<AssetConsumer> consumerList;
public TransferTableModel() {
consumerList = TabletopTool.getAssetTransferManager().getAssetConsumers();
}
@Override
public int getColumnCount() {
return 3;
}
@Override
public int getRowCount() {
return Math.max(consumerList.size(), 1);
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
if (consumerList.size() == 0) {
return columnIndex == 0 ? "None" : "";
}
AssetConsumer consumer = consumerList.get(rowIndex);
switch (columnIndex) {
case 0:
return consumer.getId();
case 1:
return formatSize(consumer.getSize());
case 2:
return NumberFormat.getPercentInstance().format(consumer.getPercentComplete());
}
return null;
}
private String formatSize(long size) {
return NumberFormat.getIntegerInstance().format(size / 1024) + "k";
}
@Override
public String getColumnName(int column) {
switch (column) {
case 0:
return "ID";
case 1:
return "Size";
case 2:
return "Progress";
}
return "";
}
}
////
// CONSUMER LISTENER
@Override
public void assetComplete(Serializable id, String name, File data) {
updateTransferTable();
}
@Override
public void assetUpdated(Serializable id) {
getTransferTable().repaint();
}
@Override
public void assetAdded(Serializable id) {
updateTransferTable();
}
}