wxMax - Events

BlitzMax Forums/Brucey's Modules/wxMax - Events

Peter(Posted 2009) [#1]
Is there anywhere a list which EVENTs are supported by wxMax?

And which controls react to which EVENTs. Or is someone able to point to the source files where this information could be extracted from.

Peter


TaskMaster(Posted 2009) [#2]
I always just dig through brucey's source to find the events. :)


Peter(Posted 2009) [#3]
I did now some testing with a wxDialog and the wxEVT_ENTER_WINDOW and managed to capture this event.

What I like to do is do capture a mouse event (mouse click like on a button) on a wxStaticBitmap but there seems no mechanism build into wxMax that emmit events an sxStaticBitmap.

-- Peter


Brucey(Posted 2009) [#4]
Each Type in the hierarchy can capture certain events. Some are specific to a particular control, and others are more generic.

wxMouseEvents should be available to most wxWindow subclasses.
I checked the wxStaticBitmap source, and it looks like I've implemented event handling, so it should work (for all events available to it's parent types - like wxControl and wxWindow - as well as the mouse events).


DavidDC(Posted 2009) [#5]
Or you could use a wxBitmapButton?


Peter(Posted 2009) [#6]
Brucey,

I tried to capture to Mouse Click Event (wxEVT_LEFT_DOWN) but as far as I can tell nothing happens.

SuperStrict

Framework wx.wxApp
Import wx.wxFrame
Import wx.wxDialog
Import wx.wxPanel
Import wx.wxStaticBitmap
Import brl.StandardIO

Type MyApp Extends wxApp
'variables
  Field frame:MyFrame

' *** Methods & Functions

   Method OnInit:Int()
    wxImage.AddHandler(New wxPNGHandler)
    ' create and show the main frame
    frame = MyFrame(New MyFrame.Create(Null, -1, "wxStaticBitmap Event ..
              sample", ,,420, 300, wxDEFAULT_FRAME_STYLE))
    frame.show()
'   Connect(frame.GetID(), wxEVT_ENTER_WINDOW, enter_window)
    Return True
  End Method
	
' Function enter_window(event:wxEvent)
'   Print "call: wxEVT_ENTER_WINDOW, Main Window"
' End Function	

End Type

Type MyFrame Extends wxFrame
'variables
  Field dialog:wxDialog
  Const aaBITMAP01:Int = 100

' *** Methods & Functions

Method OnInit:Int()
  'variables
    Local panel:wxPanel
    Local image:wxBitmap
    Local bitmap:wxStaticBitmap
    Local ok:Int
	
  'code
    panel = New wxPanel.Create(Self)
    image:wxBitmap = New wxBitmap.Create()
    ok = image.LoadFile("bd01.png", wxBITMAP_TYPE_PNG)
    If ok Then
      bitmap = New wxStaticBitmap.Create(panel,  aaBITMAP01, image)
    End If
		
'   Connect(aaBITMAP01, wxEVT_ENTER_WINDOW, enter)
'   Connect(panel.GetID(), wxEVT_ENTER_WINDOW, enter_panel)
    Connect(aaBITMAP01, wxEVT_LEFT_DOWN, leftdown)
'   ConnectAny(wxEVT_LEFT_DOWN, leftdown)		
'   Connect(panel.GetID(), wxEVT_LEFT_DOWN, leftdown_panel)
  End Method	
	
  Function enter(event:wxEvent)
    Print "call: wxEVT_ENTER_WINDOW, wxStaticBitmap"
  End Function
	
  Function enter_panel(event:wxEvent)
    Print "call: wxEVT_ENTER_WINDOW, wxPanel"
  End Function

  Function leftdown(event:wxEvent)
    Print "call: wxEVT_LEFT_DOWN, wxStaticBitmap"
  End Function
	
  Function leftdown_panel(event:wxEvent)
    Print "call: wxEVT_LEFT_DOWN, wxPanel"
  End Function
	
End Type

New MyApp.run()


As you can see I tried different things, but there is no reaction.

Maybe I'm doing this completely wrong. At the moment I have no clue how to solve this.

-- Peter


Brucey(Posted 2009) [#7]
Try adding :

Import wx.wxMouseEvent

and change the Connect() to :

   bitmap.ConnectAny(wxEVT_LEFT_DOWN, leftdown, Null, Self)


There are two ways to connect an event - depending on how certain functionality is intended to be used.
The one I've posted uses what is known as an "event sink", where you Connect directly to the widget that you want to catch events for, but also pass in another widget, which "handles" the event.

In the event callback function, you can use "event.sink" instead of "event.parent" to refer to the handling widget - whereas event.parent will refer to the static bitmap.


I realise it is a little confusing at first, and in general you will mostly use the Connect() call as you have written it - but for Mouse capture you sometimes need to apply the Connect() directly to the child widget.
The other way to avoid that, is to subclass the staticbitmap and do your Connects in your subclass's OnInit() method.

Things are a little more complicated in wxWidgets world... but with that you get more control of how everything works - imo...

I hope this helps a little bit.


Peter(Posted 2009) [#8]
Brucey,

thanks for your help.

I still tried it yesterday after your post and it worked.

Today I reread what you wrote and thought over it some more and slowly I begin to understand how this event stuff works.

-- Peter