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 nextapp.echo.app.Button;
018 import nextapp.echo.app.Color;
019 import nextapp.echo.app.Extent;
020 import nextapp.echo.app.Font;
021 import nextapp.echo.app.Insets;
022 import nextapp.echo.app.event.ActionEvent;
023 import nextapp.echo.app.event.ActionListener;
024 import ch.uzh.ifi.attempto.acewiki.Wiki;
025 import ch.uzh.ifi.attempto.acewiki.core.DummyOntologyElement;
026 import ch.uzh.ifi.attempto.acewiki.core.LanguageUtils;
027 import ch.uzh.ifi.attempto.acewiki.core.OntologyElement;
028 import ch.uzh.ifi.attempto.acewiki.core.OntologyTextElement;
029 import ch.uzh.ifi.attempto.echocomp.Style;
030
031 /**
032 * This class represents a wiki-internal link.
033 *
034 * @author Tobias Kuhn
035 */
036 public class WikiLink extends Button implements ActionListener {
037
038 private static final long serialVersionUID = -2234400779848457043L;
039
040 private OntologyElement ontologyElement;
041 private Wiki wiki;
042
043 /**
044 * Creates a new link to the article of the given ontology element. The headword of the
045 * ontology element is used as the link text.
046 *
047 * @param ontologyElement The ontology element whose article should be linked.
048 * @param wiki The wiki instance.
049 */
050 public WikiLink(OntologyElement ontologyElement, Wiki wiki) {
051 super(LanguageUtils.getHeading(ontologyElement));
052 this.wiki = wiki;
053 this.ontologyElement = ontologyElement;
054 initButton(false);
055 }
056
057 /**
058 * Creates a new link to the article of the given ontology element.
059 *
060 * @param ontologyElement The ontology element whose article should be linked.
061 * @param text The link text.
062 * @param wiki The wiki instance.
063 * @param red true if the link text should be displayed in red font.
064 */
065 public WikiLink(OntologyElement ontologyElement, String text, Wiki wiki, boolean red) {
066 super(text);
067 this.wiki = wiki;
068 this.ontologyElement = ontologyElement;
069 initButton(red);
070 }
071
072 /**
073 * Creates a new wiki link on the basis of a text element. It links to the article of the
074 * ontology element of the text element. The text of the text element is used as the link
075 * text.
076 *
077 * @param textElement The text element.
078 * @param wiki The wiki instance.
079 * @param red true if the link text should be displayed in red font.
080 */
081 public WikiLink(OntologyTextElement textElement, Wiki wiki, boolean red) {
082 super(textElement.getText());
083 this.wiki = wiki;
084 this.ontologyElement = textElement.getOntologyElement();
085 initButton(red);
086 }
087
088 private void initButton(boolean red) {
089 setInsets(new Insets(0, 0, 0, 0));
090 setLineWrap(false);
091 setRolloverEnabled(true);
092 if (ontologyElement instanceof DummyOntologyElement) {
093 setFont(new Font(Style.fontTypeface, Font.ITALIC, new Extent(13)));
094 } else {
095 setFont(new Font(Style.fontTypeface, Font.PLAIN, new Extent(13)));
096 }
097 setRolloverForeground(Color.BLUE);
098 if (red) setForeground(new Color(180, 0, 0));
099 addActionListener(this);
100 }
101
102 public void actionPerformed(ActionEvent e) {
103 wiki.log("page", "pressed: link " + ontologyElement.getWord());
104 wiki.showPage(ontologyElement);
105 }
106
107 }