// This file is part of AceWiki. // Copyright 2008-2013, AceWiki developers. // // AceWiki is free software: you can redistribute it and/or modify it under the terms of the GNU // Lesser General Public License as published by the Free Software Foundation, either version 3 of // the License, or (at your option) any later version. // // AceWiki is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without // even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public License along with AceWiki. If // not, see http://www.gnu.org/licenses/. package ch.uzh.ifi.attempto.acewiki.gui; import java.util.ArrayList; import java.util.Comparator; import java.util.List; import nextapp.echo.app.event.ActionEvent; import nextapp.echo.app.event.ActionListener; import ch.uzh.ifi.attempto.acewiki.Wiki; import ch.uzh.ifi.attempto.acewiki.core.EditorController; import ch.uzh.ifi.attempto.acewiki.core.OntologyElement; import ch.uzh.ifi.attempto.acewiki.core.OntologyTextElement; import ch.uzh.ifi.attempto.base.ConcreteOption; import ch.uzh.ifi.attempto.base.NextTokenOptions; import ch.uzh.ifi.attempto.base.TextElement; import ch.uzh.ifi.attempto.base.TextOperator; import ch.uzh.ifi.attempto.preditor.DefaultMenuItemComparator; import ch.uzh.ifi.attempto.preditor.MenuCreator; import ch.uzh.ifi.attempto.preditor.MenuEntry; import ch.uzh.ifi.attempto.preditor.MenuItem; import ch.uzh.ifi.attempto.preditor.SpecialMenuItem; /** * This is the menu creator class that generates the menu entries for the predictive editor * on the basis of the AceWiki grammar. * * @author Tobias Kuhn */ public class AceWikiMenuCreator implements MenuCreator, ActionListener { private static final long serialVersionUID = -6442603864805781298L; private Wiki wiki; private OntologyElement highlightedElement; private ActionListener actionListener; private DefaultMenuItemComparator comparator = new DefaultMenuItemComparator(); /** * Creates a new AceWiki-specific menu creator object. * * @param wiki The wiki instance. * @param highlightedElement The ontology element that should be highlighted in the editor * (because it is the current element). * @param actionListener The action-listener. */ public AceWikiMenuCreator(Wiki wiki, OntologyElement highlightedElement, ActionListener actionListener) { this.wiki = wiki; this.highlightedElement = highlightedElement; this.actionListener = actionListener; } private EditorController getEditorController() { return wiki.getLanguageHandler().getEditorController(); } public List<String> getMenuGroupOrdering() { return getEditorController().getMenuGroups(); } public MenuEntry createMenuEntry(ConcreteOption option) { String menuGroup = getEditorController().getMenuGroup(option.getCategoryName()); TextOperator to = wiki.getLanguageHandler().getTextOperator(); TextElement te = to.createTextElement(option.getWord()); MenuEntry me = new MenuEntry(te, menuGroup); if (te instanceof OntologyTextElement) { OntologyTextElement ote = (OntologyTextElement) te; me.setHighlighted(ote.getOntologyElement() == highlightedElement); } return me; } public List<SpecialMenuItem> createSpecialMenuItems(NextTokenOptions options) { List<SpecialMenuItem> menuItems = new ArrayList<SpecialMenuItem>(); for (String p : getEditorController().getExtensibleCategories()) { if (!options.containsCategory(p)) continue; String g = getEditorController().getMenuGroup(p); menuItems.add(new SpecialMenuItem(wiki.getGUIText("acewiki_preditor_menuitemnew"), g, p, this)); } return menuItems; } public void actionPerformed(ActionEvent e) { String p = e.getActionCommand(); String type = getEditorController().getWordType(p); int wordNumber = getEditorController().getWordNumber(p); wiki.showCreatorWindow(type, wordNumber, actionListener); } public int getColorShift(String menuBlockName) { return getEditorController().getColorShift(menuBlockName); } public Comparator<MenuItem> getMenuItemComparator() { return comparator; } }