Example #1
0
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;
}
Example #2
0
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 );
}
Example #3
0
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);
}
Example #5
0
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 );
}