краткое описание#include <gtk/gtk.h> gtktreeselection; gboolean (*gtktreeselectionfunc) (gtktreeselection *selection, gtktreemodel *model, gtktreepath *path, gboolean path_currently_selected, gpointer data); void (*gtktreeselectionforeachfunc) (gtktreemodel *model, gtktreepath *path, gtktreeiter *iter, gpointer data); void gtk_tree_selection_set_mode (gtktreeselection *selection, gtkselectionmode type); gtkselectionmode gtk_tree_selection_get_mode (gtktreeselection *selection); void gtk_tree_selection_set_select_function (gtktreeselection *selection, gtktreeselectionfunc func, gpointer data, gtkdestroynotify destroy); gpointer gtk_tree_selection_get_user_data (gtktreeselection *selection); gtktreeview* gtk_tree_selection_get_tree_view (gtktreeselection *selection); gboolean gtk_tree_selection_get_selected (gtktreeselection *selection, gtktreemodel **model, gtktreeiter *iter); void gtk_tree_selection_selected_foreach (gtktreeselection *selection, gtktreeselectionforeachfunc func, gpointer data); glist* gtk_tree_selection_get_selected_rows (gtktreeselection *selection, gtktreemodel **model); gint gtk_tree_selection_count_selected_rows (gtktreeselection *selection); void gtk_tree_selection_select_path (gtktreeselection *selection, gtktreepath *path); void gtk_tree_selection_unselect_path (gtktreeselection *selection, gtktreepath *path); gboolean gtk_tree_selection_path_is_selected (gtktreeselection *selection, gtktreepath *path); void gtk_tree_selection_select_iter (gtktreeselection *selection, gtktreeiter *iter); void gtk_tree_selection_unselect_iter (gtktreeselection *selection, gtktreeiter *iter); gboolean gtk_tree_selection_iter_is_selected (gtktreeselection *selection, gtktreeiter *iter); void gtk_tree_selection_select_all (gtktreeselection *selection); void gtk_tree_selection_unselect_all (gtktreeselection *selection); void gtk_tree_selection_select_range (gtktreeselection *selection, gtktreepath *start_path, gtktreepath *end_path); void gtk_tree_selection_unselect_range (gtktreeselection *selection, gtktreepath *start_path, gtktreepath *end_path); иерархия объектовgobject +----gtktreeselection сигналы"changed" void user_function (gtktreeselection *treeselection, gpointer user_data) : run first описаниеgtktreeselection объект – это вспомогательный объект для управления выбором в gtktreeview виджете. gtktreeselection объект создаётся автоматически при создании нового gtktreeview виджета и не существует независимо от этого виджета. первопричина существования объекта gtktreeselection – это чистота кода и api. то есть, нет концептуального основания, все эти функции не могут быть методами в gtktreeview виджете вместо отдельной функции. gtktreeselection объект получается из gtktreeview вызовом gtk_tree_view_get_selection(). им можно управлять для проверки статуса выбора в дереве, так же как выделить или снять выделение с отдельной строки. выделение происходит полностью на стороне просмотра (view). как результат, множество полей просмотра одной и той же модели могут иметь полностью отличающиеся выделения. дополнительно вы можете изменить выделение строк в модели которая в данный момент не отображается для просмотра и не расширяя предварительно её родителей. важно помнить что сигнал "changed" является подсказкой при контроле выбора в поле просмотра. может издаться только один сигнал когда выбран диапазон строк. дополнительно в некоторых случаях может издаться сигнал "changed" когда ничего не происходило (в основном как результат запрограммированного вызова select_row на уже выбранной строке). деталиgtktreeselectiontypedef struct _gtktreeselection gtktreeselection; gtktreeselectionfunc ()gboolean (*gtktreeselectionfunc) (gtktreeselection *selection, gtktreemodel *model, gtktreepath *path, gboolean path_currently_selected, gpointer data); функция используемая gtk_tree_selection_set_select_function() для определения может ли строка быть выбрана. она вызывается каждый раз когда изменяется состояние строки. возвращаемое значение true указывает для selection что изменение выбора выполнено.
gtktreeselectionforeachfunc ()void (*gtktreeselectionforeachfunc) (gtktreemodel *model, gtktreepath *path, gtktreeiter *iter, gpointer data); функция используемая gtk_tree_selection_selected_foreach() для отображения всех выделенных строк. она вызывается для каждой выделенной строки в поле просмотра.
gtk_tree_selection_set_mode ()void gtk_tree_selection_set_mode (gtktreeselection *selection, gtkselectionmode type); устанавливает режим выбора selection. если первичный тип был gtk_selection_multiple, то когда якорь сохраняется выделенным, если он предварительно был выделен.
gtk_tree_selection_get_mode ()gtkselectionmode gtk_tree_selection_get_mode (gtktreeselection *selection); выдаёт режим выделения для selection. смотрите gtk_tree_selection_set_mode().
gtk_tree_selection_set_select_function ()void gtk_tree_selection_set_select_function (gtktreeselection *selection, gtktreeselectionfunc func, gpointer data, gtkdestroynotify destroy); устанавливает функцию выделения. если установлена, эта функция вызывается перед выделением или снятием выделения любого элемента, создавая некоторый контроль выделения. функция выбора должна возвращать true если состояние элемента может быть переключено, а false если состояние элемента должно быть выставлено неизменяемым.
gtk_tree_selection_get_user_data ()gpointer gtk_tree_selection_get_user_data (gtktreeselection *selection); возвращает пользовательские данные для функции выбора.
gtk_tree_selection_get_tree_view ()gtktreeview* gtk_tree_selection_get_tree_view (gtktreeselection *selection); возвращает дерево просмотра связанное с selection.
gtk_tree_selection_get_selected ()gboolean gtk_tree_selection_get_selected (gtktreeselection *selection, gtktreemodel **model, gtktreeiter *iter); устанавливает iter для текущемго выбранного элемента, если selection установлено в gtk_selection_single или gtk_selection_browse. iter может быть null если вы просто хотите проверить имеет ли selection выбранный элемент. model заполняется текущемй моделью. эта функция не будет работать если вы используете selection равное gtk_selection_multiple.
gtk_tree_selection_selected_foreach ()void gtk_tree_selection_selected_foreach (gtktreeselection *selection, gtktreeselectionforeachfunc func, gpointer data); взывает функцию для каждого выбранного элемента. помните что вы не можете модифицировать дерево или выделение внутри этой функции. как результат, gtk_tree_selection_get_selected_rows() может быть более полезна.
gtk_tree_selection_get_selected_rows ()glist* gtk_tree_selection_get_selected_rows (gtktreeselection *selection, gtktreemodel **model); создаёт список путей всех выбранных строк. дополнительно вы можете преобразовать этот список в список gtktreerowreferences, если вы планируете изменять модель после вызова этой функции. для конвертации используйте gtk_tree_row_reference_new(). для освобождения возвращаемого значения используйте: g_list_foreach (list, gtk_tree_path_free, null);
g_list_free (list);
начиная с версии 2.2 gtk_tree_selection_count_selected_rows ()gint gtk_tree_selection_count_selected_rows (gtktreeselection *selection); возвращает число строк выделенных в дереве tree.
начиная с версии 2.2 gtk_tree_selection_select_path ()void gtk_tree_selection_select_path (gtktreeselection *selection, gtktreepath *path); выделяет строку указанную в path.
gtk_tree_selection_unselect_path ()void gtk_tree_selection_unselect_path (gtktreeselection *selection, gtktreepath *path); снимает выделение строки указанной в path.
gtk_tree_selection_path_is_selected ()gboolean gtk_tree_selection_path_is_selected (gtktreeselection *selection, gtktreepath *path); возвращает true если строка указанная в path является выделенной. если path указывает на не допустимое положение, возвращается false.
gtk_tree_selection_select_iter ()void gtk_tree_selection_select_iter (gtktreeselection *selection, gtktreeiter *iter); выделяет определенный итератор.
gtk_tree_selection_unselect_iter ()void gtk_tree_selection_unselect_iter (gtktreeselection *selection, gtktreeiter *iter); отменяет выделение определенного итератора.
gtk_tree_selection_iter_is_selected ()gboolean gtk_tree_selection_iter_is_selected (gtktreeselection *selection, gtktreeiter *iter); возвращает true если строка iter является текущим выделением.
gtk_tree_selection_select_all ()void gtk_tree_selection_select_all (gtktreeselection *selection); выделяет все элементы. selection должно быть установлено в режим gtk_selection_multiple.
gtk_tree_selection_unselect_all ()void gtk_tree_selection_unselect_all (gtktreeselection *selection); отменяет выделение всех элементов.
gtk_tree_selection_select_range ()void gtk_tree_selection_select_range (gtktreeselection *selection, gtktreepath *start_path, gtktreepath *end_path); выделяет диапазон элементов, определенный между start_path и end_path. selection должен быть установлен в режим gtk_selection_multiple.
gtk_tree_selection_unselect_range ()void gtk_tree_selection_unselect_range (gtktreeselection *selection, gtktreepath *start_path, gtktreepath *end_path); снимает выделение диапазона элементов, определенного между start_path и end_path.
начиная с версии 2.2 детали сигналасигнал "changed"void user_function (gtktreeselection *treeselection, gpointer user_data) : run first издаётся каждый раз при изменении выделения. он может издаться только один раз при выделении диапазона элементов, а может издаться когда ничего не происходит.
смотрите такжеgtktreeview, gtktreeviewcolumn, gtktreednd, gtktreemode, gtktreesortable, gtktreemodelsort, gtkliststore, gtktreestore, gtkcellrenderer, gtkcelleditable, gtkcellrendererpixbuf, gtkcellrenderertext, gtkcellrenderertoggle |