themes.py 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. # -*- coding: utf-8 -*-
  2. """
  3. A.L.I.G. — Définition centralisée des thèmes couleur.
  4. Usage :
  5. from core.themes import get_theme
  6. colors = get_theme("Dark") # ou "Light"
  7. bg = colors["bg_main"]
  8. Toutes les vues reçoivent ce dict via apply_theme(colors).
  9. Plus aucune valeur hexadécimale ne doit être hardcodée dans les vues.
  10. """
  11. THEMES: dict[str, dict] = {
  12. # ══════════════════════════════════════════════════════════════════
  13. # DARK (défaut)
  14. # ══════════════════════════════════════════════════════════════════
  15. "Dark": {
  16. # ── Identificateur ────────────────────────────────────────────
  17. "suffix": "_DARK",
  18. # ── Texte ─────────────────────────────────────────────────────
  19. "text": "#DCE4EE",
  20. "text_secondary": "#888888",
  21. "text_disabled": "#555555",
  22. "text_code": "#00ff00", # G-Code viewer
  23. "text_code_dark": "#006600", # non utilisé en dark
  24. # ── Fonds principaux ──────────────────────────────────────────
  25. "bg_app": "#1a1a1a", # fenêtre racine / topbar
  26. "bg_main": "#1e1e1e", # panneaux principaux
  27. "bg_card": "#252525", # cartes / frames secondaires
  28. "bg_card_alt": "#2b2b2b", # cards calibration / settings
  29. "bg_deep": "#111111", # canvas right panel
  30. "bg_entry": "#1a1a1a", # inputs / QLineEdit / QPlainTextEdit
  31. "bg_entry_alt": "#3d3d3d", # inputs dans calibration
  32. "bg_canvas": "#050505", # canvas simulation
  33. "bg_scroll": "#202020", # fond scrollbar / sidebar calib
  34. "bg_speed": "#222222", # barre de vitesse
  35. "bg_speed_btn": "#3a3a3a", # boutons vitesse
  36. "bg_stats": "#202020", # stats raster
  37. "bg_tabs": "#252525", # fond onglets raster
  38. "bg_tab": "#2b2b2b", # onglet individuel
  39. "bg_preview": "#222222", # zone preview raster
  40. "bg_select": "#1a1a1a", # SelectContainer calibration
  41. "bg_opts": "#222222", # options panel simulation
  42. # ── Bordures ──────────────────────────────────────────────────
  43. "border": "#333333", # bordure standard
  44. "border_strong": "#444444", # bordure forte / inputs
  45. "border_light": "#555555", # bordure légère inputs calib
  46. "border_card": "#3d3d3d", # cartes calibration
  47. # ── Boutons neutres ───────────────────────────────────────────
  48. "btn_neutral": "#444444",
  49. "btn_neutral_hover": "#555555",
  50. "btn_cancel": "#333333",
  51. "btn_cancel_hover": "#444444",
  52. "btn_dark": "#444444",
  53. "btn_dark_hover": "#555555",
  54. # ── Segments / sélecteurs ─────────────────────────────────────
  55. "seg_bg": "#333333",
  56. "seg_text": "#aaaaaa",
  57. "seg_border": "#555555",
  58. "seg_hover": "#444444",
  59. "seg_active_text": "#ffffff",
  60. # ── Scrollbar ─────────────────────────────────────────────────
  61. "scrollbar_bg": "#202020",
  62. "scrollbar_handle": "#3e3e3e",
  63. # ── Hover générique ───────────────────────────────────────────
  64. "hover_card": "#333333",
  65. "hover_card_alt": "#353535",
  66. # ── Divers ────────────────────────────────────────────────────
  67. "combo_selection": "#444444",
  68. "progress_bg": "#333333",
  69. "pbar_bg": "#252525",
  70. "arrow_color": "#ffffff", # flèche dropdown SVG
  71. "locked_btn": "#444444",
  72. "locked_btn_hover": "#666666",
  73. "locked_text": "#ffffff",
  74. "preview_text": "#666666",
  75. "profile_btn": "#444444",
  76. "profile_btn_text": "#ffffff",
  77. "stats_text": "#aaaaaa",
  78. "tab_border": "#555555",
  79. "btn_speed_checked": "#1f538d",
  80. "btn_speed_checked_hov":"#2a6dbd",
  81. "speed_text": "#aaaaaa",
  82. },
  83. # ══════════════════════════════════════════════════════════════════
  84. # LIGHT
  85. # ══════════════════════════════════════════════════════════════════
  86. "Light": {
  87. # ── Identificateur ────────────────────────────────────────────
  88. "suffix": "_LIGHT",
  89. # ── Texte ─────────────────────────────────────────────────────
  90. "text": "#111111",
  91. "text_secondary": "#555555",
  92. "text_disabled": "#aaaaaa",
  93. "text_code": "#006600", # G-Code viewer
  94. "text_code_dark": "#00ff00",
  95. # ── Fonds principaux ──────────────────────────────────────────
  96. "bg_app": "#f5f5f5",
  97. "bg_main": "#f0f0f0",
  98. "bg_card": "#e0e0e0",
  99. "bg_card_alt": "#e8e8e8",
  100. "bg_deep": "#d8d8d8",
  101. "bg_entry": "#ffffff",
  102. "bg_entry_alt": "#ffffff",
  103. "bg_canvas": "#e0e0e0",
  104. "bg_scroll": "#f5f5f5",
  105. "bg_speed": "#e8e8e8",
  106. "bg_speed_btn": "#d0d0d0",
  107. "bg_stats": "#f0f0f0",
  108. "bg_tabs": "#f5f5f5",
  109. "bg_tab": "#e0e0e0",
  110. "bg_preview": "#eeeeee",
  111. "bg_select": "#e8e8e8",
  112. "bg_opts": "#dedede",
  113. # ── Bordures ──────────────────────────────────────────────────
  114. "border": "#cccccc",
  115. "border_strong": "#bbbbbb",
  116. "border_light": "#bbbbbb",
  117. "border_card": "#cccccc",
  118. # ── Boutons neutres ───────────────────────────────────────────
  119. "btn_neutral": "#cccccc",
  120. "btn_neutral_hover": "#b8b8b8",
  121. "btn_cancel": "#d0d0d0",
  122. "btn_cancel_hover": "#bcbcbc",
  123. "btn_dark": "#cccccc",
  124. "btn_dark_hover": "#b8b8b8",
  125. # ── Segments / sélecteurs ─────────────────────────────────────
  126. "seg_bg": "#e0e0e0",
  127. "seg_text": "#555555",
  128. "seg_border": "#bbbbbb",
  129. "seg_hover": "#d0d0d0",
  130. "seg_active_text": "#111111",
  131. # ── Scrollbar ─────────────────────────────────────────────────
  132. "scrollbar_bg": "#e8e8e8",
  133. "scrollbar_handle": "#b0b0b0",
  134. # ── Hover générique ───────────────────────────────────────────
  135. "hover_card": "#dde8f5",
  136. "hover_card_alt": "#d8d8d8",
  137. # ── Divers ────────────────────────────────────────────────────
  138. "combo_selection": "#d0e4f7",
  139. "progress_bg": "#cccccc",
  140. "pbar_bg": "#e8e8e8",
  141. "arrow_color": "#111111", # flèche dropdown SVG
  142. "locked_btn": "#bbbbbb",
  143. "locked_btn_hover": "#999999",
  144. "locked_text": "#111111",
  145. "preview_text": "#999999",
  146. "profile_btn": "#cccccc",
  147. "profile_btn_text": "#222222",
  148. "stats_text": "#444444",
  149. "tab_border": "#bbbbbb",
  150. "btn_speed_checked": "#4a90d9",
  151. "btn_speed_checked_hov":"#2a6dbd",
  152. "speed_text": "#444444",
  153. },
  154. }
  155. def get_theme(name: str) -> dict:
  156. """Retourne le dict de couleurs pour le thème demandé.
  157. Fallback sur Dark si le thème est inconnu."""
  158. return THEMES.get(name, THEMES["Dark"])