Re: [gtk-list] GtkItemFactory -- need example
- From: Tim Janik <timj gtk org>
- To: gtk-list redhat com
- Subject: Re: [gtk-list] GtkItemFactory -- need example
- Date: Thu, 23 Jul 1998 20:39:06 +0200 (CEST)
On 23 Jul 1998, Thomas Mailund Jensen wrote:
> 
> I am trying to deduce how to use gtk item factory, which isn't too
> easy with only the source.  I could really use an example.  Is there
> anywhere I can get such?
the CVS gimp uses GtkItemFactory already, as well, as GLE.
i guess gle/gleted.c gives some good example on the factories use,
since it uses it for a menubar and a popup, but since the code isn't
too obvious, i have assembled a small example below.
note, the "<RadioItem>" type for a factory entry doesn't yet work.
i have yet to get around to implement the radio items linking.
but once that works, you should be able to do
  { "/Choice/One",    "",   NULL, 0, "<RadioItem>" },
  { "/Choice/Two",    "",   NULL, 0, "<RadioItem:/Choice/One>" },
  { "/Choice/Three",  "",   NULL, 0, "<RadioItem:/Choice/Two>" },
so that you got three radio items to select from.
static GtkItemFactoryEntry menubar_entries[] =
{
  { "/File/Test",       "",             my_cb, 1,  "<Item>" },
  { "/File/-----",      "",             NULL,  0,  "<Separator>" },
  { "/File/Close",      "<Ctrl>C",      my_cb, 2,  "<Item>" },
};
static guint n_menubar_entries = sizeof (menubar_entries) / sizeof (menubar_entries[0]);
GtkItemFactory *menubar_factory;
{
[assmuing you have a window and a vbox in that window]
  /* read the menurc */
  gtk_item_factory_parse_rc ("~/.my-app-menurc");
  /* create the menu bar
   */
  menubar_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR,
                                          "ExampleApp",
                                          NULL);
  gtk_window_add_accel_group (GTK_WINDOW (window),
                              menubar_factory->accel_group);
  gtk_item_factory_create_items (menubar_factory,
                                 n_menubar_entries,
                                 menubar_entries,
                                 window);
  gtk_container_add_with_args (GTK_CONTAINER (vbox), menubar_factory->widget,
                               "expand", FALSE,
                               "fill", TRUE,
                               "position", 0,
                               NULL);
  gtk_widget_show (menubar_factory->widget);
  /* don't forget to handle destruction */
  gtk_signal_connect (GTK_OBJECT (window),
                      "destroy",
                      my_shutdown,
                      menubar_factory);
}
void
my_shutdown (GtkWindow      *window,
             GtkItemFactory *menubar_factory)
{
  /* get rid of the factory */
  gtk_object_unref (GTK_OBJECT (menubar_factory));
  
  /* dump our applications menurc */
  gtk_item_factory_dump_rc ("~/.my-app-menurc", NULL, TRUE);
}
void
my_cb (gpointer   callback_data,
       guint      callback_action,
       GtkWidget *widget)
{
  `callback_data' is the window pointer that got passed to
    gtk_item_factory_create_items()
  `callback_action' will be 2 if /File/Close got clicked, and 1 for /File/Test
  `widget' is the associated menu item that triggered invocation of my_cb()
    through its ::activate signal.
}
  
      
> 
> /mailund 
> 
i hope that helps, feel free to ask more questions though ;)
---
ciaoTJ
[
Date Prev][
Date Next]   [
Thread Prev][
Thread Next]   
[
Thread Index]
[
Date Index]
[
Author Index]