11import logging
2- import time
32
43from ... import mapwidget
54
@@ -11,9 +10,9 @@ class Evented(QObject):
1110 Base class for all pyqtlet2 objects.
1211 Handles initiation, as well as all python<->js communication
1312 '''
14- mapWidget = None
13+ mapWidgets = []
1514
16- def __init__ (self , mapWidget = None ):
15+ def __init__ (self , mapWidget = None , mapWidgetIndex = None ):
1716 '''
1817 Base class for all pyqtlet2 objects
1918 Handles initiation, as well as python-Js communication
@@ -28,22 +27,31 @@ def __init__(self, mapWidget=None):
2827 super ().__init__ ()
2928 self ._logger = logging .getLogger (__name__ )
3029 self .response = None
31- if Evented .mapWidget :
30+
31+ if isinstance (mapWidgetIndex , type (None )):
3232 return
33+
3334 if mapWidget is None :
3435 raise RuntimeError ('L.map must be initialised before other pyqtlet2 objects' )
3536 if not issubclass (type (mapWidget ), mapwidget .MapWidget ):
3637 raise TypeError (('Expected mapWidget of type pyqtlet2.MapWidget, '
3738 'received {type_}' .format (type_ = type (mapWidget ))))
38- Evented . mapWidget = mapWidget
39+ self . mapWidgets . append ( mapWidget )
3940 js = ('var channelObjects = null;'
4041 'new QWebChannel(qt.webChannelTransport, function(channel) {'
4142 ' channelObjects = channel.objects;'
4243 '});' )
43- self .runJavaScript (js )
44- self .mapWidget .page .titleChanged .connect (lambda : print ('title changed' ))
44+ self .runJavaScript (js , mapWidgetIndex )
45+ if mapWidget := self .getMapWidgetAtIndex (mapWidgetIndex ):
46+ mapWidget .page .titleChanged .connect (lambda : print ('title changed' ))
47+
48+ def getMapWidgetAtIndex (self , mapWidgetIndex ):
49+ if len (self .mapWidgets ) > mapWidgetIndex :
50+ return self .mapWidgets [mapWidgetIndex ]
51+ self ._logger .error ("No" )
52+ return None
4553
46- def getJsResponse (self , js , callback ):
54+ def getJsResponse (self , js , mapWidgetIndex , callback ):
4755 '''
4856 Runs javascript code in the mapWidget and triggers callback.
4957
@@ -63,9 +71,12 @@ def getJsResponse(self, js, callback):
6371 '''
6472 self ._logger .debug ('Running JS with callback: {js}=>{callback}' .format (
6573 js = js , callback = callback .__name__ ))
66- self .mapWidget .page .runJavaScript (js , callback )
74+ if mapWidget := self .getMapWidgetAtIndex (mapWidgetIndex ):
75+ mapWidget .page .runJavaScript (js , callback )
76+ else :
77+ self ._logger .error (f"Can't find mapWidget at index: { mapWidgetIndex } " )
6778
68- def runJavaScript (self , js ):
79+ def runJavaScript (self , js , mapWidgetIndex : int ):
6980 '''
7081 Runs javascript code in the mapWidget.
7182
@@ -75,9 +86,12 @@ def runJavaScript(self, js):
7586 :param str js: The javascript code
7687 '''
7788 self ._logger .debug ('Running JS: {js}' .format (js = js ))
78- self .mapWidget .page .runJavaScript (js )
89+ if mapWidget := self .getMapWidgetAtIndex (mapWidgetIndex ):
90+ mapWidget .page .runJavaScript (js )
91+ else :
92+ self ._logger .error (f"Can't find mapWidget at index: { mapWidgetIndex } " )
7993
80- def _createJsObject (self , leafletJsObject ):
94+ def _createJsObject (self , leafletJsObject , mapWidgetIndex ):
8195 '''
8296 Function to create variables/objects in leaflet in the
8397 javascript "engine", and registers the object so that it can
@@ -89,20 +103,23 @@ def _createJsObject(self, leafletJsObject):
89103 # Creates the js object on the mapWidget page
90104 js = 'var {name} = {jsObject}' .format (name = self .jsName ,
91105 jsObject = leafletJsObject )
92- self .runJavaScript (js )
106+ self .runJavaScript (js , mapWidgetIndex )
93107 # register the object in the channel
94- self .mapWidget .channel .registerObject (
95- '{name}Object' .format (name = self .jsName ), self )
108+ if mapWidget := self .getMapWidgetAtIndex (mapWidgetIndex ):
109+ mapWidget .channel .registerObject (
110+ '{name}Object' .format (name = self .jsName ), self )
111+ else :
112+ self ._logger .error (f"Can't find mapWidget at index: { mapWidgetIndex } " )
96113
97- def _connectEventToSignal (self , event , signalEmitter ):
114+ def _connectEventToSignal (self , event , signalEmitter , mapWidgetIndex ):
98115 # We need to delete some keys as they are causing circular structures
99116 js = '{name}.on("{event}", function(e) {{\
100117 delete e.target;\
101118 delete e.sourceTarget;\
102119 e = copyWithoutCircularReferences([e], e);\
103120 channelObjects.{name}Object.{signalEmitter}(e)}})' .format (
104121 name = self .jsName , event = event , signalEmitter = signalEmitter )
105- self .runJavaScript (js )
122+ self .runJavaScript (js , mapWidgetIndex )
106123
107124 def _stringifyForJs (self , object_ ):
108125 # When passing options to JS, sometimes we need to pass in objects
0 commit comments