diff options
-rw-r--r-- | navit/gui/qml/ngqpoint.h | 61 | ||||
-rw-r--r-- | navit/gui/qml/skins/navit/Makefile.am | 2 | ||||
-rw-r--r-- | navit/gui/qml/skins/navit/PageNavigate.qml | 2 |
3 files changed, 63 insertions, 2 deletions
diff --git a/navit/gui/qml/ngqpoint.h b/navit/gui/qml/ngqpoint.h index a494b07f7..1b0c49472 100644 --- a/navit/gui/qml/ngqpoint.h +++ b/navit/gui/qml/ngqpoint.h @@ -37,9 +37,11 @@ class NGQPoint : public QObject { Q_PROPERTY(QString coordString READ coordString CONSTANT); Q_PROPERTY(QString pointName READ pointName CONSTANT); Q_PROPERTY(QString pointType READ pointType CONSTANT); + Q_PROPERTY(QUrl pointUrl READ pointUrl CONSTANT); public: NGQPoint(struct gui_priv* this_,struct point* p,NGQPointTypes type=MapPoint,QObject *parent=NULL) : QObject(parent) { this->object=this_; + this->item.map=0; transform_reverse(navit_get_trans(this->object->nav), p, &co); transform_to_geo(transform_get_projection(navit_get_trans(this->object->nav)), &co, &g); c.pro = transform_get_projection(navit_get_trans(this->object->nav)); @@ -54,6 +56,7 @@ public: } NGQPoint(struct gui_priv* this_,struct coord* c,NGQPointTypes type=Bookmark,QObject *parent=NULL) : QObject(parent) { this->object=this_; + this->item.map=0; this->co.x=c->x; this->co.y=c->y; transform_to_geo(transform_get_projection(navit_get_trans(this->object->nav)), &co, &g); @@ -68,6 +71,7 @@ public: NGQPoint(struct gui_priv* this_,struct coord* c,QString name,NGQPointTypes type=Bookmark,QObject *parent=NULL) : QObject(parent) { this->object=this_; + this->item.map=0; this->co.x=c->x; this->co.y=c->y; transform_to_geo(transform_get_projection(navit_get_trans(this->object->nav)), &co, &g); @@ -83,6 +87,7 @@ public: struct pcoord* pc() { return &c; } public slots: void setNewPoint(QString coord,NGQPointTypes type=PointOfInterest) { + this->item.map=0; QStringList coordSplit=coord.split(" ",QString::SkipEmptyParts); this->co.x=coordSplit[0].toInt(); this->co.y=coordSplit[1].toInt(); @@ -111,9 +116,36 @@ public slots: return QString("Position"); case Destination: return QString("Destination"); + case PointOfInterest: + return QString("PointOfInterest"); } return QString(""); } + QUrl pointUrl() { + return this->url; + } + QString getInformation() { + struct map_rect *mr; + struct item* item; + struct attr attr; + + QDomDocument retDoc; + QDomElement entries; + entries=retDoc.createElement("point"); + retDoc.appendChild(entries); + + if (this->type!=Bookmark and this->item.map) { + mr=map_rect_new(this->item.map, NULL); + item = map_rect_get_item_byid(mr, this->item.id_hi, this->item.id_lo); + if (item) { + while(item_attr_get(item, attr_any, &attr)) { + entries.appendChild(this->_fieldValueHelper(retDoc,QString(attr_to_name(attr.type)), QString(attr_to_text(&attr,this->item.map, 1)))); + } + } + map_rect_destroy(mr); + } + return retDoc.toString(); + } QString getPOI(const QString &attr_name) { struct attr attr; struct item* item; @@ -205,6 +237,12 @@ public slots: return retDoc.toString(); } protected: + QDomElement _fieldValueHelper(QDomDocument doc, QString field,QString value) { + QDomElement fieldTag=doc.createElement(field); + QDomText valueText=doc.createTextNode(value); + fieldTag.appendChild(valueText); + return fieldTag; + } QString _coordString() { char latc='N',lngc='E'; int lat_deg,lat_min,lat_sec; @@ -264,6 +302,8 @@ protected: if (item_attr_get(item, attr_label, &attr)) { label=map_convert_string(m, attr.u.str); if (QString(item_to_name(item->type)).startsWith(QString("poi_"))) { + this->item=*item; + this->_setUrl(&this->item); ret=QString::fromLocal8Bit(item_to_name(item->type)); ret=ret.remove(QString("poi_")); ret+=QString(" ")+QString::fromLocal8Bit(label); @@ -274,6 +314,8 @@ protected: return ret; } if (QString(item_to_name(item->type)).startsWith(QString("poly_"))) { + this->item=*item; + this->_setUrl(&this->item); ret=QString::fromLocal8Bit(item_to_name(item->type)); ret=ret.remove(QString("poly_")); ret+=QString(" ")+QString::fromLocal8Bit(label); @@ -284,6 +326,8 @@ protected: return ret; } if (QString(item_to_name(item->type)).startsWith(QString("street_"))) { + this->item=*item; + this->_setUrl(&this->item); ret="Street "; ret+=QString::fromLocal8Bit(label); map_convert_free(label); @@ -294,6 +338,8 @@ protected: } map_convert_free(label); } else + this->item=*item; + this->_setUrl(&this->item); ret=item_to_name(item->type); } street_data_free(data); @@ -303,6 +349,18 @@ protected: mapset_close(h); return ret; } + void _setUrl(struct item *item) { + struct attr attr; + if (item_attr_get(item,attr_osm_nodeid,&attr)) { + url.setUrl(QString("http://www.openstreetmap.org/browse/node/%1").arg(*attr.u.num64)); + } else if (item_attr_get(item,attr_osm_wayid,&attr)) { + url.setUrl(QString("http://www.openstreetmap.org/browse/way/%1").arg(*attr.u.num64)); + } else if (item_attr_get(item,attr_osm_relationid,&attr)) { + url.setUrl(QString("http://www.openstreetmap.org/browse/relation/%1").arg(*attr.u.num64)); + } else { + url.clear(); + } + } private: struct gui_priv* object; @@ -312,8 +370,11 @@ private: struct pcoord c; struct point p; + struct item item; + QString name; QString coord; + QUrl url; }; #include "ngqpoint.moc" diff --git a/navit/gui/qml/skins/navit/Makefile.am b/navit/gui/qml/skins/navit/Makefile.am index 24ebf7428..b2f9b76d4 100644 --- a/navit/gui/qml/skins/navit/Makefile.am +++ b/navit/gui/qml/skins/navit/Makefile.am @@ -4,7 +4,7 @@ SKIN = navit qmldir=$(skinsdir)/$(SKIN) -qml_DATA = ButtonIcon.qml ToggleSwitch.qml ToggleButton.qml ListSelector.qml Slider.qml Cellar.qml main.qml command.qml PageNavigate.qml PageAbout.qml PageBookmarksAdd.qml PageBookmarks.qml PageNavigation.qml PageSearch.qml PageSearchSelector.qml PageSettingsDisplay.qml PageSettingsLocale.qml PageSettings.qml PageSettingsRules.qml PageSettingsTools.qml PageSettingsVehicle.qml PagePoi.qml +qml_DATA = ButtonIcon.qml ToggleSwitch.qml ToggleButton.qml ListSelector.qml Slider.qml Cellar.qml main.qml command.qml PageNavigate.qml PageAbout.qml PageBookmarksAdd.qml PageBookmarks.qml PageNavigation.qml PageSearch.qml PageSearchSelector.qml PageSettingsDisplay.qml PageSettingsLocale.qml PageSettings.qml PageSettingsRules.qml PageSettingsTools.qml PageSettingsVehicle.qml PagePoi.qml PagePointInfo.qml qml_DATA += background.svg knob.svg do_button_subst = sed -e 's,matchProperties,properties,g' \ diff --git a/navit/gui/qml/skins/navit/PageNavigate.qml b/navit/gui/qml/skins/navit/PageNavigate.qml index 950a53e98..0954f4506 100644 --- a/navit/gui/qml/skins/navit/PageNavigate.qml +++ b/navit/gui/qml/skins/navit/PageNavigate.qml @@ -79,7 +79,7 @@ Rectangle { id: btnSearch; text: "Address\nSearch"; icon: "gui_town.svg"; onClicked: gui.setPage("PageSearch.qml") } ButtonIcon { - id: btnInfo; text: "Point\ninformation"; icon: "gui_menu.svg"; onClicked: console.log("Implement me!"); + id: btnInfo; text: "Point\ninformation"; icon: "gui_menu.svg"; onClicked: gui.setPage("PagePointInfo.qml") } } |