MDI Gadget pb with resizing child windows

Just starting out? Need help? Post your questions and find answers here.
Mesa
Enthusiast
Enthusiast
Posts: 349
Joined: Fri Feb 24, 2012 10:19 am

MDI Gadget pb with resizing child windows

Post by Mesa »

If i resize a child window, everything is ok, a #PB_Event_SizeWindow event is sent by the child window.

But if i use SetGadgetState() with #PB_MDI_TileHorizontally, wich resizes every child windows at once , no #PB_Event_SizeWindow event is sent at all !

Is that a bug ?

How can i resize gadgets inside child windows automatically when i use SetGadgetState() ?

In the code under, clic on the menu "Windows\tile horizonatally" and see the white scrollareas and then resize each child windows, to see what happens.

Code: Select all

;System from mk-soft 	 
CompilerIf #PB_Compiler_OS = #PB_OS_Windows 
	Import "" 
		PB_Object_EnumerateStart(PB_Objects) 
		PB_Object_EnumerateNext(PB_Objects, *ID.Integer) 
		; 				PB_Object_EnumerateAbort(PB_Objects) 
		PB_Object_GetObject(PB_Object , DynamicOrArrayID) 
		PB_Window_Objects.i 
		; 				PB_Gadget_Objects.i 
		; 				PB_Image_Objects.i 
		; 				PB_Font_Objects.i 
	EndImport 
	
CompilerEndIf 

Procedure GetWindowList(List Windows()) ; Retval count of windows 
	Protected object 
	ClearList(Windows()) 
	PB_Object_EnumerateStart(PB_Window_Objects) 
	While PB_Object_EnumerateNext(PB_Window_Objects, @object) 
		AddElement(Windows()) 
		Windows() = object 
	Wend 
	ProcedureReturn ListSize(Windows()) 
EndProcedure 





;- Main

#WINDOW = 0
#MDI1 = 11
#MDI2 = 22

#MENU = 0




Enumeration
	
	#MENU_TileV
	#MENU_TileH
	#MENU_Cascade
	#MENU_Arrange
	#MENU_Previous
	#MENU_Next
	#MENU_CloseAll
	
	#MENU_FirstMDI
EndEnumeration



#GADGET_MDI = 0

#WindowFlags = #PB_Window_ScreenCentered|#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget
;- Win
If OpenWindow(#WINDOW, 0, 0, 800, 600, "MDI ImageViewer", #WindowFlags)
	If CreateMenu(#MENU, WindowID(#WINDOW))
		
		MenuTitle("Windows")
		MenuItem(#MENU_TileV, "Tile vertically")
		MenuItem(#MENU_TileH, "Tile horizontally")
		MenuItem(#MENU_Cascade, "Cascade")
		MenuItem(#MENU_Previous, "Previous")
		MenuItem(#MENU_Next, "Next")
		MenuItem(#MENU_CloseAll, "Close All")
		
		DisableMenuItem(#Menu, #MENU_TileV, #True)
		DisableMenuItem(#Menu, #MENU_Cascade, #True)
		DisableMenuItem(#Menu, #MENU_Previous, #True)
		DisableMenuItem(#Menu, #MENU_Next, #True)
		DisableMenuItem(#Menu, #MENU_CloseAll, #True)
		
	EndIf
	
	
	
	MDIGadget(#GADGET_MDI, 0, 0, 0, 0, 0, #MENU_FirstMDI, #PB_MDI_AutoSize)
	AddGadgetItem(#GADGET_MDI, #MDI1, "w1",0,#WindowFlags)
	sc1=ScrollAreaGadget(#PB_Any,0,0,WindowWidth(#MDI1),WindowHeight(#MDI1),1000,1000)
	SetGadgetColor(sc1, #PB_Gadget_BackColor, #White)
	CloseGadgetList()
	AddGadgetItem(#GADGET_MDI, #MDI2, "w2",0,#WindowFlags);
	sc2=ScrollAreaGadget(#PB_Any,0,0,WindowWidth(#MDI2),WindowHeight(#MDI2),1000,1000)
	SetGadgetColor(sc2, #PB_Gadget_BackColor, #White)
	CloseGadgetList()
	UseGadgetList(WindowID(#WINDOW))
	Quit = 0
	
	NewList Windows()
	Debug  GetWindowList(Windows())
	ForEach Windows()
		Debug Windows()
	Next
	
	;- loop
	Repeat 
		Event = WaitWindowEvent() 
		Window=EventWindow()
		Menu=EventMenu()
		
		Select Window
				
				;========================= MAIN WIN ==================================
				
			Case #WINDOW
				
				Select Event 
						
					Case #PB_Event_Menu 
						Select Menu
							Case #MENU_CloseAll
								ClearGadgetItems(#GADGET_MDI) 
								
							Case #MENU_Cascade 
								SetGadgetState(#GADGET_MDI,#PB_MDI_Cascade) 
							Case #MENU_TileV 
								SetGadgetState(#GADGET_MDI,#PB_MDI_TileVertically) 
							Case #MENU_TileH 
								SetGadgetState(#GADGET_MDI,#PB_MDI_TileHorizontally) 
								;Doesn't send a #PB_Event_SizeWindow  ! ! ! ;<<================
								; 								PostEvent(#PB_Event_SizeWindow,#MDI1,sc1)
								; 								PostEvent(#PB_Event_SizeWindow,#MDI2,sc2)
							Case #Menu_Next 
								SetGadgetState(#GADGET_MDI, #PB_MDI_Next) 
							Case #MENU_Previous 
								SetGadgetState(#GADGET_MDI,#PB_MDI_Previous) 
							Case #Menu_Arrange 
								SetGadgetState(#GADGET_MDI, #PB_MDI_Arrange         ) 
								
						EndSelect 
						; 				
						
					Case #PB_Event_CloseWindow 
						quit=1
						
						;Case   #PB_Event_SizeWindow  
						
				EndSelect 
				
				;=========================== #MDI1 ======================================
			Case #MDI1
				Select Event	
					Case #PB_Event_CloseWindow 
						CloseWindow(#MDI1)
						
						
					Case   #PB_Event_SizeWindow 
						Debug "resize window "+#MDI1
						ResizeGadget(sc1,#PB_Ignore,#PB_Ignore,
						             WindowWidth(#MDI1),
						             WindowHeight(#MDI1))
						
				EndSelect
				
				;=========================== #MDI2 ======================================
			Case #MDI2
				Select Event	
						
					Case #PB_Event_CloseWindow 
						CloseWindow(#MDI2)
						
					Case   #PB_Event_SizeWindow 
						Debug "resize window "+#MDI2
						ResizeGadget(sc2,#PB_Ignore,#PB_Ignore,
						             WindowWidth(#MDI2),
						             WindowHeight(#MDI2))				 
				EndSelect
				; 				
		EndSelect
		
	Until Quit=1  
EndIf
Mesa.
PeDe
Enthusiast
Enthusiast
Posts: 123
Joined: Sun Nov 26, 2017 3:13 pm
Location: Vienna
Contact:

Re: MDI Gadget pb with resizing child windows

Post by PeDe »

I send an event after the SetGadgetState(), with PostEvent(#PB_Event_SizeWindow, ...) to all MDI child windows.

Peter
Post Reply