Spec-Zone.ru › GTK 4.0

GtkEditable

GtkEditable — Интерфейс для виджетов редактирования текста

Функции

const char * gtk_editable_get_text ()
void gtk_editable_set_text ()
char * gtk_editable_get_chars ()
void gtk_editable_insert_text ()
void gtk_editable_delete_text ()
gboolean gtk_editable_get_selection_bounds ()
void gtk_editable_select_region ()
void gtk_editable_delete_selection ()
void gtk_editable_set_position ()
int gtk_editable_get_position ()
void gtk_editable_set_editable ()
gboolean gtk_editable_get_editable ()
void gtk_editable_set_alignment ()
float gtk_editable_get_alignment ()
int gtk_editable_get_width_chars ()
void gtk_editable_set_width_chars ()
int gtk_editable_get_max_width_chars ()
void gtk_editable_set_max_width_chars ()
gboolean gtk_editable_get_enable_undo ()
void gtk_editable_set_enable_undo ()
guint gtk_editable_install_properties ()
GtkEditable * gtk_editable_get_delegate ()
void gtk_editable_init_delegate ()
void gtk_editable_finish_delegate ()
gboolean gtk_editable_delegate_set_property ()
gboolean gtk_editable_delegate_get_property ()

Свойства

int позиция-курсора Чтение
gboolean редактируемый Чтение / Запись
gboolean включить-отмену Чтение / Запись
int максимальная-ширина-символов Чтение / Запись
int предел-выделения Чтение
char * текст Чтение / Запись
int ширина-символов Чтение / Запись
float выравнивание-по-горизонтали Чтение / Запись

Сигналы

void изменён Выполнить последним
void удалить-текст Выполнить последним
void вставить-текст Выполнить последним

Типы и значения

GtkEditable
struct GtkEditableInterface
enum СвойстваGtkEditable

Иерархия объектов

    GInterface
    ╰── GtkEditable

Предварительные условия

GtkEditable требует GtkWidget.

Известные реализации

GtkEditable реализован в GtkEditableLabel, GtkEntry, GtkPasswordEntry, GtkSearchEntry, GtkSpinButton и GtkText.

Включения

#include <gtk/gtk.h>

Описание

Интерфейс GtkEditable должен быть реализован текстовыми виджетами редактирования, такими как GtkEntry и GtkSpinButton. Он содержит функции для универсальной работы с виджетом редактирования, большое количество сигналов действий, используемых для привязки клавиш, и несколько сигналов, к которым приложение может подключиться для изменения поведения виджета.

Например, подключив обработчик к “insert-text”, приложение может преобразовать весь ввод в виджете в заглавные буквы.

Принудительное преобразование ввода в заглавные буквы.

Реализация GtkEditable

Вероятнее всего, вы будете реализовывать GtkEditable в собственном виджете, если будете встраивать GtkText внутрь сложного виджета и захотите делегировать функциональность редактирования этому виджету. GtkEditable предоставляет несколько служебных функций, чтобы упростить эту задачу.

В вашей функции `class_init` вызовите gtk_editable_install_properties(), передав первый доступный идентификатор свойства:

В вашей функции `interface_init` для интерфейса GtkEditable реализуйте функцию `get_delegate`, которая возвращает ваш виджет текста:

Вам не нужно предоставлять другие функции-виртуальные методы. Стандартные реализации работают путем переадресации делегату, который возвращает функция GtkEditableInterface.get_delegate().

В вашей функции `instance_init` создайте ваш виджет текста и вызовите gtk_editable_init_delegate():

В вашей функции удаления вызовите gtk_editable_finish_delegate() перед уничтожением вашего виджета текста:

Наконец, используйте gtk_editable_delegate_set_property() в вашей функции set_property (и аналогично для get_property), чтобы установить свойства редактирования:

#include <ctype.h>

void
insert_text_handler (GtkEditable *editable,
                     const char  *text,
                     int          length,
                     int         *position,
                     gpointer     data)
{
  char *result = g_utf8_strup (text, length);

  g_signal_handlers_block_by_func (editable,
                               (gpointer) insert_text_handler, data);
  gtk_editable_insert_text (editable, result, length, position);
  g_signal_handlers_unblock_by_func (editable,
                                     (gpointer) insert_text_handler, data);

  g_signal_stop_emission_by_name (editable, "insert_text");

  g_free (result);
}

Важно отметить, что если вы создаете GtkEditable, использующий делегат, низкоуровневые сигналы “insert-text” и “delete-text” будут передаваться от "обёртки" редактирования делегату, но не будут передаваться от делегата обратно "обёртке" редактирования, так как это может привести к бесконечной рекурсии. Если вы хотите подключиться к сигналам “insert-text” и “delete-text”, вам нужно подключиться к ним к делегату, полученному через gtk_editable_get_delegate().

Функции

gtk_editable_get_text ()

const char *
gtk_editable_get_text (GtkEditable *editable);

Возвращает содержимое editable. Возвращаемая строка принадлежит GTK и не должна изменяться или освобождаться.

Параметры

editable

объект GtkEditable

Возвращаемое значение

указатель на содержимое editable.

[transfer none]

gtk_editable_set_text ()

void
gtk_editable_set_text (GtkEditable *editable,
                       const char *text);

Устанавливает текст в editable заданным значением, заменяя текущее содержимое.

Параметры

editable

объект GtkEditable

text

текст для установки

gtk_editable_get_chars ()

char *
gtk_editable_get_chars (GtkEditable *editable,
                        int start_pos,
                        int end_pos);

Возвращает последовательность символов. Символы, которые возвращаются, находятся в позициях от start_pos до, но не включая end_pos. Если end_pos отрицательное, возвращаются символы от start_pos до конца текста.

Обратите внимание, что позиции указаны в символах, а не в байтах.

Параметры

editable

объект GtkEditable

start_pos

начало текста

end_pos

конец текста

Возвращаемое значение

указатель на содержимое виджета в виде строки. Эта строка выделяется реализацией GtkEditable и должна быть освобождена вызывающим приложением.

[transfer full]

gtk_editable_insert_text ()

void
gtk_editable_insert_text (GtkEditable *editable,
                          const char *text,
                          int length,
                          int *position);

Вставляет length байтов text в содержимое виджета в позиции position.

Обратите внимание, что позиция указана в символах, а не в байтах. Функция обновляет position, чтобы указать позицию после вставленного текста.

[virtual do_insert_text]

Параметры

editable

объект GtkEditable

text

текст для добавления

length

длина текста в байтах или -1

position

место, куда будет вставлен текст.

[inout]

gtk_editable_delete_text ()

void
gtk_editable_delete_text (GtkEditable *editable,
                          int start_pos,
                          int end_pos);

Удаляет последовательность символов. Символы, которые удаляются, находятся в позициях от start_pos до, но не включая end_pos. Если end_pos отрицательное, удаляются символы от start_pos до конца текста.

Обратите внимание, что позиции указаны в символах, а не в байтах.

[virtual do_delete_text]

Параметры

editable

объект GtkEditable

start_pos

начальная позиция

end_pos

конечная позиция

gtk_editable_get_selection_bounds ()

gboolean
gtk_editable_get_selection_bounds (GtkEditable *editable,
                                   int *start_pos,
                                   int *end_pos);

Возвращает границы выделения editable.

start_pos будет заполнен началом выделения, а end_pos — концом. Если текст не выделен, оба будут идентичны, и будет возвращено FALSE.

Обратите внимание, что позиции указаны в символах, а не в байтах.

Параметры

editable

объект GtkEditable

start_pos

место для хранения начальной позиции или NULL.

[out][allow-none]

end_pos

место для хранения конечной позиции или NULL.

[out][allow-none]

Возвращаемое значение

TRUE , если выделение непустое, FALSE в противном случае.

gtk_editable_select_region ()

void
gtk_editable_select_region (GtkEditable *editable,
                            int start_pos,
                            int end_pos);

Выделяет область текста.

Выделяются символы в позициях от start_pos до, но не включая end_pos. Если end_pos отрицательное, выделяются символы от start_pos до конца текста.

Обратите внимание, что позиции указаны в символах, а не в байтах.

[virtual set_selection_bounds]

Параметры

editable

объект GtkEditable

start_pos

начало области

end_pos

конец области

gtk_editable_delete_selection ()

void
gtk_editable_delete_selection (GtkEditable *editable);

Удаляет текущий выделенный текст editable. Если текст не выделен, это действие не выполняется.

Параметры

editable

объект GtkEditable

gtk_editable_set_position ()

void
gtk_editable_set_position (GtkEditable *editable,
                           int position);

Устанавливает позицию курсора в редактируемом элементе на заданное значение.

Курсор отображается перед символом с заданным (базовым 0) индексом в содержимом редактируемого элемента. Значение должно быть меньше или равно количеству символов в редактируемом элементе. Значение -1 указывает, что позиция должна быть установлена после последнего символа редактируемого элемента. Обратите внимание, что position указывается в символах, а не в байтах.

Параметры

editable

a GtkEditable

position

позиция курсора

gtk_editable_get_position ()

int
gtk_editable_get_position (GtkEditable *editable);

Возвращает текущую позицию курсора относительно начала содержимого редактируемого элемента.

Обратите внимание, что эта позиция указывается в символах, а не в байтах.

Параметры

editable

a GtkEditable

Возвращает

позиция курсора

gtk_editable_set_editable ()

void
gtk_editable_set_editable (GtkEditable *editable,
                           gboolean is_editable);

Определяет, может ли пользователь редактировать текст в редактируемом виджете или нет.

Параметры

editable

a GtkEditable

is_editable

TRUE если пользователю разрешено редактировать текст в виджете

gtk_editable_get_editable ()

gboolean
gtk_editable_get_editable (GtkEditable *editable);

Возвращает, является ли editable редактируемым. Смотрите gtk_editable_set_editable().

Параметры

editable

a GtkEditable

Возвращает

TRUE если editable редактируемый.

gtk_editable_set_alignment ()

void
gtk_editable_set_alignment (GtkEditable *editable,
                            float xalign);

Устанавливает выравнивание содержимого редактируемого элемента.

Это управляет горизонтальным позиционированием содержимого, когда отображаемый текст короче ширины редактируемого элемента.

Параметры

editable

a GtkEditable

xalign

Горизонтальное выравнивание, от 0 (слева) до 1 (справа). Обратное для макетов RTL

gtk_editable_get_alignment ()

float
gtk_editable_get_alignment (GtkEditable *editable);

Получает значение, установленное gtk_editable_set_alignment().

Параметры

editable

a GtkEditable

Возвращает

выравнивание

gtk_editable_get_width_chars ()

int
gtk_editable_get_width_chars (GtkEditable *editable);

Получает значение, установленное gtk_editable_set_width_chars().

Параметры

editable

a GtkEditable

Возвращает

количество символов, для которых нужно запрашивать место, или отрицательное значение, если не установлено

gtk_editable_set_width_chars ()

void
gtk_editable_set_width_chars (GtkEditable *editable,
                              int n_chars);

Изменяет запрос размера редактируемого элемента, чтобы он был примерно подходящего размера для n_chars символов.

Обратите внимание, что это изменяет запрос размера, размер все еще может зависеть от того, как вы упаковываете виджет в контейнеры. Если n_chars равно -1, размер возвращается к размеру по умолчанию.

Параметры

editable

a GtkEditable

n_chars

ширина в символах

gtk_editable_get_max_width_chars ()

int
gtk_editable_get_max_width_chars (GtkEditable *editable);

Возвращает желаемую максимальную ширину editable в символах. Смотрите gtk_editable_set_max_width_chars().

Параметры

editable

a GtkEditable

Возвращает

максимальная ширина поля ввода в символах

gtk_editable_set_max-width-chars ()

void
gtk_editable_set_max_width_chars (GtkEditable *editable,
                                  int n_chars);

Устанавливает желаемую максимальную ширину в символах для editable.

Параметры

editable

a GtkEditable

n_chars

новая желаемая максимальная ширина в символах

gtk_editable_get_enable_undo ()

gboolean
gtk_editable_get_enable_undo (GtkEditable *editable);

Возвращает, включены ли действия отмены/повтора для editable

Параметры

editable

a GtkEditable

Возвращает

TRUE если отмена включена

gtk_editable_set_enable_undo ()

void
gtk_editable_set_enable_undo (GtkEditable *editable,
                              gboolean enable_undo);

Если включено, изменения в editable будут сохранены для действий отмены/повтора.

Это приводит к дополнительному копированию изменений текста, и они не хранятся в защищенной памяти. Таким образом, отмена принудительно отключается, когда “visibility” установлено в FALSE.

Параметры

editable

a GtkEditable

enable_undo

если отмена/повтор должны быть включены

gtk_editable_install_properties ()

guint
gtk_editable_install_properties (GObjectClass *object_class,
                                 guint first_prop);

Устанавливает свойства GtkEditable для class.

Это вспомогательная функция, которая должна вызываться в class_init после установки ваших собственных свойств.

Для обработки свойств в ваших функциях set_property и get_property вы можете использовать gtk_editable_delegate_set_property() и gtk_editable_delegate_get_property() (если вы используете делегат) или запомнить смещение first_prop и добавить его к значениям в перечислении GtkEditableProperties для получения идентификаторов свойств для этих свойств.

Параметры

object_class

a GObjectClass

first_prop

идентификатор свойства для использования для первого свойства

Возвращает

количество установленных свойств

gtk_editable_get_delegate ()

GtkEditable *
gtk_editable_get_delegate (GtkEditable *editable);

Получает GtkEditable, к которому editable делегирует свою реализацию. Обычно, делегат — это виджет GtkText.

Параметры

editable

объект GtkEditable

Возвращаемое значение

делегат GtkEditable.

[nullable][transfer none]

gtk_editable_init_delegate ()

void
gtk_editable_init_delegate (GtkEditable *editable);

Настраивает делегата для GtkEditable, предполагая, что vfunc get_delegate в интерфейсе GtkEditable был настроен для типа editable.

Это вспомогательная функция, которую следует вызывать в инициализации экземпляра после создания объекта-делегата.

Параметры

editable

объект GtkEditable

gtk_editable_finish_delegate ()

void
gtk_editable_finish_delegate (GtkEditable *editable);

Отменяет настройку, выполненную функцией gtk_editable_init_delegate().

Это вспомогательная функция, которую следует вызывать в методе dispose перед удалением объекта-делегата.

Параметры

editable

объект GtkEditable

gtk_editable_delegate_set_property ()

gboolean
gtk_editable_delegate_set_property (GObject *object,
                                    guint prop_id,
                                    const GValue *value,
                                    GParamSpec *pspec);

Устанавливает свойство для делегата GtkEditable для object .

Это вспомогательная функция, которую следует вызывать в set_property, прежде чем обрабатывать собственные свойства.

Параметры

object

объект GObject

prop_id

идентификатор свойства

value

значение для установки

pspec

GParamSpec для свойства

Возвращаемое значение

TRUE если свойство найдено

gtk_editable_delegate_get_property ()

gboolean
gtk_editable_delegate_get_property (GObject *object,
                                    guint prop_id,
                                    GValue *value,
                                    GParamSpec *pspec);

Получает свойство делегата GtkEditable для object .

Это вспомогательная функция, которую следует вызывать в get_property, прежде чем обрабатывать собственные свойства.

Параметры

object

объект GObject

prop_id

идентификатор свойства

value

значение для установки

pspec

GParamSpec для свойства

Возвращаемое значение

TRUE если свойство найдено

Типы и значения

GtkEditable

typedef struct _GtkEditable GtkEditable;

struct GtkEditableInterface

struct GtkEditableInterface {
  GTypeInterface                   base_iface;

  /* signals */
  void (* insert_text)              (GtkEditable    *editable,
                                     const char     *text,
                                     int             length,
                                     int            *position);
  void (* delete_text)              (GtkEditable    *editable,
                                     int             start_pos,
                                     int             end_pos);
  void (* changed)                  (GtkEditable    *editable);

  /* vtable */
  const char * (* get_text)         (GtkEditable    *editable);
  void     (* do_insert_text)       (GtkEditable    *editable,
                                     const char     *text,
                                     int             length,
                                     int            *position);
  void     (* do_delete_text)       (GtkEditable    *editable,
                                     int             start_pos,
                                     int             end_pos);

  gboolean (* get_selection_bounds) (GtkEditable    *editable,
                                     int            *start_pos,
                                     int            *end_pos);
  void     (* set_selection_bounds) (GtkEditable    *editable,
                                     int             start_pos,
                                     int             end_pos);
  GtkEditable * (* get_delegate)    (GtkEditable    *editable);
};

перечисление GtkEditableProperties

Члены

GTK_EDITABLE_PROP_TEXT

GTK_EDITABLE_PROP_CURSOR_POSITION

GTK_EDITABLE_PROP_SELECTION_BOUND

GTK_EDITABLE_PROP_EDITABLE

GTK_EDITABLE_PROP_WIDTH_CHARS

GTK_EDITABLE_PROP_MAX_WIDTH_CHARS

GTK_EDITABLE_PROP_XALIGN

GTK_EDITABLE_PROP_ENABLE_UNDO

GTK_EDITABLE_NUM_PROPERTIES

Подробные сведения о свойствах

Свойство “cursor-position”

  “cursor-position”          int

Текущее положение курсора ввода в символах.

Владелец: GtkEditable

Флаги: Чтение

Допустимые значения: [0,65535]

Значение по умолчанию: 0

Свойство “editable”

  “editable”                 gboolean

Возможность редактирования содержимого поля ввода.

Владелец: GtkEditable

Флаги: Чтение / Запись

Значение по умолчанию: TRUE

Свойство “enable-undo”

  “enable-undo”              gboolean

Включить отмену/повтор для поля ввода.

Владелец: GtkEditable

Флаги: Чтение / Запись

Значение по умолчанию: TRUE

Свойство “max-width-chars”

  “max-width-chars”          int

Желаемая максимальная ширина поля ввода в символах.

Владелец: GtkEditable

Флаги: Чтение / Запись

Допустимые значения: >= -1

Значение по умолчанию: -1

Свойство “selection-bound”

  “selection-bound”          int

Положение противоположного конца выделения от курсора в символах.

Владелец: GtkEditable

Флаги: Чтение

Допустимые значения: [0,65535]

Значение по умолчанию: 0

Свойство “text”

  “text”                     char *

Содержимое поля ввода.

Владелец: GtkEditable

Флаги: Чтение / Запись

Значение по умолчанию: ""

Свойство “width-chars”

  “width-chars”              int

Количество символов для отвода места в поле ввода.

Владелец: GtkEditable

Флаги: Чтение / Запись

Допустимые значения: >= -1

Значение по умолчанию: -1

Свойство “xalign”

  “xalign”                   float

Горизонтальное выравнивание от 0 (слева) до 1 (справа). Обратное для RTL-макетов.

Владелец: GtkEditable

Флаги: Чтение / Запись

Допустимые значения: [0,1]

Значение по умолчанию: 0

Подробности сигналов

Сигнал “changed”

void
user_function (GtkEditable *editable,
               gpointer     user_data)

Сигнал ::changed генерируется в конце одной видимой пользователю операции над содержимым GtkEditable.

Например, операция вставки, которая заменяет содержимое выделения, вызовет только одно событие (хотя она реализуется путем сначала удаления выделения, а затем вставки нового содержимого и может вызвать несколько событий ::notify::text).

Параметры

editable

объект, получивший сигнал

user_data

данные пользователя, установленные при подключении обработчика сигнала.

Флаги: Run Last

Сигнал “delete-text”

void
user_function (GtkEditable *editable,
               int          start_pos,
               int          end_pos,
               gpointer     user_data)

Этот сигнал генерируется при удалении текста из виджета пользователем. Обработчик по умолчанию этого сигнала обычно отвечает за удаление текста, поэтому подключившись к этому сигналу и остановив его с помощью g_signal_stop_emission(), можно изменить диапазон удаляемого текста или вообще предотвратить его удаление. Параметры start_pos и end_pos интерпретируются так же, как и для gtk_editable_delete_text().

Параметры

editable

объект, получивший сигнал

start_pos

начальная позиция

end_pos

конечная позиция

user_data

данные пользователя, установленные при подключении обработчика сигнала.

Флаги: Run Last

Сигнал “insert-text”

void
user_function (GtkEditable *editable,
               char        *text,
               int          length,
               gpointer     position,
               gpointer     user_data)

Этот сигнал генерируется при вставке текста в виджет пользователем. Обработчик по умолчанию этого сигнала обычно отвечает за вставку текста, поэтому подключившись к этому сигналу и остановив его с помощью g_signal_stop_emission(), можно изменить вставляемый текст или вообще предотвратить его вставку.

Параметры

editable

объект, получивший сигнал

text

новый вставляемый текст

length

длина нового текста в байтах или -1, если new_text завершается нулём

position

позиция, в символах, в которую нужно вставить новый текст. Это параметр вход/выход. После завершения генерации сигнала он должен указывать на позицию после вставленного текста.

[inout][type int]

user_data

данные пользователя, установленные при подключении обработчика сигнала.

Флаги: Run Last

© 2005–2020 The GNOME Project
Licensed under the GNU Lesser General Public License version 2.1 or later.
https://developer-old.gnome.org/gtk4/4.0/GtkEditable.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API