Шрифт:
void gtk_entry_set_max_length(GtkEntry *entry, gint max);
G_CONST_RETURN gchar* gtk_entry_get_text(GtkEntry *entry);
void gtk_entry_set_text(GtkEntry *entry, const gchar *text);
void gtk_entry_append_text(GtkEntry *entry, const gchar *text);
void gtk_entry_prepend_text(GtkEntry* entry, const gchar *text);
void gtk_entry_set_visibility(GtkEntry *entry, gboolean visible);
void gtk_entry_set_invisible_char(GtkEntry *entry, gchar invch);
void gtk_entry_set_editable(GtkEntry *entry, gboolean editable);
Вы можете создать
GtkEntry
с помощью функции gtk_entry_new
или при вводе текста фиксированной длины с помощью функции gtk_entry_new_with_max_length
. Ограничение ввода определенной длиной текста избавляет вас от проверки корректности длины ввода и, возможно, необходимости информировать пользователя о том, что текст слишком длинный. Для получения содержимого виджета
GtkEntry
вызывайте функцию gtk_entry_get_text
, которая возвращает указатель const char
, внутренний по отношению к GtkEntry
(G_CONST_RETURN
— макрос, определенный в библиотеке GLib). Если вы хотите изменить текст или передать его в функцию, которая может его модифицировать, следует скопировать строку с помощью, например, функции strcpy
. Вы можете вручную задавать и изменять содержимое виджета
GtkEntry
, применяя функции _set_text
, _append_text
и _modify_text
. Учтите, что они принимают указатели const. Для применения
GtkEntry
в качестве поля ввода пароля, которое отображает звездочки на месте символов, воспользуйтесь функцией gtk_entry_set_visibility
, передав ей параметр visible
со значением FALSE
. Скрывающий символ можно изменить в соответствии с вашими требованиями с помощью функции gtk_entry_set_invisible_char
. Выполните упражнение 16.4.
Упражнение 16.4. Ввод имени пользователя или пароля
Теперь, познакомившись с функциями виджета GtkEntry, посмотрим на них в действии в небольшой программе. Программа entry.c будет создавать окно ввода имени пользователя и пароля и сравнивать введенный пароль с секретным.
1. Сначала определим секретный пароль, остроумно заданный как
secret
:
#include <gtk/gtk.h>
#include <stdio.h>
#include <string.h>
const char * password = "secret";
2. У вас есть две функции обратного вызова, которые вызываются, когда уничтожается окно и щелкается мышью кнопка OK:
void closeApp(GtkWidget *window, gpointer data) {
gtk_main_quit;
}
void button_clicked(GtkWidget *button, gpointer data) {
const char *password_text =
gtk_entry_get_text(GTK_ENTRY((GtkWidget *) data));
if (strcmp(password_text, password) == 0)
printf("Access granted!\n");
else printf("Access denied!\n");
}
3. В функции
main
создается, компонуется интерфейс и связываются обратные вызовы с сигналами. Для компоновки виджетов меток и полей ввода примените виджеты-контейнеры hbox и vbox:
int main (int argc, char *argv[]) {
GtkWidget *window;
GtkWidget *username_label, *password_label;
GtkWidget *username_entry, *password_entry;
GtkWidget *ok_button;
GtkWidget *hbox1, *hbox2;
GtkWidget *vbox;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "GtkEntryBox");
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_windowset_default_size(GTK_WINDOW(window), 200, 200);
g_signal_connect(GTK_OBJECT(window), "destroy",
GTK_SIGNAL_FUNC(closeApp), NULL);
username_label = gtk_label_new("Login:");
password_label = gtk_label_new("Password:");
username_entry = gtk_entry_new;
password_entry = gtk_entry_new;