Page 1 of 1

Set/GetGadgetItemData for Panel (crossplattform)

Posted: Sun Dec 19, 2010 7:16 pm
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

Re: Set/GetGadgetItemData for Panel (crossplattform)

Posted: Sun Dec 19, 2010 7:47 pm
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

Posted: Mon Dec 20, 2010 12:14 pm
by +18
Thanks for sharing , Simple and cute one :D

Re: Set/GetGadgetItemData for Panel (crossplattform)

Posted: Mon Dec 20, 2010 12:18 pm
by ts-soft
You are welcome :D

The only problem is, if you remove a item, you have a problem :oops:

Re: Set/GetGadgetItemData for Panel (crossplattform)

Posted: Sat Dec 25, 2010 9:16 am
by Hurga
thx ts-soft

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

For the rest - lets hope that fred...

Re: Set/GetGadgetItemData for Panel (crossplattform)

Posted: Wed Mar 16, 2011 2:13 pm
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