summaryrefslogtreecommitdiffstats
path: root/perl-install/standalone/draksplash
diff options
context:
space:
mode:
Diffstat (limited to 'perl-install/standalone/draksplash')
-rwxr-xr-xperl-install/standalone/draksplash559
1 files changed, 0 insertions, 559 deletions
diff --git a/perl-install/standalone/draksplash b/perl-install/standalone/draksplash
deleted file mode 100755
index 405f3821d..000000000
--- a/perl-install/standalone/draksplash
+++ /dev/null
@@ -1,559 +0,0 @@
-#!/usr/bin/perl
-
-use strict;
-use lib qw(/usr/lib/libDrakX);
-use standalone;
-use common;
-use ugtk2 qw(:helpers :wrappers :create);
-use interactive;
-
-#- convenience variables for true and false
-my $true = 1;
-
-
-my $in = 'interactive'->vnew('su');
-
-my $window = ugtk2->new('DrakSplash');
-$window->{rwindow}->signal_connect(delete_event => \&CloseAppWindow);
-
-#- verification of package image magik
-unless ($in->do_pkgs->is_installed('ImageMagick')) {
- $in->ask_okcancel(N("Error"), N("package 'ImageMagick' is required to be able to complete configuration.\nClick \"Ok\" to install 'ImageMagick' or \"Cancel\" to quit"))
- and $in->do_pkgs->install('ImageMagick')
- or &CloseAppWindow;
-}
-
-#- application vars
-my $tmp_path = '/tmp/draksplash/';
-! -d $tmp_path and mkdir($tmp_path);
-my $thm_path = '/usr/share/bootsplash/themes/';
-my $thm_conf_path = '/etc/bootsplash/themes/';
-
-my $prev_window;
-my $pix;
-
-my $boot_conf_path = '/etc/bootsplash/themes/';
-my %font_size = ('h' =>16, 'w' =>8);
-my %theme = ('name' => 'new_theme',
- 'res' => {
- 'res' => '800x600',
- 'h' => '600',
- 'w' => '800',
- },
- 'boot_conf' => {
- 'tx' => 0 ,
- 'ty' => 0 ,
- 'tw' => 0 ,
- 'th' => 0 ,
- 'px' => 0 ,
- 'py' => 0 ,
- 'pw' => 0 ,
- 'ph' => 0 ,
- 'pc' => '0x21459d',
- },
- 'boot_img' => ''
- );
-
-my %scale_size = ('tx' => ($theme{res}{w} / $font_size{w}),
- 'ty' => ($theme{res}{h} / $font_size{h}),
- 'tw' => ($theme{res}{w} / $font_size{w}),
- 'th' => ($theme{res}{h} / $font_size{h}),
- 'px' => $theme{res}{w},
- 'py' => $theme{res}{h},
- 'pw' => $theme{res}{w},
- 'ph' => $theme{res}{h},
- );
-
-my %first = ('frame' => new Gtk2::Frame(N("first step creation")),
- 'widget' => {
- 'label' => {
- 'res' => N("final resolution"),
- 'file' => N("choose image file"),
- 'name' => N("Theme name")
- },
- 'button' => {
- #'boot_conf' => N("Make bootsplash step 2"),
- #'lilo_conf' => N("Go to lilosplash configuration"),
- 'file' => N("Browse"),
- },
- 'combo' => {
- 'res' => ['800x600', '1024x768', '1280x1024'],
- 'name' => [ $theme{name} , &giv_exist_thm ]
- }
- },
- 'pos' => [ 'name', 'res', 'file', 'boot_conf', #'save', #'kill'
- ],
- );
-my %boot_conf_frame = ('frame' => new Gtk2::Frame(N("Configure bootsplash picture")),
- 'widget' => {
- 'label' => {
- 'tx' => N("x coordinate of text box\nin number of characters"),
- 'ty' => N("y coordinate of text box\nin number of characters"),
- 'tw' => N("text width"),
- 'th' => N("text box height"),
- 'px' => N("the progress bar x coordinate\nof its upper left corner"),
- 'py' => N("the progress bar y coordinate\nof its upper left corner"),
- 'pw' => N("the width of the progress bar"),
- 'ph' => N("the height of the progress bar"),
- 'pc' => N("the color of the progress bar")
- },
- #- must set scale values to true to get them created by mk_frame
- 'scale' => {
- 'tx' => 1,
- 'ty' => 1,
- 'tw' => 1,
- 'th' => 1,
- 'px' => 1,
- 'py' => 1,
- 'pw' => 1,
- 'ph' => 1,
- },
- 'button' => {
- #'annul' => N("Go back"),
- 'prev' => N("Preview"),
- 'kill' => N("Quit"),
- 'save' => N("Save theme"),
- 'pc' => N("Choose color"),
- },
- 'check' => {
- 'logo' => N("Display logo on Console"),
- 'quiet' => N("Make kernel message quiet by default"),
- },
- },
- 'pos' => [ 'tx 1' ,
- 'ty 1' ,
- 'tw 1' ,
- 'th 1' ,
- 'px 1' ,
- 'py 1' ,
- 'pw 1' ,
- 'ph 1' ,
- 'pc' ,
- 'logo',
- 'quiet',
- 'annul',
- 'prev',
- 'save' ,
- 'kill',
- ],
- );
-#- var action is used to hide/show the correct frame
-my @action_frame = (\%boot_conf_frame , \%first);
-my $VB2 = new Gtk2::VBox(0,5);
-my $first_vbox = new Gtk2::VBox(0,5);
-
-&mk_frame($VB2, \%first);
-#****************************- Signal event actions
-#- change resolution
-$first{widgets}{combo}{res}->entry->signal_connect(changed => sub {
- $theme{res}{res} = $first{widgets}{combo}{res}->entry->get_text;
- ($theme{res}{w}, $theme{res}{h}) = $theme{res}{res} =~ /([^x]+)x([^x]+)/;
- &set_scale_size;
- $boot_conf_frame{frame}->destroy;
- $boot_conf_frame{frame} = new Gtk2::Frame(N("Configure bootsplash picture"));
- &make_boot_frame;
- $first_vbox->add($boot_conf_frame{frame});
- member($theme{name}, &giv_exist_thm) and &thm_in_this_res and &get_this_thm_res_conf or $in->ask_warn(N("Notice"), N("This theme does not yet have a bootsplash in %s !", $theme{res}{res}));
- });
-#- go to bootsplash configuration step 2
-#$first{widgets}{button}{boot_conf}->signal_connect(clicked => sub{show_act(\%boot_conf_frame) } );
-#- image file selection for new theme
-$first{widgets}{button}{file}->signal_connect(clicked => sub {
- my $file_dialog = gtkset_modal(Gtk2::FileSelection->new(N("choose image")), 1);
- $file_dialog->set_transient_for($window->{rwindow});
-
- $file_dialog->set_filename($first{widgets}{label}{file}->get_text ne N("choose image file") ? $first{widgets}{label}{file}->get_text : '~/');
- $file_dialog->cancel_button->signal_connect(clicked => sub { $file_dialog->destroy });
- $file_dialog->ok_button->signal_connect(clicked => sub { $first{widgets}{label}{file}->set_text($file_dialog->get_filename); $file_dialog->destroy });
- $file_dialog->show;
-});
-#- changing theme name
-$first{widgets}{combo}{name}->entry->signal_connect(changed => sub { &get_this_thm_res_conf; $theme{name} = $first{widgets}{combo}{name}->entry->get_text });
-#**************************************************
-
-
-$first_vbox->add($first{frame});
-$first_vbox->add($boot_conf_frame{frame});
-&make_boot_frame;
-
-# set window attributes and show it
-
-unless ($::isEmbedded) {
- $window->{rwindow}->set_border_width(5);
- $window->{window}->add($first_vbox);
- $window->{rwindow}->set_position('center');
- $window->{rwindow}->show_all();
-#&show_act(\%first);
-}
-
-# Gtk event loop
-$window->main;
-
-# Should never get here
-ugtk2->exit(0);
-
-### Callback function to close the window
-sub CloseAppWindow {
- ugtk2->exit(0);
-}
-
-#- ====## used funtions ##=====
-
-#- Desc => write config file for boot theme and copy image in the right location
-sub write_boot_thm {
- my $_w = $in->wait_message('', N("saving Bootsplash theme..."));
- &set_thm_values;
- my $logo = $boot_conf_frame{widgets}{check}{logo}->get_active ? 'yes' : 'no';
- my $quiet = $boot_conf_frame{widgets}{check}{quiet}->get_active ? 'yes' : 'no';
- my $globalconf_file = $thm_conf_path.$theme{name}.'/global.config';
- my $cfg_file = $thm_conf_path.$theme{name}.'/cfg/bootsplash-'.$theme{res}{res}.'.cfg';
- #- verify all dir exists or create them
- -d $thm_conf_path.$theme{name}
- or mkdir($thm_conf_path.$theme{name});
- -d $thm_conf_path.$theme{name}.'/cfg'
- or mkdir($thm_conf_path.$theme{name}.'/cfg');
- -d $thm_path.$theme{name}
- or mkdir($thm_path.$theme{name});
- -d $thm_path.$theme{name}.'/images/'
- or mkdir($thm_path.$theme{name}.'/images/');
- #- copy image to dest by convert
- system('convert -scale '.$theme{res}{res} . ' ' . $first{widgets}{label}{file}->get.' '.$thm_path.$theme{name}.'/images/bootsplash-'.$theme{res}{res}.'.jpg');
- system('/usr/share/bootsplash/scripts/rewritejpeg '.$thm_path.$theme{name}.'/images/bootsplash-'.$theme{res}{res}.'.jpg');
- #- write conf files
- my $cfg_cont = '# This is the configuration file for the '.$theme{res}{res}.' bootsplash picture
-# this file is necessary to specify the coordinates of the text box on the
-# splash screen.
-
-# tx is the x coordinate of the text window in characters. default is 24
-# multiply width font width for coordinate in pixels.
-tx='.$theme{boot_conf}{tx}.'
-
-# ty is the y coordinate of the text window in characters. default is 14
-ty='.$theme{boot_conf}{ty}.'
-
-# tw is the width of the text window in characters. default is 130
-# note: this should at least be 80 as on the standard linux text console
-tw='.$theme{boot_conf}{tw}.'
-
-# th is the height of the text window in characters. default is 44
-# NOTE: this should at least be 25 as on the standard linux text console
-th='.$theme{boot_conf}{th}.'
-
-# px is the progress bar x coordinate of its upper left corner
-px='.$theme{boot_conf}{px}.'
-
-# py is the progress bar y coordinate of its upper left corner
-py='.$theme{boot_conf}{py}.'
-
-# pw is the with of the progress bar
-pw='.$theme{boot_conf}{pw}.'
-
-# ph is the height of the progress bar
-ph='.$theme{boot_conf}{ph}.'
-
-# pc is the color of the progress bar
-pc='.$theme{boot_conf}{pc}.''
-;
- my $globalconf_cont = '# Display logo on console.
-LOGO_CONSOLE='.$logo.'
-
-# Make kernel message quiet by default.
-QUIET='.$quiet
-;
- output($globalconf_file, $globalconf_cont);
- output($cfg_file,$cfg_cont);
-}
-
-
-#- Desc => read the current bootsplash theme configuration if exist
-sub get_this_thm_res_conf {
- member($first{widgets}{combo}{name}->entry->get_text , &giv_exist_thm)
- and $theme{name} = $first{widgets}{combo}{name}->entry->get_text
- and &thm_in_this_res(1)
- and &read_boot_conf;
- -f $thm_path.$theme{name}."/images/bootsplash-".$theme{res}{res}.".jpg"
- and $first{widgets}{label}{file}->set_text($thm_path.$theme{name}."/images/bootsplash-".$theme{res}{res}.".jpg");
- return 1;
-}
-
-sub read_boot_conf {
- chdir($thm_conf_path);
- my $line;
- if (-f $theme{name}.'/cfg/bootsplash-'.$theme{res}{res}.'.cfg') {
- local *CFG;
- open CFG , $theme{name}.'/cfg/bootsplash-'.$theme{res}{res}.'.cfg';
- while ($line = <CFG>) {
- $line =~ m/^([a-z][a-z])=([^\n]+)/
- and $theme{boot_conf}{$1} = $2;
- }
- close CFG;
- &set_scale_values;
- } else {
- return 0;
- }
-}
-
-my %adj;
-sub set_scale_values {
- foreach (keys %{$theme{boot_conf}}) {
- $adj{$_} and $adj{$_}->set_value($theme{boot_conf}{$_});
- }
-}
-
-#- Desc => check if this theme is available in the current resolution else
-#- change the current resolution or display a ask_warn box
-#- Args => ø
-#- return=> (bool)
-sub thm_in_this_res {
- my ($check_res) = @_;
- (-f $thm_path.$theme{name}."/images/bootsplash-".$theme{res}{res}.".jpg") ? return 1 : $check_res == 1 ? return &which_res_exist : return 0;
-}
-
-sub which_res_exist {
- chdir($thm_path.$theme{name}."/images/");
- my $is_ok = 0;
- foreach (@{$first{widget}{combo}{res}}) {
- -f "bootsplash-$_.jpg"
- and $is_ok = 1
- and $first{widgets}{combo}{res}->entry->set_text($_)
- and last;
-
- }
- $is_ok == 1 or $in->ask_warn(N("Notice"), N("This theme does not yet have a bootsplash in %s !", $theme{res}{res})) and return 0;
- return 1;
-}
-
-#- Desc => retrieve all installed theme
-#- Args => ø
-#- Return=> @arr of available theme
-sub giv_exist_thm {
- chdir($thm_path);
- my @thms_dirs;
- foreach (glob("*")) {
- -d $_ && m/^[^.]/
- and push @thms_dirs, $_;
- }
- return @thms_dirs;
-}
-
-#- Desc => show only the right frame
-#- Args => action(str)
-#- Return=> (bool)
-sub show_act {
-# my ($action) = @_;
-# foreach (@action_frame){
-# if($_ == $action){
-# $_->{frame}->show_all ;
-# }else{
-# $_->{frame}->hide;
-# }
-# }
-}
-
-#- Desc => just add tooltips
-#- Args => name of widget(str) and frame to work on it (\%hash)
-sub tool_tip {
- my ($name , $ref) = @_;
- foreach (keys %{$ref->{widget}}) {
- $_ eq 'tooltip' and next;
- if ($ref->{widget}{$_}{$name}) {
- ! $adj{$name.'_tip'} and $adj{$name.'_tip'} = new Gtk2::Tooltips();
- $adj{$name.'_tip'}->set_tip($ref->{widgets}{$_}{$name}, $ref->{widget}{tooltip}{$name}, '');
- }
- }
-}
-
-my %hboxes;
-
-#- Desc => just prepare widgets for a fram hash
-#- Args => $box(a Vbox widget to contain all widgets), \%frame (hash with complete definition of the frame)
-#- Return=> all hash{widgets} are created and packed in $box
-sub mk_frame {
- my ($box , $ref) = @_;
- foreach my $pos (@{$ref->{pos}}) {
- $pos =~ m/^(\w+)(\s+)?(\w+)?$/;
- my $key = $1.'hb';
- #- open a new hbox
- $hboxes{$key} = new Gtk2::HBox($3 ? 1 : 0, 5);
- #- look for label
- $ref->{widget}{label}{$1}
- and $ref->{widgets}{label}{$1} = new Gtk2::Label($ref->{widget}{label}{$1})
- and $hboxes{$key}->add($ref->{widgets}{label}{$1});
- #- look for scale
- $ref->{widget}{scale}{$1}
- and $ref->{widgets}{scale}{$1} = new Gtk2::HScale($adj{$1} = new Gtk2::Adjustment(0, 0, $scale_size{$1}, 1, 10, 0))
- and $hboxes{$key}->add($ref->{widgets}{scale}{$1})
- and $ref->{widgets}{scale}{$1}->set_digits(0);
- $adj{$1} and $adj{$1}->set_value($theme{boot_conf}{$1});
- #- look for combo
- my @popdown;
- $ref->{widget}{combo}{$1}
- and @popdown = @{$ref->{widget}{combo}{$1}}
- and $ref->{widgets}{combo}{$1} = new Gtk2::Combo
- and $hboxes{$key}->add($ref->{widgets}{combo}{$1})
- and $ref->{widgets}{combo}{$1}->set_popdown_strings(@popdown);
- #- look for checkbox
- $ref->{widget}{check}{$1}
- and $ref->{widgets}{check}{$1} = new Gtk2::CheckButton($ref->{widget}{check}{$1})
- and $hboxes{$key}->add($ref->{widgets}{check}{$1})
- and $ref->{widgets}{check}{$1}->set_active(1);
- #- look for button
- $ref->{widget}{button}{$1}
- and $ref->{widgets}{button}{$1} = new Gtk2::Button($ref->{widget}{button}{$1})
- and $hboxes{$key}->add($ref->{widgets}{button}{$1});
- #- look for tooltips
- $ref->{widget}{tooltip}{$1} and &tool_tip($1, \%{$ref});
- $box->add($hboxes{$key});
- }
- $ref->{frame}->add($box);
-}
-
-#- Desc => take a decimal value between 0 to 255 and return the corresponding hexadecimal value
-sub dec2hex {
- my ($dec) = @_;
- my @dec_hex = (0..9, 'A', 'B', 'C', 'D', 'E', 'F');
- my $int;
- my $float;
- $dec = $dec/16;
- $int = int($dec);
- $float = $dec_hex[int(($dec-$int)*16)];
- $int = $dec_hex[$int];
-
- return "$int$float";
-}
-
-#- Desc => prepare and set all signal_connect for boot_frame widget
-sub make_boot_frame {
- my $VB = new Gtk2::VBox(0,5);
- &mk_frame($VB, \%boot_conf_frame);
- #- open a color choose box
- $boot_conf_frame{widgets}{button}{pc}->signal_connect(clicked => sub {
- my $color = gtkshow(Gtk2::ColorSelectionDialog->new(N("ProgressBar color selection")));
- $theme{boot_conf}{pc} =~ m/0x(.{2})(.{2})(.{2})/;
- my @rgb = map { hex($_)/255 } ($1 ,$2, $3);
- $color->colorsel->set_current_color(Gtk2::Gdk::Color->new(@rgb));
- $color->cancel_button->signal_connect(clicked => sub { $color->destroy });
- $color->ok_button->signal_connect(clicked => sub {
- my $colour = $color->colorsel->get_current_color();
- @rgb = map { dec2hex($_*255) } ($colour->red, $colour->green, $colour->blue);
- $theme{boot_conf}{pc} = "0x$rgb[0]$rgb[1]$rgb[2]";
- $color->destroy;
- });
- });
- #- quit button
- $boot_conf_frame{widgets}{button}{kill}->signal_connect(clicked => \&CloseAppWindow);
- $boot_conf_frame{widgets}{button}{save}->signal_connect(clicked => sub { &write_boot_thm });
- #- return to first screen
- #$boot_conf_frame{widgets}{button}{annul}->signal_connect(clicked => sub { show_act( \%first ) } );
- #- made a preview
- $boot_conf_frame{widgets}{button}{prev}->signal_connect(clicked => sub {
- unless (-f $first{widgets}{label}{file}->get) {
- $in->ask_warn(N("Notice"), N("You must choose an image file first!"));
- return 0;
- }
- #- calculation of the 2 angle of text box and progress bar
- &set_thm_values;
- my $_w = $in->wait_message('', N("Generating preview ..."));
- my $txt_tl_x = $theme{boot_conf}{tx}*$font_size{w};
- my $txt_tl_y = $theme{boot_conf}{ty}*$font_size{h};
- my $txt_width = $theme{boot_conf}{tw}*$font_size{w};
- my $txt_height = $theme{boot_conf}{th}*$font_size{h};
- my $prog_tl_x = $theme{boot_conf}{px};
- my $prog_tl_y = $theme{boot_conf}{py};
- my $prog_width = $theme{boot_conf}{pw};
- my $prog_height = $theme{boot_conf}{ph};
- &show_prev($first{widgets}{label}{file}->get,$txt_tl_x,$txt_tl_y,$txt_width,$txt_height,$prog_tl_x,$prog_tl_y,$prog_width,$prog_height);
- });
- $boot_conf_frame{frame}->show_all;
-# - check scales values are possibly correct
- #&set_scale_values;
-
- foreach my $k (keys %{$theme{boot_conf}}) {
- $k =~ m/[tp][hwyx]/
- and $adj{$k}->signal_connect(value_changed => sub { &check_boot_scales($k) });
- }
-}
-
-#- Desc => set theme values from user entry (scales widgets)
-sub set_thm_values {
- foreach (keys %{$theme{boot_conf}}) {
- m/[tp][hwyx]/
- and $theme{boot_conf}{$_} = int($adj{$_}->get_value);
- }
-}
-
-
-my ($prev_pic, $prev_pix, $prev_canvas);
-
-#- Desc => destroy properly all widget of preview window
-sub kill_preview {
- $prev_window->destroy; undef($prev_window);
- $prev_canvas->destroy; undef($prev_canvas);
- undef($prev_pic);
- undef($prev_pix);
-}
-#- Desc => create a new window with a preview of splash screen
-#- Args => $file (str) full path to preview file
-sub show_prev {
- my ($file,$txt_tl_x,$txt_tl_y,$txt_width,$txt_height,$prog_tl_x,$prog_tl_y,$prog_width, $prog_height) = @_;
- $prev_window
- or $prev_window = new Gtk2::Window('toplevel') and $prev_window->set_policy(0, 1, 1);
-#-PO First %s is theme name, second %s (in parenthesis) is resolution
- $prev_window->set_title(N("%s BootSplash (%s) preview", $theme{name}, $theme{res}{res}));
- $prev_pic = gtkcreate_pixbuf($file);
- $prev_pic->scale_simple($theme{res}{w}, $theme{res}{h},0);
- $prev_pix = $prev_pic->render_pixmap_and_mask($prev_pic);
- $prev_canvas and $prev_canvas->isa('Gtk2::Widget')
- or $prev_canvas = new Gtk2::DrawingArea() and $prev_window->add($prev_canvas);
- $prev_canvas->set_size_request($theme{res}{w}, $theme{res}{h});
- $prev_canvas->signal_connect(expose_event => sub {
- $prev_canvas->window->draw_pixmap($prev_canvas->style->bg_gc('normal'),$prev_pix,0,0,0,0, $theme{res}{w}, $theme{res}{h});
- $prev_canvas->window->draw_rectangle($prev_canvas->style->black_gc, $true,$txt_tl_x, $txt_tl_y,$txt_width,$txt_height);
- $prev_canvas->window->draw_rectangle($prev_canvas->style->black_gc, $true, $prog_tl_x,$prog_tl_y,$prog_width, $prog_height);
- });
- $prev_window->signal_connect(delete_event => \&kill_preview);
- $prev_window->show_all;
-
-}
-
-#- Desc => define the max size of boot's scales
-sub set_scale_size {
- %scale_size = ('tx' => ($theme{res}{w} / $font_size{w}),
- 'ty' => ($theme{res}{h} / $font_size{h}),
- 'tw' => ($theme{res}{w} / $font_size{w}),
- 'th' => ($theme{res}{h} / $font_size{h}),
- 'px' => $theme{res}{w},
- 'py' => $theme{res}{h},
- 'pw' => $theme{res}{w},
- 'ph' => $theme{res}{h},
- );
-}
-
-#- Desc => verify that boot's scales widgets are correctly set
-#- Args => $obj (str) is the scale to check value
-
-sub check_boot_scales {
- my ($obj) = @_;
- my $tw = $adj{tw}->get_value;
- my $tx = $adj{tx}->get_value;
- my $th = $adj{th}->get_value;
- my $ty = $adj{ty}->get_value;
- my $pw = $adj{pw}->get_value;
- my $ph = $adj{ph}->get_value;
- my $px = $adj{px}->get_value;
- my $py = $adj{py}->get_value;
- my $max_x = $scale_size{tw};
- my $max_y = $scale_size{th};
- my $max_xres = $theme{res}{w};
- my $max_yres = $theme{res}{h};
-
- $obj eq 'tw' and $max_x < $tw + $tx and $adj{tx}->set_value($max_x - $tw);
- $obj eq 'tx' and $max_x < $tw + $tx and $adj{tw}->set_value($max_x - $tx);
- $obj eq 'th' and $max_y < $th + $ty and $adj{ty}->set_value($max_y - $th);
- $obj eq 'ty' and $max_y < $th + $ty and $adj{th}->set_value($max_y - $ty);
- $obj eq 'pw' and $max_xres < $pw + $px and $adj{px}->set_value($max_xres - $pw);
- $obj eq 'px' and $max_xres < $pw + $px and $adj{pw}->set_value($max_xres - $px);
- $obj eq 'ph' and $max_yres < $ph + $py and $adj{py}->set_value($max_yres - $ph);
- $obj eq 'py' and $max_yres < $ph + $py and $adj{ph}->set_value($max_yres - $py);
-
-}