Difference between revisions of "Selection View"

From Developer Documents
Jump to navigation Jump to search
Line 1: Line 1:
 
The Selection View is a standard Simantics view, which shows tabbed configuration views about the current workbench selection.
 
The Selection View is a standard Simantics view, which shows tabbed configuration views about the current workbench selection.
  
== Basic implementation ==
+
== Selection View ('''org.simantics.browsing.ui.platform.PropertyPageView''') ==
  
Selection view displays content for the workbench selection, which is produced by the active workbench part. The main implementation of the Selection View is also contributed by the active workbench part.  
+
The Selection View is contributed in '''org.simantics.browsing.ui.platform/plugin.xml'''.
  
The implementation class is org.simantics.ui.workbench.IPropertyPage.
+
Selection View displays content for the '''workbench selection'''.
  
The standard implementation is org.simantics.selectionview.StandardPropertyPage (needs refactoring).
+
Selection View listens the '''active workbench part''' and tries to obtain '''org.simantics.ui.workbench.IPropertyPage''' via '''IAdaptable.getAdapter''' for displaying selections from the part.
 +
 
 +
Most Simantics workbench part implementations adapt into the standard property page implementation described next.
 +
 
 +
== Standard property page (org.simantics.selectionview.StandardPropertyPage) ==
 +
 
 +
The standard property page displays a tab folder ('''org.simantics.selectionview.StandardProperties'''), which contains n tabs contributed by a set of '''selection processors''' ('''org.simantics.selectionview.SelectionProcessor''').
  
 
== Selection processing ==
 
== Selection processing ==
  
StandardPropertyPage uses org.simantics.selectionview.SelectionProcessor for computing a list of tabs from the given workbench selection. The tabs are implementations of org.simantics.selectionview.ComparableTabContributor.
+
<pre>
 +
 
 +
public interface SelectionProcessor<S, B> {
 +
 
 +
    /**
 +
    * @param selection the incoming selection to process
 +
    * @param backend for providing back-end access to the processor
 +
    * @return an ordered set of
 +
    *        <code>org.simantics.browsing.ui.swt.ComparableTabContributor</code>
 +
    *        instances representing the property tabs to be contributed to the
 +
    *        selection view. The processor must not return <code>null</code>,
 +
    *        return an empty collection instead.
 +
    */
 +
    Collection<?> process(S selection, B backend);
 +
 
 +
}
 +
 
 +
</pre>
 +
 
 +
Selection is the '''workbench selection'''.
 +
 
 +
Backend is ReadGraph in most cases (could be something else if custom property pages are used).
 +
 
 +
Selection processors are contributed by
 +
 
 +
* Extending StandardPropertyPage and overriding method getSelectionProcessor
 +
* Constructing StandardPropertyPage with a set of '''browse contexts''' for which selection processors can be contributed via extension point '''org.simantics.browsing.ui.common.selectionProcessorBinding'''
 +
 
 +
The obtained set of ComparableTabContributors are sorted and used to create tabs for the tabbed folder.
 +
 
 +
A modelled implementation of the SelectionProcessor interface is described next.
 +
 
 +
== Modelled Selection Processor (org.simantics.selectionview.StandardSelectionProcessor) ==
 +
 
 +
StandardSelectionProcessor seeks all instances of http://www.simantics.org/SelectionView-0.0/TabContribution from model dependencies and adapts (ReadGraph.adapt) them to org.simantics.selectionview.TabContribution.
 +
 
 +
<pre>
 +
 
 +
public interface TabContribution<T> {
  
A modelled implementation of the SelectionProcessor interface is org.simantics.selectionview.StandardSelectionProcessor.
+
void contribute(ReadGraph graph, T selection, Collection<ComparableTabContributor> result) throws DatabaseException;
 +
 +
}
  
StandardSelectionProcessor seeks all instances of http://www.simantics.org/SelectionView-0.0/TabContribution and adapts them to org.simantics.selectionview.TabContribution.
+
</pre>
  
StandardSelectionProcessor seeks all instances of http://www.simantics.org/SelectionView-0.0/SelectionTransformation (which are also L0.Function) and applies them to obtain a set of inputs, which is then fed to all TabContributions.
+
StandardSelectionProcessor seeks all instances of http://www.simantics.org/SelectionView-0.0/SelectionTransformation (which are also L0.Function) and applies them (org.simantics.db.common.utils.Functions#exec) to obtain a set of inputs, which are then fed to all TabContributions.
  
 
== Tab implementation ==
 
== Tab implementation ==

Revision as of 09:45, 29 March 2012

The Selection View is a standard Simantics view, which shows tabbed configuration views about the current workbench selection.

Selection View (org.simantics.browsing.ui.platform.PropertyPageView)

The Selection View is contributed in org.simantics.browsing.ui.platform/plugin.xml.

Selection View displays content for the workbench selection.

Selection View listens the active workbench part and tries to obtain org.simantics.ui.workbench.IPropertyPage via IAdaptable.getAdapter for displaying selections from the part.

Most Simantics workbench part implementations adapt into the standard property page implementation described next.

Standard property page (org.simantics.selectionview.StandardPropertyPage)

The standard property page displays a tab folder (org.simantics.selectionview.StandardProperties), which contains n tabs contributed by a set of selection processors (org.simantics.selectionview.SelectionProcessor).

Selection processing


public interface SelectionProcessor<S, B> {

    /**
     * @param selection the incoming selection to process
     * @param backend for providing back-end access to the processor
     * @return an ordered set of
     *         <code>org.simantics.browsing.ui.swt.ComparableTabContributor</code>
     *         instances representing the property tabs to be contributed to the
     *         selection view. The processor must not return <code>null</code>,
     *         return an empty collection instead.
     */
    Collection<?> process(S selection, B backend);

}

Selection is the workbench selection.

Backend is ReadGraph in most cases (could be something else if custom property pages are used).

Selection processors are contributed by

  • Extending StandardPropertyPage and overriding method getSelectionProcessor
  • Constructing StandardPropertyPage with a set of browse contexts for which selection processors can be contributed via extension point org.simantics.browsing.ui.common.selectionProcessorBinding

The obtained set of ComparableTabContributors are sorted and used to create tabs for the tabbed folder.

A modelled implementation of the SelectionProcessor interface is described next.

Modelled Selection Processor (org.simantics.selectionview.StandardSelectionProcessor)

StandardSelectionProcessor seeks all instances of http://www.simantics.org/SelectionView-0.0/TabContribution from model dependencies and adapts (ReadGraph.adapt) them to org.simantics.selectionview.TabContribution.


public interface TabContribution<T> {

	void contribute(ReadGraph graph, T selection, Collection<ComparableTabContributor> result) throws DatabaseException;	
	
}

StandardSelectionProcessor seeks all instances of http://www.simantics.org/SelectionView-0.0/SelectionTransformation (which are also L0.Function) and applies them (org.simantics.db.common.utils.Functions#exec) to obtain a set of inputs, which are then fed to all TabContributions.

Tab implementation

The standard way of implementing a tab is a Simantics Modelled View. Generic modelled selection view tabs include

StandardProperties (http://www.simantics.org/SelectionView-0.0/StandardProperties)

  • StandardProperties is an Explorer view which expects a single Variable as an input.
  • The view has the columns 'Property', 'Value' and 'Unit'
  • Tree children for variable v are all properties of v which have a property called HasStandardPropertyInfo
  • Column labels for child c are obtained by collecting all properties of c that have a property called DISPLAY_COLUMN
    • The (String) value of DISPLAY_COLUMN property if the column identifier
    • Modifier uses the property 'HasInputValidator' for getting a validator
    • Modifier writes with Bindings.STRING into the label property.
    • The labels may apply transformations such as unit conversion or formatting i.e. they can not be used for obtaining raw property data.
  • The HasStandardPropertyInfo property defines the following attributes of the displayed property
    • Category (Name, SortingName, Visibility)
  • Required, Default?