summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPapoteur <papoteur@mageia.org>2025-06-08 09:29:15 +0200
committerPapoteur <papoteur@mageia.org>2025-06-08 09:29:15 +0200
commitfa4f46958ba685f0607f3f7d7809b62e5fdacf61 (patch)
treeab1ac3b4273f42ebe58d7df729e985516f38e901
parente50b41401fc940470f5aeaa3ce639a0856294da0 (diff)
downloadmageiawelcome-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.py80
-rw-r--r--version.py2
2 files changed, 45 insertions, 37 deletions
diff --git a/src/ui.py b/src/ui.py
index 0a974df..7e9d3bf 100644
--- a/src/ui.py
+++ b/src/ui.py
@@ -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)
diff --git a/version.py b/version.py
index f52f2ba..c022899 100644
--- a/version.py
+++ b/version.py
@@ -1 +1 @@
-version='3.3'
+version='3.5'