]> Pileus Git - ~andy/gtk/blobdiff - tests/testtreemenu.c
Update expected dump output for color choooser
[~andy/gtk] / tests / testtreemenu.c
index 7445147d3e3d903739f3de67f438c4a32d29e569..1e8443abc2b429e555374a9df6c5b08f0e960555 100644 (file)
@@ -1,5 +1,133 @@
 #include <gtk/gtk.h>
-#include "cellareascaffold.h"
+
+
+/*******************************************************
+ *                       Grid Test                     *
+ *******************************************************/
+
+#if _GTK_TREE_MENU_WAS_A_PUBLIC_CLASS_
+static GdkPixbuf *
+create_color_pixbuf (const char *color)
+{
+  GdkPixbuf *pixbuf;
+  GdkRGBA rgba;
+
+  int x;
+  int num;
+  int rowstride;
+  guchar *pixels, *p;
+  
+  if (!gdk_rgba_parse (color, &col))
+    return NULL;
+  
+  pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB,
+                          FALSE, 8,
+                          16, 16);
+  
+  rowstride = gdk_pixbuf_get_rowstride (pixbuf);
+  p = pixels = gdk_pixbuf_get_pixels (pixbuf);
+  
+  num = gdk_pixbuf_get_width (pixbuf) *
+    gdk_pixbuf_get_height (pixbuf);
+  
+  for (x = 0; x < num; x++) {
+    p[0] = col.red * 255;
+    p[1] = col.green * 255;
+    p[2] = col.blue * 255;
+    p += 3;
+  }
+  
+  return pixbuf;
+}
+
+static GtkWidget *
+create_menu_grid_demo (void)
+{
+  GtkWidget *menu;
+  GtkTreeIter iter;
+  GdkPixbuf *pixbuf;
+  GtkCellRenderer *cell = gtk_cell_renderer_pixbuf_new ();
+  GtkListStore *store;
+  
+  store = gtk_list_store_new (1, GDK_TYPE_PIXBUF);
+
+  menu = gtk_tree_menu_new_full (NULL, GTK_TREE_MODEL (store), NULL);
+  gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (menu), cell, TRUE);
+  gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (menu), cell, "pixbuf", 0, NULL);
+  
+  gtk_tree_menu_set_wrap_width (GTK_TREE_MENU (menu), 3);
+
+  /* first row */
+  pixbuf = create_color_pixbuf ("red");
+  gtk_list_store_append (store, &iter);
+  gtk_list_store_set (store, &iter,
+                     0, pixbuf,
+                     -1);
+  g_object_unref (pixbuf);
+  
+  pixbuf = create_color_pixbuf ("green");
+  gtk_list_store_append (store, &iter);
+  gtk_list_store_set (store, &iter,
+                     0, pixbuf,
+                     -1);
+  g_object_unref (pixbuf);
+  
+  pixbuf = create_color_pixbuf ("blue");
+  gtk_list_store_append (store, &iter);
+  gtk_list_store_set (store, &iter,
+                     0, pixbuf,
+                     -1);
+  g_object_unref (pixbuf);
+  
+  /* second row */
+  pixbuf = create_color_pixbuf ("yellow");
+  gtk_list_store_append (store, &iter);
+  gtk_list_store_set (store, &iter,
+                     0, pixbuf,
+                     -1);
+  g_object_unref (pixbuf);
+  
+  pixbuf = create_color_pixbuf ("black");
+  gtk_list_store_append (store, &iter);
+  gtk_list_store_set (store, &iter,
+                     0, pixbuf,
+                     -1);
+  g_object_unref (pixbuf);
+  
+  pixbuf = create_color_pixbuf ("white");
+  gtk_list_store_append (store, &iter);
+  gtk_list_store_set (store, &iter,
+                     0, pixbuf,
+                     -1);
+  g_object_unref (pixbuf);
+  
+  /* third row */
+  pixbuf = create_color_pixbuf ("gray");
+  gtk_list_store_append (store, &iter);
+  gtk_list_store_set (store, &iter,
+                     0, pixbuf,
+                     -1);
+  g_object_unref (pixbuf);
+  
+  pixbuf = create_color_pixbuf ("snow");
+  gtk_list_store_append (store, &iter);
+  gtk_list_store_set (store, &iter,
+                     0, pixbuf,
+                     -1);
+  g_object_unref (pixbuf);
+  
+  pixbuf = create_color_pixbuf ("magenta");
+  gtk_list_store_append (store, &iter);
+  gtk_list_store_set (store, &iter,
+                     0, pixbuf,
+                     -1);
+  g_object_unref (pixbuf);
+
+  g_object_unref (store);
+  
+  return menu;
+}
+#endif
 
 /*******************************************************
  *                      Simple Test                    *
@@ -147,29 +275,21 @@ simple_tree_model (void)
   return (GtkTreeModel *)store;
 }
 
-static GtkWidget *
-simple_tree_menu (void)
+static GtkCellArea *
+create_cell_area (void)
 {
-  GtkTreeModel *model;
-  GtkWidget *menu;
   GtkCellArea *area;
   GtkCellRenderer *renderer;
 
-  model = simple_tree_model ();
-
-  menu = gtk_tree_menu_new ();
-  gtk_tree_menu_set_model (GTK_TREE_MENU (menu), model);
-  gtk_tree_menu_set_root (GTK_TREE_MENU (menu), NULL);
-
-  area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (menu));
+  area = gtk_cell_area_box_new ();
 
   cell_1 = renderer = gtk_cell_renderer_text_new ();
-  gtk_cell_area_box_pack_start (GTK_CELL_AREA_BOX (area), renderer, FALSE, FALSE);
+  gtk_cell_area_box_pack_start (GTK_CELL_AREA_BOX (area), renderer, FALSE, FALSE, FALSE);
   gtk_cell_area_attribute_connect (area, renderer, "text", SIMPLE_COLUMN_NAME);
 
   cell_2 = renderer = gtk_cell_renderer_pixbuf_new ();
   g_object_set (G_OBJECT (renderer), "xalign", 0.0F, NULL);
-  gtk_cell_area_box_pack_start (GTK_CELL_AREA_BOX (area), renderer, TRUE, FALSE);
+  gtk_cell_area_box_pack_start (GTK_CELL_AREA_BOX (area), renderer, TRUE, FALSE, FALSE);
   gtk_cell_area_attribute_connect (area, renderer, "stock-id", SIMPLE_COLUMN_ICON);
 
   cell_3 = renderer = gtk_cell_renderer_text_new ();
@@ -177,62 +297,92 @@ simple_tree_menu (void)
                "wrap-mode", PANGO_WRAP_WORD,
                "wrap-width", 215,
                NULL);
-  gtk_cell_area_box_pack_start (GTK_CELL_AREA_BOX (area), renderer, FALSE, TRUE);
+  gtk_cell_area_box_pack_start (GTK_CELL_AREA_BOX (area), renderer, FALSE, TRUE, FALSE);
   gtk_cell_area_attribute_connect (area, renderer, "text", SIMPLE_COLUMN_DESCRIPTION);
 
+  return area;
+}
+
+#if _GTK_TREE_MENU_WAS_A_PUBLIC_CLASS_
+static GtkWidget *
+simple_tree_menu (GtkCellArea *area)
+{
+  GtkTreeModel *model;
+  GtkWidget *menu;
+
+  model = simple_tree_model ();
+
+  menu = gtk_tree_menu_new_with_area (area);
+  gtk_tree_menu_set_model (GTK_TREE_MENU (menu), model);
+
   return menu;
 }
+#endif
+
+static void
+orientation_changed (GtkComboBox  *combo,
+                    GtkCellArea  *area)
+{
+  GtkOrientation orientation = gtk_combo_box_get_active (combo);
+
+  gtk_orientable_set_orientation (GTK_ORIENTABLE (area), orientation);
+}
 
 static void
 align_cell_2_toggled (GtkToggleButton  *toggle,
-                     GtkTreeMenu    *menu)
+                     GtkCellArea      *area)
 {
-  GtkCellArea *area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (menu));
-  gboolean     align = gtk_toggle_button_get_active (toggle);
+  gboolean align = gtk_toggle_button_get_active (toggle);
 
   gtk_cell_area_cell_set (area, cell_2, "align", align, NULL);
 }
 
 static void
 align_cell_3_toggled (GtkToggleButton  *toggle,
-                     GtkTreeMenu    *menu)
+                     GtkCellArea      *area)
 {
-  GtkCellArea *area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (menu));
-  gboolean     align = gtk_toggle_button_get_active (toggle);
+  gboolean align = gtk_toggle_button_get_active (toggle);
 
   gtk_cell_area_cell_set (area, cell_3, "align", align, NULL);
 }
 
 static void
 expand_cell_1_toggled (GtkToggleButton  *toggle,
-                      GtkTreeMenu      *menu)
+                      GtkCellArea      *area)
 {
-  GtkCellArea *area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (menu));
-  gboolean     expand = gtk_toggle_button_get_active (toggle);
+  gboolean expand = gtk_toggle_button_get_active (toggle);
 
   gtk_cell_area_cell_set (area, cell_1, "expand", expand, NULL);
 }
 
 static void
 expand_cell_2_toggled (GtkToggleButton  *toggle,
-                      GtkTreeMenu      *menu)
+                      GtkCellArea      *area)
 {
-  GtkCellArea *area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (menu));
-  gboolean     expand = gtk_toggle_button_get_active (toggle);
+  gboolean expand = gtk_toggle_button_get_active (toggle);
 
   gtk_cell_area_cell_set (area, cell_2, "expand", expand, NULL);
 }
 
 static void
 expand_cell_3_toggled (GtkToggleButton  *toggle,
-                      GtkTreeMenu      *menu)
+                      GtkCellArea      *area)
 {
-  GtkCellArea *area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (menu));
-  gboolean     expand = gtk_toggle_button_get_active (toggle);
+  gboolean expand = gtk_toggle_button_get_active (toggle);
 
   gtk_cell_area_cell_set (area, cell_3, "expand", expand, NULL);
 }
 
+gboolean 
+enable_submenu_headers (GtkTreeModel      *model,
+                       GtkTreeIter       *iter,
+                       gpointer           data)
+{
+  return TRUE;
+}
+
+
+#if _GTK_TREE_MENU_WAS_A_PUBLIC_CLASS_
 static void
 menu_activated_cb (GtkTreeMenu *menu,
                   const gchar *path,
@@ -252,15 +402,6 @@ menu_activated_cb (GtkTreeMenu *menu,
   g_free (row_name);
 }
 
-gboolean 
-enable_submenu_headers (GtkTreeModel      *model,
-                       GtkTreeIter       *iter,
-                       gpointer           data)
-{
-  return TRUE;
-}
-
-
 static void
 submenu_headers_toggled (GtkToggleButton  *toggle,
                         GtkTreeMenu      *menu)
@@ -277,42 +418,74 @@ tearoff_toggled (GtkToggleButton *toggle,
 {
   gtk_tree_menu_set_tearoff (menu, gtk_toggle_button_get_active (toggle));
 }
+#endif
 
 static void
 tree_menu (void)
 {
   GtkWidget *window, *widget;
-  GtkWidget *menu, *menubar, *vbox, *menuitem;
+  GtkWidget *menubar, *vbox;
+  GtkCellArea *area;
+  GtkTreeModel *store;
 
   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
 
   gtk_window_set_title (GTK_WINDOW (window), "GtkTreeMenu");
 
-  menu = simple_tree_menu ();
-
-  g_signal_connect (menu, "menu-activate", G_CALLBACK (menu_activated_cb), NULL);
-
-  vbox  = gtk_vbox_new (FALSE, 4);
+  vbox  = gtk_box_new (GTK_ORIENTATION_VERTICAL, 4);
   gtk_widget_show (vbox);
 
   menubar = gtk_menu_bar_new ();
-  menuitem = gtk_menu_item_new_with_label ("Tree");
-  gtk_widget_show (menu);
   gtk_widget_show (menubar);
+
+  store = simple_tree_model ();
+  area  = create_cell_area ();
+
+#if _GTK_TREE_MENU_WAS_A_PUBLIC_CLASS_
+  menuitem = gtk_menu_item_new_with_label ("Grid");
+  menu = create_menu_grid_demo ();
+  gtk_widget_show (menu);
   gtk_widget_show (menuitem);
   gtk_menu_shell_append (GTK_MENU_SHELL (menubar), menuitem);
   gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), menu);
 
+  menuitem = gtk_menu_item_new_with_label ("Tree");
+  menu = simple_tree_menu ();
+  gtk_widget_show (menu);
+  gtk_widget_show (menuitem);
+  gtk_menu_shell_prepend (GTK_MENU_SHELL (menubar), menuitem);
+  gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), menu);
+
+  g_signal_connect (menu, "menu-activate", G_CALLBACK (menu_activated_cb), NULL);
+
   gtk_box_pack_start (GTK_BOX (vbox), menubar, FALSE, FALSE, 0);
+#endif
+
+  /* Add a combo box with the same menu ! */
+  widget = gtk_combo_box_new_with_area (area);
+  gtk_combo_box_set_model (GTK_COMBO_BOX (widget), store);
+  gtk_combo_box_set_active (GTK_COMBO_BOX (widget), 0);
+  gtk_widget_show (widget);
+  gtk_box_pack_end (GTK_BOX (vbox), widget, FALSE, FALSE, 0);
 
   /* Now add some controls */
+  widget = gtk_combo_box_text_new ();
+  gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "Horizontal");
+  gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), "Vertical");
+  gtk_combo_box_set_active (GTK_COMBO_BOX (widget), 0);
+  gtk_widget_show (widget);
+  gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0);
+
+  g_signal_connect (G_OBJECT (widget), "changed",
+                    G_CALLBACK (orientation_changed), area);
+
   widget = gtk_check_button_new_with_label ("Align 2nd Cell");
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE);
   gtk_widget_show (widget);
   gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0);
   
   g_signal_connect (G_OBJECT (widget), "toggled",
-                    G_CALLBACK (align_cell_2_toggled), menu);
+                    G_CALLBACK (align_cell_2_toggled), area);
 
   widget = gtk_check_button_new_with_label ("Align 3rd Cell");
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE);
@@ -320,7 +493,7 @@ tree_menu (void)
   gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0);
   
   g_signal_connect (G_OBJECT (widget), "toggled",
-                    G_CALLBACK (align_cell_3_toggled), menu);
+                    G_CALLBACK (align_cell_3_toggled), area);
 
   widget = gtk_check_button_new_with_label ("Expand 1st Cell");
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE);
@@ -328,7 +501,7 @@ tree_menu (void)
   gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0);
   
   g_signal_connect (G_OBJECT (widget), "toggled",
-                    G_CALLBACK (expand_cell_1_toggled), menu);
+                    G_CALLBACK (expand_cell_1_toggled), area);
 
   widget = gtk_check_button_new_with_label ("Expand 2nd Cell");
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE);
@@ -336,7 +509,7 @@ tree_menu (void)
   gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0);
   
   g_signal_connect (G_OBJECT (widget), "toggled",
-                    G_CALLBACK (expand_cell_2_toggled), menu);
+                    G_CALLBACK (expand_cell_2_toggled), area);
 
   widget = gtk_check_button_new_with_label ("Expand 3rd Cell");
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE);
@@ -344,8 +517,9 @@ tree_menu (void)
   gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 0);
   
   g_signal_connect (G_OBJECT (widget), "toggled",
-                    G_CALLBACK (expand_cell_3_toggled), menu);
+                    G_CALLBACK (expand_cell_3_toggled), area);
 
+#if _GTK_TREE_MENU_WAS_A_PUBLIC_CLASS_
   widget = gtk_check_button_new_with_label ("Submenu Headers");
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE);
   gtk_widget_show (widget);
@@ -361,7 +535,7 @@ tree_menu (void)
   
   g_signal_connect (G_OBJECT (widget), "toggled",
                     G_CALLBACK (tearoff_toggled), menu);
-
+#endif
 
   gtk_container_add (GTK_CONTAINER (window), vbox);