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 3525 2007-10-16 11:43:48Z tmorgner $
027: * ------------
028: * (C) Copyright 2000-2005, by Object Refinery Limited.
029: * (C) Copyright 2005-2007, by Pentaho Corporation.
030: */package org.jfree.report.modules.gui.swing.preview;
031:
032: import java.awt.BorderLayout;
033: import java.beans.PropertyChangeEvent;
034: import java.beans.PropertyChangeListener;
035: import javax.swing.BoxLayout;
036: import javax.swing.JComponent;
037: import javax.swing.JFrame;
038: import javax.swing.JLabel;
039: import javax.swing.JMenu;
040: import javax.swing.JMenuBar;
041: import javax.swing.JPanel;
042:
043: import org.jfree.report.flow.ReportJob;
044: import org.jfree.report.modules.gui.common.IconTheme;
045: import org.jfree.report.modules.gui.swing.common.JStatusBar;
046: import org.jfree.report.modules.gui.swing.common.ReportProgressBar;
047:
048: /**
049: * Creation-Date: 11.11.2006, 19:35:09
050: *
051: * @author Thomas Morgner
052: */
053: public class PreviewFrame extends JFrame {
054: private class PreviewPanePropertyChangeHandler implements
055: PropertyChangeListener {
056:
057: private PreviewPanePropertyChangeHandler() {
058: }
059:
060: /**
061: * This method gets called when a bound property is changed.
062: *
063: * @param evt A PropertyChangeEvent object describing the event source and
064: * the property that has changed.
065: */
066:
067: public void propertyChange(final PropertyChangeEvent evt) {
068: final String propertyName = evt.getPropertyName();
069: if (PreviewPane.MENU_PROPERTY.equals(propertyName)) {
070: // Update the menu
071: final JMenu[] menus = previewPane.getMenu();
072: if (menus != null && menus.length > 0) {
073: final JMenuBar menuBar = new JMenuBar();
074: for (int i = 0; i < menus.length; i++) {
075: final JMenu menu = menus[i];
076: menuBar.add(menu);
077: }
078: setJMenuBar(menuBar);
079: } else {
080: setJMenuBar(null);
081: }
082: return;
083: }
084:
085: if (PreviewPane.TITLE_PROPERTY.equals(propertyName)) {
086: setTitle(previewPane.getTitle());
087: return;
088: }
089:
090: if (PreviewPane.STATUS_TEXT_PROPERTY.equals(propertyName)
091: || PreviewPane.STATUS_TYPE_PROPERTY
092: .equals(propertyName)) {
093: statusBar.setStatus(previewPane.getStatusType(),
094: previewPane.getStatusText());
095: return;
096: }
097:
098: if (PreviewPane.ICON_THEME_PROPERTY.equals(propertyName)) {
099: statusBar.setIconTheme(previewPane.getIconTheme());
100: return;
101: }
102:
103: if (PreviewPane.PAGINATING_PROPERTY.equals(propertyName)) {
104: if (Boolean.TRUE.equals(evt.getNewValue())) {
105: progressBar.setVisible(true);
106: pageLabel.setVisible(false);
107: } else {
108: progressBar.setVisible(false);
109: pageLabel.setVisible(true);
110: }
111: progressBar.revalidate();
112: return;
113: }
114:
115: if (PreviewPane.PAGE_NUMBER_PROPERTY.equals(propertyName)
116: || PreviewPane.NUMBER_OF_PAGES_PROPERTY
117: .equals(propertyName)) {
118: pageLabel.setText(previewPane.getPageNumber() + "/"
119: + previewPane.getNumberOfPages());
120: return;
121: }
122:
123: if (PreviewPane.CLOSED_PROPERTY.equals(propertyName)) {
124: if (previewPane.isClosed()) {
125: setVisible(false);
126: dispose();
127: } else {
128: setVisible(true);
129: }
130: }
131: }
132: }
133:
134: private PreviewPane previewPane;
135: private JStatusBar statusBar;
136: private ReportProgressBar progressBar;
137: private JLabel pageLabel;
138:
139: /**
140: * Creates a non-modal dialog without a title and without a specified
141: * <code>Frame</code> owner. A shared, hidden frame will be set as the owner
142: * of the dialog.
143: * <p/>
144: * This constructor sets the component's locale property to the value returned
145: * by <code>JComponent.getDefaultLocale</code>.
146: *
147: * @throws java.awt.HeadlessException if GraphicsEnvironment.isHeadless()
148: * returns true.
149: * @see java.awt.GraphicsEnvironment#isHeadless
150: * @see javax.swing.JComponent#getDefaultLocale
151: */
152: public PreviewFrame() {
153: init();
154: }
155:
156: protected void init() {
157: previewPane = new PreviewPane();
158: statusBar = new JStatusBar(previewPane.getIconTheme());
159:
160: progressBar = new ReportProgressBar();
161: progressBar.setVisible(false);
162:
163: pageLabel = new JLabel();
164: previewPane
165: .addPropertyChangeListener(new PreviewPanePropertyChangeHandler());
166:
167: final JComponent extensionArea = statusBar.getExtensionArea();
168: extensionArea.setLayout(new BoxLayout(extensionArea,
169: BoxLayout.X_AXIS));
170: extensionArea.add(progressBar);
171: extensionArea.add(pageLabel);
172:
173: final JComponent contentPane = new JPanel();
174: contentPane.setLayout(new BorderLayout());
175: contentPane.add(previewPane, BorderLayout.CENTER);
176: contentPane.add(statusBar, BorderLayout.SOUTH);
177: setContentPane(contentPane);
178: }
179:
180: public ReportController getReportController() {
181: return previewPane.getReportController();
182: }
183:
184: public void setReportController(
185: final ReportController reportController) {
186: previewPane.setReportController(reportController);
187: }
188:
189: public IconTheme getIconTheme() {
190: return previewPane.getIconTheme();
191: }
192:
193: public void setIconTheme(final IconTheme theme) {
194: previewPane.setIconTheme(theme);
195: }
196:
197: public ReportJob getReportJob() {
198: return previewPane.getReportJob();
199: }
200:
201: public void setReportJob(final ReportJob reportJob) {
202: previewPane.setReportJob(reportJob);
203: }
204:
205: }
|