Blame demos/gtk-demo/panes.c

Packit Service fb6fa5
/* Paned Widgets
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * The GtkHPaned and GtkVPaned Widgets divide their content
Packit Service fb6fa5
 * area into two panes with a divider in between that the
Packit Service fb6fa5
 * user can adjust. A separate child is placed into each
Packit Service fb6fa5
 * pane.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * There are a number of options that can be set for each pane.
Packit Service fb6fa5
 * This test contains both a horizontal (HPaned) and a vertical
Packit Service fb6fa5
 * (VPaned) widget, and allows you to adjust the options for
Packit Service fb6fa5
 * each side of each widget.
Packit Service fb6fa5
 */
Packit Service fb6fa5
Packit Service fb6fa5
#include <gtk/gtk.h>
Packit Service fb6fa5
Packit Service fb6fa5
void
Packit Service fb6fa5
toggle_resize (GtkWidget *widget,
Packit Service fb6fa5
	       GtkWidget *child)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkPaned *paned = GTK_PANED (gtk_widget_get_parent (child));
Packit Service fb6fa5
  gboolean is_child1 = (child == gtk_paned_get_child1 (paned));
Packit Service fb6fa5
  gboolean resize, shrink;
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_container_child_get (GTK_CONTAINER (paned), child, "resize", &resize, "shrink", &shrink, NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  g_object_ref (child);
Packit Service fb6fa5
  gtk_container_remove (GTK_CONTAINER (gtk_widget_get_parent (child)), child);
Packit Service fb6fa5
  if (is_child1)
Packit Service fb6fa5
    gtk_paned_pack1 (paned, child, !resize, shrink);
Packit Service fb6fa5
  else
Packit Service fb6fa5
    gtk_paned_pack2 (paned, child, !resize, shrink);
Packit Service fb6fa5
  g_object_unref (child);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
void
Packit Service fb6fa5
toggle_shrink (GtkWidget *widget,
Packit Service fb6fa5
	       GtkWidget *child)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkPaned *paned = GTK_PANED (gtk_widget_get_parent (child));
Packit Service fb6fa5
  gboolean is_child1 = (child == gtk_paned_get_child1 (paned));
Packit Service fb6fa5
  gboolean resize, shrink;
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_container_child_get (GTK_CONTAINER (paned), child, "resize", &resize, "shrink", &shrink, NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  g_object_ref (child);
Packit Service fb6fa5
  gtk_container_remove (GTK_CONTAINER (gtk_widget_get_parent (child)), child);
Packit Service fb6fa5
  if (is_child1)
Packit Service fb6fa5
    gtk_paned_pack1 (paned, child, resize, !shrink);
Packit Service fb6fa5
  else
Packit Service fb6fa5
    gtk_paned_pack2 (paned, child, resize, !shrink);
Packit Service fb6fa5
  g_object_unref (child);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
GtkWidget *
Packit Service fb6fa5
create_pane_options (GtkPaned	 *paned,
Packit Service fb6fa5
		     const gchar *frame_label,
Packit Service fb6fa5
		     const gchar *label1,
Packit Service fb6fa5
		     const gchar *label2)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkWidget *frame;
Packit Service fb6fa5
  GtkWidget *table;
Packit Service fb6fa5
  GtkWidget *label;
Packit Service fb6fa5
  GtkWidget *check_button;
Packit Service fb6fa5
  GtkWidget *child1;
Packit Service fb6fa5
  GtkWidget *child2;
Packit Service fb6fa5
  
Packit Service fb6fa5
  child1 = gtk_paned_get_child1 (paned);
Packit Service fb6fa5
  child2 = gtk_paned_get_child2 (paned);
Packit Service fb6fa5
  
Packit Service fb6fa5
  frame = gtk_frame_new (frame_label);
Packit Service fb6fa5
  gtk_container_set_border_width (GTK_CONTAINER (frame), 4);
Packit Service fb6fa5
  
Packit Service fb6fa5
  table = gtk_table_new (3, 2, TRUE);
Packit Service fb6fa5
  gtk_container_add (GTK_CONTAINER (frame), table);
Packit Service fb6fa5
  
Packit Service fb6fa5
  label = gtk_label_new (label1);
Packit Service fb6fa5
  gtk_table_attach_defaults (GTK_TABLE (table), label,
Packit Service fb6fa5
			     0, 1, 0, 1);
Packit Service fb6fa5
  
Packit Service fb6fa5
  check_button = gtk_check_button_new_with_mnemonic ("_Resize");
Packit Service fb6fa5
  gtk_table_attach_defaults (GTK_TABLE (table), check_button,
Packit Service fb6fa5
			     0, 1, 1, 2);
Packit Service fb6fa5
  g_signal_connect (check_button, "toggled",
Packit Service fb6fa5
		    G_CALLBACK (toggle_resize), child1);
Packit Service fb6fa5
  
Packit Service fb6fa5
  check_button = gtk_check_button_new_with_mnemonic ("_Shrink");
Packit Service fb6fa5
  gtk_table_attach_defaults (GTK_TABLE (table), check_button,
Packit Service fb6fa5
			     0, 1, 2, 3);
Packit Service fb6fa5
  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
Packit Service fb6fa5
			       TRUE);
Packit Service fb6fa5
  g_signal_connect (check_button, "toggled",
Packit Service fb6fa5
		    G_CALLBACK (toggle_shrink), child1);
Packit Service fb6fa5
  
Packit Service fb6fa5
  label = gtk_label_new (label2);
Packit Service fb6fa5
  gtk_table_attach_defaults (GTK_TABLE (table), label,
Packit Service fb6fa5
			     1, 2, 0, 1);
Packit Service fb6fa5
  
Packit Service fb6fa5
  check_button = gtk_check_button_new_with_mnemonic ("_Resize");
Packit Service fb6fa5
  gtk_table_attach_defaults (GTK_TABLE (table), check_button,
Packit Service fb6fa5
			     1, 2, 1, 2);
Packit Service fb6fa5
  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
Packit Service fb6fa5
			       TRUE);
Packit Service fb6fa5
  g_signal_connect (check_button, "toggled",
Packit Service fb6fa5
		    G_CALLBACK (toggle_resize), child2);
Packit Service fb6fa5
  
Packit Service fb6fa5
  check_button = gtk_check_button_new_with_mnemonic ("_Shrink");
Packit Service fb6fa5
  gtk_table_attach_defaults (GTK_TABLE (table), check_button,
Packit Service fb6fa5
			     1, 2, 2, 3);
Packit Service fb6fa5
  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
Packit Service fb6fa5
			       TRUE);
Packit Service fb6fa5
  g_signal_connect (check_button, "toggled",
Packit Service fb6fa5
		    G_CALLBACK (toggle_shrink), child2);
Packit Service fb6fa5
Packit Service fb6fa5
  return frame;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
GtkWidget *
Packit Service fb6fa5
do_panes (GtkWidget *do_widget)
Packit Service fb6fa5
{
Packit Service fb6fa5
  static GtkWidget *window = NULL;
Packit Service fb6fa5
  GtkWidget *frame;
Packit Service fb6fa5
  GtkWidget *hpaned;
Packit Service fb6fa5
  GtkWidget *vpaned;
Packit Service fb6fa5
  GtkWidget *button;
Packit Service fb6fa5
  GtkWidget *vbox;
Packit Service fb6fa5
Packit Service fb6fa5
  if (!window)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
Packit Service fb6fa5
      gtk_window_set_screen (GTK_WINDOW (window),
Packit Service fb6fa5
			     gtk_widget_get_screen (do_widget));
Packit Service fb6fa5
Packit Service fb6fa5
      g_signal_connect (window, "destroy",
Packit Service fb6fa5
			G_CALLBACK (gtk_widget_destroyed), &window);
Packit Service fb6fa5
Packit Service fb6fa5
      gtk_window_set_title (GTK_WINDOW (window), "Panes");
Packit Service fb6fa5
      gtk_container_set_border_width (GTK_CONTAINER (window), 0);
Packit Service fb6fa5
Packit Service fb6fa5
      vbox = gtk_vbox_new (FALSE, 0);
Packit Service fb6fa5
      gtk_container_add (GTK_CONTAINER (window), vbox);
Packit Service fb6fa5
      
Packit Service fb6fa5
      vpaned = gtk_vpaned_new ();
Packit Service fb6fa5
      gtk_box_pack_start (GTK_BOX (vbox), vpaned, TRUE, TRUE, 0);
Packit Service fb6fa5
      gtk_container_set_border_width (GTK_CONTAINER(vpaned), 5);
Packit Service fb6fa5
Packit Service fb6fa5
      hpaned = gtk_hpaned_new ();
Packit Service fb6fa5
      gtk_paned_add1 (GTK_PANED (vpaned), hpaned);
Packit Service fb6fa5
Packit Service fb6fa5
      frame = gtk_frame_new (NULL);
Packit Service fb6fa5
      gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
Packit Service fb6fa5
      gtk_widget_set_size_request (frame, 60, 60);
Packit Service fb6fa5
      gtk_paned_add1 (GTK_PANED (hpaned), frame);
Packit Service fb6fa5
      
Packit Service fb6fa5
      button = gtk_button_new_with_mnemonic ("_Hi there");
Packit Service fb6fa5
      gtk_container_add (GTK_CONTAINER(frame), button);
Packit Service fb6fa5
Packit Service fb6fa5
      frame = gtk_frame_new (NULL);
Packit Service fb6fa5
      gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
Packit Service fb6fa5
      gtk_widget_set_size_request (frame, 80, 60);
Packit Service fb6fa5
      gtk_paned_add2 (GTK_PANED (hpaned), frame);
Packit Service fb6fa5
Packit Service fb6fa5
      frame = gtk_frame_new (NULL);
Packit Service fb6fa5
      gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
Packit Service fb6fa5
      gtk_widget_set_size_request (frame, 60, 80);
Packit Service fb6fa5
      gtk_paned_add2 (GTK_PANED (vpaned), frame);
Packit Service fb6fa5
Packit Service fb6fa5
      /* Now create toggle buttons to control sizing */
Packit Service fb6fa5
Packit Service fb6fa5
      gtk_box_pack_start (GTK_BOX (vbox),
Packit Service fb6fa5
			  create_pane_options (GTK_PANED (hpaned),
Packit Service fb6fa5
					       "Horizontal",
Packit Service fb6fa5
					       "Left",
Packit Service fb6fa5
					       "Right"),
Packit Service fb6fa5
			  FALSE, FALSE, 0);
Packit Service fb6fa5
Packit Service fb6fa5
      gtk_box_pack_start (GTK_BOX (vbox),
Packit Service fb6fa5
			  create_pane_options (GTK_PANED (vpaned),
Packit Service fb6fa5
					       "Vertical",
Packit Service fb6fa5
					       "Top",
Packit Service fb6fa5
					       "Bottom"),
Packit Service fb6fa5
			  FALSE, FALSE, 0);
Packit Service fb6fa5
Packit Service fb6fa5
      gtk_widget_show_all (vbox);
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  if (!gtk_widget_get_visible (window))
Packit Service fb6fa5
    {
Packit Service fb6fa5
      gtk_widget_show (window);
Packit Service fb6fa5
    }
Packit Service fb6fa5
  else
Packit Service fb6fa5
    {
Packit Service fb6fa5
      gtk_widget_destroy (window);
Packit Service fb6fa5
      window = NULL;
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  return window;
Packit Service fb6fa5
}