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>) 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