protected void layOutPropertyPanel(int deviceTypes, SWTList rowRenderer) {
    Composite propertiesComposite = editor.getSWTPropertiesComposite();

    addHandOnKeyboardToStart(deviceTypes, propertiesComposite);

    frameList = rowRenderer;
    frameList.setTable(
        new Table(propertiesComposite, SWT.SINGLE | SWT.BORDER | SWT.FULL_SELECTION));

    demonstrateScriptButton = new Button(propertiesComposite, SWT.NONE);
    demonstrateScriptButton.setText(startDemonstratingLabel);
    shell.setDefaultButton(demonstrateScriptButton);
    demonstrateScriptButton.addSelectionListener(
        new SWTWidgetChangeHandler(SEFrameChooserLID.OpenScriptEditor));

    lIDMap.addWidget(
        SEFrameChooserLID.OpenScriptEditor, demonstrateScriptButton, ListenerIdentifierMap.NORMAL);

    closeButton = new Button(propertiesComposite, SWT.NONE);
    closeButton.setText(L10N.get("SE.Close", "Close"));
    closeButton.addSelectionListener(new SWTWidgetChangeHandler(CogToolLID.CloseWindow));

    propertiesComposite.setLayout(new FormLayout());

    // First thing resides at the top
    FormData data = new FormData();
    data.top = new FormAttachment(0, 0);
    data.left = new FormAttachment(0, 5);
    data.right = new FormAttachment(100, 0);

    positionStartLocParms(data);

    frameList.getTable().setLayoutData(data);

    data = new FormData();
    data.bottom = new FormAttachment(100, 0);
    data.left = new FormAttachment(0, 5);
    demonstrateScriptButton.setLayoutData(data);

    data = new FormData();
    data.top = new FormAttachment(demonstrateScriptButton, 0, SWT.TOP);
    data.left = new FormAttachment(demonstrateScriptButton, 5, SWT.RIGHT);
    data.bottom = new FormAttachment(100, 0);
    closeButton.setLayoutData(data);

    SashUtility.createVerticalSash(
        editor.bodyComposite,
        FRAME_LIST_WIDTH,
        250,
        SWT.RIGHT,
        propertiesComposite,
        editor.getPropFormData(),
        editor.scrollComposite,
        editor.getScrollFormData());
  }
Beispiel #2
0
  /**
   * Check that the given action is not the same as that of another transition from the given
   * source, where the other transition is different from the given transition. Thus, if checking
   * when creating a new transition, the given currentTransition will be <code>null</code>.
   * Otherwise, when modifying the action of an existing transition, currentTransition should be
   * that transition.
   *
   * @param source the transition source widget/device in which the new action must be unique
   * @param action the initial action value to test
   * @param propertiess the default values for the interaction dialog box for specifying action
   *     property changes
   * @param deviceTypes the device types currently available to allow for different action
   *     possibilities when not unique
   * @param limitMode the limit on which device types can actually be used for selecting different
   *     action possibilities when not unique
   * @param currentTransition the transition that the new action value should be attached to; use
   *     <code>null</code> when creating a new transition
   * @param interaction the way to interact with the user
   * @return the created action that is not in conflict, or <code>null</code> if the user requests a
   *     cancel of the current operation
   * @author mlh
   */
  public static AAction ensureActionIsUnique(
      TransitionSource source,
      AAction action,
      ActionProperties properties,
      int deviceTypes,
      int limitMode,
      Transition currentTransition,
      ActionInteraction interaction) {
    // Check if given action has a transition on the given source
    Transition actionTransition = source.getTransition(action);

    // If not unique on this source, complain and try to get new parms.
    // To be unique, the found transition either must not exist (be null)
    // or must be the (existing) transition for the given action.
    while ((actionTransition != null) && (actionTransition != currentTransition)) {
      if (!interaction.determineNewAction(
          properties,
          deviceTypes,
          limitMode,
          action,
          source,
          currentTransition,
          L10N.get("DE.ChangeActionType", "Change Action Type"))) {
        return null; // user canceled operation
      }

      // Not canceled; build the action specified
      action = buildActionFromProperties(properties, deviceTypes, limitMode, interaction);

      // Building the action may also interact with the user
      // (such as when text is improperly specified as empty);
      // the user may have requested a cancel; if so, propagate.
      if (action == null) {
        return null;
      }

      // A "legal" Action successfully created;
      // check for uniqueness again!
      actionTransition = source.getTransition(action);
    }

    // A "legal" and non-conflicting action was created; return!
    return action;
  } // ensureActionIsUnique
  protected void layOutView(Shell parent) {
    title = new Label(parent, SWT.CENTER);
    title.setText(L10N.get("SE.PickStartFrame", "Select the Start Frame for this Script"));
    // Increase the size of the instruction line.
    // TODO:mlh fix this (use FontUtils?)!
    FontData font = new FontData("Lucida Grande", 18, 0);
    title.setFont(new Font(null, font));

    // Set up the layouts

    FormData data = new FormData();
    data.top = new FormAttachment(title, 0, SWT.CENTER);
    data.right = new FormAttachment(100, 0);
    data.left = new FormAttachment(0, 0);
    title.setLayoutData(data);

    data = new FormData();
    data.top = new FormAttachment(title, 5, SWT.BOTTOM);
    data.bottom = new FormAttachment(100, 0);
    data.left = new FormAttachment(0, 5);
    data.right = new FormAttachment(100, 0);
    editor.setLayoutData(data);
  }
public class SEFrameChooserView extends ScriptView {
  protected Composite structureView;

  protected SWTList frameList;

  protected Button demonstrateScriptButton;
  protected Button closeButton;
  protected Label title;

  public static final int MIN_WIDTH = 500;
  public static final int MIN_HEIGHT = 300;
  public static final int FRAME_LIST_WIDTH = 250;

  protected static final String startDemonstratingLabel =
      L10N.get("SE.DemonstrateScript", "Start Demonstrating");

  public static final SimpleMenuItemDefinition START_DEMONSTRATION =
      new SimpleMenuItemDefinition(startDemonstratingLabel, SEFrameChooserLID.OpenScriptEditor);

  /**
   * Return the list of needed menus This is to handle macos which is only supposed to show a
   * limited set of specific menus.
   */
  @Override
  protected MenuType[] neededMenus() {
    return new MenuFactory.MenuType[] {
      MenuFactory.MenuType.FileMenu,
      MenuFactory.MenuType.EditMenu,
      MenuFactory.MenuType.ZoomModifyMenu,
      // TODO: script menu?
      MenuFactory.MenuType.WindowMenu,
      MenuFactory.MenuType.HelpMenu
    };
  }

  /**
   * @param windowShell
   * @param listenerIDMap
   * @param transformer
   */
  public SEFrameChooserView(
      int deviceTypes,
      ListenerIdentifierMap listenerIDMap,
      ILIDTransmuter transformer,
      MenuFactory.IWindowMenuData<Project> menuData,
      CogToolScalableFigure contents,
      IFlatDraw2DMouseMotionListener motionL,
      Draw2DContextMenuUtil.MenuListener clickL,
      SWTList rowRenderer,
      Zoomable zoomer,
      Rectangle loc) {
    super(listenerIDMap, transformer, menuData, loc, DEFAULT_WIDTH, DEFAULT_HEIGHT);

    shell.setMinimumSize(MIN_WIDTH, MIN_HEIGHT);

    FormLayout propertiesLayout = new FormLayout();
    shell.setLayout(propertiesLayout);

    editor =
        new InteractionDrawingEditor(
            contents,
            motionL,
            clickL,
            getShell(),
            zoomer,
            FRAME_LIST_WIDTH,
            SWT.LEFT,
            0,
            WindowUtil.getCursor(WindowUtil.SELECT_CURSOR));

    layOutView(shell);
    layOutPropertyPanel(deviceTypes, rowRenderer);

    editor.getSWTEditorSubstrate().addListener(SWT.MenuDetect, clickL);

    frameList.addSelectionListener(
        new SelectionListener() {
          public void widgetSelected(SelectionEvent evt) {
            TableItem i = (TableItem) evt.item;
            performAction(CogToolLID.SetStartFrame, i.getData(), true);
            //                    selection.setSelectedFrame((Frame) i.getData());
          }

          public void widgetDefaultSelected(SelectionEvent evt) {
            performAction(SEFrameChooserLID.OpenScriptEditor);
          }
        });

    // Listen to Menu events on the History table.
    // Used to detect context click on the selected row.
    frameList.addListener(
        SWT.MenuDetect,
        new Listener() {
          public void handleEvent(Event arg0) {
            // xyzzy TODO: must select/deselect by pos! for Mac (unless selection occurs before
            // menudetect!
            showFrameListMenu();
          }
        });
  }

  protected void positionStartLocParms(FormData data) {
    if (mouseHandStartLoc != null) {
      FormData handLayoutData = new FormData();
      handLayoutData.bottom = new FormAttachment(demonstrateScriptButton, -5, SWT.TOP);
      handLayoutData.left = new FormAttachment(userMouseHand, 0, SWT.LEFT);
      handLayoutData.right = new FormAttachment(100, 0);

      mouseHandStartLoc.setLayoutData(handLayoutData);

      data.bottom = new FormAttachment(userMouseHand, -5, SWT.TOP);
    } else {
      data.bottom = new FormAttachment(demonstrateScriptButton, -5, SWT.TOP);
    }
  }

  public void resetDeviceTypes(int newDeviceTypes) {
    Composite propertiesComposite = editor.getSWTPropertiesComposite();

    addHandOnKeyboardToStart(newDeviceTypes, propertiesComposite);
    positionStartLocParms((FormData) frameList.getTable().getLayoutData());
    propertiesComposite.layout();
  }

  protected void layOutPropertyPanel(int deviceTypes, SWTList rowRenderer) {
    Composite propertiesComposite = editor.getSWTPropertiesComposite();

    addHandOnKeyboardToStart(deviceTypes, propertiesComposite);

    frameList = rowRenderer;
    frameList.setTable(
        new Table(propertiesComposite, SWT.SINGLE | SWT.BORDER | SWT.FULL_SELECTION));

    demonstrateScriptButton = new Button(propertiesComposite, SWT.NONE);
    demonstrateScriptButton.setText(startDemonstratingLabel);
    shell.setDefaultButton(demonstrateScriptButton);
    demonstrateScriptButton.addSelectionListener(
        new SWTWidgetChangeHandler(SEFrameChooserLID.OpenScriptEditor));

    lIDMap.addWidget(
        SEFrameChooserLID.OpenScriptEditor, demonstrateScriptButton, ListenerIdentifierMap.NORMAL);

    closeButton = new Button(propertiesComposite, SWT.NONE);
    closeButton.setText(L10N.get("SE.Close", "Close"));
    closeButton.addSelectionListener(new SWTWidgetChangeHandler(CogToolLID.CloseWindow));

    propertiesComposite.setLayout(new FormLayout());

    // First thing resides at the top
    FormData data = new FormData();
    data.top = new FormAttachment(0, 0);
    data.left = new FormAttachment(0, 5);
    data.right = new FormAttachment(100, 0);

    positionStartLocParms(data);

    frameList.getTable().setLayoutData(data);

    data = new FormData();
    data.bottom = new FormAttachment(100, 0);
    data.left = new FormAttachment(0, 5);
    demonstrateScriptButton.setLayoutData(data);

    data = new FormData();
    data.top = new FormAttachment(demonstrateScriptButton, 0, SWT.TOP);
    data.left = new FormAttachment(demonstrateScriptButton, 5, SWT.RIGHT);
    data.bottom = new FormAttachment(100, 0);
    closeButton.setLayoutData(data);

    SashUtility.createVerticalSash(
        editor.bodyComposite,
        FRAME_LIST_WIDTH,
        250,
        SWT.RIGHT,
        propertiesComposite,
        editor.getPropFormData(),
        editor.scrollComposite,
        editor.getScrollFormData());
  }

  protected void layOutView(Shell parent) {
    title = new Label(parent, SWT.CENTER);
    title.setText(L10N.get("SE.PickStartFrame", "Select the Start Frame for this Script"));
    // Increase the size of the instruction line.
    // TODO:mlh fix this (use FontUtils?)!
    FontData font = new FontData("Lucida Grande", 18, 0);
    title.setFont(new Font(null, font));

    // Set up the layouts

    FormData data = new FormData();
    data.top = new FormAttachment(title, 0, SWT.CENTER);
    data.right = new FormAttachment(100, 0);
    data.left = new FormAttachment(0, 0);
    title.setLayoutData(data);

    data = new FormData();
    data.top = new FormAttachment(title, 5, SWT.BOTTOM);
    data.bottom = new FormAttachment(100, 0);
    data.left = new FormAttachment(0, 5);
    data.right = new FormAttachment(100, 0);
    editor.setLayoutData(data);
  }

  protected static final int STANDARD_MENU = 0;
  protected static final int POSITIONAL_MENU = 1;
  protected static final int FRAME_LIST_MENU = 2;

  protected static final MenuItemDefinition[] STANDARD_ITEMS =
      new MenuItemDefinition[] {
        MenuFactory.ZOOM_IN, MenuFactory.ZOOM_OUT, MenuFactory.ZOOM_NORMAL, MenuFactory.ZOOM_FIT
      };

  protected static final MenuItemDefinition[] POSITIONAL_ITEMS =
      new MenuItemDefinition[] {
        START_DEMONSTRATION,
        MenuUtil.SEPARATOR,
        MenuFactory.ZOOM_IN,
        MenuFactory.ZOOM_OUT,
        MenuFactory.ZOOM_NORMAL,
        MenuFactory.ZOOM_FIT
      };

  protected static final MenuItemDefinition[] FRAME_LIST_ITEMS =
      new MenuItemDefinition[] {START_DEMONSTRATION};

  /**
   * Returns the set of context menus used by the view
   *
   * @return the context menus
   */
  @Override
  public MenuItemDefinition[][] getContextMenuDefinitions() {
    return new MenuItemDefinition[][] {STANDARD_ITEMS, POSITIONAL_ITEMS, FRAME_LIST_ITEMS};
  }

  public void showStandardMenu() {
    contextMenus.getMenu(STANDARD_MENU).setVisible(true);
  }

  public void showPositionalMenu() {
    contextMenus.getMenu(POSITIONAL_MENU).setVisible(true);
  }

  public void showFrameListMenu() {
    contextMenus.getMenu(FRAME_LIST_MENU).setVisible(true);
  }

  /**
   * Make FrameList available to other objects for adding listeners
   *
   * @return
   */
  public SWTList getFrameList() {
    return frameList;
  }

  @Override
  public void dispose() {
    frameList.dispose();

    super.dispose();
  }

  public void setStartDemonstrationButtonSelected(boolean selected) {
    demonstrateScriptButton.setEnabled(selected);
  }
}