diff options
author | Jedidiah Barber <contact@jedbarber.id.au> | 2024-12-18 17:52:21 +1300 |
---|---|---|
committer | Jedidiah Barber <contact@jedbarber.id.au> | 2024-12-18 17:52:21 +1300 |
commit | 75c56f8e6927018e3098fe012bb699b72ad0f1f8 (patch) | |
tree | 5908621c5638ca62e6593cff06c8997ba8961c14 /src/fltk-widgets-groups-browsers-textline.ads | |
parent | 43913b53865a86986c1944b13f9ab9fd32fa71e2 (diff) |
Added Fl_Browser
Diffstat (limited to 'src/fltk-widgets-groups-browsers-textline.ads')
-rw-r--r-- | src/fltk-widgets-groups-browsers-textline.ads | 427 |
1 files changed, 427 insertions, 0 deletions
diff --git a/src/fltk-widgets-groups-browsers-textline.ads b/src/fltk-widgets-groups-browsers-textline.ads new file mode 100644 index 0000000..e9749dc --- /dev/null +++ b/src/fltk-widgets-groups-browsers-textline.ads @@ -0,0 +1,427 @@ + + +-- Programmed by Jedidiah Barber +-- Released into the public domain + + +with + + FLTK.Images; + +private with + + Ada.Containers.Vectors, + Interfaces.C, + System; + + +package FLTK.Widgets.Groups.Browsers.Textline is + + + type Textline_Browser is new Browser with private; + + type Textline_Browser_Reference (Data : not null access Textline_Browser'Class) is + limited null record with Implicit_Dereference => Data; + + type Line_Position is (Top, Bottom, Middle); + + type Column_Widths is array (Positive range <>) of Integer; + + + Browser_Load_Error : exception; + + + + + package Forge is + + function Create + (X, Y, W, H : in Integer; + Text : in String := "") + return Textline_Browser; + + end Forge; + + + + + -- Directly manipulating lines + + procedure Add + (This : in out Textline_Browser; + Text : in String); + + procedure Insert + (This : in out Textline_Browser; + Above : in Positive; + Text : in String); + + -- To destination calculated after From line is removed. + -- Also, note that To/From ordering is opposite from C++ + procedure Move + (This : in out Textline_Browser; + From, To : in Positive); + + procedure Swap + (This : in out Textline_Browser; + A, B : in Positive); + + procedure Remove + (This : in out Textline_Browser; + Line : in Positive); + + procedure Clear + (This : in out Textline_Browser); + + function Number_Of_Lines + (This : in Textline_Browser) + return Natural; + + + + + -- Loading text and text size + + procedure Load + (This : in out Textline_Browser; + File : in String); + + function Get_Line_Text + (This : in Textline_Browser; + Line : in Positive) + return String; + + procedure Set_Line_Text + (This : in out Textline_Browser; + Line : in Positive; + Text : in String); + + function Get_Text_Size + (This : in Textline_Browser) + return Font_Size; + + procedure Set_Text_Size + (This : in out Textline_Browser; + Size : in Font_Size); + + + + + -- Columns and formatting + + function Get_Column_Character + (This : in Textline_Browser) + return Character; + + procedure Set_Column_Character + (This : in out Textline_Browser; + Value : in Character); + + function Get_Column_Widths + (This : in Textline_Browser) + return Column_Widths; + + -- An internal copy is kept of Widths, unlike the C++ version + procedure Set_Column_Widths + (This : in out Textline_Browser; + Widths : in Column_Widths); + + function Get_Format_Character + (This : in Textline_Browser) + return Character; + + procedure Set_Format_Character + (This : in out Textline_Browser; + Value : in Character); + + + + + -- Line positioning + + function Get_Top_Line + (This : in Textline_Browser) + return Positive; + + procedure Set_Top_Line + (This : in out Textline_Browser; + Line : in Positive); + + procedure Set_Middle_Line + (This : in out Textline_Browser; + Line : in Positive); + + procedure Set_Bottom_Line + (This : in out Textline_Browser; + Line : in Positive); + + procedure Set_Line_Position + (This : in out Textline_Browser; + Line : in Positive; + Place : in Line_Position); + + + + + -- Line selection + + function Set_Select + (This : in out Textline_Browser; + Line : in Positive; + State : in Boolean := True) + return Boolean; + + procedure Set_Select + (This : in out Textline_Browser; + Line : in Positive; + State : in Boolean := True); + + function Is_Selected + (This : in Textline_Browser; + Line : in Positive) + return Boolean; + + function Selected_Index + (This : in Textline_Browser) + return Natural; + + + + + -- Visibility, showing, hiding + + function Is_Visible + (This : in Textline_Browser; + Line : in Positive) + return Boolean; + + procedure Make_Visible + (This : in out Textline_Browser; + Line : in Positive); + + function Is_Displayed + (This : in Textline_Browser; + Line : in Positive) + return Boolean; + + procedure Show_Line + (This : in out Textline_Browser; + Line : in Positive); + + procedure Hide_Line + (This : in out Textline_Browser; + Line : in Positive); + + procedure Show + (This : in out Textline_Browser); + + procedure Hide + (This : in out Textline_Browser); + + + + + -- Icons for specific lines + + function Has_Icon + (This : in Textline_Browser; + Line : in Positive) + return Boolean; + + function Get_Icon + (This : in Textline_Browser; + Line : in Positive) + return FLTK.Images.Image_Reference; + + procedure Set_Icon + (This : in out Textline_Browser; + Line : in Positive; + Icon : in FLTK.Images.Image'Class); + + procedure Remove_Icon + (This : in out Textline_Browser; + Line : in Positive); + + + + + -- List dimensions + + function Full_List_Height + (This : in Textline_Browser) + return Integer; + + function Average_Item_Height + (This : in Textline_Browser) + return Integer; + + + + + -- Item implementation + + function Item_Width + (This : in Textline_Browser; + Item : in Item_Cursor) + return Integer; + + function Item_Height + (This : in Textline_Browser; + Item : in Item_Cursor) + return Integer; + + function Item_First + (This : in Textline_Browser) + return Item_Cursor; + + function Item_Last + (This : in Textline_Browser) + return Item_Cursor; + + function Item_Next + (This : in Textline_Browser; + Item : in Item_Cursor) + return Item_Cursor; + + function Item_Previous + (This : in Textline_Browser; + Item : in Item_Cursor) + return Item_Cursor; + + function Item_At + (This : in Textline_Browser; + Index : in Positive) + return Item_Cursor; + + procedure Item_Select + (This : in out Textline_Browser; + Item : in Item_Cursor; + State : in Boolean := True); + + function Item_Selected + (This : in Textline_Browser; + Item : in Item_Cursor) + return Boolean; + + procedure Item_Swap + (This : in out Textline_Browser; + A, B : in Item_Cursor); + + function Item_Text + (This : in Textline_Browser; + Item : in Item_Cursor) + return String; + + procedure Item_Draw + (This : in Textline_Browser; + Item : in Item_Cursor; + X, Y, W, H : in Integer); + + + + + function Line_Number + (This : in Textline_Browser; + Item : in Item_Cursor) + return Natural; + + +private + + + type C_Col_Widths is array (Positive range <>) of aliased Interfaces.C.int + with Convention => C; + + type C_Col_Widths_Access is access C_Col_Widths; + + + type Image_Access is access FLTK.Images.Image'Class; + + package Image_Vectors is new Ada.Containers.Vectors + (Index_Type => Positive, + Element_Type => Image_Access); + + + type Textline_Browser is new Browser with record + Columns : C_Col_Widths_Access; + Icons : Image_Vectors.Vector; + Item_Override_Ptrs : Item_Override_Fun_Ptr_Array; + Line_Number_Ptr : System.Address; + end record; + + overriding procedure Initialize + (This : in out Textline_Browser); + + overriding procedure Finalize + (This : in out Textline_Browser); + + procedure Extra_Init + (This : in out Textline_Browser; + X, Y, W, H : in Integer; + Text : in String); + + procedure Extra_Final + (This : in out Textline_Browser); + + + pragma Inline (Add); + pragma Inline (Insert); + pragma Inline (Move); + pragma Inline (Swap); + pragma Inline (Remove); + pragma Inline (Clear); + pragma Inline (Number_Of_Lines); + + pragma Inline (Set_Line_Text); + pragma Inline (Get_Text_Size); + pragma Inline (Set_Text_Size); + + pragma Inline (Get_Column_Character); + pragma Inline (Set_Column_Character); + pragma Inline (Get_Format_Character); + pragma Inline (Set_Format_Character); + + pragma Inline (Get_Top_Line); + pragma Inline (Set_Top_Line); + pragma Inline (Set_Middle_Line); + pragma Inline (Set_Bottom_Line); + pragma Inline (Set_Line_Position); + + pragma Inline (Selected_Index); + + pragma Inline (Is_Visible); + pragma Inline (Make_Visible); + pragma Inline (Show_Line); + pragma Inline (Hide_Line); + pragma Inline (Show); + pragma Inline (Hide); + + pragma Inline (Has_Icon); + pragma Inline (Get_Icon); + + pragma Inline (Bounding_Box); + pragma Inline (Left_Edge); + pragma Inline (Redraw_Line); + pragma Inline (Redraw_List); + + pragma Inline (Full_List_Height); + pragma Inline (Average_Item_Height); + + pragma Inline (Item_Width); + pragma Inline (Item_Height); + pragma Inline (Item_First); + pragma Inline (Item_Last); + pragma Inline (Item_Next); + pragma Inline (Item_Previous); + pragma Inline (Item_At); + pragma Inline (Item_Select); + pragma Inline (Item_Swap); + pragma Inline (Item_Text); + pragma Inline (Item_Draw); + + pragma Inline (Line_Number); + + +end FLTK.Widgets.Groups.Browsers.Textline; + + |