X-Git-Url: http://secure.phpeclipse.com 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 index 0000000..44d1a27 --- /dev/null +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/wizards/html/EditElementWizardPage.java @@ -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