The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Каталог документации / Раздел "Программирование, языки" / Оглавление документа

GTK+ 2.0 Tutorial

<<< Previous

Miscellaneous Widgets

Next >>>


Комбинированный виджет ввода

Комбинированный ввод - ещё один довольно простой виджет, который реально является комбинацией двух других виджетов. Для пользователя этот виджет выглядит как поле для ввода текста и выпадающее меню содержащее возможные варианты ввода. Альтернативно, пользователь может вводить в список выбора дополнительные варианты.

В следующей структуре представлены компоненты комбинированного ввода:

struct _GtkCombo { 
        GtkHBox hbox; 
        GtkWidget *entry; 
        GtkWidget *button;
        GtkWidget *popup; 
        GtkWidget *popwin; 
        GtkWidget *list;
        ...  };

Комбинированный ввод имеет две основные части: entry и list.

Создаём комбинированный ввод:

GtkWidget *gtk_combo_new( void );

Теперь, при непосредственном манипулировании entry, создаём список доступных значений для ввода, выпадающий из строки ввода:

    gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (combo)->entry), "My String.");

Задаём значение для каждой строки выпадающего списка:

void gtk_combo_set_popdown_strings( GtkCombo *combo,
                                    GList    *strings );

Прежде всего вы должны собрать строки в GList. GList - связанное выполнение списка, входит в состав GLib и поддерживается библиотекой GTK. При беглом рассмотрении это выглядит так, вы создаёте указатель на GList равный NULL, затем прикладываете перечень:

GList *g_list_append( GList *glist, 
                      gpointer data );

Важно инициализировать указатель GList равным NULL. Значение возвращённое из функции g_list_append() должно использоваться как новый указатель на GList.

Пример создания списка вариантов:

    GList *glist = NULL;
    glist = g_list_append (glist, "String 1");
    glist = g_list_append (glist, "String 2");
    glist = g_list_append (glist, "String 3"); 
    glist = g_list_append (glist, "String 4");
    gtk_combo_set_popdown_strings (GTK_COMBO (combo), glist);
    
    /* glist освобождается, combo забирает копии */

Виджет combo создаёт копии строк переданных в структуру glist. Как результат, вы можете освободить память занимаемую списком если ваше приложение нуждается в этом.

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

void gtk_combo_set_use_arrows( GtkCombo *combo,
                               gboolean  val );
void gtk_combo_set_use_arrows_always( GtkCombo *combo,
                                      gboolean  val );
void gtk_combo_set_case_sensitive( GtkCombo *combo,
                                   gboolean  val );

gtk_combo_set_use_arrows() позволяет пользователю изменять значение ввода используя клавиши стрелки up/down. Сам список не поднимается, а скорее заменяет текущее значение ввода на следующее по списку (вверх или вниз, как указывает выбор вашей клавиши). Обычно в окне ввода клавиши стрелки используются для смещения фокуса (вы можете также использовать TAB). Заметьте, что при достижении последнего значения в списке и нажатии кнопки вниз происходит перемещение фокуса на самый верх для последующего продвижения, тоже самое происходит и в обратном направлении.

Если текущее значение во входе не находится в списке, то функция gtk_combo_set_use_arrows() - отключена.

gtk_combo_set_use_arrows_always() - также позволяет циклически проходить по списку выбора вверх или вниз используя клавиши стрелки, за исключением того, что полностью отключает использование клавиш  up и down для смещения фокуса.

gtk_combo_set_case_sensitive() - переключает GTK на поиск чувствительный или нет к регистру. Это используется когда нужно найти текущее значение строки ввода в списке значений.  Окончание может быть выполнено или чувствительным к регистру или нечувствительным способом, в зависимости от использования этой функции. Combo widget может просто прекратить текущий ввод используя комбинацию клавиш MOD-1 и "Tab". MOD-1 тоже самое что и клавиша "Alt".  Отметьте однако, что некоторые оконные менеджеры, также используют эту ключевую комбинацию, которая отменит ее использование в пределах GTK.

Теперь, когда мы имеем поле со списком, приспособленное для просмотра и действий, как мы этого хотим, все, что остается, это получить данные для поля со списком. В большинстве случаев, всё что вам нужно для получения данных - это ввод.  К вводу обращаются просто GTK_ENTRY (GTK_COMBO (combo)->entry). Два основных действия, которые вы захотите выполнять - соединяются с активизирующимся сигналом, который указывает, что пользователь нажал Return или ENTER клавишу и прочёл текст.

Первое делается так:

    g_signal_connect (G_OBJECT (GTK_COMBO (combo)->entry), "activate",
                      G_CALLBACK (my_callback_function), (gpointer) my_data);

Получение текста в любое произвольное время достигается, просто функцией ввода:

        gchar *gtk_entry_get_text( GtkEntry *entry );

Как нибудь так:

    gchar *string;
    string = gtk_entry_get_text (GTK_ENTRY (GTK_COMBO (combo)->entry));

Есть ещё функция:

void gtk_combo_disable_activate( GtkCombo *combo );

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


<<< Previous

Home

Next >>>

Spin Buttons

Up

Calendar






Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру