X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/wizards/html/UnknownElementWizardPage.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/wizards/html/UnknownElementWizardPage.java new file mode 100644 index 0000000..d6ad3a5 --- /dev/null +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/wizards/html/UnknownElementWizardPage.java @@ -0,0 +1,326 @@ +/* + * $Id: UnknownElementWizardPage.java,v 1.1 2004-10-05 20:51:57 jsurfer Exp $ + * Copyright Narushima Hironori. All rights reserved. + */ +package net.sourceforge.phpeclipse.wizards.html; + +import java.util.ArrayList; + +import org.eclipse.jface.dialogs.IInputValidator; +import org.eclipse.jface.viewers.ArrayContentProvider; +import org.eclipse.jface.viewers.CellEditor; +import org.eclipse.jface.viewers.ICellModifier; +import org.eclipse.jface.viewers.ILabelProviderListener; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.ITableLabelProvider; +import org.eclipse.jface.viewers.TableViewer; +import org.eclipse.jface.viewers.TextCellEditor; +import org.eclipse.jface.window.Window; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.SelectionListener; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Item; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Table; +import org.eclipse.swt.widgets.TableColumn; +import org.w3c.dom.Element; +import org.w3c.dom.NamedNodeMap; +import org.w3c.dom.Node; + + +/** + * + * + */ +public class UnknownElementWizardPage extends EditElementWizardPage { + + // key of TableCell for attribute editor. + final static String + NAME = "ColumnProperty-name", + VALUE = "ColumnProperty-value"; + + Button emptyElementCheck, addButton, removeButton, upButton, downButton; + + TableViewer unknownElementAttrs; + ArrayList + attrs = new ArrayList(), + listeners = new ArrayList(); + + SelectionListener elemTypeChangeListener = new SelectionListener() { + public void widgetSelected(SelectionEvent e) { + refreshPreview(); + } + + public void widgetDefaultSelected(SelectionEvent e) { + } + }; + + public UnknownElementWizardPage(){ + super("UnknownElementEditPage"); + setTitle("Unknown"); + setDescription("Editor for any HTML element."); + } + + static IInputValidator attrValidator = new IInputValidator() { + public String isValid(String newText) { + if( newText.length() == 0){ + return "Need to specify name"; + } + if( newText.indexOf(' ') != -1 || newText.indexOf('\n') != -1 || newText.indexOf('\t') != -1 ){ + return "Not contain blank"; + } + return null; + } + }; + + protected void createChildControl(Composite parent) { + // empty eleemnt + parent.setLayout( new GridLayout(2, false) ); + + //// attribute editor + Label labe = new Label(parent, SWT.NONE); + labe.setText("Element &Attribute:"); + GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING); + labe.setLayoutData(gd); + new Label(parent, SWT.NONE); + + // attribute display table setting + unknownElementAttrs = new TableViewer(parent, SWT.BORDER | SWT.SINGLE | SWT.FULL_SELECTION); + gd = new GridData(GridData.FILL_BOTH); + gd.horizontalSpan = 1; + gd.verticalSpan = 4; + unknownElementAttrs.getControl().setLayoutData(gd); + + final Table table = unknownElementAttrs.getTable(); + new TableColumn(table, SWT.LEFT).setText("Name"); + new TableColumn(table, SWT.LEFT).setText("Value"); + + table.setLinesVisible(true); + table.setHeaderVisible(true); + // modifier setting + unknownElementAttrs.setColumnProperties(new String[]{ NAME, VALUE }); + unknownElementAttrs.setContentProvider(new ArrayContentProvider()); + + unknownElementAttrs.setCellEditors( new CellEditor[]{ + new TextCellEditor(table), + new TextCellEditor(table) + }); + unknownElementAttrs.setCellModifier(new ICellModifier() { + public boolean canModify(Object element, String property) { + return true; + } + + public Object getValue(Object element, String property) { + return ((String[])element)[property.equals(NAME) ? 0 : 1]; + } + + public void modify(Object element, String property, Object value) { + if (element instanceof Item) { + ((String[])((Item) element).getData())[property.equals(NAME) ? 0 : 1] = HTMLUtilities.unescape( (String)value ); + refreshPreview(); + } + } + }); + + unknownElementAttrs.setLabelProvider( new ITableLabelProvider() { + public Image getColumnImage(Object element, int columnIndex) { + return null; + } + + public String getColumnText(Object element, int columnIndex) { + return ((String[])element)[columnIndex]; + } + + public void addListener(ILabelProviderListener listener) {} + + public void removeListener(ILabelProviderListener listener) {} + + public void dispose() {} + + public boolean isLabelProperty(Object element, String property) { + return property.equals(NAME) || property.equals(VALUE); + } + }); + + resetAttributes(); + unknownElementAttrs.setInput(attrs); + + TableColumn[] columns = table.getColumns(); + for (int i = 0; i < columns.length; i++) { + columns[i].pack(); + } + + // buttonss + upButton = createButton(parent, "&Up"); + upButton.addSelectionListener(new SelectionListener() { + + public void widgetSelected(SelectionEvent e) { + int index = getSelectionIndex(); + if( index > 0){ + attrs.add(index-1, attrs.remove(index)); + refreshPreview(); + } + } + public void widgetDefaultSelected(SelectionEvent e) {} + }); + + downButton = createButton(parent, "&Down"); + downButton.addSelectionListener(new SelectionListener() { + public void widgetSelected(SelectionEvent e) { + int index = getSelectionIndex(); + if( index < attrs.size()-1 ){ + attrs.add(index+1, attrs.remove(index)); + refreshPreview(); + } + } + public void widgetDefaultSelected(SelectionEvent e) {} + }); + + addButton = createButton(parent, "&Add"); + addButton.addSelectionListener(new SelectionListener() { + public void widgetSelected(SelectionEvent e) { + int insertIndex = getSelectionIndex(); + String[] newData = inputValue(); + if(newData != null){ + attrs.add(newData); + refreshPreview(); + } + } + + String[] inputValue(){ + SomeItemInputDialog dialog = new SomeItemInputDialog( + getShell(), + "Input new attribute", + new String[]{"Attribute name", "Attribute value"}, + new IInputValidator[] {attrValidator, null}); + + + if( dialog.open() == Window.OK){ + return dialog.getValues(); + } + return null; + } + public void widgetDefaultSelected(SelectionEvent e) {} + }); + + removeButton = createButton(parent, "&Remove"); + removeButton.addSelectionListener(new SelectionListener() { + public void widgetSelected(SelectionEvent e) { + int index = getSelectionIndex(); + if( index != -1){ + attrs.remove(index); + refreshPreview(); + } + } + public void widgetDefaultSelected(SelectionEvent e) {} + }); + + emptyElementCheck = new Button(parent, SWT.CHECK); + gd = new GridData(GridData.FILL_HORIZONTAL); + emptyElementCheck.setLayoutData(gd); + emptyElementCheck.setText("&Empty Element"); + emptyElementCheck.addSelectionListener(elemTypeChangeListener); + emptyElementCheck.setSelection(isEmptyAsText()); + + new Label(parent, SWT.NONE); + } + + static Button createButton(Composite parent, String text){ + Button button = new Button(parent, SWT.PUSH); + GridData gd = new GridData( + GridData.VERTICAL_ALIGN_BEGINNING | GridData.HORIZONTAL_ALIGN_END); + gd.widthHint = 60; + button.setLayoutData( gd); + button.setText(text); + return button; + } + + public String getPreviewText(){ + String elemName = getElementName(); + if(elemName == null){ + return null; + } + + // sets values + + boolean empty = false; + if( emptyElementCheck == null ){ + // ui uninitialized + empty = isEmptyAsText(); + }else{ + // ui initialized + empty = emptyElementCheck.getSelection(); + } + + String content = getSelectionText(); + if( !empty && getEditType() == MODIFY){ + content = chooseContent( content ); + } + + String previewText = "<" + elemName + attrsCode(); + if(empty){ + previewText += " />"; + }else{ + previewText += ">" + content + ""; + } + return previewText; + } + + boolean isEmptyAsText(){ + String selText = getSelectionText(); + if(getEditType() == MODIFY){ + int len = selText.length(); + return selText.substring(len-2, len).equals("/>"); + } + return false; + } + + void resetAttributes(){ + attrs.clear(); + + Element elem = getParsedSelectionText(); + if( elem != null){ + NamedNodeMap as = elem.getAttributes(); + for (int i = 0; i < as.getLength(); i++) { + Node n = as.item(i); + attrs.add( new String[]{ n.getNodeName(), n.getNodeValue()}); + } + } + } + + String attrsCode(){ + StringBuffer buff = new StringBuffer(); + Object[] as = attrs.toArray(); + for (int i = 0; i < as.length; i++) { + String[] a = (String[])as[i]; + buff.append(" " + a[0] + "=\"" + HTMLUtilities.escape(a[1]) + "\""); + } + return buff.toString(); + } + + int getSelectionIndex(){ + Object sel = unknownElementAttrs.getSelection(); + if( sel instanceof IStructuredSelection){ + Object item = ((IStructuredSelection)sel).getFirstElement(); + return attrs.indexOf(item); + }else{ + return -1; + } + } + + public void refreshPreview() { + unknownElementAttrs.refresh(); + super.refreshPreview(); + } + + public void setElementName(String elemName) { + super.setElementName(elemName); + setTitle("\"" + elemName + "\" Element"); + } + +} \ No newline at end of file