[Gd-chatter] r11408 - branches/opendylan-melange/gtk-duim

hannes at gwydiondylan.org hannes at gwydiondylan.org
Sat Jun 16 01:07:31 CEST 2007


Author: hannes
Date: Sat Jun 16 01:07:29 2007
New Revision: 11408

Modified:
   branches/opendylan-melange/gtk-duim/gtk-gadgets.dylan
Log:
Job: fd
'properly' implement tree widgets. at least they can show actual
trees now.


Modified: branches/opendylan-melange/gtk-duim/gtk-gadgets.dylan
==============================================================================
--- branches/opendylan-melange/gtk-duim/gtk-gadgets.dylan	(original)
+++ branches/opendylan-melange/gtk-duim/gtk-gadgets.dylan	Sat Jun 16 01:07:29 2007
@@ -119,6 +119,10 @@
     with-gdk-lock
       gtk-widget-size-request(widget, request);
     end;
+    duim-debug-message("widget-size for %= is %=x%=",
+                       widget,
+                       request.GtkRequisition-width,
+                       request.GtkRequisition-height);
     values(request.GtkRequisition-width, request.GtkRequisition-height)
   end
 end method widget-size;
@@ -1683,10 +1687,12 @@
                make(<node-of-tree-control>, object: tln));
           if (children?(tln))
             with-stack-structure (dummy :: <GtkTreeIter>)
-              gtk-tree-store-insert-before(model, dummy, iter, np);
-//              g-value-nullify(data);
-//              g-value-set-value(data, "this is just a dummy");
-              gtk-tree-store-set-value(model, dummy, 0, data);
+              with-stack-structure (dummy-value :: <GValue>)
+                gtk-tree-store-insert-before(model, dummy, iter, np);
+                g-value-nullify(dummy-value);
+                g-value-set-value(dummy-value, "this is just a dummy");
+                gtk-tree-store-set-value(model, dummy, 0, dummy-value);
+              end;
             end;
           end;
         end;
@@ -1713,9 +1719,14 @@
   node-list;
 end;
 
+define sealed method note-tree-control-roots-changed
+     (pane :: <gtk-tree-control>, #key value = $unsupplied) => ()
+  update-list-control-items(pane, sheet-direct-mirror(pane))
+end;
+
 define method handle-row-expanded
   (sheet :: <gtk-tree-control>, parent :: <GtkTreeIter>, path :: <GtkTreePath>)
-  duim-debug-message("handling row expansion signal\n");
+  //duim-debug-message("handling row expansion signal\n");
   let model = sheet.store-model;
   let children? = tree-control-children-predicate(sheet);
   let generator = tree-control-children-generator(sheet);
@@ -1726,39 +1737,43 @@
                          ':'));
     let parent-tree = find-node-list(sheet, path);
     let object = parent-tree.real-object;
-    with-stack-structure (iter :: <GtkTreeIter>)
-      //first, remove the dummy
-      gtk-tree-model-iter-children(model, iter, parent);
-      gtk-tree-store-remove(model, iter);
-    end;
-    //insert all childrens, check whether they fulfill the children-predicate
-    //if that is the case, add a dummy as child
-    let np = null-pointer(<GtkTreeIter>);
-    with-stack-structure (iter :: <GtkTreeIter>)
-      with-stack-structure (data :: <GValue>)
-        for (node in generator(object))
-          gtk-tree-store-insert-before(model, iter, parent, np);
-          g-value-nullify(data);
-          let label = label-function(node);
-          unless (instance?(label, <string>))
-            label := format-to-string("%=", label);
-          end;
-          g-value-set-value(data, label);
-          gtk-tree-store-set-value(model, iter, 0, data);
-          add!(parent-tree.children, make(<node-of-tree-control>, object: node));
-          if (children?(node))
-            with-stack-structure (dummy :: <GtkTreeIter>)
-              gtk-tree-store-insert-before(model, dummy, iter, np);
-              //g-value-nullify(data);
-              //g-value-set-value(data, "this is just a dummy");
-              gtk-tree-store-set-value(model, dummy, 0, data);
+    if (parent-tree.children.size == 0)
+      with-stack-structure (iter :: <GtkTreeIter>)
+        //remove the dummy entry
+        let res = gtk-tree-model-iter-children(model, iter, parent);
+        gtk-tree-store-remove(model, iter);
+      end;
+      let np = null-pointer(<GtkTreeIter>);
+      with-stack-structure (iter :: <GtkTreeIter>)
+        with-stack-structure (data :: <GValue>)
+          for (node in generator(object))
+            gtk-tree-store-insert-before(model, iter, parent, np);
+            g-value-nullify(data);
+            let label = label-function(node);
+            unless (instance?(label, <string>))
+              label := format-to-string("%=", label);
+            end;
+            //duim-debug-message("adding node %=", label);
+            g-value-set-value(data, label);
+            gtk-tree-store-set-value(model, iter, 0, data);
+            add!(parent-tree.children,
+                 make(<node-of-tree-control>, object: node));
+            if (children?(node))
+              with-stack-structure (dummy :: <GtkTreeIter>)
+                with-stack-structure (dummy-value :: <GValue>)
+                  gtk-tree-store-insert-before(model, dummy, iter, np);
+                  g-value-nullify(dummy-value);
+                  g-value-set-value(dummy-value, "this is just a dummy");
+                  gtk-tree-store-set-value(model, dummy, 0, dummy-value);
+                end;
+              end;
             end;
           end;
         end;
       end;
     end;
   end;
-  #t;
+  #f;
 end;
 
 



More information about the chatter mailing list