package edu.cmu.minorthird.util.gui;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.util.List;
import javax.swing.JTextField;
/**
* Wraps a viewer and adds a status message at the bottom. Status
* messages are sent by a sub-viewer by sending a message with a class
* to sendSignal(TEXT_MESSAGE, "content of message");
*
* @author William cohen
*/
public class MessageViewer extends Viewer{
static final long serialVersionUID=20080517L;
private Viewer subViewer;
private JTextField statusField;
public MessageViewer(){
super();
}
public MessageViewer(Object obj){
super(obj);
}
public MessageViewer(Viewer subViewer){
super();
setSubView(subViewer);
}
public void setSubView(Viewer subViewer){
this.subViewer=subViewer;
subViewer.setSuperView(this);
removeAll();
add(subViewer,fillerGBC());
GridBagConstraints gbc=new GridBagConstraints();
gbc.fill=GridBagConstraints.HORIZONTAL;
gbc.weightx=gbc.weighty=0;
gbc.gridx=0;
gbc.gridy=1;
statusField=new JTextField("");
add(statusField,gbc);
}
//
// delegate operations to subViewer
//
@Override
final public void receiveContent(Object obj){
subViewer.setContent(obj);
}
@Override
public void clearContent(){
subViewer.clearContent();
}
@Override
final public boolean canReceive(Object obj){
return subViewer.canReceive(obj);
}
@Override
final protected boolean canHandle(int signal,Object argument,
List<Viewer> senders){
// grab TEXT_MESSAGE signals
if(signal==TEXT_MESSAGE)
return true;
else
return subViewer.canHandle(signal,argument,senders);
}
@Override
final protected void handle(int signal,Object argument,List<Viewer> senders){
if(signal==TEXT_MESSAGE){
statusField.setText(argument.toString());
}else{
subViewer.handle(signal,argument,senders);
}
}
@Override
final protected void initialize(){
setLayout(new GridBagLayout());
}
}