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));
}
}
};
}
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;
}
};
}
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();
}
}
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);
}
}
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;
}
Aggregations