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