update and tabs bar adjustments

This commit is contained in:
Louis Mazin 2025-09-09 15:58:47 +02:00
parent 278f2353fe
commit 1639c71b56
6 changed files with 92 additions and 36 deletions

View File

@ -56,8 +56,20 @@ class AlertManager:
def on_button_clicked(button): def on_button_clicked(button):
if button == details and details_callback: if button == details and details_callback:
box.setResult(QMessageBox.StandardButton.NoButton)
details_callback() details_callback()
if not box.isVisible():
box.show()
box.buttonClicked.connect(on_button_clicked) box.buttonClicked.connect(on_button_clicked)
box.exec()
return box.clickedButton() == yes while True:
result = box.exec()
clicked_button = box.clickedButton()
# Si c'est le bouton détails, on continue la boucle sans fermer
if clicked_button == details:
continue
# Sinon, on sort de la boucle et retourne le résultat
else:
return clicked_button == yes

View File

@ -51,6 +51,7 @@ class ThemeManager:
}} }}
QLabel {{ QLabel {{
color: {self.current_theme.get_color("font_color")}; color: {self.current_theme.get_color("font_color")};
font-size: 20px;
}} }}
QProgressBar {{ QProgressBar {{
border: 1px solid #3C3C3E; border: 1px solid #3C3C3E;
@ -149,4 +150,27 @@ class ThemeManager:
background-color: {self.current_theme.get_color("background2")}; background-color: {self.current_theme.get_color("background2")};
color: {self.current_theme.get_color("font_color")}; color: {self.current_theme.get_color("font_color")};
}} }}
QComboBox {{
padding: 5px;
border-radius: 8px;
font-size: 14px;
min-height: 30px;
}}
QComboBox {{
border: 2px solid {self.current_theme.get_color("border")};
}}
QComboBox::drop-down {{
border: none;
background: transparent;
}}
QComboBox::down-arrow {{
image: none;
}}
/* Optionnel: indicateur visuel au hover */
QComboBox:hover {{
border-color: #0078d4;
}}
""" """

View File

@ -125,7 +125,7 @@ class UpdateManager:
parent=parent, parent=parent,
details_callback=lambda: self.show_details_dialog(releases, current_version, parent) details_callback=lambda: self.show_details_dialog(releases, current_version, parent)
) )
print(choice)
return choice return choice
def show_details_dialog(self, releases: List[Dict], current_version: str, parent=None) -> None: def show_details_dialog(self, releases: List[Dict], current_version: str, parent=None) -> None:
@ -161,7 +161,7 @@ class UpdateManager:
changelog_text += "\n\n" changelog_text += "\n\n"
if release != newer_releases[-1]: if release != newer_releases[-1]:
changelog_text += "---\n\n" changelog_text += "---\n\n"
print(changelog_text)
text_edit.setAcceptRichText(True) text_edit.setAcceptRichText(True)
text_edit.setMarkdown(changelog_text) text_edit.setMarkdown(changelog_text)
layout.addWidget(text_edit) layout.addWidget(text_edit)

View File

@ -2,7 +2,7 @@ from PyQt6.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QLabel, QFra
from PyQt6.QtGui import QResizeEvent, QCloseEvent from PyQt6.QtGui import QResizeEvent, QCloseEvent
from PyQt6.QtCore import QSize, QEvent, Qt from PyQt6.QtCore import QSize, QEvent, Qt
from app.core.main_manager import MainManager, NotificationType from app.core.main_manager import MainManager, NotificationType
from app.ui.widgets.tabs_widget import TabsWidget, MenuDirection, ButtonPosition, BorderSide from app.ui.widgets.tabs_widget import TabsWidget, MenuDirection, ButtonPosition, BorderSide, TabSide
from app.ui.windows.settings_window import SettingsWindow from app.ui.windows.settings_window import SettingsWindow
from app.ui.windows.suggestion_window import SuggestionWindow from app.ui.windows.suggestion_window import SuggestionWindow
import app.utils.paths as paths, shutil import app.utils.paths as paths, shutil
@ -85,29 +85,16 @@ class MainWindow(QMainWindow):
pass pass
def setup_ui(self) -> None: def setup_ui(self) -> None:
central_widget = QFrame(self)
layout = QVBoxLayout(central_widget) self.side_menu = TabsWidget(self, MenuDirection.HORIZONTAL, 70, None, 10, 1, BorderSide.BOTTOM, TabSide.TOP)
layout.setContentsMargins(0, 0, 0, 0)
self.side_menu = TabsWidget(self, MenuDirection.HORIZONTAL, 70, None, 10, 1, BorderSide.TOP)
self.suggestion_window = SuggestionWindow(self) self.suggestion_window = SuggestionWindow(self)
self.side_menu.add_widget(self.suggestion_window, "", paths.get_asset_svg_path("suggestion"), position=ButtonPosition.CENTER) self.side_menu.add_widget(self.suggestion_window, "", paths.get_asset_svg_path("suggestion"), position=ButtonPosition.CENTER)
self.settings_window = SettingsWindow(self) self.settings_window = SettingsWindow(self)
self.side_menu.add_widget(self.settings_window, "", paths.get_asset_svg_path("settings"), position=ButtonPosition.CENTER) self.side_menu.add_widget(self.settings_window, "", paths.get_asset_svg_path("settings"), position=ButtonPosition.CENTER)
layout.addWidget(self.side_menu) self.setCentralWidget(self.side_menu)
self.footer_label = QLabel(self.language_manager.get_text("footer_text"), self)
self.footer_label.setAlignment(Qt.AlignmentFlag.AlignRight)
self.footer_label.setStyleSheet("padding: 5px; font-size: 12px; color: gray;")
layout.addWidget(self.footer_label)
self.setCentralWidget(central_widget)
def update_theme(self) -> None: def update_theme(self) -> None:
self.setStyleSheet(self.theme_manager.get_sheet()) self.setStyleSheet(self.theme_manager.get_sheet())

View File

@ -25,8 +25,14 @@ class BorderSide(Enum):
BOTTOM = "bottom" BOTTOM = "bottom"
NONE = None NONE = None
class TabSide(Enum):
LEFT = 0 # Barre à gauche (pour VERTICAL)
RIGHT = 1 # Barre à droite (pour VERTICAL)
TOP = 0 # Barre en haut (pour HORIZONTAL)
BOTTOM = 1 # Barre en bas (pour HORIZONTAL)
class TabsWidget(QWidget): class TabsWidget(QWidget):
def __init__(self, parent=None, direction=MenuDirection.VERTICAL, menu_width=80, onTabChange=None, spacing=10, button_size_ratio=0.8, border_side=BorderSide.LEFT): def __init__(self, parent=None, direction=MenuDirection.VERTICAL, menu_width=80, onTabChange=None, spacing=10, button_size_ratio=0.8, border_side=BorderSide.LEFT, tab_side=None):
super().__init__(parent) super().__init__(parent)
self.main_manager = MainManager.get_instance() self.main_manager = MainManager.get_instance()
self.theme_manager = self.main_manager.get_theme_manager() self.theme_manager = self.main_manager.get_theme_manager()
@ -36,7 +42,22 @@ class TabsWidget(QWidget):
self.menu_width = menu_width self.menu_width = menu_width
self.button_size_ratio = button_size_ratio # Default ratio for button size relative to menu width self.button_size_ratio = button_size_ratio # Default ratio for button size relative to menu width
self.onTabChange = onTabChange self.onTabChange = onTabChange
self.border_side = border_side # Store border side preference
# Gérer border_side comme une liste ou un seul élément
if isinstance(border_side, list):
self.border_sides = border_side
elif border_side is not None:
self.border_sides = [border_side]
else:
self.border_sides = []
# Déterminer le côté de la barre d'onglets
if tab_side is None:
# Valeurs par défaut basées sur la direction
self.tab_side = TabSide.LEFT if direction == MenuDirection.VERTICAL else TabSide.TOP
else:
self.tab_side = tab_side
self.buttons = [] self.buttons = []
self.widgets = [] self.widgets = []
self.button_positions = [] self.button_positions = []
@ -61,7 +82,7 @@ class TabsWidget(QWidget):
self._setup_ui() self._setup_ui()
def _setup_ui(self): def _setup_ui(self):
"""Setup the main layout based on direction""" """Setup the main layout based on direction and tab_side"""
if self.direction == MenuDirection.HORIZONTAL: if self.direction == MenuDirection.HORIZONTAL:
self.main_layout = QVBoxLayout(self) self.main_layout = QVBoxLayout(self)
self.button_layout = QHBoxLayout() self.button_layout = QHBoxLayout()
@ -96,13 +117,13 @@ class TabsWidget(QWidget):
# Initialize spacers for alignment zones # Initialize spacers for alignment zones
self._setup_alignment_zones() self._setup_alignment_zones()
# Add widgets to main layout based on direction # Add widgets to main layout based on direction and tab_side
if self.direction == MenuDirection.HORIZONTAL: if self.tab_side == TabSide.LEFT:
self.main_layout.addWidget(self.button_container) self.main_layout.addWidget(self.button_container)
self.main_layout.addWidget(self.stacked_widget) self.main_layout.addWidget(self.stacked_widget)
else: # VERTICAL else: # TabSide.RIGHT
self.main_layout.addWidget(self.button_container)
self.main_layout.addWidget(self.stacked_widget) self.main_layout.addWidget(self.stacked_widget)
self.main_layout.addWidget(self.button_container)
self.setLayout(self.main_layout) self.setLayout(self.main_layout)
@ -215,7 +236,7 @@ class TabsWidget(QWidget):
# Set size policy # Set size policy
button.setSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Fixed) button.setSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Fixed)
# Create border style based on border_side setting # Create border style based on border_sides setting
border_style = self._get_border_style() border_style = self._get_border_style()
button.setStyleSheet(border_style) button.setStyleSheet(border_style)
@ -243,8 +264,8 @@ class TabsWidget(QWidget):
return super().eventFilter(obj, event) return super().eventFilter(obj, event)
def _get_border_style(self): def _get_border_style(self):
"""Generate CSS border style based on border_side setting""" """Generate CSS border style based on border_sides setting"""
if self.border_side == BorderSide.NONE or self.border_side is None: if not self.border_sides or BorderSide.NONE in self.border_sides:
return f""" return f"""
QPushButton {{ QPushButton {{
border-radius: 0px; border-radius: 0px;
@ -258,16 +279,28 @@ class TabsWidget(QWidget):
}} }}
""" """
# Construire le style CSS pour chaque côté de bordure
border_declarations = []
selected_border_declarations = []
for border_side in self.border_sides:
if border_side != BorderSide.NONE and border_side is not None:
border_declarations.append(f"border-{border_side.value}: 3px solid transparent")
selected_border_declarations.append(f"border-{border_side.value}: 3px solid {self.selected_border_icon_color}")
border_style = "; ".join(border_declarations)
selected_border_style = "; ".join(selected_border_declarations)
return f""" return f"""
QPushButton {{ QPushButton {{
border-radius: 0px; border-radius: 0px;
background-color: transparent; background-color: transparent;
border-{self.border_side.value}: 3px solid transparent; {border_style};
}} }}
QPushButton[selected="true"] {{ QPushButton[selected="true"] {{
border-radius: 0px; border-radius: 0px;
background-color: transparent; background-color: transparent;
border-{self.border_side.value}: 3px solid {self.selected_border_icon_color}; {selected_border_style};
}} }}
""" """

View File

@ -1,9 +1,9 @@
{ {
"app_name": "HoDA", "app_name": "Application",
"app_os": "Windows", "app_os": "Windows",
"app_version": "1.0.0", "app_version": "1.0.0",
"architecture": "x64", "architecture": "x64",
"icon_path": "data/assets/icon.ico", "icon_path": "data/assets/icon.ico",
"main_script": "main.py", "main_script": "main.py",
"git_repo": "https://gitea.louismazin.ovh/LouisMazin/HoDA" "git_repo": "https://gitea.louismazin.ovh/LouisMazin/PythonApplicationTemplate"
} }