diff options
author | Arno <am@disconnect.de> | 2010-06-26 15:24:00 +0200 |
---|---|---|
committer | Arno <am@disconnect.de> | 2010-06-26 15:24:00 +0200 |
commit | 0b807eba97e65bf9e25f83387826ef2579b79c90 (patch) | |
tree | 9a86166a4ebd77d95e9a26b723c49ebab417e337 /mappingtablemodel.cpp | |
parent | 6567a92bec5ca8b2bc6b7156bddc5ba8508f31b3 (diff) | |
download | SheMov-0b807eba97e65bf9e25f83387826ef2579b79c90.tar.gz SheMov-0b807eba97e65bf9e25f83387826ef2579b79c90.tar.bz2 SheMov-0b807eba97e65bf9e25f83387826ef2579b79c90.zip |
Actors and genre edit
Implemented widgets for actor and genre editing of movies. Created new
MappingTableWidget for both genres and actors and revamped
ArchiveTreeView to show 2 widgets below the FilesTreeView separated by a
splitter.
While testing the new setup several bugs were fixed:
-an SQL syntax error in FilesTreeModel
-fixed SmModelSingleton to properly work with table names
I also changed the signature of MappingTableModel::addMapping for the
ease of use and added MappingTableModel::removeMapping.
MappingTableModel got 2 new convenience functions:
1. bool contains(QString) to check if an item is already present
2. QModelIndex find() to get the index of a specific value from the
model.
Diffstat (limited to 'mappingtablemodel.cpp')
-rw-r--r-- | mappingtablemodel.cpp | 52 |
1 files changed, 39 insertions, 13 deletions
diff --git a/mappingtablemodel.cpp b/mappingtablemodel.cpp index 84c242a..ad569ee 100644 --- a/mappingtablemodel.cpp +++ b/mappingtablemodel.cpp @@ -33,7 +33,10 @@ MappingTableModel::MappingTableModel(QStringList &headers, const QString &table, QString addMappingQuery = QString("INSERT INTO %1 (iseriesparts_id, %2) VALUES (:id1, :id2)").arg(mMappingTable).arg(mIdColumnName); mAddMappingQuery = new QSqlQuery(mDb); mAddMappingQuery->prepare(addMappingQuery); - QString mappingQuery = QString("SELECT %1 FROM %2, %3 WHERE %1.%4 = %3.%4 AND %3.iseriesparts_id = :id").arg(mNameColumnName).arg(mTable).arg(mMappingTable).arg(mIdColumnName); + QString removeMappingQuery = QString("DELETE FROM %1 WHERE iseriesparts_id = :id1 AND %2 = :id2").arg(mMappingTable).arg(mIdColumnName); + mRemoveMappingQuery = new QSqlQuery(mDb); + mRemoveMappingQuery->prepare(removeMappingQuery); + QString mappingQuery = QString("SELECT %1 FROM %2, %3 WHERE %2.%4 = %3.%4 AND %3.iseriesparts_id = :id").arg(mNameColumnName).arg(mTable).arg(mMappingTable).arg(mIdColumnName); mMappingQuery = new QSqlQuery(mDb); mMappingQuery->prepare(mappingQuery); @@ -46,6 +49,7 @@ MappingTableModel::~MappingTableModel(){ delete mInsertItemQuery; delete mDeleteItemQuery; delete mAddMappingQuery; + delete mRemoveMappingQuery; delete mMappingQuery; mDb = QSqlDatabase(); } @@ -98,6 +102,24 @@ bool MappingTableModel::setData(const QModelIndex &index, const QVariant &value, return false; } +bool MappingTableModel::contains(const QString &value) const{ + return mItemNames.contains(value); +} + +QModelIndex MappingTableModel::find(const QVariant &value, int column, const QModelIndex &parent) const{ + SmTreeItem *parentItem = root(); + if(parent.isValid()){ + parentItem = static_cast<SmTreeItem*>(parent.internalPointer()); + } + for(int i = 0; i < parentItem->childCount(); ++i){ + SmTreeItem *cur = parentItem->child(i); + if(cur->data(column) == value){ + return index(i, column, parent); + } + } + return QModelIndex(); +} + bool MappingTableModel::addItem(const QVariant &name){ QString newValue = name.toString().toLower().trimmed(); if(mItemNames.contains(newValue)){ @@ -138,22 +160,24 @@ bool MappingTableModel::removeItem(const QModelIndex &idx){ return false; } -bool MappingTableModel::addMapping(int seriesId, const QList<int> &itemIds){ - if(itemIds.isEmpty()){ - return false; - } +bool MappingTableModel::addMapping(int seriesId, int itemId){ mDb.transaction(); - foreach(int id, itemIds){ - mAddMappingQuery->bindValue(":id1", seriesId); - mAddMappingQuery->bindValue(":id2", id); - if(!mAddMappingQuery->exec()){ - mDb.rollback(); - return false; - } + mAddMappingQuery->bindValue(":id1", seriesId); + mAddMappingQuery->bindValue(":id2", itemId); + if(!mAddMappingQuery->exec()){ + mDb.rollback(); + return false; } + mDb.commit(); return true; } +bool MappingTableModel::removeMapping(int seriesId, int itemId){ + mRemoveMappingQuery->bindValue(":id1", seriesId); + mRemoveMappingQuery->bindValue(":id2", itemId); + return mRemoveMappingQuery->exec(); +} + QList<QVariant> MappingTableModel::mappings(int seriesId){ QList<QVariant> retval; mMappingQuery->bindValue(":id", seriesId); @@ -167,7 +191,9 @@ QList<QVariant> MappingTableModel::mappings(int seriesId){ void MappingTableModel::populate(){ QString query = QString("SELECT %1, %2 FROM %3 ORDER BY %2").arg(mIdColumnName).arg(mNameColumnName).arg(mTable); - SmTreeItem *root = new SmTreeItem(2); + QList<QVariant> rootData; + rootData << QString(tr("%1 name")).arg(mTable) << tr("Id"); + SmTreeItem *root = new SmTreeItem(rootData); QSqlQuery dataQuery(query, mDb); while(dataQuery.next()){ QList<QVariant> data; |