changeset 1081:f9232a52367a

Implemented table rearranging on GTK3 allowing dw_box_pack_at_index() to work.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Tue, 28 Jun 2011 06:49:19 +0000
parents 27e9a063fbb5
children 7821a35e1e11
files gtk3/dw.c
diffstat 1 files changed, 37 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/gtk3/dw.c	Tue Jun 28 05:34:14 2011 +0000
+++ b/gtk3/dw.c	Tue Jun 28 06:49:19 2011 +0000
@@ -8010,6 +8010,39 @@
 
 #define DW_EXPAND (GTK_EXPAND | GTK_SHRINK | GTK_FILL)
 
+/* Internal function that changes the attachment properties in a table. */
+void _rearrange_table(GtkWidget *widget, gpointer data)
+{
+   gint pos = GPOINTER_TO_INT(data);
+   GtkContainer *cont = g_object_get_data(G_OBJECT(widget), "_dw_table");
+   guint oldpos;
+
+   /* Drop out if missing table */
+   if(!cont)
+      return;
+      
+   /* Check orientation */   
+   if(pos < 0)
+   {
+      /* Horz */
+      pos = -(pos + 1);
+      gtk_container_child_get(cont, widget, "left-attach", &oldpos, NULL);
+      if(oldpos >= pos)
+      {
+         gtk_container_child_set(cont, widget, "left-attach", (oldpos + 1), "right-attach", (oldpos+2), NULL);
+      }
+   }
+   else
+   {
+      /* Vert */
+      gtk_container_child_get(cont, widget, "top-attach", &oldpos, NULL);
+      if(oldpos >= pos)
+      {
+         gtk_container_child_set(cont, widget, "top-attach", (oldpos + 1), "bottom-attach", (oldpos+2), NULL);
+      }
+   }
+}
+
 /*
  * Pack windows (widgets) into a box at an arbitrary location.
  * Parameters:
@@ -8123,6 +8156,8 @@
          gtk_table_resize(GTK_TABLE(box), 1, boxcount + 1);
       }
 
+      g_object_set_data(G_OBJECT(item), "_dw_table", box);
+      gtk_container_forall(GTK_CONTAINER(box),_rearrange_table, GINT_TO_POINTER(boxtype == DW_VERT ? index : -(index+1)));
       gtk_table_attach(GTK_TABLE(box), item, x, x + 1, y, y + 1, hsize ? DW_EXPAND : 0, vsize ? DW_EXPAND : 0, pad, pad);
       g_object_set_data(G_OBJECT(box), "_dw_boxcount", GINT_TO_POINTER(boxcount + 1));
       if(GTK_IS_SCROLLED_WINDOW(item))
@@ -8296,6 +8331,7 @@
       else
          gtk_table_resize(GTK_TABLE(box), 1, boxcount + 1);
 
+      g_object_set_data(G_OBJECT(item), "_dw_table", box);
       gtk_table_attach(GTK_TABLE(box), item, 0, 1, 0, 1, hsize ? DW_EXPAND : 0, vsize ? DW_EXPAND : 0, pad, pad);
       g_object_set_data(G_OBJECT(box), "_dw_boxcount", GINT_TO_POINTER(boxcount + 1));
       if(GTK_IS_SCROLLED_WINDOW(item))
@@ -9691,6 +9727,7 @@
          gtk_table_resize(GTK_TABLE(box), 1, boxcount + 1);
       }
 
+      g_object_set_data(G_OBJECT(item), "_dw_table", box);
       gtk_table_attach(GTK_TABLE(box), item, x, x + 1, y, y + 1, hsize ? DW_EXPAND : 0, vsize ? DW_EXPAND : 0, pad, pad);
       g_object_set_data(G_OBJECT(box), "_dw_boxcount", GINT_TO_POINTER(boxcount + 1));
       if(GTK_IS_SCROLLED_WINDOW(item))