package timeflow.views;
import javax.swing.*;
import timeflow.data.db.ActDB;
import timeflow.model.*;
import java.awt.*;
// superclass of all timeline views
public abstract class AbstractView extends ModelPanel
{
protected boolean ignoreEventsWhenInvisible=true;
JPanel panel;
ActDB lastDrawn, lastNotified;
public AbstractView(TFModel model)
{
super(model);
}
public void paintComponent(Graphics g)
{
g.drawString(getName(), 10,30);
}
public final JComponent getControls()
{
if (panel!=null)
return panel;
panel=new JPanel();
panel.setLayout(new BorderLayout());
panel.add(_getControls(), BorderLayout.CENTER);
JLabel controlLabel=new JLabel(" "+getName()+" Controls")
{
public Dimension getPreferredSize()
{
return new Dimension(30,30);
}
};
controlLabel.setBackground(Color.lightGray);
controlLabel.setForeground(Color.darkGray);
panel.add(controlLabel, BorderLayout.NORTH);
return panel;
}
protected JComponent _getControls()
{
return new JLabel("local: "+getName());
}
public abstract String getName();
protected abstract void _note(TFEvent e);
protected abstract void onscreen(boolean majorChangeHappened);
@Override
public final void note(TFEvent e) {
lastNotified=getModel().getDB();
if (isVisible() || !ignoreEventsWhenInvisible)
{
_note(e);
lastDrawn=lastNotified;
}
}
@Override
public void setVisible(boolean visible)
{
super.setVisible(visible);
if (visible && getModel().getDB()!=null)
{
onscreen(lastDrawn!=lastNotified);
lastDrawn=lastNotified;
}
}
}