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 /archivetreeview.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 'archivetreeview.cpp')
-rw-r--r-- | archivetreeview.cpp | 48 |
1 files changed, 47 insertions, 1 deletions
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<MappingTableModel*>(SmModelSingleton::instance()->model("actors")); + mGenresModel = static_cast<MappingTableModel*>(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(QList<int>seriesPartIds, MappingTableModel *model, MappingTableWidget *widget){ + QStringList items; + foreach(int id, seriesPartIds){ + QList<QVariant> 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); + } } |