why would a gouped window close the app

BlitzMax Forums/MaxGUI Module/why would a gouped window close the app

D4NM4N(Posted 2006) [#1]
i want to create sub windows for things like item propertes. Weird thing is even though the new window is grouped to the main window:

1) execution still continues in the main window (i dont want this)
2) clicking X on the sub-window closes the main window as well.

Any ideas?


Grisu(Posted 2006) [#2]
1) Disable the main menu and all active gadgets.

2) You need to check if the subwindow is existant or not:

Case EVENT_WINDOWCLOSE
If Mysubwindow:TGadget <> Null then
hidegadget( Mysubwindow )
else
end
endif

P.S.:
A bit sourcecode is mostly helpful when asking questions.


Brucey(Posted 2006) [#3]
Check EVENT_WINDOWCLOSE against EventSource() - which will tell you *which* window raised the close event. Then you can act on it.

Tricky with 1) ... On Mac I was able to move the "current" loop to the child-window by making the child-window modal, but on Windows/Linux opening the child-window didn't seem to have this effect...
But I think if you use event hooks to handle your UI you might be able to get around this issue...


impixi(Posted 2006) [#4]
@D-Grafix

Here's some simple code that might help:

SuperStrict

Local window:TGadget = CreateWindow("Main Window",50, 50, 240, 240)
Local button:TGadget = CreateButton("Click Me", 5, 5, 100, 50, window)

Local modal:TGadget = CreateWindow("Modal Window",50, 50, 200, 200, window, WINDOW_TITLEBAR | WINDOW_HIDDEN)

While WaitEvent()
	Select EventID()
		Case EVENT_WINDOWCLOSE
			If EventSource() = window Then End
			If EventSource() = modal
				EnableGadget button
				EnableGadget window
				HideGadget modal
			EndIf	
		Case EVENT_GADGETACTION
			DisableGadget button
			DisableGadget window
			ShowGadget modal
	End Select
Wend


EDIT: If you want the main window's gadgets to have a 'greyed-out' appearance when the subwindow is displayed you will need to disable each one accordingly. Updated the code sample to reflect this.


impixi(Posted 2006) [#5]
And if you want to actually suspend main window-related execution you'll need to structure your primary loop appropriately. Example:

SuperStrict

Local window:TGadget = CreateWindow("Main Window",50, 50, 240, 240)
Local button:TGadget = CreateButton("Click Me", 5, 5, 100, 50, window)
Local label:TGadget = CreateLabel("0", 5, 60, 100, 50, window)

Local modal:TGadget = CreateWindow("Modal Window",50, 50, 200, 200, window, WINDOW_TITLEBAR | WINDOW_HIDDEN)

Local timer:TTimer = CreateTimer(1)
Local oldtime:Int = 0
Local value:Int = 0

Local DoMainWindowStuff:Int = True

Repeat

	PollEvent	

	Select EventID()
		Case EVENT_WINDOWCLOSE
			If EventSource() = window Then End
			If EventSource() = modal
				EnableGadget button
				EnableGadget window
				DoMainWindowStuff = True
				HideGadget modal
			EndIf	
		Case EVENT_GADGETACTION
			DoMainWindowStuff = False
			DisableGadget button
			DisableGadget window
			ShowGadget modal
	End Select

	If DoMainWindowStuff
		Local t:Int = TimerTicks(timer)
		If t > oldtime
			oldtime = t
			value :+ 1
			If value > 1000 Then value = 0
			SetGadgetText(label, value)
		EndIf
	EndIf
	
Forever



D4NM4N(Posted 2006) [#6]
great, thanks guys!