/*******************************************************************************
* Copyright (c) 2012-2017 Codenvy, S.A.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.ide.api.editor.texteditor;
import com.google.gwt.event.dom.client.HasBlurHandlers;
import com.google.gwt.event.dom.client.HasChangeHandlers;
import com.google.gwt.event.dom.client.HasFocusHandlers;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.RequiresResize;
import org.eclipse.che.ide.api.editor.events.DocumentChangeEvent;
import org.eclipse.che.ide.api.editor.text.Region;
import org.eclipse.che.ide.api.hotkeys.HotKeyItem;
import org.eclipse.che.ide.api.editor.codeassist.AdditionalInfoCallback;
import org.eclipse.che.ide.api.editor.codeassist.CompletionProposal;
import org.eclipse.che.ide.api.editor.codeassist.CompletionsSource;
import org.eclipse.che.ide.api.editor.document.Document;
import org.eclipse.che.ide.api.editor.events.HasCursorActivityHandlers;
import org.eclipse.che.ide.api.editor.events.HasGutterClickHandlers;
import org.eclipse.che.ide.api.editor.keymap.Keymap;
import org.eclipse.che.ide.api.editor.position.PositionConverter;
import javax.validation.constraints.NotNull;
import java.util.List;
/** An interface for editor widget implementations. */
public interface EditorWidget extends IsWidget,
RequiresResize,
/* handler interfaces */
HasBlurHandlers,
HasChangeHandlers,
HasCursorActivityHandlers,
HasFocusHandlers,
HasGutterClickHandlers,
/* extended capabilities */
HasKeyBindings,
HasTextMarkers,
LineStyler.HasLineStyler,
UndoableEditor {
/**
* Returns the contents of the editor.
*
* @return
*/
String getValue();
/**
* Sets the content of the editor.<br>
* The operation <em>must</em> send a {@link DocumentChangeEvent} on the document private event bus.
*
* @param newValue
* the new contents
* @param initializationHandler must be called when content injected in the Editor Widget
*/
void setValue(String newValue, ContentInitializedHandler initializationHandler);
/**
* Returns the current language mode for highlighting.
*
* @return the mode
*/
String getMode();
/**
* Change readonly state of the editor.
*
* @param isReadOnly
* true to set the editor in readonly mode, false to allow edit
*/
void setReadOnly(boolean isReadOnly);
/** Sets whether the annotation ruler is visible. */
void setAnnotationRulerVisible(boolean show);
/** Sets whether the folding ruler is visible. */
void setFoldingRulerVisible(boolean show);
/** Sets whether the zoom ruler is visible. */
void setZoomRulerVisible(boolean show);
/** Sets whether the overview ruler is visible. */
void setOverviewRulerVisible(boolean show);
/**
* Returns the readonly state of the editor.
*
* @return the readonly state, true iff the editor is readonly
*/
boolean isReadOnly();
/**
* Returns the dirty state of the editor.
*
* @return true iff the editor is dirty (i.e. unsaved change were made)
*/
boolean isDirty();
/** Marks the editor as clean i.e change the dirty state to false. */
void markClean();
/**
* Returns the tab size (equivalent number of spaces).
*
* @return the tab size
*/
int getTabSize();
/**
* Sets the tab size.
*
* @param tabSize
* the new value
*/
void setTabSize(int tabSize);
/**
* The instance of {@link org.eclipse.che.ide.api.editor.document.Document}.
*
* @return the embedded document
*/
Document getDocument();
/**
* Returns the selected range in the editor. In case of multiple selection support, returns the primary selection. When no actual
* selection is done, a selection with a zero length is given
*
* @return the selected range
*/
Region getSelectedRange();
/**
* Returns the current keymap in the editor.
*
* @return the current keymap
*/
@NotNull
Keymap getKeymap();
/** Give the focus to the editor. */
void setFocus();
/**
* Show a message to the user.
*
* @param message the message
*/
void showMessage(String message);
/**
* Selects the given range in the editor.
*
* @param selection the new selection
* @param show whether the editor should be scrolled to show the range
*/
void setSelectedRange(Region selection, boolean show);
/**
* Scroll the editor to show the given range.
*
* @param range the range to show
*/
void setDisplayRange(Region range);
/**
* Returns a position converter relative to this editor (pixel coordinates <-> line char positions).
*
* @return a position converter
*/
PositionConverter getPositionConverter();
/**
* Display the completion proposals.
*
* @param proposals the proposals
*/
void showCompletionsProposals(List<CompletionProposal> proposals);
/**
* Display the completion proposals.
*
* @param completionsSource the completion source
*/
void showCompletionProposals(CompletionsSource completionsSource);
/**
* Display the default completion proposals.
*/
void showCompletionProposals();
void showCompletionProposals(CompletionsSource completionsSource, AdditionalInfoCallback additionalInfoCallback);
/**
* Refresh the editor widget.
*/
void refresh();
boolean isCompletionProposalsShowing();
/**
* Return list hotKeys for editor
* @return list hotKeys
*/
List<HotKeyItem> getHotKeys();
/** Callback that should be called when editor widget implementation is fully initialized. */
interface WidgetInitializedCallback {
void initialized(EditorWidget editorWidget);
}
}