Отправляет email-рассылки с помощью сервиса Sendsay

Практические советы по GTK+

  Все выпуски  

Практические советы по GTK+ (Дополнительные возможности GtkEntry)


Дополнительные возможности GtkEntry

Такой простой виджет, как GtkEntry (поле ввода для текста) содержит множество дополнительных полезных свойств.

 

1) Например, поле ввода можно переключить в режим ввода пароля:

GtkWidget *entry  = gtk_entry_new();

gtk_entry_set_visibility(GTK_ENTRY(entry),FALSE);// password mode

Отображать все символы не звёздочками по умолчанию, а своими символами, в данном случае плюсиками:

gtk_entry_set_invisible_char(GTK_ENTRY(entry),'+');

 

2) Ещё можно сделать как в броузере, при вводе начала какого-нибудь текста, появляется подсказка с возможными вариантами продолжения. То есть можно забить набор готовых слов или фраз, которые часто набираются в поле ввода и при вводе первых символов будет появляться список с возможными вариантами продолжения фразы. Вот пример такой реализации, где для поля ввода имени файла заложено два варианта: protocol.txt и log.txt

{

 GtkEntryCompletion *completion;

 GtkListStore *completion_model;

 GtkTreeIter iter;

// Создать поле ввода

 GtkWidget *entry  = gtk_entry_new();

// Создать объект completion

 completion = gtk_entry_completion_new();

//  Сопоставить его с полем ввода

 gtk_entry_set_completion (GTK_ENTRY (entry), completion);

 g_object_unref (completion);

// Создаём модель списка с одним столбцом

 completion_model = gtk_list_store_new(1, G_TYPE_STRING);

 gtk_entry_completion_set_model(completion,GTK_TREE_MODEL(completion_model));

 g_object_unref (completion_model);

// Использовать наш единственный столбец как текстовый

 gtk_entry_completion_set_text_column (completion, 0);

 

// Добавляем слова в список

 gtk_list_store_append (completion_model, &iter);

 gtk_list_store_set (completion_model, &iter, 0, "protocol.txt", -1);

 gtk_list_store_append (completion_model, &iter);

 gtk_list_store_set (completion_model, &iter, 0, "log.txt", -1);

// и ещё можно добавлять слова ...

}

 

 

3) Начиная с GTK 2.16 виджет GtkEntry(текстовое поле ввода) приобрёл существенные дополнения. Теперь на поле ввода может располагаться что-то вроде полосы прогресса, причём она может просто постепенно увеличиваться, а может бегать по полю ввода:

Задать размер отображаемой полосы прогресса, от 0 до 1:

gtk_entry_set_progress_pulse_step(GTK_ENTRY(entry),0.5);

Если будем постепенно менять её размер, от полоса прогресса может вырасти от нулевой длины до всего поля ввода.

Если полоса прогресса занимает не всё поле ввода, по полосу прогресса можно сдвигать по полю ввода вправо-влево функцией:

gtk_entry_progress_pulse(GTK_ENTRY (entry_report_file));

Сдвиг полосы прогресса происходит при каждом вызове функции на один шаг, задаваемый через gtk_entry_set_progress_pulse_step(); Как только полоса прогресса дойдёт до правого края, она пойдёт назад и т.д.

 

 

4) Но по моему самое полезное добавление из последних - это возможность размещать кнопки внутри поля ввода.

GtkWidget *entry  = gtk_entry_new();

Создать кнопку внутри поля ввода справа:

gtk_entry_set_icon_from_stock (GTK_ENTRY(entry), GTK_ENTRY_ICON_SECONDARY, GTK_STOCK_OPEN);

Можно создать ещё одну кнопку слева, тогда вторым параметром нужно будет указать GTK_ENTRY_ICON_PRIMARY.

Кнопка может быть создана также через функцию gtk_entry_set_icon_from_pixbuf() в которой название говорит само за себя.

 

Добавим всплывающую подсказку на кнопку(иконку) внутри поля ввода

gtk_entry_set_icon_tooltip_text(GTK_ENTRY(entry),GTK_ENTRY_ICON_SECONDARY,"Выбора нового файла протокола");

 

Подключение обработчика нажатия на иконку внутри поля ввода:

g_signal_connect(G_OBJECT(entry),"icon-press",G_CALLBACK(icon_pressed), NULL);

Обработчик нажатия на иконку внутри поля ввода:

static void icon_pressed(GtkEntry *entry_file, gint position, GdkEventButton *event, gpointer data)

{

       ;

}


В избранное