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