{
   $Id: gtkbindings.pp,v 1.2 2002/09/07 15:42:59 peter Exp $
}

{****************************************************************************
                                 Interface
****************************************************************************}

{$ifdef read_interface}

  type
     PGtkPatternSpec = ^TGtkPatternSpec;
     TGtkPatternSpec = record
          match_type : TGtkMatchType;
          pattern_length : guint;
          pattern : Pgchar;
          pattern_reversed : Pgchar;
          user_data : gpointer;
          seq_id : guint;
       end;

procedure gtk_pattern_spec_init(pspec:PGtkPatternSpec; pattern:Pgchar);cdecl;external gtkdll name 'gtk_pattern_spec_init';
procedure gtk_pattern_spec_free_segs(pspec:PGtkPatternSpec);cdecl;external gtkdll name 'gtk_pattern_spec_free_segs';
function  gtk_pattern_match(pspec:PGtkPatternSpec; string_length:guint; thestring:Pgchar; string_reversed:Pgchar):gboolean;cdecl;external gtkdll name 'gtk_pattern_match';
function  gtk_pattern_match_string(pspec:PGtkPatternSpec; thestring:Pgchar):gboolean;cdecl;external gtkdll name 'gtk_pattern_match_string';
function  gtk_pattern_match_simple(pattern:Pgchar; thestring:Pgchar):gboolean;cdecl;external gtkdll name 'gtk_pattern_match_simple';

  type
     PGtkBindingSet = ^TGtkBindingSet;
     PGtkBindingEntry = ^TGtkBindingEntry;
     PGtkBindingSignal = ^TGtkBindingSignal;
     PGtkBindingArg = ^TGtkBindingArg;

     TGtkBindingSet = record
          set_name : Pgchar;
          priority : gint;
          widget_path_pspecs : PGSList;
          widget_class_pspecs : PGSList;
          class_branch_pspecs : PGSList;
          entries : PGtkBindingEntry;
          current : PGtkBindingEntry;
       end;

     TGtkBindingEntry = record
          keyval : guint;
          modifiers : guint;
          binding_set : PGtkBindingSet;
          flag0 : {$ifdef win32}longint{$else}word{$endif};
          set_next : PGtkBindingEntry;
          hash_next : PGtkBindingEntry;
          signals : PGtkBindingSignal;
       end;

     TGtkBindingSignal = record
          next : PGtkBindingSignal;
          signal_name : Pgchar;
          n_args : guint;
          args : PGtkBindingArg;
       end;

     TGtkBindingArg = record
          arg_type : TGtkType;
          d : record
              case longint of
                 0 : ( long_data : glong );
                 1 : ( double_data : gdouble );
                 2 : ( string_data : Pgchar );
              end;
       end;

  const
     bm_TGtkBindingEntry_destroyed = $1;
     bp_TGtkBindingEntry_destroyed = 0;
     bm_TGtkBindingEntry_in_emission = $2;
     bp_TGtkBindingEntry_in_emission = 1;
function  destroyed(var a : TGtkBindingEntry) : guint;
procedure set_destroyed(var a : TGtkBindingEntry; __destroyed : guint);
function  in_emission(var a : TGtkBindingEntry) : guint;
procedure set_in_emission(var a : TGtkBindingEntry; __in_emission : guint);


function  gtk_binding_set_new(set_name:Pgchar):PGtkBindingSet;cdecl;external gtkdll name 'gtk_binding_set_new';
function  gtk_binding_set_by_class(object_class:gpointer):PGtkBindingSet;cdecl;external gtkdll name 'gtk_binding_set_by_class';
function  gtk_binding_set_find(set_name:Pgchar):PGtkBindingSet;cdecl;external gtkdll name 'gtk_binding_set_find';
function  gtk_bindings_activate(theobject:PGtkObject; keyval:guint; modifiers:guint):gboolean;cdecl;external gtkdll name 'gtk_bindings_activate';
function  gtk_binding_set_activate(binding_set:PGtkBindingSet; keyval:guint; modifiers:guint; theobject:PGtkObject):gboolean;cdecl;external gtkdll name 'gtk_binding_set_activate';
procedure gtk_binding_entry_add(binding_set:PGtkBindingSet; keyval:guint; modifiers:guint);cdecl;external gtkdll name 'gtk_binding_entry_clear';
procedure gtk_binding_entry_clear(binding_set:PGtkBindingSet; keyval:guint; modifiers:guint);cdecl;external gtkdll name 'gtk_binding_entry_clear';
procedure gtk_binding_entry_add_signal(binding_set:PGtkBindingSet; keyval:guint; modifiers:guint; signal_name:Pgchar; n_args:guint; args:array of const);cdecl;external gtkdll name 'gtk_binding_entry_add_signal';
procedure gtk_binding_set_add_path(binding_set:PGtkBindingSet; path_type:TGtkPathType; path_pattern:Pgchar; priority:TGtkPathPriorityType);cdecl;external gtkdll name 'gtk_binding_set_add_path';
{$ifndef gtkwin}
procedure gtk_binding_entry_remove(binding_set:PGtkBindingSet; keyval:guint; modifiers:guint);cdecl;external gtkdll name 'gtk_binding_entry_remove';
procedure gtk_binding_entry_add_signall(binding_set:PGtkBindingSet; keyval:guint; modifiers:guint; signal_name:Pgchar; binding_args:PGSList);cdecl;external gtkdll name 'gtk_binding_entry_add_signall';
function  gtk_binding_parse_binding(scanner:PGScanner):guint;cdecl;external gtkdll name 'gtk_binding_parse_binding';
{$endif}

{$endif read_interface}


{****************************************************************************
                              Implementation
****************************************************************************}

{$ifdef read_implementation}


function  destroyed(var a : TGtkBindingEntry) : guint;
    begin
       destroyed:=(a.flag0 and bm_TGtkBindingEntry_destroyed) shr bp_TGtkBindingEntry_destroyed;
    end;

procedure set_destroyed(var a : TGtkBindingEntry; __destroyed : guint);
    begin
       a.flag0:=a.flag0 or ((__destroyed shl bp_TGtkBindingEntry_destroyed) and bm_TGtkBindingEntry_destroyed);
    end;

function  in_emission(var a : TGtkBindingEntry) : guint;
    begin
       in_emission:=(a.flag0 and bm_TGtkBindingEntry_in_emission) shr bp_TGtkBindingEntry_in_emission;
    end;

procedure set_in_emission(var a : TGtkBindingEntry; __in_emission : guint);
    begin
       a.flag0:=a.flag0 or ((__in_emission shl bp_TGtkBindingEntry_in_emission) and bm_TGtkBindingEntry_in_emission);
    end;

{$endif read_implementation}


{
  $Log: gtkbindings.pp,v $
  Revision 1.2  2002/09/07 15:42:59  peter
    * old logs removed and tabs fixed

  Revision 1.1  2002/01/29 17:55:08  peter
    * splitted to base and extra

}
