Package com.scriptographer.ui

Source Code of com.scriptographer.ui.MenuGroup

/*
* Scriptographer
*
* This file is part of Scriptographer, a Scripting Plugin for Adobe Illustrator
* http://scriptographer.org/
*
* Copyright (c) 2002-2010, Juerg Lehni
* http://scratchdisk.com/
*
* All rights reserved. See LICENSE file for details.
*
* File created on 19.02.2005.
*/

package com.scriptographer.ui;

import java.util.ArrayList;

import com.scratchdisk.util.IntMap;
import com.scriptographer.ScriptographerException;

/*
* Theoretically MenuItem and MenuGroup would belong to the AI package, not UI
* But as these are the only classes dealing with the interface there, they were
* moved here instead, where they make more sense.
*/

/**
* @author lehni
*/
public class MenuGroup extends NativeObject {
  // AIMenuGroups.h:
  public static final MenuGroup
    GROUP_ABOUT               = new MenuGroup("About"),

    GROUP_OPEN                 = new MenuGroup("Open Document"),
    GROUP_RECENT              = new MenuGroup("Recent Files"),
    GROUP_CLOSE               = new MenuGroup("Close Document"),
    GROUP_SAVE                 = new MenuGroup("Save Document"),
    GROUP_SAVE_FOR              = new MenuGroup("Save For"),
    GROUP_IMPORT               = new MenuGroup("Import"),
    GROUP_PLACE               = new MenuGroup("Place Document"),
    GROUP_EXPORT               = new MenuGroup("Export Document"),
    GROUP_DOCUMENT_UTILITIES        = new MenuGroup("Document Utilities"),
    GROUP_DOCUMENT_INTERCHANGE        = new MenuGroup("Document Interchange"),
    GROUP_PRINT                = new MenuGroup("Print"),
    GROUP_SEND                = new MenuGroup("Send Document"),

    GROUP_APPLICATION_UTILITIES        = new MenuGroup("Application Utilities"),
    GROUP_QUIT                = new MenuGroup("Quit"),

    GROUP_UNDO                = new MenuGroup("Undo"),
    GROUP_PASTE_UTILITIES          = new MenuGroup("Paste Utilities"),
    GROUP_SELECT               = new MenuGroup("Select"),      // Select menu- internal commands
    GROUP_SELECT_EXTERNAL          = new MenuGroup("SelectExternal")// Select menu- external commands,
    GROUP_EDITTEXT              = new MenuGroup("Edit Text"),      // Find/Replace, Spell Check
    GROUP_EDIT                 = new MenuGroup("Edit"),
    GROUP_PRESETS              = new MenuGroup("Presets Group"),    // PDF, Transparency, Print presets

    GROUP_SAME                = new MenuGroup("Same"),
    GROUP_SELECT_OBJECT            = new MenuGroup("SelectObject"),

    GROUP_PREFERENCES            = new MenuGroup("Preferences"),
    GROUP_EDIT_UTILITIES          = new MenuGroup("Edit Utilities"),
    GROUP_CLIPBOARD             = new MenuGroup("Clipboard"),

    GROUP_REPEAT              = new MenuGroup("Repeat"),
    GROUP_ARRANGE_TRANSFORM          = new MenuGroup("Arrange Transform"),
    GROUP_ARRANGE_MOVE            = new MenuGroup("Arrange Move"),
    GROUP_ARRANGE_GROUP           = new MenuGroup("Arrange Group"),
    GROUP_ARRANGE_ATTRIBUTES        = new MenuGroup("Arrange Attributes"),

    GROUP_VIEW_MODE              = new MenuGroup("View Mode"),
    GROUP_VIEW_ADORNMENTS          = new MenuGroup("View Adornments"),
    GROUP_VIEW                 = new MenuGroup("View"),
    GROUP_VIEW_UTILITIES           = new MenuGroup("View Utilities"),
    GROUP_VIEW_EXTENSION           = new MenuGroup("View Extension"),

    GROUP_OBJECT_ATTRIBUTES          = new MenuGroup("Object Attributes"),
    GROUP_OBJECT_UTILITIES          = new MenuGroup("Object Utilities"),
    GROUP_OBJECTS               = new MenuGroup("Objects"),
    GROUP_OBJECT_PATHS             = new MenuGroup("Objects Paths"),
    GROUP_OBJECT_PATHS_POPUP         = new MenuGroup("Objects Paths Popup"),
    GROUP_LOCK                = new MenuGroup("Lock"),
    GROUP_HIDE                = new MenuGroup("Hide"),

    GROUP_GUIDES               = new MenuGroup("Guides"),
    GROUP_MASK                 = new MenuGroup("Masks"),
    GROUP_COMPOUNDPATHS            = new MenuGroup("Compound Paths"),
    GROUP_CROPMARKS             = new MenuGroup("Crop Marks"),
    GROUP_GRAPHS              = new MenuGroup("Graphs"),
    GROUP_BLOCKS               = new MenuGroup("Blocks"),
    GROUP_WRAP                 = new MenuGroup("Wrap"),
    GROUP_TYPE_TEXTPATH            = new MenuGroup("Text Path Type"),
    GROUP_TYPE_ATTRIBUTES           = new MenuGroup("Type Attributes"),
    GROUP_TYPE_PALETTES           = new MenuGroup("Type Palettes"),
    GROUP_TYPE_LAYOUT             = new MenuGroup("Type Layout"),
    GROUP_TYPE_UTILITIES           = new MenuGroup("Type Utilities"),
    GROUP_TYPE_PLUGINS1            = new MenuGroup("Type Plugins1"),
    GROUP_TYPE_PLUGINS2            = new MenuGroup("Type Plugins2"),
    GROUP_TYPE_ASIAN_OPTIONS        = new MenuGroup("Type Asian Options"),

    GROUP_TYPE_SIZE_UTILITIES         = new MenuGroup("Type Size Utilities"),
    GROUP_TYPE_SIZE             = new MenuGroup("Type Size"),
    GROUP_TYPE_LEADING_UTILITIES      = new MenuGroup("Type Leading Utilities"),
    GROUP_TYPE_LEADING             = new MenuGroup("Type Leading"),
    GROUP_TYPE_ALIGNMENT          = new MenuGroup("Type Alignment"),

    GROUP_FILTER_UTILITIES          = new MenuGroup("Filter Utilities"),

    GROUP_EFFECTS              = new MenuGroup("Effects"),

    GROUP_HELP                 = new MenuGroup("Help Menu"),

    // The following groups do not show up in the menu bar. They only
    // show up in the keyboard shortcuts dialog.
    GROUP_HIDDEN_OTHER_SELECT        = new MenuGroup("Hidden Other Select"),
    GROUP_HIDDEN_OTHER_TEXT          = new MenuGroup("Hidden Other Text"),
    GROUP_HIDDEN_OTHER_OBJECT        = new MenuGroup("Hidden Other Object"),
    GROUP_HIDDEN_OTHER_PALETTE        = new MenuGroup("Hidden Other Palette"),
    GROUP_HIDDEN_OTHER_MISC          = new MenuGroup("Hidden Other Misc"),

    GROUP_WINDOW_UTILITIES           = new MenuGroup("Window Utilities"),
    GROUP_TOOL_PALETTES            = new MenuGroup("Tool Palettes"),
    GROUP_WINDOW_LIBARIES          = new MenuGroup("Window Libraries"),

    /////////////////////////////////////////////////
    //
    // The menus below are added by plug-ins, not by
    // the application.  If you intend to use one, your
    // plug-in should add it (adding a menu group twice
    // is ok; the second call simply returns the existing
    // group reference).
    //
    // When adding a group, be sure to use the option
    // indicated in below the group
    //
    /////////////////////////////////////////////////

    GROUP_DOCUMENT_INFO            = new MenuGroup("AIPlugin Document Info"),

    GROUP_OBJECT_RASTER            = new MenuGroup("AIPlugin Object Raster"),

    GROUP_ARRANGE_TRANSFORM_MULTIPLE    = new MenuGroup("Arrange Multiple Transform"),
    GROUP_ARRANGE_TRANSFORM_MULTIPLE_NEAR  = GROUP_ARRANGE_TRANSFORM_MULTIPLE,

    GROUP_OBJECT_PATHS_POPOUT        = new MenuGroup("More Menus in the Object Path Popout"),
    GROUP_OBJECT_PATHS_POPOUT_NEAR      = GROUP_OBJECT_PATHS_POPUP,

    GROUP_DOCUMENT_SUPPORT          = new MenuGroup("AIPlugin Document Support"),

    GROUP_ASSET_MANAGEMENT          = new MenuGroup("Adobe Plugin Asset Mgmt"),
    GROUP_WORKGROUP              = GROUP_DOCUMENT_SUPPORT,

    //Scripting Plugin
    GROUP_SCRIPTS               = new MenuGroup("ScriptsMenuGroup");

  public static final int
    OPTION_NONE                = 0,
    OPTION_SORTED_ALPHABETICALLY      = 1 << 0,
    OPTION_SEPARATOR_ABOVE           = 1 << 1,
    OPTION_SEPARATOR_BELOW          = 1 << 2,
    OPTION_ADD_ABOVE            = 1 << 4;


  protected String name;

  private static IntMap<MenuGroup> groups = null;

  private static int uniqueId = 0;

  /**
   * Used only internally. Pass null for name to have a unique
   * name produced for the group.
   *
   * @param name the group's name.
   */
  private MenuGroup(String name) {
    this.name = name != null ? name : "Scriptographer MenuGroup " + (++uniqueId);
    if (name == null) {
      IntMap<MenuGroup> groups = getGroups();
      Integer handle = groups.keyOf(this);
      if (handle != null) {
        // Take over the handle from the other item
        groups.get(handle).handle = 0;
        this.handle = handle;
      }
    }
  }

  /**
   * @param near
   * @param options MenuGroup.OPTION_*
   */
  public MenuGroup(MenuGroup near, int options) {
    this(null);
    if (handle == 0) {
      // use this.name, instead of name, because it was modified
      // in the constructor above
      handle = nativeCreate(name, near.name, 0, options);

      if (handle == 0)
        throw new ScriptographerException("Unable to create MenuGroup.");
    } else {
      setOptions(options);
    }
    putGroup(this);
  }

  /**
   * Creates a sub-menu group at parent
   * @param parent
   * @param options MenuGroup.OPTION_*
   */
  public MenuGroup(MenuItem parent, int options) {
    this(null);
    if (handle == 0) {
      // if parent already has a subGroup, appendChild this one after:
      MenuGroup subGroup = parent.getSubGroup();
      if (subGroup != null) {
        handle = nativeCreate(this.name, subGroup.name, 0, options);
      } else {
        handle = nativeCreate(this.name, null, parent.handle, options);
      }
 
      if (handle == 0)
        throw new ScriptographerException("Unable to create MenuGroup.");
    } else {
      setOptions(options);
    }
    putGroup(this);
  }

  /**
   * Used in wrapGroupHandle
   *
   * @param handle
   * @param name
   */
  protected MenuGroup(int handle, String name) {
    super(handle);
    this.name = name;
    putGroup(this);
  }

  /**
   * Called from the native environment to wrap a MenuGroup:
   */
  protected static MenuGroup wrapHandle(int handle, String name) {
    MenuGroup group = getGroup(handle);
    if (group == null) {
      group = new MenuGroup(handle, name);
    } else {
      group.name = name;
    }
    return group;
  }

  private static native int nativeCreate(String name, String nearGroup,
      int parentItemHandle, int options);

  public boolean equals(Object obj) {
    if (obj instanceof MenuGroup) {
      MenuGroup group = (MenuGroup) obj;
      return name != null && name.equals(group.name)
          || name == group.name;
    }
    return false;
  }

  public native void setOptions(int options);
  public native int getOptions();

  private static void putGroup(MenuGroup group) {
    getGroups().put(group.handle, group);
  }

  private static MenuGroup getGroup(int handle) {
    return getGroups().get(handle);
  }

  private static IntMap<MenuGroup> getGroups() {
    if (groups == null) {
      groups = new IntMap<MenuGroup>();
      for (MenuGroup group : nativeGetGroups())
        groups.put(group.handle, group);
    }
    return groups;
  }

  private static native ArrayList<MenuGroup> nativeGetGroups();
}
TOP

Related Classes of com.scriptographer.ui.MenuGroup

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.