Added "Snap To Objects" feature that snaps control points to control

points of the nearest components
This commit is contained in:
bancika
2020-03-23 23:04:02 +01:00
parent 257c7bc3bf
commit a6b7debfd7
8 changed files with 83 additions and 15 deletions
@@ -241,6 +241,10 @@ public class ActionFactory {
String tipKey) {
return new ConfigAction(plugInPort, title, configKey, defaultValue, tipKey);
}
public ToggleAction createToggleAction(String title, String configKey, String groupName, String defaultValue) {
return new ToggleAction(title, configKey, groupName, defaultValue);
}
public ThemeAction createThemeAction(IPlugInPort plugInPort, Theme theme) {
return new ThemeAction(plugInPort, theme);
@@ -1575,6 +1579,27 @@ public class ActionFactory {
plugInPort.refresh();
}
}
public static class ToggleAction extends AbstractAction {
private static final long serialVersionUID = 1L;
private String configKey;
public ToggleAction(String title, String configKey, String groupName, String defaultValue) {
super();
this.configKey = configKey;
putValue(AbstractAction.NAME, title);
putValue(IView.RADIO_BUTTON_GROUP_KEY, groupName);
putValue(AbstractAction.SELECTED_KEY, ConfigurationManager.getInstance().readString(configKey, defaultValue).equalsIgnoreCase(title));
}
@Override
public void actionPerformed(ActionEvent e) {
LOG.info(getValue(AbstractAction.NAME) + " toggle triggered");
ConfigurationManager.getInstance().writeValue(configKey, getValue(AbstractAction.NAME));
}
}
public static class ThemeAction extends AbstractAction {
@@ -46,6 +46,7 @@ public class ConfigPlugin implements IPlugIn {
private static final String CONFIG_MENU = "Config";
private static final String THEME_MENU = "Theme";
private static final String SNAP_MENU = "Snap To...";
private static final String COMPONENT_BROWSER_MENU = "Toolbox";
public static final String COMPONENT_BROWSER = "componentBrowser";
public static final String SEARCHABLE_TREE = "Searchable Tree";
@@ -96,12 +97,19 @@ public class ConfigPlugin implements IPlugIn {
swingUI.injectMenuAction(
ActionFactory.getInstance().createConfigAction(plugInPort, "Show Rulers", IPlugInPort.SHOW_RULERS_KEY, true),
CONFIG_MENU);
swingUI.injectSubmenu(SNAP_MENU, null, CONFIG_MENU);
swingUI.injectMenuAction(
ActionFactory.getInstance().createConfigAction(plugInPort, "Show Grid", IPlugInPort.SHOW_GRID_KEY, true),
CONFIG_MENU);
swingUI.injectMenuAction(
ActionFactory.getInstance().createConfigAction(plugInPort, "Snap to Grid", IPlugInPort.SNAP_TO_GRID_KEY, true),
CONFIG_MENU);
ActionFactory.getInstance().createToggleAction("None", IPlugInPort.SNAP_TO_KEY, SNAP_MENU, IPlugInPort.SNAP_TO_DEFAULT),
SNAP_MENU);
swingUI.injectMenuAction(
ActionFactory.getInstance().createToggleAction("Grid", IPlugInPort.SNAP_TO_KEY, SNAP_MENU, IPlugInPort.SNAP_TO_DEFAULT),
SNAP_MENU);
swingUI.injectMenuAction(
ActionFactory.getInstance().createToggleAction("Objects", IPlugInPort.SNAP_TO_KEY, SNAP_MENU, IPlugInPort.SNAP_TO_DEFAULT),
SNAP_MENU);
swingUI.injectMenuAction(
ActionFactory.getInstance()
.createConfigAction(plugInPort, "Sticky Points", IPlugInPort.STICKY_POINTS_KEY, true), CONFIG_MENU);