App-XUL
view release on metacpan or search on metacpan
lib/App/XUL.pm view on Meta::CPAN
my $name = $self->{'name'};
my $tmpdir = create_structured_tree(
$name => {
'start_macosx.pl' => [$self->_get_file_startpl('chrome','macosx')],
'start_win.pl' => [$self->_get_file_startpl('chrome','win')],
'start_linux.pl' => [$self->_get_file_startpl('chrome','linux')],
'chrome.manifest' => ['manifest chrome/chrome.manifest'."\n"],
'application.ini' => [$self->_get_file_macosx_appini()],
#'MyApp.icns' => [],
'chrome' => {
# for older XUL.framework's we need the chrome.manifest here!
'chrome.manifest' => [$self->_get_file_macosx_chromemanifest()],
'content' => {
#'AppXUL.js' => [],
#'AppXULServer.js' => [],
$self->_get_file_macosx_xulfiles(),
#'main.xul' => [$self->_get_file_macosx_mainxul()],
},
},
'defaults' => {
'preferences' => {
'prefs.js' => [$self->_get_file_macosx_prefs()],
},
},
'perl' => {
'server' => {
#'server.pl' => [$self->_get_file_macosx_serverpl()],
},
'modules' => {
'Eventhandlers.pm' => [$self->_get_file_macosx_eventhandlers()],
'App' => {
'XUL' => {
#'XML' => [],
#'Object' => [],
},
},
},
},
'extensions' => {},
'updates' => {
'0' => {},
},
}
);
# copy misc files into tmpdir
fcopy($utilspath.'/AppXUL.js',
$tmpdir->base().'/'.$name.'/chrome/content/AppXUL.js');
fcopy($utilspath.'/server.pl',
$tmpdir->base().'/'.$name.'/perl/server/server.pl');
fcopy($utilspath.'/../lib/App/XUL/XML.pm',
$tmpdir->base().'/'.$name.'/perl/modules/App/XUL/XML.pm');
fcopy($utilspath.'/../lib/App/XUL/Object.pm',
$tmpdir->base().'/'.$name.'/perl/modules/App/XUL/Object.pm');
# chmod certain files
chmod(0755, $tmpdir->base().'/'.$name.'/start_macosx.pl');
chmod(0755, $tmpdir->base().'/'.$name.'/start_win.pl');
chmod(0755, $tmpdir->base().'/'.$name.'/start_linux.pl');
# move tmpdir to final destination
rename($tmpdir->base().'/'.$name, $path);
}
##############################################################################
elsif ($os eq 'macosx') {
my $name = $self->{'name'};
my $tmpdir = create_structured_tree(
$name.'.app' => {
'Contents' => {
'Info.plist' => [$self->_get_file_maxosx_infoplist()],
'Frameworks' => {
#'XUL.framework' => {},
},
'MacOS' => {
'start.pl' => [$self->_get_file_startpl('macosx')],
},
'Resources' => {
'chrome.manifest' => ['manifest chrome/chrome.manifest'."\n"],
'application.ini' => [$self->_get_file_macosx_appini()],
#'MyApp.icns' => [],
'chrome' => {
# for older XUL.framework's we need the chrome.manifest here!
'chrome.manifest' => [$self->_get_file_macosx_chromemanifest()],
'content' => {
#'AppXUL.js' => [],
#'AppXULServer.js' => [],
$self->_get_file_macosx_xulfiles(),
#'main.xul' => [$self->_get_file_macosx_mainxul()],
},
},
'defaults' => {
'preferences' => {
'prefs.js' => [$self->_get_file_macosx_prefs()],
},
},
'perl' => {
'server' => {
#'server.pl' => [$self->_get_file_macosx_serverpl()],
},
'modules' => {
'Eventhandlers.pm' => [$self->_get_file_macosx_eventhandlers()],
'App' => {
'XUL' => {
#'XML' => [],
#'Object' => [],
},
},
},
},
'extensions' => {},
'updates' => {
'0' => {},
},
},
}
}
);
# copy misc files into tmpdir
die "Error: no XUL.framework found in /Library/Frameworks - please install XUL framework from mozilla.org\n"
unless -d '/Library/Frameworks/XUL.framework';
dircopy('/Library/Frameworks/XUL.framework',
$tmpdir->base().'/'.$name.'.app/Contents/Frameworks/XUL.framework');
fcopy($utilspath.'/Appicon.icns',
$tmpdir->base().'/'.$name.'.app/Contents/Resources/'.$name.'.icns');
fcopy($utilspath.'/AppXUL.js',
$tmpdir->base().'/'.$name.'.app/Contents/Resources/chrome/content/AppXUL.js');
#fcopy('../../misc/AppXULServer.js',
# $tmpdir->base().'/'.$name.'.app/Contents/Resources/chrome/content/AppXULServer.js');
fcopy($utilspath.'/server.pl',
$tmpdir->base().'/'.$name.'.app/Contents/Resources/perl/server/server.pl');
fcopy($utilspath.'/../lib/App/XUL/XML.pm',
$tmpdir->base().'/'.$name.'.app/Contents/Resources/perl/modules/App/XUL/XML.pm');
fcopy($utilspath.'/../lib/App/XUL/Object.pm',
$tmpdir->base().'/'.$name.'.app/Contents/Resources/perl/modules/App/XUL/Object.pm');
# chmod certain files
chmod(0755, $tmpdir->base().'/'.$name.'.app/Contents/MacOS/start.pl');
# move tmpdir to final destination
rename($tmpdir->base().'/'.$name.'.app', $path);
}
else {
die "Error: os '$os' not implemented yet\n";
}
}
################################################################################
sub _get_file_macosx_eventhandlers
{
my ($self) = @_;
my $eventhandlers = '';
foreach my $name (keys %{$self->{'bindings'}}) {
$eventhandlers .= "'".$name."' => \n".Dumper($self->{'bindings'}->{$name}).",\n";
}
return
'package Eventhandlers;'."\n".
'use App::XUL::XML;'."\n".
'$App::XUL::XML::RunInsideServer = 1;'."\n".
'our $AUTOLOAD;'."\n".
'sub AUTOLOAD {'."\n".
' $App::XUL::XML::AUTOLOAD = $AUTOLOAD;'."\n".
' return App::XUL::XML::AUTOLOAD(@_);'."\n".
'}'."\n".
'sub get {'."\n".
' return {'."\n".
$eventhandlers.
' };'."\n".
'}'."\n".
'1;'."\n";
}
sub _get_file_macosx_prefs
{
my ($self) = @_;
return <<EOFSRC
pref("toolkit.defaultChromeURI", "chrome://$self->{'name'}/content/main.xul");
/* debugging prefs */
pref("browser.dom.window.dump.enabled", true);
pref("javascript.options.showInConsole", true);
pref("javascript.options.strict", true);
pref("nglayout.debug.disable_xul_cache", true);
pref("nglayout.debug.disable_xul_fastload", true);
EOFSRC
}
sub _get_file_macosx_xulfiles
{
my ($self) = @_;
my @files = ();
my $w = 0;
foreach my $window_xml (@{$self->{'windows'}}) {
my $xml =
'<?xml version="1.0"?>'."\n".
'<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>'."\n".
$window_xml;
( run in 0.840 second using v1.01-cache-2.11-cpan-f56aa216473 )