Panel Gadget: Support multi-row tabs

Got an idea for enhancing PureBasic? New command(s) you'd like to see?
IdeasVacuum
Always Here
Always Here
Posts: 6425
Joined: Fri Oct 23, 2009 2:33 am
Location: Wales, UK
Contact:

Panel Gadget: Support multi-row tabs

Post by IdeasVacuum »

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.

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
[/size]
IdeasVacuum
If it sounds simple, you have not grasped the complexity.