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.List;
018    
019    import nextapp.echo.app.Color;
020    import nextapp.echo.app.Row;
021    import ch.uzh.ifi.attempto.acewiki.Wiki;
022    import ch.uzh.ifi.attempto.acewiki.core.OntologyTextElement;
023    import ch.uzh.ifi.attempto.base.TextElement;
024    import ch.uzh.ifi.attempto.echocomp.HSpace;
025    import ch.uzh.ifi.attempto.echocomp.SolidLabel;
026    
027    /**
028     * This component renders a CNL text into GUI elements.
029     * 
030     * @author Tobias Kuhn
031     */
032    public class TextRow extends Row {
033            
034            private static final long serialVersionUID = -3410891086679856030L;
035            
036            /**
037             * Creates a new text row with the given text.
038             * 
039             * @param text The text as a list of text elements.
040             * @param wiki The wiki object.
041             * @param isRed true if the text color should be red.
042             */
043            public TextRow(List<TextElement> text, Wiki wiki, boolean isRed) {
044                    Color color = Color.BLACK;
045                    if (isRed) {
046                            color = new Color(180, 0, 0);
047                    }
048                    TextElement prev = null;
049                    for (TextElement e : text) {
050                            if (prev != null) {
051                                    String glue = wiki.getLanguageHandler().getTextOperator().getGlue(prev, e);
052                                    if (glue.matches("\\s+")) {
053                                            add(new HSpace(5 * glue.length()));
054                                    } else if (glue.length() > 0) {
055                                            add(new SolidLabel(glue));
056                                    }
057                            }
058                            prev = e;
059                            if (e instanceof OntologyTextElement) {
060                                    add(new WikiLink(((OntologyTextElement) e), wiki, isRed));
061                            } else {
062                                    SolidLabel l = new SolidLabel(e.getText());
063                                    l.setForeground(color);
064                                    add(l);
065                            }
066                    }
067            }
068    
069            /**
070             * Creates a new text row with the given text.
071             * 
072             * @param text The text as a list of text elements.
073             * @param wiki The wiki object.
074             */
075            public TextRow(List<TextElement> text, Wiki wiki) {
076                    this(text, wiki, false);
077            }
078    
079    }