/************************************************************************** OmegaT - Computer Assisted Translation (CAT) tool with fuzzy matching, translation memory, keyword search, glossaries, and translation leveraging into updated projects. Copyright (C) 2008-2010 Alex Buloichik 2011 Alex Buloichik, Didier Briel 2012 Guido Leenders, Didier Briel 2013 Zoltan Bartko, Aaron Madlon-Kay 2014 Aaron Madlon-Kay 2016 Didier Briel 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.editor; import java.util.List; import org.omegat.core.data.EntryKey; import org.omegat.core.data.SourceTextEntry; import org.omegat.gui.editor.autocompleter.IAutoCompleter; import org.omegat.gui.editor.mark.Mark; /** * Interface for access to editor functionality. * * Almost all methods must be called from UI thread. * * @author Alex Buloichik (alex73mail@gmail.com) * @author Didier Briel * @author Guido Leenders * @author Aaron Madlon-Kay */ public interface IEditor { enum CHANGE_CASE_TO { /** lower case */ LOWER, /** title case for whole string */ SENTENCE, /** title case for each token in string */ TITLE, /** upper case */ UPPER, /** cycle between cases */ CYCLE, } /** * Storage for caret position and selection. */ public class CaretPosition { Integer position; Integer selectionStart, selectionEnd; public CaretPosition(int position) { this.position = position; this.selectionStart = null; this.selectionEnd = null; } public CaretPosition(int selectionStart, int selectionEnd) { this.position = null; this.selectionStart = selectionStart; this.selectionEnd = selectionEnd; } /** * We can't define it once since 'position' can be changed later. */ public static CaretPosition startOfEntry() { return new CaretPosition(0); } } /** * Get relative path (under <code>source</code>) of the source file * currently open in the editor. * <p> * Can be called from any thread. */ String getCurrentFile(); /** * Get the relative path (under <code>target</code>) of the target file * corresponding to the current source file (per {@link #getCurrentFile()}). * This file is what is created upon doing Create Target Documents, but it * may not exist yet. * <p> * Can be called from any thread. */ String getCurrentTargetFile(); /** * Get current active entry. * * Can be called from any thread. */ SourceTextEntry getCurrentEntry(); /** * Get current active entry number. * * Can be called from any thread. */ int getCurrentEntryNumber(); /** * Activate entry for edit. * * Must be called only from UI thread. * * Will position cursor at the start of segment */ void activateEntry(); /** * Commits the translation and deactivate entry. Translation will be saved. * * Must be called only from UI thread. */ void commitAndDeactivate(); /** * Commits the translation and leave entry activated. Translation will be * saved. * * Must be called only from UI thread. */ void commitAndLeave(); /** * Move to next entry. * * Must be called only from UI thread. */ void nextEntry(); /** * Move to previous entry. * * Must be called only from UI thread. */ void prevEntry(); /** * Move to next entry with a note. * * Must be called only from UI thread. */ void nextEntryWithNote(); /** * Move to previous entry with a note. * * Must be called only from UI thread. */ void prevEntryWithNote(); /** * Move to next untranslated entry. * * Must be called only from UI thread. */ void nextUntranslatedEntry(); /** * Move to next translated entry. * * Must be called only from UI thread. */ void nextTranslatedEntry(); /** * Move to the first non-unique entry. * Must be called from UI thread. */ void nextUniqueEntry(); /** * Goto first entry in specified file. * * @param fileIndex * file index in project * @throws IndexOutOfBoundsException * If there is no file for the given index */ void gotoFile(int fileIndex) throws IndexOutOfBoundsException; /** * Goto entry with specified number. Convenience method for * {@link #gotoEntry(int, CaretPosition)} where the caret position will be * the start of the entry. * * @param entryNum * entry number, starts from 1 * * Must be called only from UI thread. */ void gotoEntry(int entryNum); /** * Goto entry with specified number, and restore caret to specified * position. * * @param entryNum * entry number, starts from 1 * * Must be called only from UI thread. */ void gotoEntry(int entryNum, CaretPosition pos); /** * Goto entry based on a string and entry key. * * @param srcString * entry source string * @param key * entry key (can be null) * * Must be called only from UI thread. */ void gotoEntry(String srcString, EntryKey key); /** * Goto entry with specified number while avoiding clobbering the tag fixes. * * @param fixedEntry * entry number, starts from 1 * @param fixedSource * The source of the entry that was fixed * * Must be called only from UI thread. */ void gotoEntryAfterFix(int fixedEntry, String fixedSource); /** * Refresh the current editor view while avoiding clobbering any tag fixes. * * @param fixedEntries * A list of all entries that were altered * * Must be called only from UI thread. */ void refreshViewAfterFix(List<Integer> fixedEntries); void refreshView(boolean doCommit); /** * Set current focus to editor. */ void requestFocus(); /** * Change case of the selected text or if none is selected, of the current * word. * * @param newCase * : lower, title, upper or cycle * * Must be called only from UI thread. */ void changeCase(CHANGE_CASE_TO newCase); /** * Replaces the entire edit area with a given text. * * Must be called only from UI thread. */ void replaceEditText(String text); /** * Inserts text at the cursor position and mark as to be changed * by the translator, i.e, background of segment should be marked * * Must be called only from UI thread. */ void replaceEditTextAndMark(String text); /** * Inserts text at the cursor position. * * Must be called only from UI thread. */ void insertText(String text); /** * Inserts text at the cursor position and mark as to be changed * by the translator, i.e, background of segment should be marked * * Must be called only from UI thread. * @param text The text to insert */ void insertTextAndMark(String text); /** * Inserts tag at the cursor position, probably with adding bidi control chars. * * Must be called only from UI thread. */ void insertTag(String tag); /** * Go to next segment from history. * * Must be called only from UI thread. */ void gotoHistoryForward(); /** * Go to previous segment from history. * * Must be called only from UI thread. */ void gotoHistoryBack(); /** * Get settings instance. * * @return interface for read and change editor settings * * Can be called from any thread. */ IEditorSettings getSettings(); /** * Undo editing. * * Must be called only from UI thread. */ void undo(); /** * Redo editing. * * Must be called only from UI thread. */ void redo(); /** * Get currently selected text. * * @return selected text * * Must be called only from UI thread. */ String getSelectedText(); /** * Set default/alternate translation for current entry. */ void setAlternateTranslationForCurrentEntry(boolean alternate); /** * All plugins can call this method for mark something in active entry. * * @param requiredActiveEntry * entry which should be active. If user moved to other entry, * then marks will be skipped * @param marks * list of marks * @param markerClassName * marker's class name */ void markActiveEntrySource(SourceTextEntry requiredActiveEntry, List<Mark> marks, String markerClassName); /** * Register constructor of popup menu. * * @param priority * priority of process order * @param constructor * constructor instance */ void registerPopupMenuConstructors(int priority, IPopupMenuConstructor constructor); /** * Calls specified marker for reprocess all entries. */ void remarkOneMarker(String markerClassName); /** * Gets a filter for this editor, or null if filter doesn't applied. */ IEditorFilter getFilter(); /** * Sets a filter to this editor. The filter causes only the selected entries to be shown in the editor. * * @param filter * Filter instance */ void setFilter(IEditorFilter filter); /** * Removes the current filter. */ void removeFilter(); /** * Returns current translation or null. */ String getCurrentTranslation(); /** * Perform any necessary actions for window deactivation. */ void windowDeactivated(); /** * Register untranslated. */ void registerUntranslated(); /** * Register as empty. */ void registerEmptyTranslation(); /** * Register translation to be identical to source. */ void registerIdenticalTranslation(); /** * Access the AutoCompleter */ IAutoCompleter getAutoCompleter(); }