diff options
author | am <am@f440f766-f032-0410-8965-dc7d17de2ca0> | 2009-08-14 18:53:25 +0000 |
---|---|---|
committer | am <am@f440f766-f032-0410-8965-dc7d17de2ca0> | 2009-08-14 18:53:25 +0000 |
commit | 06233888b033adc6e821331e6d1822e9807371ae (patch) | |
tree | cc3ded50eb1640805652e1ec77988b39e31d13c8 | |
parent | 41802000a0bcbb44c3add7f218eceec101f52cc0 (diff) | |
download | SheMov-06233888b033adc6e821331e6d1822e9807371ae.tar.gz SheMov-06233888b033adc6e821331e6d1822e9807371ae.tar.bz2 SheMov-06233888b033adc6e821331e6d1822e9807371ae.zip |
-Implemented conlumnContains() in MovieModel
-Implemented guess-function in ArchiveEditDialog
-Cumulative size is now shown in statusBar() when selecting items in ArchiveViewWidget
-Fixed EditArchiveItemDialog allowing duplicate titles (neccessary after creating iseriesno and ipartno)
-Fixed windowTitle() when changing tabs
git-svn-id: file:///var/svn/repos2/shemov/trunk@401 f440f766-f032-0410-8965-dc7d17de2ca0
-rw-r--r-- | archiveeditdialog.cpp | 28 | ||||
-rw-r--r-- | archiveeditdialog.h | 2 | ||||
-rw-r--r-- | archivefilewidget.cpp | 16 | ||||
-rw-r--r-- | archivefilewidget.h | 4 | ||||
-rw-r--r-- | archiveviewwidget.cpp | 22 | ||||
-rw-r--r-- | archiveviewwidget.h | 5 | ||||
-rw-r--r-- | filesystemwidget.h | 1 | ||||
-rw-r--r-- | moviemodel.cpp | 24 | ||||
-rw-r--r-- | moviemodel.h | 2 | ||||
-rw-r--r-- | shemov.cpp | 34 | ||||
-rw-r--r-- | shemov.h | 1 |
11 files changed, 121 insertions, 18 deletions
diff --git a/archiveeditdialog.cpp b/archiveeditdialog.cpp index 925afe4..7b1604c 100644 --- a/archiveeditdialog.cpp +++ b/archiveeditdialog.cpp @@ -73,6 +73,9 @@ ArchiveEditDialog::ArchiveEditDialog(ListModel *genre, ListModel *actors, QWidge //button layout QHBoxLayout *buttonLayout = new QHBoxLayout; buttonLayout->addStretch(); + mGuess = new QPushButton(tr("Guess values")); + connect(mGuess, SIGNAL(clicked()), this, SLOT(guess())); + buttonLayout->addWidget(mGuess); mArchive = new QPushButton(tr("Archive")); connect(mArchive, SIGNAL(clicked()), this, SLOT(archive())); buttonLayout->addWidget(mArchive); @@ -174,6 +177,31 @@ void ArchiveEditDialog::archive(){ } } +void ArchiveEditDialog::guess(){ + QString fileName = mCoverEditor->movie(); + if(fileName.isEmpty()){ + return; + } + qDebug() << fileName; + QFileInfo fi(fileName); + QString rfn = fi.completeBaseName(); + rfn.chop(1); + QModelIndexList idx = mMovieModel->columnContains(rfn, MovieItem::Filename); + qDebug() << rfn; + if(idx.size() > 0){ + QModelIndex cur = idx.at(0); + QList<QVariant> actors = cur.data(MovieModel::ActorsRole).toList(); + foreach(QVariant v, actors){ + mFileWidget->setActor(v.toString()); + } + mFileWidget->setMovieTitle(cur.data(MovieModel::TitleBaseRole).toString()); + mFileWidget->setQuality(cur.data(MovieModel::QualityRole).toInt()); + mFileWidget->setSeriesNo(cur.data(MovieModel::SeriesNoRole).toInt()); + int partno = cur.data(MovieModel::PartNoRole).toInt() + 1; + mFileWidget->setPartNo(partno); + } +} + bool ArchiveEditDialog::checkInput(int genre, const QList<int> &actors, const QStringList &files, const QString &title, const QString &movie, int quality) { if(genre < 0){ QMessageBox::critical(this, tr("Error"), tr("Genre is invalid")); diff --git a/archiveeditdialog.h b/archiveeditdialog.h index 6e9355d..ce0fd43 100644 --- a/archiveeditdialog.h +++ b/archiveeditdialog.h @@ -31,6 +31,7 @@ class ArchiveEditDialog : public QDialog { private slots: void archive(); + void guess(); private: bool checkInput(int genre, const QList<int> &actors, const QStringList &files, const QString &title, const QString &movie, int quality); @@ -44,6 +45,7 @@ class ArchiveEditDialog : public QDialog { ListModel *mActorsModel; MovieModel *mMovieModel; QDirModel *mDirModel; + QPushButton *mGuess; QPushButton *mArchive; QPushButton *mClose; diff --git a/archivefilewidget.cpp b/archivefilewidget.cpp index 59447e1..4f4ba0c 100644 --- a/archivefilewidget.cpp +++ b/archivefilewidget.cpp @@ -175,6 +175,22 @@ void ArchiveFileWidget::setActor(const QString &actor){ } } +void ArchiveFileWidget::setQuality(int quality){ + mQuality->setValue(quality); +} + +void ArchiveFileWidget::setMovieTitle(const QString &title){ + mTitle->setText(title.toLower().trimmed()); +} + +void ArchiveFileWidget::setSeriesNo(int seriesno){ + mSeriesNo->setValue(seriesno); +} + +void ArchiveFileWidget::setPartNo(int partno){ + mPartNo->setValue(partno); +} + void ArchiveFileWidget::addActor(){ QString selectedActor = mActors->currentText(); if(!selectedActor.isEmpty() && !mActorIdMap.contains(selectedActor)){ diff --git a/archivefilewidget.h b/archivefilewidget.h index 5d01556..339c66d 100644 --- a/archivefilewidget.h +++ b/archivefilewidget.h @@ -44,6 +44,10 @@ class ArchiveFileWidget : public QWidget { public slots: void setActor(const QString &actor); + void setQuality(int quality); + void setMovieTitle(const QString &title); + void setSeriesNo(int seriesno); + void setPartNo(int partno); private slots: void addActor(); diff --git a/archiveviewwidget.cpp b/archiveviewwidget.cpp index 0e6686e..e6ffb4b 100644 --- a/archiveviewwidget.cpp +++ b/archiveviewwidget.cpp @@ -32,7 +32,7 @@ #include "helper.h" #include "moviepropertiesdialog.h" -ArchiveViewWidget::ArchiveViewWidget(MovieModel *model, ListModel *genre, ListModel *actors, QWidget *parent) : QWidget(parent), mMovieModel(model), mGenreModel(genre), mActorsModel(actors){ +ArchiveViewWidget::ArchiveViewWidget(MovieModel *model, ListModel *genre, ListModel *actors, QWidget *parent) : QWidget(parent), mMovieModel(model), mGenreModel(genre), mActorsModel(actors), mSize(0){ //filter bar QHBoxLayout *filterLayout = new QHBoxLayout; QLabel *l1 = new QLabel(tr("Filter by &genre")); @@ -85,7 +85,9 @@ ArchiveViewWidget::ArchiveViewWidget(MovieModel *model, ListModel *genre, ListMo connect(mFileView->selectionModel(), SIGNAL(currentChanged(const QModelIndex &, const QModelIndex)), this, SLOT(rowChanged(const QModelIndex &, const QModelIndex &))); connect(mFileView, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(showMovie(const QModelIndex &))); + connect(mFileView->selectionModel(), SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)), this, SLOT(calcSize())); + mWindowTitle = QString("%1 - nothing selected").arg(qApp->applicationName()); setLayout(mainLayout); } @@ -110,12 +112,6 @@ void ArchiveViewWidget::addMovie(){ dlg.exec(); if(dlg.result() == QDialog::Accepted){ QString title = dlg.text().toLower().trimmed(); - QModelIndex idx = mMovieModel->index(title); - if(idx != QModelIndex()){ - QString msg = QString(tr("Already have an entry with title %1")).arg(title); - QMessageBox::critical(this, tr("Error"), msg); - return; - } QList<QVariant> movieData; movieData << title; for(int i = 1; i < MovieItem::NumRows; ++i){ @@ -175,8 +171,16 @@ void ArchiveViewWidget::setActorFilter(const QString &filter){ void ArchiveViewWidget::rowChanged(const QModelIndex &/*current*/, const QModelIndex & /*prev*/){ QModelIndex idx = getSourceColumnZero(); - QString title = QString(tr("%1 - %2")).arg(qApp->applicationName()).arg(idx.data().toString()); - emit windowTitle(title); + mWindowTitle = QString(tr("%1 - %2")).arg(qApp->applicationName()).arg(idx.data().toString()); + emit windowTitle(mWindowTitle); +} + +void ArchiveViewWidget::calcSize(){ + QModelIndexList sel = mFileView->selectionModel()->selectedRows(MovieItem::Size); + mSize = 0; + foreach(QModelIndex idx, sel){ + mSize += idx.data().toLongLong(); + } } const QModelIndex ArchiveViewWidget::getSourceColumnZero(){ diff --git a/archiveviewwidget.h b/archiveviewwidget.h index fd2cf55..f07d9af 100644 --- a/archiveviewwidget.h +++ b/archiveviewwidget.h @@ -31,6 +31,8 @@ class ArchiveViewWidget : public QWidget { ArchiveFileView* fileView() { return mFileView; }; void setEditDialog(EditArchiveItemDialog *dlg) { mEditDialog = dlg; }; void setCoverEditDialog(CoverArchiveEditor *dlg) { mCoverEditDialog = dlg; }; + const QString &windowTitle() const { return mWindowTitle; }; + qint64 currentSize() const { return mSize; }; public slots: void editFile(); @@ -48,6 +50,7 @@ class ArchiveViewWidget : public QWidget { private slots: void rowChanged(const QModelIndex ¤t, const QModelIndex &prev); + void calcSize(); private: const QModelIndex getSourceColumnZero(); @@ -63,6 +66,8 @@ class ArchiveViewWidget : public QWidget { ArchiveProxy *mProxy; EditArchiveItemDialog *mEditDialog; CoverArchiveEditor *mCoverEditDialog; + QString mWindowTitle; + qint64 mSize; }; #endif diff --git a/filesystemwidget.h b/filesystemwidget.h index 3fee9be..c15d77b 100644 --- a/filesystemwidget.h +++ b/filesystemwidget.h @@ -70,6 +70,7 @@ class FilesystemWidget : public QWidget { MessageDialog *mRenameDialog; QString mTemplate; ArchiveEditDialog *mAEDialog; + qint64 mSize; }; #endif diff --git a/moviemodel.cpp b/moviemodel.cpp index 191b987..da921b4 100644 --- a/moviemodel.cpp +++ b/moviemodel.cpp @@ -87,13 +87,23 @@ QModelIndex MovieModel::index(int movieId, int column) const{ return retval; } -QModelIndex MovieModel::index(const QString &movieTitle) const { - QModelIndex retval = QModelIndex(); - for(int i = 0; i < rowCount(QModelIndex()); ++i){ - MovieItem *item = mItems.at(i); - if(item->dataAt(MovieItem::Title).toString() == movieTitle){ - retval = createIndex(i, 0, item); - break; +QModelIndexList MovieModel::columnContains(const QVariant &content, int column) const{ + QModelIndexList retval; + if((column == MovieItem::Title) || (column == MovieItem::Filename) || (column == MovieItem::Md5Sum)){ + QString part = content.toString(); + for(int i = 0; i < mItems.size(); ++i){ + QString current = mItems.at(i)->dataAt(column).toString(); + if(current.contains(part)){ + retval << createIndex(i, column, mItems.at(i)); + } + } + }else{ + qint64 value = content.toLongLong(); + for(int i = 0; i < mItems.size(); ++i){ + qint64 current = mItems.at(i)->dataAt(column).toLongLong(); + if(value == current){ + retval << createIndex(i, column, mItems.at(i)); + } } } return retval; diff --git a/moviemodel.h b/moviemodel.h index 648a8f9..798a809 100644 --- a/moviemodel.h +++ b/moviemodel.h @@ -25,7 +25,7 @@ class MovieModel : public QAbstractItemModel { ~MovieModel(); QModelIndex index(int row, int column, const QModelIndex &parent) const; QModelIndex index(int movieId, int column = 0) const; - QModelIndex index(const QString &movieTitle) const; + QModelIndexList columnContains(const QVariant &content, int column) const; QModelIndex parent(const QModelIndex &) const { return QModelIndex(); }; int columnCount(const QModelIndex &) const { return MovieItem::NumRows; }; int rowCount(const QModelIndex &) const { return mItems.size(); }; @@ -81,6 +81,7 @@ SheMov::SheMov(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, fla mFSWidget->fileView()->findActions(); connect(mFSWidget->fileView()->selectionModel(), SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)), this, SLOT(updateSelectionCount(const QItemSelection &, const QItemSelection &))); + connect(mAVWidget->fileView()->selectionModel(), SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)), this, SLOT(updateSelectionCount(const QItemSelection &, const QItemSelection &))); connect(mFSWidget, SIGNAL(windowTitle(const QString &)), this, SLOT(newWindowTitle(const QString &))); connect(mFSWidget->fileView(), SIGNAL(statusbarMessage(const QString &)), this, SLOT(statusbarMessage(const QString &))); connect(mFSWidget, SIGNAL(statusbarMessage(const QString &)), this, SLOT(statusbarMessage(const QString &))); @@ -96,7 +97,24 @@ SheMov::SheMov(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, fla } void SheMov::updateSelectionCount(const QItemSelection & /* sel */, const QItemSelection & /* prev */){ - mSelectedItems->setText(QString::number(mFSWidget->fileView()->selectionModel()->selectedRows().count())); + QLocale l; + switch (mTab->currentIndex()) { + case 0: + mSelectedItems->setText(QString::number(mFSWidget->fileView()->selectionModel()->selectedRows().count())); + mSelectedSize->setText("<span style=\"color:#000000\">n/a</span>"); + break; + case 1: + mSelectedItems->setText(QString::number(mAVWidget->fileView()->selectionModel()->selectedRows().count())); + qint64 s = mAVWidget->currentSize(); + QString val; + if(s < Q_INT64_C(4707319808)){ + val = QString("<span style=\"color:#008000\">%1</span>").arg(l.toString(s)); + }else{ + val = QString("<span style=\"color:#ff0000\">%1</span>").arg(l.toString(s)); + } + mSelectedSize->setText(val); + break; + } } void SheMov::newWindowTitle(const QString &title){ @@ -120,9 +138,23 @@ void SheMov::configure(){ void SheMov::tabChanged(int newTab){ mEditFSMenuA->setVisible(newTab == 0); mEditArchiveMenuA->setVisible(newTab == 1); + if(newTab == 0){ + setWindowTitle(mFSWidget->windowTitle()); + //mSelectedItems->setText(QString::number(mFSWidget->fileView()->selectionModel()->selectedRows().count())); + } + if(newTab == 1){ + setWindowTitle(mAVWidget->windowTitle()); + //mSelectedItems->setText(QString::number(mAVWidget->fileView()->selectionModel()->selectedRows().count())); + } + updateSelectionCount(QItemSelection(), QItemSelection()); } void SheMov::createStatusbar(){ + QLabel *selSizeL = new QLabel(tr("Sel. Size")); + mSelectedSize = new QLabel(tr("nothing selected yet")); + mSelectedSize->setFrameStyle(QFrame::Panel | QFrame::Sunken); + statusBar()->addPermanentWidget(selSizeL); + statusBar()->addPermanentWidget(mSelectedSize); QLabel *selCountL = new QLabel(tr("Sel. Items")); mSelectedItems = new QLabel("0"); mSelectedItems->setFrameStyle(QFrame::Panel | QFrame::Sunken); @@ -49,6 +49,7 @@ class SheMov : public QMainWindow { //Statusbar Items QLabel *mSelectedItems; QLabel *mTemplate; + QLabel *mSelectedSize; //Actions QAction *mQuitA; |