package com.jbidwatcher.ui;
import com.jbidwatcher.util.queue.MQFactory;
import com.jbidwatcher.util.queue.MessageQueue;
import javax.swing.*;
import javax.swing.border.LineBorder;
import java.awt.BorderLayout;
import java.awt.Insets;
import java.awt.Color;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
/**
* Created by IntelliJ IDEA.
* User: Morgan
* Date: Feb 11, 2009
* Time: 4:35:36 PM
*
* A zone where less transient information can be delivered to the user per-tab.
*/
class TabStatusPanel extends JPanel {
private JLabel mStatus;
private JProgressBar mLoadProgress;
public TabStatusPanel(String tabName) {
super(new BorderLayout());
setBorder(LineBorder.createBlackLineBorder());
mStatus = new JLabel("Status area");
mStatus.setHorizontalAlignment(JLabel.CENTER);
mStatus.setBackground(Color.decode("#FFFE9C")); // #FDFB6F
JButton closeButton = new JButton("x");
closeButton.setOpaque(false);
closeButton.setBorderPainted(false);
closeButton.setFocusable(false);
closeButton.setMargin(new Insets(0, 0, 0, 0));
closeButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
setVisible(false);
}
});
mLoadProgress = new JProgressBar(0, 99);
mLoadProgress.setVisible(false);
add(mLoadProgress, BorderLayout.WEST);
add(mStatus, BorderLayout.CENTER);
add(closeButton, BorderLayout.EAST);
setBackground(Color.decode("#FFFE9C"));
setOpaque(true);
setVisible(false);
String queueName = tabName + " Tab";
MQFactory.addQueue(queueName, new SwingMessageQueue());
MQFactory.getConcrete(queueName).registerListener(new MessageQueue.Listener() {
public void messageAction(Object deQ) {
final String cmd = deQ.toString();
if (cmd.equals("HIDE")) setVisible(false);
if (cmd.equals("SHOW")) setVisible(true);
if (cmd.startsWith("PROGRESS")) markProgress(cmd, mLoadProgress);
if (cmd.startsWith("REPORT")) {
mStatus.setText(cmd.substring(7));
setVisible(true);
}
}
});
}
private void markProgress(String cmd, JProgressBar loadProgress) {
if (cmd.length() < 9) {
loadProgress.setVisible(!loadProgress.isVisible());
} else {
String levelCmd = cmd.substring(9);
int level = loadProgress.getValue();
try {
level = Integer.parseInt(levelCmd);
} catch (NumberFormatException e) {
loadProgress.setStringPainted(true);
loadProgress.setString(levelCmd);
}
loadProgress.setValue(level);
}
}
}