001 // This file is part of the Attempto Java Packages. 002 // Copyright 2008-2009, 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.preditor; 016 017 import nextapp.echo2.app.Extent; 018 import nextapp.echo2.app.Font; 019 import ch.uzh.ifi.attempto.echocomp.Style; 020 import ch.uzh.ifi.attempto.preditor.text.TextElement; 021 022 /** 023 * This class represents a menu item that contains a text element. The text element is added to 024 * the partial sentence when the user clicks on a menu entry in the predictive editor. 025 * 026 * @author Tobias Kuhn 027 */ 028 public class MenuEntry extends MenuItem { 029 030 private static final long serialVersionUID = -4231372412315340523L; 031 032 private TextElement textElement; 033 private boolean strong = true; 034 private boolean highlighted = false; 035 036 /** 037 * Creates a new menu entry for the given text element. 038 * 039 * @param textElement The text element. 040 */ 041 public MenuEntry(TextElement textElement) { 042 this.textElement = textElement; 043 setText(textElement.getText()); 044 setFont(new Font(Style.fontTypeface, Font.PLAIN, new Extent(12))); 045 } 046 047 /** 048 * Returns the text element. 049 * 050 * @return The text element. 051 */ 052 public TextElement getTextElement() { 053 return textElement; 054 } 055 056 /** 057 * This method determines whether the menu entry is highlighted or not. Hightlighted menu entries 058 * are displayed in bold font and are in front of non-highlighted menu entries in sorted lists. 059 * 060 * @param highlighted 061 */ 062 public void setHighlighted(boolean highlighted) { 063 this.highlighted = highlighted; 064 if (highlighted) { 065 setFont(new Font(Style.fontTypeface, Font.BOLD, new Extent(12))); 066 } else { 067 setFont(new Font(Style.fontTypeface, Font.PLAIN, new Extent(12))); 068 } 069 } 070 071 public boolean equals(Object obj) { 072 if (obj instanceof MenuEntry) { 073 return textElement.equals(((MenuEntry) obj).textElement); 074 } 075 return false; 076 } 077 078 public int compareTo(MenuItem m) { 079 if (m instanceof MenuEntry) { 080 MenuEntry other = (MenuEntry) m; 081 if (this.strong && !other.strong) { 082 return -1; 083 } else if (!this.strong && other.strong) { 084 return 1; 085 } else { 086 if (this.highlighted && !other.highlighted) { 087 return -1; 088 } else if (!this.highlighted && other.highlighted) { 089 return 1; 090 } else { 091 return super.compareTo(m); 092 } 093 } 094 } else { 095 return super.compareTo(m); 096 } 097 } 098 099 }