Re: How I can stop the select_row signal in clist
- From: Mark Stratman <mark sporkstorms org>
- To: "Vladimir V. Markevich" <markj LinS ospu odessa ua>
- Cc: gtk-perl-list gnome org
- Subject: Re: How I can stop the select_row signal in clist
- Date: 27 Feb 2002 09:34:59 -0600
If I'm understanding correctly, you want to prevent users from selecting
from the list?
If so, call the sensitive() method with a false value.
$clist->sensitive(0); # should do it.
To enable selection again: $clist->sensitive(1);
On Wed, 2002-02-27 at 11:15, Vladimir V. Markevich wrote:
Dear All.
I need to stop select_row (unselect_row) signal in clist. At some cases
I'll would like to restrict to change selection in the clist.
In my signal handler for the select_row signal I use function
$clist->signal_emit_stop_by_name('select_row'), but it's does not
work, row are selected.
I was also tested this method with the demo program from the
gtkperl-tutorial called clist, see the attachement, but it was failed too.
How I can solve this problem? Any suggestion will be fine.
Thanks, anyway.
----
#!/usr/bin/perl -w
use Gtk;
use strict;
set_locale Gtk;
init Gtk;
my $false = 0;
my $true = 1;
my $window;
my $vbox;
my $hbox;
my $scrolled_window;
my $clist;
my $button_add;
my $button_clear;
my $button_hide_show;
my $titles_visible = $false;
my @titles = ( "Ingredients", "Amount" );
$window = new Gtk::Window( "toplevel" );
$window->set_usize( 300, 150 );
$window->set_title( "CList Example" );
$window->signal_connect( "destroy", sub { Gtk->exit( 0 ); } );
$vbox = new Gtk::VBox( $false, 5 );
$window->add( $vbox );
$vbox->border_width( 5 );
$vbox->show();
# Create a scrolled window to pack the CList widget into
$scrolled_window = new Gtk::ScrolledWindow( undef, undef );
$vbox->pack_start( $scrolled_window, $true, $true, 0 );
$scrolled_window->set_policy( 'automatic', 'always' );
$scrolled_window->show();
# Create the CList. For this example we use 2 columns
$clist = new_with_titles Gtk::CList( @titles );
# When a selection is made, we want to know about it. The callback
# used is selection_made, and its code can be found further down
$clist->signal_connect( "select_row", \&selection_made );
# It isn't necessary to shadow the border, but it looks nice :)
$clist->set_shadow_type( 'out' );
# What however is important, is that we set the column widths as
# they will never be right otherwise. Note that the columns are
# numbered from 0 and up (to 1 in this case).
$clist->set_column_width( 0, 150 );
# Add the CList widget to the vertical box and show it.
$scrolled_window->add( $clist );
$clist->show();
# Create the buttons and add them to the window.
$hbox = new Gtk::HBox( $false, 0 );
$vbox->pack_start( $hbox, $false, $true, 0 );
$hbox->show();
$button_add = new Gtk::Button( "Add List" );
$button_clear = new Gtk::Button( "Clear List" );
$button_hide_show = new Gtk::Button( "Hide/Show Titles" );
$hbox->pack_start( $button_add, $true, $true, 0 );
$hbox->pack_start( $button_clear, $true, $true, 0 );
$hbox->pack_start( $button_hide_show, $true, $true, 0 );
# Connect our callbacks to the three buttons
$button_add->signal_connect( "clicked", \&button_add_clicked, $clist );
$button_clear->signal_connect( "clicked", sub { $clist->clear(); } );
$button_hide_show->signal_connect( "clicked", \&button_hide_show_clicked, $clist );
$button_add->show();
$button_clear->show();
$button_hide_show->show();
$window->show();
main Gtk;
exit( 0 );
### Subroutines
# User clicked the "Add List" button.
sub button_add_clicked
{
my ( $widget, $clist ) = @_;
my $i;
# Something silly to add to the list. 4 rows of 2 columns each.
my @drink = ( [ Milk => "3 Oz" ],
[ Water => "6 l" ],
[ Carrots => "2" ],
[ Snakes => "55" ] );
# Here we do the actual adding of the text. It's done once for each row.
for ( $i = 0; $i < 4; $i++ )
{
$clist->append( @{$drink[ $i ]} );
}
# For those who may not have understood the above, here is a brief
# explanation. @drink is a list of references to lists
# (references are scalars holding a memory address, similar to
# pointers). This is used because Perl doesn't directly support
# two-dimensional arrays. Because of this, $drink[$i] is not a
# list, but a reference to one, so we must dereference it by
# enclosing it like this: @{ reference } ( we use @ because it is
# a reference to a list. For further information on references,
# see the perlref(1) man page, or chapter 4 of _Programming Perl_.
return;
}
# The user clicked the "Hide/Show titles" button.
sub button_hide_show_clicked
{
my ( $widget, $clist ) = @_;
if ( $titles_visible )
{
# Hide the titles and set the flag to 1
$clist->column_titles_hide();
$titles_visible++;
}
else
{
# Show the titles and reset flag to 0
$clist->column_titles_show();
$titles_visible--;
}
return;
}
# If we come here, then the user has selected a row in the list.
sub selection_made
{
my ( $clist, $row, $column, $event, @data ) = @_;
$clist->signal_emit_stop_by_name('select_row');
return 1;
}
# END EXAMPLE PROGRAM
--
@j=qw{-.2-2.- -2.4- -3.2-. -2.-.-2};
print map{s e(.)(\d)e$1x$2eeg;y.-.1.;y-.-0-;
chr unpack"N",pack"B32",substr'0'x32 .$_,-32} j;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]