Skip to main content

This CGIT instance is deprecated, and repositories have been moved to Gitlab or Github. See the repository descriptions for specific locations.

aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/StructuredTextEditor.java')
-rw-r--r--bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/StructuredTextEditor.java2744
1 files changed, 0 insertions, 2744 deletions
diff --git a/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/StructuredTextEditor.java b/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/StructuredTextEditor.java
deleted file mode 100644
index dd18ffbf4c..0000000000
--- a/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/StructuredTextEditor.java
+++ /dev/null
@@ -1,2744 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- * Jens Lukowski/Innoopract - initial renaming/restructuring
- *
- *******************************************************************************/
-package org.eclipse.wst.sse.ui.internal;
-
-import java.io.IOException;
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.ResourceBundle;
-import java.util.Timer;
-import java.util.TimerTask;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IMarker;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IStorage;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.ILog;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.Preferences;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.debug.ui.actions.IToggleBreakpointsTarget;
-import org.eclipse.emf.common.command.Command;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.GroupMarker;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.action.IMenuManager;
-import org.eclipse.jface.action.IStatusLineManager;
-import org.eclipse.jface.action.MenuManager;
-import org.eclipse.jface.action.Separator;
-import org.eclipse.jface.dialogs.ErrorDialog;
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.text.DefaultInformationControl;
-import org.eclipse.jface.text.DocumentEvent;
-import org.eclipse.jface.text.IDocument;
-import org.eclipse.jface.text.IDocumentListener;
-import org.eclipse.jface.text.IInformationControl;
-import org.eclipse.jface.text.IInformationControlCreator;
-import org.eclipse.jface.text.IRegion;
-import org.eclipse.jface.text.ITextHover;
-import org.eclipse.jface.text.ITextOperationTarget;
-import org.eclipse.jface.text.ITextViewer;
-import org.eclipse.jface.text.ITextViewerExtension;
-import org.eclipse.jface.text.ITextViewerExtension2;
-import org.eclipse.jface.text.ITextViewerExtension5;
-import org.eclipse.jface.text.source.Annotation;
-import org.eclipse.jface.text.source.ICharacterPairMatcher;
-import org.eclipse.jface.text.source.ISourceViewer;
-import org.eclipse.jface.text.source.IVerticalRuler;
-import org.eclipse.jface.text.source.LineChangeHover;
-import org.eclipse.jface.text.source.SourceViewerConfiguration;
-import org.eclipse.jface.text.source.projection.ProjectionSupport;
-import org.eclipse.jface.text.source.projection.ProjectionViewer;
-import org.eclipse.jface.util.PropertyChangeEvent;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.custom.StyledText;
-import org.eclipse.swt.dnd.DND;
-import org.eclipse.swt.dnd.DropTarget;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.events.MouseEvent;
-import org.eclipse.swt.events.MouseMoveListener;
-import org.eclipse.swt.events.MouseTrackAdapter;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.IEditorActionBarContributor;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.IEditorSite;
-import org.eclipse.ui.IFileEditorInput;
-import org.eclipse.ui.IPageLayout;
-import org.eclipse.ui.IStorageEditorInput;
-import org.eclipse.ui.IWorkbenchActionConstants;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.editors.text.EditorsUI;
-import org.eclipse.ui.editors.text.ITextEditorHelpContextIds;
-import org.eclipse.ui.editors.text.TextEditor;
-import org.eclipse.ui.help.IWorkbenchHelpSystem;
-import org.eclipse.ui.part.EditorActionBarContributor;
-import org.eclipse.ui.part.IShowInTargetList;
-import org.eclipse.ui.progress.IWorkbenchSiteProgressService;
-import org.eclipse.ui.texteditor.AnnotationPreference;
-import org.eclipse.ui.texteditor.ChainedPreferenceStore;
-import org.eclipse.ui.texteditor.DefaultRangeIndicator;
-import org.eclipse.ui.texteditor.IAbstractTextEditorHelpContextIds;
-import org.eclipse.ui.texteditor.IDocumentProvider;
-import org.eclipse.ui.texteditor.IDocumentProviderExtension;
-import org.eclipse.ui.texteditor.IElementStateListener;
-import org.eclipse.ui.texteditor.IStatusField;
-import org.eclipse.ui.texteditor.ITextEditor;
-import org.eclipse.ui.texteditor.ITextEditorActionConstants;
-import org.eclipse.ui.texteditor.ITextEditorActionDefinitionIds;
-import org.eclipse.ui.texteditor.IUpdate;
-import org.eclipse.ui.texteditor.IWorkbenchActionDefinitionIds;
-import org.eclipse.ui.texteditor.MarkerRulerAction;
-import org.eclipse.ui.texteditor.SourceViewerDecorationSupport;
-import org.eclipse.ui.texteditor.TextOperationAction;
-import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
-import org.eclipse.ui.views.properties.IPropertySheetPage;
-import org.eclipse.wst.sse.core.IModelStateListener;
-import org.eclipse.wst.sse.core.INodeNotifier;
-import org.eclipse.wst.sse.core.IStructuredModel;
-import org.eclipse.wst.sse.core.IndexedRegion;
-import org.eclipse.wst.sse.core.StructuredModelManager;
-import org.eclipse.wst.sse.core.internal.document.IDocumentCharsetDetector;
-import org.eclipse.wst.sse.core.internal.encoding.EncodingMemento;
-import org.eclipse.wst.sse.core.internal.text.IExecutionDelegatable;
-import org.eclipse.wst.sse.core.internal.util.StringUtils;
-import org.eclipse.wst.sse.core.text.IStructuredDocument;
-import org.eclipse.wst.sse.core.text.IStructuredDocumentRegion;
-import org.eclipse.wst.sse.core.text.ITextRegion;
-import org.eclipse.wst.sse.core.undo.IStructuredTextUndoManager;
-import org.eclipse.wst.sse.ui.StructuredTextViewerConfiguration;
-import org.eclipse.wst.sse.ui.extension.ExtendedConfigurationBuilder;
-import org.eclipse.wst.sse.ui.extension.ExtendedEditorActionBuilder;
-import org.eclipse.wst.sse.ui.extension.ExtendedEditorDropTargetAdapter;
-import org.eclipse.wst.sse.ui.extension.IExtendedContributor;
-import org.eclipse.wst.sse.ui.extension.IExtendedMarkupEditor;
-import org.eclipse.wst.sse.ui.extension.IPopupMenuContributor;
-import org.eclipse.wst.sse.ui.extensions.ConfigurationPointCalculator;
-import org.eclipse.wst.sse.ui.extensions.breakpoint.NullSourceEditingTextTools;
-import org.eclipse.wst.sse.ui.extensions.breakpoint.SourceEditingTextTools;
-import org.eclipse.wst.sse.ui.internal.actions.ActionDefinitionIds;
-import org.eclipse.wst.sse.ui.internal.actions.StructuredTextEditorActionConstants;
-import org.eclipse.wst.sse.ui.internal.contentoutline.StructuredTextEditorContentOutlinePage;
-import org.eclipse.wst.sse.ui.internal.debug.BreakpointRulerAction;
-import org.eclipse.wst.sse.ui.internal.debug.EditBreakpointAction;
-import org.eclipse.wst.sse.ui.internal.debug.ManageBreakpointAction;
-import org.eclipse.wst.sse.ui.internal.debug.ToggleBreakpointAction;
-import org.eclipse.wst.sse.ui.internal.debug.ToggleBreakpointsTarget;
-import org.eclipse.wst.sse.ui.internal.editor.EditorExecutionContext;
-import org.eclipse.wst.sse.ui.internal.editor.EditorModelUtil;
-import org.eclipse.wst.sse.ui.internal.editor.IHelpContextIds;
-import org.eclipse.wst.sse.ui.internal.editor.StructuredModelDocumentProvider;
-import org.eclipse.wst.sse.ui.internal.extension.BreakpointProviderBuilder;
-import org.eclipse.wst.sse.ui.internal.hyperlink.OpenHyperlinkAction;
-import org.eclipse.wst.sse.ui.internal.preferences.EditorPreferenceNames;
-import org.eclipse.wst.sse.ui.internal.projection.IStructuredTextFoldingProvider;
-import org.eclipse.wst.sse.ui.internal.properties.ConfigurablePropertySheetPage;
-import org.eclipse.wst.sse.ui.internal.properties.ShowPropertiesAction;
-import org.eclipse.wst.sse.ui.internal.selection.SelectionHistory;
-import org.eclipse.wst.sse.ui.internal.selection.StructureSelectEnclosingAction;
-import org.eclipse.wst.sse.ui.internal.selection.StructureSelectHistoryAction;
-import org.eclipse.wst.sse.ui.internal.selection.StructureSelectNextAction;
-import org.eclipse.wst.sse.ui.internal.selection.StructureSelectPreviousAction;
-import org.eclipse.wst.sse.ui.text.DocumentRegionEdgeMatcher;
-import org.eclipse.wst.sse.ui.util.Assert;
-import org.eclipse.wst.sse.ui.views.contentoutline.ContentOutlineConfiguration;
-import org.eclipse.wst.sse.ui.views.contentoutline.StructuredContentOutlineConfiguration;
-import org.eclipse.wst.sse.ui.views.properties.PropertySheetConfiguration;
-import org.eclipse.wst.sse.ui.views.properties.StructuredPropertySheetConfiguration;
-import org.w3c.dom.Document;
-import org.w3c.dom.Node;
-
-public class StructuredTextEditor extends TextEditor implements IExtendedMarkupEditor, IDocumentListener {
-
- class InternalElementStateListener implements IElementStateListener {
-
- public void elementContentAboutToBeReplaced(Object element) {
- // we just forward the event
- handleElementContentAboutToBeReplaced(element);
- }
-
- public void elementContentReplaced(Object element) {
- // we just forward the event
- handleElementContentReplaced(element);
- }
-
- public void elementDeleted(Object element) {
- // we just forward the event
- handleElementDeleted(element);
- }
-
- public void elementDirtyStateChanged(Object element, boolean isDirty) {
- // we just forward the event
- handleElementDirtyStateChanged(element, isDirty);
- }
-
- public void elementMoved(Object originalElement, Object movedElement) {
- // we just forward the event
- handleElementMoved(originalElement, movedElement);
- }
- }
-
- class InternalModelStateListener implements IModelStateListener {
- public void modelAboutToBeChanged(IStructuredModel model) {
- if (getTextViewer() != null) {
- // getTextViewer().setRedraw(false);
- }
- }
-
- public void modelAboutToBeReinitialized(IStructuredModel structuredModel) {
- if (getTextViewer() != null) {
- // getTextViewer().setRedraw(false);
- getTextViewer().unconfigure();
- SourceViewerConfiguration config = getSourceViewerConfiguration();
- if (config instanceof StructuredTextViewerConfiguration) {
- ((StructuredTextViewerConfiguration) config).unConfigure(getSourceViewer());
- }
- }
- }
-
- public void modelChanged(IStructuredModel model) {
- if (getTextViewer() != null) {
- // getTextViewer().setRedraw(true);
- // Since the model can be changed on a background
- // thread, we will update menus on display thread,
- // if we are not already on display thread,
- // and if there is not an update already pending.
- // (we can get lots of 'modelChanged' events in rapid
- // succession, so only need to do one.
- if (!fUpdateMenuTextPending) {
- runOnDisplayThreadIfNeededed(new Runnable() {
- public void run() {
- updateMenuText();
- fUpdateMenuTextPending = false;
- }
- });
- }
-
- }
- }
-
- public void modelDirtyStateChanged(IStructuredModel model, boolean isDirty) {
- // do nothing
- }
-
- public void modelReinitialized(IStructuredModel structuredModel) {
- try {
- if (getSourceViewer() != null) {
- SourceViewerConfiguration cfg = getSourceViewerConfiguration();
- if (cfg != null && cfg instanceof StructuredTextViewerConfiguration) {
- initializeSourceViewerConfiguration(((StructuredTextViewerConfiguration) cfg));
- }
- getSourceViewer().configure(cfg);
- }
- } catch (Exception e) {
- // https://w3.opensource.ibm.com/bugzilla/show_bug.cgi?id=1166
- // investigate each error case post beta
- Logger.logException("problem trying to configure after model change", e); //$NON-NLS-1$
- } finally {
- // so we don't freeze workbench (eg. during page language or
- // content type change)
- ((ITextViewerExtension) getSourceViewer()).setRedraw(true);
- }
- }
-
- // Note: this one should probably be used to
- // control viewer
- // instead of viewer having its own listener
- public void modelResourceDeleted(IStructuredModel model) {
- // do nothing
- }
-
- public void modelResourceMoved(IStructuredModel originalmodel, IStructuredModel movedmodel) {
- // do nothing
- }
-
- /**
- * This 'Runnable' should be very brief, and should not "call out" to
- * other code especially if it depends on the state of the model.
- *
- * @param r
- */
- private void runOnDisplayThreadIfNeededed(Runnable r) {
- // if there is no Display at all (that is, running headless),
- // or if we are already running on the display thread, then
- // simply execute the runnable.
- if (getDisplay() == null || (Thread.currentThread() == getDisplay().getThread())) {
- r.run();
- } else {
- // otherwise force the runnable to run on the display thread.
- getDisplay().asyncExec(r);
- }
- }
- }
-
- class MouseTracker extends MouseTrackAdapter implements MouseMoveListener {
- /** The tracker's subject control. */
- private Control fSubjectControl;
-
- /**
- * Creates a new mouse tracker.
- */
- public MouseTracker() {
- // do nothing
- }
-
- public void mouseHover(MouseEvent event) {
- // System.out.println("hover: "+event.x + "x" + event.y);
- hoverX = event.x;
- hoverY = event.y;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.swt.events.MouseMoveListener#mouseMove(org.eclipse.swt.events.MouseEvent)
- */
- public void mouseMove(MouseEvent e) {
- hoverX = e.x;
- hoverY = e.y;
- }
-
- /**
- * Starts this mouse tracker. The given control becomes this tracker's
- * subject control. Installs itself as mouse track listener on the
- * subject control.
- *
- * @param subjectControl
- * the subject control
- */
- public void start(Control subjectControl) {
- fSubjectControl = subjectControl;
- if (fSubjectControl != null && !fSubjectControl.isDisposed()) {
- fSubjectControl.addMouseMoveListener(this);
- fSubjectControl.addMouseTrackListener(this);
- fSubjectControl.addDisposeListener(new DisposeListener() {
- public void widgetDisposed(DisposeEvent e) {
- stop();
- }
- });
- }
- }
-
- /**
- * Stops this mouse tracker. Removes itself as mouse track, mouse
- * move, and shell listener from the subject control.
- */
- public void stop() {
- if (fSubjectControl != null && !fSubjectControl.isDisposed()) {
- fSubjectControl.removeMouseMoveListener(this);
- fSubjectControl.removeMouseTrackListener(this);
- fSubjectControl = null;
- }
- }
- }
-
- class ShowInTargetListAdapter implements IShowInTargetList {
- /**
- * Array of ID Strings that define the default show in targets for
- * this editor.
- *
- * @see org.eclipse.ui.part.IShowInTargetList#getShowInTargetIds()
- * @return the array of ID Strings that define the default show in
- * targets for this editor.
- */
- public String[] getShowInTargetIds() {
- return fShowInTargetIds;
- }
- }
-
- class TimeOutExpired extends TimerTask {
-
- public void run() {
- getDisplay().syncExec(new Runnable() {
- public void run() {
- if (getDisplay() != null && !getDisplay().isDisposed())
- endBusyStateInternal();
- }
- });
- }
-
- }
-
- protected final static char[] BRACKETS = {'{', '}', '(', ')', '[', ']'};
- private static final long BUSY_STATE_DELAY = 1000;
- public static final String CORE_SSE_ACTIVITY_ID = "com.ibm.wtp.xml.core"; //$NON-NLS-1$
- protected static final String DOT = "."; //$NON-NLS-1$
- private final static String UNDERSCORE = "_"; //$NON-NLS-1$
- private static final String EDITOR_CONTEXT_MENU_ID = "org.eclipse.wst.sse.ui.StructuredTextEditor.context"; //$NON-NLS-1$
-
- /** Non-NLS strings */
- private static final String EDITOR_KEYBINDING_SCOPE_ID = "org.eclipse.wst.sse.ui.structuredTextEditorScope"; //$NON-NLS-1$
- public static final String GROUP_NAME_ADDITIONS = "additions"; //$NON-NLS-1$
- public static final String GROUP_NAME_FORMAT = "Format"; //$NON-NLS-1$
- public static final String GROUP_NAME_FORMAT_EXT = "Format.ext"; //$NON-NLS-1$
- private static final String REDO_ACTION_DESC = SSEUIMessages.Redo___0___UI_; //$NON-NLS-1$ = "Redo: {0}."
- private static final String REDO_ACTION_DESC_DEFAULT = SSEUIMessages.Redo_Text_Change__UI_; //$NON-NLS-1$ = "Redo Text Change."
- private static final String REDO_ACTION_TEXT = SSEUIMessages._Redo__0___Ctrl_Y_UI_; //$NON-NLS-1$ = "&Redo {0} @Ctrl+Y"
- private static final String REDO_ACTION_TEXT_DEFAULT = SSEUIMessages._Redo_Text_Change__Ctrl_Y_UI_; //$NON-NLS-1$ = "&Redo Text Change @Ctrl+Y"
- protected static final String SSE_MODEL_ID = "org.eclipse.wst.sse.core"; //$NON-NLS-1$
- /**
- * Constant for representing an error status. This is considered a value
- * object.
- */
- static final protected IStatus STATUS_ERROR = new Status(IStatus.ERROR, SSEUIPlugin.ID, IStatus.INFO, "ERROR", null); //$NON-NLS-1$
- /**
- * Constant for representing an ok status. This is considered a value
- * object.
- */
- static final protected IStatus STATUS_OK = new Status(IStatus.OK, SSEUIPlugin.ID, IStatus.OK, "OK", null); //$NON-NLS-1$
-
- /** Translatable strings */
- private static final String UNDO_ACTION_DESC = SSEUIMessages.Undo___0___UI_; //$NON-NLS-1$ = "Undo: {0}."
- private static final String UNDO_ACTION_DESC_DEFAULT = SSEUIMessages.Undo_Text_Change__UI_; //$NON-NLS-1$ = "Undo Text Change."
- private static final String UNDO_ACTION_TEXT = SSEUIMessages._Undo__0___Ctrl_Z_UI_; //$NON-NLS-1$ = "&Undo {0} @Ctrl+Z"
- private static final String UNDO_ACTION_TEXT_DEFAULT = SSEUIMessages._Undo_Text_Change__Ctrl_Z_UI_; //$NON-NLS-1$ = "&Undo Text Change @Ctrl+Z"
-
- /**
- * @param args
- * java.lang.String[]
- */
- public static void main(String[] args) {
- StructuredTextEditor editor = null;
- try {
- editor = new StructuredTextEditor();
- System.out.println("Created: " + editor); //$NON-NLS-1$
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- // development time/debug variables only
- private int adapterRequests;
- private long adapterTime;
- private boolean fBackgroundJobEnded;
- private boolean fBusyState;
- private Timer fBusyTimer;
- Runnable fCurrentRunnable = null;
- boolean fDirtyBeforeDocumentEvent = false;
- protected ExtendedEditorDropTargetAdapter fDropAdapter;
- protected DropTarget fDropTarget;
- protected boolean fEditorDisposed = false;
- private IEditorPart fEditorPart;
- private InternalModelStateListener fInternalModelStateListener;
-
- protected MouseTracker fMouseTracker;
- protected IContentOutlinePage fOutlinePage;
- /** This editor's projection model updater */
- private IStructuredTextFoldingProvider fProjectionModelUpdater;
- /** This editor's projection support */
- private ProjectionSupport fProjectionSupport;
- protected IPropertySheetPage fPropertySheetPage;
- private String fRememberTitle;
- String[] fShowInTargetIds = new String[]{IPageLayout.ID_RES_NAV};
- private IAction fShowPropertiesAction = null;
- private IStructuredModel fStructuredModel;
-
- private boolean fUpdateMenuTextPending;
- protected int hoverX = -1;
- protected int hoverY = -1;
- private InternalElementStateListener internalElementStateListener = new InternalElementStateListener();
- private boolean shouldClose = false;
- private long startPerfTime;
-
- public StructuredTextEditor() {
-
- super();
- initializeDocumentProvider(null);
- }
-
- /*
- * This method is just to make firePropertyChanged accessbible from some
- * (anonomous) inner classes.
- */
- protected void _firePropertyChange(int property) {
- super.firePropertyChange(property);
- }
-
- protected void abstractTextEditorContextMenuAboutToShow(IMenuManager menu) {
- menu.add(new Separator(ITextEditorActionConstants.GROUP_UNDO));
- menu.add(new Separator(ITextEditorActionConstants.GROUP_COPY));
- menu.add(new Separator(ITextEditorActionConstants.GROUP_PRINT));
- menu.add(new Separator(ITextEditorActionConstants.GROUP_EDIT));
- menu.add(new Separator(ITextEditorActionConstants.GROUP_FIND));
- menu.add(new Separator(IWorkbenchActionConstants.GROUP_ADD));
- menu.add(new Separator(ITextEditorActionConstants.GROUP_REST));
- menu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
- menu.add(new Separator(ITextEditorActionConstants.GROUP_SAVE));
-
- if (isEditable()) {
- addAction(menu, ITextEditorActionConstants.GROUP_UNDO, ITextEditorActionConstants.UNDO);
- addAction(menu, ITextEditorActionConstants.GROUP_UNDO, ITextEditorActionConstants.REVERT_TO_SAVED);
- addAction(menu, ITextEditorActionConstants.GROUP_COPY, ITextEditorActionConstants.CUT);
- addAction(menu, ITextEditorActionConstants.GROUP_COPY, ITextEditorActionConstants.COPY);
- addAction(menu, ITextEditorActionConstants.GROUP_COPY, ITextEditorActionConstants.PASTE);
- addAction(menu, ITextEditorActionConstants.GROUP_SAVE, ITextEditorActionConstants.SAVE);
- } else {
- addAction(menu, ITextEditorActionConstants.GROUP_COPY, ITextEditorActionConstants.COPY);
- }
-
- // from AbstractDecoratedTextEditor
- IAction preferencesAction = getAction(ITextEditorActionConstants.CONTEXT_PREFERENCES);
- menu.appendToGroup(IWorkbenchActionConstants.MB_ADDITIONS, new Separator(ITextEditorActionConstants.GROUP_SETTINGS));
- menu.appendToGroup(ITextEditorActionConstants.GROUP_SETTINGS, preferencesAction);
- }
-
- protected void addContextMenuActions(IMenuManager menu) {
- // Only offer actions that affect the text if the viewer allows
- // modification and supports any of these operations
- IAction formatAll = getAction(StructuredTextEditorActionConstants.ACTION_NAME_FORMAT_DOCUMENT);
- IAction formatSelection = getAction(StructuredTextEditorActionConstants.ACTION_NAME_FORMAT_ACTIVE_ELEMENTS);
- IAction cleanupAll = getAction(StructuredTextEditorActionConstants.ACTION_NAME_CLEANUP_DOCUMENT);
- boolean enableFormatMenu = (formatAll != null && formatAll.isEnabled()) || (formatSelection != null && formatSelection.isEnabled()) || (cleanupAll != null && cleanupAll.isEnabled());
-
- if (getSourceViewer().isEditable() && enableFormatMenu) {
- String label = SSEUIMessages.FormatMenu_label; //$NON-NLS-1$ = "Format"
- MenuManager subMenu = new MenuManager(label, GROUP_NAME_FORMAT);
- subMenu.add(new GroupMarker(GROUP_NAME_FORMAT_EXT));
- addAction(subMenu, StructuredTextEditorActionConstants.ACTION_NAME_FORMAT_DOCUMENT);
- addAction(subMenu, StructuredTextEditorActionConstants.ACTION_NAME_FORMAT_ACTIVE_ELEMENTS);
- subMenu.add(new GroupMarker(GROUP_NAME_ADDITIONS));
- addAction(menu, ITextEditorActionConstants.GROUP_EDIT, StructuredTextEditorActionConstants.ACTION_NAME_CLEANUP_DOCUMENT);
- menu.appendToGroup(ITextEditorActionConstants.GROUP_EDIT, subMenu);
- }
-
- // Some Design editors (DTD) rely on this view for their own uses
- menu.appendToGroup(IWorkbenchActionConstants.GROUP_ADD, fShowPropertiesAction);
- }
-
- protected void addExtendedContextMenuActions(IMenuManager menu) {
- IEditorActionBarContributor c = getEditorSite().getActionBarContributor();
- if (c instanceof IPopupMenuContributor) {
- ((IPopupMenuContributor) c).contributeToPopupMenu(menu);
- } else {
- ExtendedEditorActionBuilder builder = new ExtendedEditorActionBuilder();
- IExtendedContributor pmc = builder.readActionExtensions(getConfigurationPoints());
- if (pmc != null) {
- pmc.setActiveEditor(this);
- pmc.contributeToPopupMenu(menu);
- }
- }
- }
-
- protected void addExtendedRulerContextMenuActions(IMenuManager menu) {
- // none at this level
- }
-
-
-
- /**
- *
- */
- public void beginBackgroundOperation() {
- fBackgroundJobEnded = false;
- // if already in busy state, no need to do anything
- // and, we only start, or reset, the timed busy
- // state when we get the "endBackgroundOperation" call.
- if (!inBusyState()) {
- beginBusyStateInternal();
- }
- }
-
- /**
- *
- */
- private void beginBusyStateInternal() {
-
- fBusyState = true;
- startBusyTimer();
-
- ISourceViewer viewer = getSourceViewer();
- if (viewer instanceof StructuredTextViewer) {
- ((StructuredTextViewer) viewer).beginBackgroundUpdate();
-
- }
- showBusy(true);
- }
-
- // private void addFindOccurrencesAction(String matchType, String
- // matchText, IMenuManager menu) {
- //
- // AbstractFindOccurrencesAction action = new
- // AbstractFindOccurrencesAction(getFileInEditor(), new
- // SearchUIConfiguration(), (IStructuredDocument) getDocument(),
- // matchType, matchText, getProgressMonitor());
- // action.setText("Occurrences of \"" + matchText + "\" in File");
- // menu.appendToGroup(ITextEditorActionConstants.GROUP_EDIT, action);
- // }
-
- /**
- * Instead of us closing directly, we have to close with our containing
- * (multipage) editor, if it exists.
- */
- public void close(final boolean save) {
- if (getSite() == null) {
- // if site hasn't been set yet, then we're not
- // completely open
- // so set a flag not to open
- shouldClose = true;
- } else {
- if (getEditorPart() != null) {
- Display display = getSite().getShell().getDisplay();
- display.asyncExec(new Runnable() {
-
- public void run() {
- getSite().getPage().closeEditor(getEditorPart(), save);
- }
- });
- } else {
- super.close(save);
- }
- }
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.ui.texteditor.AbstractDecoratedTextEditor#collectContextMenuPreferencePages()
- */
- protected String[] collectContextMenuPreferencePages() {
- List allIds = new ArrayList(0);
-
- // get contributed preference pages
- ExtendedConfigurationBuilder builder = ExtendedConfigurationBuilder.getInstance();
- String[] configurationIds = getConfigurationPoints();
- for (int i = 0; i < configurationIds.length; i++) {
- String[] definitions = builder.getDefinitions("preferencepages", configurationIds[i]); //$NON-NLS-1$
- for (int j = 0; j < definitions.length; j++) {
- String someIds = definitions[j];
- if (someIds != null && someIds.length() > 0) {
- // supports multiple comma-delimited page IDs in one
- // element
- String[] ids = StringUtils.unpack(someIds);
- for (int k = 0; k < ids.length; k++) {
- // trim, just to keep things clean
- String id = ids[k].trim();
- if (!allIds.contains(id)) {
- allIds.add(id);
- }
- }
- }
- }
- }
-
- // add pages contributed by super
- String[] superPages = super.collectContextMenuPreferencePages();
- for (int m = 0; m < superPages.length; m++) {
- // trim, just to keep things clean
- String id = superPages[m].trim();
- if (!allIds.contains(id)) {
- allIds.add(id);
- }
- }
-
- return (String[]) allIds.toArray(new String[0]);
- }
-
- /**
- * Compute and set double-click action for the source editor, depending on
- * the input.
- */
- protected void computeAndSetDoubleClickAction(IStructuredModel model) {
- if (model == null)
- return;
- // If we're editing a breakpoint-supported input, make double-clicking
- // on the ruler toggle a breakpoint instead of toggling a bookmark.
- String ext = BreakpointRulerAction.getFileExtension(getEditorInput());
- if (BreakpointProviderBuilder.getInstance().isAvailable(model.getContentTypeIdentifier(), ext)) {
- setAction(ITextEditorActionConstants.RULER_DOUBLE_CLICK, getAction(ActionDefinitionIds.TOGGLE_BREAKPOINTS));
- } else {
- // The Default Text Editor uses editorContribution to perform this
- // mapping, but since it relies on the IEditorSite ID, it can't be
- // relied on for MultiPageEditorParts. Instead, force the action
- // registration manually.
- setAction(ITextEditorActionConstants.RULER_DOUBLE_CLICK, new MarkerRulerAction(SSEUIMessages.getResourceBundle(), "Editor_ManageBookmarks_", this, getVerticalRuler(), IMarker.BOOKMARK, true)); //$NON-NLS-1$
- }
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.ui.texteditor.ExtendedTextEditor#configureSourceViewerDecorationSupport(org.eclipse.ui.texteditor.SourceViewerDecorationSupport)
- */
- protected void configureSourceViewerDecorationSupport(SourceViewerDecorationSupport support) {
- support.setCharacterPairMatcher(createCharacterPairMatcher());
- support.setMatchingCharacterPainterPreferenceKeys(EditorPreferenceNames.MATCHING_BRACKETS, EditorPreferenceNames.MATCHING_BRACKETS_COLOR);
-
- super.configureSourceViewerDecorationSupport(support);
- }
-
- protected void createActions() {
- super.createActions();
- ResourceBundle resourceBundle = SSEUIMessages.getResourceBundle();
- IWorkbenchHelpSystem helpSystem = SSEUIPlugin.getDefault().getWorkbench().getHelpSystem();
- // TextView Action - moving the selected text to
- // the clipboard
- // override the cut/paste/delete action to make
- // them run on read-only
- // files
- Action action = new TextOperationAction(resourceBundle, "Editor_Cut_", this, ITextOperationTarget.CUT, true); //$NON-NLS-1$
- action.setActionDefinitionId(IWorkbenchActionDefinitionIds.CUT);
- setAction(ITextEditorActionConstants.CUT, action);
- helpSystem.setHelp(action, IAbstractTextEditorHelpContextIds.CUT_ACTION);
- // TextView Action - inserting the clipboard
- // content at the current
- // position
- // override the cut/paste/delete action to make
- // them run on read-only
- // files
- action = new TextOperationAction(resourceBundle, "Editor_Paste_", this, ITextOperationTarget.PASTE, true); //$NON-NLS-1$
- action.setActionDefinitionId(IWorkbenchActionDefinitionIds.PASTE);
- setAction(ITextEditorActionConstants.PASTE, action);
- helpSystem.setHelp(action, IAbstractTextEditorHelpContextIds.PASTE_ACTION);
- // TextView Action - deleting the selected text or
- // if selection is
- // empty the character at the right of the current
- // position
- // override the cut/paste/delete action to make
- // them run on read-only
- // files
- action = new TextOperationAction(resourceBundle, "Editor_Delete_", this, ITextOperationTarget.DELETE, true); //$NON-NLS-1$
- action.setActionDefinitionId(IWorkbenchActionDefinitionIds.DELETE);
- setAction(ITextEditorActionConstants.DELETE, action);
- helpSystem.setHelp(action, IAbstractTextEditorHelpContextIds.DELETE_ACTION);
- // SourceView Action - requesting information at
- // the current insertion
- // position
- action = new TextOperationAction(SSEUIMessages.getResourceBundle(), StructuredTextEditorActionConstants.ACTION_NAME_INFORMATION + UNDERSCORE, this, ISourceViewer.INFORMATION, true);
- action.setActionDefinitionId(ActionDefinitionIds.INFORMATION);
- setAction(StructuredTextEditorActionConstants.ACTION_NAME_INFORMATION, action);
- markAsStateDependentAction(StructuredTextEditorActionConstants.ACTION_NAME_INFORMATION, true);
- // SourceView Action - requesting content assist to
- // show completetion
- // proposals for the current insert position
- action = new TextOperationAction(resourceBundle, StructuredTextEditorActionConstants.ACTION_NAME_CONTENTASSIST_PROPOSALS + UNDERSCORE, this, ISourceViewer.CONTENTASSIST_PROPOSALS, true);
- helpSystem.setHelp(action, IHelpContextIds.CONTMNU_CONTENTASSIST_HELPID);
- action.setActionDefinitionId(ITextEditorActionDefinitionIds.CONTENT_ASSIST_PROPOSALS);
- setAction(StructuredTextEditorActionConstants.ACTION_NAME_CONTENTASSIST_PROPOSALS, action);
- markAsStateDependentAction(StructuredTextEditorActionConstants.ACTION_NAME_CONTENTASSIST_PROPOSALS, true);
- // SourceView Action - requesting content assist to
- // show the content
- // information for the current insert position
- action = new TextOperationAction(SSEUIMessages.getResourceBundle(), StructuredTextEditorActionConstants.ACTION_NAME_CONTENTASSIST_CONTEXT_INFORMATION + UNDERSCORE, this, ISourceViewer.CONTENTASSIST_CONTEXT_INFORMATION);
- action.setActionDefinitionId(ITextEditorActionDefinitionIds.CONTENT_ASSIST_CONTEXT_INFORMATION);
- setAction(StructuredTextEditorActionConstants.ACTION_NAME_CONTENTASSIST_CONTEXT_INFORMATION, action);
- markAsStateDependentAction(StructuredTextEditorActionConstants.ACTION_NAME_CONTENTASSIST_CONTEXT_INFORMATION, true);
- // StructuredTextViewer Action - requesting
- // correction assist to show
- // correction proposals for the current position
- action = new TextOperationAction(resourceBundle, StructuredTextEditorActionConstants.ACTION_NAME_QUICK_FIX + UNDERSCORE, this, StructuredTextViewer.QUICK_FIX, true);
- action.setActionDefinitionId(ActionDefinitionIds.QUICK_FIX);
- setAction(StructuredTextEditorActionConstants.ACTION_NAME_QUICK_FIX, action);
- markAsStateDependentAction(StructuredTextEditorActionConstants.ACTION_NAME_QUICK_FIX, true);
- // StructuredTextViewer Action - requesting format
- // of the whole
- // document
- action = new TextOperationAction(resourceBundle, StructuredTextEditorActionConstants.ACTION_NAME_FORMAT_DOCUMENT + UNDERSCORE, this, StructuredTextViewer.FORMAT_DOCUMENT);
- helpSystem.setHelp(action, IHelpContextIds.CONTMNU_FORMAT_DOC_HELPID);
- action.setActionDefinitionId(ActionDefinitionIds.FORMAT_DOCUMENT);
- setAction(StructuredTextEditorActionConstants.ACTION_NAME_FORMAT_DOCUMENT, action);
- markAsStateDependentAction(StructuredTextEditorActionConstants.ACTION_NAME_FORMAT_DOCUMENT, true);
- markAsSelectionDependentAction(StructuredTextEditorActionConstants.ACTION_NAME_FORMAT_DOCUMENT, true);
- // StructuredTextViewer Action - requesting format
- // of the active
- // elements
- action = new TextOperationAction(resourceBundle, StructuredTextEditorActionConstants.ACTION_NAME_FORMAT_ACTIVE_ELEMENTS + UNDERSCORE, this, StructuredTextViewer.FORMAT_ACTIVE_ELEMENTS);
- helpSystem.setHelp(action, IHelpContextIds.CONTMNU_FORMAT_ELEMENTS_HELPID);
- action.setActionDefinitionId(ActionDefinitionIds.FORMAT_ACTIVE_ELEMENTS);
- setAction(StructuredTextEditorActionConstants.ACTION_NAME_FORMAT_ACTIVE_ELEMENTS, action);
- markAsStateDependentAction(StructuredTextEditorActionConstants.ACTION_NAME_FORMAT_ACTIVE_ELEMENTS, true);
- markAsSelectionDependentAction(StructuredTextEditorActionConstants.ACTION_NAME_FORMAT_ACTIVE_ELEMENTS, true);
- // StructuredTextEditor Action - add breakpoints
- action = new ToggleBreakpointAction(this, getVerticalRuler());
- setAction(ActionDefinitionIds.TOGGLE_BREAKPOINTS, action);
- // StructuredTextEditor Action - manage breakpoints
- action = new ManageBreakpointAction(this, getVerticalRuler());
- setAction(ActionDefinitionIds.MANAGE_BREAKPOINTS, action);
- // StructuredTextEditor Action - edit breakpoints
- action = new EditBreakpointAction(this, getVerticalRuler());
- setAction(ActionDefinitionIds.EDIT_BREAKPOINTS, action);
- // StructuredTextViewer Action - open file on selection
- action = new OpenHyperlinkAction(resourceBundle, StructuredTextEditorActionConstants.ACTION_NAME_OPEN_FILE + UNDERSCORE, this, getSourceViewer());
- action.setActionDefinitionId(ActionDefinitionIds.OPEN_FILE);
- setAction(StructuredTextEditorActionConstants.ACTION_NAME_OPEN_FILE, action);
-
- fShowPropertiesAction = new ShowPropertiesAction();
-
- SelectionHistory selectionHistory = new SelectionHistory(this);
- action = new StructureSelectEnclosingAction(this, selectionHistory);
- action.setActionDefinitionId(ActionDefinitionIds.STRUCTURE_SELECT_ENCLOSING);
- setAction(StructuredTextEditorActionConstants.ACTION_NAME_STRUCTURE_SELECT_ENCLOSING, action);
-
- action = new StructureSelectNextAction(this, selectionHistory);
- action.setActionDefinitionId(ActionDefinitionIds.STRUCTURE_SELECT_NEXT);
- setAction(StructuredTextEditorActionConstants.ACTION_NAME_STRUCTURE_SELECT_NEXT, action);
-
- action = new StructureSelectPreviousAction(this, selectionHistory);
- action.setActionDefinitionId(ActionDefinitionIds.STRUCTURE_SELECT_PREVIOUS);
- setAction(StructuredTextEditorActionConstants.ACTION_NAME_STRUCTURE_SELECT_PREVIOUS, action);
-
- action = new StructureSelectHistoryAction(this, selectionHistory);
- action.setActionDefinitionId(ActionDefinitionIds.STRUCTURE_SELECT_HISTORY);
- setAction(StructuredTextEditorActionConstants.ACTION_NAME_STRUCTURE_SELECT_HISTORY, action);
- selectionHistory.setHistoryAction((StructureSelectHistoryAction) action);
- }
-
- protected LineChangeHover createChangeHover() {
- return new StructuredLineChangeHover();
- }
-
- protected ICharacterPairMatcher createCharacterPairMatcher() {
- ICharacterPairMatcher matcher = null;
- ExtendedConfigurationBuilder builder = ExtendedConfigurationBuilder.getInstance();
- String[] ids = getConfigurationPoints();
- for (int i = 0; matcher == null && i < ids.length; i++) {
- matcher = (ICharacterPairMatcher) builder.getConfiguration(DocumentRegionEdgeMatcher.ID, ids[i]);
- }
- if (matcher == null) {
- matcher = new ICharacterPairMatcher() {
-
- public void clear() {
- }
-
- public void dispose() {
- }
-
- public int getAnchor() {
- return ICharacterPairMatcher.LEFT;
- }
-
- public IRegion match(IDocument iDocument, int i) {
- return null;
- }
- };
- }
- return matcher;
- }
-
- /**
- * Create a preference store that combines the source editor preferences
- * with the base editor's preferences.
- *
- * @return IPreferenceStore
- */
- private IPreferenceStore createCombinedPreferenceStore() {
- IPreferenceStore sseEditorPrefs = SSEUIPlugin.getDefault().getPreferenceStore();
- IPreferenceStore baseEditorPrefs = EditorsUI.getPreferenceStore();
- return new ChainedPreferenceStore(new IPreferenceStore[]{sseEditorPrefs, baseEditorPrefs});
- }
-
- protected ContentOutlineConfiguration createContentOutlineConfiguration() {
- ContentOutlineConfiguration cfg = null;
- ExtendedConfigurationBuilder builder = ExtendedConfigurationBuilder.getInstance();
- String[] ids = getConfigurationPoints();
- for (int i = 0; cfg == null && i < ids.length; i++) {
- cfg = (ContentOutlineConfiguration) builder.getConfiguration(ContentOutlineConfiguration.ID, ids[i]);
- }
- return cfg;
- }
-
- protected void createModelDependentFields() {
- // none at this level
- }
-
- /**
- * Use StructuredTextViewerConfiguration if a viewerconfiguration has not
- * already been set. Also initialize StructuredTextViewer.
- *
- * @see org.eclipse.ui.texteditor.AbstractDecoratedTextEditor#createPartControl(org.eclipse.swt.widgets.Composite)
- */
- public void createPartControl(Composite parent) {
- if (getSourceViewerConfiguration() == null) {
- StructuredTextViewerConfiguration newViewerConfiguration = createSourceViewerConfiguration();
- setSourceViewerConfiguration(newViewerConfiguration);
- }
-
- super.createPartControl(parent);
-
- // instead of calling setInput twice, use initializeSourceViewer() to
- // handle source viewer initialization previously handled by setInput
- initializeSourceViewer();
- }
-
- protected PropertySheetConfiguration createPropertySheetConfiguration() {
- PropertySheetConfiguration cfg = null;
- ExtendedConfigurationBuilder builder = ExtendedConfigurationBuilder.getInstance();
- String[] ids = getConfigurationPoints();
- for (int i = 0; cfg == null && i < ids.length; i++) {
- cfg = (PropertySheetConfiguration) builder.getConfiguration(PropertySheetConfiguration.ID, ids[i]);
- }
- return cfg;
- }
-
- /**
- * Loads the Show In Target IDs from the Extended Configuration extension
- * point.
- *
- * @return
- */
- private String[] createShowInTargetIds() {
- List allIds = new ArrayList(0);
- ExtendedConfigurationBuilder builder = ExtendedConfigurationBuilder.getInstance();
- String[] configurationIds = getConfigurationPoints();
- for (int i = 0; i < configurationIds.length; i++) {
- String[] definitions = builder.getDefinitions("showintarget", configurationIds[i]); //$NON-NLS-1$
- for (int j = 0; j < definitions.length; j++) {
- String someIds = definitions[j];
- if (someIds != null && someIds.length() > 0) {
- String[] ids = StringUtils.unpack(someIds);
- for (int k = 0; k < ids.length; k++) {
- // trim, just to keep things clean
- String id = ids[k].trim();
- if (!allIds.contains(id)) {
- allIds.add(id);
- }
- }
- }
- }
- }
-
- if (!allIds.contains(IPageLayout.ID_RES_NAV)) {
- allIds.add(IPageLayout.ID_RES_NAV);
- }
- if (!allIds.contains(IPageLayout.ID_OUTLINE)) {
- allIds.add(IPageLayout.ID_OUTLINE);
- }
- return (String[]) allIds.toArray(new String[0]);
- }
-
- /**
- * @return
- */
- protected SourceEditingTextTools createSourceEditingTextTools() {
- SourceEditingTextTools tools = null;
- ExtendedConfigurationBuilder builder = ExtendedConfigurationBuilder.getInstance();
- String[] ids = getConfigurationPoints();
- for (int i = 0; tools == null && i < ids.length; i++) {
- tools = (SourceEditingTextTools) builder.getConfiguration(NullSourceEditingTextTools.ID, ids[i]);
- }
- if (tools == null) {
- tools = NullSourceEditingTextTools.getInstance();
- }
- return tools;
- }
-
- /**
- * Creates the source viewer to be used by this editor
- */
- protected ISourceViewer createSourceViewer(Composite parent, IVerticalRuler verticalRuler, int styles) {
- fAnnotationAccess = createAnnotationAccess();
- fOverviewRuler = createOverviewRuler(getSharedColors());
- StructuredTextViewer sourceViewer = createStructedTextViewer(parent, verticalRuler, styles);
- initSourceViewer(sourceViewer);
- return sourceViewer;
- }
-
- protected StructuredTextViewerConfiguration createSourceViewerConfiguration() {
- StructuredTextViewerConfiguration cfg = null;
- ExtendedConfigurationBuilder builder = ExtendedConfigurationBuilder.getInstance();
- String[] ids = getConfigurationPoints();
- for (int i = 0; cfg == null && i < ids.length; i++) {
- cfg = (StructuredTextViewerConfiguration) builder.getConfiguration(StructuredTextViewerConfiguration.ID, ids[i]);
- }
- if (cfg == null) {
- cfg = new StructuredTextViewerConfiguration();
- cfg.setDeclaringID(getClass().getName() + "#default"); //$NON-NLS-1$
- }
- initializeSourceViewerConfiguration(cfg);
- return cfg;
- }
-
- protected StructuredTextViewer createStructedTextViewer(Composite parent, IVerticalRuler verticalRuler, int styles) {
- return new StructuredTextViewer(parent, verticalRuler, getOverviewRuler(), isOverviewRulerVisible(), styles);
- }
-
- /**
- * @see DekstopPart#dispose
- */
- public void dispose() {
- Logger.trace("Source Editor", "StructuredTextEditor::dispose entry"); //$NON-NLS-1$ //$NON-NLS-2$
- if (org.eclipse.wst.sse.core.internal.util.Debug.perfTestAdapterClassLoading) {
- System.out.println("Total calls to getAdapter: " + adapterRequests); //$NON-NLS-1$
- System.out.println("Total time in getAdapter: " + adapterTime); //$NON-NLS-1$
- System.out.println("Average time per call: " + (adapterTime / adapterRequests)); //$NON-NLS-1$
- }
-
-
- int caretOffset = getCaretPosition();
- // safeguard values used in the Position below
- if (caretOffset < 0) {
- caretOffset = 0;
- }
-
-
- // dispose of document folding support
- if (fProjectionModelUpdater != null) {
- fProjectionModelUpdater.uninstall();
- fProjectionModelUpdater = null;
- }
-
- if (fProjectionSupport != null) {
- fProjectionSupport.dispose();
- fProjectionSupport = null;
- }
-
- // subclass may not have mouse tracker created
- // need to check for null before stopping
- if (fMouseTracker != null) {
- fMouseTracker.stop();
- fMouseTracker = null;
- }
-
- // added this 2/19/2004 to match the 'add' in
- // intializeDocumentProvider.
- if (getDocumentProvider() != null)
- getDocumentProvider().removeElementStateListener(internalElementStateListener);
-
- // added this 2/20/2004 based on probe results --
- // seems should be handled by setModel(null), but
- // that's a more radical change.
- // and, technically speaking, should not be needed,
- // but makes a memory leak
- // less severe.
- if (fStructuredModel != null) {
- if (fStructuredModel.getStructuredDocument() != null)
- fStructuredModel.getStructuredDocument().removeDocumentListener(this);
- fStructuredModel.removeModelStateListener(getInternalModelStateListener());
- }
-
- if (getDocument() != null) {
- IDocument doc = getDocument();
- doc.removeDocumentListener(this);
- if (doc instanceof IExecutionDelegatable) {
- ((IExecutionDelegatable) doc).setExecutionDelegate(null);
- }
- }
-
- fEditorDisposed = true;
- disposeModelDependentFields();
- // some things in the configuration need to clean
- // up after themselves
- SourceViewerConfiguration config = getSourceViewerConfiguration();
- if (config instanceof StructuredTextViewerConfiguration) {
- ((StructuredTextViewerConfiguration) config).unConfigure(getSourceViewer());
- }
-
- if (fDropTarget != null)
- fDropTarget.dispose();
-
- setPreferenceStore(null);
-
- // strictly speaking, but following null outs
- // should not be needed,
- // but in the event of a memory leak, they make the
- // memory leak less
- // severe
- fDropAdapter = null;
- fDropTarget = null;
-
- super.dispose();
- Logger.trace("Source Editor", "StructuredTextEditor::dispose exit"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.ui.texteditor.AbstractDecoratedTextEditor#disposeDocumentProvider()
- */
- protected void disposeDocumentProvider() {
- if (fStructuredModel != null && !(getDocumentProvider() instanceof IModelProvider)) {
- fStructuredModel.releaseFromEdit();
- }
- super.disposeDocumentProvider();
- }
-
- /**
- * Disposes model specific editor helpers such as statusLineHelper.
- * Basically any code repeated in update() & dispose() should be placed
- * here.
- */
- protected void disposeModelDependentFields() {
- // none at this level
- }
-
- // This is for the IDocumentListener interface
- public void documentAboutToBeChanged(DocumentEvent event) {
- fDirtyBeforeDocumentEvent = isDirty();
- }
-
- // This is for the IDocumentListener interface
- public void documentChanged(DocumentEvent event) {
- if (isEditorInputReadOnly()) {
- // stop listening to document event
- // caused by the undo after validateEdit
- final int offset = event.getOffset() + event.getLength();
- fCurrentRunnable = new Runnable() {
- public void run() {
- if (!fEditorDisposed) {
- IStatus status = validateEdit(getSite().getShell());
- if (status != null && status.isOK()) {
- // nothing to do if 'ok'
- } else {
- getModel().getUndoManager().undo();
- getSourceViewer().setSelectedRange(offset, 0);
- if (!fDirtyBeforeDocumentEvent) {
- // reset dirty state if
- // model not dirty before
- // document event
- getModel().setDirtyState(false);
- }
- }
- }
- fCurrentRunnable = null;
- }
- };
- /*
- * We need to ensure that this is run via 'asyncExec' since these
- * notifications can come from a non-ui thread.
- *
- * The non-ui thread call would occur when creating a new file
- * under ClearCase (or other library) control. The creation of the
- * new file would trigger a validateEdit call, on another thread,
- * that would prompt the user to add the new file to version
- * control.
- */
- Display display = getDisplay();
- if (display != null) {
- if (Thread.currentThread() != display.getThread())
- // future_TODO: there's probably a better
- // way than relying on asycnExec
- display.asyncExec(fCurrentRunnable);
- else
- fCurrentRunnable.run();
- }
- }
- }
-
- /**
- * @see ITextEditor#doRevertToSaved
- */
- public void doRevertToSaved() {
- super.doRevertToSaved();
- if (fOutlinePage != null && fOutlinePage instanceof IUpdate)
- ((IUpdate) fOutlinePage).update();
- // update menu text
- updateMenuText();
- }
-
- public void doSave(IProgressMonitor progressMonitor) {
- try {
- aboutToSaveModel();
- updateEncodingMemento();
- super.doSave(progressMonitor);
- } finally {
- savedModel();
- }
- }
-
- private void savedModel() {
- if (getModel() != null) {
- getModel().changedModel();
- }
- }
-
- private void aboutToSaveModel() {
- if (getModel() != null) {
- getModel().aboutToChangeModel();
- }
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.ui.texteditor.AbstractTextEditor#doSetInput(org.eclipse.ui.IEditorInput)
- */
- protected void doSetInput(IEditorInput input) throws CoreException {
- try {
- // TODO: if opened in more than one editor, this will cause
- // problems.
- IEditorInput oldInput = getEditorInput();
- if (oldInput != null) {
- IDocument olddoc = getDocumentProvider().getDocument(oldInput);
- if (olddoc != null && olddoc instanceof IExecutionDelegatable) {
- ((IExecutionDelegatable) olddoc).setExecutionDelegate(null);
- }
- }
-
- if (fStructuredModel != null) {
- fStructuredModel.releaseFromEdit();
- }
-
- super.doSetInput(input);
-
- if (getDocument() instanceof IExecutionDelegatable) {
- ((IExecutionDelegatable) getDocument()).setExecutionDelegate(new EditorExecutionContext(this));
- }
-
- IStructuredModel model = null;
- // if we have a Model provider, get the model from it
- if (getDocumentProvider() instanceof IModelProvider) {
- model = ((IModelProvider) getDocumentProvider()).getModel(getEditorInput());
- if (!model.isShared()) {
- EditorModelUtil.addFactoriesTo(model);
- }
- } else {
- IDocument doc = getDocument();
- // IMPL: need to cleanup throughout to avoid any instanceof
- // checks
- if (doc instanceof IStructuredDocument) {
- // corresponding releaseFromEdit occurs in
- // disposeDocumentProvider
- model = StructuredModelManager.getModelManager().getExistingModelForEdit(doc);
- if (model == null) {
- model = StructuredModelManager.getModelManager().getModelForEdit((IStructuredDocument) doc);
- EditorModelUtil.addFactoriesTo(model);
- }
- } else {
- logUnexpectedDocumentKind(input);
- }
- }
-
- if (fStructuredModel != null || model != null) {
- setModel(model);
- }
-
- // currently this only works if createpartcontrol has not been called yet
- if (getModel() != null) {
- String contentType = getModel().getContentTypeIdentifier();
- setEditorContextMenuId(contentType+".source.EditorContext"); //$NON-NLS-1$
- setRulerContextMenuId(contentType+".source.RulerContext"); //$NON-NLS-1$
- setHelpContextId(contentType+".source.HelpId"); //$NON-NLS-1$
- // allows help to be set at any time (not just on AbstractTextEditor's
- // creation)
- if ((getHelpContextId() != null) && (getSourceViewer() != null) && (getSourceViewer().getTextWidget() != null)) {
- IWorkbenchHelpSystem helpSystem = SSEUIPlugin.getDefault().getWorkbench().getHelpSystem();
- helpSystem.setHelp(getSourceViewer().getTextWidget(), getHelpContextId());
- }
- }
-
- if (fProjectionModelUpdater != null)
- fProjectionModelUpdater.initialize();
-
- // start editor with smart insert mode
- setInsertMode(SMART_INSERT);
- } catch (CoreException exception) {
- // dispose editor
- dispose();
-
- throw new CoreException(exception.getStatus());
- }
- }
-
- private void logUnexpectedDocumentKind(IEditorInput input) {
- Logger.log(Logger.WARNING, "StructuredTextEditor being used without StructuredDocument"); //$NON-NLS-1$
- String name = null;
- if (input != null) {
- name = input.getName();
- } else {
- name = "input was null"; //$NON-NLS-1$
- }
- Logger.log(Logger.WARNING, " Input Name: " + name); //$NON-NLS-1$
- String implClass = null;
- if (getDocument() != null) {
- implClass = getDocument().getClass().toString();
- } else {
- implClass = "document was null"; //$NON-NLS-1$
- }
- Logger.log(Logger.WARNING, " Document implementation: " + implClass); //$NON-NLS-1$
- }
-
- /**
- * Sets up this editor's context menu before it is made visible.
- *
- * @param menu
- * the menu
- */
- public void editorContextMenuAboutToShow(IMenuManager menu) {
- // To be consistant with the Java Editor, we want
- // to remove
- // ShiftRight and ShiftLeft from the context menu.
- //
- // ShiftRight and ShiftLeft were added in the super
- // implemenation of
- // this method. We want to skip it and call
- // AbstractTextEditor's
- // implementation directly. The easiest way is to
- // copy the method here.
-
- // super.editorContextMenuAboutToShow(menu);
- abstractTextEditorContextMenuAboutToShow(menu);
-
- addContextMenuActions(menu);
- addExtendedContextMenuActions(menu);
- }
-
- /**
- * This is the public method to be called to notifiy us that document is
- * being updated by backround job.
- */
- public void endBackgroundOperation() {
- fBackgroundJobEnded = true;
- // note, we don't immediately end our 'internal busy' state,
- // since we may get many calls in a short period of
- // time. We always wait for the time out.
- resetBusyState();
- }
-
-
- /**
- * Note this method can be called indirectly from background job operation
- * ... but expected to be gaurded there with ILock, plus, can be called
- * directly from timer thread, so the timer's run method guards with ILock
- * too.
- */
- private void endBusyStateInternal() {
- if (fBackgroundJobEnded) {
- fBusyTimer.cancel();
- showBusy(false);
-
- ISourceViewer viewer = getSourceViewer();
- if (viewer instanceof StructuredTextViewer) {
- ((StructuredTextViewer) viewer).endBackgroundUpdate();
- }
- fBusyState = false;
- } else {
- // we will only be in this branch for a back ground job that is
- // taking
- // longer than our normal time-out period (meaning we got notified
- // of
- // the timeout "inbetween" calls to 'begin' and
- // 'endBackgroundOperation'.
- // (which, remember, can only happen since there are many calls to
- // begin/end in a short period of time, and we only "reset" on the
- // 'ends').
- // In this event, there's really nothing to do, we're still in
- // "busy state"
- // and should start a new reset cycle once endBackgroundjob is
- // called.
- }
- }
-
- public Object getAdapter(Class required) {
- if (org.eclipse.wst.sse.core.internal.util.Debug.perfTestAdapterClassLoading) {
- startPerfTime = System.currentTimeMillis();
- }
- Object result = null;
- // text editor
- if (ITextEditor.class.equals(required)) {
- result = this;
- } else if (IWorkbenchSiteProgressService.class.equals(required)) {
- return getEditorPart().getSite().getAdapter(IWorkbenchSiteProgressService.class);
- }
- // content outline page
- else if (IContentOutlinePage.class.equals(required)) {
- if (fOutlinePage == null || fOutlinePage.getControl() == null || fOutlinePage.getControl().isDisposed()) {
- ContentOutlineConfiguration cfg = createContentOutlineConfiguration();
- if (cfg != null) {
- if (cfg instanceof StructuredContentOutlineConfiguration) {
- ((StructuredContentOutlineConfiguration) cfg).setEditor(this);
- }
- StructuredTextEditorContentOutlinePage outlinePage = new StructuredTextEditorContentOutlinePage();
- outlinePage.setConfiguration(cfg);
- outlinePage.setViewerSelectionManager(getViewerSelectionManager());
- outlinePage.setModel(getModel());
- fOutlinePage = outlinePage;
- }
- }
- result = fOutlinePage;
- }
- // property sheet page, but only if the input's editable
- else if (IPropertySheetPage.class.equals(required) && isEditable()) {
- if (fPropertySheetPage == null || fPropertySheetPage.getControl() == null || fPropertySheetPage.getControl().isDisposed()) {
- PropertySheetConfiguration cfg = createPropertySheetConfiguration();
- if (cfg != null) {
- if (cfg instanceof StructuredPropertySheetConfiguration) {
- ((StructuredPropertySheetConfiguration) cfg).setEditor(this);
- }
- ConfigurablePropertySheetPage propertySheetPage = new ConfigurablePropertySheetPage();
- propertySheetPage.setConfiguration(cfg);
- propertySheetPage.setViewerSelectionManager(getViewerSelectionManager());
- propertySheetPage.setModel(getModel());
- fPropertySheetPage = propertySheetPage;
- }
- }
- result = fPropertySheetPage;
- } else if (ViewerSelectionManager.class.equals(required)) {
- result = getViewerSelectionManager();
- } else if (SourceEditingTextTools.class.equals(required)) {
- result = createSourceEditingTextTools();
- } else if (IToggleBreakpointsTarget.class.equals(required)) {
- result = ToggleBreakpointsTarget.getInstance();
- } else if (IShowInTargetList.class.equals(required)) {
- return new ShowInTargetListAdapter();
- } else {
- Document document = getDOMDocument();
- if (document != null && document instanceof INodeNotifier) {
- result = ((INodeNotifier) document).getAdapterFor(required);
- }
- if (result == null) {
- if (getModel() != null) {
- result = getModel().getAdapter(required);
- } else {
- result = super.getAdapter(required);
- }
- }
- // others
- if (result == null)
- result = super.getAdapter(required);
- }
- if (org.eclipse.wst.sse.core.internal.util.Debug.perfTestAdapterClassLoading) {
- long stop = System.currentTimeMillis();
- adapterRequests++;
- adapterTime += (stop - startPerfTime);
- }
- if (org.eclipse.wst.sse.core.internal.util.Debug.perfTestAdapterClassLoading) {
- System.out.println("Total calls to getAdapter: " + adapterRequests); //$NON-NLS-1$
- System.out.println("Total time in getAdapter: " + adapterTime); //$NON-NLS-1$
- System.out.println("Average time per call: " + (adapterTime / adapterRequests)); //$NON-NLS-1$
- }
- return result;
- }
-
- /**
- * IExtendedMarkupEditor method
- */
- public Node getCaretNode() {
- IStructuredModel model = getModel();
- if (model == null)
- return null;
- int pos = getCaretPosition();
- IndexedRegion inode = model.getIndexedRegion(pos);
- if (inode == null)
- inode = model.getIndexedRegion(pos - 1);
- return (inode instanceof Node) ? (Node) inode : null;
- }
-
- /**
- * IExtendedSimpleEditor method
- */
- public int getCaretPosition() {
- ViewerSelectionManager vsm = getViewerSelectionManager();
- if (vsm == null)
- return -1;
- // nsd_TODO: are we being overly paranoid?
- StructuredTextViewer stv = getTextViewer();
- if (stv != null && stv.getControl() != null && !stv.getControl().isDisposed()) {
- return stv.widgetOffset2ModelOffset(vsm.getCaretPosition());
- }
- return vsm.getCaretPosition();
- }
-
- protected String[] getConfigurationPoints() {
- String contentTypeIdentifierID = null;
- if (getModel() != null)
- contentTypeIdentifierID = getModel().getContentTypeIdentifier();
- return ConfigurationPointCalculator.getConfigurationPoints(this, contentTypeIdentifierID, ConfigurationPointCalculator.SOURCE, StructuredTextEditor.class);
- }
-
- /**
- * @deprecated - will be removed in M4
- */
- public Node getCursorNode() {
- if (getModel() != null)
- return (Node) getModel().getIndexedRegion(getCursorOffset());
- else
- return null;
- }
-
- /**
- * @deprecated - will be removed in M4
- */
- public int getCursorOffset() {
- if (hoverX >= 0 && hoverY >= 0)
- return getOffsetAtLocation(hoverX, hoverY);
- return getCaretPosition();
- }
-
- /**
- * added checks to overcome bug such that if we are shutting down in an
- * error condition, then viewer will have already been disposed.
- */
- protected String getCursorPosition() {
- String result = null;
- // this may be too expensive in terms of
- // performance, to do this check
- // every time, just to gaurd against error
- // condition.
- // perhaps there's a better way?
- if (getSourceViewer() != null && getSourceViewer().getTextWidget() != null && !getSourceViewer().getTextWidget().isDisposed()) {
- result = super.getCursorPosition();
- } else {
- result = "0:0"; //$NON-NLS-1$
- }
- return result;
- }
-
- Display getDisplay() {
- return PlatformUI.getWorkbench().getDisplay();
- }
-
- /**
- * IExtendedSimpleEditor method
- */
- public IDocument getDocument() {
- // ITextViewer tv = getTextViewer();
- // return (tv != null) ? tv.getDocument() : null;
- // The TextViewer may not be available at init
- // time.
- // The right way to get the document is thru
- // DocumentProvider.
- IDocumentProvider dp = getDocumentProvider();
- return (dp != null) ? dp.getDocument(getEditorInput()) : null;
- }
-
- /**
- * IExtendedMarkupEditor method
- */
- public Document getDOMDocument() {
- IStructuredModel model = getModel();
- if (model != null) {
- return (Document) model.getAdapter(Document.class);
- }
- return null;
- }
-
- /**
- * @see com.ibm.sed.edit.extension.IExtendedSimpleEditor#getEditorPart()
- */
- public IEditorPart getEditorPart() {
- if (fEditorPart == null)
- return this;
- return fEditorPart;
- }
-
- /**
- * @deprecated - will be removed in M4
- *
- * used only by Search and there are alternate means besides making this
- * API
- * @return the IFile from the currently active editor
- */
- public IFile getFileInEditor() {
- IStructuredModel model = getModel();
- return ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(model.getBaseLocation()));
- // (pa) this changed because FileBuffers don't use absolute location
- // plain old getFile(...) should work now (for the relative URL)
- // return
- // ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(new
- // Path(model.getBaseLocation()));
- }
-
- /**
- * @deprecated - will be removed in M4
- * @return
- */
- protected String[] getFindOccurrencesRegionTypes() {
- return new String[0];
- }
-
- private InternalModelStateListener getInternalModelStateListener() {
- if (fInternalModelStateListener == null) {
- fInternalModelStateListener = new InternalModelStateListener();
- }
- return fInternalModelStateListener;
- }
-
- /**
- * @deprecated - may be made protected in M4 This value is set in
- * initialize from input
- */
- public IStructuredModel getModel() {
- if (getDocumentProvider() == null) {
- // this indicated an error in startup sequence
- Logger.trace(getClass().getName(), "Program Info Only: document provider was null when model requested"); //$NON-NLS-1$ //$NON-NLS-2$
- }
- boolean initialModelNull = false;
- if (fStructuredModel == null)
- initialModelNull = true;
- if (fStructuredModel == null) {
- if (getDocumentProvider() instanceof IModelProvider) {
- fStructuredModel = ((IModelProvider) getDocumentProvider()).getModel(getEditorInput());
- }
- else {
- IDocument doc = getDocument();
- if (doc instanceof IStructuredDocument) {
- IStructuredModel model = StructuredModelManager.getModelManager().getExistingModelForEdit(doc);
- if (model == null) {
- model = StructuredModelManager.getModelManager().getModelForEdit((IStructuredDocument) doc);
- }
- EditorModelUtil.addFactoriesTo(model);
- fStructuredModel = model;
- }
- }
- if (initialModelNull && fStructuredModel != null) {
- /*
- * DMW: 9/1/2002 -- why is update called here? No change has
- * been indicated? I'd like to remove, but will leave for now
- * to avoid breaking this hack. Should measure/breakpoint to
- * see how large the problem is. May cause performance
- * problems.
- *
- * DMW: 9/8/2002 -- not sure why this was here initially, but
- * the intent/hack must have been to call update if this was
- * the first time fStructuredModel was set. So, I added the
- * logic to check for that "first time" case. It would appear
- * we don't really need. may remove in future when can test
- * more.
- */
- update();
- }
- }
- return fStructuredModel;
- }
-
- /**
- * Computes the document offset underlying the given text widget graphics
- * coordinates.
- *
- * @deprecated - only used by methods meant to be removed in M4
- *
- * this method will be removed in M4
- *
- * @param x
- * the x coordinate inside the text widget
- * @param y
- * the y coordinate inside the text widget
- * @return the document offset corresponding to the given point
- */
- protected int getOffsetAtLocation(int x, int y) {
- StyledText styledText = getSourceViewer().getTextWidget();
- if (styledText != null && !styledText.isDisposed()) {
- try {
- int widgetOffset = styledText.getOffsetAtLocation(new Point(x, y));
- if (getSourceViewer() instanceof ITextViewerExtension5) {
- ITextViewerExtension5 extension = (ITextViewerExtension5) getSourceViewer();
- return extension.widgetOffset2ModelOffset(widgetOffset);
- }
- return widgetOffset + getSourceViewer().getVisibleRegion().getOffset();
- } catch (IllegalArgumentException e) {
- return getSourceViewer().getVisibleRegion().getLength();
- }
- }
- return getCaretPosition();
- }
-
- /**
- * @deprecated - will be removed in M4
- *
- * used only by Search and there are alternate means besides making this
- * API
- *
- * @return the IStructuredDocumentRegion that the text selection in the
- * editor resolves to, or <code>null</code> if the range covers
- * more than one region.
- */
- public IStructuredDocumentRegion getSelectedDocumentRegion() {
- Point p = getSelectionRange();
- int start = p.x;
- int end = p.x + p.y;
-
- IDocument doc = getDocument();
- if (doc instanceof IStructuredDocument) {
- IStructuredDocument structuredDocument = (IStructuredDocument) doc;
- IStructuredDocumentRegion firstSdRegion = structuredDocument.getRegionAtCharacterOffset(start);
- IStructuredDocumentRegion secondSdRegion = structuredDocument.getRegionAtCharacterOffset(end);
- if (firstSdRegion != null && secondSdRegion != null) {
- if (firstSdRegion.equals(secondSdRegion) || firstSdRegion.getEndOffset() == end) {
- // the selection is on the same region or
- // the selection ends right on the end of the first region
- return firstSdRegion;
- }
- }
- }
- return null;
- }
-
- /**
- * IExtendedMarkupEditor method
- */
- public List getSelectedNodes() {
- ViewerSelectionManager vsm = getViewerSelectionManager();
- return (vsm != null) ? vsm.getSelectedNodes() : null;
- }
-
- /**
- * @deprecated
- *
- * used only by Search and there are alternate means besides making this
- * API
- *
- * will be removed in M4
- *
- * @param sdRegion
- * the IStructuredDocumentRegion that you want to check
- * selection on
- * @return the ITextRegion that the text selection in the editor resolves
- * to, or <code>null</code> if the range covers more than one
- * region or none.
- */
- public ITextRegion getSelectedTextRegion(IStructuredDocumentRegion sdRegion) {
- Assert.isNotNull(sdRegion);
-
- Point p = getSelectionRange();
- int start = p.x;
- int end = p.x + p.y;
-
- ITextRegion first = sdRegion.getRegionAtCharacterOffset(start);
- ITextRegion second = sdRegion.getRegionAtCharacterOffset(end);
- if (first != null && second != null) {
- if (first.equals(second) || sdRegion.getEndOffset(first) == end) {
- // the selection is on the same region
- // the selection ends right on the end of the first region
- return first;
- }
- }
- return null;
- }
-
- /**
- * IExtendedSimpleEditor method
- */
- public Point getSelectionRange() {
- ITextViewer tv = getSourceViewer();
- if (tv == null)
- return new Point(-1, -1);
- else
- return tv.getSelectedRange();
- }
-
- private IStatusLineManager getStatusLineManager() {
- IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
- if (window == null)
- return null;
- IWorkbenchPage page = window.getActivePage();
- if (page == null)
- return null;
- IEditorPart editor = page.getActiveEditor();
- if (editor == null)
- return null;
- IEditorActionBarContributor contributor = editor.getEditorSite().getActionBarContributor();
- if (contributor instanceof EditorActionBarContributor) {
- return ((EditorActionBarContributor) contributor).getActionBars().getStatusLineManager();
- }
- return null;
- }
-
- /**
- * Returns the editor's source viewer. This method was created to expose
- * the protected final getSourceViewer() method.
- *
- * @return the editor's source viewer
- */
- public StructuredTextViewer getTextViewer() {
- return (StructuredTextViewer) getSourceViewer();
- }
-
- /**
- * @deprecated
- *
- * will be made protected or removed in M4
- *
- * @return
- */
- public ViewerSelectionManager getViewerSelectionManager() {
- if (getTextViewer() != null)
- return getTextViewer().getViewerSelectionManager();
- return null;
- }
-
- protected void handleCursorPositionChanged() {
- super.handleCursorPositionChanged();
- updateStatusField(StructuredTextEditorActionConstants.STATUS_CATEGORY_OFFSET);
- }
-
- protected void handleElementContentAboutToBeReplaced(Object element) {
- // do nothing
- }
-
- protected void handleElementContentReplaced(Object element) {
- // do nothing, the model provider should reload the
- // model
- }
-
- protected void handleElementDeleted(Object element) {
- // do nothing, the superclass will close() us
- }
-
- protected void handleElementDirtyStateChanged(Object element, boolean isDirty) {
- // do nothing, the superclass will fire a proeprty
- // change
- }
-
- protected void handleElementMoved(Object oldElement, Object newElement) {
- // do nothing, the editor input will be changed
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.ui.texteditor.AbstractTextEditor#handlePreferenceStoreChanged(org.eclipse.jface.util.PropertyChangeEvent)
- */
- protected void handlePreferenceStoreChanged(PropertyChangeEvent event) {
- String property = event.getProperty();
-
- if (EditorPreferenceNames.EDITOR_TEXT_HOVER_MODIFIERS.equals(property)) {
- updateHoverBehavior();
- }
-
- if (IStructuredTextFoldingProvider.FOLDING_ENABLED.equals(property)) {
- if (getSourceViewer() instanceof ProjectionViewer) {
- // install projection support if it has not even been
- // installed yet
- if (isFoldingEnabled() && (fProjectionSupport == null) && (fProjectionModelUpdater == null)) {
- installProjectionSupport();
- }
- ProjectionViewer pv = (ProjectionViewer) getSourceViewer();
- if (pv.isProjectionMode() != isFoldingEnabled()) {
- if (pv.canDoOperation(ProjectionViewer.TOGGLE))
- pv.doOperation(ProjectionViewer.TOGGLE);
- }
- }
- return;
- }
- super.handlePreferenceStoreChanged(event);
- }
-
- /**
- * @return
- */
- private boolean inBusyState() {
- return fBusyState;
- }
-
- public void init(IEditorSite site, IEditorInput input) throws PartInitException {
- // if we've gotten an error elsewhere, before
- // we've actually opened, then don't open.
- if (shouldClose) {
- setSite(site);
- close(false);
- } else {
- super.init(site, input);
- }
- }
-
- public void initializeDocumentProvider(IDocumentProvider documentProvider) {
- if (getDocumentProvider() != null)
- getDocumentProvider().removeElementStateListener(internalElementStateListener);
- if (documentProvider != null) {
- setDocumentProvider(documentProvider);
- }
- if (documentProvider != null)
- documentProvider.addElementStateListener(internalElementStateListener);
- }
-
- protected void initializeDrop(ITextViewer textViewer) {
- int operations = DND.DROP_COPY | DND.DROP_MOVE;
- fDropTarget = new DropTarget(textViewer.getTextWidget(), operations);
- fDropAdapter = new ReadOnlyAwareDropTargetAdapter();
- fDropAdapter.setTargetEditor(this);
- fDropAdapter.setTargetIDs(getConfigurationPoints());
- fDropAdapter.setTextViewer(textViewer);
- fDropTarget.setTransfer(fDropAdapter.getTransfers());
- fDropTarget.addDropListener(fDropAdapter);
- }
-
- protected void initializeEditor() {
- super.initializeEditor();
- // FIXME: here's where to add back in our custom encoding support
- fEncodingSupport = null;
- setPreferenceStore(createCombinedPreferenceStore());
-
- setRangeIndicator(new DefaultRangeIndicator());
- setEditorContextMenuId(EDITOR_CONTEXT_MENU_ID);
- initializeDocumentProvider(null);
- // set the infopop for source viewer
- String helpId = getHelpContextId();
- // no infopop set or using default text editor help, use default
- if (helpId == null || ITextEditorHelpContextIds.TEXT_EDITOR.equals(helpId))
- helpId = IHelpContextIds.XML_SOURCE_VIEW_HELPID;
- setHelpContextId(helpId);
- // defect 203158 - disable ruler context menu for
- // beta
- // setRulerContextMenuId(RULER_CONTEXT_MENU_ID);
- configureInsertMode(SMART_INSERT, true);
-
- // enable the base source editor activity when editor opens
- try {
- // FIXME: - commented out to avoid minor dependancy during
- // transition to org.eclipse
- // WTPActivityBridge.getInstance().enableActivity(CORE_SSE_ACTIVITY_ID,
- // true);
- } catch (Exception t) {
- // if something goes wrong with enabling activity, just log the
- // error but dont
- // have it break the editor
- Logger.log(Logger.WARNING_DEBUG, t.getMessage(), t);
- }
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.ui.editors.text.TextEditor#initializeKeyBindingScopes()
- */
- protected void initializeKeyBindingScopes() {
- setKeyBindingScopes(new String[]{EDITOR_KEYBINDING_SCOPE_ID});
- }
-
- /**
- * Initializes the editor's source viewer and other items that were source
- * viewer-dependent.
- */
- private void initializeSourceViewer() {
- if (getViewerSelectionManager() != null)
- getViewerSelectionManager().setModel(getModel());
-
- computeAndSetDoubleClickAction(getModel());
-
- IAction contentAssistAction = getAction(StructuredTextEditorActionConstants.ACTION_NAME_CONTENTASSIST_PROPOSALS);
- if (contentAssistAction instanceof IUpdate) {
- ((IUpdate) contentAssistAction).update();
- }
- IAction openHyperlinkAction = getAction(StructuredTextEditorActionConstants.ACTION_NAME_OPEN_FILE);
- if (openHyperlinkAction instanceof OpenHyperlinkAction) {
- ((OpenHyperlinkAction) openHyperlinkAction).setHyperlinkDetectors(getSourceViewerConfiguration().getHyperlinkDetectors(getSourceViewer()));
- }
-
- // do not even install projection support until folding is actually
- // enabled
- if (isFoldingEnabled()) {
- installProjectionSupport();
- }
- }
-
- /**
- * Performs any necessary setup for a new or unconfigured
- * StructuredTextViewerConfiguration
- *
- * @param configuration
- */
- void initializeSourceViewerConfiguration(StructuredTextViewerConfiguration configuration) {
- configuration.setEditorPart(this);
- configuration.setPreferenceStore(getPreferenceStore());
-
- IResource resource = null;
- IFile file = (IFile) getEditorInput().getAdapter(IFile.class);
- if (file != null) {
- resource = file.getProject();
- }
- configuration.configureOn(resource);
- }
-
- protected void initSourceViewer(StructuredTextViewer sourceViewer) {
- // ensure decoration support is configured
- getSourceViewerDecorationSupport(sourceViewer);
- fMouseTracker = new MouseTracker();
- fMouseTracker.start(sourceViewer.getTextWidget());
- initializeDrop(sourceViewer);
- }
-
-
- protected void installEncodingSupport() {
- // TODO: install our custom support that can
- // update document appropriately
- // super.installEncodingSupport();
- }
-
- /**
- * Install everything necessary to get document folding working and enable
- * document folding
- */
- private void installProjectionSupport() {
- ProjectionViewer projectionViewer = (ProjectionViewer) getSourceViewer();
-
- fProjectionSupport = new ProjectionSupport(projectionViewer, getAnnotationAccess(), getSharedColors());
- fProjectionSupport.addSummarizableAnnotationType("org.eclipse.ui.workbench.texteditor.error"); //$NON-NLS-1$
- fProjectionSupport.addSummarizableAnnotationType("org.eclipse.ui.workbench.texteditor.warning"); //$NON-NLS-1$
- fProjectionSupport.setHoverControlCreator(new IInformationControlCreator() {
- public IInformationControl createInformationControl(Shell parent) {
- return new DefaultInformationControl(parent);
- }
- });
- fProjectionSupport.install();
-
- IStructuredTextFoldingProvider updater = null;
- ExtendedConfigurationBuilder builder = ExtendedConfigurationBuilder.getInstance();
- String[] ids = getConfigurationPoints();
- for (int i = 0; updater == null && i < ids.length; i++) {
- updater = (IStructuredTextFoldingProvider) builder.getConfiguration(IStructuredTextFoldingProvider.ID, ids[i]);
- }
-
- fProjectionModelUpdater = updater;
- if (fProjectionModelUpdater != null)
- fProjectionModelUpdater.install(projectionViewer);
-
- if (isFoldingEnabled())
- projectionViewer.doOperation(ProjectionViewer.TOGGLE);
- }
-
- /**
- * @deprecated - will be removed in M4
- * @param type
- * @return
- */
- public boolean isFindOccurrencesRegionType(String type) {
- String[] accept = getFindOccurrencesRegionTypes();
- for (int i = 0; i < accept.length; i++) {
- if (accept[i].equals(type))
- return true;
- }
- return false;
- }
-
-
- /**
- * Return whether document folding should be enabled according to the
- * preference store settings.
- *
- * @return <code>true</code> if document folding should be enabled
- */
- private boolean isFoldingEnabled() {
- IPreferenceStore store = getPreferenceStore();
- // check both preference store and vm argument
- return (store.getBoolean(IStructuredTextFoldingProvider.FOLDING_ENABLED) && (System.getProperty("org.eclipse.wst.sse.ui.foldingenabled") != null)); //$NON-NLS-1$
- }
-
- /**
- * Returns whether the given annotation type is configured as a target
- * type for the "Go to Next/Previous Annotation" actions. Copied from
- * org.eclipse.jdt.internal.ui.javaeditor.JavaEditor
- *
- * @param type
- * the annotation type
- * @return <code>true</code> if this is a target type,
- * <code>false</code> otherwise
- * @since 3.0
- */
- protected boolean isNavigationTargetType(Annotation annotation) {
- Preferences preferences = EditorsUI.getPluginPreferences();
- AnnotationPreference preference = getAnnotationPreferenceLookup().getAnnotationPreference(annotation);
- // See bug 41689
- // String key= forward ?
- // preference.getIsGoToNextNavigationTargetKey()
- // :
- // preference.getIsGoToPreviousNavigationTargetKey();
- String key = preference == null ? null : preference.getIsGoToNextNavigationTargetKey();
- return (key != null && preferences.getBoolean(key));
- }
-
- /*
- * @see IEditorPart#isSaveOnCloseNeeded()
- */
- public boolean isSaveOnCloseNeeded() {
- if (getModel() == null)
- return false;
- return getModel().isSaveNeeded();
- }
-
- /*
- * @see org.eclipse.ui.texteditor.AbstractTextEditor#performRevert()
- */
- protected void performRevert() {
- ProjectionViewer projectionViewer = (ProjectionViewer) getSourceViewer();
- projectionViewer.setRedraw(false);
- try {
-
- boolean projectionMode = projectionViewer.isProjectionMode();
- if (projectionMode) {
- projectionViewer.disableProjection();
- if (fProjectionModelUpdater != null)
- fProjectionModelUpdater.uninstall();
- }
-
- super.performRevert();
-
- if (projectionMode) {
- if (fProjectionModelUpdater != null)
- fProjectionModelUpdater.install(projectionViewer);
- projectionViewer.enableProjection();
- }
-
- } finally {
- projectionViewer.setRedraw(true);
- }
- }
-
- /**
- * This method was made public for use by editors that use
- * StructuredTextEditor (like PageDesigner)
- *
- * @see org.eclipse.ui.texteditor.AbstractTextEditor#rememberSelection()
- */
- public void rememberSelection() {
- super.rememberSelection();
- }
-
- /**
- * both starts and resets the busy state timer
- */
- private void resetBusyState() {
- // reset the "busy" timeout
- if (fBusyTimer != null) {
- fBusyTimer.cancel();
- }
- startBusyTimer();
- }
-
- /**
- * This method was made public for use by editors that use
- * StructuredTextEditor (like PageDesigner)
- *
- * @see org.eclipse.ui.texteditor.AbstractTextEditor#restoreSelection()
- */
- public void restoreSelection() {
- // catch odd case where source viewer has no text
- // widget (defect
- // 227670)
- if ((getSourceViewer() != null) && (getSourceViewer().getTextWidget() != null))
- super.restoreSelection();
- }
-
- protected void rulerContextMenuAboutToShow(IMenuManager menu) {
- boolean debuggingAvailable = BreakpointProviderBuilder.getInstance().isAvailable(getModel().getContentTypeIdentifier(), BreakpointRulerAction.getFileExtension(getEditorInput()));
- if (debuggingAvailable) {
- menu.add(getAction(ActionDefinitionIds.TOGGLE_BREAKPOINTS));
- menu.add(getAction(ActionDefinitionIds.MANAGE_BREAKPOINTS));
- menu.add(getAction(ActionDefinitionIds.EDIT_BREAKPOINTS));
- menu.add(new Separator());
- }
- super.rulerContextMenuAboutToShow(menu);
- addExtendedRulerContextMenuActions(menu);
- }
-
- /**
- * Overridden to expose part activation handling for multi-page editors
- *
- * @see org.eclipse.ui.texteditor.AbstractTextEditor#safelySanityCheckState(org.eclipse.ui.IEditorInput)
- */
- public void safelySanityCheckState(IEditorInput input) {
- super.safelySanityCheckState(input);
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.ui.texteditor.AbstractTextEditor#selectAndReveal(int,
- * int, int, int)
- */
- protected void selectAndReveal(int selectionStart, int selectionLength, int revealStart, int revealLength) {
- super.selectAndReveal(selectionStart, selectionLength, revealStart, revealLength);
- getTextViewer().notifyViewerSelectionManager(selectionStart, selectionLength);
- }
-
- /**
- * Ensure that the correct IDocumentProvider is used. For direct models, a
- * special provider is used. For StorageEditorInputs, use a custom
- * provider that creates a usable ResourceAnnotationModel. For everything
- * else, use the base support.
- *
- * @see org.eclipse.ui.texteditor.AbstractDecoratedTextEditor#setDocumentProvider(org.eclipse.ui.IEditorInput)
- */
- protected void setDocumentProvider(IEditorInput input) {
- if (input instanceof IStructuredModel) {
- // largely untested
- setDocumentProvider(StructuredModelDocumentProvider.getInstance());
- } else if (input instanceof IStorageEditorInput && !(input instanceof IFileEditorInput)) {
- setDocumentProvider(StorageModelProvider.getInstance());
- } else {
- super.setDocumentProvider(input);
- }
- }
-
- public void setEditorPart(IEditorPart editorPart) {
- fEditorPart = editorPart;
- }
-
- /**
- * @deprecated - Clients should use .getAdapter(Control) to get the text
- * viewer control and set its help context. Will be removed in
- * M4.
- *
- * We expose this normally protected method so clients can provide their
- * own help.
- *
- * @param helpContextId
- * the help context id
- */
- public void setHelpContextId(String helpContextId) {
- // used by (requested by) WSED
- super.setHelpContextId(helpContextId);
- // allows help to be set at any time (not just on AbstractTextEditor's
- // creation)
- if ((getHelpContextId() != null) && (getSourceViewer() != null) && (getSourceViewer().getTextWidget() != null)) {
- IWorkbenchHelpSystem helpSystem = SSEUIPlugin.getDefault().getWorkbench().getHelpSystem();
- helpSystem.setHelp(getSourceViewer().getTextWidget(), getHelpContextId());
- }
- }
-
- /**
- * @deprecated - use setInput as if we were a text editor
- *
- * Note: this weird API, setModel which takes input as parameter. Is
- * provided for those editors which don't otherwise have to know about
- * models's. (Is hard/impossible to override the setInput method.)
- */
- public void setModel(IFileEditorInput input) {
- // Assert.isNotNull(getDocumentProvider());
- // if (fStructuredModel != null) {
- // if (getDocument() != null) {
- // getDocument().removeDocumentListener(this);
- // fStructuredModel.removeModelStateListener(getInternalModelStateListener());
- // }
- // }
- // if (!(getDocumentProvider() instanceof FileModelProvider)) {
- // initializeDocumentProvider(FileModelProvider.getInstance());
- // }
- // // ((FileModelProvider)
- // // getDocumentProvider()).createModelInfo(input);
- // // fStructuredModel = ((FileModelProvider)
- // // getDocumentProvider()).getModel(input);
- // // model will be null in some error conditions.
- // if (fStructuredModel == null) {
- // close(false);
- // }
- // // DMW: checked for site after moving to 3/22
- // // (2.1M4) Eclipse base.
- // /// Later code in super classes were causing NPE's
- // // because site, etc.,
- // // hasn't been
- // // initialized yet. If site is still null at this
- // // point, we are
- // // assuming
- // // setInput and update are called later, perhaps
- // // elsewhere.
- // // But if site is not null (such as in DTD Editor)
- // // then setInput and
- // // update must
- // // be called here.
- // // if (getSite() != null) {
- // setInput(input);
- // fStructuredModel = ((FileModelProvider)
- // getDocumentProvider()).getModel(input);
- // if (fStructuredModel != null) {
- // getDocument().addDocumentListener(this);
- // fStructuredModel.addModelStateListener(getInternalModelStateListener());
- // }
- // // update() should be called whenever the model is
- // // set or changed
- // update();
- // // }
- setInput(input);
- }
-
- /**
- * Sets the model field within this editor, use only when: 1) there is no
- * IEditorInput (very special case, not well tested) 2) there is an
- * IEditorInput but the corresponding model needs to be set separately
- *
- * @deprecated - this is a laregely untested usage
- */
- public void setModel(IStructuredModel newModel) {
- Assert.isNotNull(getDocumentProvider());
- if (fStructuredModel != null) {
- if (fStructuredModel.getStructuredDocument() != null) {
- fStructuredModel.getStructuredDocument().removeDocumentListener(this);
- }
- fStructuredModel.removeModelStateListener(getInternalModelStateListener());
- }
- fStructuredModel = newModel;
- if (fStructuredModel != null) {
- if (fStructuredModel.getStructuredDocument() != null) {
- fStructuredModel.getStructuredDocument().addDocumentListener(this);
- }
- fStructuredModel.addModelStateListener(getInternalModelStateListener());
- }
- // update() should be called whenever the model is
- // set or changed
- update();
- }
-
- /**
- * @deprecated - initialize with a document provider and use setInput or
- * setModel(IStructuredModel)
- * @param newModel
- * @param input
- */
- public void setModel(IStructuredModel newModel, IFileEditorInput input) {
- // _setAnnotationModel(input);
- // setModel(newModel);
- Assert.isNotNull(getDocumentProvider());
- if (fStructuredModel != null) {
- fStructuredModel.removeModelStateListener(getInternalModelStateListener());
- if (fStructuredModel.getStructuredDocument() != null) {
- fStructuredModel.getStructuredDocument().removeDocumentListener(this);
- }
- }
- fStructuredModel = newModel;
- // setInput in super will allow titles to be
- // updated, etc.
- setInput(input);
- if (fStructuredModel != null) {
- if (fStructuredModel.getStructuredDocument() != null) {
- fStructuredModel.getStructuredDocument().addDocumentListener(this);
- }
- fStructuredModel.addModelStateListener(getInternalModelStateListener());
- }
- // update() should be called whenever the model is
- // set or changed
- update();
- }
-
- /**
- * Sets the editor's source viewer configuration which it uses to
- * configure it's internal source viewer. This method was overwritten so
- * that viewer configuration could be set after editor part was created.
- */
- protected void setSourceViewerConfiguration(SourceViewerConfiguration config) {
- super.setSourceViewerConfiguration(config);
- StructuredTextViewer stv = getTextViewer();
- if (stv != null) {
- // there should be no need to unconfigure
- // before configure because
- // configure will
- // also unconfigure before configuring
- stv.unconfigure();
- stv.configure(config);
- }
- }
-
- /**
- * Overridden to allow custom tab title for multi-page editors
- *
- * @see org.eclipse.ui.part.WorkbenchPart#setTitle(java.lang.String)
- */
- public void setTitle(String title) {
- super.setTitle(title);
- }
-
- public void showBusy(boolean busy) {
- if (busy) {
- fRememberTitle = getPartName();
- // update title and/or fonts and/or background
- //
- // temp solution, for testing, uses "busy"
- setPartName(SSEUIMessages.busy); //$NON-NLS-1$
- } else {
- // reset to what it was
- setPartName(fRememberTitle);
- }
- }
-
- private void startBusyTimer() {
- // TODO: we need a resetable timer, so not so
- // many created
- fBusyTimer = new Timer(true);
- fBusyTimer.schedule(new TimeOutExpired(), BUSY_STATE_DELAY);
- }
-
-
- private void statusError(IStatus status) {
- statusError(status.getMessage());
- ErrorDialog.openError(getSite().getShell(), null, null, status);
- }
-
- private void statusError(String message) {
- IStatusLineManager manager = getStatusLineManager();
- if (manager == null)
- return;
- manager.setErrorMessage(message);
- getSite().getShell().getDisplay().beep();
- }
-
- /**
- * update() should be called whenever the model is set or changed (as in
- * swapped)
- */
- public void update() {
- if (fOutlinePage != null && fOutlinePage instanceof StructuredTextEditorContentOutlinePage) {
- ContentOutlineConfiguration cfg = createContentOutlineConfiguration();
- if (cfg instanceof StructuredContentOutlineConfiguration) {
- ((StructuredContentOutlineConfiguration) cfg).setEditor(this);
- }
- ((StructuredTextEditorContentOutlinePage) fOutlinePage).setModel(getModel());
- ((StructuredTextEditorContentOutlinePage) fOutlinePage).setViewerSelectionManager(getViewerSelectionManager());
- ((StructuredTextEditorContentOutlinePage) fOutlinePage).setConfiguration(cfg);
- }
- if (fPropertySheetPage != null && fPropertySheetPage instanceof ConfigurablePropertySheetPage) {
- PropertySheetConfiguration cfg = createPropertySheetConfiguration();
- if (cfg instanceof StructuredPropertySheetConfiguration) {
- ((StructuredPropertySheetConfiguration) cfg).setEditor(this);
- }
- ((ConfigurablePropertySheetPage) fPropertySheetPage).setModel(getModel());
- ((ConfigurablePropertySheetPage) fPropertySheetPage).setViewerSelectionManager(getViewerSelectionManager());
- ((ConfigurablePropertySheetPage) fPropertySheetPage).setConfiguration(cfg);
- }
- if (getViewerSelectionManager() != null)
- getViewerSelectionManager().setModel(getModel());
- disposeModelDependentFields();
-
- fShowInTargetIds = createShowInTargetIds();
-
- // setSourceViewerConfiguration() was called once
- // in
- // StructuredTextMultiPageEditorPart.createSourcePage()
- // to set the SourceViewerConfiguration first so
- // the text editor won't
- // use the default configuration first
- // and switch to the
- // StructuredTextViewerConfiguration later.
- // However, the source viewer was not created yet
- // at the time. Need to
- // call setSourceViewerConfiguration() again here
- // so getSourceViewer().configure(configuration) in
- // setSourceViewerConfiguration() will be called.
- // DMW: removed setSouceViewerConfiguration since
- // shouldn't need the
- // general case
- // an longer, but added 'updateConfiguration' so it
- // can still be
- // sensitive
- // to resource/model changes.
- // setSourceViewerConfiguration();
- updateSourceViewerConfiguration();
- // (nsd) we never change it, so why null it out?
- // else {
- // super.setPreferenceStore(null);
- // }
- createModelDependentFields();
- computeAndSetDoubleClickAction(getModel());
- }
-
- /**
- * Updates all content dependent actions.
- */
- protected void updateContentDependentActions() {
- super.updateContentDependentActions();
- // super.updateContentDependentActions only updates
- // the enable/disable
- // state of all
- // the content dependent actions.
- // StructuredTextEditor's undo and redo actions
- // have a detail label and
- // description.
- // They needed to be updated.
- if (!fEditorDisposed)
- updateMenuText();
- }
-
- private void updateEncodingMemento() {
- boolean failed = false;
- if (getModel() != null) {
- IStructuredDocument doc = getModel().getStructuredDocument();
- EncodingMemento memento = doc.getEncodingMemento();
- IDocumentCharsetDetector detector = getModel().getModelHandler().getEncodingDetector();
- if (memento != null && detector != null)
- detector.set(doc);
- try {
- detector.getEncoding();
- } catch (IOException e) {
- failed = true;
- }
- // be sure to use the new instance
- // but only if no exception occurred.
- // (we may find cases we need to do more error recover there)
- // should be near impossible to get IOException from processing
- // the
- // *document*
- if (!failed) {
- doc.setEncodingMemento(memento);
- }
- }
- }
-
- /*
- * Update the hovering behavior depending on the preferences.
- */
- private void updateHoverBehavior() {
- SourceViewerConfiguration configuration = getSourceViewerConfiguration();
- String[] types = configuration.getConfiguredContentTypes(getSourceViewer());
-
- for (int i = 0; i < types.length; i++) {
-
- String t = types[i];
-
- ISourceViewer sourceViewer = getSourceViewer();
- if (sourceViewer instanceof ITextViewerExtension2) {
- // Remove existing hovers
- ((ITextViewerExtension2) sourceViewer).removeTextHovers(t);
-
- int[] stateMasks = configuration.getConfiguredTextHoverStateMasks(getSourceViewer(), t);
-
- if (stateMasks != null) {
- for (int j = 0; j < stateMasks.length; j++) {
- int stateMask = stateMasks[j];
- ITextHover textHover = configuration.getTextHover(sourceViewer, t, stateMask);
- ((ITextViewerExtension2) sourceViewer).setTextHover(textHover, t, stateMask);
- }
- } else {
- ITextHover textHover = configuration.getTextHover(sourceViewer, t);
- ((ITextViewerExtension2) sourceViewer).setTextHover(textHover, t, ITextViewerExtension2.DEFAULT_HOVER_STATE_MASK);
- }
- } else
- sourceViewer.setTextHover(configuration.getTextHover(sourceViewer, t), t);
- }
- }
-
-
- protected void updateMenuText() {
- if (fStructuredModel != null && !fStructuredModel.isModelStateChanging() && getTextViewer().getTextWidget() != null) {
- // performance: don't force an update of the action bars unless
- // required as it is expensive
- String previousUndoText = null;
- String previousUndoDesc = null;
- String previousRedoText = null;
- String previousRedoDesc = null;
- boolean updateActions = false;
- IAction undoAction = getAction(ITextEditorActionConstants.UNDO);
- IAction redoAction = getAction(ITextEditorActionConstants.REDO);
- if (undoAction != null) {
- previousUndoText = undoAction.getText();
- previousUndoDesc = undoAction.getDescription();
- updateActions = updateActions || previousUndoText == null || previousUndoDesc == null;
- undoAction.setText(UNDO_ACTION_TEXT_DEFAULT);
- undoAction.setDescription(UNDO_ACTION_DESC_DEFAULT);
- }
- if (redoAction != null) {
- previousRedoText = redoAction.getText();
- previousRedoDesc = redoAction.getDescription();
- updateActions = updateActions || previousRedoText == null || previousRedoDesc == null;
- redoAction.setText(REDO_ACTION_TEXT_DEFAULT);
- redoAction.setDescription(REDO_ACTION_DESC_DEFAULT);
- }
- if (fStructuredModel.getUndoManager() != null) {
- IStructuredTextUndoManager undoManager = fStructuredModel.getUndoManager();
- // get undo command
- Command undoCommand = undoManager.getUndoCommand();
- // set undo label and description
- undoAction.setEnabled(undoManager.undoable());
- if (undoCommand != null) {
- String label = undoCommand.getLabel();
- if (label != null) {
- String customText = MessageFormat.format(UNDO_ACTION_TEXT, new String[]{label});
- updateActions = updateActions || customText == null || previousUndoText == null || !customText.equals(previousUndoText);
- undoAction.setText(customText);
- }
- String desc = undoCommand.getDescription();
- if (desc != null) {
- String customDesc = MessageFormat.format(UNDO_ACTION_DESC, new String[]{desc});
- updateActions = updateActions || customDesc == null || previousRedoDesc == null || !customDesc.equals(previousUndoDesc);
- undoAction.setDescription(customDesc);
- }
- }
- // get redo command
- Command redoCommand = undoManager.getRedoCommand();
- // set redo label and description
- redoAction.setEnabled(undoManager.redoable());
- if (redoCommand != null) {
- String label = redoCommand.getLabel();
- if (label != null) {
- String customText = MessageFormat.format(REDO_ACTION_TEXT, new String[]{label});
- updateActions = updateActions || customText == null || previousRedoText == null || !customText.equals(previousRedoText);
- redoAction.setText(customText);
- }
- String desc = redoCommand.getDescription();
- if (desc != null) {
- String customDesc = MessageFormat.format(REDO_ACTION_DESC, new String[]{desc});
- updateActions = updateActions || customDesc == null || previousRedoDesc == null || !customDesc.equals(previousRedoDesc);
- redoAction.setDescription(customDesc);
- }
- }
- }
- // tell the action bars to update
- if (updateActions) {
- if (getEditorSite().getActionBars() != null) {
- getEditorSite().getActionBars().updateActionBars();
- } else if (getEditorPart() != null && getEditorPart().getEditorSite().getActionBars() != null) {
- getEditorPart().getEditorSite().getActionBars().updateActionBars();
- }
- }
- }
- }
-
- protected void updateSourceViewerConfiguration() {
- SourceViewerConfiguration configuration = getSourceViewerConfiguration();
- // no need to update source viewer configuration if one does not exist
- // yet
- if (configuration == null) {
- return;
- }
-
- // structuredtextviewer only works with
- // structuredtextviewerconfiguration
- if (!(configuration instanceof StructuredTextViewerConfiguration)) {
- configuration = createSourceViewerConfiguration();
- setSourceViewerConfiguration(configuration);
- } else {
- StructuredTextViewerConfiguration newViewerConfiguration = createSourceViewerConfiguration();
- if (!((StructuredTextViewerConfiguration) configuration).getDeclaringID().equals(newViewerConfiguration.getDeclaringID())) {
- // d282894 use newViewerConfiguration
- configuration = newViewerConfiguration;
- setSourceViewerConfiguration(configuration);
- }
-
- // update the configuration's resource
- IResource resource = null;
- if (getEditorInput() instanceof IFileEditorInput) {
- resource = ((IFileEditorInput) getEditorInput()).getFile();
- if (resource.getType() != IResource.PROJECT)
- resource = resource.getProject();
- ((StructuredTextViewerConfiguration) configuration).configureOn(resource);
- }
- }
-
- if (getSourceViewer() != null) {
- getSourceViewer().configure(configuration);
- IAction contentAssistAction = getAction(StructuredTextEditorActionConstants.ACTION_NAME_CONTENTASSIST_PROPOSALS);
- if (contentAssistAction instanceof IUpdate) {
- ((IUpdate) contentAssistAction).update();
- }
- IAction openHyperlinkAction = getAction(StructuredTextEditorActionConstants.ACTION_NAME_OPEN_FILE);
- if (openHyperlinkAction instanceof OpenHyperlinkAction) {
- ((OpenHyperlinkAction) openHyperlinkAction).setHyperlinkDetectors(getSourceViewerConfiguration().getHyperlinkDetectors(getSourceViewer()));
- }
- }
- // eventually will replace above with something
- // like what follows
- // it, but some of our "processors" require too
- // much initialization
- // during configuration.
- // SourceViewerConfiguration configuration =
- // getSourceViewerConfiguration();
- //
- // // should always be an instance of our special
- // configuration, but
- // just in case
- // // not, we'll do nothing if it isn't.
- // if (configuration!= null && configuration
- // instanceof
- // StructuredTextViewerConfiguration) {
- //
- // IResource resource = null;
- // if (getEditorInput() instanceof
- // IFileEditorInput) {
- // resource = ((IFileEditorInput)
- // getEditorInput()).getFile();
- // if (resource.getType() != IResource.PROJECT)
- // resource = resource.getProject();
- // // note: configureOn is responsible for updating
- // what ever
- // // in our configuration is sensitive to resource
- // ((StructuredTextViewerConfiguration)
- // configuration).configureOn(resource);
- // }
- //
- // }
- }
-
- protected void updateStatusField(String category) {
- super.updateStatusField(category);
-
- if (category == null)
- return;
-
- if (StructuredTextEditorActionConstants.STATUS_CATEGORY_OFFSET.equals(category)) {
- IStatusField field = getStatusField(category);
- if (field != null) {
- Point selection = getTextViewer().getTextWidget().getSelection();
- int offset1 = widgetOffset2ModelOffset(getSourceViewer(), selection.x);
- int offset2 = widgetOffset2ModelOffset(getSourceViewer(), selection.y);
- String text = null;
- if (offset1 != offset2)
- text = "[" + offset1 + "-" + offset2 + "]"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- else
- text = "[ " + offset1 + " ]"; //$NON-NLS-1$ //$NON-NLS-2$
- field.setText(text == null ? fErrorLabel : text);
- }
- }
- }
-
- /**
- * @deprecated - will be removed in M4 Use getDocumentProvider and
- * IDocumentProviderExtension instead
- */
- public IStatus validateEdit(Shell context) {
- IStatus status = STATUS_OK;
- IEditorInput input = getEditorInput();
- if (input instanceof IFileEditorInput) {
- if (input == null) {
- String msg = SSEUIMessages.Error_opening_file_UI_; //$NON-NLS-1$
- status = new Status(IStatus.ERROR, SSEUIPlugin.ID, IStatus.INFO, msg, null);
- } else {
- validateState(input);
- sanityCheckState(input);
- if (isEditorInputReadOnly()) {
- String fname = input.getName();
- if (input instanceof IStorageEditorInput) {
- try {
- IStorage s = ((IStorageEditorInput) input).getStorage();
- if (s != null) {
- IPath path = s.getFullPath();
- if (path != null) {
- fname += path.toString();
- } else {
- fname += s.getName();
- }
- }
- } catch (CoreException e) { // IStorage is just for
- // file name,
- // and it's an optional,
- // therefore
- // it is safe to ignore this
- // exception.
- }
- }
- String msg = NLS.bind(SSEUIMessages._UI_File_is_read_only, new Object[]{fname});
- status = new Status(IStatus.ERROR, SSEUIPlugin.ID, IStatus.INFO, msg, null);
- }
- }
- }
- return status;
- }
-
- protected void validateState(IEditorInput input) {
- IDocumentProvider provider = getDocumentProvider();
- if (provider instanceof IDocumentProviderExtension) {
- IDocumentProviderExtension extension = (IDocumentProviderExtension) provider;
- try {
- boolean wasReadOnly = isEditorInputReadOnly();
- extension.validateState(input, getSite().getShell());
- if (getSourceViewer() != null)
- getSourceViewer().setEditable(isEditable());
- if (wasReadOnly != isEditorInputReadOnly())
- updateStateDependentActions();
- } catch (CoreException x) {
- ILog log = Platform.getLog(Platform.getBundle(PlatformUI.PLUGIN_ID));
- log.log(x.getStatus());
- statusError(x.getStatus());
- }
- }
- }
-}

Back to the top