Blame tests/testbbox.c

Packit 98cdb6
/*
Packit 98cdb6
 * Copyright (C) 2006 Nokia Corporation.
Packit 98cdb6
 * Author: Xan Lopez <xan.lopez@nokia.com>
Packit 98cdb6
 *
Packit 98cdb6
 * This library is free software; you can redistribute it and/or
Packit 98cdb6
 * modify it under the terms of the GNU Lesser General Public License
Packit 98cdb6
 * version 2.1 as published by the Free Software Foundation.
Packit 98cdb6
 *
Packit 98cdb6
 * This library is distributed in the hope that it will be useful, but
Packit 98cdb6
 * WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 98cdb6
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Packit 98cdb6
 * Lesser General Public License for more details.
Packit 98cdb6
 *
Packit 98cdb6
 * You should have received a copy of the GNU Lesser General Public
Packit 98cdb6
 * License along with this library; if not, write to the Free Software
Packit 98cdb6
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
Packit 98cdb6
 * 02110-1301 USA
Packit 98cdb6
 *
Packit 98cdb6
 */
Packit 98cdb6
Packit 98cdb6
#include <gtk/gtk.h>
Packit 98cdb6
Packit 98cdb6
#define N_BUTTONS 3
Packit 98cdb6
Packit 98cdb6
GtkWidget *bbox = NULL;
Packit 98cdb6
GtkWidget *hbbox = NULL, *vbbox = NULL;
Packit 98cdb6
Packit 98cdb6
static const char* styles[] = { "GTK_BUTTONBOX_DEFAULT_STYLE",
Packit 98cdb6
				"GTK_BUTTONBOX_SPREAD",
Packit 98cdb6
				"GTK_BUTTONBOX_EDGE",
Packit 98cdb6
				"GTK_BUTTONBOX_START",
Packit 98cdb6
				"GTK_BUTTONBOX_END",
Packit 98cdb6
				"GTK_BUTTONBOX_CENTER",
Packit 98cdb6
				NULL};
Packit 98cdb6
Packit 98cdb6
static const char* types[] = { "GtkHButtonBox",
Packit 98cdb6
			       "GtkVButtonBox",
Packit 98cdb6
			       NULL};
Packit 98cdb6
Packit 98cdb6
static void
Packit 98cdb6
populate_combo_with (GtkComboBoxText *combo, const char** elements)
Packit 98cdb6
{
Packit 98cdb6
  int i;
Packit 98cdb6
  
Packit 98cdb6
  for (i = 0; elements[i] != NULL; i++) {
Packit 98cdb6
    gtk_combo_box_text_append_text (combo, elements[i]);
Packit 98cdb6
  }
Packit 98cdb6
  
Packit 98cdb6
  gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static void
Packit 98cdb6
combo_changed_cb (GtkComboBoxText *combo,
Packit 98cdb6
		  gpointer user_data)
Packit 98cdb6
{
Packit 98cdb6
  char *text;
Packit 98cdb6
  int i;
Packit 98cdb6
  
Packit 98cdb6
  text = gtk_combo_box_text_get_active_text (combo);
Packit 98cdb6
  
Packit 98cdb6
  for (i = 0; styles[i]; i++) {
Packit 98cdb6
    if (g_str_equal (text, styles[i])) {
Packit 98cdb6
      gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), (GtkButtonBoxStyle)i);
Packit 98cdb6
    }
Packit 98cdb6
  }
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static void
Packit 98cdb6
reparent_widget (GtkWidget *widget,
Packit 98cdb6
		 GtkWidget *old_parent,
Packit 98cdb6
		 GtkWidget *new_parent)
Packit 98cdb6
{
Packit 98cdb6
  g_object_ref (widget);
Packit 98cdb6
  gtk_container_remove (GTK_CONTAINER (old_parent), widget);
Packit 98cdb6
  gtk_container_add (GTK_CONTAINER (new_parent), widget);
Packit 98cdb6
  g_object_unref (widget);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static void
Packit 98cdb6
combo_types_changed_cb (GtkComboBoxText *combo,
Packit 98cdb6
			GtkWidget **buttons)
Packit 98cdb6
{
Packit 98cdb6
  int i;
Packit 98cdb6
  char *text;
Packit 98cdb6
  GtkWidget *old_parent, *new_parent;
Packit 98cdb6
  GtkButtonBoxStyle style;
Packit 98cdb6
  
Packit 98cdb6
  text = gtk_combo_box_text_get_active_text (combo);
Packit 98cdb6
  
Packit 98cdb6
  if (g_str_equal (text, "GtkHButtonBox")) {
Packit 98cdb6
    old_parent = vbbox;
Packit 98cdb6
    new_parent = hbbox;
Packit 98cdb6
  } else {
Packit 98cdb6
    old_parent = hbbox;
Packit 98cdb6
    new_parent = vbbox;
Packit 98cdb6
  }
Packit 98cdb6
  
Packit 98cdb6
  bbox = new_parent;
Packit 98cdb6
  
Packit 98cdb6
  for (i = 0; i < N_BUTTONS; i++) {
Packit 98cdb6
    reparent_widget (buttons[i], old_parent, new_parent);
Packit 98cdb6
  }
Packit 98cdb6
  
Packit 98cdb6
  gtk_widget_hide (old_parent);
Packit 98cdb6
  style = gtk_button_box_get_layout (GTK_BUTTON_BOX (old_parent));
Packit 98cdb6
  gtk_button_box_set_layout (GTK_BUTTON_BOX (new_parent), style);
Packit 98cdb6
  gtk_widget_show (new_parent);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static void
Packit 98cdb6
option_cb (GtkToggleButton *option,
Packit 98cdb6
	   GtkWidget *button)
Packit 98cdb6
{
Packit 98cdb6
  gboolean active = gtk_toggle_button_get_active (option);
Packit 98cdb6
  
Packit 98cdb6
  gtk_button_box_set_child_secondary (GTK_BUTTON_BOX (bbox),
Packit 98cdb6
				      button, active);
Packit 98cdb6
}
Packit 98cdb6
Packit 98cdb6
static const char* strings[] = { "Ok", "Cancel", "Help" };
Packit 98cdb6
Packit 98cdb6
int
Packit 98cdb6
main (int    argc,
Packit 98cdb6
      char **argv)
Packit 98cdb6
{
Packit 98cdb6
  GtkWidget *window, *buttons[N_BUTTONS];
Packit 98cdb6
  GtkWidget *vbox, *hbox, *combo_styles, *combo_types, *option;
Packit 98cdb6
  int i;
Packit 98cdb6
  
Packit 98cdb6
  gtk_init (&argc, &argv);
Packit 98cdb6
  
Packit 98cdb6
  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
Packit 98cdb6
  g_signal_connect (G_OBJECT (window), "delete-event", G_CALLBACK (gtk_main_quit), NULL);
Packit 98cdb6
  
Packit 98cdb6
  vbox = gtk_vbox_new (FALSE, 0);
Packit 98cdb6
  gtk_container_add (GTK_CONTAINER (window), vbox);
Packit 98cdb6
  
Packit 98cdb6
  /* GtkHButtonBox */
Packit 98cdb6
  
Packit 98cdb6
  hbbox = gtk_hbutton_box_new ();
Packit 98cdb6
  gtk_box_pack_start (GTK_BOX (vbox), hbbox, TRUE, TRUE, 5);
Packit 98cdb6
  
Packit 98cdb6
  for (i = 0; i < N_BUTTONS; i++) {
Packit 98cdb6
    buttons[i] = gtk_button_new_with_label (strings[i]);
Packit 98cdb6
    gtk_container_add (GTK_CONTAINER (hbbox), buttons[i]);
Packit 98cdb6
  }
Packit 98cdb6
  
Packit 98cdb6
  bbox = hbbox;
Packit 98cdb6
  
Packit 98cdb6
  /* GtkVButtonBox */
Packit 98cdb6
  vbbox = gtk_vbutton_box_new ();
Packit 98cdb6
  gtk_box_pack_start (GTK_BOX (vbox), vbbox, TRUE, TRUE, 5);
Packit 98cdb6
  
Packit 98cdb6
  /* Options */
Packit 98cdb6
  
Packit 98cdb6
  hbox = gtk_hbox_new (FALSE, 0);
Packit 98cdb6
  gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
Packit 98cdb6
  
Packit 98cdb6
  combo_types = gtk_combo_box_text_new ();
Packit 98cdb6
  populate_combo_with (GTK_COMBO_BOX_TEXT (combo_types), types);
Packit 98cdb6
  g_signal_connect (G_OBJECT (combo_types), "changed", G_CALLBACK (combo_types_changed_cb), buttons);
Packit 98cdb6
  gtk_box_pack_start (GTK_BOX (hbox), combo_types, TRUE, TRUE, 0);
Packit 98cdb6
  
Packit 98cdb6
  combo_styles = gtk_combo_box_text_new ();
Packit 98cdb6
  populate_combo_with (GTK_COMBO_BOX_TEXT (combo_styles), styles);
Packit 98cdb6
  g_signal_connect (G_OBJECT (combo_styles), "changed", G_CALLBACK (combo_changed_cb), NULL);
Packit 98cdb6
  gtk_box_pack_start (GTK_BOX (hbox), combo_styles, TRUE, TRUE, 0);
Packit 98cdb6
  
Packit 98cdb6
  option = gtk_check_button_new_with_label ("Help is secondary");
Packit 98cdb6
  g_signal_connect (G_OBJECT (option), "toggled", G_CALLBACK (option_cb), buttons[N_BUTTONS - 1]);
Packit 98cdb6
  
Packit 98cdb6
  gtk_box_pack_start (GTK_BOX (hbox), option, FALSE, FALSE, 0);
Packit 98cdb6
  
Packit 98cdb6
  gtk_widget_show_all (window);
Packit 98cdb6
  gtk_widget_hide (vbbox);
Packit 98cdb6
  
Packit 98cdb6
  gtk_main ();
Packit 98cdb6
  
Packit 98cdb6
  return 0;
Packit 98cdb6
}