From ac5f624734f712bce84f36cc47c0133a1382534f Mon Sep 17 00:00:00 2001 From: Arno Date: Sat, 1 Jun 2013 06:53:34 +0200 Subject: Add view for new ArchiveModel Display the new ArchiveModel in an experimental tab --- archivemodel.cpp | 3 ++- archiveview.cpp | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ archiveview.h | 50 ++++++++++++++++++++++++++++++++++++++++++++++ shemov.cpp | 7 +++++++ shemov.h | 2 ++ shemov.pro | 6 ++++-- 6 files changed, 125 insertions(+), 3 deletions(-) create mode 100644 archiveview.cpp create mode 100644 archiveview.h diff --git a/archivemodel.cpp b/archivemodel.cpp index 874b252..3bae59b 100644 --- a/archivemodel.cpp +++ b/archivemodel.cpp @@ -42,6 +42,7 @@ void ArchiveModel::setOrder(int order) { void ArchiveModel::populateBySeriesName() { SmTreeItem *rootItem = new SmTreeItem(NumFields); + //fetchChildren(rootItem); fetchSeries(QVariant(), rootItem); fetchParts(rootItem); setRoot(rootItem); @@ -124,7 +125,7 @@ void ArchiveModel::fetchParts(SmTreeItem *parent){ partsQuery.exec(); while(partsQuery.next()){ QList partData; - partData << parent->data(Name) << parent->data(SeriesId) << partsQuery.value(0) << partsQuery.value(1) << SeriesPartNode << partsQuery.value(2) << partsQuery.value(3) << QVariant(); + 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); } diff --git a/archiveview.cpp b/archiveview.cpp new file mode 100644 index 0000000..d91fab7 --- /dev/null +++ b/archiveview.cpp @@ -0,0 +1,60 @@ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version + 2 of the License, or (at your option) any later version. +*/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "archiveview.h" +#include "smglobals.h" + +ArchiveView::ArchiveView(QWidget *parent) : QWidget(parent) { + mArchiveModel = static_cast(SmGlobals::instance()->model("ArchiveModel")); + mTree = new ArchiveTree; + mSortOrder = new QComboBox; + mSortOrder->addItems(mArchiveModel->availableOrders()); + QLabel *l1 = new QLabel(tr("Filter")); + mFilter = new QLineEdit; + QPushButton *filter = new QPushButton(tr("Filter")); + QPushButton *clear = new QPushButton(tr("Clear")); + QHBoxLayout *filterLayout = new QHBoxLayout; + filterLayout->addWidget(l1); + filterLayout->addWidget(mFilter); + filterLayout->addWidget(filter); + filterLayout->addWidget(clear); + QVBoxLayout *treeLayout = new QVBoxLayout; + treeLayout->addWidget(mSortOrder); + treeLayout->addLayout(filterLayout); + treeLayout->addWidget(mTree); + QWidget *treeWidget = new QWidget; + treeWidget->setLayout(treeLayout); + mFiles = new ArchiveFiles; + QSplitter *treeSplitter = new QSplitter(Qt::Horizontal); + treeSplitter->addWidget(treeWidget); + treeSplitter->addWidget(mFiles); + treeSplitter->setStretchFactor(0, 2); + treeSplitter->setStretchFactor(1, 3); + QHBoxLayout *mainLayout = new QHBoxLayout; + mainLayout->addWidget(treeSplitter); + setLayout(mainLayout); + +} + +ArchiveTree::ArchiveTree(QWidget *parent) : QTreeView(parent) { + mModel = static_cast(SmGlobals::instance()->model("ArchiveModel")); + mProxy = new QSortFilterProxyModel; + mProxy->setSourceModel(mModel); + setModel(mProxy); +} + +ArchiveFiles::ArchiveFiles(QWidget *parent) : QTreeView(parent){ +} diff --git a/archiveview.h b/archiveview.h new file mode 100644 index 0000000..a8aed6b --- /dev/null +++ b/archiveview.h @@ -0,0 +1,50 @@ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version + 2 of the License, or (at your option) any later version. +*/ + +#ifndef ARCHIVEVIEW_H +#define ARCHIVEVIEW_H + +#include +#include + +#include "archivemodel.h" + +class QSortFilterProxyModel; +class QComboBox; +class QLineEdit; + +class ArchiveTree; +class ArchiveFiles; + +class ArchiveView : public QWidget { + Q_OBJECT + public: + explicit ArchiveView(QWidget *parent = 0); + + private: + QComboBox *mSortOrder; + QLineEdit *mFilter; + ArchiveTree *mTree; + ArchiveFiles *mFiles; + ArchiveModel *mArchiveModel; +}; + +class ArchiveTree : public QTreeView { + public: + explicit ArchiveTree(QWidget *parent = 0); + + private: + QSortFilterProxyModel *mProxy; + ArchiveModel *mModel; +}; + +class ArchiveFiles : public QTreeView { + public: + explicit ArchiveFiles(QWidget *parent = 0); +}; + +#endif // ARCHIVEVIEW_H diff --git a/shemov.cpp b/shemov.cpp index b6be75f..9859d2f 100644 --- a/shemov.cpp +++ b/shemov.cpp @@ -39,6 +39,7 @@ #include "pictureswidget.h" #include "smdirmodel.h" #include "framecache.h" +#include "archiveview.h" SheMov::SheMov(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, flags), mOpenWithGroupFS(0), mOpenWithGroupAV(0) { //application icon @@ -73,6 +74,12 @@ SheMov::SheMov(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, fla connect(mATree->filesWidget(), SIGNAL(statusMessage(QString)), this, SLOT(statusbarMessage(QString))); connect(this, SIGNAL(configChanged()), mATree, SLOT(readSettings())); + //experimental + splash.showMessage(tr("Creating experimental"), Qt::AlignHCenter, Qt::yellow); + qApp->processEvents(); + mArchive = new ArchiveView; + mTab->addTab(mArchive, "Experimental"); + //pictures splash.showMessage(tr("Creating Picture Archive..."), Qt::AlignHCenter, Qt::yellow); qApp->processEvents(); diff --git a/shemov.h b/shemov.h index 5d5bdd1..9bb2e4d 100644 --- a/shemov.h +++ b/shemov.h @@ -22,6 +22,7 @@ class DbAnalyzerDialog; class PicturesWidget; class SmTreeModel; class NewPicsDialog; +class ArchiveView; class SheMov : public QMainWindow { Q_OBJECT @@ -215,5 +216,6 @@ class SheMov : public QMainWindow { NewPicsDialog *mNewPicsDialog; DbAnalyzerDialog *mDbAnalyzerDialog; PicturesWidget *mPicWidget; + ArchiveView *mArchive; }; #endif diff --git a/shemov.pro b/shemov.pro index 8f8288c..1bae612 100644 --- a/shemov.pro +++ b/shemov.pro @@ -44,7 +44,8 @@ SOURCES = main.cpp \ smdirmodel.cpp \ framecache.cpp \ smtreeview.cpp \ - archivemodel.cpp + archivemodel.cpp \ + archiveview.cpp HEADERS = \ filesystemdirproxy.h \ filesystemwidget.h \ @@ -84,6 +85,7 @@ HEADERS = \ smdirmodel.h \ framecache.h \ smtreeview.h \ - archivemodel.h + archivemodel.h \ + archiveview.h LIBS += -lmagic -lXfixes -lX11 RESOURCES = shemov.qrc -- cgit v1.2.3-70-g09d2