diff options
author | ghostop14 <ghostop14@gmail.com> | 2020-02-02 13:52:39 -0500 |
---|---|---|
committer | devnulling <devnulling@users.noreply.github.com> | 2020-02-19 15:46:54 -0800 |
commit | 5cd7b4cd472e9dca41f19e2cdfed4393374c9fe0 (patch) | |
tree | cb6a607483d03510b90d43c5956e88b691744fff /gr-qtgui/python/qtgui/togglebutton.py | |
parent | bebed18070bb3366c53f8d1b775c5ed5959859ea (diff) |
gr-qtgui: Incorporate new GUI controls
These updates expand the user interface capabilities of
GNU Radio. This PR includes all of the controls more fully
documented here: https://github.com/ghostop14/gr-guiextra
Diffstat (limited to 'gr-qtgui/python/qtgui/togglebutton.py')
-rw-r--r-- | gr-qtgui/python/qtgui/togglebutton.py | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/gr-qtgui/python/qtgui/togglebutton.py b/gr-qtgui/python/qtgui/togglebutton.py new file mode 100644 index 0000000000..0c0cf187f6 --- /dev/null +++ b/gr-qtgui/python/qtgui/togglebutton.py @@ -0,0 +1,122 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +# Copyright 2020 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# SPDX-License-Identifier: GPL-3.0-or-later +# +# + + +from PyQt5 import Qt +from gnuradio import gr +import pmt + +class ToggleButton(gr.sync_block, Qt.QPushButton): + """ + This block creates a variable toggle button. Leave the label + blank to use the variable id as the label. A toggle button + selects between two values of similar type, but will stay + depressed until clicked again. The variable will take on one + value or the other depending on whether the button is pressed + or released. This button will also produce a state message + matching the set values. + """ + def __init__(self, callback, lbl, pressedReleasedDict, initPressed, outputmsgname='value'): + gr.sync_block.__init__(self, name="ToggleButton", in_sig=None, out_sig=None) + Qt.QPushButton.__init__(self, lbl) + self.setCheckable(True) + self.lbl = lbl + self.callback = callback + self.pressReleasedDict = pressedReleasedDict + + self.outputmsgname = outputmsgname + self.relBackColor = 'default' + self.relFontColor = 'default' + self.pressBackColor = 'default' + self.pressFontColor = 'default' + + self.message_port_register_out(pmt.intern("state")) + + if initPressed: + self.setChecked(True) + self.state = 1 + else: + self.state = 0 + + self.clicked[bool].connect(self.onToggleClicked) + + def setColors(self, relBackColor, relFontColor, pressBackColor, pressFontColor): + self.relBackColor = relBackColor + self.relFontColor = relFontColor + self.pressBackColor = pressBackColor + self.pressFontColor = pressFontColor + + self.setColor() + + def setColor(self): + if self.state: + styleStr = "" + if self.pressBackColor != 'default': + styleStr = "background-color: " + self.pressBackColor + "; " + + if self.pressFontColor: + styleStr += "color: " + self.pressFontColor + "; " + + self.setStyleSheet(styleStr) + else: + styleStr = "" + if self.relBackColor != 'default': + styleStr = "background-color: " + self.relBackColor + "; " + + if self.relFontColor: + styleStr += "color: " + self.relFontColor + "; " + + self.setStyleSheet(styleStr) + + def onToggleClicked(self, pressed): + if pressed: + self.state = 1 + self.callback(self.pressReleasedDict['Pressed']) + else: + self.state = 0 + self.callback(self.pressReleasedDict['Released']) + + self.setColor() + + if pressed: + if type(self.pressReleasedDict['Pressed']) == bool: + self.message_port_pub(pmt.intern("state"), + pmt.cons(pmt.intern(self.outputmsgname), + pmt.from_bool(self.pressReleasedDict['Pressed']))) + elif type(self.pressReleasedDict['Pressed']) == int: + self.message_port_pub(pmt.intern("state"), + pmt.cons(pmt.intern(self.outputmsgname), + pmt.from_long(self.pressReleasedDict['Pressed']))) + elif type(self.pressReleasedDict['Pressed']) == float: + self.message_port_pub(pmt.intern("state"), + pmt.cons(pmt.intern(self.outputmsgname), + pmt.from_float(self.pressReleasedDict['Pressed']))) + else: + self.message_port_pub(pmt.intern("state"), + pmt.cons(pmt.intern(self.outputmsgname), + pmt.intern(self.pressReleasedDict['Pressed']))) + else: + if type(self.pressReleasedDict['Released']) == bool: + self.message_port_pub(pmt.intern("state"), + pmt.cons(pmt.intern(self.outputmsgname), + pmt.from_bool(self.pressReleasedDict['Released']))) + elif type(self.pressReleasedDict['Released']) == int: + self.message_port_pub(pmt.intern("state"), + pmt.cons(pmt.intern(self.outputmsgname), + pmt.from_long(self.pressReleasedDict['Released']))) + elif type(self.pressReleasedDict['Released']) == float: + self.message_port_pub(pmt.intern("state"), + pmt.cons(pmt.intern(self.outputmsgname), + pmt.from_float(self.pressReleasedDict['Released']))) + else: + self.message_port_pub(pmt.intern("state"), + pmt.cons(pmt.intern(self.outputmsgname), + pmt.intern(self.pressReleasedDict['Released']))) |