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