diff options
author | Arno <am@disconnect.de> | 2011-07-01 15:58:56 +0200 |
---|---|---|
committer | Arno <am@disconnect.de> | 2011-07-01 15:58:56 +0200 |
commit | 35774a402027714ed6f93041aea1ebe5f5391205 (patch) | |
tree | 72e90eca0f4bbb20fb9ff69ece1b7429714d0767 | |
parent | a06a6425d0ebd982a4fa34502dbb20b06806af49 (diff) | |
download | SheMov-35774a402027714ed6f93041aea1ebe5f5391205.tar.gz SheMov-35774a402027714ed6f93041aea1ebe5f5391205.tar.bz2 SheMov-35774a402027714ed6f93041aea1ebe5f5391205.zip |
Added partial search for MappingTableModel
Added a search button to NewMovieWizard to do partial searches on
the according table. Selected items will be inserted into the
QLineEdit of the Wizard page.
-rw-r--r-- | mappingtablemodel.cpp | 15 | ||||
-rw-r--r-- | mappingtablemodel.h | 1 | ||||
-rw-r--r-- | mappingtablewidget.cpp | 50 | ||||
-rw-r--r-- | mappingtablewidget.h | 20 |
4 files changed, 86 insertions, 0 deletions
diff --git a/mappingtablemodel.cpp b/mappingtablemodel.cpp index 412e37f..0724c00 100644 --- a/mappingtablemodel.cpp +++ b/mappingtablemodel.cpp @@ -132,6 +132,21 @@ void MappingTableModel::setMappings(const QStringList &itemNames, int seriesPart } } +QStringList MappingTableModel::findPartialName(const QString &value) const{ + QStringList retval; + if(value.isEmpty()){ + retval = mItemNames; + }else{ + foreach(const QString cur, mItemNames){ + if(cur.contains(value)){ + retval << cur; + } + } + } + qSort(retval); + return retval; +} + bool MappingTableModel::addItem(const QVariant &name){ QString newValue = name.toString().toLower().trimmed(); if(mItemNames.contains(newValue)){ diff --git a/mappingtablemodel.h b/mappingtablemodel.h index 9d00f72..1c264ff 100644 --- a/mappingtablemodel.h +++ b/mappingtablemodel.h @@ -31,6 +31,7 @@ class MappingTableModel : public SmTreeModel{ virtual bool setData(const QModelIndex &index, const QVariant &value, int role); bool contains(const QString &value) const; void setMappings(const QStringList &itemNames, int seriesPartId = -1); + QStringList findPartialName(const QString &value) const; //add and remove items bool addItem(const QVariant &name); diff --git a/mappingtablewidget.cpp b/mappingtablewidget.cpp index dc406b4..1fe2a12 100644 --- a/mappingtablewidget.cpp +++ b/mappingtablewidget.cpp @@ -46,11 +46,14 @@ MappingTableWidget::MappingTableWidget(const QString &table, QWidget *parent) : //buttons QHBoxLayout *buttonLayout = new QHBoxLayout; + mSearchItem = new QPushButton(tr("&Search...")); + buttonLayout->addWidget(mSearchItem); buttonLayout->addStretch(); mAddItem = new QPushButton(tr("&Add item")); mRemoveItem = new QPushButton(tr("Remove item")); buttonLayout->addWidget(mAddItem); buttonLayout->addWidget(mRemoveItem); + connect(mSearchItem, SIGNAL(clicked()), this, SLOT(searchItem())); connect(mAddItem, SIGNAL(clicked()), this, SLOT(addItem())); connect(mRemoveItem, SIGNAL(clicked()), this, SLOT(removeItem())); @@ -77,6 +80,18 @@ void MappingTableWidget::setEditEnabled(bool enabled){ mRemoveItem->setEnabled(enabled); mItemEdit->setEnabled(enabled); } + +void MappingTableWidget::searchItem(){ + QStringList res = mMappingModel->findPartialName(mItemEdit->text()); + if(res.isEmpty()){ + return; + } + MappingTableResultDialog dlg(res, this); + if(dlg.exec() == QDialog::Accepted){ + mItemEdit->setText(dlg.selectedText()); + } +} + void MappingTableWidget::addItem(){ QString value = mItemEdit->text().toLower().trimmed(); if(mModel->stringList().contains(value)){ @@ -150,3 +165,38 @@ QModelIndex MappingTableItemModel::find(const QString &value) const{ } return index(row, 0); } + +MappingTableResultDialog::MappingTableResultDialog(const QStringList &results, QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f){ + mModel = new QStringListModel(results, this); + mView = new QTreeView(this); + mView->setModel(mModel); + mView->setRootIsDecorated(false); + mView->setSelectionMode(QAbstractItemView::SingleSelection); + mView->setHeaderHidden(true); + mView->setEditTriggers(QAbstractItemView::NoEditTriggers); + mOk = new QPushButton(tr("Ok")); + connect(mOk, SIGNAL(clicked()), this, SLOT(accept())); + mCancel = new QPushButton(tr("Cancel")); + connect(mCancel, SIGNAL(clicked()), this, SLOT(reject())); + QLabel *caption = new QLabel(tr("Search results")); + + //layout + QVBoxLayout *mainLayout = new QVBoxLayout; + mainLayout->addWidget(caption); + mainLayout->addWidget(mView); + QHBoxLayout *buttonLayout = new QHBoxLayout; + buttonLayout->setAlignment(Qt::AlignCenter); + buttonLayout->addWidget(mOk); + buttonLayout->addWidget(mCancel); + mainLayout->addLayout(buttonLayout); + + setLayout(mainLayout); +} + +void MappingTableResultDialog::accept(){ + QModelIndex cur = mView->selectionModel()->currentIndex(); + if(cur.isValid()){ + mSelectedText = cur.data(Qt::DisplayRole).toString(); + } + return QDialog::accept(); +} diff --git a/mappingtablewidget.h b/mappingtablewidget.h index 38c4fe1..02b37c3 100644 --- a/mappingtablewidget.h +++ b/mappingtablewidget.h @@ -10,6 +10,7 @@ #include <QWidget> #include <QStringListModel> +#include <QDialog> class QTreeView; class QLineEdit; @@ -29,6 +30,7 @@ class MappingTableWidget : public QWidget{ void setCurrentId(int id) { mCurrentId = id; } private slots: + void searchItem(); void addItem(); void removeItem(); @@ -36,6 +38,7 @@ class MappingTableWidget : public QWidget{ QTreeView *mView; QPushButton *mAddItem; QPushButton *mRemoveItem; + QPushButton *mSearchItem; QLineEdit *mItemEdit; MappingTableItemModel *mModel; MappingTableModel *mMappingModel; @@ -62,4 +65,21 @@ class MappingTableItemModel : public QStringListModel { QIcon mDecorationIcon; }; +class MappingTableResultDialog : public QDialog { + Q_OBJECT + public: + explicit MappingTableResultDialog(const QStringList &results, QWidget *parent = 0, Qt::WindowFlags f = 0); + QString selectedText() const { return mSelectedText; } + + private slots: + void accept(); + + private: + QTreeView *mView; + QStringListModel *mModel; + QPushButton *mOk; + QPushButton *mCancel; + QString mSelectedText; +}; + #endif // MAPPINGTABLEWIDGET_H |