void QgsDbTableModel::addTableEntry( QString type, QString schemaName, QString tableName, QString geometryColName, QString sql ) { //is there already a root item with the given scheme Name? QStandardItem* schemaItem; QList<QStandardItem*> schemaItems = findItems( schemaName, Qt::MatchExactly, 0 ); //there is already an item for this schema if ( schemaItems.size() > 0 ) { schemaItem = schemaItems.at( 0 ); } else //create a new toplevel item for this schema { schemaItem = new QStandardItem( schemaName ); schemaItem->setFlags( Qt::ItemIsEnabled ); invisibleRootItem()->setChild( invisibleRootItem()->rowCount(), schemaItem ); } //path to icon for specified type QString typeName; QGis::WkbType wkbType = qgisTypeFromDbType( type ); QIcon iconFile = iconForType( wkbType ); QList<QStandardItem*> childItemList; QStandardItem* schemaNameItem = new QStandardItem( schemaName ); schemaNameItem->setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable ); QStandardItem* typeItem = new QStandardItem( QIcon( iconFile ), type ); typeItem->setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable ); QStandardItem* tableItem = new QStandardItem( tableName ); tableItem->setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable ); QStandardItem* geomItem = new QStandardItem( geometryColName ); geomItem->setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable ); QStandardItem* sqlItem = new QStandardItem( sql ); sqlItem->setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable ); childItemList.push_back( schemaNameItem ); childItemList.push_back( tableItem ); childItemList.push_back( typeItem ); childItemList.push_back( geomItem ); childItemList.push_back( sqlItem ); schemaItem->appendRow( childItemList ); ++mTableCount; }
void QgsSpatiaLiteTableModel::addTableEntry( const QString& type, const QString& tableName, const QString& geometryColName, const QString& sql ) { //is there already a root item ? QStandardItem *dbItem; QList < QStandardItem * >dbItems = findItems( mSqliteDb, Qt::MatchExactly, 0 ); //there is already an item if ( !dbItems.isEmpty() ) { dbItem = dbItems.at( 0 ); } else //create a new toplevel item { dbItem = new QStandardItem( mSqliteDb ); dbItem->setFlags( Qt::ItemIsEnabled ); invisibleRootItem()->setChild( invisibleRootItem()->rowCount(), dbItem ); } //path to icon for specified type QgsWkbTypes::Type wkbType = qgisTypeFromDbType( type ); QIcon iconFile = iconForType( wkbType ); QList < QStandardItem * >childItemList; QStandardItem *typeItem = new QStandardItem( QIcon( iconFile ), type ); typeItem->setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable ); QStandardItem *tableItem = new QStandardItem( tableName ); tableItem->setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable ); QStandardItem *geomItem = new QStandardItem( geometryColName ); geomItem->setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable ); QStandardItem* sqlItem = new QStandardItem( sql ); sqlItem->setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable ); childItemList.push_back( tableItem ); childItemList.push_back( typeItem ); childItemList.push_back( geomItem ); childItemList.push_back( sqlItem ); dbItem->appendRow( childItemList ); ++mTableCount; }
void QgsSpatiaLiteTableModel::setGeometryTypesForTable( const QString & table, const QString & attribute, const QString & type ) { bool typeIsEmpty = type.isEmpty(); //true means the table has no valid geometry entry and the item for this table should be removed QStringList typeList = type.split( ',' ); //find schema item and table item QStandardItem *dbItem; QList < QStandardItem * >dbItems = findItems( mSqliteDb, Qt::MatchExactly, 0 ); if ( dbItems.size() < 1 ) { return; } dbItem = dbItems.at( 0 ); int numChildren = dbItem->rowCount(); QModelIndex currentChildIndex; QModelIndex currentTableIndex; QModelIndex currentTypeIndex; QModelIndex currentGeomColumnIndex; for ( int i = 0; i < numChildren; ++i ) { currentChildIndex = indexFromItem( dbItem->child( i, 0 ) ); if ( !currentChildIndex.isValid() ) { continue; } currentTableIndex = currentChildIndex.sibling( i, 1 ); currentTypeIndex = currentChildIndex.sibling( i, 2 ); currentGeomColumnIndex = currentChildIndex.sibling( i, 3 ); QString geomColText = itemFromIndex( currentGeomColumnIndex )->text(); if ( !currentTypeIndex.isValid() || !currentTableIndex.isValid() || !currentGeomColumnIndex.isValid() ) { continue; } if ( itemFromIndex( currentTableIndex )->text() == table && ( geomColText == attribute || geomColText.startsWith( attribute + " AS " ) ) ) { if ( typeIsEmpty ) { removeRow( i, indexFromItem( dbItem ) ); return; } QgsWkbTypes::Type wkbType = qgisTypeFromDbType( typeList.at( 0 ) ); QIcon myIcon = iconForType( wkbType ); itemFromIndex( currentTypeIndex )->setText( typeList.at( 0 ) ); //todo: add other rows itemFromIndex( currentTypeIndex )->setIcon( myIcon ); if ( !geomColText.contains( " AS " ) ) { itemFromIndex( currentGeomColumnIndex )->setText( geomColText + " AS " + typeList.at( 0 ) ); } for ( int j = 1; j < typeList.size(); ++j ) { //todo: add correct type addTableEntry( typeList.at( j ), table, geomColText + " AS " + typeList.at( j ), "" ); } } } }