1) Moved net.sourceforge.phpeclipse.ui\src\net\sourceforge\phpdt back to net.sourcefo...
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpeclipse / wizards / html / EditElementWizardPage.java
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/wizards/html/EditElementWizardPage.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/wizards/html/EditElementWizardPage.java
new file mode 100644 (file)
index 0000000..44d1a27
--- /dev/null
@@ -0,0 +1,192 @@
+/*
+ * $Id: EditElementWizardPage.java,v 1.2 2006-10-21 23:18:43 pombredanne Exp $
+ * Copyright Narushima Hironori. All rights reserved.
+ */
+package net.sourceforge.phpeclipse.wizards.html;
+
+import java.io.IOException;
+import java.io.StringReader;
+
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import net.sourceforge.phpeclipse.PHPeclipsePlugin;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.ITextSelection;
+import org.eclipse.jface.text.TextSelection;
+import org.eclipse.jface.wizard.IWizard;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
+/**
+ * 
+ * 
+ */
+public abstract class EditElementWizardPage extends WizardPage implements
+               IPreviewer {
+
+       final public static int NEW = 0, MODIFY = 1;
+
+       private static DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory
+                       .newInstance();
+
+       Composite extendComp;
+
+       Text preview;
+
+       private String elementName = null;
+
+       int editType = NEW;
+
+       protected EditElementWizardPage(String pageName) {
+               super(pageName);
+       }
+
+       public void createControl(Composite parent) {
+               Composite base = new Composite(parent, SWT.NONE);
+               setControl(base);
+               base.setLayout(new GridLayout(1, false));
+
+               // create child control.
+               Composite childControlBase = new Composite(base, SWT.NONE);
+               childControlBase.setLayoutData(new GridData(GridData.FILL_BOTH));
+               try {
+                       createChildControl(childControlBase);
+               } catch (CoreException e) {
+                       PHPeclipsePlugin.log(e);
+                       return;
+               }
+
+               // preview components.
+               Composite previewBase = new Composite(base, SWT.NONE);
+
+               GridData gd = new GridData(GridData.FILL_HORIZONTAL);
+               previewBase.setLayoutData(gd);
+               previewBase.setLayout(new GridLayout(1, false));
+
+               Label labe = new Label(previewBase, SWT.NONE);
+               labe.setText("Preview:");
+               gd = new GridData(GridData.FILL_HORIZONTAL);
+               labe.setLayoutData(gd);
+
+               preview = new Text(previewBase, SWT.BORDER | SWT.MULTI | SWT.READ_ONLY
+                               | SWT.WRAP | SWT.V_SCROLL | SWT.H_SCROLL);
+               gd = new GridData(GridData.FILL_HORIZONTAL);
+               gd.widthHint = 0;
+               gd.heightHint = preview.getLineHeight() * 4;
+               preview.setLayoutData(gd);
+
+               refreshPreview();
+       }
+
+       abstract protected void createChildControl(Composite parent)
+                       throws CoreException;
+
+       public abstract String getPreviewText();
+
+       public void refreshPreview() {
+               if (preview != null) {
+                       String text = getPreviewText();
+                       preview.setText(text == null ? "" : text);
+               }
+       }
+
+       public String getElementName() {
+               return elementName;
+       }
+
+       public void setElementName(String string) {
+               elementName = string;
+       }
+
+       protected IFile getEditFile() {
+               IFile file = null;
+               IWizard wiz = getWizard();
+               if (wiz instanceof EditElementWizard) {
+                       file = ((EditElementWizard) wiz).getCurrentEditFile();
+               }
+               return file;
+       }
+
+       protected void performFinish() {
+               EditElementWizard wiz = (EditElementWizard) getWizard();
+               ITextSelection sel = wiz.getSelection();
+               IDocument doc = wiz.getDocument();
+               int offset = sel.getOffset();
+               try {
+                       doc.replace(offset, sel.getLength(), getPreviewText());
+               } catch (BadLocationException e) {
+                       PHPeclipsePlugin.log(e);
+               }
+               int index = doc.get().indexOf('>', offset);
+               if (index != -1) {
+                       wiz.setSelection(new TextSelection(index + 1, 0));
+               }
+       }
+
+       /**
+        * Returns edit type.
+        */
+       public int getEditType() {
+               return editType;
+       }
+
+       /**
+        * Sets edit type that types are EditElementWizardPage.NEW,
+        * EditElementWizardPage.MODIFY. Default value is NEW.
+        */
+       public void setEditType(int i) {
+               editType = i;
+       }
+
+       protected String getSelectionText() {
+               return ((EditElementWizard) getWizard()).getSelection().getText();
+       }
+
+       protected Element getParsedSelectionText() {
+               String selText = getSelectionText();
+               try {
+                       InputSource source = new InputSource(new StringReader(selText));
+                       Document doc = docBuilderFactory.newDocumentBuilder().parse(source);
+                       return doc.getDocumentElement();
+               } catch (SAXException e) {
+               } catch (IOException e) {
+               } catch (ParserConfigurationException e) {
+               }
+               return null;
+
+       }
+
+       protected static String chooseContent(String text) {
+               int b = -1, e = -1, len = text.length();
+               for (int i = 0; i < len; i++) {
+                       if (text.charAt(i) == '>') {
+                               b = i + 1;
+                               break;
+                       }
+               }
+               for (int i = len - 1; i >= 0; i--) {
+                       if (text.charAt(i) == '<') {
+                               e = i;
+                               break;
+                       }
+               }
+               return (b != -1 && e != -1 && b < len && e < len) ? text
+                               .substring(b, e) : "";
+
+       }
+
+}
\ No newline at end of file