summaryrefslogtreecommitdiffstats
path: root/archiveview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'archiveview.cpp')
-rw-r--r--archiveview.cpp235
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{