Panel Gadget: Support multi-row tabs
Posted: Tue Jun 20, 2017 12:01 am
On touch-screens, especially high-resolution tablets, the default forward-back button control is too fiddly. The obvious answer to this is multi-row tabs. Most Windows applications seem to use this feature and another great advantage is that the User can see all the tabs all of the time.
Note, if Win API is used, PB returns an incorrect value for the tab bar height.
[/size]
Note, if Win API is used, PB returns an incorrect value for the tab bar height.
Code: Select all
Enumeration
#Win
#Txt
#Panel
#Font16R
EndEnumeration
LoadFont(#Font16R, "Arial", 16, #PB_Font_HighQuality)
Declare Win()
Declare Wait()
Declare ResizeGdgs()
Procedure Win()
;#-------------
If OpenWindow(#Win, 0, 0, 600, 400, "Multi-Row Tabs", #PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_SizeGadget)
TextGadget(#Txt, 5, 5, 300, 20, "")
PanelGadget(#Panel, 0, 30, 600, 370)
SetWindowLongPtr_(GadgetID(#Panel), #GWL_STYLE, GetWindowLongPtr_(GadgetID(#Panel), #GWL_STYLE) | #TCS_MULTILINE)
SetGadgetFont(#Panel, FontID(#Font16R))
AddGadgetItem(#Panel, -1, "Tab 0000")
AddGadgetItem(#Panel, -1, "Tab 0001")
AddGadgetItem(#Panel, -1, "Tab 0002")
AddGadgetItem(#Panel, -1, "Tab 0003")
AddGadgetItem(#Panel, -1, "Tab 0004")
AddGadgetItem(#Panel, -1, "Tab 0005")
AddGadgetItem(#Panel, -1, "Tab 0006")
AddGadgetItem(#Panel, -1, "Tab 0007")
AddGadgetItem(#Panel, -1, "Tab 0008")
AddGadgetItem(#Panel, -1, "Tab 0009")
AddGadgetItem(#Panel, -1, "Tab 0010")
AddGadgetItem(#Panel, -1, "Tab 0011")
AddGadgetItem(#Panel, -1, "Tab 0012")
AddGadgetItem(#Panel, -1, "Tab 0013")
AddGadgetItem(#Panel, -1, "Tab 0014")
AddGadgetItem(#Panel, -1, "Tab 0015")
AddGadgetItem(#Panel, -1, "Tab 0016")
AddGadgetItem(#Panel, -1, "Tab 0017")
AddGadgetItem(#Panel, -1, "Tab 0018")
AddGadgetItem(#Panel, -1, "Tab 0019")
AddGadgetItem(#Panel, -1, "Tab 0020")
AddGadgetItem(#Panel, -1, "Tab 0021")
AddGadgetItem(#Panel, -1, "Tab 0022")
AddGadgetItem(#Panel, -1, "Tab 0023")
AddGadgetItem(#Panel, -1, "Tab 0024")
CloseGadgetList()
EndIf
EndProcedure
Procedure ResizeGdgs()
;#--------------------
Protected iWinW.i, iWinH.i, iPbTabH.i, iApiTabH.i, iApiRows.i, rTabSize.RECT
iWinW = WindowWidth(#Win)
iWinH = WindowHeight(#Win)
ResizeGadget(#Panel, 0, 30, iWinW, iWinH - 30)
SendMessage_(GadgetID(#Panel), #TCM_GETITEMRECT, 0, rTabSize)
iApiRows = SendMessage_(GadgetID(#Panel), #TCM_GETROWCOUNT, 0, 0)
iPbTabH = GetGadgetAttribute(#Panel, #PB_Panel_TabHeight)
iApiTabH = (rTabSize\Bottom - rTabSize\Top) * iApiRows
SetGadgetText(#Txt, "Pb Tab Hgt: " + Str(iPbTabH) + " Api Tab Hgt: " + Str(iApiTabH))
EndProcedure
Procedure Wait()
;#--------------
Protected iExit.i = #False
Repeat
Select WaitWindowEvent(1)
Case #PB_Event_SizeWindow: ResizeGdgs()
Case #PB_Event_CloseWindow: iExit = #True
EndSelect
Until iExit = #True
EndProcedure
Win()
Wait()
End