summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArno <am@disconnect.de>2011-07-01 15:58:56 +0200
committerArno <am@disconnect.de>2011-07-01 15:58:56 +0200
commit35774a402027714ed6f93041aea1ebe5f5391205 (patch)
tree72e90eca0f4bbb20fb9ff69ece1b7429714d0767
parenta06a6425d0ebd982a4fa34502dbb20b06806af49 (diff)
downloadSheMov-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.cpp15
-rw-r--r--mappingtablemodel.h1
-rw-r--r--mappingtablewidget.cpp50
-rw-r--r--mappingtablewidget.h20
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