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


with

    FLTK.Images;

private with

    Interfaces.C.Strings;


package FLTK.Labels is


    type Label is new Wrapper with private;

    type Label_Reference (Data : not null access Label'Class) is limited null record
        with Implicit_Dereference => Data;




    package Forge is

        function Create
               (Value    : in     String;
                Font     : in     Font_Kind               := Helvetica;
                Size     : in     Font_Size               := Normal_Size;
                Hue      : in     Color                   := Foreground_Color;
                Kind     : in     Label_Kind              := Normal_Label;
                Place    : in     Alignment               := Align_Center;
                Active   : access FLTK.Images.Image'Class := null;
                Inactive : access FLTK.Images.Image'Class := null)
            return Label;

    end Forge;




    function Get_Value
           (This : in Label)
        return String;

    procedure Set_Value
           (This : in out Label;
            Text : in     String);

    function Get_Font
           (This : in Label)
        return Font_Kind;

    procedure Set_Font
           (This : in out Label;
            Font : in     Font_Kind);

    function Get_Size
           (This : in Label)
        return Font_Size;

    procedure Set_Size
           (This : in out Label;
            Size : in     Font_Size);

    function Get_Color
           (This : in Label)
        return Color;

    procedure Set_Color
           (This : in out Label;
            Hue  : in     Color);

    function Get_Kind
           (This : in Label)
        return Label_Kind;

    procedure Set_Kind
           (This : in out Label;
            Kind : in     Label_Kind);

    function Get_Alignment
           (This : in Label)
        return Alignment;

    procedure Set_Alignment
           (This  : in out Label;
            Place : in     Alignment);

    function Get_Active
           (This : in Label)
        return access FLTK.Images.Image'Class;

    procedure Set_Active
           (This : in out Label;
            Pic  : access FLTK.Images.Image'Class);

    function Get_Inactive
           (This : in Label)
        return access FLTK.Images.Image'Class;

    procedure Set_Inactive
           (This : in out Label;
            Pic  : access FLTK.Images.Image'Class);




    procedure Draw
           (This       : in out Label;
            X, Y, W, H : in     Integer;
            Place      : in     Alignment);

    procedure Measure
           (This : in     Label;
            W, H :    out Integer);


private


    type Label is new Wrapper with record
        My_Active   : access FLTK.Images.Image'Class;
        My_Inactive : access FLTK.Images.Image'Class;
        My_Text     : Interfaces.C.Strings.chars_ptr;
    end record;

    overriding procedure Finalize
           (This : in out Label);


    pragma Inline (Get_Value);
    pragma Inline (Get_Font);
    pragma Inline (Set_Font);
    pragma Inline (Get_Size);
    pragma Inline (Set_Size);
    pragma Inline (Get_Color);
    pragma Inline (Set_Color);
    pragma Inline (Get_Kind);
    pragma Inline (Set_Kind);
    pragma Inline (Get_Alignment);
    pragma Inline (Set_Alignment);
    pragma Inline (Get_Active);
    pragma Inline (Get_Inactive);

    pragma Inline (Draw);
    pragma Inline (Measure);


end FLTK.Labels;