/*********************************************************************************************************************************** * Copyright (c) 2000, 2004 IBM Corporation and others. All rights reserved. This program and the accompanying materials are made * available under the terms of the Common Public License v1.0 which accompanies this distribution, and is available at * http://www.eclipse.org/legal/cpl-v10.html * * Contributors: IBM Corporation - initial API and implementation **********************************************************************************************************************************/ package net.sourceforge.phpeclipse.wiki.editor; import net.sourceforge.phpeclipse.wiki.editor.model.WikipediaSection; import org.eclipse.jface.action.IAction; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.source.ISourceViewer; import org.eclipse.jface.text.source.IVerticalRuler; import org.eclipse.jface.text.source.projection.ProjectionSupport; import org.eclipse.jface.text.source.projection.ProjectionViewer; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.texteditor.AbstractDecoratedTextEditor; import org.eclipse.ui.texteditor.ITextEditorActionDefinitionIds; import org.eclipse.ui.texteditor.TextOperationAction; import org.eclipse.ui.views.contentoutline.IContentOutlinePage; public class WikiEditor extends AbstractDecoratedTextEditor { private WikiOutlinePage fOutlinePage; private WikipediaSection fSection; private ProjectionSupport fProjectionSupport; private WikiOccurrencesUpdater fOccurrencesUpdater; public WikiEditor() { setSourceViewerConfiguration(new WikiSourceViewerConfiguration(this, getSharedColors())); } public WikipediaSection getSection() { return fSection; } public void setSection(WikipediaSection section) { fSection = section; if (fOutlinePage != null) fOutlinePage.setWiki(section); if (fOccurrencesUpdater != null) fOccurrencesUpdater.update(getSourceViewer()); } /* * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class) */ public Object getAdapter(Class required) { // if (IPropertySource.class.equals(required)) { // return new WPPropertySource(this); // } if (IContentOutlinePage.class.equals(required)) { if (fOutlinePage == null) fOutlinePage = new WikiOutlinePage(this); return fOutlinePage; } if (fProjectionSupport != null) { Object adapter = fProjectionSupport.getAdapter(getSourceViewer(), required); if (adapter != null) return adapter; } return super.getAdapter(required); } public void outlinePageClosed() { fOutlinePage = null; } /* * @see org.eclipse.ui.texteditor.AbstractTextEditor#createActions() */ protected void createActions() { super.createActions(); IAction action = new TextOperationAction(WikiEditorPlugin.getDefault().getResourceBundle(), "ContentAssistProposal.", this, ISourceViewer.CONTENTASSIST_PROPOSALS); action.setActionDefinitionId(ITextEditorActionDefinitionIds.CONTENT_ASSIST_PROPOSALS); setAction("ContentAssist.", action); markAsStateDependentAction("ContentAssist.", true); } /* * @see org.eclipse.ui.texteditor.AbstractDecoratedTextEditor#createPartControl(org.eclipse.swt.widgets.Composite) */ public void createPartControl(Composite parent) { super.createPartControl(parent); ProjectionViewer projectionViewer = (ProjectionViewer) getSourceViewer(); fProjectionSupport = new ProjectionSupport(projectionViewer, getAnnotationAccess(), getSharedColors()); fProjectionSupport.install(); projectionViewer.doOperation(ProjectionViewer.TOGGLE); fOccurrencesUpdater = new WikiOccurrencesUpdater(this); setWordWrap(); } private void setWordWrap() { if (getSourceViewer() != null) { getSourceViewer().getTextWidget().setWordWrap( WikiEditorPlugin.getDefault().getPreferenceStore().getBoolean(WikiEditorPlugin.EDITOR_WRAP_WORDS)); } } /* * @see org.eclipse.ui.texteditor.AbstractDecoratedTextEditor#createSourceViewer(org.eclipse.swt.widgets.Composite, * org.eclipse.jface.text.source.IVerticalRuler, int) */ protected ISourceViewer createSourceViewer(Composite parent, IVerticalRuler ruler, int styles) { fAnnotationAccess = createAnnotationAccess(); fOverviewRuler = createOverviewRuler(getSharedColors()); ISourceViewer viewer = new ProjectionViewer(parent, ruler, fOverviewRuler, true, styles); // ensure decoration support has been created and configured: getSourceViewerDecorationSupport(viewer); return viewer; } /* * @see org.eclipse.ui.IWorkbenchPart#dispose() */ public void dispose() { fOccurrencesUpdater.dispose(); super.dispose(); } public IDocument getDocument() { IDocument doc = getDocumentProvider().getDocument(getEditorInput()); return doc; } /* * (non-Javadoc) * * @see org.eclipse.ui.texteditor.AbstractTextEditor#editorSaved() */ protected void editorSaved() { super.editorSaved(); BrowserUtil.refreshBrowserPreview(this); } }