/************************************************************************** OmegaT - Computer Assisted Translation (CAT) tool with fuzzy matching, translation memory, keyword search, glossaries, and translation leveraging into updated projects. Copyright (C) 2013 Zoltan Bartko, Aaron Madlon-Kay 2014-2015 Aaron Madlon-Kay 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.autocompleter; import java.awt.Component; import java.awt.event.KeyEvent; import javax.swing.text.BadLocationException; import org.omegat.core.Core; import org.omegat.gui.editor.EditorTextArea3; import org.omegat.tokenizer.ITokenizer; import org.omegat.util.Language; /** * An abstract auto-completer view. * @author bartkoz * @author Aaron Madlon-Kay */ abstract public class AbstractAutoCompleterView { /** * the name appearing in the auto-completer. */ private String name; /** * the completer */ protected AutoCompleter completer; /** * Creates a new auto-completer view. * @param name the name of this view */ public AbstractAutoCompleterView(String name) { this.name = name; } /** * @return the name */ public String getName() { return name; } /** * Set the AutoCompleter that this view belongs to. * @param completer */ public void setParent(AutoCompleter completer) { this.completer = completer; } /** * Return the tokenizer for use with the view. * Custom views should override this if they have special * tokenization needs. */ public ITokenizer getTokenizer() { return Core.getProject().getTargetTokenizer(); } /** * Return the target language currently in use. */ public Language getTargetLanguage() { return Core.getProject().getProjectProperties().getTargetLanguage(); } /** * Process the autocompletion keys * @param e the key event to process * @return true if a key has been processed, false if otherwise. */ public abstract boolean processKeys(KeyEvent e); /** * return the size of the data list / array. * @return */ public abstract int getRowCount(); /** * get the preferred height of the component * @return */ public abstract int getPreferredHeight(); /** * get the preferred width of the component * @return */ public abstract int getPreferredWidth(); /** * get the selected value * @return */ public abstract AutoCompleterItem getSelectedValue(); /** * Update the view data * @return true if any update has been done. */ public abstract void updateViewData(); /** * Obtain the content to put in the autocompleter popup. * The view should also do any other preparation necessary for * display. * * @return the component to show in the autocompleter popup */ public abstract Component getViewContent(); /** * Return a modified row count. The basic implementation. Override this in the * different view types. * @return a modified row count. */ protected int getModifiedRowCount() { return Math.min(getRowCount() + 1, AutoCompleter.PAGE_ROW_COUNT); } /** * Return true to indicate that the view has relevant contextual suggestions * that merit displaying the AutoCompleter popup unprompted. * * @return Whether or not the AutoCompleter should appear */ public abstract boolean shouldPopUp(); /** * Indicates whether or not the AutoCompleter should close by default when the * user confirms a selection. Override and return false to keep the popup open. * * @return Whether or not the AutoCompleter popup should close upon selection */ public boolean shouldCloseOnSelection() { return true; } protected String getLeadingText() { try { EditorTextArea3 editor = completer.getEditor(); int offset = editor.getCaretPosition(); int translationStart = editor.getOmDocument().getTranslationStart(); return editor.getDocument().getText(translationStart, offset - translationStart); } catch (BadLocationException e) { return ""; } } /** * Indicates whether the view should be considered "on" or "off". When off, the view will not be shown in * any circumstances (whether automatically or manually). * * @return */ protected boolean isEnabled() { return true; } }