bool ValueExtension::setData( const QModelIndex &index, const QVariant &value, int role ) { size_t roleId; if (!decodeRole( role, roleId )) { return false; } assert( index.isValid() ); auto item = reinterpret_cast< IItem * >( index.internalPointer() ); if (item == nullptr) { return false; } auto column = index.column(); if (roleId == ValueRole::roleId_ || roleId == DefinitionRole::roleId_) { auto oldValue = QtHelpers::toQVariant( item->getData( column, roleId ), const_cast<QAbstractItemModel*>(index.model())); if (value == oldValue) { return true; } auto data = QtHelpers::toVariant( value ); return item->setData( column, roleId, data ); } return false; }
QVariant ComponentExtension::data( const QModelIndex &index, int role ) const { size_t roleId; if (!decodeRole( role, roleId )) { return QVariant( QVariant::Invalid ); } if (roleId != ItemRole::componentId) { return QVariant( QVariant::Invalid ); } auto data = index.model()->data( index, ItemRole::valueTypeId ); auto typeName = std::string( data.toString().toUtf8() ); auto typeId = TypeId( typeName.c_str() ); std::function< bool ( size_t ) > predicate = [&] ( size_t role ) { return index.model()->data( index, static_cast< int >( role ) ) == true; }; auto component = qtFramework_->findComponent( typeId, predicate ); if (component == nullptr) { return QVariant( QVariant::Invalid ); } auto qmlComponent = qtFramework_->toQmlComponent( *component ); if (qmlComponent == nullptr) { return QVariant( QVariant::Invalid ); } return QVariant::fromValue< QObject * >( qmlComponent ); }
void ValueExtension::onDataChanged( const QModelIndex &index, int role, const QVariant &value ) { auto model = index.model(); assert( model != nullptr ); size_t roleId; if (!decodeRole( role, roleId )) { return; } if (roleId == ValueRole::roleId_ || roleId == DefinitionRole::roleId_) { QVector<int> roles; roles.append( role ); emit const_cast< QAbstractItemModel * >( model )->dataChanged( index, index, roles ); } if (roleId == DefinitionRole::roleId_) { QList<QPersistentModelIndex> parents; parents.append( index ); emit const_cast< QAbstractItemModel * >( model )->layoutChanged( parents, QAbstractItemModel::VerticalSortHint ); } }
QVariant ButtonsDefinitionExtension::data(const QModelIndex& index, int role) const { ItemRole::Id roleId; if (!decodeRole(role, roleId)) { return QVariant(); } TF_ASSERT(index.isValid()); IItem* item = reinterpret_cast<IItem*>(index.internalPointer()); if (item == nullptr || roleId != buttonsDefinitionRole::roleId_) { return QVariant(); } return get<IQtHelpers>()->toQVariant(item->getData(index.column(), roleId), nullptr); }
QVariant ValueExtension::data( const QModelIndex &index, int role ) const { size_t roleId; if (!decodeRole( role, roleId )) { return QVariant( QVariant::Invalid ); } assert( index.isValid() ); auto item = reinterpret_cast< IItem * >( index.internalPointer() ); if (item == nullptr) { return false; } auto column = index.column(); if (roleId == ValueRole::roleId_ || roleId == ValueTypeRole::roleId_ || roleId == ObjectRole::roleId_ || roleId == RootObjectRole::roleId_ || roleId == IndexPathRole::roleId_ || roleId == KeyRole::roleId_ || roleId == KeyTypeRole::roleId_ || roleId == MinValueRole::roleId_ || roleId == MaxValueRole::roleId_ || roleId == StepSizeRole::roleId_ || roleId == DecimalsRole::roleId_ || roleId == EnumModelRole::roleId_ || roleId == DefinitionRole::roleId_ || roleId == DefinitionModelRole::roleId_ || roleId == UrlIsAssetBrowserRole::roleId_ || roleId == UrlDialogTitleRole::roleId_ || roleId == UrlDialogDefaultFolderRole::roleId_ || roleId == UrlDialogNameFiltersRole::roleId_ || roleId == UrlDialogSelectedNameFilterRole::roleId_ || roleId == UrlDialogModalityRole::roleId_ || roleId == IsReadOnlyRole::roleId_) { return QtHelpers::toQVariant( item->getData( column, roleId ), const_cast<QAbstractItemModel*>(index.model())); } return QVariant( QVariant::Invalid ); }