summaryrefslogtreecommitdiffstats
path: root/perl-install/install_steps_gtk.pm
diff options
context:
space:
mode:
Diffstat (limited to 'perl-install/install_steps_gtk.pm')
-rw-r--r--perl-install/install_steps_gtk.pm703
1 files changed, 0 insertions, 703 deletions
diff --git a/perl-install/install_steps_gtk.pm b/perl-install/install_steps_gtk.pm
deleted file mode 100644
index 5bebf5c84..000000000
--- a/perl-install/install_steps_gtk.pm
+++ /dev/null
@@ -1,703 +0,0 @@
-package install_steps_gtk; # $Id$
-
-use diagnostics;
-use strict;
-use vars qw(@ISA);
-
-@ISA = qw(install_steps_interactive interactive_gtk);
-
-#-######################################################################################
-#- misc imports
-#-######################################################################################
-use install_steps_interactive;
-use interactive_gtk;
-use common;
-use my_gtk qw(:helpers :wrappers);
-use Gtk;
-use devices;
-use modules;
-use install_gtk;
-use install_any;
-use mouse;
-use help;
-use log;
-
-#-######################################################################################
-#- In/Out Steps Functions
-#-######################################################################################
-sub new($$) {
- my ($type, $o) = @_;
-
- my $old = $SIG{__DIE__};
- $SIG{__DIE__} = sub { $_[0] !~ /my_gtk\.pm/ and goto $old };
-
- $ENV{DISPLAY} ||= $o->{display} || ":0";
- unless ($::testing) {
- if ($ENV{DISPLAY} eq ":0" && !$::live) {
- my $f = "/tmp/Xconf";
- install_gtk::createXconf($f, @{$o->{mouse}}{"XMOUSETYPE", "device"}, $o->{wacom}[0]);
- devices::make("/dev/kbd");
-
- local (*T1, *T2);
- open T1, ">/dev/tty5";
- open T2, ">/dev/tty6";
-
- my $launchX = sub {
- my $ok = 1;
- my $xpmac_opts = cat_("/proc/cmdline");
- unless (-d "/var/log" ) { mkdir("/var/log"); }
- local $SIG{CHLD} = sub { $ok = 0 if waitpid(-1, c::WNOHANG()) > 0 };
- unless (fork) {
- exec $_[0], (arch() =~ /^sparc/ || arch() eq "ppc" ? () : ("-kb")), "-dpms","-s" ,"240",
- ($_[0] =~ /Xpmac/ ? $xpmac_opts !~ /ofonly/ ? ("-mode", "17", "-depth", "32") : ("-mach64"):()),
- ($_[0] =~ /Xsun/ || $_[0] =~ /Xpmac/ ? ("-fp", "/usr/X11R6/lib/X11/fonts:unscaled") :
- ("-allowMouseOpenFail", "-xf86config", $f)) or exit 1;
- }
- foreach (1..60) {
- sleep 1;
- log::l("Server died"), return 0 if !$ok;
- if (c::Xtest($ENV{DISPLAY})) {
- fork || exec("aewm-drakx") || exec("true");
- return 1;
- }
- }
- log::l("Timeout!!");
- 0;
- };
- my @servers = qw(FBDev VGA16); #-)
- if (arch() eq "alpha") {
- require Xconfigurator;
- my $card = Xconfigurator::cardConfigurationAuto();
- Xconfigurator::updateCardAccordingName($card, $card->{type}) if $card && $card->{type};
- @servers = $card->{server} || "TGA";
- #-@servers = qw(SVGA 3DLabs TGA)
- } elsif (arch() =~ /^sparc/) {
- local $_ = cat_("/proc/fb");
- if (/Mach64/) { @servers = qw(Mach64) }
- elsif (/Permedia2/) { @servers = qw(3DLabs) }
- else { @servers = qw(Xsun24) }
- } elsif (arch() =~ /ia64/) {
- @servers= 'XFree86';
- } elsif (arch() eq "ppc") {
- @servers = qw(Xpmac);
- }
-
- foreach (@servers) {
- log::l("Trying with server $_");
- my $dir = "/usr/X11R6/bin";
- my $prog = /Xsun|Xpmac|XFree86/ ? $_ : "XF86_$_";
- unless (-x "$dir/$prog") {
- unlink $_ foreach glob_("$dir/X*");
- install_any::getAndSaveFile("Mandrake/mdkinst$dir/$prog", "$dir/$prog") or die "failed to get server $prog: $!";
- chmod 0755, "$dir/$prog";
- }
- if (/FB/) {
- !$o->{vga16} && $o->{allowFB} or next;
-
- $o->{allowFB} = &$launchX($prog) #- keep in mind FB is used.
- and goto OK;
- } else {
- $o->{vga16} = 1 if /VGA16/;
- &$launchX($prog) and goto OK;
- }
- }
- return undef;
- }
- }
- OK:
- install_gtk::init_sizes();
- install_gtk::default_theme($o);
- install_gtk::create_logo_window($o);
-
- $my_gtk::force_center = [ $::rootwidth - $::windowwidth, $::logoheight, $::windowwidth, $::windowheight ];
-
- $o = (bless {}, ref $type || $type)->SUPER::new($o);
- $o->interactive_gtk::new;
- $o;
-}
-
-sub enteringStep {
- my ($o, $step) = @_;
-
- printf "Entering step `%s'\n", $o->{steps}{$step}{text};
- $o->SUPER::enteringStep($step);
- install_gtk::create_steps_window($o);
- install_gtk::create_help_window($o);
-}
-sub leavingStep {
- my ($o, $step) = @_;
- $o->SUPER::leavingStep($step);
-}
-
-
-sub charsetChanged {
- my ($o) = @_;
- Gtk->set_locale;
- install_gtk::install_theme($o);
- install_gtk::create_steps_window($o);
-}
-
-#-######################################################################################
-#- Steps Functions
-#-######################################################################################
-sub selectLanguage {
- my ($o, $first_time) = @_;
- $o->SUPER::selectLanguage;
-
- $o->ask_warn('',
-_("Your system is low on resources. You may have some problem installing
-Mandrake Linux. If that occurs, you can try a text install instead. For this,
-press `F1' when booting on CDROM, then enter `text'.")) if $first_time && availableRamMB() < 60; # 60MB
-
-}
-
-#------------------------------------------------------------------------------
-sub selectInstallClass1 {
- my ($o, $verif, $l, $def, $l2, $def2) = @_;
- $::live || @$l == 1 and return $o->SUPER::selectInstallClass1($verif, $l, $def, $l2, $def2);
-
- my $w = my_gtk->new(_("Install Class"));
- my $focused;
- gtkadd($w->{window},
- gtkpack($w->create_box_with_title(_("Please choose one of the following classes of installation:")),
- (my @radios = gtkradio($def, @$l)),
- gtkadd(create_vbox(),
- map { my $v = $_;
- my $b = new Gtk::Button(translate($_));
- $focused = $b if $_ eq $def2;
- gtksignal_connect($b, "clicked" => sub { $w->{retval} = $v; Gtk->main_quit });
- } @$l2)
- ));
- $focused->grab_focus if $focused;
- $w->main;
-
- mapn { $verif->($_[1]) if $_[0]->active } \@radios, $l;
- install_gtk::create_steps_window($o);
-
- $w->{retval};
-}
-
-#------------------------------------------------------------------------------
-sub selectMouse {
- my ($o, $force) = @_;
- my %old = %{$o->{mouse}};
- $o->SUPER::selectMouse($force) or return;
- my $mouse = $o->{mouse};
- $mouse->{type} eq 'none' ||
- $old{type} eq $mouse->{type} &&
- $old{name} eq $mouse->{name} &&
- $old{device} eq $mouse->{device} && !$force and return;
-
- local $my_gtk::grab = 1; #- unsure a crazy mouse don't go wild clicking everywhere
-
- while (1) {
- log::l("telling X server to use another mouse");
- eval { modules::load('serial') } if $mouse->{device} =~ /ttyS/;
-
- if (!$::testing) {
- devices::make($mouse->{device});
- symlinkf($mouse->{device}, "/dev/mouse");
- c::setMouseLive($ENV{DISPLAY}, mouse::xmouse2xId($mouse->{XMOUSETYPE}), $mouse->{nbuttons} < 3);
- }
- mouse::test_mouse_install($mouse) and return;
- $o->SUPER::selectMouse(1);
- $mouse = $o->{mouse};
- }
-}
-
-#------------------------------------------------------------------------------
-sub chooseSizeToInstall {
- my ($o, $packages, $min_size, $def_size, $max_size_, $availableC, $individual) = @_;
- my $max_size = min($max_size_, $availableC);
- my $enough = $max_size == $max_size_;
- my $percentage = int 100 * $max_size / $max_size_;
-
- #- don't ask anything if the difference between min and max is too small
- log::l("chooseSizeToInstall: min_size=$min_size, def_size=$def_size, max_size=$max_size_, available=$availableC");
- return $max_size if $min_size && $max_size / $min_size < 1.05;
-
- log::l("choosing size to install between $min_size and $max_size");
- my $w = my_gtk->new('');
- my $adj = create_adjustment(int(100 * $def_size / $max_size_), $min_size * 100 / $max_size_, $percentage);
- my $spin = gtkset_usize(new Gtk::SpinButton($adj, 0, 0), 20, 0);
- my $val;
-
- require pkgs;
- gtkadd($w->{window},
- gtkpack(new Gtk::VBox(0,20),
- _("The total size for the groups you have selected is approximately %d MB.\n", pkgs::correctSize($max_size_ / sqr(1024))) .
- ($enough ?
-_("If you wish to install less than this size,
-select the percentage of packages that you want to install.
-
-A low percentage will install only the most important packages;
-a percentage of 100%% will install all selected packages.") :
-_("You have space on your disk for only %d%% of these packages.
-
-If you wish to install less than this,
-select the percentage of packages that you want to install.
-A low percentage will install only the most important packages;
-a percentage of %d%% will install as many packages as possible.", $percentage, $percentage))
-. ($individual ? "\n\n" . _("You will be able to choose them more specifically in the next step.") : ''),
- create_packtable({},
- [ _("Percentage of packages to install") . ' ', $spin, "%", my $mb = new Gtk::Label ],
- [ undef, new Gtk::HScrollbar($adj) ],
- ),
- create_okcancel($w)
- )
- );
- $spin->signal_connect(changed => my $changed = sub {
- $val = $spin->get_value_as_int / 100 * $max_size_;
- $mb->set(sprintf("(%dMB)", pkgs::correctSize($val / sqr(1024))));
- }); &$changed();
- $spin->signal_connect(activate => sub { $w->{retval} = 1; Gtk->main_quit });
- $spin->grab_focus();
- $w->main and $val + 1; #- add a single byte (hack?) to make selection of 0 bytes ok.
-}
-
-sub reallyChooseGroups {
- my ($o, $size_to_display, $individual, $val) = @_;
-
- my $w = my_gtk->new('');
- my $tips = new Gtk::Tooltips;
- my $w_size = new Gtk::Label(&$size_to_display);
-
- my $entry = sub {
- my ($e) = @_;
- my $text = translate($o->{compssUsers}{$e}{label});
- my $help = translate($o->{compssUsers}{$e}{descr});
-
- my $file = do {
- my $f = "$ENV{SHARE_PATH}/icons/" . ($o->{compssUsers}{$e}{icons} || 'default');
- -e "$f.png" or $f .= "_section";
- -e "$f.png" or $f = "$ENV{SHARE_PATH}/icons/default_section";
- "$f.png";
- };
- my $check = Gtk::CheckButton->new($text);
- $check->set_active($val->{$e});
- $check->signal_connect(clicked => sub {
- $val->{$e} = $check->get_active;
- $w_size->set(&$size_to_display);
- });
- gtkset_tip($tips, $check, $help);
- gtkpack_(new Gtk::HBox(0,0), 0, gtkpng($file), 1, $check);
- #$check;
- };
- my $entries_in_path = sub {
- my ($path) = @_;
- translate($path), map { $entry->($_) } grep { $o->{compssUsers}{$_}{path} eq $path } @{$o->{compssUsersSorted}};
- };
- gtkadd($w->{window},
- gtkpack($w->create_box_with_title(_("Package Group Selection")),
- gtkpack_(new Gtk::VBox(0,0),
- 1, gtkpack_(new Gtk::HBox(0,0),
- $o->{meta_class} eq 'server' ? (
- 1, gtkpack(new Gtk::VBox(0,0),
- $entries_in_path->('Server'),
- ),
- 1, gtkpack(new Gtk::VBox(0,0),
- $entries_in_path->('Graphical Environment'),
- '',
- $entries_in_path->('Development'),
- '',
- $entries_in_path->('Utilities'),
- ),
- ) : (
- 1, gtkpack(new Gtk::VBox(0,0),
- $entries_in_path->('Workstation'),
- '',
- $entry->('Development|Development'),
- $entry->('Development|Documentation'),
- ),
- 0, gtkpack(new Gtk::VBox(0,0),
- $entries_in_path->('Server'),
- '',
- $entries_in_path->('Graphical Environment'),
- ),
- ),
- )),
- '',
- gtkadd(new Gtk::HBox(0,0),
- $w_size,
- if_($individual, do {
- my $check = Gtk::CheckButton->new(_("Individual package selection"));
- $check->set_active($$individual);
- $check->signal_connect(clicked => sub { $$individual = $check->get_active });
- $check;
- }),
- gtksignal_connect(new Gtk::Button(_("Ok")), clicked => sub { Gtk->main_quit }),
- ),
- ),
- );
- $w->{rwindow}->set_default_size($::windowwidth * 0.8, $::windowheight * 0.8);
- $w->main;
- 1;
-}
-
-
-sub choosePackagesTree {
- my ($o, $packages, $limit_to_medium) = @_;
-
- my $available = install_any::getAvailableSpace($o);
- my $availableCorrected = pkgs::invCorrectSize($available / sqr(1024)) * sqr(1024);
-
- my $common; $common = { get_status => sub {
- my $size = pkgs::selectedSize($packages);
- _("Total size: %d / %d MB", pkgs::correctSize($size / sqr(1024)), $available / sqr(1024));
- },
- node_state => sub {
- my $p = pkgs::packageByName($packages,$_[0]) or return;
- pkgs::packageMedium($packages, $p)->{selected} or return;
- pkgs::packageFlagBase($p) and return 'base';
- pkgs::packageFlagInstalled($p) and return 'installed';
- pkgs::packageFlagSelected($p) and return 'selected';
- return 'unselected';
- },
- build_tree => sub {
- my ($add_node, $flat) = @_;
- if ($flat) {
- foreach (sort keys %{$packages->{names}}) {
- !$limit_to_medium ||
- pkgs::packageMedium($packages, $packages->{names}{$_}) == $limit_to_medium or next;
- $add_node->($_, undef);
- }
- } else {
- foreach my $root (@{$o->{compssUsersSorted}}) {
- my (%fl, @firstchoice, @others);
- #$fl{$_} = $o->{compssUsersChoice}{$_} foreach @{$o->{compssUsers}{$root}{flags}}; #- FEATURE:improve choce of packages...
- $fl{$_} = 1 foreach @{$o->{compssUsers}{$root}{flags}};
- foreach my $p (values %{$packages->{names}}) {
- !$limit_to_medium || pkgs::packageMedium($packages, $p) == $limit_to_medium or next;
- my ($rate, @flags) = pkgs::packageRateRFlags($p);
- next if !($rate && grep { grep { !/^!/ && $fl{$_} } split('\|\|') } @flags);
- $rate >= 3 ?
- push(@firstchoice, pkgs::packageName($p)) :
- push(@others, pkgs::packageName($p));
- }
- my $root2 = join('|', map { translate($_) } split('\|', $root));
- $add_node->($_, $root2 ) foreach sort @firstchoice;
- $add_node->($_, $root2 . '|' . _("Other")) foreach sort @others;
- }
- }
- },
- get_info => sub {
- my $p = pkgs::packageByName($packages, $_[0]) or return '';
- pkgs::extractHeaders($o->{prefix}, [$p], $packages->{mediums});
- pkgs::packageHeader($p) or die;
-
- my $imp = translate($pkgs::compssListDesc{pkgs::packageFlagBase($p) ?
- 5 : pkgs::packageRate($p)});
-
- my $info = $@ ? _("Bad package") :
- (_("Name: %s\n", pkgs::packageName($p)) .
- _("Version: %s\n", pkgs::packageVersion($p) . '-' . pkgs::packageRelease($p)) .
- _("Size: %d KB\n", pkgs::packageSize($p) / 1024) .
- ($imp && _("Importance: %s\n", $imp)) . "\n" .
- formatLines(c::headerGetEntry(pkgs::packageHeader($p), 'description')));
- pkgs::packageFreeHeader($p);
- return $info;
- },
- toggle_nodes => sub {
- my $set_state = shift @_;
- my @n = map { pkgs::packageByName($packages, $_) } @_;
- my %l;
- my $isSelection = !pkgs::packageFlagSelected($n[0]);
- foreach (@n) {
- pkgs::togglePackageSelection($packages, $_, my $l = {});
- @l{grep {$l->{$_}} keys %$l} = ();
- }
- if (my @l = keys %l) {
- #- check for size before trying to select.
- my $size = pkgs::selectedSize($packages);
- foreach (@l) {
- my $p = $packages->{names}{$_};
- pkgs::packageFlagSelected($p) or $size += pkgs::packageSize($p);
- }
- if (pkgs::correctSize($size / sqr(1024)) > $available / sqr(1024)) {
- return $o->ask_warn('', _("You can't select this package as there is not enough space left to install it"));
- }
-
- @l > @n && $common->{state}{auto_deps} and
- $o->ask_okcancel('', [ $isSelection ?
- _("The following packages are going to be installed") :
- _("The following packages are going to be removed"),
- common::formatList(20, sort @l) ], 1) || return;
- if ($isSelection) {
- pkgs::selectPackage($packages, $_) foreach @n;
- } else {
- pkgs::unselectPackage($packages, $_) foreach @n;
- }
- foreach (@l) {
- my $p = pkgs::packageByName($packages, $_);
- $set_state->($_, pkgs::packageFlagSelected($p) ? 'selected' : 'unselected');
- }
- } else {
- $o->ask_warn('', _("You can't select/unselect this package"));
- }
- },
- grep_allowed_to_toggle => sub {
- grep { $_ ne _("Other") && !pkgs::packageFlagBase(pkgs::packageByName($packages, $_)) } @_;
- },
- grep_unselected => sub {
- grep { !pkgs::packageFlagSelected(pkgs::packageByName($packages, $_)) } @_;
- },
- check_interactive_to_toggle => sub {
- my $p = pkgs::packageByName($packages, $_[0]) or return;
- if (pkgs::packageFlagBase($p)) {
- $o->ask_warn('', _("This is a mandatory package, it can't be unselected"));
- } elsif (pkgs::packageFlagInstalled($p)) {
- $o->ask_warn('', _("You can't unselect this package. It is already installed"));
- } elsif (pkgs::packageFlagUpgrade($p)) {
- if ($::expert) {
- if (pkgs::packageFlagSelected($p)) {
- $o->ask_yesorno('', _("This package must be upgraded.\nAre you sure you want to deselect it?")) or return;
- }
- return 1;
- } else {
- $o->ask_warn('', _("You can't unselect this package. It must be upgraded"));
- }
- } else { return 1; }
- return;
- },
- auto_deps => _("Show automatically selected packages"),
- ok => _("Install"),
- cancel => $limit_to_medium && _("Cancel"),
- icons => [ { icon => 'floppy',
- help => _("Load/Save on floppy"),
- wait_message => _("Updating package selection"),
- code => sub { $o->loadSavePackagesOnFloppy($packages); 1; },
- },
- if_(0,
- { icon => 'feather',
- help => _("Minimal install"),
- code => sub {
-
- install_any::unselectMostPackages($o);
- pkgs::setSelectedFromCompssList($packages, { SYSTEM => 1 }, 4, $availableCorrected);
- 1;
- } }),
- ],
- state => {
- auto_deps => 1,
- flat => $limit_to_medium,
- },
- };
-
- $o->set_help('choosePackagesTree');
- $o->ask_browse_tree_info('', _("Choose the packages you want to install"), $common);
-}
-
-#------------------------------------------------------------------------------
-sub beforeInstallPackages {
- my ($o) = @_;
- $o->SUPER::beforeInstallPackages;
- install_any::copy_advertising($o);
-}
-
-#------------------------------------------------------------------------------
-sub installPackages {
- my ($o, $packages) = @_;
-
- my ($current_total_size, $last_size, $nb, $total_size, $start_time, $last_dtime, $trans_progress_total);
-
- my $w = my_gtk->new(_("Installing"));
- $w->sync;
- my $text = new Gtk::Label;
- my ($advertising, $change_time, $i);
- my $show_advertising if 0;
- $show_advertising = to_bool(@install_any::advertising_images) if !defined $show_advertising;
- my ($msg, $msg_time_remaining, $msg_time_total) = map { new Gtk::Label($_) } '', (_("Estimating")) x 2;
- my ($progress, $progress_total) = map { new Gtk::ProgressBar } (1..2);
- $w->{rwindow}->set_policy(1, 1, 1);
- gtkadd($w->{window}, my $box = new Gtk::VBox(0,10));
- $box->pack_end(gtkshow(gtkpack(gtkset_usize(new Gtk::VBox(0,5), $::windowwidth * 0.8, 0),
- $msg, $progress,
- create_packtable({},
- [_("Time remaining "), $msg_time_remaining],
-# [_("Total time "), $msg_time_total],
- ),
- $text,
- $progress_total,
- gtkadd(create_hbox(),
- my $cancel = new Gtk::Button(_("Cancel")),
- my $details = new Gtk::Button(_("Details")),
- ),
- )), 0, 1, 0);
- $details->hide if !@install_any::advertising_images;
- $w->sync;
- $msg->set(_("Please wait, preparing installation..."));
- gtkset_mousecursor_normal($cancel->window);
- gtkset_mousecursor_normal($details->window);
- my $advertize = sub {
- @install_any::advertising_images or return;
- $show_advertising ? $_->hide : $_->show foreach $msg, $progress, $text;
- gtkdestroy($advertising) if $advertising;
- if ($show_advertising && $_[0]) {
- $change_time = time();
- my $f = $install_any::advertising_images[$i++ % @install_any::advertising_images];
- log::l("advertising $f");
- my $pl = $f; $pl =~ s/\.png$/\.pl/;
- my $icon_name = $f; $icon_name =~ s/\.png$/_icon\.png/;
- my ($draw_text, $width, $height, @data, $icon, $icon_dx, $icon_dy, $icon_px);
- -e $pl and $draw_text = 1;
- eval(cat_($pl)) if $draw_text;
- my ($pix, undef) = gtkcreate_png($f);
- if ($icon) {
- ($icon_px, undef) = gtkcreate_png($icon_name);
- }
- my $dbl_area;
- my $darea = new Gtk::DrawingArea;
- gtkpack($box, $advertising = !$draw_text ?
- gtkpng($f) :
- gtksignal_connect(gtkset_usize($darea, $width, $height), expose_event => sub {
- my ($dx, $dy) = ($darea->allocation->[2], $darea->allocation->[3]);
- if (!defined($dbl_area)) {
- $dbl_area = new Gtk::Gdk::Pixmap($darea->window, $dx, $dy);
- $dbl_area->draw_rectangle($darea->style->bg_gc('active'), 1, 0, 0, $dx, $dy);
- $dbl_area->draw_pixmap($darea->style->bg_gc('normal'),
- $pix, 0, 0, ($dx-$width)/2, 0, $width, $height);
- my $gc_text = new Gtk::Gdk::GC($darea->window);
- $gc_text->set_foreground(gtkcolor(65535, 65535, 65535));
- my $yicon = 0;
- my $decy = 0;
- my $first = 1;
- foreach (@data) {
- my ($text, $x, $y, $area_width, $area_height, $bold) = @$_;
- my ($width, $height, $lines, $widths, $heights, $ascents, $descents) =
- get_text_coord ($text, $darea, $area_width, $area_height, 1, 0, 1, 1);
- if ($first && $icon) {
- my $iconx = ($dx-$width)/2 + $x + ${$widths}[0] - $icon_dx;
- my $icony = $y + ${$heights}[0] - $icon_dy/2;
- $icony > 0 or $icony = 0;
- $dbl_area->draw_pixmap($darea->style->bg_gc('normal'), $icon_px, 0, 0,
- $iconx, $icony, $icon_dx, $icon_dy
- );
- $yicon = $icony + $icon_dy;
- }
- my $i = 0;
- $yicon > $y + ${$heights}[0] and $decy = $yicon - ($y + ${$heights}[$i]);
- foreach (@{$lines}) {
- $dbl_area->draw_string($darea->style->font, $gc_text,
- ($dx-$width)/2 + $x + ${$widths}[$i], ( $first ? 0 : $decy ) + $y + ${$heights}[$i], $_);
- $bold and $dbl_area->draw_string($darea->style->font, $gc_text,
- ($dx-$width)/2 + $x + ${$widths}[$i] + 1, ( $first ? 0 : $decy ) + $y + ${$heights}[$i], $_);
- $i++;
- }
- $first = 0;
- }
- }
- $darea->window->draw_pixmap($darea->style->bg_gc('normal'),
- $dbl_area, 0, 0, 0, 0, $dx, $dy);
- }));
- } else {
- $advertising = undef;
- }
- };
-
- $cancel->signal_connect(clicked => sub { $pkgs::cancel_install = 1 });
- $details->signal_connect(clicked => sub {
- invbool \$show_advertising;
- $advertize->(1);
- });
- $advertize->();
-
- my $oldInstallCallback = \&pkgs::installCallback;
- local *pkgs::installCallback = sub {
- my $m = shift;
- if ($m =~ /^Starting installation/) {
- $nb = $_[0];
- $total_size = $_[1]; $current_total_size = 0;
- $start_time = time();
- $msg->set(_("%d packages", $nb));
- $w->flush;
- } elsif ($m =~ /^Starting installing package/) {
- $progress->update(0);
- my $name = $_[0];
- $msg->set(_("Installing package %s", $name));
- $current_total_size += $last_size;
- my $p = pkgs::packageByName($o->{packages}, $name);
- $last_size = c::headerGetEntry(pkgs::packageHeader($p), 'size');
- $text->set((split /\n/, c::headerGetEntry(pkgs::packageHeader($p), 'summary'))[0] || '');
- $advertize->(1) if $show_advertising && $total_size > 20_000_000 && time() - $change_time > 20;
- $w->flush;
- } elsif ($m =~ /^Progressing installing package/) {
- $progress->update($_[2] ? $_[1] / $_[2] : 0);
-
- my $dtime = time() - $start_time;
- my $ratio =
- $total_size == 0 ? 0 :
- pkgs::size2time($current_total_size + $_[1], $total_size) / pkgs::size2time($total_size, $total_size);
- $ratio >= 1 and $ratio = 1;
- my $total_time = $ratio ? $dtime / $ratio : time();
-
-#- my $ratio2 = $total_size == 0 ? 0 : ($current_total_size + $_[1]) / $total_size;
-#- log::l(sprintf("XXXX advance %d %d %s", $current_total_size + $_[1], $dtime, formatTimeRaw($total_time)));
-
- $progress_total->update($ratio);
- if ($dtime != $last_dtime && $current_total_size > 80_000_000) {
- $msg_time_total->set(formatTime(10 * round($total_time / 10) + 10));
-#- $msg_time_total->set(formatTimeRaw($total_time) . " " . formatTimeRaw($dtime / $ratio2));
- $msg_time_remaining->set(formatTime(10 * round(max($total_time - $dtime, 0) / 10) + 10));
- $last_dtime = $dtime;
- }
- $w->flush;
- } else { unshift @_, $m; goto $oldInstallCallback }
- };
- #- the modification is not local as the box should be living for other package installation.
- undef *install_any::changeMedium;
- *install_any::changeMedium = sub {
- my ($method, $medium) = @_;
-
- #- if not using a cdrom medium, always abort.
- if ($method eq 'cdrom' && !$::oem) {
- local $my_gtk::grab = 1;
- my $name = pkgs::mediumDescr($o->{packages}, $medium);
- local $| = 1; print "\a";
- my $time = time();
- my $r = $name !~ /commercial/i || ($o->{useless_thing_accepted2} ||= $o->ask_from_list_('', formatAlaTeX($install_steps_interactive::com_license), [ __("Accept"), __("Refuse") ], "Accept") eq "Accept");
- $r &&= $o->ask_okcancel('', _("Change your Cd-Rom!
-
-Please insert the Cd-Rom labelled \"%s\" in your drive and press Ok when done.
-If you don't have it, press Cancel to avoid installation from this Cd-Rom.", $name), 1);
- #- add the elapsed time (otherwise the predicted time will be rubbish)
- $start_time += time() - $time;
- return $r;
- }
- };
- my $install_result;
- catch_cdie { $install_result = $o->install_steps::installPackages($packages); }
- sub {
- if ($@ =~ /^error ordering package list: (.*)/) {
- $o->ask_yesorno('', [
-_("There was an error ordering packages:"), $1, _("Go on anyway?") ], 1) and return 1;
- ${$_[0]} = "already displayed";
- } elsif ($@ =~ /^error installing package list: (.*)/) {
- $o->ask_yesorno('', [
-_("There was an error installing packages:"), $1, _("Go on anyway?") ], 1) and return 1;
- ${$_[0]} = "already displayed";
- }
- 0;
- };
- if ($pkgs::cancel_install) {
- $pkgs::cancel_install = 0;
- die 'already displayed';
- }
- $w->destroy;
- $install_result;
-}
-
-sub set_help {
- my ($o, @l) = @_;
-
- my @l2 = map {
- join("\n\n", map { s/\n/ /mg; $_ } split("\n\n", translate($help::steps{$_})))
- } @l;
- $o->{current_help} = join("\n\n\n", @l2);
- gtktext_insert($o->{help_window_text}, $o->{current_help});
- 1;
-}
-
-#-######################################################################################
-#- Wonderful perl :(
-#-######################################################################################
-1; #