client/securedrop_client/gui/auth/sign_in/error_bar.py (34 lines of code) (raw):

""" A widget that displays error messages. Copyright (C) 2021 The Freedom of the Press Foundation. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero 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 Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. """ from PyQt5.QtCore import QSize from PyQt5.QtWidgets import QHBoxLayout, QWidget from securedrop_client.gui.base import SecureQLabel, SvgLabel from securedrop_client.resources import load_relative_css class LoginErrorBar(QWidget): """ A bar widget for displaying messages about login errors to the user. """ def __init__(self) -> None: super().__init__() self.setObjectName("LoginErrorBar") self.setStyleSheet(load_relative_css(__file__, "error_bar.css")) # Set layout layout = QHBoxLayout(self) self.setLayout(layout) # Remove margins and spacing layout.setContentsMargins(0, 0, 0, 0) layout.setSpacing(0) # Set size policy retain_space = self.sizePolicy() retain_space.setRetainSizeWhenHidden(True) self.setSizePolicy(retain_space) # Error icon self.error_icon = SvgLabel("error_icon_white.svg", svg_size=QSize(18, 18)) self.error_icon.setObjectName("LoginErrorBar_icon") self.error_icon.setFixedWidth(42) # Error status bar self.error_status_bar = SecureQLabel(wordwrap=False) self.error_status_bar.setObjectName("LoginErrorBar_status_bar") self.setFixedHeight(42) # Create space ths size of the error icon to keep the error message centered spacer1 = QWidget() spacer2 = QWidget() # Add widgets to layout layout.addWidget(spacer1) layout.addWidget(self.error_icon) layout.addWidget(self.error_status_bar) layout.addWidget(spacer2) def set_message(self, message: str) -> None: self.show() self.error_status_bar.setText(message) def clear_message(self) -> None: self.error_status_bar.setText("") self.hide()