]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtkbbox.c
Practically everything changed.
[~andy/gtk] / gtk / gtkbbox.c
index 2c4c4307a07e74749861279693defaead75c4373..edb23ad00f158a3e008c4714d032a90a6833a13c 100644 (file)
@@ -1,4 +1,4 @@
-/* GTK - The GIMP Toolkit
+/* GTK - The GTK+ Toolkit
  * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
  *
  * This library is free software; you can redistribute it and/or
  * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
  */
 
+#include "config.h"
 #include "gtkbbox.h"
+#include "gtkprivate.h"
 #include "gtkintl.h"
+#include "gtkalias.h"
 
 enum {
   PROP_0,
-  PROP_LAYOUT_STYLE,
-  PROP_LAST
+  PROP_LAYOUT_STYLE
 };
 
 enum {
@@ -38,8 +40,6 @@ enum {
   CHILD_PROP_SECONDARY
 };
 
-static void gtk_button_box_class_init         (GtkButtonBoxClass *klass);
-static void gtk_button_box_init               (GtkButtonBox      *box);
 static void gtk_button_box_set_property       (GObject           *object,
                                               guint              prop_id,
                                               const GValue      *value,
@@ -64,30 +64,7 @@ static void gtk_button_box_get_child_property (GtkContainer      *container,
 #define DEFAULT_CHILD_IPAD_X 4
 #define DEFAULT_CHILD_IPAD_Y 0
 
-GtkType
-gtk_button_box_get_type (void)
-{
-  static GtkType button_box_type = 0;
-
-  if (!button_box_type)
-    {
-      static const GtkTypeInfo button_box_info =
-      {
-       "GtkButtonBox",
-       sizeof (GtkButtonBox),
-       sizeof (GtkButtonBoxClass),
-       (GtkClassInitFunc) gtk_button_box_class_init,
-       (GtkObjectInitFunc) gtk_button_box_init,
-       /* reserved_1 */ NULL,
-        /* reserved_2 */ NULL,
-        (GtkClassInitFunc) NULL,
-      };
-
-      button_box_type = gtk_type_unique (gtk_box_get_type (), &button_box_info);
-    }
-
-  return button_box_type;
-}
+G_DEFINE_ABSTRACT_TYPE (GtkButtonBox, gtk_button_box, GTK_TYPE_BOX)
 
 static void
 gtk_button_box_class_init (GtkButtonBoxClass *class)
@@ -109,58 +86,57 @@ gtk_button_box_class_init (GtkButtonBoxClass *class)
   /* FIXME we need to override the "spacing" property on GtkBox once
    * libgobject allows that.
    */
-
   gtk_widget_class_install_style_property (widget_class,
-                                          g_param_spec_int ("child_min_width",
-                                                            _("Minimum child width"),
-                                                            _("Minimum width of buttons inside the box"),
+                                          g_param_spec_int ("child-min-width",
+                                                            P_("Minimum child width"),
+                                                            P_("Minimum width of buttons inside the box"),
                                                             0,
                                                             G_MAXINT,
                                                              DEFAULT_CHILD_MIN_WIDTH,
-                                                            G_PARAM_READABLE));
+                                                            GTK_PARAM_READABLE));
 
   gtk_widget_class_install_style_property (widget_class,
-                                          g_param_spec_int ("child_min_height",
-                                                            _("Minimum child height"),
-                                                            _("Minimum height of buttons inside the box"),
+                                          g_param_spec_int ("child-min-height",
+                                                            P_("Minimum child height"),
+                                                            P_("Minimum height of buttons inside the box"),
                                                             0,
                                                             G_MAXINT,
                                                              DEFAULT_CHILD_MIN_HEIGHT,
-                                                            G_PARAM_READABLE));
+                                                            GTK_PARAM_READABLE));
 
   gtk_widget_class_install_style_property (widget_class,
-                                          g_param_spec_int ("child_internal_pad_x",
-                                                            _("Child internal width padding"),
-                                                            _("Amount to increase child's size on either side"),
+                                          g_param_spec_int ("child-internal-pad-x",
+                                                            P_("Child internal width padding"),
+                                                            P_("Amount to increase child's size on either side"),
                                                             0,
                                                             G_MAXINT,
                                                              DEFAULT_CHILD_IPAD_X,
-                                                            G_PARAM_READABLE));
+                                                            GTK_PARAM_READABLE));
 
   gtk_widget_class_install_style_property (widget_class,
-                                          g_param_spec_int ("child_internal_pad_y",
-                                                            _("Child internal height padding"),
-                                                            _("Amount to increase child's size on the top and bottom"),
+                                          g_param_spec_int ("child-internal-pad-y",
+                                                            P_("Child internal height padding"),
+                                                            P_("Amount to increase child's size on the top and bottom"),
                                                             0,
                                                             G_MAXINT,
                                                              DEFAULT_CHILD_IPAD_Y,
-                                                            G_PARAM_READABLE));
+                                                            GTK_PARAM_READABLE));
   g_object_class_install_property (gobject_class,
                                    PROP_LAYOUT_STYLE,
-                                   g_param_spec_enum ("layout_style",
-                                                      _("Layout style"),
-                                                      _("How to layout the buttons in the box. Possible values are default, spread, edge, start and end"),
+                                   g_param_spec_enum ("layout-style",
+                                                      P_("Layout style"),
+                                                      P_("How to layout the buttons in the box. Possible values are default, spread, edge, start and end"),
                                                      GTK_TYPE_BUTTON_BOX_STYLE,
                                                      GTK_BUTTONBOX_DEFAULT_STYLE,
-                                                      G_PARAM_READWRITE));
+                                                      GTK_PARAM_READWRITE));
 
   gtk_container_class_install_child_property (container_class,
                                              CHILD_PROP_SECONDARY,
                                              g_param_spec_boolean ("secondary", 
-                                                                   _("Secondary"),
-                                                                   _("If TRUE, the child appears in a secondary group of children, suitable for, e.g., help buttons."),
+                                                                   P_("Secondary"),
+                                                                   P_("If TRUE, the child appears in a secondary group of children, suitable for, e.g., help buttons"),
                                                                    FALSE,
-                                                                   G_PARAM_READWRITE));
+                                                                   GTK_PARAM_READWRITE));
 }
 
 static void
@@ -235,25 +211,12 @@ gtk_button_box_get_child_property (GtkContainer *container,
                                   GValue       *value,
                                   GParamSpec   *pspec)
 {
-  GList *list;
-  GtkBoxChild *child_info = NULL;
-
-  list = GTK_BOX (container)->children;
-  while (list)
-    {
-      child_info = list->data;
-      if (child_info->widget == child)
-       break;
-
-      list = list->next;
-    }
-
-  g_assert (list != NULL);
-  
   switch (property_id)
     {
     case CHILD_PROP_SECONDARY:
-      g_value_set_boolean (value, child_info->is_secondary);
+      g_value_set_boolean (value, 
+                          gtk_button_box_get_child_secondary (GTK_BUTTON_BOX (container), 
+                                                              child));
       break;
     default:
       GTK_CONTAINER_WARN_INVALID_CHILD_PROPERTY_ID (container, property_id, pspec);
@@ -267,6 +230,8 @@ void
 gtk_button_box_set_child_size (GtkButtonBox *widget, 
                                gint width, gint height)
 {
+  g_return_if_fail (GTK_IS_BUTTON_BOX (widget));
+
   widget->child_min_width = width;
   widget->child_min_height = height;
 }
@@ -275,6 +240,8 @@ void
 gtk_button_box_set_child_ipadding (GtkButtonBox *widget,
                                    gint ipad_x, gint ipad_y)
 {
+  g_return_if_fail (GTK_IS_BUTTON_BOX (widget));
+
   widget->child_ipad_x = ipad_x;
   widget->child_ipad_y = ipad_y;
 }
@@ -283,13 +250,14 @@ void
 gtk_button_box_set_layout (GtkButtonBox      *widget, 
                            GtkButtonBoxStyle  layout_style)
 {
+  g_return_if_fail (GTK_IS_BUTTON_BOX (widget));
   g_return_if_fail (layout_style >= GTK_BUTTONBOX_DEFAULT_STYLE &&
-                   layout_style <= GTK_BUTTONBOX_END);
+                   layout_style <= GTK_BUTTONBOX_CENTER);
 
   if (widget->layout_style != layout_style)
     {
       widget->layout_style = layout_style;
-      g_object_notify (G_OBJECT (widget), "layout_style");
+      g_object_notify (G_OBJECT (widget), "layout-style");
       gtk_widget_queue_resize (GTK_WIDGET (widget));
     }
 }
@@ -301,6 +269,10 @@ void
 gtk_button_box_get_child_size (GtkButtonBox *widget,
                                gint *width, gint *height)
 {
+  g_return_if_fail (GTK_IS_BUTTON_BOX (widget));
+  g_return_if_fail (width != NULL);
+  g_return_if_fail (height != NULL);
+
   *width  = widget->child_min_width;
   *height = widget->child_min_height;
 }
@@ -309,6 +281,10 @@ void
 gtk_button_box_get_child_ipadding (GtkButtonBox *widget,
                                    gint* ipad_x, gint *ipad_y)
 {
+  g_return_if_fail (GTK_IS_BUTTON_BOX (widget));
+  g_return_if_fail (ipad_x != NULL);
+  g_return_if_fail (ipad_y != NULL);
+
   *ipad_x = widget->child_ipad_x;
   *ipad_y = widget->child_ipad_y;
 }
@@ -321,6 +297,43 @@ gtk_button_box_get_layout (GtkButtonBox *widget)
   return widget->layout_style;
 }
 
+/**
+ * gtk_button_box_get_child_secondary:
+ * @widget: a #GtkButtonBox
+ * @child: a child of @widget 
+ * 
+ * Returns whether @child should appear in a secondary group of children.
+ *
+ * Return value: whether @child should appear in a secondary group of children.
+ *
+ * Since: 2.4
+ **/
+gboolean 
+gtk_button_box_get_child_secondary (GtkButtonBox *widget,
+                                   GtkWidget    *child)
+{
+  GList *list;
+  GtkBoxChild *child_info;
+
+  g_return_val_if_fail (GTK_IS_BUTTON_BOX (widget), FALSE);
+  g_return_val_if_fail (GTK_IS_WIDGET (child), FALSE);
+
+  child_info = NULL;
+  list = GTK_BOX (widget)->children;
+  while (list)
+    {
+      child_info = list->data;
+      if (child_info->widget == child)
+       break;
+
+      list = list->next;
+    }
+
+  g_return_val_if_fail (list != NULL, FALSE);
+
+  return child_info->is_secondary;
+}
+
 /**
  * gtk_button_box_set_child_secondary
  * @widget: a #GtkButtonBox
@@ -333,7 +346,7 @@ gtk_button_box_get_layout (GtkButtonBox *widget)
  *
  * This group appears after the other children if the style
  * is %GTK_BUTTONBOX_START, %GTK_BUTTONBOX_SPREAD or
- * %GTK_BUTTONBOX_EDGE, and before the the other children if the style
+ * %GTK_BUTTONBOX_EDGE, and before the other children if the style
  * is %GTK_BUTTONBOX_END. For horizontal button boxes, the definition
  * of before/after depends on direction of the widget (see
  * gtk_widget_set_direction()). If the style is %GTK_BUTTONBOX_START
@@ -406,14 +419,11 @@ _gtk_button_box_child_requisition (GtkWidget *widget,
   bbox = GTK_BUTTON_BOX (widget);
 
   gtk_widget_style_get (widget,
-                        "child_min_width",
-                        &width_default,
-                        "child_min_height",
-                        &height_default,
-                        "child_internal_pad_x",
-                        &ipad_x_default,
-                        "child_internal_pad_y",
-                        &ipad_y_default, NULL);
+                        "child-min-width", &width_default,
+                        "child-min-height", &height_default,
+                        "child-internal-pad-x", &ipad_x_default,
+                        "child-internal-pad-y", &ipad_y_default, 
+                       NULL);
   
   child_min_width = bbox->child_min_width   != GTK_BUTTONBOX_DEFAULT
          ? bbox->child_min_width : width_default;
@@ -460,3 +470,6 @@ _gtk_button_box_child_requisition (GtkWidget *widget,
   if (height)
     *height = needed_height;
 }
+
+#define __GTK_BUTTON_BOX_C__
+#include "gtkaliasdef.c"