org.gjt.sp.jedit

## Class JEditActionSet<E extends JEditAbstractEditAction>

- java.lang.Object
- - org.gjt.sp.jedit.JEditActionSet<E>

- All Implemented Interfaces:
    InputHandlerProvider
  Direct Known Subclasses:
    ActionSet, StandaloneTextArea.StandaloneActionSet

      public abstract class JEditActionSet<E extends JEditAbstractEditAction>
      extends java.lang.Object
      implements InputHandlerProvider

  A set of actions, either loaded from an XML file, or constructed at runtime by a plugin.

  ### Action sets loaded from XML files

  Action sets are read from these files inside the plugin JAR:
  - `actions.xml` - actions made available for use in jEdit views, including the view's Plugins menu, the tool bar, etc.
  - `browser.actions.xml` - actions for the file system browser's Plugins menu.
  An action definition file has the following form:

      <?xml version="1.0"?>
      <!DOCTYPE ACTIONS SYSTEM "actions.dtd">
      <ACTIONS>
          <ACTION NAME="some-action">
              <CODE>
                  // BeanShell code evaluated when the action is invoked
              </CODE>
          </ACTION>
          <ACTION NAME="some-toggle-action">
              <CODE>
                  // BeanShell code evaluated when the action is invoked
              </CODE>
              <IS_SELECTED>
                  // BeanShell code that should evaluate to true or false
              </IS_SELECTED>
          </ACTION>
      </ACTIONS>

  The following elements are valid:
  - `ACTIONS` is the top-level element and refers to the set of actions used by the plugin.
  - An `ACTION` contains the data for a particular action. It has three attributes: a required `NAME`; an optional `NO_REPEAT`, which is a flag indicating whether the action should not be repeated with the C+ENTER command; and an optional `NO_RECORD` which is a a flag indicating whether the action should be recorded if it is invoked while the user is recording a macro. The two flag attributes can have two possible values, "TRUE" or "FALSE". In both cases, "FALSE" is the default if the attribute is not specified.
  - An `ACTION` can have two child elements within it: a required `CODE` element which specifies the BeanShell code that will be executed when the action is invoked, and an optional `IS_SELECTED` element, used for checkbox menu items. The `IS_SELECTED` element contains BeanShell code that returns a boolean flag that will determine the state of the checkbox.
  Each action must have a property `name.label` containing the action's menu item label.

  ### View actions

  Actions defined in `actions.xml` can be added to the view's Plugins menu; see `EditPlugin`. The action code may use any standard predefined BeanShell variable; see `BeanShell`.

  ### File system browser actions

  Actions defined in `actions.xml` can be added to the file system browser's Plugins menu; see `EditPlugin`. The action code may use any standard predefined BeanShell variable, in addition to a variable `browser` which contains a reference to the current `VFSBrowser` instance.

  File system browser actions should not define `<IS_SELECTED>` blocks.

  ### Custom action sets

  Call `jEdit.addActionSet(ActionSet)` to add a custom action set to jEdit's action context. You must also call `initKeyBindings()` for new action sets. Don't forget to call `jEdit.removeActionSet(ActionSet)` before your plugin is unloaded, too.
  Since:
    jEdit 4.3pre13
  See Also:
    `jEdit.getActionContext()`, `VFSBrowser.getActionContext()`, `JEditActionContext.getActionNames()`, `ActionContext.getAction(String)`, `jEdit.addActionSet(ActionSet)`, `jEdit.removeActionSet(ActionSet)`, `PluginJAR.getActionSet()`, `BeanShell`, `View`

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected java.util.Hashtable<java.lang.String,java.lang.Object>` | `actions`
    `protected boolean` | `loaded`
    `protected static java.lang.Object` | `placeholder`
    `protected java.net.URL` | `uri`

  - ### Constructor Summary

    Constructors
    Modifier | Constructor and Description
    --- | ---
    `protected` | `JEditActionSet()` Creates a new action set.
    `protected` | `JEditActionSet(java.lang.String[] cachedActionNames, java.net.URL uri)` Creates a new action set.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `addAction(E action)` Adds an action to the action set.
    `boolean` | `contains(java.lang.String action)` Returns if this action set contains the specified action.
    `protected abstract JEditAbstractEditAction` | `createBeanShellAction(java.lang.String actionName, java.lang.String code, java.lang.String selected, boolean noRepeat, boolean noRecord, boolean noRememberLast)` This method should be implemented to return an action that will execute the given code
    `E` | `getAction(java.lang.String name)` Returns an action with the specified name.
    `int` | `getActionCount()` Returns the number of actions in the set.
    `java.lang.String[]` | `getActionNames()` Returns an array of all action names in this action set.
    `E[]` | `getActions()` Returns an array of all actions in this action set.
    `protected abstract E[]` | `getArray(int size)` Returns an empty array E[].
    `java.lang.String[]` | `getCacheableActionNames()` Returns an array of all action names in this action set that should be cached; namely, `BeanShellAction`s.
    `protected abstract java.lang.String` | `getProperty(java.lang.String name)` Returns a property for the given name.
    `void` | `initKeyBindings()` Initializes the action set's key bindings.
    `void` | `load()` Forces the action set to be loaded.
    `void` | `removeAction(java.lang.String name)` Removes an action from the action set.
    `void` | `removeAllActions()` Removes all actions from the action set.
    `int` | `size()` Returns the number of actions in this action set.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

    - ### Methods inherited from interface org.gjt.sp.jedit.input.InputHandlerProvider

      `getInputHandler`

- - ### Field Detail

    - #### actions

          protected java.util.Hashtable<java.lang.String,java.lang.Object> actions

    - #### uri

          protected java.net.URL uri

    - #### loaded

          protected boolean loaded

    - #### placeholder

          protected static final java.lang.Object placeholder

  - ### Constructor Detail

    - #### JEditActionSet

          protected JEditActionSet()

      Creates a new action set.
      Since:
        jEdit 4.3pre13

    - #### JEditActionSet

          protected JEditActionSet(java.lang.String[] cachedActionNames,
                        java.net.URL uri)

      Creates a new action set.
      Parameters:
        `cachedActionNames` - The list of cached action names
        `uri` - The actions.xml URI
      Since:
        jEdit 4.3pre13

  - ### Method Detail

    - #### addAction

          public void addAction(E action)

      Adds an action to the action set.
      Parameters:
        `action` - The action
      Since:
        jEdit 4.0pre1

    - #### removeAction

          public void removeAction(java.lang.String name)

      Removes an action from the action set.
      Parameters:
        `name` - The action name
      Since:
        jEdit 4.0pre1

    - #### removeAllActions

          public void removeAllActions()

      Removes all actions from the action set.
      Since:
        jEdit 4.0pre1

    - #### getAction

          public E getAction(java.lang.String name)

      Returns an action with the specified name.

      Deferred loading: this will load the action set if necessary.

      Parameters:
        `name` - The action name
      Since:
        jEdit 4.0pre1

    - #### getActionCount

          public int getActionCount()

      Returns the number of actions in the set.
      Since:
        jEdit 4.0pre1

    - #### getActionNames

          public java.lang.String[] getActionNames()

      Returns an array of all action names in this action set.
      Since:
        jEdit 4.2pre1

    - #### getCacheableActionNames

          public java.lang.String[] getCacheableActionNames()

      Returns an array of all action names in this action set that should be cached; namely, `BeanShellAction`s.
      Since:
        jEdit 4.2pre1

    - #### getArray

          protected abstract E[] getArray(int size)

      Returns an empty array E[]. I know it is bad, if you find a method to instantiate a generic Array, tell me
      Parameters:
        `size` - the size of the array
      Returns:
        the empty array

    - #### getActions

          public E[] getActions()

      Returns an array of all actions in this action set.

      Deferred loading: this will load the action set if necessary.

      Since:
        jEdit 4.0pre1

    - #### contains

          public boolean contains(java.lang.String action)

      Returns if this action set contains the specified action.
      Parameters:
        `action` - The action
      Since:
        jEdit 4.2pre1

    - #### size

          public int size()

      Returns the number of actions in this action set.
      Since:
        jEdit 4.2pre2

    - #### load

          public void load()

      Forces the action set to be loaded. Plugins and macros should not call this method.
      Since:
        jEdit 4.2pre1

    - #### createBeanShellAction

          protected abstract JEditAbstractEditAction createBeanShellAction(java.lang.String actionName,
                                                      java.lang.String code,
                                                      java.lang.String selected,
                                                      boolean noRepeat,
                                                      boolean noRecord,
                                                      boolean noRememberLast)

      This method should be implemented to return an action that will execute the given code
      Since:
        4.3pre13

    - #### initKeyBindings

          public void initKeyBindings()

      Initializes the action set's key bindings. jEdit calls this method for all registered action sets when the user changes key bindings in the Global Options dialog box.

      Note if your plugin adds a custom action set to jEdit's collection, it must also call this method on the action set after adding it.

      Since:
        jEdit 4.2pre1

    - #### getProperty

          protected abstract java.lang.String getProperty(java.lang.String name)

      Returns a property for the given name. In jEdit it will returns a jEdit.getProperty(name), but it can return something else for a standalone textarea.
      Parameters:
        `name` - the property name
      Returns:
        the property value
      Since:
        4.3pre13