Exposed the most commonly used configuration items in the top-right

toolbar for faster access
This commit is contained in:
bancika
2020-04-04 16:48:58 +02:00
parent 8cbdae162e
commit 52d71e2404
8 changed files with 168 additions and 26 deletions
@@ -64,7 +64,8 @@ public enum IconLoader {
"documents_gear.png"), SplashResistor("splash_resistor.png"), SplashCeramic("splash_ceramic.png"), SplashElectrolytic(
"splash_electrolytic.png"), SplashFilm("splash_film.png"), Splash("splash.png"), Help("help2.png"), ScrollInformation("scroll_information.png"),
Node("node.png"), Web("web.png"), Guitar("guitar.png"), Scientist("scientist.png"), StarGrey("star_grey.png"), StarBlue("star_blue.png"),
JarBeanInto("jar_bean_into.png"), GraphEdgeDirected("graph_edge_directed.png"), LaserPointer("laserpointer.png"), TapeMeasure("tape_measure1.png");
JarBeanInto("jar_bean_into.png"), GraphEdgeDirected("graph_edge_directed.png"), LaserPointer("laserpointer.png"), TapeMeasure("tape_measure1.png"),
Elements("elements1.png"), GraphNodes("graph_nodes.png");
protected String name;
Binary file not shown.

After

Width:  |  Height:  |  Size: 616 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 516 B

@@ -46,6 +46,7 @@ import javax.swing.KeyStroke;
import org.apache.log4j.Logger;
import org.diylc.appframework.miscutils.ConfigurationManager;
import org.diylc.appframework.miscutils.IConfigListener;
import org.diylc.common.BuildingBlockPackage;
import org.diylc.common.ComponentType;
import org.diylc.common.IComponentTransformer;
@@ -1562,6 +1563,13 @@ public class ActionFactory {
putValue(AbstractAction.NAME, title);
putValue(IView.CHECK_BOX_MENU_ITEM, true);
putValue(AbstractAction.SELECTED_KEY, ConfigurationManager.getInstance().readBoolean(configKey, defaultValue));
ConfigurationManager.getInstance().addConfigListener(configKey, new IConfigListener() {
@Override
public void valueChanged(String key, Object value) {
putValue(AbstractAction.SELECTED_KEY, (Boolean)value);
}
});
}
public ConfigAction(IPlugInPort plugInPort, String title, String configKey, boolean defaultValue) {
@@ -17,16 +17,20 @@
*/
package org.diylc.swing.gui.actionbar;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.util.EnumSet;
import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JPanel;
import org.diylc.common.EventType;
import org.diylc.common.IComponentTransformer;
import org.diylc.common.IPlugIn;
import org.diylc.common.IPlugInPort;
import org.diylc.images.IconLoader;
import org.diylc.swing.ActionFactory;
import org.diylc.swing.ISwingUI;
@@ -41,7 +45,8 @@ public class ActionBarPlugin implements IPlugIn {
private ISwingUI swingUI;
private JPanel actionPanel;
private MiniToolbar miniToolbar;
private ActionToolbar contextActionToolbar;
private ConfigToolbar configToolbar;
public ActionBarPlugin(ISwingUI swingUI) {
this.swingUI = swingUI;
@@ -51,31 +56,67 @@ public class ActionBarPlugin implements IPlugIn {
if (actionPanel == null) {
actionPanel = new JPanel();
actionPanel.setOpaque(false);
actionPanel.setLayout(new BorderLayout());
actionPanel.add(getMiniToolbar(), BorderLayout.EAST);
actionPanel.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
gbc.weightx = 1;
actionPanel.add(new JPanel(), gbc);
gbc.gridx = 1;
gbc.weightx = 0;
actionPanel.add(getConfigToolbar(), gbc);
gbc.gridx = 2;
// add some space to separate the two toolbars
actionPanel.add(new JLabel() {
private static final long serialVersionUID = 1L;
@Override
public Dimension getPreferredSize() {
return new Dimension(16, 16);
}
}, gbc);
gbc.gridx = 3;
actionPanel.add(getContextActionToolbar(), gbc);
actionPanel.setBorder(BorderFactory.createEmptyBorder());
}
return actionPanel;
}
public MiniToolbar getMiniToolbar() {
if (miniToolbar == null) {
miniToolbar = new MiniToolbar();
miniToolbar.add(ActionFactory.getInstance().createRotateSelectionAction(plugInPort, 1));
miniToolbar.add(ActionFactory.getInstance().createRotateSelectionAction(plugInPort, -1));
miniToolbar.addSpacer();
miniToolbar.add(ActionFactory.getInstance().createMirrorSelectionAction(plugInPort, IComponentTransformer.HORIZONTAL));
miniToolbar.add(ActionFactory.getInstance().createMirrorSelectionAction(plugInPort, IComponentTransformer.VERTICAL));
miniToolbar.addSpacer();
miniToolbar.add(ActionFactory.getInstance().createNudgeAction(plugInPort));
miniToolbar.addSpacer();
miniToolbar.add(ActionFactory.getInstance().createSendToBackAction(plugInPort));
miniToolbar.add(ActionFactory.getInstance().createBringToFrontAction(plugInPort));
miniToolbar.addSpacer();
miniToolbar.add(ActionFactory.getInstance().createGroupAction(plugInPort));
miniToolbar.add(ActionFactory.getInstance().createUngroupAction(plugInPort));
public ConfigToolbar getConfigToolbar() {
if (configToolbar == null) {
configToolbar = new ConfigToolbar();
configToolbar.add("Continuous Creation", IPlugInPort.CONTINUOUS_CREATION_KEY, IconLoader.Elements.getIcon(), false);
configToolbar.add("Highlight Connected Areas", IPlugInPort.HIGHLIGHT_CONTINUITY_AREA, IconLoader.LaserPointer.getIcon(), false);
configToolbar.add("Sticky Points", IPlugInPort.STICKY_POINTS_KEY, IconLoader.GraphNodes.getIcon(), true);
}
return miniToolbar;
return configToolbar;
}
public ActionToolbar getContextActionToolbar() {
if (contextActionToolbar == null) {
contextActionToolbar = new ActionToolbar();
contextActionToolbar.add(ActionFactory.getInstance().createRotateSelectionAction(plugInPort, 1));
contextActionToolbar.add(ActionFactory.getInstance().createRotateSelectionAction(plugInPort, -1));
contextActionToolbar.addSpacer();
contextActionToolbar.add(ActionFactory.getInstance().createMirrorSelectionAction(plugInPort, IComponentTransformer.HORIZONTAL));
contextActionToolbar.add(ActionFactory.getInstance().createMirrorSelectionAction(plugInPort, IComponentTransformer.VERTICAL));
contextActionToolbar.addSpacer();
contextActionToolbar.add(ActionFactory.getInstance().createNudgeAction(plugInPort));
contextActionToolbar.addSpacer();
contextActionToolbar.add(ActionFactory.getInstance().createSendToBackAction(plugInPort));
contextActionToolbar.add(ActionFactory.getInstance().createBringToFrontAction(plugInPort));
contextActionToolbar.addSpacer();
contextActionToolbar.add(ActionFactory.getInstance().createGroupAction(plugInPort));
contextActionToolbar.add(ActionFactory.getInstance().createUngroupAction(plugInPort));
}
return contextActionToolbar;
}
@Override
@@ -94,6 +135,6 @@ public class ActionBarPlugin implements IPlugIn {
if (eventType != EventType.SELECTION_CHANGED)
return;
boolean enabled = !plugInPort.getSelectedComponents().isEmpty();
getMiniToolbar().setEnabled(enabled);
getContextActionToolbar().setEnabled(enabled);
}
}
@@ -34,11 +34,11 @@ import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSeparator;
public class MiniToolbar extends JPanel {
public class ActionToolbar extends JPanel {
private static final long serialVersionUID = 1L;
public MiniToolbar() {
public ActionToolbar() {
setOpaque(false);
setBorder(BorderFactory.createEmptyBorder());
}
@@ -0,0 +1,88 @@
/*
DIY Layout Creator (DIYLC).
Copyright (c) 2009-2018 held jointly by the individual authors.
This file is part of DIYLC.
DIYLC is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
DIYLC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with DIYLC. If not, see <http://www.gnu.org/licenses/>.
*/
package org.diylc.swing.gui.actionbar;
import java.awt.Component;
import java.awt.Cursor;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.BorderFactory;
import javax.swing.Icon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import org.diylc.appframework.miscutils.ConfigurationManager;
import org.diylc.appframework.miscutils.IConfigListener;
public class ConfigToolbar extends JPanel {
private static final long serialVersionUID = 1L;
private final String CHECK = "\u2611";
private final String UNCHECK = "\u2610";
public ConfigToolbar() {
setOpaque(false);
setBorder(BorderFactory.createEmptyBorder());
}
public void add(String title, String configKey, Icon icon, boolean defaultValue) {
final JLabel label = new JLabel();
boolean checked = ConfigurationManager.getInstance().readBoolean(configKey, defaultValue);
label.setText(checked ? CHECK : UNCHECK);
label.setIcon(icon);
label.setToolTipText(title);
label.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
label.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
boolean checked = ConfigurationManager.getInstance().readBoolean(configKey, defaultValue);
checked = !checked;
ConfigurationManager.getInstance().writeValue(configKey, checked);
}
});
add(label);
ConfigurationManager.getInstance().addConfigListener(configKey, new IConfigListener() {
@Override
public void valueChanged(String key, Object value) {
boolean checked = (boolean) value;
label.setText(checked ? CHECK : UNCHECK);
}
});
}
@Override
public void setEnabled(boolean enabled) {
for (Component c : getComponents())
c.setEnabled(enabled);
}
public void addSpacer() {
JSeparator l = new JSeparator();
add(l);
}
}