JustAnotherDnDGame 0.1.0
Jeu de rôle tactique au d20, vue de dessus, en C++/Qt
Loading...
Searching...
No Matches
TexturePanel.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2026 Valentin Eloy
2// SPDX-License-Identifier: GPL-3.0-or-later
3
4#pragma once
5
6#include <QImage>
7#include <QPixmap>
8#include <QWidget>
9#include <cstddef>
10#include <filesystem>
11#include <memory>
12#include <optional>
13#include <string>
14#include <unordered_map>
15#include <vector>
16
20#include "Core/Levels/Level.h"
24
29
30class QEvent;
31class QModelIndex;
32class QStandardItem;
33class QStandardItemModel;
34class QTimer;
35
36namespace Ui {
37class TexturePanel;
38}
39
40namespace core {
41class LevelDraft;
42} // namespace core
43
44namespace hmi {
45
47class Localization;
48
68class TexturePanel : public QWidget {
69 Q_OBJECT
70
71public:
82 explicit TexturePanel(std::filesystem::path skinsDirectory, std::filesystem::path catalogPath,
83 std::filesystem::path backgroundsDirectory,
84 std::filesystem::path objectsDirectory, QWidget* parent = nullptr);
85 ~TexturePanel() override;
86
91 void setCatalog(SkinCatalog* catalog);
92
103 void setLevelProperties(const std::optional<std::string>& background,
104 const std::optional<std::string>& skinSet);
105
112 void setLevelCameraFraming(const core::CameraFramingConfig& cameraFraming);
113
115 [[nodiscard]] const std::string& currentSet() const noexcept {
116 return _currentSet;
117 }
118
120 void retranslateUi(const Localization& loc);
121
130 void reloadAssets();
131
140 void refreshObjects(const core::LevelDraft& draft);
141
142protected:
145 bool event(QEvent* event) override;
146
147signals:
155 void backgroundChanged(const QString& fileName);
158 void levelSkinSetChanged(const QString& setName);
165 void cameraZoneRemoveRequested(std::size_t index);
168 void textureOverrideAssetSelected(const QString& fileName);
171 void textureOverrideSelectionChanged(std::optional<core::GridPosition> position);
174
175private:
176 void rebuildTree();
177 void onSetChanged(int index);
178 void onItemChanged(QStandardItem* item);
179 void onAssetColumnActivated(const QModelIndex& index);
180 void save();
183 [[nodiscard]] QPixmap thumbnailFor(const std::string& asset);
203 void rebuildObjectRows();
212 void onAnimationsAssetActivated(const QModelIndex& index);
219
220 std::unique_ptr<Ui::TexturePanel> _ui;
221 QStandardItemModel* _model;
225 QStandardItemModel* _objectsModel;
227 QStandardItemModel* _cameraFramingZonesModel;
228 QStandardItemModel*
236 std::optional<AnimationDescription> _animationPreviewDescription;
240 std::filesystem::path _skinsDirectory;
241 std::filesystem::path _catalogPath;
242 std::filesystem::path _backgroundsDirectory;
243 std::filesystem::path _objectsDirectory;
245 std::vector<core::TileTextureOverride> _objectRows;
247 std::string _currentSet;
250 std::optional<std::string> _levelBackground;
251 std::optional<std::string> _levelSkinSet;
255 bool _updating = false;
256 const Localization* _loc = nullptr;
258 std::unordered_map<std::string, QPixmap> _thumbnails;
259};
260
261} // namespace hmi
Lecture et validation du format nom-asset.anim.json (LOT-46 TACHE-03).
Composant d'état d'animation par séquence d'images (données pures).
Mode de cadrage de caméra porté par le niveau (EX-LVL-006, EX-REN-016, LOT-64).
Position entière dans la grille d'un niveau (colonne, ligne).
Niveau chargé : grille de tuiles, entrée/sortie et mécanismes.
Association type de tuile → asset et mode de rendu, groupée en jeux nommés (EX-EDIT-042,...
Types de tuiles d'une carte et utilitaires associés.
Niveau mutable en cours d'édition, distinct de Level (immuable, LOT-07).
Definition LevelDraft.h:43
Grille de vignettes d'un dossier d'assets, avec recherche, sélection et gestion des fichiers (importe...
Definition AssetThumbnailView.h:55
Catalogue de traduction (i18n) : associe des clés stables à des chaînes selon la langue active,...
Definition Localization.h:29
Catalogue des jeux de skins : (jeu, type de tuile) → { asset, mode }.
Definition SkinCatalog.h:100
std::filesystem::path _objectsDirectory
Definition TexturePanel.h:243
const std::string & currentSet() const noexcept
Definition TexturePanel.h:115
void levelSkinSetChanged(const QString &setName)
Émis quand l'utilisateur choisit le jeu de skins du niveau (LOT-44), distinct du jeu courant d'éditio...
void onObjectsSelectionChanged()
Definition TexturePanel.cpp:785
std::vector< core::TileTextureOverride > _objectRows
Surcharges affichées par le tableau, indexées comme ses lignes (LOT-45).
Definition TexturePanel.h:245
void onAssetColumnActivated(const QModelIndex &index)
Definition TexturePanel.cpp:560
bool event(QEvent *event) override
Régénère les vignettes lors d'un changement d'écran (QEvent::ScreenChangeInternal) : l'échelle d'affi...
Definition TexturePanel.cpp:725
void reloadRequested()
Émis quand l'utilisateur demande un rechargement à chaud des textures (LOT-43 TACHE-03).
QImage _animationPreviewSheet
Spritesheet décodée de l'asset actuellement prévisualisé (vide si aucune sélection/asset illisible) —...
Definition TexturePanel.h:233
void retranslateUi(const Localization &loc)
Applique la langue active (titre des sections, en-têtes de colonnes, libellés de types).
Definition TexturePanel.cpp:386
QStandardItemModel * _model
Definition TexturePanel.h:221
std::filesystem::path _backgroundsDirectory
Definition TexturePanel.h:242
void rebuildCameraFramingZonesTable()
Reconstruit le tableau des zones de caméra dessinées à la main depuis _levelCameraFraming....
Definition TexturePanel.cpp:677
void onSetChanged(int index)
Definition TexturePanel.cpp:511
void rebuildObjectRows()
Reconstruit le tableau des surcharges depuis _objectRows (tri stable par position,...
Definition TexturePanel.cpp:773
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 — r...
Definition TexturePanel.cpp:594
QTimer * _animationPreviewTimer
Fait avancer l'aperçu de la section « Animations ».
Definition TexturePanel.h:230
core::Animation _animationPreviewAnimation
Horloge d'aperçu, avancée par _animationPreviewTimer (temps réel, comme l'aperçu d'édition de hmi::Dr...
Definition TexturePanel.h:239
void save()
Definition TexturePanel.cpp:978
const Localization * _loc
Catalogue courant (nul avant première retraduction).
Definition TexturePanel.h:256
void backgroundChanged(const QString &fileName)
Émis quand l'utilisateur choisit un fond dans la section « Fond » (LOT-44) : nom de l'asset,...
void rebuildAnimationsTree()
Reconstruit l'arbre de la section « Animations » (LOT-47 TACHE-04) depuis le catalogue et le diagnost...
Definition TexturePanel.cpp:836
void onAnimationsAssetActivated(const QModelIndex &index)
Ouvre le selecteur a vignettes sur un double-clic dans la colonne Fichier de l'arbre « Animations » (...
Definition TexturePanel.cpp:872
void textureOverrideRemoveRequested(core::GridPosition position)
Émis par le bouton « Retirer » de la section « Objets » pour la ligne sélectionnée.
std::optional< AnimationDescription > _animationPreviewDescription
Description d'animation de l'asset prévisualisé, ou std::nullopt si absente/invalide/non sélectionnée...
Definition TexturePanel.h:236
void onObjectsRemoveClicked()
Definition TexturePanel.cpp:802
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,...
std::filesystem::path _skinsDirectory
Definition TexturePanel.h:240
std::optional< std::string > _levelBackground
Dernières valeurs poussées par setLevelProperties (LOT-44) : reappliquées après tout rechargement/rec...
Definition TexturePanel.h:250
void textureOverrideAssetSelected(const QString &fileName)
Émis quand l'utilisateur choisit un asset dans la grille « Objets » (LOT-45) : asset actif de l'outil...
void rebuildLevelSkinSetSelector()
Reconstruit la liste du sélecteur de jeu de skins du niveau (section « Fond »), à partir des jeux du ...
Definition TexturePanel.cpp:626
SkinCatalog * _catalog
Non possédé (propriété de GameViewport).
Definition TexturePanel.h:246
std::unique_ptr< Ui::TexturePanel > _ui
Definition TexturePanel.h:220
AssetThumbnailView * _backgroundView
Grille de vignettes de Assets/Backgrounds/ (LOT-44).
Definition TexturePanel.h:223
void onAnimationsSelectionChanged()
Charge l'apercu (spritesheet decodee + description d'animation) de la ligne selectionnee.
Definition TexturePanel.cpp:909
void assignmentsChanged()
Émis après toute modification d'assignation ou changement de jeu courant, une fois le catalogue à jou...
void tickAnimationPreview()
Avance l'horloge d'apercu d'un pas de minuterie et rafraichit la vignette (LOT-47 TACHE-04) : lecture...
Definition TexturePanel.cpp:950
QStandardItemModel * _cameraFramingZonesModel
Modèle du tableau des zones de caméra dessinées à la main (LOT-64).
Definition TexturePanel.h:227
void rebuildTree()
Definition TexturePanel.cpp:449
void rebuildCameraFramingSelector()
Reconstruit le sélecteur de mode de la section « Cadrage » (3 entrées fixes, traduites) et synchronis...
Definition TexturePanel.cpp:644
std::unordered_map< std::string, QPixmap > _thumbnails
Fichier de skin (vide pour « aucun ») -> vignette décodée. Vidé par reloadAssets.
Definition TexturePanel.h:258
std::string _currentSet
Definition TexturePanel.h:247
void emitCameraFramingChanged()
Émet cameraFramingChanged à partir de l'état courant des widgets de mode/taille de la section « Cadra...
Definition TexturePanel.cpp:697
void refreshObjects(const core::LevelDraft &draft)
Resynchronise la section « Objets » avec le brouillon courant (LOT-45).
Definition TexturePanel.cpp:757
void cameraFramingChanged(core::CameraFramingConfig cameraFraming)
Émis quand l'utilisateur choisit un nouveau cadrage de caméra dans la section « Cadrage » (EX-EDIT-02...
std::filesystem::path _catalogPath
Definition TexturePanel.h:241
void setCatalog(SkinCatalog *catalog)
Confie au panneau le catalogue à éditer.
Definition TexturePanel.cpp:359
void onCameraFramingZonesSelectionChanged()
Definition TexturePanel.cpp:815
void setLevelCameraFraming(const core::CameraFramingConfig &cameraFraming)
Synchronise la section « Cadrage » avec le niveau courant (EX-EDIT-028, LOT-64).
Definition TexturePanel.cpp:381
bool _updating
Garde de réentrance pendant la reconstruction du modèle.
Definition TexturePanel.h:255
core::CameraFramingConfig _levelCameraFraming
Dernière valeur poussée par setLevelCameraFraming (LOT-64) : réappliquée après toute reconstruction d...
Definition TexturePanel.h:254
QStandardItemModel * _objectsModel
Modèle du tableau des surcharges (LOT-45).
Definition TexturePanel.h:225
AssetThumbnailView * _objectView
Grille de vignettes de Assets/Objects/ (LOT-45).
Definition TexturePanel.h:224
void textureOverrideSelectionChanged(std::optional< core::GridPosition > position)
Émis quand la sélection change dans la liste des surcharges du niveau (surbrillance dans le viewport)...
void setLevelProperties(const std::optional< std::string > &background, const std::optional< std::string > &skinSet)
Synchronise la section « Fond » avec le niveau courant (LOT-44).
Definition TexturePanel.cpp:367
void onItemChanged(QStandardItem *item)
Definition TexturePanel.cpp:522
std::optional< std::string > _levelSkinSet
Definition TexturePanel.h:251
TexturePanel(std::filesystem::path skinsDirectory, std::filesystem::path catalogPath, std::filesystem::path backgroundsDirectory, std::filesystem::path objectsDirectory, QWidget *parent=nullptr)
Construit le panneau.
Definition TexturePanel.cpp:252
void onCameraFramingZonesRemoveClicked()
Definition TexturePanel.cpp:822
void reloadAssets()
Recharge l'arbre depuis le disque après un rechargement à chaud (LOT-43 TACHE-03).
Definition TexturePanel.cpp:737
~TexturePanel() override
QStandardItemModel * _animationsModel
Modèle de l'arbre de la section « Animations » (LOT-47).
Definition TexturePanel.h:229
Definition AssetThumbnailView.h:26
Espace de noms du moteur et de la logique de jeu.
Definition Bootstrap.h:9
Definition AudioEngine.cpp:15
État d'animation courant d'une entité : quel jeu de clips, quel clip, quelle image,...
Definition Animation.h:32
Cadrage de caméra résolu d'un niveau : le mode retenu et ses paramètres.
Definition CameraFraming.h:71
Position d'une case dans la grille d'un niveau, en coordonnées entières.
Definition GridPosition.h:20