RE: EXTERNAL: Re: Gtk2::SpinButton For Hex



How can I use a Gtk2::SpinButton to prompt for an integer expressed in hex?  I've tried the following, but 
it fails.

...

The text appears to be correct while I hold either arrow button down; I see hex values incrementing.  
However, single clicks of an arrow button fail if the displayed text contains A-F.  Hitting the Enter key 
also fails on the same values.  In both cases, the text changes to a decimal integer.

What do the '$value's look like in the outputCB (either in a debugger or ...).

With single clicks of the up arrow button, the values in outputCB() increment from 0 to 10.  10 correctly 
displays as A.  One more click of the up arrow calls outputCB() twice for some reason, the first time with a 
value of 0, and the second with a value of 1.  So visibly, 10 wraps to 1 instead of 11, or B.  If I manually 
type 'FF' and hit the Enter key, outputCB() is called with a value of 0.  I've played with callbacks on the 
'input' and 'changed' signals too, but nothing has worked so far.

I learned something else.  If I change the sprintf() to use '0x%X' instead of '%X', it seems to work.  It 
also works in octal with '0%o' and binary with '0b%b'.

Unfortunately, the '0x' prefix is unacceptable to my users.  Grr.  So I'm still in search of a way to spin a 
hex value, but with no '0x'.  Knowing this about the prefix, though, still may be useful to others wanting 
something similar.

sprint - should be sprintf?

Sorry about the "sprint".  We're on a closed network; that was a transcription typo.

Maybe try set_value or set_digits rather than set_text?

I think I have to call set_text() to see the hex version in the entry.  I have tried calling set_value() too, 
both before and after set_text().  That gives me the same behavior:  spinning seems to work, but single 
clicks wrap to 0 or 1 as soon as I reach a number containing [A-F]+.

On set_digits(), I'm spinning integers, so I've left it at the default, 0.  It wouldn't make sense being any 
other value, if I understand its purpose.

How are any of these impacted by the set_numeric statement?

I've set this to FALSE, since I have to allow A-F to be typed into the entry.  Otherwise, those key events 
are ignored.

Thanks for any other ideas you may have.

Jim

-----Original Message-----
From: Robert Wilkinson [mailto:bob fourtheye org] 
Sent: Wednesday, May 20, 2015 3:12 AM
To: Williams, James P2
Cc: 'gtk-perl-list gnome org'
Subject: EXTERNAL: Re: Gtk2::SpinButton For Hex

On Tue, May 19, 2015 at 10:22:51PM +0000, Williams, James P2 wrote:
How can I use a Gtk2::SpinButton to prompt for an integer expressed in hex?  I've tried the following, but 
it fails.

   use strict;
   use warnings;

   use Glib qw(TRUE FALSE);
   use Gtk2 qw(-init);

   my($spin)=Gtk2::SpinButton->new_with_range(0,1000,1);
   $spin->set_numeric(FALSE);
   $spin->signal_connect(output => \&outputCB);

   my($win)=new Gtk2::Window();
   $win->add($spin);
   $win->show_all();

   Gtk2->main();

   sub outputCB
   {
      my($spin)= _;
      my($value)=$spin->get_adjustment()->get_value();

      $spin->set_text(sprint '%X',$value);
   }

The text appears to be correct while I hold either arrow button down; I see hex values incrementing.  
However, single clicks of an arrow button fail if the displayed text contains A-F.  Hitting the Enter key 
also fails on the same values.  In both cases, the text changes to a decimal integer.

Thanks.

Jim

Hi Jim

What do the '$value's look like in the outputCB (either in a debugger or ...).

sprint - should be sprintf?

Maybe try set_value or set_digits rather than set_text?

How are any of these impacted by the set_numeric statement?

Bob


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]