Prev

Up

Home

GTK+ Reference Manual

Next

Top  |  Description  |  Object Hierarchy  |  Properties  |  Child Properties  |  Style Properties  |  Signals

GtkMenu

GtkMenu Виджет меню

Краткое описание

#include <gtk/gtk.h> GtkMenu; GtkWidget* gtk_menu_new (void); void gtk_menu_set_screen (GtkMenu *menu, GdkScreen *screen); #define gtk_menu_append (menu,child) #define gtk_menu_prepend (menu,child) #define gtk_menu_insert (menu,child,pos) void gtk_menu_reorder_child (GtkMenu *menu, GtkWidget *child, gint position); void gtk_menu_attach (GtkMenu *menu, GtkWidget *child, guint left_attach, guint right_attach, guint top_attach, guint bottom_attach); void gtk_menu_popup (GtkMenu *menu, GtkWidget *parent_menu_shell, GtkWidget *parent_menu_item, GtkMenuPositionFunc func, gpointer data, guint button, guint32 activate_time); void gtk_menu_set_accel_group (GtkMenu *menu, GtkAccelGroup *accel_group); GtkAccelGroup* gtk_menu_get_accel_group (GtkMenu *menu); void gtk_menu_set_accel_path (GtkMenu *menu, const gchar *accel_path); void gtk_menu_set_title (GtkMenu *menu, const gchar *title); gboolean gtk_menu_get_tearoff_state (GtkMenu *menu); const gchar* gtk_menu_get_title (GtkMenu *menu); void gtk_menu_popdown (GtkMenu *menu); void gtk_menu_reposition (GtkMenu *menu); GtkWidget* gtk_menu_get_active (GtkMenu *menu); void gtk_menu_set_active (GtkMenu *menu, guint index_); void gtk_menu_set_tearoff_state (GtkMenu *menu, gboolean torn_off); void gtk_menu_attach_to_widget (GtkMenu *menu, GtkWidget *attach_widget, GtkMenuDetachFunc detacher); void gtk_menu_detach (GtkMenu *menu); GtkWidget* gtk_menu_get_attach_widget (GtkMenu *menu); GList* gtk_menu_get_for_attach_widget (GtkWidget *widget); void (*GtkMenuPositionFunc) (GtkMenu *menu, gint *x, gint *y, gboolean *push_in, gpointer user_data); void (*GtkMenuDetachFunc) (GtkWidget *attach_widget, GtkMenu *menu); void gtk_menu_set_monitor (GtkMenu *menu, gint monitor_num);

Иерархия объектов

GObject +----GInitiallyUnowned +----GtkObject +----GtkWidget +----GtkContainer +----GtkMenuShell +----GtkMenu

Осуществляемый интерфейс

GtkMenu осуществляет AtkImplementorIface.

Свойства

"tearoff-state" gboolean : Read / Write "tearoff-title" gchararray : Read / Write

Дочерние свойства

"bottom-attach" gint : Read / Write "left-attach" gint : Read / Write "right-attach" gint : Read / Write "top-attach" gint : Read / Write

Свойства стиля

"horizontal-offset" gint : Read "vertical-offset" gint : Read "vertical-padding" gint : Read

Сигналы

"move-scroll" void user_function (GtkMenu *menu, GtkScrollType arg1, gpointer user_data) : Run last / Action

Описание

GtkMenu это GtkMenuShell который обеспечивает выпадающее меню содержащее список объектов GtkMenuItem которые может выбирать для активации пользователь выполняя таким образом функции приложения.

GtkMenu в основном выпадает при активации GtkMenuItem в GtkMenuBar или появляется при активации GtkMenuItem в других GtkMenu.

GtkMenu может также появляться при активации GtkOptionMenu. В других сложных виджетах таких как GtkNotebook тоже может вызываться GtkMenu.

Приложения могут отображать GtkMenu как всплывающее меню вызываемое функцией gtk_menu_popup(). Пример ниже показывает как приложение может вызывать всплывающее меню когда нажата 3rd кнопка мыши.

Пример 1. Подключение обработчика сигнала появления меню.

/* подключаем наш обработчик сигнала который вызывает меню */ g_signal_connect_swapped (window, "button_press_event", G_CALLBACK (my_popup_handler), menu);

Пример 2. Обработчик сигнала который отображает всплывающее меню.

static gint my_popup_handler (GtkWidget *widget, GdkEvent *event) { GtkMenu *menu; GdkEventButton *event_button; g_return_val_if_fail (widget != NULL, FALSE); g_return_val_if_fail (GTK_IS_MENU (widget), FALSE); g_return_val_if_fail (event != NULL, FALSE); /* "widget" это меню которое появляется когда * вызывается g_signal_connect_swapped(). */ menu = GTK_MENU (widget); if (event->type == GDK_BUTTON_PRESS) { event_button = (GdkEventButton *) event; if (event_button->button == 3) { gtk_menu_popup (menu, NULL, NULL, NULL, NULL, event_button->button, event_button->time); return TRUE; } } return FALSE; }

Детали

GtkMenu

typedef struct _GtkMenu GtkMenu;

Структура GtkMenu содержит только закрытые данные доступ к которым осуществляется функциями приведенными ниже.


gtk_menu_new ()

GtkWidget*  gtk_menu_new                    (void);

Создаёт новый GtkMenu.

Возвращает :

новый GtkMenu.


gtk_menu_set_screen ()

void gtk_menu_set_screen (GtkMenu *menu, GdkScreen *screen);

Устанавливает GdkScreen на котором будет отображено меню.

menu :

GtkMenu.

screen :

GdkScreen, или NULL если дисплей к которому прикрепляется меню не определён.

Начиная с версии 2.2


gtk_menu_append()

#define gtk_menu_append(menu,child)     gtk_menu_shell_append  ((GtkMenuShell *)(menu),(child))

Внимание

gtk_menu_append устарела и не должна использоваться во вновь создаваемом коде.

Добавляет новый GtkMenuItem в конец списка пунктов меню.

menu :

GtkMenu.

child :

добавляемый GtkMenuItem.


gtk_menu_prepend()

#define gtk_menu_prepend(menu,child)    gtk_menu_shell_prepend ((GtkMenuShell *)(menu),(child))

Внимание

gtk_menu_prepend устарела и не должна использоваться во вновь создаваемом коде.

Добавляет новый GtkMenuItem в начало списка пунктов меню.

menu :

GtkMenu.

child :

добавляемый GtkMenuItem.


gtk_menu_insert()

#define gtk_menu_insert(menu,child,pos) gtk_menu_shell_insert ((GtkMenuShell *)(menu),(child),(pos))

Внимание

gtk_menu_insert устарела и не должна использоваться во вновь создаваемом коде.

Добавляет новый GtkMenuItem к списку пунктов меню в позицию указанную в position.

menu :

GtkMenu.

child :

добавляемый GtkMenuItem.

pos :

Позиция в которую добавляется child. Позиция нумеруется от 0 до n-1.


gtk_menu_reorder_child ()

void gtk_menu_reorder_child (GtkMenu *menu, GtkWidget *child, gint position);

Перемещает GtkMenuItem в новую позицию внутри GtkMenu.

menu :

GtkMenu.

child :

перемещаемый GtkMenuItem.

position :

Новая позиция для размещения child. Позиции нумеруются от 0 до n-1.


gtk_menu_attach ()

void gtk_menu_attach (GtkMenu *menu, GtkWidget *child, guint left_attach, guint right_attach, guint top_attach, guint bottom_attach);

Добавляет новый GtkMenuItem к (таблице) меню. Номер 'ячейки' этого пункта определяется с помощью left_attach, right_attach, top_attach и bottom_attach. Каждый из которых представляет номер начиная от крайнего с лева, крайнего с право столбца, а так же номер сверху и снизу строки в таблице. (Строки и столбцы нумеруются с нуля).

Помните эта функция не освобождается с помощью gtk_menu_detach().

menu :

GtkMenu.

child :

GtkMenuItem.

left_attach :

Номер столбца к которому прикрепляется пункт меню с лева.

right_attach :

Номер столбца к которому прикрепляется пункт меню с право.

top_attach :

Номер строки к которой прикрепляется пункт меню сверху.

bottom_attach :

Номер строки к которой прикрепляется пункт меню снизу.

Начиная с версии 2.4


gtk_menu_popup ()

void gtk_menu_popup (GtkMenu *menu, GtkWidget *parent_menu_shell, GtkWidget *parent_menu_item, GtkMenuPositionFunc func, gpointer data, guint button, guint32 activate_time);

Отображает меню и делает его доступным для выбора. Приложения могут использовать эту функцию для отображения контекст-чувствительных меню и обычно заменяют NULL параметры parent_menu_shell, parent_menu_item, func и data. По умолчанию функция расположит меню в текущемй позиции курсора мыши.

Параметр button должен определять кнопку мышки которая вызывает меню при нажатии. Если меню появляется не по нажатию кнопки мыши а каким либо другим способом, например отпуск кнопки мыши или нажатие клавиши клавиатуры, то button должен быть равен 0.

Параметр activate_time должен содержать временную метку события которое вызывает меню. Если такое событие не доступно, используйте gtk_get_current_event_time() вместо него.

menu :

GtkMenu.

parent_menu_shell :

Оболочка меню содержащая переключаемые пункты меню, или NULL

parent_menu_item :

Пункты меню которые активизируются переключением при появлении, или NULL

func :

Функция определяемая пользователем для позиции меню, или NULL

data :

Данные определяемые пользователем для размещения в func.

button :

Кнопка мыши которая нажимается для инициализации события.

activate_time :

Время в которое активизируется происходящее событие.


gtk_menu_set_accel_group ()

void gtk_menu_set_accel_group (GtkMenu *menu, GtkAccelGroup *accel_group);

Устанавливает GtkAccelGroup который содержит глобальные ускорители меню. Эта группа акселераторов также должна быть добавлена ко всем окнам этого меню с помощью gtk_window_add_accel_group(), в порядке этих окон для поддержки всех акселераторов содержащихся в этой группе.

menu :

GtkMenu.

accel_group :

GtkAccelGroup ассоциируемый с меню.


gtk_menu_get_accel_group ()

GtkAccelGroup* gtk_menu_get_accel_group     (GtkMenu *menu);

Получает GtkAccelGroup который содержит глобальные акселераторы для меню. Смотрите gtk_menu_set_accel_group().

menu :

GtkMenu.

Возвращает :

GtkAccelGroup ассоциируемый с меню.


gtk_menu_set_accel_path ()

void gtk_menu_set_accel_path (GtkMenu *menu, const gchar *accel_path);

Устанавливает путь акселератора для этого меню из непосредственно дочернего пути акселератора, этот пункт меню может быть создан. Главная цель этой функции избавить программиста от излишних вызовов gtk_menu_item_set_accel_path() на каждом пункте меню который должен поддерживать пользовательские изменяемые акселераторы во время выполнения. Вместо этого, просто вызывается gtk_menu_set_accel_path() на их родителе, каждый пункт меню этого мню, который содержит ярлык описывающий его цель, автоматически получает путь акселератора. Например, меню содержит пункты меню "New" и "Exit", после gtk_menu_set_accel_path (menu, "<Gnumeric-Sheet>/File"); вызывается, назначение его пунктам пути акселераторов: "<Gnumeric-Sheet>/File/New" и "<Gnumeric-Sheet>/File/Exit". Назначенные пути акселератора для пунктов меню позволяют пользователю изменить эти акселераторы во время выполнения. Подробности об акселераторах и установках по умолчанию можно найти в gtk_accel_map_add_entry().

menu :

существующий GtkMenu

accel_path :

Существующий путь акселератора


gtk_menu_set_title ()

void gtk_menu_set_title (GtkMenu *menu, const gchar *title);

Устанавливает заголовок строки для меню. Заголовок отображается когда меню показано как отдельное окно.

menu :

GtkMenu

title :

Строка содержащая заголовок меню.


gtk_menu_get_tearoff_state ()

gboolean    gtk_menu_get_tearoff_state      (GtkMenu *menu);

Возвращает отключено ли меню. Смотрите gtk_menu_set_tearoff_state().

menu :

GtkMenu

Возвращает :

TRUE если меню в данный момент выключено.


gtk_menu_get_title ()

const gchar* gtk_menu_get_title             (GtkMenu *menu);

Возвращает заголовок меню. Смотрите gtk_menu_set_title().

menu :

GtkMenu

Возвращает :

Заголовок меню, или NULL если заголовок не был установлен. Строкой владеет виджет и она не должна освобождаться или изменяться.


gtk_menu_popdown ()

void        gtk_menu_popdown                (GtkMenu *menu);

Удаляет меню с экрана.

menu :

GtkMenu.


gtk_menu_reposition ()

void        gtk_menu_reposition             (GtkMenu *menu);

Повторно размещает меню согласно позиции этой функции.

menu :

GtkMenu.


gtk_menu_get_active ()

GtkWidget*  gtk_menu_get_active             (GtkMenu *menu);

Возвращает выбранный пункт меню. Это используется GtkOptionMenu.

menu :

GtkMenu.

Возвращает :

GtkMenuItem который выбран в меню. Если выбор не был сделан, выделяется первый пункт меню.


gtk_menu_set_active ()

void gtk_menu_set_active (GtkMenu *menu, guint index_);

Выделяет определённый пункт в меню. Это используется GtkOptionMenu и не должно больше никем использоваться.

menu :

GtkMenu.

index_ :

Номер выбранного пункта меню. Значение номера находится между 0 и n-1.


gtk_menu_set_tearoff_state ()

void gtk_menu_set_tearoff_state (GtkMenu *menu, gboolean torn_off);

Изменяет отделяемое состояние меню. Меню обычно отображается как выпадающее окно с пунктами которое видимо пока остаётся активным. Оно так же может быть отображено как отдельное окно пока не будет закрыто или переприкреплено.

menu :

GtkMenu.

torn_off :

Если TRUE, меню отображается как отдельное окно.


gtk_menu_attach_to_widget ()

void gtk_menu_attach_to_widget (GtkMenu *menu, GtkWidget *attach_widget, GtkMenuDetachFunc detacher);

Прикрепляет меню к виджету и обеспечивает callback-функцию которая будет вызвана когда меню вызывает gtk_menu_detach() в течении его разрушения.

menu :

GtkMenu.

attach_widget :

GtkWidget к которому будет прикреплено меню.

detacher :

Определённая пользователем callback-функция которая будет вызвана когда меню вызовет gtk_menu_detach(), или NULL


gtk_menu_detach ()

void        gtk_menu_detach                 (GtkMenu *menu);

Отделяет меню от виджета к которому оно было прикреплено. Эта функция будет названа callback-функцией, detacher, если была вызвана из gtk_menu_attach_to_widget().

menu :

GtkMenu.


gtk_menu_get_attach_widget ()

GtkWidget*  gtk_menu_get_attach_widget      (GtkMenu *menu);

Возвращает GtkWidget к которому прикреплено меню.

menu :

GtkMenu.

Возвращает :

GtkWidget к которому прикреплено меню.


gtk_menu_get_for_attach_widget ()

GList*      gtk_menu_get_for_attach_widget  (GtkWidget *widget);

Возвращает список меню которые прикреплены к этому виджету. Этим списком владеет GTK+ и его не нужно модифицировать.

widget :

GtkWidget *

Возвращает :

Список меню прикреплённых к этому виджету.

Начиная с версии 2.6


GtkMenuPositionFunc ()

void (*GtkMenuPositionFunc) (GtkMenu *menu, gint *x, gint *y, gboolean *push_in, gpointer user_data);

Пользовательская функция, подставляемая когда вызывается gtk_menu_popup(), которая управляет позицией меню когда оно отображено. Функция устанавливает параметры x и y координатами в которых должно быть отображено меню.

menu :

GtkMenu.

x :

Адрес (целое gint) представляющий горизонтальную позицию где будет отображено меню. Это output параметр.

y :

Адрес (целое gint) представляющий вертикальную позицию меню. Это output параметр.

push_in :

Должно ли меню быть полностью внутри экрана.

user_data :

Данные обеспечиваемые пользователем в gtk_menu_popup() data параметре.


GtkMenuDetachFunc ()

void (*GtkMenuDetachFunc) (GtkWidget *attach_widget, GtkMenu *menu);

Пользовательская функция, подставляемая когда вызвана gtk_menu_attach_to_widget(), которая будет вызвана когда меню позже будет откреплено от виджета.

attach_widget :

GtkWidget от которого открепляется меню.

menu :

GtkMenu открепляемое меню.


gtk_menu_set_monitor ()

void gtk_menu_set_monitor (GtkMenu *menu, gint monitor_num);

Информирует GTK+ на каком экране должно появиться меню. Смотрите gdk_screen_get_monitor_geometry().

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

menu :

GtkMenu

monitor_num :

Номер монитора на котором должно появиться меню

Начиная с версии 2.4

Детали свойств

Свойство "tearoff-state"

  "tearoff-state"        gboolean              : Read / Write

Сообщает должно ли меню открепляться.

Значение по умолчанию: FALSE

Начиная с версии 2.6


Свойство "tearoff-title"

  "tearoff-title"        gchararray            : Read / Write

Заголовок который может отображать менеджер окон когда меню откреплено.

Значение по умолчанию: ""

Детали дочерних свойств

Дочернее свойство "bottom-attach"

  "bottom-attach"        gint                  : Read / Write

Номер ряда к которому прикрепляется дочернее меню.

Допустимые значения: >= -1

Значение по умолчанию: -1


Дочернее свойство "left-attach"

  "left-attach"          gint                  : Read / Write

Номер столбца к которому прикрепляется с лева дочернее меню.

Допустимые значения: >= -1

Значение по умолчанию: -1


Дочернее свойство "right-attach"

  "right-attach"         gint                  : Read / Write

Номер столбца к которому с право прикрепляется дочернее меню.

Допустимые значения: >= -1

Значение по умолчанию: -1


Дочернее свойство "top-attach"

  "top-attach"           gint                  : Read / Write

Номер строки к которой сверху прикрепляется дочерний элемент.

Допустимые значения: >= -1

Значение по умолчанию: -1

Детали свойств стиля

Свойство стиля "horizontal-offset"

  "horizontal-offset"    gint                  : Read

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

Значение по умолчанию: -2


Свойство стиля "vertical-offset"

  "vertical-offset"      gint                  : Read

Когда меню является суб-меню, происходит вертикальное поглощение пикселей.

Значение по умолчанию: 0


Свойство стиля "vertical-padding"

  "vertical-padding"     gint                  : Read

Дополнительное пространство сверху и снизу меню.

Допустимые значения: >= 0

Значение по умолчанию: 1

Детали сигнала

Сигнал "move-scroll"

void user_function (GtkMenu *menu, GtkScrollType arg1, gpointer user_data) : Run last / Action

menu :

Объект который получает сигнал.

arg1 :

user_data :

Пользовательские данные устанавливаемые при подключении обработчика сигнала.