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

0001 #!/usr/bin/perl
0002 
0003 # laurent Montel <montel@kde.org> 2006 GPL
0004 # Reinhold Kainhofer <reinhold@kainhofer.com> 2006 GPL
0005 #
0006 # simple script to replace the QT3_SUPPORT QGridLayout constructors:
0007 #     QGridLayout ( QWidget * parent, int nRows, int nCols = 1, int margin = 0, int space = -1, const char * name = 0 ) 
0008 #     QGridLayout ( int nRows, int nCols = 1, int spacing = -1, const char * name = 0 ) 
0009 #     QGridLayout ( QLayout * parentLayout, int nRows = 1, int nCols = 1, int spacing = -1, const char * name = 0 ) 
0010 # with the Qt4 API, which is
0011 #     QGridLayout( QWidget* parent);
0012 #     QGridLayout::set(Margin|Spacing|ObjectName)(...);
0013 # The row and col count is no longer needed at all.
0014 #
0015 # This script does NOT detect the QLayout*parentLayout case, which needs to be converted manually
0016 
0017 use File::Basename;
0018 use lib dirname( $0 );
0019 use functionUtilkde;
0020 use strict;
0021 
0022 open(my $F, "-|", qw(find . -type f));
0023 my $file;
0024 while ($file = <$F>) {
0025     next if $file =~ /\.svn/;
0026     chomp $file;
0027     next if functionUtilkde::excludeFile( $file);
0028 
0029     my $modified;
0030     my @necessaryIncludes = ();
0031     open(my $FILE, "<", $file) or warn "We can't open file $file:$!\n";
0032     my @l = map {
0033       my $orig = $_;
0034       my ($spaces, $trailer, $object, $call, $ws,$parent, $params);
0035       # $ws is the whitespace between brackets and contents
0036       # $spaces are the spaces at the beginning of the line
0037       # $trailer is the text between the spaces at the beginning and the object name
0038       # $object is the grid layout object (for the set* calls that we need to add)
0039       # $call is the actual constructor call (e.g. " = new QGridLayout ")
0040       # $parent is the first argument to the constructor, unless it starts with a number
0041       # $params is everything after the parent layout/widget until the end of the bracket
0042       #
0043       # this code assumes the constructor is a call on its own line, i.e. ends with new QGridLayout(...);
0044       $parent = "";
0045       if (  # Either parent widget/layout or first param is rows (=starts with number)
0046         ( ($spaces, $trailer, $object, $call, $ws, $parent, $params) = m!^(\s*)(.*[\s\*]|)([a-zA-Z0-9]+)(\s*=\s*new QGridLayout[^(]*)\((\s*)([^0-9 ][^,]*|0),\s*(.*[^\s])\s*\);$! ) ||
0047         ( ($spaces, $trailer, $object, $call, $ws,          $params) = m!^(\s*)(.*[\s\*]|)([a-zA-Z0-9]+)(\s*=\s*new QGridLayout[^(]*)\((\s*)([0-9][^,]*,\s*.*[^\s])\s*\);$! ) ) {
0048 # print "Spaces: '$spaces', Trailer: '$trailer', Object: '$object', Call: '$call'";
0049 # print "WS: '$ws', Parent: '$parent'\n";
0050 
0051 # print "Params '$params'\n";
0052         if ( $parent eq "0" ) { $parent = ""; }
0053         if ( $parent ) {
0054           $_ = "$spaces$trailer$object$call($ws$parent$ws);\n";
0055         } else {
0056           $_ = "$spaces$trailer$object$call();\n";
0057         }
0058         my ($rows, $cols, $margin, $space, $name );
0059         my @parms = split( /,\s*/, $params );
0060 
0061         if ( scalar( @parms ) >= 5 ) {
0062           # All params are given: rows, cols, margin, spacing, name
0063           ($rows, $cols, $margin, $space, $name) = @parms;
0064         } else {
0065           # rows and cols are always the first two.
0066           $rows = $parms[0] if ( scalar( @parms ) >= 1 );
0067           $cols = $parms[1] if ( scalar( @parms ) >= 2 );
0068           if ( !defined($parent) ) { # constructor without parent layout/widget => rows, cols, spacing, name
0069             $space = $parms[2] if ( scalar( @parms ) >= 3 );
0070             $name = $parms[3] if ( scalar( @parms ) >= 4 );
0071           } elsif ( scalar( @parms ) >= 4 && @parms[3] =~ m/^"/ ) {
0072             # fourth parameter is the name -> third must be the spacing
0073             $space = $parms[2];
0074             $name = $parms[3];
0075           } elsif ( scalar( @parms ) >= 4 ) { # fourth param is not name
0076             $margin = $parms[2];
0077             $space = $parms[3];
0078           } else {
0079             $space = $parms[2] if ( scalar( @parms ) >= 3 );
0080           }
0081         }
0082 # print "Row: $rows\nCols: $cols\n";
0083 # print "Margin: $margin\nSpacing: $space\nName: $name\n";
0084 
0085         # We don't need the row/col count any more in the new Qt4 API!!!
0086         $_ .= "$spaces$object->setObjectName($ws$name$ws);\n" if ( defined($name) );
0087         $_ .= "$spaces$object->setSpacing($ws$space$ws);\n" if ( defined($space) );
0088         $_ .= "$spaces$object->setMargin($ws$margin$ws);\n" if ( defined($margin) );
0089 # print "Old line:      \n$orig";
0090 # print "New line:      \n$_====================\n";
0091       }
0092       $modified ||= $orig ne $_;
0093       $_;
0094     } <$FILE>;
0095 
0096     if ($modified) {
0097       print "Modified: $file\n";
0098       open (my $OUT, ">", $file);
0099       print $OUT @l;
0100       close $OUT;
0101     }
0102 
0103 }
0104 functionUtilkde::diffFile( <$F> );
0105