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


with

    FLTK.Widgets.Boxes,
    FLTK.Widgets.Groups.Color_Choosers;

private with

    Ada.Finalization,
    Interfaces.C.Strings;


package FLTK.Asks is


    type Beep_Kind is
       (Default_Beep, Message_Beep, Error_Beep,
        Question_Beep, Password_Beep, Notification_Beep);

    type Confirm_Result is (Cancel, Confirm);

    type Choice_Result is (First, Second, Third);

    type Extended_Choice_Result is (First, Second, Third, Blocked, Closed, Escaped);

    type RGB_Float is new Long_Float range 0.0 .. 1.0;

    type RGB_Int is mod 256;

    type File_Chooser_Callback is access procedure
           (Item : in String);




    function Get_Cancel_String
        return String;

    procedure Set_Cancel_String
           (Value : in String);

    function Get_Close_String
        return String;

    procedure Set_Close_String
           (Value : in String);

    function Get_No_String
        return String;

    procedure Set_No_String
           (Value : in String);

    function Get_OK_String
        return String;

    procedure Set_OK_String
           (Value : in String);

    function Get_Yes_String
        return String;

    procedure Set_Yes_String
           (Value : in String);




    procedure Alert
           (Message : String);

    procedure Beep
           (Kind : in Beep_Kind := Default_Beep);

    function Choice
           (Message, Button1 : in String)
        return Choice_Result;

    function Choice
           (Message, Button1, Button2 : in String)
        return Choice_Result;

    function Choice
           (Message, Button1, Button2, Button3 : in String)
        return Choice_Result;

    function Extended_Choice
           (Message, Button1 : in String)
        return Extended_Choice_Result;

    function Extended_Choice
           (Message, Button1, Button2 : in String)
        return Extended_Choice_Result;

    function Extended_Choice
           (Message, Button1, Button2, Button3 : in String)
        return Extended_Choice_Result;

    function Text_Input
           (Message : in String;
            Default : in String := "")
        return String;

    procedure Message_Box
           (Message : in String);

    function Password
           (Message : in String;
            Default : in String := "")
        return String;




    function Color_Chooser
           (Title   : in     String;
            R, G, B : in out RGB_Float;
            Mode    : in     FLTK.Widgets.Groups.Color_Choosers.Color_Mode :=
                FLTK.Widgets.Groups.Color_Choosers.RGB)
        return Confirm_Result;

    function Color_Chooser
           (Title   : in     String;
            R, G, B : in out RGB_Int;
            Mode    : in     FLTK.Widgets.Groups.Color_Choosers.Color_Mode :=
                FLTK.Widgets.Groups.Color_Choosers.RGB)
        return Confirm_Result;

    function Dir_Chooser
           (Message, Default : in String;
            Relative         : in Boolean := False)
        return String;

    function File_Chooser
           (Message, Filter_Pattern, Default : in String;
            Relative                         : in Boolean := False)
        return String;

    procedure Set_File_Chooser_Callback
           (Func : in File_Chooser_Callback);

    procedure Set_File_Chooser_OK_String
           (Value : in String);




    function Get_Message_Hotspot
        return Boolean;

    procedure Set_Message_Hotspot
           (To : in Boolean);

    procedure Set_Message_Font
           (Font : in Font_Kind;
            Size : in Font_Size);

    function Get_Message_Icon
        return FLTK.Widgets.Boxes.Box_Reference;

    procedure Set_Message_Title
           (To : in String);

    procedure Set_Message_Title_Default
           (To : in String);


private


    Icon_Box : aliased FLTK.Widgets.Boxes.Box;


    Cancel_Str, Close_Str, No_Str, OK_Str, Yes_Str : Interfaces.C.Strings.chars_ptr;

    Chooser_OK_Str : Interfaces.C.Strings.chars_ptr;
    Chooser_Func   : File_Chooser_Callback;


    pragma Inline (Get_Cancel_String);
    pragma Inline (Get_Close_String);
    pragma Inline (Get_No_String);
    pragma Inline (Get_OK_String);
    pragma Inline (Get_Yes_String);

    pragma Inline (Alert);
    pragma Inline (Beep);
    pragma Inline (Text_Input);
    pragma Inline (Message_Box);
    pragma Inline (Password);

    pragma Inline (Color_Chooser);
    pragma Inline (Dir_Chooser);
    pragma Inline (File_Chooser);
    pragma Inline (Set_File_Chooser_Callback);

    pragma Inline (Get_Message_Hotspot);
    pragma Inline (Set_Message_Hotspot);
    pragma Inline (Set_Message_Font);
    pragma Inline (Get_Message_Icon);
    pragma Inline (Set_Message_Title);
    pragma Inline (Set_Message_Title_Default);


    --  Needed to ensure chars_ptr storage is properly cleaned up
    type Dialog_String_Final_Controller is new Ada.Finalization.Controlled with null record;

    overriding procedure Finalize
           (This : in out Dialog_String_Final_Controller);

    Cleanup : Dialog_String_Final_Controller;


end FLTK.Asks;