Just doing some major updates to ElementaryReports, so I thought I'd share some routines I use to manipulate various splitters for alternative views and to reduce 'initial' flicker caused by setting control positions...
Code:
;The following swaps the specified splitter
Procedure nxSplitter_Swap(id,refresh=#True)
Protected hWnd, *nx._nxsplitter
;Check we have a valid splitter control, signified by the presence of the window property.
If IsGadget(id)
hWnd = GadgetID(id)
*nx = GetProp_(hWnd, @"nxSPLITTER_PROP")
If *nx ;A valid splitter control.
temp=*nx\gad1
*nx\gad1=*nx\gad2
*nx\gad2=temp
If refresh
nxSplitter_PositionGadgets(*nx)
EndIf
EndIf
EndIf
EndProcedure
;The following exchanges the specified splitter gadget's first split
Procedure nxSplitter_Exchange(id,id2,refresh=#True)
Protected hWnd, *nx._nxsplitter, hWnd2, *nx2._nxsplitter
;Check we have a valid splitter control, signified by the presence of the window property.
If IsGadget(id) And IsGadget(id2)
hWnd = GadgetID(id)
hWnd2 = GadgetID(id2)
*nx = GetProp_(hWnd, @"nxSPLITTER_PROP")
*nx2 = GetProp_(hWnd2, @"nxSPLITTER_PROP")
If *nx And *nx2 ; both valid splitter control.
SetParent_(GadgetID(*nx\gad1),hWnd2)
SetParent_(GadgetID(*nx2\gad1),hWnd)
temp=*nx\gad1
*nx\gad1=*nx2\gad1
*nx2\gad1=temp
If refresh
nxSplitter_PositionGadgets(*nx)
nxSplitter_PositionGadgets(*nx2)
EndIf
EndIf
EndIf
EndProcedure
;The following directly sets the splitter state
Procedure nxSplitter_SetPos(id,state,refresh=#True)
Protected hWnd, *nx._nxsplitter
;Check we have a valid splitter control, signified by the presence of the window property.
If IsGadget(id)
hWnd = GadgetID(id)
*nx = GetProp_(hWnd, @"nxSPLITTER_PROP")
If *nx ;A valid splitter control.
*nx\splitterPos = state
If refresh
nxSplitter_PositionGadgets(*nx)
EndIf
EndIf
EndIf
EndProcedure
Procedure RefreshView(mode)
Select mode
Case 0 ; Split
If nx_GetGadgetAttribute(#MiddleSplitter,#nxSplitter_FirstGadget)<>#TopSplitter
nxSplitter_Swap(#MiddleSplitter,#False)
EndIf
If nx_GetGadgetAttribute(#TopSplitter,#nxSplitter_FirstGadget)=#StudentContainer
nxSplitter_Exchange(#TopSplitter,#BottomSplitter,#False)
nxSplitter_Swap(#TopSplitter,#False)
EndIf
nxSplitter_SetPos(#MiddleSplitter,MiddleBorderPosition,#False)
nx_SetGadgetState(#MiddleSplitter,#nxSplitter_AnchorSecondGadget)
nx_SetGadgetState(#BottomSplitter,StudentListWidth)
nx_SetGadgetState(#TopSplitter,MiddleHorizontalPosition)
Case 1 ; Multi
If nx_GetGadgetAttribute(#MiddleSplitter,#nxSplitter_FirstGadget)<>#BottomSplitter
nxSplitter_Swap(#MiddleSplitter,#False)
EndIf
If nx_GetGadgetAttribute(#TopSplitter,#nxSplitter_FirstGadget)<>#StudentContainer
nxSplitter_Swap(#TopSplitter,#False)
nxSplitter_Exchange(#TopSplitter,#BottomSplitter,#False)
EndIf
nx_SetGadgetState(#MiddleSplitter,MiddleBorderPosition)
nxSplitter_SetPos(#TopSplitter,StudentListWidth,#False)
nx_SetGadgetState(#TopSplitter,#nxSplitter_AnchorFirstGadget)
nx_SetGadgetState(#BottomSplitter,MiddleHorizontalPosition)
Case 2 ; Full
If nx_GetGadgetAttribute(#MiddleSplitter,#nxSplitter_FirstGadget)<>#TopSplitter
nxSplitter_Swap(#MiddleSplitter,#False)
EndIf
If nx_GetGadgetAttribute(#TopSplitter,#nxSplitter_FirstGadget)<>#StudentContainer
nxSplitter_Swap(#TopSplitter,#False)
nxSplitter_Exchange(#TopSplitter,#BottomSplitter,#False)
EndIf
nxSplitter_SetPos(#MiddleSplitter,MiddleBorderPosition,#False)
nx_SetGadgetState(#MiddleSplitter,#nxSplitter_AnchorSecondGadget)
nxSplitter_SetPos(#TopSplitter,StudentListWidth,#False)
nx_SetGadgetState(#TopSplitter,#nxSplitter_AnchorFirstGadget)
nx_SetGadgetState(#BottomSplitter,MiddleHorizontalPosition)
Case 3 ; Elementary
If nx_GetGadgetAttribute(#MiddleSplitter,#nxSplitter_FirstGadget)<>#TopSplitter
nxSplitter_Swap(#MiddleSplitter,#False)
EndIf
If nx_GetGadgetAttribute(#TopSplitter,#nxSplitter_FirstGadget)<>#StudentContainer
nxSplitter_Swap(#TopSplitter,#False)
nxSplitter_Exchange(#TopSplitter,#BottomSplitter,#False)
EndIf
nx_SetGadgetState(#MiddleSplitter,MiddleBorderPosition)
nx_SetGadgetState(#TopSplitter,StudentListWidth)
nx_SetGadgetState(#BottomSplitter,FavouritesTreeWidth)
EndSelect
EndProcedure
The last example shows usage. Hope you find them useful.
