Source code for _clockalarm.UI.NotificationWidget
# ClockAlarm is a cross-platform alarm manager
# Copyright (C) 2017 Loïc Charrière, Samuel Gauthier
#
# 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 <http://www.gnu.org/licenses/>.
from os.path import join, abspath, dirname
from PyQt5.QtCore import Qt, pyqtSignal, QRect
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QWidget, QLabel
from _clockalarm.utils.importExportUtils import get_default_config
[docs]class NotificationWidget(QWidget):
"""Notification widget
Attributes:
geometry: The position and size of the widget on the screen
notification: The notification
"""
popup_close = pyqtSignal('PyQt_PyObject')
def __init__(self, geometry, notification, parent=None):
"""Inits the NotificationWidget with a position and a notification.
Note:
By default, the NotificationWidget has no parent
"""
super(NotificationWidget, self).__init__(parent=parent,
flags=Qt.Tool | Qt.WindowStaysOnTopHint | Qt.FramelessWindowHint)
self.parent = parent
self.notification = notification
self.init_ui(geometry)
[docs] def init_ui(self, geom):
"""Helper method that sets the style of the NotificationWidget.
Attributes:
geom: The position and size of the widget on the screen
"""
self.setGeometry(geom)
self.setAttribute(Qt.WA_TranslucentBackground)
self.setAttribute(Qt.WA_ShowWithoutActivating)
"""Background Image"""
im_name = get_default_config("WIDGET_FILE_NAME")
im_path = join(dirname(dirname(abspath(__file__))), 'resources', 'images',
im_name)
lbl_im = QLabel(self)
lbl_im.setPixmap(QPixmap(im_path))
"""Notification message"""
color = self.notification.get_color()
alpha = get_default_config("WIDGET_TRANSPARENCY", "int")
rgba = "{r}, {g}, {b}, {a}".format(r=color.red(), g=color.green(), b=color.blue(), a=alpha)
lbl = QLabel(self.notification.message, self)
lbl.setAlignment(Qt.AlignVCenter)
lbl.setWordWrap(True)
padding_top = get_default_config("WIDGET_TEXT_PADDING_TOP", "int")
padding_left = get_default_config("WIDGET_TEXT_PADDING_LEFT", "int")
text_width = get_default_config("WIDGET_TEXT_WIDTH", "int")
text_height = get_default_config("WIDGET_TEXT_HEIGHT", "int")
lbl.setGeometry(QRect(padding_left, padding_top, text_width, text_height))
lbl.setFont(self.notification.get_font())
lbl.setStyleSheet(
"QLabel { color : rgba(" + rgba + ")}")
[docs] def mousePressEvent(self, event):
"""Override of :class:~PyQt5.QtWidgets.QWidget.mousePressEvent method"""
if self.underMouse():
self.close()
self.popup_close.emit(self)