void BlockNavigationTreeWidget::addBlockNames()
{
	QStringList list = DataflowEngineManager::getInstance()->loadBundles();

	//QTreeWidgetItem* category = new QTreeWidgetItem(this);
	//category->setText( 0, QString("Bundles") );

	QList<QTreeWidgetItem *> blockItems;
	for( QStringList::const_iterator iter = list.constBegin(); iter != list.constEnd(); ++iter )
	{
		//QTreeWidgetItem *block = new QTreeWidgetItem( this);
		//block->setText(0, *iter );
		//blockItems.append(block);
		blockItems.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(*iter)));
	}

	insertTopLevelItems(0, blockItems);
	QStringList columnName;
	columnName  << "Elements";
	setHeaderLabels(columnName);

	//QList<QTreeWidgetItem *> ubercodeItems;
	//QTreeWidgetItem *block = new QTreeWidgetItem( this);


	//ubercodeItems.append( )


}
/**
 * @brief Este metodo muda a visualização da arvore de propriedades para
 * o desenho passado por parametro
 *
 * @param desenho - Desenho que sera visualizado
 */
void VisualizadorPropriedades::visualizaDesenho(Desenho *desenho)
{
    // Apaga visualização anterior
    /// @todo - Confirmar se o metodos clear() da QTreeWidget deleta os itens.
    clear();

    // Salva referencia para o desenho que esta snedo visualizado
    desenhoVisualizado = desenho;

    // Define o numero de colunas
    setColumnCount(2);

    // Define o cabeçalho
    QStringList cabecalho;
    cabecalho << QString("Propriedade") << QString("Valor");
    setHeaderLabels(cabecalho);

    if(desenho == 0x0)
        return;

    // Ponteiro temporario para apantar para algum item
    QTreeWidgetItem *item;

    // Uma lista temporaria de itens
    QList<QTreeWidgetItem *> items;

//    cout << "Atualizando visuzalizacao de propriedades" << endl;

    item = new QTreeWidgetItem((QTreeWidgetItem*)0x0,QStringList(QString("Desenho")));

    // Insere propriedades de um desenho
    inseriDesenho(item, desenho);

    items << item;

    // Insere propriedades especificas de cada desenho
    switch(desenho->tipoDesenho())
    {
        case TD_LUGAR:
            item = new QTreeWidgetItem((QTreeWidgetItem*)0x0,QStringList(QString("Lugar")));
            inseriLugar(item, (DLugar*) desenho);
        break;
        case TD_TRANSICAO:
            item = new QTreeWidgetItem((QTreeWidgetItem*)0x0,QStringList(QString("Transicao")));
            inseriTransicao(item, (DTransicao*) desenho);
        break;
        case TD_ARCO:
            item = new QTreeWidgetItem((QTreeWidgetItem*)0x0,QStringList(QString("Arco")));
            inseriArco(item, (DArco*) desenho);
        break;
        case TD_REDE_PETRI:
            item = new QTreeWidgetItem((QTreeWidgetItem*)0x0,QStringList(QString("Rede Petri")));
            inseriRedePetri(item, (DRedePetri*) desenho);
        break;
        default:
            item = 0x0;
        break;
        case TD_VARIAVEL_AMBIENTE:
            item = new QTreeWidgetItem((QTreeWidgetItem*)0x0,QStringList(QString("Variavel de Ambiemte")));
            inseriVariavelAmbiente(item , (DVariavelAmbiente*) desenho);
        break;
    }

    if(item)
        items << item;

    // Adiciona os itens na Arvore
    insertTopLevelItems(0,items);

    expandAll();
}
void GxsCommentTreeWidget::completeItems()
{
	/* handle pending items */
	RsGxsMessageId parentId;
	QTreeWidgetItem *parent = NULL;
	QList<QTreeWidgetItem *> topLevelItems;

	std::map<RsGxsMessageId, QTreeWidgetItem *>::iterator lit;
	std::multimap<RsGxsMessageId, QTreeWidgetItem *>::iterator pit;

	std::cerr << "GxsCommentTreeWidget::completeItems() " << mPendingInsertMap.size();
	std::cerr << " PendingItems";
	std::cerr << std::endl;

	for(pit = mPendingInsertMap.begin(); pit != mPendingInsertMap.end(); ++pit)
	{
		std::cerr << "GxsCommentTreeWidget::completeItems() item->parent: " << pit->first;
		std::cerr << std::endl;

		if (pit->first != parentId)
		{
			/* find parent */
			parentId = pit->first;
			lit = mLoadingMap.find(pit->first);
			if (lit != mLoadingMap.end())
			{
					parent = lit->second;
			}
			else
			{
					parent = NULL;
			}
		}

		if (parent)
		{
			std::cerr << "GxsCommentTreeWidget::completeItems() Added to Parent";
			std::cerr << std::endl;

			parent->addChild(pit->second);
		}
		else if (parentId == mThreadId.second)
		{
			std::cerr << "GxsCommentTreeWidget::completeItems() Added to topLevelItems";
			std::cerr << std::endl;

			topLevelItems.append(pit->second);
		}
		else
		{

			/* missing parent -> insert At Top Level */
			QTreeWidgetItem *missingItem = service_createMissingItem(pit->first);

			std::cerr << "GxsCommentTreeWidget::completeItems() Added MissingItem";
			std::cerr << std::endl;

			parent = missingItem;
			parent->addChild(pit->second);
			topLevelItems.append(parent);
		}
	}

	/* now push final tree into Tree */
	clear();
	insertTopLevelItems(0, topLevelItems);

	/* cleanup temp stuff */
	mLoadingMap.clear();
	mPendingInsertMap.clear();
}