Lock Panel Tabs - PB 4 (Multi OS)

Share your advanced PureBasic knowledge/code with the community.
Num3
PureBasic Expert
PureBasic Expert
Posts: 2812
Joined: Fri Apr 25, 2003 4:51 pm
Location: Portugal, Lisbon
Contact:

Lock Panel Tabs - PB 4 (Multi OS)

Post by Num3 »

Code updated for 5.20+

I just hacked this under PB4, has it uses no API calls it will work under all OS's too (when PB4 is released) :P

Code: Select all

Procedure DisablePanelTab(Panel_Gadget,Panel_Tab)
  panel_data=GetGadgetData(Panel_Gadget)
  a=%1
  a << Panel_Tab 
  panel_data= panel_data ! a 
  SetGadgetData(Panel_Gadget,panel_data) 
EndProcedure 

Procedure CheckPanelItem(Panel_Gadget)
  
  current=GetGadgetState(Panel_Gadget)
  panel_data=GetGadgetData(Panel_Gadget)
  
  again:
  
  a=%1
  a << current
  
  If panel_data & a > 0
    
    If current+1>CountGadgetItems(Panel_Gadget)-1
      current=0
    Else
      current+1
    EndIf
    SetGadgetState(Panel_Gadget,current)
    Goto again:
  Else
    ProcedureReturn
  EndIf
  
  
EndProcedure


If OpenWindow(0, 0, 0, 322, 220, "PanelGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  PanelGadget     (0, 8, 8, 306, 203)
  AddGadgetItem (0, -1, "Panel 1")
  PanelGadget (1, 5, 5, 290, 166)
  AddGadgetItem(1, -1, "Sub-Panel 1")
  AddGadgetItem(1, -1, "Sub-Panel 2")
  AddGadgetItem(1, -1, "Sub-Panel 3")
  CloseGadgetList()
  AddGadgetItem (0, -1,"Panel 2")
  ButtonGadget(2, 10, 15, 120, 24,"Enable Sub-Panel 2")
  ButtonGadget(3, 10, 45, 120, 24,"Disable Sub-Panel 2")
  CloseGadgetList()
  
  DisablePanelTab(1,1) ; Disable Tab 1, Panel 1
  
  Repeat 
    
    EventID  =WaitWindowEvent()
    MenuID   =EventMenu()
    GadgetID =EventGadget()
    WindowID =EventWindow()
    
    If EventID
      
      Select GadgetID
        Case 1 ; Panel Gadget 1 pressed
          CheckPanelItem(1)
          
        Case 2
          DisablePanelTab(1,1) ; We call it again to toggle enabled
          Delay(100)
        Case 3
          DisablePanelTab(1,1) ; We call it again to toggle enabled
          Delay(100)
          
      EndSelect
      
    EndIf
    
    
  Until WaitWindowEvent() = #PB_Event_CloseWindow
  
EndIf
The code is still a bit buggy, when the lock/unlock events are generated by a gadget...

I'll improve it later on, by adding an extra variable to the code!