diff options
author | Arno <am@disconnect.de> | 2011-05-07 21:18:02 +0200 |
---|---|---|
committer | Arno <am@disconnect.de> | 2011-05-07 21:18:02 +0200 |
commit | a4fa8d60eb78d410e3c51cb801a0537c890257ba (patch) | |
tree | b5e078859a76611efb5797843a4cd21b19fb7415 /seriestreewidget.cpp | |
parent | 25bd284eec824853e211c84861de4246ffbf6d3a (diff) | |
download | SheMov-a4fa8d60eb78d410e3c51cb801a0537c890257ba.tar.gz SheMov-a4fa8d60eb78d410e3c51cb801a0537c890257ba.tar.bz2 SheMov-a4fa8d60eb78d410e3c51cb801a0537c890257ba.zip |
Fix editing series and seriesparts
I guess this didn't work for quite some time. Show a dialog when
editing series or seriesparts. Before SeriesTreeModel::edit was
called, but that didn't really work.
Diffstat (limited to 'seriestreewidget.cpp')
-rw-r--r-- | seriestreewidget.cpp | 91 |
1 files changed, 88 insertions, 3 deletions
diff --git a/seriestreewidget.cpp b/seriestreewidget.cpp index 5b25f0f..e57905f 100644 --- a/seriestreewidget.cpp +++ b/seriestreewidget.cpp @@ -30,6 +30,12 @@ #include <QSqlQuery> #include <QSqlDatabase> #include <QThread> +#include <QGroupBox> +#include <QFormLayout> +#include <QCheckBox> +#include <QSpinBox> +#include <QFontMetrics> +#include <QApplication> #include "seriestreewidget.h" #include "smtreemodel.h" @@ -339,9 +345,9 @@ void SeriesTreeWidget::expandItems(const QStringList &items){ void SeriesTreeWidget::editItem(){ QModelIndex current = mView->selectionModel()->currentIndex(); - if(current.isValid()){ - mView->edit(current); - } + QModelIndex real = mProxy->mapToSource(current); + EditSeriesDialog dlg(real, this); + dlg.exec(); } void SeriesTreeWidget::producerFinished(QStringListModel *model){ @@ -546,6 +552,85 @@ void AddCoverDialog::typeChanged(const QString &type){ } } +EditSeriesDialog::EditSeriesDialog(const QModelIndex &idx, QWidget *parent) : QDialog(parent), mIdx(idx) { + //title + subtitle + QGroupBox *seriesTitleBox = new QGroupBox(tr("Title")); + mTitle = new QLineEdit; + QString title = mIdx.data(SeriesTreeModel::NameRole).toString(); + QFontMetrics fm(qApp->font()); + int titleWidth = fm.width(title); + mTitle->setMinimumWidth(titleWidth + fm.maxWidth()); + mTitle->setText(title); + QFormLayout *titleLayout = new QFormLayout; + titleLayout->addRow(tr("&Title"), mTitle); + mSubtitle = new QLineEdit; + mSubtitle->setEnabled(false); + int type = mIdx.data(SeriesTreeModel::TypeRole).toInt(); + if(type == SeriesTreeModel::Part){ + titleLayout->addRow(tr("&Subtitle"), mSubtitle); + mSubtitle->setEnabled(true); + mSubtitle->setText(mIdx.data(SeriesTreeModel::SubtitleRole).toString()); + mTitle->setEnabled(false); + } + seriesTitleBox->setLayout(titleLayout); + + //seriespart + favorite + QGroupBox *partDataBox = new QGroupBox(tr("Other data")); + QHBoxLayout *partNoLayout = new QHBoxLayout; + mPartNo = new QSpinBox; + mPartNo->setMinimum(1); + mPartNo->setValue(mIdx.data(SeriesTreeModel::SeriesPartRole).toInt()); + mHasPartNo = new QCheckBox(tr("Element has Part no.")); + connect(mHasPartNo, SIGNAL(stateChanged(int)), this, SLOT(hasPartNoStateChanged(int))); + mHasPartNo->setChecked(mIdx.data(SeriesTreeModel::SeriesPartRole).toInt()); + partNoLayout->addWidget(mHasPartNo); + partNoLayout->addStretch(); + partNoLayout->addWidget(mPartNo); + mFavorite = new QCheckBox(tr("Favorite")); + mFavorite->setChecked(mIdx.data(SeriesTreeModel::FavoriteRole).toBool()); + QVBoxLayout *partDataLayout = new QVBoxLayout; + partDataLayout->addLayout(partNoLayout); + partDataLayout->addWidget(mFavorite); + partDataBox->setLayout(partDataLayout); + + //buttons + QHBoxLayout *buttonLayout = new QHBoxLayout; + buttonLayout->addStretch(); + mOk = new QPushButton(tr("Ok")); + connect(mOk, SIGNAL(clicked()), this, SLOT(accept())); + buttonLayout->addWidget(mOk); + mCancel = new QPushButton(tr("Cancel")); + connect(mCancel, SIGNAL(clicked()), this, SLOT(reject())); + buttonLayout->addWidget(mCancel); + + //main layout + QVBoxLayout *mainLayout = new QVBoxLayout; + mainLayout->addWidget(seriesTitleBox); + mainLayout->addWidget(partDataBox); + partDataBox->setVisible(type == SeriesTreeModel::Part); + mainLayout->addLayout(buttonLayout); + setLayout(mainLayout); +} + +void EditSeriesDialog::accept(){ + SeriesTreeModel *model = static_cast<SeriesTreeModel*>(SmGlobals::instance()->model("SeriesModel")); + QModelIndex favoriteIdx = model->index(mIdx.row(), SeriesTreeModel::Favorite, mIdx.parent()); + model->setData(favoriteIdx, (mFavorite->checkState() == Qt::Checked), Qt::EditRole); + QModelIndex titleIdx = model->index(mIdx.row(), SeriesTreeModel::Name, mIdx.parent()); + model->setData(titleIdx, mTitle->text().toLower().trimmed(), Qt::EditRole); + QModelIndex subtitleIdx = model->index(mIdx.row(), SeriesTreeModel::Subtitle, mIdx.parent()); + model->setData(subtitleIdx, mSubtitle->text().toLower().trimmed(), Qt::EditRole); + bool hasPartNo = mHasPartNo->isChecked(); + int partNo = hasPartNo ? mPartNo->value() : 0; + QModelIndex partNoIdx = model->index(mIdx.row(), SeriesTreeModel::SeriesPart, mIdx.parent()); + model->setData(partNoIdx, partNo, Qt::EditRole); + QDialog::accept(); +} + +void EditSeriesDialog::hasPartNoStateChanged(int state){ + mPartNo->setEnabled(state == Qt::Checked); +} + CompleterProducer::CompleterProducer(int Mode, QObject *parent) : QObject(parent), mMode(Mode){ mDb = QSqlDatabase::cloneDatabase(QSqlDatabase::database("treedb"), "complprod"); mDb.open(); |