Source code: com/arranger/jarl/shell/views/mainShellPanes/MSPFrameSlider.java
1 package com.arranger.jarl.shell.views.mainShellPanes;
2
3 import com.arranger.jarl.shell.models.BaseModel;
4 import com.arranger.jarl.shell.models.JarlContextModel;
5
6 import javax.swing.*;
7 import javax.swing.border.TitledBorder;
8 import javax.swing.event.ChangeEvent;
9 import javax.swing.event.ChangeListener;
10 import java.awt.*;
11 import java.util.Hashtable;
12
13 /**
14 * MSPFrameSlider created on Apr 21, 2003
15 */
16 public class MSPFrameSlider extends BaseMSP {
17
18 protected JSlider m_slider;
19 protected TitledBorder m_titledBorder;
20 protected boolean m_isUpdating = false;
21
22 /**
23 * Create a component
24 * @return
25 */
26 public Component createComponent() {
27 m_slider = new JSlider(JSlider.HORIZONTAL);
28 m_slider.setPaintTicks(true);
29 m_slider.setPaintTrack(true);
30 m_slider.setPaintLabels(true);
31
32 m_slider.setBorder(m_titledBorder = BorderFactory.createTitledBorder("Current Frame"));
33 setOptions();
34
35 m_slider.addChangeListener(new ChangeListener() {
36 public void stateChanged(ChangeEvent e) {
37 if (!m_isUpdating) {
38 JarlContextModel jarlContextModel = getJarlContextModel();
39 jarlContextModel.setCurrentFrame(m_slider.getValue());
40 }
41 }
42 });
43
44 return m_slider;
45 }
46
47 /**
48 * Events have been fired
49 * @param baseModel
50 * @param propertyName
51 */
52 public void onChange(BaseModel baseModel, String propertyName) {
53 if (baseModel instanceof JarlContextModel &&
54 JarlContextModel.CURRENT_CONFIG.equals(propertyName) ||
55 JarlContextModel.CURRENT_FRAME.equals(propertyName) ||
56 JarlContextModel.INITIALIZED.equals(propertyName) ||
57 JarlContextModel.STOP_FRAME.equals(propertyName) ||
58 JarlContextModel.START_FRAME.equals(propertyName)) {
59 setOptions();
60 }
61 }
62
63 protected void setOptions() {
64
65 SwingUtilities.invokeLater(new Runnable() {
66 public void run() {
67 m_isUpdating = true;
68 try {
69 JarlContextModel jarlContextModel = getJarlContextModel();
70 int start = jarlContextModel.getStartFrame();
71 int stop = jarlContextModel.getStopFrame();
72 int current = jarlContextModel.getCurrentFrame();
73 int total = stop - start;
74 int majorTick = total / 4;
75 int minorTick = total / 10;
76
77 m_slider.getModel().setRangeProperties(current, 1, start, stop, false);
78 m_slider.setMinorTickSpacing(minorTick);
79
80 /*System.out.println("setOptions: " +
81 start + ", " +
82 stop + ", " +
83 current + ", " +
84 majorTick + ", " +
85 minorTick + ", ");*/
86
87 Hashtable labels = m_slider.createStandardLabels(majorTick);
88 m_slider.setLabelTable(labels);
89
90 m_titledBorder.setTitle("Current Frame: " + current);
91 } finally {
92 m_isUpdating = false;
93 }
94 }
95 });
96 }
97 }