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.Alignment; 018 import nextapp.echo.app.Button; 019 import nextapp.echo.app.Color; 020 import nextapp.echo.app.Component; 021 import nextapp.echo.app.Extent; 022 import nextapp.echo.app.Font; 023 import nextapp.echo.app.Insets; 024 import nextapp.echo.app.Row; 025 import nextapp.echo.app.event.ActionEvent; 026 import nextapp.echo.app.event.ActionListener; 027 import nextapp.echo.app.layout.RowLayoutData; 028 import ch.uzh.ifi.attempto.echocomp.Label; 029 import ch.uzh.ifi.attempto.echocomp.SolidLabel; 030 import ch.uzh.ifi.attempto.echocomp.Style; 031 032 /** 033 * This class represents a title label which is used for article titles. 034 * 035 * @author Tobias Kuhn 036 */ 037 public class Title extends Row implements ActionListener { 038 039 private static final long serialVersionUID = 7797492687936611323L; 040 041 private Component titleComp; 042 private ActionListener actionListener; 043 044 /** 045 * Creates a new clickable title which has two parts. The second part is shown in gray. 046 * 047 * @param text The text of the main part of the title. 048 * @param postTitle The text of the second part of the title in gray. 049 * @param tooltip The tooltip text. 050 * @param actionListener The action listener. 051 */ 052 public Title(String text, String postTitle, String tooltip, ActionListener actionListener) { 053 this.actionListener = actionListener; 054 setInsets(new Insets(10, 5, 10, 5)); 055 Row row = new Row(); 056 row.setCellSpacing(new Extent(5)); 057 if (actionListener == null) { 058 Label l = new Label(text); 059 if (tooltip != null) { 060 l.setToolTipText(tooltip); 061 } 062 titleComp = l; 063 } else { 064 Button b = new Button(text); 065 b.setInsets(new Insets(0, 0, 0, 0)); 066 b.setRolloverEnabled(true); 067 b.setRolloverForeground(Color.BLUE); 068 b.addActionListener(this); 069 if (tooltip != null) { 070 b.setToolTipText(tooltip); 071 } 072 titleComp = b; 073 } 074 titleComp.setFont(new Font(Style.fontTypeface, Font.PLAIN, new Extent(20))); 075 row.add(titleComp); 076 SolidLabel postTitleLabel = new SolidLabel(postTitle); 077 postTitleLabel.setFont(new Font(Style.fontTypeface, Font.ITALIC, new Extent(20))); 078 postTitleLabel.setForeground(Color.DARKGRAY); 079 RowLayoutData layout = new RowLayoutData(); 080 layout.setAlignment(new Alignment(Alignment.CENTER, Alignment.BOTTOM)); 081 postTitleLabel.setLayoutData(layout); 082 row.add(postTitleLabel); 083 add(row); 084 } 085 /** 086 * Creates a new non-clickable title which has two parts. The second part is shown in gray. 087 * 088 * @param text The text of the main part of the title. 089 * @param postTitle The text of the second part of the title in gray. 090 */ 091 public Title(String text, String postTitle) { 092 this(text, postTitle, null, null); 093 } 094 095 /** 096 * Creates a new clickable title. 097 * 098 * @param text The text of the title. 099 * @param italic Defines whether the title text should be displayed in italics. 100 * @param tooltip The tooltip text. 101 * @param actionListener The action listener. 102 */ 103 public Title(String text, boolean italic, String tooltip, ActionListener actionListener) { 104 this.actionListener = actionListener; 105 setInsets(new Insets(10, 5, 5, 5)); 106 if (actionListener == null) { 107 Label l = new Label(text); 108 if (tooltip != null) { 109 l.setToolTipText(tooltip); 110 } 111 titleComp = l; 112 } else { 113 Button b = new Button(text); 114 b.setInsets(new Insets(0, 0, 0, 0)); 115 b.setRolloverEnabled(true); 116 b.setRolloverForeground(Color.BLUE); 117 b.addActionListener(this); 118 if (tooltip != null) { 119 b.setToolTipText(tooltip); 120 } 121 titleComp = b; 122 } 123 if (italic) { 124 titleComp.setFont(new Font(Style.fontTypeface, Font.ITALIC, new Extent(20))); 125 } else { 126 titleComp.setFont(new Font(Style.fontTypeface, Font.PLAIN, new Extent(20))); 127 } 128 add(titleComp); 129 } 130 131 /** 132 * Creates a new non-clickable title. 133 * 134 * @param text The text of the title. 135 * @param tooltip The tooltip text. 136 * @param actionListener The action listener. 137 */ 138 public Title(String text, String tooltip, ActionListener actionListener) { 139 this(text, false, tooltip, actionListener); 140 } 141 142 /** 143 * Creates a new clickable title. 144 * 145 * @param text The text of the title. 146 * @param italic Defines whether the title text should be displayed in italics. 147 */ 148 public Title(String text, boolean italic) { 149 this(text, italic, null, null); 150 } 151 152 /** 153 * Creates a new non-clickable title. 154 * 155 * @param text The title text. 156 */ 157 public Title(String text) { 158 this(text, false, null, null); 159 } 160 161 /** 162 * Resets the title text. 163 * 164 * @param text The title text. 165 */ 166 public void setText(String text) { 167 if (titleComp instanceof Label) { 168 ((Label) titleComp).setText(text); 169 } else if (titleComp instanceof Button) { 170 ((Button) titleComp).setText(text); 171 } 172 } 173 174 /** 175 * Sets the foreground color of the title text. 176 * 177 * @param color The foreground color. 178 */ 179 public void setColor(Color color) { 180 titleComp.setForeground(color); 181 } 182 183 public void actionPerformed(ActionEvent e) { 184 actionListener.actionPerformed(new ActionEvent(this, "Title clicked")); 185 } 186 187 }