Refacto en sous fichiers pour la maintenabilité

This commit is contained in:
2026-03-13 13:55:45 +01:00
parent e1b32688b4
commit d0ede2acd5
7 changed files with 313 additions and 321 deletions

101
src/ui/main_window.py Normal file
View File

@@ -0,0 +1,101 @@
import webbrowser
from PySide6 import QtGui
from PySide6.QtCore import Qt
from PySide6.QtUiTools import QUiLoader
from PySide6.QtWidgets import QMainWindow
from config.config_manager import ConfigManager
from src.constants import URLS, NO_STAFF
from controllers.audio_controller import AudioController
from controllers.glow_animator import GlowAnimator
from controllers.window_dragger import WindowDragger
from fake_patch_notes import patch_note
class MainWindow(QMainWindow):
def __init__(self, bundle_dir):
super().__init__()
self.config = ConfigManager()
# UI
self.ui = QUiLoader().load(f"{bundle_dir}/ui/mainwindow.ui", self)
self.setCentralWidget(self.ui.centralWidget())
self.setWindowFlags(Qt.WindowType.FramelessWindowHint | Qt.WindowType.Window)
self.setAttribute(Qt.WidgetAttribute.WA_TranslucentBackground)
if NO_STAFF:
self.ui.staff_btn.hide()
self.ui.spacer_substitution.hide()
self.ui.info_text.setMarkdown(patch_note)
# Sous-systèmes
self._audio = AudioController(self.config, self.ui.audio_volume_adjust, self.ui.mute_btn)
self._glow = GlowAnimator(self.ui.connexion_btn)
self._dragger = WindowDragger(self)
self._connect_signals()
self._center_window()
self.show()
# ------------------------------------------------------------------
# Setup
# ------------------------------------------------------------------
def _connect_signals(self) -> None:
self.ui.close_btn.clicked.connect(self.close)
self.ui.minimize_btn.clicked.connect(self.showMinimized)
self.ui.connexion_btn.clicked.connect(self._on_connexion)
self.ui.discord_btn.clicked.connect(self._on_discord)
self.ui.intranet_btn.clicked.connect(self._on_intranet)
def _center_window(self) -> None:
self.adjustSize()
screen = (
QtGui.QGuiApplication.screenAt(QtGui.QCursor.pos())
or QtGui.QGuiApplication.primaryScreen()
)
rect = self.frameGeometry()
rect.moveCenter(screen.availableGeometry().center())
self.move(rect.topLeft())
# ------------------------------------------------------------------
# Button handlers
# ------------------------------------------------------------------
def _on_connexion(self) -> None:
pass # à implémenter
@staticmethod
def _on_discord() -> None:
webbrowser.open(URLS["discord"])
def _on_intranet(self) -> None:
webbrowser.open(URLS["intranet"])
self._glow.start()
# ------------------------------------------------------------------
# Mouse events → délégués au WindowDragger
# ------------------------------------------------------------------
def mousePressEvent(self, event: QtGui.QMouseEvent) -> None:
self._dragger.mouse_press(event)
super().mousePressEvent(event)
def mouseMoveEvent(self, event: QtGui.QMouseEvent) -> None:
self._dragger.mouse_move(event)
super().mouseMoveEvent(event)
def mouseReleaseEvent(self, event: QtGui.QMouseEvent) -> None:
self._dragger.mouse_release(event)
super().mouseReleaseEvent(event)
# ------------------------------------------------------------------
# Close
# ------------------------------------------------------------------
def closeEvent(self, event) -> None:
self.config.save()
super().closeEvent(event)