¿Cómo crear un menú?
Para la creación de un menú agregar las siguientes referencias al proyecto (Marcos Crispino, 2008).
Artech.Architecture.UI.Framework
Artech.Common
Artech.Common.Framework
System.Drawing
En el archivo Package.cs agregar las siguientes directivas:
using Artech.Architecture.Common.Packages;
using Artech.Architecture.Common.Services;
using Artech.Architecture.UI.Framework.Packages;
using System.Runtime.InteropServices;
using System;
Asegurarse que la clase Package.cs herede de la clase AbstractPackageUI.
public class Package : AbstractPackageUI
Agregar en la clase Package.cs el siguiente atributo:
public static Guid guid = typeof(Package).GUID;
Crear la clase CommandKeys.cs
Agregar la siguiente directiva:
using Artech.Common.Framework.Commands;
Agregar el siguiente atributo:
private static CommandKey cmdMiComando =
new CommandKey(Package.guid, “MiPrimerMenu”);
Agregar la siguiente propiedad:
public static CommandKey MiPrimerMenu {
get { return cmdMiComando; }
}
Crear la clase CommandManager.cs
Agregar las siguientes directivas:
using Artech.Architecture.UI.Framework.Helper;
using Artech.Architecture.UI.Framework.Services;
using Artech.Common.Framework.Commands;
using System.Windows.Forms;
Asegurarse que la clase CommandManager.cs herede de la clase CommandDelegator:
class CommandManager:CommandDelegator
Crear los métodos siguientes:
public bool ExecMiComando(CommandData data){
MessageBox.Show(“Mi primer Menú!”); return true;
}
private bool QueryMiComando(CommandData data,
ref CommandStatus status) {
status.State = CommandState.Disabled;
if(UIServices.KB != null && UIServices.KB.CurrentKB != null){
status.State = CommandState.Enabled;
}
return true;
}
Crear el constructor y agregar el método AddCommand().
public CommandManager() {
AddCommand(CommandKeys.MiPrimerMenu,
new ExecHandler(ExecMiComando),
new QueryHandler(QueryMiComando));
}
En el archivo Package.cs agregar la siguiente línea:
public override void Initialize(IGxServiceProvider services){
base.Initialize(services);
AddCommandTarget(new CommandManager());
}
Por último en el archivo GeneXusPackage.package agregar:
<Commands>
<CommandDefinition id=’MiPrimerMenu’></CommandDefinition>
</Commands>
<Menus>
<Menu type=’menubar’>
<Popup id=’MiPrimerMenu’ name=’MiPrimerMenu’ insertBefore=’Help’>
<Command refid=’MiPrimerMenu’/>
</Popup>
</Menu>
</Menus>
Para ver el resultado (ver figura 5) generar la solución del proyecto y abrir directamente el GeneXus Ev2 o presionar F5 (Modo depuración) desde la IDE de Microsoft Visual C# 2005 Express Edition.
Figura 5. Mi primer menú integrado a la IDE GeneXus Ev2. Fuente: Elaboración propia.
¿Cómo llamar una ventana desde el menú contextual?
Para el desarrollo de la extensión es necesario invocarlo desde la IDE de GeneXus Ev2. En éste caso se invocará a la ventana principal de la extensión desde el menú contextual de Other Tool Windows, para ello ir al menú View y la opción Other Tool Windows del menú contextual.
Agregar las siguientes referencias al proyecto:
Artech.Architecture.Common
Artech.Architecture.UI.Framework
Artech.Common
Artech.Common.Framework
Artech.Common.Properties
Artech.FrameworkDE
Artech.Udm.Framework
System
System.Drawing
System.Windows.Forms
Crear la clase MiPrimeraVentana.cs
Agregar las siguientes directivas:
using System;
using System.Windows.Forms;
using System.Drawing;
using Artech.FrameworkDE;
using Artech.Architecture.UI.Framework.Packages;
using Artech.Architecture.UI.Framework.Services;
using Artech.Common.Framework.Commands;
using Artech.Common.Framework.Selection;
using System.Runtime.InteropServices;
Conseguir el identificador único global.
Agregar el identificador único global:
namespace Identificador.Packages.MiPrimeraExtension
{
[Guid(“64984d1c-72f2-4e69-9440-654c9a08eee9”)]
public class MiPrimeraVentana{}
}
Asegurarse que la clase herede de las siguientes clases:
AbstractToolWindow, ISelectionListener.
public class MiPrimeraVentana : AbstractToolWindow,ISelectionListener{}
Agregar los siguientes atributos:
private Label mensaje;
public static Guid guid;
En el constructor de la clase agregar la siguiente línea:
public MiPrimeraVentana(){
this.InitializeComponent();
UIServices.TrackSelection.Subscribe(Guid.NewGuid(), this);
}
Agregar el siguiente constructor statico:
static MiPrimeraVentana(){
MiPrimeraVentana.guid = typeof(MiPrimeraVentana).GUID;
}
Agregar el método InitializeComponent:
public void InitializeComponent(){
this.mensaje = new Label();
this.mensaje.Name = “lblMensaje”;
this.mensaje.Text = “Mi primera ventana!”;
this.mensaje.Location = new Point(5, 20);
this.mensaje.Font = new Font(“Verdana”, 16F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.mensaje.Size = new Size(100, 30);
this.Controls.Add(this.mensaje);
this.SuspendLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
Por último agregar el siguiente método:
public bool OnSelectChange(ISelectionContainer sc){return true;}
Crear la clase CommandKeys.cs
Agregar la siguiente directiva:
using Artech.Common.Framework.
Commands;
Agregar el siguiente atributo:
private static CommandKey cmdMiComando =
new CommandKey(MiPrimeraVentana.guid, “MiPrimeraVentana”);
Agregar la siguiente propiedad:
public static CommandKey PrimeraVentana {
get { return cmdMiComando; }
}
Crear la clase CommandManager.cs
Agregar las siguientes directivas:
using Artech.Architecture.UI.Framework.Helper;
using Artech.Architecture.UI.Framework.Services;
using Artech.Common.Framework.Commands;
Asegurarse que herede de la clase: CommandDelegator
class CommandManager:CommandDelegator{}
Agregar los siguientes métodos:
public bool ExecMiComando(CommandData data){
UIServices.ToolWindows.SelectToolWindow(MiPrimeraVentana.guid);
return true;
}
private bool QueryMiComando(CommandData data, ref CommandStatus status){
status.State = CommandState.Disabled;
if (UIServices.KB != null && UIServices.KB.CurrentKB != null){
status.State = CommandState.Enabled;
}
return true;
}
Agregar el constructor:
public CommandManager(){
AddCommand(CommandKeys.PrimeraVentana,
new ExecHandler(ExecMiComando),
new QueryHandler(QueryMiComando));
}
Editar la clase Package.cs
Agregar las siguientes directivas:
using Artech.Architecture.Common.Packages;
using Artech.Architecture.Common.Services;
using Artech.Architecture.UI.Framework.Packages;
using Artech.Architecture.UI.Framework.Services;
using Artech.Common.Framework.Selection;
using System.Runtime.InteropServices;
using Artech.Architecture.UI.Framework.Controls;
using System;
Asegurarse que la clase herede de: AbstractPackageUI
public class Package : AbstractPackageUI{}
Agregar el siguiente atributo:
private MiPrimeraVentana ventana;
Agregar la propiedad sobrecargado Name:
public override string Name{
get { return “MiPrimeraExtension”; }
}
Agregar el método sobrecargado CreateToolWindow:
public override IToolWindow CreateToolWindow(Guid toolWindowId){
if (toolWindowId.Equals(MiPrimeraVentana.guid)){
if (ventana == null){
ventana = new MiPrimeraVentana();
}
return ventana;
}
return base.CreateToolWindow(toolWindowId);
}
Editar el archivo GeneXusPackage.package
Agregar la siguientes líneas:
<ToolWindows>
<ToolWindow id =’64984d1c-72f2-4e69-9440- 654c9a08eee9’ title=’MiPrimeraVentana’ mdi=’true’/>
</ToolWindows>
NOTA: El identificador único global que aparece en la clase MiPrimeraVentana.cs debe coincidir con el identificador único global del id del ToolWindow en el archivo GeneXusPackage.package.
Para ver el resultado en la IDE de GeneXus Ev2 (ver figura 6), vamos al menú View, Other Tool Windows, opción MiPrimeraVentana.
Figura 6. MiPrimeraVentana. Fuente: Elaboración propia.
0 comentarios:
Publicar un comentario