Example #1
0
QVariant IdListHelper::toVariant(IdList const &list)
{
	QVariant v;
	v.setValue(list);
	return v;
}
Example #2
0
AttributeAccessDlg::AttributeAccessDlg( const QString& title, RTT::SDK::IAttributeAccessPtr attrAccess, RTT::SDK::IObjectFactoryPtr pObjFactory )
: m_attrAccess( attrAccess )
, m_pObjFactory( pObjFactory )
{
	setWindowTitle( title );
	resize( 600, 500);
	using namespace RTT::SDK;
	QVBoxLayout *layout = new QVBoxLayout();
	m_tree = new QTreeWidget();

	m_openAttrAccessDlg = new QPushButton("Attribute Access");
	m_openMetaDataDlg = new QPushButton("Metadata");

	QStringList headerLabels;

	headerLabels.push_back(QString("Name"));
	headerLabels.push_back(QString("Value"));
	headerLabels.push_back(QString("Type"));

	m_tree->setHeaderLabels(headerLabels);

	IObjectEnumerationPtr names = attrAccess->GetAttributeNames();
	if ( names.isEmpty() )
	{
		return;
	}
	for (size_t i=0; i<names->GetItemCount(); ++i)
	{
		RTT::SDK::IStringPtr name = rtt::commons::dynamic_ptr_cast<RTT::SDK::IString>( names->GetItem(i)->QueryInterface( RTT::SDK::IID_IString ) );
		DispVariant valVar = attrAccess->GetAttributeValue(name);
		QStringList columns;
		columns.push_back(RTT_SDK_UTF8(name));
		try
		{
			if ( valVar.m_type == RTT::SDK::DispVariant::TP_IUNKNOWN )
			{
				RTT::SDK::IVariantListPtr list = RTT::SDK::interface_cast<RTT::SDK::IVariantList>(valVar.m_pIUnknown);
				if ( !list.isEmpty() )
				{
					QString text;
					size_t numItems = list->GetItemCount();
					for( size_t n = 0; n<numItems; n++ )
					{
						DispVariant itemVal = list->GetItem( n );
						text += QString("%1;").arg(rttDispTypeConversion(itemVal).toCString());
					}
					columns.push_back( text );
				}
				else
				{
					columns.push_back("Unknown type");
				}
			}
			else
			{
				switch(valVar.m_type)
				{
				case DispVariant::TP_FLOAT2:
					{
						RTT::SDK::FVec2 v2 = rttDispTypeConversion(valVar);
						columns.push_back(QString("[%1,%2]").arg(v2[0]).arg(v2[1]));
					}
				case DispVariant::TP_FLOAT3:
					{
						RTT::SDK::FVec3 v3 = rttDispTypeConversion(valVar);
						columns.push_back(QString("[%1,%2,%3]").arg(v3[0]).arg(v3[1]).arg(v3[2]));
					}
				case DispVariant::TP_FLOAT4:
					{
						RTT::SDK::FVec4 v4 = rttDispTypeConversion(valVar);
						columns.push_back(QString("[%1,%2,%3,%4]").arg(v4[0]).arg(v4[1]).arg(v4[2]).arg(v4[3]));
					}
				default:
					columns.push_back(rttDispTypeConversion(valVar).toCString());
				}
			}
		}
		catch(...)
		{
			columns.push_back("Invalid type");
		}
		columns.push_back( typeNames[valVar.m_type] );

		QTreeWidgetItem* pItem = new QTreeWidgetItem((QTreeWidget*)0, columns);
		QVariant var;
		try
		{
			var.setValue(rttDispTypeConversion(valVar).toIUnknown());
		}
		catch(...)
		{
			var.setValue(IUnknownPtr());
		}
		pItem->setData(0,Qt::UserRole,var);
		RTT::SDK::DispVariant::Type valueType = RTT::SDK::rttDispTypeConversion( valVar ).getType();
		if( valueType == RTT::SDK::DispVariant::TP_FLOAT ||
			valueType == RTT::SDK::DispVariant::TP_DOUBLE ||
			valueType == RTT::SDK::DispVariant::TP_LONG ||
			valueType == RTT::SDK::DispVariant::TP_ULONG ||
			valueType == RTT::SDK::DispVariant::TP_BOOL )
		{
			pItem->setFlags(pItem->flags() | Qt::ItemIsEditable);
		}
		m_tree->addTopLevelItem(pItem);
	}

	m_tree->header()->resizeSection(0,300);
	m_tree->header()->resizeSection(2,60);

	layout->addWidget(m_tree);
	layout->addWidget(m_openAttrAccessDlg);
	layout->addWidget( m_openMetaDataDlg);

	QObject::connect(m_openAttrAccessDlg , SIGNAL(clicked(bool)), this, SLOT(onAttributeAccessClicked()));
	QObject::connect(m_openMetaDataDlg , SIGNAL(clicked(bool)), this, SLOT(onMetaDataAccessClicked()));
	QObject::connect(m_tree , SIGNAL(itemChanged(QTreeWidgetItem*,int)), this, SLOT(onItemEdited(QTreeWidgetItem*,int)));

	setLayout(layout);
}
Example #3
0
QVariant Id::toVariant() const
{
	QVariant result;
	result.setValue(*this);
	return result;
}