комбинированный виджет вводакомбинированный ввод - ещё один довольно простой виджет, который реально является комбинацией двух других виджетов. для пользователя этот виджет выглядит как поле для ввода текста и выпадающее меню содержащее возможные варианты ввода. альтернативно, пользователь может вводить в список выбора дополнительные варианты. в следующей структуре представлены компоненты комбинированного ввода:
комбинированный ввод имеет две основные части: entry и list.
теперь, при непосредственном манипулировании entry, создаём список доступных значений для ввода, выпадающий из строки ввода:
задаём значение для каждой строки выпадающего списка:
прежде всего вы должны собрать строки в glist. glist - связанное выполнение списка, входит в состав glib и поддерживается библиотекой gtk. при беглом рассмотрении это выглядит так, вы создаёте указатель на glist равный null, затем прикладываете перечень:
важно инициализировать указатель glist равным null. значение возвращённое из функции g_list_append() должно использоваться как новый указатель на glist. пример создания списка вариантов:
виджет combo создаёт копии строк переданных в структуру glist. как результат, вы можете освободить память занимаемую списком если ваше приложение нуждается в этом. в этом пункте рассматривается работающий комбинированный ввод. есть несколько аспектов которые вы можете изменять. это делается функциями:
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 клавишу и прочёл текст. первое делается так:
получение текста в любое произвольное время достигается, просто функцией ввода:
как нибудь так:
есть ещё функция:
она отключает сигнал активизации в поле ввода в виджете комбинированного ввода, непонятно при каких обстоятельствах это может пригодится, но тем не менее эта функция существует.
|