> Apologies, I haven't read your code yet, so I might have asked something
>   obvious in the below.  You are "on a roll" Laurent!  It all sounds good!
>
> On approximately 3/21/2004 11:02 AM, came the following characters from
> the keyboard of Laurent ROCHER:
>
> > I continue my work on refactoring Win32::GUI code.
> > I have made lot of change :
> >   - Add some more methods for controls
>
> Would this happen to include RightClick and DblRightClick ?

Yes those events are handle for control supporting then.
Generaly, Common Control (TreeView, ...) support them via standard notify
code (NM_RCLICK, NM_RDBLCLK).
Basic control (button, label, textfield, ...) have sometime specific message
for that but don't work for every control.

However, all control receive standard window mouse event (WM_MOUSEMOVE,
WM_LBUTTONDOWN, WM_LBUTTONUP, ...).
Those events are handle by MouseMove, MouseDown, MouseUp event.
It's possible to add RMouseDown, RMouseUp, MMouseDown, MMouseUp for Right
and Middle button click.
Click/DblClick event are different than standard mouse event, it's control
dependent.

Event name isn't unified, for sample :
- Graphic generate LButtonDown instead MouseDown and have a RButtonDown
event didn't exist for other control.
- Listbox have a Click event when receive LBN_SELCHANGE. A Change event
should be nicer.
I don't change this for compatibility reason.

>
> >      Each event is fire by a unique DoEvent method (same concept
DoEventNEM
> > with arglist).
> >      DoEvent handle NEM and OEM event call. (UEM?)
>
> This sounds more efficient.  UEM doesn't exist yet, it is what I named a
> concept that would seem to unify OEM, NEM, and Aldo's next generation
> event model.

Yes all event firing code using only one function (easier to change, add
model event).

>
> I think the big interface change with Aldo's next generation event model
> was the addition of the window widget object reference as a parameter to
> the event sub.  Neither OEM nor NEM passed that, so you can't add it
> easily without being incompatible.  It would be useful, though, to have
> the object reference as a parameter but would require a new flag to
> indicate that the -on* and -event defined subs were expecting the new
> parameter (which should probably be the first parameter).
>
> So I'm not sure if you should call your new DoEvent UEM quite yet, but
> it seems a good foundation step in that direction.

NEM event always send window self reference as first parameter.
I don't think it's usefull for OEM event because function use window name.
It's a good reason to use NEM event ;o)
But, it's possible to add a new event model option switch for do that.
Something like  -eventmodel => [both, byref, byname, byname_self].
byname_self is same than byname but with a self as first parameter.

A global SetEventModel can be usefull for setup default event model (actualy
it's BYNAME by default).

> >   - Try Write code for NotifyIcon and Accelerator NEM handling (not
tested
> > yet)
>
> Thanks, I'll take a look at this when I get a chance.  Since I'd gone a
> certain distance in converting to NEM in my project, and didn't want to
> back-out all that code, I had actually implemented a couple "wrapper"
> functions that searched for -on* and -event, and processed them in Perl,
>   using eval to create NAME_EVENT (OEM style) subs that call the NEM
> subs, and then eliminated those parameters (-on* and -event) from the
> calls to Win32::GUI, resulting in OEM.  Well, the upshot is that I am
> using NEM style calls, and converting them to OEM on the fly, so I
> should be able to quickly flip-flop my application between using OEM and
> NEM.  Which might help in my testing of your additions, if I get time to
> do that.

Ok, i understand why you want self in OEM ;o)
I have same problem with my TabFrame package (NEM didn't exist when i write
it).
I need to keep all instance in a global hash, doing something like that :

  # Keep object reference
  $Instance{$options{-name}} = $self;

  # Add Click Event
  eval qq(

       sub main::$options{-name}_Click {
           return Win32::GUI::TabFrame->ClickEvent($options{-name});
       }
   );

 sub ClickEvent {
  my $class   = shift;
  my $name    = shift;
  my $element = $Instance{$name};
  ...
}
NEM, it's easier for that ;o)

Actually, with new event model handling, NEM and OEM work in concert (adding
a new event handle, it's handle in both mode).

Laurent.


Reply via email to