diff options
author | Arno <am@disconnect.de> | 2013-07-06 19:24:04 +0200 |
---|---|---|
committer | Arno <am@disconnect.de> | 2013-07-06 19:24:04 +0200 |
commit | b039fbf6aaef0e961490f8267a91976866ac2e0a (patch) | |
tree | 270fbd374dbb0d2cc524ba24328da537f30213a7 /archiveview.cpp | |
parent | bd6a6a7c42dabe2d0d86e309a6dc6b04de7c0a10 (diff) | |
download | SheMov-b039fbf6aaef0e961490f8267a91976866ac2e0a.tar.gz SheMov-b039fbf6aaef0e961490f8267a91976866ac2e0a.tar.bz2 SheMov-b039fbf6aaef0e961490f8267a91976866ac2e0a.zip |
Lots of Display Changes
* Save header states
* Implement delegates for columns
* unify size and duration to 1 column
* colorize View
... and lots of other things I forgot :)
Diffstat (limited to 'archiveview.cpp')
-rw-r--r-- | archiveview.cpp | 83 |
1 files changed, 80 insertions, 3 deletions
diff --git a/archiveview.cpp b/archiveview.cpp index f570751..53903f9 100644 --- a/archiveview.cpp +++ b/archiveview.cpp @@ -16,10 +16,12 @@ #include <QSettings> #include <QSplitter> #include <QVBoxLayout> +#include <QHeaderView> #include "archiveview.h" #include "archivecontroller.h" #include "smglobals.h" +#include "helper.h" ArchiveView::ArchiveView(QWidget *parent) : QWidget(parent) { QSettings s; @@ -77,7 +79,12 @@ ArchiveView::ArchiveView(QWidget *parent) : QWidget(parent) { treeWidget->setLayout(treeLayout); mFiles = new ArchiveFiles; - mFilesModel = new ArchiveFilesModel(QStringList() << tr("Seriespartid") << tr("Filename") << tr("Md5Sum") << tr("Size") << tr("Dvd") << tr("Type") << tr("No") << tr("Quality") << tr("Fileid") << tr("Pic size") << tr("Duration") << tr("Full Path"), this); + mFiles->setItemDelegateForColumn(ArchiveFilesModel::FileType, new FileTypeDelegate(this)); + mFiles->setItemDelegateForColumn(ArchiveFilesModel::DvdNo, new DvdNoDelegate(this)); + mFiles->setItemDelegateForColumn(ArchiveFilesModel::Size, new SizeDelegate(this)); + mFiles->setItemDelegateForColumn(ArchiveFilesModel::SizeDur, new DurationDelegate(this)); + mFiles->setItemDelegateForColumn(ArchiveFilesModel::FileNumber, new EmptyDelegate(this)); + mFilesModel = new ArchiveFilesModel(QStringList() << QChar(0x26A7) << tr("Seriespartid") << tr("Filename") << tr("Md5Sum") << tr("Size") << tr("Dvd") << tr("Type") << tr("No") << tr("Q") << tr("Fileid") << tr("S/Dur") << tr("Full Path"), this); mFilesProxy = new ArchiveFilesProxy; mFilesProxy->setSourceModel(mFilesModel); mFiles->setModel(mFilesProxy); @@ -107,6 +114,8 @@ void ArchiveView::readSettings(){ list = s.value("archivemodel/expandedseries").toList(); mExpandedItems[ArchiveModel::SeriesName] = list; expandedItems(); + mFiles->readHeaderConfig(); + mFiles->setSortingEnabled(true); } void ArchiveView::writeSettings() { @@ -116,7 +125,7 @@ void ArchiveView::writeSettings() { s.setValue("archivemodel/expandedgenres", mExpandedItems.value(ArchiveModel::Genre)); s.setValue("archivemodel/expandedactors", mExpandedItems.value(ArchiveModel::Actor)); s.setValue("archivemodel/expandedseries", mExpandedItems.value(ArchiveModel::SeriesName)); - + mFiles->writeHeaderConfig(); } void ArchiveView::refreshArchive(){ @@ -179,6 +188,7 @@ void ArchiveView::initController(){ mController->setArchiveFiles(mFiles, mFilesProxy); mController->setModels(mArchiveModel, mFilesModel); mController->init(); + SmGlobals::instance()->setArchiveController(mController); } ArchiveTree::ArchiveTree(QWidget *parent) : SmTreeView(parent) {} @@ -221,7 +231,8 @@ void ArchiveTree::impossible(const QString msg){ QMessageBox::critical(this, tr("Error"), msg); } -ArchiveFiles::ArchiveFiles(QWidget *parent) : SmTreeView(parent){ +ArchiveFiles::ArchiveFiles(const QString &headerSettings, QWidget *parent) : SmTreeView(headerSettings, parent){ + setEditTriggers(QAbstractItemView::NoEditTriggers); } ArchiveProxy::ArchiveProxy(QObject *parent) : QSortFilterProxyModel(parent) {} @@ -242,3 +253,69 @@ bool ArchiveProxy::filterAcceptsRow(int sourceRow, const QModelIndex &sourcePare } ArchiveFilesProxy::ArchiveFilesProxy(QObject *parent) : QSortFilterProxyModel(parent) {} + +/* Delegate for file type */ + +QString FileTypeDelegate::displayText(const QVariant &value, const QLocale &locale) const{ + Q_UNUSED(locale); + int type = value.toInt(); + switch(type){ + case ArchiveFilesModel::Movie: + return tr("Movie"); + case ArchiveFilesModel::FrontCover: + return tr("Front Cover"); + case ArchiveFilesModel::BackCover: + return tr("Back Cover"); + case ArchiveFilesModel::GeneralCover: + return tr("General Cover"); + default: + ; + } + return tr("n/a"); +} + +/* Delegate for Dvd no. */ + +QString DvdNoDelegate::displayText(const QVariant &value, const QLocale &locale) const{ + Q_UNUSED(locale); + int no = value.toInt(); + if(no < 0){ + return tr("(local)"); + } + QString retval = QString(tr("#%1")).arg(QString::number(no)); + return retval; +} + +/* Delegate for size */ + +QString SizeDelegate::displayText(const QVariant &value, const QLocale &locale) const{ + // locale.toString() doesn't work, maybe b/c it's const + Q_UNUSED(locale); + QLocale l; + return l.toString(value.toLongLong()); +} + +/* Delegate for duration */ + +QString DurationDelegate::displayText(const QVariant &value, const QLocale &locale) const{ + Q_UNUSED(locale); + if(value.toString().contains("x")){ + return value.toString(); + } + qint64 secs = value.toInt(); + if(secs == 0){ + return tr("n/a"); + } + Helper::Duration dur(secs); + return dur.toString(); +} + +/* Empty delegate */ + +QString EmptyDelegate::displayText(const QVariant &value, const QLocale &locale) const{ + int i = value.toInt(); + if(i < 1){ + return QString(); + } + return QStyledItemDelegate::displayText(value, locale); +} |