1 package com.starphoenixmedia.candle_pos.modeforms;
2
3 import com.starphoenixmedia.candle_pos.CandleStart;
4 import com.starphoenixmedia.candle_pos.scale.ScaleAction;
5 import com.starphoenixmedia.candle_pos.util.ScaleActionListener;
6 import com.starphoenixmedia.candle_pos.scale.ScaleData;
7 import com.starphoenixmedia.candle_pos.scale.ScaleReader;
8 import com.starphoenixmedia.candle_pos.util.SuperListener;
9 import gnu.io.SerialPortEvent;
10 import gnu.io.SerialPortEventListener;
11 import java.awt.BorderLayout;
12 import java.awt.Dimension;
13 import java.awt.Rectangle;
14 import java.awt.event.ActionEvent;
15 import java.awt.event.WindowEvent;
16 import java.awt.event.WindowListener;
17 import java.awt.event.WindowStateListener;
18 import java.net.URL;
19 import java.util.HashMap;
20 import javax.swing.ImageIcon;
21 import javax.swing.JButton;
22 import javax.swing.JFrame;
23 import javax.swing.JLabel;
24 import javax.swing.JTabbedPane;
25 import javax.swing.JToolBar;
26 import javax.swing.SwingUtilities;
27 import javax.swing.UIManager;
28 import javax.swing.UIManager.LookAndFeelInfo;
29 import javax.swing.UnsupportedLookAndFeelException;
30
31
32
33
34
35 public class BGeneric implements ScaleActionListener, SerialPortEventListener, WindowListener, WindowStateListener
36 {
37 protected JFrame window;
38 protected JTabbedPane menu;
39 protected ScaleReader sr;
40 protected ScaleData sd;
41 protected JLabel outputLabel;
42
43 protected HashMap<String, JToolBar> menus;
44
45 public void setup(ScaleReader reader)
46 {
47 sr = reader;
48 if ( sr.getScaleData() != null) { sd = sr.getScaleData(); }
49 }
50
51 public void run()
52 {
53 menus = new HashMap();
54 window = new JFrame();
55 window.setTitle("Candle POS");
56 BorderLayout bl = new BorderLayout();
57 bl.setHgap(1);
58 bl.setVgap(1);
59
60 window.setLayout(bl);
61
62
63 menu = new JTabbedPane(JTabbedPane.TOP, JTabbedPane.SCROLL_TAB_LAYOUT);
64
65
66 menus.put("system", addMenuBar("System"));
67 menu.addTab("System", createIcon("categories/applications-system"), menus.get("system"));
68
69 JButton jb = new JButton("Exit");
70 jb.setIcon(createIcon("actions/system-log-out"));
71 jb.setText("Exit");
72 jb.addActionListener((ActionEvent e) ->
73 { window.dispatchEvent(new WindowEvent(window, WindowEvent.WINDOW_CLOSING)); });
74 menus.get("system").add(jb);
75
76 LookAndFeelInfo[] lafis = UIManager.getInstalledLookAndFeels();
77 int i;
78 menus.get("system").addSeparator();
79 SuperListener al;
80 ImageIcon ct = createIcon("apps/preferences-desktop-theme");
81 for ( i = 0; i < lafis.length; i++ )
82 {
83 jb = new JButton(lafis[i].getName());
84 jb.setName(lafis[i].getName());
85 jb.setIcon(ct);
86 al = new SuperListener()
87 {
88 private String l;
89 @Override public void actionPerformed(ActionEvent e)
90 {
91 try
92 {
93 UIManager.setLookAndFeel(l);
94 SwingUtilities.updateComponentTreeUI(window);
95 }
96 catch ( ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException x ) {}
97 }
98 @Override public void setup(String laf) { l = laf; }
99 };
100 al.setup(lafis[i].getClassName());
101 jb.addActionListener(al);
102 menus.get("system").add(jb);
103 }
104
105 window.add(menu, BorderLayout.PAGE_START);
106
107
108 JToolBar statusBar = addMenuBar("Status");
109 statusBar.add(new JLabel("Scale Reading:"));
110 statusBar.addSeparator();
111 outputLabel = new JLabel("---");
112 statusBar.add(outputLabel);
113 window.add(statusBar, BorderLayout.PAGE_END);
114
115
116 Dimension dim = new Dimension();
117 Rectangle rect = window.getGraphicsConfiguration().getBounds();
118
119 dim.setSize(rect.width / 2d, rect.height / 2d);
120 window.setMinimumSize(dim);
121 window.setBounds(dim.width / 2, dim.height / 2, dim.width, dim.height);
122 window.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
123
124 window.addWindowStateListener(this);
125 window.addWindowListener(this);
126 sr.setActionListener(this);
127 }
128
129 @Override public void serialEvent(SerialPortEvent ev) { grabSerialEvent(ev); }
130
131 public void grabSerialEvent(SerialPortEvent ev) {}
132
133
134 protected JToolBar addMenuBar(String name)
135 {
136 JToolBar jtb = new JToolBar();
137 jtb.setBorderPainted(true);
138 jtb.setFloatable(false);
139 jtb.setRollover(true);
140 jtb.setName(name);
141
142 return jtb;
143 }
144
145 private int getTabIndex(String name)
146 {
147 int a;
148 for ( a = 0; a < menu.getTabCount(); a++ )
149 {
150 if ( name.equals(menu.getTitleAt(a)) ) { return a; }
151 }
152
153 return -1;
154 }
155
156 public ImageIcon createIcon(String icon)
157 {
158 StringBuilder sb = new StringBuilder("org/freedesktop/tango/22x22/");
159 sb.append(icon);
160 sb.append(".png");
161 URL f = getClass().getClassLoader().getResource(sb.toString());
162 if ( f != null ) { return new ImageIcon(f); }
163 else { return null; }
164 }
165
166 @Override public void windowStateChanged(WindowEvent e) {}
167
168 @Override public void windowOpened(WindowEvent e) {}
169
170 @Override public void windowClosing(WindowEvent e)
171 {
172 if ( sr != null ) { sr.halt(); }
173 CandleStart.es.shutdown();
174 window.setVisible(false);
175 }
176
177 @Override public void windowClosed(WindowEvent e)
178 {
179 window.dispose();
180 System.exit(0);
181 }
182
183 @Override public void windowIconified(WindowEvent e) {}
184 @Override public void windowDeiconified(WindowEvent e) {}
185 @Override public void windowActivated(WindowEvent e) {}
186 @Override public void windowDeactivated(WindowEvent e) {}
187 @Override public void actionPerformed(ScaleAction action) { outputLabel.setText(action.getReading()); }
188 }