Fix:gui/qml:Poi viewer work in progress
authorakashihi <akashihi@ffa7fe5e-494d-0410-b361-a75ebd5db220>
Fri, 2 Apr 2010 13:37:16 +0000 (13:37 +0000)
committerakashihi <akashihi@ffa7fe5e-494d-0410-b361-a75ebd5db220>
Fri, 2 Apr 2010 13:37:16 +0000 (13:37 +0000)
git-svn-id: https://navit.svn.sourceforge.net/svnroot/navit/trunk@3117 ffa7fe5e-494d-0410-b361-a75ebd5db220

navit/navit/gui/qml/ngqpoint.h
navit/navit/gui/qml/skins/navit/PagePoi.qml

index f31bfc3..67c222f 100644 (file)
@@ -70,7 +70,6 @@ public slots:
             return QString("");
     }
     QString getAttrList(const QString &attr_name) {
-            NGQStandardItemModel* ret=new NGQStandardItemModel(this);
             struct attr attr;
             struct item* item;
             struct mapset_handle *h;
@@ -103,7 +102,6 @@ public slots:
                                     if ( item_coord_get_pro(item, &c, 1, this->c.pro) && coord_rect_contains(&sel->u.c_rect, &c) && (idist=transform_distance(this->c.pro, &center, &c)) < dist ) {
                                             char* label;
                                             QString rs;
-                                            QString pointXml="<point>";
                                             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_"))) {
@@ -123,11 +121,14 @@ public slots:
                                                      map_convert_free(label);
                                             } else
                                                     rs=item_to_name(item->type);
-                                            pointXml+="<name>"+rs+"</name>";
-                                            pointXml+="<type>"+QString(item_to_name(item->type))+"</type>";
-                                            pointXml+="</point>";
-
-                                            retXml+=pointXml;
+                                            if (rs.length()>0) {
+                                                    QString pointXml="<point>";
+                                                    pointXml+="<name>"+rs+"</name>";
+                                                    pointXml+="<type>"+QString(item_to_name(item->type))+"</type>";
+                                                    pointXml+="</point>";
+        
+                                                    retXml+=pointXml;
+                                            }
                                     }
                             }
                     }
@@ -135,9 +136,7 @@ public slots:
             }
             map_selection_destroy(sel);
             mapset_close(h);
-
-            this->object->guiWidget->rootContext()->setContextProperty("listModel",static_cast<QObject*>(ret));
-            
+           
             retXml+=QString("</%1>").arg(attr_name);
             dbg(0,"Reulsting xml: %s\n",retXml.toLocal8Bit().constData());
             return retXml;
index 0b668fd..6c49020 100644 (file)
@@ -3,6 +3,8 @@ import Qt 4.6
 Rectangle {
     id: page
 
+    property string poiFilter: ""
+
     width: gui.width; height: gui.height
     color: "Black"
     opacity: 0
@@ -17,6 +19,57 @@ Rectangle {
        }
     }
 
+    function calculateFilter() {
+        page.poiFilter='/points/point[type="point_begin" or ';
+       if (bankBtn.state=="on") {
+               page.poiFilter+='type="poi_bank" or ';
+       }
+       if (fuelBtn.state=="on") {
+               page.poiFilter+='type="poi_fuel" or ';
+               page.poiFilter+='type="poi_autoservice" or ';
+               page.poiFilter+='type="poi_repair_service" or ';
+       }
+       if (hotelBtn.state=="on") {
+               page.poiFilter+='type="poi_hotel" or ';
+               page.poiFilter+='type="poi_camp_rv" or ';
+               page.poiFilter+='type="poi_camping" or ';
+               page.poiFilter+='type="poi_resort" or ';
+               page.poiFilter+='type="poi_motel" or ';
+               page.poiFilter+='type="poi_hostel" or ';
+       }
+       if (foodBtn.state=="on") {
+               page.poiFilter+='type="poi_bar" or ';
+               page.poiFilter+='type="poi_picnic" or ';
+               page.poiFilter+='type="poi_burgerking" or ';
+               page.poiFilter+='type="poi_fastfood" or ';
+               page.poiFilter+='type="poi_restaurant" or ';
+       }
+       if (shopBtn.state=="on") {
+               page.poiFilter+='type="poi_shop_grocery" or ';
+               page.poiFilter+='type="poi_mall" or ';
+       }
+       if (serviceBtn.state=="on") {
+               page.poiFilter+='type="poi_marina" or ';
+               page.poiFilter+='type="poi_hospital" or ';
+               page.poiFilter+='type="poi_public_utilities" or ';
+               page.poiFilter+='type="poi_police" or ';
+               page.poiFilter+='type="poi_information" or ';
+               page.poiFilter+='type="poi_personal_service" or ';
+               page.poiFilter+='type="poi_restroom" or ';
+       }
+       if (parkingBtn.state=="on") {
+               page.poiFilter+='type="poi_car_parking" or ';
+       }
+       if (landBtn.state=="on") {
+               page.poiFilter+='type="poi_land_feature" or ';
+               page.poiFilter+='type="poi_rock" or ';
+               page.poiFilter+='type="poi_dam" or ';
+       }
+       page.poiFilter+='type="point_end"]';
+       listModel.query=page.poiFilter;
+       listModel.reload();
+    }
+
     function pageOpen() {
         page.opacity = 1;
     }
@@ -36,14 +89,14 @@ Rectangle {
   VisualItemModel {
        id: selectorsModel
 
-        ToggleButton { id: bankBtn; text: "Bank"; icon: "bank.svg";stOn: "true"; }
-       ToggleButton {  id: fuelBtn; text: "Fuel"; icon: "fuel.svg";stOn: "true"; }
-       ToggleButton {  id: hotelBtn; text: "Hotel"; icon: "bar.svg";stOn: "true"; }
-       ToggleButton {  id: foodBtn; text: "Food"; icon: "fastfood.svg";stOn: "true"; }
-       ToggleButton {  id: shopBtn; text: "Shop"; icon: "shopping.svg";stOn: "true"; }
-       ToggleButton {  id: serviceBtn; text: "Service"; icon: "hospital.svg";stOn: "true"; }
-       ToggleButton {  id: parkingBtn; text: "Parking"; icon: "police.svg";stOn: "true"; }
-       ToggleButton {  id: landBtn; text: "Land features"; icon: "peak.svg";stOn: "true"; }
+        ToggleButton { id: bankBtn; text: "Bank"; icon: "bank.svg";stOn: "true"; onChanged: calculateFilter(); }
+       ToggleButton {  id: fuelBtn; text: "Fuel"; icon: "fuel.svg";stOn: "true"; onChanged: calculateFilter(); }
+       ToggleButton {  id: hotelBtn; text: "Hotel"; icon: "bar.svg";stOn: "true"; onChanged: calculateFilter(); }
+       ToggleButton {  id: foodBtn; text: "Food"; icon: "fastfood.svg";stOn: "true"; onChanged: calculateFilter(); }
+       ToggleButton {  id: shopBtn; text: "Shop"; icon: "shopping.svg";stOn: "true"; onChanged: calculateFilter(); }
+       ToggleButton {  id: serviceBtn; text: "Service"; icon: "hospital.svg";stOn: "true"; onChanged: calculateFilter(); }
+       ToggleButton {  id: parkingBtn; text: "Parking"; icon: "police.svg";stOn: "true";  onChanged: calculateFilter(); }
+       ToggleButton {  id: landBtn; text: "Land features"; icon: "peak.svg";stOn: "true";  onChanged: calculateFilter(); }
   }
 
   ListView {
@@ -54,11 +107,18 @@ Rectangle {
   }
 
        Slider {
-           id: distanceSlider; minValue: 1; maxValue: 250; value: gui.getAttr("radius"); text: "Distance"; onChanged: { gui.setAttr("radius",distanceSlider.value); point.getAttrList("points"); }
+           id: distanceSlider; minValue: 1; maxValue: 250; value: gui.getAttr("radius"); text: "Distance"; onChanged: { gui.setAttr("radius",distanceSlider.value); listModel.xml=point.getAttrList("points"); listModel.reload(); }
            anchors.top: selectorsList.bottom; anchors.horizontalCenter: page.horizontalCenter;
        }
 
-    ListSelector { 
+       XmlListModel {
+               id: listModel
+               xml: point.getAttrList("points")
+               query: "/points/point"
+               XmlRole { name: "itemName"; query: "name/string()" }
+               XmlRole { name: "itemType"; query: "type/string()" }
+       }
+    ListSelectorXml { 
        id:layoutList; text: ""; itemId: point.getAttrList("points"); onChanged: console.log("Poi clicked");
        anchors.top: distanceSlider.bottom;
        anchors.left: parent.left; anchors.leftMargin: 3