in reply to Re: Unable To Keep Showing Last Item In Gtk2::TreeView
in thread Unable To Keep Showing Last Item In Gtk2::TreeView
Thanks for the suggestion. And, oops, on the Window/MainWindow thing. See the corrected version below, still with the shrink problem.
What you suggested is not quite what I'm after, since it unconditionally moves the scroll bar to the bottom of the view anytime a new item is added. I'm trying to move the scroll bar only if it is already at the bottom just before the new item is added. That way, I can be looking around somewhere else with the scroll bar, without it jumping to the bottom everytime another item is added.
So it's an annoyance issue: I want this auto-scrolling, but not while I'm looking somewhere else in the tree view. What I've got works, except when the tree view shrinks. That causes the scroll bar to move slightly off the bottom, mistakenly turning off auto-scrolling.
By the way, I've tried attaching to many different signals, but the tree view internals seem too stale for $tree->get_visible_range(), $tree->scroll_to_cell(), or whatever to work.
Still searching,
Jim
#!/usr/bin/perl use strict; use warnings; use Glib qw(TRUE FALSE); use Gtk2 -init; my($win,$tree)=createWin(); Glib::Timeout->add(1000,sub {tickCB($tree)}); $win->show_all(); Gtk2->main(); # # Creates the widgets in the application. Returns the main # window and tree view. # sub createWin { my($win,$scroll,$tree,$model); $win=new Gtk2::Window(); $win->set_default_size(250,300); $win->signal_connect(destroy => \&Gtk2::main_quit); $win->add($scroll=new Gtk2::ScrolledWindow()); $scroll->add($tree=new Gtk2::TreeView()); $tree->set_rules_hint(TRUE); $tree->insert_column_with_attributes(-1,'Goo', new Gtk2::CellRendererText(),text => 0); $tree->set_model($model= new Gtk2::ListStore('Glib::String')); addWord($model) for 0 .. 100; showLast($tree); return ($win,$tree); } # # Called at regular intervals to add another random "word" # to the bottom of the tree view. If the previous word was # visible beforehand, scrolls the tree view so the new word # is visible. # sub tickCB { my($tree)=@_; my($model)=$tree->get_model(); my($numRows)=$model->iter_n_children(undef); my($lastVis)=($tree->get_visible_range())[1]; my($mustScroll)=$lastVis && $lastVis->get_indices() == $numRows-1; addWord($model); showLast($tree) if $mustScroll; return TRUE; } # # Adds a random "word" to the bottom of the tree view. # sub addWord { my($model)=@_; my(@cons)=grep !/[aeiou]/,'a' .. 'z'; $model->set($model->append(),0, $cons[rand @cons] . 'oo'); } # # Scrolls the tree view so the last row is visible. # sub showLast { my($tree)=@_; my($numRows)=$tree->get_model()->iter_n_children(undef); $tree->scroll_to_cell( new Gtk2::TreePath($numRows-1),undef,TRUE,0.0,1.0); }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^3: Unable To Keep Showing Last Item In Gtk2::TreeView
by zentara (Cardinal) on Apr 09, 2012 at 20:24 UTC | |
|
Re^3: Unable To Keep Showing Last Item In Gtk2::TreeView
by zentara (Cardinal) on Apr 09, 2012 at 21:12 UTC | |
by williams (Beadle) on Apr 12, 2012 at 21:24 UTC | |
by zentara (Cardinal) on Apr 13, 2012 at 11:48 UTC | |
by ultibuzz (Monk) on Jun 17, 2013 at 15:59 UTC |