Search in sources :

Example 51 with AFreeplaneAction

use of org.freeplane.core.ui.AFreeplaneAction in project freeplane by freeplane.

the class RibbonActionContributorFactory method getContributor.

/**
 *********************************************************************************
 * REQUIRED METHODS FOR INTERFACES
 *********************************************************************************
 */
public ARibbonContributor getContributor(final Properties attributes) {
    final String actionKey = attributes.getProperty("action");
    if (actionKey != null) {
        String accel = attributes.getProperty("accelerator", null);
        if (accel != null) {
            if (Compat.isMacOsX()) {
                accel = accel.replaceFirst("CONTROL", "META").replaceFirst("control", "meta");
            }
            builder.getAcceleratorManager().setDefaultAccelerator(actionKey, accel);
        }
    }
    return new ARibbonContributor() {

        private List<Component> childButtons = new ArrayList<Component>();

        public String getKey() {
            String key = attributes.getProperty("action");
            if (key == null) {
                key = attributes.getProperty("name");
            }
            return key;
        }

        public void contribute(RibbonBuildContext context, ARibbonContributor parent) {
            final String actionKey = attributes.getProperty("action");
            final boolean mandatory = Boolean.parseBoolean(attributes.getProperty("mandatory", "false").toLowerCase());
            ChildProperties childProps = new ChildProperties(parseOrderSettings(attributes.getProperty("orderPriority", "")));
            childProps.set(RibbonElementPriority.class, getPriority(attributes.getProperty("priority", "medium")));
            if (actionKey != null) {
                AFreeplaneAction action = context.getBuilder().getMode().getAction(actionKey);
                if (action != null) {
                    if (mandatory) {
                        action.putValue(MANDATORY_PROPERTY, mandatory);
                    }
                    AbstractCommandButton button;
                    if (isSelectionListener(action)) {
                        button = createCommandToggleButton(action);
                        if (context.hasChildren(context.getCurrentPath())) {
                            LogUtils.severe("RibbonActionContributorFactory.getContributor(): can't add popup menu to toggle button for action: " + context.getCurrentPath().toString());
                        }
                    } else {
                        button = createCommandButton(action);
                        if (context.hasChildren(context.getCurrentPath())) {
                            StructurePath path = context.getCurrentPath();
                            ((JCommandButton) button).setPopupCallback(getPopupPanelCallBack(path, context));
                            ((JCommandButton) button).setCommandButtonKind(CommandButtonKind.ACTION_AND_POPUP_MAIN_ACTION);
                            KeyStroke ks = context.getBuilder().getAcceleratorManager().getAccelerator(actionKey);
                            updateRichTooltip(button, action, ks);
                            updateActionState(action, button);
                        }
                    }
                    button.putClientProperty(ACTION_KEY_PROPERTY, action);
                    KeyStroke ks = context.getBuilder().getAcceleratorManager().getAccelerator(actionKey);
                    if (ks != null) {
                        button.putClientProperty(ACTION_ACCELERATOR, ks);
                        updateRichTooltip(button, action, ks);
                    }
                    getAccelChangeListener().addAction(actionKey, button);
                    builder.getMapChangeAdapter().addListener(new ActionChangeListener(action, button));
                    parent.addChild(button, childProps);
                }
            } else {
                final String name = attributes.getProperty("name");
                if (name != null) {
                    AFreeplaneAction action = ActionUtils.getDummyAction(name);
                    final JCommandButton button = new JCommandButton(ActionUtils.getActionTitle(action), ActionUtils.getActionIcon(action));
                    button.putClientProperty(ACTION_NAME_PROPERTY, action);
                    updateRichTooltip(button, action, null);
                    if (context.hasChildren(context.getCurrentPath())) {
                        StructurePath path = context.getCurrentPath();
                        button.setPopupCallback(getPopupPanelCallBack(path, context));
                        button.setCommandButtonKind(CommandButtonKind.POPUP_ONLY);
                    }
                    button.setFocusable(false);
                    parent.addChild(button, childProps);
                }
            }
        }

        private PopupPanelCallback getPopupPanelCallBack(StructurePath path, final RibbonBuildContext context) {
            childButtons.clear();
            context.processChildren(path, this);
            return new PopupPanelCallback() {

                public JPopupPanel getPopupPanel(JCommandButton commandButton) {
                    JCommandPopupMenu popupmenu = new JCommandPopupMenu();
                    for (Component comp : childButtons) {
                        if (comp instanceof JSeparator) {
                            popupmenu.addMenuSeparator();
                        } else if (comp instanceof AbstractCommandButton) {
                            AbstractCommandButton button = (AbstractCommandButton) comp;
                            AbstractCommandButton menuButton = null;
                            AFreeplaneAction action = (AFreeplaneAction) button.getClientProperty(ACTION_KEY_PROPERTY);
                            if (action != null) {
                                if (isSelectionListener(action)) {
                                    menuButton = createCommandToggleMenuButton(action);
                                    popupmenu.addMenuButton((JCommandToggleMenuButton) menuButton);
                                } else {
                                    menuButton = createCommandMenuButton(action);
                                    popupmenu.addMenuButton((JCommandMenuButton) menuButton);
                                }
                                menuButton.setEnabled(button.isEnabled());
                                menuButton.putClientProperty(ACTION_KEY_PROPERTY, action);
                                KeyStroke ks = context.getBuilder().getAcceleratorManager().getAccelerator(action.getKey());
                                updateRichTooltip(menuButton, action, ks);
                                updateActionState(action, menuButton);
                            } else {
                                action = (AFreeplaneAction) button.getClientProperty(ACTION_NAME_PROPERTY);
                                menuButton = createCommandMenuButton(action);
                                if (action != null) {
                                    menuButton.putClientProperty(ACTION_NAME_PROPERTY, action);
                                    updateRichTooltip(menuButton, action, null);
                                }
                            }
                            if (button instanceof JCommandButton) {
                                if (((JCommandButton) button).getPopupCallback() != null) {
                                    ((JCommandMenuButton) menuButton).setPopupCallback(((JCommandButton) button).getPopupCallback());
                                    ((JCommandMenuButton) menuButton).setCommandButtonKind(((JCommandButton) button).getCommandButtonKind());
                                }
                            }
                            // clear all RibbonActionListeners from the menuButton
                            for (ActionListener listener : menuButton.getListeners(ActionListener.class)) {
                                if (listener instanceof RibbonActionListener) {
                                    menuButton.removeActionListener(listener);
                                }
                            }
                            // add
                            for (ActionListener listener : button.getListeners(ActionListener.class)) {
                                if (listener instanceof RibbonActionListener) {
                                    menuButton.addActionListener(listener);
                                }
                            }
                        }
                    }
                    return popupmenu;
                }
            };
        }

        public void addChild(Object child, ChildProperties properties) {
            if (child instanceof AbstractCommandButton) {
                childButtons.add((AbstractCommandButton) child);
                Object obj = ((AbstractCommandButton) child).getClientProperty(ACTION_KEY_PROPERTY);
                if (obj != null) {
                    try {
                        builder.getMapChangeAdapter().removeListener((IChangeObserver) ((AFreeplaneAction) obj).getValue(ACTION_CHANGE_LISTENER));
                        getAccelChangeListener().removeAction(((AFreeplaneAction) obj).getKey());
                    } catch (Exception e) {
                        LogUtils.info("RibbonActionContributorFactory.getContributor(...).new ARibbonContributor() {...}.addChild(): " + e.getMessage());
                    }
                }
            }
            if (child instanceof RibbonSeparator) {
                childButtons.add(new JSeparator(JSeparator.HORIZONTAL));
            }
        }
    };
}
Also used : StructurePath(org.freeplane.core.ui.ribbon.StructureTree.StructurePath) JCommandToggleMenuButton(org.pushingpixels.flamingo.api.common.JCommandToggleMenuButton) PopupPanelCallback(org.pushingpixels.flamingo.api.common.popup.PopupPanelCallback) JCommandButton(org.pushingpixels.flamingo.api.common.JCommandButton) JSeparator(javax.swing.JSeparator) JCommandMenuButton(org.pushingpixels.flamingo.api.common.JCommandMenuButton) AFreeplaneAction(org.freeplane.core.ui.AFreeplaneAction) RibbonSeparator(org.freeplane.core.ui.ribbon.RibbonSeparatorContributorFactory.RibbonSeparator) ActionListener(java.awt.event.ActionListener) AbstractCommandButton(org.pushingpixels.flamingo.api.common.AbstractCommandButton) JCommandPopupMenu(org.pushingpixels.flamingo.api.common.popup.JCommandPopupMenu) KeyStroke(javax.swing.KeyStroke) ArrayList(java.util.ArrayList) List(java.util.List) Component(java.awt.Component)

Example 52 with AFreeplaneAction

use of org.freeplane.core.ui.AFreeplaneAction in project freeplane by freeplane.

the class RibbonMenuSecondaryGroupContributorFactory method getContributor.

/**
 *********************************************************************************
 * CONSTRUCTORS
 *********************************************************************************
 */
/**
 *********************************************************************************
 * METHODS
 *********************************************************************************
 */
/**
 *********************************************************************************
 * REQUIRED METHODS FOR INTERFACES
 *********************************************************************************
 */
public ARibbonContributor getContributor(final Properties attributes) {
    return new ARibbonContributor() {

        SecondaryEntryGroup group;

        public String getKey() {
            return attributes.getProperty("name", null);
        }

        public void contribute(RibbonBuildContext context, ARibbonContributor parent) {
            group = new SecondaryEntryGroup(TextUtils.removeTranslateComment(TextUtils.getRawText("ribbon.menu.group." + getKey())));
            context.processChildren(context.getCurrentPath(), this);
            parent.addChild(group, new ChildProperties(parseOrderSettings(attributes.getProperty("orderPriority", ""))));
        }

        public void addChild(Object child, ChildProperties properties) {
            if (child instanceof RibbonApplicationMenuEntrySecondary) {
                group.addEntry((RibbonApplicationMenuEntrySecondary) child);
            } else if (child instanceof AbstractCommandButton) {
                group.addEntry(wrapButton((AbstractCommandButton) child));
            }
        }

        private RibbonApplicationMenuEntrySecondary wrapButton(AbstractCommandButton button) {
            ActionListener listener = null;
            PopupPanelCallback callback = null;
            CommandButtonKind kind = CommandButtonKind.ACTION_ONLY;
            if (button instanceof JCommandButton) {
                if (((JCommandButton) button).getPopupCallback() != null) {
                    kind = (((JCommandButton) button).getCommandButtonKind());
                    callback = ((JCommandButton) button).getPopupCallback();
                }
            }
            for (ActionListener l : button.getListeners(ActionListener.class)) {
                if (l instanceof RibbonActionListener) {
                    listener = l;
                    break;
                }
            }
            RibbonApplicationMenuEntrySecondary entry = new RibbonApplicationMenuEntrySecondary(button.getIcon(), button.getText(), listener, kind);
            if (callback != null) {
                entry.setPopupCallback(callback);
            }
            KeyStroke ks = (KeyStroke) button.getClientProperty(RibbonActionContributorFactory.ACTION_ACCELERATOR);
            if (ks != null) {
                AFreeplaneAction action = (AFreeplaneAction) button.getClientProperty(RibbonActionContributorFactory.ACTION_KEY_PROPERTY);
                if (action != null) {
                    RichTooltip tip = RibbonActionContributorFactory.getRichTooltip(action, ks);
                    if (tip != null) {
                        entry.setActionRichTooltip(tip);
                    }
                }
            }
            return entry;
        }
    };
}
Also used : PopupPanelCallback(org.pushingpixels.flamingo.api.common.popup.PopupPanelCallback) JCommandButton(org.pushingpixels.flamingo.api.common.JCommandButton) RichTooltip(org.pushingpixels.flamingo.api.common.RichTooltip) AFreeplaneAction(org.freeplane.core.ui.AFreeplaneAction) ActionListener(java.awt.event.ActionListener) RibbonActionListener(org.freeplane.core.ui.ribbon.RibbonActionContributorFactory.RibbonActionListener) AbstractCommandButton(org.pushingpixels.flamingo.api.common.AbstractCommandButton) KeyStroke(javax.swing.KeyStroke) SecondaryEntryGroup(org.freeplane.core.ui.ribbon.RibbonMenuPrimaryContributorFactory.SecondaryEntryGroup) CommandButtonKind(org.pushingpixels.flamingo.api.common.JCommandButton.CommandButtonKind) RibbonActionListener(org.freeplane.core.ui.ribbon.RibbonActionContributorFactory.RibbonActionListener) RibbonApplicationMenuEntrySecondary(org.pushingpixels.flamingo.api.ribbon.RibbonApplicationMenuEntrySecondary)

Example 53 with AFreeplaneAction

use of org.freeplane.core.ui.AFreeplaneAction in project freeplane by freeplane.

the class MMapController method setSaved.

@Override
public void setSaved(final MapModel mapModel, final boolean saved) {
    final boolean setTitle = saved != mapModel.isSaved();
    mapModel.setSaved(saved);
    if (setTitle) {
        final Controller controller = Controller.getCurrentController();
        controller.getMapViewManager().setTitle();
        final AFreeplaneAction saveAction = controller.getModeController().getAction("SaveAction");
        if (saveAction != null)
            saveAction.setEnabled();
    }
}
Also used : AFreeplaneAction(org.freeplane.core.ui.AFreeplaneAction) MLogicalStyleController(org.freeplane.features.styles.mindmapmode.MLogicalStyleController) MTextController(org.freeplane.features.text.mindmapmode.MTextController) MapController(org.freeplane.features.map.MapController) Controller(org.freeplane.features.mode.Controller) TextController(org.freeplane.features.text.TextController) AddOnsController(org.freeplane.main.addons.AddOnsController) ResourceController(org.freeplane.core.resources.ResourceController) ViewController(org.freeplane.features.ui.ViewController) ModeController(org.freeplane.features.mode.ModeController) MLocationController(org.freeplane.features.nodelocation.mindmapmode.MLocationController) MModeController(org.freeplane.features.mode.mindmapmode.MModeController)

Example 54 with AFreeplaneAction

use of org.freeplane.core.ui.AFreeplaneAction in project freeplane by freeplane.

the class MToolbarContributor method updateMenus.

// final private ModeController modeController;
public void updateMenus(final ModeController modeController, final MenuBuilder builder) {
    final AFreeplaneAction action = modeController.getAction("IncreaseNodeFontAction");
    if (builder.contains("main_toolbar_font_name")) {
        final Container fontBox = uiFactory.createFontBox();
        final Dimension preferredSize = fontBox.getPreferredSize();
        preferredSize.width = 90;
        fontBox.setPreferredSize(preferredSize);
        builder.addComponent("main_toolbar_font_name", fontBox, action, MenuBuilder.AS_CHILD);
    }
    if (builder.contains("main_toolbar_font_size")) {
        final Container sizeBox = uiFactory.createSizeBox();
        builder.addComponent("main_toolbar_font_size", sizeBox, action, MenuBuilder.AS_CHILD);
    }
    if (builder.contains("main_toolbar_style")) {
        final Container styleBox = uiFactory.createStyleBox();
        final Dimension preferredSize = styleBox.getPreferredSize();
        preferredSize.width = 90;
        styleBox.setPreferredSize(preferredSize);
        builder.addComponent("main_toolbar_style", styleBox, action, MenuBuilder.AS_CHILD);
    }
}
Also used : AFreeplaneAction(org.freeplane.core.ui.AFreeplaneAction) Container(java.awt.Container) Dimension(java.awt.Dimension)

Example 55 with AFreeplaneAction

use of org.freeplane.core.ui.AFreeplaneAction in project freeplane by freeplane.

the class ScriptingRibbonsContributor method createScriptButton.

private JCommandMenuButton createScriptButton(final String scriptName, final String scriptPath, ExecutionMode executionMode) {
    final ScriptMetaData metaData = configuration.getMenuTitleToMetaDataMap().get(scriptName);
    final String title = scriptNameToMenuItemTitle(scriptName);
    AFreeplaneAction action = new ExecuteScriptAction(scriptName, title, scriptPath, executionMode, metaData.cacheContent(), metaData.getPermissions());
    ResizableIcon icon = ActionUtils.getActionIcon(action);
    final JCommandMenuButton scriptEntry = new JCommandMenuButton(title, icon);
    scriptEntry.setActionRichTooltip(createRichTooltip(title, metaData));
    scriptEntry.addActionListener(action);
    scriptEntry.setFocusable(false);
    scriptEntry.setEnabled(metaData.getExecutionModes().contains(executionMode));
    return scriptEntry;
}
Also used : JCommandMenuButton(org.pushingpixels.flamingo.api.common.JCommandMenuButton) AFreeplaneAction(org.freeplane.core.ui.AFreeplaneAction) ScriptMetaData(org.freeplane.plugin.script.ScriptingConfiguration.ScriptMetaData) ImageWrapperResizableIcon(org.pushingpixels.flamingo.api.common.icon.ImageWrapperResizableIcon) ResizableIcon(org.pushingpixels.flamingo.api.common.icon.ResizableIcon)

Aggregations

AFreeplaneAction (org.freeplane.core.ui.AFreeplaneAction)66 EntryAccessor (org.freeplane.core.ui.menubuilders.generic.EntryAccessor)23 Entry (org.freeplane.core.ui.menubuilders.generic.Entry)20 Test (org.junit.Test)20 Component (java.awt.Component)9 ArrayList (java.util.ArrayList)9 KeyStroke (javax.swing.KeyStroke)8 JCommandButton (org.pushingpixels.flamingo.api.common.JCommandButton)8 Container (java.awt.Container)6 ARibbonContributor (org.freeplane.core.ui.ribbon.ARibbonContributor)6 RibbonBuildContext (org.freeplane.core.ui.ribbon.RibbonBuildContext)6 Controller (org.freeplane.features.mode.Controller)6 ModeController (org.freeplane.features.mode.ModeController)6 ActionEvent (java.awt.event.ActionEvent)5 JMenuItem (javax.swing.JMenuItem)5 ResourceController (org.freeplane.core.resources.ResourceController)5 JComponent (javax.swing.JComponent)4 MModeController (org.freeplane.features.mode.mindmapmode.MModeController)4 RichTooltip (org.pushingpixels.flamingo.api.common.RichTooltip)4 PopupPanelCallback (org.pushingpixels.flamingo.api.common.popup.PopupPanelCallback)4