JustAnotherDnDGame 0.1.0
Jeu de rôle tactique au d20, vue de dessus, en C++/Qt
Loading...
Searching...
No Matches
hmi::MainWindow Class Reference

Fenêtre principale de l'application Qt : poste de travail d'éditeur à panneaux dockables autour du viewport Direct3D 11. More...

#include <MainWindow.h>

Inheritance diagram for hmi::MainWindow:

Public Member Functions

 MainWindow (core::MemoryLogSink *sessionLog=nullptr)
 ~MainWindow () override

Protected Member Functions

void closeEvent (QCloseEvent *event) override
 Sauvegarde la disposition avant fermeture.
void resizeEvent (QResizeEvent *event) override
 Repris de QMainWindow.
void moveEvent (QMoveEvent *event) override
bool eventFilter (QObject *watched, QEvent *event) override
 Suit la taille du viewport pour les recouvrements qui s'y superposent (pause, fin de niveau) : enfants ordinaires depuis le LOT-69 TACHE-02, ils se redimensionnent avec leur parent plutôt que d'être repositionnés en coordonnées écran.

Private Member Functions

void applyWorkspace (EditorWorkspace workspace)
 Applique l'espace de travail workspace (LOT-68, EX-IHM-073) : masque les panneaux de l'autre espace, bascule barre d'outils et menu, restaure la disposition propre à cet espace.
void switchToWorkspace (EditorWorkspace workspace)
 Bascule sur workspace s'il n'est pas déjà actif, en synchronisant le sélecteur du menu sans réémettre.
QAction * workspaceSelector (EditorWorkspace workspace) const
std::array< std::pair< QDockWidget *, hmi::PanelId >, hmi::PANEL_COUNTworkspacePanels () const
void connectPlanesPanel ()
 Branche le panneau « Plans » (LOT-69 TACHE-08) : il demande, le viewport applique.
std::filesystem::path planesDirectory () const
void createPlane ()
 Crée un plan : un PNG entièrement transparent aux dimensions exactes, puis l'entrée dans le brouillon.
void changePlaneDensity (std::size_t index, int pixelsPerUnit)
 Change la densité d'un plan : rééchantillonne l'image puis met à jour la déclaration, sans quoi le fichier et le format diraient deux choses différentes.
void buildUi ()
 Crée les panneaux (contenu des docks du .ui) et branche les actions de la barre de menus.
void restoreLayout ()
void saveLayout ()
void openResizeDialog ()
 Ouvre la boîte de dialogue de redimensionnement du niveau (avec confirmation si destructeur).
void openShortcutsDialog ()
 Ouvre l'aperçu des raccourcis (ShortcutsDialog.ui).
void retranslateUi ()
 Applique la langue active à tous les textes de l'IHM (fenêtre, menus, docks, panneaux).
void refreshStatusHelp ()
 Recalcule et réaffiche la barre d'état (zones permanentes + aide contextuelle) depuis l'état courant du viewport (LOT-57 TACHE-01, hmi::editorStatusLines) — seule voie de mise à jour, appelée par tout changement pertinent (outil, survol, zoom, brouillon) ainsi qu'à l'expiration d'un message transitoire, pour la restaurer.
void showTransientStatusMessage (const QString &message, int timeoutMs)
 Affiche message pour timeoutMs dans la barre d'état, puis restaure l'aide contextuelle (refreshStatusHelp).
void applyPanelFocus (hmi::EditorTool tool)
 Met en avant le panneau associé à tool (hmi::panelForTool), si le réglage est actif et que l'utilisateur n'a rien imposé lui-même (LOT-57 TACHE-02) — jamais un masquage, une simple suggestion de premier plan parmi les onglets regroupés.
void applyPixelPanelFocus (hmi::PixelTool tool)
 Équivalent pour les outils du canevas pixel art (hmi::panelForPixelTool, LOT-54 TACHE-04) — même garde, même règle de non-masquage.
void raisePanel (hmi::PanelId panel)
 Met en avant panel (résolution PanelId -> QDockWidget*), sans jamais voler le focus clavier — factorisé entre applyPanelFocus et applyPixelPanelFocus.
void updateActiveEditContext (QWidget *focused)
 Réassigne le contexte d'édition actif (_editContext) et le contexte de la barre d'état selon le widget qui vient de recevoir le focus clavier (LOT-54 TACHE-04, EX-IHM-062) : le canevas pixel art si le focus y entre, le niveau sinon.
bool confirmDiscardPixelChanges ()
void openPixelAssetOpenDialog ()
 Ouvre un asset existant choisi par l'utilisateur (bibliothèque Assets/), après le garde-fou de perte de travail.
void openPixelAssetCreateDialog ()
 Crée un nouvel asset à une taille choisie parmi celles admises par le contrat de sa famille (hmi::validAssetSizes), après le garde-fou de perte de travail.
void savePixelAsset (bool saveAs)
 Enregistre l'asset ouvert.
std::string pixelAssetCacheKey () const
 Nom logique de l'asset ouvert, relatif à Assets/ (ex.
void updateLivePreview ()
 Écrit l'image en cours sur _pixelAssetPath et invalide son entrée de TextureCache, pour que le niveau affiché reflète l'édition en cours — sans effet tant qu'aucun chemin n'est associé (asset pas encore enregistré une première fois, TACHE-05).
void loadPlaneIntoCanvas (std::size_t index)
 Charge le PNG du plan index dans _pixelCanvas, avec ses repères (pelure d'oignon des tuiles sous le plan, plans voisins aplatis dessous et dessus, grille de tuiles).
void savePlaneImage ()
 Écrit l'image du canevas dans le PNG du plan ouvert (Ctrl+S dans l'espace « Plans »).
void closePlaneInCanvas ()
 Vide le canevas de son plan et retire les repères — l'atelier pixel art retrouve alors son comportement du LOT-54, sans repère hérité du mode création.
void refreshPlaneReferences ()
 Reconstruit les repères du plan ouvert depuis le brouillon courant : appelé après toute mutation qui les périme (ordre, densité, opacité, visibilité, taille du niveau).
bool confirmDiscardPlaneChanges ()
std::filesystem::path planeFilePath (std::size_t index) const
void openPixelColorPicker ()
 Ouvre un sélecteur de couleur (QColorDialog) pour choisir librement la couleur courante du canevas — seul moyen d'atteindre une couleur absente à la fois de l'image ouverte (pipette) et de la palette de projet (pastilles).
void updatePixelColorButtonIcon (std::uint32_t color)
 Met à jour le témoin de couleur de la barre d'outils du canevas (pastille de _pixelColorButton).
void syncPaletteToCanvas ()
 Recopie les couleurs de _pixelPalette vers _pixelCanvas (mode contraint) — à appeler après toute mutation qui change les couleurs ou leur ordre (l'ordre affecte le départage à distance égale, hmi::nearestPaletteColor).
void savePixelPalette ()
 Enregistre _pixelPalette dans Assets/palettes.json, journalise un échec éventuel.
void changeLanguage (const QString &code)
 Change la langue active (recharge le catalogue, persiste, retraduit tout).
void saveSessionLogs ()
 Enregistre les journaux de session accumulés dans un fichier horodaté.
QString text (const char *key) const
 Raccourci : texte localisé d'une clé, en QString.
void showEditor ()
 Affiche l'éditeur (viewport + docks + barre de menu).
void setDocksVisible (bool visible)
 Montre/masque tous les panneaux dockables.
void playInterfaceSound (GameEvent event)
 Joue le son associé à event (hmi::SoundTriggers), sans effet si aucun son ne lui est associé (LOT-60 TACHE-03) – point d'appel unique pour tous les sons d'interface.

Static Private Member Functions

static QString layoutKeyFor (EditorWorkspace workspace)
static QString workspaceSettingsName (EditorWorkspace workspace)
static EditorWorkspace workspaceFromSettingsName (const QString &name)

Private Attributes

std::unique_ptr< Ui::EditorMainWindow > _ui
 Mise en page (MainWindow.ui : menubar + docks).
GameViewport_viewport
 Surface de rendu QRhi, et widget central depuis le LOT-86.
EditContextTarget_editContext = nullptr
 Contexte d'édition actif, cible d'Annuler/Refaire/Copier/Coller (LOT-57 TACHE-04) : _viewport (niveau) ou _pixelCanvas (atelier pixel art, LOT-54 TACHE-04), selon le widget qui a le focus clavier (updateActiveEditContext) — le dispatch lui-même ne change jamais.
PalettePanel_palette
 Arbre de sélection du type de tuile (contenu du dock Palette).
PlanesPanel_planes
 Liste des plans picturaux (LOT-69, contenu du dock Plans).
LevelBrowserPanel_levels
 Liste/gestion des fichiers de niveaux (contenu du dock Niveaux).
LinkPanel_links
 Placement/inspection de décors (dock Décors, LOT-57 amendement) — contenait déjà tout ce qui concerne les décors (ToolPanel, LOT-56 TACHE-04) avant d'y accueillir aussi l'inspecteur déplacé du panneau Textures.
TexturePanel_textures
 Habillage : jeu de skins et assignations (dock Textures, LOT-42).
PixelCanvas_pixelCanvas
 Réglages de gameplay de l'élément sélectionné et du tableau (dock Propriétés, LOT-67).
PixelHistoryPanel_pixelHistoryPanel
 Historique visuel de l'atelier (dock, LOT-54 TACHE-04).
PixelPalettePanel_pixelPalettePanel
 Édition de la palette de projet (dock, LOT-54 TACHE-07).
PixelPalette _pixelPalette
 Palette de projet, chargée/enregistrée dans Assets/palettes.json.
std::filesystem::path _pixelAssetPath
 Chemin complet du fichier de l'asset ouvert dans l'atelier, vide si aucun ou pas encore enregistré (LOT-54 TACHE-05) — PixelCanvas::assetName() n'en garde que le nom de fichier, pour l'affichage ; ce chemin sert à savePixelAsset pour retrouver le dossier.
std::optional< std::size_t > _paintedPlane
 Rang du plan actuellement peint dans _pixelCanvas (mode création, LOT-69 TACHE-08) ; absent dès que le canevas sert à l'atelier pixel art.
EditorActions_actions
 Outils et commandes principales, barre d'outils (LOT-56 TACHE-04).
bool _closing = false
 Espace de travail actif (LOT-68).
EditorWorkspace _workspace = EditorWorkspace::Level
QToolBar * _toolBar
 Barre d'outils de l'éditeur, alimentée par _actions.
QToolBar * _pixelToolBar
 Barre d'outils du canevas pixel art (LOT-54 TACHE-04).
QToolButton * _pixelColorButton
 Témoin + sélecteur de couleur courante (canevas).
QMenu * _pixelMenu
 Menu « Atelier » : ouvrir/créer/enregistrer (LOT-54 TACHE-05).
QMenu * _themeMenu
 Sous-menu Affichage > Thème (LOT-56 TACHE-06).
QAction * _themeSystemAction
QAction * _themeLightAction
QAction * _themeDarkAction
QByteArray _defaultState
 Disposition par défaut (pour « Réinitialiser la disposition »).
QAction * _actFollowActiveTool = nullptr
 Réglage persisté (menu Affichage).
bool _userPickedTab = false
 true dès que l'utilisateur a choisi un onglet ou déplacé un panneau lui-même : la mise en avant automatique cesse alors pour la session (jamais persisté, cf.
std::array< QAction *, 7 > _layerVisibilityActions {}
QAction * _actShowAllLayers = nullptr
bool _suppressPanelFocusTracking = false
 true pendant un changement de visibilité provoqué par le code (mise en avant automatique, bascule de mode, restauration de disposition) : évite qu'un tel changement soit pris pour un choix explicite de l'utilisateur (QDockWidget::visibilityChanged).
QLabel * _statusLevel = nullptr
QLabel * _statusDirty = nullptr
QLabel * _statusTool = nullptr
QLabel * _statusHover = nullptr
QLabel * _statusZoom = nullptr
QLabel * _statusColor = nullptr
 Couleur courante de l'atelier pixel art (LOT-54 TACHE-04) ; vide hors contexte d'atelier.
QLabel * _statusCameraFraming = nullptr
 Mode de cadrage de caméra du niveau courant (EX-EDIT-028, LOT-64) ; vide hors contexte de niveau.
QTimer * _statusMessageTimer = nullptr
 Restaure l'aide contextuelle à l'expiration d'un message transitoire (showTransientStatusMessage).
Localization _loc
 Catalogue de traduction (i18n), source de tous les textes.
hmi::AudioEngine _audio
 Moteur audio (LOT-60) : ouvert au démarrage (EX-REN-047), dégrade en silence sans périphérique (EX-NFR-040).
hmi::SoundCatalog _sounds
 Catalogue de sons (LOT-60 TACHE-02), lu une fois au démarrage depuis Audio/sounds.json et entièrement préchargé dans _audio.
core::MemoryLogSink_sessionLog
 Sink mémoire des logs (nul en Release).

Detailed Description

Fenêtre principale de l'application Qt : poste de travail d'éditeur à panneaux dockables autour du viewport Direct3D 11.

Le widget central est le viewport (GameViewport, LOT-34), non dockable. Autour, des QDockWidget (Palette, Outils, Statut) déplaçables, redimensionnables, détachables (EX-IHM-010). La disposition (géométrie + agencement des docks) est persistée hors code via QSettings (EX-IHM-011) : restaurée au lancement, sauvegardée à la fermeture, et réinitialisable à une disposition par défaut (menu « Affichage »).

À cette tâche (LOT-35 TACHE-01), les panneaux sont des coquilles : leur contenu (arbre de palette, barre d'outils, barre d'état) est rempli aux tâches suivantes.

Constructor & Destructor Documentation

◆ MainWindow()

hmi::MainWindow::MainWindow ( core::MemoryLogSink * sessionLog = nullptr)
explicit
Parameters
sessionLogSink mémoire des logs (build développement) pour « Enregistrer les journaux » ; nullptr en Release (bouton indisponible).

< Seule implémentation aujourd'hui (LOT-57 TACHE-04).

◆ ~MainWindow()

hmi::MainWindow::~MainWindow ( )
overridedefault

Member Function Documentation

◆ applyPanelFocus()

void hmi::MainWindow::applyPanelFocus ( hmi::EditorTool tool)
private

Met en avant le panneau associé à tool (hmi::panelForTool), si le réglage est actif et que l'utilisateur n'a rien imposé lui-même (LOT-57 TACHE-02) — jamais un masquage, une simple suggestion de premier plan parmi les onglets regroupés.

◆ applyPixelPanelFocus()

void hmi::MainWindow::applyPixelPanelFocus ( hmi::PixelTool tool)
private

Équivalent pour les outils du canevas pixel art (hmi::panelForPixelTool, LOT-54 TACHE-04) — même garde, même règle de non-masquage.

◆ applyWorkspace()

void hmi::MainWindow::applyWorkspace ( EditorWorkspace workspace)
private

Applique l'espace de travail workspace (LOT-68, EX-IHM-073) : masque les panneaux de l'autre espace, bascule barre d'outils et menu, restaure la disposition propre à cet espace.

N'enregistre pas la disposition qu'on quitte — c'est switchToWorkspace qui sait qu'on quitte vraiment un espace, et l'initialisation n'a rien à enregistrer.

◆ buildUi()

void hmi::MainWindow::buildUi ( )
private

Crée les panneaux (contenu des docks du .ui) et branche les actions de la barre de menus.

◆ changeLanguage()

void hmi::MainWindow::changeLanguage ( const QString & code)
private

Change la langue active (recharge le catalogue, persiste, retraduit tout).

◆ changePlaneDensity()

void hmi::MainWindow::changePlaneDensity ( std::size_t index,
int pixelsPerUnit )
private

Change la densité d'un plan : rééchantillonne l'image puis met à jour la déclaration, sans quoi le fichier et le format diraient deux choses différentes.

◆ closeEvent()

void hmi::MainWindow::closeEvent ( QCloseEvent * event)
overrideprotected

Sauvegarde la disposition avant fermeture.

◆ closePlaneInCanvas()

void hmi::MainWindow::closePlaneInCanvas ( )
private

Vide le canevas de son plan et retire les repères — l'atelier pixel art retrouve alors son comportement du LOT-54, sans repère hérité du mode création.

◆ confirmDiscardPixelChanges()

bool hmi::MainWindow::confirmDiscardPixelChanges ( )
nodiscardprivate
Returns
true si l'on peut poursuivre (rien à perdre, ou perte confirmée) — même patron que le garde-fou d'ouverture de niveau (EX-EDIT-021).

◆ confirmDiscardPlaneChanges()

bool hmi::MainWindow::confirmDiscardPlaneChanges ( )
nodiscardprivate
Returns
true si l'on peut poursuivre : rien à perdre dans le canevas, ou perte confirmée. Même garde que confirmDiscardPixelChanges, message propre au plan — un plan perdu est un dessin perdu, pas un asset qu'on retrouve dans la bibliothèque.

◆ connectPlanesPanel()

void hmi::MainWindow::connectPlanesPanel ( )
private

Branche le panneau « Plans » (LOT-69 TACHE-08) : il demande, le viewport applique.

◆ createPlane()

void hmi::MainWindow::createPlane ( )
private

Crée un plan : un PNG entièrement transparent aux dimensions exactes, puis l'entrée dans le brouillon.

Les deux vont ensemble — une entrée sans fichier afficherait un damier.

◆ eventFilter()

bool hmi::MainWindow::eventFilter ( QObject * watched,
QEvent * event )
overrideprotected

Suit la taille du viewport pour les recouvrements qui s'y superposent (pause, fin de niveau) : enfants ordinaires depuis le LOT-69 TACHE-02, ils se redimensionnent avec leur parent plutôt que d'être repositionnés en coordonnées écran.

◆ layoutKeyFor()

QString hmi::MainWindow::layoutKeyFor ( EditorWorkspace workspace)
staticnodiscardprivate
Returns
La clé QSettings de la disposition de workspace. Chaque espace persiste la sienne : une disposition unique rouvrirait les docks de l'atelier par-dessus l'édition.

◆ loadPlaneIntoCanvas()

void hmi::MainWindow::loadPlaneIntoCanvas ( std::size_t index)
private

Charge le PNG du plan index dans _pixelCanvas, avec ses repères (pelure d'oignon des tuiles sous le plan, plans voisins aplatis dessous et dessus, grille de tuiles).

Sans effet — et le canevas est refermé — si le rang n'existe pas. Le garde-fou de perte de travail est à la charge de l'appelant : cette méthode écrase le contenu du canevas.

◆ moveEvent()

void hmi::MainWindow::moveEvent ( QMoveEvent * event)
overrideprotected

◆ openPixelAssetCreateDialog()

void hmi::MainWindow::openPixelAssetCreateDialog ( )
private

Crée un nouvel asset à une taille choisie parmi celles admises par le contrat de sa famille (hmi::validAssetSizes), après le garde-fou de perte de travail.

◆ openPixelAssetOpenDialog()

void hmi::MainWindow::openPixelAssetOpenDialog ( )
private

Ouvre un asset existant choisi par l'utilisateur (bibliothèque Assets/), après le garde-fou de perte de travail.

◆ openPixelColorPicker()

void hmi::MainWindow::openPixelColorPicker ( )
private

Ouvre un sélecteur de couleur (QColorDialog) pour choisir librement la couleur courante du canevas — seul moyen d'atteindre une couleur absente à la fois de l'image ouverte (pipette) et de la palette de projet (pastilles).

◆ openResizeDialog()

void hmi::MainWindow::openResizeDialog ( )
private

Ouvre la boîte de dialogue de redimensionnement du niveau (avec confirmation si destructeur).

◆ openShortcutsDialog()

void hmi::MainWindow::openShortcutsDialog ( )
private

Ouvre l'aperçu des raccourcis (ShortcutsDialog.ui).

Le tableau est rempli depuis les raccourcis effectifs des actions, jamais un texte figé : il reste juste après un remappage.

◆ pixelAssetCacheKey()

std::string hmi::MainWindow::pixelAssetCacheKey ( ) const
nodiscardprivate

Nom logique de l'asset ouvert, relatif à Assets/ (ex.

"Skins/mur.png") : la clé sous laquelle hmi::TextureCache/GameViewport::invalidateAsset connaissent cet asset — un simple nom de fichier ne suffit pas, le cache est indexé par chemin complet (préfixe de sous-dossier compris).

◆ planeFilePath()

std::filesystem::path hmi::MainWindow::planeFilePath ( std::size_t index) const
nodiscardprivate
Returns
Le chemin du PNG du plan de rang index, vide si le rang n'existe pas.

◆ planesDirectory()

std::filesystem::path hmi::MainWindow::planesDirectory ( ) const
nodiscardprivate
Returns
Le dossier des images de plans, à côté des niveaux.

◆ playInterfaceSound()

void hmi::MainWindow::playInterfaceSound ( GameEvent event)
private

Joue le son associé à event (hmi::SoundTriggers), sans effet si aucun son ne lui est associé (LOT-60 TACHE-03) – point d'appel unique pour tous les sons d'interface.

◆ raisePanel()

void hmi::MainWindow::raisePanel ( hmi::PanelId panel)
private

Met en avant panel (résolution PanelId -> QDockWidget*), sans jamais voler le focus clavier — factorisé entre applyPanelFocus et applyPixelPanelFocus.

◆ refreshPlaneReferences()

void hmi::MainWindow::refreshPlaneReferences ( )
private

Reconstruit les repères du plan ouvert depuis le brouillon courant : appelé après toute mutation qui les périme (ordre, densité, opacité, visibilité, taille du niveau).

◆ refreshStatusHelp()

void hmi::MainWindow::refreshStatusHelp ( )
private

Recalcule et réaffiche la barre d'état (zones permanentes + aide contextuelle) depuis l'état courant du viewport (LOT-57 TACHE-01, hmi::editorStatusLines) — seule voie de mise à jour, appelée par tout changement pertinent (outil, survol, zoom, brouillon) ainsi qu'à l'expiration d'un message transitoire, pour la restaurer.

◆ resizeEvent()

void hmi::MainWindow::resizeEvent ( QResizeEvent * event)
overrideprotected

Repris de QMainWindow.

Il resynchronisait la géométrie des recouvrements d'écran, qui appartiennent au jeu depuis le LOT-86 ; il ne reste que le comportement de base.

◆ restoreLayout()

void hmi::MainWindow::restoreLayout ( )
private

◆ retranslateUi()

void hmi::MainWindow::retranslateUi ( )
private

Applique la langue active à tous les textes de l'IHM (fenêtre, menus, docks, panneaux).

◆ saveLayout()

void hmi::MainWindow::saveLayout ( )
private

◆ savePixelAsset()

void hmi::MainWindow::savePixelAsset ( bool saveAs)
private

Enregistre l'asset ouvert.

saveAs force le choix d'un nouveau chemin (copie), même sans chemin existant ; sans saveAs, réutilise le chemin d'ouverture s'il y en a un. Un écrasement d'asset référencé demande confirmation, nommant les références (LOT-43).

◆ savePixelPalette()

void hmi::MainWindow::savePixelPalette ( )
private

Enregistre _pixelPalette dans Assets/palettes.json, journalise un échec éventuel.

◆ savePlaneImage()

void hmi::MainWindow::savePlaneImage ( )
private

Écrit l'image du canevas dans le PNG du plan ouvert (Ctrl+S dans l'espace « Plans »).

Sans effet si aucun plan n'y est chargé.

◆ saveSessionLogs()

void hmi::MainWindow::saveSessionLogs ( )
private

Enregistre les journaux de session accumulés dans un fichier horodaté.

◆ setDocksVisible()

void hmi::MainWindow::setDocksVisible ( bool visible)
private

Montre/masque tous les panneaux dockables.

◆ showEditor()

void hmi::MainWindow::showEditor ( )
private

Affiche l'éditeur (viewport + docks + barre de menu).

◆ showTransientStatusMessage()

void hmi::MainWindow::showTransientStatusMessage ( const QString & message,
int timeoutMs )
private

Affiche message pour timeoutMs dans la barre d'état, puis restaure l'aide contextuelle (refreshStatusHelp).

La barre d'état n'est jamais laissée vide : à l'expiration d'un message transitoire, elle reprend l'aide du contexte courant. C'est pourquoi le minuteur est porté ici et non délégué à QStatusBar::showMessage, dont l'expiration ne rappelle rien.

◆ switchToWorkspace()

void hmi::MainWindow::switchToWorkspace ( EditorWorkspace workspace)
private

Bascule sur workspace s'il n'est pas déjà actif, en synchronisant le sélecteur du menu sans réémettre.

Point d'entrée unique : applyWorkspace applique, celle-ci décide.

◆ syncPaletteToCanvas()

void hmi::MainWindow::syncPaletteToCanvas ( )
private

Recopie les couleurs de _pixelPalette vers _pixelCanvas (mode contraint) — à appeler après toute mutation qui change les couleurs ou leur ordre (l'ordre affecte le départage à distance égale, hmi::nearestPaletteColor).

◆ text()

QString hmi::MainWindow::text ( const char * key) const
nodiscardprivate

Raccourci : texte localisé d'une clé, en QString.

◆ updateActiveEditContext()

void hmi::MainWindow::updateActiveEditContext ( QWidget * focused)
private

Réassigne le contexte d'édition actif (_editContext) et le contexte de la barre d'état selon le widget qui vient de recevoir le focus clavier (LOT-54 TACHE-04, EX-IHM-062) : le canevas pixel art si le focus y entre, le niveau sinon.

◆ updateLivePreview()

void hmi::MainWindow::updateLivePreview ( )
private

Écrit l'image en cours sur _pixelAssetPath et invalide son entrée de TextureCache, pour que le niveau affiché reflète l'édition en cours — sans effet tant qu'aucun chemin n'est associé (asset pas encore enregistré une première fois, TACHE-05).

◆ updatePixelColorButtonIcon()

void hmi::MainWindow::updatePixelColorButtonIcon ( std::uint32_t color)
private

Met à jour le témoin de couleur de la barre d'outils du canevas (pastille de _pixelColorButton).

◆ workspaceFromSettingsName()

EditorWorkspace hmi::MainWindow::workspaceFromSettingsName ( const QString & name)
staticnodiscardprivate
Returns
L'espace nommé name ; l'édition de niveau si le nom est inconnu (y compris les anciens 0/1 du LOT-68).

◆ workspacePanels()

std::array< std::pair< QDockWidget *, hmi::PanelId >, hmi::PANEL_COUNT > hmi::MainWindow::workspacePanels ( ) const
nodiscardprivate
Returns
La table des neuf panneaux et de leur identité, relue par setDocksVisible et par applyWorkspace. Une seule table : deux listes divergeraient au premier dock ajouté, et le dock oublié resterait affiché dans les deux espaces.

◆ workspaceSelector()

QAction * hmi::MainWindow::workspaceSelector ( EditorWorkspace workspace) const
nodiscardprivate
Returns
L'entrée de menu exclusive qui sélectionne workspace.

◆ workspaceSettingsName()

QString hmi::MainWindow::workspaceSettingsName ( EditorWorkspace workspace)
staticnodiscardprivate
Returns
Le nom sous lequel workspace est persisté. Un nom, jamais l'indice de l'énumération : le LOT-68 écrivait 0/1, et insérer « Plans » entre les deux aurait fait rouvrir en mode création l'éditeur laissé dans l'atelier.

Member Data Documentation

◆ _actFollowActiveTool

QAction* hmi::MainWindow::_actFollowActiveTool = nullptr
private

Réglage persisté (menu Affichage).

◆ _actions

EditorActions* hmi::MainWindow::_actions
private

Outils et commandes principales, barre d'outils (LOT-56 TACHE-04).

◆ _actShowAllLayers

QAction* hmi::MainWindow::_actShowAllLayers = nullptr
private

◆ _audio

hmi::AudioEngine hmi::MainWindow::_audio
private

Moteur audio (LOT-60) : ouvert au démarrage (EX-REN-047), dégrade en silence sans périphérique (EX-NFR-040).

Partagé avec _viewport (setAudioEngine), qui déclenche les sons de jeu ; les sons d'interface se jouent directement d'ici (playInterfaceSound).

◆ _closing

bool hmi::MainWindow::_closing = false
private

Espace de travail actif (LOT-68).

Persisté : on rouvre l'éditeur là où on l'a laissé. Vrai dès que la fenêtre a reçu sa demande de fermeture. Coupe les traitements différés qui toucheraient au thème ou à la disposition pendant le démontage.

◆ _defaultState

QByteArray hmi::MainWindow::_defaultState
private

Disposition par défaut (pour « Réinitialiser la disposition »).

◆ _editContext

EditContextTarget* hmi::MainWindow::_editContext = nullptr
private

Contexte d'édition actif, cible d'Annuler/Refaire/Copier/Coller (LOT-57 TACHE-04) : _viewport (niveau) ou _pixelCanvas (atelier pixel art, LOT-54 TACHE-04), selon le widget qui a le focus clavier (updateActiveEditContext) — le dispatch lui-même ne change jamais.

◆ _layerVisibilityActions

std::array<QAction*, 7> hmi::MainWindow::_layerVisibilityActions {}
private

◆ _levels

LevelBrowserPanel* hmi::MainWindow::_levels
private

Liste/gestion des fichiers de niveaux (contenu du dock Niveaux).

◆ _links

LinkPanel* hmi::MainWindow::_links
private

Placement/inspection de décors (dock Décors, LOT-57 amendement) — contenait déjà tout ce qui concerne les décors (ToolPanel, LOT-56 TACHE-04) avant d'y accueillir aussi l'inspecteur déplacé du panneau Textures.

La barre d'outils reste hors de ce panneau. Liste/gestion des liaisons de mécanismes (dock Liens, LOT-37).

◆ _loc

Localization hmi::MainWindow::_loc
private

Catalogue de traduction (i18n), source de tous les textes.

◆ _paintedPlane

std::optional<std::size_t> hmi::MainWindow::_paintedPlane
private

Rang du plan actuellement peint dans _pixelCanvas (mode création, LOT-69 TACHE-08) ; absent dès que le canevas sert à l'atelier pixel art.

C'est ce qui distingue les deux usages du même canevas : où Ctrl+S écrit, quels repères afficher, et ce que la barre d'état annonce. Un plan et un asset n'y sont jamais ouverts en même temps.

◆ _palette

PalettePanel* hmi::MainWindow::_palette
private

Arbre de sélection du type de tuile (contenu du dock Palette).

◆ _pixelAssetPath

std::filesystem::path hmi::MainWindow::_pixelAssetPath
private

Chemin complet du fichier de l'asset ouvert dans l'atelier, vide si aucun ou pas encore enregistré (LOT-54 TACHE-05) — PixelCanvas::assetName() n'en garde que le nom de fichier, pour l'affichage ; ce chemin sert à savePixelAsset pour retrouver le dossier.

◆ _pixelCanvas

PixelCanvas* hmi::MainWindow::_pixelCanvas
private

Réglages de gameplay de l'élément sélectionné et du tableau (dock Propriétés, LOT-67).

Canevas de l'atelier pixel art (dock Atelier, LOT-54 TACHE-04) : seconde implémentation de EditContextTarget, cible d'Annuler/Refaire/Copier/Coller quand elle a le focus clavier.

◆ _pixelColorButton

QToolButton* hmi::MainWindow::_pixelColorButton
private
Initial value:
=
nullptr

Témoin + sélecteur de couleur courante (canevas).

◆ _pixelHistoryPanel

PixelHistoryPanel* hmi::MainWindow::_pixelHistoryPanel
private

Historique visuel de l'atelier (dock, LOT-54 TACHE-04).

◆ _pixelMenu

QMenu* hmi::MainWindow::_pixelMenu
private
Initial value:
=
nullptr

Menu « Atelier » : ouvrir/créer/enregistrer (LOT-54 TACHE-05).

◆ _pixelPalette

PixelPalette hmi::MainWindow::_pixelPalette
private

Palette de projet, chargée/enregistrée dans Assets/palettes.json.

◆ _pixelPalettePanel

PixelPalettePanel* hmi::MainWindow::_pixelPalettePanel
private

Édition de la palette de projet (dock, LOT-54 TACHE-07).

◆ _pixelToolBar

QToolBar* hmi::MainWindow::_pixelToolBar
private

Barre d'outils du canevas pixel art (LOT-54 TACHE-04).

◆ _planes

PlanesPanel* hmi::MainWindow::_planes
private
Initial value:
=
nullptr

Liste des plans picturaux (LOT-69, contenu du dock Plans).

◆ _sessionLog

core::MemoryLogSink* hmi::MainWindow::_sessionLog
private

Sink mémoire des logs (nul en Release).

◆ _sounds

hmi::SoundCatalog hmi::MainWindow::_sounds
private

Catalogue de sons (LOT-60 TACHE-02), lu une fois au démarrage depuis Audio/sounds.json et entièrement préchargé dans _audio.

◆ _statusCameraFraming

QLabel* hmi::MainWindow::_statusCameraFraming = nullptr
private

Mode de cadrage de caméra du niveau courant (EX-EDIT-028, LOT-64) ; vide hors contexte de niveau.

◆ _statusColor

QLabel* hmi::MainWindow::_statusColor = nullptr
private

Couleur courante de l'atelier pixel art (LOT-54 TACHE-04) ; vide hors contexte d'atelier.

◆ _statusDirty

QLabel* hmi::MainWindow::_statusDirty = nullptr
private

◆ _statusHover

QLabel* hmi::MainWindow::_statusHover = nullptr
private

◆ _statusLevel

QLabel* hmi::MainWindow::_statusLevel = nullptr
private

◆ _statusMessageTimer

QTimer* hmi::MainWindow::_statusMessageTimer = nullptr
private

Restaure l'aide contextuelle à l'expiration d'un message transitoire (showTransientStatusMessage).

◆ _statusTool

QLabel* hmi::MainWindow::_statusTool = nullptr
private

◆ _statusZoom

QLabel* hmi::MainWindow::_statusZoom = nullptr
private

◆ _suppressPanelFocusTracking

bool hmi::MainWindow::_suppressPanelFocusTracking = false
private

true pendant un changement de visibilité provoqué par le code (mise en avant automatique, bascule de mode, restauration de disposition) : évite qu'un tel changement soit pris pour un choix explicite de l'utilisateur (QDockWidget::visibilityChanged).

◆ _textures

TexturePanel* hmi::MainWindow::_textures
private

Habillage : jeu de skins et assignations (dock Textures, LOT-42).

◆ _themeDarkAction

QAction* hmi::MainWindow::_themeDarkAction
private

◆ _themeLightAction

QAction* hmi::MainWindow::_themeLightAction
private

◆ _themeMenu

QMenu* hmi::MainWindow::_themeMenu
private

Sous-menu Affichage > Thème (LOT-56 TACHE-06).

◆ _themeSystemAction

QAction* hmi::MainWindow::_themeSystemAction
private

◆ _toolBar

QToolBar* hmi::MainWindow::_toolBar
private

Barre d'outils de l'éditeur, alimentée par _actions.

◆ _ui

std::unique_ptr<Ui::EditorMainWindow> hmi::MainWindow::_ui
private

Mise en page (MainWindow.ui : menubar + docks).

◆ _userPickedTab

bool hmi::MainWindow::_userPickedTab = false
private

true dès que l'utilisateur a choisi un onglet ou déplacé un panneau lui-même : la mise en avant automatique cesse alors pour la session (jamais persisté, cf.

hmi::panelForTool).

◆ _viewport

GameViewport* hmi::MainWindow::_viewport
private

Surface de rendu QRhi, et widget central depuis le LOT-86.

Elle partageait jusque-là une pile avec le menu principal, les options, les crédits et les neuf écrans du RPG, tous passés en QML dans l'application du jeu. L'éditeur n'a plus qu'une chose à montrer. Surface de rendu D3D11 (possédée par le conteneur central).

◆ _workspace

EditorWorkspace hmi::MainWindow::_workspace = EditorWorkspace::Level
private

The documentation for this class was generated from the following files:
  • /home/runner/work/JustAnotherDnDGame/JustAnotherDnDGame/Source/HMI/Interface/MainWindow.h
  • /home/runner/work/JustAnotherDnDGame/JustAnotherDnDGame/Source/HMI/Interface/MainWindow.cpp