-{ Copyright (C) 2005 Bas Steendijk and Peter Green\r
- For conditions of distribution and use, see copyright notice in zlib_license.txt\r
- which is included in the package\r
- ----------------------------------------------------------------------------- }\r
- \r
-unit lcoregtklaz;\r
-{$mode delphi}\r
-interface\r
- \r
-uses baseunix,unix,glib, gdk, gtk,lcore,forms,fd_utils,classes;\r
-//procedure lcoregtklazrun;\r
-const\r
- G_IO_IN=1;\r
- G_IO_OUT=4;\r
- G_IO_PRI=2;\r
- G_IO_ERR=8;\r
-\r
- G_IO_HUP=16;\r
- G_IO_NVAL=32;\r
-type\r
- tlaztimerwrapperinterface=class(ttimerwrapperinterface)\r
- public\r
- function createwrappedtimer : tobject;override;\r
-// procedure setinitialevent(wrappedtimer : tobject;newvalue : boolean);override;\r
- procedure setontimer(wrappedtimer : tobject;newvalue:tnotifyevent);override;\r
- procedure setenabled(wrappedtimer : tobject;newvalue : boolean);override;\r
- procedure setinterval(wrappedtimer : tobject;newvalue : integer);override;\r
- end;\r
-\r
-procedure lcoregtklazinit;\r
-implementation\r
- uses\r
- ExtCtrls;\r
-{$I unixstuff.inc}\r
-var\r
- giochannels : array[0..absolutemaxs] of pgiochannel;\r
-\r
-function iocallback(source:PGIOChannel; condition:TGIOCondition; data:gpointer):gboolean;cdecl;\r
-// return true if we want the callback to stay\r
-var\r
- fd : integer ;\r
- fdsrlocal , fdswlocal : fdset ;\r
- currentasio : tlasio ;\r
-begin\r
- fd := g_io_channel_unix_get_fd(source);\r
- fd_zero(fdsrlocal);\r
- fd_set(fd,fdsrlocal);\r
- fdswlocal := fdsrlocal;\r
- select(fd+1,@fdsrlocal,@fdswlocal,nil,0);\r
- if fd_isset(fd,fdsrlocal) or fd_isset(fd,fdsrlocal) then begin\r
- currentasio := fdreverse[fd];\r
- if assigned(currentasio) then begin\r
- currentasio.handlefdtrigger(fd_isset(currentasio.fdhandlein,fdsrlocal),fd_isset(currentasio.fdhandleout,fdswlocal));\r
- end else begin\r
- rmasterclr(fd);\r
- wmasterclr(fd);\r
- end;\r
- end;\r
- case condition of\r
- G_IO_IN : begin\r
- result := rmasterisset(fd);\r
- end;\r
- G_IO_OUT : begin\r
- result := wmasterisset(fd);\r
- end;\r
- end;\r
-end;\r
-\r
-procedure gtkrmasterset(fd : integer);\r
-begin\r
- if not assigned(giochannels[fd]) then giochannels[fd] := g_io_channel_unix_new(fd);\r
- g_io_add_watch(giochannels[fd],G_IO_IN,iocallback,nil);\r
-end;\r
-\r
-procedure gtkrmasterclr(fd: integer);\r
-begin\r
-end;\r
- \r
-procedure gtkwmasterset(fd : integer);\r
-begin\r
- if not assigned(giochannels[fd]) then giochannels[fd] := g_io_channel_unix_new(fd);\r
- g_io_add_watch(giochannels[fd],G_IO_OUT,iocallback,nil);\r
-end;\r
-\r
-procedure gtkwmasterclr(fd: integer);\r
-begin\r
-end;\r
-\r
-type\r
- tsc = class\r
- procedure dotasksandsink(sender:tobject;error:word);\r
- end;\r
-var\r
- taskloopback : tlloopback;\r
- sc : tsc;\r
-procedure tsc.dotasksandsink(sender:tobject;error:word);\r
-begin\r
- with tlasio(sender) do begin\r
- sinkdata(sender,error);\r
- processtasks;\r
- end;\r
-end;\r
-procedure gtkaddtask(ahandler:ttaskevent;aobj:tobject;awparam,alparam:longint);\r
-begin\r
- taskloopback.sendstr(' ');\r
- \r
-end;\r
-\r
-procedure lcoregtklazinit;\r
-begin\r
- onrmasterset := gtkrmasterset;\r
- onrmasterclr := gtkrmasterclr;\r
- onwmasterset := gtkwmasterset;\r
- onwmasterclr := gtkwmasterclr;\r
- onaddtask := gtkaddtask;\r
- taskloopback := tlloopback.create(nil);\r
- taskloopback.ondataavailable := sc.dotasksandsink;\r
- timerwrapperinterface := tlaztimerwrapperinterface.create(nil);\r
-end;\r
-\r
-function tlaztimerwrapperinterface.createwrappedtimer : tobject;\r
-begin\r
- result := ttimer.create(nil);\r
-end;\r
-procedure tlaztimerwrapperinterface.setontimer(wrappedtimer : tobject;newvalue:tnotifyevent);\r
-begin\r
- ttimer(wrappedtimer).ontimer := newvalue;\r
-end;\r
-procedure tlaztimerwrapperinterface.setenabled(wrappedtimer : tobject;newvalue : boolean);\r
-begin\r
- ttimer(wrappedtimer).enabled := newvalue;\r
-end;\r
-\r
-\r
-procedure tlaztimerwrapperinterface.setinterval(wrappedtimer : tobject;newvalue : integer);\r
-begin\r
- ttimer(wrappedtimer).interval := newvalue;\r
-end;\r
-\r
-\r
-end.\r
-\r