(* GTK-Kylix Library: GTKClasses - Non-visual objects Copyright (C) 2003 Tomas Bzatek This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307 USA. *) unit GTKClasses; interface uses lazglib2, lazgobject2, lazgtk3, Classes, SysUtils; const { Basic Type Macros } G_TYPE_FUNDAMENTAL_SHIFT = 2; G_TYPE_FUNDAMENTAL_MAX = 255 shl G_TYPE_FUNDAMENTAL_SHIFT; { Constant fundamental types, introduced by g_type_init(). } G_TYPE_INVALID = TGType(0 shl G_TYPE_FUNDAMENTAL_SHIFT); G_TYPE_NONE = TGType(1 shl G_TYPE_FUNDAMENTAL_SHIFT); G_TYPE_INTERFACE = TGType(2 shl G_TYPE_FUNDAMENTAL_SHIFT); G_TYPE_CHAR = TGType(3 shl G_TYPE_FUNDAMENTAL_SHIFT); G_TYPE_UCHAR = TGType(4 shl G_TYPE_FUNDAMENTAL_SHIFT); G_TYPE_BOOLEAN = TGType(5 shl G_TYPE_FUNDAMENTAL_SHIFT); G_TYPE_INT = TGType(6 shl G_TYPE_FUNDAMENTAL_SHIFT); G_TYPE_UINT = TGType(7 shl G_TYPE_FUNDAMENTAL_SHIFT); G_TYPE_LONG = TGType(8 shl G_TYPE_FUNDAMENTAL_SHIFT); G_TYPE_ULONG = TGType(9 shl G_TYPE_FUNDAMENTAL_SHIFT); G_TYPE_INT64 = TGType(10 shl G_TYPE_FUNDAMENTAL_SHIFT); G_TYPE_UINT64 = TGType(11 shl G_TYPE_FUNDAMENTAL_SHIFT); G_TYPE_ENUM = TGType(12 shl G_TYPE_FUNDAMENTAL_SHIFT); G_TYPE_FLAGS = TGType(13 shl G_TYPE_FUNDAMENTAL_SHIFT); G_TYPE_FLOAT = TGType(14 shl G_TYPE_FUNDAMENTAL_SHIFT); G_TYPE_DOUBLE = TGType(15 shl G_TYPE_FUNDAMENTAL_SHIFT); G_TYPE_STRING = TGType(16 shl G_TYPE_FUNDAMENTAL_SHIFT); G_TYPE_POINTER = TGType(17 shl G_TYPE_FUNDAMENTAL_SHIFT); G_TYPE_BOXED = TGType(18 shl G_TYPE_FUNDAMENTAL_SHIFT); G_TYPE_PARAM = TGType(19 shl G_TYPE_FUNDAMENTAL_SHIFT); G_TYPE_OBJECT = TGType(20 shl G_TYPE_FUNDAMENTAL_SHIFT); type TGDKColor = record red, green, blue, alpha: gdouble; end; (****************************************** TGLIST ******************************************************************************) TGList = class(TComponent) private FNotify: TNotifyEvent; public FList: PGList; constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure Append(Data: Pointer); overload; procedure Append(Data: string); overload; procedure Delete(Index: integer); function Count: integer; published property Notify: TNotifyEvent read FNotify write FNotify; end; (****************************************** TGTKTIMER ***************************************************************************) TGTKTimer = class(TComponent) private FOnTimer: TNotifyEvent; FHandlerID: guint; FEnabled: boolean; FInterval: Cardinal; procedure SetEnabled(Value: boolean); procedure SetInterval(Value: Cardinal); public constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure Start; procedure Stop; published property OnTimer: TNotifyEvent read FOnTimer write FOnTimer; property Enabled: boolean read FEnabled write SetEnabled default False; property Interval: Cardinal read FInterval write SetInterval; end; (********************************************************************************************************************************) (********************************************************************************************************************************) implementation constructor TGList.Create(AOwner: TComponent); begin inherited Create(AOwner); FList := nil; FNotify := nil; end; destructor TGList.Destroy; begin g_list_free(FList); inherited Destroy; end; procedure TGList.Append(Data: Pointer); begin FList := g_list_append(FList, Data); if Assigned(FNotify) then FNotify(Self); end; procedure TGList.Append(Data: string); begin Append(Pointer(PChar(Data))); end; procedure TGList.Delete(Index: integer); var El: PGList; begin El := g_list_nth_data(FList, Index); if El <> nil then FList := g_list_remove(FList, gpointer(El)); end; function TGList.Count: integer; begin Result := 0; if FList <> nil then Result := g_list_length(FList); end; (********************************************************************************************************************************) (********************************************************************************************************************************) constructor TGTKTimer.Create(AOwner: TComponent); begin inherited Create(AOwner); FOnTimer := nil; FEnabled := False; FInterval := 0; FHandlerID := 0; end; destructor TGTKTimer.Destroy; begin SetEnableD(False); inherited Destroy; end; procedure TGTKTimer.SetEnabled(Value: boolean); begin if Value <> FEnabled then begin FEnabled := Value; if Value then Start else Stop; end; end; procedure TGTKTimer.SetInterval(Value: Cardinal); begin if FInterval <> Value then begin FInterval := Value; Stop; Start; end; end; function TGTKTimer_Timeout(data: gpointer): gboolean; cdecl; begin if Assigned(TGTKTimer(data).FOnTimer) then TGTKTimer(data).FOnTimer(TGTKTimer(data)); Result := True; end; procedure TGTKTimer.Start; begin if FHandlerID > 0 then Stop; if FEnabled then FHandlerID := g_timeout_add(FInterval, @TGTKTimer_Timeout, Self); end; procedure TGTKTimer.Stop; begin if FHandlerID > 0 then g_source_remove(FHandlerID); FHandlerID := 0; end; (********************************************************************************************************************************) (********************************************************************************************************************************) end.