/**************************************************************************
OmegaT - Computer Assisted Translation (CAT) tool
with fuzzy matching, translation memory, keyword search,
glossaries, and translation leveraging into updated projects.
Copyright (C) 2008 Alex Buloichik
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.core;
import java.awt.Font;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import javax.swing.SwingUtilities;
import org.omegat.core.data.SourceTextEntry;
import org.omegat.core.events.IApplicationEventListener;
import org.omegat.core.events.IEditorEventListener;
import org.omegat.core.events.IEntryEventListener;
import org.omegat.core.events.IFontChangedEventListener;
import org.omegat.core.events.IProjectEventListener;
import org.omegat.util.Log;
/**
* Class for distribute main application events.
*
* All events can be fired in any threads, but will be delivered to listeners
* only in the UI thread. It's required for better threads synchronization.
*
* @author Alex Buloichik (alex73mail@gmail.com)
*/
public class CoreEvents {
private static final List<IProjectEventListener> projectEventListeners = new CopyOnWriteArrayList<IProjectEventListener>();
private static final List<IApplicationEventListener> applicationEventListeners = new CopyOnWriteArrayList<IApplicationEventListener>();
private static final List<IEntryEventListener> entryEventListeners = new CopyOnWriteArrayList<IEntryEventListener>();
private static final List<IFontChangedEventListener> fontChangedEventListeners = new CopyOnWriteArrayList<IFontChangedEventListener>();
private static final List<IEditorEventListener> editorEventListeners = new CopyOnWriteArrayList<IEditorEventListener>();
/** Register listener. */
public static void registerProjectChangeListener(final IProjectEventListener listener) {
projectEventListeners.add(listener);
}
/** Unregister listener. */
public static void unregisterProjectChangeListener(final IProjectEventListener listener) {
projectEventListeners.remove(listener);
}
/** Register listener. */
public static void registerApplicationEventListener(final IApplicationEventListener listener) {
applicationEventListeners.add(listener);
}
/** Unregister listener. */
public static void unregisterApplicationEventListener(final IApplicationEventListener listener) {
applicationEventListeners.remove(listener);
}
/** Register listener. */
public static void registerEntryEventListener(final IEntryEventListener listener) {
entryEventListeners.add(listener);
}
/** Unregister listener. */
public static void unregisterEntryEventListener(final IEntryEventListener listener) {
entryEventListeners.remove(listener);
}
/** Register listener. */
public static void registerFontChangedEventListener(final IFontChangedEventListener listener) {
fontChangedEventListeners.add(listener);
}
/** Unregister listener. */
public static void unregisterFontChangedEventListener(final IFontChangedEventListener listener) {
fontChangedEventListeners.remove(listener);
}
/** Register listener. */
public static void registerEditorEventListener(final IEditorEventListener listener) {
editorEventListeners.add(listener);
}
/** Unregister listener. */
public static void unregisterEditorEventListener(final IEditorEventListener listener) {
editorEventListeners.remove(listener);
}
/** Fire event. */
public static void fireProjectChange(final IProjectEventListener.PROJECT_CHANGE_TYPE eventType) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Log.logInfoRB("LOG_INFO_EVENT_PROJECT_CHANGE", eventType);
synchronized (projectEventListeners) {
for (IProjectEventListener listener : projectEventListeners) {
listener.onProjectChanged(eventType);
}
}
}
});
}
/** Fire event. */
public static void fireApplicationStartup() {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Log.logInfoRB("LOG_INFO_EVENT_APPLICATION_STARTUP");
for (IApplicationEventListener listener : applicationEventListeners) {
listener.onApplicationStartup();
}
}
});
}
/** Fire event. */
public static void fireApplicationShutdown() {
// We shouldn't invoke it later, because need to shutdown immediately.
Log.logInfoRB("LOG_INFO_EVENT_APPLICATION_SHUTDOWN");
for (IApplicationEventListener listener : applicationEventListeners) {
listener.onApplicationShutdown();
}
}
/** Fire event. */
public static void fireEntryNewFile(final String activeFileName) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Log.logInfoRB("LOG_INFO_EVENT_ENTRY_NEWFILE", activeFileName);
for (IEntryEventListener listener : entryEventListeners) {
listener.onNewFile(activeFileName);
}
}
});
}
/** Fire event. */
public static void fireEntryActivated(final SourceTextEntry newEntry) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Log.logInfoRB("LOG_INFO_EVENT_ENTRY_ACTIVATED");
for (IEntryEventListener listener : entryEventListeners) {
listener.onEntryActivated(newEntry);
}
}
});
}
/** Fire event. */
public static void fireFontChanged(final Font newFont) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Log.logInfoRB("LOG_INFO_EVENT_FONT_CHANGED");
for (IFontChangedEventListener listener : fontChangedEventListeners) {
listener.onFontChanged(newFont);
}
}
});
}
/** Fire event. */
public static void fireEditorNewWord(final String newWord) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
for (IEditorEventListener listener : editorEventListeners) {
listener.onNewWord(newWord);
}
}
});
}
}