diff options
Diffstat (limited to 'archiveview.cpp')
-rw-r--r-- | archiveview.cpp | 235 |
1 files changed, 235 insertions, 0 deletions
diff --git a/archiveview.cpp b/archiveview.cpp index 94e6a20..92fd83a 100644 --- a/archiveview.cpp +++ b/archiveview.cpp @@ -20,6 +20,9 @@ #include <QSpinBox> #include <QGroupBox> #include <QTextEdit> +#include <QCompleter> +#include <QStandardItemModel> +#include <QFormLayout> #include "archiveview.h" #include "archivecontroller.h" @@ -285,6 +288,60 @@ void ArchiveTree::remove(){ } } +void ArchiveTree::editActors(){ + MappingEditor e(tr("Actors"), this); + QStringList actors = mModel->allActors(); + e.fillCompleter(actors); + QModelIndex idx = currentIndex(); + int pId = idx.data(ArchiveModel::SeriesPartIdRole).toInt(); + QStringList curActors = mModel->actors(QSet<int>() << pId); + e.setCurrentItems(curActors); + int res = e.exec(); + if(res == QDialog::Accepted){ + QStringList selActors = e.items(); + mModel->setActors(pId, selActors); + ArchiveController *c = SmGlobals::instance()->archiveController(); + c->treeSelectionChanged(QItemSelection(), QItemSelection()); + } +} + +void ArchiveTree::editGenres(){ + MappingEditor e(tr("Genres"), this); + QStringList genres = mModel->allGenres(); + e.fillCompleter(genres); + QModelIndex idx = currentIndex(); + int pId = idx.data(ArchiveModel::SeriesPartIdRole).toInt(); + QStringList curGenres = mModel->genres(QSet<int>() << pId); + e.setCurrentItems(curGenres); + int res = e.exec(); + if(res == QDialog::Accepted){ + QStringList selGenres = e.items(); + mModel->setGenres(pId, selGenres); + ArchiveController *c = SmGlobals::instance()->archiveController(); + c->treeSelectionChanged(QItemSelection(), QItemSelection()); + } +} + +void ArchiveTree::editMetadata(){ + MetadataEditor e(this); + ArchiveController *c = SmGlobals::instance()->archiveController(); + QStringList sources = c->archiveTreeModel()->allSources(); + e.setSources(sources); + QStringList relGroups = c->archiveTreeModel()->allReleaseGroups(); + e.setReleaseGroups(relGroups); + QModelIndex idx = currentIndex(); + int pId = idx.data(ArchiveModel::SeriesPartIdRole).toInt(); + QList<QVariant> curMetadata = c->archiveTreeModel()->metadataList(pId); + e.setMetadata(curMetadata); + int res = e.exec(); + if(res == QDialog::Accepted){ + QList<QVariant> data = e.metadata(); + mModel->setMetadata(pId, data); + c->treeSelectionChanged(QItemSelection(), QItemSelection()); + } +} + + void ArchiveTree::impossible(const QString msg){ QMessageBox::critical(this, tr("Error"), msg); } @@ -336,6 +393,184 @@ QWidget *FileTypeDelegate::createEditor(QWidget *parent, const QStyleOptionViewI return retval; } +/* Mapping Editor */ + +MappingEditor::MappingEditor(const QString &caption, QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f) { + mModel = new QStandardItemModel(this); + mModel->setHorizontalHeaderLabels(QStringList() << caption); + mProxy = new QSortFilterProxyModel(this); + mProxy->setSourceModel(mModel); + QVBoxLayout *viewLayout = new QVBoxLayout; + mView = new SmTreeView; + viewLayout->addWidget(mView); + mView->setModel(mProxy); + mView->setSortingEnabled(true); + + QHBoxLayout *editLayout = new QHBoxLayout; + QLabel *l2 = new QLabel(tr("Add:")); + mEditor = new QLineEdit; + mCompleter = new QCompleter(this); + mCompleterModel = new QStringListModel(this); + mCompleter->setModel(mCompleterModel); + mEditor->setCompleter(mCompleter); + editLayout->addWidget(l2); + editLayout->addWidget(mEditor); + + QHBoxLayout *editButtonLayout = new QHBoxLayout; + mRemove = new QPushButton(tr("Remove")); + connect(mRemove, SIGNAL(clicked()), this, SLOT(removeItem())); + editButtonLayout->addWidget(mRemove); + mAdd = new QPushButton(tr("Add")); + connect(mAdd, SIGNAL(clicked()), this, SLOT(addItem())); + editButtonLayout->addWidget(mAdd); + + QHBoxLayout *buttonLayout = new QHBoxLayout; + buttonLayout->addStretch(); + mCancel = new QPushButton(tr("Cancel")); + connect(mCancel, SIGNAL(clicked()), this, SLOT(reject())); + buttonLayout->addWidget(mCancel); + mAccept = new QPushButton(tr("Accept")); + connect(mAccept, SIGNAL(clicked()), this, SLOT(accept())); + buttonLayout->addWidget(mAccept); + + QVBoxLayout *mainLayout = new QVBoxLayout; + mainLayout->addLayout(viewLayout); + mainLayout->addLayout(editLayout); + mainLayout->addLayout(editButtonLayout); + mainLayout->addLayout(buttonLayout); + setLayout(mainLayout); + setMinimumWidth(400); +} + +void MappingEditor::fillCompleter(const QStringList &completions){ + mCompleterModel->setStringList(completions); +} + +void MappingEditor::setCurrentItems(const QStringList &items){ + foreach(QString i, items){ + QStandardItem *item = new QStandardItem(i); + item->setIcon(QIcon(":/huge_bra.png")); + mModel->appendRow(item); + } +} + +QStringList MappingEditor::items() const{ + QStringList retval; + for(int i = 0; i < mModel->rowCount(); ++i){ + QStandardItem *item = mModel->item(i); + retval << item->text(); + } + return retval; +} + +void MappingEditor::addItem(){ + QString itemName = mEditor->text(); + if(itemName.isEmpty()){ + return; + } + QList<QStandardItem*> found = mModel->findItems(itemName, Qt::MatchFixedString); + if(found.size()){ + return; + } + QStandardItem *newItem = new QStandardItem(itemName); + newItem->setIcon(QIcon(":/huge_bra.png")); + mModel->appendRow(newItem); + mEditor->clear(); +} + +void MappingEditor::removeItem(){ + QModelIndexList sel = mView->selectionModel()->selectedRows(); + if(sel.isEmpty()){ + return; + } + QModelIndex real = mProxy->mapToSource(sel.first()); + mModel->removeRow(real.row()); +} + +/* Metadata Editor */ + +MetadataEditor::MetadataEditor(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f){ + QLabel *captionL = new QLabel(tr("<b>Edit Metadata</b>")); + + QFormLayout *dataLayout = new QFormLayout; + mReleaseYear = new QSpinBox; + mReleaseYear->setMinimum(1900); + mReleaseYear->setMaximum(3000); + dataLayout->addRow(tr("&Release Year"), mReleaseYear); + mSource = new QComboBox; + mSource->setEditable(true); + dataLayout->addRow(tr("&Source"), mSource); + mRelGroup = new QComboBox; + mRelGroup->setEditable(true); + dataLayout->addRow(tr("Release &Group"), mRelGroup); + mSubject = new QLineEdit; + dataLayout->addRow(tr("Sub&ject"), mSubject); + mEncoderOpts = new QLineEdit; + dataLayout->addRow(tr("&Encoder Opts."), mEncoderOpts); + mPasses = new QSpinBox; + mPasses->setMinimum(0); + mPasses->setMaximum(10); + dataLayout->addRow(tr("&Passes"), mPasses); + + QVBoxLayout *commentLayout = new QVBoxLayout; + QLabel *commentL = new QLabel(tr("<b>Comment</b>")); + commentLayout->addWidget(commentL); + mComment = new QTextEdit; + commentLayout->addWidget(mComment); + + QHBoxLayout *buttonLayout = new QHBoxLayout; + buttonLayout->addStretch(); + mCancel = new QPushButton(tr("Cancel")); + connect(mCancel, SIGNAL(clicked()), this, SLOT(reject())); + buttonLayout->addWidget(mCancel); + mAccept = new QPushButton(tr("Accept")); + connect(mAccept, SIGNAL(clicked()), this, SLOT(accept())); + buttonLayout->addWidget(mAccept); + + QVBoxLayout *mainLayout = new QVBoxLayout; + mainLayout->addWidget(captionL); + mainLayout->addLayout(dataLayout); + mainLayout->addLayout(commentLayout); + mainLayout->addLayout(buttonLayout); + setLayout(mainLayout); + setMinimumWidth(400); +} + +void MetadataEditor::setSources(const QStringList &sources){ + mSource->addItems(sources); +} + +void MetadataEditor::setReleaseGroups(const QStringList &relGroups){ + mRelGroup->addItems(relGroups); +} + +void MetadataEditor::setMetadata(const QList<QVariant> &data){ + mReleaseYear->setValue(data.at(ArchiveModel::ReleaseYear).toInt()); + mSource->setCurrentText(data.at(ArchiveModel::Source).toString()); + mSubject->setText(data.at(ArchiveModel::Subject).toString()); + mRelGroup->setCurrentText(data.at(ArchiveModel::ReleaseGroup).toString()); + mEncoderOpts->setText(data.at(ArchiveModel::EncoderOpts).toString()); + mPasses->setValue(data.at(ArchiveModel::Passes).toInt()); + mComment->setText(data.at(ArchiveModel::Comment).toString()); + mAdded = data.at(ArchiveModel::Added).toDate(); +} + +QList<QVariant> MetadataEditor::metadata() const{ + QList<QVariant> retval; + for(int i = 0; i < ArchiveModel::MetadataNumFields; ++i){ + retval << QVariant(); + } + retval[ArchiveModel::ReleaseYear] = mReleaseYear->value(); + retval[ArchiveModel::Source] = mSource->currentText(); + retval[ArchiveModel::Subject] = mSubject->text(); + retval[ArchiveModel::ReleaseGroup] = mRelGroup->currentText(); + retval[ArchiveModel::EncoderOpts] = mEncoderOpts->text(); + retval[ArchiveModel::Passes] = mPasses->value(); + retval[ArchiveModel::Comment] = mComment->toPlainText(); + retval[ArchiveModel::Added] = mAdded; + return retval; +} + /* Delegate for File no. */ QString FileNoDelegate::displayText(const QVariant &value, const QLocale &locale) const{ |