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 }