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