summaryrefslogtreecommitdiff
path: root/navit/gui/qml/searchProxy.h
diff options
context:
space:
mode:
authorakashihi <akashihi@ffa7fe5e-494d-0410-b361-a75ebd5db220>2010-04-14 14:22:44 +0000
committerakashihi <akashihi@ffa7fe5e-494d-0410-b361-a75ebd5db220>2010-04-14 14:22:44 +0000
commitb64139742425543a881455882a2bc25525c5ddd0 (patch)
treed07bee3e8926e8ecc7044e751eab41bcd703e35f /navit/gui/qml/searchProxy.h
parent0e7ebd330c6936b1350c6513c87ab42d37e81ad3 (diff)
downloadnavit-b64139742425543a881455882a2bc25525c5ddd0.tar.gz
Add:gui/qml:Implemented Country-Town-Street search
git-svn-id: http://svn.code.sf.net/p/navit/code/trunk/navit@3175 ffa7fe5e-494d-0410-b361-a75ebd5db220
Diffstat (limited to 'navit/gui/qml/searchProxy.h')
-rw-r--r--navit/gui/qml/searchProxy.h109
1 files changed, 79 insertions, 30 deletions
diff --git a/navit/gui/qml/searchProxy.h b/navit/gui/qml/searchProxy.h
index b82004def..77d71fa15 100644
--- a/navit/gui/qml/searchProxy.h
+++ b/navit/gui/qml/searchProxy.h
@@ -1,14 +1,18 @@
#ifndef NAVIT_GUI_QML_SEARCHPROXY_H
#define NAVIT_GUI_QML_SEARCHPROXY_H
+void __setNewPoint(struct gui_priv* this_,struct pcoord* pc, NGQPointTypes type);
+
class NGQProxySearch : public NGQProxy {
Q_OBJECT;
Q_PROPERTY(QString countryName READ countryName WRITE setCountryName NOTIFY countryNameSignal);
Q_PROPERTY(QString countryISO2 READ countryISO2 WRITE setCountryISO2 NOTIFY countryISO2Signal);
Q_PROPERTY(QString townName READ townName WRITE setTownName NOTIFY townNameSignal);
+ Q_PROPERTY(QString streetName READ streetName WRITE setStreetName NOTIFY streetNameSignal);
Q_PROPERTY(QString searchContext READ searchContext WRITE setSearchContext);
+ Q_PROPERTY(QString searchXml READ searchXml NOTIFY searchXmlSignal);
public:
NGQProxySearch(struct gui_priv* this_,QObject* parent) : NGQProxy(this_,parent) {
@@ -20,7 +24,6 @@ public:
this->sl=search_list_new(navit_get_mapset(this->object->nav));
this->search_context="country";
- this->town_name="Select a town";
country_attr=country_default();
tracking=navit_get_tracking(this->object->nav);
@@ -60,70 +63,87 @@ signals:
void countryNameSignal(QString);
void countryISO2Signal(QString);
void townNameSignal(QString);
+ void streetNameSignal(QString);
+ void searchXmlSignal(QString);
public slots:
- QString getAttrList(const QString &attr_name) {
+ void setPointToResult() {
+ struct attr attr;
+ struct search_list_result *res;
+
+ if (this->street_name.length()>0) {
+ attr.type=attr_street_name;
+ attr.u.str=this->street_name.toLocal8Bit().data();
+ } else if (this->town_name.length()>0) {
+ attr.type=attr_town_or_district_name;
+ attr.u.str=this->town_name.toLocal8Bit().data();
+ } else if (this->country_name.length()>0) {
+ attr.type=attr_country_name;
+ attr.u.str=this->country_name.toLocal8Bit().data();
+ }
+ search_list_search(this->sl,&attr,0);
+ if (res=search_list_get_result(this->sl)) {
+ __setNewPoint(this->object,res->c,PointOfInterest);
+ }
+ return;
+ }
+ QString searchXml() {
NGQStandardItemModel* ret=new NGQStandardItemModel(this);
struct attr attr;
struct search_list_result *res;
int counter=0;
- QString currentValue, retId;
+ QDomDocument retDoc;
+ QDomElement entries;
+
+ entries=retDoc.createElement("search");
+ retDoc.appendChild(entries);
if (this->search_context=="country") {
- currentValue=this->country_name;
attr.type=attr_country_name;
- attr.u.str="";
+ attr.u.str=this->country_name.toLocal8Bit().data();
}
if (this->search_context=="town") {
- currentValue=this->town_name;
+ if (this->town_name.length()<3) {
+ return retDoc.toString();
+ }
attr.type=attr_town_or_district_name;
- attr.u.str="";
+ attr.u.str=this->town_name.toLocal8Bit().data();
}
if (this->search_context=="street") {
- currentValue=this->street_name;
attr.type=attr_street_name;
- attr.u.str="";
+ attr.u.str=this->street_name.toLocal8Bit().data();
}
search_list_search(this->sl,&attr,1);
while ((res=search_list_get_result(this->sl))) {
QStandardItem* curItem=new QStandardItem();
+ QDomElement entry=retDoc.createElement("item");
+ entries.appendChild(entry);
//Result processing depends on search type
if (this->search_context=="country") {
- curItem->setData(QVariant(counter),NGQStandardItemModel::ItemId);
- curItem->setData(QString::fromLocal8Bit(res->country->name),NGQStandardItemModel::ItemName);
- curItem->setData(QString("country_%1%2").arg(res->country->iso2).arg(".svgz"),NGQStandardItemModel::ItemIcon);
- if (this->country_name==QString::fromLocal8Bit(res->country->name)) {
- retId.setNum(counter);
- }
+ entry.appendChild(this->_fieldValueHelper(retDoc,QString("id"), QString::number(counter)));
+ entry.appendChild(this->_fieldValueHelper(retDoc,QString("name"), QString::fromLocal8Bit(res->country->name)));
+ entry.appendChild(this->_fieldValueHelper(retDoc,QString("icon"), QString("country_%1%2").arg(res->country->iso2).arg(".svgz")));
}
if (this->search_context=="town") {
- curItem->setData(QVariant(counter),NGQStandardItemModel::ItemId);
+ entry.appendChild(this->_fieldValueHelper(retDoc,QString("id"), QString::number(counter)));
if (res->town->common.town_name) {
- curItem->setData(QString::fromLocal8Bit(res->town->common.town_name),NGQStandardItemModel::ItemName);
+ entry.appendChild(this->_fieldValueHelper(retDoc,QString("name"),QString::fromLocal8Bit(res->town->common.town_name)));
}
if (res->town->common.district_name) {
- curItem->setData(QString::fromLocal8Bit(res->town->common.district_name),NGQStandardItemModel::ItemName);
+ entry.appendChild(this->_fieldValueHelper(retDoc,QString("name"), QString::fromLocal8Bit(res->town->common.district_name)));
}
- if (this->town_name==QString::fromLocal8Bit(res->town->common.town_name) || this->town_name==QString::fromLocal8Bit(res->town->common.district_name)) {
- retId.setNum(counter);
- }
}
if (this->search_context=="street") {
- curItem->setData(QVariant(counter),NGQStandardItemModel::ItemId);
- curItem->setData(QString::fromLocal8Bit(res->street->name),NGQStandardItemModel::ItemName);
- if (this->street_name==QString::fromLocal8Bit(res->street->name)) {
- retId.setNum(counter);
- }
+ entry.appendChild(this->_fieldValueHelper(retDoc,QString("id"), QString::number(counter)));
+ entry.appendChild(this->_fieldValueHelper(retDoc,QString("name"),QString::fromLocal8Bit(res->street->name)));
}
counter++;
ret->appendRow(curItem);
}
- this->object->guiWidget->rootContext()->setContextProperty("listModel",static_cast<QObject*>(ret));
-
- return retId;
+ return retDoc.toString();
}
QString countryName() {
return this->country_name;
@@ -141,7 +161,11 @@ public slots:
this->setCountryISO2(QString::fromLocal8Bit(res->country->iso2));
}
//...and current town
- this->town_name="Select a town";
+ this->town_name="";
+ this->street_name="";
+
+ //...and a list
+ searchXmlSignal(this->searchXml());
countryNameSignal(countryName);
}
@@ -165,9 +189,34 @@ public slots:
attr.type=attr_town_or_district_name;
attr.u.str=townName.toLocal8Bit().data();
search_list_search(this->sl,&attr,0);
+
+ //...and street
+ this->street_name="";
+
+ //...and a list
+ searchXmlSignal(this->searchXml());
townNameSignal(townName);
}
+ QString streetName() {
+ return this->street_name;
+ }
+ void setStreetName(QString streetName) {
+ struct attr attr;
+ struct search_list_result *res;
+
+ this->street_name=streetName;
+
+ //Specialize search
+ attr.type=attr_street_name;
+ attr.u.str=streetName.toLocal8Bit().data();
+ search_list_search(this->sl,&attr,0);
+
+ //...and a list
+ searchXmlSignal(this->searchXml());
+
+ streetNameSignal(streetName);
+ }
QString searchContext() {
return this->search_context;
}