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 | место для хранения начальной позиции или | [out][allow-none] |
end_pos | место для хранения конечной позиции или | [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 | ||
position | позиция курсора |
gtk_editable_get_position ()
int
gtk_editable_get_position (GtkEditable *editable); Возвращает текущую позицию курсора относительно начала содержимого редактируемого элемента.
Обратите внимание, что эта позиция указывается в символах, а не в байтах.
Параметры
editable |
Возвращает
позиция курсора
gtk_editable_set_editable ()
void gtk_editable_set_editable (GtkEditable *editable,gboolean is_editable);
Определяет, может ли пользователь редактировать текст в редактируемом виджете или нет.
Параметры
editable | ||
is_editable |
|
gtk_editable_get_editable ()
gboolean
gtk_editable_get_editable (GtkEditable *editable); Возвращает, является ли editable редактируемым. Смотрите gtk_editable_set_editable().
Параметры
editable |
Возвращает
TRUE если editable редактируемый.
gtk_editable_set_alignment ()
void gtk_editable_set_alignment (GtkEditable *editable,float xalign);
Устанавливает выравнивание содержимого редактируемого элемента.
Это управляет горизонтальным позиционированием содержимого, когда отображаемый текст короче ширины редактируемого элемента.
Параметры
editable | ||
xalign | Горизонтальное выравнивание, от 0 (слева) до 1 (справа). Обратное для макетов RTL |
gtk_editable_get_alignment ()
float
gtk_editable_get_alignment (GtkEditable *editable); Получает значение, установленное gtk_editable_set_alignment().
Параметры
editable |
Возвращает
выравнивание
gtk_editable_get_width_chars ()
int
gtk_editable_get_width_chars (GtkEditable *editable); Получает значение, установленное gtk_editable_set_width_chars().
Параметры
editable |
Возвращает
количество символов, для которых нужно запрашивать место, или отрицательное значение, если не установлено
gtk_editable_set_width_chars ()
void gtk_editable_set_width_chars (GtkEditable *editable,int n_chars);
Изменяет запрос размера редактируемого элемента, чтобы он был примерно подходящего размера для n_chars символов.
Обратите внимание, что это изменяет запрос размера, размер все еще может зависеть от того, как вы упаковываете виджет в контейнеры. Если n_chars равно -1, размер возвращается к размеру по умолчанию.
Параметры
editable | ||
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 |
Возвращает
максимальная ширина поля ввода в символах
gtk_editable_set_max-width-chars ()
void gtk_editable_set_max_width_chars (GtkEditable *editable,int n_chars);
Устанавливает желаемую максимальную ширину в символах для editable.
Параметры
editable | ||
n_chars | новая желаемая максимальная ширина в символах |
gtk_editable_get_enable_undo ()
gboolean
gtk_editable_get_enable_undo (GtkEditable *editable); Возвращает, включены ли действия отмены/повтора для editable
Параметры
editable |
Возвращает
TRUE если отмена включена
gtk_editable_set_enable_undo ()
void gtk_editable_set_enable_undo (GtkEditable *editable,gboolean enable_undo);
Если включено, изменения в editable будут сохранены для действий отмены/повтора.
Это приводит к дополнительному копированию изменений текста, и они не хранятся в защищенной памяти. Таким образом, отмена принудительно отключается, когда “visibility” установлено в FALSE.
Параметры
editable | ||
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 |
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