Splitter and Resizing

Just starting out? Need help? Post your questions and find answers here.
mark5009
User
User
Posts: 22
Joined: Sun Oct 19, 2014 10:47 pm

Splitter and Resizing

Post by mark5009 »

Hi.

I'm playing around with multiple splitters and can't get it quite right.

Below is some example code, but it has problems, all in the right pane. For example, the sub-panels aren't centered, the lower box isn't sized correctly, the resize behavior isn't quite right. Looking at the PB IDE, I get that this stuff is possible, but I am coming up short in how to get it done.

Any help appreciated.

TIA .. mark.

Code: Select all

#WinOpts = #PB_Window_SystemMenu | #PB_Window_SizeGadget

Declare ResizeGadgetsmainWin()
Global mainWin

Enumeration
  #winMain
  #liLeft
  #edLog
  #pnLeft
  #contRight  
  #pnRight
  #SplitA
  #SplitB
EndEnumeration

#SplitAOpts = #PB_Splitter_Vertical
#minPnRight = 600
#minEdLog   = 200

Procedure OpenmainWin(x=50, y=50, w=1200, h=800)  
  mainWin = OpenWindow(#winMain, x, y, w, h, "write-o-matic", #WinOpts)
  
  PanelGadget(#pnLeft, 0, 0, 0, 0)        
    AddGadgetItem(#pnLeft, -1, "P1")
    AddGadgetItem(#pnLeft, -1, "P2")
  CloseGadgetList()
  
  ContainerGadget(#contRight, 0, 0, 0, 0)
    PanelGadget(#pnRight, 0, 0, 0, 0)        
      AddGadgetItem(#pnRight, -1, "Tab1")
      AddGadgetItem(#pnRight, -1, "Tab2")
    CloseGadgetList()    
    EditorGadget(#edLog, 0, 0, 0, 0)
    SplitterGadget(#SplitB, 0, 0, 0, 0, #pnRight, #edLog)
    SetGadgetAttribute(#SplitB, #PB_Splitter_FirstMinimumSize,  #minPnRight)
    SetGadgetAttribute(#SplitB, #PB_Splitter_SecondMinimumSize, #minEdLog)
  CloseGadgetList()
    
  SplitterGadget(#SplitA, 0, 0, w, h, #pnLeft, #contRight, #SplitAOpts)
EndProcedure

Procedure mainWinResize()
  Protected.i fww, fwh, bnd=5
  fww = WindowWidth(#winMain) - bnd
  fwh = WindowHeight(#winMain) - bnd
  ResizeGadget(#SplitA, bnd, bnd, fww, fwh)
  ResizeGadget(#SplitB, bnd, bnd, fww, fwh)
EndProcedure

OpenmainWin()
mainWinResize()
Repeat
  Event = WaitWindowEvent()
     
  Select Event
    Case #PB_Event_SizeWindow
      mainWinResize()
      
  EndSelect  
Until Event = #PB_Event_CloseWindow

RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4663
Joined: Sun Apr 12, 2009 6:27 am

Re: Splitter and Resizing

Post by RASHAD »

Code: Select all

#SplitAOpts = #PB_Splitter_Vertical
#minPnRight = 400
#minEdLog   = 200

Procedure OpenmainWin(x=50, y=50, w=1200, h=800) 
  mainWin = OpenWindow(#winMain, x, y, w, h, "write-o-matic", #WinOpts)
 
  PanelGadget(#pnLeft, 0, 0, 0, 0)       
    AddGadgetItem(#pnLeft, -1, "P1")
    AddGadgetItem(#pnLeft, -1, "P2")
  CloseGadgetList()
 
  ContainerGadget(#contRight, 0, 0, 0, 0)
    PanelGadget(#pnRight, 0, 0, 0, 0)       
      AddGadgetItem(#pnRight, -1, "Tab1")
      AddGadgetItem(#pnRight, -1, "Tab2")
    CloseGadgetList()   
    EditorGadget(#edLog, 0, 0, 0, 0)
        SplitterGadget(#SplitB, 0, 0, 0, 0, #pnRight, #edLog)
     SetGadgetAttribute(#SplitB, #PB_Splitter_FirstMinimumSize,  #minPnRight)
     SetGadgetAttribute(#SplitB, #PB_Splitter_SecondMinimumSize, #minEdLog)
 
  CloseGadgetList()
 
   
  SplitterGadget(#SplitA, 0, 0, w, h, #pnLeft, #contRight, #SplitAOpts)
EndProcedure

Procedure mainWinResize()
  Protected.i fww, fwh, bnd=5
  fww = WindowWidth(#winMain) - 2*bnd
  fwh = WindowHeight(#winMain) - 2*bnd
  ResizeGadget(#SplitA, bnd, bnd, fww, fwh)
  ResizeGadget(#SplitB, 0,0, fww, fwh)
EndProcedure
Egypt my love
User avatar
Josh
Addict
Addict
Posts: 1183
Joined: Sat Feb 13, 2010 3:45 pm

Re: Splitter and Resizing

Post by Josh »

What are you doing with the ContainerGadget?

Code: Select all

#WinOpts = #PB_Window_SystemMenu | #PB_Window_SizeGadget

Declare ResizeGadgetsmainWin()
Global mainWin

Enumeration
  #winMain
  #liLeft
  #edLog
  #pnLeft
  #contRight  
  #pnRight
  #splVert
  #splHorz
EndEnumeration

#splVertOpts = #PB_Splitter_Vertical
#minPnRight = 600
#minEdLog   = 200

Procedure OpenmainWin(x=50, y=50, w=1200, h=800)  

  mainWin = OpenWindow(#winMain, x, y, w, h, "write-o-matic", #WinOpts)
  
  PanelGadget(#pnLeft, 0, 0, 0, 0)        
    AddGadgetItem(#pnLeft, -1, "P1")
    AddGadgetItem(#pnLeft, -1, "P2")
  CloseGadgetList()
  
  PanelGadget(#pnRight, 0, 0, 0, 0)        
    AddGadgetItem(#pnRight, -1, "Tab1")
    AddGadgetItem(#pnRight, -1, "Tab2")
  CloseGadgetList()    

  EditorGadget(#edLog, 0, 0, 0, 0)

  SplitterGadget(#splHorz, 0, 0, 0, 0, #pnRight, #edLog)
  SetGadgetAttribute(#splHorz, #PB_Splitter_SecondMinimumSize, #minEdLog)
    
  SplitterGadget(#splVert, 0, 0, w, h, #pnLeft, #splHorz, #splVertOpts)

EndProcedure

Procedure mainWinResize()
  Protected.i fww, fwh, bnd=5

  fww = WindowWidth(#winMain) - 2*bnd
  fwh = WindowHeight(#winMain) - 2*bnd
  ResizeGadget(#splVert, bnd, bnd, fww, fwh)

EndProcedure

OpenmainWin()
mainWinResize()
Repeat
  Event = WaitWindowEvent()
     
  Select Event
    Case #PB_Event_SizeWindow
      mainWinResize()
      
  EndSelect  
Until Event = #PB_Event_CloseWindow
sorry for my bad english
mark5009
User
User
Posts: 22
Joined: Sun Oct 19, 2014 10:47 pm

Re: Splitter and Resizing

Post by mark5009 »

Thanks, guys, much appreciated.
The ContainerGadget was a leftover artefact from an earlier attempt.

Code: Select all

  
  SplitterGadget(#splVert, 0, 0, w, h, #pnLeft, #splHorz, #splVertOpts)
Huh. This is cool. I didn't realize the Splitter could act like that.

Many thanks .. mark.
Post Reply