summaryrefslogtreecommitdiff
path: root/gr-qtgui/python/qtgui/togglebutton.py
diff options
context:
space:
mode:
authorghostop14 <ghostop14@gmail.com>2020-02-02 13:52:39 -0500
committerdevnulling <devnulling@users.noreply.github.com>2020-02-19 15:46:54 -0800
commit5cd7b4cd472e9dca41f19e2cdfed4393374c9fe0 (patch)
treecb6a607483d03510b90d43c5956e88b691744fff /gr-qtgui/python/qtgui/togglebutton.py
parentbebed18070bb3366c53f8d1b775c5ed5959859ea (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.py122
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'])))