mev-4.0.01/source/org/tigr/microarray/mev/cluster/gui/impl/terrain/NavigationPanel.java

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 /*
2 26 Feb 07 jari 2 Copyright @ 1999-2003, The Institute for Genomic Research (TIGR).
2 26 Feb 07 jari 3 All rights reserved.
2 26 Feb 07 jari 4 */
2 26 Feb 07 jari 5 /*
2 26 Feb 07 jari 6  * $RCSfile: NavigationPanel.java,v $
2 26 Feb 07 jari 7  * $Revision: 1.4 $
2 26 Feb 07 jari 8  * $Date: 2006/03/24 15:52:04 $
2 26 Feb 07 jari 9  * $Author: eleanorahowe $
2 26 Feb 07 jari 10  * $State: Exp $
2 26 Feb 07 jari 11  */
2 26 Feb 07 jari 12 package org.tigr.microarray.mev.cluster.gui.impl.terrain;
2 26 Feb 07 jari 13
2 26 Feb 07 jari 14 import java.awt.GridBagConstraints;
2 26 Feb 07 jari 15 import java.awt.GridBagLayout;
2 26 Feb 07 jari 16 import java.awt.Insets;
2 26 Feb 07 jari 17 import java.awt.event.ActionEvent;
2 26 Feb 07 jari 18 import java.awt.event.ActionListener;
2 26 Feb 07 jari 19
2 26 Feb 07 jari 20 import javax.swing.AbstractButton;
2 26 Feb 07 jari 21 import javax.swing.ButtonModel;
2 26 Feb 07 jari 22 import javax.swing.Icon;
2 26 Feb 07 jari 23 import javax.swing.JButton;
2 26 Feb 07 jari 24 import javax.swing.JPanel;
2 26 Feb 07 jari 25 import javax.swing.Timer;
2 26 Feb 07 jari 26 import javax.swing.event.ChangeEvent;
2 26 Feb 07 jari 27 import javax.swing.event.ChangeListener;
2 26 Feb 07 jari 28
2 26 Feb 07 jari 29 import org.tigr.microarray.mev.cluster.gui.impl.GUIFactory;
2 26 Feb 07 jari 30
2 26 Feb 07 jari 31 public class NavigationPanel extends JPanel implements ChangeListener, ActionListener {
2 26 Feb 07 jari 32
2 26 Feb 07 jari 33     private static final int FWD_CMD   = 0;
2 26 Feb 07 jari 34     private static final int BWD_CMD   = 1;
2 26 Feb 07 jari 35     private static final int UP_CMD    = 2;
2 26 Feb 07 jari 36     private static final int DOWN_CMD  = 3;
2 26 Feb 07 jari 37     private static final int LEFT_CMD  = 4;
2 26 Feb 07 jari 38     private static final int RIGHT_CMD = 5;
2 26 Feb 07 jari 39
2 26 Feb 07 jari 40     private AbstractButton lu_btn;
2 26 Feb 07 jari 41     private AbstractButton lm_btn;
2 26 Feb 07 jari 42     private AbstractButton lb_btn;
2 26 Feb 07 jari 43
2 26 Feb 07 jari 44     private AbstractButton mu_btn;
2 26 Feb 07 jari 45     private AbstractButton mm_btn;
2 26 Feb 07 jari 46     private AbstractButton mb_btn;
2 26 Feb 07 jari 47
2 26 Feb 07 jari 48     private AbstractButton ru_btn;
2 26 Feb 07 jari 49     private AbstractButton rm_btn;
2 26 Feb 07 jari 50     private AbstractButton rb_btn;
2 26 Feb 07 jari 51
2 26 Feb 07 jari 52     private TimerHandler timerHandler;
2 26 Feb 07 jari 53     private KeyMotionBehavior behavior;
2 26 Feb 07 jari 54
2 26 Feb 07 jari 55     private static final int MOVE_MODE = 0;
2 26 Feb 07 jari 56     private static final int TURN_MODE = 1;
2 26 Feb 07 jari 57     private static final int ROT_MODE  = 2;
2 26 Feb 07 jari 58
2 26 Feb 07 jari 59     private static Icon[] mode_icons = new Icon[3];
2 26 Feb 07 jari 60     private int state = MOVE_MODE;
2 26 Feb 07 jari 61
2 26 Feb 07 jari 62     static {
2 26 Feb 07 jari 63         mode_icons[MOVE_MODE] = GUIFactory.getIcon("move_mode.gif");
2 26 Feb 07 jari 64         mode_icons[TURN_MODE] = GUIFactory.getIcon("turn_mode.gif");
2 26 Feb 07 jari 65         mode_icons[ROT_MODE ] = GUIFactory.getIcon("rot_mode.gif");
2 26 Feb 07 jari 66     }
2 26 Feb 07 jari 67
2 26 Feb 07 jari 68     public NavigationPanel(){}
2 26 Feb 07 jari 69     public NavigationPanel(KeyMotionBehavior behavior) {
2 26 Feb 07 jari 70         setLayout(new GridBagLayout());
2 26 Feb 07 jari 71         this.behavior = behavior;
2 26 Feb 07 jari 72         this.timerHandler = new TimerHandler();
2 26 Feb 07 jari 73
2 26 Feb 07 jari 74         GridBagConstraints gbc = new GridBagConstraints();
2 26 Feb 07 jari 75         gbc.fill = GridBagConstraints.BOTH;
2 26 Feb 07 jari 76
2 26 Feb 07 jari 77         gbc.gridx = 0; gbc.gridy = 0;
2 26 Feb 07 jari 78         add((lu_btn = createJButton("left-up-command", GUIFactory.getIcon("arrow_left_up.gif"))), gbc);
2 26 Feb 07 jari 79         gbc.gridx = 1; gbc.gridy = 0;
2 26 Feb 07 jari 80         add((mu_btn = createJButton("middle-up-command", GUIFactory.getIcon("arrow_up.gif"))), gbc);
2 26 Feb 07 jari 81         gbc.gridx = 2; gbc.gridy = 0;
2 26 Feb 07 jari 82         add((ru_btn = createJButton("right-up-command", GUIFactory.getIcon("arrow_right_up.gif"))), gbc);
2 26 Feb 07 jari 83         gbc.gridx = 0; gbc.gridy = 1;
2 26 Feb 07 jari 84         add((lm_btn = createJButton("left-middle-command", GUIFactory.getIcon("arrow_left.gif"))), gbc);
2 26 Feb 07 jari 85         gbc.gridx = 1; gbc.gridy = 1;
2 26 Feb 07 jari 86         add((mm_btn = createStateButton("middle-middle-command", mode_icons[MOVE_MODE])), gbc);
2 26 Feb 07 jari 87         gbc.gridx = 2; gbc.gridy = 1;
2 26 Feb 07 jari 88         add((rm_btn = createJButton("right-middle-command", GUIFactory.getIcon("arrow_right.gif"))), gbc);
2 26 Feb 07 jari 89         gbc.gridx = 0; gbc.gridy = 2;
2 26 Feb 07 jari 90         add((lb_btn = createJButton("left-bottom-command", GUIFactory.getIcon("arrow_left_down.gif"))), gbc);
2 26 Feb 07 jari 91         gbc.gridx = 1; gbc.gridy = 2;
2 26 Feb 07 jari 92         add((mb_btn = createJButton("middle-bottom-command", GUIFactory.getIcon("arrow_down.gif"))), gbc);
2 26 Feb 07 jari 93         gbc.gridx = 2; gbc.gridy = 2;
2 26 Feb 07 jari 94         add((rb_btn = createJButton("right-bottom-command", GUIFactory.getIcon("arrow_right_down.gif"))), gbc);
2 26 Feb 07 jari 95         gbc.gridx = 3; gbc.gridy = 0; gbc.gridheight = 3;
2 26 Feb 07 jari 96         JButton reset = new JButton("<html><body><table cellspacing=0 cellpadding=0><tr><td>R</td></tr><tr><td>E</td></tr><tr><td>S</td></tr><tr><td>E</td></tr><tr><td>T</td></tr></table></body></html>");
2 26 Feb 07 jari 97         reset.setActionCommand("reset-command");
2 26 Feb 07 jari 98         reset.addActionListener(this);
2 26 Feb 07 jari 99         add(reset, gbc);
2 26 Feb 07 jari 100         setTooltips(this.state);
2 26 Feb 07 jari 101     }
2 26 Feb 07 jari 102
2 26 Feb 07 jari 103     protected AbstractButton createStateButton(String command, Icon icon) {
2 26 Feb 07 jari 104         JButton button = new JButton(icon);
2 26 Feb 07 jari 105         configureButton(button);
2 26 Feb 07 jari 106         button.setActionCommand(command);
2 26 Feb 07 jari 107         button.addActionListener(this);
2 26 Feb 07 jari 108         return button;
2 26 Feb 07 jari 109     }
2 26 Feb 07 jari 110
2 26 Feb 07 jari 111     protected AbstractButton createJButton(String command, Icon icon) {
2 26 Feb 07 jari 112         JButton button = new JButton(icon);
2 26 Feb 07 jari 113         configureButton(button);
2 26 Feb 07 jari 114         button.setActionCommand(command);
2 26 Feb 07 jari 115         button.addChangeListener(this);
2 26 Feb 07 jari 116         return button;
2 26 Feb 07 jari 117     }
2 26 Feb 07 jari 118
2 26 Feb 07 jari 119     protected void configureButton(AbstractButton button) {
2 26 Feb 07 jari 120         button.setContentAreaFilled(false);
2 26 Feb 07 jari 121         button.setMargin(new Insets(0,0,0,0));
2 26 Feb 07 jari 122         button.setFocusPainted(false);
2 26 Feb 07 jari 123     }
2 26 Feb 07 jari 124
2 26 Feb 07 jari 125     public void stateChanged(ChangeEvent e) {
2 26 Feb 07 jari 126         AbstractButton button = (AbstractButton)e.getSource();
2 26 Feb 07 jari 127         ButtonModel model = button.getModel();
2 26 Feb 07 jari 128         if (model.isPressed() && model.isArmed())
2 26 Feb 07 jari 129             this.timerHandler.start(button.getActionCommand());
2 26 Feb 07 jari 130         else
2 26 Feb 07 jari 131             this.timerHandler.stop();
2 26 Feb 07 jari 132     }
2 26 Feb 07 jari 133
2 26 Feb 07 jari 134     public void actionPerformed(ActionEvent event) {
2 26 Feb 07 jari 135         String command = event.getActionCommand();
2 26 Feb 07 jari 136         if (command.equals("middle-middle-command")) {
2 26 Feb 07 jari 137             if (this.state == ROT_MODE)
2 26 Feb 07 jari 138                 this.state = MOVE_MODE-1;
2 26 Feb 07 jari 139             this.state++;
2 26 Feb 07 jari 140             mm_btn.setIcon(mode_icons[this.state]);
2 26 Feb 07 jari 141             setTooltips(this.state);
2 26 Feb 07 jari 142         } else if (command.equals("reset-command")) {
2 26 Feb 07 jari 143             this.behavior.execute(KeyMotionBehavior.RESET_CMD);
2 26 Feb 07 jari 144         } else if (command.equals("left-up-command")) {
2 26 Feb 07 jari 145             this.behavior.execute(getMotionCommand(FWD_CMD));
2 26 Feb 07 jari 146         } else if (command.equals("middle-up-command")) {
2 26 Feb 07 jari 147             this.behavior.execute(getMotionCommand(UP_CMD));
2 26 Feb 07 jari 148         } else if (command.equals("right-up-command")) {
2 26 Feb 07 jari 149             this.behavior.execute(getMotionCommand(FWD_CMD));
2 26 Feb 07 jari 150         } else if (command.equals("left-middle-command")) {
2 26 Feb 07 jari 151             this.behavior.execute(getMotionCommand(LEFT_CMD));
2 26 Feb 07 jari 152         } else if (command.equals("right-middle-command")) {
2 26 Feb 07 jari 153             this.behavior.execute(getMotionCommand(RIGHT_CMD));
2 26 Feb 07 jari 154         } else if (command.equals("left-bottom-command")) {
2 26 Feb 07 jari 155             this.behavior.execute(getMotionCommand(BWD_CMD));
2 26 Feb 07 jari 156         } else if (command.equals("middle-bottom-command")) {
2 26 Feb 07 jari 157             this.behavior.execute(getMotionCommand(DOWN_CMD));
2 26 Feb 07 jari 158         } else if (command.equals("right-bottom-command")) {
2 26 Feb 07 jari 159             this.behavior.execute(getMotionCommand(BWD_CMD));
2 26 Feb 07 jari 160         }
2 26 Feb 07 jari 161     }
2 26 Feb 07 jari 162
2 26 Feb 07 jari 163     protected int getMotionCommand(int code) {
2 26 Feb 07 jari 164         switch (this.state) {
2 26 Feb 07 jari 165         case MOVE_MODE: 
2 26 Feb 07 jari 166             switch (code) {
2 26 Feb 07 jari 167             case FWD_CMD:
2 26 Feb 07 jari 168                 return KeyMotionBehavior.MOVE_FWD_CMD;
2 26 Feb 07 jari 169             case BWD_CMD:
2 26 Feb 07 jari 170                 return KeyMotionBehavior.MOVE_BWD_CMD;
2 26 Feb 07 jari 171             case UP_CMD:
2 26 Feb 07 jari 172                 return KeyMotionBehavior.MOVE_UP_CMD;
2 26 Feb 07 jari 173             case DOWN_CMD:
2 26 Feb 07 jari 174                 return KeyMotionBehavior.MOVE_DOWN_CMD;
2 26 Feb 07 jari 175             case LEFT_CMD:
2 26 Feb 07 jari 176                 return KeyMotionBehavior.MOVE_LEFT_CMD;
2 26 Feb 07 jari 177             case RIGHT_CMD:
2 26 Feb 07 jari 178                 return KeyMotionBehavior.MOVE_RIGHT_CMD;
2 26 Feb 07 jari 179             }
2 26 Feb 07 jari 180             break;
2 26 Feb 07 jari 181         case TURN_MODE:
2 26 Feb 07 jari 182             switch (code) {
2 26 Feb 07 jari 183             case FWD_CMD:
2 26 Feb 07 jari 184                 return KeyMotionBehavior.TILT_RIGHT_CMD;
2 26 Feb 07 jari 185             case BWD_CMD:
2 26 Feb 07 jari 186                 return KeyMotionBehavior.TILT_LEFT_CMD;
2 26 Feb 07 jari 187             case UP_CMD:
2 26 Feb 07 jari 188                 return KeyMotionBehavior.TURN_UP_CMD;
2 26 Feb 07 jari 189             case DOWN_CMD:
2 26 Feb 07 jari 190                 return KeyMotionBehavior.TURN_DOWN_CMD;
2 26 Feb 07 jari 191             case LEFT_CMD:
2 26 Feb 07 jari 192                 return KeyMotionBehavior.TURN_LEFT_CMD;
2 26 Feb 07 jari 193             case RIGHT_CMD:
2 26 Feb 07 jari 194                 return KeyMotionBehavior.TURN_RIGHT_CMD;
2 26 Feb 07 jari 195             }
2 26 Feb 07 jari 196             break;
2 26 Feb 07 jari 197         case ROT_MODE:
2 26 Feb 07 jari 198             switch (code) {
2 26 Feb 07 jari 199             case FWD_CMD:
2 26 Feb 07 jari 200                 return KeyMotionBehavior.ROT_Z_POS_CMD;
2 26 Feb 07 jari 201             case BWD_CMD:
2 26 Feb 07 jari 202                 return KeyMotionBehavior.ROT_Z_NEG_CMD;
2 26 Feb 07 jari 203             case UP_CMD:
2 26 Feb 07 jari 204                 return KeyMotionBehavior.ROT_X_POS_CMD;
2 26 Feb 07 jari 205             case DOWN_CMD:
2 26 Feb 07 jari 206                 return KeyMotionBehavior.ROT_X_NEG_CMD;
2 26 Feb 07 jari 207             case LEFT_CMD:
2 26 Feb 07 jari 208                 return KeyMotionBehavior.ROT_Y_NEG_CMD;
2 26 Feb 07 jari 209             case RIGHT_CMD:
2 26 Feb 07 jari 210                 return KeyMotionBehavior.ROT_Y_POS_CMD;
2 26 Feb 07 jari 211             }
2 26 Feb 07 jari 212             break;
2 26 Feb 07 jari 213         }
2 26 Feb 07 jari 214         return -1;
2 26 Feb 07 jari 215     }
2 26 Feb 07 jari 216
2 26 Feb 07 jari 217     protected void setTooltips(int mode) {
2 26 Feb 07 jari 218         switch (mode) {
2 26 Feb 07 jari 219         case MOVE_MODE:
2 26 Feb 07 jari 220             this.lu_btn.setToolTipText("move view forward");
2 26 Feb 07 jari 221             this.lm_btn.setToolTipText("move view left");
2 26 Feb 07 jari 222             this.lb_btn.setToolTipText("move view backward");
2 26 Feb 07 jari 223             this.mu_btn.setToolTipText("move view up");
2 26 Feb 07 jari 224             this.mm_btn.setToolTipText("switch to turn mode");
2 26 Feb 07 jari 225             this.mb_btn.setToolTipText("move view down");
2 26 Feb 07 jari 226             this.ru_btn.setToolTipText("move view forward");
2 26 Feb 07 jari 227             this.rm_btn.setToolTipText("move view right");
2 26 Feb 07 jari 228             this.rb_btn.setToolTipText("move view backward");
2 26 Feb 07 jari 229             break;
2 26 Feb 07 jari 230         case TURN_MODE:
2 26 Feb 07 jari 231             this.lu_btn.setToolTipText("tilt view right");
2 26 Feb 07 jari 232             this.lm_btn.setToolTipText("turn view left");
2 26 Feb 07 jari 233             this.lb_btn.setToolTipText("tilt view left");
2 26 Feb 07 jari 234             this.mu_btn.setToolTipText("turn view up");
2 26 Feb 07 jari 235             this.mm_btn.setToolTipText("switch to rotation mode");
2 26 Feb 07 jari 236             this.mb_btn.setToolTipText("turn view down");
2 26 Feb 07 jari 237             this.ru_btn.setToolTipText("tilt view right");
2 26 Feb 07 jari 238             this.rm_btn.setToolTipText("turn view right");
2 26 Feb 07 jari 239             this.rb_btn.setToolTipText("tilt view left");
2 26 Feb 07 jari 240             break;
2 26 Feb 07 jari 241         case ROT_MODE:
2 26 Feb 07 jari 242             this.lu_btn.setToolTipText("rotate z");
2 26 Feb 07 jari 243             this.lm_btn.setToolTipText("rotate y");
2 26 Feb 07 jari 244             this.lb_btn.setToolTipText("rotate z");
2 26 Feb 07 jari 245             this.mu_btn.setToolTipText("rotate x");
2 26 Feb 07 jari 246             this.mm_btn.setToolTipText("switch to motion mode");
2 26 Feb 07 jari 247             this.mb_btn.setToolTipText("rotate x");
2 26 Feb 07 jari 248             this.ru_btn.setToolTipText("rotate z");
2 26 Feb 07 jari 249             this.rm_btn.setToolTipText("rotate y");
2 26 Feb 07 jari 250             this.rb_btn.setToolTipText("rotate z");
2 26 Feb 07 jari 251             break;
2 26 Feb 07 jari 252         }
2 26 Feb 07 jari 253     }
2 26 Feb 07 jari 254
2 26 Feb 07 jari 255     private class TimerHandler implements ActionListener {
2 26 Feb 07 jari 256         private Timer timer;
2 26 Feb 07 jari 257         private String command;
2 26 Feb 07 jari 258
2 26 Feb 07 jari 259         public TimerHandler() {
2 26 Feb 07 jari 260             this.timer = new Timer(100, this);
2 26 Feb 07 jari 261         }
2 26 Feb 07 jari 262
2 26 Feb 07 jari 263         public void start(String command) {
2 26 Feb 07 jari 264             this.command = command;
2 26 Feb 07 jari 265             actionPerformed(null);
2 26 Feb 07 jari 266             this.timer.start();
2 26 Feb 07 jari 267         }
2 26 Feb 07 jari 268
2 26 Feb 07 jari 269         public void stop() {
2 26 Feb 07 jari 270             this.timer.stop();
2 26 Feb 07 jari 271         }
2 26 Feb 07 jari 272
2 26 Feb 07 jari 273         public void actionPerformed(ActionEvent event) {
2 26 Feb 07 jari 274             NavigationPanel.this.actionPerformed(new ActionEvent(this, ActionEvent.ACTION_PERFORMED, this.command));
2 26 Feb 07 jari 275         }
2 26 Feb 07 jari 276     }
2 26 Feb 07 jari 277
2 26 Feb 07 jari 278 }