File indexing completed on 2024-04-14 05:35:06

0001 #!/usr/bin/perl -w
0002 
0003 # Laurent Montel <montel@kde.org> (2014)
0004 # KDoubleNumInput -> QSpinBox
0005 # find -iname "*.cpp" -o -iname "*.h"|xargs kde-dev-scripts/kf5/convert-kdoublenuminput.pl
0006 
0007 use strict;
0008 use File::Basename;
0009 use lib dirname($0);
0010 use functionUtilkde;
0011 
0012 foreach my $file (@ARGV) {
0013     my %varname = ();
0014     my $modified;
0015     open(my $FILE, "<", $file) or warn "We can't open file $file:$!\n";
0016     my @l = map {
0017         my $orig = $_;
0018         my $regexp = qr/
0019            ^(\s*)                        # (1) Indentation, possibly "Classname *" (the ? means non-greedy)
0020            (.*?)                         # (2) Possibly "Classname *" (the ? means non-greedy)
0021            (\w+)                         # (3) variable name
0022            \s*=\s*                       #   assignment
0023            new\s+KDoubleNumInput\s*\((.*)\)   # (4)  new KDoubleNumInput(...,...,...,...);
0024            (.*)$                         # (5) afterreg
0025            /x; # /x Enables extended whitespace mode
0026         if (my ($indent, $left, $var, $argument, $afterreg) = $_ =~ $regexp) {
0027           warn "kdoublenuminput found $var $argument\n";
0028 
0029           $varname{$var} = 1;
0030           my ($lower, $upper, $singleStep, $value, $parent, $base, $after);
0031           my $constructor_regexp = qr/
0032                                  ^([^,]*)\s*        # lower
0033                                  ,\s*([^,]*)\s*     # upper
0034                                  ,\s([^,]*)         # singleStep
0035                                  ,\s([^,]*)         # value
0036                                  ,\s([^,]*)         # widget
0037                                  (?:,\s([^,]*))?    # base
0038                                  (.*)$              # after
0039                                  /x;
0040           if ( ($lower, $upper, $singleStep, $value, $parent, $base, $after) = $argument =~ $constructor_regexp ) {
0041              $_ = $indent . $left . $var . " = new QDoubleSpinBox($parent);" . $after . "\n";
0042            
0043              $_ .= $indent . $var . "->setMaximum($upper);" . $after . "\n";
0044              $_ .= $indent . $var . "->setMinimum($lower);" . $after . "\n";
0045              $_ .= $indent . $var . "->setSingleStep($singleStep);" . $after . "\n";
0046              $_ .= $indent . $var . "->setValue($value);" . $after . "\n";
0047              if ($base) {
0048                 $_ .= $indent . $var . "->setDisplayIntegerBase($base);" . $after . "\n";
0049              }
0050           }
0051         }
0052        my $regexpRange = qr/
0053            ^(\s*)                        # (1) Indentation, possibly "Classname *" (the ? means non-greedy)
0054            (\w+)                         # (2) variable name
0055            \->setRange\s*\((.*)\)        # (3) argument
0056            (.*)$                         # (4) afterreg
0057            /x; # /x Enables extended whitespace mode
0058         if (my ($indent, $var, $argument, $afterreg) = $_ =~ $regexpRange) {
0059             warn "found setRange \'$var\'\n";
0060             if ( defined $varname{$var} ) {
0061                  my $argument_regexp = qr/
0062                                  ^([^,]*)\s*        # mini
0063                                  ,\s*([^,]*)\s*     # maxi
0064                                  ,\s([^,]*)         # singleStep
0065                                  (.*)$              # after
0066                                  /x;
0067                  if (my ($minimum, $maximum, $singleStep) = $argument =~ $argument_regexp) {
0068                     $_ = $indent . "$var->setRange($minimum, $maximum);\n";
0069                     $_ .=  $indent . "$var->setSingleStep($singleStep);\n";
0070                  }
0071             }
0072         }
0073         if (/(\w+)\-\>setSliderEnabled\s*\((.*)\)/) {
0074            my $var = $1;
0075            warn "found setSliderEnabled $2\n";
0076            if ( defined $varname{$var} ) {
0077               my $sliderargs = $2;
0078               $sliderargs =~ s, ,,g;
0079               if ($sliderargs eq "false") {
0080                  $_ = "";
0081               } else {
0082                  $_ = "//PORT SCRIPT: Warning QSpinBox doesn't support slider: $_\n";
0083               }
0084            }
0085         }
0086 
0087         s/\bKDoubleNumInput\b/QDoubleSpinBox/g;
0088         s/\<KDoubleNumInput\b\>/\<QQDoubleSpinBox>/ if (/#include/);
0089         s/\<kdoublenuminput.h\>/\<QDoubleSpinBox>/ if (/#include/);
0090         $modified ||= $orig ne $_;
0091         $_;
0092     } <$FILE>;
0093 
0094     if ($modified) {
0095         open (my $OUT, ">", $file);
0096         print $OUT @l;
0097         close ($OUT);
0098         warn "$file: Verify maximum value. KDoubleSpinBox defined maximum as 9999.0, but QSpinBox define it as 99.99.\n";
0099     }
0100 }
0101 
0102 functionUtilkde::diffFile( "@ARGV" );