void ProxyToolFactory::init(ProbeInterface *probe) { loadPlugin(); ToolFactory *fac = factory(); if (!fac) { return; } Q_ASSERT(fac); fac->init(probe); }
QVariant ObjectDynamicPropertyModel::data(const QModelIndex &index, int role) const { if (!m_obj) { return QVariant(); } const QList<QByteArray> propNames = m_obj.data()->dynamicPropertyNames(); if (index.row() < 0 || index.row() >= propNames.size()) { return QVariant(); } const QByteArray propName = propNames.at(index.row()); const QVariant propValue = m_obj.data()->property(propName); if (role == Qt::DisplayRole || role == Qt::EditRole) { if (index.column() == 0) { return QString::fromUtf8(propName); } else if (index.column() == 1) { return role == Qt::EditRole ? propValue : VariantHandler::displayString(propValue); } else if (index.column() == 2) { return propValue.typeName(); } else if (index.column() == 3) { return tr("<dynamic>"); } } else if (role == PropertyModel::ActionRole) { return PropertyModel::Delete | ((MetaObjectRepository::instance()->metaObject(propValue.typeName()) && *reinterpret_cast<void* const*>(propValue.data())) || propValue.value<QObject*>() ? PropertyModel::NavigateTo : PropertyModel::NoAction); } else if (role == PropertyModel::ValueRole) { return propValue; } else if (role == PropertyModel::AppropriateToolRole) { ToolModel *toolModel = Probe::instance()->toolModel(); ToolFactory *factory; if (propValue.canConvert<QObject*>()) factory = toolModel->data(toolModel->toolForObject(propValue.value<QObject*>()), ToolModelRole::ToolFactory).value<ToolFactory*>(); else factory = toolModel->data(toolModel->toolForObject(*reinterpret_cast<void* const*>(propValue.data()), propValue.typeName()), ToolModelRole::ToolFactory).value<ToolFactory*>(); if (factory) { return factory->name(); } return QVariant(); } return QVariant(); }
QVariant ToolPluginModel::data(const QModelIndex& index, int role) const { if (!index.isValid()) { return QVariant(); } const int row = index.row(); const int column = index.column(); if (role == Qt::DisplayRole) { ToolFactory *factory = m_tools[row]; switch (column) { case 0: return factory->id(); case 1: return factory->name(); case 2: return factory->supportedTypes(); } } return QVariant(); }
QVariant ClientToolModel::data(const QModelIndex& index, int role) const { if (role == ToolModelRole::ToolFactory || role == ToolModelRole::ToolWidget) { const QString toolId = RemoteModel::data(index, ToolModelRole::ToolId).toString(); if (toolId.isEmpty()) return QVariant(); if (role == ToolModelRole::ToolFactory) return QVariant::fromValue(m_factories.value(toolId)); if (role == ToolModelRole::ToolWidget) { const QHash<QString, QWidget*>::const_iterator it = m_widgets.constFind(toolId); if (it != m_widgets.constEnd()) return QVariant::fromValue(it.value()); ToolFactory *factory = m_factories.value(toolId); if (!factory) return QVariant(); QWidget *widget = factory->createWidget(0, m_parentWidget); m_widgets.insert(toolId, widget); return QVariant::fromValue(widget); } } return RemoteModel::data(index, role); }
QVariant ObjectStaticPropertyModel::data(const QModelIndex &index, int role) const { if (!index.isValid() || !m_obj || index.row() < 0 || index.row() >= m_obj.data()->metaObject()->propertyCount()) { return QVariant(); } const QMetaProperty prop = m_obj.data()->metaObject()->property(index.row()); const QVariant value = prop.read(m_obj.data()); if (role == Qt::DisplayRole) { if (index.column() == 0) { return prop.name(); } else if (index.column() == 1) { // QMetaProperty::read sets QVariant::typeName to int for enums, // so we need to handle that separately here const QString enumStr = Util::enumToString(value, prop.typeName(), m_obj.data()); if (!enumStr.isEmpty()) { return enumStr; } return VariantHandler::displayString(value); } else if (index.column() == 2) { return prop.typeName(); } else if (index.column() == 3) { const QMetaObject *mo = m_obj.data()->metaObject(); while (mo->propertyOffset() > index.row()) { mo = mo->superClass(); } return mo->className(); } } else if (role == Qt::DecorationRole) { if (index.column() == 1) { return VariantHandler::decoration(value); } } else if (role == Qt::EditRole) { if (index.column() == 1 && prop.isWritable()) { return value; } } else if (role == Qt::ToolTipRole) { return detailString(prop); } else if (role == PropertyModel::ActionRole) { return (prop.isResettable() ? PropertyModel::Reset : PropertyModel::NoAction) | ((MetaObjectRepository::instance()->metaObject(value.typeName()) && *reinterpret_cast<void* const*>(value.data())) || value.value<QObject*>() ? PropertyModel::NavigateTo : PropertyModel::NoAction); } else if (role == PropertyModel::ValueRole) { return value; } else if (role == PropertyModel::AppropriateToolRole) { ToolModel *toolModel = Probe::instance()->toolModel(); ToolFactory *factory; if (value.canConvert<QObject*>()) factory = toolModel->data(toolModel->toolForObject(value.value<QObject*>()), ToolModelRole::ToolFactory).value<ToolFactory*>(); else factory = toolModel->data(toolModel->toolForObject(*reinterpret_cast<void* const*>(value.data()), value.typeName()), ToolModelRole::ToolFactory).value<ToolFactory*>(); if (factory) { return factory->name(); } return QVariant(); } return QVariant(); }