GUIDeFATE
view release on metacpan or search on metacpan
lib/GUIDeFATE.pm view on Meta::CPAN
$log="SubPanel '$panelType' Id $bid found position $ps height $fh width $fl at row $l with content $content \n";##
if ($verbose){ print $log; }
if ($auto){ $autoGen.="#".$log; }
addWidget(["sp",$bid,$panelType,$content,[$winScale*($ps*2-1),$winScale*$l*4],[$winScale*($fl*2+3),$winScale*$fh*4]]);
$bid+=2; # id goes up by 2, one for the panel and one for the content;
};
}
while ($line =~m/(\^([A-z]+)\s*\^)/g){ #ComboBoxes
my $ps=length($`);my $label=$2; my $len=length ($label);$label=~s/^(\s+)|(\s+)$//g;
$line=~s/(\^([A-z]+)\s*\^)/" " x length($1)/e;
$log= "combobox calls function &combo$bid\n"; ##
if ($verbose){ print $log; }
if ($auto){ $autoGen.=makeSub("combo$bid", "combobox with data from \@$label"); }
addWidget(["combo",$bid,$label,[$winScale*($ps*2-1),$winScale*$l*4],[$winScale*($len*2+3),$winScale*4], \&{"main::combo".$bid}]);
$bid++;
}
while ($line =~m/(\{([^}]*)\})/g){ # buttons are made from { <label> }
my $ps=length($`);my $label=$2; my $len=length ($label);$label=~s/^(\s+)|(\s+)$//g;
$log= "Button with label '$label' calls function &btn$bid\n"; ##
if ($verbose){ print $log; }
if ($auto){ $autoGen.=makeSub("btn$bid", "button with label $label "); }
addWidget(["btn",$bid, $label,[$winScale*($ps*2-1),$winScale*$l*4],[$winScale*($len*2+3),$winScale*4], \&{"main::btn".$bid}]);
$bid++;
$line=~s/(\{([^}]*)\})/" " x length($1)/e; #remove buttons replacing with spaces
}
while ($line=~m/(\[([^\]]+)\])/g){ # text ctrls are made from [ default text ]
my ($ps,$all,$content)=(length($`),$1,$2);
$log= "Text Control with default text ' $content ', calls function &textctrl$bid \n"; ##
if ($verbose){ print $log; }
if ($auto){ $autoGen.=makeSub("textctrl$bid","Text Control with default text ' $content '" ); }
my $trimmed=$content; $trimmed=~s/(\s+)|(\s+)$//g;
addWidget(["textctrl",$bid, $trimmed,[$winScale*($ps*2-1),$winScale*$l*4],[$winScale*(length($all)*2-1),$winScale*4], \&{"main::textctrl".$bid}]);
$bid++;
$line=~s/(\[([^\]]+)\])/" " x length($1)/e; #remove text controls replacing with spaces
}
if ($line !~ m/^\+/){
my $tmp=$line;
$tmp=~s/(\[([^\]]+)\])|(\{([^}]*)\})/" " x length $1/ge;
$tmp=~s/^(\|)|(\|)$//g; #remove starting and ending border
$tmp=~s/^(\s+)|(\s+)$//g; #remove spaces
if (length $tmp){
$log= "Static text '".$tmp."' with id stattext$bid\n"; ##
if ($verbose){ print $log; }
if ($auto){ $autoGen.="#".$log; }
$line=~m/\Q$tmp\E/;my $ps=length($`);
addWidget(["stattext",$bid++, $tmp,[$winScale*($ps*2-1),$winScale*$l*4]]);
}
}
$l++;
}
if(!$winHeight) {$winHeight=$winScale*4*($l-1)};
my $mode="";
while ($l++<=scalar(@lines)){
my $line=$lines[$l];
if ((!$line) || ($line eq "")||($line=~/^#/)){
$mode="";next;
}
elsif ($line=~/menu/i){
$log="Menu found\n"; ##
if ($verbose){ print $log; }
if ($auto){ $autoGen.="#".$log; }
$mode="menu";
next;}
elsif($line=~/^([A-z]+=)/){
chomp $line;
my ($varName,$value)=split(/=/,$line,2);
$log="var ' $varName ' has value ' $value '\n"; ##
addVar($varName,$value);
}
if($mode eq "menu"){
if ($line=~/^\-([A-z0-9].*)/i){
$log= "Menuhead $1 found\n"; ##
if ($verbose){ print $log; }
if ($auto){ $autoGen.="#".$log; }
addWidget(["mb",$bid++, $1, "menuhead", undef]);
}
elsif($line=~/^\-{2}([A-z0-9].*)\;radio/i){
$log= "Menu $1 as radio found, calls function &menu$bid \n";##
if ($verbose){ print $log; }
if ($auto){ $autoGen.="#".$log.makeSub("menu$bid","Menu with label $1"); }
addWidget(["mb",$bid, $1, "radio", \&{"main::menu".$bid++}]);
}
elsif($line=~/^\-{2}([A-z0-9].*)\;check/i){
$log= "Menu $1 as check found, calls function &menu$bid \n";##
if ($verbose){ print $log; }
if ($auto){ $autoGen.="#".$log.makeSub("menu$bid","Menu with label $1"); }
addWidget(["mb",$bid, $1, "check", \&{"main::menu".$bid++}]);
}
elsif($lines[$l]=~/^\-{6}/){
$log= "Separator found,\n"; ##
if ($verbose){ print $log; }
if ($auto){ $autoGen.="#".$log.makeSub("menu$bid","Menu with label $1"); }
addWidget(["mb",$bid++, "", "separator",""]);
}
elsif($line=~/^\-{2}([A-z0-9].*)/i){
$log= "Menu $1 found, calls function &menu$bid \n";##
if ($verbose){ print $log; }
if ($auto){ $autoGen.="#".$log.makeSub("menu$bid","Menu with label $1"); }
}
addWidget(["mb",$bid, $1, "normal", \&{"main::menu".$bid++}]);
}
elsif($line=~/^\-{3}([A-z0-9].*)/i){
$log= "SubMenu $1 found\n";##
}
}
if ($auto){
open(my $fh, '>', 'autogen.txt');
print $fh $autoGen;
close $fh;
}
sub makeSub{
my ($subName,$trigger)=@_;
return "sub $subName {#called using $trigger\n # subroutione code goes here\n };\n\n";
}
sub debugGui{ # for debugging parsing...insert after deletion of discovered content
my @gui=shift;
foreach my $deb (@gui){
last if ($deb eq "");
print $deb."\n";
}
}
}
1;
=head1 GUIDeFATE
GUIDeFATE - Graphical User Interface Design From A Text Editor
=head1 SYNOPSIS
use GUIDeFATE qw<$frame>;
my $window=<<END;
+------------------------+
|T Calculator |
+M-----------------------+
| [ ] |
| { V }{ % }{ C }{AC } |
| { 1 }{ 2 }{ 3 }{ + } |
| { 4 }{ 5 }{ 6 }{ - } |
| { 7 }{ 8 }{ 9 }{ * } |
| { . }{ 0 }{ = }{ / } |
| made with GUIdeFATE |
| and happy things |
+------------------------+
END
my $gui=GUIDeFATE->new($window,[$backend],[$assist]); # API changed at version 0.06
# $backend is one of Wx(Default), Tk or Gtk
# $assist is one or "q" (quiet, default), "v" (verbose) or "a" for Autogenerate
$frame=$gui->getFrame||$gui;
$gui->MainLoop;
=head1 REQUIRES
Perl5.8.8, Exporter, Wx, Wx::Perl::Imagick (for Wx interface)
( run in 0.427 second using v1.01-cache-2.11-cpan-63c85eba8c4 )