GeoView : issue 3497 adds filters.
javascript errors when switching between maps. svn: r14100
This commit is contained in:
parent
a44e685559
commit
f06acae4b1
@ -69,6 +69,7 @@ from PlaceUtils import conv_lat_lon
|
|||||||
from gui.views.pageview import PageView
|
from gui.views.pageview import PageView
|
||||||
from gui.editors import EditPlace
|
from gui.editors import EditPlace
|
||||||
from gui.selectors.selectplace import SelectPlace
|
from gui.selectors.selectplace import SelectPlace
|
||||||
|
from Filters.SideBar import PlaceSidebarFilter, EventSidebarFilter
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
@ -238,7 +239,6 @@ class GeoView(HtmlView):
|
|||||||
"""
|
"""
|
||||||
The view used to render html pages.
|
The view used to render html pages.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, dbstate, uistate):
|
def __init__(self, dbstate, uistate):
|
||||||
HtmlView.__init__(self, dbstate, uistate, title=_("GeoView"))
|
HtmlView.__init__(self, dbstate, uistate, title=_("GeoView"))
|
||||||
self.dbstate = dbstate
|
self.dbstate = dbstate
|
||||||
@ -256,6 +256,7 @@ class GeoView(HtmlView):
|
|||||||
self.nbpages = 0
|
self.nbpages = 0
|
||||||
self.last_index = 0
|
self.last_index = 0
|
||||||
self.yearinmarker = []
|
self.yearinmarker = []
|
||||||
|
self.javascript_ready = False
|
||||||
self.mustcenter = False
|
self.mustcenter = False
|
||||||
self.centerlat = self.centerlon = 0.0
|
self.centerlat = self.centerlon = 0.0
|
||||||
self.setattr = True
|
self.setattr = True
|
||||||
@ -330,6 +331,9 @@ class GeoView(HtmlView):
|
|||||||
self.without_coord_file = os.path.join(GEOVIEW_SUBPATH,
|
self.without_coord_file = os.path.join(GEOVIEW_SUBPATH,
|
||||||
"without_coord.html")
|
"without_coord.html")
|
||||||
self.endinit = False
|
self.endinit = False
|
||||||
|
self.generic_filter = None
|
||||||
|
self.hpaned = gtk.HBox() # for filters
|
||||||
|
self.filter.pack_start(self.hpaned, True, True)
|
||||||
self.signal_map = {'place-add': self._place_changed,
|
self.signal_map = {'place-add': self._place_changed,
|
||||||
'place-update' : self._place_changed}
|
'place-update' : self._place_changed}
|
||||||
|
|
||||||
@ -339,6 +343,7 @@ class GeoView(HtmlView):
|
|||||||
"""
|
"""
|
||||||
self.displaytype = "places"
|
self.displaytype = "places"
|
||||||
self._set_lock_unlock(True)
|
self._set_lock_unlock(True)
|
||||||
|
self.filter_toggle(None, None, None, None)
|
||||||
self._geo_places()
|
self._geo_places()
|
||||||
|
|
||||||
def top_widget(self):
|
def top_widget(self):
|
||||||
@ -381,6 +386,10 @@ class GeoView(HtmlView):
|
|||||||
self.box1.pack_start(box, False, False, padding=2)
|
self.box1.pack_start(box, False, False, padding=2)
|
||||||
self.box1.pack_start(self.title, False, False, padding=2)
|
self.box1.pack_start(self.title, False, False, padding=2)
|
||||||
self.box1.show_all()
|
self.box1.show_all()
|
||||||
|
if self.displaytype == "places":
|
||||||
|
self.build_filters_container(self.filter, PlaceSidebarFilter)
|
||||||
|
elif self.displaytype == "event":
|
||||||
|
self.build_filters_container(self.filter, EventSidebarFilter)
|
||||||
return self.box1
|
return self.box1
|
||||||
|
|
||||||
def _entry_key_event(self, widget, event):
|
def _entry_key_event(self, widget, event):
|
||||||
@ -556,8 +565,9 @@ class GeoView(HtmlView):
|
|||||||
"""
|
"""
|
||||||
We need to call javascript to show the info bubble.
|
We need to call javascript to show the info bubble.
|
||||||
"""
|
"""
|
||||||
self.renderer.execute_script("javascript:placeclick('%d')" %
|
if self.javascript_ready:
|
||||||
marker_index)
|
self.renderer.execute_script("javascript:placeclick('%d')" %
|
||||||
|
marker_index)
|
||||||
|
|
||||||
def _erase_placebox_selection(self, arg):
|
def _erase_placebox_selection(self, arg):
|
||||||
"""
|
"""
|
||||||
@ -732,12 +742,13 @@ class GeoView(HtmlView):
|
|||||||
"""
|
"""
|
||||||
Ask to the renderer to show All or specific markers.
|
Ask to the renderer to show All or specific markers.
|
||||||
"""
|
"""
|
||||||
if year == _("All"):
|
if self.javascript_ready:
|
||||||
self.renderer.execute_script(
|
if year == _("All"):
|
||||||
"javascript:selectmarkers('All')")
|
self.renderer.execute_script(
|
||||||
else:
|
"javascript:selectmarkers('All')")
|
||||||
self.renderer.execute_script(
|
else:
|
||||||
"javascript:selectmarkers('%s')" % year )
|
self.renderer.execute_script(
|
||||||
|
"javascript:selectmarkers('%s')" % year )
|
||||||
|
|
||||||
def ui_definition(self):
|
def ui_definition(self):
|
||||||
"""
|
"""
|
||||||
@ -820,6 +831,10 @@ class GeoView(HtmlView):
|
|||||||
_("Reload the map with new style."),
|
_("Reload the map with new style."),
|
||||||
self._gotostyle,
|
self._gotostyle,
|
||||||
_('Select a StyleSheet'))
|
_('Select a StyleSheet'))
|
||||||
|
self._add_toggle_action('Filter', None, _('_Filter'),
|
||||||
|
callback=self.filter_toggle_action,
|
||||||
|
value=config.get('interface.filter'))
|
||||||
|
config.connect('interface.filter',self.filter_toggle)
|
||||||
|
|
||||||
def go_back(self, button): # pylint: disable-msg=W0613
|
def go_back(self, button): # pylint: disable-msg=W0613
|
||||||
"""
|
"""
|
||||||
@ -876,6 +891,7 @@ class GeoView(HtmlView):
|
|||||||
self._set_mapstylelabel(self.stylesheet)
|
self._set_mapstylelabel(self.stylesheet)
|
||||||
self._savezoomandposition(500) # every 500 millisecondes
|
self._savezoomandposition(500) # every 500 millisecondes
|
||||||
self.endinit = True
|
self.endinit = True
|
||||||
|
self.filter_toggle(None, None, None, None)
|
||||||
self._geo_places()
|
self._geo_places()
|
||||||
|
|
||||||
def __create_styles_menu_actions(self):
|
def __create_styles_menu_actions(self):
|
||||||
@ -929,6 +945,7 @@ class GeoView(HtmlView):
|
|||||||
"""
|
"""
|
||||||
if not self.uistate.get_active('Person'):
|
if not self.uistate.get_active('Person'):
|
||||||
return
|
return
|
||||||
|
self.filter_toggle(None, None, None, None)
|
||||||
self._geo_places()
|
self._geo_places()
|
||||||
|
|
||||||
def _goto_active_person(self, handle=None): # pylint: disable-msg=W0613
|
def _goto_active_person(self, handle=None): # pylint: disable-msg=W0613
|
||||||
@ -937,6 +954,7 @@ class GeoView(HtmlView):
|
|||||||
"""
|
"""
|
||||||
if not self.uistate.get_active('Person'):
|
if not self.uistate.get_active('Person'):
|
||||||
return
|
return
|
||||||
|
self.filter_toggle(None, None, None, None)
|
||||||
self._geo_places()
|
self._geo_places()
|
||||||
|
|
||||||
def _all_places(self, hanle=None): # pylint: disable-msg=W0613
|
def _all_places(self, hanle=None): # pylint: disable-msg=W0613
|
||||||
@ -944,6 +962,7 @@ class GeoView(HtmlView):
|
|||||||
Specifies the place for the home person to display with mapstraction.
|
Specifies the place for the home person to display with mapstraction.
|
||||||
"""
|
"""
|
||||||
self.displaytype = "places"
|
self.displaytype = "places"
|
||||||
|
self.build_filters_container(self.filter, PlaceSidebarFilter)
|
||||||
self._geo_places()
|
self._geo_places()
|
||||||
|
|
||||||
def _person_places(self, handle=None): # pylint: disable-msg=W0613
|
def _person_places(self, handle=None): # pylint: disable-msg=W0613
|
||||||
@ -951,6 +970,7 @@ class GeoView(HtmlView):
|
|||||||
Specifies the person places.
|
Specifies the person places.
|
||||||
"""
|
"""
|
||||||
self.displaytype = "person"
|
self.displaytype = "person"
|
||||||
|
self.no_filter()
|
||||||
if not self.uistate.get_active('Person'):
|
if not self.uistate.get_active('Person'):
|
||||||
return
|
return
|
||||||
self._geo_places()
|
self._geo_places()
|
||||||
@ -960,6 +980,7 @@ class GeoView(HtmlView):
|
|||||||
Specifies the family places to display with mapstraction.
|
Specifies the family places to display with mapstraction.
|
||||||
"""
|
"""
|
||||||
self.displaytype = "family"
|
self.displaytype = "family"
|
||||||
|
self.no_filter()
|
||||||
if not self.uistate.get_active('Person'):
|
if not self.uistate.get_active('Person'):
|
||||||
return
|
return
|
||||||
self._geo_places()
|
self._geo_places()
|
||||||
@ -969,6 +990,7 @@ class GeoView(HtmlView):
|
|||||||
Specifies all event places to display with mapstraction.
|
Specifies all event places to display with mapstraction.
|
||||||
"""
|
"""
|
||||||
self.displaytype = "event"
|
self.displaytype = "event"
|
||||||
|
self.build_filters_container(self.filter, EventSidebarFilter)
|
||||||
self._geo_places()
|
self._geo_places()
|
||||||
|
|
||||||
def _new_database(self, db):
|
def _new_database(self, db):
|
||||||
@ -999,6 +1021,7 @@ class GeoView(HtmlView):
|
|||||||
self.nbmarkers = 0
|
self.nbmarkers = 0
|
||||||
self.nbplaces = 0
|
self.nbplaces = 0
|
||||||
self.without = 0
|
self.without = 0
|
||||||
|
self.javascript_ready = False
|
||||||
self._createmapstraction(self.displaytype)
|
self._createmapstraction(self.displaytype)
|
||||||
|
|
||||||
def _set_lock_unlock(self, state):
|
def _set_lock_unlock(self, state):
|
||||||
@ -1690,7 +1713,12 @@ class GeoView(HtmlView):
|
|||||||
longitude = ""
|
longitude = ""
|
||||||
self.center = True
|
self.center = True
|
||||||
|
|
||||||
for place in dbstate.db.iter_places():
|
if self.generic_filter == None or not config.get('interface.filter'):
|
||||||
|
places_handle = dbstate.db.iter_place_handles()
|
||||||
|
else:
|
||||||
|
places_handle = self.generic_filter.apply(dbstate.db, dbstate.db.iter_place_handles())
|
||||||
|
for place_hdl in places_handle:
|
||||||
|
place = dbstate.db.get_place_from_handle(place_hdl)
|
||||||
descr = place.get_title()
|
descr = place.get_title()
|
||||||
descr1 = _("Id : %s") % place.gramps_id
|
descr1 = _("Id : %s") % place.gramps_id
|
||||||
longitude = place.get_longitude()
|
longitude = place.get_longitude()
|
||||||
@ -1727,7 +1755,12 @@ class GeoView(HtmlView):
|
|||||||
longitude = ""
|
longitude = ""
|
||||||
self.center = True
|
self.center = True
|
||||||
|
|
||||||
for event in dbstate.db.iter_events():
|
if self.generic_filter == None or not config.get('interface.filter'):
|
||||||
|
events_handle = dbstate.db.iter_event_handles()
|
||||||
|
else:
|
||||||
|
events_handle = self.generic_filter.apply(dbstate.db, dbstate.db.iter_event_handles())
|
||||||
|
for event_hdl in events_handle:
|
||||||
|
event = dbstate.db.get_event_from_handle(event_hdl)
|
||||||
place_handle = event.get_place_handle()
|
place_handle = event.get_place_handle()
|
||||||
eventyear = event.get_date_object().to_calendar(self.cal).get_year()
|
eventyear = event.get_date_object().to_calendar(self.cal).get_year()
|
||||||
if place_handle:
|
if place_handle:
|
||||||
@ -1962,6 +1995,7 @@ class GeoView(HtmlView):
|
|||||||
"""
|
"""
|
||||||
if self.endinit:
|
if self.endinit:
|
||||||
self.open(url)
|
self.open(url)
|
||||||
|
self.javascript_ready = True
|
||||||
|
|
||||||
def _add_place(self,url):
|
def _add_place(self,url):
|
||||||
"""
|
"""
|
||||||
@ -1990,3 +2024,78 @@ class GeoView(HtmlView):
|
|||||||
EditPlace(self.dbstate, self.uistate, [], place)
|
EditPlace(self.dbstate, self.uistate, [], place)
|
||||||
except Errors.WindowActiveError:
|
except Errors.WindowActiveError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
####################################################################
|
||||||
|
# Filters
|
||||||
|
####################################################################
|
||||||
|
def build_filters_container(self, box, filter_class):
|
||||||
|
"""
|
||||||
|
Used to create the filters on Geoview.
|
||||||
|
Depending on the events view or places, view we must generate the
|
||||||
|
good filter.
|
||||||
|
We need to remove the old filter if it exists then add the new one.
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
self.vbox.destroy()
|
||||||
|
except: # pylint: disable-msg=W0704
|
||||||
|
pass # pylint: disable-msg=W0702
|
||||||
|
for child in self.hpaned.get_children(): # cleanup
|
||||||
|
self.hpaned.remove(child)
|
||||||
|
self.vbox = gtk.VBox()
|
||||||
|
self.hpaned.pack_start(self.vbox, True, True)
|
||||||
|
self.filter_sidebar = filter_class(self.dbstate, self.uistate,
|
||||||
|
self.filter_clicked)
|
||||||
|
self.filter_pane = self.filter_sidebar.get_widget()
|
||||||
|
self.hpaned.pack_end(self.filter_pane, False, False)
|
||||||
|
box.show_all()
|
||||||
|
self.filter_toggle(None, None, None, None)
|
||||||
|
|
||||||
|
def no_filter(self):
|
||||||
|
"""
|
||||||
|
We don't need a filter for the current view.
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
self.filter_pane.hide()
|
||||||
|
except: # pylint: disable-msg=W0704
|
||||||
|
pass # pylint: disable-msg=W0702
|
||||||
|
|
||||||
|
def filter_toggle(self, client, cnxn_id, entry, data):
|
||||||
|
"""
|
||||||
|
We must show or hide the filter depending on the filter toggle button.
|
||||||
|
"""
|
||||||
|
if not self.endinit:
|
||||||
|
return
|
||||||
|
|
||||||
|
if self.displaytype == "places" or self.displaytype == "event":
|
||||||
|
if config.get('interface.filter'):
|
||||||
|
self.filter_pane.show()
|
||||||
|
else:
|
||||||
|
self.filter_pane.hide()
|
||||||
|
|
||||||
|
def filter_toggle_action(self, obj):
|
||||||
|
"""
|
||||||
|
Depending on the filter toggle button action, we must show or hile
|
||||||
|
the filter then save the state in the config file.
|
||||||
|
"""
|
||||||
|
if self.displaytype == "places" or self.displaytype == "event":
|
||||||
|
if obj.get_active():
|
||||||
|
self.filter_pane.show()
|
||||||
|
active = True
|
||||||
|
else:
|
||||||
|
self.filter_pane.hide()
|
||||||
|
active = False
|
||||||
|
config.set('interface.filter', active)
|
||||||
|
self.build_tree()
|
||||||
|
|
||||||
|
def filter_clicked(self):
|
||||||
|
"""
|
||||||
|
We have clicked on the Find button into the filter box.
|
||||||
|
"""
|
||||||
|
self.generic_filter = self.filter_sidebar.get_filter()
|
||||||
|
self.build_tree()
|
||||||
|
|
||||||
|
def build_tree(self):
|
||||||
|
"""
|
||||||
|
Builds the new view depending on the filter.
|
||||||
|
"""
|
||||||
|
self._geo_places()
|
||||||
|
@ -425,6 +425,7 @@ class HtmlView(PageView):
|
|||||||
self.renderer = None
|
self.renderer = None
|
||||||
self.urlfield = ""
|
self.urlfield = ""
|
||||||
self.htmlfile = ""
|
self.htmlfile = ""
|
||||||
|
self.filter = gtk.HBox()
|
||||||
self.table = ""
|
self.table = ""
|
||||||
self.browser = NOWEB
|
self.browser = NOWEB
|
||||||
self.bootstrap_handler = None
|
self.bootstrap_handler = None
|
||||||
@ -441,6 +442,7 @@ class HtmlView(PageView):
|
|||||||
self.box.pack_start(self.top_widget(), False, False, 0 )
|
self.box.pack_start(self.top_widget(), False, False, 0 )
|
||||||
#web page under it in a scrolled window
|
#web page under it in a scrolled window
|
||||||
self.table = gtk.Table(1, 1, False)
|
self.table = gtk.Table(1, 1, False)
|
||||||
|
frames = gtk.HBox(False, 4)
|
||||||
frame = gtk.ScrolledWindow(None, None)
|
frame = gtk.ScrolledWindow(None, None)
|
||||||
frame.set_shadow_type(gtk.SHADOW_NONE)
|
frame.set_shadow_type(gtk.SHADOW_NONE)
|
||||||
frame.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
|
frame.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
|
||||||
@ -457,11 +459,15 @@ class HtmlView(PageView):
|
|||||||
# We use gtkmozembed
|
# We use gtkmozembed
|
||||||
self.renderer = RendererMozilla()
|
self.renderer = RendererMozilla()
|
||||||
self.table.add(self.renderer.get_window())
|
self.table.add(self.renderer.get_window())
|
||||||
self.box.pack_start(frame, True, True, 0)
|
frames.set_homogeneous(False)
|
||||||
|
frames.pack_start(frame, True, True, 0)
|
||||||
|
frames.pack_end(self.filter, False, False, 0)
|
||||||
|
self.box.pack_start(frames, True, True, 0)
|
||||||
# this is used to activate the back and forward button
|
# this is used to activate the back and forward button
|
||||||
# from the renderer class.
|
# from the renderer class.
|
||||||
self.renderer.fct = lambda: self.set_button_sensitivity
|
self.renderer.fct = lambda: self.set_button_sensitivity
|
||||||
self.renderer.show_all()
|
self.renderer.show_all()
|
||||||
|
self.filter.hide()
|
||||||
#load a welcome html page
|
#load a welcome html page
|
||||||
urlhelp = self._create_start_page()
|
urlhelp = self._create_start_page()
|
||||||
self.open(urlhelp)
|
self.open(urlhelp)
|
||||||
|
Loading…
Reference in New Issue
Block a user