83 lines
2.7 KiB
Python
83 lines
2.7 KiB
Python
"""
|
||
novelWriter – Custom Widget: Status LED
|
||
=======================================
|
||
|
||
File History:
|
||
Created: 2020-05-17 [0.5.1]
|
||
|
||
This file is a part of novelWriter
|
||
Copyright (C) 2020 Veronica Berglyd Olsen and novelWriter contributors
|
||
|
||
This program is free software: you can redistribute it and/or modify
|
||
it under the terms of the GNU General Public License as published by
|
||
the Free Software Foundation, either version 3 of the License, or
|
||
(at your option) any later version.
|
||
|
||
This program is distributed in the hope that it will be useful, but
|
||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||
General Public License for more details.
|
||
|
||
You should have received a copy of the GNU General Public License
|
||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||
""" # noqa
|
||
from __future__ import annotations
|
||
|
||
import logging
|
||
|
||
from PyQt6.QtGui import QColor, QPainter, QPaintEvent
|
||
from PyQt6.QtWidgets import QAbstractButton, QWidget
|
||
|
||
from novelwriter.types import QtBlack, QtPaintAntiAlias
|
||
|
||
logger = logging.getLogger(__name__)
|
||
|
||
|
||
class StatusLED(QAbstractButton):
|
||
"""Custom: LED Style Indicator."""
|
||
|
||
__slots__ = ("_color", "_negative", "_neutral", "_postitve", "_state")
|
||
|
||
def __init__(self, sW: int, sH: int, parent: QWidget | None = None) -> None:
|
||
super().__init__(parent=parent)
|
||
self._neutral = QtBlack
|
||
self._postitve = QtBlack
|
||
self._negative = QtBlack
|
||
self._color = QtBlack
|
||
self._state = None
|
||
self.setFixedWidth(sW)
|
||
self.setFixedHeight(sH)
|
||
|
||
@property
|
||
def state(self) -> bool | None:
|
||
"""The current state of the LED."""
|
||
return self._state
|
||
|
||
def setColors(self, neutral: QColor, positive: QColor, negative: QColor) -> None:
|
||
"""Set the three colours for the status values."""
|
||
self._neutral = neutral
|
||
self._postitve = positive
|
||
self._negative = negative
|
||
self.setState(self._state)
|
||
|
||
def setState(self, state: bool | None) -> None:
|
||
"""Set the colour state."""
|
||
if state is True:
|
||
self._color = self._postitve
|
||
elif state is False:
|
||
self._color = self._negative
|
||
else:
|
||
self._color = self._neutral
|
||
self._state = state
|
||
self.update()
|
||
|
||
def paintEvent(self, event: QPaintEvent) -> None:
|
||
"""Draw the LED."""
|
||
painter = QPainter(self)
|
||
painter.setRenderHint(QtPaintAntiAlias, True)
|
||
painter.setPen(self.palette().text().color())
|
||
painter.setBrush(self._color)
|
||
painter.setOpacity(1.0)
|
||
painter.drawEllipse(1, 1, self.width() - 2, self.height() - 2)
|
||
painter.end()
|