wxMax - Manipulating data during Events

BlitzMax Forums/Brucey's Modules/wxMax - Manipulating data during Events

Peter(Posted 2009) [#1]
During the course of an event I'm trying to manipulate the data of the parent gadget, but it seems that I'm not able to read or write data from or to that very field.

I used to basic_notebook.bmx sample to simple demonstrate what I want to do.

I added clicked1 to MyFrame and try to manipulate it in function OnButton1. But the results are not what I would like to achieve.

SuperStrict

Framework wx.wxApp
Import wx.wxPanel
Import wx.wxFrame
Import wx.wxButton
Import wx.wxTextCtrl
Import wx.wxListBox
Import wx.wxNotebook
Import brl.standardio

Type MyApp Extends wxApp

	Field frame:MyFrame

	Method OnInit:Int()

		frame = MyFrame(New MyFrame.Create(Null, -1, "Basic Notebook App", 200, 200))
		
		SetTopWindow(frame)
		
		frame.show()
	
		Return True
	
	End Method

End Type


Type MyFrame Extends wxFrame

	Field notebook:wxNotebook
	Field listbox:wxListBox
	Field textlog:wxTextCtrl
	
	Field clicked1:Int
	
	Const BOOKCTRL:Int = 100
	Const BUTTON1:Int = 101
	Const BUTTON2:Int = 102
	Const LISTBOX1:Int = 103
	Const TEXTBOX1:Int = 104
	Const FILE_QUIT:Int = wxID_EXIT
	Const HELP_ABOUT:Int = wxID_ABOUT

	Method OnInit()
	
		clicked1 = 5

		Local fileMenu:wxMenu = wxMenu.CreateMenu()
		Local helpMenu:wxMenu = wxMenu.CreateMenu()
		Local menuBar:wxMenuBar = wxMenuBar.CreateMenuBar()
		
		helpMenu.Append(HELP_ABOUT, "&About...~tF1", "Show about dialog")
		fileMenu.Append(FILE_QUIT, "E&xit~tAlt-X", "Quit this program")
		
		menuBar.Append(fileMenu, "&File")
		menuBar.Append(helpMenu, "&Help")

		SetMenuBar(menuBar)

		CreateStatusBar(2)
		SetStatusText("So far so good.", 0)
		SetStatusText("Welcome!", 1)


		' the notebook
		notebook = wxNotebook.CreateNotebook(Self, BOOKCTRL)
		
		' a panel
		Local panel:wxPanel = wxPanel.CreatePanel(notebook)
		
		' the first page
		notebook.AddPage(panel, "Tab1", True)
		
		' add buttons to the panel
		wxButton.CreateButton(panel, BUTTON1, "Button &1", 50, 30, 100, 30)
		wxButton.CreateButton(panel, BUTTON2, "Button &2", 50, 80, 100, 30)

		' a new panel
		panel = wxPanel.CreatePanel(notebook)
		
		Local choices:String [] = [ "Washington", "Adams", "Jefferson", "Madison", ..
  			"Lincoln", "One", "Two", "Three", "Four"]
		
		listbox = wxListBox.CreateListBox(panel, LISTBOX1, choices, 0, 0, 150, 90, wxLB_SORT | wxLB_EXTENDED)

		' add the second page
		notebook.AddPage(panel, "Tab2", False)
		
		' another new panel
		panel = wxPanel.CreatePanel(notebook)

		Local mysizer:wxBoxSizer = wxBoxSizer.CreateBoxSizer(wxVERTICAL)
		panel.SetSizer(mysizer)
		
		textlog = wxTextCtrl.CreateTextCtrl(panel, TEXTBOX1, "Log~n", 0, 250, 100, 50, wxTE_MULTILINE)
		mysizer.Add(textlog, 1, wxEXPAND | wxALL, 5)
		
		notebook.AddPage(panel, "Tab3", False)


		Connect(FILE_QUIT, wxEVT_COMMAND_MENU_SELECTED, OnQuit)
		Connect(HELP_ABOUT, wxEVT_COMMAND_MENU_SELECTED, OnAbout)
		Connect(BUTTON1, wxEVT_COMMAND_BUTTON_CLICKED, OnButton1)
		Connect(BUTTON2, wxEVT_COMMAND_BUTTON_CLICKED, OnButton2)
		Connect(LISTBOX1, wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, OnListBoxDoubleClick)
		
	End Method	

	Function OnQuit(event:wxEvent)
		' true is to force the frame to close
		wxWindow(event.parent).Close(True)
	End Function
	
	Function OnAbout(event:wxEvent)
		
	End Function
	
	Function OnButton1(event:wxEvent)
	Local xx:Int
		
		xx = MyFrame(event.parent).clicked1
		If wxMessageBox("Click1", "Click", wxOK | wxICON_INFORMATION, wxWindow(event.parent)) Then
			xx =+ 1
		EndIf
		MyFrame(event.parent).clicked1 = xx
		
		Print xx + ", " + MyFrame(event.parent).clicked1
		
	End Function

	Function OnButton2(event:wxEvent)
		wxMessageBox("Click2 !!", "Click", wxOK | wxICON_INFORMATION, wxWindow(event.parent))
	End Function
	
	Function OnListBoxDoubleClick(event:wxEvent)
		MyFrame(event.parent).textlog.AppendText("ListBox Double click String is: ~n" + ..
			wxCommandEvent(event).GetString() + "~n")
	End Function
	
End Type


New MyApp.run()


Could someone please point me to the correct solution of this problem?

Peter


Brucey(Posted 2009) [#2]
You have a typo here :
			xx =+ 1


In BlitzMax, you want to use :+ instead :-)


Peter(Posted 2009) [#3]
Damn!

If I only wouldn't be to lazy to write:

			xx = xx + 1


This stuff was bugging me for hours yesterday.

I wonder why the compiler accepts "=+" .

Peter


Brucey(Posted 2009) [#4]
xx = +1

is valid... since it is the same as saying

xx = 1


Of course, in Java, C++ etc, it means something else entirely.

Is it working okay now?


Peter(Posted 2009) [#5]
Sorry, I forget to mention. It's working now.

Peter