Computer Assisted Medical Intervention Tool Kit  version 6.0
Loading...
Searching...
No Matches
camitk::PersistenceManager Class Reference

#include <PersistenceManager.h>

Static Public Member Functions

static QVariant fromProperties (const QObject *)
 Convert the properties of a QObject to a QVariant.
static QUuid getUuidFromProperties (const QObject *)
 Gets the UUID of a QObject.
static void loadProperties (QObject *, QVariant)
 Sets the properties of a QObject from a QVariant.
static bool loadWorkspace (QString filepath)
 Loads the whole Application workspace from a CamiTK file.
static bool saveWorkspace (QString filepath)
 Save the whole Application workspace including components, settings (e.g.
static bool setUuidInProperties (QObject *, QUuid)
 Sets the UUID of a QObject.
static void updateVariantValueWhilePreservingType (QVariant &variant, QVariant &newValue, QString name="")
 Update the variant value while trying to preserve its type.

Static Protected Member Functions

static QVariant fromComponents (QList< Component * >, QDir rootPath)
 Converts component's filename and properties to QVariant.
static bool loadComponents (QVariant, QDir rootPath)
 Loads/Open the components from the QVariant and update the property values accordingly.
static QVariant stringToVariant (QString value)
 returns a valid QVariant for specific types corresponding to a specific string representation
static QString variantToString (const QVariant &variant)
 returns a specific string representation of (limited list of) some specific QVariant types

Member Function Documentation

◆ fromComponents()

QVariant camitk::PersistenceManager::fromComponents ( QList< Component * > comps,
QDir rootPath )
staticprotected

Converts component's filename and properties to QVariant.

Note
The filename is converted to a relative path using the rootPath parameter
Parameters
rootPathFilenames of the components will be stored relative to this path (if rootPath is /tmp, filename /tmp/test/t.obj will be saved as test/t.obj)

Referenced by saveWorkspace().

◆ fromProperties()

QVariant camitk::PersistenceManager::fromProperties ( const QObject * qobj)
static

Convert the properties of a QObject to a QVariant.

This function is used to easily implement PersistenceInterface for a custom class that derives from QObject and uses its property system. It reads the object's properties and returns them in a QVariant

References camitk::Property::getProperty(), camitk::Property::getReadOnly(), and variantToString().

Referenced by saveWorkspace(), camitk::Action::toVariant(), and camitk::Component::toVariant().

◆ getUuidFromProperties()

QUuid camitk::PersistenceManager::getUuidFromProperties ( const QObject * qobj)
static

Gets the UUID of a QObject.

This function is used to easily implement PersistenceInterface for a custom class that derives from QObject and uses its property system to store its unique identifier (QUuid). If the object does not have the "uuid" property, this returns an invalid QUuid

Referenced by camitk::Component::getUuid().

◆ loadComponents()

bool camitk::PersistenceManager::loadComponents ( QVariant comps,
QDir rootPath )
staticprotected

Loads/Open the components from the QVariant and update the property values accordingly.

Parameters
rootPaththe root path to decipher the filename (which should be relative)
Returns
false if and only if the QVariant is not a list of components.

References CAMITK_WARNING_ALT, camitk::Component::fromVariant(), and camitk::Application::open().

Referenced by loadWorkspace().

◆ loadProperties()

void camitk::PersistenceManager::loadProperties ( QObject * qobj,
QVariant props )
static

Sets the properties of a QObject from a QVariant.

This function is used to easily implement PersistenceInterface for a custom class that derives from QObject and uses its property system. It sets the properties of the object from the content of a QVariant.

References updateVariantValueWhilePreservingType().

Referenced by camitk::Action::fromVariant(), camitk::Component::fromVariant(), camitk::PropertyObject::fromVariant(), and loadWorkspace().

◆ loadWorkspace()

◆ saveWorkspace()

◆ setUuidInProperties()

bool camitk::PersistenceManager::setUuidInProperties ( QObject * qobj,
QUuid uuid )
static

Sets the UUID of a QObject.

This function is used to easily implement PersistenceInterface for a custom class that derives from QObject and uses its property system to store its unique identifier (QUuid). The UUID will be stored in the "uuid" property.

Warning
The uuid can only be set once to a non-null value
Returns
This returns true if the value was set, false if it was not

Referenced by camitk::Component::setUuid().

◆ stringToVariant()

QVariant camitk::PersistenceManager::stringToVariant ( QString value)
staticprotected

returns a valid QVariant for specific types corresponding to a specific string representation

This method use a specific string representation as produced by the variantToString(..) method to build a QVariant of the corresponding specific user type if possible.

The supported types are the same the one defined in the variantToString(..). See QSettings::stringToVariant https://codebrowser.dev/qt5/qtbase/src/corelib/io/qsettings.cpp.html#477

See also
variantToString(QVariant &variant)
Returns
If the parameter does not represent a supported QVariant (e.g. a normal QString), the method returns an invalid QVariant

Referenced by updateVariantValueWhilePreservingType().

◆ updateVariantValueWhilePreservingType()

void camitk::PersistenceManager::updateVariantValueWhilePreservingType ( QVariant & variant,
QVariant & newValue,
QString name = "" )
static

Update the variant value while trying to preserve its type.

This function updates the value of the given variant using the value of the newValue QVariant while preserving the QVariant type defined in variant (when possible). Note that name is informational only abd used for debug reason to print a more comprehensible message when preserving the type of variant is not possible.

Example: myVariant = QVariant<QUrl>("http://example.com"); newVariantValue = QVariant<QString>("http://newerexample.com"); updatePreservingType(myVariant, newVariantValue, "my url"); oldVariant is now a QUrl (not a QString) but with the new content "http://newerexample.com"

This is useful as saving to JSON might lose the type e.g. QUrl -> QString, QUuid -> QString

To properly restore variants (e.g. Property or Settings), without modifying the QVariant types, the type must be infered from the existing variant.

WARNING: if the given variant does not have the same structure as the newValue, data may not be copied. e.g. copying a QList<QString> into a QString will result in an empty QString.

References CAMITK_TRACE_ALT, stringToVariant(), and updateVariantValueWhilePreservingType().

Referenced by loadProperties(), and updateVariantValueWhilePreservingType().

◆ variantToString()

QString camitk::PersistenceManager::variantToString ( const QVariant & variant)
staticprotected

returns a specific string representation of (limited list of) some specific QVariant types

The value of QRect and QByteArray values cannot be recovered directly from a QString if some specific conversion are not taken care of. For instance, as JSON has 6 predefined data types many QVariant types will be stored as QString or cannot be handle specifically during serialization and deserialization.

This methods reproduces the same principle as QSettings in order to use specific strings for specific QVariant type.

See QSettings::variantToString method https://codebrowser.dev/qt5/qtbase/src/corelib/io/qsettings.cpp.html#395

As for now only the following types are supported

  • QRect
  • QByteArray

Referenced by fromProperties().


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