Update of /cvsroot/perl-win32-gui/Win32-GUI
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13671
Modified Files:
CHANGELOG GUI.pm
Log Message:
Re-write Win32::GUI::Textfield::new() to fix up -prompt option
Index: GUI.pm
===================================================================
RCS file: /cvsroot/perl-win32-gui/Win32-GUI/GUI.pm,v
retrieving revision 1.63
retrieving revision 1.64
diff -C2 -d -r1.63 -r1.64
*** GUI.pm 16 Jul 2007 19:22:22 -0000 1.63
--- GUI.pm 16 Jul 2007 19:24:51 -0000 1.64
***************
*** 1388,1391 ****
--- 1388,1393 ----
# -left => 75,
# -top => 150,
+ # -width => 100,
+ # -height => 20,
# -prompt => "Your name:",
# );
***************
*** 1407,1475 ****
my($class, $parent, @options) = @_;
my %options = @options;
if(exists $options{-prompt}) {
! my $add = 0;
! my ($text, $left, $width, $height, );
! my $visible = 1;
! # Convert -pos and -size options to -left, -top, -width and -height
options
! if (exists $options{-pos}) {
! $options{-left} = $options{-pos}[0];
! $options{-top} = $options{-pos}[1];
! }
! if (exists $options{-size}) {
! $options{-width} = $options{-size}[0];
! $options{-height} = $options{-size}[1];
! }
if(ref($options{-prompt}) eq "ARRAY") {
! $left = pop(@{$options{'-prompt'}});
! $text = pop(@{$options{'-prompt'}});
! if($left < 0) {
! $width = -$left;
! $left += $options{-left};
! } else {
! $width = $left;
! $left = $options{-left};
! $add = 1;
! }
! } else {
! $text = $options{-prompt};
}
! if(exists $options{-height}) {
! $height = $options{-height}-3;
! } else {
! $height = 0;
}
! if(exists $options{-visible}) {
! $visible = $options{-visible};
}
my $prompt = new Win32::GUI::Label(
$parent,
! -name => $options{-name} . '_Prompt',
! -width => $width,
! -left => $left,
! -top => $options{-top} + 3,
-text => $text,
! -height => $height,
! -visible => $visible,
);
! $options{-left} += $prompt->Width if $add;
! # Update array options
! for (my $i = 0; $i < @options; $i += 2) {
! if ($options[$i] eq '-left') {
! $options[$i+1] = $options{-left};
! last;
! }
! if ($options[$i] eq '-pos') {
! $options[$i+1][0] = $options{-left};
! last;
! }
}
! }
! return Win32::GUI->_new(
! Win32::GUI::_constant("WIN32__GUI__EDIT"),
! $class, $parent, @options,
! );
}
--- 1409,1500 ----
my($class, $parent, @options) = @_;
my %options = @options;
+
+ # Create the textfield, invisible, and we'll
+ # make it visible if necessary at the end
+ my $visible = exists $options{-visible} ? $options{-visible} : 1;
+ my $textfield = Win32::GUI->_new(
+ Win32::GUI::_constant("WIN32__GUI__EDIT"),
+ $class, $parent, @options, '-visible', 0
+ );
+
+ # If we failed to create it, then return undef
+ return undef unless $textfield;
+
+ # If we have a -prompt option, then we need to
+ # create a label, and position it and the
+ # textfield correctly
if(exists $options{-prompt}) {
! my ($text, $adjust);
+ # extract the information we need from
+ # the -prompt option
if(ref($options{-prompt}) eq "ARRAY") {
! $text = shift(@{$options{'-prompt'}});
! $adjust = shift(@{$options{'-prompt'}}) || 0;
}
! else {
! $text = $options{-prompt};
}
!
! # Convert -pos to -left and -top,
! if (exists $options{-pos}) {
! $options{-left} = $options{-pos}[0];
! $options{-top} = $options{-pos}[1];
}
+
+ ## Create the label; Setting width and height to
+ # zero creates it the right size for the text.
+ # XXX: This will inherit the font from the
+ # parent window, ignoring any -font option
+ # passed.
my $prompt = new Win32::GUI::Label(
$parent,
! -name => $textfield->{-name} . '_Prompt',
-text => $text,
! -left => $options{-left} || 0,
! -top => ($options{-top} || 0) + 3,
! -width => 0,
! -height => 0,
! -visible => 0,
);
! # If we failed to create it, then return undef
! return undef unless $prompt;
! # Adjust the positions:
! # $adjust < 0 : the textfield is in the correct
! # position, move the label left
! # $adjust > 0 : the label is in the correct
! # position, move the textfield right
! # $adjust == 0: both are correct, do nothing
! # $adjust undefined: label needs moving to
! # the left of the textfield, which we will
! # do by setting $adjust appropriately
! if(!defined $adjust) {
! $adjust = -($prompt->Width() + 5);
}
!
! if($adjust < 0) {
! my $left = $prompt->Left();
! $prompt->Left($left + $adjust);
! }
! elsif ($adjust > 0) {
! my $left = $textfield->Left();
! $textfield->Left($left + $adjust);
! }
! else {
! # Adjust is zero, or we have
! # an error; in either case
! # do nothing
! }
!
! # Make the prompt visible if needed
! $prompt->Show() if $visible;
! } # finish processing prompt
!
! # Make the textfield visible if needed
! $textfield->Show() if $visible;
!
! return $textfield;
}
Index: CHANGELOG
===================================================================
RCS file: /cvsroot/perl-win32-gui/Win32-GUI/CHANGELOG,v
retrieving revision 1.122
retrieving revision 1.123
diff -C2 -d -r1.122 -r1.123
*** CHANGELOG 16 Jul 2007 19:22:22 -0000 1.122
--- CHANGELOG 16 Jul 2007 19:24:51 -0000 1.123
***************
*** 8,11 ****
--- 8,12 ----
+ [Robert May] : 16 July 2007 - Bug Fixes
- GUI.pm - fix Win32::GUI::Imagelist::AddMasked (Tracker: 1734697)
+ - GUI.pm - fix -prompt option to Textfield (Tracker: 1734697)
+ [Robert May] : 15 July 2007 - Bug Fixes