27/8/2007 16:03
El Bruno
[DSL] How to: crear Shapes con textos multilinea (no viene de fabrica ...)
Buenas
siguiendo con las experiencias con DSL, y tratando de ser más amigable con mi usuario final, hoy mostraré algo que se les pasó a los chicos de Redmond es muy importante y visualmente impactante: las cajas de texto multidioma. Pues si, parece un chiste, pero lamentablemente los Shapes que traen de fábrica las Domain Specific Language Tools para Visual Studio 2005 no permiten de una forma fácil y rápida la configuración para que los mismos soporten textos multilinea.
Introducción
Pero como siempre la solución es muy simple y partiendo del ejemplo que dejé en este post, donde teníamos un modelo con Users y Comments, modificaré a los comentarios para soporten textos multilínea.
Esta es la vista original de nuestro modelo
Si editamos uno de los comentarios y agregamos el siguiente texto:
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Pellentesque fringilla augue. Nulla vehicula est vitae augue. Aliquam in ipsum eget tellus iaculis consequat. Sed tristique congue enim. Pellentesque dictum interdum sem. Ut varius neque. Ut rutrum accumsan ligula. Nunc euismod urna vel lorem tempor feugiat. Fusce in nibh. Nam nec augue. Nulla aliquam lectus sit amet neque. Sed vestibulum consequat nunc. Curabitur a magna. Aenean hendrerit. Nulla sed nibh. Curabitur lectus libero, ultrices sed, sodales vitae, imperdiet in, risus. Suspendisse potenti. Integer et sapien. In ultrices mattis massa.
Veremos que nuestro comentario muestra en una sola línea todo el texto que hemos configurado dentro del mismo:
Solución
La solución a este problema consiste en extender la funcionalidad por defecto que trae un Shape en las Domain Specific Language Tools, sobreescribir la funcion InitializeDecorators() modificando uno de los elementos TextField que contiene el mismo y configurandolo para que soporte textos multilínea.
1 . Seleccionar el Shape Comment y modificar la propiedad Generate Double Derived = True.
Nota: esta propiedad permite que podamos sobreescribir la función InitializeDecorators(), entre otras cosas.
2. Agregamos una nueva clase a nuestro proyecto llamada Shapes.partial.cs.
3. Dentro de esta clase agregamos el siguiente código, donde obtengo el TextField correspondiente al comentario, habilito el modo MultipleLines del mismo y lo posiciono dentro del Shape del comentario (parent) respetando los espacios del título y del ícono.
1 using System;
2 using System.Collections.Generic;
3 using System.Text;
4 using Microsoft.VisualStudio.Modeling.Diagrams;
5
6 namespace ElBruno.Dsl15
7 {
8
9 public partial class CommentShape
10 {
11 protected override void InitializeDecorators(IList<ShapeField> shapeFields, IList<Decorator> decorators)
12 {
13 base.InitializeDecorators(shapeFields, decorators);
14 TextField commentField = (TextField)ShapeElement.FindShapeField(shapeFields, "Comment");
15
16 // disable autosize and enable multiline
17 commentField.DefaultAutoSize = false;
18 commentField.DefaultMultipleLine = true;
19
20 // clear existing anchors, set up custom anchoring below.
21 commentField.AnchoringBehavior.Clear();
22 commentField.AnchoringBehavior.SetTopAnchor(AnchoringBehavior.Edge.Top, 0.4); // bigger on top to display shape title and icon
23 commentField.AnchoringBehavior.SetLeftAnchor(AnchoringBehavior.Edge.Left, 0.1);
24 commentField.AnchoringBehavior.SetRightAnchor(AnchoringBehavior.Edge.Right, 0.1);
25 commentField.AnchoringBehavior.SetBottomAnchor(AnchoringBehavior.Edge.Bottom, 0.1);
26 }
27 }
28
29 }
30
4. Compilamos (generando previamente el código desde el Solution Explorer) y en modo debug podremos ver que nuestros comentarios son multilinea y ademas se acomodan al tamaño del Shape del comentario. Es interesante editar el texto dentro del comentario para ver como el espacio de edición se acomoda a los márgenes que hemos definido en el código.
Y para finalizar un video con el funcionamiento del mismo y obviamente el código de ejemplo descargable desde aquí (gracias Geeks.ms).
Video: DSL Tools - MultipleLine Shape
Saludos @ Lisboa again
El Bruno
Crossposting from
ElBruno.com
Archivado en: Visual Studio,VSTS,DSL Tools
Comparte este post: