summaryrefslogtreecommitdiffstats
path: root/JLanguageTool/src/java/de/danielnaber/languagetool/gui/LanguageManagerDialog.java
diff options
context:
space:
mode:
Diffstat (limited to 'JLanguageTool/src/java/de/danielnaber/languagetool/gui/LanguageManagerDialog.java')
-rw-r--r--JLanguageTool/src/java/de/danielnaber/languagetool/gui/LanguageManagerDialog.java184
1 files changed, 184 insertions, 0 deletions
diff --git a/JLanguageTool/src/java/de/danielnaber/languagetool/gui/LanguageManagerDialog.java b/JLanguageTool/src/java/de/danielnaber/languagetool/gui/LanguageManagerDialog.java
new file mode 100644
index 0000000..18c5b26
--- /dev/null
+++ b/JLanguageTool/src/java/de/danielnaber/languagetool/gui/LanguageManagerDialog.java
@@ -0,0 +1,184 @@
+/* LanguageTool, a natural language style checker
+ * Copyright (C) 2007 Daniel Naber (http://www.danielnaber.de)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
+ * USA
+ */
+package de.danielnaber.languagetool.gui;
+
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.Frame;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.Toolkit;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JDialog;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JRootPane;
+import javax.swing.JScrollPane;
+import javax.swing.KeyStroke;
+import javax.swing.filechooser.FileFilter;
+
+import de.danielnaber.languagetool.Language;
+import de.danielnaber.languagetool.language.LanguageBuilder;
+
+/**
+ * Dialog for managing externally loaded rules.
+ *
+ * @author Daniel Naber
+ */
+public class LanguageManagerDialog implements ActionListener {
+
+ private JDialog dialog;
+
+ private JList list;
+ private JButton addButton;
+ private JButton removeButton;
+ private JButton closeButton;
+ private final List<File> ruleFiles = new ArrayList<File>();
+
+ private final Frame owner;
+ //private ResourceBundle messages = null;
+
+ public LanguageManagerDialog(Frame owner, List<Language> languages) {
+ this.owner = owner;
+ for (Language lang : languages) {
+ ruleFiles.add(new File(lang.getRuleFileName()));
+ }
+ //messages = JLanguageTool.getMessageBundle();
+ }
+
+ public void show() {
+ dialog = new JDialog(owner, true);
+ dialog.setTitle("Language Module Manager"); // FIXME: i18n
+
+ // close dialog when user presses Escape key:
+ // TODO: taken from ConfigurationDialog, avoid duplication:
+ final KeyStroke stroke = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0);
+ final ActionListener actionListener = new ActionListener() {
+ @SuppressWarnings("unused")
+ public void actionPerformed(ActionEvent actionEvent) {
+ dialog.setVisible(false);
+ }
+ };
+ final JRootPane rootPane = dialog.getRootPane();
+ rootPane.registerKeyboardAction(actionListener, stroke, JComponent.WHEN_IN_FOCUSED_WINDOW);
+
+ final Container contentPane = dialog.getContentPane();
+ contentPane.setLayout(new GridBagLayout());
+
+ list = new JList(ruleFiles.toArray(new File[]{}));
+ GridBagConstraints cons = new GridBagConstraints();
+ cons.insets = new Insets(4, 4, 4, 4);
+ cons.gridx = 0;
+ cons.gridy = 0;
+ cons.fill = GridBagConstraints.BOTH;
+ cons.weightx = 2.0f;
+ cons.weighty = 2.0f;
+ contentPane.add(new JScrollPane(list), cons);
+
+ cons = new GridBagConstraints();
+ cons.insets = new Insets(4, 4, 4, 4);
+ cons.fill = GridBagConstraints.HORIZONTAL;
+
+ final JPanel buttonPanel = new JPanel();
+ buttonPanel.setLayout(new GridBagLayout());
+ addButton = new JButton("Add..."); // FIXME: i18n
+ addButton.addActionListener(this);
+ cons.gridx = 1;
+ cons.gridy = 0;
+ buttonPanel.add(addButton, cons);
+
+ removeButton = new JButton("Remove"); // FIXME: i18n
+ removeButton.addActionListener(this);
+ cons.gridx = 1;
+ cons.gridy = 1;
+ buttonPanel.add(removeButton, cons);
+
+ closeButton = new JButton("Close"); // FIXME: i18n
+ closeButton.addActionListener(this);
+ cons.gridx = 1;
+ cons.gridy = 2;
+ buttonPanel.add(closeButton, cons);
+
+ cons.gridx = 1;
+ cons.gridy = 0;
+ cons = new GridBagConstraints();
+ cons.anchor = GridBagConstraints.NORTH;
+ contentPane.add(buttonPanel, cons);
+
+ dialog.pack();
+ dialog.setSize(300, 200);
+ // center on screen:
+ final Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
+ final Dimension frameSize = dialog.getSize();
+ dialog.setLocation(screenSize.width/2 - (frameSize.width/2), screenSize.height/2 - (frameSize.height/2));
+ dialog.setVisible(true);
+ }
+
+ public void actionPerformed(ActionEvent e) {
+ if (e.getSource() == addButton) {
+ final File ruleFile = Tools.openFileDialog(null, new XMLFileFilter());
+ // TODO: avoid duplicate files!
+ ruleFiles.add(ruleFile);
+ list.setListData(ruleFiles.toArray(new File[]{}));
+ } else if (e.getSource() == removeButton) {
+ if (list.getSelectedIndex() != -1) {
+ ruleFiles.remove(list.getSelectedIndex());
+ list.setListData(ruleFiles.toArray(new File[]{}));
+ }
+ } else if (e.getSource() == closeButton) {
+ dialog.setVisible(false);
+ } else {
+ throw new IllegalArgumentException("Don't know how to handle " + e);
+ }
+ }
+
+ /**
+ * Return all external Languages.
+ */
+ List<Language> getLanguages() {
+ final List<Language> languages = new ArrayList<Language>();
+ for (File ruleFile : ruleFiles) {
+ final Language newLanguage = LanguageBuilder.makeLanguage(ruleFile);
+ languages.add(newLanguage);
+ }
+ return languages;
+ }
+
+ static class XMLFileFilter extends FileFilter {
+ public boolean accept(final File f) {
+ if (f.getName().toLowerCase().endsWith(".xml") || f.isDirectory()) {
+ return true;
+ }
+ return false;
+ }
+ public String getDescription() {
+ return "*.xml";
+ }
+ }
+
+}