]> Pileus Git - ~andy/gtk/blob - gtk/gtkitemfactory.h
Incremented version to 1.2.0. -Shawn <amundson@gtk.org>
[~andy/gtk] / gtk / gtkitemfactory.h
1 /* GTK - The GIMP Toolkit
2  * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
3  *
4  * GtkItemFactory: Flexible item factory with automatic rc handling
5  * Copyright (C) 1998 Tim Janik
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Library General Public
9  * License as published by the Free Software Foundation; either
10  * version 2 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Library General Public License for more details.
16  *
17  * You should have received a copy of the GNU Library General Public
18  * License along with this library; if not, write to the
19  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20  * Boston, MA 02111-1307, USA.
21  */
22
23 /*
24  * Modified by the GTK+ Team and others 1997-1999.  See the AUTHORS
25  * file for a list of people on the GTK+ Team.  See the ChangeLog
26  * files for a list of changes.  These files are distributed with
27  * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
28  */
29
30 #ifndef __GTK_ITEM_FACTORY_H__
31 #define __GTK_ITEM_FACTORY_H__
32
33
34 #include <gtk/gtkwidget.h>
35 #include <gtk/gtkmenufactory.h> /* for GtkMenuEntry */
36 #include <gtk/gtkbindings.h>    /* for GtkPatternSpec */
37
38
39 #ifdef __cplusplus
40 extern "C" {
41 #endif /* __cplusplus */
42
43
44 typedef void    (*GtkPrintFunc)            (gpointer             func_data,
45                                             gchar               *str);
46 typedef gchar * (*GtkTranslateFunc)        (const gchar         *path,
47                                             gpointer             func_data);
48 typedef void    (*GtkItemFactoryCallback)  ();
49 typedef void    (*GtkItemFactoryCallback1) (gpointer             callback_data,
50                                             guint                callback_action,
51                                             GtkWidget           *widget);
52
53 #define GTK_TYPE_ITEM_FACTORY            (gtk_item_factory_get_type ())
54 #define GTK_ITEM_FACTORY(object)         (GTK_CHECK_CAST (object, GTK_TYPE_ITEM_FACTORY, GtkItemFactory))
55 #define GTK_ITEM_FACTORY_CLASS(klass)    (GTK_CHECK_CLASS_CAST (klass, GTK_TYPE_ITEM_FACTORY, GtkItemFactoryClass))
56 #define GTK_IS_ITEM_FACTORY(object)      (GTK_CHECK_TYPE (object, GTK_TYPE_ITEM_FACTORY))
57 #define GTK_IS_ITEM_FACTORY_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GTK_TYPE_ITEM_FACTORY))
58
59
60 typedef struct  _GtkItemFactory                 GtkItemFactory;
61 typedef struct  _GtkItemFactoryClass            GtkItemFactoryClass;
62 typedef struct  _GtkItemFactoryEntry            GtkItemFactoryEntry;
63 typedef struct  _GtkItemFactoryItem             GtkItemFactoryItem;
64
65 struct _GtkItemFactory
66 {
67   GtkObject              object;
68
69   gchar                 *path;
70   GtkAccelGroup         *accel_group;
71   GtkWidget             *widget;
72   GSList                *widgets_by_action;
73
74   GtkTranslateFunc       translate_func;
75   gpointer               translate_data;
76   GtkDestroyNotify       translate_notify;   
77 };
78
79 struct _GtkItemFactoryClass
80 {
81   GtkObjectClass         object_class;
82
83   gchar                 *cpair_comment_single;
84
85   GHashTable            *item_ht;
86
87   gpointer               dummy;
88 };
89
90 struct _GtkItemFactoryEntry
91 {
92   gchar *path;
93   gchar *accelerator;
94
95   GtkItemFactoryCallback callback;
96   guint                  callback_action;
97
98   /* possible values:
99    * NULL               -> "<Item>"
100    * ""                 -> "<Item>"
101    * "<Title>"          -> create a title item
102    * "<Item>"           -> create a simple item
103    * "<CheckItem>"      -> create a check item
104    * "<ToggleItem>"     -> create a toggle item
105    * "<RadioItem>"      -> create a radio item
106    * <path>             -> path of a radio item to link against
107    * "<Separator>"      -> create a separator
108    * "<Branch>"         -> create an item to hold sub items
109    * "<LastBranch>"     -> create a right justified item to hold sub items
110    */
111   gchar          *item_type;
112 };
113
114 struct _GtkItemFactoryItem
115 {
116   gchar *path;
117   guint  accelerator_key;
118   guint  accelerator_mods;
119   guint  modified : 1;
120   guint  in_propagation : 1;
121   gchar *item_type;
122
123   GSList *widgets;
124 };
125
126
127 GtkType         gtk_item_factory_get_type           (void);
128
129 /* `container_type' must be of GTK_TYPE_MENU_BAR, GTK_TYPE_MENU,
130  * or GTK_TYPE_OPTION_MENU.
131  */
132 GtkItemFactory* gtk_item_factory_new       (GtkType              container_type,
133                                             const gchar         *path,
134                                             GtkAccelGroup       *accel_group);
135 void            gtk_item_factory_construct (GtkItemFactory      *ifactory,
136                                             GtkType              container_type,
137                                             const gchar         *path,
138                                             GtkAccelGroup       *accel_group);
139      
140 /* These functions operate on GtkItemFactoryClass basis.
141  */
142 void            gtk_item_factory_parse_rc           (const gchar    *file_name);
143 void            gtk_item_factory_parse_rc_string    (const gchar    *rc_string);
144 void            gtk_item_factory_parse_rc_scanner   (GScanner       *scanner);
145      
146 GtkItemFactory* gtk_item_factory_from_widget        (GtkWidget        *widget);
147 gchar*          gtk_item_factory_path_from_widget   (GtkWidget        *widget);
148
149 GtkWidget*      gtk_item_factory_get_widget         (GtkItemFactory   *ifactory,
150                                                      const gchar      *path);
151 GtkWidget*      gtk_item_factory_get_widget_by_action (GtkItemFactory *ifactory,
152                                                        guint           action);
153
154 /* If `path_pspec' is passed as `NULL', this function will iterate over
155  * all hash entries. otherwise only those entries will be dumped for which
156  * the pattern matches, e.g. "<Image>*...".
157  */
158 void    gtk_item_factory_dump_items     (GtkPatternSpec         *path_pspec,
159                                          gboolean                modified_only,
160                                          GtkPrintFunc            print_func,
161                                          gpointer                func_data);
162 void    gtk_item_factory_dump_rc        (const gchar            *file_name,
163                                          GtkPatternSpec         *path_pspec,
164                                          gboolean                modified_only);
165 void    gtk_item_factory_print_func     (gpointer                FILE_pointer,
166                                          gchar                  *string);
167 void    gtk_item_factory_create_item    (GtkItemFactory         *ifactory,
168                                          GtkItemFactoryEntry    *entry,
169                                          gpointer                callback_data,
170                                          guint                   callback_type);
171 void    gtk_item_factory_create_items   (GtkItemFactory         *ifactory,
172                                          guint                   n_entries,
173                                          GtkItemFactoryEntry    *entries,
174                                          gpointer                callback_data);
175 void    gtk_item_factory_delete_item    (GtkItemFactory         *ifactory,
176                                          const gchar            *path);
177 void    gtk_item_factory_delete_entry   (GtkItemFactory         *ifactory,
178                                          GtkItemFactoryEntry    *entry);
179 void    gtk_item_factory_delete_entries (GtkItemFactory         *ifactory,
180                                          guint                   n_entries,
181                                          GtkItemFactoryEntry    *entries);
182 void    gtk_item_factory_popup          (GtkItemFactory         *ifactory,
183                                          guint                   x,
184                                          guint                   y,
185                                          guint                   mouse_button,
186                                          guint32                 time);
187 void    gtk_item_factory_popup_with_data(GtkItemFactory         *ifactory,
188                                          gpointer                popup_data,
189                                          GtkDestroyNotify        destroy,
190                                          guint                   x,
191                                          guint                   y,
192                                          guint                   mouse_button,
193                                          guint32                 time);
194 gpointer gtk_item_factory_popup_data    (GtkItemFactory         *ifactory);
195 gpointer gtk_item_factory_popup_data_from_widget (GtkWidget     *widget);
196 void   gtk_item_factory_set_translate_func (GtkItemFactory      *ifactory,
197                                             GtkTranslateFunc     func,
198                                             gpointer             data,
199                                             GtkDestroyNotify     notify);
200
201 /* Compatibility functions for deprecated GtkMenuFactory code
202  */
203 GtkItemFactory* gtk_item_factory_from_path   (const gchar       *path);
204 void    gtk_item_factory_create_menu_entries (guint              n_entries,
205                                               GtkMenuEntry      *entries);
206 void    gtk_item_factories_path_delete     (const gchar         *ifactory_path,
207                                             const gchar         *path);
208 typedef void    (*GtkItemFactoryCallback2) (GtkWidget           *widget,
209                                             gpointer             callback_data,
210                                             guint                callback_action);
211 void    gtk_item_factory_create_items_ac (GtkItemFactory        *ifactory,
212                                           guint                  n_entries,
213                                           GtkItemFactoryEntry   *entries,
214                                           gpointer               callback_data,
215                                           guint                  callback_type);
216
217
218
219 #ifdef __cplusplus
220 }
221 #endif /* __cplusplus */
222
223
224 #endif  /* __GTK_ITEM_FACTORY_H__ */