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.echocomp;
016
017 import nextapp.echo.app.Alignment;
018 import nextapp.echo.app.ApplicationInstance;
019 import nextapp.echo.app.Column;
020 import nextapp.echo.app.Extent;
021 import nextapp.echo.app.Font;
022 import nextapp.echo.app.Grid;
023 import nextapp.echo.app.Insets;
024 import nextapp.echo.app.ResourceImageReference;
025 import nextapp.echo.app.Row;
026 import nextapp.echo.app.WindowPane;
027 import nextapp.echo.app.event.ActionEvent;
028 import nextapp.echo.app.event.ActionListener;
029 import nextapp.echo.app.event.WindowPaneEvent;
030 import nextapp.echo.app.event.WindowPaneListener;
031 import nextapp.echo.app.layout.GridLayoutData;
032
033 /**
034 * This is a convenience class for easy creation of message windows.
035 *
036 * @author Tobias Kuhn
037 */
038 public class MessageWindow extends WindowPane implements ActionListener {
039
040 private static final long serialVersionUID = -6999194368016297503L;
041
042 private ActionListener actionListener;
043
044 /**
045 * Creates a new message window.
046 *
047 * @param title The title of the window.
048 * @param image The image to be displayed above the text.
049 * @param message The message text.
050 * @param parent The parent window.
051 * @param actionListener The action-listener.
052 * @param options A list of options each represented by a button in the message window.
053 */
054 public MessageWindow(String title, ResourceImageReference image, String message,
055 WindowPane parent, ActionListener actionListener, String... options) {
056 this.actionListener = actionListener;
057 setTitle(title);
058 setTitleFont(new Font(Style.fontTypeface, Font.ITALIC, new Extent(13)));
059 setModal(true);
060 setWidth(new Extent(420));
061 setHeight(new Extent(180));
062 setResizable(false);
063 setMovable(true);
064 setTitleBackground(Style.windowTitleBackground);
065 setStyleName("Default");
066
067 addWindowPaneListener(new WindowPaneListener() {
068
069 private static final long serialVersionUID = -3897741327122083261L;
070
071 public void windowPaneClosing(WindowPaneEvent e) {
072 actionPerformed(new ActionEvent(MessageWindow.this, "Close"));
073 }
074
075 });
076
077 Grid grid = new Grid(1);
078 grid.setInsets(new Insets(10, 10, 10, 0));
079 grid.setColumnWidth(0, new Extent(400));
080 grid.setRowHeight(0, new Extent(90));
081
082 Column iconMessageColumn = new Column();
083 GridLayoutData layout1 = new GridLayoutData();
084 layout1.setAlignment(new Alignment(Alignment.LEFT, Alignment.TOP));
085 iconMessageColumn.setLayoutData(layout1);
086
087 if (image != null) {
088 iconMessageColumn.add(new Label(image));
089 iconMessageColumn.add(new VSpace(5));
090 }
091
092 Label label = new Label(message);
093 label.setFont(new Font(Style.fontTypeface, Font.ITALIC, new Extent(13)));
094 iconMessageColumn.add(label);
095 grid.add(iconMessageColumn);
096
097 Row buttonBar = new Row();
098 buttonBar.setCellSpacing(new Extent(10));
099 buttonBar.setInsets(new Insets(0, 0, 0, 10));
100 for (String s : options) {
101 buttonBar.add(new GeneralButton(s, 80, this));
102 }
103 if (options.length == 1) {
104 ApplicationInstance.getActive().setFocusedComponent(buttonBar.getComponent(0));
105 }
106 GridLayoutData layout2 = new GridLayoutData();
107 layout2.setAlignment(new Alignment(Alignment.CENTER, Alignment.BOTTOM));
108 buttonBar.setLayoutData(layout2);
109 grid.add(buttonBar);
110
111 add(grid);
112
113 if (parent != null && parent.getPositionX() != null) {
114 int px = parent.getPositionX().getValue();
115 int py = parent.getPositionY().getValue();
116 int pw = parent.getWidth().getValue();
117 int ph = parent.getHeight().getValue();
118 setPositionX(new Extent(px + (pw - getWidth().getValue())/2));
119 setPositionY(new Extent(py + (ph - getHeight().getValue())/2));
120 }
121 }
122
123 /**
124 * Creates a new message window.
125 *
126 * @param title The title of the window.
127 * @param message The message text.
128 * @param parent The parent window.
129 * @param actionListener The action-listener.
130 * @param options A list of options each represented by a button in the message window.
131 */
132 public MessageWindow(String title, String message, WindowPane parent,
133 ActionListener actionListener, String... options) {
134 this(title, null, message, parent, actionListener, options);
135 }
136
137 /**
138 * Creates a new message window.
139 *
140 * @param title The title of the window.
141 * @param message The message text.
142 * @param parent The parent window.
143 * @param options A list of options each represented by a button in the message window.
144 */
145 public MessageWindow(String title, String message, WindowPane parent, String... options) {
146 this(title, null, message, parent, null, options);
147 }
148
149 /**
150 * Creates a new message window.
151 *
152 * @param title The title of the window.
153 * @param message The message text.
154 * @param options A list of options each represented by a button in the message window.
155 */
156 public MessageWindow(String title, String message, String... options) {
157 this(title, null, message, null, null, options);
158 }
159
160 public void actionPerformed(ActionEvent e) {
161 setVisible(false);
162 if (actionListener != null) {
163 actionListener.actionPerformed(new ActionEvent(this, e.getActionCommand()));
164 }
165 }
166
167 }