/**************************************************************************
OmegaT - Computer Assisted Translation (CAT) tool
with fuzzy matching, translation memory, keyword search,
glossaries, and translation leveraging into updated projects.
Copyright (C) 2000-2006 Keith Godfrey and Maxym Mykhalchuk
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.filters2;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.Window;
import javax.swing.DefaultCellEditor;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.TableColumn;
import org.omegat.filters2.IFilter;
import org.omegat.filters2.master.FilterMaster;
import org.omegat.filters2.master.OneFilterTableModel;
import org.omegat.util.OStrings;
import org.omegat.util.StringUtil;
import org.omegat.util.gui.StaticUIUtils;
import gen.core.filters.Files;
import gen.core.filters.Filter;
/**
* Editor for a single filter. Filter is a class that allows for reading and
* writing a single file format.
*
* @author Maxym Mykhalchuk
*/
@SuppressWarnings("serial")
public class FilterEditor extends JDialog implements ListSelectionListener {
private Filter filter;
public Filter result;
/** Creates new form SingleFilterEditor */
public FilterEditor(Window parent, Filter filter) {
super(parent);
setModal(true);
this.filter = FilterMaster.cloneFilter(filter);
StaticUIUtils.setEscapeClosable(this);
initComponents();
IFilter f = FilterMaster.getFilterInstance(filter.getClassName());
String hint = null;
if (f != null) {
fileFormatTextField.setText(f.getFileFormatName());
hint = f.getHint();
}
hintTextArea.setText(hint);
hintTextArea.setVisible(!StringUtil.isEmpty(hint));
getRootPane().setDefaultButton(okButton);
instances.getSelectionModel().addListSelectionListener(this);
TableColumn sourceEnc = instances.getColumnModel().getColumn(1);
sourceEnc.setCellEditor(new DefaultCellEditor(encodingComboBox()));
TableColumn targetEnc = instances.getColumnModel().getColumn(2);
targetEnc.setCellEditor(new DefaultCellEditor(encodingComboBox()));
// hack for "autoresizing" the dialog
// accomodating table dimensions
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
int width = instancesScrollPane.getPreferredSize().width + 200;
if (width > screenSize.width) {
width = screenSize.width - addButton.getWidth() - 50;
}
instancesScrollPane.setPreferredSize(new Dimension(width, instances.getPreferredSize().height + 70));
pack();
setLocationRelativeTo(parent);
}
private JComboBox<String> encodingComboBox() {
return new JComboBox<>(FilterMaster.getSupportedEncodings().toArray(new String[0]));
}
@Override
public void valueChanged(ListSelectionEvent e) {
if (e.getValueIsAdjusting())
return;
ListSelectionModel lsm = (ListSelectionModel) e.getSource();
if (lsm.isSelectionEmpty()) {
editButton.setEnabled(false);
removeButton.setEnabled(false);
} else {
editButton.setEnabled(true);
removeButton.setEnabled(true);
}
}
/**
* 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() {
java.awt.GridBagConstraints gridBagConstraints;
buttonPanel = new javax.swing.JPanel();
toDefaultsButton = new javax.swing.JButton();
jLabel1 = new javax.swing.JLabel();
okButton = new javax.swing.JButton();
cancelButton = new javax.swing.JButton();
fileFormatLabel = new javax.swing.JLabel();
fileFormatTextField = new javax.swing.JTextField();
descTextArea = new javax.swing.JTextArea();
jPanel3 = new javax.swing.JPanel();
instancesScrollPane = new javax.swing.JScrollPane();
instances = new javax.swing.JTable();
removeButton = new javax.swing.JButton();
editButton = new javax.swing.JButton();
addButton = new javax.swing.JButton();
hintTextArea = new javax.swing.JTextArea();
setTitle(OStrings.getString("FILTEREDITOR_Edit_a_single_file_filter")); // NOI18N
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
closeDialog(evt);
}
});
getContentPane().setLayout(new java.awt.GridBagLayout());
buttonPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.RIGHT));
org.openide.awt.Mnemonics.setLocalizedText(toDefaultsButton, OStrings.getString("BUTTON_TO_DEFAULTS")); // NOI18N
toDefaultsButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
toDefaultsButtonActionPerformed(evt);
}
});
buttonPanel.add(toDefaultsButton);
jLabel1.setPreferredSize(new java.awt.Dimension(20, 0));
buttonPanel.add(jLabel1);
org.openide.awt.Mnemonics.setLocalizedText(okButton, OStrings.getString("BUTTON_OK")); // NOI18N
okButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
okButtonActionPerformed(evt);
}
});
buttonPanel.add(okButton);
org.openide.awt.Mnemonics.setLocalizedText(cancelButton, OStrings.getString("BUTTON_CANCEL")); // NOI18N
cancelButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cancelButtonActionPerformed(evt);
}
});
buttonPanel.add(cancelButton);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 4;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3);
getContentPane().add(buttonPanel, gridBagConstraints);
org.openide.awt.Mnemonics.setLocalizedText(fileFormatLabel, OStrings.getString("FILTEREDITOR_File_Format")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3);
getContentPane().add(fileFormatLabel, gridBagConstraints);
fileFormatTextField.setEditable(false);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3);
getContentPane().add(fileFormatTextField, gridBagConstraints);
descTextArea.setEditable(false);
descTextArea.setFont(fileFormatLabel.getFont());
descTextArea.setLineWrap(true);
descTextArea.setText(OStrings.getString("FILTEREDITOR_DESC")); // NOI18N
descTextArea.setWrapStyleWord(true);
descTextArea.setDragEnabled(false);
descTextArea.setOpaque(false);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3);
getContentPane().add(descTextArea, gridBagConstraints);
jPanel3.setLayout(new java.awt.GridBagLayout());
instances.setModel(new OneFilterTableModel(filter));
instances.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
instancesScrollPane.setViewportView(instances);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.gridheight = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
jPanel3.add(instancesScrollPane, gridBagConstraints);
org.openide.awt.Mnemonics.setLocalizedText(removeButton, OStrings.getString("BUTTON_REMOVE")); // NOI18N
removeButton.setEnabled(false);
removeButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
removeButtonActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
jPanel3.add(removeButton, gridBagConstraints);
org.openide.awt.Mnemonics.setLocalizedText(editButton, OStrings.getString("BUTTON_EDIT")); // NOI18N
editButton.setEnabled(false);
editButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
editButtonActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 1;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
jPanel3.add(editButton, gridBagConstraints);
org.openide.awt.Mnemonics.setLocalizedText(addButton, OStrings.getString("BUTTON_ADD")); // NOI18N
addButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
addButtonActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 0;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
jPanel3.add(addButton, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 3;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3);
getContentPane().add(jPanel3, gridBagConstraints);
hintTextArea.setEditable(false);
hintTextArea.setFont(new JLabel().getFont());
hintTextArea.setLineWrap(true);
hintTextArea.setWrapStyleWord(true);
hintTextArea.setOpaque(false);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.gridwidth = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3);
getContentPane().add(hintTextArea, gridBagConstraints);
}// </editor-fold>//GEN-END:initComponents
private void removeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeButtonActionPerformed
int row = instances.getSelectedRow();
Files instance = filter.getFiles().get(row);
if (JOptionPane.YES_OPTION == JOptionPane.showConfirmDialog(this,
StringUtil.format(OStrings.getString("FILTEREDITOR_really_delete_filter_instance"),
instance.getSourceFilenameMask()),
OStrings.getString("FILTEREDITOR_Confirm_deletion_TITLE"), JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE)) {
filter.getFiles().remove(row);
instances.setModel(new OneFilterTableModel(filter));
}
}//GEN-LAST:event_removeButtonActionPerformed
private void toDefaultsButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_toDefaultsButtonActionPerformed
try {
filter = FilterMaster.getDefaultSettingsFromFilter(filter.getClassName());
instances.setModel(new OneFilterTableModel(filter));
} catch (Exception e) {
JOptionPane.showMessageDialog(this,
OStrings.getString("FILTEREDITOR_ERROR_Reverting_To_Def") + e,
OStrings.getString("ERROR_TITLE"), JOptionPane.ERROR_MESSAGE);
}
}//GEN-LAST:event_toDefaultsButtonActionPerformed
private void addButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addButtonActionPerformed
IFilter f = FilterMaster.getFilterInstance(filter.getClassName());
if (f == null) {
return;
}
InstanceEditor ie = new InstanceEditor(this, f.isSourceEncodingVariable(),
f.isTargetEncodingVariable(), f.getHint());
ie.setVisible(true);
if (ie.getReturnStatus() == InstanceEditor.RET_OK) {
Files ff = new Files();
ff.setSourceEncoding(setEncodingName(ie.getSourceEncoding()));
ff.setSourceFilenameMask(ie.getSourceFilenameMask());
ff.setTargetEncoding(setEncodingName(ie.getTargetEncoding()));
ff.setTargetFilenamePattern(ie.getTargetFilenamePattern());
filter.getFiles().add(ff);
instances.setModel(new OneFilterTableModel(filter));
}
}//GEN-LAST:event_addButtonActionPerformed
private void editButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_editButtonActionPerformed
int row = instances.getSelectedRow();
IFilter f = FilterMaster.getFilterInstance(filter.getClassName());
if (f == null) {
return;
}
InstanceEditor ie = new InstanceEditor(this, f.isSourceEncodingVariable(),
f.isTargetEncodingVariable(), f.getHint(),
instances.getModel().getValueAt(row, 0).toString(), instances.getModel().getValueAt(row, 1)
.toString(), instances.getModel().getValueAt(row, 2).toString(), instances.getModel()
.getValueAt(row, 3).toString());
ie.setVisible(true);
if (ie.getReturnStatus() == InstanceEditor.RET_OK) {
Files ff = new Files();
ff.setSourceEncoding(setEncodingName(ie.getSourceEncoding()));
ff.setSourceFilenameMask(ie.getSourceFilenameMask());
ff.setTargetEncoding(setEncodingName(ie.getTargetEncoding()));
ff.setTargetFilenamePattern(ie.getTargetFilenamePattern());
filter.getFiles().set(row, ff);
instances.setModel(new OneFilterTableModel(filter));
}
}//GEN-LAST:event_editButtonActionPerformed
private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_okButtonActionPerformed
doClose(filter);
}//GEN-LAST:event_okButtonActionPerformed
private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelButtonActionPerformed
doClose(null);
}//GEN-LAST:event_cancelButtonActionPerformed
/** Closes the dialog */
private void closeDialog(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_closeDialog
doClose(null);
}//GEN-LAST:event_closeDialog
private void doClose(Filter r) {
result = r;
setVisible(false);
dispose();
}
private String setEncodingName(final String encName) {
return OStrings.getString("ENCODING_AUTO").equals(encName) ? null : encName;
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton addButton;
private javax.swing.JPanel buttonPanel;
private javax.swing.JButton cancelButton;
private javax.swing.JTextArea descTextArea;
private javax.swing.JButton editButton;
private javax.swing.JLabel fileFormatLabel;
private javax.swing.JTextField fileFormatTextField;
private javax.swing.JTextArea hintTextArea;
private javax.swing.JTable instances;
private javax.swing.JScrollPane instancesScrollPane;
private javax.swing.JLabel jLabel1;
private javax.swing.JPanel jPanel3;
private javax.swing.JButton okButton;
private javax.swing.JButton removeButton;
private javax.swing.JButton toDefaultsButton;
// End of variables declaration//GEN-END:variables
}