UI data-driven, pages, tables et prefabs By Module
Rôle
L'UI By Module est générée à partir de module_pages.json, des pages_settings et des données runtime du TeamModuleTypeData. La structure visuelle n'est donc pas entièrement codée en dur dans les prefabs.
Hiérarchie UI
flowchart TD
M[TeamModuleControl] --> PAGE[ModulePageControlBase]
PAGE --> TABLE[ModulePageTableControlBase]
TABLE --> SEC[Section / EditableSection]
SEC --> ROW[Row / EditableRow]
ROW --> CELL[CellControlBase]
CELL --> INPUT[InputControlBase]
INPUT --> TEXT[TextInput]
INPUT --> DROP[Dropdown / AutoComplete]
INPUT --> CHECK[Checkbox / Toggle]
Classes structurantes
TeamModuleListControl, TeamModuleItemControl, TeamModuleControl, TeamModuleMenuControl
Pages
ModulePageControlBase, ModulePageInputsControl, ModulePageTableControl*
Tables data-driven
DataDrivenTableControl, DataDrivenSectionControl, DataDrivenRowControl, DataDrivenInputsControl
Rows/sections dynamiques
EditableRowControlBase, EditableSectionControlBase, CustomRowControl
Inputs
InputControlBase, InputCellControl, TextInputControl, DropdownInputControl, autocomplete, checkbox
Correction
CorrectedTeamModuleWindowControl, ModuleErrorsPopupControl, CellErrorButtonControl
Types de pages
Le modèle Unity expose plusieurs classes de données : ModulePageDataInputs, ModulePageDataTable, ModulePageDataTableWithInputs, ModulePageDataTableWithDropdown, etc. Le type configuré dans la static data détermine quel contrôle Unity est utilisé.
Pages Accounting spécialisées
En plus du moteur générique, le dossier Assets/Src/UI/SimByModule/UI/ contient les vues spécialisées : trial balance, balance sheet, income statement, statement of equity, bank reconciliation, formulaires de taxes, reports d'employés, immobilisations, contrats, bills et autres documents.
Frontend JSON → runtime
flowchart LR
MP[module_pages.json] --> SD[StaticDataByModule]
PS[pages_settings.json] --> SD
SD --> PC[ModulePageControl]
TM[TeamModuleTypeData.pagesData] --> PC
PC --> INPUTS[Rows / Cells / Inputs]
INPUTS --> CTRL[TeamByModuleController]
CTRL --> SERVER[Custom Command]
Quand modifier quoi
- Structure d'une page :
module_pages.json. - Comportement dynamique/validation :
pages_settings.jsonet definitions associées. - Nouveau rendu visuel réutilisable : classe/prefab sous
SimByModule/UI. - Donnée persistée : modèle
DataDriven*+ custom command serveur. - Nouvelle page Accounting réellement spécialisée : ajouter le contrôle dédié et le brancher dans le système de page correspondant.
Ajouter un nouveau type de page ou de contenu
Avant de créer un nouveau type, vérifier si la page peut être exprimée avec les types existants : table, table_with_dropdown, table_with_dynamic_dropdown, table_with_inputs, inputs ou table_inputs_with_dropdown.
Si un type existant suffit
module_pages.json.
Configurer structure/inputs/columns et pages_settings.
Ajouter un prefab custom seulement si le type inputs en a besoin via les références de prefab.
Vérifier rendu normal + rendu corrected.
Si un vrai nouveau ModulePageType est nécessaire
ModulePageTypeConstants.
Ajouter la valeur dans ModulePageBase.ModulePageType.
Mettre à jour GetModulePageType() et GetModulePageTypeName().
Ajouter le modèle ModulePageData* si la structure JSON diffère.
Mettre à jour Factory.CreateModulePageData(type).
Créer/adapter le ModulePageControlBase correspondant.
Ajouter le prefab template aux listes utilisées par ReferencedModuleWindowControl et CorrectedTeamModuleWindowControl.
Mettre à jour UtilsByModule.GetModulePageControlPoolType() si le nouveau type peut partager un pool.
Ajouter le rendu de contenu dans AllocModulePageContentTemplate().
Ajouter Answer Key + Grading si la page est évaluée.
Ajouter un nouvel input data-driven
Un nouvel input implique généralement quatre zones : modèle de définition static data, modèle runtime de valeur/options, contrôle Unity, et custom command de sauvegarde. Si l'input possède des options de correction, vérifier aussi le grading options.
Rendu corrected à ne pas oublier
Une page qui fonctionne pendant la prise de décision mais plante/est vide en correction est souvent un nouveau type branché seulement dans la fenêtre normale. Toujours tester CorrectedTeamModuleWindowControl et les CellErrorButtonControl/expectedValues.