Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 48 additions & 0 deletions bpod_gui/ui/console/components/LED.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
from qtpy import QtWidgets, QtGui, QtCore
from qtpy.QtCore import Qt


class LED(QtWidgets.QAbstractButton):
def __init__(self, *args, **kwargs) -> None:
super().__init__(*args, **kwargs)
self.setCheckable(True)

def sizeHint(self) -> QtCore.QSize:
return QtCore.QSize(35, 35)

def paintEvent(self, e) -> None:
# base
size = min(self.size().toTuple())
w_line = round(size / 25) * 2
painter = QtGui.QPainter(self)
painter.setRenderHints(QtGui.QPainter.RenderHint.Antialiasing)
color = QtGui.QColor("red")
painter.setPen(
QtGui.QPen(color.darker(110 if self.isChecked() else 150), w_line)
)
if self.isChecked():
painter.setBrush(QtGui.QBrush(color))
else:
gradient = QtGui.QRadialGradient(size / 2, size / 5 * 4, size * 0.5)
gradient.setColorAt(0, color)
gradient.setColorAt(1, color.darker(150))
painter.setBrush(QtGui.QBrush(gradient))
painter.drawEllipse(w_line / 2, w_line / 2, size - w_line, size - w_line)

# glow
if self.isChecked():
painter.setPen(QtGui.QPen(Qt.PenStyle.NoPen))
gradient = QtGui.QRadialGradient(size / 2, size / 2, size / 2)
gradient.setColorAt(0, QtGui.QColor("white"))
gradient.setColorAt(0.3, QtGui.QColor("yellow"))
gradient.setColorAt(1, QtGui.QColor("transparent"))
painter.setBrush(QtGui.QBrush(gradient))
painter.drawEllipse(0, 0, size, size)

# reflection
painter.setPen(QtGui.QPen(Qt.PenStyle.NoPen))
gradient = QtGui.QLinearGradient(0, 0, 0, size * 0.5)
gradient.setColorAt(0, QtGui.QColor("white"))
gradient.setColorAt(1, QtGui.QColor("transparent"))
painter.setBrush(QtGui.QBrush(gradient))
painter.drawEllipse(size * 0.2, w_line, size * 0.6, size * 0.5)
5 changes: 5 additions & 0 deletions bpod_gui/ui/console/state_machine_widget.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
from PySide6.QtGui import QColor
from qtpy.QtCore import Qt
from qtpy.QtWidgets import QWidget, QSizePolicy, QLabel, QGridLayout

from bpod_gui.ui.console.components.LED import LED


class StateMachineWidget(QWidget):
def __init__(self):
Expand All @@ -21,6 +24,8 @@ def __init__(self):
)
self.behavior_ports_label.setProperty("type", "smw_underlined_header")
self.grid_layout.addWidget(self.behavior_ports_label, 0, 0, 1, 2)
self.example_led = LED()
self.grid_layout.addWidget(self.example_led, 1, 0, 1, 2)

self.bnc_in_label = QLabel()
self.bnc_in_label.setText("BNC In")
Expand Down