package org.freeplane.core.ui.ribbon.special; import java.util.ArrayList; import java.util.List; import java.util.Properties; import javax.swing.ButtonGroup; import org.freeplane.core.ui.AFreeplaneAction; import org.freeplane.core.ui.ribbon.ARibbonContributor; import org.freeplane.core.ui.ribbon.CurrentState; import org.freeplane.core.ui.ribbon.IChangeObserver; import org.freeplane.core.ui.ribbon.IRibbonContributorFactory; import org.freeplane.core.ui.ribbon.RibbonActionContributorFactory; import org.freeplane.core.ui.ribbon.RibbonBuildContext; import org.freeplane.core.util.TextUtils; import org.pushingpixels.flamingo.api.common.JCommandButton; import org.pushingpixels.flamingo.api.common.JCommandButton.CommandButtonKind; import org.pushingpixels.flamingo.api.common.JCommandToggleButton; import org.pushingpixels.flamingo.api.common.JCommandToggleMenuButton; import org.pushingpixels.flamingo.api.common.popup.JCommandPopupMenu; import org.pushingpixels.flamingo.api.common.popup.JPopupPanel; import org.pushingpixels.flamingo.api.common.popup.PopupPanelCallback; import org.pushingpixels.flamingo.api.ribbon.JRibbonBand; import org.pushingpixels.flamingo.api.ribbon.RibbonElementPriority; import org.pushingpixels.flamingo.api.ribbon.resize.CoreRibbonResizePolicies; import org.pushingpixels.flamingo.api.ribbon.resize.RibbonBandResizePolicy; public class EdgeStyleContributorFactory implements IRibbonContributorFactory { public ARibbonContributor getContributor(final Properties attributes) { return new ARibbonContributor() { public String getKey() { return attributes.getProperty("name"); } public void contribute(RibbonBuildContext context, ARibbonContributor parent) { if (parent == null) { return; } JRibbonBand band = new JRibbonBand(TextUtils.removeTranslateComment(TextUtils.getText("ribbon.band.edgeStyles")), null, null); band.setExpandButtonKeyTip("ES"); band.setCollapsedStateKeyTip("ZE"); JCommandButton styleGroupButton = new JCommandButton(TextUtils.removeTranslateComment(TextUtils.getText("edgeStyleGroupAction.text"))); styleGroupButton.setCommandButtonKind(CommandButtonKind.POPUP_ONLY); AFreeplaneAction action = context.getBuilder().getMode().getAction("EdgeStyleAsParentAction"); final JCommandToggleMenuButton styleAsParent = RibbonActionContributorFactory.createCommandToggleMenuButton(action); addDefaultToggleHandler(context, action, styleAsParent); action = context.getBuilder().getMode().getAction("EdgeStyleAction.linear"); final JCommandToggleMenuButton styleLinear = RibbonActionContributorFactory.createCommandToggleMenuButton(action); addDefaultToggleHandler(context, action, styleLinear); action = context.getBuilder().getMode().getAction("EdgeStyleAction.bezier"); final JCommandToggleMenuButton styleBezier = RibbonActionContributorFactory.createCommandToggleMenuButton(action); addDefaultToggleHandler(context, action, styleBezier); action = context.getBuilder().getMode().getAction("EdgeStyleAction.sharp_linear"); final JCommandToggleMenuButton styleSharpLinear = RibbonActionContributorFactory.createCommandToggleMenuButton(action); addDefaultToggleHandler(context, action, styleSharpLinear); action = context.getBuilder().getMode().getAction("EdgeStyleAction.sharp_bezier"); final JCommandToggleMenuButton styleSharpBezier = RibbonActionContributorFactory.createCommandToggleMenuButton(action); addDefaultToggleHandler(context, action, styleSharpBezier); action = context.getBuilder().getMode().getAction("EdgeStyleAction.horizontal"); final JCommandToggleMenuButton styleHorizontal = RibbonActionContributorFactory.createCommandToggleMenuButton(action); addDefaultToggleHandler(context, action, styleHorizontal); action = context.getBuilder().getMode().getAction("EdgeStyleAction.hide_edge"); final JCommandToggleMenuButton styleHideEdge = RibbonActionContributorFactory.createCommandToggleMenuButton(action); addDefaultToggleHandler(context, action, styleHideEdge); ButtonGroup group = new ButtonGroup(); styleAsParent.getActionModel().setGroup(group); styleLinear.getActionModel().setGroup(group); styleAsParent.getActionModel().setGroup(group); styleBezier.getActionModel().setGroup(group); styleAsParent.getActionModel().setGroup(group); styleSharpLinear.getActionModel().setGroup(group); styleAsParent.getActionModel().setGroup(group); styleSharpBezier.getActionModel().setGroup(group); styleAsParent.getActionModel().setGroup(group); styleHorizontal.getActionModel().setGroup(group); styleAsParent.getActionModel().setGroup(group); styleHideEdge.getActionModel().setGroup(group); styleAsParent.getActionModel().setGroup(group); styleGroupButton.setPopupCallback(new PopupPanelCallback() { public JPopupPanel getPopupPanel(JCommandButton commandButton) { JCommandPopupMenu popupmenu = new JCommandPopupMenu(); popupmenu.addMenuButton(styleAsParent); popupmenu.addMenuButton(styleLinear); popupmenu.addMenuButton(styleBezier); popupmenu.addMenuButton(styleSharpLinear); popupmenu.addMenuButton(styleSharpBezier); popupmenu.addMenuButton(styleHorizontal); popupmenu.addMenuButton(styleHideEdge); return popupmenu; } }); band.addCommandButton(styleGroupButton, RibbonElementPriority.MEDIUM); JCommandButton lineWidthGroupButton = new JCommandButton(TextUtils.removeTranslateComment(TextUtils.getText("edgeLineWidthGroupAction.text"))); lineWidthGroupButton.setCommandButtonKind(CommandButtonKind.POPUP_ONLY); action = context.getBuilder().getMode().getAction("EdgeWidthAction_width_parent"); final JCommandToggleMenuButton widthParent = RibbonActionContributorFactory.createCommandToggleMenuButton(action); addDefaultToggleHandler(context, action, widthParent); action = context.getBuilder().getMode().getAction("EdgeWidthAction_width_thin"); final JCommandToggleMenuButton widthThin = RibbonActionContributorFactory.createCommandToggleMenuButton(action); addDefaultToggleHandler(context, action, widthThin); action = context.getBuilder().getMode().getAction("EdgeWidthAction_1"); final JCommandToggleMenuButton width1 = RibbonActionContributorFactory.createCommandToggleMenuButton(action); addDefaultToggleHandler(context, action, width1); action = context.getBuilder().getMode().getAction("EdgeWidthAction_2"); final JCommandToggleMenuButton width2 = RibbonActionContributorFactory.createCommandToggleMenuButton(action); addDefaultToggleHandler(context, action, width2); action = context.getBuilder().getMode().getAction("EdgeWidthAction_4"); final JCommandToggleMenuButton width4 = RibbonActionContributorFactory.createCommandToggleMenuButton(action); addDefaultToggleHandler(context, action, width4); action = context.getBuilder().getMode().getAction("EdgeWidthAction_8"); final JCommandToggleMenuButton width8 = RibbonActionContributorFactory.createCommandToggleMenuButton(action); addDefaultToggleHandler(context, action, width8); lineWidthGroupButton.setPopupCallback(new PopupPanelCallback() { public JPopupPanel getPopupPanel(JCommandButton commandButton) { JCommandPopupMenu popupmenu = new JCommandPopupMenu(); popupmenu.addMenuButton(widthParent); popupmenu.addMenuButton(widthThin); popupmenu.addMenuButton(width1); popupmenu.addMenuButton(width2); popupmenu.addMenuButton(width4); popupmenu.addMenuButton(width8); return popupmenu; } }); band.addCommandButton(lineWidthGroupButton, RibbonElementPriority.MEDIUM); action = context.getBuilder().getMode().getAction("EdgeColorAction"); final JCommandButton edgeColorButton = RibbonActionContributorFactory.createCommandButton(action); band.addCommandButton(edgeColorButton, RibbonElementPriority.MEDIUM); action = context.getBuilder().getMode().getAction("AutomaticEdgeColorHookAction"); //RIBBONS // KeyStroke ks =RibbonAcceleratorManager.parseKeyStroke("j2ef2"); // context.getBuilder().getAcceleratorManager().setAccelerator(action, ks); // RibbonActionContributorFactory.updateRichTooltip(button, action, ks); final JCommandButton automaticColorButton = RibbonActionContributorFactory.createCommandButton(action); band.addCommandButton(automaticColorButton, RibbonElementPriority.MEDIUM); List<RibbonBandResizePolicy> policies = new ArrayList<RibbonBandResizePolicy>(); policies.add(new CoreRibbonResizePolicies.Mirror(band.getControlPanel())); policies.add(new CoreRibbonResizePolicies.High2Mid(band.getControlPanel())); band.setResizePolicies(policies); parent.addChild(band, new ChildProperties(parseOrderSettings(attributes.getProperty("orderPriority", "")))); } public void addChild(Object child, ChildProperties properties) { } }; } private void addDefaultToggleHandler(final RibbonBuildContext context, final AFreeplaneAction action, final JCommandToggleButton button) { context.getBuilder().getMapChangeAdapter().addListener(new IChangeObserver() { public void updateState(CurrentState state) { if (AFreeplaneAction.checkSelectionOnChange(action)) { action.setSelected(); button.getActionModel().setSelected(action.isSelected()); } } }); } /*********************************************************************************** * CONSTRUCTORS **********************************************************************************/ /*********************************************************************************** * METHODS **********************************************************************************/ /*********************************************************************************** * REQUIRED METHODS FOR INTERFACES **********************************************************************************/ }