Seite 3 von 4

Re: Modul Named GadgetData

Verfasst: 09.11.2015 12:01
von Bisonte
edel hat geschrieben:Wie sieht es mit dem Umbiegen der Freefunktion aus? Denn die wird immer aufgerufen.
Was genau meinst Du mit "Umbiegen der Freefunktion" ?
FreeGadget doch wohl nicht... das wird beim schliessen von Fenstern nicht aufgerufen.

Re: Modul Named GadgetData

Verfasst: 09.11.2015 12:20
von edel
Die interne Funktion aber schon, sofern vorhanden.

Code: Alles auswählen

PrototypeC pFreeGadget(gadget)

Global *oldFree.pFreeGadget 

Import ""
  PB_Gadget_Objects
  PB_Object_GetObject(obj, *gadget) 
EndImport

Structure GadgetVT
   GadgetType.l   
   SizeOf.l     
   *GadgetCallback
   *free.pFreeGadget
EndStructure

Structure Gadget
  handle.i
  *vt.GadgetVT
EndStructure

Procedure GadgetFreeCallback(*Gadget.Gadget)
  Debug "MyFreeCallback"
  If *oldFree
    *oldFree(*Gadget)
  EndIf  
EndProcedure

Procedure InstallOwnFreeCallback(Gadget, cb)
  Protected *Gadget.Gadget = PB_Object_GetObject(PB_Gadget_Objects, Gadget)  
    
  If *Gadget
    *oldFree = *Gadget\vt\free
    *Gadget\vt\free = cb
  EndIf    
  
EndProcedure

Procedure Main()
  
  If OpenWindow(0, 0, 0, 400, 400, "")
    
    ButtonGadget(0, 0, 0, 100, 30, "blank") : InstallOwnFreeCallback(0, @GadgetFreeCallback())
    StringGadget(0, 0, 0, 100, 30, "blank") : InstallOwnFreeCallback(0, @GadgetFreeCallback())
        
    Repeat
    Until WaitWindowEvent() = #PB_Event_CloseWindow  
    
  EndIf
  
EndProcedure: End Main()


Re: Modul Named GadgetData

Verfasst: 09.11.2015 12:55
von Bisonte
Ok... allerdings wird das (ich habe kein Einblick in das SDK beim MAC) dürfte unter Linux schonmal nicht mehr funktionieren.
Dort wird die Struktur (bei Dir "Gadget") anders definiert.

Code: Alles auswählen

typedef struct PB_GadgetStructure
{
  M_GadgetType Gadget;
  M_GadgetType Container;  // Container gadget, as a listIcon can be in a ScrolledWindow and when we use the splittergadget, we get tricked..
  PB_GadgetVT *VT;
  integer UserData;
  integer Data[4];
} PB_Gadget;
In den Windows SDK steht

Code: Alles auswählen

typedef struct PB_GadgetStructure
{
  HWND         Gadget;
  PB_GadgetVT *VT;
  integer      UserData;      // for Get/SetGadgetData
  WNDPROC      OldCallback;   // for PB_Gadget_RegisterDestroy
  integer      Data[4];       // for gadget internal data. (mostly used for front/backcolor and such).
} PB_Gadget;
Ist also noch ein Wert mehr dazwischen (wegen dem vTable)... wie gesagt, wie es beim Mac aussieht, kann ich wegen Fehlens eines solchen nicht sagen.
Aber mit CompilerIF's umdekorieren und dann sollte es dort auch gehen.

Edit : Böser Typo korrigiert ;)

Re: Modul Named GadgetData

Verfasst: 09.11.2015 12:59
von edel
Verstehe das Problem jetzt nicht :?

Re: Modul Named GadgetData

Verfasst: 09.11.2015 13:11
von NicTheQuick
Na du musst die Struktur Gadget ändern, damit es auch unter Linux funktioniert. Zum Beispiel so:

Code: Alles auswählen

Structure Gadget
	handle.i
	CompilerIf #PB_Compiler_OS = #PB_OS_Linux
	*container
	CompilerEndIf
	*vt.GadgetVT
EndStructure

Re: Modul Named GadgetData

Verfasst: 09.11.2015 13:38
von edel
Aber mit ComperIF's umdekorieren und dann sollte es dort auch gehen.
Das stand da noch nicht, da hab ich wohl gerade geantwortet. :lol:

Re: Modul Named GadgetData

Verfasst: 09.11.2015 21:40
von mk-soft
Es gibt jetzt für Linux und Mac eine aktualisierte SDK...
Bei Mac steige ich noch nicht durch. Windows und Linux habe diese schon mal Realisiert.

http://www.purebasic.fr/german/viewtopi ... olorGadget

Re: Modul Named GadgetData

Verfasst: 13.11.2015 22:05
von mk-soft
Update v1.04
Räumt jetzt automatisch die Daten bei CloseWindow oder bei FreeGadget von ContainerGadget auf


Geht doch ganz einfach die Daten zu bereinigen...
Leider nicht unter Mac :cry:

Bugreport http://www.purebasic.fr/english/viewtop ... 24&t=63979

Re: Modul Named GadgetData

Verfasst: 13.12.2015 01:26
von mk-soft
Update v1.05
- Fixed: Läuft jetzt auch unter MacOS
- Added: Überprüfung von PanelGadget (RemoveGadgetItem)

Bei MacOS wird erst beim nächsten Event die Ressourcen freigegeben. Habe es somit mit eine eigenen Event gelöst.

Mit der PB Version 5.41 für Mac werden bei CloseWindow die Ressourcen schon freigeben.
Aber leider nicht bei FreeGadget...

:wink:

Re: Modul Named GadgetData

Verfasst: 19.12.2015 22:06
von GPI
Hiho, ich hab das ganze mal unter PureBasic-CodeArchiv-Rebirth\Gadgets\NamedGadgetData.pbi aufgenommen.