La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Fil rouge : éditeur de dessins en WPF Les Custom Tools de VS2005 Comment çà marche ? Les Custom Tools de VS2005 Comment çà marche ? Utilisons notre DSL.

Présentations similaires


Présentation au sujet: "Fil rouge : éditeur de dessins en WPF Les Custom Tools de VS2005 Comment çà marche ? Les Custom Tools de VS2005 Comment çà marche ? Utilisons notre DSL."— Transcription de la présentation:

1

2 Fil rouge : éditeur de dessins en WPF Les Custom Tools de VS2005 Comment çà marche ? Les Custom Tools de VS2005 Comment çà marche ? Utilisons notre DSL Fabriquons un designer graphique pour notre problème ! Conclusion et ressources

3 Le point de départ : un Sample de WCF : GeometryDesigner L’idée : améliorer la création des formes (interactivement)

4 Une namespace System.Windows.Shapes contenant des formes géométriques ( Rectangle, Ellipse, Line, Polygon, …) contenant des formes géométriques ( Rectangle, Ellipse, Line, Polygon, …) Des événements souris, clavier qui nous fournissent le point (ou la touche), et l’objet désigné (source) qui nous fournissent le point (ou la touche), et l’objet désigné (source)

5 using System.Windows.Controls; using System.Windows.Shapes; using System.Windows; using System.Windows.Media; using System.Windows.Input; namespace GeometryEditor.Shapes { public partial class LineTool { … protected override Shape CreateElement() { return new Line(); } protected internal override void OnMouseLeftButtonDown(Point point, Shape designée) { X1 = point; X2 = point; } protected internal override void OnMouseLeftButtonUp(Point point, Shape designée) { X2 = point; Terminate(); } protected internal override void OnMouseDrag(Point point, Shape designée) { X2 = point; } 1.Clic 2.Drag 3.Relâche Et si mes clients veulent : 1.Clic / Relâche 2.Move 3.Clic / Relâche ?

6 using System.Windows.Controls; using System.Windows.Shapes; using System.Windows; using System.Windows.Media; using System.Windows.Input; namespace GeometryEditor.Shapes { public partial class LineTool { … bool premierPointCliqué = false; protected internal override void OnMouseLeftButtonUp(Point point, Shape designée) { if (! premierPointCliqué) { X1 = point; X2 = point; premierPointCliqué = true; } else { X2 = point; Terminate(); } protected internal override void OnMouseMove(Point point, Shape designée) { X2 = point; } 1.Clic / Relâche 2.Move 3.Clic / Relâche Première tentative

7 Attente du premier point Attente du second point Terminé Clic / X1 = X2 = point Relâche / X2 = point Drag / X2 = point Un segment réduit à un point Le premier point du segment est inchangé, le second est mis à jour Le premier point du segment est inchangé, le second est fixé définitivement.

8 Attente du premier point Attente du second point Terminé Relâche / X1 = X2 = point Relâche / X2 = point Move / X2 = point Clic, Drag Mettre à jour le second point alors qu’on n’a pas fixé le premier point est incorrect ! C’est pour cela que notre ligne se commençait avant d’avoir cliqué.

9 Attente du premier point Attente du second point Terminé Relâche / X1 =X2 = point Relâche / X2 = point Move / X2 = point using System.Windows.Controls; using System.Windows.Shapes; using System.Windows; using System.Windows.Media; using System.Windows.Input; namespace GeometryEditor.Shapes { public partial class LineTool { … bool premierPointCliqué = false; protected internal override void OnMouseLeftButtonUp(Point point, Shape designée) { if (! premierPointCliqué ) { X1 = point; X2 = point; premierPointCliqué = true; } else { X2 = point; Terminate(); } protected internal override void OnMouseMove(Point point, Shape designée) { if ( premierPointCliqué ) X2 = point; }

10 La logique du code de création est finalement assez complexe. Il est facile de se tromper. Par contre, des dessins (modèles) aident L’étude du code pour créer des lignes, rectangles, ellipses, … montre des choses communes aux différents outils, et d’autres différentes. Un Framework factoriserait ce qui est commun, un générateur de code fabriquerait ce qui est différent.

11

12 En copiant le contenu de notre fichier dans un fichier.tt, et en commençant à le paramétrer. Où prendre les paramètres ? Ressources ? Config ? Comment générer nos transitions ?

13

14 Comment marchent les.settings et.resources ? Persistance dans des fichiers XML (.settings,.resources) namespace WindowsApplication1.Properties { internal class Resources { internal static string Gagné { get {return ResourceManager.GetString("Gagné", resourceCulture);}} internal static string Perdu { get {return ResourceManager.GetString("Perdu", resourceCulture);}} } private static global::System.Resources.ResourceManager resourceMan; private static global::System.Globalization.CultureInfo resourceCulture; internal static global::System.Globalization.CultureInfo Culture { get { return resourceCulture;} set {resourceCulture = value;} } internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("WindowsApplication1.Properties.Resour ces", typeof(Resources).Assembly); resourceMan = temp; } return resourceMan; } ResXFileCodeGenerator Resources.Designer.cs

15

16 Nous manipulons des ressources ou des paramètres de configuration de manière naturelle. Des Custom Tools génèrent du code basé sur un Framework (.NET 2.0) pour y accéder en runtime (masquant l’utilisation du Framework) System.Resources et System.Globalization System.Configuration Ce mécanisme est unidirectionnel.

17 Pour les Windows.Forms c’est comme pour les ressources ou settings mais L’éditeur est graphique la sérialisation s’effectue dans le code c’est built-in (pas de Custom Tool) Même chose pour le Class diagram La notion de classe partial est très intéressante pour les générateurs de code

18 ... nous pouvions Ajouter un nouvel élément de type «.geometryCreator » à un projet Visual Studio. Dessiner un comportement de création de formes et en déduire du code source correct? C’est possible … car Visual Studio 2005 est extensible

19

20 Options de personnalisation, Snippets Macros Add-Ins Packages Accessibilité aux développeurs Niveau d’intégration Cout d’intégration Nécessite le VS SDK Cas des Language Packages et en particulier des DSL

21 TypeAvantagesLimitations PersonnalisationSimpleNe peut pas contrôler l’IDE MacrosContrôle complet de l’IDENe peut rien ajouter. Fourni en code source Add-insContrôle complet de l’IDE Compilé (performance et protection des sources) Permet d’ajouter : Des tool windows, Des commandes, Des pages d’Options Ne peut pas ajouter: Nouveaux types de documents, Nouveaux type de projets, Moteurs de debugging, Etc PackagesComme Add-In + Possibilités totales d’ajouts Modèle de développement plus complexe Options de personnalisation, Snippets Macros Add-Ins Packages

22 Le télécharger : http://go.microsoft.com/fwlink/?LinkId=73702 L’installer Le découvrir : http://www.dslfactory.org Nous allons nous concentrer sur le T4, et les DSL Tools

23 Visual Studio 2005 VS 2005 SDK DSL Tools Package VS 2005 DSL pour. geometryCreator Code, Doc Fichiers de config GeometryEditor Auteur de DSL (Utilise LanguageGeomery.sln) Utilisateur de DSL (Manipule GeometryEditor.sln) et des.geometryCreator) Utilisateur final de GeometryEditor crée génère produit Framework CreatorTools Framework FW

24

25

26 Classe Propriété Agrégation Référence héritage

27 Forme (Géométrique) Décorateur icone Décorator textuel Forme à compartiment Lignes d’eau Boite à outils Explorateur de modèle

28 Il est possible de : décider comment représenter une classe Forme géométrique, Image, Boite avec des compartiments, mais aussi Diagramme, SwimLane, Port décider comment représenter une relation (compartiment, connecteur) Avoir des décorateurs (textuels dont le texte peut corresponde à une propriété), Icône. Leur visibilité peut être conditionnelle

29 Etendue du DSL Par les classes partielles de C# 2.0 Et la « double dérivation » Simple Normal Expert Plate-forme Etendue du DSL

30 Modeling Modeling Validation Text Templating Shell Modeling Diagram Directive processor Classes, Relations, enums, validation de la multiplicité, propriétés, Sérialisation Diagramme Formes Connecteur Boite à outils, menu contextuel, Explorateur de modèles, Doc, View, Package Maps Templates T4 Règles de cohérence et de validation Code sur mesure pour les commandes, personnalisation du designer … Code sur mesure

31

32

33

34

35

36

37 Les DSL graphiques : Améliorent la communication Le code généré est adapté et fonctionne (si le DSL est bon) Le « recueilleur du besoin » peut les utiliser Ils capitalisent un processus Les DSL peuvent être développés de manière incrémentale, à partir de code déjà écrit Les DSL Tools permettent déjà d’aller loin dans la création d’un DSL Ensuite, il y a différents niveaux de personnalisation On peut même s’interfacer avec VS 2005 …

38 Informations sur les DSL Tools (en anglais) http://msdn.microsoft.com/vstudio/dsltools/default.aspxhttp://msdn.microsoft.com/vstudio/dsltools/default.aspx (Home page) http://msdn.microsoft.com/vstudio/dsltools/default.aspx http://forums.microsoft.com/msdn/showforum.aspx?forumid=61&siteid=1 VS 2005 SDK (Septembre 2006) http://go.microsoft.com/fwlink/?LinkId=73702 Site de la communauté française sur les DSL Tools (Lab, Forum, Blogs, snippets, téléchargements) http://www.dslfactory.org/http://www.dslfactory.org/, avec le Lab en français (compter 1 journée) http://www.dslfactory.org/ Site des architectes de Microsoft France http://www.microsoft.com/france/msdn/architects/industrialisation.mspx A paraitre chez Addison Wesley vers le mois de mai / juin 2007, un livre de Steve Cook, Gareth Jones, Stuart Kent et Alan Wills qui devrait s’appeler : « Domain Specific Development with Visual Studio DSL Tools » Scoop

39


Télécharger ppt "Fil rouge : éditeur de dessins en WPF Les Custom Tools de VS2005 Comment çà marche ? Les Custom Tools de VS2005 Comment çà marche ? Utilisons notre DSL."

Présentations similaires


Annonces Google