Re: Gtk2::Entry with Pango markup
- From: zentara <zentara1 sbcglobal net>
- To: gtk-perl-list gnome org
- Subject: Re: Gtk2::Entry with Pango markup
- Date: Tue, 25 Nov 2008 08:20:29 -0500
On Tue, 25 Nov 2008 12:47:43 +0100
"Emmanuel Rodriguez" <emmanuel rodriguez gmail com> wrote:
Hi,
I'm have Gtk2::Entry where users are expected to enter an XPath
expression. I would like to let the user know when an expression isn't
valid. I thought of using Pango markup but it seems very hard to do
with a Gtk2::Entry.
For the moment I can use a callback to 'changed' and set the markup this way:
$widget->get_layout->set_markup("<span underline='error'
underline_color='red'>$xpath</span>");
The problem is that it doesn't work too well. The markup is not always
shown. When I edit the widget for the first time the error is not
displayed only after I start erasing at least one character while
keeping the XPath expression invalid.
I tried using a Gtk2::TextView but I didn't find out how to give the
text view the exact height of one line (just as a Gtk2::Entry).
Is there another way of achieving this?
--
Emmanuel Rodriguez
This is just a buggy prototype of what you might do.
Manually take control of the Entry and analyze it key-by-key,
probably with a regex for good xpath syntax,
and set the appropriate markup and entry text.
#!/usr/bin/perl -w
use strict;
use Gtk2::Gdk::Keysyms;
use Glib qw/TRUE FALSE/;
use Gtk2 -init;
my $window = Gtk2::Window->new;
$window->signal_connect (delete_event => sub { Gtk2->main_quit });
my $vbox = new Gtk2::VBox( FALSE, 0 );
my $entry = Gtk2::Entry->new();
$vbox->pack_start( $entry, FALSE, FALSE, FALSE );
$vbox->set_focus_child ($entry); # works
$window->add ($vbox);
my $string = '';
$entry->signal_connect ('key-press-event' => sub {
my ($widget,$event)= @_;
my $key = chr( $event->keyval );
# do your checking and markup here
$string = $string.$key;
$entry->set_text($string);
#calculate string length and set cursor position
#$entry->set_position(1);
#False let the event propagate, so entry will still work
#but we want manual control
#return FALSE;
return TRUE;
});
$window->show_all;
Gtk2->main;
__END__
zentara
--
I'm not really a human, but I play one on earth.
http://zentara.net/Remember_How_Lucky_You_Are.html
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]