← Back to team overview

gtg-contributors team mailing list archive

Liblarch news

 

Hi there,

There's was some major breakthrough today on liblarch because I finally
rewrote completely liblarch-gtk to be a simple wrapper around liblarch (and
not a thick stateful translation layer). I think that that step alone will
probably solve most of the bug we currently have in the treeview.
treemodel.py was more than 500 LOC, it is now 200, license included. I
tested multiple parents : it seems to work fine ! Awesome :-)

There is still some little problems related to expand/collapse. It seems
that children status is not yet well handled (and I think it's a liblarch
bug because it seems that parent nodes are not updated when children are
modified. That's a signal test to implement !)


So, due to popular demand : What is liblarch ?


Why liblarch ?

It was discovered that, in the filteredtree stuffs, as soon as a bug was
fixed somewhere, another one was popping up elsewhere. Often, it was not
clear whether the bug was in Tree, FilteredTree, the TaskTreeModel or in
the TreeView. In fact, I don't see how we can hope to fix those bug in
trunk with the current state of the trunk.

I then decided to do a generic library for Acyclic directed graphs (aka
Tree where nodes can have multiple parents), supporting filters and having
a dedicated gtk interface for the gtk.TreeView. This library would be
covered by a test suite.

Basically, you have a Tree() that contains TreeNode() and Filters().
You modify the Tree() directly but you can only observe it through a
ViewTree().

Each Tree() can have any number of ViewTree() you want. A ViewTree() can
be filtered using Filters() that are part of the Tree().

Name come from "How to recognize a tree : lesson nbr 1, the larch" (which
is a monty pythons flying circus episode)

Liblarch developement is test based and writing the tests first allowed me
to fix a dozen
of existing bugs in FilteredTree.

Now, the gtk UI will really be only a view accessing a liblarch ViewTree
that could be
accessed by anything else. Another benefits is that now, the "real" tree
(without filter) of a view of a tree with filters are, conceptually,
exactly the same, accessed by the same API.

Last but not least, liblarch-gtk automatically handle all the
gtk.treemodel/treeview stuffs. Meaning that creating a gtk.widget
displaying a tree is only a matter of building a dic which contains the
description of the columns you want to see.
(gtk/browser/treeview_factory.py)

Liblarch is now used for the tasks tree but, also, for the tags tree.

Sorry for not communicating better about that !


Lionel