/** * $RCSfile: ,v $ * $Revision: $ * $Date: $ * * Copyright (C) 2004-2011 Jive Software. All rights reserved. * * 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 org.jivesoftware.spellchecker; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.HashMap; import java.util.Locale; import java.util.Map; import javax.swing.ImageIcon; import javax.swing.JComboBox; import javax.swing.JOptionPane; import org.jivesoftware.spark.util.SwingWorker; import org.dts.spell.SpellChecker; import org.dts.spell.swing.JTextComponentSpellChecker; import org.jivesoftware.spark.SparkManager; import org.jivesoftware.spark.component.RolloverButton; import org.jivesoftware.spark.ui.ChatRoom; import org.jivesoftware.spark.ui.ChatRoomClosingListener; import org.jivesoftware.spark.util.GraphicUtils; /** * This Class adds the SpellCheckButton to the ChatWindow and implements the * ActionListener to react on buttonclicks */ public class SpellcheckChatRoomDecorator implements ActionListener, ChatRoomClosingListener { private JTextComponentSpellChecker _sc; private RolloverButton _spellingButton; private ChatRoom _room; private JComboBox _languageSelection = new JComboBox(); private Map<String, String> _languages; public SpellcheckChatRoomDecorator(ChatRoom room) { _room = room; SwingWorker worker = new SwingWorker() { public Object construct() { return true; } public void finished() { final SpellcheckerPreference preference = (SpellcheckerPreference) SparkManager .getPreferenceManager().getPreference( SpellcheckerPreference.NAMESPACE); if (preference.getPreferences().isSpellCheckerEnabled()) { _sc = new JTextComponentSpellChecker(SpellcheckManager .getInstance().getSpellChecker()); languagestoLocales(); _languageSelection.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String lang = _languages.get((String)_languageSelection.getSelectedItem()); _sc.stopRealtimeMarkErrors(); _sc = new JTextComponentSpellChecker(new SpellChecker(SpellcheckManager.getInstance().getDictionary(lang))); if (preference.getPreferences().getIgnoreUppercase()) { _sc.getSpellChecker().setIgnoreUpperCaseWords(true); _sc.getSpellChecker().setCaseSensitive(false); } else { _sc.getSpellChecker().setIgnoreUpperCaseWords(false); _sc.getSpellChecker().setCaseSensitive(true); } _sc.startRealtimeMarkErrors(_room.getChatInputEditor()); } }); ClassLoader cl = getClass().getClassLoader(); ImageIcon spellingIcon = new ImageIcon( cl.getResource("text_ok.png")); _spellingButton = new RolloverButton(spellingIcon); _spellingButton.setToolTipText(GraphicUtils .createToolTip(SpellcheckerResource.getString("button.check.spelling"))); _spellingButton .addActionListener(SpellcheckChatRoomDecorator.this); _room.getEditorBar().add(_spellingButton); if (preference.getPreferences().getLanguageSelectionInChatRoom()) { _room.getEditorBar().add(_languageSelection); } if (preference.getPreferences().getIgnoreUppercase()) { _sc.getSpellChecker().setIgnoreUpperCaseWords(true); _sc.getSpellChecker().setCaseSensitive(false); } else { _sc.getSpellChecker().setIgnoreUpperCaseWords(false); _sc.getSpellChecker().setCaseSensitive(true); } if (preference.getPreferences().isAutoSpellCheckerEnabled()) { _sc.startRealtimeMarkErrors(_room.getChatInputEditor()); } } } }; worker.start(); } @Override public void actionPerformed(ActionEvent event) { if (_sc.spellCheck(_room.getChatInputEditor())) { JOptionPane.showMessageDialog(_room.getChatInputEditor(), SpellcheckerResource .getString("dialog.no.mistakes")); _room.getChatInputEditor().requestFocusInWindow(); } } @Override public void closing() { } private void languagestoLocales() { String spellLanguage = SpellcheckManager.getInstance().getSpellcheckerPreference().getPreferences().getSpellLanguage(); _languages = new HashMap<String, String>(); Locale[] locales = Locale.getAvailableLocales(); ArrayList<String> languages = SpellcheckManager.getInstance().getSupportedLanguages(); for (int i = 0; i < languages.size(); i++) { for (final Locale locale : locales) { if (locale.toString().equals(languages.get(i))) { String label = locale.getDisplayLanguage(Locale .getDefault()); if (locale.getDisplayCountry(locale) != null && locale.getDisplayCountry(locale).trim().length() > 0) { label = label + "-" + locale.getDisplayCountry(locale).trim(); } _languages.put(label, languages.get(i)); _languageSelection.addItem(label); if (languages.get(i).equals(spellLanguage)) { _languageSelection.setSelectedItem(label); } } } } } }