|
JustAnotherDnDGame 0.1.0
Jeu de rôle tactique au d20, vue de dessus, en C++/Qt
|
Panneau d'habillage, organisé en sections extensibles (EX-EDIT-042, EX-EDIT-024). More...
#include <TexturePanel.h>
Signals | |
| void | assignmentsChanged () |
| Émis après toute modification d'assignation ou changement de jeu courant, une fois le catalogue à jour — le rendu et la palette n'ont qu'à se redessiner. | |
| void | reloadRequested () |
| Émis quand l'utilisateur demande un rechargement à chaud des textures (LOT-43 TACHE-03). | |
| void | backgroundChanged (const QString &fileName) |
| Émis quand l'utilisateur choisit un fond dans la section « Fond » (LOT-44) : nom de l'asset, vide pour « aucun fond ». | |
| void | levelSkinSetChanged (const QString &setName) |
| Émis quand l'utilisateur choisit le jeu de skins du niveau (LOT-44), distinct du jeu courant d'édition : nom du jeu, vide pour « jeu par défaut ». | |
| void | cameraFramingChanged (core::CameraFramingConfig cameraFraming) |
| Émis quand l'utilisateur choisit un nouveau cadrage de caméra dans la section « Cadrage » (EX-EDIT-028, LOT-64) : mode et, pour le mode par salle, taille de salle (std::nullopt = taille par défaut). | |
| void | cameraZoneRemoveRequested (std::size_t index) |
| Émis par le bouton « Retirer » du tableau des zones de caméra dessinées à la main (EX-LVL-007, EX-EDIT-029) pour la ligne sélectionnée. | |
| void | textureOverrideAssetSelected (const QString &fileName) |
| Émis quand l'utilisateur choisit un asset dans la grille « Objets » (LOT-45) : asset actif de l'outil « Texture par instance » ; vide si aucun n'est sélectionné. | |
| void | textureOverrideSelectionChanged (std::optional< core::GridPosition > position) |
| Émis quand la sélection change dans la liste des surcharges du niveau (surbrillance dans le viewport), ou std::nullopt si aucune ligne n'est sélectionnée. | |
| void | textureOverrideRemoveRequested (core::GridPosition position) |
| Émis par le bouton « Retirer » de la section « Objets » pour la ligne sélectionnée. | |
Public Member Functions | |
| TexturePanel (std::filesystem::path skinsDirectory, std::filesystem::path catalogPath, std::filesystem::path backgroundsDirectory, std::filesystem::path objectsDirectory, QWidget *parent=nullptr) | |
| Construit le panneau. | |
| ~TexturePanel () override | |
| void | setCatalog (SkinCatalog *catalog) |
| Confie au panneau le catalogue à éditer. | |
| void | setLevelProperties (const std::optional< std::string > &background, const std::optional< std::string > &skinSet) |
| Synchronise la section « Fond » avec le niveau courant (LOT-44). | |
| void | setLevelCameraFraming (const core::CameraFramingConfig &cameraFraming) |
| Synchronise la section « Cadrage » avec le niveau courant (EX-EDIT-028, LOT-64). | |
| const std::string & | currentSet () const noexcept |
| void | retranslateUi (const Localization &loc) |
| Applique la langue active (titre des sections, en-têtes de colonnes, libellés de types). | |
| void | reloadAssets () |
| Recharge l'arbre depuis le disque après un rechargement à chaud (LOT-43 TACHE-03). | |
| void | refreshObjects (const core::LevelDraft &draft) |
| Resynchronise la section « Objets » avec le brouillon courant (LOT-45). | |
Protected Member Functions | |
| bool | event (QEvent *event) override |
| Régénère les vignettes lors d'un changement d'écran (QEvent::ScreenChangeInternal) : l'échelle d'affichage a pu changer (LOT-56 TACHE-05). | |
Private Member Functions | |
| void | rebuildTree () |
| void | onSetChanged (int index) |
| void | onItemChanged (QStandardItem *item) |
| void | onAssetColumnActivated (const QModelIndex &index) |
| void | save () |
| QPixmap | thumbnailFor (const std::string &asset) |
| Vignette d'un fichier de skin (vide pour « aucun »), décodée au premier besoin puis mise en cache — repli en damier magenta si absent/illisible (cohérent avec le rendu, LOT-40). | |
| void | rebuildLevelSkinSetSelector () |
| Reconstruit la liste du sélecteur de jeu de skins du niveau (section « Fond »), à partir des jeux du catalogue, plus l'entrée « jeu par défaut ». | |
| void | rebuildCameraFramingSelector () |
| Reconstruit le sélecteur de mode de la section « Cadrage » (3 entrées fixes, traduites) et synchronise la visibilité des champs de taille de vue (PerRoom/Follow, EX-REN-017) et du tableau des zones (PerRoom uniquement) avec _levelCameraFraming.mode. | |
| void | rebuildCameraFramingZonesTable () |
| Reconstruit le tableau des zones de caméra dessinées à la main depuis _levelCameraFraming.zones (EX-LVL-007), même patron que rebuildObjectRows. | |
| void | emitCameraFramingChanged () |
| Émet cameraFramingChanged à partir de l'état courant des widgets de mode/taille de la section « Cadrage » – point d'appel unique de leurs gestionnaires de changement, pour ne jamais dupliquer la construction du core::CameraFramingConfig résultant. | |
| void | onCameraFramingZonesSelectionChanged () |
| void | onCameraFramingZonesRemoveClicked () |
| void | rebuildObjectRows () |
| Reconstruit le tableau des surcharges depuis _objectRows (tri stable par position, déjà posé par refreshObjects). | |
| void | onObjectsSelectionChanged () |
| void | onObjectsRemoveClicked () |
| void | rebuildAnimationsTree () |
| Reconstruit l'arbre de la section « Animations » (LOT-47 TACHE-04) depuis le catalogue et le diagnostic de clips manquants (hmi::buildMechanismAnimationRows). | |
| void | onAnimationsAssetActivated (const QModelIndex &index) |
| Ouvre le selecteur a vignettes sur un double-clic dans la colonne Fichier de l'arbre « Animations » (meme patron que onAssetColumnActivated, un mecanisme est un type de tuile comme un autre pour hmi::SkinCatalog). | |
| void | onAnimationsSelectionChanged () |
| Charge l'apercu (spritesheet decodee + description d'animation) de la ligne selectionnee. | |
| void | tickAnimationPreview () |
| Avance l'horloge d'apercu d'un pas de minuterie et rafraichit la vignette (LOT-47 TACHE-04) : lecture en temps reel du meme catalogue que le jeu (hmi::AnimationCatalog), pas une reimplementation parallele. | |
Private Attributes | |
| std::unique_ptr< Ui::TexturePanel > | _ui |
| QStandardItemModel * | _model |
| AssetThumbnailView * | _backgroundView |
| Grille de vignettes de Assets/Backgrounds/ (LOT-44). | |
| AssetThumbnailView * | _objectView |
| Grille de vignettes de Assets/Objects/ (LOT-45). | |
| QStandardItemModel * | _objectsModel |
| Modèle du tableau des surcharges (LOT-45). | |
| QStandardItemModel * | _cameraFramingZonesModel |
| Modèle du tableau des zones de caméra dessinées à la main (LOT-64). | |
| QStandardItemModel * | _animationsModel |
| Modèle de l'arbre de la section « Animations » (LOT-47). | |
| QTimer * | _animationPreviewTimer |
| Fait avancer l'aperçu de la section « Animations ». | |
| QImage | _animationPreviewSheet |
| Spritesheet décodée de l'asset actuellement prévisualisé (vide si aucune sélection/asset illisible) — décodée une fois par sélection, pas à chaque image de la minuterie. | |
| std::optional< AnimationDescription > | _animationPreviewDescription |
| Description d'animation de l'asset prévisualisé, ou std::nullopt si absente/invalide/non sélectionnée : l'aperçu reste alors sur l'image entière de _animationPreviewSheet. | |
| core::Animation | _animationPreviewAnimation |
| Horloge d'aperçu, avancée par _animationPreviewTimer (temps réel, comme l'aperçu d'édition de hmi::DraftRenderer — la détermination n'a pas de sens hors simulation). | |
| std::filesystem::path | _skinsDirectory |
| std::filesystem::path | _catalogPath |
| std::filesystem::path | _backgroundsDirectory |
| std::filesystem::path | _objectsDirectory |
| std::vector< core::TileTextureOverride > | _objectRows |
| Surcharges affichées par le tableau, indexées comme ses lignes (LOT-45). | |
| SkinCatalog * | _catalog = nullptr |
| Non possédé (propriété de GameViewport). | |
| std::string | _currentSet |
| std::optional< std::string > | _levelBackground |
| Dernières valeurs poussées par setLevelProperties (LOT-44) : reappliquées après tout rechargement/reconstruction qui perdrait la sélection courante des widgets (grille, combo). | |
| std::optional< std::string > | _levelSkinSet |
| core::CameraFramingConfig | _levelCameraFraming |
| Dernière valeur poussée par setLevelCameraFraming (LOT-64) : réappliquée après toute reconstruction du sélecteur (langue), même principe que _levelBackground/_levelSkinSet. | |
| bool | _updating = false |
| Garde de réentrance pendant la reconstruction du modèle. | |
| const Localization * | _loc = nullptr |
| Catalogue courant (nul avant première retraduction). | |
| std::unordered_map< std::string, QPixmap > | _thumbnails |
| Fichier de skin (vide pour « aucun ») -> vignette décodée. Vidé par reloadAssets. | |
Panneau d'habillage, organisé en sections extensibles (EX-EDIT-042, EX-EDIT-024).
Premier — et unique — panneau du programme d'habillage : LOT-44 (Fond), LOT-45 (Objets) et LOT-47 (Animations) y ont ajouté leur onglet plutôt que de créer chacun leur dock. Recentré sur ce qui définit l'apparence par LOT-57 : le mode d'inspection par calque (LOT-51), qui regarde le niveau plutôt qu'il ne le définit, a rejoint le menu Affichage ; l'inspecteur des décors posés (LOT-50) a rejoint le panneau Décors (LOT-57, amendement post-essai manuel), qui regroupe désormais tout ce qui touche aux décors.
Le panneau ne possède pas le catalogue : il agit sur celui que lui confie setCatalog, dont GameViewport reste propriétaire — le rendu doit voir les mêmes assignations, immédiatement. Toute modification est écrite sur disque (skins.json, au chemin déployé) et signalée par assignmentsChanged, que le viewport et la palette consomment pour se rafraîchir.
La logique alimentant l'arbre est hors du widget (hmi::buildSkinRows, hmi::applySkinAssignment), donc testée sans Qt (EX-NFR-010). Le choix du fichier assigné à un type se fait par vignettes (hmi::AssetThumbnailView, LOT-43), pas par saisie de nom.
|
explicit |
Construit le panneau.
| skinsDirectory | Dossier balayé pour peupler la liste des fichiers assignables. |
| catalogPath | Chemin d'écriture de skins.json. |
| backgroundsDirectory | Dossier balayé pour peupler la grille de fonds (section « Fond », LOT-44). |
| objectsDirectory | Dossier balayé pour peupler la grille d'assets de la section « Objets » (LOT-45). |
| parent | Widget parent. |
|
overridedefault |
|
signal |
Émis après toute modification d'assignation ou changement de jeu courant, une fois le catalogue à jour — le rendu et la palette n'ont qu'à se redessiner.
|
signal |
Émis quand l'utilisateur choisit un fond dans la section « Fond » (LOT-44) : nom de l'asset, vide pour « aucun fond ».
|
signal |
Émis quand l'utilisateur choisit un nouveau cadrage de caméra dans la section « Cadrage » (EX-EDIT-028, LOT-64) : mode et, pour le mode par salle, taille de salle (std::nullopt = taille par défaut).
|
signal |
Émis par le bouton « Retirer » du tableau des zones de caméra dessinées à la main (EX-LVL-007, EX-EDIT-029) pour la ligne sélectionnée.
|
inlinenodiscardnoexcept |
|
private |
Émet cameraFramingChanged à partir de l'état courant des widgets de mode/taille de la section « Cadrage » – point d'appel unique de leurs gestionnaires de changement, pour ne jamais dupliquer la construction du core::CameraFramingConfig résultant.
Les zones dessinées à la main ne sont jamais modifiées ici (mutées directement via GameViewport).
|
overrideprotected |
Régénère les vignettes lors d'un changement d'écran (QEvent::ScreenChangeInternal) : l'échelle d'affichage a pu changer (LOT-56 TACHE-05).
|
signal |
Émis quand l'utilisateur choisit le jeu de skins du niveau (LOT-44), distinct du jeu courant d'édition : nom du jeu, vide pour « jeu par défaut ».
|
private |
Ouvre le selecteur a vignettes sur un double-clic dans la colonne Fichier de l'arbre « Animations » (meme patron que onAssetColumnActivated, un mecanisme est un type de tuile comme un autre pour hmi::SkinCatalog).
|
private |
Charge l'apercu (spritesheet decodee + description d'animation) de la ligne selectionnee.
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
Reconstruit l'arbre de la section « Animations » (LOT-47 TACHE-04) depuis le catalogue et le diagnostic de clips manquants (hmi::buildMechanismAnimationRows).
|
private |
Reconstruit le sélecteur de mode de la section « Cadrage » (3 entrées fixes, traduites) et synchronise la visibilité des champs de taille de vue (PerRoom/Follow, EX-REN-017) et du tableau des zones (PerRoom uniquement) avec _levelCameraFraming.mode.
|
private |
Reconstruit le tableau des zones de caméra dessinées à la main depuis _levelCameraFraming.zones (EX-LVL-007), même patron que rebuildObjectRows.
|
private |
Reconstruit la liste du sélecteur de jeu de skins du niveau (section « Fond »), à partir des jeux du catalogue, plus l'entrée « jeu par défaut ».
|
private |
Reconstruit le tableau des surcharges depuis _objectRows (tri stable par position, déjà posé par refreshObjects).
|
private |
| void hmi::TexturePanel::refreshObjects | ( | const core::LevelDraft & | draft | ) |
Resynchronise la section « Objets » avec le brouillon courant (LOT-45).
À appeler après tout changement de brouillon (peinture, undo/redo, chargement), comme LinkPanel::refresh : reconstruit la liste des surcharges depuis draft, sans en garder de copie entre deux appels.
| draft | Brouillon dont on lit textureOverrides(). |
| void hmi::TexturePanel::reloadAssets | ( | ) |
Recharge l'arbre depuis le disque après un rechargement à chaud (LOT-43 TACHE-03).
Vide le cache de vignettes des lignes (un fichier a pu être modifié hors de l'application) puis reconstruit l'arbre : le catalogue lui-même est déjà à jour (rechargé en place par l'appelant, GameViewport::reloadAssets), seuls le balayage du dossier et les vignettes doivent être refaits.
|
signal |
Émis quand l'utilisateur demande un rechargement à chaud des textures (LOT-43 TACHE-03).
| void hmi::TexturePanel::retranslateUi | ( | const Localization & | loc | ) |
Applique la langue active (titre des sections, en-têtes de colonnes, libellés de types).
|
private |
| void hmi::TexturePanel::setCatalog | ( | SkinCatalog * | catalog | ) |
Confie au panneau le catalogue à éditer.
| catalog | Catalogue, non possédé, qui doit survivre au panneau. |
| void hmi::TexturePanel::setLevelCameraFraming | ( | const core::CameraFramingConfig & | cameraFraming | ) |
Synchronise la section « Cadrage » avec le niveau courant (EX-EDIT-028, LOT-64).
Même sens que setLevelProperties : l'appelant pousse l'état, la section ne le possède pas.
| cameraFraming | Cadrage résolu du niveau courant (core::LevelDraft::cameraFraming). |
| void hmi::TexturePanel::setLevelProperties | ( | const std::optional< std::string > & | background, |
| const std::optional< std::string > & | skinSet ) |
Synchronise la section « Fond » avec le niveau courant (LOT-44).
À appeler après tout changement de brouillon (ouverture, undo/redo, chargement) pour que la sélection affichée reste fidèle au niveau — l'inverse du sens habituel des signaux de ce panneau (ici c'est l'appelant qui pousse l'état, la section ne le possède pas).
| background | Asset de fond du niveau courant (core::LevelDraft::background). |
| skinSet | Jeu de skins du niveau courant (core::LevelDraft::skinSet), distinct du jeu courant d'édition (currentSet). |
|
signal |
Émis quand l'utilisateur choisit un asset dans la grille « Objets » (LOT-45) : asset actif de l'outil « Texture par instance » ; vide si aucun n'est sélectionné.
|
signal |
Émis par le bouton « Retirer » de la section « Objets » pour la ligne sélectionnée.
|
signal |
Émis quand la sélection change dans la liste des surcharges du niveau (surbrillance dans le viewport), ou std::nullopt si aucune ligne n'est sélectionnée.
|
nodiscardprivate |
Vignette d'un fichier de skin (vide pour « aucun »), décodée au premier besoin puis mise en cache — repli en damier magenta si absent/illisible (cohérent avec le rendu, LOT-40).
|
private |
Avance l'horloge d'apercu d'un pas de minuterie et rafraichit la vignette (LOT-47 TACHE-04) : lecture en temps reel du meme catalogue que le jeu (hmi::AnimationCatalog), pas une reimplementation parallele.
|
private |
Horloge d'aperçu, avancée par _animationPreviewTimer (temps réel, comme l'aperçu d'édition de hmi::DraftRenderer — la détermination n'a pas de sens hors simulation).
|
private |
Description d'animation de l'asset prévisualisé, ou std::nullopt si absente/invalide/non sélectionnée : l'aperçu reste alors sur l'image entière de _animationPreviewSheet.
|
private |
Spritesheet décodée de l'asset actuellement prévisualisé (vide si aucune sélection/asset illisible) — décodée une fois par sélection, pas à chaque image de la minuterie.
|
private |
Fait avancer l'aperçu de la section « Animations ».
|
private |
Modèle de l'arbre de la section « Animations » (LOT-47).
|
private |
|
private |
Grille de vignettes de Assets/Backgrounds/ (LOT-44).
|
private |
Modèle du tableau des zones de caméra dessinées à la main (LOT-64).
|
private |
Non possédé (propriété de GameViewport).
|
private |
|
private |
|
private |
Dernières valeurs poussées par setLevelProperties (LOT-44) : reappliquées après tout rechargement/reconstruction qui perdrait la sélection courante des widgets (grille, combo).
|
private |
Dernière valeur poussée par setLevelCameraFraming (LOT-64) : réappliquée après toute reconstruction du sélecteur (langue), même principe que _levelBackground/_levelSkinSet.
|
private |
|
private |
Catalogue courant (nul avant première retraduction).
|
private |
|
private |
Surcharges affichées par le tableau, indexées comme ses lignes (LOT-45).
|
private |
|
private |
Modèle du tableau des surcharges (LOT-45).
|
private |
Grille de vignettes de Assets/Objects/ (LOT-45).
|
private |
|
private |
Fichier de skin (vide pour « aucun ») -> vignette décodée. Vidé par reloadAssets.
|
private |
|
private |
Garde de réentrance pendant la reconstruction du modèle.