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.acewiki.gui; 016 017 import java.util.ArrayList; 018 import java.util.Comparator; 019 import java.util.List; 020 021 import nextapp.echo.app.event.ActionEvent; 022 import nextapp.echo.app.event.ActionListener; 023 import ch.uzh.ifi.attempto.acewiki.Wiki; 024 import ch.uzh.ifi.attempto.acewiki.core.EditorController; 025 import ch.uzh.ifi.attempto.acewiki.core.OntologyElement; 026 import ch.uzh.ifi.attempto.acewiki.core.OntologyTextElement; 027 import ch.uzh.ifi.attempto.base.ConcreteOption; 028 import ch.uzh.ifi.attempto.base.NextTokenOptions; 029 import ch.uzh.ifi.attempto.base.TextElement; 030 import ch.uzh.ifi.attempto.base.TextOperator; 031 import ch.uzh.ifi.attempto.preditor.DefaultMenuItemComparator; 032 import ch.uzh.ifi.attempto.preditor.MenuCreator; 033 import ch.uzh.ifi.attempto.preditor.MenuEntry; 034 import ch.uzh.ifi.attempto.preditor.MenuItem; 035 import ch.uzh.ifi.attempto.preditor.SpecialMenuItem; 036 037 /** 038 * This is the menu creator class that generates the menu entries for the predictive editor 039 * on the basis of the AceWiki grammar. 040 * 041 * @author Tobias Kuhn 042 */ 043 public class AceWikiMenuCreator implements MenuCreator, ActionListener { 044 045 private static final long serialVersionUID = -6442603864805781298L; 046 047 private Wiki wiki; 048 private OntologyElement highlightedElement; 049 private ActionListener actionListener; 050 private DefaultMenuItemComparator comparator = new DefaultMenuItemComparator(); 051 052 /** 053 * Creates a new AceWiki-specific menu creator object. 054 * 055 * @param wiki The wiki instance. 056 * @param highlightedElement The ontology element that should be highlighted in the editor 057 * (because it is the current element). 058 * @param actionListener The action-listener. 059 */ 060 public AceWikiMenuCreator(Wiki wiki, OntologyElement highlightedElement, 061 ActionListener actionListener) { 062 this.wiki = wiki; 063 this.highlightedElement = highlightedElement; 064 this.actionListener = actionListener; 065 } 066 067 private EditorController getEditorController() { 068 return wiki.getLanguageHandler().getEditorController(); 069 } 070 071 public List<String> getMenuGroupOrdering() { 072 return getEditorController().getMenuGroups(); 073 } 074 075 public MenuEntry createMenuEntry(ConcreteOption option) { 076 String menuGroup = getEditorController().getMenuGroup(option.getCategoryName()); 077 TextOperator to = wiki.getLanguageHandler().getTextOperator(); 078 TextElement te = to.createTextElement(option.getWord()); 079 MenuEntry me = new MenuEntry(te, menuGroup); 080 if (te instanceof OntologyTextElement) { 081 OntologyTextElement ote = (OntologyTextElement) te; 082 me.setHighlighted(ote.getOntologyElement() == highlightedElement); 083 } 084 return me; 085 } 086 087 public List<SpecialMenuItem> createSpecialMenuItems(NextTokenOptions options) { 088 List<SpecialMenuItem> menuItems = new ArrayList<SpecialMenuItem>(); 089 for (String p : getEditorController().getExtensibleCategories()) { 090 if (!options.containsCategory(p)) continue; 091 String g = getEditorController().getMenuGroup(p); 092 menuItems.add(new SpecialMenuItem("new...", g, p, this)); 093 } 094 return menuItems; 095 } 096 097 public void actionPerformed(ActionEvent e) { 098 String p = e.getActionCommand(); 099 String type = getEditorController().getWordType(p); 100 int wordNumber = getEditorController().getWordNumber(p); 101 wiki.showCreatorWindow(type, wordNumber, actionListener); 102 } 103 104 public int getColorShift(String menuBlockName) { 105 return getEditorController().getColorShift(menuBlockName); 106 } 107 108 public Comparator<MenuItem> getMenuItemComparator() { 109 return comparator; 110 } 111 112 }