Audio plugin host https://kx.studio/carla
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

121 lines
3.7KB

  1. #!/usr/bin/env python3
  2. # SPDX-FileCopyrightText: 2011-2024 Filipe Coelho <falktx@falktx.com>
  3. # SPDX-License-Identifier: GPL-2.0-or-later
  4. # ---------------------------------------------------------------------------------------------------------------------
  5. # Imports (Global)
  6. from qt_compat import qt_config
  7. if qt_config == 5:
  8. from PyQt5.QtCore import QRectF
  9. from PyQt5.QtGui import QPainter, QPixmap
  10. from PyQt5.QtSvg import QSvgWidget
  11. from PyQt5.QtWidgets import QPushButton
  12. elif qt_config == 6:
  13. from PyQt6.QtCore import QRectF
  14. from PyQt6.QtGui import QPainter, QPixmap
  15. from PyQt6.QtSvgWidgets import QSvgWidget
  16. from PyQt6.QtWidgets import QPushButton
  17. # ---------------------------------------------------------------------------------------------------------------------
  18. # Widget Class
  19. class LEDButton(QPushButton):
  20. # unset
  21. UNSET = -1
  22. # normal
  23. OFF = 0
  24. BLUE = 1
  25. GREEN = 2
  26. RED = 3
  27. YELLOW = 4
  28. # extra
  29. CALF = 5
  30. def __init__(self, parent):
  31. QPushButton.__init__(self, parent)
  32. self.fLastColor = self.UNSET
  33. self.fColor = self.UNSET
  34. self.fImage = QSvgWidget()
  35. self.fImage.load(":/scalable/led_off.svg")
  36. self.fRect = QRectF(self.fImage.rect())
  37. self.setCheckable(True)
  38. self.setText("")
  39. self.setColor(self.BLUE)
  40. def setColor(self, color):
  41. self.fColor = color
  42. if color == self.CALF:
  43. self.fLastColor = self.UNSET
  44. if self._loadImageNowIfNeeded():
  45. #if isinstance(self.fImage, QPixmap):
  46. #size = self.fImage.width()
  47. #else:
  48. #size = self.fImage.sizeHint().width()
  49. self.fRect = QRectF(self.fImage.rect())
  50. self.setFixedSize(self.fImage.size())
  51. def paintEvent(self, event):
  52. painter = QPainter(self)
  53. event.accept()
  54. self._loadImageNowIfNeeded()
  55. if isinstance(self.fImage, QPixmap):
  56. size = self.fImage.width()
  57. rect = QRectF(0, 0, size, size)
  58. painter.drawPixmap(rect, self.fImage, rect)
  59. else:
  60. size = self.fImage.sizeHint().width()
  61. rect = QRectF(0, 0, size, size)
  62. self.fImage.renderer().render(painter, rect)
  63. def _loadImageNowIfNeeded(self):
  64. if self.isChecked():
  65. if self.fLastColor == self.fColor:
  66. return False
  67. if self.fColor == self.OFF:
  68. img = ":/scalable/led_off.svg"
  69. elif self.fColor == self.BLUE:
  70. img = ":/scalable/led_blue.svg"
  71. elif self.fColor == self.GREEN:
  72. img = ":/scalable/led_green.svg"
  73. elif self.fColor == self.RED:
  74. img = ":/scalable/led_red.svg"
  75. elif self.fColor == self.YELLOW:
  76. img = ":/scalable/led_yellow.svg"
  77. elif self.fColor == self.CALF:
  78. img = ":/bitmaps/led_calf_on.png"
  79. else:
  80. return False
  81. self.fLastColor = self.fColor
  82. elif self.fLastColor != self.OFF:
  83. img = ":/bitmaps/led_calf_off.png" if self.fColor == self.CALF else ":/scalable/led_off.svg"
  84. self.fLastColor = self.OFF
  85. else:
  86. return False
  87. if img.endswith(".png"):
  88. if not isinstance(self.fImage, QPixmap):
  89. self.fImage = QPixmap()
  90. else:
  91. if not isinstance(self.fImage, QSvgWidget):
  92. self.fImage = QSvgWidget()
  93. self.fImage.load(img)
  94. self.update()
  95. return True
  96. # ---------------------------------------------------------------------------------------------------------------------