001    // This file is part of AceWiki.
002    // Copyright 2008-2012, AceWiki developers.
003    // 
004    // AceWiki is free software: you can redistribute it and/or modify it under the terms of the GNU
005    // Lesser General Public License as published by the Free Software Foundation, either version 3 of
006    // the License, or (at your option) any later version.
007    // 
008    // AceWiki is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
009    // even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
010    // Lesser General Public License for more details.
011    // 
012    // You should have received a copy of the GNU Lesser General Public License along with AceWiki. If
013    // not, see http://www.gnu.org/licenses/.
014    
015    package ch.uzh.ifi.attempto.preditor;
016    
017    import java.util.Comparator;
018    import java.util.List;
019    
020    import ch.uzh.ifi.attempto.base.ConcreteOption;
021    import ch.uzh.ifi.attempto.base.NextTokenOptions;
022    
023    /**
024     * This interface represents an object that can create the menus for the predictive editor.
025     * {@link DefaultMenuCreator} is the menu creator used by default.
026     * 
027     * @author Tobias Kuhn
028     */
029    public interface MenuCreator {
030            
031            /**
032             * This method must create and return the menu entry object for the given concrete option.
033             *  described by the given next token options.
034             * 
035             * @param option The concrete option that represents a possible next token.
036             * @return A new menu entry object for the given option.
037             */
038            public MenuEntry createMenuEntry(ConcreteOption option);
039            
040            /**
041             * This method should return the special menu items for the given situation (described by the
042             * next token options).
043             * 
044             * @param options The options for the next token.
045             * @return A list of special menu items to be shown.
046             */
047            public List<SpecialMenuItem> createSpecialMenuItems(NextTokenOptions options);
048            
049            /**
050             * This method can be used to define the ordering of the menu groups. Menu groups with names
051             * that are not contained in the list returned by this method appear in an undefined order. All
052             * other menu groups appear in the same order as in the list.
053             * 
054             * @return A list of menu group names.
055             */
056            public List<String> getMenuGroupOrdering();
057            
058            /**
059             * This method should return the shift of the color to be used for the given menu block. A
060             * shift value of 120, for example, means a shift by 120 "degrees" towards violet. A shift of
061             * 360 is a full rotation and result in the original color.
062             * 
063             * @param menuBlockName The name of the menu block for which the color shift should be
064             *        returned.
065             * @return The color shift value.
066             */
067            public int getColorShift(String menuBlockName);
068            
069            /**
070             * This method can return a comparator to define the order of the menu items within each menu
071             * group.
072             * 
073             * @return A comparator to compare menu items.
074             */
075            public Comparator<MenuItem> getMenuItemComparator();
076            
077    }