/* * OWL (OpenedHand Widget Library) Colour Selector Dialog. * * Author: Rob Bradford * * Copyright (C) 2007 OpenedHand Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #include "owlcolourselectordialog.h" #include "owlcolourswatch.h" #include "owlcolourpalette.h" #include G_DEFINE_TYPE (OwlColourSelectorDialog, owl_colour_selector_dialog, GTK_TYPE_DIALOG); #define COLOUR_SELECTOR_DIALOG_PRIVATE(o) \ (G_TYPE_INSTANCE_GET_PRIVATE ((o), OWL_TYPE_COLOUR_SELECTOR_DIALOG, OwlColourSelectorDialogPrivate)) typedef struct _OwlColourSelectorDialogPrivate OwlColourSelectorDialogPrivate; struct _OwlColourSelectorDialogPrivate { GtkWidget *frame; GtkWidget *vbox; GtkWidget *palette; GtkWidget *swatch; }; static void owl_colour_selector_dialog_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { switch (property_id) { default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } } static void owl_colour_selector_dialog_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { switch (property_id) { default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } } static void owl_colour_selector_dialog_dispose (GObject *object) { if (G_OBJECT_CLASS (owl_colour_selector_dialog_parent_class)->dispose) G_OBJECT_CLASS (owl_colour_selector_dialog_parent_class)->dispose (object); } static void owl_colour_selector_dialog_finalize (GObject *object) { G_OBJECT_CLASS (owl_colour_selector_dialog_parent_class)->finalize (object); } static void owl_colour_selector_dialog_class_init (OwlColourSelectorDialogClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); g_type_class_add_private (klass, sizeof (OwlColourSelectorDialogPrivate)); object_class->get_property = owl_colour_selector_dialog_get_property; object_class->set_property = owl_colour_selector_dialog_set_property; object_class->dispose = owl_colour_selector_dialog_dispose; object_class->finalize = owl_colour_selector_dialog_finalize; } static void colour_selected_cb (GtkWidget *widget, OwlColourSwatch *swatch, gpointer user_data) { OwlColourSelectorDialogPrivate *priv = COLOUR_SELECTOR_DIALOG_PRIVATE (user_data); owl_colour_swatch_set_colour (OWL_COLOUR_SWATCH(priv->swatch), owl_colour_swatch_get_colour (swatch)); printf ("%x\n", owl_colour_swatch_get_colour (swatch)); } guint32 owl_colour_selector_dialog_get_colour (OwlColourSelectorDialog *self) { OwlColourSelectorDialogPrivate *priv = COLOUR_SELECTOR_DIALOG_PRIVATE (self); return owl_colour_swatch_get_colour (OWL_COLOUR_SWATCH(priv->swatch)); } void owl_colour_selector_dialog_set_colour (OwlColourSelectorDialog *self, guint32 colour) { OwlColourSelectorDialogPrivate *priv = COLOUR_SELECTOR_DIALOG_PRIVATE (self); owl_colour_swatch_set_colour (OWL_COLOUR_SWATCH (priv->swatch), colour); } static void owl_colour_selector_dialog_init (OwlColourSelectorDialog *self) { GtkWidget *frame; GtkWidget *vbox; GtkWidget *palette; GtkWidget *swatch; GtkWidget *hbox; GtkWidget *alignment; guint32 colours[] = {0xfce94f00, 0xedd40000, 0xc4a00000, 0xfcaf3e00, 0xf5790000, 0xce5c0000, 0xe9b96e00, 0xc17d1100, 0x8f590200, 0x8ae23400, 0x73d21600, 0x4e9a0600, 0x729fcf00, 0x3465a400, 0x204a8700, 0xad7fa800, 0x75507b00, 0x5c356600, 0xef292900, 0xcc000000, 0xa4000000, 0xffffffff, 0xbabdb600, 0x00000000}; OwlColourSelectorDialogPrivate *priv = COLOUR_SELECTOR_DIALOG_PRIVATE (self); frame = gtk_frame_new (NULL); vbox = gtk_vbox_new (FALSE, 6); gtk_container_add (GTK_CONTAINER(frame), vbox); palette = owl_colour_palette_new (6, 4); gtk_box_pack_start (GTK_BOX (vbox), palette, TRUE, TRUE, 6); owl_colour_palette_set_colours (OWL_COLOUR_PALETTE (palette), colours, 24); g_signal_connect (palette, "colour-selected", (GCallback)colour_selected_cb, self); swatch = owl_colour_swatch_new (); hbox = gtk_hbox_new (FALSE, 0); alignment = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_container_add (GTK_CONTAINER (alignment), swatch); gtk_box_pack_start (GTK_BOX (hbox), alignment, TRUE, FALSE, 6); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 6); gtk_widget_set_size_request (swatch, 64, 64); gtk_container_add (GTK_CONTAINER (GTK_DIALOG (self)->vbox), frame); gtk_widget_show_all (frame); gtk_dialog_add_buttons (GTK_DIALOG (self), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); gtk_window_set_resizable (GTK_WINDOW (self), FALSE); gtk_window_set_title (GTK_WINDOW (self), "Pick a colour"); priv->palette = palette; priv->swatch = swatch; priv->vbox = vbox; priv->frame = frame; } GtkWidget* owl_colour_selector_dialog_new (void) { return GTK_WIDGET(g_object_new (OWL_TYPE_COLOUR_SELECTOR_DIALOG, NULL)); }