eb05362005-11-05Henrik Grubbström (Grubba) /* -*- C -*- */
1a05542005-07-28Martin Nilsson class GTK2.SizeGroup; inherit G.Object; //! Provides a mechanism for grouping a number of widgets together so they all //! request the same amount of space. This is typically usefull when you want //! a column of widgets to have the same size, but you can't use a W(Table) //! widget. //! <p> //! In detail, the size requiest for each widget in a GTK2.SizeGroup is the //! maximum of the sizes that would have been requested for each widget in the //! size group if they were not in the size group. The mode of the size group //! (see set_mode() determines whether this applies to the horizontal size, the //! vertical size, or both sizes. //! <p> //! Note that size groups only affect the amount of space requested, not the //! size that the widgets finally receive. If you want the widgets in a //! GTK2.SizeGroup to actually be the same size, you need to pack them in such //! a way that they get the size they request and not more. For example, if //! you are packing your widgets into a table, you would not include the //! GTK2.FILL flag. //! <p> //! GTK2.SizeGroup objects are referenced by each widget in the size group, so //! one you have added all widgets to a GTK2.SizeGroup, you can drop the initial //! reference to the size group. If the widgets in the size group are //! subsequently destroyed, then they will be removed from the size group; when //! allow idgets have been removed, the size group will be freed. //! <p> //! Widgets can be part of multiple size groups; GTK+ will compute the //! horizontal size of a widget from the horizontal requisition of all widgets //! that can be reached from the widget by a chain of size groups of type //! GTK2.SIZE_GROUP_HORIZONTAL or GTK2.SIZE_GROUP_BOTH, and the vertical size //! from the vertical requisition of all widgets that can be reached from the //! widget by a chain of size groups of type GTK2.SIZE_GROUP_VERTICAL or //! GTK2.SIZE_GROUP_BOTH. //! Properties: //! int mode //! The directions in which the size group effects the requested sizes of //! its componenent widgets.
3d76632005-11-03Lance Dillon void create(int|mapping(string:mixed) mode_or_props)
1a05542005-07-28Martin Nilsson //! Create a new group.
3d76632005-11-03Lance Dillon {
ba9e802006-02-27Martin Stjernholm  pgtk2_verify_not_inited(); pgtk2_verify_setup();
3d76632005-11-03Lance Dillon  if (Pike_sp[-args].type==PIKE_T_INT) {
cac4202005-12-17Marcus Comstedt  INT_TYPE mode;
3d76632005-11-03Lance Dillon  GtkSizeGroup *gs; get_all_args("create",args,"%i",&mode); gs=gtk_size_group_new(mode); THIS->obj=G_OBJECT(gs); } else { INIT_WITH_PROPS(GTK_TYPE_SIZE_GROUP); }
ba9e802006-02-27Martin Stjernholm  pgtk2_pop_n_elems(args); pgtk2__init_this_object();
3d76632005-11-03Lance Dillon }
1a05542005-07-28Martin Nilsson  void set_mode(int mode); //! Sets the mode of the size group. One of CONST(GTK_SIZE_GROUP_). The mode //! of the size group determines whether the widgets in the size group should //! all have the same horizontal requisition, all have the same vertical //! requisition, or should all have the same requisition in both directions. int get_mode(); //! Gets the current mode.
3d76632005-11-03Lance Dillon require gtk28; void set_ignore_hidden(int setting); //! Sets whether invisible widgets should be ignored when calculating the size. int get_ignore_hidden(); //! Returns if invisible widgets are ignored when calculating the size. endrequire;
1a05542005-07-28Martin Nilsson void add_widget(GTK2.Widget widget); //! Adds a widget to the group. In the future, the requisition of the widget //! will be determined as the maximum of its requisition and the requisition //! of the other widgets in the size group. Whether this applies horizontally, //! vertically, or in both directions depends on the mode. void remove_widget(GTK2.Widget widget); //! Removes a widget.
f284492006-08-03Lance Dillon  require gtk210; array(GTK2.Widget) get_widgets() //! Returns the list of widgets associated with this size group. { pgtk2_verify_inited(); pgtk2_pop_n_elems(args); {
cc0b572008-01-22Henrik Grubbström (Grubba)  GSList *gsl;
f284492006-08-03Lance Dillon  int i=0;
cc0b572008-01-22Henrik Grubbström (Grubba)  gsl=gtk_size_group_get_widgets(GTK_SIZE_GROUP(THIS->obj)); while (gsl) { push_gobject(gsl->data); g_object_ref(GTK_WIDGET(gsl->data));
f284492006-08-03Lance Dillon  i++;
cc0b572008-01-22Henrik Grubbström (Grubba)  gsl=g_slist_next(gsl);
f284492006-08-03Lance Dillon  } f_aggregate(i); } } endrequire;