blob: 3c40094daabd8c9b08733972392cb2f1f8f062a7 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006 Sybase, Inc. 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:
* Sybase, Inc. - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.pagedesigner.properties;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.views.properties.IPropertySourceProvider;
import org.eclipse.ui.views.properties.tabbed.AbstractPropertySection;
import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
import org.eclipse.wst.sse.core.internal.provisional.INodeAdapter;
import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
/**
* Mainly copied from AdvancedPropertySection. But extend it to allow setting
* PropertySourceProvider.
*
* @author mengbo
*/
public class AllPropertySection extends AbstractPropertySection {
// FIXME: workaround the eclipse properties view limitation of sorting
// category.
private AttributePropertySheetPage page;
/**
* IPropertySourceProvider for this section
*/
protected IPropertySourceProvider _provider;
/**
* selected tag IDOMElement
*/
protected IDOMElement _element;
/**
* The INodeAdapter to use for notification of model change
*/
protected INodeAdapter _adapter = new INodeAdapter() {
public boolean isAdapterForType(Object type) {
return false;
}
public void notifyChanged(INodeNotifier notifier, int eventType,
Object changedFeature, Object oldValue, Object newValue, int pos) {
refresh();
}
};
/**
* Constructor
*/
public AllPropertySection() {
this.setPropertySourceProvider(new AttributePropertySourceProvider());
}
@Override
public void createControls(Composite parent,
TabbedPropertySheetPage tabbedPropertySheetPage) {
super.createControls(parent, tabbedPropertySheetPage);
Composite composite = getWidgetFactory()
.createFlatFormComposite(parent);
page = new AttributePropertySheetPage();
page.init(tabbedPropertySheetPage.getSite());
if (_provider != null) {
page.setPropertySourceProvider(_provider);
}
page.createControl(composite);
FormData data = new FormData();
data.left = new FormAttachment(0, 0);
data.right = new FormAttachment(100, 0);
data.top = new FormAttachment(0, 0);
data.bottom = new FormAttachment(100, 0);
data.height = 100;
data.width = 100;
page.getControl().setLayoutData(data);
}
@Override
public void setInput(IWorkbenchPart part, ISelection selection) {
IDOMElement newEle = (IDOMElement) DesignerPropertyTool.getElement(
part, selection);
if (_element != newEle && page != null) {
super.setInput(part, selection);
page.selectionChanged(part, selection);
if (_element != null) {
_element.removeAdapter(_adapter);
}
_element = newEle;
if (_element != null) {
_element.addAdapter(_adapter);
}
}
}
@Override
public void dispose() {
super.dispose();
if (_element != null) {
_element.removeAdapter(_adapter);
}
if (page != null) {
page.dispose();
page = null;
}
}
@Override
public void refresh() {
if (page != null)
page.refresh();
}
@Override
public boolean shouldUseExtraSpace() {
return true;
}
/**
* Set provider into tabbedPropertiesPage
* @param provider
*/
public void setPropertySourceProvider(IPropertySourceProvider provider) {
_provider = provider;
if (page != null){
page.setPropertySourceProvider(_provider);
}
}
}