avatar

932

Window | Choose Font Sets the font across all tabs, and saves it for future sessions. Works nicely; JBidwatcher looks fascinating in Lucida Handwriting. :) [#308 state:resolved tagged:committed] by mrs, 29 May, 2009 12:01 PM
Diff this changeset:
JBidMenuBar.java
cyberfox 1   package com.jbidwatcher.ui;
cyberfox 2   /*
cyberfox 3    * Copyright (c) 2000-2007, CyberFOX Software, Inc. All Rights Reserved.
cyberfox 4    *
cyberfox 5    * Developed by mrs (Morgan Schweers)
cyberfox 6    */
cyberfox 7   
cyberfox 8   import com.jbidwatcher.platform.Platform;
mrs      9   import com.jbidwatcher.util.config.JConfig;
mrs      10  import com.jbidwatcher.ui.util.JContext;
mrs      11  import com.jbidwatcher.util.Constants;
cyberfox 12  
cyberfox 13  import java.awt.*;
cyberfox 14  import java.awt.event.*;
cyberfox 15  import javax.swing.*;
mrs      16  import javax.swing.event.PopupMenuListener;
mrs      17  import javax.swing.event.PopupMenuEvent;
cyberfox 18  import java.util.HashMap;
cyberfox 19  
cyberfox 20  /**
cyberfox 21   * The GUI Menu bar. This will create the menu bar for the application.
cyberfox 22   *
mrs      23   * @version $Revision: 1.38 $
cyberfox 24   */
cyberfox 25  public class JBidMenuBar extends JMenuBar {
mrs      26    protected static JBidMenuBar _instance = null;
cyberfox 27    protected JMenuBar _menuBar;
cyberfox 28    protected JMenu _fileMenu;
cyberfox 29    protected JMenu _editMenu;
mrs      30    protected JMenu _debugMenu;
cyberfox 31    protected JMenu _serverMenu;
mrs      32    protected JMenu mWindowMenu;
mrs      33    protected JMenu mTabMenu;
cyberfox 34    protected JMenu _auctionMenu;
cyberfox 35    protected JMenu _helpMenu;
cyberfox 36    protected ActionListener _actionDirector;
cyberfox 37  
mrs      38    protected JMenuItem makeMenuItem(
cyberfox 39          JMenu inMenu,
cyberfox 40          String inName,
cyberfox 41          String inActionCommand,
cyberfox 42          int mnemonic,
cyberfox 43          KeyStroke accelerator) {
mrs      44      return makeMenuItem(inMenu, inName, inActionCommand, mnemonic, accelerator, true);
cyberfox 45    }
cyberfox 46  
mrs      47    protected JMenuItem makeMenuItem(JMenu inMenu, String inName, String inActionCommand, int mnemonic, KeyStroke accelerator, boolean add) {
mrs      48      JMenuItem constructItem = new JMenuItem();
cyberfox 49  
mrs      50      constructItem.setText(inName);
mrs      51      constructItem.setActionCommand(inActionCommand);
mrs      52      constructItem.addActionListener(_actionDirector);
mrs      53      constructItem.setMnemonic(mnemonic);
cyberfox 54  
mrs      55      if (accelerator != null) {
mrs      56        constructItem.setAccelerator(accelerator);
mrs      57      } // end of if (accelerator != null)
cyberfox 58  
mrs      59      if (add) inMenu.add(constructItem);
mrs      60      return constructItem;
mrs      61    }
cyberfox 62  
mrs      63    protected JMenuItem makeMenuItem(
cyberfox 64          JMenu inMenu,
cyberfox 65          String inName,
cyberfox 66          int mnemonic,
cyberfox 67          KeyStroke accelerator) {
cyberfox 68  
mrs      69          return makeMenuItem(inMenu, inName, inName, mnemonic, accelerator, true);
cyberfox 70      }
cyberfox 71  
cyberfox 72  
mrs      73    protected JMenuItem makeMenuItem(JMenu inMenu, String inName, String inActionCommand, char mnemonic) {
cyberfox 74      JMenuItem constructItem = new JMenuItem();
cyberfox 75  
cyberfox 76      constructItem.setText(inName);
cyberfox 77      constructItem.setActionCommand(inActionCommand);
cyberfox 78      constructItem.addActionListener(_actionDirector);
cyberfox 79      constructItem.setMnemonic(mnemonic);
cyberfox 80  
cyberfox 81      inMenu.add(constructItem);
mrs      82      return constructItem;
cyberfox 83    }
cyberfox 84  
mrs      85    protected JMenuItem makeMenuItem(JMenu inMenu, String inName, char mnemonic) {
mrs      86      return makeMenuItem(inMenu, inName, inName, mnemonic);
cyberfox 87    }
cyberfox 88  
mrs      89    protected JMenuItem makeMenuItem(JMenu inMenu, String inName, int mnemonic) {
mrs      90        return makeMenuItem(inMenu, inName, inName, mnemonic, null);
cyberfox 91    }
cyberfox 92  
cyberfox 93  
mrs      94    protected JMenuItem makeMenuItem(JMenu inMenu, String inName) {
mrs      95      return makeMenuItem(inMenu, inName, inName, '\0');
cyberfox 96    }
cyberfox 97  
cyberfox 98    protected void establishFileMenu(JMenu inMenu) {
cyberfox 99      makeMenuItem(
cyberfox 100         inMenu,
mrs      101         "Save Auctions", "Save",
cyberfox 102         KeyEvent.VK_S,
cyberfox 103         KeyStroke.getKeyStroke(KeyEvent.VK_S, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
cyberfox 104 
mrs      105     makeMenuItem(inMenu, "Dump Cache", "Dump", KeyEvent.VK_D,
mrs      106         KeyStroke.getKeyStroke(KeyEvent.VK_D, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
mrs      107 
cyberfox 108     if(Platform.isMac()) {
cyberfox 109       makeMenuItem(
cyberfox 110           inMenu,
cyberfox 111           "Configure",
cyberfox 112           KeyEvent.VK_C,
cyberfox 113           KeyStroke.getKeyStroke(KeyEvent.VK_COMMA, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
cyberfox 114     } else {
cyberfox 115       makeMenuItem(
cyberfox 116           inMenu,
cyberfox 117           "Configure",
cyberfox 118           KeyEvent.VK_C,
cyberfox 119           KeyStroke.getKeyStroke(KeyEvent.VK_C, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
cyberfox 120     }
cyberfox 121 
mrs      122     makeMenuItem(inMenu, "Scripting Manager", "Scripting", 'M');
cyberfox 123     makeMenuItem(inMenu, "Check For Updates", KeyEvent.VK_U);
mrs      124     makeMenuItem(inMenu, "Clear Deleted Tracking", "Clear Deleted", KeyEvent.VK_D, KeyStroke.getKeyStroke(KeyEvent.VK_D, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
cyberfox 125     if(!Platform.isMac()) inMenu.add(new JSeparator());
cyberfox 126     makeMenuItem(
cyberfox 127         inMenu,
cyberfox 128         "Exit",
cyberfox 129         "Exit",
cyberfox 130         KeyEvent.VK_X,
cyberfox 131         KeyStroke.getKeyStroke(KeyEvent.VK_Q, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()), !Platform.isMac());
mrs      132     String launcher = System.getenv("JBIDWATCHER_LAUNCHER");
mrs      133     if(launcher != null && JConfig.debugging()) {
mrs      134       makeMenuItem(inMenu, "Restart", "Restart", 'R');
mrs      135     }
cyberfox 136   }
cyberfox 137 
cyberfox 138   protected void establishDebugMenu(JMenu inMenu) {
mrs      139     makeMenuItem(inMenu, "Serialize");
mrs      140     makeMenuItem(inMenu, "Deserialize");
cyberfox 141     inMenu.add(new JSeparator());
mrs      142     makeMenuItem(inMenu, "Submit Log File");
cyberfox 143   }
cyberfox 144 
cyberfox 145   protected void establishEditMenu(JMenu inMenu) {
mrs      146     JMenu copyMenu = new JMenu("Copy");
cyberfox 147     copyMenu.add(JContext.makeGeneralMenuItem("Information", "Copy")).addActionListener(_actionDirector);
cyberfox 148     copyMenu.add(JContext.makeGeneralMenuItem("URL", "CopyURL")).addActionListener(_actionDirector);
cyberfox 149     copyMenu.add(JContext.makeGeneralMenuItem("Auction Id", "CopyID")).addActionListener(_actionDirector);
cyberfox 150     inMenu.add(copyMenu);
cyberfox 151     //makeMenuItem(inMenu, "Copy Auction URL", "CopyURL", KeyEvent.VK_C,
cyberfox 152     //             KeyStroke.getKeyStroke(KeyEvent.VK_C, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
cyberfox 153     //makeMenuItem(inMenu, "Copy Auction ID", "CopyID", 'I');
mrs      154     makeMenuItem(inMenu, "Paste Auction", "Paste", KeyEvent.VK_P,
mrs      155                  KeyStroke.getKeyStroke(KeyEvent.VK_V, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
cyberfox 156     inMenu.add(new JSeparator());
cyberfox 157     makeMenuItem(inMenu, "Find", "Search", KeyEvent.VK_F,
cyberfox 158                  KeyStroke.getKeyStroke(KeyEvent.VK_F, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
cyberfox 159     inMenu.add(new JSeparator());
cyberfox 160     makeMenuItem(inMenu, "Set Background Color", "Set Background Color", 'B');
cyberfox 161     makeMenuItem(inMenu, "Show/Hide Toolbar", "Toolbar", 'T');
cyberfox 162   }
cyberfox 163 
cyberfox 164   protected void establishServerMenu(JMenu inMenu) {
cyberfox 165     String doTimeSync = JConfig.queryConfiguration("timesync.enabled", "true");
mrs      166 
mrs      167     makeMenuItem(inMenu, "Update Auctions", "UpdateAll", 'U');
cyberfox 168     makeMenuItem(inMenu, "Stop Activity", "StopUpdating", KeyEvent.VK_S,
cyberfox 169                  KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
mrs      170 
mrs      171     if(doTimeSync.equals("true")) {
mrs      172       inMenu.add(new JSeparator());
cyberfox 173       makeMenuItem(inMenu, "Time Information", "Show Time Info", 'T');
mrs      174       makeMenuItem(inMenu, "Synchronize Time", "Resync", 'R');
mrs      175     }
cyberfox 176   }
cyberfox 177 
mrs      178   protected void establishWindowMenu(JMenu inMenu) {
mrs      179     makeMenuItem(inMenu, "Activity Log", "View Activity", 'A');
mrs      180     makeMenuItem(inMenu, "Errors Log", "View Log", 'E');
mrs      181     makeMenuItem(inMenu, "Search Manager", "Search", 'S');
mrs      182     makeMenuItem(inMenu, "Configuration", "Configure", 'C');
mrs      183     makeMenuItem(inMenu, "Scripting", 'P');
mrs      184     inMenu.add(new JSeparator());
mrs      185     makeMenuItem(inMenu, "Choose Font", "Font", 'F');
mrs      186   }
mrs      187 
cyberfox 188   protected void establishAuctionMenu(JMenu inMenu) {
cyberfox 189     //  The mac doesn't have an 'INSERT' key.  I suppose 'Overwrite'
cyberfox 190     //  mode is too complex?  Frustration abounds, as CMD-A is 'select
cyberfox 191     //  all'.  We're going with CMD-I to mirror 'Insert'.
mrs      192     JMenuItem add;
cyberfox 193     if(Platform.isMac()) {
mrs      194       add = makeMenuItem(inMenu, "Add New", KeyEvent.VK_A,
mrs      195                          KeyStroke.getKeyStroke(KeyEvent.VK_N, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
cyberfox 196     } else {
mrs      197       add = makeMenuItem(inMenu, "Add", KeyEvent.VK_A,
mrs      198                          KeyStroke.getKeyStroke(KeyEvent.VK_INSERT, 0));
cyberfox 199     }
mrs      200     add.registerKeyboardAction(_actionDirector, "Add", KeyStroke.getKeyStroke(KeyEvent.VK_ADD, 0), WHEN_IN_FOCUSED_WINDOW);
mrs      201     add.registerKeyboardAction(_actionDirector, "Add", KeyStroke.getKeyStroke(KeyEvent.VK_EQUALS, KeyEvent.SHIFT_DOWN_MASK), WHEN_IN_FOCUSED_WINDOW);
cyberfox 202 
cyberfox 203     //  Require 'CMD-Del' for the Mac, because otherwise it catches
cyberfox 204     //  the 'Del' operation in the middle of text entry.  (D'oh!)
cyberfox 205     if(Platform.isMac()) {
cyberfox 206       makeMenuItem(inMenu, "Delete", KeyEvent.VK_D,
cyberfox 207                    KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
cyberfox 208     } else {
cyberfox 209       makeMenuItem(inMenu, "Delete", KeyEvent.VK_D,
cyberfox 210                    KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0));
cyberfox 211     }
cyberfox 212 
cyberfox 213     inMenu.add(new JSeparator());
cyberfox 214     makeMenuItem(inMenu, "Snipe", 'S', KeyStroke.getKeyStroke(KeyEvent.VK_E, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
cyberfox 215     makeMenuItem(inMenu, "Multiple Snipe", 'i');
mrs      216     makeMenuItem(inMenu, "Cancel Snipe", 'C');
cyberfox 217     inMenu.add(new JSeparator());
mrs      218     makeMenuItem(inMenu, "Bid", 'B');
mrs      219     makeMenuItem(inMenu, "Buy", 'y');
mrs      220     inMenu.add(new JSeparator());
cyberfox 221     makeMenuItem(inMenu, "Update", 'U');
mrs      222     if(Platform.isMac()) {
mrs      223       makeMenuItem(inMenu, "Show Information", "Information", 'I', KeyStroke.getKeyStroke(KeyEvent.VK_I, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
mrs      224     } else {
mrs      225       makeMenuItem(inMenu, "Show Information", "Information", 'I');
mrs      226     }
cyberfox 227 //    makeMenuItem(inMenu, "Show Last Error Page", "ShowError", 'l');
mrs      228     makeMenuItem(inMenu, "Show In Browser", "Browse", 'b', KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
cyberfox 229 //    makeMenuItem(inMenu, "Show status", "Status", 't');
cyberfox 230     inMenu.add(new JSeparator());
mrs      231     JMenu commentMenu = new JMenu("Comment");
mrs      232     commentMenu.add(JContext.makeGeneralMenuItem("Add", "Add Comment")).addActionListener(_actionDirector);
mrs      233     commentMenu.add(JContext.makeGeneralMenuItem("View", "View Comment")).addActionListener(_actionDirector);
mrs      234     commentMenu.add(JContext.makeGeneralMenuItem("Remove", "Remove Comment")).addActionListener(_actionDirector);
mrs      235     inMenu.add(commentMenu);
cyberfox 236   }
cyberfox 237 
cyberfox 238   protected void establishHelpMenu(JMenu inMenu) {
mrs      239     makeMenuItem(inMenu, "Explain Colors And Icons", 'E');
cyberfox 240     makeMenuItem(inMenu, "FAQ", 'F', KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0));
mrs      241     makeMenuItem(inMenu, "Donate", 'D');
mrs      242     makeMenuItem(inMenu, "License Details", "License", 'D');
cyberfox 243     inMenu.add(new JSeparator());
mrs      244     makeMenuItem(inMenu, "About " + Constants.PROGRAM_NAME, 'A');
cyberfox 245   }
cyberfox 246 
cyberfox 247   private static HashMap<String, JBidMenuBar> _frameMenus = new HashMap<String, JBidMenuBar>(10);
cyberfox 248 
cyberfox 249   /**
cyberfox 250    * @brief Return the menu instance associated with a specific frame name.
cyberfox 251    *
cyberfox 252    * @param inAction - The action underlying the menu, in case it has to be created.
cyberfox 253    * @param frameName - The name of the frame to associated the menu bar with.
cyberfox 254    *
cyberfox 255    * @return - A menu bar usable with said frame.
cyberfox 256    */
cyberfox 257   protected static JBidMenuBar getFrameInstance(ActionListener inAction, String frameName) {
cyberfox 258     JBidMenuBar retInstance = _frameMenus.get(frameName);
cyberfox 259     if(retInstance == null) {
cyberfox 260       if(inAction == null) {
cyberfox 261         throw new RuntimeException("JBidMenuBar.getInstance(null) called when no matching instance \"" + frameName + "\" yet created!");
cyberfox 262       }
cyberfox 263       retInstance = new JBidMenuBar(inAction);
cyberfox 264       _frameMenus.put(frameName, retInstance);
cyberfox 265     }
cyberfox 266 
cyberfox 267     if(_instance == null) _instance = retInstance;
cyberfox 268 
cyberfox 269     return retInstance;
cyberfox 270   }
cyberfox 271 
cyberfox 272   /**
cyberfox 273    * @brief Return the 'global instance' of the menu bar.
cyberfox 274    *
cyberfox 275    * @param inAction - The action handler to use under the menu bar.
cyberfox 276    *
cyberfox 277    * @return - The global instance of the menu bar.
cyberfox 278    */
cyberfox 279   public static JBidMenuBar getInstance(ActionListener inAction) {
cyberfox 280     return getInstance(inAction, null);
cyberfox 281   }
cyberfox 282 
cyberfox 283   /**
cyberfox 284    * @brief Get an instance of the menu bar for use with a given frame name.
cyberfox 285    *
cyberfox 286    * @param inAction - The action to use underneath the menu bar.
cyberfox 287    * @param frameName - The name of the frame this menu bar is to be associated with.
cyberfox 288    *
cyberfox 289    * @return - A menu bar, either the 'global instance', or a specific one for the frame.
cyberfox 290    */
cyberfox 291   public static JBidMenuBar getInstance(ActionListener inAction, String frameName) {
cyberfox 292     if(inAction == null && _instance == null && _frameMenus == null) {
cyberfox 293       throw new RuntimeException("JBidMenuBar.getInstance(null, null) called when no instance yet created!");
cyberfox 294     }
cyberfox 295 
cyberfox 296     if(frameName != null) {
cyberfox 297       return getFrameInstance(inAction, frameName);
cyberfox 298     }
cyberfox 299 
cyberfox 300     //  Return the 'global instance'.
cyberfox 301     if(_instance == null) {
cyberfox 302       _instance = new JBidMenuBar(inAction);
cyberfox 303     }
cyberfox 304     return _instance;
cyberfox 305   }
cyberfox 306 
cyberfox 307   private JBidMenuBar(ActionListener inAction) {
cyberfox 308     _actionDirector = inAction;
cyberfox 309     _fileMenu = new JMenu("File");
cyberfox 310     _fileMenu.setMnemonic('F');
cyberfox 311     _editMenu = new JMenu("Edit");
cyberfox 312     _editMenu.setMnemonic('E');
mrs      313     if(JConfig.debugging()) {
mrs      314       _debugMenu = new JMenu("Debug");
mrs      315       _debugMenu.setMnemonic('D');
mrs      316       establishDebugMenu(_debugMenu);
mrs      317     }
cyberfox 318     _serverMenu = new JMenu("Servers");
cyberfox 319     _serverMenu.setMnemonic('S');
mrs      320     _auctionMenu = new JMenu("Auction");
mrs      321     _auctionMenu.setMnemonic('A');
mrs      322     mTabMenu = new JMenu("Tab");
mrs      323     mTabMenu.setMnemonic('T');
mrs      324     mWindowMenu = new JMenu("Windows");
mrs      325     mWindowMenu.setMnemonic('W');
cyberfox 326     _helpMenu = new JMenu("Help");
cyberfox 327     _helpMenu.setMnemonic('H');
cyberfox 328 
cyberfox 329     establishFileMenu(_fileMenu);
cyberfox 330     establishEditMenu(_editMenu);
cyberfox 331     establishServerMenu(_serverMenu);
mrs      332     establishAuctionMenu(_auctionMenu);
mrs      333     establishTabMenu(mTabMenu);
mrs      334     establishWindowMenu(mWindowMenu);
cyberfox 335     establishHelpMenu(_helpMenu);
cyberfox 336 
cyberfox 337     add(_fileMenu);
cyberfox 338     add(_editMenu);
mrs      339     if (JConfig.debugging()) {
mrs      340       add(_debugMenu);
mrs      341     }
cyberfox 342     add(_serverMenu);
mrs      343     add(_auctionMenu);
mrs      344     add(mTabMenu);
mrs      345     add(mWindowMenu);
cyberfox 346     add(_helpMenu);
cyberfox 347   }
mrs      348 
mrs      349   private void establishTabMenu(JMenu tabMenu) {
mrs      350     final JTabPopupMenu pop = new JTabPopupMenu(JTabManager.getInstance().getTabs(), tabMenu.getPopupMenu());
mrs      351 
mrs      352     tabMenu.getPopupMenu().addPopupMenuListener(new PopupMenuListener() {
mrs      353       public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
mrs      354         pop.preparePopup(JTabManager.getInstance().getTabs().getSelectedIndex());
mrs      355       }
mrs      356 
mrs      357       public void popupMenuWillBecomeInvisible(PopupMenuEvent e) { }
mrs      358       public void popupMenuCanceled(PopupMenuEvent e) { }
mrs      359     });
mrs      360   }
cyberfox 361 }

Check out the code: svn co jbidwatcher/trunk/src/com/jbidwatcher/ui/JBidMenuBar.java