From c7d196f387f729ff6277e0e2fc2735174ea4521f Mon Sep 17 00:00:00 2001 From: Serge Noiraud Date: Sat, 15 Sep 2012 19:42:12 +0000 Subject: [PATCH] Geography and Gtk3 : some cleaning. correction for bug #06044 and #05975 popup for button 1 in all views color change for the reference person or family remove Hscale and use Scale with orientation selection layer works for rectangle selection. You need to use the last osm-gps-map. svn: r20396 --- src/plugins/lib/maps/geography.py | 42 +++++++++++++++++++------- src/plugins/lib/maps/lifewaylayer.py | 2 +- src/plugins/lib/maps/messagelayer.py | 1 + src/plugins/lib/maps/osmGps.py | 2 +- src/plugins/lib/maps/placeselection.py | 4 +-- src/plugins/lib/maps/selectionlayer.py | 25 ++++++++------- src/plugins/view/geoclose.py | 9 ++++-- src/plugins/view/geoevents.py | 5 ++- src/plugins/view/geofamclose.py | 9 ++++-- src/plugins/view/geofamily.py | 5 ++- src/plugins/view/geomoves.py | 5 ++- src/plugins/view/geoperson.py | 5 ++- src/plugins/view/geoplaces.py | 5 ++- 13 files changed, 82 insertions(+), 37 deletions(-) diff --git a/src/plugins/lib/maps/geography.py b/src/plugins/lib/maps/geography.py index 5f2d609de..618846949 100644 --- a/src/plugins/lib/maps/geography.py +++ b/src/plugins/lib/maps/geography.py @@ -819,20 +819,40 @@ class GeoGraphyView(OsmGps, NavigationView): oldv = (loc.get_country(), loc.get_state(), loc.get_county()) if loc else None places_handle = self.dbstate.db.iter_place_handles() + nb_places = 0 + gids = "" for place_hdl in places_handle: plce = self.dbstate.db.get_place_from_handle(place_hdl) if plce.get_title() == place.get_title(): - self.mark = [None, None, None, None, None, None, None, - None, None, plce.gramps_id, None, None] - self.select_fct = PlaceSelection(self.uistate, - self.dbstate, - self.osm, - self.selection_layer, - self.place_list, - lat, - lon, - self.__edit_place, - oldv) + nb_places += 1 + if gids == "": + gids = plce.gramps_id + else: + gids = gids + ", " + plce.gramps_id + if nb_places > 1: + from QuestionDialog import WarningDialog + WarningDialog( + _('You have at least two places with the same title.'), + _("The title of the places is :\n" + "%(title)s\n" + "The following places are similar : %(gid)s\n" + "Eiher you rename the places either you merge them." + "\n\nI can't proceed your request.\n") % { + 'title': plce.get_title(), + 'gid': gids} + ) + else: + self.mark = [None, None, None, None, None, None, None, + None, None, plce.gramps_id, None, None] + self.select_fct = PlaceSelection(self.uistate, + self.dbstate, + self.osm, + self.selection_layer, + self.place_list, + lat, + lon, + self.__edit_place, + oldv) def __add_place(self, pcountry, pcounty, pstate, plat, plon): """ diff --git a/src/plugins/lib/maps/lifewaylayer.py b/src/plugins/lib/maps/lifewaylayer.py index 18c158e53..ad6bca480 100644 --- a/src/plugins/lib/maps/lifewaylayer.py +++ b/src/plugins/lib/maps/lifewaylayer.py @@ -138,9 +138,9 @@ class LifeWayLayer(GObject.GObject, osmgpsmap.MapLayer): ctx.translate(coord_x1, coord_y1/coz) ctx.arc(0.0, 0.0, cox, 0.0, 2*pi) ctx.fill() + ctx.set_source_rgba(1.0,0.0,0.0,0.5) ctx.set_line_width(2.0) ctx.arc(0.0, 0.0, cox, 0.0, 2*pi) - ctx.set_source_rgba(1.0,0.0,0.0,0.5) ctx.stroke() ctx.restore() diff --git a/src/plugins/lib/maps/messagelayer.py b/src/plugins/lib/maps/messagelayer.py index 5a0ef98ca..f3ef1ba78 100644 --- a/src/plugins/lib/maps/messagelayer.py +++ b/src/plugins/lib/maps/messagelayer.py @@ -144,6 +144,7 @@ class MessageLayer(GObject.GObject, osmgpsmap.MapLayer): ctx.move_to(coord_x, coord_y) ctx.show_text(line_to_print) coord_y += int(self.size) # calculate the next line position + ctx.stroke() def do_render(self, gpsmap): """ diff --git a/src/plugins/lib/maps/osmGps.py b/src/plugins/lib/maps/osmGps.py index 2d58412b3..db1afe411 100644 --- a/src/plugins/lib/maps/osmGps.py +++ b/src/plugins/lib/maps/osmGps.py @@ -305,7 +305,7 @@ class OsmGps(): lat, lon = self.osm.get_event_location(event).get_degrees() current = osm.convert_screen_to_geographic(int(event.x), int(event.y)) lat, lon = current.get_degrees() - if event.button == 1: + if event.button == 1 and event.type == Gdk.EventType.BUTTON_PRESS: if self.end_selection is not None: self.activate_selection_zoom(osm, event) self.end_selection = None diff --git a/src/plugins/lib/maps/placeselection.py b/src/plugins/lib/maps/placeselection.py index de3ef92fb..5753cf837 100644 --- a/src/plugins/lib/maps/placeselection.py +++ b/src/plugins/lib/maps/placeselection.py @@ -130,8 +130,8 @@ class PlaceSelection(ManagedWindow, OsmGps): self.window.vbox.pack_start(alignment, False, True, 0) adj = Gtk.Adjustment(1.0, 0.1, 3.0, 0.1, 0, 0) # default value is 1.0, minimum is 0.1 and max is 3.0 - slider = Gtk.HScale(adj) - slider.set_update_policy(Gtk.UPDATE_DISCONTINUOUS) + slider = Gtk.Scale(orientation=Gtk.Orientation.HORIZONTAL, + adjustment=adj) slider.set_digits(1) slider.set_value_pos(Gtk.PositionType.BOTTOM) slider.connect('value-changed', self.slider_change, self.lat, self.lon) diff --git a/src/plugins/lib/maps/selectionlayer.py b/src/plugins/lib/maps/selectionlayer.py index 6498f1014..7e47fbf6d 100644 --- a/src/plugins/lib/maps/selectionlayer.py +++ b/src/plugins/lib/maps/selectionlayer.py @@ -28,6 +28,7 @@ # #------------------------------------------------------------------------- import os +from math import pi from gi.repository import GObject #------------------------------------------------------------------------ @@ -87,32 +88,34 @@ class SelectionLayer(GObject.GObject, osmgpsmap.MapLayer): circle[2] + circle[0]) crd_x, crd_y = gpsmap.convert_geographic_to_screen(top_left) crd_x2, crd_y2 = gpsmap.convert_geographic_to_screen(bottom_right) - #drawable.draw_arc(ggc, False, crd_x, crd_y, crd_x2 - crd_x, - # crd_y2 - crd_y, 0, 360*64) - ctx.arc(crd_x, crd_y, crd_x2 - crd_x, crd_y2 - crd_y, 0, 360*64) + width = float(crd_x2 - crd_x) + height = float(crd_y2 - crd_y) + ctx.set_line_width(3.0) + ctx.set_source_rgba(0.0, 0.0, 0.0, 0.8) + ctx.scale(1.0, (height/width)) + #ctx.arc(float(crd_x + crd_x2)/2, float(crd_y + crd_y2)/2, width, 0.0, 2*pi) + # TODO : placement bug : waiting bug correction on osm-gps-map + ctx.arc(float(crd_x + crd_x2)/2, float(crd_y+height*(height/width)/2), width, 0.0, 2*pi) + ctx.stroke() + for rectangle in self.rectangles: top_left, bottom_right = rectangle + ctx.set_source_rgba(0.0, 0.0, 0.0, 0.8) + ctx.set_line_width(3.0) crd_x, crd_y = gpsmap.convert_geographic_to_screen(top_left) crd_x2, crd_y2 = gpsmap.convert_geographic_to_screen(bottom_right) # be sure when can select a region in all case. if ( crd_x < crd_x2 ): if ( crd_y < crd_y2 ): - #drawable.draw_rectangle(ggc, False, crd_x, crd_y, - # crd_x2 - crd_x, crd_y2 - crd_y) ctx.rectangle(crd_x, crd_y, crd_x2 - crd_x, crd_y2 - crd_y) else: - #drawable.draw_rectangle(ggc, False, crd_x, crd_y2, - # crd_x2 - crd_x, crd_y - crd_y2) ctx.rectangle(crd_x, crd_y2, crd_x2 - crd_x, crd_y - crd_y2) else: if ( crd_y < crd_y2 ): - #drawable.draw_rectangle(ggc, False, crd_x2, crd_y, - # crd_x - crd_x2, crd_y2 - crd_y) ctx.rectangle(crd_x2, crd_y, crd_x - crd_x2, crd_y2 - crd_y) else: - #drawable.draw_rectangle(ggc, False, crd_x2, crd_y2, - # crd_x - crd_x2, crd_y - crd_y2) ctx.rectangle(crd_x2, crd_y2, crd_x - crd_x2, crd_y - crd_y2) + ctx.stroke() def do_render(self, gpsmap): """ diff --git a/src/plugins/view/geoclose.py b/src/plugins/view/geoclose.py index 755b0d273..e029fae8d 100644 --- a/src/plugins/view/geoclose.py +++ b/src/plugins/view/geoclose.py @@ -119,7 +119,7 @@ class GeoClose(GeoGraphyView): # specific to geoclose : - ('geography.color1', 'red'), + ('geography.color1', 'blue'), ('geography.color2', 'green'), ('geography.maximum_meeting_zone', 5), @@ -280,7 +280,7 @@ class GeoClose(GeoGraphyView): points.append((startlat, startlon)) self.lifeway_layer.add_way(points, color) if reference: - self.lifeway_layer.add_way_ref(points, color, + self.lifeway_layer.add_way_ref(points, 'orange', float(self._config.get("geography.maximum_meeting_zone")) / 10) return False @@ -476,7 +476,10 @@ class GeoClose(GeoGraphyView): event, lat, lon, prevmark) itemoption.append(center) menu.show() - menu.popup(None, None, None, None, 0, event.time) + menu.popup(None, None, + lambda menu, data: (event.get_root_coords()[0], + event.get_root_coords()[1], True), + None, event.button, event.time) return 0 def add_specific_menu(self, menu, event, lat, lon): diff --git a/src/plugins/view/geoevents.py b/src/plugins/view/geoevents.py index fb60e105b..550f1f5bb 100644 --- a/src/plugins/view/geoevents.py +++ b/src/plugins/view/geoevents.py @@ -352,7 +352,10 @@ class GeoEvents(GeoGraphyView): center.show() center.connect("activate", self.center_here, event, lat, lon, prevmark) itemoption.append(center) - menu.popup(None, None, None, None, 0, event.time) + menu.popup(None, None, + lambda menu, data: (event.get_root_coords()[0], + event.get_root_coords()[1], True), + None, event.button, event.time) return 1 def add_specific_menu(self, menu, event, lat, lon): diff --git a/src/plugins/view/geofamclose.py b/src/plugins/view/geofamclose.py index f51b3f620..7207f146a 100644 --- a/src/plugins/view/geofamclose.py +++ b/src/plugins/view/geofamclose.py @@ -119,7 +119,7 @@ class GeoFamClose(GeoGraphyView): # specific to geoclose : - ('geography.color1', 'red'), + ('geography.color1', 'blue'), ('geography.color2', 'green'), ('geography.maximum_meeting_zone', 5), @@ -309,7 +309,7 @@ class GeoFamClose(GeoGraphyView): points.append((startlat, startlon)) self.lifeway_layer.add_way(points, color) if reference: - self.lifeway_layer.add_way_ref(points, color, + self.lifeway_layer.add_way_ref(points, 'orange', float(self._config.get("geography.maximum_meeting_zone")) / 10) return False @@ -665,7 +665,10 @@ class GeoFamClose(GeoGraphyView): event, lat, lon, prevmark) itemoption.append(center) menu.show() - menu.popup(None, None, None, None, 0, event.time) + menu.popup(None, None, + lambda menu, data: (event.get_root_coords()[0], + event.get_root_coords()[1], True), + None, event.button, event.time) return 0 def add_specific_menu(self, menu, event, lat, lon): diff --git a/src/plugins/view/geofamily.py b/src/plugins/view/geofamily.py index 7fdceb483..30deb09e5 100644 --- a/src/plugins/view/geofamily.py +++ b/src/plugins/view/geofamily.py @@ -445,7 +445,10 @@ class GeoFamily(GeoGraphyView): add_item.show() menu.append(add_item) self.add_event_bubble_message(event, lat, lon, prevmark, add_item) - menu.popup(None, None, None, None, 0, event.time) + menu.popup(None, None, + lambda menu, data: (event.get_root_coords()[0], + event.get_root_coords()[1], True), + None, event.button, event.time) return 1 def add_specific_menu(self, menu, event, lat, lon): diff --git a/src/plugins/view/geomoves.py b/src/plugins/view/geomoves.py index a992c0aba..b27a248e2 100644 --- a/src/plugins/view/geomoves.py +++ b/src/plugins/view/geomoves.py @@ -605,7 +605,10 @@ class GeoMoves(GeoGraphyView): event, lat, lon, prevmark) itemoption.append(center) menu.show() - menu.popup(None, None, None, None, 0, event.time) + menu.popup(None, None, + lambda menu, data: (event.get_root_coords()[0], + event.get_root_coords()[1], True), + None, event.button, event.time) return 1 def add_specific_menu(self, menu, event, lat, lon): diff --git a/src/plugins/view/geoperson.py b/src/plugins/view/geoperson.py index 8a05761da..541087a2b 100644 --- a/src/plugins/view/geoperson.py +++ b/src/plugins/view/geoperson.py @@ -480,7 +480,10 @@ class GeoPerson(GeoGraphyView): center.connect("activate", self.center_here, event, lat, lon, prevmark) itemoption.append(center) menu.show() - menu.popup(None, None, None, None, 0, event.time) + menu.popup(None, None, + lambda menu, data: (event.get_root_coords()[0], + event.get_root_coords()[1], True), + None, event.button, event.time) return 1 def add_specific_menu(self, menu, event, lat, lon): diff --git a/src/plugins/view/geoplaces.py b/src/plugins/view/geoplaces.py index 62c13070f..05ba42ca9 100644 --- a/src/plugins/view/geoplaces.py +++ b/src/plugins/view/geoplaces.py @@ -343,7 +343,10 @@ class GeoPlaces(GeoGraphyView): center.show() center.connect("activate", self.center_here, event, lat, lon, prevmark) itemoption.append(center) - menu.popup(None, None, None, None, 0, event.time) + menu.popup(None, None, + lambda menu, data: (event.get_root_coords()[0], + event.get_root_coords()[1], True), + None, event.button, event.time) return 1 def add_specific_menu(self, menu, event, lat, lon):