SMTK  @SMTK_VERSION@
Simulation Modeling Tool Kit
Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
smtk::operation::Group Class Reference

This class describes a stateless object associated with an operation manager that provides a unified API for grouping, ungrouping and querying operation groups. More...

#include <Group.h>

Inheritance diagram for smtk::operation::Group:
[legend]
Collaboration diagram for smtk::operation::Group:
[legend]

Public Types

typedef GroupObserver Observer
 
typedef GroupObservers Observers
 

Public Member Functions

 Group (const std::string &name, std::shared_ptr< smtk::operation::Manager > manager)
 
const std::string & name () const
 
bool registerOperation (const std::string &, std::set< std::string > values=std::set< std::string >())
 Register an operation identified by its unique name and give it values.
 
bool registerOperation (const Operation::Index &, std::set< std::string > values=std::set< std::string >())
 Register an operation identified by its type index and give it values.
 
template<typename OperationType >
bool registerOperation (std::set< std::string > values=std::set< std::string >())
 Register an operation identified by its class type and give it values.
 
bool unregisterOperation (const std::string &)
 Unregister an operation identified by its unique name.
 
bool unregisterOperation (const Operation::Index &)
 Unregister an operation identified by its type index.
 
template<typename OperationType >
bool unregisterOperation ()
 Unregister an operation identified by its class type.
 
Operation::Specification specification (const std::string &) const
 Access the specification of an operation identified by its unique name.
 
Operation::Specification specification (const Operation::Index &) const
 Access the specification of an operation identified by its type index.
 
template<typename OperationType >
Operation::Specification specification () const
 Access the specification of an operation identified by its class type.
 
bool contains (const std::string &) const
 Check if an operation identified by it's unique name is in the group.
 
bool contains (const Operation::Index &) const
 Check if an operation identified by its type index is in the group.
 
template<typename OperationType >
bool contains () const
 Check if an operation identified by its class type is in the group.
 
std::set< std::string > values (const std::string &) const
 Obtain values for an operation identified by it's unique name is in the group.
 
std::set< std::string > values (const Operation::Index &) const
 Obtain values for an operation identified by its type index is in the group.
 
template<typename OperationType >
std::set< std::string > values () const
 Obtain values for an operation identified by its class type is in the group.
 
std::set< Operation::Index > operations () const
 Return a set of operation indices that belong to this group.
 
std::set< std::string > operationNames () const
 Return a set of operation unique names that belong to this group.
 
std::string operationName (const Operation::Index &) const
 Given an operation index, return the operation's name.
 
std::string operationLabel (const Operation::Index &) const
 Given an operation index, return the operation's label.
 

Protected Member Functions

std::size_t operationObjectDistance (const Operation::Index &index, const smtk::resource::PersistentObject &obj) const
 Return a "degree of fit" measure indicating how well an operation matches an object. More...
 
smtk::attribute::ConstReferenceItemDefinitionPtr operationAssociationsRule (const Operation::Index &index) const
 A utility to fetch association rules for a given operation (used in operationObjectDistance).
 
smtk::attribute::ConstReferenceItemDefinitionPtr operationReferenceItemRule (const Operation::Index &index, const std::string &itemName) const
 A utility to fetch reference-item rules for a given operation (used by subclasses such as ArcCreator).
 

Protected Attributes

std::weak_ptr< smtk::operation::Managerm_manager
 

Detailed Description

This class describes a stateless object associated with an operation manager that provides a unified API for grouping, ungrouping and querying operation groups.

The persistent data associated with operation groups is held in the operation's specification, and is accessed only in the context of an operation's association with a manager (i.e. operations that are not registered with a manager do not have the concept of groups).

The design isolates the notion of operator grouping to the application scope of SMTK; operations are designed to be added to groups when they are registered to a manager, and an application subsequently performs operation group queries through the manager's interface.

A group is simply a string value used to associate collections of operations for aggregate manipulation (e.g. read operations that need to be associated with the File->Open menu command). The API presented here is extremely flexible, allowing for any number (including 0) of strings to be associated to an operator within the context of the group. To prevent the misuse of groups in an ad-hoc fashion for attaching custom data to operations, it is highly recommended that this class be subclassed privately, and a narrowing API for that group's context be used on top of this one. See smtk::operation::ReaderGroup for an example of this use case.

Member Function Documentation

◆ operationObjectDistance()

std::size_t smtk::operation::Group::operationObjectDistance ( const Operation::Index &  index,
const smtk::resource::PersistentObject obj 
) const
protected

Return a "degree of fit" measure indicating how well an operation matches an object.

This method is intended for use by subclasses that need to choose a single operation among multiple allowable operations in the group.

This method examines each operation in the group. If the operation's associationRule allows the object obj to be associated with the operation, then an integer is returned that indicates how well the object matches the operation's list of acceptable associations. Smaller numbers indicate better fits. If association is disallowed, the returned value is std::numeric_limits<std::size_t>::max().

The "degree of fit" returned is the smallest number of hops along the inheritance diagram of obj (or the resource owning obj if it is a component) to reach any entry in the operation's "accepts" rules that allows association.

See also
smtk::operation::DeleterGroup

The documentation for this class was generated from the following files: