package tmcsim.client.cadclientgui.screens; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Image; import java.awt.Point; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ComponentEvent; import java.awt.event.ComponentListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.logging.Level; import java.util.logging.Logger; import javax.imageio.ImageIO; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import tmcsim.common.RevisionNumber; /** * The main CADMenu with buttons to open up other screens. This class uses * mostly images to build from, and java gui does not allow those images to be * editable here, so all the images' pixels are predefined in the images * themselves. The images can be found in the images folder. An image called * "CADMenuLayout" can also be found in the same folder showing how this class's * looks were made. * * @author Vincent * */ public class CADMenu extends JFrame { private final int ONE_SECOND = 1000; private DateFormat dateFormat; private Box mainPanel; private Box bottomRightIcons; private Box bottomRightButtonsGrayed; private Box bottomRightButtonsColored; private JLabel dateAndTime; private JLabel name; private JLabel userListName1; private JButton button1; private JButton button2; private JButton button3; private JButton button4; private JButton button5; private JButton button6; private JButton buttonTool; private JButton buttonMore; // the drop down menu when the "more button" is clicked. private JFrame moreMenu; // the drop down menu when the "tool button" is clicked. private JFrame toolMenu; private JButton buttonCheckmark; private JButton buttonMinus; private JLabel position; /** * Constructor call. Creates the CADMenu. */ public CADMenu() { initialize(); createTopPanel(); createBottomPanel(); createDropDownMenus(); initControllers(); getContentPane().add(mainPanel); setTitle("Inform CAD ("+RevisionNumber.getAppVersion()+")"); // Load an image for the task bar icon --JD // First try to get the image from a local file ImageIcon coolIcon = new ImageIcon("images/CADMenuImages/US_101_icon.png"); if (coolIcon.getIconWidth() >= 0) { setIconImage(coolIcon.getImage()); } else // if no local file found, try a URL { URL url; Image img = null; try { String iconURL = "http://www.chicagonow.com/running-with-a-book-cart/files/2012/02/crosswalk1.jpg"; url = new URL(iconURL); img = ImageIO.read(url); setIconImage(img); } catch (MalformedURLException ex) { Logger.getLogger(CADMenu.class.getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) { Logger.getLogger(CADMenu.class.getName()).log(Level.SEVERE, null, ex); } } setPreferredSize(new Dimension(1195, 178)); setResizable(true); setFocusable(true); pack(); // Unsure why this was "do nothing" because it prevents the Menu frame // from closing so the user can't terminate the application. // setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); setDefaultCloseOperation(EXIT_ON_CLOSE); setVisible(false); } /** * Initializes variables and connects the CADMenu to the CADMenuListener. */ public void initialize() { mainPanel = new Box(BoxLayout.Y_AXIS); mainPanel.setAlignmentX(LEFT_ALIGNMENT); dateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss"); } public void addListeners() { addComponentListener(new ComponentListener() { public void componentHidden(ComponentEvent e) { } public void componentMoved(ComponentEvent e) { closeToolMenu(); closeMoreMenu(); setLocation(getLocation()); } public void componentResized(ComponentEvent e) { } public void componentShown(ComponentEvent e) { } }); addMouseListener(new MouseListener() { public void mouseClicked(MouseEvent arg0) { closeToolMenu(); closeMoreMenu(); } public void mouseEntered(MouseEvent arg0) { } public void mouseExited(MouseEvent arg0) { } public void mousePressed(MouseEvent arg0) { } public void mouseReleased(MouseEvent arg0) { } }); } public void initToolMenuListeners() { toolMenu.addMouseMotionListener(new MouseMotionListener() { public void mouseDragged(MouseEvent e) { } public void mouseMoved(MouseEvent e) { } }); toolMenu.addMouseListener(new MouseListener() { public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } public void mouseClicked(MouseEvent e) { } }); } public void initMoreMenuListeners() { moreMenu.addMouseMotionListener(new MouseMotionListener() { public void mouseDragged(MouseEvent e) { } public void mouseMoved(MouseEvent e) { ImageIcon image = new ImageIcon( "images/MoreMenuImages/moreMenu.png"); JLabel menu; if (e.getLocationOnScreen().getY() >= moreMenu.getY() && e.getLocationOnScreen().getY() <= moreMenu.getY() + moreMenu.getHeight() / 8) { image = new ImageIcon( "images/MoreMenuImages/moreMenuHighlighted1.png"); } else if (e.getLocationOnScreen().getY() >= moreMenu.getY() + moreMenu.getHeight() * 2 / 8 && e.getLocationOnScreen().getY() <= moreMenu.getY() + moreMenu.getHeight() * 3 / 8) { image = new ImageIcon( "images/MoreMenuImages/moreMenuHighlighted3.png"); } menu = new JLabel(image); moreMenu.getContentPane().removeAll(); moreMenu.getContentPane().add(menu); moreMenu.validate(); } }); moreMenu.addMouseListener(new MouseListener() { public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } public void mouseClicked(MouseEvent e) { if (e.getLocationOnScreen().getY() >= moreMenu.getY() && e.getLocationOnScreen().getY() <= moreMenu.getY() + moreMenu.getHeight() / 8) { ScreenManager.openIncidentEditor(); closeMoreMenu(); } else if (e.getLocationOnScreen().getY() >= moreMenu.getY() + moreMenu.getHeight() * 2 / 8 && e.getLocationOnScreen().getY() <= moreMenu.getY() + moreMenu.getHeight() * 3 / 8) { ScreenManager.openCardfile(); closeMoreMenu(); } } }); } public void initControllers() { addListeners(); buttonTool.addActionListener(newToolActionListener()); buttonMore.addActionListener(newMoreActionListener()); initToolMenuListeners(); initMoreMenuListeners(); } public ActionListener newToolActionListener() { return new ActionListener() { public void actionPerformed(ActionEvent arg0) { if (moreMenu.isVisible()) { closeMoreMenu(); } if (toolMenu.isVisible()) { closeToolMenu(); } else { toolMenu.setLocation(new Point(getX() + getWidth() - toolMenu.getWidth(), getY() + 85)); toolMenu.setVisible(true); } } }; } public ActionListener newMoreActionListener() { return new ActionListener() { public void actionPerformed(ActionEvent arg0) { if (toolMenu.isVisible()) { closeToolMenu(); } if (moreMenu.isVisible()) { closeMoreMenu(); } else { moreMenu.setLocation(new Point(getX() + getWidth() - moreMenu.getWidth(), getY() + 85)); moreMenu.setVisible(true); } } }; } /* * Creates the topPanel for the CADMenu. */ public void createTopPanel() { Box topPanel = new Box(BoxLayout.X_AXIS); topPanel.setAlignmentX(LEFT_ALIGNMENT); ImageIcon image = new ImageIcon("images/CADMenuImages/tritech.png"); JLabel tritech = new JLabel(image); topPanel.add(tritech); image = new ImageIcon("images/CADMenuImages/empty.png"); JLabel empty = new JLabel(image); topPanel.add(empty); // center holds the User's Name, user's position, and date/time Box center = new Box(BoxLayout.Y_AXIS); image = new ImageIcon("images/CADMenuImages/top.png"); name = new JLabel(image); name.setText("User"); name.setFont(new Font("SanSerif", Font.BOLD, 16)); name.setForeground(Color.WHITE); name.setHorizontalTextPosition(JLabel.CENTER); center.add(name); Box centerBottom = new Box(BoxLayout.X_AXIS); centerBottom.setAlignmentX(Box.LEFT_ALIGNMENT); image = new ImageIcon("images/CADMenuImages/bottom.png"); position = new JLabel(image); position.setText("Public Safety Dispatch Sup"); position.setFont(new Font("Arial", Font.PLAIN, 12)); position.setForeground(new Color(190, 210, 255)); position.setHorizontalTextPosition(JLabel.CENTER); centerBottom.add(position); image = new ImageIcon("images/CADMenuImages/bottom.png"); Date date = new Date(); DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss"); String dateTime = dateFormat.format(date); dateAndTime = new JLabel(image); dateAndTime.setText(dateTime); dateAndTime.setForeground(Color.WHITE); dateAndTime.setHorizontalTextPosition(JLabel.CENTER); centerBottom.add(dateAndTime); center.add(centerBottom); topPanel.add(center); image = new ImageIcon("images/CADMenuImages/empty2.png"); JLabel empty2 = new JLabel(image); topPanel.add(empty2); image = new ImageIcon("images/CADMenuImages/button1.png"); button1 = makeButton(image); topPanel.add(button1); image = new ImageIcon("images/CADMenuImages/button2.png"); button2 = makeButton(image); topPanel.add(button2); image = new ImageIcon("images/CADMenuImages/button3.png"); button3 = makeButton(image); topPanel.add(button3); image = new ImageIcon("images/CADMenuImages/button4.png"); button4 = makeButton(image); topPanel.add(button4); image = new ImageIcon("images/CADMenuImages/button5.png"); button5 = makeButton(image); topPanel.add(button5); image = new ImageIcon("images/CADMenuImages/button6.png"); button6 = makeButton(image); topPanel.add(button6); image = new ImageIcon("images/CADMenuImages/button7.png"); buttonTool = makeButton(image); topPanel.add(buttonTool); image = new ImageIcon("images/CADMenuImages/button8.png"); buttonMore = makeButton(image); topPanel.add(buttonMore); mainPanel.add(topPanel); } /** * Creates the bottomPanel of the CADMenu. */ public void createBottomPanel() { Color grayBackground = new Color(100, 100, 100); Box userList = new Box(BoxLayout.Y_AXIS); userList.setAlignmentX(LEFT_ALIGNMENT); Dimension size = new Dimension(400, 85); userList.setPreferredSize(size); userList.setMaximumSize(size); userList.setMinimumSize(size); userList.setBackground(grayBackground); userList.setOpaque(true); Box user1 = new Box(BoxLayout.X_AXIS); user1.setAlignmentX(LEFT_ALIGNMENT); ImageIcon image = new ImageIcon("images/CADMenuImages/mailClose.png"); JLabel userListIcon1 = new JLabel(image); userListName1 = new JLabel("User"); userListName1.setForeground(Color.WHITE); userListName1.setBackground(grayBackground); userListName1.setOpaque(true); JLabel userListNumbers = new JLabel( "(0,0,0)"); userListNumbers.setBackground(grayBackground); userListNumbers.setOpaque(true); user1.add(userListIcon1); user1.add(userListName1); user1.add(userListNumbers); userList.add(user1); Box user2 = new Box(BoxLayout.X_AXIS); user2.setAlignmentX(LEFT_ALIGNMENT); image = new ImageIcon("images/CADMenuImages/mailClose.png"); JLabel userListIcon2 = new JLabel(image); JLabel userListName2 = new JLabel(" SL007 "); userListName2.setForeground(Color.WHITE); userListName2.setBackground(grayBackground); userListName2.setOpaque(true); userListNumbers = new JLabel( "(0,0,0)"); userListNumbers.setBackground(grayBackground); userListNumbers.setOpaque(true); user2.add(userListIcon2); user2.add(userListName2); user2.add(userListNumbers); userList.add(user2); JLabel currentAgency = new JLabel(" Current Agency is CHP"); currentAgency.setForeground(Color.WHITE); currentAgency.setBackground(grayBackground); currentAgency.setOpaque(true); currentAgency.setHorizontalTextPosition(JLabel.LEFT); userList.add(currentAgency); Box bottomPanel = new Box(BoxLayout.X_AXIS); bottomPanel.setAlignmentX(LEFT_ALIGNMENT); bottomPanel.add(userList); bottomPanel.add(Box.createHorizontalStrut(5)); Box bottomRight = new Box(BoxLayout.Y_AXIS); size = new Dimension(775, 85); bottomRight.setPreferredSize(size); bottomRight.setMaximumSize(size); bottomRight.setMinimumSize(size); image = new ImageIcon("images/CADMenuImages/grayFillerTop.png"); bottomRight.add(new JLabel(image)); bottomRightIcons = new Box(BoxLayout.X_AXIS); bottomRightIcons.setAlignmentX(LEFT_ALIGNMENT); image = new ImageIcon("images/CADMenuImages/grayFillerBottom.png"); bottomRightIcons.add(new JLabel(image)); createBottomRightButtons(); bottomRightIcons.add(bottomRightButtonsGrayed); bottomRight.add(bottomRightIcons); bottomPanel.add(bottomRight); mainPanel.add(bottomPanel); } /** * Creates the two bottom right buttons. */ public void createBottomRightButtons() { bottomRightButtonsGrayed = new Box(BoxLayout.X_AXIS); ImageIcon image = new ImageIcon( "images/CADMenuImages/checkmarkGrey.png"); buttonCheckmark = makeButton(image); bottomRightButtonsGrayed.add(buttonCheckmark); image = new ImageIcon("images/CADMenuImages/minusGrey.png"); buttonMinus = makeButton(image); bottomRightButtonsGrayed.add(buttonMinus); bottomRightButtonsColored = new Box(BoxLayout.X_AXIS); image = new ImageIcon("images/CADMenuImages/checkmarkGreen.png"); buttonCheckmark = makeButton(image); bottomRightButtonsColored.add(buttonCheckmark); image = new ImageIcon("images/CADMenuImages/minusRed.png"); buttonMinus = makeButton(image); bottomRightButtonsColored.add(buttonMinus); } /** * This method creates the drop down menus for both the tool and more * buttons */ public void createDropDownMenus() { ImageIcon image = new ImageIcon("images/ToolMenuImages/toolMenu.png"); JLabel menu = new JLabel(image); toolMenu = new JFrame(); toolMenu.getContentPane().add(menu); toolMenu.setUndecorated(true); toolMenu.pack(); toolMenu.setVisible(false); image = new ImageIcon("images/MoreMenuImages/moreMenu.png"); menu = new JLabel(image); moreMenu = new JFrame(); moreMenu.getContentPane().add(menu); moreMenu.setUndecorated(true); moreMenu.pack(); moreMenu.setVisible(false); } /** * Takes in the name of the user and displays it. */ public void setName(String username) { name.setText(username); userListName1.setText(username); } /** * Accessor to the user's name (for use in IncidentViewer comments */ public String getName() { return name.getText(); } /** * Factory method. Makes a JButton with an image and listener. * * @param image the image this button will display. * @param listener the action listener for this button. * @return the JButton. */ public JButton makeButton(ImageIcon image) { JButton button = new JButton(image); Dimension size = new Dimension(image.getImage().getWidth(null), image .getImage().getHeight(null)); button.setPreferredSize(size); button.setMinimumSize(size); button.setMaximumSize(size); button.setBorderPainted(false); button.setFocusable(false); return button; } /** * Hides the tool drop down menu. Also resets the image to the default(no * highlighted rows). */ public void closeToolMenu() { ImageIcon image; JLabel menu; image = new ImageIcon("images/ToolMenuImages/toolMenu.png"); menu = new JLabel(image); toolMenu.getContentPane().removeAll(); toolMenu.getContentPane().add(menu); toolMenu.validate(); toolMenu.setVisible(false); } /** * Hides the more drop down menu. Also resets the image to the default(no * highlighted rows). */ public void closeMoreMenu() { ImageIcon image; JLabel menu; image = new ImageIcon("images/MoreMenuImages/moreMenu.png"); menu = new JLabel(image); moreMenu.getContentPane().removeAll(); moreMenu.getContentPane().add(menu); moreMenu.validate(); moreMenu.setVisible(false); } /** * This method is called every second in ScreenManger to update the display * time every second. */ public void handleUpdateTime() { Date date = new Date(); String dateTime = dateFormat.format(date); dateAndTime.setText(dateTime); } /** * Makes screen visible. */ public void open() { setVisible(true); } /** * Hides screen. */ public void close() { setVisible(false); } /** * Currently not used. */ public void setIncomingIncident() { bottomRightIcons.remove(bottomRightButtonsGrayed); bottomRightIcons.add(bottomRightButtonsColored); revalidate(); repaint(); } /** * Currently not used. */ public void endIncomingIncident() { bottomRightIcons.remove(bottomRightButtonsColored); bottomRightIcons.add(bottomRightButtonsGrayed); revalidate(); repaint(); } /** * Sets position title to trainee. */ public void removeDispatcherStatus() { position.setText("Trainee"); } }