package timeflow.app.ui;
import timeflow.app.ui.filter.FilterControlPanel;
import timeflow.data.db.*;
import timeflow.data.time.*;
import timeflow.model.*;
import javax.swing.*;
import timeflow.util.*;
import java.awt.*;
import java.awt.event.*;
import java.util.List;
public class GlobalDisplayPanel extends ModelPanel {
JPanel encodings=new JPanel();
JPanel localControls=new JPanel();
JPanel globalControls=new JPanel();
CardLayout localCards=new CardLayout();
public GlobalDisplayPanel(TFModel model, FilterControlPanel filterControls)
{
super(model);
setBackground(Color.white);
setLayout(new BorderLayout());
add(localControls, BorderLayout.CENTER);
localControls.setBackground(Color.white);
localControls.setLayout(localCards);
JPanel p=new JPanel();
p.setBackground(Color.white);
p.setLayout(new BorderLayout());
JPanel globalLabel=new JPanel();
globalLabel.setLayout(new BorderLayout());
JPanel topLine=new Pad(2,3);
topLine.setBackground(Color.gray);
globalLabel.add(topLine, BorderLayout.NORTH);
JPanel bottomLine=new Pad(2,3);
bottomLine.setBackground(Color.gray);
globalLabel.add(bottomLine, BorderLayout.SOUTH);
JLabel label=new JLabel(" Global Controls", JLabel.LEFT)
{
public Dimension getPreferredSize()
{
return new Dimension(30,30);
}
};
label.setBackground(Color.lightGray);
label.setForeground(Color.darkGray);
globalLabel.add(label, BorderLayout.CENTER);
p.add(globalLabel, BorderLayout.NORTH);
JPanel global=new JPanel();
global.setLayout(new BorderLayout());
global.add(new StatusPanel(model, filterControls), BorderLayout.NORTH);
encodings.setLayout(new GridLayout(4,1));
encodings.setBackground(Color.white);
global.add(encodings, BorderLayout.CENTER);
p.add(global, BorderLayout.CENTER);
add(p, BorderLayout.SOUTH);
makeEncodingPanel();
}
public void showLocalControl(String name)
{
localCards.show(localControls, name);
}
public void addLocalControl(String name, JComponent control)
{
localControls.add(control, name);
}
void makeEncodingPanel()
{
encodings.removeAll();
ActDB db=getModel().getDB();
if (db==null)
return;
java.util.List<Field> dimensions=DBUtils.categoryFields(db);
java.util.List<Field> measures=db.getFields(Double.class);
makeChooser(VirtualField.LABEL, "Label", "None", db.getFields(String.class));
makeChooser(VirtualField.TRACK, "Groups", "None", dimensions);
makeChooser(VirtualField.COLOR, "Color", "Same As Groups", dimensions);
makeChooser(VirtualField.SIZE, "Dot Size", "None", measures);
}
private JComboBox makeChooser(final String alias, String title, String nothingLabel, List<Field> fields) {
if (fields.size()==0)
return null;
JPanel panel=new JPanel();
panel.setBackground(Color.white);
panel.setLayout(new BorderLayout());
JPanel topPad=new Pad(10,7);
topPad.setBackground(Color.white);
panel.add(topPad, BorderLayout.NORTH);
JPanel rightPad=new Pad(10,10);
panel.add(rightPad, BorderLayout.EAST);
rightPad.setBackground(Color.white);
panel.add(new JLabel(" "+title) {public Dimension getPreferredSize() {return new Dimension(60,25);}},
BorderLayout.WEST);
final JComboBox c=new JComboBox();
if (nothingLabel!=null)
c.addItem(nothingLabel);
for (Field f: fields)
{
c.addItem(f.getName());
}
Field current=getModel().getDB().getField(alias);
if (current!=null)
c.setSelectedItem(current.getName());
c.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Field realField=c.getSelectedIndex()==0 ?
null : getModel().getDB().getField((String)c.getSelectedItem());
getModel().setFieldAlias(realField, alias, GlobalDisplayPanel.this);
}});
c.setBackground(Color.white);
c.setBorder(null);
panel.add(c, BorderLayout.CENTER);
encodings.add(panel);
c.setBorder(null);
return c;
}
@Override
public void note(TFEvent e) {
if (e.affectsSchema())
makeEncodingPanel();
}
}