class SuggestRow(QPushButton): def __init__(self, parent, suggestion: Suggestion): QWidget.__init__(self, parent) # defines whether the command has associated options self.has_options = True if hasattr(suggestion, "option_suggestions") else False # gets the current theme self.active_theme = parent.active_theme # gets the font self.custom_font = parent.custom_font # setting height the row width, height = [parent.width(), 57] self.resize(width, height) # makes command dictionary a class variable self.suggestion = suggestion # Stores information about the command the row will hold # widget creation self.icon = None # This can either be an svg or jpg file icon_path = self.suggestion.icon_name # gets the icon path if "svg" in icon_path: self.icon = QSvgWidget(self) self.icon.load(icon_path) else: pixmap = QPixmap(icon_path) icon = QLabel(self) icon.setPixmap(pixmap) self.icon = icon self.title_lbl = QLabel(self.suggestion.title, self) self.description_lbl = QLabel(self.suggestion.description, self) self.option_icon = QSvgWidget(self) self.option_icon.load(f"{ASSETS_DIR}svg{sep}ellipsis.svg") self.set_style() def set_style(self): # TODO: Add support for theming for icon and layout scalability components # set style and location of icon if "svg" in self.suggestion.icon_name: # different location and sizes depending on icon type self.icon.move(18, 18) self.icon.resize(20, 20) self.icon.setStyleSheet("background-color: rgba(0,0,0,0%);") else: self.icon.move(8, 8) self.icon.resize(40, 40) self.icon.setAlignment(Qt.AlignCenter) self.icon.setScaledContents(True) # set style for options icon self.option_icon.move(490, 16) self.option_icon.resize(25, 25) self.option_icon.setStyleSheet("background-color: rgba(0,0,0,0%);") self.option_icon.hide() # set style and location of title self.title_lbl.move(56, 9) self.title_lbl.setStyleSheet( f"font-size: 20px; color: {self.active_theme.foreground}; background-color: rgba(0,0,0,0%);" ) self.title_lbl.setFont(self.custom_font) # set style and location of description self.description_lbl.resize(479, 15) self.description_lbl.move(56, 33) self.description_lbl.setStyleSheet( f"font-size: 13px; color: {self.active_theme.foreground}; background-color: rgba(0,0,0,0%);" ) self.description_lbl.setFont(self.custom_font) # style for widget self.setStyleSheet(''' QPushButton { border: none; } QPushButton:hover { background-color: #251e1e; } QPushButton:hover:focus { background-color: #322828; } QPushButton:focus { background-color: #3f3232; outline: 0px } ''') def show_option_icon(self): if self.has_options: self.option_icon.show() def hide_option_icon(self): if self.has_options: self.option_icon.hide()
class Notification(object): def __init__(self, window, styleFunction, stylesheet=["", "", ""], img_margin=5, top_margin=5, pos=[0, 0], size=[100, 20]): self._styleFunction = styleFunction self._currApp = '' self._pos = pos # Create components ### Notification Background self._background_main_stylesheet = stylesheet[0] self._background = QLabel(window) self._background.setGeometry(pos[0], pos[1], size[0], size[1]) self._background.hide() ### Notification Logo self._logo = None self._logo_geometry = [ img_margin, img_margin, size[1] - img_margin * 2, size[1] - img_margin * 2 ] ### Notification Title self._title = QLabel(self._background) self._title.setAttribute(Qt.WA_TranslucentBackground) self._title.setAlignment(Qt.AlignTop | Qt.AlignLeft) self._title.setStyleSheet('QLabel{' + stylesheet[1] + '}') self._title.setText('Title') self._title.adjustSize() self._title.setGeometry( img_margin + self._logo_geometry[2] + 4, top_margin, size[0] - img_margin - self._logo_geometry[2] - 4, self._title.height()) self._title.show() ### Notification Message self._message = QLabel(self._background) self._message.setAttribute(Qt.WA_TranslucentBackground) self._message.setAlignment(Qt.AlignTop | Qt.AlignLeft) self._message.setStyleSheet('QLabel{' + stylesheet[2] + '}') self._message.setText('Message') self._message.adjustSize() self._message.setGeometry( img_margin + self._logo_geometry[2] + 8, top_margin + self._title.height() + 2, size[0] - img_margin - self._logo_geometry[2] - 8, self._message.height() * 2) self._message.show() def setParent(self, p): self._background.setParent(p) def deleteLater(self): self._background.deleteLater() def setText(self, app, title, message): if self._currApp != app: logoPath, backgroundColor = self._styleFunction(app) if self._logo == None: self._logo = QSvgWidget(logoPath, self._background) self._logo.setGeometry(self._logo_geometry[0], self._logo_geometry[1], self._logo_geometry[2], self._logo_geometry[3]) self._logo.show() else: self._logo.load(logoPath) self._background.setStyleSheet('QLabel {background-color:' + backgroundColor + ';' + self._background_main_stylesheet + '}') self._logo.setStyleSheet('background-color:' + backgroundColor + ';') self._currApp = app # Update Textual Contents self._title.setText(title) self._message.setText(message) self._message.setWordWrap(True) def update(self): self._background.update() self._logo.update() self._title.update() self._message.update() def show(self): self._background.show() def hide(self): self._background.hide() def move(self, x, y): self._pos = [x, y] self._background.move(x, y) def moveX(self, x): self._pos[0] = x self._background.move(x, self._pos[1]) def moveY(self, y): self._pos[1] = y self._background.move(self._pos[0], y) def bringToFront(self): self._background.raise_() def bringToBack(self): self._background.lower()
class SuggestRow(QPushButton): def __init__(self, parent, command_dict): QWidget.__init__(self, parent) # gets the current theme self.active_theme = parent.active_theme # gets the font self.custom_font = parent.custom_font # setting height the row height, width = [parent.width(), 114] self.resize(height, width) # makes command dictionary a class variable self.command_dict = command_dict # Stores information about the command the row will hold # widget creation self.icon = None # This can either be an svg or jpg file icon_path = command_dict["icon"] # gets the icon path if "svg" in icon_path: self.icon = QSvgWidget(self) self.icon.load(icon_path) else: pixmap = QPixmap(icon_path) icon = QLabel(self) icon.setPixmap(pixmap) self.icon = icon self.title_lbl = QLabel(command_dict["title"], self) self.description_lbl = QLabel(command_dict["description"], self) self.set_style() def set_style(self): # TODO: Add support for theming for icon and layout scalability components # set style and location of icon if "svg" in self.command_dict[ "icon"]: # different location and sizes depending on icon type self.icon.move(18, 18) self.icon.resize(20, 20) self.icon.setStyleSheet("background-color: rgba(0,0,0,0%);") else: self.icon.move(8, 8) self.icon.resize(40, 40) self.icon.setAlignment(Qt.AlignCenter) self.icon.setScaledContents(True) # set style and location of title self.title_lbl.move(56, 9) self.title_lbl.setStyleSheet( f"font-size: 20px; color: {self.active_theme['text']}; background-color: rgba(0,0,0,0%);" ) self.title_lbl.setFont(self.custom_font) # set style and location of description self.description_lbl.resize(479, 15) self.description_lbl.move(56, 33) self.description_lbl.setStyleSheet( f"font-size: 13px; color: {self.active_theme['text']}; background-color: rgba(0,0,0,0%);" ) self.description_lbl.setFont(self.custom_font) # style for widget self.setStyleSheet(''' QPushButton { border: none; } QPushButton:hover { background-color: #251e1e; } QPushButton:hover:focus { background-color: #322828; } QPushButton:focus { background-color: #3f3232; outline: 0px } ''')