View Javadoc
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   * @author jlhawkwell
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  		// menu setup
63  		menu = new JTabbedPane(JTabbedPane.TOP, JTabbedPane.SCROLL_TAB_LAYOUT);
64  
65  		// system menu
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 		// status bar
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 		// final steps
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 	// helper functions
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 }