diff options
author | Tomaz Canabrava <tomaz.canabrava@intel.com> | 2015-07-16 18:08:08 -0300 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2015-07-16 18:33:57 -0700 |
commit | 56240cff5ba2e8b762d3ba85cf62aafdc874d693 (patch) | |
tree | e8ff7ed5a3ac98aeaa2f1a1fa1d8840a83b51369 | |
parent | 86bd9c7a90b9cced6fb5cee5faa21954d02f3662 (diff) | |
download | subsurface-56240cff5ba2e8b762d3ba85cf62aafdc874d693.tar.gz |
Show only 1 possibility if string is unique
We should only show one possibility if the dive_site name
string is unique - we don't have that dive_site yet - so
we pass to the Completer filter a Dummy string that will
surelly not be a dive site - konami code.
Signed-off-by: Tomaz Canabrava <tomaz.canabrava@intel.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r-- | qt-models/divelocationmodel.cpp | 33 | ||||
-rw-r--r-- | qt-ui/modeldelegates.cpp | 5 |
2 files changed, 29 insertions, 9 deletions
diff --git a/qt-models/divelocationmodel.cpp b/qt-models/divelocationmodel.cpp index 778496a89..05d7df709 100644 --- a/qt-models/divelocationmodel.cpp +++ b/qt-models/divelocationmodel.cpp @@ -32,6 +32,18 @@ int LocationInformationModel::rowCount(const QModelIndex &parent) const return internalRowCount + 2; } +static struct dive_site *get_dive_site_name_start_which_str(const QString& str) { + struct dive_site *ds; + int i; + for_each_dive_site(i,ds) { + QString dsName(ds->name); + if (dsName.startsWith(str)) { + return ds; + } + } + return NULL; +} + QVariant LocationInformationModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) @@ -44,20 +56,25 @@ QVariant LocationInformationModel::data(const QModelIndex &index, int role) cons switch(role) { case Qt::DisplayRole : { if (index.row() == 1) { - struct dive_site *ds; - int i; - for_each_dive_site(i, ds) { - QString dsName(ds->name); - if (dsName.startsWith(textField->text())) - return dsName; - } + struct dive_site *ds = get_dive_site_name_start_which_str(textField->text()); + if(ds) + return ds->name; } return textField->text(); } case Qt::ToolTipRole : { return QString(tr("Create dive site with this name")); } - case Qt::EditRole : return textField->text(); + case Qt::EditRole : { + if (index.row() == 1) { + struct dive_site *ds = get_dive_site_name_start_which_str(textField->text()); + if (!ds) + return "NOT HERE"; + if (QString(ds->name) == textField->text()) + return "NOT HERE"; + } + return textField->text(); + } case Qt::DecorationRole : return QIcon(":plus"); } } diff --git a/qt-ui/modeldelegates.cpp b/qt-ui/modeldelegates.cpp index f0f77ab67..404d329fc 100644 --- a/qt-ui/modeldelegates.cpp +++ b/qt-ui/modeldelegates.cpp @@ -22,6 +22,7 @@ #include <QFont> #include <QBrush> #include <QColor> +#include <QAbstractProxyModel> QSize DiveListDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const { @@ -489,12 +490,14 @@ LocationFilterDelegate::LocationFilterDelegate(QObject *parent) { } -void LocationFilterDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const +void LocationFilterDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &origIdx) const { QFont fontBigger = qApp->font(); QFont fontSmaller = qApp->font(); QFontMetrics fmBigger(fontBigger); QStyleOptionViewItemV4 opt = option; + const QAbstractProxyModel *proxyModel = dynamic_cast<const QAbstractProxyModel*>(origIdx.model()); + QModelIndex index = proxyModel->mapToSource(origIdx); QStyledItemDelegate::initStyleOption(&opt, index); QBrush bg; QString diveSiteName = index.data().toString(); |