--  Programmed by Jedidiah Barber
--  Released into the public domain


with

    FLTK.Widgets.Groups.Windows;

private with

    Interfaces.C;


package FLTK.Static is


    type Awake_Handler is access procedure;

    type Timeout_Handler is access procedure;

    type Idle_Handler is access procedure;




    type Buffer_Kind is (Selection, Clipboard);

    type Clipboard_Notify_Handler is access procedure
           (Kind : in Buffer_Kind);




    type File_Descriptor is new Integer;

    type File_Mode is (Read, Write, Except);

    type File_Handler is access procedure
           (FD : in File_Descriptor);




    type Box_Draw_Function is access procedure
           (X, Y, W, H : in Integer;
            My_Color   : in Color);




    type Option is
           (Arrow_Focus,
            Visible_Focus,
            DND_Text,
            Show_Tooltips,
            FNFC_Uses_GTK,
            Last);




    procedure Add_Awake_Handler
           (Func : in Awake_Handler);

    function Get_Awake_Handler
        return Awake_Handler;




    procedure Add_Check
           (Func : in Timeout_Handler);

    function Has_Check
           (Func : in Timeout_Handler)
        return Boolean;

    procedure Remove_Check
           (Func : in Timeout_Handler);




    procedure Add_Timeout
           (Seconds : in Long_Float;
            Func    : in Timeout_Handler);

    function Has_Timeout
           (Func : in Timeout_Handler)
        return Boolean;

    procedure Remove_Timeout
           (Func : in Timeout_Handler);

    procedure Repeat_Timeout
           (Seconds : in Long_Float;
            Func    : in Timeout_Handler);




    procedure Add_Clipboard_Notify
           (Func : in Clipboard_Notify_Handler);

    procedure Remove_Clipboard_Notify
           (Func : in Clipboard_Notify_Handler);




    procedure Add_File_Descriptor
           (FD   : in File_Descriptor;
            Func : in File_Handler);

    procedure Add_File_Descriptor
           (FD   : in File_Descriptor;
            Mode : in File_Mode;
            Func : in File_Handler);

    procedure Remove_File_Descriptor
           (FD : in File_Descriptor);

    procedure Remove_File_Descriptor
           (FD   : in File_Descriptor;
            Mode : in File_Mode);




    procedure Add_Idle
           (Func : in Idle_Handler);

    function Has_Idle
           (Func : in Idle_Handler)
        return Boolean;

    procedure Remove_Idle
           (Func : in Idle_Handler);




    procedure Get_Color
           (From    : in     Color;
            R, G, B :    out Color_Component);

    procedure Set_Color
           (To      : in Color;
            R, G, B : in Color_Component);

    procedure Free_Color
           (Value   : in Color;
            Overlay : in Boolean := False);

    procedure Own_Colormap;

    procedure Set_Foreground
           (R, G, B : in Color_Component);

    procedure Set_Background
           (R, G, B : in Color_Component);

    procedure Set_Alt_Background
           (R, G, B : in Color_Component);

    procedure System_Colors;




    function Font_Image
           (Kind : in Font_Kind)
        return String;

    function Font_Family_Image
           (Kind : in Font_Kind)
        return String;

    procedure Set_Font_Kind
           (To, From : in Font_Kind);

    function Font_Sizes
           (Kind : in Font_Kind)
        return Font_Size_Array;

    procedure Setup_Fonts
           (How_Many_Set_Up : out Natural);




    function Get_Box_Height_Offset
           (Kind : in Box_Kind)
        return Integer;

    function Get_Box_Width_Offset
           (Kind : in Box_Kind)
        return Integer;

    function Get_Box_X_Offset
           (Kind : in Box_Kind)
        return Integer;

    function Get_Box_Y_Offset
           (Kind : in Box_Kind)
        return Integer;

    procedure Set_Box_Kind
           (To, From : in Box_Kind);

    function Draw_Box_Active
        return Boolean;

    --  function Get_Box_Draw_Function
    --         (Kind : in Box_Kind)
    --      return Box_Draw_Function;

    --  procedure Set_Box_Draw_Function
    --         (Kind               : in Box_Kind;
    --          Func               : in Box_Draw_Function;
    --          Offset_X, Offset_Y : in Integer := 0;
    --          Offset_W, Offset_H : in Integer := 0);




    procedure Copy
           (Text : in String;
            Dest : in Buffer_Kind);

    procedure Paste
           (Receiver : in FLTK.Widgets.Widget'Class;
            Source   : in Buffer_Kind);

    procedure Selection
           (Owner : in FLTK.Widgets.Widget'Class;
            Text  : in String);




    procedure Drag_Drop_Start;

    function Get_Drag_Drop_Text_Support
        return Boolean;

    procedure Set_Drag_Drop_Text_Support
           (To : in Boolean);




    procedure Enable_System_Input;

    procedure Disable_System_Input;

    function Has_Visible_Focus
        return Boolean;

    procedure Set_Visible_Focus
           (To : in Boolean);




    procedure Default_Window_Close
           (Item : in out FLTK.Widgets.Widget'Class);

    function Get_First_Window
        return access FLTK.Widgets.Groups.Windows.Window'Class;

    procedure Set_First_Window
           (To : in FLTK.Widgets.Groups.Windows.Window'Class);

    function Get_Next_Window
           (From : in FLTK.Widgets.Groups.Windows.Window'Class)
        return access FLTK.Widgets.Groups.Windows.Window'Class;

    function Get_Top_Modal
        return access FLTK.Widgets.Groups.Windows.Window'Class;




    function Read_Queue
        return access FLTK.Widgets.Widget'Class;

    procedure Do_Widget_Deletion;




    function Get_Scheme
        return String;

    procedure Set_Scheme
           (To : in String);

    function Is_Scheme
           (Scheme : in String)
        return Boolean;

    procedure Reload_Scheme;




    function Get_Option
           (Opt : in Option)
        return Boolean;

    procedure Set_Option
           (Opt : in Option;
            To  : in Boolean);




    function Get_Default_Scrollbar_Size
        return Natural;

    procedure Set_Default_Scrollbar_Size
           (To : in Natural);


private


    File_Mode_Codes : array (File_Mode) of Interfaces.C.int :=
        (Read => 1, Write => 4, Except => 8);




    pragma Import (C, Own_Colormap, "fl_static_own_colormap");
    pragma Import (C, System_Colors, "fl_static_get_system_colors");


    pragma Import (C, Drag_Drop_Start, "fl_static_dnd");


    pragma Import (C, Enable_System_Input, "fl_static_enable_im");
    pragma Import (C, Disable_System_Input, "fl_static_disable_im");


    pragma Import (C, Do_Widget_Deletion, "fl_static_do_widget_deletion");


    pragma Import (C, Reload_Scheme, "fl_static_reload_scheme");




    pragma Inline (Add_Awake_Handler);
    pragma Inline (Get_Awake_Handler);


    pragma Inline (Add_Check);
    pragma Inline (Has_Check);
    pragma Inline (Remove_Check);


    pragma Inline (Add_Timeout);
    pragma Inline (Has_Timeout);
    pragma Inline (Remove_Timeout);
    pragma Inline (Repeat_Timeout);


    pragma Inline (Add_Clipboard_Notify);
    pragma Inline (Remove_Clipboard_Notify);


    pragma Inline (Add_File_Descriptor);
    pragma Inline (Remove_File_Descriptor);


    pragma Inline (Add_Idle);
    pragma Inline (Has_Idle);
    pragma Inline (Remove_Idle);


    pragma Inline (Get_Color);
    pragma Inline (Set_Color);
    pragma Inline (Free_Color);
    pragma Inline (Own_Colormap);
    pragma Inline (Set_Foreground);
    pragma Inline (Set_Background);
    pragma Inline (Set_Alt_Background);
    pragma Inline (System_Colors);


    pragma Inline (Font_Image);
    pragma Inline (Font_Family_Image);
    pragma Inline (Set_Font_Kind);
    pragma Inline (Font_Sizes);
    pragma Inline (Setup_Fonts);


    pragma Inline (Get_Box_Height_Offset);
    pragma Inline (Get_Box_Width_Offset);
    pragma Inline (Get_Box_X_Offset);
    pragma Inline (Get_Box_Y_Offset);
    pragma Inline (Set_Box_Kind);
    pragma Inline (Draw_Box_Active);
    --  pragma Inline (Get_Box_Draw_Function);
    --  pragma Inline (Set_Box_Draw_Function);


    pragma Inline (Copy);
    pragma Inline (Paste);
    pragma Inline (Selection);


    pragma Inline (Drag_Drop_Start);
    pragma Inline (Get_Drag_Drop_Text_Support);
    pragma Inline (Set_Drag_Drop_Text_Support);


    pragma Inline (Enable_System_Input);
    pragma Inline (Disable_System_Input);
    pragma Inline (Has_Visible_Focus);
    pragma Inline (Set_Visible_Focus);


    pragma Inline (Default_Window_Close);
    pragma Inline (Get_First_Window);
    pragma Inline (Set_First_Window);
    pragma Inline (Get_Next_Window);
    pragma Inline (Get_Top_Modal);


    pragma Inline (Read_Queue);
    pragma Inline (Do_Widget_Deletion);


    pragma Inline (Get_Scheme);
    pragma Inline (Set_Scheme);
    pragma Inline (Is_Scheme);
    pragma Inline (Reload_Scheme);


    pragma Inline (Get_Option);
    pragma Inline (Set_Option);


    pragma Inline (Get_Default_Scrollbar_Size);
    pragma Inline (Set_Default_Scrollbar_Size);


end FLTK.Static;