def on_timer(self, event): state = self.state if state.close_event.wait(0.001): self.timer.Stop() self.Destroy() return while state.child_pipe_recv.poll(): try: obj = state.child_pipe_recv.recv() except EOFError: self.timer.Stop() self.Destroy() return if isinstance(obj, Value): # request to set a status field if not obj.name in self.values: # create a new status field value = wx.StaticText(self.panel, -1, obj.text) # possibly add more status rows for i in range(len(self.status), obj.row + 1): self.status.append(wx.BoxSizer(wx.HORIZONTAL)) self.vbox.Insert(len(self.status) - 1, self.status[i], 0, flag=wx.ALIGN_LEFT | wx.TOP) self.vbox.Layout() self.status[obj.row].Add(value, border=5) self.status[obj.row].AddSpacer(20) self.values[obj.name] = value value = self.values[obj.name] value.SetForegroundColour(obj.fg) value.SetBackgroundColour(obj.bg) value.SetLabel(obj.text) self.panel.Layout() #self.values_rest[obj.name] = {"text": obj.text, "fg": obj.fg, "bg": obj.bg, "row": obj.row} elif isinstance(obj, Text): '''request to add text to the console''' #self.text_rest.add({"text": obj.text, "fg": obj.fg, "bg": obj.bg}) self.pending.append(obj) for p in self.pending: # we're scrolled at the bottom oldstyle = self.control.GetDefaultStyle() style = wx.TextAttr() style.SetTextColour(p.fg) style.SetBackgroundColour(p.bg) self.control.SetDefaultStyle(style) self.control.AppendText(p.text) self.control.SetDefaultStyle(oldstyle) self.pending = [] elif isinstance(obj, mp_menu.MPMenuTop): if obj is not None: self.SetMenuBar(None) self.menu = obj self.SetMenuBar(self.menu.wx_menu()) self.Bind(wx.EVT_MENU, self.on_menu) self.Refresh() self.Update() elif isinstance(obj, win_layout.WinLayout): win_layout.set_wx_window_layout(self, obj)
def on_timer(self, event): '''receive messages from MAVProxy and pass on to GUI''' state = self.state # update saved pos/size of GUI now = time.time() if now - self.last_layout_send > 1: self.last_layout_send = now state.child_pipe.send( (win_layout.get_wx_window_layout(self), 0, 0)) if state.close_event.wait(0.001): self.timer.Stop() self.Destroy() return while state.child_pipe.poll(): obj = state.child_pipe.recv() if obj[0] == 'updatelayout': self.updateLayout(obj[1]) elif obj[0] == 'onmavlinkpacket': self.onmavlinkpacket(obj[1]) elif obj[0] == 'updateHB': self.updateHB(obj[1]) elif isinstance(obj[0], win_layout.WinLayout): win_layout.set_wx_window_layout(self, obj[0]) elif obj[0] == 'changesetting' and obj[1][0] == 'takeoffalt': self.updatetakeoffalt(int(obj[1][1]))
def on_idle(self, event): now = time.time() if now - self.last_layout_send > 1: self.last_layout_send = now self.event_queue.put(win_layout.get_wx_window_layout(self)) obj = None while not self.state.object_queue.empty(): obj = self.state.object_queue.get() if isinstance(obj, win_layout.WinLayout): win_layout.set_wx_window_layout(self, obj)
def on_redraw_timer(self, event): '''the redraw timer ensures we show new map tiles as they are downloaded''' state = self.state while state.in_queue.qsize(): try: obj = state.in_queue.get() except Exception: time.sleep(0.05) return if isinstance(obj, MPImageData): with warnings.catch_warnings(): warnings.simplefilter('ignore') img = wx.EmptyImage(obj.width, obj.height) img.SetData(obj.data) self.img = img self.need_redraw = True if state.auto_size: client_area = state.frame.GetClientSize() total_area = state.frame.GetSize() bx = max(total_area.x - client_area.x, 0) by = max(total_area.y - client_area.y, 0) state.frame.SetSize( wx.Size(obj.width + bx, obj.height + by)) if isinstance(obj, MPImageTitle): state.frame.SetTitle(obj.title) if isinstance(obj, MPImageRecenter): self.on_recenter(obj.location) if isinstance(obj, MPImageMenu): self.set_menu(obj.menu) if isinstance(obj, MPImagePopupMenu): self.set_popup_menu(obj.menu) if isinstance(obj, MPImageBrightness): state.brightness = obj.brightness self.need_redraw = True if isinstance(obj, MPImageFullSize): self.full_size() if isinstance(obj, MPImageFitToWindow): self.fit_to_window() if isinstance(obj, win_layout.WinLayout): win_layout.set_wx_window_layout(state.frame, obj) if self.need_redraw: self.redraw()
def on_redraw_timer(self, event): '''the redraw timer ensures we show new map tiles as they are downloaded''' state = self.state while state.in_queue.qsize(): try: obj = state.in_queue.get() except Exception: time.sleep(0.05) return if isinstance(obj, MPImageData): with warnings.catch_warnings(): warnings.simplefilter('ignore') img = wx.EmptyImage(obj.width, obj.height) img.SetData(obj.data) self.img = img self.need_redraw = True if state.auto_size: client_area = state.frame.GetClientSize() total_area = state.frame.GetSize() bx = max(total_area.x - client_area.x,0) by = max(total_area.y - client_area.y,0) state.frame.SetSize(wx.Size(obj.width+bx, obj.height+by)) if isinstance(obj, MPImageTitle): state.frame.SetTitle(obj.title) if isinstance(obj, MPImageRecenter): self.on_recenter(obj.location) if isinstance(obj, MPImageMenu): self.set_menu(obj.menu) if isinstance(obj, MPImagePopupMenu): self.set_popup_menu(obj.menu) if isinstance(obj, MPImageBrightness): state.brightness = obj.brightness self.need_redraw = True if isinstance(obj, MPImageFullSize): self.full_size() if isinstance(obj, MPImageFitToWindow): self.fit_to_window() if isinstance(obj, win_layout.WinLayout): win_layout.set_wx_window_layout(state.frame, obj) if self.need_redraw: self.redraw()
def on_idle(self, event): '''prevent the main loop spinning too fast''' state = self.state if state.close_window.acquire(False): self.state.app.ExitMainLoop() now = time.time() if now - self.last_layout_send > 1: self.last_layout_send = now state.event_queue.put(win_layout.get_wx_window_layout(self)) # receive any display objects from the parent obj = None while not state.object_queue.empty(): obj = state.object_queue.get() if isinstance(obj, win_layout.WinLayout): win_layout.set_wx_window_layout(self, obj) if isinstance(obj, SlipObject): self.add_object(obj) if isinstance(obj, SlipPosition): # move an object object = self.find_object(obj.key, obj.layer) if object is not None: object.update_position(obj) if getattr(object, 'follow', False): self.follow(object) if obj.label is not None: object.label = obj.label if obj.colour is not None: object.colour = obj.colour state.need_redraw = True if isinstance(obj, SlipDefaultPopup): state.default_popup = obj if isinstance(obj, SlipInformation): # see if its a existing one or a new one if obj.key in state.info: # print('update %s' % str(obj.key)) state.info[obj.key].update(obj) else: # print('add %s' % str(obj.key)) state.info[obj.key] = obj state.need_redraw = True if isinstance(obj, SlipCenter): # move center (lat, lon) = obj.latlon state.panel.re_center(state.width / 2, state.height / 2, lat, lon) state.need_redraw = True if isinstance(obj, SlipZoom): # change zoom state.panel.set_ground_width(obj.ground_width) state.need_redraw = True if isinstance(obj, SlipFollow): # enable/disable follow state.follow = obj.enable if isinstance(obj, SlipFollowObject): # enable/disable follow on an object for layer in state.layers: if obj.key in state.layers[layer]: if hasattr(state.layers[layer][obj.key], 'follow'): state.layers[layer][obj.key].follow = obj.enable if isinstance(obj, SlipBrightness): # set map brightness state.brightness = obj.brightness state.need_redraw = True if isinstance(obj, SlipClearLayer): # remove all objects from a layer if obj.layer in state.layers: state.layers.pop(obj.layer) state.need_redraw = True if isinstance(obj, SlipRemoveObject): # remove an object by key for layer in state.layers: if obj.key in state.layers[layer]: state.layers[layer].pop(obj.key) state.need_redraw = True if isinstance(obj, SlipHideObject): # hide an object by key for layer in state.layers: if obj.key in state.layers[layer]: state.layers[layer][obj.key].set_hidden(obj.hide) state.need_redraw = True if state.timelim_pipe is not None: while state.timelim_pipe[1].poll(): try: obj = state.timelim_pipe[1].recv() except Exception: state.timelim_pipe = None break for layer in state.layers: for key in state.layers[layer].keys(): state.layers[layer][key].set_time_range(obj) state.need_redraw = True if obj is None: time.sleep(0.05)
def on_timer(self, event): state = self.state if state.close_event.wait(0.001): self.timer.Stop() self.Destroy() return while state.child_pipe_recv.poll(): try: obj = state.child_pipe_recv.recv() except EOFError: self.timer.Stop() self.Destroy() return if isinstance(obj, Value): # request to set a status field if obj.name not in self.values: # create a new status field statictextbox = wx.StaticText(self.panel, -1, obj.text) font = wx.Font(18, wx.DEFAULT, wx.NORMAL, wx.NORMAL) statictextbox.SetFont(font) # possibly add more status rows for i in range(len(self.status), obj.row + 1): self.status.append(wx.BoxSizer(wx.HORIZONTAL)) self.vbox.Insert(len(self.status) - 1, self.status[i], 0, flag=wx.ALIGN_LEFT | wx.TOP) self.vbox.Layout() self.status[obj.row].Add(statictextbox, border=5) self.status[obj.row].AddSpacer(20) self.values[obj.name] = statictextbox statictextbox = self.values[obj.name] statictextbox.SetForegroundColour(obj.fg) statictextbox.SetBackgroundColour(obj.bg) statictextbox.SetLabel(obj.text) self.panel.Layout() elif isinstance(obj, Text): '''request to add text to the console''' self.pending.append(obj) for p in self.pending: # we're scrolled at the bottom oldstyle = self.control.GetDefaultStyle() style = wx.TextAttr() style.SetTextColour(p.fg) style.SetBackgroundColour(p.bg) self.control.SetDefaultStyle(style) self.control.AppendText(p.text) self.control.SetDefaultStyle(oldstyle) self.pending = [] elif isinstance(obj, mp_menu.MPMenuTop): if obj is not None: self.SetMenuBar(None) self.menu = obj self.SetMenuBar(self.menu.wx_menu()) self.Bind(wx.EVT_MENU, self.on_menu) self.Refresh() self.Update() elif isinstance(obj, mp_menu.MPButton): if obj is not None: newbtn = wx.Button(self.panel, label=obj.label) newbtn.Bind(wx.EVT_BUTTON, self.on_button) self.buttongridsizer.Add(newbtn, 0, wx.EXPAND) self.buttons.append(obj) elif isinstance(obj, win_layout.WinLayout): win_layout.set_wx_window_layout(self, obj)
def on_idle(self, event): '''prevent the main loop spinning too fast''' state = self.state if state.close_window.acquire(False): self.state.app.ExitMainLoop() now = time.time() if now - self.last_layout_send > 1: self.last_layout_send = now state.event_queue.put(win_layout.get_wx_window_layout(self)) # receive any display objects from the parent obj = None while not state.object_queue.empty(): obj = state.object_queue.get() if isinstance(obj, win_layout.WinLayout): win_layout.set_wx_window_layout(self, obj) if isinstance(obj, SlipObject): self.add_object(obj) if isinstance(obj, SlipPosition): # move an object object = self.find_object(obj.key, obj.layer) if object is not None: object.update_position(obj) if getattr(object, 'follow', False): self.follow(object) if obj.label is not None: object.label = obj.label if obj.colour is not None: object.colour = obj.colour state.need_redraw = True if isinstance(obj, SlipDefaultPopup): state.default_popup = obj if isinstance(obj, SlipInformation): # see if its a existing one or a new one if obj.key in state.info: # print('update %s' % str(obj.key)) state.info[obj.key].update(obj) else: # print('add %s' % str(obj.key)) state.info[obj.key] = obj state.need_redraw = True if isinstance(obj, SlipCenter): # move center (lat,lon) = obj.latlon state.panel.re_center(state.width/2, state.height/2, lat, lon) state.need_redraw = True if isinstance(obj, SlipZoom): # change zoom state.panel.set_ground_width(obj.ground_width) state.need_redraw = True if isinstance(obj, SlipFollow): # enable/disable follow state.follow = obj.enable if isinstance(obj, SlipFollowObject): # enable/disable follow on an object for layer in state.layers: if obj.key in state.layers[layer]: if hasattr(state.layers[layer][obj.key], 'follow'): state.layers[layer][obj.key].follow = obj.enable if isinstance(obj, SlipBrightness): # set map brightness state.brightness = obj.brightness state.need_redraw = True if isinstance(obj, SlipClearLayer): # remove all objects from a layer if obj.layer in state.layers: state.layers.pop(obj.layer) state.need_redraw = True if isinstance(obj, SlipRemoveObject): # remove an object by key for layer in state.layers: if obj.key in state.layers[layer]: state.layers[layer].pop(obj.key) state.need_redraw = True if isinstance(obj, SlipHideObject): # hide an object by key for layer in state.layers: if obj.key in state.layers[layer]: state.layers[layer][obj.key].set_hidden(obj.hide) state.need_redraw = True if obj is None: time.sleep(0.05)