/**************************************************************************
OmegaT - Computer Assisted Translation (CAT) tool
with fuzzy matching, translation memory, keyword search,
glossaries, and translation leveraging into updated projects.
Copyright (C) 2009 Alex Buloichik
2012 Thomas Cordonnier
2015 Aaron Madlon-Kay
Home page: http://www.omegat.org/
Support center: http://groups.yahoo.com/group/OmegaT/
This file is part of OmegaT.
OmegaT is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OmegaT is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
**************************************************************************/
package org.omegat.gui.stat;
import java.awt.Frame;
import java.awt.Toolkit;
import java.awt.datatransfer.StringSelection;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JComponent;
import javax.swing.SwingUtilities;
import org.omegat.core.statistics.CalcMatchStatistics;
import org.omegat.core.statistics.CalcStandardStatistics;
import org.omegat.core.threads.LongProcessThread;
import org.omegat.util.OStrings;
import org.omegat.util.gui.StaticUIUtils;
/**
* Display match statistics window and save data to file.
*
* @author Alex Buloichik (alex73mail@gmail.com)
* @author Thomas Cordonnier
* @author Aaron Madlon-Kay
*/
@SuppressWarnings("serial")
public class StatisticsWindow extends javax.swing.JDialog {
private String textData;
public static enum STAT_TYPE {
STANDARD, MATCHES, MATCHES_PER_FILE
};
private transient LongProcessThread thread;
/**
* Creates new form StatisticsWindow
*/
public StatisticsWindow(Frame parent, STAT_TYPE statType) {
super(parent, true);
initComponents();
copyDataButton.setVisible(false);
JComponent output = null;
switch (statType) {
case STANDARD:
setTitle(OStrings.getString("CT_STATSSTANDARD_WindowHeader"));
StatisticsPanel panel = new StatisticsPanel(this);
thread = new CalcStandardStatistics(panel);
output = panel;
break;
case MATCHES:
setTitle(OStrings.getString("CT_STATSMATCH_WindowHeader"));
MatchStatisticsPanel panel1 = new MatchStatisticsPanel(this);
thread = new CalcMatchStatistics(panel1, false);
output = panel1;
break;
case MATCHES_PER_FILE:
setTitle(OStrings.getString("CT_STATSMATCH_PER_FILE_WindowHeader"));
PerFileMatchStatisticsPanel panel2 = new PerFileMatchStatisticsPanel(this);
thread = new CalcMatchStatistics(panel2, true);
output = panel2;
break;
}
// Run calculation
thread.setPriority(Thread.MIN_PRIORITY);
displayPanel.add(output);
StaticUIUtils.setEscapeClosable(this);
addWindowListener(new WindowAdapter() {
@Override
public void windowOpened(WindowEvent e) {
thread.start();
}
@Override
public void windowClosing(WindowEvent e) {
thread.fin();
}
});
setSize(800, 400);
setLocationRelativeTo(parent);
}
/**
* 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() {
displayPanel = new javax.swing.JPanel();
jPanel2 = new javax.swing.JPanel();
filler1 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(32767, 0));
progressBar = new javax.swing.JProgressBar();
copyDataButton = new javax.swing.JButton();
closeButton = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
displayPanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(10, 10, 10, 10));
displayPanel.setLayout(new java.awt.BorderLayout());
getContentPane().add(displayPanel, java.awt.BorderLayout.CENTER);
jPanel2.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 10, 10, 10));
jPanel2.setLayout(new javax.swing.BoxLayout(jPanel2, javax.swing.BoxLayout.LINE_AXIS));
jPanel2.add(filler1);
progressBar.setStringPainted(true);
jPanel2.add(progressBar);
org.openide.awt.Mnemonics.setLocalizedText(copyDataButton, OStrings.getString("CT_STATS_CopyToClipboard")); // NOI18N
copyDataButton.setEnabled(false);
copyDataButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
copyDataButtonActionPerformed(evt);
}
});
jPanel2.add(copyDataButton);
org.openide.awt.Mnemonics.setLocalizedText(closeButton, OStrings.getString("BUTTON_CLOSE")); // NOI18N
closeButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
closeButtonActionPerformed(evt);
}
});
jPanel2.add(closeButton);
getContentPane().add(jPanel2, java.awt.BorderLayout.SOUTH);
pack();
}// </editor-fold>//GEN-END:initComponents
private void copyDataButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_copyDataButtonActionPerformed
if (textData != null) {
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(
new StringSelection(textData), null);
}
}//GEN-LAST:event_copyDataButtonActionPerformed
private void closeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_closeButtonActionPerformed
// Apparently calling dispose() does not invoke
// WindowListener.windowClosing() so we have to be sure to end the
// thread here too.
// See https://sourceforge.net/p/omegat/bugs/789/
thread.fin();
dispose();
}//GEN-LAST:event_closeButtonActionPerformed
public void setTextData(final String textData) {
this.textData = textData;
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
copyDataButton.setEnabled(textData != null && !textData.isEmpty());
}
});
}
public void showProgress(final int percent) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
progressBar.setValue(percent);
progressBar.setString(percent + "%");
}
});
}
public void finishData() {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
progressBar.setValue(100);
progressBar.setString("");
progressBar.setVisible(false);
copyDataButton.setVisible(true);
}
});
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton closeButton;
private javax.swing.JButton copyDataButton;
javax.swing.JPanel displayPanel;
private javax.swing.Box.Filler filler1;
private javax.swing.JPanel jPanel2;
javax.swing.JProgressBar progressBar;
// End of variables declaration//GEN-END:variables
}