diff options
| author | Papoteur <papoteur@mageia.org> | 2025-06-08 09:29:15 +0200 |
|---|---|---|
| committer | Papoteur <papoteur@mageia.org> | 2025-06-08 09:29:15 +0200 |
| commit | fa4f46958ba685f0607f3f7d7809b62e5fdacf61 (patch) | |
| tree | ab1ac3b4273f42ebe58d7df729e985516f38e901 | |
| parent | e50b41401fc940470f5aeaa3ce639a0856294da0 (diff) | |
| download | mageiawelcome-fa4f46958ba685f0607f3f7d7809b62e5fdacf61.tar mageiawelcome-fa4f46958ba685f0607f3f7d7809b62e5fdacf61.tar.gz mageiawelcome-fa4f46958ba685f0607f3f7d7809b62e5fdacf61.tar.bz2 mageiawelcome-fa4f46958ba685f0607f3f7d7809b62e5fdacf61.tar.xz mageiawelcome-fa4f46958ba685f0607f3f7d7809b62e5fdacf61.zip | |
Add management of keys left and right for controlling the slideshow
Fix resizing
| -rw-r--r-- | src/ui.py | 80 | ||||
| -rw-r--r-- | version.py | 2 |
2 files changed, 45 insertions, 37 deletions
@@ -17,6 +17,7 @@ from PyQt6.QtWidgets import ( QMessageBox, QStyledItemDelegate, QListView, + QGraphicsOpacityEffect, ) from PyQt6.QtCore import ( Qt, @@ -34,6 +35,7 @@ from PyQt6.QtGui import ( QPalette, QFont, QPixmap, + QKeyEvent, QImage, QPainter, QLinearGradient, @@ -302,7 +304,7 @@ class Welcome(SlidePage): if user == "live": title = _("Welcome", "Welcome to Mageia") else: - title = _("Welcome", "Welcome to Mageia, {}".format(user)) + title = _("Welcome", "Welcome to Mageia, {}").format(user) title_label = QLabel(title) title_label.setAlignment(Qt.AlignmentFlag.AlignCenter) title_label.setStyleSheet("font-size: 28px; color: white; font-weight: bold;") @@ -926,15 +928,6 @@ class GradientLegend(QWidget): self.setFixedWidth(110) label_widget.setFixedHeight(40) - # def paintEvent(self, event): - # painter = QPainter(self) - # gradient = QLinearGradient(0, 0, 0, 20) - # gradient.setColorAt(0.0, self.top_color) - # gradient.setColorAt(1.0, self.bottom_color) - # painter.setBrush(gradient) - # painter.setPen(Qt.PenStyle.NoPen) - # painter.drawRect(self.rect()) - class ApplistItem(QWidget, Commands): """An element in application list""" @@ -963,6 +956,7 @@ class ApplistItem(QWidget, Commands): } """ ) + self.setMinimumHeight(int(QApplication.font().pointSize() * 5)) desc_layout.addWidget(name_label) layout.addLayout(desc_layout) release, inst_repo = is_installed(name) @@ -1159,7 +1153,7 @@ class Breadcrumb(QWidget): self.layout = ( QVBoxLayout(self.container) if lateral else QHBoxLayout(self.container) ) - self.layout.setSpacing(5) + self.layout.setSpacing(0 if lateral else 5) self.layout.setContentsMargins(5, 0, 5, 0) # List for storing elements @@ -1193,6 +1187,23 @@ class Breadcrumb(QWidget): self.slideshow.goto_slide(index) +class HoverButton(QPushButton): + def __init__(self, label): + super().__init__(label) + self.setAttribute(Qt.WidgetAttribute.WA_Hover, True) + self.effect = QGraphicsOpacityEffect() + self.setGraphicsEffect(self.effect) + + def enterEvent(self, event): + # Disparition progressive + self.effect.setOpacity(50) + super().enterEvent(event) + + def leaveEvent(self, event): + # Réapparition progressive + self.effect.setOpacity(1) + super().leaveEvent(event) + class SlideShowWidget(QStackedWidget): """Widget de diaporama avec animations de transition""" @@ -1210,19 +1221,19 @@ class SlideShowWidget(QStackedWidget): self.breadcrumb = None self.admin_rights = [] self.slides = [] + self.i = 0 def resizeEvent(self, event): """Gère le redimensionnement du widget de slideshow""" - super().resizeEvent(event) # Appeler d'abord la méthode parent - + self.i +=1 for i in range(self.count()): widget = self.widget(i) if widget: widget.setGeometry(0, 0, event.size().width(), event.size().height()) # Déclencher le repaint pour les slides avec gradient if hasattr(widget, 'update'): - widget.update() + widget.update() def set_breadcrumb(self, breadcrumb): """Associe un fil d'Ariane au diaporama""" @@ -1245,7 +1256,7 @@ class SlideShowWidget(QStackedWidget): self.next_index = (self.current_index + 1) % self.count() self._animate_horizontal_transition(True) # True = at right self.admin_widget.show() if self.admin_rights[ - index + self.next_index ] else self.admin_widget.hide() def previous_slide(self): @@ -1256,7 +1267,7 @@ class SlideShowWidget(QStackedWidget): self.next_index = (self.current_index - 1) % self.count() self._animate_horizontal_transition(False) # False = at left self.admin_widget.show() if self.admin_rights[ - index + self.next_index ] else self.admin_widget.hide() def goto_slide(self, index): @@ -1362,15 +1373,8 @@ class Banner(QLabel): new_picture = self.createGradientBanner(size.width() - 4, 120) self.setPixmap(QPixmap.fromImage(new_picture)) self.setAlignment(Qt.AlignmentFlag.AlignCenter) - super().resizeEvent(event) + # super().resizeEvent(event) - def resizeEvent(self, event): - """Redimensionne la bannière en fonction de la taille de la fenêtre""" - size = event.size() - new_picture = self.createGradientBanner(size.width() - 4, 120) - self.setPixmap(QPixmap.fromImage(new_picture)) - self.setAlignment(Qt.AlignmentFlag.AlignCenter) - super().resizeEvent(event) def createGradientBanner(self, width, height): image = QImage(width, height, QImage.Format.Format_ARGB32) @@ -1398,8 +1402,8 @@ class SlideShowApp(QMainWindow): super().__init__() #: the application title self.setWindowTitle( _("Welcome", "Welcome to Mageia")) - self.setMinimumSize(DEFAULT_WIDTH, 600) # Taille minimale - self.setGeometry(100, 100, 100 + DEFAULT_WIDTH, 700) + self.setMinimumSize(DEFAULT_WIDTH, 700) # Taille minimale + self.setGeometry(100, 100, 100 + DEFAULT_WIDTH, 800) # central Widget central_widget = QWidget() @@ -1412,7 +1416,7 @@ class SlideShowApp(QMainWindow): self.breadcrumb = Breadcrumb() main_layout.addWidget(self.breadcrumb, 1, 0) - # Créer le diaporama + # Build diaporama self.slideshow = SlideShowWidget() self.slideshow.set_breadcrumb(self.breadcrumb) @@ -1434,7 +1438,7 @@ class SlideShowApp(QMainWindow): # Install on HD self.slideshow.add_slide(Install()) self.slideshow.add_slide(Links()) - + # Mettre à jour le fil d'Ariane pour la première diapositive self.breadcrumb.set_active_item(0) @@ -1467,6 +1471,8 @@ class SlideShowApp(QMainWindow): self.autostart = Autostart() self.cb_launch.setChecked(self.autostart.isEnabled()) + # for capturing keyPressEvent + self.setFocus() def username(self): user = pwd.getpwuid(os.getuid())[4] # pw_gecos, i e the real name @@ -1480,14 +1486,16 @@ class SlideShowApp(QMainWindow): else: self.autostart.disable() - def resizeEvent(self, event): - """Gère le redimensionnement de la fenêtre principale""" - super().resizeEvent(event) - - # S'assurer que tous les composants sont redimensionnés correctement - if hasattr(self, 'slideshow'): - # Propager l'événement de redimensionnement au slideshow - self.slideshow.resizeEvent(event) + def keyPressEvent(self, event): + if isinstance(event, QKeyEvent): + key = event.key() + if key == Qt.Key.Key_Right: + self.slideshow.next_slide() + elif key == Qt.Key.Key_Left: + self.slideshow.previous_slide() + else: + super().keyPressEvent(event) + if __name__ == "__main__": app = QApplication(sys.argv) @@ -1 +1 @@ -version='3.3' +version='3.5' |
