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 */ 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 private 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(final 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 final 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 }