/* Copyright 2004-2014 Jim Voris * * Licensed 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. */ package com.qumasoft.guitools.qwin.dialog; import com.qumasoft.guitools.qwin.operation.OperationCompareRevisions; import com.qumasoft.qvcslib.LabelInfo; import com.qumasoft.qvcslib.LogfileInfo; import com.qumasoft.qvcslib.MergedInfoInterface; import com.qumasoft.qvcslib.RevisionInformation; import java.io.File; import javax.swing.DefaultListModel; import javax.swing.JFileChooser; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; /** * Compare revisions dialog. * @author Jim Voris */ public class CompareRevisionsDialog extends AbstractQWinCommandDialog implements ListSelectionListener { private static final long serialVersionUID = 8688069875269169702L; private final OperationCompareRevisions operationCompareRevisions; private Object[] selectedRevisions; private final MergedInfoInterface mergedInfo; private File selectedFile; /** * Create a new compare revisions dialog. * @param parent the parent frame. * @param info the file containing the revisions to compare. * @param operation the operation that will do the work. */ public CompareRevisionsDialog(java.awt.Frame parent, MergedInfoInterface info, OperationCompareRevisions operation) { super(parent, false); mergedInfo = info; operationCompareRevisions = operation; initComponents(); populateComponents(); getRootPane().setDefaultButton(compareToWorkfileButton); revisionsToCompareList.requestFocusInWindow(); setFont(); center(); } /** 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. */ // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { revisionsToCompareLabel = new javax.swing.JLabel(); compareToWorkfileButton = new javax.swing.JButton(); closeButton = new javax.swing.JButton(); rightBottomAnchor = new javax.swing.JLabel(); revisionListScrollPane = new javax.swing.JScrollPane(); revisionsToCompareList = new javax.swing.JList(); compareToFileButton = new javax.swing.JButton(); setTitle("Compare Revisions"); setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N setResizable(false); addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { closeDialog(evt); } }); revisionsToCompareLabel.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N revisionsToCompareLabel.setText("Revisions to compare:"); compareToWorkfileButton.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N compareToWorkfileButton.setText("Compare to workfile"); compareToWorkfileButton.setToolTipText("Compare to the current workfile"); compareToWorkfileButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { compareToWorkfileButtonActionPerformed(evt); } }); closeButton.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N closeButton.setText("Close"); closeButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { closeButtonActionPerformed(evt); } }); rightBottomAnchor.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N rightBottomAnchor.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); rightBottomAnchor.setText(" "); rightBottomAnchor.setEnabled(false); rightBottomAnchor.setFocusable(false); rightBottomAnchor.setMaximumSize(new java.awt.Dimension(12, 12)); rightBottomAnchor.setMinimumSize(new java.awt.Dimension(12, 12)); rightBottomAnchor.setPreferredSize(new java.awt.Dimension(12, 12)); revisionsToCompareList.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N revisionListScrollPane.setViewportView(revisionsToCompareList); compareToFileButton.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N compareToFileButton.setText("Compare to file..."); compareToFileButton.setToolTipText("Choose a file to compare"); compareToFileButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { compareToFileButtonActionPerformed(evt); } }); org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .add(12, 12, 12) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(revisionsToCompareLabel) .add(layout.createSequentialGroup() .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING, false) .add(layout.createSequentialGroup() .add(compareToWorkfileButton) .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .add(compareToFileButton, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 143, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(18, 18, 18) .add(closeButton)) .add(org.jdesktop.layout.GroupLayout.LEADING, revisionListScrollPane, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 386, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) .add(28, 28, 28) .add(rightBottomAnchor, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)))) ); layout.setVerticalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .add(12, 12, 12) .add(revisionsToCompareLabel) .add(4, 4, 4) .add(revisionListScrollPane, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 110, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .add(10, 10, 10) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .add(20, 20, 20) .add(rightBottomAnchor, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) .add(compareToWorkfileButton) .add(closeButton) .add(compareToFileButton))) .addContainerGap(20, Short.MAX_VALUE)) ); pack(); }// </editor-fold>//GEN-END:initComponents private void compareToWorkfileButtonActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_compareToWorkfileButtonActionPerformed {//GEN-HEADEREND:event_compareToWorkfileButtonActionPerformed selectedFile = null; operationCompareRevisions.processDialogResult(mergedInfo, this); }//GEN-LAST:event_compareToWorkfileButtonActionPerformed private void closeButtonActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_closeButtonActionPerformed {//GEN-HEADEREND:event_closeButtonActionPerformed closeDialog(null); }//GEN-LAST:event_closeButtonActionPerformed /** Closes the dialog */ private void closeDialog(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_closeDialog setVisible(false); dispose(); }//GEN-LAST:event_closeDialog private void compareToFileButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_compareToFileButtonActionPerformed JFileChooser fileToCompareChooser = new JFileChooser(); fileToCompareChooser.setCurrentDirectory(mergedInfo.getWorkfile()); fileToCompareChooser.setApproveButtonText("OK"); fileToCompareChooser.setApproveButtonToolTipText("Compare to selected file"); int returnVal = fileToCompareChooser.showOpenDialog(getParent()); if (returnVal == JFileChooser.APPROVE_OPTION) { selectedFile = fileToCompareChooser.getSelectedFile(); operationCompareRevisions.processDialogResult(mergedInfo, this); } }//GEN-LAST:event_compareToFileButtonActionPerformed @Override public void dismissDialog() { closeButtonActionPerformed(null); } private void populateComponents() { compareToWorkfileButton.setEnabled(false); compareToFileButton.setEnabled(true); revisionsToCompareList.addListSelectionListener(this); revisionsToCompareList.setModel(new RevisionsListModel(mergedInfo)); } /** * Called whenever the value of the selection changes. * * @param e the event that characterizes the change. * */ @Override public void valueChanged(ListSelectionEvent e) { int[] selectedIndices = revisionsToCompareList.getSelectedIndices(); if (selectedIndices.length == 0) { compareToWorkfileButton.setEnabled(false); compareToFileButton.setEnabled(true); } else if (selectedIndices.length == 1) { compareToWorkfileButton.setText("Compare to workfile"); compareToFileButton.setEnabled(true); // The button can only be enabled if the workfile exists. if (mergedInfo.getWorkfileInfo() == null) { compareToWorkfileButton.setEnabled(false); } else { compareToWorkfileButton.setEnabled(true); } } else if (selectedIndices.length == 2) { compareToWorkfileButton.setEnabled(true); compareToFileButton.setEnabled(false); compareToWorkfileButton.setText("Compare revisions"); } else { compareToWorkfileButton.setEnabled(false); compareToFileButton.setEnabled(false); } if (selectedRevisions != null) { if (!(selectedIndices.length == selectedRevisions.length)) { selectedRevisions = new Object[selectedIndices.length]; } } else { selectedRevisions = new Object[selectedIndices.length]; } Object[] selectedItems = revisionsToCompareList.getSelectedValuesList().toArray(); System.arraycopy(selectedItems, 0, selectedRevisions, 0, selectedIndices.length); } public Object[] getSelectedRevisions() { return selectedRevisions; } public File getSelectedFile() { return selectedFile; } static class RevisionsListModel extends DefaultListModel<Object> { private static final long serialVersionUID = 1L; RevisionsListModel(Object o) { MergedInfoInterface mergedInfo = (MergedInfoInterface) o; // Populate the list of revisions... LogfileInfo logfileInfo = mergedInfo.getLogfileInfo(); RevisionInformation revisionInformation = logfileInfo.getRevisionInformation(); for (int i = 0; i < logfileInfo.getLogFileHeaderInfo().getRevisionCount(); i++) { addElement(revisionInformation.getRevisionHeader(i).getRevisionString()); } LabelInfo[] labelInfoArray = logfileInfo.getLogFileHeaderInfo().getLabelInfo(); if (labelInfoArray != null) { for (LabelInfo labelInfoArray1 : labelInfoArray) { addElement(labelInfoArray1); } } } } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton closeButton; private javax.swing.JButton compareToFileButton; private javax.swing.JButton compareToWorkfileButton; private javax.swing.JScrollPane revisionListScrollPane; private javax.swing.JLabel revisionsToCompareLabel; private javax.swing.JList revisionsToCompareList; private javax.swing.JLabel rightBottomAnchor; // End of variables declaration//GEN-END:variables }