/* * Copyright (C) 2008 IsmAvatar <IsmAvatar@gmail.com> * Copyright (C) 2007, 2008 Clam <clamisgood@gmail.com> * * This file is part of LateralGM. * LateralGM is free software and comes with ABSOLUTELY NO WARRANTY. * See LICENSE for details. */ package org.lateralgm.components; import static javax.swing.GroupLayout.PREFERRED_SIZE; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.BorderFactory; import javax.swing.GroupLayout; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JPopupMenu; import org.lateralgm.components.impl.EventNode; import org.lateralgm.resources.sub.Event; import org.lateralgm.resources.sub.MainEvent; import org.lateralgm.messages.Messages; import org.lateralgm.subframes.EventFrame; import org.lateralgm.subframes.GmObjectFrame; public class SubEventSelector extends JPanel implements ActionListener { private static final long serialVersionUID = 1L; public JButton button; public JPopupMenu menu; public JLabel label; public MListener mListener = new MListener(); public EventFrame par; public int parMethod; public int parEvent; public GmObjectFrame parFrame; public EventNode parNode; public JMenu submenu; public SubEventSelector(EventFrame parent, int event, String def, int width) { super(); GroupLayout l = new GroupLayout(this); setLayout(l); par = parent; parMethod = 0; parEvent = event; label = new JLabel(def); label.setBorder(BorderFactory.createEtchedBorder()); label.addMouseListener(mListener); button = new JButton(); button.addMouseListener(mListener); button.setMaximumSize(button.getPreferredSize()); menu = new JPopupMenu(); populateSubEventMenu(menu,event); l.setHorizontalGroup(l.createSequentialGroup() /**/.addContainerGap(20,20) /**/.addComponent(label,PREFERRED_SIZE,width - 40,Integer.MAX_VALUE) /**/.addComponent(button,PREFERRED_SIZE,20,PREFERRED_SIZE)); l.setVerticalGroup(l.createParallelGroup() /**/.addComponent(label,PREFERRED_SIZE,20,PREFERRED_SIZE) /**/.addComponent(button,PREFERRED_SIZE,19,PREFERRED_SIZE)); } public SubEventSelector(EventFrame parent, int event, MouseEvent e, GmObjectFrame f, EventNode n) { par = parent; parMethod = 1; parEvent = event; parFrame = f; parNode = n; JPopupMenu rightmenu = new JPopupMenu(); populateSubEventMenu(rightmenu,event); if (!isEnabled()) return; rightmenu.show(e.getComponent(),e.getX(),e.getY()); } public void populateSubEventMenu(JPopupMenu menu, int event) { switch (event) { case MainEvent.EV_STEP: for (int i = Event.EV_STEP_NORMAL; i <= Event.EV_STEP_END; i++) add(menu,i); break; case MainEvent.EV_ALARM: for (int i = Event.EV_ALARM0; i <= Event.EV_ALARM11; i++) add(menu,i); break; case MainEvent.EV_MOUSE: for (int i = Event.EV_LEFT_BUTTON; i <= Event.EV_MOUSE_LEAVE; i++) add(menu,i); for (int i = Event.EV_MOUSE_WHEEL_UP; i <= Event.EV_MOUSE_WHEEL_DOWN; i++) add(menu,i); submenu = new JMenu(Messages.getString("SubEventSelector.GLOBAL_MOUSE")); //$NON-NLS-1$ for (int i = Event.EV_GLOBAL_LEFT_BUTTON; i <= Event.EV_GLOBAL_MIDDLE_RELEASE; i++) addSub(submenu,i); menu.add(submenu); submenu = new JMenu(Messages.getString("SubEventSelector.JOYSTICK_1")); //$NON-NLS-1$ for (int i = Event.EV_JOYSTICK1_LEFT; i <= Event.EV_JOYSTICK1_BUTTON8; i++) addSub(submenu,i); menu.add(submenu); submenu = new JMenu(Messages.getString("SubEventSelector.JOYSTICK_2")); //$NON-NLS-1$ for (int i = Event.EV_JOYSTICK2_LEFT; i <= Event.EV_JOYSTICK2_BUTTON8; i++) addSub(submenu,i); menu.add(submenu); break; case MainEvent.EV_OTHER: for (int i = Event.EV_OUTSIDE; i <= Event.EV_NO_MORE_HEALTH; i++) add(menu,i); submenu = new JMenu(Messages.getString("SubEventSelector.USER_DEFINED")); //$NON-NLS-1$ for (int i = Event.EV_USER0; i <= Event.EV_USER15; i++) addSub(submenu,i); menu.add(submenu); break; } } public void add(JPopupMenu menu, int event) { JMenuItem mi = new SubEventMenuItem(event); menu.add(mi); mi.addActionListener(this); } public void addSub(JMenu menu, int event) { JMenuItem mi = new SubEventMenuItem(event); menu.add(mi); mi.addActionListener(this); } public void actionPerformed(ActionEvent e) { Object o = e.getSource(); if (!(o instanceof SubEventMenuItem)) return; switch (parMethod) { case 0: if (par.selectedNode != null) { par.selectedNode.eventId = ((SubEventMenuItem) o).event; label.setText(e.getActionCommand()); } break; case 1: if (parFrame != null) { parFrame.functionEvent(parEvent,((SubEventMenuItem) o).event,parNode.other,null); parFrame.toTop(); } break; } } private class MListener extends MouseAdapter { public void mouseClicked(MouseEvent e) { if (!isEnabled()) return; menu.show(e.getComponent(),e.getX(),e.getY()); } } public class SubEventMenuItem extends JMenuItem { private static final long serialVersionUID = 1L; public final int event; public SubEventMenuItem(int event) { super(Event.eventName(parEvent,event)); this.event = event; } } }