Example #1
0
 def set_holes(self, holes):
     if self.marker:
         self.marker.setHoles(
             [bridge.encode(LatLng(*p)) for hole in holes for p in hole])
     else:
         for hole in holes:
             self.options.addHole([bridge.encode(LatLng(*p)) for p in hole])
Example #2
0
    def refresh_points(self, points):
        coordinates = [LatLng(*p) for p in points]
        self.clear()

        # Must manually encode these the bridge currently
        # doesnt try as it's slower
        self.addAll([bridge.encode(c) for c in coordinates])
Example #3
0
    def refresh_views(self, change=None):
        """Set the views that the adapter will cycle through."""
        adapter = self.adapter

        # Set initial ListItem state
        item_mapping = self.item_mapping
        for i, item in enumerate(self.list_items):
            item_mapping[i] = item
            item.recycle_view(i)

        if adapter:
            adapter.clearRecycleViews()
            adapter.setRecycleViews(
                [encode(li.get_view()) for li in self.list_items])
    def init_layout(self):
        super().init_layout()
        d = self.declaration
        w = self.widget

        # Add pages
        adapter = self.adapter
        adapter.addFragments([encode(c.fragment) for c in self.pages])

        # Set adapter
        w.setAdapter(adapter)
        w.addOnPageChangeListener(w.getId())
        w.onPageSelected.connect(self.on_page_selected)

        if d.current_index:
            self.set_current_index(d.current_index)
Example #5
0
    async def handle_event(self, result_id: int, ptr: int, method: str,
                           args: list):
        """When we get an 'event' type from the bridge
        handle it by invoking the handler and if needed
        sending back the result.

        """
        obj = None
        result = None
        try:
            obj, handler = get_handler(ptr, method)
            if method == "set_exception":
                # Remote call failed
                obj.set_exception(BridgeException(args))
            elif iscoroutinefunction(handler):
                result = await handler(*(v for t, v in args))
            else:
                result = handler(*(v for t, v in args))
        except BridgeReferenceError as e:
            #: Log the event, don't blow up here
            event = (result_id, ptr, method, args)
            print(f"Error processing event: {event} - {e}")
            self.error_occurred(e)  # type: ignore
            # self.show_error(msg)
        except Exception as e:
            #: Log the event, blow up in user's face
            self.error_occurred(e)  # type: ignore
            err = traceback.format_exc()
            event = (result_id, ptr, method, args)
            msg = f"Error processing event: {event} - {err}"
            print(msg)
            self.show_error(msg)
            raise
        finally:
            if result_id:
                if hasattr(obj, "__nativeclass__"):
                    sig, ret_type = getattr(obj.__class__, method).__returns__
                else:
                    sig = result.__class__.__name__

                self.send_event(
                    Command.RESULT,  #: method
                    result_id,
                    (sig, encode(result)),  #: args
                    now=True,
                )
Example #6
0
 def handle_change(self, change):
     """ Handle changes from atom ContainerLists """
     op = change['operation']
     if op in 'append':
         self.add(len(change['value']), LatLng(*change['item']))
     elif op == 'insert':
         self.add(change['index'], LatLng(*change['item']))
     elif op == 'extend':
         points = [LatLng(*p) for p in change['items']]
         self.addAll([bridge.encode(c) for c in points])
     elif op == '__setitem__':
         self.set(change['index'], LatLng(*change['newitem']))
     elif op == 'pop':
         self.remove(change['index'])
     else:
         raise NotImplementedError(
             "Unsupported change operation {}".format(op))