From 4144956a0982c200ead22de104919ec52c476fb2 Mon Sep 17 00:00:00 2001 From: bancika Date: Fri, 1 Jan 2021 19:25:10 +0100 Subject: [PATCH] add popup to building blocks in the toolbar --- diylc/diylc-swing/lib/swing-framework.jar | Bin 164092 -> 164168 bytes .../org/diylc/swing/images/IconLoader.java | 2 +- .../diylc/swing/images/component_large.png | Bin 0 -> 2079 bytes .../toolbox/ComponentButtonFactory.java | 8 +-- .../plugins/toolbox/ComponentTabbedPane.java | 57 +++++++++++------- .../diylc/swing/plugins/toolbox/ToolBox.java | 2 +- 6 files changed, 42 insertions(+), 27 deletions(-) create mode 100644 diylc/diylc-swing/src/org/diylc/swing/images/component_large.png diff --git a/diylc/diylc-swing/lib/swing-framework.jar b/diylc/diylc-swing/lib/swing-framework.jar index 8688c27fa30898461b7a55e1f6a77668a1ef40d8..db5f31775463dc0c87e4808a47045a8077d69961 100644 GIT binary patch delta 12810 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 BCT;)# 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 0000000000000000000000000000000000000000..c81137982186640abe7ef3bde1d9a2957f73f180 GIT binary patch literal 2079 zcmV+)2;ldLP)WdKHUATl^0MrC3kGB7YRATcyLH8DCdG9W83F)%RHWK$ae000McNliru z)&&<102yOwFb)6!010qNS#tmY3h)2`3h)6!tTdPa000DMK}|sb0I`n?{9y$E00(zT zL_t(|+O1bxY#ikkK6BZfU9T^}u@i6{ZxZ4LDfeDkYMb2L%;Qw*2X!5W4c+MCAj$^y zE=Z^RmoJ|`coLU6DEx*4IQ%yGjkAz@D z_T_W;9>e9=P}o`l7}r~H|2y=sEEbNxcyOb&b3+0qu5lQh^5Ex(W?Cbv+FOjBBA%j!zPq} zTyFwtdB9o9olEy7`c2$nB8g*aqi&&+4(Qy`3%fV09;1l+5KB#a*2ZAL97Y> zbEt$xR5p5*_`&DOa2p7YKNxQM;6D^jjMoCs2;r~gp_d4jCM0nmn(BujO;-XyW2AHYdJSGuD1g~OPn%vJwddl9yJajfMvI@@PhCw5ta)VrZ0@m%>V7kN5ZYDbesh^ z_I}r{N4F)1_U&-zzb@Mor%L!-3H=TLolD{%0_6pW6rASimq7$4SKnC+fDViK5|q!p z_6ZuF!ENuMOsUA$&cE4>k`7~EM7az>*IWrea86x<<&+8ENq(hk3&Bbd%c9}>dbJMj z!q=(^oex=F2vw`kd6YzWavLHoy9EHfNL_qQx%7*JI=>97o@fIRC7}-hNh`1%3r-cY zv(Y?y25dEnPQtn>`!*L8VV;e;*{a z9D2~pes#vnj9vSZZbsXX z%jf0%_=lh5-+lQTQpl(ru7t7VdS`z}&%WQ@);n_F&o_^3(`pS48+Y8=CB)NzNbG*% z9;PLyIOzRavGU-reztS{iHr_~(fOxv?*z)Hp{@uABxSbCeRqO^J>H{GoEbl#IsW8T zB*6t-@>R%YbuuaHi?O9szw3ik+S-5nhKJ5e3&2Xiz@A-+F5Y-#ASq${Knk`D^}@f- zRiM(aF@!|f+l_MZI{Y?%K+Wol%Y~djK#5p$F9HrO0Qd)|+8kWyAb! zpLAT&F$l@H0qI@?2^`cAl_koc0;76^s-PS*OmO0bu@@mBWh)CXxu|NJm;~Sk#2P=w5w0gk4{^f)SkM3?;u>k(<-ezoD-C^iWLGJd^H&_EBcPG<(596Af+daX#+c#4daN=SeJ!W8P=>CcQ zu8Im69*DUfP~;P<)zHT+4+vyxKqnc@8iUgf)FaG=L$xMATC3lIHwRI84m5tBeHxp6V`y%%_&-$dQkR- zvMzF3FU(z)2^m;<_fz~(o$dh2mhiU--P|0}MdW)8f^Ik#0$Bk-d80c75-pn|%zzTC zK5knf;Eph)%`1b5>~B6(CwCyy5m&pMe&2=lzg;%ge9Lav^DXkl{Ets=R9FB2002ov JPDHLkV1g=8$kqS= literal 0 HcmV?d00001 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