]> Pileus Git - ~andy/gtk/blobdiff - tests/testtreemenu.c
stylecontext: Do invalidation on first resize container
[~andy/gtk] / tests / testtreemenu.c
index 76422d269503fee2243e6fba2740c1e5eff59b09..1e8443abc2b429e555374a9df6c5b08f0e960555 100644 (file)
@@ -1,22 +1,23 @@
 #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;
-  GdkColor col;
+  GdkRGBA rgba;
 
   int x;
   int num;
   int rowstride;
   guchar *pixels, *p;
   
-  if (!gdk_color_parse (color, &col))
+  if (!gdk_rgba_parse (color, &col))
     return NULL;
   
   pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB,
@@ -30,9 +31,9 @@ create_color_pixbuf (const char *color)
     gdk_pixbuf_get_height (pixbuf);
   
   for (x = 0; x < num; x++) {
-    p[0] = col.red / 65535 * 255;
-    p[1] = col.green / 65535 * 255;
-    p[2] = col.blue / 65535 * 255;
+    p[0] = col.red * 255;
+    p[1] = col.green * 255;
+    p[2] = col.blue * 255;
     p += 3;
   }
   
@@ -126,6 +127,7 @@ create_menu_grid_demo (void)
   
   return menu;
 }
+#endif
 
 /*******************************************************
  *                      Simple Test                    *
@@ -273,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 ();
@@ -303,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,
@@ -378,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)
@@ -403,25 +418,30 @@ 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");
 
-  vbox  = gtk_vbox_new (FALSE, 4);
+  vbox  = gtk_box_new (GTK_ORIENTATION_VERTICAL, 4);
   gtk_widget_show (vbox);
 
   menubar = gtk_menu_bar_new ();
   gtk_widget_show (menubar);
 
-#if 1
+  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);
@@ -429,8 +449,6 @@ tree_menu (void)
   gtk_menu_shell_append (GTK_MENU_SHELL (menubar), menuitem);
   gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), menu);
 
-#endif
-
   menuitem = gtk_menu_item_new_with_label ("Tree");
   menu = simple_tree_menu ();
   gtk_widget_show (menu);
@@ -441,15 +459,33 @@ tree_menu (void)
   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);
@@ -457,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);
@@ -465,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);
@@ -473,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);
@@ -481,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);
@@ -498,6 +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);