001    // This file is part of the Attempto Java Packages.
002    // Copyright 2008, Attempto Group, University of Zurich (see http://attempto.ifi.uzh.ch).
003    //
004    // The Attempto Java Packages is free software: you can redistribute it and/or modify it under the
005    // terms of the GNU Lesser General Public License as published by the Free Software Foundation,
006    // either version 3 of the License, or (at your option) any later version.
007    //
008    // The Attempto Java Packages is distributed in the hope that it will be useful, but WITHOUT ANY
009    // WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
010    // PURPOSE. See the GNU Lesser General Public License for more details.
011    //
012    // You should have received a copy of the GNU Lesser General Public License along with the Attempto
013    // Java Packages. If not, see http://www.gnu.org/licenses/.
014    
015    package ch.uzh.ifi.attempto.acewiki.gui;
016    
017    import ch.uzh.ifi.attempto.echocomp.Style;
018    import nextapp.echo2.app.Alignment;
019    import nextapp.echo2.app.Border;
020    import nextapp.echo2.app.Button;
021    import nextapp.echo2.app.Color;
022    import nextapp.echo2.app.Column;
023    import nextapp.echo2.app.Extent;
024    import nextapp.echo2.app.Font;
025    import nextapp.echo2.app.Insets;
026    import nextapp.echo2.app.ResourceImageReference;
027    import nextapp.echo2.app.event.ActionEvent;
028    import nextapp.echo2.app.event.ActionListener;
029    import echopointng.DropDown;
030    
031    /**
032     * This class represents drop down menus that are shown in front of the ACE sentences as
033     * small triangles.
034     * 
035     * @author Tobias Kuhn
036     */
037    public class DropDownMenu extends DropDown implements ActionListener {
038    
039            private static final long serialVersionUID = 3646511994109953476L;
040            
041            private Column menuColumn = new Column();
042            private ActionListener actionListener;
043            private Column menuSeparator = null;
044            
045            /**
046             * Creates a empty drop down menu with an icon of the given color.
047             * 
048             * @param color The color of the icon, one of "blue", "light-blue", or "red".
049             * @param actionListener The actionlistener.
050             */
051            public DropDownMenu(String color, ActionListener actionListener) {
052                    this.actionListener = actionListener;
053                    setWidth(new Extent(13));
054                    setPopUp(menuColumn);
055                    setPopUpBorder(new Border(1, Color.BLACK, Border.STYLE_OUTSET));
056                    setPopUpAlignment(new Alignment(Alignment.RIGHT, Alignment.BOTTOM));
057                    setPopUpInsets(new Insets(0, 0));
058                    setPopUpOutsets(new Insets(15, -15, 0, 0));
059                    String img1 = null;
060                    String img2 = null;
061                    if (color.equals("blue")) {
062                            img1 = "ch/uzh/ifi/attempto/acewiki/gui/img/DropDown1.png";
063                            img2 = "ch/uzh/ifi/attempto/acewiki/gui/img/DropDown2.png";
064                    } else if (color.equals("red")) {
065                            img1 = "ch/uzh/ifi/attempto/acewiki/gui/img/DropDownRed1.png";
066                            img2 = "ch/uzh/ifi/attempto/acewiki/gui/img/DropDownRed2.png";
067                    } else if (color.equals("light-blue")) {
068                            img1 = "ch/uzh/ifi/attempto/acewiki/gui/img/DropDownLBlue1.png";
069                            img2 = "ch/uzh/ifi/attempto/acewiki/gui/img/DropDownLBlue2.png";
070                    }
071                    setToggleIcon(new ResourceImageReference(img1));
072                    setToggleRolloverIcon(new ResourceImageReference(img2));
073                    setTogglePressedIcon(new ResourceImageReference(img2));
074                    setBorder(new Border(0, Color.BLACK, Border.STYLE_SOLID));
075                    setRolloverBorder(new Border(0, Color.BLACK, Border.STYLE_SOLID));
076            }
077            
078            /**
079             * Adds a menu entry to the drop down menu.
080             * 
081             * @param text The text of the menu entry.
082             */
083            public void addMenuEntry(String text) {
084                    if (menuSeparator != null) {
085                            menuColumn.add(menuSeparator);
086                            menuSeparator = null;
087                    }
088                    Button menuEntry = new Button(text);
089                    menuEntry.setActionCommand(text);
090                    menuEntry.setHeight(new Extent(16));
091                    menuEntry.setWidth(new Extent(130));
092                    menuEntry.setBackground(Style.mediumBackground);
093                    menuEntry.setForeground(Style.darkForeground);
094                    menuEntry.setRolloverEnabled(true);
095                    menuEntry.setRolloverForeground(Style.lightForeground);
096                    menuEntry.setRolloverBackground(Style.darkBackground);
097                    menuEntry.setInsets(new Insets(2, 0));
098                    menuEntry.setAlignment(new Alignment(Alignment.LEFT, Alignment.CENTER));
099                    menuEntry.setTextAlignment(new Alignment(Alignment.LEFT, Alignment.CENTER));
100                    menuEntry.setFont(new Font(Style.fontTypeface, Font.ITALIC, new Extent(13)));
101                    menuEntry.addActionListener(this);
102                    menuColumn.add(menuEntry);
103            }
104            
105            /**
106             * Adds a separator to the menu.
107             */
108            public void addMenuSeparator() {
109                    if (menuColumn.getComponentCount() == 0) return;
110                    menuSeparator = new Column();
111                    menuSeparator.setInsets(new Insets(2, 0, 2, 0));
112                    menuSeparator.setBackground(Style.mediumBackground);
113                    Column line = new Column();
114                    line.setBackground(Style.darkBackground);
115                    line.setInsets(new Insets(0, 1, 0, 0));
116                    menuSeparator.add(line);
117            }
118            
119            public void actionPerformed(ActionEvent e) {
120                    setExpanded(false);
121                    actionListener.actionPerformed(new ActionEvent(this, e.getActionCommand()));
122            }
123    
124    }