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.preditor;
016
017 import nextapp.echo.app.Border;
018 import nextapp.echo.app.Color;
019 import nextapp.echo.app.ContentPane;
020 import nextapp.echo.app.Extent;
021 import nextapp.echo.app.Font;
022 import nextapp.echo.app.Insets;
023 import nextapp.echo.app.WindowPane;
024 import nextapp.echo.extras.app.TabPane;
025 import nextapp.echo.extras.app.event.TabSelectionEvent;
026 import nextapp.echo.extras.app.event.TabSelectionListener;
027 import nextapp.echo.extras.app.layout.TabPaneLayoutData;
028 import ch.uzh.ifi.attempto.echocomp.Style;
029
030 /**
031 * This class represents a word editor that can be used to create or modify words. It can contain
032 * several tabs for several types of words.
033 *
034 * @author Tobias Kuhn
035 */
036 public class WordEditorWindow extends WindowPane implements TabSelectionListener {
037
038 private static final long serialVersionUID = 6805275173727379038L;
039
040 private String type;
041 private TabPane tabPane = new TabPane();
042
043 /**
044 * Creates a new word editor window.
045 *<p>
046 * The type argument is for custom use and can be used to describe the type of word to be
047 * created. It can be retrieved later by the <code>getType</code>-method. Otherwise, the type
048 * argument has no effect and the value of the type argument is not shown in the GUI.
049 *
050 * @param title The title of the window.
051 * @param type The type.
052 * @param width The width of the window (minimum is 400).
053 * @param height The height of the window (minimum is 250).
054 */
055 public WordEditorWindow(String title, String type, int width, int height) {
056 this.type = type;
057 if (width < 400) width = 400;
058 if (height < 250) height = 250;
059 setModal(true);
060 setTitle(title);
061 setTitleFont(new Font(Style.fontTypeface, Font.ITALIC, new Extent(13)));
062 setWidth(new Extent(width));
063 setHeight(new Extent(height));
064 setResizable(false);
065 setTitleBackground(Style.windowTitleBackground);
066 setStyleName("Default");
067
068 tabPane.setInsets(new Insets(10, 12, 10, 0));
069 tabPane.setTabPosition(TabPane.TAB_POSITION_TOP);
070 tabPane.setBorder(new Border(0, Color.BLACK, Border.STYLE_SOLID));
071 tabPane.setFont(new Font(Style.fontTypeface, Font.ITALIC, new Extent(13)));
072 tabPane.setTabActiveForeground(Color.BLACK);
073 tabPane.setTabInactiveBackground(Style.shadedBackground);
074 tabPane.setTabInactiveForeground(Style.darkDisabled);
075 tabPane.setTabRolloverEnabled(true);
076 tabPane.setTabRolloverForeground(Color.BLACK);
077 tabPane.setTabRolloverBackground(Style.lightBackground);
078 //tabPane.setTabHeight(new Extent(height-103));
079 tabPane.addTabSelectionListener(this);
080
081 ContentPane cPane = new ContentPane();
082 cPane.setInsets(new Insets(10, 0));
083 cPane.add(tabPane);
084
085 add(cPane);
086 }
087
088 /**
089 * Creates a new word editor window.
090 *
091 * @param title The title of the window.
092 * @param width The width of the window (minimum is 400).
093 * @param height The height of the window (minimum is 250).
094 */
095 public WordEditorWindow(String title, int width, int height) {
096 this(title, null, width, height);
097 }
098
099 /**
100 * Creates a new word editor window.
101 *
102 * @param title The title of the window.
103 * @param type The type.
104 */
105 public WordEditorWindow(String title, String type) {
106 this(title, type, 753, 503);
107 }
108
109 /**
110 * Creates a new word editor window.
111 *
112 * @param title The title of the window.
113 */
114 public WordEditorWindow(String title) {
115 this(title, null, 753, 503);
116 }
117
118 /**
119 * Returns the type of the word editor window or null if no type has been assigned.
120 *
121 * @return The type.
122 */
123 public String getType() {
124 return type;
125 }
126
127 /**
128 * Adds a new tab containing the given word editor form.
129 *
130 * @param form The form to be shown in a new tab.
131 */
132 public void addTab(WordEditorForm form) {
133 TabPaneLayoutData layout = new TabPaneLayoutData();
134 layout.setTitle(form.getTitle());
135 form.setLayoutData(layout);
136 tabPane.add(form);
137 if (tabPane.getComponentCount() == 1) {
138 tabPane.setActiveTabIndex(0);
139 }
140 doFocus();
141 }
142
143 /**
144 * Returns the form of the currently selected tab.
145 *
146 * @return The current tab.
147 */
148 public WordEditorForm getCurrentTab() {
149 return (WordEditorForm) tabPane.getComponent(tabPane.getActiveTabIndex());
150 }
151
152 private void doFocus() {
153 getCurrentTab().doFocus();
154 }
155
156 public void tabSelected(TabSelectionEvent e) {
157 doFocus();
158 }
159
160 }