navit  0.5.3-trunk
searchProxy.h
Go to the documentation of this file.
1 #ifndef NAVIT_GUI_QML_SEARCHPROXY_H
2 #define NAVIT_GUI_QML_SEARCHPROXY_H
3 
4 void __setNewPoint(struct gui_priv* this_,struct pcoord* pc, NGQPointTypes type);
5 
6 class NGQProxySearch : public NGQProxy {
7  Q_OBJECT;
8 
9  Q_PROPERTY(QString countryName READ countryName WRITE setCountryName NOTIFY countryNameSignal);
10  Q_PROPERTY(QString countryISO2 READ countryISO2 WRITE setCountryISO2 NOTIFY countryISO2Signal);
11  Q_PROPERTY(QString townName READ townName WRITE setTownName NOTIFY townNameSignal);
12  Q_PROPERTY(QString streetName READ streetName WRITE setStreetName NOTIFY streetNameSignal);
13 
14  Q_PROPERTY(QString searchContext READ searchContext WRITE setSearchContext);
15 
16 public:
17  NGQProxySearch(struct gui_priv* this_,QObject* parent) : NGQProxy(this_,parent) {
18  struct attr search_attr, country_name, country_iso2, *country_attr;
19  struct item *item;
20  struct country_search *cs;
21  struct tracking *tracking;
22  struct search_list_result *res;
23 
25  this->search_context="country";
26 
27  country_attr=country_default();
29  if (tracking && tracking_get_attr(tracking, attr_country_id, &search_attr, NULL))
30  country_attr=&search_attr;
31  if (country_attr) {
32  cs=country_search_new(country_attr, 0);
34  if (item && item_attr_get(item, attr_country_name, &country_name)) {
35  search_attr.type=attr_country_all;
36  dbg(lvl_debug,"country %s", country_name.u.str);
37  this->country_name=QString::fromLocal8Bit(country_name.u.str);
38  search_attr.u.str=country_name.u.str;
39  search_list_search(this->sl, &search_attr, 0);
40  while((res=search_list_get_result(this->sl)));
41  if (item_attr_get(item, attr_country_iso2, &country_iso2)) {
42  this->country_iso2=QString::fromLocal8Bit(country_iso2.u.str);
43  }
44  }
46  } else {
47  dbg(lvl_error,"warning: no default country found");
48  if (!this->country_iso2.isEmpty()) {
49  dbg(lvl_debug,"attempting to use country '%s'",this->country_iso2.toStdString().c_str());
50  search_attr.type=attr_country_iso2;
51  search_attr.u.str=(char*)this->country_iso2.toStdString().c_str();
52  search_list_search(this->sl, &search_attr, 0);
53  while((res=search_list_get_result(this->sl)));
54  }
55  }
56  }
58  search_list_destroy(this->sl);
59  }
60 
61 signals:
62  void countryNameSignal(QString);
63  void countryISO2Signal(QString);
64  void townNameSignal(QString);
65  void streetNameSignal(QString);
66 
67 public slots:
69  struct attr attr;
70  struct search_list_result *res;
71 
72  if (this->street_name.length()>0) {
73  attr.type=attr_street_name;
74  attr.u.str=this->street_name.toLocal8Bit().data();
75  } else if (this->town_name.length()>0) {
76  attr.type=attr_town_or_district_name;
77  attr.u.str=this->town_name.toLocal8Bit().data();
78  } else if (this->country_name.length()>0) {
79  attr.type=attr_country_name;
80  attr.u.str=this->country_name.toLocal8Bit().data();
81  }
82  search_list_search(this->sl,&attr,0);
83  if ((res=search_list_get_result(this->sl))) {
84  __setNewPoint(this->object,res->c,PointOfInterest);
85  }
86  return;
87  }
88  QString searchXml() {
90  struct attr attr;
91  struct search_list_result *res;
92  int counter=0;
93  QDomDocument retDoc;
94  QDomElement entries;
95 
96  entries=retDoc.createElement("search");
97  retDoc.appendChild(entries);
98 
99  if (this->search_context=="country") {
100  attr.type=attr_country_name;
101  attr.u.str=this->country_name.toLocal8Bit().data();
102  }
103  if (this->search_context=="town") {
104  if (this->town_name.length()<3) {
105  return retDoc.toString();
106  }
107  attr.type=attr_town_or_district_name;
108  attr.u.str=this->town_name.toLocal8Bit().data();
109  }
110  if (this->search_context=="street") {
111  attr.type=attr_street_name;
112  attr.u.str=this->street_name.toLocal8Bit().data();
113  }
114 
115  search_list_search(this->sl,&attr,1);
116 
117  while ((res=search_list_get_result(this->sl))) {
118  QStandardItem* curItem=new QStandardItem();
119  QDomElement entry=retDoc.createElement("item");
120  entries.appendChild(entry);
121  //Result processing depends on search type
122  if (this->search_context=="country") {
123  entry.appendChild(this->_fieldValueHelper(retDoc,QString("id"), QString::number(counter)));
124  entry.appendChild(this->_fieldValueHelper(retDoc,QString("name"), QString::fromLocal8Bit(res->country->name)));
125  entry.appendChild(this->_fieldValueHelper(retDoc,QString("icon"), QString("country_%1%2").arg(res->country->iso2).arg(".svgz")));
126  }
127  if (this->search_context=="town") {
128  entry.appendChild(this->_fieldValueHelper(retDoc,QString("id"), QString::number(counter)));
129  if (res->town->common.town_name) {
130  entry.appendChild(this->_fieldValueHelper(retDoc,QString("name"),QString::fromLocal8Bit(res->town->common.town_name)));
131  }
132  if (res->town->common.district_name) {
133  entry.appendChild(this->_fieldValueHelper(retDoc,QString("name"), QString::fromLocal8Bit(res->town->common.district_name)));
134  }
135  }
136  if (this->search_context=="street") {
137  entry.appendChild(this->_fieldValueHelper(retDoc,QString("id"), QString::number(counter)));
138  entry.appendChild(this->_fieldValueHelper(retDoc,QString("name"),QString::fromLocal8Bit(res->street->name)));
139  }
140  counter++;
141  ret->appendRow(curItem);
142  }
143 
144  return retDoc.toString();
145  }
146  QString countryName() {
147  return this->country_name;
148  }
149  void setCountryName(QString countryName) {
151  struct attr attr;
152  struct search_list_result *res;
153 
154  //We need to update ISO2
155  attr.type=attr_country_name;
156  attr.u.str=countryName.toLocal8Bit().data();
157  search_list_search(this->sl,&attr,0);
158  while ((res=search_list_get_result(this->sl))) {
159  this->setCountryISO2(QString::fromLocal8Bit(res->country->iso2));
160  }
161  //...and current town
162  this->town_name="";
163  this->street_name="";
164 
166  }
167  QString countryISO2() {
168  return this->country_iso2;
169  }
170  void setCountryISO2(QString countryISO2) {
172  countryISO2Signal(countryISO2);
173  }
174  QString townName() {
175  return this->town_name;
176  }
177  void setTownName(QString townName) {
178  struct attr attr;
179 
180  this->town_name=townName;
181 
182  //Specialize search
183  attr.type=attr_town_or_district_name;
184  attr.u.str=townName.toLocal8Bit().data();
185  search_list_search(this->sl,&attr,0);
186 
187  //...and street
188  this->street_name="";
189 
191  }
192  QString streetName() {
193  return this->street_name;
194  }
195  void setStreetName(QString streetName) {
196  struct attr attr;
197 
198  this->street_name=streetName;
199 
200  //Specialize search
201  attr.type=attr_street_name;
202  attr.u.str=streetName.toLocal8Bit().data();
203  search_list_search(this->sl,&attr,0);
204 
206  }
207  QString searchContext() {
208  return this->search_context;
209  }
212  }
213 
214 protected:
215  virtual int getAttrFunc(enum attr_type type, struct attr *attr, struct attr_iter *iter) {
216  return 0;
217  }
218  virtual int setAttrFunc(struct attr *attr) {
219  return 0;
220  }
221 private:
222  struct search_list *sl;
223  QString search_context;
225 };
226 
227 #include "searchProxy.moc"
228 
229 #endif /* NAVIT_GUI_QML_SEARCHPROXY_H */
attr_type
Definition: attr.h:34
Definition: searchProxy.h:6
QString countryISO2()
Definition: searchProxy.h:167
virtual int setAttrFunc(struct attr *attr)
Definition: searchProxy.h:218
struct search_list * sl
Definition: searchProxy.h:222
void setSearchContext(QString searchContext)
Definition: searchProxy.h:210
QString countryName()
Definition: searchProxy.h:146
QString townName
Definition: searchProxy.h:10
QString town_name
Definition: searchProxy.h:224
void setTownName(QString townName)
Definition: searchProxy.h:177
void townNameSignal(QString)
void setCountryISO2(QString countryISO2)
Definition: searchProxy.h:170
void countryISO2Signal(QString)
QString streetName()
Definition: searchProxy.h:192
void setCountryName(QString countryName)
Definition: searchProxy.h:149
QString searchContext
Definition: searchProxy.h:12
void setStreetName(QString streetName)
Definition: searchProxy.h:195
QString country_iso2
Definition: searchProxy.h:224
void countryNameSignal(QString)
QString country_name
Definition: searchProxy.h:224
~NGQProxySearch()
Definition: searchProxy.h:57
QString search_context
Definition: searchProxy.h:223
NGQProxySearch(struct gui_priv *this_, QObject *parent)
Definition: searchProxy.h:17
void setPointToResult()
Definition: searchProxy.h:68
QString street_name
Definition: searchProxy.h:224
QString searchContext()
Definition: searchProxy.h:207
virtual int getAttrFunc(enum attr_type type, struct attr *attr, struct attr_iter *iter)
Definition: searchProxy.h:215
QString countryName
Definition: searchProxy.h:7
QString searchXml()
Definition: searchProxy.h:88
QString countryISO2
Definition: searchProxy.h:9
void streetNameSignal(QString)
QString townName()
Definition: searchProxy.h:174
QString streetName
Definition: searchProxy.h:11
Definition: proxy.h:21
struct gui_priv * object
Definition: proxy.h:89
QDomElement _fieldValueHelper(QDomDocument doc, QString field, QString value)
Definition: proxy.h:98
Definition: proxy.h:4
struct country_search * country_search_new(struct attr *search, int partial)
Definition: country.c:360
struct attr * country_default(void)
Definition: country.c:414
struct item * country_search_get_item(struct country_search *this_)
Definition: country.c:394
void country_search_destroy(struct country_search *this_)
Definition: country.c:427
@ lvl_error
Definition: debug.h:46
@ lvl_debug
Definition: debug.h:52
#define dbg(level,...)
Definition: debug.h:59
char type[3]
Definition: garmin_img.c:2
struct mapset * navit_get_mapset(struct navit *this_)
Get the current mapset.
Definition: navit.c:226
struct tracking * navit_get_tracking(struct navit *this_)
Definition: navit.c:361
static GtkActionEntry entries[]
Definition: gui_gtk_action.c:196
int item_attr_get(struct item *it, enum attr_type attr_type, struct attr *attr)
Gets the next matching attribute from an item.
Definition: item.c:414
NGQPointTypes
Definition: ngqpoint.h:32
@ PointOfInterest
Definition: ngqpoint.h:32
static struct item_bin item
Definition: osm.c:52
void __setNewPoint(struct gui_priv *this_, struct pcoord *pc, NGQPointTypes type)
Definition: guiProxy.h:146
struct search_list_result * search_list_get_result(struct search_list *this_)
Get (next) result from a search.
Definition: search.c:787
void search_list_destroy(struct search_list *this_)
Definition: search.c:961
struct search_list * search_list_new(struct mapset *ms)
Create new instance of search_list to run a search.
Definition: search.c:96
void search_list_search(struct search_list *this_, struct attr *search_attr, int partial)
Start a search.
Definition: search.c:334
Definition: config_.c:47
Definition: attr.h:157
char * str
Definition: attr.h:160
union attr::@0 u
enum attr_type type
Definition: attr.h:158
Definition: country.c:297
Definition: graphics_win32.h:52
struct navit * nav
Definition: graphics_win32.h:53
Represents an object on a map.
Definition: item.h:115
Definition: gpx2navit_txt.h:51
Definition: coord.h:52
char * town_name
Definition: search.h:31
char * district_name
Definition: search.h:32
char * iso2
Definition: search.h:42
char * name
Definition: search.h:44
Definition: search.h:65
struct pcoord * c
Definition: search.h:67
struct search_list_country * country
Definition: search.h:68
struct search_list_town * town
Definition: search.h:69
struct search_list_street * street
Definition: search.h:70
char * name
Definition: search.h:56
struct search_list_common common
Definition: search.h:49
Definition: search.c:61
Definition: mg.h:144
Definition: track.c:84
int tracking_get_attr(struct tracking *_this, enum attr_type type, struct attr *attr, struct attr_iter *attr_iter)
Definition: track.c:321