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    }