1 package org.wcb.autohome; 2 /*** 3 * Copyright (C) 1999 Walter Bogaardt 4 * 5 * This library is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU Lesser General Public 7 * License as published by the Free Software Foundation; either 8 * version 2 of the License, or (at your option) any later version. 9 * 10 * This library is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 * Lesser General Public License for more details. 14 * 15 * You should have received a copy of the GNU Lesser General Public 16 * License along with this library; if not, write to the Free Software 17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 18 * 19 * Project: Home Automation Interface 20 * Filename: $Id: StatusBar.java,v 1.8 2004/07/22 03:06:49 wbogaardt Exp $ 21 * Abstract: Message bar for all panels 22 * 23 * $Log: StatusBar.java,v $ 24 * Revision 1.8 2004/07/22 03:06:49 wbogaardt 25 * removed deprecated method calls. 26 * 27 * Revision 1.7 2004/02/25 21:38:32 wbogaardt 28 * added javadocs and fixed formating for checkstyle report 29 * 30 * Revision 1.6 2004/02/01 20:42:48 wbogaardt 31 * removed form panel reference and changed sizing of the split bars 32 * 33 * Revision 1.5 2003/12/22 20:51:29 wbogaardt 34 * refactored name assignments and formatted code for readability. 35 * 36 * Revision 1.4 2003/12/20 20:13:01 wbogaardt 37 * modified formating and some names for labels 38 * 39 * Revision 1.3 2003/12/12 01:34:28 wbogaardt 40 * fixed message interface was throwing stack overflow. Fixed display bug with Serial panel. 41 * 42 * Revision 1.2 2003/12/11 23:10:07 wbogaardt 43 * cleaned up exception handeling and logging of system.out messages 44 * 45 * 46 */ 47 48 import javax.swing.SwingConstants; 49 import javax.swing.JTextArea; 50 import javax.swing.ImageIcon; 51 import javax.swing.JLabel; 52 import javax.swing.BorderFactory; 53 import javax.swing.JScrollPane; 54 import javax.swing.JPanel; 55 import java.util.StringTokenizer; 56 import java.util.Calendar; 57 import java.util.GregorianCalendar; 58 import java.awt.*; 59 60 import org.wcb.autohome.interfaces.MessageInterface; 61 62 /*** 63 * Displays the status bar at the bottom of the swing application. 64 */ 65 public class StatusBar extends JPanel implements MessageInterface, SwingConstants { 66 67 private JTextArea jtaPrintArea; 68 private ImageIcon iiConnectImage, iiDisconnectImage, iiSunriseImage, iiSunsetImage; 69 private JLabel jlConnectDisplay, jlSunrise, jlSunset; 70 private boolean bCM11A = false; 71 72 /*** 73 * create the status bar and set up some components 74 */ 75 public StatusBar() { 76 setupComponents(); 77 printMessage("Finding last opened file"); 78 } 79 80 /*** 81 * Sets up the components 82 */ 83 private void setupComponents() { 84 setLayout(new BorderLayout()); 85 setBorder(BorderFactory.createTitledBorder 86 (BorderFactory.createLineBorder 87 (Color.yellow), "Status")); 88 jtaPrintArea = new JTextArea(3, 50); 89 iiConnectImage = AutoHomeAdminSession.INTERFACE_ON; 90 iiDisconnectImage = AutoHomeAdminSession.INTERFACE_OFF; 91 iiSunriseImage = AutoHomeAdminSession.SUNRISE; 92 iiSunsetImage = AutoHomeAdminSession.SUNSET; 93 jlSunrise = new JLabel("06:00", iiSunriseImage, CENTER); 94 jlSunset = new JLabel("17:00", iiSunsetImage, CENTER); 95 jlConnectDisplay = new JLabel(iiDisconnectImage); 96 JScrollPane js = new JScrollPane(jtaPrintArea); 97 add(js, BorderLayout.CENTER); 98 add(createStatusPanel(), BorderLayout.EAST); 99 } 100 101 /*** 102 * This panel creates the icons to the right of 103 * the status bar. 104 * @return The icons panel. 105 */ 106 private JPanel createStatusPanel() { 107 GridBagConstraints gridBagConstraints; 108 JPanel iconsPanel = new JPanel(); 109 iconsPanel.setLayout(new GridBagLayout()); 110 iconsPanel.add(jlConnectDisplay, new GridBagConstraints()); 111 112 iconsPanel.add(jlSunrise, new GridBagConstraints()); 113 114 gridBagConstraints = new GridBagConstraints(); 115 gridBagConstraints.gridx = 1; 116 gridBagConstraints.gridy = 1; 117 iconsPanel.add(jlSunset, gridBagConstraints); 118 119 return iconsPanel; 120 } 121 122 /*** 123 * This returns an instance of the MessageInterface 124 * that is used in this class to control the various 125 * messages. 126 * @return MessageInterface the messages to print to a console. 127 */ 128 public MessageInterface getInterface() { 129 return this; 130 } 131 132 /*** 133 * This method takes a string message and displays it 134 * in a text area. String messages are passed via 135 * the Message Interface. 136 * @param theMessage the message to print to the print area. 137 */ 138 public void printMessage(String theMessage) { 139 GregorianCalendar currDate = new GregorianCalendar(); 140 jtaPrintArea.append("[" + currDate.get(Calendar.HOUR) + ":" + currDate.get(Calendar.MINUTE) + ":" 141 + currDate.get(Calendar.SECOND) + "] "); 142 jtaPrintArea.append(theMessage + "\n"); 143 } 144 145 /*** 146 * This method takes a boolean value and displays 147 * an Icon label that denotes wether the interface 148 * is connected to the serial port or not. 149 * @param connected true shows a connected icon 150 */ 151 public void interfaceConnected(boolean connected) { 152 if (connected) 153 { 154 jlConnectDisplay.setIcon(iiConnectImage); 155 } 156 else 157 { 158 jlConnectDisplay.setIcon(iiDisconnectImage); 159 } 160 } 161 162 /*** 163 * Sets the sun rise time to a printable string 164 * @param timeString printable string of hh:mm A 165 */ 166 public void setSunriseTime(String timeString) { 167 jlSunrise.setText(timeString); 168 } 169 170 /*** 171 * Sets the sunset time to a printable string 172 * @param timeString printable string of hh:mm A 173 */ 174 public void setSunsetTime(String timeString) { 175 jlSunset.setText(timeString); 176 } 177 178 /*** 179 * Gets the sunrise time as a string. 180 * @return Sunrise time in HH:mm (24 hour format) 181 */ 182 public String getSunriseTime() { 183 StringBuffer sunrise = new StringBuffer(""); 184 String returnValue = null; 185 try 186 { 187 StringTokenizer hour = new StringTokenizer(jlSunrise.getText(), ":"); 188 int hour24 = Integer.parseInt(hour.nextToken()); 189 String minutes = hour.nextToken(); 190 if (hour24 < 10) 191 { 192 sunrise.append("0" + hour24 + ":" + minutes); 193 } 194 returnValue = sunrise.toString(); 195 } 196 catch (NumberFormatException err) 197 { 198 returnValue = "00:00"; 199 } 200 return returnValue; 201 } 202 203 /*** 204 * The sunset time in 24 hour format 205 * @return Sunsiet in HH:mm 206 */ 207 public String getSunsetTime() { 208 return jlSunset.getText(); 209 } 210 211 /*** 212 * Boolean value if the serial port is connected to CM11A 213 * @return True if CM11A x10 interface 214 */ 215 public boolean isGatewayCM11A() 216 { 217 return bCM11A; 218 } 219 220 /*** 221 * If the the gateway is a CM11A set this to true. 222 * This way allows the Time panel to enable its display 223 * and allows the user to set time information for CM11A or CM12U gateways. 224 * @param bValue set the to true if the device connected is a CM11A interface 225 */ 226 public void isGatewayCM11A(boolean bValue) 227 { 228 bCM11A = bValue; 229 } 230 } 231 232