
{ This is a "semi-private" header; it is meant only for
   alternate GtkFileChooser backend modules; no stability guarantees
   are made at this point
  }


{$IFDEF read_forward_definitions}

{$ENDIF}

{$IFDEF read_interface_types}
type

   PGtkFileTime = ^TGtkFileTime;
   TGtkFileTime = gint64;

   PGtkFileSystem = pointer;
   PPGtkFileSystem = ^PGtkFileSystem;

   PGtkFilePath   = Pgchar;     { Seems to be implemented in GTK 2.4 by now }
   PPGtkFilePath  = ^PGtkFilePath;

   PGtkFileSystemVolume = pointer;
   PPGtkFileSystemVolume = ^PGtkFileSystemVolume;

   PGtkFileFolder = pointer;
   PPGtkFileFolder = ^PGtkFileFolder;

   PGtkFileInfo   = pointer;
   PPGtkFileInfo  = ^PGtkFileInfo;

{ Mask of information about a file, for monitoring and
   gtk_file_system_get_info()
  }

   PGtkFileInfoType = ^TGtkFileInfoType;
   TGtkFileInfoType = (GTK_FILE_INFO_DISPLAY_NAME := 1 shl 0,
                       GTK_FILE_INFO_IS_FOLDER := 1 shl 1,
                       GTK_FILE_INFO_IS_HIDDEN := 1 shl 2,
                       GTK_FILE_INFO_MIME_TYPE := 1 shl 3,
                       GTK_FILE_INFO_MODIFICATION_TIME := 1 shl 4,
                       GTK_FILE_INFO_SIZE := 1 shl 5,
                       GTK_FILE_INFO_ALL := (1 shl 6) - 1 );

type

   PGtkFileSystemError = ^TGtkFileSystemError;
   TGtkFileSystemError = (GTK_FILE_SYSTEM_ERROR_NONEXISTENT,
                          GTK_FILE_SYSTEM_ERROR_NOT_FOLDER,
                          GTK_FILE_SYSTEM_ERROR_INVALID_URI,
                          GTK_FILE_SYSTEM_ERROR_BAD_FILENAME,
                          GTK_FILE_SYSTEM_ERROR_FAILED,
                          GTK_FILE_SYSTEM_ERROR_ALREADY_EXISTS);


type
   PGtkFileSystemIface = ^TGtkFileSystemIface;
   TGtkFileSystemIface = record
        base_iface : TGTypeInterface;
        { Methods  }

        { Volumes  }
        list_volumes : function (file_system:PGtkFileSystem):PGSList;cdecl;
        get_volume_for_path : function (file_system:PGtkFileSystem; path:PGtkFilePath):PGtkFileSystemVolume;
        get_folder : function (file_system:PGtkFileSystem; path:PGtkFilePath; types:TGtkFileInfoType; error:PPGError):PGtkFileFolder;
        create_folder : function (file_system:PGtkFileSystem; path:PGtkFilePath; error:PPGError):gboolean;
        volume_free : procedure (file_system:PGtkFileSystem; volume:PGtkFileSystemVolume);
        volume_get_base_path : function (file_system:PGtkFileSystem; volume:PGtkFileSystemVolume):PGtkFilePath;
        volume_get_is_mounted : function (file_system:PGtkFileSystem; volume:PGtkFileSystemVolume):gboolean;
        volume_mount : function (file_system:PGtkFileSystem; volume:PGtkFileSystemVolume; error:PPGError):gboolean;
        volume_get_display_name : function (file_system:PGtkFileSystem; volume:PGtkFileSystemVolume):Pchar;
        volume_render_icon : function (file_system:PGtkFileSystem; volume:PGtkFileSystemVolume; widget:PGtkWidget; pixel_size:gint; error:PPGError):PGdkPixbuf;
        get_parent : function (file_system:PGtkFileSystem; path:PGtkFilePath; parent:PPGtkFilePath; error:PPGError):gboolean;
        make_path : function (file_system:PGtkFileSystem; base_path:PGtkFilePath; display_name:Pgchar; error:PPGError):PGtkFilePath;
        parse : function (file_system:PGtkFileSystem; base_path:PGtkFilePath; str:Pgchar; folder:PPGtkFilePath; file_part:PPgchar;
                     error:PPGError):gboolean;
        { Path Manipulation      }
        path_to_uri : function (file_system:PGtkFileSystem; path:PGtkFilePath):Pgchar;
        path_to_filename : function (file_system:PGtkFileSystem; path:PGtkFilePath):Pgchar;
        uri_to_path : function (file_system:PGtkFileSystem; uri:Pgchar):PGtkFilePath;
        filename_to_path : function (file_system:PGtkFileSystem; path:Pgchar):PGtkFilePath;

        { Icons  }
        render_icon : function (file_system:PGtkFileSystem; path:PGtkFilePath; widget:PGtkWidget; pixel_size:gint; error:PPGError):PGdkPixbuf;

        { Bookmarks  }
        insert_bookmark : function (file_system:PGtkFileSystem; path:PGtkFilePath; position:gint; error:PPGError):gboolean;
        remove_bookmark : function (file_system:PGtkFileSystem; path:PGtkFilePath; error:PPGError):gboolean;
        list_bookmarks : function (file_system:PGtkFileSystem):PGSList;

        { Signals   }
        volumes_changed : procedure (file_system:PGtkFileSystem);
        bookmarks_changed : procedure (file_system:PGtkFileSystem);
     end;


type
   PGtkFileFolderIface = ^TGtkFileFolderIface;
   TGtkFileFolderIface = record
        base_iface : TGTypeInterface;
        { Methods  }
        get_info : function (folder:PGtkFileFolder; path:PGtkFilePath; error:PPGError):PGtkFileInfo;cdecl;
        list_children : function (folder:PGtkFileFolder; children:PPGSList; error:PPGError):gboolean;
        { ??? refresh() ???  }

        { Signals     }
        deleted : procedure (monitor:PGtkFileFolder);
        files_added : procedure (monitor:PGtkFileFolder; paths:PGSList);
        files_changed : procedure (monitor:PGtkFileFolder; paths:PGSList);
        files_removed : procedure (monitor:PGtkFileFolder; paths:PGSList);
     end;

{$ENDIF} {types }

{$IFDEF read_interface_rest}

{$ifdef HasGTK_FileSystem}

{ GError enumeration for GtkFileSystem  }

function GTK_FILE_SYSTEM_ERROR : TGQuark;

function gtk_file_system_error_quark:TGQuark;cdecl;external gtklib name 'gtk_file_system_error_quark';

{ Boxed-type for gtk_file_folder_get_info() results  }

function GTK_TYPE_FILE_INFO : GType;

function gtk_file_info_get_type:GType;cdecl;external gtklib name 'gtk_file_info_get_type';
function gtk_file_info_new:PGtkFileInfo;cdecl;external gtklib name 'gtk_file_info_new';
function gtk_file_info_copy(info:PGtkFileInfo):PGtkFileInfo;cdecl;external gtklib name 'gtk_file_info_copy';
procedure gtk_file_info_free(info:PGtkFileInfo);cdecl;external gtklib name 'gtk_file_info_free';

function gtk_file_info_get_display_name(info:PGtkFileInfo):Pgchar;cdecl;external gtklib name 'gtk_file_info_get_display_name';
function gtk_file_info_get_display_key(info:PGtkFileInfo):Pgchar;cdecl;external gtklib name 'gtk_file_info_get_display_key';

procedure gtk_file_info_set_display_name(info:PGtkFileInfo; display_name:Pgchar);cdecl;external gtklib name 'gtk_file_info_set_display_name';

function gtk_file_info_get_is_folder(info:PGtkFileInfo):gboolean;cdecl;external gtklib name 'gtk_file_info_get_is_folder';
procedure gtk_file_info_set_is_folder(info:PGtkFileInfo; is_folder:gboolean);cdecl;external gtklib name 'gtk_file_info_set_is_folder';

function gtk_file_info_get_is_hidden(info:PGtkFileInfo):gboolean;cdecl;external gtklib name 'gtk_file_info_get_is_hidden';
procedure gtk_file_info_set_is_hidden(info:PGtkFileInfo; is_hidden:gboolean);cdecl;external gtklib name 'gtk_file_info_set_is_hidden';

function gtk_file_info_get_mime_type(info:PGtkFileInfo):Pgchar;cdecl;external gtklib name 'gtk_file_info_get_mime_type';
procedure gtk_file_info_set_mime_type(info:PGtkFileInfo; mime_type:Pgchar);cdecl;external gtklib name 'gtk_file_info_set_mime_type';

function gtk_file_info_get_modification_time(info:PGtkFileInfo):TGtkFileTime;cdecl;external gtklib name 'gtk_file_info_get_modification_time';
procedure gtk_file_info_set_modification_time(info:PGtkFileInfo; modification_time:TGtkFileTime);cdecl;external gtklib name 'gtk_file_info_set_modification_time';

function gtk_file_info_get_size(info:PGtkFileInfo):gint64;cdecl;external gtklib name 'gtk_file_info_get_size';
procedure gtk_file_info_set_size(info:PGtkFileInfo; size:gint64);cdecl;external gtklib name 'gtk_file_info_set_size';

{ The base GtkFileSystem interface  }

function GTK_TYPE_FILE_SYSTEM : GType;

function GTK_FILE_SYSTEM(obj : pointer) : PGtkFileSystem;

function GTK_IS_FILE_SYSTEM(obj : pointer) : gboolean;

function GTK_FILE_SYSTEM_GET_IFACE(inst : pointer) : PGtkFileSystemIface;




function gtk_file_system_get_type:GType;cdecl;external gtklib name 'gtk_file_system_get_type';

function gtk_file_system_list_volumes(file_system:PGtkFileSystem):PGSList;cdecl;external gtklib name 'gtk_file_system_list_volumes';
function gtk_file_system_get_volume_for_path(file_system:PGtkFileSystem; path:PGtkFilePath):PGtkFileSystemVolume;cdecl;external gtklib name 'gtk_file_system_get_volume_for_path';

procedure gtk_file_system_volume_free(file_system:PGtkFileSystem; volume:PGtkFileSystemVolume);cdecl;external gtklib name 'gtk_file_system_volume_free';

function gtk_file_system_volume_get_base_path(file_system:PGtkFileSystem; volume:PGtkFileSystemVolume):PGtkFilePath;cdecl;external gtklib name 'gtk_file_system_volume_get_base_path';

function gtk_file_system_volume_get_is_mounted(file_system:PGtkFileSystem; volume:PGtkFileSystemVolume):gboolean;cdecl;external gtklib name 'gtk_file_system_volume_get_is_mounted';
function gtk_file_system_volume_mount(file_system:PGtkFileSystem; volume:PGtkFileSystemVolume; error:PPGError):gboolean;cdecl;external gtklib name 'gtk_file_system_volume_mount';

function gtk_file_system_volume_get_display_name(file_system:PGtkFileSystem; volume:PGtkFileSystemVolume):Pchar;cdecl;external gtklib name 'gtk_file_system_volume_get_display_name';

function gtk_file_system_volume_render_icon(file_system:PGtkFileSystem; volume:PGtkFileSystemVolume; widget:PGtkWidget; pixel_size:gint; error:PPGError):PGdkPixbuf;cdecl;external gtklib name 'gtk_file_system_volume_render_icon';

function gtk_file_system_get_parent(file_system:PGtkFileSystem;  path:PGtkFilePath; parent:PPGtkFilePath; error:PPGError):gboolean;cdecl;external gtklib name 'gtk_file_system_get_parent';
function gtk_file_system_get_folder(file_system:PGtkFileSystem; path:PGtkFilePath; types:TGtkFileInfoType; error:PPGError):PGtkFileFolder;cdecl;external gtklib name 'gtk_file_system_get_folder';

function gtk_file_system_create_folder(file_system:PGtkFileSystem; path:PGtkFilePath; error:PPGError):gboolean;cdecl;external gtklib name 'gtk_file_system_create_folder';

function gtk_file_system_make_path(file_system:PGtkFileSystem; base_path:PGtkFilePath; display_name:Pgchar; error:PPGError):PGtkFilePath;cdecl;external gtklib name 'gtk_file_system_make_path';
function gtk_file_system_parse(file_system:PGtkFileSystem; base_path:PGtkFilePath; str:Pgchar; folder:PPGtkFilePath; file_part:PPgchar;
           error:PPGError):gboolean;cdecl;external gtklib name 'gtk_file_system_parse';

function gtk_file_system_path_to_uri(file_system:PGtkFileSystem; path:PGtkFilePath):Pgchar;cdecl;external gtklib name 'gtk_file_system_path_to_uri';
function gtk_file_system_path_to_filename(file_system:PGtkFileSystem; path:PGtkFilePath):Pgchar;cdecl;external gtklib name 'gtk_file_system_path_to_filename';

function gtk_file_system_uri_to_path(file_system:PGtkFileSystem; uri:Pgchar):PGtkFilePath;cdecl;external gtklib name 'gtk_file_system_uri_to_path';
function gtk_file_system_filename_to_path(file_system:PGtkFileSystem; filename:Pgchar):PGtkFilePath;cdecl;external gtklib name 'gtk_file_system_filename_to_path';

function gtk_file_system_render_icon(file_system:PGtkFileSystem; path:PGtkFilePath; widget:PGtkWidget; pixel_size:gint; error:PPGError):PGdkPixbuf;cdecl;external gtklib name 'gtk_file_system_render_icon';

function gtk_file_system_insert_bookmark(file_system:PGtkFileSystem; path:PGtkFilePath; position:gint; error:PPGError):gboolean;cdecl;external gtklib name 'gtk_file_system_insert_bookmark';

function gtk_file_system_remove_bookmark(file_system:PGtkFileSystem; path:PGtkFilePath; error:PPGError):gboolean;cdecl;external gtklib name 'gtk_file_system_remove_bookmark';
function gtk_file_system_list_bookmarks(file_system:PGtkFileSystem):PGSList;cdecl;external gtklib name 'gtk_file_system_list_bookmarks';

{ Detailed information about a particular folder }

function GTK_TYPE_FILE_FOLDER : GType;


function GTK_FILE_FOLDER(obj : pointer) : PGtkFileFolder;

function GTK_IS_FILE_FOLDER(obj : pointer) : gboolean;


function GTK_FILE_FOLDER_GET_IFACE(inst : pointer) : PGtkFileSystemIface;



function gtk_file_folder_get_type:GType;cdecl;external gtklib name 'gtk_file_folder_get_type';
function gtk_file_folder_list_children(folder:PGtkFileFolder; children:PPGSList; error:PPGError):gboolean;cdecl;external gtklib name 'gtk_file_folder_list_children';

function gtk_file_folder_get_info(folder:PGtkFileFolder; path:PGtkFilePath; error:PPGError):PGtkFileInfo;cdecl;external gtklib name 'gtk_file_folder_get_info';
function gtk_file_path_new_dup(str : Pgchar) : PGtkFilePath;
function gtk_file_path_new_steal(str : Pgchar) : PGtkFilePath;

function gtk_file_path_get_string(str : PGtkFilePath) : Pgchar;

procedure gtk_file_path_free(path : PGtkFilePath);

function gtk_file_path_copy(path : PGtkFilePath) : PGtkFilePath;


function gtk_file_path_compare(path1,path2 : PGtkFilePath) : longint;

function gtk_file_paths_sort(paths:PGSList):PGSList;cdecl;external gtklib name 'gtk_file_paths_sort';
function gtk_file_paths_copy(paths:PGSList):PGSList;cdecl;external gtklib name 'gtk_file_paths_copy';
procedure gtk_file_paths_free(paths:PGSList);cdecl;external gtklib name 'gtk_file_paths_free';


{ GtkFileSystem modules support  }

function _gtk_file_system_create(file_system_name:Pchar):PGtkFileSystem;cdecl;external gtklib name '_gtk_file_system_create';

{$endif HasGTK_FileSystem}

{$endif}  {read_interface_rest}


{$ifdef read_implementation}

{$ifdef HasGTK_FileSystem}

function GTK_FILE_SYSTEM_ERROR : TGQuark;
  begin
     GTK_FILE_SYSTEM_ERROR:=gtk_file_system_error_quark;
  end;


function GTK_TYPE_FILE_INFO : GType;

  begin
     GTK_TYPE_FILE_INFO:=gtk_file_info_get_type;
  end;


function GTK_TYPE_FILE_SYSTEM : GType;
  begin
     GTK_TYPE_FILE_SYSTEM:=gtk_file_system_get_type;
  end;

function GTK_FILE_SYSTEM(obj : pointer) : PGtkFileSystem;
begin
   GTK_FILE_SYSTEM:=G_TYPE_CHECK_INSTANCE_CAST(obj,GTK_TYPE_FILE_SYSTEM);
end;

function GTK_IS_FILE_SYSTEM(obj : pointer) : gboolean;
begin
   GTK_IS_FILE_SYSTEM:=G_TYPE_CHECK_INSTANCE_TYPE(obj,GTK_TYPE_FILE_SYSTEM);
end;

function GTK_FILE_SYSTEM_GET_IFACE(inst : pointer) : PGtkFileSystemIface;
begin
   GTK_FILE_SYSTEM_GET_IFACE:=G_TYPE_INSTANCE_GET_INTERFACE(inst,GTK_TYPE_FILE_SYSTEM);
end;


function GTK_TYPE_FILE_FOLDER : GType;
  begin
     GTK_TYPE_FILE_FOLDER:=gtk_file_folder_get_type;
  end;


function GTK_FILE_FOLDER(obj : pointer) : PGtkFileFolder;
begin
   GTK_FILE_FOLDER:=G_TYPE_CHECK_INSTANCE_CAST(obj,GTK_TYPE_FILE_FOLDER);
end;


function GTK_IS_FILE_FOLDER(obj : pointer) : gboolean;
begin
   GTK_IS_FILE_FOLDER:=G_TYPE_CHECK_INSTANCE_TYPE(obj,GTK_TYPE_FILE_FOLDER);
end;



function GTK_FILE_FOLDER_GET_IFACE(inst : pointer) : PGtkFileSystemIface;
begin
   GTK_FILE_FOLDER_GET_IFACE:=G_TYPE_INSTANCE_GET_INTERFACE(inst,GTK_TYPE_FILE_FOLDER);
end;

{$endif HasGTK_FileSystem}

function gtk_file_path_new_dup(str : Pgchar) : PGtkFilePath;
begin
   gtk_file_path_new_dup:=PGtkFilePath(g_strdup(str));
end;

function gtk_file_path_new_steal(str : Pgchar) : PGtkFilePath;
begin
   gtk_file_path_new_steal:=PGtkFilePath(str);
end;

function gtk_file_path_get_string(str : PGtkFilePath) : Pgchar;
begin
   gtk_file_path_get_string:=Pgchar(str);
end;

procedure gtk_file_path_free(path : PGtkFilePath);
begin
   g_free( Pgchar(path));
end;

function gtk_file_path_copy(path : PGtkFilePath) : PGtkFilePath;
begin
   gtk_file_path_copy:=gtk_file_path_new_dup(gtk_file_path_get_string(path));
end;

function gtk_file_path_compare(path1,path2 : PGtkFilePath) : longint;
begin
   gtk_file_path_compare:=StrComp(gtk_file_path_get_string(path1),gtk_file_path_get_string(path2));
end;


{$endif} {read_implementation}
