Set/GetGadgetItemData for Panel (crossplattform)

Share your advanced PureBasic knowledge/code with the community.
User avatar
ts-soft
Always Here
Always Here
Posts: 5756
Joined: Thu Jun 24, 2004 2:44 pm
Location: Berlin - Germany

Set/GetGadgetItemData for Panel (crossplattform)

Post by ts-soft »

The tip is simple but i hope it is useful

Code: Select all

;======= Set/GetGadgetItemData for Panel ==================
;  Author:                Thomas Schulz (ts-soft)
;  Date:                  December 19, 2010
;  Target OS:             All
;  Target Compiler:       Requires PureBasic 4.50
;==========================================================


EnableExplicit

Structure _PanelGadgetItem_
  Map Item.i()
EndStructure

Global NewMap _PanelItemData_._PanelGadgetItem_()

Procedure SetPanelItemData(Gadget, Item, Value)
  _PanelItemData_(Str(Gadget))\Item(Str(Item)) = Value
EndProcedure

Procedure GetPanelItemData(Gadget, Item)
  ProcedureReturn _PanelItemData_(Str(Gadget))\Item(Str(Item))
EndProcedure

;=================== END =================================

; example (portions stolen from PureBasic.chm)
Define evGadget

If OpenWindow(0, 0, 0, 322, 220, "PanelGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  PanelGadget(0, 8, 8, 306, 203)
  AddGadgetItem (0, 0, "Panel 1")
  SetPanelItemData(0, 0, 100)
  PanelGadget (1, 5, 5, 290, 166)
  AddGadgetItem(1, 0, "Sub-Panel 1")
  SetPanelItemData(1, 0, 1000)
  AddGadgetItem(1, 1, "Sub-Panel 2")
  SetPanelItemData(1, 1, 2000)
  AddGadgetItem(1, 2, "Sub-Panel 3")
  SetPanelItemData(1, 2, 3000)
  CloseGadgetList()
  AddGadgetItem (0, 1, "Panel 2")
  SetPanelItemData(0, 1, 200)
  ButtonGadget(2, 10, 15, 80, 24,"Button 1")
  ButtonGadget(3, 95, 15, 80, 24,"Button 2")
  CloseGadgetList()
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow : Break
      Case #PB_Event_Gadget
        evGadget = EventGadget()
        Select evGadget
          Case 0, 1
            If EventType() = #PB_EventType_LeftClick
              Debug GetPanelItemData(evGadget, GetGadgetState(evGadget))
            EndIf
        EndSelect
    EndSelect
  ForEver
EndIf


Greetings - Thomas
PureBasic 5.73 | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Old bugs good, new bugs bad! Updates are evil: might fix old bugs and introduce no new ones.
Image
User avatar
ts-soft
Always Here
Always Here
Posts: 5756
Joined: Thu Jun 24, 2004 2:44 pm
Location: Berlin - Germany

Re: Set/GetGadgetItemData for Panel (crossplattform)

Post by ts-soft »

Or use this one, with original-PB-syntax:

Code: Select all

;======= Set/GetGadgetItemData for Panel ==================
;  Author:                Thomas Schulz (ts-soft)
;  Date:                  December 19, 2010
;  Target OS:             All
;  Target Compiler:       Requires PureBasic 4.50
;==========================================================

EnableExplicit

Structure _PanelGadgetItem_
  Map Item.i()
EndStructure

NewMap _PanelItemData_._PanelGadgetItem_()

Procedure _SetGadgetItemData(Gadget, Item, Value)
  Shared _PanelItemData_._PanelGadgetItem_()

  If GadgetType(Gadget) = #PB_GadgetType_Panel
    _PanelItemData_(Str(Gadget))\Item(Str(Item)) = Value
  Else
    ProcedureReturn SetGadgetItemData(Gadget, Item, Value)
  EndIf
EndProcedure

Procedure _GetGadgetItemData(Gadget, Item)
  Shared _PanelItemData_._PanelGadgetItem_()

  If GadgetType(Gadget) = #PB_GadgetType_Panel
    ProcedureReturn _PanelItemData_(Str(Gadget))\Item(Str(Item))
  Else
    ProcedureReturn GetGadgetItemData(Gadget, Item)
  EndIf
EndProcedure

Macro SetGadgetItemData(Gadget, Item, Value)
  _SetGadgetItemData(Gadget, Item, Value)
EndMacro

Macro GetGadgetItemData(Gadget, Item)
  _GetGadgetItemData(Gadget, Item)
EndMacro

Procedure DeletePanelGadgetItemData(Gadget)
  Shared _PanelItemData_._PanelGadgetItem_()
  
  ClearMap(_PanelItemData_(Str(Gadget))\Item())
  DeleteMapElement(_PanelItemData_(), Str(Gadget)) 
EndProcedure
PureBasic 5.73 | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Old bugs good, new bugs bad! Updates are evil: might fix old bugs and introduce no new ones.
Image
+18
Enthusiast
Enthusiast
Posts: 228
Joined: Fri Oct 24, 2008 2:07 pm

Post by +18 »

Thanks for sharing , Simple and cute one :D
User avatar
ts-soft
Always Here
Always Here
Posts: 5756
Joined: Thu Jun 24, 2004 2:44 pm
Location: Berlin - Germany

Re: Set/GetGadgetItemData for Panel (crossplattform)

Post by ts-soft »

You are welcome :D

The only problem is, if you remove a item, you have a problem :oops:
PureBasic 5.73 | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Old bugs good, new bugs bad! Updates are evil: might fix old bugs and introduce no new ones.
Image
Hurga
Enthusiast
Enthusiast
Posts: 148
Joined: Thu Jul 17, 2003 2:53 pm
Contact:

Re: Set/GetGadgetItemData for Panel (crossplattform)

Post by Hurga »

thx ts-soft

For my current project its fine. I do not remove items
thx

For the rest - lets hope that fred...
qqqnnn
User
User
Posts: 22
Joined: Mon Jan 11, 2010 7:45 pm

Re: Set/GetGadgetItemData for Panel (crossplattform)

Post by qqqnnn »

This error :cry:
;======= Set/GetGadgetItemData for Panel ==================
; Author: Thomas Schulz (ts-soft)
; Date: December 19, 2010
; Target OS: All
; Target Compiler: Requires PureBasic 4.50
;==========================================================


EnableExplicit

Structure _PanelGadgetItem_
Map Item.i()
EndStructure

Global NewMap _PanelItemData_._PanelGadgetItem_()

Procedure SetPanelItemData(Gadget, Item, Value)
_PanelItemData_(Str(Gadget))\Item(Str(Item)) = Value
EndProcedure

Procedure GetPanelItemData(Gadget, Item)
ProcedureReturn _PanelItemData_(Str(Gadget))\Item(Str(Item))
EndProcedure

;=================== END =================================

; example (portions stolen from PureBasic.chm)
Define evGadget

If OpenWindow(0, 0, 0, 322, 220, "PanelGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
PanelGadget(0, 8, 8, 306, 203)
AddGadgetItem (0, 0, "Panel 1")
SetPanelItemData(0, 0, 100)
PanelGadget (1, 5, 5, 290, 166)
AddGadgetItem(1, 0, "Sub-Panel 1")
SetPanelItemData(1, 0, 1000)
AddGadgetItem(1, 1, "Sub-Panel 2")
SetPanelItemData(1, 1, 2000)
AddGadgetItem(1, 2, "Sub-Panel 3")
SetPanelItemData(1, 2, 3000)
CloseGadgetList()
AddGadgetItem (0, 1, "Panel 2")
SetPanelItemData(0, 1, 200)
ButtonGadget(2, 10, 15, 80, 24,"Button 1")
ButtonGadget(3, 95, 15, 80, 24,"Button 2")
CloseGadgetList()

RemoveGadgetItem(1,1)

Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow : Break
Case #PB_Event_Gadget
evGadget = EventGadget()
Select evGadget
Case 0, 1
If EventType() = #PB_EventType_LeftClick
Debug GetPanelItemData(evGadget, GetGadgetState(evGadget))
EndIf
EndSelect
EndSelect
ForEver
EndIf
Post Reply