Simulateur Ferroviaire
Reconstruction et visualisation d'un réseau ferroviaire à partir de données GeoJSON — Win32 / WebView2 / Leaflet
Chargement...
Recherche...
Aucune correspondance
Référence de la classe PCCPanel

#include <PCCPanel.h>

Graphe de collaboration de PCCPanel:

Fonctions membres publiques

 PCCPanel (Logger &logger)
 Construit le PCCPanel avec un logger externe.
 
void create (HWND hParent, HINSTANCE hInstance)
 Enregistre la classe Win32 et crée la fenêtre enfant masquée.
 
void toggle ()
 Alterne la visibilité du panneau (masqué ↔ visible).
 
void resize ()
 Redimensionne le panneau pour couvrir toute la zone cliente du parent.
 
void refresh ()
 Force un rafraîchissement du dessin TCO.
 
bool isVisible () const
 Indique si le panneau est actuellement visible.
 

Fonctions membres privées

LRESULT handleMessage (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
 
void onPaint (HWND hWnd)
 Gestionnaire de WM_PAINT — délègue le dessin à TCORenderer.
 
void onMouseWheel (HWND hWnd, WPARAM wParam, LPARAM lParam)
 Gère WM_MOUSEWHEEL avec Ctrl — zoom centré sur le curseur.
 
void onLButtonDown (HWND hWnd, LPARAM lParam)
 Démarre un drag & drop (pan) — WM_LBUTTONDOWN. Appelle SetCapture pour continuer à recevoir WM_MOUSEMOVE hors fenêtre.
 
void onMouseMove (HWND hWnd, LPARAM lParam)
 Déplace la vue pendant le drag — WM_MOUSEMOVE. No-op si m_isDragging est faux.
 
void onLButtonUp (HWND hWnd)
 Termine le drag — WM_LBUTTONUP. Appelle ReleaseCapture.
 
void resetView ()
 Réinitialise zoom = 1, pan = (0, 0) — WM_LBUTTONDBLCLK.
 
void rebuild ()
 Reconstruit le graphe PCC depuis TopologyRepository.
 

Fonctions membres privées statiques

static LRESULT CALLBACK windowProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
 

Attributs privés

HWND m_hWnd = nullptr
 
HWND m_hParent = nullptr
 
HINSTANCE m_hInstance = nullptr
 
Loggerm_logger
 
PCCGraph m_graph
 
RECT m_lastRect = {}
 
TCORenderer::Projection m_cachedProj = {}
 
bool m_projDirty = true
 
float m_zoom = 1.0f
 
float m_panX = 0.0f
 
float m_panY = 0.0f
 
bool m_isDragging = false
 
POINT m_dragAnchor = {}
 
float m_panXAtDrag = 0.0f
 
float m_panYAtDrag = 0.0f
 

Attributs privés statiques

static constexpr wchar_t CLASS_NAME [] = L"PCCPanelClass"
 
static constexpr float ZOOM_STEP = 0.12f
 
static constexpr float ZOOM_MIN = 0.05f
 
static constexpr float ZOOM_MAX = 20.0f
 

Documentation des constructeurs et destructeur

◆ PCCPanel()

PCCPanel::PCCPanel ( Logger logger)
explicit

Construit le PCCPanel avec un logger externe.

Paramètres
loggerRéférence au logger HMI fourni par MainWindow. Doit rester valide pour toute la durée de vie du panneau.

Documentation des fonctions membres

◆ create()

void PCCPanel::create ( HWND  hParent,
HINSTANCE  hInstance 
)

Enregistre la classe Win32 et crée la fenêtre enfant masquée.

Paramètres
hParentHandle de la fenêtre parente (MainWindow).
hInstanceHandle de l'instance Win32 de l'application.
Exceptions
std::runtime_errorSi CreateWindowExW retourne nullptr.

◆ handleMessage()

LRESULT PCCPanel::handleMessage ( HWND  hWnd,
UINT  msg,
WPARAM  wParam,
LPARAM  lParam 
)
private

◆ isVisible()

bool PCCPanel::isVisible ( ) const

Indique si le panneau est actuellement visible.

Renvoie
true si la fenêtre existe et est visible.

◆ onLButtonDown()

void PCCPanel::onLButtonDown ( HWND  hWnd,
LPARAM  lParam 
)
private

Démarre un drag & drop (pan) — WM_LBUTTONDOWN. Appelle SetCapture pour continuer à recevoir WM_MOUSEMOVE hors fenêtre.

◆ onLButtonUp()

void PCCPanel::onLButtonUp ( HWND  hWnd)
private

Termine le drag — WM_LBUTTONUP. Appelle ReleaseCapture.

◆ onMouseMove()

void PCCPanel::onMouseMove ( HWND  hWnd,
LPARAM  lParam 
)
private

Déplace la vue pendant le drag — WM_MOUSEMOVE. No-op si m_isDragging est faux.

◆ onMouseWheel()

void PCCPanel::onMouseWheel ( HWND  hWnd,
WPARAM  wParam,
LPARAM  lParam 
)
private

Gère WM_MOUSEWHEEL avec Ctrl — zoom centré sur le curseur.

Sans Ctrl, le message est transmis à DefWindowProcW (scroll natif).

◆ onPaint()

void PCCPanel::onPaint ( HWND  hWnd)
private

Gestionnaire de WM_PAINT — délègue le dessin à TCORenderer.

Utilise le cache de projection (m_cachedProj) : recalcule via TCORenderer::computeProjection uniquement si m_projDirty est vrai ou si la taille de la fenêtre a changé.

Applique ensuite la world transform GDI (SetWorldTransform) pour le zoom (m_zoom) et le pan (m_panX / m_panY) avant d'appeler TCORenderer::draw avec fillBackground = false (fond déjà rempli).

Paramètres
hWndHandle de la fenêtre à peindre.

◆ rebuild()

void PCCPanel::rebuild ( )
private

Reconstruit le graphe PCC depuis TopologyRepository.

Appelle successivement PCCGraphBuilder::build et PCCLayout::compute. Invalide le cache de projection (m_projDirty = true). No-op si TopologyRepository est vide.

◆ refresh()

void PCCPanel::refresh ( )

Force un rafraîchissement du dessin TCO.

Reconstruit le graphe puis invalide la fenêtre si visible. À appeler depuis MainWindow::onParsingSuccess.

◆ resetView()

void PCCPanel::resetView ( )
private

Réinitialise zoom = 1, pan = (0, 0) — WM_LBUTTONDBLCLK.

◆ resize()

void PCCPanel::resize ( )

Redimensionne le panneau pour couvrir toute la zone cliente du parent.

À appeler depuis le gestionnaire WM_SIZE de MainWindow.

◆ toggle()

void PCCPanel::toggle ( )

Alterne la visibilité du panneau (masqué ↔ visible).

Lors d'une transition masqué → visible, redimensionne d'abord le panneau puis invalide le rectangle pour un WM_PAINT immédiat.

◆ windowProc()

LRESULT CALLBACK PCCPanel::windowProc ( HWND  hWnd,
UINT  msg,
WPARAM  wParam,
LPARAM  lParam 
)
staticprivate

Documentation des données membres

◆ CLASS_NAME

constexpr wchar_t PCCPanel::CLASS_NAME[] = L"PCCPanelClass"
staticconstexprprivate

◆ m_cachedProj

TCORenderer::Projection PCCPanel::m_cachedProj = {}
private

Projection logique → écran mise en cache. Valide tant que m_projDirty est false et que la RECT n'a pas changé.

◆ m_dragAnchor

POINT PCCPanel::m_dragAnchor = {}
private

Position curseur (client) au moment du LButtonDown.

◆ m_graph

PCCGraph PCCPanel::m_graph
private

Graphe PCC possédé par ce panneau. Reconstruit à chaque appel à Rebuild. Déclaré après m_logger — reçoit m_logger dans son constructeur.

◆ m_hInstance

HINSTANCE PCCPanel::m_hInstance = nullptr
private

◆ m_hParent

HWND PCCPanel::m_hParent = nullptr
private

◆ m_hWnd

HWND PCCPanel::m_hWnd = nullptr
private

◆ m_isDragging

bool PCCPanel::m_isDragging = false
private

Vrai pendant qu'un drag LMB est en cours.

◆ m_lastRect

RECT PCCPanel::m_lastRect = {}
private

Dernière RECT passée à computeProjection. Comparée à la RECT courante dans onPaint pour détecter un resize.

◆ m_logger

Logger& PCCPanel::m_logger
private

Logger HMI partagé, fourni par MainWindow. Déclaré avant m_graph — transmis au constructeur de PCCGraph.

◆ m_panX

float PCCPanel::m_panX = 0.0f
private

Décalage horizontal de la vue en pixels écran. Positif = contenu décalé vers la droite.

◆ m_panXAtDrag

float PCCPanel::m_panXAtDrag = 0.0f
private

Valeur de m_panX au début du drag — référence pour le delta.

◆ m_panY

float PCCPanel::m_panY = 0.0f
private

Décalage vertical de la vue en pixels écran. Positif = contenu décalé vers le bas.

◆ m_panYAtDrag

float PCCPanel::m_panYAtDrag = 0.0f
private

Valeur de m_panY au début du drag — référence pour le delta.

◆ m_projDirty

bool PCCPanel::m_projDirty = true
private

Indicateur d'invalidation du cache. Mis à true par rebuild() (nouveau parsing) et lors du premier paint. Remis à false après recalcul dans onPaint().

◆ m_zoom

float PCCPanel::m_zoom = 1.0f
private

Facteur de zoom courant (1.0 = aucun zoom). Appliqué via SetWorldTransform dans onPaint. Borné dans [ZOOM_MIN, ZOOM_MAX].

◆ ZOOM_MAX

constexpr float PCCPanel::ZOOM_MAX = 20.0f
staticconstexprprivate

Zoom maximal — limite le grossissement.

◆ ZOOM_MIN

constexpr float PCCPanel::ZOOM_MIN = 0.05f
staticconstexprprivate

Zoom minimal — empêche d'inverser la vue ou de zoomer à l'infini.

◆ ZOOM_STEP

constexpr float PCCPanel::ZOOM_STEP = 0.12f
staticconstexprprivate

Facteur multiplicatif par cran de molette (12 %).


La documentation de cette classe a été générée à partir des fichiers suivants :