From a4fa8d60eb78d410e3c51cb801a0537c890257ba Mon Sep 17 00:00:00 2001 From: Arno Date: Sat, 7 May 2011 21:18:02 +0200 Subject: 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. --- seriestreewidget.cpp | 91 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 88 insertions(+), 3 deletions(-) (limited to 'seriestreewidget.cpp') diff --git a/seriestreewidget.cpp b/seriestreewidget.cpp index 5b25f0f..e57905f 100644 --- a/seriestreewidget.cpp +++ b/seriestreewidget.cpp @@ -30,6 +30,12 @@ #include #include #include +#include +#include +#include +#include +#include +#include #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(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(); -- cgit v1.2.3-70-g09d2