package br.ufpr.c3sl.view.footer; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.SwingUtilities; import br.ufpr.c3sl.dao.RetroactionDAO; import br.ufpr.c3sl.daoFactory.DAOFactory; import br.ufpr.c3sl.exception.UserException; import br.ufpr.c3sl.model.Mistake; import br.ufpr.c3sl.model.Retroaction; import br.ufpr.c3sl.util.Util; import br.ufpr.c3sl.view.retroaction.RetroactionFrame; /** * CARRIE Framework * class ErrorMenuBar CARRIE framework * The Menu to retroaction a Error * @author Diego Marczal * @version December 16, 2010 */ @SuppressWarnings("serial") public class ErrorMenuBar extends JMenuBar { private JMenu menu; private JMenu subMenuerror; private String imagePath = "error_up"; public ErrorMenuBar() { createDefaulMenus(); } private void createDefaulMenus() { setLocation(getLocation().x, 10); setPreferredSize(new Dimension(32, 32)); menu = new JMenu("Menu"); menu.setName("MenuBar"); menu.setToolTipText("Erros Cometidos"); menu.addMouseListener(new MenuErrorMouseListener()); subMenuerror = new JMenu("Erros Cometidos"); menu.add(subMenuerror); this.add(menu); } public void update(Graphics g) { Graphics buffer; Image offscreen = null; offscreen = createImage(getSize().width, getSize().height); buffer = offscreen.getGraphics(); paint(buffer); g.setColor(getParent().getBackground()); g.drawImage(offscreen, 0,0, this); buffer.dispose(); } public void paint(Graphics g) { Graphics2D g2 = (Graphics2D)g; g.setColor(getBackground()); g.fillRect(0, 0, getSize().width, getSize().height); g2.drawImage(getToolkit().getImage(Util.getIconURL(getClass(), imagePath)), 0, 0, this); } /** * Add a error in the menu * @param errorInfo A object who has all information about the error */ public void updateMenu(Mistake mistake){ JMenuItem item = new JMenuItem( "Erro: " + mistake.getExercise() + " - " + Util.getDateTimeFormated(mistake.getCreatedAtTime())); item.setToolTipText(mistake.getMistakeInfo().getDescription()); item.addActionListener(new MenuMistakeItemListener(mistake)); subMenuerror.add(item); SwingUtilities.updateComponentTreeUI(this); } private class MenuErrorMouseListener implements MouseListener { public void mouseClicked(MouseEvent e) {} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) { imagePath = "error_up"; repaint(); } public void mousePressed(MouseEvent e) { imagePath = "error_down"; repaint(); } public void mouseReleased(MouseEvent e) { imagePath = "error_up"; repaint(); } } private class MenuMistakeItemListener implements ActionListener { private Mistake mistake; private JFrame frame; public MenuMistakeItemListener(Mistake mistake) { this.mistake = mistake; } public void actionPerformed(ActionEvent e) { if (frame == null) //Schedule a job for the event-dispatching thread: //creating and showing this application's GUI. javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { frame = RetroactionFrame.createAndShowGUI(mistake); saveRetroaction(); } }); else{ if (!frame.isVisible()){ saveRetroaction(); } frame.setVisible(!frame.isVisible()); } } private void saveRetroaction(){ DAOFactory dao = DAOFactory.getDAOFactory(DAOFactory.DATABASE_CHOOSE); RetroactionDAO retroactionDao = dao.getRetroactionDAO(); Retroaction retroaction = new Retroaction(); retroaction.setMistake(mistake); try { retroactionDao.insert(retroaction); } catch (UserException e1) { e1.printStackTrace(); } } } }