diff --git a/diylc/diylc-swing/lib/swing-framework.jar b/diylc/diylc-swing/lib/swing-framework.jar
index 8688c27f..db5f3177 100644
Binary files a/diylc/diylc-swing/lib/swing-framework.jar and b/diylc/diylc-swing/lib/swing-framework.jar differ
diff --git a/diylc/diylc-swing/src/org/diylc/swing/images/IconLoader.java b/diylc/diylc-swing/src/org/diylc/swing/images/IconLoader.java
index 03072b31..238a2154 100644
--- a/diylc/diylc-swing/src/org/diylc/swing/images/IconLoader.java
+++ b/diylc/diylc-swing/src/org/diylc/swing/images/IconLoader.java
@@ -67,7 +67,7 @@ public enum IconLoader {
JarBeanInto("jar_bean_into.png"), GraphEdgeDirected("graph_edge_directed.png"), LaserPointer("laserpointer.png"), TapeMeasure("tape_measure1.png"),
Elements("elements1.png"), GraphNodes("graph_nodes.png"), User("user1.png"), FlexibleLeads("flexible_leads.png"), Pads("pads.png"), Lock("lock.png"),
Unlock("lock_open.png"), Earth("earth.png"), Loadline("loadline.png"), LoadlineAdd("loadline_add.png"), SnapToGrid("snap_to_grid.png"),
- SnapToComponents("snap_to_components.png"), SnapToNone("snap_to_none.png"), TraceProximity("trace_proximity.png");
+ SnapToComponents("snap_to_components.png"), SnapToNone("snap_to_none.png"), TraceProximity("trace_proximity.png"), ComponentLarge("component_large.png");
protected String name;
diff --git a/diylc/diylc-swing/src/org/diylc/swing/images/component_large.png b/diylc/diylc-swing/src/org/diylc/swing/images/component_large.png
new file mode 100644
index 00000000..c8113798
Binary files /dev/null and b/diylc/diylc-swing/src/org/diylc/swing/images/component_large.png differ
diff --git a/diylc/diylc-swing/src/org/diylc/swing/plugins/toolbox/ComponentButtonFactory.java b/diylc/diylc-swing/src/org/diylc/swing/plugins/toolbox/ComponentButtonFactory.java
index 3c76df92..10976297 100644
--- a/diylc/diylc-swing/src/org/diylc/swing/plugins/toolbox/ComponentButtonFactory.java
+++ b/diylc/diylc-swing/src/org/diylc/swing/plugins/toolbox/ComponentButtonFactory.java
@@ -197,11 +197,11 @@ public class ComponentButtonFactory {
return item;
}
- public static JButton createBuildingBlockButton(final IPlugInPort plugInPort, final String blockName) {
- JButton button = new JButton(blockName, IconLoader.Component.getIcon());
+ public static JButton createBuildingBlockButton(final IPlugInPort plugInPort, final String blockName, final JPopupMenu menu) {
+ JButton button = DropDownButtonFactory.createDropDownButton(blockName, IconLoader.ComponentLarge.getIcon(), menu);
- button.setVerticalTextPosition(SwingConstants.BOTTOM);
- button.setHorizontalTextPosition(SwingConstants.CENTER);
+ button.setVerticalTextPosition(SwingConstants.CENTER);
+ button.setHorizontalTextPosition(SwingConstants.LEFT);
button.setBorder(BorderFactory.createEmptyBorder(MARGIN + 1, MARGIN + 1, MARGIN, MARGIN));
button.setToolTipText("" + blockName + "
building block");
diff --git a/diylc/diylc-swing/src/org/diylc/swing/plugins/toolbox/ComponentTabbedPane.java b/diylc/diylc-swing/src/org/diylc/swing/plugins/toolbox/ComponentTabbedPane.java
index eb662573..a77c2557 100644
--- a/diylc/diylc-swing/src/org/diylc/swing/plugins/toolbox/ComponentTabbedPane.java
+++ b/diylc/diylc-swing/src/org/diylc/swing/plugins/toolbox/ComponentTabbedPane.java
@@ -37,6 +37,7 @@ import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JRadioButtonMenuItem;
+import javax.swing.JSeparator;
import javax.swing.JTabbedPane;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
@@ -55,8 +56,10 @@ import org.diylc.core.Template;
import org.diylc.lang.LangUtil;
import org.diylc.presenter.ComparatorFactory;
import org.diylc.presenter.ComponentProcessor;
+import org.diylc.swing.ISwingUI;
import org.diylc.swing.images.IconLoader;
import org.diylc.swing.plugins.tree.TreePanel;
+import org.diylc.swing.plugins.tree.TreePanel.DeleteBlockAction;
import org.diylc.swing.plugins.tree.TreePanel.SelectAllAction;
/**
@@ -73,6 +76,8 @@ class ComponentTabbedPane extends JTabbedPane {
public static String LAST_SELECTED_TAB = "lastSelectedTab";
private final IPlugInPort plugInPort;
+ private ISwingUI swingUI;
+
private Container recentToolbar;
private Container buildingBlocksToolbar;
private Container favoritesToolbar;
@@ -81,11 +86,12 @@ class ComponentTabbedPane extends JTabbedPane {
private List favorites;
private List pendingRecentComponents = null;
- private List blocks;
+ private List blocks;
- public ComponentTabbedPane(IPlugInPort plugInPort) {
+ public ComponentTabbedPane(IPlugInPort plugInPort, ISwingUI swingUI) {
super();
this.plugInPort = plugInPort;
+ this.swingUI = swingUI;
initialize();
@@ -221,7 +227,7 @@ class ComponentTabbedPane extends JTabbedPane {
for (ComponentType componentType : componentTypes) {
try {
Component button = ComponentButtonFactory.create(plugInPort, componentType,
- createVariantPopup(componentType));
+ createVariantPopup(componentType, null));
toolbar.add(button);
} catch (Exception e) {
LOG.error("Could not create recent component button for " + componentType.getName(), e);
@@ -287,7 +293,7 @@ class ComponentTabbedPane extends JTabbedPane {
componentType = ComponentProcessor.getInstance().extractComponentTypeFrom(
(Class extends IDIYComponent>>) Class.forName(componentClassName));
Component button = ComponentButtonFactory.create(plugInPort, componentType,
- createVariantPopup(componentType));
+ createVariantPopup(componentType, null));
toolbar.add(button);
} catch (Exception e) {
LOG.error("Could not create recent component button for " + componentClassName, e);
@@ -299,7 +305,7 @@ class ComponentTabbedPane extends JTabbedPane {
Container toolbar = getBuildingBlocksToolbar();
toolbar.removeAll();
for (String block : this.blocks) {
- Component button = ComponentButtonFactory.createBuildingBlockButton(plugInPort, block);
+ Component button = ComponentButtonFactory.createBuildingBlockButton(plugInPort, block, createVariantPopup(null, block));
toolbar.add(button);
}
}
@@ -310,17 +316,17 @@ class ComponentTabbedPane extends JTabbedPane {
for (Favorite fav : this.favorites) {
Component button;
if (fav.getType() == FavoriteType.Block) {
- button = ComponentButtonFactory.createBuildingBlockButton(plugInPort, fav.getName());
+ button = ComponentButtonFactory.createBuildingBlockButton(plugInPort, fav.getName(), createVariantPopup(null, fav.getName()));
} else {
ComponentType componentType = this.typesByClass.get(fav.getName());
button = ComponentButtonFactory.create(plugInPort, componentType,
- createVariantPopup(componentType));
+ createVariantPopup(componentType, null));
}
toolbar.add(button);
}
}
- private JPopupMenu createVariantPopup(final ComponentType componentType) {
+ private JPopupMenu createVariantPopup(final ComponentType componentType, final String blockName) {
final JPopupMenu variantPopup = new JPopupMenu();
variantPopup.add("Loading...");
variantPopup.addPopupMenuListener(new PopupMenuListener() {
@@ -330,7 +336,8 @@ class ComponentTabbedPane extends JTabbedPane {
public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
variantPopup.removeAll();
- final String identifier = componentType.getInstanceClass().getCanonicalName();
+ final String identifier = componentType == null ? "block:" + blockName
+ : componentType.getInstanceClass().getCanonicalName();
JMenu shortcutSubmenu = new JMenu("Assign Shortcut");
final JRadioButtonMenuItem noneItem = new JRadioButtonMenuItem ("None");
@@ -398,7 +405,9 @@ class ComponentTabbedPane extends JTabbedPane {
}
final Favorite fav =
- new Favorite(FavoriteType.Component, componentType.getInstanceClass().getCanonicalName());
+ new Favorite(componentType == null ? FavoriteType.Block : FavoriteType.Component,
+ componentType == null ? blockName
+ : componentType.getInstanceClass().getCanonicalName());
final boolean isFavorite = favorites != null && favorites.indexOf(fav) >= 0;
final JMenuItem favoritesItem =
new JMenuItem(isFavorite ? "Remove From Favorites" : "Add To Favorites",
@@ -419,20 +428,26 @@ class ComponentTabbedPane extends JTabbedPane {
});
variantPopup.add(favoritesItem);
- variantPopup.add(new SelectAllAction(plugInPort, componentType));
- variantPopup.add(shortcutSubmenu);
+ if (componentType != null) {
+ variantPopup.add(new SelectAllAction(plugInPort, componentType));
+ variantPopup.add(shortcutSubmenu);
+ variantPopup.add(new JSeparator());
- List variants = plugInPort.getVariantsFor(componentType);
- if (variants == null || variants.isEmpty()) {
- JMenuItem item = new JMenuItem("");
- item.setEnabled(false);
- variantPopup.add(item);
- } else {
- for (Template variant : variants) {
- JMenuItem item =
- ComponentButtonFactory.createVariantItem(plugInPort, variant, componentType);
+ List templates = plugInPort.getVariantsFor(componentType);
+ if (templates == null || templates.isEmpty()) {
+ JMenuItem item = new JMenuItem("");
+ item.setEnabled(false);
variantPopup.add(item);
+ } else {
+ for (Template template : templates) {
+ JMenuItem item =
+ ComponentButtonFactory.createVariantItem(plugInPort, template, componentType);
+ variantPopup.add(item);
+ }
}
+ } else {
+ variantPopup.add(shortcutSubmenu);
+ variantPopup.add(new DeleteBlockAction(plugInPort, swingUI, blockName));
}
}
diff --git a/diylc/diylc-swing/src/org/diylc/swing/plugins/toolbox/ToolBox.java b/diylc/diylc-swing/src/org/diylc/swing/plugins/toolbox/ToolBox.java
index daff4678..49d78d91 100644
--- a/diylc/diylc-swing/src/org/diylc/swing/plugins/toolbox/ToolBox.java
+++ b/diylc/diylc-swing/src/org/diylc/swing/plugins/toolbox/ToolBox.java
@@ -74,7 +74,7 @@ public class ToolBox implements IPlugIn {
public ComponentTabbedPane getComponentTabbedPane() {
if (componentTabbedPane == null) {
- componentTabbedPane = new ComponentTabbedPane(plugInPort);
+ componentTabbedPane = new ComponentTabbedPane(plugInPort, swingUI);
}
return componentTabbedPane;
}