On Mon, 23 Sep 2013 10:18:36 -0400
Jacob Peck <[email protected]> wrote:

> I'm going to +1 this request -- I've run into issues with needing the 
> "parent" of a top-level node myself.
> 
> Another implementation detail would be what do you get when you ask for 
> c.virtualRootPosition()'s parent?  I suggest that it just returns 
> itself, so that we don't need icky guards in scripts.

Hmm, first thought is that it should return None, which is what you
expect when iterating up a list/tree towards the top:

while p.parent():
    p = p.parent()
    print p.h

but that's not really relevant, c.virtualRootPosition() would always be
referenced explicitly, almost always, I would think, along the lines of

  some_node.parent() or c.virtualRootPosition()

so I'm not sure when you'd actually call
c.virtualRootPosition().parent()?  It doesn't seem that you'd arrive
there by iteration.

So perhaps it's not critical what it returns, and if it's easier,
implementation wise, for it to return None, that would be ok.  I'm
hoping it can be implemented as a normal position constructed in a
particular way, and not as a new class which mimics a position.  So
returning None might be the easiest way.

Cheers -Terry


> -->Jake
> 
> On 9/23/2013 10:15 AM, Terry Brown wrote:
> > I've run in to this many times, the 'insertBefore' example was just the
> > most recent.
> >
> > It seems to me that the API for handling top-level nodes is
> > inconveniently inconsistent with the API for handling non-top-level
> > nodes.  Here's my (corrected) insertBefore() snippet:
> >
> > nd = p.insertAfter()
> > nd.moveToNthChildOf(p.parent(), p.childIndex())
> > c.selectPosition(nd)
> > c.redraw()
> > c.editHeadline()
> >
> > What's the simplest way to make it work when invoked on a top level
> > node?  For top level nodes, p.parent() == None.
> >
> > I can think of a few approaches, but they're quite verbose compared to
> > the simplicity of the above.  Edward, perhaps you can show us your
> > simplest solution to make that work with top-level nodes, and if it
> > really is simple, then I'm wrong about the inconvenient inconsistency.
> >
> > If I'm not wrong, then I wonder if it would be possible to add a method
> > c.virtualRootPosition(), which would be a position that behaves as if
> > it was the parent of top level nodes, so that in the above you could
> > write:
> >
> > nd.moveToNthChildOf(p.parent() or c.virtualRootPosition(), p.childIndex())
> >
> > Currently we have
> >
> > c.hiddenRootNode - the vnode parent of all top level nodes
> > c.rootPosition() - the first top level node, i.e. the node at the top
> >                     of the tree display
> > c.rootVnode()    - returns a *position*, alias for c.rootPosition()?
> >
> > Is c.virtualRootPosition() doable?  It should support
> >
> > c.virtualRootPosition().insertAsNthChild()
> >      to create a new top level node
> > c.virtualRootPosition().insertAsLastChild()
> >      to create a new last top level node
> >
> > currently
> >
> > for nd in c.rootPosition().children():
> >      print nd.h
> >
> > lists the children of the first top level node, which is not what I'd
> > expect, but I'm not suggesting changing it.  But
> >
> > for nd in c.virtualRootPosition().children():
> >      print nd.h
> >
> > should do what you expect, same as c.all_positions(), the difference
> > being that you could pass the value of c.virtualRootPosition() to a
> > method expecting a position, which you can't do with c.all_positions().
> >
> > BTW, c.vnode2position(c.hiddenRootNode) does execute and return a
> > position, but trying to use that position doesn't work.  Conceptually
> >
> > def virtualRootPosition(self):
> >      c = self
> >      return c.vnode2position(c.hiddenRootNode)
> >
> > but it's not that simple, understandably.
> >
> > "virtualRootPosition" is just a name distinct from "rootPosition".
> > Ideally you might rename rootPosition() firstPosition(), and call
> > virtualRootPosition() rootPosition().  "realRootPosition" just seems
> > wrong.
> >
> > Cheers -Terry
> >
> 

-- 
You received this message because you are subscribed to the Google Groups 
"leo-editor" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/leo-editor.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to