refactory: added UI removed from core plugin.
[phpeclipse.git] / net.sourceforge.phpeclipse.ui / src / net / sourceforge / phpeclipse / xml / ui / internal / editor / XMLEditor.java
diff --git a/net.sourceforge.phpeclipse.ui/src/net/sourceforge/phpeclipse/xml/ui/internal/editor/XMLEditor.java b/net.sourceforge.phpeclipse.ui/src/net/sourceforge/phpeclipse/xml/ui/internal/editor/XMLEditor.java
new file mode 100644 (file)
index 0000000..bd096c2
--- /dev/null
@@ -0,0 +1,207 @@
+/*
+ * Copyright (c) 2002-2004 Widespace, OU 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:
+ *     Igor Malinin - initial contribution
+ *     Christopher Lenz - integrated outline page
+ *
+ * $Id: XMLEditor.java,v 1.4 2006-10-21 23:14:14 pombredanne Exp $
+ */
+
+package net.sourceforge.phpeclipse.xml.ui.internal.editor;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import net.sourceforge.phpeclipse.core.model.ISourceReference;
+import net.sourceforge.phpeclipse.ui.editor.ShowExternalPreviewAction;
+import net.sourceforge.phpeclipse.ui.text.IReconcilingParticipant;
+import net.sourceforge.phpeclipse.xml.ui.XMLPlugin;
+import net.sourceforge.phpeclipse.xml.ui.internal.outline.XMLOutlinePage;
+import net.sourceforge.phpeclipse.xml.ui.internal.text.XMLConfiguration;
+import net.sourceforge.phpeclipse.xml.ui.text.XMLTextTools;
+
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.editors.text.EditorsUI;
+import org.eclipse.ui.editors.text.TextEditor;
+import org.eclipse.ui.texteditor.ChainedPreferenceStore;
+import org.eclipse.ui.texteditor.ContentAssistAction;
+import org.eclipse.ui.texteditor.ITextEditorActionDefinitionIds;
+import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
+
+/**
+ * XML Editor.
+ * 
+ * @author Igor Malinin
+ */
+public class XMLEditor extends TextEditor implements IReconcilingParticipant {
+
+       /**
+        * Listens to changes to the selection in the outline page, and changes the
+        * selection and highlight range in the editor accordingly.
+        */
+       private class OutlineSelectionChangedListener implements
+                       ISelectionChangedListener {
+
+               /*
+                * @see ISelectionChangedListener#selectionChanged(SelectionChangedEvent)
+                */
+               public void selectionChanged(SelectionChangedEvent event) {
+                       IStructuredSelection selection = (IStructuredSelection) event
+                                       .getSelection();
+                       if (selection.isEmpty()) {
+                               resetHighlightRange();
+                       } else {
+                               ISourceReference element = (ISourceReference) selection
+                                               .getFirstElement();
+                               highlightElement(element, true);
+                       }
+               }
+
+       }
+
+       /**
+        * The associated outline page.
+        */
+       XMLOutlinePage outlinePage;
+
+       int fType;
+
+       /**
+        * Listens to changes in the outline page's selection to update the editor
+        * selection and highlight range.
+        */
+       private ISelectionChangedListener outlineSelectionChangedListener;
+
+       public XMLEditor() {
+               this(ShowExternalPreviewAction.XML_TYPE);
+       }
+
+       /**
+        * Constructor.
+        */
+       public XMLEditor(int type) {
+               fType = type;
+               List stores = new ArrayList(3);
+
+               stores.add(XMLPlugin.getDefault().getPreferenceStore());
+               stores.add(EditorsUI.getPreferenceStore());
+
+               setPreferenceStore(new ChainedPreferenceStore(
+                               (IPreferenceStore[]) stores.toArray(new IPreferenceStore[stores
+                                               .size()])));
+       }
+
+       /*
+        * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)
+        */
+       public Object getAdapter(Class adapter) {
+               if (adapter.equals(IContentOutlinePage.class)) {
+                       if (outlinePage == null) {
+                               outlinePage = new XMLOutlinePage(this);
+                               outlineSelectionChangedListener = new OutlineSelectionChangedListener();
+                               outlinePage
+                                               .addSelectionChangedListener(outlineSelectionChangedListener);
+                       }
+
+                       return outlinePage;
+               }
+
+               return super.getAdapter(adapter);
+       }
+
+       /*
+        * @see IReconcilingParticipant#reconciled()
+        */
+       public void reconciled() {
+               Shell shell = getSite().getShell();
+               if ((shell != null) && !shell.isDisposed()) {
+                       shell.getDisplay().asyncExec(new Runnable() {
+                               public void run() {
+                                       if (outlinePage != null) {
+                                               outlinePage.update();
+                                       }
+                               }
+                       });
+               }
+       }
+
+       /*
+        * @see org.eclipse.ui.editors.text.TextEditor#initializeEditor()
+        */
+       protected void initializeEditor() {
+               super.initializeEditor();
+
+               XMLTextTools xmlTextTools = XMLPlugin.getDefault().getXMLTextTools();
+               setSourceViewerConfiguration(new XMLConfiguration(xmlTextTools, this));
+               setDocumentProvider(new XMLDocumentProvider());
+
+               ShowExternalPreviewAction fShowExternalPreviewAction = ShowExternalPreviewAction
+                               .getInstance();
+               fShowExternalPreviewAction.setEditor(this);
+               fShowExternalPreviewAction.update();
+               if (fShowExternalPreviewAction != null)
+                       fShowExternalPreviewAction.doRun(fType);
+       }
+
+       /*
+        * @see org.eclipse.ui.texteditor.AbstractTextEditor#affectsTextPresentation(PropertyChangeEvent)
+        */
+       protected boolean affectsTextPresentation(PropertyChangeEvent event) {
+               return XMLPlugin.getDefault().getXMLTextTools().affectsBehavior(event);
+       }
+
+       void highlightElement(ISourceReference element, boolean moveCursor) {
+               if (element != null) {
+                       IRegion highlightRegion = element.getSourceRegion();
+                       setHighlightRange(highlightRegion.getOffset(), highlightRegion
+                                       .getLength(), moveCursor);
+               } else {
+                       resetHighlightRange();
+               }
+       }
+
+       protected void createActions() {
+               super.createActions();
+
+               IAction action = new ContentAssistAction(XMLEditorMessages
+                               .getResourceBundle(), "ContentAssistProposal.", this); //$NON-NLS-1$
+               action
+                               .setActionDefinitionId(ITextEditorActionDefinitionIds.CONTENT_ASSIST_PROPOSALS);
+               setAction("ContentAssistProposal", action); //$NON-NLS-1$
+               markAsStateDependentAction("ContentAssistProposal", true); //$NON-NLS-1$
+
+               // IAction action= new TextOperationAction(
+               // TemplateMessages.getResourceBundle(),
+               // "Editor." + TEMPLATE_PROPOSALS + ".", //$NON-NLS-1$ //$NON-NLS-2$
+               // this,
+               // ISourceViewer.CONTENTASSIST_PROPOSALS);
+               // action.setActionDefinitionId(ITextEditorActionDefinitionIds.CONTENT_ASSIST_PROPOSALS);
+               // setAction(TEMPLATE_PROPOSALS, action);
+               // markAsStateDependentAction(TEMPLATE_PROPOSALS, true);
+       }
+
+       /*
+        * (non-Javadoc)
+        * 
+        * @see org.eclipse.ui.texteditor.AbstractTextEditor#editorSaved()
+        */
+       protected void editorSaved() {
+               super.editorSaved();
+               ShowExternalPreviewAction a = ShowExternalPreviewAction.getInstance();
+               if (a != null) {
+                       a.refresh(fType);
+               }
+       }
+}
\ No newline at end of file