瀏覽代碼

wxGUI/vdigit: highlight areas instead of centroids if area fill is enabled
cosmetics in dbm module
(merge from devbr6, https://trac.osgeo.org/grass/changeset/32976)


git-svn-id: https://svn.osgeo.org/grass/grass/trunk@32978 15284696-431f-4ddb-bdfa-cd5b030d7da7

Martin Landa 17 年之前
父節點
當前提交
4bc6c7ef18

+ 3 - 3
gui/wxpython/gui_modules/dbm.py

@@ -921,8 +921,8 @@ class AttributeManager(wx.Frame):
         menu.Append(self.popupDataID5, _("Select all"))
         menu.Append(self.popupDataID5, _("Select all"))
         menu.Append(self.popupDataID6, _("Deselect all"))
         menu.Append(self.popupDataID6, _("Deselect all"))
         menu.AppendSeparator()
         menu.AppendSeparator()
-        menu.Append(self.popupDataID7, _("Display selected"))
-        menu.Append(self.popupDataID8, _("Display selected and zoom"))
+        menu.Append(self.popupDataID7, _("Highlight selected"))
+        menu.Append(self.popupDataID8, _("Highlight selected and zoom"))
         if not self.map or len(list.GetSelectedItems()) == 0:
         if not self.map or len(list.GetSelectedItems()) == 0:
             menu.Enable(self.popupDataID7, False)
             menu.Enable(self.popupDataID7, False)
             menu.Enable(self.popupDataID8, False)
             menu.Enable(self.popupDataID8, False)
@@ -2598,7 +2598,7 @@ class LayerBook(wx.Notebook):
                                    'table=%s' % table,
                                    'table=%s' % table,
                                    'key=%s' % key,
                                    'key=%s' % key,
                                    'layer=%d' % layer])
                                    'layer=%d' % layer])
-
+        
         if connectCmd.returncode == 0:
         if connectCmd.returncode == 0:
             # update dialog (only for new layer)
             # update dialog (only for new layer)
             self.parentDialog.UpdateDialog(layer=layer) 
             self.parentDialog.UpdateDialog(layer=layer) 

+ 1 - 1
gui/wxpython/vdigit/driver.h

@@ -148,7 +148,7 @@ private:
     void PrintIds();
     void PrintIds();
 
 
     /* select feature */
     /* select feature */
-    bool IsSelected(int);
+    bool IsSelected(int, bool force=false);
     bool IsDuplicated(int);
     bool IsDuplicated(int);
 
 
     std::vector<int> ListToVector(struct ilist *);
     std::vector<int> ListToVector(struct ilist *);

+ 10 - 2
gui/wxpython/vdigit/driver_draw.cpp

@@ -62,9 +62,10 @@ int DisplayDriver::DrawMap(bool force)
 	struct ilist *listAreas, *listCentroids;
 	struct ilist *listAreas, *listCentroids;
 	struct line_pnts *points, *ipoints, **isles;
 	struct line_pnts *points, *ipoints, **isles;
 
 
-	wxBrush *fillArea, *fillIsle;
+	wxBrush *fillArea, *fillAreaSelected, *fillIsle;
 
 
 	fillArea = new wxBrush(settings.area.color);
 	fillArea = new wxBrush(settings.area.color);
+	fillAreaSelected = new wxBrush(settings.highlight);
 	fillIsle = new wxBrush(*wxWHITE_BRUSH);
 	fillIsle = new wxBrush(*wxWHITE_BRUSH);
 	
 	
 	listAreas = Vect_new_list();
 	listAreas = Vect_new_list();
@@ -123,7 +124,14 @@ int DisplayDriver::DrawMap(bool force)
 		}
 		}
 		
 		
 		if (draw) {
 		if (draw) {
-		    dc->SetBrush(*fillArea);
+		    int cat;
+		    cat = Vect_get_area_cat(mapInfo, area, 1); /* TODO: field */
+		    if (cat > -1 && IsSelected(cat, true)) {
+			dc->SetBrush(*fillAreaSelected);
+		    }
+		    else {
+			dc->SetBrush(*fillArea);
+		    }
 		    dc->SetPen(*wxTRANSPARENT_PEN);
 		    dc->SetPen(*wxTRANSPARENT_PEN);
 		    DrawArea(points);
 		    DrawArea(points);
 
 

+ 18 - 7
gui/wxpython/vdigit/driver_select.cpp

@@ -156,15 +156,15 @@ std::vector<double> DisplayDriver::SelectLineByPoint(double x, double y, double
    \return true if vector object is selected
    \return true if vector object is selected
    \return false if vector object is not selected
    \return false if vector object is not selected
 */
 */
-bool DisplayDriver::IsSelected(int line)
+bool DisplayDriver::IsSelected(int line, bool force)
 {
 {
-    if (selected.isId) {
+    if (selected.isId || force) {
 	if (Vect_val_in_list(selected.values, line))
 	if (Vect_val_in_list(selected.values, line))
 	    return true;
 	    return true;
     }
     }
     else {
     else {
 	for (int i = 0; i < cats->n_cats; i++) {
 	for (int i = 0; i < cats->n_cats; i++) {
-	    if (cats->field[i] == 1 &&
+	    if (cats->field[i] == 1 && /* TODO: field */
 		Vect_val_in_list(selected.values, cats->cat[i])) 
 		Vect_val_in_list(selected.values, cats->cat[i])) 
 		return true;
 		return true;
 	}
 	}
@@ -415,6 +415,8 @@ std::vector<int> DisplayDriver::GetSelectedVertex(double x, double y, double thr
 */
 */
 std::vector<int> DisplayDriver::GetRegionSelected()
 std::vector<int> DisplayDriver::GetRegionSelected()
 {
 {
+    int line, area;
+    
     std::vector<int> region;
     std::vector<int> region;
 
 
     BOUND_BOX region_box, line_box;
     BOUND_BOX region_box, line_box;
@@ -454,11 +456,20 @@ std::vector<int> DisplayDriver::GetRegionSelected()
     else {
     else {
 	list = selected.values;
 	list = selected.values;
     }
     }
-    
+
     for (int i = 0; i < list->n_values; i++) {
     for (int i = 0; i < list->n_values; i++) {
-	if (!Vect_get_line_box(mapInfo, list->value[i], &line_box))
-	    continue;
+	line = list->value[i];
+	area = Vect_get_centroid_area(mapInfo, line);
 
 
+	if (area > 0) {
+	    if (!Vect_get_area_box(mapInfo, area, &line_box))
+		continue;
+	}
+	else {
+	    if (!Vect_get_line_box(mapInfo, line, &line_box))
+		continue;
+	}
+	
 	if (i == 0) {
 	if (i == 0) {
 	    Vect_box_copy(&region_box, &line_box);
 	    Vect_box_copy(&region_box, &line_box);
 	}
 	}
@@ -466,7 +477,7 @@ std::vector<int> DisplayDriver::GetRegionSelected()
 	    Vect_box_extend(&region_box, &line_box);
 	    Vect_box_extend(&region_box, &line_box);
 	}
 	}
     }
     }
-
+    
     if (list && list != selected.values) {
     if (list && list != selected.values) {
 	Vect_destroy_list(list);
 	Vect_destroy_list(list);
     }
     }