PiScan/client/py/scanner.py

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)