1 /* 2 * C Interface: ptk-menu 3 * 4 * Description: Some GUI utilities 5 * 6 * 7 * Author: Hong Jen Yee (PCMan) <pcman.tw (AT) gmail.com>, (C) 2006 8 * 9 * Copyright: See COPYING file that comes with this distribution 10 * 11 */ 12 13 /* 14 I don't like GtkUIManager provided by gtk+, so I implement my own. ;-) 15 */ 16 17 #ifndef _PTK_MENU_H_ 18 #define _PTK_UTILS_H_ 19 20 #include <gtk/gtk.h> 21 #include <gdk/gdk.h> 22 23 G_BEGIN_DECLS 24 25 #define PTK_STOCK_MENU_ITEM( id, cb ) { id, NULL, G_CALLBACK(cb), 0, 0, NULL, NULL } 26 #define PTK_MENU_ITEM( label, cb, key, mod ) { label, NULL, G_CALLBACK(cb), key, mod, NULL, NULL } 27 #define PTK_CHECK_MENU_ITEM( label, cb, key, mod ) { label, (char*)1, G_CALLBACK(cb), key, mod, NULL, NULL } 28 #define PTK_RADIO_MENU_ITEM( label, cb, key, mod ) { label, (char*)2, G_CALLBACK(cb), key, mod, NULL, NULL } 29 #define PTK_IMG_MENU_ITEM( label, icon, cb, key, mod ) { label, icon, G_CALLBACK(cb), key, mod, NULL, NULL } 30 #define PTK_POPUP_MENU( label, sub ) { label, NULL, NULL, 0, 0, sub, NULL } 31 #define PTK_POPUP_IMG_MENU( label, icon, sub ) { label, icon, NULL, 0, 0, sub, NULL } 32 #define PTK_SEPARATOR_MENU_ITEM { NULL, (char *)(-1), NULL, 0, 0, NULL, 0} 33 #define PTK_MENU_END {0} 34 #define PTK_IS_STOCK_ITEM( ent ) ( ent->label && (*(guint32*)ent->label) == *(guint32*)"gtk-" ) 35 #define PTK_IS_CHECK_MENU_ITEM( ent ) ( ent->stock_icon == (char*)1 ) 36 #define PTK_IS_RADIO_MENU_ITEM( ent ) ( ent->stock_icon == (char*)2 ) 37 38 struct _PtkMenuItemEntry 39 { 40 const char* label; /* or stock id */ 41 const char* stock_icon; /* or menu type 1: check, 2: radio */ 42 GCallback callback; 43 guint key; 44 guint mod; /* GdkModifierType */ 45 struct _PtkMenuItemEntry* sub_menu; 46 GtkWidget** ret; 47 }; 48 typedef struct _PtkMenuItemEntry PtkMenuItemEntry; 49 50 GtkWidget* ptk_menu_new_from_data( PtkMenuItemEntry* entries, 51 gpointer cb_data, 52 GtkAccelGroup* accel_group ); 53 54 void ptk_menu_add_items_from_data( GtkWidget* menu, 55 PtkMenuItemEntry* entries, 56 gpointer cb_data, 57 GtkAccelGroup* accel_group ); 58 59 G_END_DECLS 60 61 #endif 62 63