summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorViktor Verebelyi <vviktor2@gmail.com>2021-06-22 01:40:41 +0100
committerViktor Verebelyi <vviktor2@gmail.com>2021-06-22 01:40:41 +0100
commit211024517532fc6b2244ea81466c39a2cd96db1a (patch)
tree7a20e6822046cbbd70d0a2efe464572bc1866ae9
parent4910220a2944205d804ec4d5a79b755aae2aa9ee (diff)
downloadnavit-211024517532fc6b2244ea81466c39a2cd96db1a.tar.gz
Fix poi model worker
-rw-r--r--navit/gui/qt5_qml/navitpoimodel.cpp48
-rw-r--r--navit/gui/qt5_qml/navitpoimodel.h6
2 files changed, 36 insertions, 18 deletions
diff --git a/navit/gui/qt5_qml/navitpoimodel.cpp b/navit/gui/qt5_qml/navitpoimodel.cpp
index b8d9b27f9..669d67784 100644
--- a/navit/gui/qt5_qml/navitpoimodel.cpp
+++ b/navit/gui/qt5_qml/navitpoimodel.cpp
@@ -41,32 +41,43 @@ POISearchWorker::POISearchWorker (NavitInstance * navit, QString filter, int scr
POISearchWorker::~POISearchWorker (){
qDebug() << "Deleting POISearchWorker";
finish();
+
+ if (m_idleCallback) {
+ callback_destroy(m_idleCallback);
+ m_idleCallback=nullptr;
+ }
}
void POISearchWorker::start(){
this->m_idleCallback=callback_new_1(callback_cast(POISearchWorker::callbackHandler), this);
- this->m_idle=event_add_idle(0,this->m_idleCallback);
- callback_call_0(this->m_idleCallback);
+ this->m_idle=event_add_idle(100,this->m_idleCallback);
}
void POISearchWorker::callbackHandler(POISearchWorker this_){
this_.proccess();
}
void POISearchWorker::proccess(){
- if(!m_mr || !m_item){
- if(!m_item){
- map_rect_destroy(m_mr);
- }
+ if(!m_idle || !m_idleCallback){
+ qDebug() << "m_idle or m_idleCallbackis null returning";
+ return;
+ }
+ if(!m_mr){
+ qDebug() << "m_mr is null, proccessMapset";
+ proccessMapset();
+ } else if(!m_item){
+ qDebug() << "m_item is null, proccessMapset";
+ map_rect_destroy(m_mr);
proccessMapset();
}
if(m_mr){
for(int i = 0; i < 100; i++){
- proccessMapsetItem();
if(!m_item){
+ proccessMapsetItem();
return;
}
}
} else {
+ qDebug() << "mr is null, destroying";
map_selection_destroy(m_sel);
finish();
}
@@ -75,8 +86,10 @@ void POISearchWorker::proccess(){
void POISearchWorker::proccessMapset(){
qDebug() << " Processing mapset";
m_m = mapset_next(m_h, 1);
- if(m_m == nullptr){
- finish();
+ if(!m_m){
+ qDebug() << "Mapset is null";
+ m_selm = nullptr;
+ m_mr = nullptr;
return;
}
m_selm = map_selection_dup_pro(m_sel, m_pro, map_projection(m_m));
@@ -88,6 +101,9 @@ void POISearchWorker::proccessMapset(){
void POISearchWorker::proccessMapsetItem(){
// qDebug() << " Processing mapset Item";
+ if(!m_mr){
+ return;
+ }
m_item = map_rect_get_item(m_mr);
if(!m_item){
return;
@@ -138,6 +154,7 @@ void POISearchWorker::proccessMapsetItem(){
}
void POISearchWorker::finish(){
+ qDebug() << "Finishing worker";
if(m_sel){
map_selection_destroy(m_sel);
m_sel=nullptr;
@@ -150,9 +167,9 @@ void POISearchWorker::finish(){
event_remove_idle(m_idle);
m_idle=nullptr;
}
- if (m_idleCallback) {
+ if (m_idleCallback){
callback_destroy(m_idleCallback);
- m_idleCallback=nullptr;
+ m_idleCallback = nullptr;
}
}
@@ -260,9 +277,9 @@ QString NavitPOIModel::getAddressString(struct item *item, int prependPostal) {
void NavitPOIModel::stopWorker(bool clearModel){
if(m_poiWorker){
- delete (m_poiWorker);
- m_poiWorker = nullptr;
+ m_poiWorker->finish();
}
+
if(clearModel){
beginResetModel();
m_pois.clear();
@@ -273,6 +290,11 @@ void NavitPOIModel::stopWorker(bool clearModel){
void NavitPOIModel::search(QString filter, int screenX, int screenY, int distance){
stopWorker(true);
+ if(m_poiWorker){
+ delete (m_poiWorker);
+ m_poiWorker = nullptr;
+ }
+
m_poiWorker = new POISearchWorker(m_navitInstance, filter, screenX, screenY, distance);
connect(m_poiWorker, &POISearchWorker::gotSearchResult, this, &NavitPOIModel::receiveSearchResult);
m_poiWorker->start();
diff --git a/navit/gui/qt5_qml/navitpoimodel.h b/navit/gui/qt5_qml/navitpoimodel.h
index 816ec36b4..c827682ef 100644
--- a/navit/gui/qt5_qml/navitpoimodel.h
+++ b/navit/gui/qt5_qml/navitpoimodel.h
@@ -63,18 +63,14 @@ private:
struct coord m_center;
struct map *m_m = nullptr;
-<<<<<<< HEAD
struct callback * m_idleCallback = nullptr;
struct event_idle * m_idle = nullptr;
-=======
+
struct item * m_item = nullptr;
struct map_rect *m_mr = nullptr;
- struct callback * m_idleCallback = nullptr;
- struct event_idle * m_idle = nullptr;
struct map_selection *m_selm = nullptr;
->>>>>>> 3e7fdbf86... add:gt5_gui Run POI search on idle
};
class NavitPOIModel : public QAbstractItemModel