Hi Jeremy,
 
Nice!  I've been hoping for something like this.  I'll give it a shot.
 
Brian

 
On 4/27/06, Jeremy White <jez_white@hotmail.com> wrote:

>I've played around with TheGUILoft and was impressed with what it does for
>the most part.  My biggest problem is that it doesn't export win32-gui
>code.  I'd like the option of beging able to do both.

The script below converts a .gld file into perl code. The script itself is a
bit of a hack...:) The idea of this script is that I'm able to design
(complex) windows in loft and use the output in my code, with no runtime
dependency on loft.

Cheers,

jez.

-------------

use Storable qw(nstore store_fd nstore_fd freeze thaw dclone store);
use Cwd;
use Win32::GUI;
use Win32::GUI::Loft;

my $filename='your.gld';
print "package Windows; \n";
my $design=Win32::GUI::Loft::Design->newLoad($filename) or die("Could not
open window file ($filename)");
stripdesign($design);
print "return 1; \n";

sub stripdesign {
my $objDesign=shift;
#Window, dialog, or toolbar?

my $dialog = $objDesign->objControlWindow()->prop("DialogBox");
my $pkgNew = "Win32::GUI::Window";            #"window"
if($dialog eq "dialog") {
               $pkgNew = "Win32::GUI::DialogBox";
               $widthChange += -3;
               $heightChange += -1;
               }
       elsif($dialog eq "toolbar") {
               $pkgNew = "Win32::GUI::ToolbarWindow";
               $widthChange += -1;
               $heightChange += -4;
               }
#Adjust the window size
#$objDesign->objControlWindow()->propIncSnap("Width", $widthChange, 0);
#$objDesign->objControlWindow()->propIncSnap("Height", $heightChange, 0);
my @aOptionRaw=$objDesign->objControlWindow()->buildOptions($objDesign);
my $name = $objDesign->objControlWindow()->runtimeName($objDesign);
print "sub $name { \n";
print 'my $w='.$pkgNew."->new('".join("','",@aOptionRaw)."'".',@_);'." \n";
for my $objControl (@{$objDesign->raControl()}) {
   my @aOptionRaw = ($objControl->buildOptions($objDesign),
$objControl->buildOptionsSpecial($objDesign));
   my $tip=$objControl->{rhControlProperty}{'Tip'};
   if ($tip) {
     #print $tip.'WE HAVE TIP';
     my $tipvalue=$objControl->{rhControlProperty}{'Tip'}->value;
     push @aOptionRaw,('-tip' => "$tipvalue" ) if $tipvalue;
   }
   my $method=$objControl->addMethod();
   if ($method eq 'Win32::GUI::Graphic') {
     $method='AddGraphic';
   }
   print '$w->'.$method."('".join("','",@aOptionRaw)."'); \n";
   }
#do clusters

print 'my $cl;'."\n";
for my $objCluster (@{$objDesign->raCluster()}) {
   #print 'cluster name'.$objCluster->name().'<';
   my @controls;
   for my $objControl (values %{$objCluster->rhControl()}) {
     push @controls,'$w->'.$objControl->runtimeName($objDesign);
     }
   print '$cl->{'."'".$objCluster->name()."'".'}=['.join(',',@controls)."];
\n";
   }
print 'return ($w,$cl) if $cl; return $w;}'."\n";
}