2009-11-08  Paul Pogonyshev  <pogonyshev@gmx.net>

	--- Release 0.1.3 ---

	* NEWS: Update.

	* gtktree/util.py (TreeViewUtils.get_selected_node): Return just
	the node, without 'gtk.TreeIter'.
	(TreeViewUtils.get_selected_row_list)
	(TreeViewUtils.get_selected_node_list): New functions.
	(TreeViewUtils.enable_renderer_editing): New function.
	(_do_get_selection): New function, break out common parts of
	TreeViewUtils.get_selected_row() and
	TreeViewUtils.get_selected_node().

	* gtktree/model.py (RowObjectTreeModel.__init__): Also compute
	setters, only for string attributes for now.
	(RowObjectTreeModel.set_cell): New method.
	(_attrgetter): New function, break out of
	RowObjectTreeModel.__init__().
	(_attrsetter, _raising_attrsetter): New functions.

	* examples/editing_tree.py: Add a boolean (check box) column in
	the model and the view.  Make all columns inline-editable using
	new 'TreeViewUtils' function.
	(on_insert_new_node): New function.

	* examples/editing_tree.ui.xml: Add a comment labels, one more
	action button and icons in all buttons.

	* examples/README: Expand description of 'editing_tree.py'.

	* docs/py-gtktree.txt: Document several new functions and methods.

2009-11-07  Paul Pogonyshev  <pogonyshev@gmx.net>

	* gtktree/_impl/tree_node.py (TreeNode.create_tree): New class
	method.
	(TreeNode.depth_first_order, TreeNode.traversal_postorder)
	(TreeNode.breadth_first_order): New methods.
	(_DefaultTreeNodeChildren.reverse)
	(_DefaultTreeNodeChildren.sort): New methods, just raise
	'NotImplentedError' for now --- better than failing in an obscure
	way.
	(_DefaultTreeNodeChildren.__getslice__): Remove unneded
	override (and buggy too).

	* test/tree_store.py (TreeNodeTestCase): New test case.

	* docs/py-gtktree.txt: Expand with several new sections.  Update
	some existing sections.

	* README: Stop calling the tests 'unit tests'.

	* NEWS: Update.
	* TODO: Update.

2009-11-06  Paul Pogonyshev  <pogonyshev@gmx.net>

	* gtktree/model.py (_HAVE_DOTTED_ATTRGETTER_SUPPORT): New
	variable, just determine at runtime.
	(RowObjectTreeModel.__init__): Support dotted attributes.  If
	'operator.attrgetter' doesn't support those out of the box,
	emulate it.
	(RowObjectTreeModel._do_get_row_object)
	(RowObjectTreeModel._do_get_node)
	(RowObjectTreeModel._do_get_iter): Fix: raise 'NotImplentedError',
	not 'NotImplemented'.

	* gtktree/_impl/tree_node.py (TreeNode.is_draggable)
	(TreeNode.accepts_dragged_child_node)
	(TreeNode.accepts_parent_node_after_drag): Ask row object using
	duck typing by default.
	(LazyDefaultTreeNode.lazy_has_children)
	(LazyDefaultTreeNode.lazy_load): Likewise.
	(LazyDefaultTreeNode._do_lazy_load): Allow implementation to
	return row objects too.  In such a case, silently wrap those in
	nodes.
	(TreeNode.parent_node, TreeNode.next_node)
	(TreeNode.first_child_node, TreeNode.delete_child_node)
	(TreeNode.insert_child_node): Fix: raise 'NotImplentedError', not
	'NotImplemented'.

	* examples/drag_between_tree_and_list.py: Tweak to take advantage
	of new duck typing in the implementation.  Use plain
	'DefaultTreeNode' everywhere.  Add dotted attribute column in the
	list model.
	(FoodCategory): Include parts of retired 'FoodCategoryTreeNode'.
	(FoodItem): Likewise with removed 'FoodItemTreeNode'.

	* examples/lazy_tree_structure.py (Folder): Replace class
	'FolderNode': take advantage of new duck typing in the
	implementation.

	* docs/py-gtktree.txt: Document dotted column attributes and duck
	typing.

2009-11-05  Paul Pogonyshev  <pogonyshev@gmx.net>

	* gtktree/_impl/tree_node.py (TreeNode.is_draggable): New
	property.
	(TreeNode.accepts_dragged_child_node)
	(TreeNode.accepts_parent_node_after_drag): New methods.

	* gtktree/model.py (RowObjectTreeModel.default_node_type): New
	property.
	(RowObjectTreeModel._get_drag_data): If 'source_model' is not
	node-based, but 'self' is, try to wrap the row object using
	'default_node_type'.
	(RowObjectTreeStore.do_row_draggable): Ask the node.
	(RowObjectTreeStore._get_drag_destination_nodes): New method:
	break out from do_row_draggable() and fix for some cases.
	(RowObjectTreeStore.do_row_drop_possible): Ask both dragged and
	prospective parent nodes if they don't mind the drag.

	* examples/lazy_tree_structure.ui.xml: Add several comment labels.

	* examples/drag_between_tree_and_list.ui.xml:
	* examples/drag_between_tree_and_list.py: New example.

	* examples/README: Describe it.

2009-11-04  Paul Pogonyshev  <pogonyshev@gmx.net>

	* gtktree/model.py (RowObjectTreeStore._create_index_error):
	Remove (accidental left over of copy'n'paste).
	(_RootTreeNode._set_row_object): Forbid changing the row object.

	* gtktree/_impl/tree_node.py (_DefaultTreeNodeChildren.extend)
	(_DefaultTreeNodeChildren.pop): New methods.
	(_DefaultTreeNodeChildren._get_existing_child_index)
	(_DefaultTreeNodeChildren._get_insertion_point)
	(_DefaultTreeNodeChildren._create_index_error): New methods, base
	on similar ones in 'RowObjectListStore'.
	(_DefaultTreeNodeChildren.remove): Inline.
	(_DefaultTreeNodeChildren.insert)
	(_DefaultTreeNodeChildren.__delitem__)
	(_DefaultTreeNodeChildren.__setitem__): Fix for index wrapping
	using new methods.
	(_DefaultTreeNodeChildren._do_insert): Explicitly fail if any
	inserted object is not an instance of 'TreeNode' or already has a
	parent or is a root of a tree model.

	* test/tree_store.py (DefaultTreeNodeTestCase.test_delete_2)
	(DefaultTreeNodeTestCase.test_extend_1)
	(DefaultTreeNodeTestCase.test_insert_1)
	(DefaultTreeNodeTestCase.test_insert_2)
	(DefaultTreeNodeTestCase.test_pop_1)
	(DefaultTreeNodeTestCase.test_illegal_child_1)
	(DefaultTreeNodeTestCase.test_illegal_child_2)
	(DefaultTreeNodeTestCase.test_illegal_child_3): New tests.

	* examples/lazy_tree_structure.py: Add several comments.  Ditch
	'comment' everywhere, as unused.
	(FolderNode.__repr__): Remove as unneeded.

	* examples/README: Expand description of 'lazy_tree_structure.py'.

	* docs/py-gtktree.txt: Expand sections about the tree store.

2009-11-03  Paul Pogonyshev  <pogonyshev@gmx.net>

	--- Release 0.1.2 ---

	* NEWS: Update.
	* TODO: Update.

	* setup.py: Also include new 'gtktree._impl' package.

	* MANIFEST.in: Also distribute 'generate-documentation.py' and
	'docs/reST.css'.

	* gtktree/_impl/tree_node.py (TreeNode.delete_child_node)
	(TreeNode.insert_child_node): New abstract methods.
	(TreeNode.hierarchic_copy): New method.
	(DefaultTreeNode.delete_child_node)
	(DefaultTreeNode.insert_child_node): Override and define via
	'child_nodes' methods.
	(_DefaultTreeNodeChildren.insert): New method.
	(_DefaultTreeNodeChildren.__delitem__): Fix slice deletion by
	reversing index list.
	(_DefaultTreeNodeChildren.__setitem__): Implement extend slice
	setting.

	* gtktree/model.py (RowObjectTreeModel._get_drag_data): Return a
	node, not row object if the model is node-based.
	(RowObjectListStore.__gtype_name__): Fix.
	(RowObjectTreeStore): Implement gtk.TreeDragSource and
	gtk.TreeDragDest.
	(RowObjectTreeStore.__gtype_name__): Add.
	(RowObjectTreeStore.node_based): Override and return true.
	(RowObjectTreeStore.on_iter_n_children): Handle root node.

	* examples/editing_tree.py: Enable drag'n'drop in the tree view.

	* test/list_store.py (_create_foo_list_store): Break out to the
	top level.

	* test/tree_store.py (DefaultTreeNodeTestCase): New test case,
	break out of 'RowObjectTreeStoreTestCase', as most tests there (at
	the moment) actually test nodes, not the model.
	(DefaultTreeNodeTestCase.test_set_item_1)
	(DefaultTreeNodeTestCase.test_set_slice_1)
	(DefaultTreeNodeTestCase.test_delete_1)
	(DefaultTreeNodeTestCase.test_delete_slice_1): New tests.
	(_create_foo_tree_store): Break out to the top level.

	* docs/reST.css: Tweak table of contents appearance.

2009-11-02  Paul Pogonyshev  <pogonyshev@gmx.net>

	* gtktree/_impl/tree_node.py (TreeNode.has_child_nodes_currently):
	New property.
	(_DefaultTreeNodeChildren.__delitem__): Implement slice deletions.
	(_DefaultTreeNodeChildren): Properly override __getslice__() and
	__delslice__() if needed.
	(LazyDefaultTreeNode): New class.
	(_Placeholder): New internal class.

	* examples/lazy_tree_structure.ui.xml:
	* examples/lazy_tree_structure.py: New example.

	* examples/README: Describe it.

	* docs/py-gtktree.txt: Expand with new sections.  Create stubs for
	missing sections.

	* docs/reST.css: Don't justify paragraphs.

2009-11-01  Paul Pogonyshev  <pogonyshev@gmx.net>

	* gtktree/model.py (RowObjectTreeModel.node_based): New property.
	(RowObjectTreeModel.get_node, RowObjectTreeModel._do_get_node):
	New methods.
	(RowObjectTreeStore): New class.
	(_RootTreeNode): New internal class.

	* gtktree/_impl/__init__.py:
	* gtktree/_impl/tree_node.py: New files.

	* gtktree/util.py (TreeViewUtils.get_selected_row)
	(TreeViewUtils.get_selected_node): New functions.
	(_check_tree_model): New internal function.

	* test/_common.py: New file, break out of 'test/list_store.py'.

	* test/tree_store.py: New test file.

	* examples/simple_tree.ui.xml:
	* examples/simple_tree.py:
	* examples/editing_tree.ui.xml:
	* examples/editing_tree.py: Two new examples.

	* examples/README: Describe two new example programs.

	* NEWS: Update.

2009-01-02  Paul Pogonyshev  <pogonyshev@gmx.net>

	--- Release 0.1.1 ---

	* NEWS: Update.

	* docs/py-gtktree.txt: Fix some method declarations after the
	latest 'model.py' changes.  Add copyright notice and simple
	permissive license.

	* README (Frequently Asked Questions): New section.
	(Copyrights and Licenses): Mention the license for
	'docs/py-gtktree.txt'.

	* gtktree/model.py (RowObjectListStore.index)
	(RowObjectListStore.insert_after, RowObjectListStore._do_insert)
	(RowObjectListStore.pop, RowObjectListStore.reorder)
	(RowObjectListStore.move_to, RowObjectListStore.__getitem__)
	(RowObjectListStore.__setitem__, RowObjectListStore.__delitem__)
	(RowObjectListStore._do_get_iter): Revamp all index access to use
	either _get_existing_row_index() or _get_insertion_point() for
	unification.
	(RowObjectListStore._get_existing_row_index): Use operator.index()
	to handle __index__() method as Python itself does.
	(RowObjectListStore._get_clamped_row_index): Remove method.
	(RowObjectListStore._get_insertion_point): New method, similar to
	removed one above, but fixed and generalized.

	* (Globally): Update copyright notices.

2008-12-30  Paul Pogonyshev  <pogonyshev@gmx.net>

	* generate-documentation.py: New file.

	* docs/py-gtktree.txt: Remove draft warning.  Use definition lists
	in reference part.

	* docs/reST.css: New file.

	* run-tests.py: Change to the top distribution directory first.

2008-12-29  Paul Pogonyshev  <pogonyshev@gmx.net>

	* test/list_store.py (RowObjectListStoreTestCase.test_set_slice)
	(RowObjectListStoreTestCase.test_set_extended_slice): New tests.

	* gtktree/model.py (RowObjectListStore.__setitem__): Implement
	assignment to slices.

	* docs/py-gtktree.txt: Document assignment to slices and remove
	disclaimers about its being unimplemented.

	* TODO: Remove the implemented item.

2008-12-28  Paul Pogonyshev  <pogonyshev@gmx.net>

	* setup.py: Fix author email and download url.

	* run-tests.py: Work also after fresh check-out (i.e. before
	'./setup.py' is run for the first time).



Changes before the project registration on Launchpad (2008-12-28) were not logged.


  Copyright (C) 2008, 2009 Paul Pogonyshev.

  Copying and distribution of this file, with or without modification,
  are permitted provided the copyright notice and this notice are preserved.



Local Variables:
coding: utf-8
End:
