mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-11-05 16:20:10 +00:00
181 lines
4.7 KiB
C
181 lines
4.7 KiB
C
|
/*
|
||
|
* Copyright (C) 2006 Nokia Corporation.
|
||
|
* Author: Xan Lopez <xan.lopez@nokia.com>
|
||
|
*
|
||
|
* This library is free software; you can redistribute it and/or
|
||
|
* modify it under the terms of the GNU Lesser General Public License
|
||
|
* version 2.1 as published by the Free Software Foundation.
|
||
|
*
|
||
|
* 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., 51 Franklin St, Fifth Floor, Boston, MA
|
||
|
* 02110-1301 USA
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
#include <gtk/gtk.h>
|
||
|
|
||
|
#define N_BUTTONS 3
|
||
|
|
||
|
GtkWidget *bbox = NULL;
|
||
|
GtkWidget *hbbox = NULL, *vbbox = NULL;
|
||
|
|
||
|
static const char* styles[] = { "GTK_BUTTONBOX_DEFAULT_STYLE",
|
||
|
"GTK_BUTTONBOX_SPREAD",
|
||
|
"GTK_BUTTONBOX_EDGE",
|
||
|
"GTK_BUTTONBOX_START",
|
||
|
"GTK_BUTTONBOX_END",
|
||
|
"GTK_BUTTONBOX_CENTER",
|
||
|
NULL};
|
||
|
|
||
|
static const char* types[] = { "GtkHButtonBox",
|
||
|
"GtkVButtonBox",
|
||
|
NULL};
|
||
|
|
||
|
static void
|
||
|
populate_combo_with (GtkComboBox *combo, const char** elements)
|
||
|
{
|
||
|
int i;
|
||
|
|
||
|
for (i = 0; elements[i] != NULL; i++) {
|
||
|
gtk_combo_box_append_text (combo, elements[i]);
|
||
|
}
|
||
|
|
||
|
gtk_combo_box_set_active (combo, 0);
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
combo_changed_cb (GtkComboBox *combo,
|
||
|
gpointer user_data)
|
||
|
{
|
||
|
char *text;
|
||
|
int i;
|
||
|
|
||
|
text = gtk_combo_box_get_active_text (combo);
|
||
|
|
||
|
for (i = 0; styles[i]; i++) {
|
||
|
if (g_str_equal (text, styles[i])) {
|
||
|
gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), (GtkButtonBoxStyle)i);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
reparent_widget (GtkWidget *widget,
|
||
|
GtkWidget *old_parent,
|
||
|
GtkWidget *new_parent)
|
||
|
{
|
||
|
gtk_widget_ref (widget);
|
||
|
gtk_container_remove (GTK_CONTAINER (old_parent), widget);
|
||
|
gtk_container_add (GTK_CONTAINER (new_parent), widget);
|
||
|
gtk_widget_unref (widget);
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
combo_types_changed_cb (GtkComboBox *combo,
|
||
|
GtkWidget **buttons)
|
||
|
{
|
||
|
int i;
|
||
|
char *text;
|
||
|
GtkWidget *old_parent, *new_parent;
|
||
|
GtkButtonBoxStyle style;
|
||
|
|
||
|
text = gtk_combo_box_get_active_text (combo);
|
||
|
|
||
|
if (g_str_equal (text, "GtkHButtonBox")) {
|
||
|
old_parent = vbbox;
|
||
|
new_parent = hbbox;
|
||
|
} else {
|
||
|
old_parent = hbbox;
|
||
|
new_parent = vbbox;
|
||
|
}
|
||
|
|
||
|
bbox = new_parent;
|
||
|
|
||
|
for (i = 0; i < N_BUTTONS; i++) {
|
||
|
reparent_widget (buttons[i], old_parent, new_parent);
|
||
|
}
|
||
|
|
||
|
gtk_widget_hide (old_parent);
|
||
|
style = gtk_button_box_get_layout (GTK_BUTTON_BOX (old_parent));
|
||
|
gtk_button_box_set_layout (GTK_BUTTON_BOX (new_parent), style);
|
||
|
gtk_widget_show (new_parent);
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
option_cb (GtkToggleButton *option,
|
||
|
GtkWidget *button)
|
||
|
{
|
||
|
gboolean active = gtk_toggle_button_get_active (option);
|
||
|
|
||
|
gtk_button_box_set_child_secondary (GTK_BUTTON_BOX (bbox),
|
||
|
button, active);
|
||
|
}
|
||
|
|
||
|
static const char* strings[] = { "Ok", "Cancel", "Help" };
|
||
|
|
||
|
int
|
||
|
main (int argc,
|
||
|
char **argv)
|
||
|
{
|
||
|
GtkWidget *window, *buttons[N_BUTTONS];
|
||
|
GtkWidget *vbox, *hbox, *combo_styles, *combo_types, *option;
|
||
|
int i;
|
||
|
|
||
|
gtk_init (&argc, &argv);
|
||
|
|
||
|
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||
|
g_signal_connect (G_OBJECT (window), "delete-event", G_CALLBACK (gtk_main_quit), NULL);
|
||
|
|
||
|
vbox = gtk_vbox_new (FALSE, 0);
|
||
|
gtk_container_add (GTK_CONTAINER (window), vbox);
|
||
|
|
||
|
/* GtkHButtonBox */
|
||
|
|
||
|
hbbox = gtk_hbutton_box_new ();
|
||
|
gtk_box_pack_start (GTK_BOX (vbox), hbbox, TRUE, TRUE, 5);
|
||
|
|
||
|
for (i = 0; i < N_BUTTONS; i++) {
|
||
|
buttons[i] = gtk_button_new_with_label (strings[i]);
|
||
|
gtk_container_add (GTK_CONTAINER (hbbox), buttons[i]);
|
||
|
}
|
||
|
|
||
|
bbox = hbbox;
|
||
|
|
||
|
/* GtkVButtonBox */
|
||
|
vbbox = gtk_vbutton_box_new ();
|
||
|
gtk_box_pack_start (GTK_BOX (vbox), vbbox, TRUE, TRUE, 5);
|
||
|
|
||
|
/* Options */
|
||
|
|
||
|
hbox = gtk_hbox_new (FALSE, 0);
|
||
|
gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
|
||
|
|
||
|
combo_types = gtk_combo_box_new_text ();
|
||
|
populate_combo_with (GTK_COMBO_BOX (combo_types), types);
|
||
|
g_signal_connect (G_OBJECT (combo_types), "changed", G_CALLBACK (combo_types_changed_cb), buttons);
|
||
|
gtk_box_pack_start (GTK_BOX (hbox), combo_types, TRUE, TRUE, 0);
|
||
|
|
||
|
combo_styles = gtk_combo_box_new_text ();
|
||
|
populate_combo_with (GTK_COMBO_BOX (combo_styles), styles);
|
||
|
g_signal_connect (G_OBJECT (combo_styles), "changed", G_CALLBACK (combo_changed_cb), NULL);
|
||
|
gtk_box_pack_start (GTK_BOX (hbox), combo_styles, TRUE, TRUE, 0);
|
||
|
|
||
|
option = gtk_check_button_new_with_label ("Help is secondary");
|
||
|
g_signal_connect (G_OBJECT (option), "toggled", G_CALLBACK (option_cb), buttons[N_BUTTONS - 1]);
|
||
|
|
||
|
gtk_box_pack_start (GTK_BOX (hbox), option, FALSE, FALSE, 0);
|
||
|
|
||
|
gtk_widget_show_all (window);
|
||
|
gtk_widget_hide (vbbox);
|
||
|
|
||
|
gtk_main ();
|
||
|
|
||
|
return 0;
|
||
|
}
|