235 lines
8.9 KiB
Python
235 lines
8.9 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.scannerPage
|
|
self.contextStack = parentWindow.scanContextStack
|
|
self.holdPage = parentWindow.scanner_holdPage
|
|
self.scanPage = parentWindow.scanner_scanPage
|
|
self.entryTagLabel = parentWindow.scanner_entryTagLabel
|
|
self.frequencyLabel = parentWindow.scanner_frequencyLabel
|
|
self.modulationLabel = parentWindow.scanner_modulationLabel
|
|
self.systemTagLabel = parentWindow.scanner_systemTagLabel
|
|
self.entryNumLabel = parentWindow.scanner_entryNumLabel
|
|
self.delayLabel = parentWindow.scanner_delayLabel
|
|
self.lockoutDurationLabel = parentWindow.scanner_lockoutDurationLabel
|
|
self.scanModeLabel = parentWindow.scanner_scanModeLabel
|
|
self.lockoutDurationButton = parentWindow.scanner_lockoutDurationButton
|
|
self.scanIndicator = parentWindow.scanner_scanIndicator
|
|
self.gainSlider = parentWindow.scanner_gainSlider
|
|
self.sigStrengthBar = parentWindow.scanner_sigStrengthBar
|
|
self.squelchSlider = parentWindow.scanner_squelchSlider
|
|
self.fnButtonsWidget = parentWindow.scanner_fnButtonsWidget
|
|
self.fnButton1 = parentWindow.scanner_fnButton1
|
|
self.fnButton2 = parentWindow.scanner_fnButton2
|
|
self.fnButton3 = parentWindow.scanner_fnButton3
|
|
self.fnButton4 = parentWindow.scanner_fnButton4
|
|
|
|
self.sidebarToggleButton = parentWindow.scanner_sidebarToggle
|
|
self.sidebarPanel = parentWindow.scanner_sidebarPanel
|
|
|
|
self.disconnectButton = parentWindow.scanner_disconnectButton
|
|
self.settingsButton = parentWindow.scanner_settingsButton
|
|
self.connectInfoButton = parentWindow.scanner_connectInfoButton
|
|
|
|
self.volumeControlPanel = parentWindow.scanner_volumeControl
|
|
self.volumeSlider = parentWindow.scanner_volumeSlider
|
|
self.muteButton = parentWindow.scanner_volumeMute
|
|
|
|
self.entryEditButton = parentWindow.scanner_entryEditButton
|
|
|
|
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 = False
|
|
self.sidebarPanel.setVisible(False)
|
|
|
|
self.disconnectButton.clicked.connect(self.onDisconnectButton)
|
|
|
|
self.volumeSlider.valueChanged.connect(self.onVolumeSlider)
|
|
self.muteButton.toggled.connect(self.onMuteButton)
|
|
|
|
# TODO TEMPORARY - hiding UI elements for features not added yet
|
|
self.volumeControlPanel.setVisible(False)
|
|
self.lockoutDurationButton.setVisible(False)
|
|
self.lockoutDurationLabel.setVisible(False)
|
|
self.fnButton4.setVisible(False)
|
|
self.settingsButton.setVisible(False)
|
|
self.connectInfoButton.setVisible(False)
|
|
self.entryEditButton.setVisible(False)
|
|
self.delayLabel.setVisible(False)
|
|
self.scanModeLabel.setVisible(False)
|
|
parentWindow.line_4.setVisible(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.sidebarToggleButton.setText('<')
|
|
self.sidebarPanel.setVisible(False)
|
|
self.sidebarOpen = False
|
|
else:
|
|
self.sidebarToggleButton.setText('>')
|
|
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)
|
|
|
|
def onDisconnectButton(self):
|
|
common.getApp().disconnect()
|
|
|
|
def onVolumeSlider(self, value):
|
|
common.getApp().setAudioVolume(value)
|
|
|
|
def onMuteButton(self, value):
|
|
self.volumeSlider.setEnabled(not value)
|
|
common.getApp().setAudioMute(value)
|
|
|
|
def setVolumeVisible(self, visible):
|
|
self.volumeControlPanel.setVisible(visible)
|