Package org.enhydra.jawe

Source Code of org.enhydra.jawe.BarFactory

package org.enhydra.jawe;

import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.lang.reflect.Constructor;

import javax.swing.Action;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JToolBar;
import javax.swing.KeyStroke;
import javax.swing.SwingConstants;

import org.enhydra.jawe.base.controller.JaWEType;
import org.enhydra.jawe.base.controller.JaWETypeChoiceButton;
import org.enhydra.jawe.base.editor.NewStandardXPDLElementEditor;

public class BarFactory {

   public final static String CLASSNAME_POSTFIX = "ClassName";

   public final static String SETTINGSNAME_POSTFIX = "SettingsName";

   public final static String ACCELERATION_POSTFIX = "Accel";

   public final static String MNEMONIC_POSTFIX = "Mnemonic";

   public final static String LABEL_POSTFIX = "Label";

   public final static String TOOLTIP_POSTFIX = "Tooltip";

   public final static String LANGUAGEDEPENDENTNAME_POSTFIX = "LangName";

   public final static String JAWE_STANDARD_MENU_PREFIX = "jawe_";

   public final static String JAWE_STANDARD_ACTION_PREFIX = "jaweAction_";

   public final static String JAWECOMPONENT_AS_MENU_PREFIX = "@";

   public final static String SUBMENU_PREFIX = "*";

   public final static String ACTION_DELIMITER = " ";

   public final static String ACTION_SEPARATOR = "-";

   public final static String CTRL_PREFIX = "CTRL";

   public final static String SHIFT_PREFIX = "SHIFT";

   public final static String ALT_PREFIX = "ALT";

   public static JMenuBar createMainMenu(JaWEComponent comp) {
      JMenuBar mbar = new JMenuBar();

      String actionOrder = comp.getSettings().getMainMenuActionOrder();
      String[] act = Utils.tokenize(actionOrder, ACTION_DELIMITER);

      for (int i = 0; i < act.length; i++) {
         if (act[i].startsWith(JAWECOMPONENT_AS_MENU_PREFIX)) {
            String className = (String) comp.getSettings()
               .getSetting(act[i].substring(1) + CLASSNAME_POSTFIX);
            String settingsName = (String) comp.getSettings()
               .getSetting(act[i].substring(1) + SETTINGSNAME_POSTFIX);
            JMenu subMenu = getExternalMenu(className, settingsName);
            if (subMenu != null) {
               BarFactory.setAccelerator(subMenu, comp.getSettings()
                  .getLanguageDependentString(act[i].substring(1) + ACCELERATION_POSTFIX));
               BarFactory.setMnemonic(subMenu, comp.getSettings()
                  .getLanguageDependentString(act[i].substring(1) + MNEMONIC_POSTFIX));
               mbar.add(subMenu);
            }
         } else if (act[i].startsWith(JAWE_STANDARD_MENU_PREFIX)) {
            mbar.add(JaWEManager.getInstance()
               .getJaWEController()
               .getJaWEActions()
               .getActionMenu(act[i], true));
         } else if (act[i].startsWith(JAWE_STANDARD_ACTION_PREFIX)) {
            mbar.add(JaWEManager.getInstance()
               .getJaWEController()
               .getJaWEActions()
               .getActionMenuItem(act[i].substring(11), true));
         } else if (act[i].startsWith(SUBMENU_PREFIX)) {
            JMenu sm = createSubMenu(act[i].substring(1), comp, true);
            if (sm != null) {
               mbar.add(sm);
            }
         } else {
            JaWEAction ja = comp.getSettings().getAction(act[i]);
            if (ja != null) {
               mbar.add(createMenuItem(ja, comp, true));
            }
         }
      }

      return mbar;
   }

   public static JPopupMenu createPopupMenu(String popupMenuName, JaWEComponent comp) {
      String actionOrder = comp.getSettings().getMenuActionOrder(popupMenuName);
      return createMenu(actionOrder, comp, false).getPopupMenu();
   }

   public static JToolBar createToolbar(String toolbarName, JaWEComponent comp) {
      String actionOrder = comp.getSettings().getToolbarActionOrder(toolbarName);

      JToolBar toolbar = new JToolBar();
      toolbar.setRollover(true);
      String[] act = Utils.tokenize(actionOrder, ACTION_DELIMITER);

      for (int i = 0; i < act.length; i++) {
         if (act[i].equals(ACTION_SEPARATOR)) {
            toolbar.addSeparator();
         } else if (act[i].startsWith(JAWE_STANDARD_MENU_PREFIX)) {
            toolbar.add(JaWEManager.getInstance()
               .getJaWEController()
               .getJaWEActions()
               .getActionToolbar(act[i]));
         } else if (act[i].startsWith(JAWE_STANDARD_ACTION_PREFIX)) {
            toolbar.add(JaWEManager.getInstance()
               .getJaWEController()
               .getJaWEActions()
               .getActionButton(act[i].substring(11)));
         } else if (act[i].startsWith(SUBMENU_PREFIX)) {
            toolbar.add(createToolbar(act[i].substring(1), comp));
         } else {
            JaWEAction ja = comp.getSettings().getAction(act[i]);
            if (ja != null) {
               toolbar.add(createToolbarButton(ja, comp));
            }
         }
      }

      toolbar.setName(comp.getSettings().getLanguageDependentString(toolbarName
                                                                    + LABEL_POSTFIX));

      return toolbar;
   }

   public static JButton createToolbarButton(JaWEAction ja, JaWEComponent comp) {
      Action a = ja.getAction();
      String aname = null;
      if (a != null) {
         aname = (String) a.getValue(Action.NAME);
      }
      String depName = ja.getLangDepName();
      String label = comp.getSettings().getLanguageDependentString(depName
                                                                   + LABEL_POSTFIX);
      if (aname == null) {
         aname = depName;
      }
      if (label == null) {
         label = aname;
      }
      JButton b = null;

      ImageIcon ai = ja.getIcon();
      if (ai != null) {
         if (a instanceof NewActionBase && comp instanceof ChoiceButtonListener) {
            b = new JaWETypeChoiceButton(JaWEType.class,
                                         ((NewActionBase) a).getXPDLTypeClass(),
                                         (ChoiceButtonListener) comp,
                                         ai);
         } else if (comp instanceof NewStandardXPDLElementEditor) {
            // CUSTOM
            b = new JButton(label, ai) {
               public float getAlignmentY() {
                  return 0.5f;
               }
            };
            // END CUSTOM
         } else {
            b = new JButton(ai) {
               public float getAlignmentY() {
                  return 0.5f;
               }
            };
         }
      } else {
         if (a instanceof NewActionBase && comp instanceof ChoiceButtonListener) {
            b = new JaWETypeChoiceButton(JaWEType.class,
                                         ((NewActionBase) a).getXPDLTypeClass(),
                                         (ChoiceButtonListener) comp,
                                         ai);
         } else {
            b = new JButton(label) {
               public float getAlignmentY() {
                  return 0.5f;
               }
            };
         }
      }

      b.setName(aname);
      b.setMargin(new Insets(1, 1, 1, 1));
      b.setRequestFocusEnabled(false);

      b.setActionCommand(aname);
      if (a != null) {
         b.addActionListener(a);
         b.setEnabled(a.isEnabled());
         a.addPropertyChangeListener(new ButtonPropertyChangedListener(b));
      } else {
         b.setEnabled(false);
      }
      String tip = comp.getSettings().getLanguageDependentString(depName
                                                                 + TOOLTIP_POSTFIX);
      if (tip != null) {
         b.setToolTipText(tip);
      }

      return b;
   }

   protected static JMenu createMenu(String actionOrder,
                                     JaWEComponent comp,
                                     boolean addBCListener) {
      JMenu menu = new JMenu();

      String[] act = Utils.tokenize(actionOrder, ACTION_DELIMITER);

      for (int i = 0; i < act.length; i++) {
         if (act[i].equals(ACTION_SEPARATOR)) {
            menu.addSeparator();
         } else if (act[i].startsWith(JAWECOMPONENT_AS_MENU_PREFIX)) {
            String className = (String) comp.getSettings()
               .getSetting(act[i].substring(1) + CLASSNAME_POSTFIX);
            String settingsName = (String) comp.getSettings()
               .getSetting(act[i].substring(1) + SETTINGSNAME_POSTFIX);
            JMenu subMenu = getExternalMenu(className, settingsName);
            BarFactory.setAccelerator(subMenu, comp.getSettings()
               .getLanguageDependentString(act[i].substring(1) + ACCELERATION_POSTFIX));
            BarFactory.setMnemonic(subMenu, comp.getSettings()
               .getLanguageDependentString(act[i].substring(1) + MNEMONIC_POSTFIX));
            menu.add(subMenu);
         } else if (act[i].startsWith(JAWE_STANDARD_MENU_PREFIX)) {
            menu.add(JaWEManager.getInstance()
               .getJaWEController()
               .getJaWEActions()
               .getActionMenu(act[i], addBCListener));
         } else if (act[i].startsWith(JAWE_STANDARD_ACTION_PREFIX)) {
            menu.add(JaWEManager.getInstance()
               .getJaWEController()
               .getJaWEActions()
               .getActionMenuItem(act[i].substring(11), addBCListener));
         } else if (act[i].startsWith(SUBMENU_PREFIX)) {
            menu.add(createSubMenu(act[i].substring(1), comp, addBCListener));
         } else {
            JaWEAction ja = comp.getSettings().getAction(act[i]);
            if (ja != null) {
               menu.add(createMenuItem(ja, comp, addBCListener));
            }
         }
      }

      return menu;
   }

   protected static JMenu createSubMenu(String name,
                                        JaWEComponent comp,
                                        boolean addBCListener) {
      JMenu menu = new JMenu();

      String depName = (String) comp.getSettings()
         .getSetting(name + LANGUAGEDEPENDENTNAME_POSTFIX);
      String langDepName = comp.getSettings().getLanguageDependentString(depName
                                                                         + LABEL_POSTFIX);
      if (langDepName == null) {
         langDepName = name;
      }

      BarFactory.setAccelerator(menu, comp.getSettings()
         .getLanguageDependentString(depName + ACCELERATION_POSTFIX));
      BarFactory.setMnemonic(menu, comp.getSettings()
         .getLanguageDependentString(depName + MNEMONIC_POSTFIX));

      menu.setText(langDepName);

      String actionOrder = comp.getSettings().getMenuActionOrder(name);
      String[] act = Utils.tokenize(actionOrder, ACTION_DELIMITER);
      int cnt=0;
      for (int i = 0; i < act.length; i++) {
         if (act[i].equals(ACTION_SEPARATOR)) {
            menu.addSeparator();
            cnt++;
         } else if (act[i].startsWith(JAWECOMPONENT_AS_MENU_PREFIX)) {
            String className = (String) comp.getSettings()
               .getSetting(act[i].substring(1) + CLASSNAME_POSTFIX);
            String settingsName = (String) comp.getSettings()
               .getSetting(act[i].substring(1) + SETTINGSNAME_POSTFIX);
            JMenu subMenu = getExternalMenu(className, settingsName);
            if (subMenu != null) {
               BarFactory.setAccelerator(subMenu, comp.getSettings()
                  .getLanguageDependentString(act[i].substring(1) + ACCELERATION_POSTFIX));
               BarFactory.setMnemonic(subMenu, comp.getSettings()
                  .getLanguageDependentString(act[i].substring(1) + MNEMONIC_POSTFIX));
               menu.add(subMenu);
               cnt++;
            } else {
               System.out.println("Can't create ext meny "
                                  + settingsName + " for cn " + className);
            }
         } else if (act[i].startsWith(JAWE_STANDARD_MENU_PREFIX)) {
            menu.add(JaWEManager.getInstance()
               .getJaWEController()
               .getJaWEActions()
               .getActionMenu(act[i], addBCListener));
            cnt++;
         } else if (act[i].startsWith(JAWE_STANDARD_ACTION_PREFIX)) {
            menu.add(JaWEManager.getInstance()
               .getJaWEController()
               .getJaWEActions()
               .getActionMenuItem(act[i].substring(11), addBCListener));
            cnt++;
         } else if (act[i].startsWith(SUBMENU_PREFIX)) {
            JMenu sm=createSubMenu(act[i], comp, addBCListener);
            if (sm!=null) {
               menu.add(sm);
               cnt++;
            }
         } else {
            JaWEAction ja = comp.getSettings().getAction(act[i]);
            if (ja != null) {
               menu.add(createMenuItem(ja, comp, addBCListener));
               cnt++;
            }
         }
      }

      if (cnt>0) {
         return menu;
      }
      return null;
   }

   protected static JMenu getExternalMenu(String className, String settingsClassName) {
      try {
         Constructor sc = Class.forName(settingsClassName).getConstructor(new Class[] {});
         JaWEComponentSettings settings = (JaWEComponentSettings) sc.newInstance(new Object[0]);

         Constructor c = Class.forName(className).getConstructor(new Class[] {
            JaWEComponentSettings.class
         });
         JaWEComponent jc = (JaWEComponent) c.newInstance(new Object[] {
            settings
         });
         return (JMenu) (jc.getView());
      } catch (Throwable thr) {
      }
      return null;
   }

   public static JMenuItem createMenuItem(JaWEAction ja,
                                          JaWEComponent comp,
                                          boolean addBCListener) {
      Action a = ja.getAction();

      String aname = null;
      if (a != null) {
         aname = (String) a.getValue(Action.NAME);
      }
      String depName = ja.getLangDepName();
      if (aname == null) {
         aname = depName;
      }

      if (depName == null) {
         depName = aname;
      }

      String label = comp.getSettings().getLanguageDependentString(depName
                                                                   + LABEL_POSTFIX);
      if (label == null) {
         label = aname;
      }

      JMenuItem mi = new JMenuItem(label);
      mi.setName(aname);

      ImageIcon ai = ja.getIcon();
      if (ai != null) {
         mi.setHorizontalTextPosition(SwingConstants.RIGHT);
         mi.setIcon(ai);
      }

      BarFactory.setAccelerator(mi, comp.getSettings()
         .getLanguageDependentString(depName + ACCELERATION_POSTFIX));
      BarFactory.setMnemonic(mi, comp.getSettings()
         .getLanguageDependentString(depName + MNEMONIC_POSTFIX));

      mi.setActionCommand(aname);
      if (a != null) {
         mi.addActionListener(a);
         if (addBCListener) {
            a.addPropertyChangeListener(new ButtonPropertyChangedListener(mi));
         }
         mi.setEnabled(a.isEnabled());
      } else {
         mi.setEnabled(false);
      }

      return mi;
   }

   public static void setMnemonic(JMenuItem mi, String mnemonic) {
      if (mnemonic != null && mnemonic.length() > 0) {
         mi.setMnemonic(mnemonic.toCharArray()[0]);
      }
   }

   public static void setAccelerator(JMenuItem mi, String accel) {
      if (accel != null) {
         try {
            int mask = 0;
            if (accel.startsWith(CTRL_PREFIX)) {
               mask += ActionEvent.CTRL_MASK;
               accel = accel.substring(CTRL_PREFIX.length() + 1);
            }
            if (accel.startsWith(SHIFT_PREFIX)) {
               mask += ActionEvent.SHIFT_MASK;
               accel = accel.substring(SHIFT_PREFIX.length() + 1);
            }
            if (accel.startsWith(ALT_PREFIX)) {
               mask += ActionEvent.ALT_MASK;
               accel = accel.substring(ALT_PREFIX.length() + 1);
            }
            int key = KeyEvent.class.getField("VK_" + accel).getInt(null);
            mi.setAccelerator(KeyStroke.getKeyStroke(key, mask));
         } catch (Exception e) {
            System.err.println("Error while assigning accelerator !!!");
         }
      }
   }
}
TOP

Related Classes of org.enhydra.jawe.BarFactory

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.