[gme-users] Decorator mouse events and draw functions

Cinthya Lopez Cinthya_K_Lopez at raytheon.com
Wed Feb 14 14:01:55 CST 2018


Hi Kevin,

I have tried the approach you suggested, but when I try to run my decorator, I get an error in the GME console saying:

“Cannot create decorator” and “Couldn’t initialize decorator: Exception from HRESULTS: 0x80737003”

I implemented a BoxDecoratorWrapper class which initializes a “IMgaDecorator boxDecorator” class member in the constructor as you mentioned in your reply. I call the boxDecorator.Initialize() function after with the passed in parameters from my decorator InitializeEx() function.

MyDecorator::InitializeEx(MgaProject p, MgaMetaPart meta, MgaFCO obj, IMgaCommonDecoratorEvents eventSink, ulong parentWnd)
{
   boxDecoratorWrapper = new BoxDecoratorWrapper(project, meta, obj);
}

BoxDecoratorWrapper::BoxDecoratorWrapper(MgaProject p, MgaMetaPart meta, MgaFCO obj)
{
   boxDecorator = (IMgaDecorator)Activator.CreateInstance(Type.GetTypeFromProgID(“MGA.BoxDecorator”));
   boxDecorator.Initialize(p, meta, obj);
}

Then I delegate all function implementations available in the IMgaDecorator interface to the boxDecorator.

Am I doing something wrong here? It looks like a few functions in MyDecorator are being called before the exception occurs…

InitializeEx(..) -> called 3 times
GetFeatures() -> called once
GetPorts() -> called once
SetLocation() -> called twice

Thanks,
Cinthya

From: gme-users [mailto:gme-users-bounces at list.isis.vanderbilt.edu] On Behalf Of Kevin Smyth
Sent: Monday, February 12, 2018 3:34 PM
To: A list for GME users to share thoughts and discuss bugs and fixes. <gme-users at list.isis.vanderbilt.edu>
Subject: [External] Re: [gme-users] Decorator mouse events and draw functions

Hi Cinthya,

I'd follow the "delegation pattern" for Draw, GetPreferredSize et al

The default decorator in GME is the "box decorator" which you can create in C# like:
var delegate = (IMgaDecorator)Activator.CreateInstance(Type.GetTypeFromProgID("MGA.BoxDecorator"));

Be sure to call Initialize

Kevin

On Mon, Feb 12, 2018 at 1:58 PM, Cinthya Lopez <Cinthya_K_Lopez at raytheon.com<mailto:Cinthya_K_Lopez at raytheon.com>> wrote:
Hi,

I am trying to implement a Decorator. I used the SampleDecorator.cs file that comes with GME install. I was able to run the decorator and catch the MouseLeftButtonDoubleClick event, which is the event I am interested in. This sample decorator is doing some drawing functionality that is currently overwriting the icon/appearance I had set for my Atom in my metamodel. The only thing I am interested in doing with the Decorator at this point is to catch the mouse event, but the MgaElementDecorator interface seems to require the implementation of certain functions such as Draw, GetPreferredSize, SetLocation, GetLocation. My question is, is there a way to have the decorator take a default implementation for these functions? Basically I don’t want the decorator to chance anything about the appearance of my Atom, I just want to be able to catch the mouse event and perform some functionality from there.

Thanks,
Cinthya

_______________________________________________
gme-users mailing list
gme-users at list.isis.vanderbilt.edu<mailto:gme-users at list.isis.vanderbilt.edu>
http://list.isis.vanderbilt.edu/cgi-bin/mailman/listinfo/gme-users

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://list.isis.vanderbilt.edu/pipermail/gme-users/attachments/20180214/80619240/attachment.html>


More information about the gme-users mailing list