1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski import java.awt.Dimension;
24*b1cdbd2cSJim Jagielski import java.awt.Image;
25*b1cdbd2cSJim Jagielski import java.io.File;
26*b1cdbd2cSJim Jagielski import javax.swing.ImageIcon;
27*b1cdbd2cSJim Jagielski import javax.swing.JLabel;
28*b1cdbd2cSJim Jagielski import javax.swing.SwingWorker;
29*b1cdbd2cSJim Jagielski 
30*b1cdbd2cSJim Jagielski 
31*b1cdbd2cSJim Jagielski 
32*b1cdbd2cSJim Jagielski /*
33*b1cdbd2cSJim Jagielski  * Simple windows, which should show differences if there are some
34*b1cdbd2cSJim Jagielski  */
35*b1cdbd2cSJim Jagielski 
36*b1cdbd2cSJim Jagielski public class ConvwatchGUI extends javax.swing.JFrame
37*b1cdbd2cSJim Jagielski {
38*b1cdbd2cSJim Jagielski     private ImageIcon[] m_aImageIcon;
39*b1cdbd2cSJim Jagielski     private String m_sInifile;
40*b1cdbd2cSJim Jagielski     private int m_nMaxPages;
41*b1cdbd2cSJim Jagielski     private int m_nCurrentPage;
42*b1cdbd2cSJim Jagielski 
43*b1cdbd2cSJim Jagielski     /** Creates new form ConvwatchGUI
44*b1cdbd2cSJim Jagielski      * @param args
45*b1cdbd2cSJim Jagielski      */
46*b1cdbd2cSJim Jagielski 
ConvwatchGUI(String args[])47*b1cdbd2cSJim Jagielski     private ConvwatchGUI(String args[])
48*b1cdbd2cSJim Jagielski     {
49*b1cdbd2cSJim Jagielski         if (args.length > 0)
50*b1cdbd2cSJim Jagielski         {
51*b1cdbd2cSJim Jagielski             if (args[0].endsWith(".ini"))
52*b1cdbd2cSJim Jagielski             {
53*b1cdbd2cSJim Jagielski                 m_sInifile = args[0];
54*b1cdbd2cSJim Jagielski                 fillImageIconsFromInifile();
55*b1cdbd2cSJim Jagielski             }
56*b1cdbd2cSJim Jagielski             else
57*b1cdbd2cSJim Jagielski             {
58*b1cdbd2cSJim Jagielski                 fillImageIcons(args);
59*b1cdbd2cSJim Jagielski             }
60*b1cdbd2cSJim Jagielski         }
61*b1cdbd2cSJim Jagielski 
62*b1cdbd2cSJim Jagielski         String sVersion = System.getProperty("java.version");
63*b1cdbd2cSJim Jagielski         Float f = Float.valueOf(sVersion.substring(0,3));
64*b1cdbd2cSJim Jagielski         if (f.floatValue() < (float)1.6)
65*b1cdbd2cSJim Jagielski         {
66*b1cdbd2cSJim Jagielski             System.out.println("You need at least Java version 1.6");
67*b1cdbd2cSJim Jagielski             System.exit(1);
68*b1cdbd2cSJim Jagielski         }
69*b1cdbd2cSJim Jagielski 
70*b1cdbd2cSJim Jagielski         initComponents();
71*b1cdbd2cSJim Jagielski         jLabelDocumentName.setText("Document: " + m_sInifile);
72*b1cdbd2cSJim Jagielski     }
73*b1cdbd2cSJim Jagielski 
fillImageIconsFromInifile()74*b1cdbd2cSJim Jagielski     void fillImageIconsFromInifile()
75*b1cdbd2cSJim Jagielski     {
76*b1cdbd2cSJim Jagielski         File aFile = new File(m_sInifile);
77*b1cdbd2cSJim Jagielski         if (!aFile.exists())
78*b1cdbd2cSJim Jagielski         {
79*b1cdbd2cSJim Jagielski             GlobalLogWriter.println("Inifile '" + m_sInifile + "' not found.");
80*b1cdbd2cSJim Jagielski             printUsage();
81*b1cdbd2cSJim Jagielski             System.exit(1);
82*b1cdbd2cSJim Jagielski         }
83*b1cdbd2cSJim Jagielski 
84*b1cdbd2cSJim Jagielski         IniFile aIniFile = new IniFile(aFile);
85*b1cdbd2cSJim Jagielski         int nPages = aIniFile.getIntValue("global", "pages", 0);
86*b1cdbd2cSJim Jagielski         if (nPages < 1)
87*b1cdbd2cSJim Jagielski         {
88*b1cdbd2cSJim Jagielski             System.out.println("No pages found.");
89*b1cdbd2cSJim Jagielski         }
90*b1cdbd2cSJim Jagielski         m_nMaxPages = nPages;
91*b1cdbd2cSJim Jagielski         m_nCurrentPage = 1;
92*b1cdbd2cSJim Jagielski         fillImageIcons();
93*b1cdbd2cSJim Jagielski     }
94*b1cdbd2cSJim Jagielski 
fillImageIcons()95*b1cdbd2cSJim Jagielski     private void fillImageIcons()
96*b1cdbd2cSJim Jagielski     {
97*b1cdbd2cSJim Jagielski         File aFile = new File(m_sInifile);
98*b1cdbd2cSJim Jagielski         IniFile aIniFile = new IniFile(aFile);
99*b1cdbd2cSJim Jagielski         String sSection = "page" + m_nCurrentPage;
100*b1cdbd2cSJim Jagielski         String[] files = new String[3];
101*b1cdbd2cSJim Jagielski         files[0] = aIniFile.getValue(sSection, "newgfx"); // current created picture
102*b1cdbd2cSJim Jagielski         files[1] = aIniFile.getValue(sSection, "oldgfx"); // reference picture
103*b1cdbd2cSJim Jagielski         files[2] = aIniFile.getValue(sSection, "diffgfx");
104*b1cdbd2cSJim Jagielski         fillImageIcons(files);
105*b1cdbd2cSJim Jagielski     }
106*b1cdbd2cSJim Jagielski 
107*b1cdbd2cSJim Jagielski     /**
108*b1cdbd2cSJim Jagielski      * Give 3 file names
109*b1cdbd2cSJim Jagielski      * @param args
110*b1cdbd2cSJim Jagielski      */
fillImageIcons(String args[])111*b1cdbd2cSJim Jagielski     private void fillImageIcons(String args[])
112*b1cdbd2cSJim Jagielski     {
113*b1cdbd2cSJim Jagielski         boolean bLoadImages = false;
114*b1cdbd2cSJim Jagielski         m_aImageIcon = new ImageIcon[3];
115*b1cdbd2cSJim Jagielski         for (int i=0;i<3;i++)
116*b1cdbd2cSJim Jagielski         {
117*b1cdbd2cSJim Jagielski             if (args.length > i && args[i] != null)
118*b1cdbd2cSJim Jagielski             {
119*b1cdbd2cSJim Jagielski                 File aFile = new File(args[i]);
120*b1cdbd2cSJim Jagielski                 if (aFile.exists())
121*b1cdbd2cSJim Jagielski                 {
122*b1cdbd2cSJim Jagielski                     // TODO: Load images
123*b1cdbd2cSJim Jagielski                     // Image aImage = new BufferedImage(100,100, BufferedImage.TYPE_INT_RGB);
124*b1cdbd2cSJim Jagielski                     // aImage.
125*b1cdbd2cSJim Jagielski                     m_aImageIcon[i] = new ImageIcon(args[i]);
126*b1cdbd2cSJim Jagielski                     if (m_aImageIcon[i] != null)
127*b1cdbd2cSJim Jagielski                     {
128*b1cdbd2cSJim Jagielski                         bLoadImages = true;
129*b1cdbd2cSJim Jagielski                     }
130*b1cdbd2cSJim Jagielski                 }
131*b1cdbd2cSJim Jagielski                 else
132*b1cdbd2cSJim Jagielski                 {
133*b1cdbd2cSJim Jagielski                     System.out.println("Can't read file: " + aFile.getName());
134*b1cdbd2cSJim Jagielski                     bLoadImages = false;
135*b1cdbd2cSJim Jagielski                 }
136*b1cdbd2cSJim Jagielski             }
137*b1cdbd2cSJim Jagielski             else
138*b1cdbd2cSJim Jagielski             {
139*b1cdbd2cSJim Jagielski                 System.out.println("There is no #" + (i + 1) + " image given.");
140*b1cdbd2cSJim Jagielski                 bLoadImages = false;
141*b1cdbd2cSJim Jagielski             }
142*b1cdbd2cSJim Jagielski         }
143*b1cdbd2cSJim Jagielski //        if (!bLoadImages)
144*b1cdbd2cSJim Jagielski //        {
145*b1cdbd2cSJim Jagielski //            printUsage();
146*b1cdbd2cSJim Jagielski //            System.exit(1);
147*b1cdbd2cSJim Jagielski //        }
148*b1cdbd2cSJim Jagielski 
149*b1cdbd2cSJim Jagielski 
150*b1cdbd2cSJim Jagielski 
151*b1cdbd2cSJim Jagielski         // TODO: Set images.
152*b1cdbd2cSJim Jagielski 
153*b1cdbd2cSJim Jagielski         // formComponentResized(null);
154*b1cdbd2cSJim Jagielski     }
155*b1cdbd2cSJim Jagielski 
printUsage()156*b1cdbd2cSJim Jagielski     private void printUsage()
157*b1cdbd2cSJim Jagielski     {
158*b1cdbd2cSJim Jagielski         System.out.println("Usage:");
159*b1cdbd2cSJim Jagielski         System.out.println("   ConvwatchGUI <pic1> <pic2> <pic3>");
160*b1cdbd2cSJim Jagielski         System.out.println("or ConvwatchGUI <inifile>");
161*b1cdbd2cSJim Jagielski     }
162*b1cdbd2cSJim Jagielski 
163*b1cdbd2cSJim Jagielski //    private int m_nOldWidth;
164*b1cdbd2cSJim Jagielski 
165*b1cdbd2cSJim Jagielski     /** This method is called from within the constructor to
166*b1cdbd2cSJim Jagielski      * initialize the form.
167*b1cdbd2cSJim Jagielski      * WARNING: Do NOT modify this code. The content of this method is
168*b1cdbd2cSJim Jagielski      * always regenerated by the Form Editor.
169*b1cdbd2cSJim Jagielski      */
170*b1cdbd2cSJim Jagielski     @SuppressWarnings("unchecked")
171*b1cdbd2cSJim Jagielski     // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
initComponents()172*b1cdbd2cSJim Jagielski     private void initComponents() {
173*b1cdbd2cSJim Jagielski 
174*b1cdbd2cSJim Jagielski         jPanelOriginal = new javax.swing.JPanel();
175*b1cdbd2cSJim Jagielski         jLabelOriginalImage = new javax.swing.JLabel();
176*b1cdbd2cSJim Jagielski         jPanelReference = new javax.swing.JPanel();
177*b1cdbd2cSJim Jagielski         jLabelReferenceImage = new javax.swing.JLabel();
178*b1cdbd2cSJim Jagielski         jPanelDifference = new javax.swing.JPanel();
179*b1cdbd2cSJim Jagielski         jLabelDifferenceImage = new javax.swing.JLabel();
180*b1cdbd2cSJim Jagielski         jPanel4 = new javax.swing.JPanel();
181*b1cdbd2cSJim Jagielski         jButton1 = new javax.swing.JButton();
182*b1cdbd2cSJim Jagielski         jButton2 = new javax.swing.JButton();
183*b1cdbd2cSJim Jagielski         jButton3 = new javax.swing.JButton();
184*b1cdbd2cSJim Jagielski         jLabelCurrentPage = new javax.swing.JLabel();
185*b1cdbd2cSJim Jagielski         jPanel5 = new javax.swing.JPanel();
186*b1cdbd2cSJim Jagielski         jLabel1 = new javax.swing.JLabel();
187*b1cdbd2cSJim Jagielski         jLabelDocumentName = new javax.swing.JLabel();
188*b1cdbd2cSJim Jagielski 
189*b1cdbd2cSJim Jagielski         setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
190*b1cdbd2cSJim Jagielski         addComponentListener(new java.awt.event.ComponentAdapter() {
191*b1cdbd2cSJim Jagielski             public void componentResized(java.awt.event.ComponentEvent evt) {
192*b1cdbd2cSJim Jagielski                 formComponentResized(evt);
193*b1cdbd2cSJim Jagielski             }
194*b1cdbd2cSJim Jagielski         });
195*b1cdbd2cSJim Jagielski         addPropertyChangeListener(new java.beans.PropertyChangeListener() {
196*b1cdbd2cSJim Jagielski             public void propertyChange(java.beans.PropertyChangeEvent evt) {
197*b1cdbd2cSJim Jagielski                 formPropertyChange(evt);
198*b1cdbd2cSJim Jagielski             }
199*b1cdbd2cSJim Jagielski         });
200*b1cdbd2cSJim Jagielski 
201*b1cdbd2cSJim Jagielski         jPanelOriginal.setBorder(javax.swing.BorderFactory.createTitledBorder("Picture"));
202*b1cdbd2cSJim Jagielski 
203*b1cdbd2cSJim Jagielski         javax.swing.GroupLayout jPanelOriginalLayout = new javax.swing.GroupLayout(jPanelOriginal);
204*b1cdbd2cSJim Jagielski         jPanelOriginal.setLayout(jPanelOriginalLayout);
205*b1cdbd2cSJim Jagielski         jPanelOriginalLayout.setHorizontalGroup(
206*b1cdbd2cSJim Jagielski             jPanelOriginalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
207*b1cdbd2cSJim Jagielski             .addGroup(jPanelOriginalLayout.createSequentialGroup()
208*b1cdbd2cSJim Jagielski                 .addContainerGap()
209*b1cdbd2cSJim Jagielski                 .addComponent(jLabelOriginalImage, javax.swing.GroupLayout.DEFAULT_SIZE, 299, Short.MAX_VALUE)
210*b1cdbd2cSJim Jagielski                 .addContainerGap())
211*b1cdbd2cSJim Jagielski         );
212*b1cdbd2cSJim Jagielski         jPanelOriginalLayout.setVerticalGroup(
213*b1cdbd2cSJim Jagielski             jPanelOriginalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
214*b1cdbd2cSJim Jagielski             .addGroup(jPanelOriginalLayout.createSequentialGroup()
215*b1cdbd2cSJim Jagielski                 .addComponent(jLabelOriginalImage, javax.swing.GroupLayout.DEFAULT_SIZE, 514, Short.MAX_VALUE)
216*b1cdbd2cSJim Jagielski                 .addContainerGap())
217*b1cdbd2cSJim Jagielski         );
218*b1cdbd2cSJim Jagielski 
219*b1cdbd2cSJim Jagielski         jPanelReference.setBorder(javax.swing.BorderFactory.createTitledBorder("Reference Picture"));
220*b1cdbd2cSJim Jagielski 
221*b1cdbd2cSJim Jagielski         javax.swing.GroupLayout jPanelReferenceLayout = new javax.swing.GroupLayout(jPanelReference);
222*b1cdbd2cSJim Jagielski         jPanelReference.setLayout(jPanelReferenceLayout);
223*b1cdbd2cSJim Jagielski         jPanelReferenceLayout.setHorizontalGroup(
224*b1cdbd2cSJim Jagielski             jPanelReferenceLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
225*b1cdbd2cSJim Jagielski             .addGroup(jPanelReferenceLayout.createSequentialGroup()
226*b1cdbd2cSJim Jagielski                 .addContainerGap()
227*b1cdbd2cSJim Jagielski                 .addComponent(jLabelReferenceImage, javax.swing.GroupLayout.DEFAULT_SIZE, 299, Short.MAX_VALUE)
228*b1cdbd2cSJim Jagielski                 .addContainerGap())
229*b1cdbd2cSJim Jagielski         );
230*b1cdbd2cSJim Jagielski         jPanelReferenceLayout.setVerticalGroup(
231*b1cdbd2cSJim Jagielski             jPanelReferenceLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
232*b1cdbd2cSJim Jagielski             .addGroup(jPanelReferenceLayout.createSequentialGroup()
233*b1cdbd2cSJim Jagielski                 .addComponent(jLabelReferenceImage, javax.swing.GroupLayout.DEFAULT_SIZE, 514, Short.MAX_VALUE)
234*b1cdbd2cSJim Jagielski                 .addContainerGap())
235*b1cdbd2cSJim Jagielski         );
236*b1cdbd2cSJim Jagielski 
237*b1cdbd2cSJim Jagielski         jPanelDifference.setBorder(javax.swing.BorderFactory.createTitledBorder("Difference"));
238*b1cdbd2cSJim Jagielski 
239*b1cdbd2cSJim Jagielski         jLabelDifferenceImage.setName("DifferenceImage"); // NOI18N
240*b1cdbd2cSJim Jagielski 
241*b1cdbd2cSJim Jagielski         javax.swing.GroupLayout jPanelDifferenceLayout = new javax.swing.GroupLayout(jPanelDifference);
242*b1cdbd2cSJim Jagielski         jPanelDifference.setLayout(jPanelDifferenceLayout);
243*b1cdbd2cSJim Jagielski         jPanelDifferenceLayout.setHorizontalGroup(
244*b1cdbd2cSJim Jagielski             jPanelDifferenceLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
245*b1cdbd2cSJim Jagielski             .addGroup(jPanelDifferenceLayout.createSequentialGroup()
246*b1cdbd2cSJim Jagielski                 .addContainerGap()
247*b1cdbd2cSJim Jagielski                 .addComponent(jLabelDifferenceImage, javax.swing.GroupLayout.DEFAULT_SIZE, 298, Short.MAX_VALUE)
248*b1cdbd2cSJim Jagielski                 .addContainerGap())
249*b1cdbd2cSJim Jagielski         );
250*b1cdbd2cSJim Jagielski         jPanelDifferenceLayout.setVerticalGroup(
251*b1cdbd2cSJim Jagielski             jPanelDifferenceLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
252*b1cdbd2cSJim Jagielski             .addGroup(jPanelDifferenceLayout.createSequentialGroup()
253*b1cdbd2cSJim Jagielski                 .addComponent(jLabelDifferenceImage, javax.swing.GroupLayout.DEFAULT_SIZE, 514, Short.MAX_VALUE)
254*b1cdbd2cSJim Jagielski                 .addContainerGap())
255*b1cdbd2cSJim Jagielski         );
256*b1cdbd2cSJim Jagielski 
257*b1cdbd2cSJim Jagielski         jPanel4.setBorder(javax.swing.BorderFactory.createTitledBorder("Action"));
258*b1cdbd2cSJim Jagielski 
259*b1cdbd2cSJim Jagielski         jButton1.setText("Close");
260*b1cdbd2cSJim Jagielski         jButton1.addActionListener(new java.awt.event.ActionListener() {
261*b1cdbd2cSJim Jagielski             public void actionPerformed(java.awt.event.ActionEvent evt) {
262*b1cdbd2cSJim Jagielski                 jButton1ActionPerformed(evt);
263*b1cdbd2cSJim Jagielski             }
264*b1cdbd2cSJim Jagielski         });
265*b1cdbd2cSJim Jagielski 
266*b1cdbd2cSJim Jagielski         jButton2.setLabel("prev page");
267*b1cdbd2cSJim Jagielski         jButton2.addActionListener(new java.awt.event.ActionListener() {
268*b1cdbd2cSJim Jagielski             public void actionPerformed(java.awt.event.ActionEvent evt) {
269*b1cdbd2cSJim Jagielski                 jButton2ActionPerformed(evt);
270*b1cdbd2cSJim Jagielski             }
271*b1cdbd2cSJim Jagielski         });
272*b1cdbd2cSJim Jagielski 
273*b1cdbd2cSJim Jagielski         jButton3.setLabel("next page");
274*b1cdbd2cSJim Jagielski         jButton3.addActionListener(new java.awt.event.ActionListener() {
275*b1cdbd2cSJim Jagielski             public void actionPerformed(java.awt.event.ActionEvent evt) {
276*b1cdbd2cSJim Jagielski                 jButton3ActionPerformed(evt);
277*b1cdbd2cSJim Jagielski             }
278*b1cdbd2cSJim Jagielski         });
279*b1cdbd2cSJim Jagielski 
280*b1cdbd2cSJim Jagielski         jLabelCurrentPage.setText("Current page: 1");
281*b1cdbd2cSJim Jagielski 
282*b1cdbd2cSJim Jagielski         javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4);
283*b1cdbd2cSJim Jagielski         jPanel4.setLayout(jPanel4Layout);
284*b1cdbd2cSJim Jagielski         jPanel4Layout.setHorizontalGroup(
285*b1cdbd2cSJim Jagielski             jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
286*b1cdbd2cSJim Jagielski             .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel4Layout.createSequentialGroup()
287*b1cdbd2cSJim Jagielski                 .addContainerGap()
288*b1cdbd2cSJim Jagielski                 .addComponent(jButton2)
289*b1cdbd2cSJim Jagielski                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
290*b1cdbd2cSJim Jagielski                 .addComponent(jButton3)
291*b1cdbd2cSJim Jagielski                 .addGap(18, 18, 18)
292*b1cdbd2cSJim Jagielski                 .addComponent(jLabelCurrentPage, javax.swing.GroupLayout.PREFERRED_SIZE, 107, javax.swing.GroupLayout.PREFERRED_SIZE)
293*b1cdbd2cSJim Jagielski                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 614, Short.MAX_VALUE)
294*b1cdbd2cSJim Jagielski                 .addComponent(jButton1)
295*b1cdbd2cSJim Jagielski                 .addContainerGap())
296*b1cdbd2cSJim Jagielski         );
297*b1cdbd2cSJim Jagielski         jPanel4Layout.setVerticalGroup(
298*b1cdbd2cSJim Jagielski             jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
299*b1cdbd2cSJim Jagielski             .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel4Layout.createSequentialGroup()
300*b1cdbd2cSJim Jagielski                 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
301*b1cdbd2cSJim Jagielski                 .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
302*b1cdbd2cSJim Jagielski                     .addComponent(jButton1)
303*b1cdbd2cSJim Jagielski                     .addComponent(jButton2)
304*b1cdbd2cSJim Jagielski                     .addComponent(jButton3)
305*b1cdbd2cSJim Jagielski                     .addComponent(jLabelCurrentPage))
306*b1cdbd2cSJim Jagielski                 .addContainerGap())
307*b1cdbd2cSJim Jagielski         );
308*b1cdbd2cSJim Jagielski 
309*b1cdbd2cSJim Jagielski         jPanel5.setBorder(javax.swing.BorderFactory.createTitledBorder("Information"));
310*b1cdbd2cSJim Jagielski 
311*b1cdbd2cSJim Jagielski         jLabel1.setText("<html>Here you see a graphical compare by pictures created with a current running office, a stored reference picture and the difference between those both pictures created by ImageMagicks 'composite'.\n</html>"); // NOI18N
312*b1cdbd2cSJim Jagielski 
313*b1cdbd2cSJim Jagielski         jLabelDocumentName.setText("jLabel2");
314*b1cdbd2cSJim Jagielski 
315*b1cdbd2cSJim Jagielski         javax.swing.GroupLayout jPanel5Layout = new javax.swing.GroupLayout(jPanel5);
316*b1cdbd2cSJim Jagielski         jPanel5.setLayout(jPanel5Layout);
317*b1cdbd2cSJim Jagielski         jPanel5Layout.setHorizontalGroup(
318*b1cdbd2cSJim Jagielski             jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
319*b1cdbd2cSJim Jagielski             .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel5Layout.createSequentialGroup()
320*b1cdbd2cSJim Jagielski                 .addContainerGap()
321*b1cdbd2cSJim Jagielski                 .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
322*b1cdbd2cSJim Jagielski                     .addComponent(jLabel1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 972, Short.MAX_VALUE)
323*b1cdbd2cSJim Jagielski                     .addComponent(jLabelDocumentName, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 972, Short.MAX_VALUE))
324*b1cdbd2cSJim Jagielski                 .addContainerGap())
325*b1cdbd2cSJim Jagielski         );
326*b1cdbd2cSJim Jagielski         jPanel5Layout.setVerticalGroup(
327*b1cdbd2cSJim Jagielski             jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
328*b1cdbd2cSJim Jagielski             .addGroup(jPanel5Layout.createSequentialGroup()
329*b1cdbd2cSJim Jagielski                 .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, 50, Short.MAX_VALUE)
330*b1cdbd2cSJim Jagielski                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
331*b1cdbd2cSJim Jagielski                 .addComponent(jLabelDocumentName, javax.swing.GroupLayout.PREFERRED_SIZE, 19, javax.swing.GroupLayout.PREFERRED_SIZE)
332*b1cdbd2cSJim Jagielski                 .addContainerGap())
333*b1cdbd2cSJim Jagielski         );
334*b1cdbd2cSJim Jagielski 
335*b1cdbd2cSJim Jagielski         javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
336*b1cdbd2cSJim Jagielski         getContentPane().setLayout(layout);
337*b1cdbd2cSJim Jagielski         layout.setHorizontalGroup(
338*b1cdbd2cSJim Jagielski             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
339*b1cdbd2cSJim Jagielski             .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
340*b1cdbd2cSJim Jagielski                 .addContainerGap()
341*b1cdbd2cSJim Jagielski                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
342*b1cdbd2cSJim Jagielski                     .addComponent(jPanel5, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
343*b1cdbd2cSJim Jagielski                     .addComponent(jPanel4, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
344*b1cdbd2cSJim Jagielski                     .addGroup(layout.createSequentialGroup()
345*b1cdbd2cSJim Jagielski                         .addComponent(jPanelOriginal, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
346*b1cdbd2cSJim Jagielski                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
347*b1cdbd2cSJim Jagielski                         .addComponent(jPanelReference, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
348*b1cdbd2cSJim Jagielski                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
349*b1cdbd2cSJim Jagielski                         .addComponent(jPanelDifference, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
350*b1cdbd2cSJim Jagielski                 .addContainerGap())
351*b1cdbd2cSJim Jagielski         );
352*b1cdbd2cSJim Jagielski         layout.setVerticalGroup(
353*b1cdbd2cSJim Jagielski             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
354*b1cdbd2cSJim Jagielski             .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
355*b1cdbd2cSJim Jagielski                 .addContainerGap()
356*b1cdbd2cSJim Jagielski                 .addComponent(jPanel5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
357*b1cdbd2cSJim Jagielski                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
358*b1cdbd2cSJim Jagielski                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
359*b1cdbd2cSJim Jagielski                     .addComponent(jPanelReference, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
360*b1cdbd2cSJim Jagielski                     .addComponent(jPanelOriginal, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
361*b1cdbd2cSJim Jagielski                     .addComponent(jPanelDifference, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
362*b1cdbd2cSJim Jagielski                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
363*b1cdbd2cSJim Jagielski                 .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
364*b1cdbd2cSJim Jagielski                 .addContainerGap())
365*b1cdbd2cSJim Jagielski         );
366*b1cdbd2cSJim Jagielski 
367*b1cdbd2cSJim Jagielski         pack();
368*b1cdbd2cSJim Jagielski     }// </editor-fold>//GEN-END:initComponents
369*b1cdbd2cSJim Jagielski 
370*b1cdbd2cSJim Jagielski     private boolean bAdd = false;
371*b1cdbd2cSJim Jagielski 
formComponentResized(java.awt.event.ComponentEvent evt)372*b1cdbd2cSJim Jagielski     private void formComponentResized(java.awt.event.ComponentEvent evt)//GEN-FIRST:event_formComponentResized
373*b1cdbd2cSJim Jagielski     {//GEN-HEADEREND:event_formComponentResized
374*b1cdbd2cSJim Jagielski         // TODO add your handling code here:
375*b1cdbd2cSJim Jagielski         // we need to set icons to null
376*b1cdbd2cSJim Jagielski         // if we don't do this, icons can only grow, but not shrink :-(
377*b1cdbd2cSJim Jagielski 
378*b1cdbd2cSJim Jagielski         initialiseImages();
379*b1cdbd2cSJim Jagielski     }
initialiseImages()380*b1cdbd2cSJim Jagielski     private void initialiseImages()
381*b1cdbd2cSJim Jagielski     {
382*b1cdbd2cSJim Jagielski         if (jLabelOriginalImage.getIcon() != null)
383*b1cdbd2cSJim Jagielski         {
384*b1cdbd2cSJim Jagielski             jLabelOriginalImage.setIcon(null);
385*b1cdbd2cSJim Jagielski             jLabelReferenceImage.setIcon(null);
386*b1cdbd2cSJim Jagielski             jLabelDifferenceImage.setIcon(null);
387*b1cdbd2cSJim Jagielski 
388*b1cdbd2cSJim Jagielski             int w = getWidth();
389*b1cdbd2cSJim Jagielski             int h = getHeight();
390*b1cdbd2cSJim Jagielski             if (bAdd)
391*b1cdbd2cSJim Jagielski             {
392*b1cdbd2cSJim Jagielski                 this.setSize(w, h + 1);
393*b1cdbd2cSJim Jagielski                 bAdd = false;
394*b1cdbd2cSJim Jagielski             }
395*b1cdbd2cSJim Jagielski             else
396*b1cdbd2cSJim Jagielski             {
397*b1cdbd2cSJim Jagielski                 this.setSize(w, h - 1);
398*b1cdbd2cSJim Jagielski                 bAdd = true;
399*b1cdbd2cSJim Jagielski             }
400*b1cdbd2cSJim Jagielski         }
401*b1cdbd2cSJim Jagielski         else
402*b1cdbd2cSJim Jagielski         {
403*b1cdbd2cSJim Jagielski             new ResizeImage(jLabelOriginalImage, m_aImageIcon[0]).execute();
404*b1cdbd2cSJim Jagielski             new ResizeImage(jLabelReferenceImage, m_aImageIcon[1]).execute();
405*b1cdbd2cSJim Jagielski             new ResizeImage(jLabelDifferenceImage, m_aImageIcon[2]).execute();
406*b1cdbd2cSJim Jagielski         }
407*b1cdbd2cSJim Jagielski         int dummy=0;
408*b1cdbd2cSJim Jagielski     }//GEN-LAST:event_formComponentResized
409*b1cdbd2cSJim Jagielski 
jButton1ActionPerformed(java.awt.event.ActionEvent evt)410*b1cdbd2cSJim Jagielski     private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_jButton1ActionPerformed
411*b1cdbd2cSJim Jagielski     {//GEN-HEADEREND:event_jButton1ActionPerformed
412*b1cdbd2cSJim Jagielski         // TODO add your handling code here:
413*b1cdbd2cSJim Jagielski         System.exit(1);
414*b1cdbd2cSJim Jagielski     }//GEN-LAST:event_jButton1ActionPerformed
415*b1cdbd2cSJim Jagielski 
formPropertyChange(java.beans.PropertyChangeEvent evt)416*b1cdbd2cSJim Jagielski     private void formPropertyChange(java.beans.PropertyChangeEvent evt)//GEN-FIRST:event_formPropertyChange
417*b1cdbd2cSJim Jagielski     {//GEN-HEADEREND:event_formPropertyChange
418*b1cdbd2cSJim Jagielski         // TODO add your handling code here:
419*b1cdbd2cSJim Jagielski         int dummy = 0;
420*b1cdbd2cSJim Jagielski     }//GEN-LAST:event_formPropertyChange
421*b1cdbd2cSJim Jagielski 
jButton2ActionPerformed(java.awt.event.ActionEvent evt)422*b1cdbd2cSJim Jagielski     private void jButton2ActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_jButton2ActionPerformed
423*b1cdbd2cSJim Jagielski     {//GEN-HEADEREND:event_jButton2ActionPerformed
424*b1cdbd2cSJim Jagielski         // TODO add your handling code here:
425*b1cdbd2cSJim Jagielski         int nOldPage = m_nCurrentPage;
426*b1cdbd2cSJim Jagielski         if (m_nCurrentPage > 1)
427*b1cdbd2cSJim Jagielski         {
428*b1cdbd2cSJim Jagielski             m_nCurrentPage--;
429*b1cdbd2cSJim Jagielski         }
430*b1cdbd2cSJim Jagielski         if (nOldPage != m_nCurrentPage)
431*b1cdbd2cSJim Jagielski         {
432*b1cdbd2cSJim Jagielski             jLabelCurrentPage.setText("Current page: " + m_nCurrentPage);
433*b1cdbd2cSJim Jagielski             fillImageIcons();
434*b1cdbd2cSJim Jagielski             initialiseImages();
435*b1cdbd2cSJim Jagielski         }
436*b1cdbd2cSJim Jagielski     }//GEN-LAST:event_jButton2ActionPerformed
437*b1cdbd2cSJim Jagielski 
jButton3ActionPerformed(java.awt.event.ActionEvent evt)438*b1cdbd2cSJim Jagielski     private void jButton3ActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_jButton3ActionPerformed
439*b1cdbd2cSJim Jagielski     {//GEN-HEADEREND:event_jButton3ActionPerformed
440*b1cdbd2cSJim Jagielski         // TODO add your handling code here:
441*b1cdbd2cSJim Jagielski         int nOldPage = m_nCurrentPage;
442*b1cdbd2cSJim Jagielski         if (m_nCurrentPage < m_nMaxPages)
443*b1cdbd2cSJim Jagielski         {
444*b1cdbd2cSJim Jagielski             m_nCurrentPage++;
445*b1cdbd2cSJim Jagielski         }
446*b1cdbd2cSJim Jagielski         if (nOldPage != m_nCurrentPage)
447*b1cdbd2cSJim Jagielski         {
448*b1cdbd2cSJim Jagielski             jLabelCurrentPage.setText("Current page: " + m_nCurrentPage);
449*b1cdbd2cSJim Jagielski             fillImageIcons();
450*b1cdbd2cSJim Jagielski             initialiseImages();
451*b1cdbd2cSJim Jagielski         }
452*b1cdbd2cSJim Jagielski     }//GEN-LAST:event_jButton3ActionPerformed
453*b1cdbd2cSJim Jagielski 
454*b1cdbd2cSJim Jagielski     class ResizeImage extends SwingWorker <ImageIcon, Object>
455*b1cdbd2cSJim Jagielski     {
456*b1cdbd2cSJim Jagielski         private JLabel m_jLabel;
457*b1cdbd2cSJim Jagielski         private ImageIcon m_aImageIcon;
458*b1cdbd2cSJim Jagielski         private int w;
459*b1cdbd2cSJim Jagielski         private int h;
460*b1cdbd2cSJim Jagielski 
ResizeImage(JLabel _aLabel, ImageIcon _aImageIcon)461*b1cdbd2cSJim Jagielski         public ResizeImage(JLabel _aLabel, ImageIcon _aImageIcon)
462*b1cdbd2cSJim Jagielski         {
463*b1cdbd2cSJim Jagielski             m_jLabel = _aLabel;
464*b1cdbd2cSJim Jagielski             m_aImageIcon = _aImageIcon;
465*b1cdbd2cSJim Jagielski             w = _aLabel.getWidth();
466*b1cdbd2cSJim Jagielski             h = _aLabel.getHeight();
467*b1cdbd2cSJim Jagielski         }
468*b1cdbd2cSJim Jagielski 
469*b1cdbd2cSJim Jagielski         // dont access here anything to "Event Swing Thread"
470*b1cdbd2cSJim Jagielski         @Override
doInBackground()471*b1cdbd2cSJim Jagielski         public ImageIcon doInBackground()
472*b1cdbd2cSJim Jagielski         {
473*b1cdbd2cSJim Jagielski             Image aImage = m_aImageIcon.getImage().getScaledInstance(w, h, Image.SCALE_AREA_AVERAGING); // SCALE_SMOOTH
474*b1cdbd2cSJim Jagielski             final ImageIcon aIcon = new ImageIcon(aImage);
475*b1cdbd2cSJim Jagielski         // m_jLabel.setIcon(aIcon);
476*b1cdbd2cSJim Jagielski             return aIcon;
477*b1cdbd2cSJim Jagielski         }
478*b1cdbd2cSJim Jagielski 
479*b1cdbd2cSJim Jagielski         @Override
done()480*b1cdbd2cSJim Jagielski         protected void done()
481*b1cdbd2cSJim Jagielski         {
482*b1cdbd2cSJim Jagielski             try
483*b1cdbd2cSJim Jagielski             {
484*b1cdbd2cSJim Jagielski                 m_jLabel.setIcon(get());
485*b1cdbd2cSJim Jagielski             }
486*b1cdbd2cSJim Jagielski             catch (Exception e)
487*b1cdbd2cSJim Jagielski             {}
488*b1cdbd2cSJim Jagielski         }
489*b1cdbd2cSJim Jagielski 
490*b1cdbd2cSJim Jagielski     }
491*b1cdbd2cSJim Jagielski 
492*b1cdbd2cSJim Jagielski     /**
493*b1cdbd2cSJim Jagielski      * @param args the command line arguments
494*b1cdbd2cSJim Jagielski      */
main(final String args[])495*b1cdbd2cSJim Jagielski     public static void main(final String args[])
496*b1cdbd2cSJim Jagielski     {
497*b1cdbd2cSJim Jagielski 
498*b1cdbd2cSJim Jagielski         // Start GUI
499*b1cdbd2cSJim Jagielski 
500*b1cdbd2cSJim Jagielski         java.awt.EventQueue.invokeLater(new Runnable()
501*b1cdbd2cSJim Jagielski         {
502*b1cdbd2cSJim Jagielski 
503*b1cdbd2cSJim Jagielski             public void run()
504*b1cdbd2cSJim Jagielski             {
505*b1cdbd2cSJim Jagielski                 ConvwatchGUI aGUI = new ConvwatchGUI(args);
506*b1cdbd2cSJim Jagielski                 aGUI.setTitle("Graphical Compare");
507*b1cdbd2cSJim Jagielski                 aGUI.setPreferredSize(new Dimension(1024, 768));
508*b1cdbd2cSJim Jagielski 
509*b1cdbd2cSJim Jagielski                 aGUI.setVisible(true);
510*b1cdbd2cSJim Jagielski             }
511*b1cdbd2cSJim Jagielski         });
512*b1cdbd2cSJim Jagielski     }
513*b1cdbd2cSJim Jagielski     // Variables declaration - do not modify//GEN-BEGIN:variables
514*b1cdbd2cSJim Jagielski     private javax.swing.JButton jButton1;
515*b1cdbd2cSJim Jagielski     private javax.swing.JButton jButton2;
516*b1cdbd2cSJim Jagielski     private javax.swing.JButton jButton3;
517*b1cdbd2cSJim Jagielski     private javax.swing.JLabel jLabel1;
518*b1cdbd2cSJim Jagielski     private javax.swing.JLabel jLabelCurrentPage;
519*b1cdbd2cSJim Jagielski     private javax.swing.JLabel jLabelDifferenceImage;
520*b1cdbd2cSJim Jagielski     private javax.swing.JLabel jLabelDocumentName;
521*b1cdbd2cSJim Jagielski     private javax.swing.JLabel jLabelOriginalImage;
522*b1cdbd2cSJim Jagielski     private javax.swing.JLabel jLabelReferenceImage;
523*b1cdbd2cSJim Jagielski     private javax.swing.JPanel jPanel4;
524*b1cdbd2cSJim Jagielski     private javax.swing.JPanel jPanel5;
525*b1cdbd2cSJim Jagielski     private javax.swing.JPanel jPanelDifference;
526*b1cdbd2cSJim Jagielski     private javax.swing.JPanel jPanelOriginal;
527*b1cdbd2cSJim Jagielski     private javax.swing.JPanel jPanelReference;
528*b1cdbd2cSJim Jagielski     // End of variables declaration//GEN-END:variables
529*b1cdbd2cSJim Jagielski }
530