Jiri Bajer wrote:
> Hi,
>
> I am writing an editor for multi-columned hierarchical data (for example
> project tasks or software requirements) and would like to allow the user
> to sort the rows as if the data had a flat structure.
>
> Example TreeView:
>
> Hierarchy | Task name | Priority   | Man-days
> ----------+-----------+------------+---------
>   
>> 1       | Task 1    | High       | 5
>>     
>     1.1   | Subtask 1 | High       | 3
>     1.2   | Subtask 2 | Low        | 2
> 2         | Task 2    | High       | 1
>
> Now I would like to sort all the project tasks and subtasks by priority.
>
> If I store the data in a TreeModel, wrap a TreeModelSort over it and
> display the result via TreeView, the sorting mechanism is not able to
> put "Task 2" before "Task 1.2" even if "Task 2" has higher priority. It
> is caused by respecting the hierarchy - sorting won't break a child from
> its parent (but I need to do so).
>
> Required result:
>
> Hierarchy | Task name | Priority v | Man-days
> ----------+-----------+------------+---------
> 1         | Task 1    | High       | 5
> 1.1       | Subtask 1 | High       | 3
> 2         | Task 2    | High       | 1
> 1.2       | Subtask 2 | Low        | 2       <--- breaks the hierarchy
>
> Is there any way how to achieve such sorting without maintaining two
> copies of all data - one in TreeStore and one in ListStore and
> sorting/displaying the ListStore instead?
>
> I was able to hide the expanders via setting the expander column to a
> hidden one so the view part seems to be OK.
>
> I don't think TreeSortable.set_sort_func() would help here as the
> comparison works but the rows to be compared are chosen only from one
> parent and within the same tree depth (i.e. 1.1 is compared only with
> 1.2 but not with 1 or 2).
>
> Maybe I could write a wrapper providing a ListStore-like behavior while
> having no own data but taking them from a TreeStore + put this ListStore
> in its own TreeView? Or inheriting from a plain ListStore and implement
> "child" collapse/expand on my own?
>
> Any ideas are welcome, thanks!
>   
Look at the TreeModelFilter. With the right set_modify_func() function 
you may be able to massage the look for your purposes.

John
_______________________________________________
pygtk mailing list   pygtk@daa.com.au
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://faq.pygtk.org/

Reply via email to