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");
}
}