193 lines
7.8 KiB
Python
193 lines
7.8 KiB
Python
from PySide2.QtWidgets import *
|
|
from PySide2.QtCore import *
|
|
from PySide2.QtGui import *
|
|
|
|
import common
|
|
|
|
import sys
|
|
sys.path.insert(1, '../../proto')
|
|
import messages_pb2
|
|
import context_pb2
|
|
import request_pb2
|
|
|
|
import google.protobuf.message as proto
|
|
|
|
class Scanner:
|
|
gainFromContext = False
|
|
squelchFromContext = False
|
|
|
|
def __init__(self, parentWindow):
|
|
self.widget = parentWindow.findChild(QWidget, 'scannerPage')
|
|
self.contextStack = parentWindow.findChild(QStackedWidget, 'scanContextStack')
|
|
self.holdPage = parentWindow.findChild(QWidget, 'scanner_holdPage')
|
|
self.scanPage = parentWindow.findChild(QWidget, 'scanner_scanPage')
|
|
self.entryTagLabel = parentWindow.findChild(QLabel, 'scanner_entryTagLabel')
|
|
self.frequencyLabel = parentWindow.findChild(QLabel, 'scanner_frequencyLabel')
|
|
self.modulationLabel = parentWindow.findChild(QLabel, 'scanner_modulationLabel')
|
|
self.systemTagLabel = parentWindow.findChild(QLabel, 'scanner_systemTagLabel')
|
|
self.entryNumLabel = parentWindow.findChild(QLabel, 'scanner_entryNumLabel')
|
|
self.lockoutCheckbox = parentWindow.findChild(QCheckBox, 'scanner_lockoutCheckbox')
|
|
self.scanIndicator = parentWindow.findChild(QLabel, 'scanner_scanIndicator')
|
|
self.gainSlider = parentWindow.findChild(QSlider, 'scanner_gainSlider')
|
|
##self.gainLabel = parentWindow.findChild(QLabel, 'scanner_gainLabel')
|
|
self.sigStrengthBar = parentWindow.findChild(QProgressBar, 'scanner_sigStrengthBar')
|
|
self.squelchSlider = parentWindow.findChild(QSlider, 'scanner_squelchSlider')
|
|
##self.squelchLabel = parentWindow.findChild(QLabel, 'scanner_squelchLabel')
|
|
self.fnButtonsWidget = parentWindow.findChild(QWidget, 'scanner_fnButtonsWidget')
|
|
self.fnButton1 = parentWindow.findChild(QPushButton, 'scanner_fnButton1')
|
|
self.fnButton2 = parentWindow.findChild(QPushButton, 'scanner_fnButton2')
|
|
self.fnButton3 = parentWindow.findChild(QPushButton, 'scanner_fnButton3')
|
|
self.fnButton4 = parentWindow.findChild(QPushButton, 'scanner_fnButton4')
|
|
|
|
self.sidebarToggleButton = parentWindow.findChild(QToolButton, 'scanner_sidebarToggle')
|
|
self.sidebarPanel = parentWindow.findChild(QWidget, 'scanner_sidebarPanel')
|
|
|
|
self.fnButton1.clicked.connect(self.onFnButton1)
|
|
self.fnButton2.clicked.connect(self.onFnButton2)
|
|
self.fnButton3.clicked.connect(self.onFnButton3)
|
|
self.fnButton4.clicked.connect(self.onFnButton4)
|
|
self.gainSlider.valueChanged.connect(self.ongainSlider)
|
|
self.squelchSlider.valueChanged.connect(self.onsquelchSlider)
|
|
|
|
self.sidebarToggleButton.clicked.connect(self.onSidebarToggle)
|
|
self.sidebarOpen = True
|
|
|
|
#temporary since settins dialog is not yet implemented
|
|
self.fnButton4.setEnabled(False)
|
|
|
|
movie = QMovie("resources/bar-scan.gif")
|
|
movie.start()
|
|
self.scanIndicator.setMovie(movie)
|
|
|
|
labelPalette = QPalette()
|
|
labelPalette.setColor(QPalette.WindowText, Qt.white)
|
|
labelFont = QFont()
|
|
labelFont.setPointSize(12)
|
|
squelchLayout = QHBoxLayout(self.squelchSlider)
|
|
squelchLayout.setContentsMargins(0, 0, 0, 0)
|
|
self.squelchLabel = QLabel()
|
|
self.squelchLabel.setAlignment(Qt.AlignTop)
|
|
self.squelchLabel.setPalette(labelPalette)
|
|
self.squelchLabel.setFont(labelFont)
|
|
self.squelchLabel.setText(str(0))
|
|
squelchLayout.addWidget(self.squelchLabel)
|
|
|
|
gainLayout = QHBoxLayout(self.gainSlider)
|
|
gainLayout.setContentsMargins(0, 0, 0, 0)
|
|
self.gainLabel = QLabel()
|
|
self.gainLabel.setAlignment(Qt.AlignTop)
|
|
self.gainLabel.setPalette(labelPalette)
|
|
self.gainLabel.setFont(labelFont)
|
|
self.gainLabel.setText(str(0))
|
|
gainLayout.addWidget(self.gainLabel)
|
|
|
|
#self.setMode(common.ScannerMode.SCANNING)
|
|
self.contextStack.setCurrentWidget(self.scanPage)
|
|
|
|
self.lastGainVal = 0
|
|
self.lastSquelchSlide = 0
|
|
self.gainTimer = QTimer()
|
|
self.gainTimer.setInterval(100)
|
|
self.gainTimer.setSingleShot(True)
|
|
self.gainTimer.timeout.connect(self.setGain)
|
|
|
|
#def setMode(self, mode):
|
|
# self.contextStack.setCurrentIndex(mode.value)
|
|
|
|
def updateSignalIndicator(self, level):
|
|
self.sigStrengthBar.setValue(level)
|
|
|
|
def updateScanContext(self, context):
|
|
if context.state == context_pb2.ScannerContext.State.Value('SCAN'):
|
|
#self.setMode(common.ScannerMode.SCANNING)
|
|
self.contextStack.setCurrentWidget(self.scanPage)
|
|
self.sigStrengthBar.setValue(0)
|
|
common.getApp().setWindowTitleInfo('Scanning')
|
|
else:
|
|
try:
|
|
entry = context.entryData
|
|
self.entryNumLabel.setText(entry.entryIndex)
|
|
self.systemTagLabel.setText(entry.systemTag)
|
|
self.entryTagLabel.setText(entry.entryTag)
|
|
freq_formatted = str(float(entry.freq) / 1000000)
|
|
self.frequencyLabel.setText((freq_formatted + " MHz"))
|
|
self.modulationLabel.setText(entry.modulation)
|
|
|
|
common.getApp().setWindowTitleInfo(entry.entryIndex + ': ' + entry.entryTag)
|
|
except:
|
|
print('problem setting values')
|
|
|
|
|
|
if context.state == context_pb2.ScannerContext.State.Value('HOLD'):
|
|
self.sigStrengthBar.setValue(0)
|
|
#self.setMode(common.ScannerMode.HOLD)
|
|
self.contextStack.setCurrentWidget(self.holdPage)
|
|
elif context.state == context_pb2.ScannerContext.State.Value('RECEIVE'):
|
|
#self.setMode(common.ScannerMode.RECEIVE)
|
|
self.contextStack.setCurrentWidget(self.holdPage)
|
|
|
|
def updateDemodContext(self, context):
|
|
squelchFromContext = True
|
|
gainFromContext = True
|
|
#SquelchScale.configure(value=context.squelch)
|
|
self.squelchSlider.setValue(context.squelch)
|
|
self.squelchLabel.setText(str(context.squelch))
|
|
#GainScale.configure(value=context.gain)
|
|
self.gainSlider.setValue(context.gain)
|
|
#self.gainLabel.setText(context.gain)
|
|
|
|
if context.gain < 0:
|
|
#GainLabel.configure(text='Auto')
|
|
self.gainLabel.setText('Auto')
|
|
else:
|
|
#GainLabel.configure(text=context.gain)
|
|
self.gainLabel.setText(str(int(context.gain)))
|
|
|
|
def onFnButton1(self):
|
|
common.getApp().scan()
|
|
|
|
def onFnButton2(self):
|
|
common.getApp().hold()
|
|
|
|
def onFnButton3(self):
|
|
common.getApp().showManualEntryDialog()
|
|
|
|
def onFnButton4(self):
|
|
common.getApp().showSettingsDialog()
|
|
|
|
def ongainSlider(self):
|
|
if self.gainFromContext:
|
|
self.gainFromContext = False
|
|
else:
|
|
self.lastGainVal = self.gainSlider.value()
|
|
self.gainTimer.start()
|
|
|
|
def setGain(self):
|
|
self._job = None
|
|
val = float(self.lastGainVal)
|
|
common.getApp().setGain(val)
|
|
|
|
def onsquelchSlider(self):
|
|
if self.squelchFromContext:
|
|
self.squelchFromContext = False
|
|
else:
|
|
val = float(self.squelchSlider.value())
|
|
#if abs(val - self.lastSquelchSlide) < 0.5:
|
|
common.getApp().setSquelch(val)
|
|
self.lastSquelchSlide = val
|
|
|
|
def onSidebarToggle(self):
|
|
if self.sidebarOpen:
|
|
self.sidebarPanel.setVisible(False)
|
|
self.sidebarOpen = False
|
|
else:
|
|
self.sidebarPanel.setVisible(True)
|
|
self.sidebarOpen = True
|
|
|
|
def setSquelchRange(self, minimum, maximum):
|
|
self.squelchSlider.setMinimum(minimum)
|
|
self.squelchSlider.setMaximum(maximum)
|
|
|
|
def setGainRange(self, minimum, maximum):
|
|
self.gainSlider.setMinimum(minimum)
|
|
self.gainSlider.setMaximum(maximum) |