blob: 4a8f2f028cf7593c30a88bdd8762d2f805908bc6 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
import java.awt.Dimension;
import java.awt.Image;
import java.io.File;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.SwingWorker;
/*
* Simple windows, which should show differences if there are some
*/
public class ConvwatchGUI extends javax.swing.JFrame
{
private ImageIcon[] m_aImageIcon;
private String m_sInifile;
private int m_nMaxPages;
private int m_nCurrentPage;
/** Creates new form ConvwatchGUI
* @param args
*/
private ConvwatchGUI(String args[])
{
if (args.length > 0)
{
if (args[0].endsWith(".ini"))
{
m_sInifile = args[0];
fillImageIconsFromInifile();
}
else
{
fillImageIcons(args);
}
}
String sVersion = System.getProperty("java.version");
Float f = Float.valueOf(sVersion.substring(0,3));
if (f.floatValue() < (float)1.6)
{
System.out.println("You need at least Java version 1.6");
System.exit(1);
}
initComponents();
jLabelDocumentName.setText("Document: " + m_sInifile);
}
void fillImageIconsFromInifile()
{
File aFile = new File(m_sInifile);
if (!aFile.exists())
{
GlobalLogWriter.println("Inifile '" + m_sInifile + "' not found.");
printUsage();
System.exit(1);
}
IniFile aIniFile = new IniFile(aFile);
int nPages = aIniFile.getIntValue("global", "pages", 0);
if (nPages < 1)
{
System.out.println("No pages found.");
}
m_nMaxPages = nPages;
m_nCurrentPage = 1;
fillImageIcons();
}
private void fillImageIcons()
{
File aFile = new File(m_sInifile);
IniFile aIniFile = new IniFile(aFile);
String sSection = "page" + m_nCurrentPage;
String[] files = new String[3];
files[0] = aIniFile.getValue(sSection, "newgfx"); // current created picture
files[1] = aIniFile.getValue(sSection, "oldgfx"); // reference picture
files[2] = aIniFile.getValue(sSection, "diffgfx");
fillImageIcons(files);
}
/**
* Give 3 file names
* @param args
*/
private void fillImageIcons(String args[])
{
boolean bLoadImages = false;
m_aImageIcon = new ImageIcon[3];
for (int i=0;i<3;i++)
{
if (args.length > i && args[i] != null)
{
File aFile = new File(args[i]);
if (aFile.exists())
{
// TODO: Load images
// Image aImage = new BufferedImage(100,100, BufferedImage.TYPE_INT_RGB);
// aImage.
m_aImageIcon[i] = new ImageIcon(args[i]);
if (m_aImageIcon[i] != null)
{
bLoadImages = true;
}
}
else
{
System.out.println("Can't read file: " + aFile.getName());
bLoadImages = false;
}
}
else
{
System.out.println("There is no #" + (i + 1) + " image given.");
bLoadImages = false;
}
}
// if (!bLoadImages)
// {
// printUsage();
// System.exit(1);
// }
// TODO: Set images.
// formComponentResized(null);
}
private void printUsage()
{
System.out.println("Usage:");
System.out.println(" ConvwatchGUI <pic1> <pic2> <pic3>");
System.out.println("or ConvwatchGUI <inifile>");
}
// private int m_nOldWidth;
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
jPanelOriginal = new javax.swing.JPanel();
jLabelOriginalImage = new javax.swing.JLabel();
jPanelReference = new javax.swing.JPanel();
jLabelReferenceImage = new javax.swing.JLabel();
jPanelDifference = new javax.swing.JPanel();
jLabelDifferenceImage = new javax.swing.JLabel();
jPanel4 = new javax.swing.JPanel();
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
jButton3 = new javax.swing.JButton();
jLabelCurrentPage = new javax.swing.JLabel();
jPanel5 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
jLabelDocumentName = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
addComponentListener(new java.awt.event.ComponentAdapter() {
public void componentResized(java.awt.event.ComponentEvent evt) {
formComponentResized(evt);
}
});
addPropertyChangeListener(new java.beans.PropertyChangeListener() {
public void propertyChange(java.beans.PropertyChangeEvent evt) {
formPropertyChange(evt);
}
});
jPanelOriginal.setBorder(javax.swing.BorderFactory.createTitledBorder("Picture"));
javax.swing.GroupLayout jPanelOriginalLayout = new javax.swing.GroupLayout(jPanelOriginal);
jPanelOriginal.setLayout(jPanelOriginalLayout);
jPanelOriginalLayout.setHorizontalGroup(
jPanelOriginalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanelOriginalLayout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabelOriginalImage, javax.swing.GroupLayout.DEFAULT_SIZE, 299, Short.MAX_VALUE)
.addContainerGap())
);
jPanelOriginalLayout.setVerticalGroup(
jPanelOriginalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanelOriginalLayout.createSequentialGroup()
.addComponent(jLabelOriginalImage, javax.swing.GroupLayout.DEFAULT_SIZE, 514, Short.MAX_VALUE)
.addContainerGap())
);
jPanelReference.setBorder(javax.swing.BorderFactory.createTitledBorder("Reference Picture"));
javax.swing.GroupLayout jPanelReferenceLayout = new javax.swing.GroupLayout(jPanelReference);
jPanelReference.setLayout(jPanelReferenceLayout);
jPanelReferenceLayout.setHorizontalGroup(
jPanelReferenceLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanelReferenceLayout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabelReferenceImage, javax.swing.GroupLayout.DEFAULT_SIZE, 299, Short.MAX_VALUE)
.addContainerGap())
);
jPanelReferenceLayout.setVerticalGroup(
jPanelReferenceLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanelReferenceLayout.createSequentialGroup()
.addComponent(jLabelReferenceImage, javax.swing.GroupLayout.DEFAULT_SIZE, 514, Short.MAX_VALUE)
.addContainerGap())
);
jPanelDifference.setBorder(javax.swing.BorderFactory.createTitledBorder("Difference"));
jLabelDifferenceImage.setName("DifferenceImage"); // NOI18N
javax.swing.GroupLayout jPanelDifferenceLayout = new javax.swing.GroupLayout(jPanelDifference);
jPanelDifference.setLayout(jPanelDifferenceLayout);
jPanelDifferenceLayout.setHorizontalGroup(
jPanelDifferenceLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanelDifferenceLayout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabelDifferenceImage, javax.swing.GroupLayout.DEFAULT_SIZE, 298, Short.MAX_VALUE)
.addContainerGap())
);
jPanelDifferenceLayout.setVerticalGroup(
jPanelDifferenceLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanelDifferenceLayout.createSequentialGroup()
.addComponent(jLabelDifferenceImage, javax.swing.GroupLayout.DEFAULT_SIZE, 514, Short.MAX_VALUE)
.addContainerGap())
);
jPanel4.setBorder(javax.swing.BorderFactory.createTitledBorder("Action"));
jButton1.setText("Close");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jButton2.setLabel("prev page");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});
jButton3.setLabel("next page");
jButton3.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton3ActionPerformed(evt);
}
});
jLabelCurrentPage.setText("Current page: 1");
javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4);
jPanel4.setLayout(jPanel4Layout);
jPanel4Layout.setHorizontalGroup(
jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel4Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jButton2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jButton3)
.addGap(18, 18, 18)
.addComponent(jLabelCurrentPage, javax.swing.GroupLayout.PREFERRED_SIZE, 107, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 614, Short.MAX_VALUE)
.addComponent(jButton1)
.addContainerGap())
);
jPanel4Layout.setVerticalGroup(
jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel4Layout.createSequentialGroup()
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButton1)
.addComponent(jButton2)
.addComponent(jButton3)
.addComponent(jLabelCurrentPage))
.addContainerGap())
);
jPanel5.setBorder(javax.swing.BorderFactory.createTitledBorder("Information"));
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
jLabelDocumentName.setText("jLabel2");
javax.swing.GroupLayout jPanel5Layout = new javax.swing.GroupLayout(jPanel5);
jPanel5.setLayout(jPanel5Layout);
jPanel5Layout.setHorizontalGroup(
jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel5Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jLabel1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 972, Short.MAX_VALUE)
.addComponent(jLabelDocumentName, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 972, Short.MAX_VALUE))
.addContainerGap())
);
jPanel5Layout.setVerticalGroup(
jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel5Layout.createSequentialGroup()
.addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, 50, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabelDocumentName, javax.swing.GroupLayout.PREFERRED_SIZE, 19, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jPanel5, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jPanel4, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addComponent(jPanelOriginal, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPanelReference, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPanelDifference, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jPanelReference, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jPanelOriginal, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jPanelDifference, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
);
pack();
}// </editor-fold>//GEN-END:initComponents
private boolean bAdd = false;
private void formComponentResized(java.awt.event.ComponentEvent evt)//GEN-FIRST:event_formComponentResized
{//GEN-HEADEREND:event_formComponentResized
// TODO add your handling code here:
// we need to set icons to null
// if we don't do this, icons can only grow, but not shrink :-(
initialiseImages();
}
private void initialiseImages()
{
if (jLabelOriginalImage.getIcon() != null)
{
jLabelOriginalImage.setIcon(null);
jLabelReferenceImage.setIcon(null);
jLabelDifferenceImage.setIcon(null);
int w = getWidth();
int h = getHeight();
if (bAdd)
{
this.setSize(w, h + 1);
bAdd = false;
}
else
{
this.setSize(w, h - 1);
bAdd = true;
}
}
else
{
new ResizeImage(jLabelOriginalImage, m_aImageIcon[0]).execute();
new ResizeImage(jLabelReferenceImage, m_aImageIcon[1]).execute();
new ResizeImage(jLabelDifferenceImage, m_aImageIcon[2]).execute();
}
int dummy=0;
}//GEN-LAST:event_formComponentResized
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_jButton1ActionPerformed
{//GEN-HEADEREND:event_jButton1ActionPerformed
// TODO add your handling code here:
System.exit(1);
}//GEN-LAST:event_jButton1ActionPerformed
private void formPropertyChange(java.beans.PropertyChangeEvent evt)//GEN-FIRST:event_formPropertyChange
{//GEN-HEADEREND:event_formPropertyChange
// TODO add your handling code here:
int dummy = 0;
}//GEN-LAST:event_formPropertyChange
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_jButton2ActionPerformed
{//GEN-HEADEREND:event_jButton2ActionPerformed
// TODO add your handling code here:
int nOldPage = m_nCurrentPage;
if (m_nCurrentPage > 1)
{
m_nCurrentPage--;
}
if (nOldPage != m_nCurrentPage)
{
jLabelCurrentPage.setText("Current page: " + m_nCurrentPage);
fillImageIcons();
initialiseImages();
}
}//GEN-LAST:event_jButton2ActionPerformed
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_jButton3ActionPerformed
{//GEN-HEADEREND:event_jButton3ActionPerformed
// TODO add your handling code here:
int nOldPage = m_nCurrentPage;
if (m_nCurrentPage < m_nMaxPages)
{
m_nCurrentPage++;
}
if (nOldPage != m_nCurrentPage)
{
jLabelCurrentPage.setText("Current page: " + m_nCurrentPage);
fillImageIcons();
initialiseImages();
}
}//GEN-LAST:event_jButton3ActionPerformed
class ResizeImage extends SwingWorker <ImageIcon, Object>
{
private JLabel m_jLabel;
private ImageIcon m_aImageIcon;
private int w;
private int h;
public ResizeImage(JLabel _aLabel, ImageIcon _aImageIcon)
{
m_jLabel = _aLabel;
m_aImageIcon = _aImageIcon;
w = _aLabel.getWidth();
h = _aLabel.getHeight();
}
// dont access here anything to "Event Swing Thread"
@Override
public ImageIcon doInBackground()
{
Image aImage = m_aImageIcon.getImage().getScaledInstance(w, h, Image.SCALE_AREA_AVERAGING); // SCALE_SMOOTH
final ImageIcon aIcon = new ImageIcon(aImage);
// m_jLabel.setIcon(aIcon);
return aIcon;
}
@Override
protected void done()
{
try
{
m_jLabel.setIcon(get());
}
catch (Exception e)
{}
}
}
/**
* @param args the command line arguments
*/
public static void main(final String args[])
{
// Start GUI
java.awt.EventQueue.invokeLater(new Runnable()
{
public void run()
{
ConvwatchGUI aGUI = new ConvwatchGUI(args);
aGUI.setTitle("Graphical Compare");
aGUI.setPreferredSize(new Dimension(1024, 768));
aGUI.setVisible(true);
}
});
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JButton jButton3;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabelCurrentPage;
private javax.swing.JLabel jLabelDifferenceImage;
private javax.swing.JLabel jLabelDocumentName;
private javax.swing.JLabel jLabelOriginalImage;
private javax.swing.JLabel jLabelReferenceImage;
private javax.swing.JPanel jPanel4;
private javax.swing.JPanel jPanel5;
private javax.swing.JPanel jPanelDifference;
private javax.swing.JPanel jPanelOriginal;
private javax.swing.JPanel jPanelReference;
// End of variables declaration//GEN-END:variables
}