2 * This file is a part of hildon
4 * Copyright (C) 2008 Nokia Corporation, all rights reserved.
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU Lesser Public License as published by
8 * the Free Software Foundation; version 2 of the license.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU Lesser Public License for more details.
18 * SECTION:hildon-check-button
19 * @short_description: Button with a check box inside
21 * This is a standard #GtkButton which contains a check box and a
22 * label. Functions are provided to get and set the value of the check
23 * box. Note that this button does NOT support an image, so don't use
24 * gtk_button_set_image()
27 * <title>Using a Hildon check button</title>
30 * button_clicked (GtkButton *button, gpointer user_data)
34 * active = hildon_check_button_get_active (button);
36 * g_debug ("Button is active");
38 * g_debug ("Button is not active");
42 * create_button (void)
46 * button = hildon_check_button_new (HILDON_SIZE_AUTO);
47 * gtk_button_set_label (GTK_BUTTON (button), "Click me");
49 * g_signal_connect (button, "clicked", G_CALLBACK (button_clicked), NULL);
58 #include "hildon-check-button.h"
61 check_button_clicked (GtkButton *button,
62 GtkCellRendererToggle *renderer)
64 gboolean current = gtk_cell_renderer_toggle_get_active (renderer);
65 gtk_cell_renderer_toggle_set_active (renderer, !current);
69 * hildon_check_button_set_active:
70 * @button: A #GtkButton created with hildon_check_button_new()
71 * @is_active: new state for the check box
73 * Sets the state of the check box.
76 hildon_check_button_set_active (GtkButton *button,
79 GtkCellRendererToggle *toggle_renderer;
80 gboolean prev_is_active;
82 g_return_if_fail (GTK_IS_BUTTON (button));
83 toggle_renderer = GTK_CELL_RENDERER_TOGGLE (g_object_get_data (G_OBJECT (button), "toggle-renderer"));
84 g_return_if_fail (GTK_IS_CELL_RENDERER_TOGGLE (toggle_renderer));
86 prev_is_active = gtk_cell_renderer_toggle_get_active (toggle_renderer);
88 if (prev_is_active != is_active) {
89 gtk_cell_renderer_toggle_set_active (toggle_renderer, is_active);
90 gtk_widget_queue_draw (GTK_WIDGET (button));
95 * hildon_check_button_get_active:
96 * @button: A #GtkButton created with hildon_check_button_new()
98 * Gets the state of the check box.
100 * Return value: %TRUE if the check box is active, %FALSE otherwise.
103 hildon_check_button_get_active (GtkButton *button)
105 GtkCellRendererToggle *toggle_renderer;
107 g_return_val_if_fail (GTK_IS_BUTTON (button), FALSE);
108 toggle_renderer = GTK_CELL_RENDERER_TOGGLE (g_object_get_data (G_OBJECT (button), "toggle-renderer"));
109 g_return_val_if_fail (GTK_IS_CELL_RENDERER_TOGGLE (toggle_renderer), FALSE);
111 return gtk_cell_renderer_toggle_get_active (toggle_renderer);
115 * hildon_check_button_new:
116 * @size: Flags indicating the size of the new button
118 * This function creates a #GtkButton containing a label and a check
121 * Return value: A newly created #GtkButton widget with a check box.
124 hildon_check_button_new (HildonSizeType size)
126 GtkWidget *button = gtk_button_new ();
127 GtkWidget *cell_view = gtk_cell_view_new ();
128 GtkCellRenderer *toggle_renderer = gtk_cell_renderer_toggle_new ();
130 /* Set the size of the button */
131 hildon_gtk_widget_set_theme_size (button, size);
133 /* Toggle the check box when the button is clicked */
134 g_signal_connect (button, "clicked", G_CALLBACK (check_button_clicked), toggle_renderer);
136 /* Make sure that the check box is always shown, no matter the value of gtk-button-images */
137 g_signal_connect (cell_view, "notify::visible", G_CALLBACK (gtk_widget_show), NULL);
139 /* Store the renderer for later use */
140 g_object_set_data (G_OBJECT (button), "toggle-renderer", toggle_renderer);
142 /* Pack everything */
143 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (cell_view), toggle_renderer, FALSE);
144 gtk_button_set_image (GTK_BUTTON (button), cell_view);