56 lines
1.2 KiB
C++
56 lines
1.2 KiB
C++
#include "ResourceObserver.h"
|
|
|
|
#include <QDebug>
|
|
|
|
#include "Resource.h"
|
|
|
|
static const char *defaultPropertyForTarget(QObject *target)
|
|
{
|
|
if (target->inherits("QLabel"))
|
|
{
|
|
return "pixmap";
|
|
}
|
|
else if (target->inherits("QAction") ||
|
|
target->inherits("QMenu") ||
|
|
target->inherits("QAbstractButton"))
|
|
{
|
|
return "icon";
|
|
}
|
|
// for unit tests
|
|
else if (target->inherits("DummyObserverObject"))
|
|
{
|
|
return "property";
|
|
}
|
|
else
|
|
{
|
|
Q_ASSERT_X(false, "ResourceObserver.cpp: defaultPropertyForTarget", "Unrecognized QObject subclass");
|
|
return nullptr;
|
|
}
|
|
}
|
|
|
|
QObjectResourceObserver::QObjectResourceObserver(QObject *target, const char *property)
|
|
: QObject(target), m_target(target)
|
|
{
|
|
const QMetaObject *mo = m_target->metaObject();
|
|
m_property = mo->property(mo->indexOfProperty(
|
|
property ?
|
|
property
|
|
: defaultPropertyForTarget(target)));
|
|
}
|
|
void QObjectResourceObserver::resourceUpdated()
|
|
{
|
|
m_property.write(m_target, getInternal(m_property.type()));
|
|
}
|
|
|
|
|
|
ResourceObserver::~ResourceObserver()
|
|
{
|
|
m_resource->notifyObserverDeleted(this);
|
|
}
|
|
|
|
QVariant ResourceObserver::getInternal(const int typeId) const
|
|
{
|
|
Q_ASSERT(m_resource);
|
|
return m_resource->getResourceInternal(typeId);
|
|
}
|