org » gecode » gist » swing
MenuBar.java
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040 package org.gecode.gist.swing;
00041
00042 import org.gecode.gist.*;
00043 import java.awt.event.ActionEvent;
00044 import javax.swing.*;
00045 import java.util.Enumeration;
00046
00047 class MenuBar extends JMenuBar {
00048
00049 protected Action resetAction;
00050 protected Action saveAsAction;
00051 protected Action inspectAction;
00052 protected Action inspectBranchesAction;
00053 protected Action inspectBPAction;
00054 protected Action searchAllAction;
00055 protected Action searchOneAction;
00056 protected Action searchNAction;
00057 protected Action hideNodeAction;
00058 protected Action hideFailedAction;
00059 protected Action unhideAllAction;
00060 protected Action scaleToFitAction;
00061
00062 protected Action navUpAction;
00063 protected Action navDownAction;
00064 protected Action navLeftAction;
00065 protected Action navRightAction;
00066
00067 protected Action jumpNextSolAction;
00068 protected Action jumpPrevSolAction;
00069 protected Action jumpRootAction;
00070 protected Action jumpLeftmostAction;
00071 protected Action jumpRightmostAction;
00072 protected Action centerCursorAction;
00073
00074 protected Action configAction;
00075 protected Action quitAction;
00076
00077 private JPopupMenu pop;
00078
00079 private GistController _ctrl;
00080
00081 protected ButtonGroup inspectionActionsGroup;
00082 protected JMenu actionsMenu;
00083
00084 public class ResetAction extends AbstractAction {
00085 public ResetAction() {
00086 super("Reset");
00087 putValue(SHORT_DESCRIPTION, "Reset the tree");
00088 }
00089 public void actionPerformed(ActionEvent e) {
00090 _ctrl.reset();
00091 }
00092 }
00093 public class SaveAsAction extends AbstractAction {
00094 public SaveAsAction() {
00095 super("Save as");
00096 putValue(SHORT_DESCRIPTION, "Save the tree as postscript");
00097 }
00098 public void actionPerformed(ActionEvent e) {
00099 _ctrl.saveAs();
00100 }
00101 }
00102
00103 public class SelectInspectionAction extends AbstractAction {
00104 private String action;
00105 public SelectInspectionAction(String s) {
00106 super(s);
00107 action = s;
00108 }
00109 public void actionPerformed(ActionEvent e) {
00110 _ctrl.selectInspectionAction(action);
00111 }
00112 }
00113 public class InspectAction extends AbstractAction {
00114 public InspectAction() {
00115 super("Inspect");
00116 putValue(SHORT_DESCRIPTION, "Inspect the current node");
00117 }
00118 public void actionPerformed(ActionEvent e) {
00119 _ctrl.inspect();
00120 }
00121 }
00122 public class InspectBranchesAction extends AbstractAction {
00123 public InspectBranchesAction() {
00124 super("Inspect Branches");
00125 putValue(SHORT_DESCRIPTION, "Inspect branches of the current node");
00126 }
00127 public void actionPerformed(ActionEvent e) {
00128 _ctrl.inspectBranches();
00129 }
00130 }
00131 public class InspectBPAction extends AbstractAction {
00132 public InspectBPAction() {
00133 super("Inspect before propagation");
00134 putValue(SHORT_DESCRIPTION, "Inspect the current node before propagation");
00135 }
00136 public void actionPerformed(ActionEvent e) {
00137 _ctrl.inspectBeforePropagation();
00138 }
00139 }
00140 public class SearchAllAction extends AbstractAction {
00141 public SearchAllAction() {
00142 super("Search all");
00143 putValue(SHORT_DESCRIPTION, "Search all solutions");
00144 }
00145 public void actionPerformed(ActionEvent e) {
00146 _ctrl.exploreAll();
00147 }
00148 }
00149 public class SearchOneAction extends AbstractAction {
00150 public SearchOneAction() {
00151 super("Search one");
00152 putValue(SHORT_DESCRIPTION, "Search one solution");
00153 }
00154 public void actionPerformed(ActionEvent e) {
00155 _ctrl.exploreOne();
00156 }
00157 }
00158 public class SearchNAction extends AbstractAction {
00159 public SearchNAction() {
00160 super("Search n");
00161 putValue(SHORT_DESCRIPTION, "Search n solutions");
00162 }
00163 public void actionPerformed(ActionEvent e) {
00164 _ctrl.exploreN();
00165 }
00166 }
00167 public class HideNodeAction extends AbstractAction {
00168 public HideNodeAction() {
00169 super("(Un)hide node");
00170 putValue(SHORT_DESCRIPTION, "(Un)hide node");
00171 }
00172 public void actionPerformed(ActionEvent e) {
00173 _ctrl.toggleHidden();
00174 }
00175 }
00176 public class HideFailedAction extends AbstractAction {
00177 public HideFailedAction() {
00178 super("Hide failed");
00179 putValue(SHORT_DESCRIPTION, "Hide failed");
00180 }
00181 public void actionPerformed(ActionEvent e) {
00182 _ctrl.hideFailed();
00183 }
00184 }
00185 public class UnhideAllAction extends AbstractAction {
00186 public UnhideAllAction() {
00187 super("Unhide all");
00188 putValue(SHORT_DESCRIPTION, "Unhide all");
00189 }
00190 public void actionPerformed(ActionEvent e) {
00191 _ctrl.unhideAll();
00192 }
00193 }
00194 public class ScaleToFitAction extends AbstractAction {
00195 public ScaleToFitAction() {
00196 super("Scale to fit");
00197 putValue(SHORT_DESCRIPTION, "Scale to fit");
00198 }
00199 public void actionPerformed(ActionEvent e) {
00200 _ctrl.scaleToFit();
00201 }
00202 }
00203
00204
00205 public class NavUpAction extends AbstractAction {
00206 public NavUpAction() {
00207 super("Up");
00208 putValue(SHORT_DESCRIPTION, "Navigate upwards");
00209 }
00210 public void actionPerformed(ActionEvent e) {
00211 _ctrl.navUp();
00212 }
00213 }
00214 public class NavDownAction extends AbstractAction {
00215 public NavDownAction() {
00216 super("Down");
00217 putValue(SHORT_DESCRIPTION, "Navigate downwards");
00218 }
00219 public void actionPerformed(ActionEvent e) {
00220 _ctrl.navDown();
00221 }
00222 }
00223 public class NavLeftAction extends AbstractAction {
00224 public NavLeftAction() {
00225 super("Left");
00226 putValue(SHORT_DESCRIPTION, "Navigate left");
00227 }
00228 public void actionPerformed(ActionEvent e) {
00229 _ctrl.navLeft();
00230 }
00231 }
00232 public class NavRightAction extends AbstractAction {
00233 public NavRightAction() {
00234 super("Right");
00235 putValue(SHORT_DESCRIPTION, "Navigate right");
00236 }
00237 public void actionPerformed(ActionEvent e) {
00238 _ctrl.navRight();
00239 }
00240 }
00241
00242 public class JumpNextSolAction extends AbstractAction {
00243 public JumpNextSolAction() {
00244 super("Jump to next solution");
00245 putValue(SHORT_DESCRIPTION, "Jump to next solution");
00246 }
00247 public void actionPerformed(ActionEvent e) {
00248 _ctrl.jumpNextSol();
00249 }
00250 }
00251 public class JumpPrevSolAction extends AbstractAction {
00252 public JumpPrevSolAction() {
00253 super("Jump to previous solution");
00254 putValue(SHORT_DESCRIPTION, "Jump to previous solution");
00255 }
00256 public void actionPerformed(ActionEvent e) {
00257 _ctrl.jumpPrevSol();
00258 }
00259 }
00260
00261 public class JumpRootAction extends AbstractAction {
00262 public JumpRootAction() {
00263 super("Jump to root node");
00264 putValue(SHORT_DESCRIPTION, "Jump to root node");
00265 }
00266 public void actionPerformed(ActionEvent e) {
00267 _ctrl.jumpRoot();
00268 }
00269 }
00270 public class JumpLeftmostAction extends AbstractAction {
00271 public JumpLeftmostAction() {
00272 super("Leftmost");
00273 putValue(SHORT_DESCRIPTION, "Jump to leftmost node");
00274 }
00275 public void actionPerformed(ActionEvent e) {
00276 _ctrl.jumpLeftmost();
00277 }
00278 }
00279 public class JumpRightmostAction extends AbstractAction {
00280 public JumpRightmostAction() {
00281 super("Rightmost");
00282 putValue(SHORT_DESCRIPTION, "Jump to rightmost node");
00283 }
00284 public void actionPerformed(ActionEvent e) {
00285 _ctrl.jumpRightmost();
00286 }
00287 }
00288 public class CenterCursorAction extends AbstractAction {
00289 public CenterCursorAction() {
00290 super("Center current node");
00291 putValue(SHORT_DESCRIPTION,
00292 "Center view on current node (if possible)");
00293 }
00294 public void actionPerformed(ActionEvent e) {
00295 _ctrl.centerCursor();
00296 }
00297 }
00298
00299
00300 public class AboutAction extends AbstractAction {
00301 private AboutWindow aw;
00302 public AboutAction(JFrame f) {
00303 super("About");
00304 aw = new AboutWindow(f);
00305 putValue(SHORT_DESCRIPTION, "About Gecode/J Gist");
00306 }
00307 public void actionPerformed(ActionEvent e) {
00308 aw.open();
00309 }
00310 }
00311
00312 public class HelpAction extends AbstractAction {
00313 private HelpWindow hw;
00314 public HelpAction(JFrame f) {
00315 super("Help");
00316 hw = new HelpWindow(f);
00317 putValue(SHORT_DESCRIPTION, "Help on the Gecode/J Gist");
00318 }
00319 public void actionPerformed(ActionEvent e) {
00320 hw.open();
00321 }
00322 }
00323
00324 public class ConfigAction extends AbstractAction {
00325 private ConfigDialog cd;
00326 public ConfigAction(JFrame f) {
00327 super("Preferences");
00328 cd = new ConfigDialog(f);
00329 putValue(SHORT_DESCRIPTION, "Preferences for the Gecode/J Gist");
00330 }
00331 public void actionPerformed(ActionEvent e) {
00332 cd.open();
00333 }
00334 }
00335
00336
00337 public class QuitAction extends AbstractAction {
00338 public QuitAction() {
00339 super("Quit");
00340 putValue(SHORT_DESCRIPTION, "Quit Gecode Gist");
00341 }
00342 public void actionPerformed(ActionEvent e) {
00343 System.exit(0);
00344 }
00345 }
00346
00347
00348
00349 public MenuBar(JFrame frame, GistController ctrl) {
00350 _ctrl = ctrl;
00351
00352 JMenuItem menuItem = null;
00353
00354 resetAction = new ResetAction();
00355 saveAsAction = new SaveAsAction();
00356 inspectAction = new InspectAction();
00357 inspectBranchesAction = new InspectBranchesAction();
00358 inspectBPAction = new InspectBPAction();
00359 searchAllAction = new SearchAllAction();
00360 searchOneAction = new SearchOneAction();
00361 searchNAction = new SearchNAction();
00362 hideNodeAction = new HideNodeAction();
00363 hideFailedAction = new HideFailedAction();
00364 unhideAllAction = new UnhideAllAction();
00365 scaleToFitAction = new ScaleToFitAction();
00366
00367 navUpAction = new NavUpAction();
00368 navDownAction = new NavDownAction();
00369 navLeftAction = new NavLeftAction();
00370 navRightAction = new NavRightAction();
00371
00372 jumpNextSolAction = new JumpNextSolAction();
00373 jumpPrevSolAction = new JumpPrevSolAction();
00374 jumpRootAction = new JumpRootAction();
00375 jumpLeftmostAction = new JumpLeftmostAction();
00376 jumpRightmostAction = new JumpRightmostAction();
00377 centerCursorAction = new CenterCursorAction();
00378
00379 configAction = new ConfigAction(frame);
00380 quitAction = new QuitAction();
00381
00382 JMenu fileMenu = new JMenu("File");
00383 JMenu nodeMenu = new JMenu("Node");
00384 JMenu searchMenu = new JMenu("Search");
00385 JMenu helpMenu = new JMenu("Help");
00386
00387 actionsMenu = new JMenu("Inspection actions");
00388
00389 menuItem = new JMenuItem(new HelpAction(frame));
00390 helpMenu.add(menuItem);
00391 menuItem = new JMenuItem(new AboutAction(frame));
00392 helpMenu.add(menuItem);
00393
00394 pop = new JPopupMenu();
00395
00396 menuItem = new JMenuItem(resetAction);
00397 menuItem.setIcon(null);
00398 menuItem.setAccelerator(KeyStroke.getKeyStroke("control R"));
00399 fileMenu.add(menuItem);
00400
00401
00402 menuItem = new JMenuItem(saveAsAction);
00403 menuItem.setIcon(null);
00404 menuItem.setAccelerator(KeyStroke.getKeyStroke("control S"));
00405 fileMenu.add(menuItem);
00406
00407 updateEventListeners();
00408 nodeMenu.add(actionsMenu);
00409
00410 menuItem = new JMenuItem(inspectAction);
00411 menuItem.setIcon(null);
00412 menuItem.setAccelerator(KeyStroke.getKeyStroke("ENTER"));
00413 nodeMenu.add(menuItem);
00414
00415 menuItem = new JMenuItem(inspectBranchesAction);
00416 menuItem.setIcon(null);
00417 menuItem.setAccelerator(KeyStroke.getKeyStroke("control ENTER"));
00418 nodeMenu.add(menuItem);
00419
00420 menuItem = new JMenuItem(inspectBPAction);
00421 menuItem.setIcon(null);
00422 menuItem.setAccelerator(KeyStroke.getKeyStroke("control shift ENTER"));
00423 nodeMenu.add(menuItem);
00424
00425 menuItem = new JMenuItem(searchAllAction);
00426 menuItem.setIcon(null);
00427 menuItem.setAccelerator(KeyStroke.getKeyStroke("A"));
00428 searchMenu.add(menuItem);
00429
00430 menuItem = new JMenuItem(searchOneAction);
00431 menuItem.setIcon(null);
00432 menuItem.setAccelerator(KeyStroke.getKeyStroke("1"));
00433 searchMenu.add(menuItem);
00434
00435 menuItem = new JMenuItem(searchNAction);
00436 menuItem.setIcon(null);
00437 menuItem.setAccelerator(KeyStroke.getKeyStroke("N"));
00438 searchMenu.add(menuItem);
00439
00440 menuItem = new JMenuItem(hideNodeAction);
00441 menuItem.setIcon(null);
00442 menuItem.setAccelerator(KeyStroke.getKeyStroke("H"));
00443 nodeMenu.add(menuItem);
00444
00445 menuItem = new JMenuItem(hideFailedAction);
00446 menuItem.setIcon(null);
00447 menuItem.setAccelerator(KeyStroke.getKeyStroke("F"));
00448 nodeMenu.add(menuItem);
00449
00450 menuItem = new JMenuItem(unhideAllAction);
00451 menuItem.setIcon(null);
00452 menuItem.setAccelerator(KeyStroke.getKeyStroke("U"));
00453 nodeMenu.add(menuItem);
00454
00455 nodeMenu.addSeparator();
00456 menuItem = new JMenuItem(navUpAction);
00457 menuItem.setIcon(null);
00458 menuItem.setAccelerator(KeyStroke.getKeyStroke("control UP"));
00459 nodeMenu.add(menuItem);
00460 menuItem = new JMenuItem(navDownAction);
00461 menuItem.setIcon(null);
00462 menuItem.setAccelerator(KeyStroke.getKeyStroke("control DOWN"));
00463 nodeMenu.add(menuItem);
00464 menuItem = new JMenuItem(navLeftAction);
00465 menuItem.setIcon(null);
00466 menuItem.setAccelerator(KeyStroke.getKeyStroke("control LEFT"));
00467 nodeMenu.add(menuItem);
00468 menuItem = new JMenuItem(navRightAction);
00469 menuItem.setIcon(null);
00470 menuItem.setAccelerator(KeyStroke.getKeyStroke("control RIGHT"));
00471 nodeMenu.add(menuItem);
00472
00473 nodeMenu.addSeparator();
00474 menuItem = new JMenuItem(jumpNextSolAction);
00475 menuItem.setIcon(null);
00476 menuItem.setAccelerator(KeyStroke.getKeyStroke("J"));
00477 nodeMenu.add(menuItem);
00478 menuItem = new JMenuItem(jumpPrevSolAction);
00479 menuItem.setIcon(null);
00480 menuItem.setAccelerator(KeyStroke.getKeyStroke("shift J"));
00481 nodeMenu.add(menuItem);
00482 menuItem = new JMenuItem(jumpRootAction);
00483 menuItem.setIcon(null);
00484 menuItem.setAccelerator(KeyStroke.getKeyStroke("R"));
00485 nodeMenu.add(menuItem);
00486 menuItem = new JMenuItem(jumpLeftmostAction);
00487 menuItem.setIcon(null);
00488 menuItem.setAccelerator(KeyStroke.getKeyStroke('-'));
00489 nodeMenu.add(menuItem);
00490 menuItem = new JMenuItem(jumpRightmostAction);
00491 menuItem.setIcon(null);
00492 menuItem.setAccelerator(KeyStroke.getKeyStroke('+'));
00493 nodeMenu.add(menuItem);
00494 menuItem = new JMenuItem(centerCursorAction);
00495 menuItem.setIcon(null);
00496 menuItem.setAccelerator(KeyStroke.getKeyStroke("C"));
00497 nodeMenu.add(menuItem);
00498
00499 menuItem = new JMenuItem(scaleToFitAction);
00500 menuItem.setIcon(null);
00501 menuItem.setAccelerator(KeyStroke.getKeyStroke("Z"));
00502 fileMenu.add(menuItem);
00503
00504
00505
00506 menuItem = new JMenuItem(configAction);
00507 menuItem.setIcon(null);
00508 menuItem.setAccelerator(KeyStroke.getKeyStroke("control P"));
00509 fileMenu.add(menuItem);
00510
00511 menuItem = new JMenuItem(quitAction);
00512 menuItem.setIcon(null);
00513 menuItem.setAccelerator(KeyStroke.getKeyStroke("control Q"));
00514 fileMenu.add(menuItem);
00515
00516
00517 add(fileMenu);
00518 add(nodeMenu);
00519 add(searchMenu);
00520 add(helpMenu);
00521
00522
00523
00524 pop.add(new JMenuItem(searchAllAction));
00525 pop.add(new JMenuItem(searchOneAction));
00526 pop.add(new JMenuItem(searchNAction));
00527 pop.add(new JMenuItem(hideNodeAction));
00528 pop.add(new JMenuItem(hideFailedAction));
00529 pop.add(new JMenuItem(unhideAllAction));
00530 pop.add(new JMenuItem(inspectBranchesAction));
00531 pop.add(new JMenuItem(inspectBPAction));
00532
00533 pop.pack();
00534 }
00535
00536 JPopupMenu getPopupMenu() {
00537 return pop;
00538 }
00539
00540
00541 public void menuInspectActive(boolean active, boolean isRoot, boolean isLeaf) {
00542 inspectAction.setEnabled(active);
00543 inspectBPAction.setEnabled(!isRoot);
00544 inspectBranchesAction.setEnabled(active && !isLeaf);
00545 }
00546 public void menuSearchActive(boolean active) {
00547 searchNAction.setEnabled(active);
00548 searchOneAction.setEnabled(active);
00549 searchAllAction.setEnabled(active);
00550 }
00551 public void menuHideNodeActive(boolean active, boolean hidden) {
00552 hideNodeAction.setEnabled(active);
00553 }
00554 public void menuUnhideAllActive(boolean active) {
00555 unhideAllAction.setEnabled(active);
00556 }
00557 public void menuHideFailedActive(boolean active) {
00558 hideFailedAction.setEnabled(active);
00559 }
00560
00561
00562 public void updateEventListeners() {
00563 updateEventListeners(_ctrl.getListeners(), _ctrl.getSelectedAction());
00564 }
00565 private void updateEventListeners(Enumeration<String> es,
00566 String selectedAction) {
00567 actionsMenu.removeAll();
00568 JRadioButtonMenuItem menuItem;
00569 menuItem =
00570 new JRadioButtonMenuItem(new SelectInspectionAction("default"));
00571 menuItem.setIcon(null);
00572 actionsMenu.add(menuItem);
00573 inspectionActionsGroup = new ButtonGroup();
00574 inspectionActionsGroup.add(menuItem);
00575 if (selectedAction.equals("default")) {
00576 menuItem.setSelected(true);
00577 }
00578 while (es.hasMoreElements()) {
00579 String name = es.nextElement();
00580 SelectInspectionAction sia =
00581 new SelectInspectionAction(name);
00582 menuItem =
00583 new JRadioButtonMenuItem(sia);
00584 menuItem.setIcon(null);
00585 actionsMenu.add(menuItem);
00586 inspectionActionsGroup.add(menuItem);
00587 if (selectedAction.equals(name)) {
00588 menuItem.setSelected(true);
00589 }
00590 }
00591 }
00592
00593 }