/*******************************************************************************
* Copyright (c) 2000, 2009 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
* Gunnar Wagenknecht - fix for bug 21756 [PropertiesView] property view sorting
*******************************************************************************/
package org.eclipse.ui.views.properties;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.part.Page;
/**
* The standard implementation of property sheet page which presents a table of
* property names and values obtained from the current selection in the active
* workbench part.
* <p>
* This page obtains the information about what properties to display from the
* current selection (which it tracks).
* </p>
* <p>
* The model for this page is a hierarchy of <code>IPropertySheetEntry</code>.
* The page may be configured with a custom model by setting the root entry.
* <p>
* If no root entry is set then a default model is created which uses the
* <code>IPropertySource</code> interface to obtain the properties of the
* current selection. This requires that the selected objects provide an
* <code>IPropertySource</code> adapter (or implement
* <code>IPropertySource</code> directly). This restiction can be overcome by
* providing this page with an <code>IPropertySourceProvider</code>. If
* supplied, this provider will be used by the default model to obtain a
* property source for the current selection
* </p>
* <p>
* This class may be instantiated; it is not intended to be subclassed.
* </p>
*
* @see IPropertySource
* @noextend This class is not intended to be subclassed by clients.
*/
public class PropertySheetPage extends Page implements IPropertySheetPage,
IAdaptable {
@Override
public void selectionChanged(IWorkbenchPart part, ISelection selection) {
// TODO Auto-generated method stub
}
@Override
public Object getAdapter(Class adapter) {
// TODO Auto-generated method stub
return null;
}
@Override
public void createControl(Composite parent) {
// TODO Auto-generated method stub
}
@Override
public Control getControl() {
// TODO Auto-generated method stub
return null;
}
@Override
public void setFocus() {
// TODO Auto-generated method stub
}
// /**
// * Help context id (value
// * <code>"org.eclipse.ui.property_sheet_page_help_context"</code>).
// */
// public static final String HELP_CONTEXT_PROPERTY_SHEET_PAGE = "org.eclipse.ui.property_sheet_page_help_context"; //$NON-NLS-1$
//
private PropertySheetViewer viewer;
//
// private PropertySheetSorter sorter;
//
private IPropertySheetEntry rootEntry;
//
// private IPropertySourceProvider provider;
//
// private DefaultsAction defaultsAction;
//
// private FilterAction filterAction;
//
// private CategoriesAction categoriesAction;
//
// private CopyPropertyAction copyAction;
//
// private ICellEditorActivationListener cellEditorActivationListener;
//
// private CellEditorActionHandler cellEditorActionHandler;
//
// private Clipboard clipboard;
//
// private IWorkbenchPart sourcePart;
//
// /**
// * Part listener which cleans up this page when the source part is closed.
// * This is hooked only when there is a source part.
// *
// * @since 3.2
// */
// private class PartListener implements IPartListener {
// public void partActivated(IWorkbenchPart part) {
// }
//
// public void partBroughtToTop(IWorkbenchPart part) {
// }
//
// public void partClosed(IWorkbenchPart part) {
// if (sourcePart == part) {
// if (sourcePart != null)
// sourcePart.getSite().getPage()
// .removePartListener(partListener);
// sourcePart = null;
// if (viewer != null && !viewer.getControl().isDisposed()) {
// viewer.setInput(new Object[0]);
// }
// }
// }
//
// public void partDeactivated(IWorkbenchPart part) {
// }
//
// public void partOpened(IWorkbenchPart part) {
// }
// }
//
// private PartListener partListener = new PartListener();
//
// private Action columnsAction;
//
// /**
// * Creates a new property sheet page.
// */
// public PropertySheetPage() {
// super();
// }
//
// /*
// * (non-Javadoc) Method declared on <code>IPage</code>.
// */
// public void createControl(Composite parent) {
// // create a new viewer
// viewer = new PropertySheetViewer(parent);
// viewer.setSorter(sorter);
//
// // set the model for the viewer
// if (rootEntry == null) {
// // create a new root
// PropertySheetEntry root = new PropertySheetEntry();
// if (provider != null) {
// // set the property source provider
// root.setPropertySourceProvider(provider);
// }
// rootEntry = root;
// }
// viewer.setRootEntry(rootEntry);
// viewer.addActivationListener(getCellEditorActivationListener());
// // add a listener to track when the entry selection changes
// viewer.addSelectionChangedListener(new ISelectionChangedListener() {
// public void selectionChanged(SelectionChangedEvent event) {
// handleEntrySelection(event.getSelection());
// }
// });
// initDragAndDrop();
// makeActions();
//
// // Create the popup menu for the page.
// MenuManager menuMgr = new MenuManager("#PopupMenu"); //$NON-NLS-1$
// menuMgr.add(copyAction);
// menuMgr.add(new Separator());
// menuMgr.add(defaultsAction);
// Menu menu = menuMgr.createContextMenu(viewer.getControl());
// viewer.getControl().setMenu(menu);
//
// // Set help on the viewer
// viewer.getControl().addHelpListener(new HelpListener() {
// /*
// * @see HelpListener#helpRequested(HelpEvent)
// */
// public void helpRequested(HelpEvent e) {
// // Get the context for the selected item
// IStructuredSelection selection = (IStructuredSelection) viewer
// .getSelection();
// if (!selection.isEmpty()) {
// IPropertySheetEntry entry = (IPropertySheetEntry) selection
// .getFirstElement();
// Object helpContextId = entry.getHelpContextIds();
// if (helpContextId != null) {
// IWorkbenchHelpSystem helpSystem = PlatformUI
// .getWorkbench().getHelpSystem();
//
// // Since 2.0 the only valid type for helpContextIds
// // is a String (a single id).
// if (helpContextId instanceof String) {
// helpSystem.displayHelp((String) helpContextId);
// return;
// }
//
// // For backward compatibility we have to handle
// // and array of contexts (Strings and/or IContexts)
// // or a context computer.
// Object context = getFirstContext(helpContextId, e);
// if (context instanceof IContext) {
// helpSystem.displayHelp((IContext) context);
// } else if (context instanceof String) {
// helpSystem.displayHelp((String) context);
// }
// return;
// }
// }
//
// // No help for the selection so show page help
// PlatformUI.getWorkbench().getHelpSystem()
// .displayHelp(HELP_CONTEXT_PROPERTY_SHEET_PAGE);
// }
//
// /**
// * Returns the first help context.
// *
// * @param helpContext
// * the help context which is either an array of contexts
// * (strings and/or {@linkplain IContext}s) or an
// * {@link IContextComputer}
// *
// * @param e
// * the help event
// * @return the first context which is either a <code>String</code>,
// * {@link IContext} or <code>null</code> if none
// * @deprecated As of 2.0, nested contexts are no longer supported by
// * the help support system
// */
// private Object getFirstContext(Object helpContext, HelpEvent e) {
// Object[] contexts;
// if (helpContext instanceof IContextComputer) {
// // get local contexts
// contexts = ((IContextComputer) helpContext)
// .getLocalContexts(e);
// } else {
// contexts = (Object[]) helpContext;
// }
//
// if (contexts.length > 0)
// return contexts[0];
// return null;
// }
// });
// }
//
// /**
// * The <code>PropertySheetPage</code> implementation of this
// * <code>IPage</code> method disposes of this page's entries.
// */
// public void dispose() {
// super.dispose();
// if (sourcePart != null) {
// sourcePart.getSite().getPage().removePartListener(partListener);
// }
// if (rootEntry != null) {
// rootEntry.dispose();
// rootEntry = null;
// }
// if (clipboard != null) {
// clipboard.dispose();
// clipboard = null;
// }
// }
//
// /**
// * The <code>PropertySheetPage</code> implementation of this
// * <code>IAdaptable</code> method handles the <code>ISaveablePart</code>
// * adapter by delegating to the source part.
// *
// * @since 3.2
// */
// public Object getAdapter(Class adapter) {
// if (ISaveablePart.class.equals(adapter)) {
// return getSaveablePart();
// }
// return null;
// }
//
// /**
// * Returns an <code>ISaveablePart</code> that delegates to the source part
// * for the current page if it implements <code>ISaveablePart</code>, or
// * <code>null</code> otherwise.
// *
// * @return an <code>ISaveablePart</code> or <code>null</code>
// * @since 3.2
// */
// protected ISaveablePart getSaveablePart() {
// if (sourcePart instanceof ISaveablePart) {
// return (ISaveablePart) sourcePart;
// }
// return null;
// }
//
// /**
// * Returns the cell editor activation listener for this page
// *
// * @return ICellEditorActivationListener the cell editor activation
// listener
// * for this page
// */
// private ICellEditorActivationListener getCellEditorActivationListener() {
// if (cellEditorActivationListener == null) {
// cellEditorActivationListener = new ICellEditorActivationListener() {
// public void cellEditorActivated(CellEditor cellEditor) {
// if (cellEditorActionHandler != null) {
// cellEditorActionHandler.addCellEditor(cellEditor);
// }
// }
//
// public void cellEditorDeactivated(CellEditor cellEditor) {
// if (cellEditorActionHandler != null) {
// cellEditorActionHandler.removeCellEditor(cellEditor);
// }
// }
// };
// }
// return cellEditorActivationListener;
// }
//
// /*
// * (non-Javadoc) Method declared on IPage (and Page).
// */
// public Control getControl() {
// if (viewer == null) {
// return null;
// }
// return viewer.getControl();
// }
//
// /**
// * Handles a selection change in the entry table.
// *
// * @param selection
// * the new selection
// */
// public void handleEntrySelection(ISelection selection) {
// if (defaultsAction != null) {
// if (selection.isEmpty()) {
// defaultsAction.setEnabled(false);
// return;
// }
// // see if item is editable
// boolean editable = viewer.getActiveCellEditor() != null;
// defaultsAction.setEnabled(editable);
// }
// }
//
// /**
// * Adds drag and drop support.
// */
// protected void initDragAndDrop() {
// int operations = DND.DROP_COPY;
// Transfer[] transferTypes = new Transfer[] { TextTransfer.getInstance() };
// DragSourceListener listener = new DragSourceAdapter() {
// public void dragSetData(DragSourceEvent event) {
// performDragSetData(event);
// }
//
// public void dragFinished(DragSourceEvent event) {
// // Nothing to do here
// }
// };
// DragSource dragSource = new DragSource(viewer.getControl(), operations);
// dragSource.setTransfer(transferTypes);
// dragSource.addDragListener(listener);
// }
//
// /**
// * The user is attempting to drag. Add the appropriate data to the event.
// *
// * @param event
// * The event sent from the drag and drop support.
// */
// void performDragSetData(DragSourceEvent event) {
// // Get the selected property
// IStructuredSelection selection = (IStructuredSelection) viewer
// .getSelection();
// if (selection.isEmpty()) {
// return;
// }
// // Assume single selection
// IPropertySheetEntry entry = (IPropertySheetEntry) selection
// .getFirstElement();
//
// // Place text as the data
// StringBuffer buffer = new StringBuffer();
// buffer.append(entry.getDisplayName());
// buffer.append("\t"); //$NON-NLS-1$
// buffer.append(entry.getValueAsString());
//
// event.data = buffer.toString();
// }
//
// /**
// * Make action objects.
// */
// private void makeActions() {
// ISharedImages sharedImages = PlatformUI.getWorkbench()
// .getSharedImages();
//
// // Restore Default Value
// defaultsAction = new DefaultsAction(viewer, "defaults"); //$NON-NLS-1$
// defaultsAction.setText(PropertiesMessages.Defaults_text);
// defaultsAction.setToolTipText(PropertiesMessages.Defaults_toolTip);
// defaultsAction.setImageDescriptor(ViewsPlugin
// .getViewImageDescriptor("elcl16/defaults_ps.gif")); //$NON-NLS-1$
// defaultsAction.setDisabledImageDescriptor(ViewsPlugin
// .getViewImageDescriptor("dlcl16/defaults_ps.gif")); //$NON-NLS-1$
// defaultsAction.setEnabled(false);
//
// // Show Advanced Properties
// filterAction = new FilterAction(viewer, "filter"); //$NON-NLS-1$
// filterAction.setText(PropertiesMessages.Filter_text);
// filterAction.setToolTipText(PropertiesMessages.Filter_toolTip);
// filterAction.setImageDescriptor(ViewsPlugin
// .getViewImageDescriptor("elcl16/filter_ps.gif")); //$NON-NLS-1$
// filterAction.setChecked(false);
//
// // Show Categories
// categoriesAction = new CategoriesAction(viewer, "categories"); //$NON-NLS-1$
// categoriesAction.setText(PropertiesMessages.Categories_text);
// categoriesAction.setToolTipText(PropertiesMessages.Categories_toolTip);
// categoriesAction.setImageDescriptor(ViewsPlugin
// .getViewImageDescriptor("elcl16/tree_mode.gif")); //$NON-NLS-1$
// categoriesAction.setChecked(true);
//
// // Columns...
// columnsAction = new Action(PropertiesMessages.Columns_text) {
// public void run() {
// Tree tree = (Tree) viewer.getControl();
// ConfigureColumns.forTree(tree, new SameShellProvider(tree));
// }
// };
// columnsAction.setToolTipText(PropertiesMessages.Columns_toolTip);
//
// // Copy
// Shell shell = viewer.getControl().getShell();
// clipboard = new Clipboard(shell.getDisplay());
// copyAction = new CopyPropertyAction(viewer, "copy", clipboard); //$NON-NLS-1$
// copyAction.setText(PropertiesMessages.CopyProperty_text);
// copyAction.setImageDescriptor(sharedImages
// .getImageDescriptor(ISharedImages.IMG_TOOL_COPY));
// }
//
// /*
// * (non-Javadoc) Method declared on IPage (and Page).
// */
// public void makeContributions(IMenuManager menuManager,
// IToolBarManager toolBarManager, IStatusLineManager statusLineManager) {
//
// // add actions to the tool bar
// toolBarManager.add(categoriesAction);
// toolBarManager.add(filterAction);
// toolBarManager.add(defaultsAction);
//
// // add actions to the menu
// menuManager.add(categoriesAction);
// menuManager.add(filterAction);
// menuManager.add(columnsAction);
//
// // set status line manager into the viewer
// viewer.setStatusLineManager(statusLineManager);
// }
//
/**
* Updates the model for the viewer.
* <p>
* Note that this means ensuring that the model reflects the state of the
* current viewer input.
* </p>
*/
public void refresh() {
if (viewer == null) {
return;
}
// calling setInput on the viewer will cause the model to refresh
viewer.setInput(viewer.getInput());
}
//
// /*
// * (non-Javadoc) Method declared on ISelectionListener.
// */
// public void selectionChanged(IWorkbenchPart part, ISelection selection) {
// if (viewer == null) {
// return;
// }
//
// if (sourcePart != null) {
// sourcePart.getSite().getPage().removePartListener(partListener);
// sourcePart = null;
// }
//
// // change the viewer input since the workbench selection has changed.
// if (selection instanceof IStructuredSelection) {
// sourcePart = part;
// viewer.setInput(((IStructuredSelection) selection).toArray());
// }
//
// if (sourcePart != null) {
// sourcePart.getSite().getPage().addPartListener(partListener);
// }
// }
//
// /**
// * The <code>PropertySheetPage</code> implementation of this
// * <code>IPage</code> method calls <code>makeContributions</code> for
// * backwards compatibility with previous versions of <code>IPage</code>.
// * <p>
// * Subclasses may reimplement.
// * </p>
// */
// public void setActionBars(IActionBars actionBars) {
// super.setActionBars(actionBars);
// cellEditorActionHandler = new CellEditorActionHandler(actionBars);
// cellEditorActionHandler.setCopyAction(copyAction);
// }
//
// /**
// * Sets focus to a part in the page.
// */
// public void setFocus() {
// viewer.getControl().setFocus();
// }
//
// /**
// * Sets the given property source provider as the property source
// provider.
// * <p>
// * Calling this method is only valid if you are using this page's default
// * root entry.
// * </p>
// *
// * @param newProvider
// * the property source provider
// */
// public void setPropertySourceProvider(IPropertySourceProvider
// newProvider) {
// provider = newProvider;
// if (rootEntry instanceof PropertySheetEntry) {
// ((PropertySheetEntry) rootEntry)
// .setPropertySourceProvider(provider);
// // the following will trigger an update
// viewer.setRootEntry(rootEntry);
// }
// }
//
/**
* Sets the given entry as the model for the page.
*
* @param entry
* the root entry
*/
public void setRootEntry(IPropertySheetEntry entry) {
rootEntry = entry;
if (viewer != null) {
// the following will trigger an update
viewer.setRootEntry(rootEntry);
}
}
//
// /**
// * Sets the sorter used for sorting categories and entries in the viewer
// of
// * this page.
// * <p>
// * The default sorter sorts categories and entries alphabetically.
// * </p>
// *
// * @param sorter
// * the sorter to set (<code>null</code> will reset to the default
// * sorter)
// * @since 3.1
// */
// protected void setSorter(PropertySheetSorter sorter) {
// this.sorter = sorter;
// if (viewer != null) {
// viewer.setSorter(sorter);
//
// // the following will trigger an update
// if (null != viewer.getRootEntry()) {
// viewer.setRootEntry(rootEntry);
// }
// }
// }
}