/******************************************************************************* * Copyright (c) 2006 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation * *******************************************************************************/ package org.eclipse.wst.dtd.ui.internal.properties.section; import org.eclipse.jface.action.IStatusLineManager; import org.eclipse.jface.util.Assert; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.part.EditorActionBarContributor; import org.eclipse.ui.views.properties.tabbed.ISection; import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage; import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory; import org.eclipse.wst.dtd.ui.internal.DTDUIPlugin; import org.eclipse.wst.xml.core.internal.document.DocumentImpl; import org.w3c.dom.Element; public class AbstractSection implements ISection, IPropertyChangeListener, Listener, SelectionListener { private TabbedPropertySheetWidgetFactory factory; protected IWorkbenchPart fWorkbenchPart; protected ISelection fSelection; protected Object fInput; protected int rightMarginSpace; public void createControls(Composite parent, TabbedPropertySheetPage tabbedPropertySheetPage) { createControls(parent, tabbedPropertySheetPage.getWidgetFactory()); } /* * (non-Javadoc) * * @see org.eclipse.wst.common.ui.properties.internal.provisional.ISection#createControls(org.eclipse.swt.widgets.Composite, * org.eclipse.wst.common.ui.properties.internal.provisional.TabbedPropertySheetWidgetFactory) */ public void createControls(Composite parent, TabbedPropertySheetWidgetFactory aFactory) { this.factory = aFactory; GC gc = new GC(parent); Point extent = gc.textExtent(" ... "); //$NON-NLS-1$ rightMarginSpace = extent.x; gc.dispose(); } /* * (non-Javadoc) * * @see org.eclipse.wst.common.ui.properties.internal.provisional.ISection#setInput(org.eclipse.ui.IWorkbenchPart, * org.eclipse.jface.viewers.ISelection) */ public void setInput(IWorkbenchPart part, ISelection sel) { Assert.isTrue(sel instanceof IStructuredSelection, "selection " + sel.getClass() + "is not structured"); //$NON-NLS-1$ //$NON-NLS-2$ this.fWorkbenchPart = part; this.fSelection = sel; this.fInput = ((IStructuredSelection) fSelection).getFirstElement(); /* * if (fInput instanceof XSDConcreteComponent) { xsdSchema = * ((XSDConcreteComponent)fInput).getSchema(); } */ // refresh(); } /* * (non-Javadoc) * * @see org.eclipse.wst.common.ui.properties.internal.provisional.ISection#aboutToBeShown() */ public void aboutToBeShown() { refresh(); } /* * (non-Javadoc) * * @see org.eclipse.wst.common.ui.properties.internal.provisional.ISection#aboutToBeHidden() */ public void aboutToBeHidden() { } /* * (non-Javadoc) * * @see org.eclipse.wst.common.ui.properties.internal.provisional.ISection#dispose() */ public void dispose() { } /* * (non-Javadoc) * * @see org.eclipse.wst.common.ui.properties.internal.provisional.ISection#getMinimumHeight() */ public int getMinimumHeight() { return SWT.DEFAULT; } /* * (non-Javadoc) * * @see org.eclipse.wst.common.ui.properties.internal.provisional.ISection#shouldUseExtraSpace() */ public boolean shouldUseExtraSpace() { return false; } /* * (non-Javadoc) * * @see org.eclipse.wst.common.ui.properties.internal.provisional.ISection#refresh() */ public void refresh() { // TODO Auto-generated method stub } public Object getInput() { if (fInput instanceof Element) { // fInput = xsdSchema.getCorrespondingComponent((Element)fInput); } return fInput; } /** * Get the widget factory. * * @return the widget factory. */ public TabbedPropertySheetWidgetFactory getWidgetFactory() { return factory; } public void propertyChange(PropertyChangeEvent event) { refresh(); } public void doWidgetDefaultSelected(SelectionEvent e) { } public void doWidgetSelected(SelectionEvent e) { } /** * @see org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(SelectionEvent) */ public void widgetDefaultSelected(SelectionEvent e) { if (isListenerEnabled() && getInput() != null && !isInDoHandle) { isInDoHandle = true; doWidgetDefaultSelected(e); isInDoHandle = false; } } /** * @see org.eclipse.swt.events.SelectionListener#widgetSelected(SelectionEvent) */ public void widgetSelected(SelectionEvent e) { if (isListenerEnabled() && getInput() != null && !isInDoHandle) { isInDoHandle = true; doWidgetSelected(e); isInDoHandle = false; } } boolean listenerEnabled = true; /** * Get the value of listenerEnabled. * * @return value of listenerEnabled. */ public boolean isListenerEnabled() { return listenerEnabled; } /** * Set the value of listenerEnabled. * * @param v * Value to assign to listenerEnabled. */ public void setListenerEnabled(boolean v) { this.listenerEnabled = v; } public void handleEvent(Event event) { if (isListenerEnabled() && !isInDoHandle) { isInDoHandle = true; startDelayedEvent(event); isInDoHandle = false; } // end of if () } public void doHandleEvent(Event event) { } protected DelayedEvent delayedTask; protected void startDelayedEvent(Event e) { if (delayedTask == null || delayedTask.getEvent() == null) { delayedTask = new DelayedEvent(); delayedTask.setEvent(e); Display.getDefault().timerExec(500, delayedTask); } else { Event delayedEvent = delayedTask.getEvent(); if (e.widget == delayedEvent.widget && e.type == delayedEvent.type) { // same event, just different data, delay new event delayedTask.setEvent(null); } delayedTask = new DelayedEvent(); delayedTask.setEvent(e); Display.getDefault().timerExec(500, delayedTask); } } class DelayedEvent implements Runnable { protected Event event; /* * @see Runnable#run() */ public void run() { if (event != null) { isInDoHandle = true; doHandleEvent(event); isInDoHandle = false; event = null; } } /** * Gets the event. * * @return Returns a Event */ public Event getEvent() { return event; } /** * Sets the event. * * @param event * The event to set */ public void setEvent(Event e) { this.event = e; } } boolean isInDoHandle; /** * Get the value of isInDoHandle. * * @return value of isInDoHandle. */ public boolean isInDoHandle() { return isInDoHandle; } static protected IEditorPart getActiveEditor() { IWorkbench workbench = DTDUIPlugin.getDefault().getWorkbench(); IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow(); IEditorPart editorPart = workbenchWindow.getActivePage().getActiveEditor(); return editorPart; } static protected IStatusLineManager getStatusLineManager(IEditorPart editorPart) { IStatusLineManager result = null; try { EditorActionBarContributor contributor = (EditorActionBarContributor) editorPart.getEditorSite().getActionBarContributor(); result = contributor.getActionBars().getStatusLineManager(); } catch (Exception e) { } return result; } DocumentImpl getDocument(Element element) { return (DocumentImpl) element.getOwnerDocument(); } public void beginRecording(String description, Element element) { DocumentImpl doc = getDocument(element); doc.getModel().beginRecording(this, description); } public void endRecording(Element element) { DocumentImpl doc = getDocument(element); doc.getModel().endRecording(this); } protected boolean validateName(String name) { return true; } protected boolean validateLanguage(String lang) { return true; } protected boolean validatePrefix(String prefix) { return true; } }