summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--archivemodel.cpp60
-rw-r--r--archivemodel.h7
-rw-r--r--archiveview.cpp11
3 files changed, 48 insertions, 30 deletions
diff --git a/archivemodel.cpp b/archivemodel.cpp
index 3379d67..5c3cb49 100644
--- a/archivemodel.cpp
+++ b/archivemodel.cpp
@@ -12,14 +12,14 @@
ArchiveModel::ArchiveModel(const QStringList &headers, QObject *parent) : SmTreeModel(headers, parent), mOrder(SeriesName){
mDb = QSqlDatabase::database("treedb");
- mAvailableOrders.insert(SeriesName, "Series Name");
- mAvailableOrders.insert(Actor, "Actor");
- mAvailableOrders.insert(Genre, "Genre");
+ mAvailableOrders.insert("Series Name", SeriesName);
+ mAvailableOrders.insert("Actor", Actor);
+ mAvailableOrders.insert("Genre", Genre);
setOrder(mOrder);
}
const QStringList ArchiveModel::availableOrders() const {
- QStringList retval = mAvailableOrders.values();
+ QStringList retval = mAvailableOrders.keys();
qSort(retval);
return retval;
}
@@ -31,7 +31,7 @@ QVariant ArchiveModel::data(const QModelIndex &index, int role) const{
int part = item->data(SeriesPart).toInt();
int childCount = item->data(Count).toInt();
int nodeType = item->data(Type).toInt();
- if(nodeType == SeriesNode){
+ if(nodeType == SeriesNode || nodeType == GenreNode || nodeType == ActorNode){
retval = QString("%1 (%2)").arg(item->data(Name).toString()).arg(QString::number(childCount));
}else if(nodeType == SeriesPartNode){
if(part > 0){
@@ -42,6 +42,8 @@ QVariant ArchiveModel::data(const QModelIndex &index, int role) const{
retval = QString("%1 - %2").arg(item->data(Name).toString()).arg(item->data(Subtitle).toString());
}
}
+ }else{
+ retval = item->data(Name).toString();
}
return retval;
}
@@ -55,6 +57,7 @@ QVariant ArchiveModel::data(const QModelIndex &index, int role) const{
}
void ArchiveModel::setOrder(int order) {
+ mOrder = order;
switch (order) {
case SeriesName:
populateBySeriesName();
@@ -70,10 +73,18 @@ void ArchiveModel::setOrder(int order) {
}
}
+void ArchiveModel::setOrder(const QString &order){
+ int orderNum = mAvailableOrders.value(order);
+ setOrder(orderNum);
+}
+
void ArchiveModel::populateBySeriesName() {
SmTreeItem *rootItem = new SmTreeItem(NumFields);
+ fetchChildren(rootItem);
fetchSeries(QVariant(), rootItem);
- fetchParts(rootItem);
+ for(int i = 0; i < rootItem->childCount(); ++i){
+ fetchParts(QVariant(), rootItem->child(i));
+ }
setRoot(rootItem);
}
@@ -105,10 +116,10 @@ void ArchiveModel::populateByActor(){
void ArchiveModel::fetchChildren(SmTreeItem *parent){
for(int i = 0; i < parent->childCount(); ++i){
- fetchSeries(parent->child(i)->data(SeriesId), parent->child(i));
+ fetchSeries(parent->child(i)->data(GenericId), parent->child(i));
for(int j = 0; j < parent->child(i)->childCount(); ++j){
SmTreeItem *seriesItem = parent->child(i)->child(j);
- fetchParts(seriesItem);
+ fetchParts(parent->child(i)->data(GenericId), seriesItem);
}
}
}
@@ -145,19 +156,26 @@ void ArchiveModel::fetchSeries(const QVariant &id, SmTreeItem *parent){
}
-void ArchiveModel::fetchParts(SmTreeItem *parent){
+void ArchiveModel::fetchParts(const QVariant &id, SmTreeItem *parent){
QSqlQuery partsQuery(mDb);
- partsQuery.prepare("SELECT iseriesparts_id, iseriespart, bfavorite, tsubtitle FROM seriesparts WHERE iseries_id = :id ORDER BY iseriespart");
- for(int i = 0; i < parent->childCount(); ++i){
- QVariant id = parent->child(i)->data(SeriesId);
- partsQuery.bindValue(":id", id);
- partsQuery.exec();
- while(partsQuery.next()){
- QList<QVariant> partData;
- partData << parent->child(i)->data(Name) << parent->child(i)->data(SeriesId) << partsQuery.value(0) << partsQuery.value(1) << SeriesPartNode << partsQuery.value(2) << partsQuery.value(3) << QVariant();
- SmTreeItem *partItem = new SmTreeItem(partData, parent->child(i));
- parent->child(i)->appendChild(partItem);
- }
- parent->child(i)->setData(Count, parent->child(i)->childCount());
+ if(mOrder == SeriesName){
+ partsQuery.prepare("SELECT iseriesparts_id, iseriespart, bfavorite, tsubtitle FROM seriesparts WHERE iseries_id = :id ORDER BY iseriespart");
+ partsQuery.bindValue(":id", parent->data(GenericId));
+ }else if(mOrder == Genre){
+ partsQuery.prepare("SELECT seriesparts.iseriesparts_id, iseriespart, bfavorite, tsubtitle FROM seriesparts, seriesparts_genremap WHERE iseries_id = :id AND seriesparts.iseriesparts_id = seriesparts_genremap.iseriesparts_id AND seriesparts_genremap.igenres_id = :genreid ORDER BY iseriespart");
+ partsQuery.bindValue(":id", parent->data(GenericId));
+ partsQuery.bindValue(":genreid", id);
+ }else if(mOrder == Actor){
+ partsQuery.prepare("SELECT seriesparts.iseriesparts_id, iseriespart, bfavorite, tsubtitle FROM seriesparts, seriesparts_actormap WHERE iseries_id = :id AND seriesparts.iseriesparts_id = seriesparts_actormap.iseriesparts_id AND seriesparts_actormap.iactors_id = :actorid ORDER BY iseriespart");
+ partsQuery.bindValue(":id", parent->data(GenericId));
+ partsQuery.bindValue(":actorid", id);
}
+ partsQuery.exec();
+ while(partsQuery.next()){
+ QList<QVariant> partData;
+ partData << parent->data(Name) << parent->data(GenericId) << partsQuery.value(0) << partsQuery.value(1) << SeriesPartNode << partsQuery.value(2) << partsQuery.value(3) << QVariant();
+ SmTreeItem *partItem = new SmTreeItem(partData, parent);
+ parent->appendChild(partItem);
+ }
+ parent->setData(Count, parent->childCount());
}
diff --git a/archivemodel.h b/archivemodel.h
index f4af14e..b4fdcd5 100644
--- a/archivemodel.h
+++ b/archivemodel.h
@@ -17,7 +17,7 @@ class ArchiveModel : public SmTreeModel {
Q_OBJECT
public:
enum CustomRoles { NameRole = Qt::UserRole + 1, SeriesIdRole = Qt::UserRole + 2, SeriesPartIdRole = Qt::UserRole + 3, SeriesPartRole = Qt::UserRole + 4, TypeRole = Qt::UserRole + 5, FavoriteRole = Qt::UserRole + 6, SubtitleRole = Qt::UserRole + 7, CountRole = Qt::UserRole + 8 };
- enum Fields { Name = 0, SeriesId = 1, SeriesPartId = 2, SeriesPart = 3, Type = 4, Favorite = 5, Subtitle = 6, Count = 7 };
+ enum Fields { Name = 0, GenericId = 1, SeriesPartId = 2, SeriesPart = 3, Type = 4, Favorite = 5, Subtitle = 6, Count = 7 };
enum Order { SeriesName, Actor, Genre };
enum { NumFields = 8 };
enum NodeType { SeriesNode, SeriesPartNode, GenreNode, ActorNode };
@@ -29,6 +29,7 @@ class ArchiveModel : public SmTreeModel {
public slots:
void setOrder(int order);
+ void setOrder(const QString &order);
private:
void populateBySeriesName();
@@ -36,9 +37,9 @@ class ArchiveModel : public SmTreeModel {
void populateByActor();
void fetchChildren(SmTreeItem *parent);
void fetchSeries(const QVariant &id, SmTreeItem *parent);
- void fetchParts(SmTreeItem *parent);
+ void fetchParts(const QVariant &id, SmTreeItem *parent);
QSqlDatabase mDb;
- QHash<int, QString> mAvailableOrders;
+ QHash<QString, int> mAvailableOrders;
int mOrder;
};
diff --git a/archiveview.cpp b/archiveview.cpp
index fd1a4ff..dc4b135 100644
--- a/archiveview.cpp
+++ b/archiveview.cpp
@@ -19,8 +19,11 @@
ArchiveView::ArchiveView(QWidget *parent) : QWidget(parent) {
mArchiveModel = static_cast<ArchiveModel*>(SmGlobals::instance()->model("ArchiveModel"));
+ QSortFilterProxyModel *proxy = new QSortFilterProxyModel;
+ proxy->setSourceModel(mArchiveModel);
mTree = new ArchiveTree;
- mTree->setColumnHidden(ArchiveModel::SeriesId, true);
+ mTree->setModel(proxy);
+ mTree->setColumnHidden(ArchiveModel::GenericId, true);
mTree->setColumnHidden(ArchiveModel::SeriesPartId, true);
mTree->setColumnHidden(ArchiveModel::SeriesPart, true);
mTree->setColumnHidden(ArchiveModel::Type, true);
@@ -30,6 +33,7 @@ ArchiveView::ArchiveView(QWidget *parent) : QWidget(parent) {
mTree->resizeColumnToContents(ArchiveModel::Name);
mSortOrder = new QComboBox;
mSortOrder->addItems(mArchiveModel->availableOrders());
+ connect(mSortOrder, SIGNAL(currentIndexChanged(QString)), mArchiveModel, SLOT(setOrder(QString)));
QLabel *l1 = new QLabel(tr("Filter"));
mFilter = new QLineEdit;
QPushButton *filter = new QPushButton(tr("Filter"));
@@ -54,14 +58,9 @@ ArchiveView::ArchiveView(QWidget *parent) : QWidget(parent) {
QHBoxLayout *mainLayout = new QHBoxLayout;
mainLayout->addWidget(treeSplitter);
setLayout(mainLayout);
-
}
ArchiveTree::ArchiveTree(QWidget *parent) : SmTreeView(parent) {
- mModel = static_cast<ArchiveModel*>(SmGlobals::instance()->model("ArchiveModel"));
- mProxy = new QSortFilterProxyModel;
- mProxy->setSourceModel(mModel);
- setModel(mProxy);
}
ArchiveFiles::ArchiveFiles(QWidget *parent) : SmTreeView(parent){