File indexing completed on 2024-04-21 05:41:54

0001 #!/usr/bin/perl -w
0002 
0003 # Laurent Montel <montel@kde.org> (2014)
0004 # KButtonGroup -> QGroupBox + QButtonGroup
0005 # find -iname "*.cpp" -o -iname "*.h"|xargs kde-dev-scripts/kf5/convert-kbuttongroup.pl
0006 
0007 use strict;
0008 use File::Basename;
0009 use lib dirname($0);
0010 use functionUtilkde;
0011 
0012 foreach my $file (@ARGV) {
0013 
0014     # Key = variable name of the parent QWidget
0015     # Value = variable name of the associated layout
0016     my %varname = ();
0017 
0018     my $modified;
0019     my $buttonId=0;
0020     open(my $FILE, "<", $file) or warn "We can't open file $file:$!\n";
0021     my @l = map {
0022         my $orig = $_;
0023         my $regexp = qr/
0024            ^(\s*)            # (1) Indentation
0025            (.*?)             # (2) Possibly "Classname *" (the ? means non-greedy)
0026            (\w+)             # (3) variable name
0027            \s*=\s*           #     assignment
0028            new\s+KButtonGroup #     new
0029            /x; # /x Enables extended whitespace mode
0030          if (my ($indent, $left, $var) = $_ =~ $regexp) {
0031            s/KButtonGroup/QGroupBox/g;
0032            my $buttonGroupName = "$var" . "ButtonGroup";
0033            $_ .= $indent . "QButtonGroup *$buttonGroupName = new QButtonGroup($var);\n";
0034            $varname{$var} = ${buttonGroupName};
0035            warn "BECAREFULL, verify that each button is added to ButtonGroup => $buttonGroupName->addButton(..., id);\n";
0036 
0037         }
0038     if ( /\s*connect\s*\(\s*(\w+),\s*SIGNAL\s*\(\s*clicked\s*\(\s*int\s*\)/ ) {
0039            if (defined $varname{$1} ) {
0040               my $newValue = $varname{$1};
0041               s/$1/$newValue/;
0042               s/clicked/buttonClicked/;
0043            }
0044         }
0045         if ( /\s*connect\s*\(\s*(\w+),\s*SIGNAL\s*\(\s*released\s*\(\s*int\s*\)/ ) {
0046            if (defined $varname{$1} ) {
0047               my $newValue = $varname{$1};
0048               s/$1/$newValue/;
0049               s/released/buttonReleased/;
0050            }
0051         }
0052         if ( /\s*connect\s*\(\s*(\w+),\s*SIGNAL\s*\(\s*pressed\s*\(\s*int\s*\)/ ) {
0053            if (defined $varname{$1} ) {
0054               my $newValue = $varname{$1};
0055               s/$1/$newValue/;
0056               s/pressed/buttonPressed/;
0057            }
0058         }
0059         if ( /\s*connect\s*\(\s*(\w+),\s*SIGNAL\s*\(\s*changed\s*\(\s*int\s*\)/ ) {
0060            if (defined $varname{$1} ) {
0061               warn "$file: QButtonGroup doesn't have changed signal. Need to adapt it\n";
0062            }
0063         }
0064 
0065         if (/(\w+)\->selected\s*\(\)/) {
0066            if (defined $varname{$1} ) {
0067               my $newValue = $varname{$1};
0068               s/$1/$newValue/;
0069               s/selected/checkedId/;
0070            }
0071         }
0072         if (/(\w+)\->setSelected\b/) {
0073            if (defined $varname{$1} ) {
0074               my $newValue = $varname{$1};
0075               s/$1/$newValue/;
0076               s/setSelected/button/;
0077               s/;/->setChecked(true);/
0078            }
0079         }
0080         #TODO add buttons
0081         s/#include <kbuttongroup\.h>/#include <QGroupBox>/;
0082         s/#include <KButtonGroup>/#include <QGroupBox>/;
0083         s/class KButtonGroup;//;
0084         s/KButtonGroup\s*\*/QGroupBox */;
0085         s/KButtonGroup\s*\*/QGroupBox */;
0086 
0087 
0088         $modified ||= $orig ne $_;
0089         $_;
0090     } <$FILE>;
0091 
0092     if ($modified) {
0093         open (my $OUT, ">", $file);
0094         print $OUT @l;
0095         close ($OUT);
0096     functionUtilkde::addIncludeInFile($file, "QButtonGroup");
0097 
0098     }
0099 }
0100 
0101 functionUtilkde::diffFile( "@ARGV" );