From 0b807eba97e65bf9e25f83387826ef2579b79c90 Mon Sep 17 00:00:00 2001 From: Arno Date: Sat, 26 Jun 2010 15:24:00 +0200 Subject: 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. --- archivetreeview.cpp | 48 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) (limited to 'archivetreeview.cpp') diff --git a/archivetreeview.cpp b/archivetreeview.cpp index 211aa37..d77f8e3 100644 --- a/archivetreeview.cpp +++ b/archivetreeview.cpp @@ -20,8 +20,14 @@ #include "filestreewidget.h" #include "filestreemodel.h" #include "seriestreemodel.h" +#include "mappingtablewidget.h" +#include "mappingtablemodel.h" ArchiveTreeView::ArchiveTreeView(QWidget *parent) : QWidget(parent){ + // models + mActorsModel = static_cast(SmModelSingleton::instance()->model("actors")); + mGenresModel = static_cast(SmModelSingleton::instance()->model("genres")); + // series view mSeriesWidget = new SeriesTreeWidget; QItemSelectionModel *selModel = mSeriesWidget->seriesTree()->selectionModel(); @@ -36,11 +42,29 @@ ArchiveTreeView::ArchiveTreeView(QWidget *parent) : QWidget(parent){ mFilesWidget->filesTree()->setColumnHidden(i, true); } + // actors and genre + QWidget *genreActorWidget = new QWidget; + QHBoxLayout *genreActorLayout = new QHBoxLayout; + mActorsWidget = new MappingTableWidget("actors"); + mGenresWidget = new MappingTableWidget("genres"); + genreActorLayout->addWidget(mActorsWidget); + genreActorLayout->addWidget(mGenresWidget); + genreActorWidget->setLayout(genreActorLayout); + + // fileview, actors and genres + QSplitter *verticalSplitter = new QSplitter(Qt::Vertical); + verticalSplitter->addWidget(mFilesWidget); + verticalSplitter->addWidget(genreActorWidget); + verticalSplitter->setStretchFactor(0, 3); + verticalSplitter->setStretchFactor(1, 1); + // layout QHBoxLayout *mainLayout = new QHBoxLayout; QSplitter *splitter = new QSplitter; splitter->addWidget(mSeriesWidget); - splitter->addWidget(mFilesWidget); + splitter->addWidget(verticalSplitter); + splitter->setStretchFactor(0, 2); + splitter->setStretchFactor(1, 3); mainLayout->addWidget(splitter); setLayout(mainLayout); } @@ -83,4 +107,26 @@ void ArchiveTreeView::currentChanged(const QItemSelection &selected, const QItem mFilesWidget->filesTree()->resizeColumnToContents(1); mFilesWidget->filesTree()->resizeColumnToContents(2); mFilesWidget->filesTree()->resizeColumnToContents(3); + setMappingItems(selectedPartIds, mActorsModel, mActorsWidget); + setMappingItems(selectedPartIds, mGenresModel, mGenresWidget); +} + +void ArchiveTreeView::setMappingItems(QListseriesPartIds, MappingTableModel *model, MappingTableWidget *widget){ + QStringList items; + foreach(int id, seriesPartIds){ + QList actorNames = model->mappings(id); + foreach(QVariant v, actorNames){ + if(!items.contains(v.toString())){ + items << v.toString(); + } + } + } + qSort(items); + widget->setStringList(items); + widget->setEditEnabled(seriesPartIds.count() == 1); + if(seriesPartIds.count() == 1){ + widget->setCurrentId(seriesPartIds.at(0)); + }else{ + widget->setCurrentId(-1); + } } -- cgit v1.2.3-70-g09d2