* files for a list of changes. These files are distributed with
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
*/
+#include "config.h"
+#include <string.h>
#include <glib.h>
#include "gtkcolorseldialog.h"
#include "gtkframe.h"
-#include "gtkhbbox.h"
#include "gtkbutton.h"
#include "gtkstock.h"
#include "gtkintl.h"
+#include "gtkbuildable.h"
-static void gtk_color_selection_dialog_class_init (GtkColorSelectionDialogClass *klass);
-static void gtk_color_selection_dialog_init (GtkColorSelectionDialog *colorseldiag);
+/**
+ * SECTION:gtkcolorseldlg
+ * @Short_description: A standard dialog box for selecting a color
+ * @Title: GtkColorSelectionDialog
+ *
+ * The #GtkColorSelectionDialog provides a standard dialog which
+ * allows the user to select a color much like the #GtkFileSelection
+ * provides a standard dialog for file selection.
+ *
+ * Use gtk_color_selection_dialog_get_color_selection() to get the
+ * #GtkColorSelection widget contained within the dialog. Use this widget
+ * and its gtk_color_selection_get_current_color()
+ * function to gain access to the selected color. Connect a handler
+ * for this widget's #GtkColorSelection::color-changed signal to be notified
+ * when the color changes.
+ *
+ * <refsect2 id="GtkColorSelectionDialog-BUILDER-UI">
+ * <title>GtkColorSelectionDialog as GtkBuildable</title>
+ * The GtkColorSelectionDialog implementation of the GtkBuildable interface
+ * exposes the embedded #GtkColorSelection as internal child with the
+ * name "color_selection". It also exposes the buttons with the names
+ * "ok_button", "cancel_button" and "help_button".
+ * </refsect2>
+ */
+
+
+struct _GtkColorSelectionDialogPrivate
+{
+ GtkWidget *colorsel;
+ GtkWidget *ok_button;
+ GtkWidget *cancel_button;
+ GtkWidget *help_button;
+};
-static GtkWindowClass *color_selection_dialog_parent_class = NULL;
+enum {
+ PROP_0,
+ PROP_COLOR_SELECTION,
+ PROP_OK_BUTTON,
+ PROP_CANCEL_BUTTON,
+ PROP_HELP_BUTTON
+};
/***************************/
/* GtkColorSelectionDialog */
/***************************/
-GType
-gtk_color_selection_dialog_get_type (void)
+static void gtk_color_selection_dialog_buildable_interface_init (GtkBuildableIface *iface);
+static GObject * gtk_color_selection_dialog_buildable_get_internal_child (GtkBuildable *buildable,
+ GtkBuilder *builder,
+ const gchar *childname);
+
+G_DEFINE_TYPE_WITH_CODE (GtkColorSelectionDialog, gtk_color_selection_dialog,
+ GTK_TYPE_DIALOG,
+ G_IMPLEMENT_INTERFACE (GTK_TYPE_BUILDABLE,
+ gtk_color_selection_dialog_buildable_interface_init))
+
+static GtkBuildableIface *parent_buildable_iface;
+
+static void
+gtk_color_selection_dialog_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
{
- static GType color_selection_dialog_type = 0;
-
- if (!color_selection_dialog_type)
+ GtkColorSelectionDialog *colorsel = GTK_COLOR_SELECTION_DIALOG (object);
+ GtkColorSelectionDialogPrivate *priv = colorsel->priv;
+
+ switch (prop_id)
{
- static const GTypeInfo colorsel_diag_info =
- {
- sizeof (GtkColorSelectionDialogClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
- (GClassInitFunc) gtk_color_selection_dialog_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
- sizeof (GtkColorSelectionDialog),
- 0, /* n_preallocs */
- (GInstanceInitFunc) gtk_color_selection_dialog_init,
- };
-
- color_selection_dialog_type =
- g_type_register_static (GTK_TYPE_DIALOG, "GtkColorSelectionDialog",
- &colorsel_diag_info, 0);
+ case PROP_COLOR_SELECTION:
+ g_value_set_object (value, priv->colorsel);
+ break;
+ case PROP_OK_BUTTON:
+ g_value_set_object (value, priv->ok_button);
+ break;
+ case PROP_CANCEL_BUTTON:
+ g_value_set_object (value, priv->cancel_button);
+ break;
+ case PROP_HELP_BUTTON:
+ g_value_set_object (value, priv->help_button);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
}
-
- return color_selection_dialog_type;
}
static void
gtk_color_selection_dialog_class_init (GtkColorSelectionDialogClass *klass)
{
- color_selection_dialog_parent_class = g_type_class_peek_parent (klass);
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ gobject_class->get_property = gtk_color_selection_dialog_get_property;
+
+ g_object_class_install_property (gobject_class,
+ PROP_COLOR_SELECTION,
+ g_param_spec_object ("color-selection",
+ P_("Color Selection"),
+ P_("The color selection embedded in the dialog."),
+ GTK_TYPE_WIDGET,
+ G_PARAM_READABLE));
+ g_object_class_install_property (gobject_class,
+ PROP_OK_BUTTON,
+ g_param_spec_object ("ok-button",
+ P_("OK Button"),
+ P_("The OK button of the dialog."),
+ GTK_TYPE_WIDGET,
+ G_PARAM_READABLE));
+ g_object_class_install_property (gobject_class,
+ PROP_CANCEL_BUTTON,
+ g_param_spec_object ("cancel-button",
+ P_("Cancel Button"),
+ P_("The cancel button of the dialog."),
+ GTK_TYPE_WIDGET,
+ G_PARAM_READABLE));
+ g_object_class_install_property (gobject_class,
+ PROP_HELP_BUTTON,
+ g_param_spec_object ("help-button",
+ P_("Help Button"),
+ P_("The help button of the dialog."),
+ GTK_TYPE_WIDGET,
+ G_PARAM_READABLE));
+
+ gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_COLOR_CHOOSER);
+
+ g_type_class_add_private (klass, sizeof (GtkColorSelectionDialogPrivate));
}
static void
gtk_color_selection_dialog_init (GtkColorSelectionDialog *colorseldiag)
{
- GtkWidget *action_area_button_box, *frame;
-
- frame = gtk_frame_new (NULL);
- gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_NONE);
- gtk_container_add (GTK_CONTAINER (GTK_DIALOG (colorseldiag)->vbox), frame);
- gtk_container_set_border_width (GTK_CONTAINER (frame), 10);
- gtk_widget_show (frame);
-
- colorseldiag->colorsel = gtk_color_selection_new ();
- gtk_color_selection_set_has_palette (GTK_COLOR_SELECTION(colorseldiag->colorsel), FALSE);
- gtk_color_selection_set_has_opacity_control (GTK_COLOR_SELECTION(colorseldiag->colorsel), FALSE);
- gtk_container_add (GTK_CONTAINER (frame), colorseldiag->colorsel);
- gtk_widget_show (colorseldiag->colorsel);
-
- action_area_button_box = GTK_DIALOG (colorseldiag)->action_area;
+ GtkColorSelectionDialogPrivate *priv;
+ GtkDialog *dialog = GTK_DIALOG (colorseldiag);
+ GtkWidget *action_area, *content_area;
- colorseldiag->cancel_button = gtk_dialog_add_button (GTK_DIALOG (colorseldiag),
- GTK_STOCK_CANCEL,
- GTK_RESPONSE_CANCEL);
+ colorseldiag->priv = G_TYPE_INSTANCE_GET_PRIVATE (colorseldiag,
+ GTK_TYPE_COLOR_SELECTION_DIALOG,
+ GtkColorSelectionDialogPrivate);
+ priv = colorseldiag->priv;
- colorseldiag->ok_button = gtk_dialog_add_button (GTK_DIALOG (colorseldiag),
- GTK_STOCK_OK,
- GTK_RESPONSE_OK);
-
- gtk_widget_grab_default (colorseldiag->ok_button);
-
- colorseldiag->help_button = gtk_dialog_add_button (GTK_DIALOG (colorseldiag),
- GTK_STOCK_HELP,
- GTK_RESPONSE_HELP);
+ content_area = gtk_dialog_get_content_area (dialog);
+ action_area = gtk_dialog_get_action_area (dialog);
+
+ gtk_container_set_border_width (GTK_CONTAINER (dialog), 5);
+ gtk_box_set_spacing (GTK_BOX (content_area), 2); /* 2 * 5 + 2 = 12 */
+ gtk_container_set_border_width (GTK_CONTAINER (action_area), 5);
+ gtk_box_set_spacing (GTK_BOX (action_area), 6);
+
+ priv->colorsel = gtk_color_selection_new ();
+ gtk_container_set_border_width (GTK_CONTAINER (priv->colorsel), 5);
+ gtk_color_selection_set_has_palette (GTK_COLOR_SELECTION (priv->colorsel), FALSE);
+ gtk_color_selection_set_has_opacity_control (GTK_COLOR_SELECTION (priv->colorsel), FALSE);
+ gtk_container_add (GTK_CONTAINER (content_area), priv->colorsel);
+ gtk_widget_show (priv->colorsel);
+
+ priv->cancel_button = gtk_dialog_add_button (dialog,
+ GTK_STOCK_CANCEL,
+ GTK_RESPONSE_CANCEL);
+
+ priv->ok_button = gtk_dialog_add_button (dialog,
+ _("_Select"),
+ GTK_RESPONSE_OK);
- gtk_widget_hide (colorseldiag->help_button);
+ gtk_widget_grab_default (priv->ok_button);
+
+ priv->help_button = gtk_dialog_add_button (dialog,
+ GTK_STOCK_HELP,
+ GTK_RESPONSE_HELP);
+
+ gtk_widget_hide (priv->help_button);
+
+ gtk_dialog_set_alternative_button_order (dialog,
+ GTK_RESPONSE_OK,
+ GTK_RESPONSE_CANCEL,
+ GTK_RESPONSE_HELP,
+ -1);
+
+ gtk_window_set_title (GTK_WINDOW (colorseldiag),
+ _("Color Selection"));
}
+/**
+ * gtk_color_selection_dialog_new:
+ * @title: a string containing the title text for the dialog.
+ *
+ * Creates a new #GtkColorSelectionDialog.
+ *
+ * Returns: a #GtkColorSelectionDialog.
+ */
GtkWidget*
gtk_color_selection_dialog_new (const gchar *title)
{
GtkColorSelectionDialog *colorseldiag;
colorseldiag = g_object_new (GTK_TYPE_COLOR_SELECTION_DIALOG, NULL);
- gtk_window_set_title (GTK_WINDOW (colorseldiag), title);
+
+ if (title)
+ gtk_window_set_title (GTK_WINDOW (colorseldiag), title);
+
+ gtk_window_set_resizable (GTK_WINDOW (colorseldiag), FALSE);
return GTK_WIDGET (colorseldiag);
}
+
+/**
+ * gtk_color_selection_dialog_get_color_selection:
+ * @colorsel: a #GtkColorSelectionDialog
+ *
+ * Retrieves the #GtkColorSelection widget embedded in the dialog.
+ *
+ * Returns: (transfer none): the embedded #GtkColorSelection
+ *
+ * Since: 2.14
+ **/
+GtkWidget*
+gtk_color_selection_dialog_get_color_selection (GtkColorSelectionDialog *colorsel)
+{
+ g_return_val_if_fail (GTK_IS_COLOR_SELECTION_DIALOG (colorsel), NULL);
+
+ return colorsel->priv->colorsel;
+}
+
+static void
+gtk_color_selection_dialog_buildable_interface_init (GtkBuildableIface *iface)
+{
+ parent_buildable_iface = g_type_interface_peek_parent (iface);
+ iface->get_internal_child = gtk_color_selection_dialog_buildable_get_internal_child;
+}
+
+static GObject *
+gtk_color_selection_dialog_buildable_get_internal_child (GtkBuildable *buildable,
+ GtkBuilder *builder,
+ const gchar *childname)
+{
+ GtkColorSelectionDialog *selection_dialog = GTK_COLOR_SELECTION_DIALOG (buildable);
+ GtkColorSelectionDialogPrivate *priv = selection_dialog->priv;
+
+ if (g_strcmp0 (childname, "ok_button") == 0)
+ return G_OBJECT (priv->ok_button);
+ else if (g_strcmp0 (childname, "cancel_button") == 0)
+ return G_OBJECT (priv->cancel_button);
+ else if (g_strcmp0 (childname, "help_button") == 0)
+ return G_OBJECT (priv->help_button);
+ else if (g_strcmp0 (childname, "color_selection") == 0)
+ return G_OBJECT (priv->colorsel);
+
+ return parent_buildable_iface->get_internal_child (buildable, builder, childname);
+}