Seite 1 von 1

[Module] GadgetDataExModule.pbi

Verfasst: 18.10.2017 19:02
von Thorsten1867
Extended Gadget Data

Im Gegensatz zu SetGadgetData/GetGadgetData kann man mit GadgetDataEx mehrere Daten unter einem spezifischen Namen (Key$) mit dem Gadget speichern. Mittels des Namens können die verschiedenen Daten wieder abgerufen werden.

Code: Alles auswählen

;/ === GadgetDataExModule.pbi [PB 5.6x] ===
;/ Extended Gadget Data
;/ October 2017 by Thorsten1867

  ; Gadget::SetData()        - Saves the specified value with the specified gadget (similar to: SetGadgetData())
  ; Gadget::GetData()        - Returns the data value previously stored for this gadget  (similar to: GetGadgetData())
  ; Gadget::SetIntegerData() - Stores an integer number under the name (Key$) for this gadget
  ; Gadget::GetIntegerData() - Returns the integer number previously stored under the name (Key$) for this gadget
  ; Gadget::SetFloatData()   - Stores a floating point number under the name (Key$) for this gadget (max. 10 digits)
  ; Gadget::GetFloatData()   - Returns the floating point number previously stored under the name (Key$) for this gadget
  ; Gadget::SetStringData()  - Stores a string under the name (Key$) for this gadget
  ; Gadget::GetStringData()  - Returns the string previously stored under the name (Key$) for this gadget
  ; Gadget::FreeData()       - Deletes the stored data for this gadget

DeclareModule Gadget
  Declare SetData(GadgetID.i, Value.i)
  Declare.i GetData(GadgetID.i)
  Declare SetIntegerData(GadgetID.i, Key$, Value.i)
  Declare.i GetIntegerData(GadgetID.i, Key$)
  Declare SetFloatData(GadgetID.i, Key$, Value.f)
  Declare.f GetFloatData(GadgetID.i, Key$)
  Declare SetStringData(GadgetID.i, Key$, Value$)
  Declare.s GetStringData(GadgetID.i, Key$)
  Declare FreeData(GadgetID.i)
EndDeclareModule

Module Gadget
  
  ;{ ----- Definitions -----
  Structure ExDataStructure
    Value.i
    Map String.s()
  EndStructure
  
  Global NewMap ExDG.ExDataStructure()
  ;} -----------------------
  
  Procedure SetData(GadgetID.i, Value.i)
    Define GId$ = Str(GadgetID)
    
    If FindMapElement(ExDG(), GId$)
      ExDG()\Value = Value
    Else
      AddMapElement(ExDG(), GId$)
      ExDG()\Value = Value
    EndIf
 
  EndProcedure
  
  Procedure.i GetData(GadgetID.i)
    ProcedureReturn ExDG(Str(GadgetID))\Value
  EndProcedure  
  
  
  Procedure SetIntegerData(GadgetID.i, Key$, Value.i)
    Define GId$ = Str(GadgetID)
    
    If FindMapElement(ExDG(GId$)\String(), Key$)
      ExDG(GId$)\String() = Str(Value)
    Else
      AddMapElement(ExDG(GId$)\String(), Key$)
      ExDG(GId$)\String() = Str(Value)
    EndIf
    
  EndProcedure
  
  Procedure.i GetIntegerData(GadgetID.i, Key$)
    ProcedureReturn Val(ExDG(Str(GadgetID))\String(Key$))
  EndProcedure 
  
  
  Procedure SetFloatData(GadgetID.i, Key$, Value.f)
    Define GId$ = Str(GadgetID)
    
    If FindMapElement(ExDG(GId$)\String(), Key$)
      ExDG(GId$)\String() = StrF(Value)
    Else
      AddMapElement(ExDG(GId$)\String(), Key$)
      ExDG(GId$)\String() = StrF(Value)
    EndIf
    
  EndProcedure
  
  Procedure.f GetFloatData(GadgetID.i, Key$)
    ProcedureReturn ValF(ExDG(Str(GadgetID))\String(Key$))
  EndProcedure 
  
  
  Procedure SetStringData(GadgetID.i, Key$, Value$)
    Define GId$ = Str(GadgetID)
    
    If FindMapElement(ExDG(GId$)\String(), Key$)
      ExDG(GId$)\String() = Value$
    Else
      AddMapElement(ExDG(GId$)\String(), Key$)
      ExDG(GId$)\String() = Value$
    EndIf
    
  EndProcedure
  
  Procedure.s GetStringData(GadgetID.i, Key$)
    ProcedureReturn ExDG(Str(GadgetID))\String(Key$)
  EndProcedure  
  
  
  Procedure FreeData(GadgetID.i)
    DeleteMapElement(ExDG(), Str(GadgetID))
  EndProcedure
  
EndModule

CompilerIf #PB_Compiler_IsMainFile
  
  #Window = 0
  #ComboBox = 1
  #Button   = 2
  
  If OpenWindow(#Window, 200, 200, 120, 70, "Test Extended Gadget Data")
    ComboBoxGadget(#ComboBox, 10, 10, 110, 20)
    AddGadgetItem(#ComboBox, -1, "Apple")
    AddGadgetItem(#ComboBox, -1, "Pear")
    AddGadgetItem(#ComboBox, -1, "Banana")
    ButtonGadget(#Button, 35, 35, 60, 25, "Apply")
  EndIf
  SetGadgetState(#ComboBox, 0)
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        Break
      Case #PB_Event_Gadget
        Select EventGadget()
          Case #Button
            Debug  "Last: " + Gadget::GetStringData(#ComboBox, "Fruit")
            Debug "Current: " + GetGadgetText(#ComboBox)
            Gadget::SetData(#ComboBox, GetGadgetState(#ComboBox))
            Gadget::SetStringData(#ComboBox, "Fruit", GetGadgetText(#ComboBox))
          Case #ComboBox
            If EventType() = #PB_EventType_Change
              Debug "--> " + GetGadgetState(#ComboBox)
            EndIf
        EndSelect
    EndSelect
   
  ForEver
  
  Debug "============================="
  Debug "Last Combobox state: "+Gadget::GetData(#ComboBox)
  Debug "Last Selection: "+Gadget::GetStringData(#ComboBox, "Fruit")
  Debug "=============================" 
  
  Gadget::FreeData(#ComboBox)
  
CompilerEndIf

Re: [Module] GadgetDataExModule.pbi

Verfasst: 18.10.2017 21:42
von mk-soft
Works :allright:

gibt es aber schon einmal 'MyGadgetData'. Allerdings ohne Float and Double
Kannst vielleicht bei Dir einfügen das die Daten automatisch freigegeben werden wenn das Gadget gelöscht wurde.

ALL OS: Link: http://www.purebasic.fr/english/viewtop ... gadgetdata