From d0b9384ab015319c755dba3c3ed4c6fa0e71a183 Mon Sep 17 00:00:00 2001 From: fros4943 Date: Thu, 7 Feb 2008 10:30:19 +0000 Subject: [PATCH] mote types sorted after abstraction level --- tools/cooja/java/se/sics/cooja/GUI.java | 50 ++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/tools/cooja/java/se/sics/cooja/GUI.java b/tools/cooja/java/se/sics/cooja/GUI.java index fab2510ed..834a4b3ca 100644 --- a/tools/cooja/java/se/sics/cooja/GUI.java +++ b/tools/cooja/java/se/sics/cooja/GUI.java @@ -24,7 +24,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: GUI.java,v 1.65 2007/11/18 12:21:41 adamdunkels Exp $ + * $Id: GUI.java,v 1.66 2008/02/07 10:30:19 fros4943 Exp $ */ package se.sics.cooja; @@ -529,12 +529,44 @@ public class GUI { JMenuItem menuItem; for (Class moteTypeClass : moteTypeClasses) { + /* Sort mote types according to abstraction level */ + String abstractionLevelDescription = GUI.getAbstractionLevelDescriptionOf(moteTypeClass); + if(abstractionLevelDescription == null) { + abstractionLevelDescription = "[unknown cross-level]"; + } + + /* Check if abstraction description already exists */ + JSeparator abstractionLevelSeparator = null; + for (Component component: menuMoteTypeClasses.getMenuComponents()) { + if (component == null || !(component instanceof JSeparator)) { + continue; + } + JSeparator existing = (JSeparator) component; + if (abstractionLevelDescription.equals(existing.getToolTipText())) { + abstractionLevelSeparator = existing; + break; + } + } + if (abstractionLevelSeparator == null) { + abstractionLevelSeparator = new JSeparator(); + abstractionLevelSeparator.setToolTipText(abstractionLevelDescription); + menuMoteTypeClasses.add(abstractionLevelSeparator); + } + String description = GUI.getDescriptionOf(moteTypeClass); menuItem = new JMenuItem(description); menuItem.setActionCommand("create mote type"); menuItem.putClientProperty("class", moteTypeClass); + menuItem.setToolTipText(abstractionLevelDescription); menuItem.addActionListener(guiEventHandler); - menuMoteTypeClasses.add(menuItem); + + /* Add new item directly after cross level separator */ + for (int i=0; i < menuMoteTypeClasses.getMenuComponentCount(); i++) { + if (menuMoteTypeClasses.getMenuComponent(i) == abstractionLevelSeparator) { + menuMoteTypeClasses.add(menuItem, i+1); + break; + } + } } } @@ -2751,6 +2783,20 @@ public class GUI { return clazz.getSimpleName(); } + /** + * Help method that returns the abstraction level description for given mote type class. + * + * @param clazz + * Class + * @return Description + */ + public static String getAbstractionLevelDescriptionOf(Class clazz) { + if (clazz.isAnnotationPresent(AbstractionLevelDescription.class)) { + return clazz.getAnnotation(AbstractionLevelDescription.class).value(); + } + return null; + } + /** * Load configurations and create a GUI. *