-----------------------------------------------------------------------
-- GtkAda - Ada95 binding for Gtk+/Gnome --
-- --
-- Copyright (C) 1998-2000 E. Briot, J. Brobecker and A. Charlet --
-- Copyright (C) 2000-2006 AdaCore --
-- --
-- This library is free software; you can redistribute it and/or --
-- modify it under the terms of the GNU General Public --
-- License as published by the Free Software Foundation; either --
-- version 2 of the License, or (at your option) any later version. --
-- --
-- This library is distributed in the hope that it will be useful, --
-- but WITHOUT ANY WARRANTY; without even the implied warranty of --
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU --
-- General Public License for more details. --
-- --
-- You should have received a copy of the GNU General Public --
-- License along with this library; if not, write to the --
-- Free Software Foundation, Inc., 59 Temple Place - Suite 330, --
-- Boston, MA 02111-1307, USA. --
-- --
-- As a special exception, if other files instantiate generics from --
-- this unit, or you link this unit with other files to produce an --
-- executable, this unit does not by itself cause the resulting --
-- executable to be covered by the GNU General Public License. This --
-- exception does not however invalidate any other reasons why the --
-- executable file might be covered by the GNU Public License. --
-----------------------------------------------------------------------
--
-- A Gtk_Entry is a single line text editing widget.
-- The text is automatically scrolled if it is longer than can be displayed
-- on the screen, so that the cursor position is visible at all times.
--
-- See Gtk_Text_View for a multiple-line text editing widget.
--
-- 2.8.17
-- Numeric/Text Data Entry
-- create_entry.adb
-- gtk-gentry
with Glib.Properties;
with Gtk.Editable;
with Gtk.Entry_Completion; use Gtk.Entry_Completion;
with Pango.Layout;
package Gtk.GEntry is
type Gtk_Entry_Record is new Gtk.Editable.Gtk_Editable_Record with private;
-- Gtk_Entry is actually a child of Gtk_Widget, and implements the
-- Gtk_Editable interface, but GtkAda does not support yet interfaces,
-- so use direct inheritance for now ???
type Gtk_Entry is access all Gtk_Entry_Record'Class;
subtype Gtk_GEntry is Gtk_Entry;
procedure Gtk_New (Widget : out Gtk_Entry);
-- Create a new entry with no maximum length for the text
procedure Initialize (Widget : access Gtk_Entry_Record'Class);
-- Internal initialization function.
-- See the section "Creating your own widgets" in the documentation.
function Get_Type return Gtk.Gtk_Type;
-- Return the internal value associated with a Gtk_Entry.
procedure Set_Visibility
(The_Entry : access Gtk_Entry_Record; Visible : Boolean);
function Get_Visibility
(The_Entry : access Gtk_Entry_Record) return Boolean;
-- Set the visibility of the characters in the entry.
-- If Visible is set to False, the characters will be replaced with
-- the invisible character ('*' by default) in the display, and when the
-- text is copied elsewhere.
procedure Set_Invisible_Char
(The_Entry : access Gtk_Entry_Record; Char : Gunichar);
function Get_Invisible_Char
(The_Entry : access Gtk_Entry_Record) return Gunichar;
-- Set the character to use in place of the actual text when
-- Set_Visibility has been called to set text visibility to False.
-- i.e. this is the character used in "password mode" to
-- show the user how many characters have been typed. The default
-- invisible char is an asterisk ('*'). If you set the invisible char
-- to 0, then the user will get no feedback at all; there will be
-- no text on the screen as they type.
-- for entries with visisbility set to false. See Set_Invisible_Char.
procedure Set_Has_Frame
(The_Entry : access Gtk_Entry_Record; Setting : Boolean := True);
function Get_Has_Frame
(The_Entry : access Gtk_Entry_Record) return Boolean;
-- Set whether the entry has a beveled frame around it.
procedure Set_Max_Length
(The_Entry : access Gtk_Entry_Record; Max : Gint);
function Get_Max_Length (The_Entry : access Gtk_Entry_Record) return Gint;
-- Set the maximum length for the text.
-- The current text is truncated if needed.
procedure Set_Activates_Default
(The_Entry : access Gtk_Entry_Record; Setting : Boolean);
function Get_Activates_Default
(The_Entry : access Gtk_Entry_Record) return Boolean;
-- If Setting is True, pressing Enter in the Entry will activate the
-- default widget for the window containing the entry. This usually means
-- that the dialog box containing the entry will be closed, since the
-- default widget is usually one of the dialog buttons.
--
-- (For experts: if Setting is True, the entry calls
-- Gtk.Window.Activate_Default on the window containing the entry, in
-- the default handler for the "activate" signal.)
procedure Set_Width_Chars
(The_Entry : access Gtk_Entry_Record'Class; Width : Gint);
function Get_Width_Chars
(The_Entry : access Gtk_Entry_Record'Class) return Gint;
-- Number of characters to leave space for in the entry, on the screen.
-- This is the number of visible characters, not the maximal number of
-- characters the entry can contain
procedure Set_Text
(The_Entry : access Gtk_Entry_Record; Text : UTF8_String);
function Get_Text (The_Entry : access Gtk_Entry_Record) return UTF8_String;
-- Modify the text in the entry.
-- The text is cut at the maximum length that was set when the entry was
-- created.
-- The text replaces the current contents.
procedure Set_Alignment (Ent : access Gtk_Entry_Record; Xalign : Gfloat);
function Get_Alignment (Ent : access Gtk_Entry_Record) return Gfloat;
-- Sets the alignment for the contents of the entry. This controls
-- the horizontal positioning of the contents when the displayed
-- text is shorter than the width of the entry.
procedure Set_Completion
(Ent : access Gtk_Entry_Record;
Completion : access Gtk_Entry_Completion_Record'Class);
function Get_Completion
(Ent : access Gtk_Entry_Record)
return Gtk_Entry_Completion;
-- Sets Completion to be the auxiliary completion object to use with Ent.
-- All further configuration of the completion mechanism is done on
-- Completion using the Gtk.Entry_Completion API.
function Text_Index_To_Layout_Index
(Ent : access Gtk_Entry_Record;
Text_Index : Gint)
return Gint;
-- Converts from a position in the entry's layout (returned by Get_Layout)
-- to a position in the entry contents (returned by Get_Text).
-- Returns the byte index into the entry layout text
function Layout_Index_To_Text_Index
(Ent : access Gtk_Entry_Record;
Layout_Index : Gint)
return Gint;
-- Converts from a position in the entry contents (returned
-- by Get_Text) to a position in the
-- entry's layout (returned by Get_Layout,
-- with text retrieved via pango.layout.Get_Text).
-- Return the byte index into the entry contents
procedure Get_Layout_Offsets
(The_Entry : access Gtk_Entry_Record;
X : out Gint;
Y : out Gint);
-- Obtain the position of the Pango_Layout used to render text
-- in the entry, in widget coordinates. Useful if you want to line
-- up the text in an entry with some other text, e.g. when using the
-- entry to implement editable cells in a sheet widget.
--
-- Also useful to convert mouse events into coordinates inside the
-- Pango_Layout, e.g. to take some action if some part of the entry text
-- is clicked.
--
-- Note that as the user scrolls around in the entry the offsets will
-- change; you'll need to connect to the "notify::scroll_offset"
-- signal to track this. Remember when using the Pango_Layout
-- functions you need to convert to and from pixels using
-- Pango_Pixels or Pango_Scale.
function Get_Layout (The_Entry : access Gtk_Entry_Record)
return Pango.Layout.Pango_Layout;
-- Return the widget that manages all the layout of text (left-to-right,
-- right-to-left, fonts,...). Changing the font used for the entry should
-- be done by changing the font using for this layout. Note that you should
-- also change the font in the Pango_Context returned by Get_Pango_Context,
-- or the next keypress event in the entry will restore the default initial
-- font.
--
-- The layout is useful to e.g. convert text positions to pixel positions,
-- in combination with Get_Layout_Offsets. The returned layout is owned by
-- the entry so need not be freed by the caller.
-----------------
-- Obsolescent --
-----------------
-- All subprograms below are now obsolescent in gtk+. They might be removed
-- from future versions of gtk+ (and therefore GtkAda).
-- To find out whether your code uses any of these, we recommend compiling
-- with the -gnatwj switch
--
procedure Gtk_New (Widget : out Gtk_Entry; Max : Gint);
pragma Obsolescent; -- New_With_Max_Length
-- Create a new entry with a maximum length for the text.
-- The text can never be longer than Max characters.
procedure Initialize
(Widget : access Gtk_Entry_Record'Class; Max : Gint);
pragma Obsolescent;
-- Internal initialization function.
-- See the section "Creating your own widgets" in the documentation.
procedure Append_Text
(The_Entry : access Gtk_Entry_Record; Text : UTF8_String);
pragma Obsolescent ("See Gtk.Editable.Insert_Text"); -- Append_Text
-- Append a new string at the end of the existing one.
procedure Prepend_Text
(The_Entry : access Gtk_Entry_Record; Text : UTF8_String);
pragma Obsolescent ("See Gtk.Editable.Insert_Text"); -- Prepend_Text
-- Insert some text at the beginning of the entry.
procedure Set_Editable
(The_Entry : access Gtk_Entry_Record; Editable : Boolean);
pragma Obsolescent; -- Set_Editable
function Get_Chars (The_Entry : access Gtk_Entry_Record) return UTF8_String
renames Get_Text;
-- pragma Obsolescent;
-- Convenience function provided for compatibility with GtkAda 1.2
--
----------------
-- Properties --
----------------
--
-- The following properties are defined for this widget. See
-- Glib.Properties for more information on properties.
--
-- Name: Text_Position_Property
-- Type: Gint
-- Flags: read-write
-- Descr: The current position of the insertion point
--
-- Name: Editable_Property
-- Type: Boolean
-- Flags: read-write
-- Descr: Whether the entry contents can be edited
-- See also: Set_Editable
--
-- Name: Max_Length_Property
-- Type: Gint
-- Flags: read-write
-- Descr: Maximum number of characters for this entry
-- See also: Set_Max_Length
--
-- Name: Visibility_Property
-- Type: Boolean
-- Flags: read-write
-- Descr: FALSE displays the "invisible char" instead of the actual
-- text (password mode)
-- See also: Set_Visibility
--
-- Name: Invisible_Char_Property
-- Type: Gunichar
-- Flags: read-write
-- Descr: The character to use when masking entry contents
-- (in "password mode")
--
-- Name: Activates_Default_Property
-- Type: Boolean
-- Flags: read-write
-- Descr: Whether to activate the default widget (such as the default
-- button in a dialog) when Enter is pressed.)
--
-- Name: Width_Chars_Property
-- Type: Gint
-- Flags: read-write
-- Descr: Number of characters to leave space for in the entry.
-- See also: Set_Width_Chars
--
-- Name: Scroll_Offset_Property
-- Type: Gint
-- Flags: read only
-- Descr: Number of pixels of the entry scrolled off the screen to the
-- left
--
-- Name: Cursor_Position_Property
-- Type: Int
-- Descr: The current position of the insertion cursor in chars
--
-- Name: Has_Frame_Property
-- Type: Boolean
-- Descr: FALSE removes outside bevel from entry
--
-- Name: Selection_Bound_Property
-- Type: Int
-- Descr: The position of the opposite end of the selection from the cursor
-- in chars
--
-- Name: Text_Property
-- Type: String
-- Descr: The contents of the entry
--
-- Name: Xalign_Property
-- Type: Float
-- Descr: The horizontal alignment, from 0 (left) to 1 (right). Reversed
-- for RTL layouts.
--
--
--
Text_Position_Property : constant Glib.Properties.Property_Int;
Editable_Property : constant Glib.Properties.Property_Boolean;
Max_Length_Property : constant Glib.Properties.Property_Int;
Visibility_Property : constant Glib.Properties.Property_Boolean;
Invisible_Char_Property : constant Glib.Properties.Property_Unichar;
Activates_Default_Property : constant Glib.Properties.Property_Boolean;
Width_Chars_Property : constant Glib.Properties.Property_Int;
Scroll_Offset_Property : constant Glib.Properties.Property_Int;
Cursor_Position_Property : constant Glib.Properties.Property_Int;
Has_Frame_Property : constant Glib.Properties.Property_Boolean;
Selection_Bound_Property : constant Glib.Properties.Property_Int;
Text_Property : constant Glib.Properties.Property_String;
Xalign_Property : constant Glib.Properties.Property_Float;
-------------
-- Signals --
-------------
--
-- The following new signals are defined for this widget:
--
-- - "activate"
-- procedure Handler (Ent : access Gtk_Entry_Record'Class);
-- Called when the entry is activated, for instance when the user
-- presses while in it
--
-- - "populate_popup"
-- procedure Handler
-- (Ent : access Gtk_Entry_Record'Class;
-- Menu : access Gtk_Menu_Record'Class);
-- ???
--
-- - "move_cursor"
-- procedure Handler
-- (Ent : access Gtk_Entry_Record'Class;
-- Step : Gtk_Movement_Step;
-- Amount : Gint;
-- Extend_Selection : Boolean);
-- You should emit this signal to request that the cursor be moved. This
-- is mostly used when connected to a keybinding, as is done by default
-- for the arrow keys for instance.
--
-- - "insert_at_cursor"
-- procedure Handler
-- (Ent : access Gtk_Entry_Record'Class;
-- Text : String);
-- You should emit this signal to request that some text be inserted at
-- the current cursor location. This is mostly used from key bindings.
--
-- - "delete_from_cursor"
-- procedure Handler
-- (Ent : access Gtk_Entry_Record'Class;
-- Step : Gtk_Movement_Step;
-- Amount : Gint);
-- You should emit this signal to request that some text be delete from
-- the cursor position.
--
-- - "cut_clipboard"
-- procedure Handler (Ent : access Gtk_Entry_Record'Class);
-- You should emit this signal to request that the current selection be
-- deleted and copied into the clipboard. This is mostly used from key
-- bindings.
--
-- - "copy_clipboard"
-- procedure Handler (Ent : access Gtk_Entry_Record'Class);
-- You should emit this signal to request that the current selection be
-- copied into the clipboard. This is mostly used from key
-- bindings.
--
-- - "paste_clipboard"
-- procedure Handler (Ent : access Gtk_Entry_Record'Class);
-- You should emit this signal to request that the clipboard be inserted
-- at the current cursor location. This is mostly used from key bindings.
--
-- - "toggle_overwrite"
-- procedure Handler (Ent : access Gtk_Entry_Record'Class);
-- You should emit this signal to request that the insertion mode be
-- changed. This is mostly used from a key binding, as is done by default
-- for the Insert key.
--
Signal_Activate : constant String := "activate";
Signal_Backspace : constant String := "backspace";
Signal_Copy_Clipboard : constant String := "copy_clipboard";
Signal_Cut_Clipboard : constant String := "cut_clipboard";
Signal_Delete_From_Cursor : constant String := "delete_from_cursor";
Signal_Insert_At_Cursor : constant String := "insert_at_cursor";
Signal_Move_Cursor : constant String := "move_cursor";
Signal_Paste_Clipboard : constant String := "paste_clipboard";
Signal_Populate_Popup : constant String := "populate_popup";
Signal_Toggle_Overwrite : constant String := "toggle_overwrite";
private
type Gtk_Entry_Record is new
Gtk.Editable.Gtk_Editable_Record with null record;
Text_Position_Property : constant Glib.Properties.Property_Int :=
Glib.Properties.Build ("text_position");
Editable_Property : constant Glib.Properties.Property_Boolean :=
Glib.Properties.Build ("editable");
Max_Length_Property : constant Glib.Properties.Property_Int :=
Glib.Properties.Build ("max_length");
Visibility_Property : constant Glib.Properties.Property_Boolean :=
Glib.Properties.Build ("visibility");
Invisible_Char_Property : constant Glib.Properties.Property_Unichar :=
Glib.Properties.Build ("invisible_char");
Activates_Default_Property : constant Glib.Properties.Property_Boolean :=
Glib.Properties.Build ("activates_default");
Width_Chars_Property : constant Glib.Properties.Property_Int :=
Glib.Properties.Build ("width_chars");
Scroll_Offset_Property : constant Glib.Properties.Property_Int :=
Glib.Properties.Build ("scroll_offset");
Cursor_Position_Property : constant Glib.Properties.Property_Int :=
Glib.Properties.Build ("cursor-position");
Has_Frame_Property : constant Glib.Properties.Property_Boolean :=
Glib.Properties.Build ("has-frame");
Selection_Bound_Property : constant Glib.Properties.Property_Int :=
Glib.Properties.Build ("selection-bound");
Text_Property : constant Glib.Properties.Property_String :=
Glib.Properties.Build ("text");
Xalign_Property : constant Glib.Properties.Property_Float :=
Glib.Properties.Build ("xalign");
pragma Import (C, Get_Type, "gtk_entry_get_type");
end Gtk.GEntry;
-- This subprogram was never bound, and is now obsolescent:
-- No binding: gtk_entry_select_region
-- No binding: gtk_entry_set_position