#include <qvcore/qvpropertycontainer.h>
Inherited by QVCamera, QVImageCanvas, and QVWorker.
Public Types | |
enum | LinkType { AsynchronousLink, SynchronousLink } |
Semantics for a link between QVPropertyContainers. More... | |
enum | PropertyFlag { noInputOutputFlag = 0x0, inputFlag = 0x1, outputFlag = 0x2, guiInvisible = 0x4, internalProp = 0x8 } |
Flags for each property. More... | |
Public Member Functions | |
QVPropertyContainer (const QString name=QString()) | |
Constructs a QVPropertyContainer with a given string identifier. | |
QVPropertyContainer (const QVPropertyContainer &cont) | |
Copy constructor. | |
QVPropertyContainer & | operator= (const QVPropertyContainer &cont) |
Copy operator. | |
virtual | ~QVPropertyContainer () |
Virtual destructor. | |
void | setName (const QString name) |
Sets a new string identifier for a QVPropertyContainer. | |
const QString | getName () const |
Retrieves identifier QString of the object. | |
const uint | getId () const |
Retrieves identifier uint of the object. | |
bool | operator== (const QVPropertyContainer &cont) const |
Compare operator. | |
QList< QString > | getPropertyList () const |
Gets list of properties of the QVPropertyContainer. | |
template<class Type> | |
QList< QString > | getPropertyListByType () const |
Gets the names of the properties of a given type. | |
template<class Type> | |
bool | isType (QString name, bool *ok=NULL) const |
Checks if a property is of a given type. | |
bool | containsProperty (const QString name) const |
Check whether the property holder has a given property. | |
int | getPropertyType (const QString name, bool *ok=NULL) const |
Given a property identifying QString (see getPropertyList() function above), returns the type of the property. | |
template<class Type> | |
bool | addProperty (const QString name, const PropertyFlags flags=inputFlag, const Type &value=Type(), const QString info=QString("(Info not available)")) |
Registers a new property in the property holder. | |
template<class Type> | |
bool | addProperty (const QString name, const PropertyFlags flags, const Type &value, const QString info, const Type &minValue, const Type &maxValue) |
Registers a new property in the property holder. | |
bool | addPropertyFromQVariant (const QString &name, const PropertyFlags flags, QVariant variant, const QString info) |
Registers a new property in the property holder. | |
bool | removeProperty (const QString name) |
De-registers a property in the property holder. | |
bool | hasRange (const QString name) const |
Tells if a range has been set for the property. | |
PropertyFlags | getPropertyFlags (const QString name) const |
Returns flags for a property. | |
bool | isInput (const QString name) const |
Tells if a property is of the input type. | |
bool | isOutput (const QString name) const |
Tells if a property is of the output type. | |
bool | isGUIInvisible (const QString name) const |
Tells if a property can be modified through the GUI. | |
bool | isLinkedInput (const QString name) const |
Tells if a property is of the input type and is linked. | |
bool | isLinkedOutput (const QString name) const |
Tells if a property is of the output type and is linked. | |
template<class Type> | |
bool | setPropertyValue (const QString name, const Type &value) |
Sets value for property. | |
template<class Type> | |
Type | getPropertyValue (const QString name, bool *ok=NULL) const |
Method to get the actual value of a property. | |
QVariant | getPropertyQVariantValue (const QString name, bool *ok=NULL) const |
Method to get the value of a property as a QVariant. | |
template<class Type> | |
Type | getPropertyMaximum (const QString name, bool *ok=NULL) const |
Method to get the maximum value for a property. | |
template<class Type> | |
Type | getPropertyMinimum (const QString name, bool *ok=NULL) const |
Method to get the minimum value for a property. | |
QString | getPropertyInfo (const QString name, bool *ok=NULL) const |
Method to get the info QString for int typed property. | |
QString | getLastError () const |
Gets the (possible) last error string. | |
const QString | infoInputProperties () const |
Formatted description of properties (useful to show help). | |
bool | linkProperty (QString sourcePropertyName, QVPropertyContainer *destinyContainer, QString destinyPropertyName, LinkType linkType) |
Links properties among QVPropertyContainer's. | |
void | linkProperty (QVPropertyContainer *container, LinkType linkType=SynchronousLink) |
Links properties among QVPropertyContainer's. | |
bool | unlinkProperty (QString origName, QVPropertyContainer *destCont, QString destName) |
Unlinks properties among QVPropertyContainer's. | |
void | unlink () |
Completely unlinks a property holder. | |
QVPropertyContainerInformer * | getInformer () |
Gets the QVPropertyContainerInformer. | |
Static Public Member Functions | |
static bool | areSynchronized (const QList< QVPropertyContainer * > containers) |
Check if a group of QVPropertyContainers are synchronously linked. | |
Protected Member Functions | |
void | readInputProperties () |
Read linked input properties from other QVPropertyContainer's. | |
void | writeOutputProperties () |
Write linked output properties to other QVPropertyContainer's. | |
template<class Type> | |
bool | parseArgument (const QString parameter, const QString value) |
Parses a property value from a string. | |
void | setLastError (QString str) const |
Sets an error string message. | |
uint | inputPropertyWorker (QString prop) const |
Obtain the origin worker's id of a input property. |
This is the parent class for any object in the QVision framework capable of containing or sharing values through the use of dynamic properties. This class offers methods to register new properties, update and obtain the contained value, and retrieve listings of dynamic property identificators and types contained in the object, amongst other things.
This class emit "changed" signals when it is changed (change the container name or a property value, add/remove a property, add/remove a link, or copy from other QVPropertyContainer). In each signal emited it pass a QVPropertyContainerChange indicating the type and position of the change. In order to let include observer objects for the property containers structure.
It has a static global informer, that can be get with getGlobalInformer(), that emits "changed" signals when a QVPropertyContainer is created or destroyed.
For futher information about them, see section Dynamic properties.
Definition at line 82 of file qvpropertycontainer.h.
Semantics for a link between QVPropertyContainers.
If a link between a source property of a QVPropertyContainer object A and a corresponding destination property of another one B is declared as synchronous, it means that every time that the readInputProperties() method is executed on B, the system assures that one (and just one) corresponding call to the writeOutputProperties() has been previously executed on A. In the (common) case of a link between two QVThread's, that would mean, for example, that each running of the source QVThread corresponds exactly to another (posterior) running of the destination QVThread.
That is equivalent to say that every data produced by the source is always consumed by the destination, so no data is ever "lost" in that sense. The obvious cost is that both threads will have to run at the speed of the slowest, of course.
The alternative is an asynchronous link, in which the only thing that the system assures on the properties read by the destination is that, in the case of a multiple link (several input properties of B connected to several corresponding output properties of B), all of them correspond to the same iteration of the source (more precisely, to the last execution of the writeOutputProperties() method in A, independently of the specific sequence number of that iteration). We say that the output is 'coherent' in all the properties linked this way. But, as has been already said, the iterations are not linked in the temporal sense, so, for example, for the case of QVThreads, both could run asynchronously, and at different speeds.
See also the QVPropertyContainer::linkProperty() method.
Definition at line 118 of file qvpropertycontainer.h.
Flags for each property.
Currently, if a property is of the "input type" and/or "output type" are the only supported flags.
Definition at line 124 of file qvpropertycontainer.h.
QVPropertyContainer::QVPropertyContainer | ( | const QString | name = QString() |
) |
Constructs a QVPropertyContainer with a given string identifier.
name | Identifier for the object to be created. |
Definition at line 31 of file qvpropertycontainer.cpp.
QVPropertyContainer::QVPropertyContainer | ( | const QVPropertyContainer & | cont | ) |
Copy constructor.
cont | property container to be copied. |
Definition at line 54 of file qvpropertycontainer.cpp.
QVPropertyContainer::~QVPropertyContainer | ( | ) | [virtual] |
Virtual destructor.
Frees the QVPropertyContainer, and all its associated links. Besides, this destructor can (and in many cases should!) also be reimplemented in subclasses.
Definition at line 97 of file qvpropertycontainer.cpp.
QVPropertyContainer & QVPropertyContainer::operator= | ( | const QVPropertyContainer & | cont | ) |
Copy operator.
cont | property container to be copied. |
Definition at line 77 of file qvpropertycontainer.cpp.
void QVPropertyContainer::setName | ( | const QString | name | ) |
Sets a new string identifier for a QVPropertyContainer.
name | New string identifier for the object. |
Definition at line 106 of file qvpropertycontainer.cpp.
const QString QVPropertyContainer::getName | ( | ) | const |
Retrieves identifier QString of the object.
Definition at line 109 of file qvpropertycontainer.cpp.
Referenced by getPropertyMaximum(), getPropertyMinimum(), infoInputProperties(), QVMPlayerCamera::link(), linkProperty(), parseArgument(), QVWorker::printStat(), QVImageCanvas::QVImageCanvas(), QVPropertyContainerChange::QVPropertyContainerChange(), QVApplication::startItems(), and unlinkProperty().
const uint QVPropertyContainer::getId | ( | ) | const |
Retrieves identifier uint of the object.
Definition at line 112 of file qvpropertycontainer.cpp.
Referenced by QVWorker::run().
bool QVPropertyContainer::operator== | ( | const QVPropertyContainer & | cont | ) | const |
Compare operator.
Compare the PropertyContainers id;
cont | property container to be compared. |
Definition at line 115 of file qvpropertycontainer.cpp.
QList< QString > QVPropertyContainer::getPropertyList | ( | ) | const |
Gets list of properties of the QVPropertyContainer.
Retrieves the names of the properties registered in the property holder, in a QStringList.
Definition at line 118 of file qvpropertycontainer.cpp.
Referenced by linkProperty().
QList<QString> QVPropertyContainer::getPropertyListByType | ( | ) | const [inline] |
Gets the names of the properties of a given type.
Retrieves the names of those properties, registered in the property holder, which hold values of the type given by the template parameter, in a QStringList.
Definition at line 187 of file qvpropertycontainer.h.
Referenced by QVNumericPlot::linkProperty().
bool QVPropertyContainer::isType | ( | QString | name, | |
bool * | ok = NULL | |||
) | const [inline] |
Checks if a property is of a given type.
Returns true if type passed as template parameter equals type of value contained in a property.
name | QString identifying the property. | |
ok | Pointer to bool value which is set to true if property exists, and to false otherwise. |
Definition at line 207 of file qvpropertycontainer.h.
Referenced by QVMPlayerCamera::link().
bool QVPropertyContainer::containsProperty | ( | const QString | name | ) | const |
Check whether the property holder has a given property.
name | QString identifying the property. |
Definition at line 121 of file qvpropertycontainer.cpp.
int QVPropertyContainer::getPropertyType | ( | const QString | name, | |
bool * | ok = NULL | |||
) | const |
Given a property identifying QString (see getPropertyList() function above), returns the type of the property.
name | QString identifying the property. | |
ok | Pointer to bool value which is set to true if property exists, and to false otherwise. |
Definition at line 124 of file qvpropertycontainer.cpp.
Referenced by infoInputProperties(), QVNumericPlot::linkProperty(), QVHistogramPlot::linkProperty(), QVCpuPlot::linkProperty(), and linkProperty().
bool QVPropertyContainer::addProperty | ( | const QString | name, | |
const PropertyFlags | flags = inputFlag , |
|||
const Type & | value = Type() , |
|||
const QString | info = QString("(Info not available)") | |||
) | [inline] |
Registers a new property in the property holder.
name | Name of the new property. | |
value | Initial value for the property. | |
info | Info string for the property. | |
flags | Whether the property is input, output, or both. |
Definition at line 245 of file qvpropertycontainer.h.
bool QVPropertyContainer::addProperty | ( | const QString | name, | |
const PropertyFlags | flags, | |||
const Type & | value, | |||
const QString | info, | |||
const Type & | minValue, | |||
const Type & | maxValue | |||
) | [inline] |
Registers a new property in the property holder.
name | Name of the new property. | |
value | Initial value for the property. | |
info | Info string for the property. | |
flags | Whether the property is input, output, or both. | |
minValue | Minimum value for the property. | |
maxValue | Maximum value for the property. |
Definition at line 266 of file qvpropertycontainer.h.
bool QVPropertyContainer::addPropertyFromQVariant | ( | const QString & | name, | |
const PropertyFlags | flags, | |||
QVariant | variant, | |||
const QString | info | |||
) | [inline] |
Registers a new property in the property holder.
name | Name of the new property. | |
flags | Whether the property is input, output, or both. | |
variant | Initial QVariant value for the property | |
info | Info string for the property. |
Definition at line 286 of file qvpropertycontainer.h.
Referenced by addProperty(), and QVImageCanvas::linkProperty().
bool QVPropertyContainer::removeProperty | ( | const QString | name | ) |
De-registers a property in the property holder.
name | Name of the property to delete. |
Definition at line 136 of file qvpropertycontainer.cpp.
Referenced by QVImageCanvas::unlink().
bool QVPropertyContainer::hasRange | ( | const QString | name | ) | const |
Tells if a range has been set for the property.
name | Name of the property. |
Definition at line 180 of file qvpropertycontainer.cpp.
PropertyFlags QVPropertyContainer::getPropertyFlags | ( | const QString | name | ) | const [inline] |
Returns flags for a property.
name | Name of the property. |
Definition at line 325 of file qvpropertycontainer.h.
bool QVPropertyContainer::isInput | ( | const QString | name | ) | const |
Tells if a property is of the input type.
name | Name of the property. |
Definition at line 183 of file qvpropertycontainer.cpp.
Referenced by infoInputProperties().
bool QVPropertyContainer::isOutput | ( | const QString | name | ) | const |
Tells if a property is of the output type.
name | Name of the property. |
Definition at line 186 of file qvpropertycontainer.cpp.
Referenced by QVNumericPlot::linkProperty().
bool QVPropertyContainer::isGUIInvisible | ( | const QString | name | ) | const |
Tells if a property can be modified through the GUI.
name | Name of the property. |
Definition at line 189 of file qvpropertycontainer.cpp.
bool QVPropertyContainer::isLinkedInput | ( | const QString | name | ) | const |
Tells if a property is of the input type and is linked.
name | Name of the property. |
Definition at line 192 of file qvpropertycontainer.cpp.
bool QVPropertyContainer::isLinkedOutput | ( | const QString | name | ) | const |
Tells if a property is of the output type and is linked.
name | Name of the property. |
Definition at line 195 of file qvpropertycontainer.cpp.
bool QVPropertyContainer::setPropertyValue | ( | const QString | name, | |
const Type & | value | |||
) | [inline] |
Sets value for property.
If the property is not writable, this function will return false, and won't change property value. Besides, if there is a [minimum,maximum] range and the value is not in it, also fails to set the value. In both cases the function issues a warning through stderr, and returns false.
name | Identifying QString for the property. | |
value | Value to set the property with. |
Definition at line 367 of file qvpropertycontainer.h.
Type QVPropertyContainer::getPropertyValue | ( | const QString | name, | |
bool * | ok = NULL | |||
) | const [inline] |
Method to get the actual value of a property.
name | Identifying QString for the property. | |
ok | Pointer to bool value which is set to true if property exists, and to false otherwise. |
Definition at line 386 of file qvpropertycontainer.h.
QVariant QVPropertyContainer::getPropertyQVariantValue | ( | const QString | name, | |
bool * | ok = NULL | |||
) | const |
Method to get the value of a property as a QVariant.
name | Identifying QString for the property. | |
ok | Pointer to bool value which is set to true if property exists, and to false otherwise. |
Definition at line 198 of file qvpropertycontainer.cpp.
Referenced by QVImageCanvas::linkProperty().
Type QVPropertyContainer::getPropertyMaximum | ( | const QString | name, | |
bool * | ok = NULL | |||
) | const [inline] |
Method to get the maximum value for a property.
name | Identifying QString for the property. | |
ok | Pointer to bool value which is set to true if property exists, and to false otherwise. |
Definition at line 409 of file qvpropertycontainer.h.
Type QVPropertyContainer::getPropertyMinimum | ( | const QString | name, | |
bool * | ok = NULL | |||
) | const [inline] |
Method to get the minimum value for a property.
name | Identifying QString for the property. | |
ok | Pointer to bool value which is set to true if property exists, and to false otherwise. |
Definition at line 436 of file qvpropertycontainer.h.
QString QVPropertyContainer::getPropertyInfo | ( | const QString | name, | |
bool * | ok = NULL | |||
) | const |
Method to get the info QString for int typed property.
name | Identifying QString for the property. | |
ok | Pointer to bool value which is set to true if property exists, and to false otherwise. |
Definition at line 207 of file qvpropertycontainer.cpp.
Referenced by infoInputProperties(), and QVImageCanvas::linkProperty().
QString QVPropertyContainer::getLastError | ( | ) | const |
Gets the (possible) last error string.
Definition at line 216 of file qvpropertycontainer.cpp.
Referenced by QVApplication::exec().
const QString QVPropertyContainer::infoInputProperties | ( | ) | const |
Formatted description of properties (useful to show help).
Obtains a human readable description QString of all the object's properties that have some associated info (otherwise they are ignored).
Definition at line 221 of file qvpropertycontainer.cpp.
bool QVPropertyContainer::linkProperty | ( | QString | sourcePropertyName, | |
QVPropertyContainer * | destinyContainer, | |||
QString | destinyPropertyName, | |||
LinkType | linkType | |||
) |
Links properties among QVPropertyContainer's.
This method safely links properties among property holders in a thread safe manner. It is mainly used when programming multithreaded applications -with multiple QVWorkers-, but also, for example, when linking workers (running in an independent thread) with GUI widgets (running in the main thread).
The pointer this corresponds to the source QVPropertyContainer.
See also QVPropertyContainer::LinkType.
sourcePropertyName | Identifying QString for the source property. | |
destinyContainer | Pointer to the destination QVPropertyContainer. | |
destinyPropertyName | Identifying QString for the destination property. | |
linkType | Synchronous or asynchronous. |
Definition at line 350 of file qvpropertycontainer.cpp.
Referenced by QVMPlayerCamera::link(), QVImageCanvas::linkPolyline(), QVImageCanvas::linkProperty(), linkProperty(), QVImageCanvas::linkROI(), and main().
void QVPropertyContainer::linkProperty | ( | QVPropertyContainer * | container, | |
LinkType | linkType = SynchronousLink | |||
) |
Links properties among QVPropertyContainer's.
This method safely links all input properties from a container with the same name and type output current container's properties, holders in a thread safe manner. It is mainly used when programming multithreaded applications -with multiple QVWorkers-, but also, for example, when linking workers (running in an independent thread) with GUI widgets (running in the main thread).
container | Pointer to the destination QVPropertyContainer. | |
linkType | Synchronous or asynchronous. |
Definition at line 437 of file qvpropertycontainer.cpp.
bool QVPropertyContainer::unlinkProperty | ( | QString | origName, | |
QVPropertyContainer * | destCont, | |||
QString | destName | |||
) |
Unlinks properties among QVPropertyContainer's.
This method safely ulinks properties among property holders in a thread safe manner.
The pointer this corresponds to the source QVPropertyContainer.
See also QVPropertyContainer::LinkType.
origName | Identifying QString for the source property. | |
destCont | Pointer to the destination QVPropertyContainer. | |
destName | Identifying QString for the destination property. |
Definition at line 465 of file qvpropertycontainer.cpp.
Referenced by QVImageCanvas::unlink(), and QVMPlayerCamera::unlink().
void QVPropertyContainer::unlink | ( | ) |
Completely unlinks a property holder.
Deletes all the input and output links associated to the holder. Of course, all the corresponding necessary unlinks in other property holders are also performed.
Definition at line 482 of file qvpropertycontainer.cpp.
Referenced by ~QVPropertyContainer().
bool QVPropertyContainer::areSynchronized | ( | const QList< QVPropertyContainer * > | containers | ) | [static] |
Check if a group of QVPropertyContainers are synchronously linked.
Check if a group of QVPropertyContainers are synchronously linked.
containers | List of QVPropertyContainer to be Checked. |
Definition at line 609 of file qvpropertycontainer.cpp.
QVPropertyContainerInformer* QVPropertyContainer::getInformer | ( | ) | [inline] |
Gets the QVPropertyContainerInformer.
The QVPropertyContainerInformer is the object in charge of emit the changes of the QVPropertyContainer.
Definition at line 549 of file qvpropertycontainer.h.
void QVPropertyContainer::readInputProperties | ( | ) | [protected] |
Read linked input properties from other QVPropertyContainer's.
This is a protected function that should be called from the subclasses of QVPropertyContainer just before starting to use any input property linked to another property holder (for example, just before the worker() function in a QVWorker, or just before the viewer() function in a QVCanvas).
Definition at line 505 of file qvpropertycontainer.cpp.
Referenced by QVMPlayerCamera::openCam(), and QVWorker::run().
void QVPropertyContainer::writeOutputProperties | ( | ) | [protected] |
Write linked output properties to other QVPropertyContainer's.
This is a protected function that should be called from the subclasses of QVPropertyContainer just after having a new set of output properties ready to be read by another property holder (for example, just after the worker() function in a QVWorker, or just after the viewer() function in a QVCanvas). The effect is that a coherent state of the linked output properties is saved, so other QVPropertyContainer's can safely read from it -while we can be writing new values corresponding to a new iteration-.
Definition at line 540 of file qvpropertycontainer.cpp.
Referenced by QVImageCanvas::circleSelectedSlot(), QVMPlayerCamera::grab(), QVImageCanvas::polySelectedSlot(), QVImageCanvas::rectSelectedSlot(), and QVWorker::run().
bool QVPropertyContainer::parseArgument< QString > | ( | const QString | parameter, | |
const QString | value | |||
) | [inline, protected] |
Parses a property value from a string.
Parses a QString containing the value for a property (mainly useful when initializing it from the command line). QVPropertyContainer implements a series of default parsers (namely for bool, int, double and QString properties). But the method is templatized to allow customization of the parsed QString, if we wish to add new parameter types in the subclasses. In that case, users should specialize the corresponding template this way:
template <> bool MyDerivedQVPropertyContainer::parseArgument<MyType>(const QString parameter, const QString value) { bool ok; MyType myVar1 = myParserForMyType1(value,&ok); if(ok) { // parsing OK setPropertyValue<MyType>(parameter,myVar1); return TRUE; } else { // parsing failed QString errorString = "MyDerivedQVPropertyContainer::parseArgument(): holder " + getName() + ": value " + value + " is not a valid MyType value for parameter " + parameter + ".\n"; setLastError(errorString); return FALSE; } }
--
[holder:]<name>=<value> parameter | The name of the property to be set. | |
value | QString from which to obtain the value. |
Definition at line 774 of file qvpropertycontainer.h.
void QVPropertyContainer::setLastError | ( | QString | str | ) | const [protected] |
Sets an error string message.
Sets an error string message corresponding to the last error that occurred in an operation on the QVPropertyContainer (if such an error occurred). If no error occurred since the creation of the object, the string will be empty. The method is const because it only modifies the error message (which is mutable), not the object itself.
Definition at line 606 of file qvpropertycontainer.cpp.
Referenced by getPropertyMaximum(), getPropertyMinimum(), and linkProperty().
uint QVPropertyContainer::inputPropertyWorker | ( | QString | prop | ) | const [inline, protected] |
Obtain the origin worker's id of a input property.
Obtain the origin worker's id of a input property.
Definition at line 636 of file qvpropertycontainer.h.