# Please do not change this widgets module for Quisk. Instead copy # it to your own quisk_widgets.py and make changes there. # # This module is used to add extra widgets to the QUISK screen. from __future__ import print_function from __future__ import absolute_import from __future__ import division import wx, time import _quisk as QS class BottomWidgets: # Add extra widgets to the bottom of the screen def __init__(self, app, hardware, conf, frame, gbs, vertBox): self.config = conf self.hardware = hardware self.application = app row = 4 # The next available row b = app.QuiskPushbutton(frame, None, 'Tune') bw, bh = b.GetMinSize() b.Enable(0) gbs.Add(b, (row, 0), (1, 2), flag=wx.EXPAND) b = app.QuiskPushbutton(frame, None, '') gbs.Add(b, (row, 2), (1, 2), flag=wx.EXPAND) b = app.QuiskPushbutton(frame, None, '') gbs.Add(b, (row, 4), (1, 2), flag=wx.EXPAND) b = self.btnScanner = app.QuiskCheckbutton(frame, self.OnBtnScanner, text='Scanner', use_right=True) self.scan_timer = wx.Timer(b) # timed events for the scanner b.Bind(wx.EVT_TIMER, self.OnTimerEvent) gbs.Add(b, (row, 6), (1, 2), flag=wx.EXPAND) b = self.btnNext = app.QuiskPushbutton(frame, self.OnBtnNext, 'Next', True) gbs.Add(b, (row, 8), (1, 2), flag=wx.EXPAND) b = app.QuiskCheckbutton(frame, self.OnBtnRptr, text='Rptr') b.SetValue(True, True) gbs.Add(b, (row, 10), (1, 2), flag=wx.EXPAND) self.swr_label = app.QuiskText(frame, 'Watts 000 SWR 10.1 Zh Ind 22 Cap 33 Freq 28100 (7777)', bh) gbs.Add(self.swr_label, (row, 15), (1, 12), flag=wx.EXPAND) # Example of a horizontal slider: # lab = wx.StaticText(frame, -1, 'Preamp', style=wx.ALIGN_CENTER) # gbs.Add(lab, (5,0), flag=wx.EXPAND) # sl = wx.Slider(frame, -1, 1024, 0, 2048) # parent, -1, initial, min, max # gbs.Add(sl, (5,1), (1, 5), flag=wx.EXPAND) # sl.Bind(wx.EVT_SCROLL, self.OnPreamp) # def OnPreamp(self, event): # print event.GetPosition() def UpdateText(self, text): self.swr_label.SetLabel(text) def OnBtnRptr(self, event): btn = event.GetEventObject() if btn.GetValue(): self.config.freq_spacing = 5000 else: self.config.freq_spacing = 0 def OnBtnNext(self, event): self.direction = self.btnNext.direction # +1 for left -> go up; -1 for down self.keep_going = wx.GetKeyState(wx.WXK_SHIFT) # if Shift is down, move to next band self.scanner = False if self.keep_going: if not self.ScanScreen(event): self.MoveVfo(event) self.scan_timer.Start(500) else: self.ScanScreen(event) def ScanScreen(self, event): # Look for signals on the current screen lst = self.hardware.rpt_freq_list app = self.application vfo = app.VFO tx_freq = vfo + app.txFreq sample_rate = app.sample_rate limit = int(sample_rate / 2.0 * self.config.display_fraction * 0.95) # edge of screen self.scan_n1 = None self.scan_n = None for n in range(len(lst)): if lst[n] > vfo - limit and self.scan_n1 is None: self.scan_n1 = n # inclusive if lst[n] >= tx_freq and self.scan_n is None: self.scan_n = n if lst[n] > vfo + limit: break self.scan_n2 = n # inclusive if self.scan_n is None: self.scan_n = self.scan_n1 if self.direction > 0: # left click; go up seq = list(range(self.scan_n + 1, self.scan_n2 + 1)) if not self.keep_going: seq += list(range(self.scan_n1, self.scan_n)) else: # right click; go down seq = list(range(self.scan_n - 1, self.scan_n1 - 1, -1)) if not self.keep_going: seq += list(range(self.scan_n2, self.scan_n, -1)) for n in seq: freq = lst[n] if not QS.get_squelch(freq - vfo): app.ChangeHwFrequency(freq - vfo, vfo, 'Repeater', event) return True # frequency was changed return False # frequency was not changed def MoveVfo(self, event): # Move the VFO to look for further signals lst = self.hardware.rpt_freq_list app = self.application vfo = app.VFO tx_freq = vfo + app.txFreq sample_rate = app.sample_rate if self.direction > 0: # left click; go up n = self.scan_n2 + 1 if n >= len(lst): n = 0 freq = lst[n] vfo = freq + sample_rate * 4 // 10 app.ChangeHwFrequency(freq - vfo, vfo, 'Repeater', event) else: # right click; go down n = self.scan_n1 - 1 if n < 0: n = len(lst) - 1 freq = lst[n] vfo = freq - sample_rate * 4 // 10 app.ChangeHwFrequency(freq - vfo, vfo, 'Repeater', event) def OnBtnScanner(self, event): self.direction = self.btnScanner.direction # +1 for left -> go up; -1 for down self.keep_going = wx.GetKeyState(wx.WXK_SHIFT) # if Shift is down, move to next band self.scanner = True if self.btnScanner.GetValue(): self.btnNext.Enable(0) if self.keep_going: if not self.ScanScreen(event): self.MoveVfo(event) else: self.ScanScreen(event) self.scan_timer.Start(500) else: self.btnNext.Enable(1) self.scan_timer.Stop() def OnTimerEvent(self, event): if QS.get_squelch(self.application.txFreq): if self.keep_going: if not self.ScanScreen(event): self.MoveVfo(event) else: self.ScanScreen(event) elif not self.scanner: self.scan_timer.Stop()