001 /**
002 * ========================================
003 * JFreeReport : a free Java report library
004 * ========================================
005 *
006 * Project Info: http://reporting.pentaho.org/
007 *
008 * (C) Copyright 2000-2007, by Object Refinery Limited, Pentaho Corporation and Contributors.
009 *
010 * This library is free software; you can redistribute it and/or modify it under the terms
011 * of the GNU Lesser General Public License as published by the Free Software Foundation;
012 * either version 2.1 of the License, or (at your option) any later version.
013 *
014 * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
015 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
016 * See the GNU Lesser General Public License for more details.
017 *
018 * You should have received a copy of the GNU Lesser General Public License along with this
019 * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
020 * Boston, MA 02111-1307, USA.
021 *
022 * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
023 * in the United States and other countries.]
024 *
025 * ------------
026 * $Id: PreviewFrame.java,v 1.7 2007/04/01 18:49:31 taqua Exp $
027 * ------------
028 * (C) Copyright 2000-2005, by Object Refinery Limited.
029 * (C) Copyright 2005-2007, by Pentaho Corporation.
030 */
031
032 package org.jfree.report.modules.gui.swing.preview;
033
034 import java.awt.BorderLayout;
035 import java.beans.PropertyChangeEvent;
036 import java.beans.PropertyChangeListener;
037 import javax.swing.BoxLayout;
038 import javax.swing.JComponent;
039 import javax.swing.JFrame;
040 import javax.swing.JLabel;
041 import javax.swing.JMenu;
042 import javax.swing.JMenuBar;
043 import javax.swing.JPanel;
044
045 import org.jfree.report.flow.ReportJob;
046 import org.jfree.report.modules.gui.common.IconTheme;
047 import org.jfree.report.modules.gui.swing.common.JStatusBar;
048 import org.jfree.report.modules.gui.swing.common.ReportProgressBar;
049
050 /**
051 * Creation-Date: 11.11.2006, 19:35:09
052 *
053 * @author Thomas Morgner
054 */
055 public class PreviewFrame extends JFrame
056 {
057 private class PreviewPanePropertyChangeHandler
058 implements PropertyChangeListener
059 {
060
061 public PreviewPanePropertyChangeHandler()
062 {
063 }
064
065 /**
066 * This method gets called when a bound property is changed.
067 *
068 * @param evt A PropertyChangeEvent object describing the event source and
069 * the property that has changed.
070 */
071
072 public void propertyChange(PropertyChangeEvent evt)
073 {
074 final String propertyName = evt.getPropertyName();
075 if (PreviewPane.MENU_PROPERTY.equals(propertyName))
076 {
077 // Update the menu
078 final JMenu[] menus = previewPane.getMenu();
079 if (menus != null && menus.length > 0)
080 {
081 final JMenuBar menuBar = new JMenuBar();
082 for (int i = 0; i < menus.length; i++)
083 {
084 final JMenu menu = menus[i];
085 menuBar.add(menu);
086 }
087 setJMenuBar(menuBar);
088 }
089 else
090 {
091 setJMenuBar(null);
092 }
093 return;
094 }
095
096 if (PreviewPane.TITLE_PROPERTY.equals(propertyName))
097 {
098 setTitle(previewPane.getTitle());
099 return;
100 }
101
102 if (PreviewPane.STATUS_TEXT_PROPERTY.equals(propertyName) ||
103 PreviewPane.STATUS_TYPE_PROPERTY.equals(propertyName))
104 {
105 statusBar.setStatus(previewPane.getStatusType(),
106 previewPane.getStatusText());
107 return;
108 }
109
110 if (PreviewPane.ICON_THEME_PROPERTY.equals(propertyName))
111 {
112 statusBar.setIconTheme(previewPane.getIconTheme());
113 return;
114 }
115
116 if (PreviewPane.PAGINATING_PROPERTY.equals(propertyName))
117 {
118 if (Boolean.TRUE.equals(evt.getNewValue()))
119 {
120 progressBar.setVisible(true);
121 pageLabel.setVisible(false);
122 }
123 else
124 {
125 progressBar.setVisible(false);
126 pageLabel.setVisible(true);
127 }
128 progressBar.revalidate();
129 return;
130 }
131
132
133 if (PreviewPane.PAGE_NUMBER_PROPERTY.equals(propertyName) ||
134 PreviewPane.NUMBER_OF_PAGES_PROPERTY.equals(propertyName))
135 {
136 pageLabel.setText(previewPane.getPageNumber() + "/" + previewPane.getNumberOfPages());
137 return;
138 }
139
140 if (PreviewPane.CLOSED_PROPERTY.equals(propertyName))
141 {
142 if (previewPane.isClosed())
143 {
144 setVisible(false);
145 dispose();
146 }
147 else
148 {
149 setVisible(true);
150 }
151 }
152 }
153 }
154
155 private PreviewPane previewPane;
156 private JStatusBar statusBar;
157 private ReportProgressBar progressBar;
158 private JLabel pageLabel;
159
160 /**
161 * Creates a non-modal dialog without a title and without a specified
162 * <code>Frame</code> owner. A shared, hidden frame will be set as the owner
163 * of the dialog.
164 * <p/>
165 * This constructor sets the component's locale property to the value returned
166 * by <code>JComponent.getDefaultLocale</code>.
167 *
168 * @throws java.awt.HeadlessException if GraphicsEnvironment.isHeadless()
169 * returns true.
170 * @see java.awt.GraphicsEnvironment#isHeadless
171 * @see javax.swing.JComponent#getDefaultLocale
172 */
173 public PreviewFrame()
174 {
175 init();
176 }
177
178 protected void init()
179 {
180 previewPane = new PreviewPane();
181 statusBar = new JStatusBar(previewPane.getIconTheme());
182
183 progressBar = new ReportProgressBar();
184 progressBar.setVisible(false);
185
186 pageLabel = new JLabel();
187 previewPane.addPropertyChangeListener(new PreviewPanePropertyChangeHandler());
188
189 final JComponent extensionArea = statusBar.getExtensionArea();
190 extensionArea.setLayout(new BoxLayout(extensionArea, BoxLayout.X_AXIS));
191 extensionArea.add(progressBar);
192 extensionArea.add(pageLabel);
193
194 JComponent contentPane = new JPanel();
195 contentPane.setLayout(new BorderLayout());
196 contentPane.add(previewPane, BorderLayout.CENTER);
197 contentPane.add(statusBar, BorderLayout.SOUTH);
198 setContentPane(contentPane);
199 }
200
201 public ReportController getReportController()
202 {
203 return previewPane.getReportController();
204 }
205
206 public void setReportController(final ReportController reportController)
207 {
208 previewPane.setReportController(reportController);
209 }
210
211 public IconTheme getIconTheme()
212 {
213 return previewPane.getIconTheme();
214 }
215
216 public void setIconTheme(final IconTheme theme)
217 {
218 previewPane.setIconTheme(theme);
219 }
220
221 public ReportJob getReportJob()
222 {
223 return previewPane.getReportJob();
224 }
225
226 public void setReportJob(final ReportJob reportJob)
227 {
228 previewPane.setReportJob(reportJob);
229 }
230
231 }