// This file is part of AceWiki. // Copyright 2008-2013, AceWiki developers. // // AceWiki is free software: you can redistribute it and/or modify it under the terms of the GNU // Lesser General Public License as published by the Free Software Foundation, either version 3 of // the License, or (at your option) any later version. // // AceWiki is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without // even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public License along with AceWiki. If // not, see http://www.gnu.org/licenses/. package ch.uzh.ifi.attempto.preditor; import nextapp.echo.app.Border; import nextapp.echo.app.Color; import nextapp.echo.app.ContentPane; import nextapp.echo.app.Extent; import nextapp.echo.app.Font; import nextapp.echo.app.Insets; import nextapp.echo.app.WindowPane; import nextapp.echo.extras.app.TabPane; import nextapp.echo.extras.app.event.TabSelectionEvent; import nextapp.echo.extras.app.event.TabSelectionListener; import nextapp.echo.extras.app.layout.TabPaneLayoutData; import ch.uzh.ifi.attempto.echocomp.Style; /** * This class represents a word editor that can be used to create or modify words. It can contain * several tabs for several types of words. * * @author Tobias Kuhn */ public class WordEditorWindow extends WindowPane implements TabSelectionListener { private static final long serialVersionUID = 6805275173727379038L; private String type; private TabPane tabPane = new TabPane(); /** * Creates a new word editor window. *<p> * The type argument is for custom use and can be used to describe the type of word to be * created. It can be retrieved later by the <code>getType</code>-method. Otherwise, the type * argument has no effect and the value of the type argument is not shown in the GUI. * * @param title The title of the window. * @param type The type. * @param width The width of the window (minimum is 400). * @param height The height of the window (minimum is 250). */ public WordEditorWindow(String title, String type, int width, int height) { this.type = type; if (width < 400) width = 400; if (height < 250) height = 250; setModal(true); setTitle(title); setTitleFont(new Font(Style.fontTypeface, Font.ITALIC, new Extent(13))); setWidth(new Extent(width)); setHeight(new Extent(height)); setResizable(false); setTitleBackground(Style.windowTitleBackground); setStyleName("Default"); tabPane.setInsets(new Insets(10, 12, 10, 0)); tabPane.setTabPosition(TabPane.TAB_POSITION_TOP); tabPane.setBorder(new Border(0, Color.BLACK, Border.STYLE_SOLID)); tabPane.setFont(new Font(Style.fontTypeface, Font.ITALIC, new Extent(13))); tabPane.setTabActiveForeground(Color.BLACK); tabPane.setTabInactiveBackground(Style.shadedBackground); tabPane.setTabInactiveForeground(Style.darkDisabled); tabPane.setTabRolloverEnabled(true); tabPane.setTabRolloverForeground(Color.BLACK); tabPane.setTabRolloverBackground(Style.lightBackground); //tabPane.setTabHeight(new Extent(height-103)); tabPane.addTabSelectionListener(this); ContentPane cPane = new ContentPane(); cPane.setInsets(new Insets(10, 0)); cPane.add(tabPane); add(cPane); } /** * Creates a new word editor window. * * @param title The title of the window. * @param width The width of the window (minimum is 400). * @param height The height of the window (minimum is 250). */ public WordEditorWindow(String title, int width, int height) { this(title, null, width, height); } /** * Creates a new word editor window. * * @param title The title of the window. * @param type The type. */ public WordEditorWindow(String title, String type) { this(title, type, 753, 503); } /** * Creates a new word editor window. * * @param title The title of the window. */ public WordEditorWindow(String title) { this(title, null, 753, 503); } /** * Returns the type of the word editor window or null if no type has been assigned. * * @return The type. */ public String getType() { return type; } /** * Adds a new tab containing the given word editor form. * * @param form The form to be shown in a new tab. */ public void addTab(WordEditorForm form) { if (form.isHidden()) return; TabPaneLayoutData layout = new TabPaneLayoutData(); layout.setTitle(form.getTitle()); form.setLayoutData(layout); tabPane.add(form); if (tabPane.getComponentCount() == 1) { tabPane.setActiveTabIndex(0); } doFocus(); } /** * Returns the form of the currently selected tab. * * @return The current tab. */ public WordEditorForm getCurrentTab() { return (WordEditorForm) tabPane.getComponent(tabPane.getActiveTabIndex()); } private void doFocus() { getCurrentTab().doFocus(); } public void tabSelected(TabSelectionEvent e) { doFocus(); } }