diff options
author | Tomaz Canabrava <tomaz.canabrava@intel.com> | 2015-09-21 15:04:52 -0300 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2015-09-23 14:15:19 -0700 |
commit | 8c9a4ecd4b06d62b8b2b6b5a36e025aa84521ec7 (patch) | |
tree | a9b796be9d05b15130243591c6aba56f24a007df /qt-ui | |
parent | be6e190bd2b0480d76fc29bed95d46ad1aa7f414 (diff) | |
download | subsurface-8c9a4ecd4b06d62b8b2b6b5a36e025aa84521ec7.tar.gz |
Stabilize the location model/proxy model
Since I removed the old location edit from the UI, I also need to
remove a bit of code from the UI that was calling it.
fix a few crashes regarding the old location edit.
Signed-off-by: Tomaz Canabrava <tomaz.canabrava@intel.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'qt-ui')
-rw-r--r-- | qt-ui/locationinformation.cpp | 34 | ||||
-rw-r--r-- | qt-ui/locationinformation.h | 1 | ||||
-rw-r--r-- | qt-ui/maintab.cpp | 31 |
3 files changed, 33 insertions, 33 deletions
diff --git a/qt-ui/locationinformation.cpp b/qt-ui/locationinformation.cpp index 3a213e679..b8d66d56e 100644 --- a/qt-ui/locationinformation.cpp +++ b/qt-ui/locationinformation.cpp @@ -7,6 +7,7 @@ #include "filtermodels.h" #include "divelocationmodel.h" #include "divesitehelpers.h" +#include "modeldelegates.h" #include <QDebug> #include <QShowEvent> @@ -327,13 +328,19 @@ DiveLocationLineEdit *location_line_edit = 0; bool DiveLocationFilterProxyModel::filterAcceptsRow(int source_row, const QModelIndex& source_parent) const { - if(source_row == 0 || source_row == 1) + if(source_row == 0) return true; QString sourceString = sourceModel()->index(source_row, DiveLocationModel::NAME).data(Qt::DisplayRole).toString(); return sourceString.toLower().startsWith(location_line_edit->text().toLower()); } +bool DiveLocationFilterProxyModel::lessThan(const QModelIndex& source_left, const QModelIndex& source_right) const +{ + return source_left.data().toString() <= source_right.data().toString(); +} + + DiveLocationModel::DiveLocationModel(QObject *o) { resetModel(); @@ -342,7 +349,6 @@ DiveLocationModel::DiveLocationModel(QObject *o) void DiveLocationModel::resetModel() { beginResetModel(); - qDebug() << "Dive site table size" <<dive_site_table.nr; endResetModel(); } @@ -403,18 +409,20 @@ bool DiveLocationModel::setData(const QModelIndex& index, const QVariant& value, DiveLocationLineEdit::DiveLocationLineEdit(QWidget *parent) { + location_line_edit = this; proxy = new DiveLocationFilterProxyModel(); model = new DiveLocationModel(); view = new DiveLocationListView(); proxy->setSourceModel(model); - view->setModel(model); - + proxy->setFilterKeyColumn(DiveLocationModel::NAME); + view->setModel(proxy); + view->setModelColumn(DiveLocationModel::NAME); + view->setItemDelegate(new LocationFilterDelegate()); connect(this, &QLineEdit::textEdited, this, &DiveLocationLineEdit::setTemporaryDiveSiteName); //HACK: /* This is being show currently just to test. */ - qDebug() << "AAAAAAH"; qDebug() << model->rowCount() << model->columnCount(); view->show(); } @@ -429,7 +437,7 @@ static struct dive_site *get_dive_site_name_start_which_str(const QString& str) int i; for_each_dive_site(i,ds) { QString dsName(ds->name); - if (dsName.startsWith(str)) { + if (dsName.toLower().startsWith(str.toLower())) { return ds; } } @@ -439,11 +447,19 @@ static struct dive_site *get_dive_site_name_start_which_str(const QString& str) void DiveLocationLineEdit::setTemporaryDiveSiteName(const QString& s) { QModelIndex i0 = model->index(0, DiveLocationModel::NAME); + QModelIndex i1 = model->index(1, DiveLocationModel::NAME); model->setData(i0, text()); - struct dive_site *ds = get_dive_site_name_start_which_str(text()); - QModelIndex i1 = model->index(1, DiveLocationModel::NAME); - model->setData(i1, ds ? ds->name : INVALID_DIVE_SITE_NAME); + QString i1_name = INVALID_DIVE_SITE_NAME; + if (struct dive_site *ds = get_dive_site_name_start_which_str(text())) { + const QString orig_name = QString(ds->name).toLower(); + const QString new_name = text().toLower(); + if (new_name != orig_name) + i1_name = QString(ds->name); + } + + model->setData(i1, i1_name ); + proxy->invalidate(); } DiveLocationListView::DiveLocationListView(QWidget *parent) diff --git a/qt-ui/locationinformation.h b/qt-ui/locationinformation.h index 18c3dc760..16d5a3eae 100644 --- a/qt-ui/locationinformation.h +++ b/qt-ui/locationinformation.h @@ -64,6 +64,7 @@ class DiveLocationFilterProxyModel : public QSortFilterProxyModel { public: DiveLocationFilterProxyModel(QObject *parent = 0); virtual bool filterAcceptsRow(int source_row, const QModelIndex& source_parent) const; + virtual bool lessThan(const QModelIndex& source_left, const QModelIndex& source_right) const; }; class DiveLocationModel : public QAbstractTableModel { diff --git a/qt-ui/maintab.cpp b/qt-ui/maintab.cpp index 2499906c9..51df81d87 100644 --- a/qt-ui/maintab.cpp +++ b/qt-ui/maintab.cpp @@ -55,23 +55,6 @@ MainTab::MainTab(QWidget *parent) : QTabWidget(parent), ui.extraData->setModel(extraDataModel); closeMessage(); - QCompleter *completer = new QCompleter(); - QListView *completerListview = new QListView(); - LocationInformationModel::instance()->setFirstRowTextField(ui.location); - completer->setPopup(completerListview); - completer->setModel(LocationInformationModel::instance()); - completer->setCompletionColumn(LocationInformationModel::NAME); - completer->setCaseSensitivity(Qt::CaseInsensitive); - completerListview->setItemDelegate(new LocationFilterDelegate()); - completerListview->setMouseTracking(true); - locationManagementEditHelper = new LocationManagementEditHelper(); - connect(locationManagementEditHelper, &LocationManagementEditHelper::setLineEditText, - ui.location, &QLineEdit::setText); - completerListview->installEventFilter(locationManagementEditHelper); - connect(completerListview, &QAbstractItemView::clicked, - locationManagementEditHelper, &LocationManagementEditHelper::handleActivation); - - ui.location->setCompleter(completer); ui.editDiveSiteButton->setEnabled(true); connect(ui.editDiveSiteButton, SIGNAL(clicked()), MainWindow::instance(), SIGNAL(startDiveSiteEdit())); @@ -238,7 +221,7 @@ bool MainTab::eventFilter(QObject *obj, QEvent *ev) if (line) { if (ev->type() == QEvent::Resize) { - if (line->completer()->popup()->isVisible()) { + /*if (line->completer()->popup()->isVisible()) { QListView *choices = qobject_cast<QListView*>(line->completer()->popup()); QPoint p = ui.location->mapToGlobal(ui.location->pos()); choices->setGeometry( @@ -246,7 +229,9 @@ bool MainTab::eventFilter(QObject *obj, QEvent *ev) p.y() + 3, choices->geometry().width(), choices->geometry().height()); + } + */ } } return false; @@ -392,7 +377,7 @@ void MainTab::enableEdition(EditMode newEditMode) displayMessage(tr("Multiple dives are being edited.")); } else { displayMessage(tr("This dive is being edited.")); - locationManagementEditHelper->resetDiveSiteUuid(); + //locationManagementEditHelper->resetDiveSiteUuid(); } editMode = newEditMode != NONE ? newEditMode : DIVE; } @@ -474,10 +459,6 @@ void MainTab::updateDiveInfo(bool clear) { // I don't like this code here - but globe() wasn't initialized on the constructor. { - QListView *completerListview = qobject_cast<QListView*>(ui.location->completer()->popup()); -#ifndef NO_MARBLE - connect(completerListview, SIGNAL(entered(QModelIndex)), GlobeGPS::instance(), SLOT(centerOnIndex(QModelIndex)), Qt::UniqueConnection); -#endif } ui.location->refreshDiveSiteCache(); @@ -861,7 +842,9 @@ void MainTab::updateDisplayedDiveSite() const QString new_name = ui.location->text(); const QString orig_name = displayed_dive_site.name; const uint32_t orig_uuid = displayed_dive_site.uuid; - const uint32_t new_uuid = locationManagementEditHelper->diveSiteUuid(); + //TODO: FIX THIS + const uint32_t new_uuid = orig_uuid; + // locationManagementEditHelper->diveSiteUuid(); qDebug() << "Updating Displayed Dive Site"; |