Je créer un moteur 3D, et un éditeur. Le moteur 3D pour des raisons de performance est en C++ non-managé. L’éditeur, pour des raisons de simplicité est en C++ managé. Ce qui me permet d’utiliser les WinForms, .NET et des composants d’interface développés en C# ou n’importe quel autre langage .NET.
Un des concept que je trouve le plus intéressant dans .NET, outre la facilité avec laquelle on peut créer des composants et les utiliser dans diverses applications, c’est le concept des properties et le composant PropertyGrid. Dans mon cas, cela me permet de créer des objets managés qui englobent leur équivalent non-managé (du moteur 3D) et rendent leur contenu accessible à l’édition via une PropertyGrid. Pour un nouveau type de noeud de mon scene graph par exemple, je n’ai qu’à créer le même dans mon éditeur et écrire les properties dont j’ai besoin. Ca gère les propriétés hérités des classes mère et pas mal d’autres choses qui facilitent la vie.
Bref. Voilà pour l’introduction. Le but de la note c’est en fait de me faire un post-it sur 2 fonctions un peu chiantes à trouver lorsqu’on ne les connait pas :
public: bool ShouldSerializePropertyName(void);
public: void ResetPropertyName(void);
Ces 2 méthodes sont optionnelles, un comportement par défaut étant utilisé (ça dépend de pas mal de choses, donc faites une petite recherche de ces méthodes pour plus de détail) Mais si elles existent, elles permettent de faire 2 choses intéressante.
La première méthode permet de définir la propriété considérée est à sa valeur par défaut ou non. Si la méthode retourne true, alors la propriété est affichée comme si elle avait sa valeur par défaut. Sinon, elle est affichée en gras (c’est le comportement des PropertyGrid, peut-être que l’on peut modifier ça, je ne suis jamais allé vérifier) C’est simplement du design, mais dans une PropertyGrid un peu encombrée, c’est intéressant de pouvoir afficher toutes les propriétés normalement au lieu de tout avoir en gras.
La deuxième méthode fait que lorsque l’on clique-droit sur la propriété, une option “Reset” apparait, et la méthode est appelée et vous pouvez écrire le code pour remettre votre propriété à sa valeur par défaut.