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

Panneau d'habillage, organisé en sections extensibles (EX-EDIT-042, EX-EDIT-024). More...

#include <TexturePanel.h>

Inheritance diagram for hmi::TexturePanel:

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.

Detailed Description

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.

Constructor & Destructor Documentation

◆ TexturePanel()

hmi::TexturePanel::TexturePanel ( std::filesystem::path skinsDirectory,
std::filesystem::path catalogPath,
std::filesystem::path backgroundsDirectory,
std::filesystem::path objectsDirectory,
QWidget * parent = nullptr )
explicit

Construit le panneau.

Parameters
skinsDirectoryDossier balayé pour peupler la liste des fichiers assignables.
catalogPathChemin d'écriture de skins.json.
backgroundsDirectoryDossier balayé pour peupler la grille de fonds (section « Fond », LOT-44).
objectsDirectoryDossier balayé pour peupler la grille d'assets de la section « Objets » (LOT-45).
parentWidget parent.

◆ ~TexturePanel()

hmi::TexturePanel::~TexturePanel ( )
overridedefault

Member Function Documentation

◆ assignmentsChanged

void hmi::TexturePanel::assignmentsChanged ( )
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.

◆ backgroundChanged

void hmi::TexturePanel::backgroundChanged ( const QString & fileName)
signal

Émis quand l'utilisateur choisit un fond dans la section « Fond » (LOT-44) : nom de l'asset, vide pour « aucun fond ».

◆ cameraFramingChanged

void hmi::TexturePanel::cameraFramingChanged ( core::CameraFramingConfig cameraFraming)
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).

◆ cameraZoneRemoveRequested

void hmi::TexturePanel::cameraZoneRemoveRequested ( std::size_t index)
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.

◆ currentSet()

const std::string & hmi::TexturePanel::currentSet ( ) const
inlinenodiscardnoexcept
Returns
Le nom du jeu de skins actuellement sélectionné.

◆ emitCameraFramingChanged()

void hmi::TexturePanel::emitCameraFramingChanged ( )
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).

◆ event()

bool hmi::TexturePanel::event ( QEvent * event)
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).

◆ levelSkinSetChanged

void hmi::TexturePanel::levelSkinSetChanged ( const QString & setName)
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 ».

◆ onAnimationsAssetActivated()

void hmi::TexturePanel::onAnimationsAssetActivated ( const QModelIndex & index)
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).

◆ onAnimationsSelectionChanged()

void hmi::TexturePanel::onAnimationsSelectionChanged ( )
private

Charge l'apercu (spritesheet decodee + description d'animation) de la ligne selectionnee.

◆ onAssetColumnActivated()

void hmi::TexturePanel::onAssetColumnActivated ( const QModelIndex & index)
private

◆ onCameraFramingZonesRemoveClicked()

void hmi::TexturePanel::onCameraFramingZonesRemoveClicked ( )
private

◆ onCameraFramingZonesSelectionChanged()

void hmi::TexturePanel::onCameraFramingZonesSelectionChanged ( )
private

◆ onItemChanged()

void hmi::TexturePanel::onItemChanged ( QStandardItem * item)
private

◆ onObjectsRemoveClicked()

void hmi::TexturePanel::onObjectsRemoveClicked ( )
private

◆ onObjectsSelectionChanged()

void hmi::TexturePanel::onObjectsSelectionChanged ( )
private

◆ onSetChanged()

void hmi::TexturePanel::onSetChanged ( int index)
private

◆ rebuildAnimationsTree()

void hmi::TexturePanel::rebuildAnimationsTree ( )
private

Reconstruit l'arbre de la section « Animations » (LOT-47 TACHE-04) depuis le catalogue et le diagnostic de clips manquants (hmi::buildMechanismAnimationRows).

◆ rebuildCameraFramingSelector()

void hmi::TexturePanel::rebuildCameraFramingSelector ( )
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.

◆ rebuildCameraFramingZonesTable()

void hmi::TexturePanel::rebuildCameraFramingZonesTable ( )
private

Reconstruit le tableau des zones de caméra dessinées à la main depuis _levelCameraFraming.zones (EX-LVL-007), même patron que rebuildObjectRows.

◆ rebuildLevelSkinSetSelector()

void hmi::TexturePanel::rebuildLevelSkinSetSelector ( )
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 ».

◆ rebuildObjectRows()

void hmi::TexturePanel::rebuildObjectRows ( )
private

Reconstruit le tableau des surcharges depuis _objectRows (tri stable par position, déjà posé par refreshObjects).

◆ rebuildTree()

void hmi::TexturePanel::rebuildTree ( )
private

◆ refreshObjects()

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.

Parameters
draftBrouillon dont on lit textureOverrides().

◆ reloadAssets()

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.

◆ reloadRequested

void hmi::TexturePanel::reloadRequested ( )
signal

Émis quand l'utilisateur demande un rechargement à chaud des textures (LOT-43 TACHE-03).

◆ retranslateUi()

void hmi::TexturePanel::retranslateUi ( const Localization & loc)

Applique la langue active (titre des sections, en-têtes de colonnes, libellés de types).

◆ save()

void hmi::TexturePanel::save ( )
private

◆ setCatalog()

void hmi::TexturePanel::setCatalog ( SkinCatalog * catalog)

Confie au panneau le catalogue à éditer.

Parameters
catalogCatalogue, non possédé, qui doit survivre au panneau.

◆ setLevelCameraFraming()

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.

Parameters
cameraFramingCadrage résolu du niveau courant (core::LevelDraft::cameraFraming).

◆ setLevelProperties()

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).

Parameters
backgroundAsset de fond du niveau courant (core::LevelDraft::background).
skinSetJeu de skins du niveau courant (core::LevelDraft::skinSet), distinct du jeu courant d'édition (currentSet).

◆ textureOverrideAssetSelected

void hmi::TexturePanel::textureOverrideAssetSelected ( const QString & fileName)
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é.

◆ textureOverrideRemoveRequested

void hmi::TexturePanel::textureOverrideRemoveRequested ( core::GridPosition position)
signal

Émis par le bouton « Retirer » de la section « Objets » pour la ligne sélectionnée.

◆ textureOverrideSelectionChanged

void hmi::TexturePanel::textureOverrideSelectionChanged ( std::optional< core::GridPosition > position)
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.

◆ thumbnailFor()

QPixmap hmi::TexturePanel::thumbnailFor ( const std::string & asset)
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).

◆ tickAnimationPreview()

void hmi::TexturePanel::tickAnimationPreview ( )
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.

Member Data Documentation

◆ _animationPreviewAnimation

core::Animation hmi::TexturePanel::_animationPreviewAnimation
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).

◆ _animationPreviewDescription

std::optional<AnimationDescription> hmi::TexturePanel::_animationPreviewDescription
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.

◆ _animationPreviewSheet

QImage hmi::TexturePanel::_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.

◆ _animationPreviewTimer

QTimer* hmi::TexturePanel::_animationPreviewTimer
private

Fait avancer l'aperçu de la section « Animations ».

◆ _animationsModel

QStandardItemModel* hmi::TexturePanel::_animationsModel
private

Modèle de l'arbre de la section « Animations » (LOT-47).

◆ _backgroundsDirectory

std::filesystem::path hmi::TexturePanel::_backgroundsDirectory
private

◆ _backgroundView

AssetThumbnailView* hmi::TexturePanel::_backgroundView
private

Grille de vignettes de Assets/Backgrounds/ (LOT-44).

◆ _cameraFramingZonesModel

QStandardItemModel* hmi::TexturePanel::_cameraFramingZonesModel
private

Modèle du tableau des zones de caméra dessinées à la main (LOT-64).

◆ _catalog

SkinCatalog* hmi::TexturePanel::_catalog = nullptr
private

Non possédé (propriété de GameViewport).

◆ _catalogPath

std::filesystem::path hmi::TexturePanel::_catalogPath
private

◆ _currentSet

std::string hmi::TexturePanel::_currentSet
private

◆ _levelBackground

std::optional<std::string> hmi::TexturePanel::_levelBackground
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).

◆ _levelCameraFraming

core::CameraFramingConfig hmi::TexturePanel::_levelCameraFraming
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.

◆ _levelSkinSet

std::optional<std::string> hmi::TexturePanel::_levelSkinSet
private

◆ _loc

const Localization* hmi::TexturePanel::_loc = nullptr
private

Catalogue courant (nul avant première retraduction).

◆ _model

QStandardItemModel* hmi::TexturePanel::_model
private

◆ _objectRows

std::vector<core::TileTextureOverride> hmi::TexturePanel::_objectRows
private

Surcharges affichées par le tableau, indexées comme ses lignes (LOT-45).

◆ _objectsDirectory

std::filesystem::path hmi::TexturePanel::_objectsDirectory
private

◆ _objectsModel

QStandardItemModel* hmi::TexturePanel::_objectsModel
private

Modèle du tableau des surcharges (LOT-45).

◆ _objectView

AssetThumbnailView* hmi::TexturePanel::_objectView
private

Grille de vignettes de Assets/Objects/ (LOT-45).

◆ _skinsDirectory

std::filesystem::path hmi::TexturePanel::_skinsDirectory
private

◆ _thumbnails

std::unordered_map<std::string, QPixmap> hmi::TexturePanel::_thumbnails
private

Fichier de skin (vide pour « aucun ») -> vignette décodée. Vidé par reloadAssets.

◆ _ui

std::unique_ptr<Ui::TexturePanel> hmi::TexturePanel::_ui
private

◆ _updating

bool hmi::TexturePanel::_updating = false
private

Garde de réentrance pendant la reconstruction du modèle.


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