File: convert-kbuttongroup.pl

package info (click to toggle)
kde-dev-scripts 4%3A18.08.0-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 3,496 kB
  • sloc: perl: 15,466; lisp: 5,627; sh: 4,157; python: 3,892; ruby: 2,158; makefile: 16; sed: 9
file content (101 lines) | stat: -rwxr-xr-x 3,356 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#!/usr/bin/perl -w

# Laurent Montel <montel@kde.org> (2014)
# KButtonGroup -> QGroupBox + QButtonGroup
# find -iname "*.cpp" -o -iname "*.h"|xargs kde-dev-scripts/kf5/convert-kbuttongroup.pl

use strict;
use File::Basename;
use lib dirname($0);
use functionUtilkde;

foreach my $file (@ARGV) {

    # Key = variable name of the parent QWidget
    # Value = variable name of the associated layout
    my %varname = ();

    my $modified;
    my $buttonId=0;
    open(my $FILE, "<", $file) or warn "We can't open file $file:$!\n";
    my @l = map {
        my $orig = $_;
        my $regexp = qr/
           ^(\s*)            # (1) Indentation
           (.*?)             # (2) Possibly "Classname *" (the ? means non-greedy)
           (\w+)             # (3) variable name
           \s*=\s*           #     assignment
           new\s+KButtonGroup #     new
           /x; # /x Enables extended whitespace mode
         if (my ($indent, $left, $var) = $_ =~ $regexp) {
           s/KButtonGroup/QGroupBox/g;
           my $buttonGroupName = "$var" . "ButtonGroup";
           $_ .= $indent . "QButtonGroup *$buttonGroupName = new QButtonGroup($var);\n";
           $varname{$var} = ${buttonGroupName};
           warn "BECAREFULL, verify that each button is added to ButtonGroup => $buttonGroupName->addButton(..., id);\n";

        }
	if ( /\s*connect\s*\(\s*(\w+),\s*SIGNAL\s*\(\s*clicked\s*\(\s*int\s*\)/ ) {
           if (defined $varname{$1} ) {
              my $newValue = $varname{$1};
              s/$1/$newValue/;
              s/clicked/buttonClicked/;
           }
        }
        if ( /\s*connect\s*\(\s*(\w+),\s*SIGNAL\s*\(\s*released\s*\(\s*int\s*\)/ ) {
           if (defined $varname{$1} ) {
              my $newValue = $varname{$1};
              s/$1/$newValue/;
              s/released/buttonReleased/;
           }
        }
        if ( /\s*connect\s*\(\s*(\w+),\s*SIGNAL\s*\(\s*pressed\s*\(\s*int\s*\)/ ) {
           if (defined $varname{$1} ) {
              my $newValue = $varname{$1};
              s/$1/$newValue/;
              s/pressed/buttonPressed/;
           }
        }
        if ( /\s*connect\s*\(\s*(\w+),\s*SIGNAL\s*\(\s*changed\s*\(\s*int\s*\)/ ) {
           if (defined $varname{$1} ) {
              warn "$file: QButtonGroup doesn't have changed signal. Need to adapt it\n";
           }
        }

        if (/(\w+)\->selected\s*\(\)/) {
           if (defined $varname{$1} ) {
              my $newValue = $varname{$1};
              s/$1/$newValue/;
              s/selected/checkedId/;
           }
        }
        if (/(\w+)\->setSelected\b/) {
           if (defined $varname{$1} ) {
              my $newValue = $varname{$1};
              s/$1/$newValue/;
              s/setSelected/button/;
              s/;/->setChecked(true);/
           }
        }
        #TODO add buttons
        s/#include <kbuttongroup\.h>/#include <QGroupBox>/;
        s/#include <KButtonGroup>/#include <QGroupBox>/;
        s/class KButtonGroup;//;
        s/KButtonGroup\s*\*/QGroupBox */;
        s/KButtonGroup\s*\*/QGroupBox */;


        $modified ||= $orig ne $_;
        $_;
    } <$FILE>;

    if ($modified) {
        open (my $OUT, ">", $file);
        print $OUT @l;
        close ($OUT);
	functionUtilkde::addIncludeInFile($file, "QButtonGroup");

    }
}

functionUtilkde::diffFile( "@ARGV" );