forked from gnuradio/gnuradio
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmsgcheckbox.py
123 lines (100 loc) · 4.68 KB
/
msgcheckbox.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#!/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 PyQt5.QtWidgets import QFrame, QVBoxLayout
from PyQt5.QtCore import Qt as Qtc
from gnuradio import gr
import pmt
class CheckBoxEx(Qt.QCheckBox):
def __init__(self, lbl, callback=None):
Qt.QCheckBox.__init__(self)
self.setText(lbl)
self.callback = callback
self.stateChanged.connect(self.onToggleClicked)
def onToggleClicked(self):
if self.callback is not None:
self.callback(super().isChecked())
class MsgCheckBox(gr.sync_block, QFrame):
"""
This block creates a variable checkbox. Leave the label blank to
use the variable id as the label. A checkbox 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 control will also produce a state message matching the
set values.
"""
def __init__(self, callback, lbl, pressedReleasedDict, initPressed, alignment,
valignment, outputmsgname='value'):
gr.sync_block.__init__(self, name="MsgCheckBox",
in_sig=None, out_sig=None)
QFrame.__init__(self)
self.outputmsgname = outputmsgname
self.chkBox = CheckBoxEx(lbl, self.onToggleClicked)
layout = QVBoxLayout()
layout.addWidget(self.chkBox)
if alignment == 1:
halign = Qtc.AlignCenter
elif alignment == 2:
halign = Qtc.AlignLeft
else:
halign = Qtc.AlignRight
if valignment == 1:
valign = Qtc.AlignVCenter
elif valignment == 2:
valign = Qtc.AlignTop
else:
valign = Qtc.AlignBottom
layout.setAlignment(halign | valign)
self.setLayout(layout)
self.callback = callback
self.pressReleasedDict = pressedReleasedDict
self.message_port_register_out(pmt.intern("state"))
if initPressed:
self.chkBox.setChecked(True)
self.show()
def onToggleClicked(self, checked):
if self.chkBox.isChecked():
self.callback(self.pressReleasedDict['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_double(self.pressReleasedDict['Pressed'])))
else:
self.message_port_pub(pmt.intern("state"),
pmt.cons(pmt.intern(self.outputmsgname),
pmt.intern(self.pressReleasedDict['Pressed'])))
else:
self.callback(self.pressReleasedDict['Released'])
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_double(self.pressReleasedDict['Released'])))
else:
self.message_port_pub(pmt.intern("state"),
pmt.cons(pmt.intern(self.outputmsgname),
pmt.intern(self.pressReleasedDict['Released'])))