An Avanade Blogging Community

Welcome to An Avanade Blogging Community Sign in | Join | Help
in Search

El Bruno

[DSL] Menus personalizados (2da Parte)

Buenas

otro pequeño post para completar el post que inicialmente mostraba cómo crear menus personalizados para nuestros diagramas creados con las Domain Specific Language Tools.

Un detalle que no comenté en su día es que, en el archivo de creación de menús (.ctc), una de las opciones que podemos especificar son una serie de FLAGS que determinarán el comportamiento del menú. Por ejemplo, en la siguiente definición, la línea 9 determina que este menú por defecto aparecerá en modo no visible y que será posible cambiar la propiedad Visible del mismo.

1 // Add additional button definitions here. 2 // Command, Parent Group, Priority, Image, Type, Visibility, Text; 3 //guidCmdSet:duplicate, guidCmdSet:grpidContextMain, 0x0100, OI_NOID, BUTTON, DIS_DEF, "&Display Selected Item Information"; 4 guidCmdSet:duplicate, // Command ID 5 guidCmdSet:grpidContextMain, // Group ID 6 0x0100, // Priority 7 IconDuplicate, // Icon ID 8 BUTTON, // Button Type 9 DEFAULTINVISIBLE | DYNAMICVISIBILITY, // Flags 10 "&Duplicate", // Command Text 11 "&Duplicate", // Menu Text 12 "Duplicate", // ToolTip Text 13 "Duplicate", // Command Well Text 14 "Duplicate", // English Command Name 15 "Duplicate"; // Localized Command Name

El listado completo de opciones con las que podemos los componentes de un menú lo podemos encontrar en http://msdn2.microsoft.com/en-us/library/bb166581(VS.80).aspx.

Luego en la implementación de la función que se encarga de evaluar si se debe mostrar o no, un elemento del menú; implemento una pequeña función que por defecto deja invisible el elemento del menú, a menos que el elemento selecccionado sea un Shape del tipo UserShape.

1 /// <summary> 2 /// Called when [duplicate menu display action]. 3 /// </summary> 4 /// <param name="sender">The sender.</param> 5 /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param> 6 internal void OnDuplicateMenuDisplayAction(object sender, EventArgs e) 7 { 8 MenuCommand command = sender as MenuCommand; 9 10 // The popmenu command is by default disabled 11 command.Visible = false; 12 command.Enabled = false; 13 14 foreach (object selectedObject in this.CurrentSelection) 15 { 16 // validate if the selected element is a User Shape 17 if (selectedObject is ElBruno.Dsl15.UserShape) 18 { 19 command.Visible = true; 20 command.Enabled = true; 21 break; 22 } 23 } 24 }

De esta forma logramos que en el menú contextual que tenemos disponible sobre nuestro diagrama; la opción Duplicate sólo este visible cuando despleguemos el menú contextual sobre un Usuario. En el siguiente video la demo:


Video: DSL Tools - Menu

 

Descarga de codigo fuente: http://geeks.ms/files/folders/elbruno/entry67773.aspx

 

Saludos @ La Finca

El Bruno

 

Share this post :
Crossposting from ElBruno.com
Published Wednesday, January 30, 2008 7:25 PM by elbruno
Filed Under: , ,

Comments

No Comments
Anonymous comments are disabled