View Javadoc
1   //
2   // $Id: PictureDialog.java 298 2007-07-12 10:17:32 +0000 (jeu., 12 juil. 2007)
3   // etienne_sf $
4   //
5   // jupload - A file upload applet.
6   // Copyright 2007 The JUpload Team
7   //
8   // Created: 2006-07-10
9   // Creator: etienne_sf
10  // Last modified: $Date: 2010-01-08 23:21:44 +0100 (ven., 08 janv. 2010) $
11  //
12  // This program is free software; you can redistribute it and/or modify it under
13  // the terms of the GNU General Public License as published by the Free Software
14  // Foundation; either version 2 of the License, or (at your option) any later
15  // version. This program is distributed in the hope that it will be useful, but
16  // WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
17  // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
18  // details. You should have received a copy of the GNU General Public License
19  // along with this program; if not, write to the Free Software Foundation, Inc.,
20  // 675 Mass Ave, Cambridge, MA 02139, USA.
21  
22  package wjhk.jupload2.gui.image;
23  
24  import java.awt.BorderLayout;
25  import java.awt.Cursor;
26  import java.awt.Dimension;
27  import java.awt.Frame;
28  import java.awt.Toolkit;
29  import java.awt.event.ActionEvent;
30  import java.awt.event.ActionListener;
31  import java.awt.event.ComponentEvent;
32  import java.awt.event.ComponentListener;
33  
34  import javax.swing.JButton;
35  import javax.swing.JDialog;
36  
37  import wjhk.jupload2.filedata.PictureFileData;
38  import wjhk.jupload2.policies.UploadPolicy;
39  
40  /**
41   * A maximized modal dialog box, that display the selected picture.
42   * 
43   * @author etienne_sf
44   */
45  public class PictureDialog extends JDialog implements ActionListener,
46          ComponentListener {
47  
48      /** A generated serialVersionUID, to avoid warning during compilation */
49      private static final long serialVersionUID = 7802205907550854333L;
50  
51      JButton buttonClose;
52  
53      PictureFileData pictureFileData = null;
54  
55      PicturePanel picturePanel = null;
56  
57      UploadPolicy uploadPolicy = null;
58  
59      /**
60       * Creates a new instance.
61       * 
62       * @param owner The parent frame.
63       * @param pictureFileData The picture to manage.
64       * @param uploadPolicy The upload policy which applies.
65       */
66      public PictureDialog(Frame owner, PictureFileData pictureFileData,
67              UploadPolicy uploadPolicy) {
68          super(owner, pictureFileData.getFileName(), true);
69  
70          this.uploadPolicy = uploadPolicy;
71          this.pictureFileData = pictureFileData;
72  
73          // This will be a long operation. The cursor will set back to normal in
74          // componentShown, see below
75          setCursor(new Cursor(Cursor.WAIT_CURSOR));
76  
77          // Creation of the image area
78          this.picturePanel = new DialogPicturePanel(this, uploadPolicy,
79                  pictureFileData);
80  
81          // Creation of the buttonClose button.
82          this.buttonClose = new JButton(uploadPolicy
83                  .getLocalizedString("buttonClose"));
84          this.buttonClose.setMaximumSize(new Dimension(100, 100));
85          this.buttonClose.addActionListener(this);
86  
87          getContentPane().add(this.buttonClose, BorderLayout.SOUTH);
88          getContentPane().add(this.picturePanel);
89  
90          pack();
91          // Correction given by
92          // setSize(getMaximumSize()); generate very high number under MAC OSX ->
93          // Applet Crash
94          Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
95          setBounds(0, 0, screenSize.width, screenSize.height);
96  
97          // The dialog is modal: the next line will return when the DialogPicture
98          // is hidden (to be closed, in our case)
99          // But we want to know when it will becom visible, to clear the wait
100         // cursor.
101         addComponentListener(this);
102         setVisible(true);
103 
104         // MEMORY LEAK CORRECTION :
105 
106         // Let's free some memory.
107         // This is necessary, as the finalize method is not called (if anyone
108         // has an explanation...).
109         // So, I have to manually free the memory consummed to display the
110         // image, here.
111         this.picturePanel.setPictureFile(null, null, null);
112     }
113 
114     /**
115      * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
116      */
117     public void actionPerformed(ActionEvent event) {
118         if (event.getActionCommand() == this.buttonClose.getActionCommand()) {
119             this.uploadPolicy.displayDebug(
120                     "[PictureDialog] Before this.dispose()", 10);
121             this.dispose();
122         }
123     }
124 
125     /** {@inheritDoc} */
126     public void componentHidden(ComponentEvent arg0) {
127         // No action
128     }
129 
130     /** {@inheritDoc} */
131     public void componentMoved(ComponentEvent arg0) {
132         // No action
133     }
134 
135     /** {@inheritDoc} */
136     public void componentResized(ComponentEvent arg0) {
137         // No action
138     }
139 
140     /** {@inheritDoc} */
141     public void componentShown(ComponentEvent arg0) {
142         // We set the cursor back to normal
143         setCursor(new Cursor(Cursor.HAND_CURSOR));
144     }
145 
146 }