List/Tree Widget

From wiki
Revision as of 00:12, 10 January 2007 by FosterBrereton (Talk | contribs)

Jump to: navigation, search

(For the time being the focus will be on lists, not heirarchical trees.)

The tricky part of a list controller/view is that you have a controller/view on a sequence. You need to figure out:

  1. How to communicate requests for changes to the sequence
  2. What those requests are
  3. How to communicate a change in the visible portion of the sequence to the view

We assume the sequences in a list are disjoint.

Related Docs

Win32 Tree Control API Documentation (Tree View)

Carbon Tree Control API Documentation (Data Browser)

Request Types

Request Type Description Single Node? Multi Node? Parent Target?
Insert Create a new node in the tree Y Y Y
Delete Remove a node from the tree Y Y N
Move Change the parent of a node in the tree Y Y Y
Visible Update Notify the user of the sequence of nodes that are currently visible in the view Y Y N


Assume for the time being that the model_type is simple:

 typedef std::vector<std::string>      model_type;
 typedef model_type::iterator          iterator;
 typedef std::pair<iterator, iterator> sequence_type;

Model API

 typedef boost::function<void ()> monitor_value_callback_t;
 typedef boost::function<void ()> monitor_child_insert_callback_t;
 void insert(const model_type& what, iterator where);
 void monitor_child_insert(iterator parent, const monitor_child_insert_callback_t& how);
 void monitor_value(iterator where, const monitor_value_callback_t& how);