Dominic LoBue wrote:
> Ian,
> 
> Urwid is not behaving as I expected with the collapsible widgets I
> created for reading email conversations. In short, when a widget is
> expanded or made more "detailed" (which makes one widget go from one
> line to multi-line), the enlarged widget (or series or widgets, as
> they case may be), displaces the widgets above it. Focus doesn't move,
> nor does the widget in focus move at all, but I had expected the below
> widgets to be displaced instead.

If your focus is below the widget that is expanding, then yes, the
expanding widget will push the others upward.  The ListBox stores the
widget in focus and its offset, so that if the screen is resized the
widget in focus will maintain the same approximate position.  The
alternative is what happens with most web-browsers: once you resize the
window and all the text re-flows you are left at some random unrelated
position within the content (likely the same pixel offset from the top
of the page)

> The best example I can give you is the header widget. The header
> widget has two modes: summary and detailed. In summary mode the widget
> says something along the lines of "Sent <date> from <sender>". In
> detailed mode the widget is 5 lines, one line each for From, To, Cc,
> Sent, Subject. Each individual message in a conversation is made up of
> several widgets. From any of these widgets when you press the
> appropriate key, you can expand the header widget. Getting to the
> point, I open a conversation, move the focus down to the body of the
> message, and toggle the header detail widget. When the header widget
> is toggled to detailed, the widget expands upwards offscreen and all
> that is visible is the last line.

You might try putting the header and content inside a Pile widget.  That
way they look like a single widget to the ListBox and you will likely
get the behaviour you are looking for.


> I think I can use the listbox shift_focus() method to yank everything
> down, but I'm not sure to go about doing it. More details and examples
> on both the shift_focus and change_focus methods would be greatly
> appreciated.

shift_focus and change_focus are the harder to use interfaces (really
just for the ListBox's own keypress handling code to use)  You can use
set_focus_valign to change the focus widget's position in the ListBox.

> Ideally a method where you specify the index of the topmost widget you
> want displayed, and focus is automatically shifted or dragged along
> (if the specified index would put the originally selected index
> off-screen) to compensate would be _perfect_.

In this case the Pile solution may be better for you.  You are trying to
set the position within the ListBox relative to a widget that is not in
focus, and that's not very easy to do at the moment.

Ian

_______________________________________________
Urwid mailing list
[email protected]
http://lists.excess.org/mailman/listinfo/urwid

Reply via email to