Computer Assited Medical Intervention Tool Kit  version 4.1
Public Slots | Signals | Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes | List of all members
QtAbstractPropertyBrowser Class Referenceabstract

QtAbstractPropertyBrowser provides a base class for implementing property browsers. More...

#include <qtpropertybrowser.h>

Inherits QWidget.

Inherited by QtButtonPropertyBrowser, QtGroupBoxPropertyBrowser, and QtTreePropertyBrowser.

Public Slots

QtBrowserItemaddProperty (QtProperty *property)
 
QtBrowserIteminsertProperty (QtProperty *property, QtProperty *afterProperty)
 
void removeProperty (QtProperty *property)
 

Signals

void currentItemChanged (QtBrowserItem *)
 

Public Member Functions

void clear ()
 
QtBrowserItemcurrentItem () const
 
QList< QtBrowserItem * > items (QtProperty *property) const
 
QList< QtProperty * > properties () const
 
 QtAbstractPropertyBrowser (QWidget *parent=nullptr)
 
void setCurrentItem (QtBrowserItem *)
 
template<class PropertyManager >
void setFactoryForManager (PropertyManager *manager, QtAbstractEditorFactory< PropertyManager > *factory)
 
QtBrowserItemtopLevelItem (QtProperty *property) const
 
QList< QtBrowserItem * > topLevelItems () const
 
void unsetFactoryForManager (QtAbstractPropertyManager *manager)
 
 ~QtAbstractPropertyBrowser () override
 

Protected Member Functions

virtual QWidget * createEditor (QtProperty *property, QWidget *parent)
 
virtual void itemChanged (QtBrowserItem *item)=0
 
virtual void itemInserted (QtBrowserItem *item, QtBrowserItem *afterItem)=0
 
virtual void itemRemoved (QtBrowserItem *item)=0
 

Private Member Functions

bool addFactory (QtAbstractPropertyManager *abstractManager, QtAbstractEditorFactoryBase *abstractFactory)
 
 Q_PRIVATE_SLOT (d_func(), void slotPropertyInserted(QtProperty *, QtProperty *, QtProperty *)) Q_PRIVATE_SLOT(d_func()
 
void void slotPropertyDestroyed (QtProperty *)) Q_PRIVATE_SLOT(d_func()
 
void slotPropertyRemoved (QtProperty *, QtProperty *)) Q_PRIVATE_SLOT(d_func()
 

Private Attributes

QtAbstractPropertyBrowserPrivated_ptr
 

Detailed Description

QtAbstractPropertyBrowser provides a base class for implementing property browsers.

A property browser is a widget that enables the user to edit a given set of properties. Each property is represented by a label specifying the property's name, and an editing widget (e.g. a line edit or a combobox) holding its value. A property can have zero or more subproperties.

The top level properties can be retrieved using the properties() function. To traverse each property's subproperties, use the QtProperty::subProperties() function. In addition, the set of top level properties can be manipulated using the addProperty(), insertProperty() and removeProperty() functions. Note that the QtProperty class provides a corresponding set of functions making it possible to manipulate the set of subproperties as well.

To remove all the properties from the property browser widget, use the clear() function. This function will clear the editor, but it will not delete the properties since they can still be used in other editors.

The properties themselves are created and managed by implementations of the QtAbstractPropertyManager class. A manager can handle (i.e. create and manage) properties of a given type. In the property browser the managers are associated with implementations of the QtAbstractEditorFactory: A factory is a class able to create an editing widget of a specified type.

When using a property browser widget, managers must be created for each of the required property types before the properties themselves can be created. To ensure that the properties' values will be displayed using suitable editing widgets, the managers must be associated with objects of the preferred factory implementations using the setFactoryForManager() function. The property browser will use these associations to determine which factory it should use to create the preferred editing widget.

Note that a factory can be associated with many managers, but a manager can only be associated with one single factory within the context of a single property browser. The associations between managers and factories can at any time be removed using the unsetFactoryForManager() function.

Whenever the property data changes or a property is inserted or removed, the itemChanged(), itemInserted() or itemRemoved() functions are called, respectively. These functions must be reimplemented in derived classes in order to update the property browser widget. Be aware that some property instances can appear several times in an abstract tree structure. For example:

100%

QtProperty *property1, *property2, *property3;
property2->addSubProperty(property1);
property3->addSubProperty(property2);
editor->addProperty(property1);
editor->addProperty(property2);
editor->addProperty(property3);

The addProperty() function returns a QtBrowserItem that uniquely identifies the created item.

To make a property editable in the property browser, the createEditor() function must be called to provide the property with a suitable editing widget.

Note that there are two ready-made property browser implementations:

QtGroupBoxPropertyBrowser QtTreePropertyBrowser

See also
QtAbstractPropertyManager, QtAbstractEditorFactoryBase

Constructor & Destructor Documentation

◆ QtAbstractPropertyBrowser()

QtAbstractPropertyBrowser::QtAbstractPropertyBrowser ( QWidget *  parent = nullptr)
explicit

Creates an abstract property browser with the given parent.

References d_ptr, and QtAbstractPropertyBrowserPrivate::q_ptr.

◆ ~QtAbstractPropertyBrowser()

QtAbstractPropertyBrowser::~QtAbstractPropertyBrowser ( )
override

Destroys the property browser, and destroys all the items that were created by this property browser.

Note that the properties that were displayed in the editor are not deleted since they still can be used in other editors. Neither does the destructor delete the property managers and editor factories that were used by this property browser widget unless this widget was their parent.

See also
QtAbstractPropertyManager::~QtAbstractPropertyManager()

References QtAbstractPropertyBrowserPrivate::clearIndex(), d_ptr, and topLevelItems().

Member Function Documentation

◆ addFactory()

bool QtAbstractPropertyBrowser::addFactory ( QtAbstractPropertyManager abstractManager,
QtAbstractEditorFactoryBase abstractFactory 
)
private

◆ addProperty

QtBrowserItem * QtAbstractPropertyBrowser::addProperty ( QtProperty property)
slot

Appends the given property (and its subproperties) to the property browser's list of top level properties. Returns the item created by property browser which is associated with the property. In order to get all children items created by the property browser in this call, the returned item should be traversed.

If the specified property is already added, this function does nothing and returns 0.

See also
insertProperty(), QtProperty::addSubProperty(), properties()

References d_ptr, insertProperty(), and QtAbstractPropertyBrowserPrivate::m_subItems.

Referenced by ObjectControllerPrivate::addClassProperties(), camitk::ObjectControllerPrivate::addClassProperties(), camitk::ObjectControllerPrivate::addDynamicProperties(), MainWindow::addProperty(), and main().

◆ clear()

void QtAbstractPropertyBrowser::clear ( )

Removes all the properties from the editor, but does not delete them since they can still be used in other editors.

See also
removeProperty(), QtAbstractPropertyManager::clear()

References properties(), and removeProperty().

◆ createEditor()

QWidget * QtAbstractPropertyBrowser::createEditor ( QtProperty property,
QWidget *  parent 
)
protectedvirtual

Creates an editing widget (with the given parent) for the given property according to the previously established associations between property managers and editor factories.

If the property is created by a property manager which was not associated with any of the existing factories in this property editor, the function returns 0.

To make a property editable in the property browser, the createEditor() function must be called to provide the property with a suitable editing widget.

Reimplement this function to provide additional decoration for the editing widgets created by the installed factories.

See also
setFactoryForManager()

References QtAbstractEditorFactoryBase::createEditor().

Referenced by QtGroupBoxPropertyBrowserPrivate::createEditor(), QtButtonPropertyBrowserPrivate::createEditor(), and QtTreePropertyBrowserPrivate::createEditor().

◆ currentItem()

QtBrowserItem * QtAbstractPropertyBrowser::currentItem ( ) const

Returns the current item in the property browser.

See also
setCurrentItem()

References d_ptr, and QtAbstractPropertyBrowserPrivate::m_currentItem.

◆ currentItemChanged

void QtAbstractPropertyBrowser::currentItemChanged ( QtBrowserItem current)
signal

This signal is emitted when the current item changes. The current item is specified by current.

See also
QtAbstractPropertyBrowser::setCurrentItem()

Referenced by QtTreePropertyBrowser::QtTreePropertyBrowser(), and setCurrentItem().

◆ insertProperty

QtBrowserItem * QtAbstractPropertyBrowser::insertProperty ( QtProperty property,
QtProperty afterProperty 
)
slot

Inserts the given property (and its subproperties) after the specified afterProperty in the browser's list of top level properties. Returns item created by property browser which is associated with the property. In order to get all children items created by the property browser in this call returned item should be traversed.

If the specified afterProperty is 0, the given property is inserted at the beginning of the list. If property is already inserted, this function does nothing and returns 0.

See also
addProperty(), QtProperty::insertSubProperty(), properties()

References QtAbstractPropertyBrowserPrivate::createBrowserIndexes(), d_ptr, QtAbstractPropertyBrowserPrivate::insertSubTree(), QtAbstractPropertyBrowserPrivate::m_subItems, properties(), and topLevelItem().

Referenced by addProperty().

◆ itemChanged()

void QtAbstractPropertyBrowser::itemChanged ( QtBrowserItem item)
protectedpure virtual

This function is called whenever a property's data changes, passing a pointer to the item of property as parameter.

This function must be reimplemented in derived classes in order to update the property browser widget whenever a property's name, tool tip, status tip, "what's this" text, value text or value icon changes.

Note that if the property browser contains several occurrences of the same property, this method will be called once for each occurrence (with a different item each time).

See also
QtProperty, items()

Implemented in QtTreePropertyBrowser, QtButtonPropertyBrowser, and QtGroupBoxPropertyBrowser.

◆ itemInserted()

void QtAbstractPropertyBrowser::itemInserted ( QtBrowserItem insertedItem,
QtBrowserItem precedingItem 
)
protectedpure virtual

This function is called to update the widget whenever a property is inserted or added to the property browser, passing pointers to the insertedItem of property and the specified precedingItem as parameters.

If precedingItem is 0, the insertedItem was put at the beginning of its parent item's list of subproperties. If the parent of insertedItem is 0, the insertedItem was added as a top level property of this property browser.

This function must be reimplemented in derived classes. Note that if the insertedItem's property has subproperties, this method will be called for those properties as soon as the current call is finished.

See also
insertProperty(), addProperty()

Implemented in QtTreePropertyBrowser, QtButtonPropertyBrowser, and QtGroupBoxPropertyBrowser.

◆ itemRemoved()

void QtAbstractPropertyBrowser::itemRemoved ( QtBrowserItem item)
protectedpure virtual

This function is called to update the widget whenever a property is removed from the property browser, passing the pointer to the item of the property as parameters. The passed item is deleted just after this call is finished.

If the the parent of item is 0, the removed item was a top level property in this editor.

This function must be reimplemented in derived classes. Note that if the removed item's property has subproperties, this method will be called for those properties just before the current call is started.

See also
removeProperty()

Implemented in QtTreePropertyBrowser, QtButtonPropertyBrowser, and QtGroupBoxPropertyBrowser.

◆ items()

QList< QtBrowserItem * > QtAbstractPropertyBrowser::items ( QtProperty property) const

Returns the property browser's list of all items associated with the given property.

There is one item per instance of the property in the browser.

See also
topLevelItem()

References d_ptr, and QtAbstractPropertyBrowserPrivate::m_propertyToIndexes.

◆ properties()

QList< QtProperty * > QtAbstractPropertyBrowser::properties ( ) const

Returns the property browser's list of top level properties.

To traverse the subproperties, use the QtProperty::subProperties() function.

See also
addProperty(), insertProperty(), removeProperty()

References d_ptr, and QtAbstractPropertyBrowserPrivate::m_subItems.

Referenced by clear(), insertProperty(), and removeProperty().

◆ Q_PRIVATE_SLOT()

QtAbstractPropertyBrowser::Q_PRIVATE_SLOT ( d_func()  ,
void   slotPropertyInsertedQtProperty *, QtProperty *, QtProperty * 
)
private

◆ removeProperty

void QtAbstractPropertyBrowser::removeProperty ( QtProperty property)
slot

Removes the specified property (and its subproperties) from the property browser's list of top level properties. All items that were associated with the given property and its children are deleted.

Note that the properties are not deleted since they can still be used in other editors.

See also
clear(), QtProperty::removeSubProperty(), properties()

References d_ptr, QtAbstractPropertyBrowserPrivate::m_subItems, properties(), QtAbstractPropertyBrowserPrivate::removeBrowserIndexes(), and QtAbstractPropertyBrowserPrivate::removeSubTree().

Referenced by clear(), ObjectController::setObject(), and camitk::ObjectController::setObject().

◆ setCurrentItem()

void QtAbstractPropertyBrowser::setCurrentItem ( QtBrowserItem item)

Sets the current item in the property browser to item.

See also
currentItem(), currentItemChanged()

References currentItemChanged(), d_ptr, and QtAbstractPropertyBrowserPrivate::m_currentItem.

◆ setFactoryForManager()

template<class PropertyManager >
void QtAbstractPropertyBrowser::setFactoryForManager ( PropertyManager *  manager,
QtAbstractEditorFactory< PropertyManager > *  factory 
)
inline

Connects the given manager to the given factory, ensuring that properties of the manager's type will be displayed with an editing widget suitable for their value.

For example:

QtDoublePropertyManager *doubleManager;
QtProperty *myInteger = intManager->addProperty();
QtProperty *myDouble = doubleManager->addProperty();
QtSpinBoxFactory *spinBoxFactory;
QtDoubleSpinBoxFactory *doubleSpinBoxFactory;
editor->setFactoryForManager(intManager, spinBoxFactory);
editor->setFactoryForManager(doubleManager, doubleSpinBoxFactory);
editor->addProperty(myInteger);
editor->addProperty(myDouble);

In this example the myInteger property's value is displayed with a QSpinBox widget, while the myDouble property's value is displayed with a QDoubleSpinBox widget.

Note that a factory can be associated with many managers, but a manager can only be associated with one single factory. If the given manager already is associated with another factory, the old association is broken before the new one established.

This function ensures that the given manager and the given factory are compatible, and it automatically calls the QtAbstractEditorFactory::addPropertyManager() function if necessary.

See also
unsetFactoryForManager()

References QtAbstractEditorFactory< PropertyManager >::addPropertyManager().

Referenced by main(), MainWindow::MainWindow(), ObjectController::ObjectController(), and camitk::ObjectController::ObjectController().

◆ slotPropertyDestroyed()

void void QtAbstractPropertyBrowser::slotPropertyDestroyed ( QtProperty )
private

◆ slotPropertyRemoved()

void QtAbstractPropertyBrowser::slotPropertyRemoved ( QtProperty ,
QtProperty  
)
private

◆ topLevelItem()

QtBrowserItem * QtAbstractPropertyBrowser::topLevelItem ( QtProperty property) const

Returns the top-level items associated with the given property.

Returns 0 if property wasn't inserted into this property browser or isn't a top-level one.

See also
topLevelItems(), items()

References d_ptr, and QtAbstractPropertyBrowserPrivate::m_topLevelPropertyToIndex.

Referenced by insertProperty().

◆ topLevelItems()

QList< QtBrowserItem * > QtAbstractPropertyBrowser::topLevelItems ( ) const

Returns the list of top-level items.

See also
topLevelItem()

References d_ptr, and QtAbstractPropertyBrowserPrivate::m_topLevelIndexes.

Referenced by MainWindow::updateExpandState(), and ~QtAbstractPropertyBrowser().

◆ unsetFactoryForManager()

void QtAbstractPropertyBrowser::unsetFactoryForManager ( QtAbstractPropertyManager manager)

Removes the association between the given manager and the factory bound to it, automatically calling the QtAbstractEditorFactory::removePropertyManager() function if necessary.

See also
setFactoryForManager()

References QtAbstractEditorFactoryBase::breakConnection().

Referenced by addFactory().

Member Data Documentation

◆ d_ptr

QtAbstractPropertyBrowserPrivate* QtAbstractPropertyBrowser::d_ptr
private

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