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    }