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; } } }