Re: Scrolling to the row in TreeView when selected?
- From: muppet <scott asofyet org>
- To: Yu Wang <xiaohuwang hotmail com>
- Cc: gtk-perl-list gnome org
- Subject: Re: Scrolling to the row in TreeView when selected?
- Date: Tue, 13 Sep 2005 08:38:40 -0400
On Sep 13, 2005, at 1:19 AM, Yu Wang wrote:
However, if the number of entries is large and the found entry is
in a row not
displayed in current ScrolledWindow, i.e could be very buttom or
very top, the
window cannot scroll to this entry automatically, once this entry
is selected.
Any one has any ideas?
$treeview->scroll_to_cell ($path, $column=undef, $use_align=FALSE,
$row_align=0.0, $col_align=0.0);
http://developer.gnome.org/doc/API/2.0/gtk/GtkTreeView.html#gtk-tree-
view-scroll-to-cell
For a fully-automatic "always make the selected item visible"
behavior, you can connect to the tree's selection's "changed" signal
and scroll to the selected path, like this:
$treeview->get_selection->signal_connect (changed => sub {
my ($selection) = @_;
my ($model, $iter) = $selection->get_selected;
if ($iter) {
$selection->get_tree_view->scroll_to_cell ($model->get_path
($iter));
}
});
Here's a complete example:
======
#!/usr/bin/perl -w
use strict;
use Gtk2 -init;
use Glib ':constants';
# a tree with some data
my $store = Gtk2::ListStore->new ('Glib::String');
foreach my $i (0..1000) {
$store->set ($store->append, 0, "$i");
}
my $treeview = Gtk2::TreeView->new ($store);
$treeview->insert_column_with_attributes (-1, 'Strings',
Gtk2::CellRendererText->new,
text => 0);
my $scrolled = Gtk2::ScrolledWindow->new;
$scrolled->set_policy ('automatic', 'automatic');
# spin button to choose the index of the row to select
my $adjustment = Gtk2::Adjustment->new (0, 0, $store->iter_n_children
(undef),
1, 10, 100);
my $spinner = Gtk2::SpinButton->new ($adjustment, 1, 0);
# button to trigger selection
my $button = Gtk2::Button->new ('_Select it');
# layout containers
my $vbox = Gtk2::VBox->new;
my $hbox = Gtk2::HBox->new;
my $window = Gtk2::Window->new;
# pack 'em in, lay 'em out, rawhide!
$window->add ($vbox);
$vbox->pack_start ($hbox, FALSE, FALSE, 0);
$hbox->pack_start ($spinner, TRUE, TRUE, 0);
$hbox->pack_start ($button, FALSE, FALSE, 0);
$vbox->pack_start ($scrolled, TRUE, TRUE, 0);
$scrolled->add ($treeview);
$window->show_all;
# react to things.
#
# when the user clicks the button, select the row indicated in the
spinner.
$button->signal_connect (clicked => sub {
my $path = Gtk2::TreePath->new_from_indices ($spinner->get_value);
$treeview->get_selection->select_path ($path);
});
# allow the user to hit "Enter" in the spinner to select a row, so
his hands
# needn't leave the keyboard.
$spinner->signal_connect (activate => sub { $button->clicked });
# whenever the selection changes, scroll to it if it's not already
visible.
$treeview->get_selection->signal_connect (changed => sub {
my ($selection) = @_;
my ($model, $iter) = $selection->get_selected;
if ($iter) {
$selection->get_tree_view->scroll_to_cell ($model->get_path
($iter));
}
});
# quit when our window goes away.
$window->signal_connect (destroy => sub { Gtk2->main_quit });
# GO!
Gtk2->main;
======
--
She's obviously your child. She looks like you, she talks a lot, and
most of it is gibberish.
-- Elysse, to me, of Zella.
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]