changeset 1082:7821a35e1e11

Implemented table rearranging on GTK2 getting dw_box_pack_at_index() working there too.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Tue, 28 Jun 2011 06:55:45 +0000
parents f9232a52367a
children 78d425edec46
files gtk/dw.c
diffstat 1 files changed, 38 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/gtk/dw.c	Tue Jun 28 06:49:19 2011 +0000
+++ b/gtk/dw.c	Tue Jun 28 06:55:45 2011 +0000
@@ -9126,6 +9126,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 = gtk_object_get_data(GTK_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:
@@ -9239,8 +9272,10 @@
          gtk_table_resize(GTK_TABLE(box), 1, boxcount + 1);
       }
 
+      gtk_object_set_data(GTK_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));
+      gtk_object_set_data(GTK_OBJECT(box), "_dw_boxcount", GINT_TO_POINTER(boxcount + 1));
       gtk_widget_set_usize(item, width, height);
       if(GTK_IS_RADIO_BUTTON(item))
       {
@@ -9390,6 +9425,7 @@
       else
          gtk_table_resize(GTK_TABLE(box), 1, boxcount + 1);
 
+      gtk_object_set_data(GTK_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);
       gtk_object_set_data(GTK_OBJECT(box), "_dw_boxcount", GINT_TO_POINTER(boxcount + 1));
       gtk_widget_set_usize(item, width, height);
@@ -10869,6 +10905,7 @@
          gtk_table_resize(GTK_TABLE(box), 1, boxcount + 1);
       }
 
+      gtk_object_set_data(GTK_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);
       gtk_object_set_data(GTK_OBJECT(box), "_dw_boxcount", GINT_TO_POINTER(boxcount + 1));
       gtk_widget_set_usize(item, width, height);