Normand Briere
2018-07-07 e416acb9b012b17d1efe49ad2199ea7132d874d1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
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;
                }
        }
}