diff options
Diffstat (limited to 'perl-install/install_steps_gtk.pm')
-rw-r--r-- | perl-install/install_steps_gtk.pm | 952 |
1 files changed, 435 insertions, 517 deletions
diff --git a/perl-install/install_steps_gtk.pm b/perl-install/install_steps_gtk.pm index ac8188d8a..150ff183f 100644 --- a/perl-install/install_steps_gtk.pm +++ b/perl-install/install_steps_gtk.pm @@ -13,21 +13,23 @@ use common qw(:common :file :functional :system); use partition_table qw(:types); use my_gtk qw(:helpers :wrappers); use Gtk; -#-use Gtk::XmHTML; +use Gtk::XmHTML; use devices; use fsedit; -use commands; +use keyboard; +use network; use modules; -use pkgs; -use partition_table qw(:types); -use partition_table_raw; +use printer; use install_steps; +use run_program; use install_steps_interactive; +use Xconfigurator; +use Xconfig; use interactive_gtk; use install_any; use diskdrake; +use pkgs; use log; -use mouse; use help; use lang; @@ -37,10 +39,132 @@ use lang; my $w_help; my $itemsNB = 1; my (@background1, @background2); +my ($width, $height) = (640, 480); +my ($stepswidth, $stepsheight) = (140, $height); +my ($logowidth, $logoheight) = ($width - $stepswidth, 40); +my ($helpwidth, $helpheight) = ($width - $stepswidth, 100); +my ($windowwidth, $windowheight) = ($width - $stepswidth, $height - $helpheight - $logoheight); my @themes_vga16 = qw(blue blackwhite savane); -my @themes = qw(mdk DarkMarble marble3d blueHeart); - +my @themes = qw(DarkMarble marble3d blueHeart); + +my @circle_head = ( + "19 17 4 1" +); + +my @circle_body = ( +" c None", +"+ c #FFFFFF", +" ===== ", +" ========= ", +" =+++======= ", +" =++========== ", +" ==+============ ", +" +++============ ", +" ================o", +" ================o", +" ================o", +" ===============oo", +" ===============oo", +" =============oo ", +" ============ooo ", +" o=========ooo ", +" oo=====oooo ", +" ooooooooo ", +" ooooo ", +); + +#-my @questionmark_head = ( +#-"39 97 6 1", +#-" c None", +#-". c #000000", +#-"+ c #FFFFFF", +#-"o c #AAAAAA", +#-); +#-my @questionmark_body = ( +#-("OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO") x 10, +#-"OOOOOOOOOOOOO.......OOOOOOOOOOOOOOOOOOO", +#-"OOOOOOOOOOOO..OOOOOOO.OOOOOOOOOOOOOOOOO", +#-"OOOOOOOOOO..OOOOOOOOOOOOOOOOOOOOOOOOOOO", +#-"OOOOOOOOOO..OOOOOOOOOOOOOOOOOOOOOOOOOOO", +#-"OOOOOOOO..OOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +#-"OOOOOOOO..OOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +#-"OOOOOOO..OOOOOOOOOOOOOOOOOOXOOOOOOOOOOO", +#-"OOOOOOO.OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +#-"OOOOOO.OOOOOOOOOOOOOOOOOOOOOXOOOOOOOOOO", +#-"OOOOO..OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +#-"OOOOO.OOOOOOOOOOOOOOOOOOOOOOOXOOOOOOOOO", +#-"OOOO..OOOOOOOOOOOOOOOOOOOOOOOOXOOOOOOOO", +#-"OOOO.OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +#-"OOOO.OOOOOOOOOOOOOOOOOOOOOOOOOOXOOOOOOO", +#-"OOO..OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", +#-"OOO.OOOOOOOOOOOOOOOOOOOOOOOOOOOOXOOOOOO", +#-"OO..OOOOOOOOOOOOOOOOOOOOOOOOOOOOXOOOOOO", +#-"OOO.OOOOOOOOOOOOOOOOOOOOOOOOOOOOXOOOOOO", +#-"OO.OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOXOOOOO", +#-"OO.OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOXOOOOO", +#-"O..OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOXOOOOO", +#-"OO.OOOOOOOOOOOoo+++++ooOOOOOOOOOOXOOOOO", +#-"O.OOOOOOOOOOo+++o+++++++oOOOOOOOOOXOOOO", +#-"O.OOOOOOOOO+++OOOOo+++++++OOOOOOOOXOOOO", +#-"O.OOOOOOOOo++oOOOOOo++++++oOOOOOOOXOOOO", +#-"O.OOOOOOOo+++oOOOOOO+++++++OOOOOOOXOOOO", +#-"..OOOOOOOo++++OOOOOOo++++++oOOOOOOXOOOO", +#-"O.OOOOOOO+++++oOOOOOo+++++++OOOOOOXOOOO", +#-".OOOOOOOO++++++OOOOOo+++++++OOOOOOOXOOO", +#-".OOOOOOOO++++++OOOOOo+++++++OOOOOOXOOOO", +#-".OOOOOOOOo++++oOOOOOo++++++oOOOOOOOXOOO", +#-".OOOOOOOOOo++oOOOOOOo++++++oOOOOOOOXOOO", +#-".OOOOOOOOOOOOOOOOOOO+++++++OOOOOOOOXOOO", +#-".OOOOOOOOOOOOOOOOOOO++++++OOOOOOOOOXOOO", +#-".OOOOOOOOOOOOOOOOOOo+++++oOOOOOOOOOXOOO", +#-".OOOOOOOOOOOOOOOOOO+++++OOOOOOOOOOOXOOO", +#-".OOOOOOOOOOOOOOOOOo+++oOOOOOOOOOOOOXOOO", +#-".OOOOOOOOOOOOOOOOO+++oOOOOOOOOOOOOOXOOO", +#-".OOOOOOOOOOOOOOOOo++OOOOOOOOOOOOOOOXOOO", +#-".OOOOOOOOOOOOOOOO++OOOOOOOOOOOOOOOOXOOO", +#-".OOOOOOOOOOOOOOOO+oOOOOOOOOOOOOOOOOXOOO", +#-".OOOOOOOOOOOOOOOO+OOOOOOOOOOOOOOOOOXOOO", +#-".OOOOOOOOOOOOOOOO+OOOOOOOOOOOOOOOOOXOOO", +#-".OOOOOOOOOOOOOOOOoOOOOOOOOOOOOOOOOOXOOO", +#-".OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOXOOO", +#-".OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOXOOO", +#-"O.OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOXOOO", +#-"OOOOOOOOOOOOOOOOoooOOOOOOOOOOOOOOOOXOOO", +#-".OOOOOOOOOOOOOO+++++OOOOOOOOOOOOOOXOOOO", +#-"O.OOOOOOOOOOOO++++++oOOOOOOOOOOOOOXXOOO", +#-"O.OOOOOOOOOOOo+++++++OOOOOOOOOOOOOXOOOO", +#-"O.OOOOOOOOOOOo+++++++OOOOOOOOOOOOOXOOOO", +#-"O.OOOOOOOOOOOo+++++++OOOOOOOOOOOOOXOOOO", +#-"OOOOOOOOOOOOOO++++++oOOOOOOOOOOOOOXOOOO", +#-"O.OOOOOOOOOOOOO+++++OOOOOOOOOOOOOXXOOOO", +#-"OO.OOOOOOOOOOOOOoooOOOOOOOOOOOOOOOXOOOO", +#-"OO.OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOXOOOOO", +#-"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOXOOOOO", +#-"OO.OOOOOOOOOOOOOOOOOOOOOOOOOOOOOXXOOOOO", +#-"OOO.OOOOOOOOOOOOOOOOOOOOOOOOOOOOOXOOOOO", +#-"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOXOOOOOO", +#-"OOO.OOOOOOOOOOOOOOOOOOOOOOOOOOOOXOOOOOO", +#-"OOOO.OOOOOOOOOOOOOOOOOOOOOOOOOOXXOOOOOO", +#-"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOXOOOOOOO", +#-"OOOOO.OOOOOOOOOOOOOOOOOOOOOOOOOXOOOOOOO", +#-"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOXXOOOOOOO", +#-"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOXOOOOOOOO", +#-"OOOOOO.OOOOOOOOOOOOOOOOOOOOOOXXOOOOOOOO", +#-"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOXOOOOOOOOO", +#-"OOOOOOOOOOOOOOOOOOOOOOOOOOOOXXOOOOOOOOO", +#-"OOOOOOOOOOOOOOOOOOOOOOOOOOOXXOOOOOOOOOO", +#-"OOOOOOOOOOOOOOOOOOOOOOOOOOOXOOOOOOOOOOO", +#-"OOOOOOOOOOOOOOOOOOOOOOOOOXXXOOOOOOOOOOO", +#-"OOOOOOOOOOOOOOOOOOOOOOOOOXOOOOOOOOOOOOO", +#-"OOOOOOOOOOOOXOOOOOOOOOOXXXOOOOOOOOOOOOO", +#-"OOOOOOOOOOOOOOXOOOOOOXXXOOOOOOOOOOOOOOO", +#-"OOOOOOOOOOOOOOOXXXXXXXOOOOOOOOOOOOOOOOO", +#-("OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO") x 10); + +my @red_circle = (@circle_head, "= c #FF0000", "o c #AA5500", @circle_body); +my @orange_circle = (@circle_head, "= c #FFAA00", "o c #AA5500", @circle_body); +my @green_circle = (@circle_head, "= c #00FF00", "o c #00AA00", @circle_body); #-###################################################################################### #- In/Out Steps Functions @@ -51,77 +175,51 @@ sub new($$) { my $old = $SIG{__DIE__}; $SIG{__DIE__} = sub { $_[0] !~ /my_gtk\.pm/ and goto $old }; - $ENV{DISPLAY} ||= $o->{display} || ":0"; + $ENV{DISPLAY} = $o->{display} || ":0"; unless ($::testing) { $my_gtk::force_focus = $ENV{DISPLAY} eq ":0"; my $f = "/tmp/Xconf"; - createXconf($f, @{$o->{mouse}}{"XMOUSETYPE", "device"}, $o->{wacom}); - devices::make("/dev/kbd"); + createXconf($f, @{$o->{mouse}}{"XMOUSETYPE", "device"}); if ($ENV{DISPLAY} eq ":0") { my $launchX = sub { my $ok = 1; - local $SIG{CHLD} = sub { $ok = 0 if waitpid(-1, c::WNOHANG()) > 0 }; + local $SIG{CHLD} = sub { $ok = 0 }; unless (fork) { - exec $_[0], (arch() =~ /^sparc/ || arch() eq "ppc" ? () : ("-kb")), "-dpms","-s" ,"240", - ($_[0] =~ /Xsun/ || $_[0] =~ /Xpmac/ ? ("-fp", "/usr/X11R6/lib/X11/fonts:unscaled") : - ("-allowMouseOpenFail", "-xf86config", $f)) or exit 1; + exec $_[0], "-kb", "-dpms","-s" ,"240", "-allowMouseOpenFail", "-xf86config", $f or exit 1; } - foreach (1..60) { + foreach (1..10) { sleep 1; - log::l("Server died"), return 0 if !$ok; + return 0 if !$ok; return 1 if c::Xtest($ENV{DISPLAY}); } - 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() eq "ppc") { - @servers = qw(Xpmac); - } - - foreach (@servers) { - log::l("Trying with server $_"); - sleep 3; + + if (listlength(cat_("/proc/fb"))) { + &$launchX("XF86_FBDev"); + $o->{allowFB} = 1; #- keep in mind FB is used. + } else { my $dir = "/usr/X11R6/bin"; - my $prog = /Xsun/ || /Xpmac/ ? $_ : "XF86_$_"; - unless (-x "$dir/$prog") { - unlink $_ foreach glob_("$dir/X*"); - install_any::getAndSaveFile("$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; + unless (-x "$dir/XF86_VGA16") { + unlink "$dir/XF86_FBDev"; + local *F; open F, ">$dir/XF86_VGA16" or die ''; + local $/ = \ (16 * 1024); + my $f = install_any::getFile("$dir/XF86_VGA16") or die ''; + syswrite F, $_ foreach <$f>; + chmod 0755, "$dir/XF86_VGA16"; } + &$launchX("XF86_VGA16"); } - return undef; } } - OK: @themes = @themes_vga16 if $o->{simple_themes} || $o->{vga16}; + @themes = @themes_vga16 if $o->{simple_themes} || !$o->{display} && !($o->{allowFB} ||= $::testing); - init_sizes(); install_theme($o); create_logo_window($o); - $my_gtk::force_center = [ $::rootwidth - $::windowwidth, $::logoheight, $::windowwidth, $::windowheight ]; + $my_gtk::force_center = [ $width - $windowwidth, $logoheight, $windowwidth, $windowheight ]; (bless {}, ref $type || $type)->SUPER::new($o); } @@ -129,7 +227,6 @@ sub new($$) { sub enteringStep { my ($o, $step) = @_; - print _("Entering step `%s'\n", translate($o->{steps}{$step}{text})); $o->SUPER::enteringStep($step); create_steps_window($o); create_help_window($o); @@ -145,286 +242,244 @@ sub leavingStep { #- Steps Functions #-###################################################################################### sub selectLanguage { - my ($o, $first_time) = @_; + my ($o) = @_; $o->SUPER::selectLanguage; Gtk->set_locale; install_theme($o); - - $o->ask_warn('', -_("Your system is low on resource. You may have some problem installing -Linux-Mandrake. If that occurs, you can try a text install instead. For this, -press `F1' when booting on CDROM, then enter `text'.")) if $first_time && availableRam < 60 * 1024; # 60MB - -} - -#------------------------------------------------------------------------------ -sub selectInstallClass1 { - my ($o, $verif, $l, $def, $l2, $def2) = @_; - - my $w = my_gtk->new(''); - my ($radio, $focused); - gtkadd($w->{window}, - gtkpack($o->create_box_with_title(_("Please, choose one of the following classes of installation:")), - (my @radios = map { $radio = new Gtk::RadioButton($_, $radio ? $radio : ()); - $radio->set_active($_ eq $def); $radio } @$l), - gtkadd(create_hbox(), - 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; - create_steps_window($o); - - $w->{retval}; } #------------------------------------------------------------------------------ -sub selectMouse { - my ($o, $force) = @_; - my $old = $o->{mouse}{XMOUSETYPE}; - $o->SUPER::selectMouse($force); - - if ($old ne $o->{mouse}{XMOUSETYPE} && !$::testing) { - log::l("telling X server to use another mouse"); - eval { commands::modprobe("serial") } if $o->{mouse}{device} =~ /ttyS/; - symlinkf($o->{mouse}{device}, "/dev/mouse"); - my $id = mouse::xmouse2xId($o->{mouse}{XMOUSETYPE}); - log::l("XMOUSETYPE: $o->{mouse}{XMOUSETYPE} = $id"); - c::setMouseLive($ENV{DISPLAY}, $id); +sub doPartitionDisks($$) { + my ($o, $hds, $raid) = @_; + + while (1) { + diskdrake::main($hds, $raid, interactive_gtk->new, $o->{partitions}); + if (!grep { isSwap($_) } fsedit::get_fstab(@{$o->{hds}})) { + if ($::beginner) { + $o->ask_warn('', _("You must have a swap partition")); + } elsif (!$::expert) { + $o->ask_okcancel('', _("You don't have a swap partition\n\nContinue anyway?")) and last; + } else { last } + } else { last } } } #------------------------------------------------------------------------------ -sub chooseSizeToInstall { - my ($o, $packages, $min_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 - return $max_size if $min_size && $max_size / $min_size < 1.05; +sub choosePackages { + my ($o, $packages, $compss, $compssUsers, $first_time) = @_; - log::l("choosing size to install between $min_size and $max_size"); + return if $::beginner; + chooseSizeToInstall(@_); + install_steps_interactive::choosePackages(@_); + choosePackagesTree(@_) if $::expert; +} +sub chooseSizeToInstall { + my ($o, $packages, $compss, $compssUsers, $first_time) = @_; + my $availableSpace = int(install_any::getAvailableSpace($o) / sqr(1024)); + my $default = pkgs::correctSize((sum map { $_->{size} } grep { $_->{selected} } values %$packages) / sqr(1024) || $availableSpace * 0.7); my $w = my_gtk->new(''); - my $adj = create_adjustment($percentage, $min_size * 100 / $max_size_, $percentage); - my $spin = gtkset_usize(new Gtk::SpinButton($adj, 0, 0), 20, 0); - my $val; + my $adj = create_adjustment($default, 100, $availableSpace); + my $spin = gtkset_usize(new Gtk::SpinButton($adj, 0, 0), 100, 0); 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 ], + create_packtable({ col_spacings => 10 }, + [ _("Choose the size you want to install"), $spin, _("MB"), ], [ 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; + $w->main or return; + + $_->{selected} = 0 foreach values %$packages; + pkgs::setSelectedFromCompssList($o->{compssListLevels}, $o->{packages}, pkgs::invCorrectSize($spin->get_value_as_int) * sqr(1024), $o->{installClass}, $o->{lang}, $o->{isUpgrade}); } sub choosePackagesTree { - my ($o, $packages, $compss) = @_; - - my ($curr, $info_widget, $w_size, $go, $idle, $flat, $auto_deps); - my (%wtree, %ptree); - + my ($o, $packages, $compss, $compssUsers) = @_; + my $availableSpace = int(install_any::getAvailableSpace($o) / sqr(1024)); my $w = my_gtk->new(''); - my $details = new Gtk::VBox(0,0); - my $tree = Gtk::CTree->new(3, 0); - $tree->set_selection_mode('browse'); - $tree->set_column_width(0, 200); - $tree->set_column_auto_resize($_, 1) foreach 1..2; - - gtkadd($w->{window}, - gtkpack_(new Gtk::VBox(0,5), - 0, _("Choose the packages you want to install"), - 1, gtkpack(new Gtk::HBox(0,0), - createScrolledWindow($tree), - gtkadd(gtkset_usize(new Gtk::Frame(_("Info")), $::windowwidth - 490, 0), - createScrolledWindow($info_widget = new Gtk::Text), - )), - 0, my $l = new Gtk::HBox(0,15), - 0, gtkpack(new Gtk::HBox(0,10), - $go = gtksignal_connect(new Gtk::Button(_("Install")), "clicked" => sub { $w->{retval} = 1; Gtk->main_quit }), - ) - )); - gtkpack__($l, my $toolbar = new Gtk::Toolbar('horizontal', 'icons')); - gtkpack__($l, gtksignal_connect(new Gtk::CheckButton(_("Automatic dependencies")), clicked => sub { invbool \$auto_deps })); - $l->pack_end($w_size = new Gtk::Label(''), 0, 1, 20); + add2hash_($o->{packages_}, { show_level => 0 }); #- keep show more or less 80 }); - $w->{window}->set_usize(map { $_ - 2 * $my_gtk::border - 4 } $::windowwidth, $::windowheight); - $go->grab_focus; - $w->{rwindow}->show_all; - - my $pix_base = [ gtkcreate_xpm($w->{window}, "$ENV{SHARE_PATH}/rpm-base.xpm") ]; - my $pix_selected = [ gtkcreate_xpm($w->{window}, "$ENV{SHARE_PATH}/rpm-selected.xpm") ]; - my $pix_unselect = [ gtkcreate_xpm($w->{window}, "$ENV{SHARE_PATH}/rpm-unselected.xpm") ]; - my $pix_installed= [ gtkcreate_xpm($w->{window}, "$ENV{SHARE_PATH}/rpm-installed.xpm") ]; - - my $parent; $parent = sub { - if (my $w = $wtree{$_[0]}) { return $w } - my $s; foreach (split '/', $_[0]) { - $wtree{"$s/$_"} ||= - $tree->insert_node($s ? $parent->($s) : undef, undef, [$_, '', ''], 5, (undef) x 4, 0, 0); - $s = "$s/$_"; + my ($current, $ignore, $showall, $selectall, $w_size, $info_widget, $showall_button, $selectall_button, $go, %items) = 0, 0, 0, 0; + my $details = new Gtk::VBox(0,0); + $compss->{tree} = new Gtk::Tree(); + $compss->{tree}->set_selection_mode('multiple'); + + my $clean; $clean = sub { + my ($p) = @_; + foreach (values %{$p->{childs}}) { + &$clean($_) if $_->{childs}; + delete $_->{itemNB}; + delete $_->{tree}; + delete $_->{packages_item}; } - $wtree{$s}; - }; - my $add_node = sub { - my ($leaf, $root) = @_; - my $node = $tree->insert_node($parent->($root), undef, [$leaf, '', ''], 5, (undef) x 4, 1, 0); - my $p = $packages->[0]{$leaf} or return; - $p->{medium}{selected} or return; - my $pix = pkgs::packageFlagBase($p) ? $pix_base : pkgs::packageFlagSelected($p) ? $pix_selected : pkgs::packageFlagInstalled($p) ? $pix_installed : $pix_unselect; - $tree->node_set_pixmap($node, 1, $pix->[0], $pix->[1]); - push @{$ptree{$leaf}}, $node; - }; - my $add_nodes = sub { - %ptree = %wtree = (); - - $tree->freeze; - while (1) { $tree->remove_node($tree->node_nth(0) || last) } - - my ($root, $leaf); - if ($flat = $_[0]) { - $add_node->($_, undef) foreach sort grep { my $pkg = pkgs::packageByName($packages, $_); - $pkg->{medium}{selected} } keys %{$packages->[0]}; - } else { - foreach (sort @$compss) { - ($root, $leaf) = m|(.*)/(.+)|o or ($root, $leaf) = ('', $_); - my $pkg = pkgs::packageByName($packages, $leaf); - $add_node->($leaf, $root) if $pkg->{medium}{selected}; - } + }; &$clean($compss); + + my $update = sub { + my $size = 0; + $ignore = 1; + foreach (grep { $_->[0] } values %items) { + $compss->{tree}->unselect_child($_->[0]); + $compss->{tree}->select_child($_->[0]) if $_->[1]{selected}; } - $tree->thaw; + $ignore = 0; + + foreach (values %$packages) { + $size += $_->{size} - ($_->{installedCumulSize} || 0) if $_->{selected}; #- on upgrade, installed packages will be removed. + } + + $w_size->set(_("Total size: ") . int (pkgs::correctSize($size / sqr(1024))) . " / $availableSpace " . _("MB") ); + }; + my $new_item = sub { + my ($p, $name, $parent) = @_; + my $w = create_treeitem($name); + $items{++$itemsNB} = [ $w, $p ]; + $parent->{packages_item}{$itemsNB} = undef if $parent; + $w->show; + $w->set_sensitive(!$p->{base} && !$p->{installed}); + $w->signal_connect(focus_in_event => sub { + my $p = pkgs::getHeader($p); + gtktext_insert($info_widget, + _("Version: %s\n", c::headerGetEntry($p, 'version') . '-' . c::headerGetEntry($p, 'release')) . + _("Size: %d KB\n", c::headerGetEntry($p, 'size') / 1024) . + + formatLines(c::headerGetEntry($p, 'description'))); + }) unless $p->{childs}; + $itemsNB; }; - $add_nodes->($flat); - - my %toolbar = my @toolbar = - ( - ftout => [ _("Expand Tree") , sub { $tree->expand_recursive(undef) } ], - ftin => [ _("Collapse Tree") , sub { $tree->collapse_recursive(undef) } ], - reload=> [ _("Toggle between flat and group sorted"), sub { $add_nodes->(!$flat) } ], - ); - $toolbar->set_button_relief("none"); - foreach (grep_index { $::i % 2 == 0 } @toolbar) { - gtksignal_connect($toolbar->append_item(undef, $toolbar{$_}[0], undef, gtkxpm($tree, "$ENV{SHARE_PATH}/$_.xpm")), - clicked => $toolbar{$_}[1]); - } - $toolbar->set_style("icons"); + $compss->{tree}->signal_connect(selection_changed => sub { + $ignore and return; - my $display_info = sub { - my $p = $packages->[0]{$curr} or return gtktext_insert($info_widget, ''); - pkgs::extractHeaders($o->{prefix}, [$p], $p->{medium}); - $p->{header} or die; + my %s; @s{$_[0]->selection} = (); + my @changed; + #- needs to find @changed first, _then_ change the selected, otherwise + #- we won't be able to find the changed + foreach (values %items) { + push @changed, $_->[1] if ($_->[1]{selected} xor exists $s{$_->[0]}); + } + #- works before @changed is (or must be!) one element + foreach (@changed) { + if ($_->{childs}) { + my $s = invbool \$_->{selected}; + my $f; $f = sub { + my ($p) = @_; + $p->{itemNB} or return; + if ($p->{packages}) { + foreach (keys %{$p->{packages_item} || {}}) { + my ($a, $b) = @{$items{$_}}; + $a and pkgs::set($packages, $b, $s); + } + } else { + foreach (values %{$p->{childs}}) { + $_->{selected} = $s; + &$f($_); + } + } + }; &$f($_); +#- } elsif ($_->{base}) { +#- $o->ask_warn('', _("Sorry, i won't unselect this package. The system needs it")); +#- } elsif ($_->{installed}) { +#- $o->ask_warn('', _("Sorry, i won't select this package. A more recent version is already installed")); + } else { + pkgs::toggle($packages, $_); + } + } + &$update(); + }); - my $ind = $o->{compssListLevels}{$o->{installClass}}; - my $imp = translate($pkgs::compssListDesc{pkgs::packageFlagBase($p) ? 100 : round_down($p->{values}[$ind], 10)}); + my $select_add = sub { + my ($ind, $level) = @{$o->{packages_}}{"ind", "select_level"}; + $level = max(0, min(100, ($level + $_[0]))); + $o->{packages_}{select_level} = $level; - gtktext_insert($info_widget, $@ ? _("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($p->{header}, 'description'))); - c::headerFree(delete $p->{header}); - 0; + pkgs::unselect_all($packages); + foreach (pkgs::allpackages($packages)) { + pkgs::select($packages, $_) if $_->{values}[$ind] >= $level; + } + &$update; }; - my $update_size = sub { - my $size = pkgs::selectedSize($packages); - $w_size->set(_("Total size: %d / %d MB", - pkgs::correctSize($size / sqr(1024)), - install_any::getAvailableSpace($o) / sqr(1024))); - }; - my $toggle = sub { - if (ref $curr) { - $tree->toggle_expansion($curr); - } else { - my $p = $packages->[0]{$curr} or return; - if (pkgs::packageFlagBase($p)) { - return $o->ask_warn('', _("This is a mandatory package, it can't be unselected")); - } elsif (pkgs::packageFlagInstalled($p)) { - return $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; - } - } else { - return $o->ask_warn('', _("You can't unselect this package. It must be upgraded")); + my $show_add = sub { + my ($ind, $level) = @{$o->{packages_}}{"ind", "show_level"}; + $level = max(0, min(90, ($level + $_[0]))); + $o->{packages_}{show_level} = $level; + + my $update_tree = sub { + my $P = shift; + my $i = 0; foreach (@_) { + my ($flag, $itemNB, $q) = @$_; + my $item = $items{$flag || $itemNB}[0] if $flag || $itemNB; + if ($flag) { + $P->{tree}->insert($item, $i) if $flag ne "1"; + $item->set_subtree($q->{tree}) if $flag ne "1" && $q->{tree}; + $i++; + } elsif ($itemNB) { + delete $items{$itemNB}; + delete $P->{packages_item}{$itemNB}; + $P->{tree}->remove_item($item) if $P->{tree}; } } - - pkgs::togglePackageSelection($packages, $p, my $l = {}); - if (my @l = grep { $l->{$_} } keys %$l) { - #- check for size before trying to select. - my $size = pkgs::selectedSize($packages); - foreach (@l) { - my $p = $packages->[0]{$_}; - pkgs::packageFlagSelected($p) or $size += pkgs::packageSize($p); - } - if (pkgs::correctSize($size / sqr(1024)) > install_any::getAvailableSpace($o) / sqr(1024)) { - return $o->ask_warn('', _("You can't select this package as there is not enough space left to install it")); - } - - @l > 1 && !$auto_deps and $o->ask_okcancel('', [ _("The following packages are going to be installed/removed"), join(", ", sort @l) ], 1) || return; - pkgs::togglePackageSelection($packages, $p); - foreach (@l) { - my $p = $packages->[0]{$_}; - my $pix = pkgs::packageFlagSelected($p) ? $pix_selected : $pix_unselect; - $tree->node_set_pixmap($_, 1, $pix->[0], $pix->[1]) foreach @{$ptree{$_}}; - } - &$update_size; + }; + my $f; $f = sub { + my ($p) = @_; + if ($p->{packages}) { + my %l; $l{$items{$_}[1]} = $_ foreach keys %{$p->{packages_item}}; + map { + [ $_->{values}[$ind] >= $level ? + ($l{$_} ? 1 : &$new_item($_, $_->{name}, $p)) : '', $l{$_}, $_ ]; + } sort { + $a->{name} cmp $b->{name} } @{$p->{packages}}; } else { - $o->ask_warn('', _("You can't select/unselect this package")); + map { + my $P = $p->{childs}{$_}; + my @L; @L = &$f($P) if !$P->{values} || $P->{values}[$ind] > ($::expert ? -1 : 0); + if (grep { $_->[0] } @L) { + my $r = $P->{tree} ? 1 : do { + my $t = $P->{tree} = new Gtk::Tree(); $t->show; + $P->{itemNB} = &$new_item($P, $_); + }; + &$update_tree($P, @L); + [ $r, $P->{itemNB}, $P ]; + } else { + &$update_tree($P, @L); + delete $P->{tree}; + [ '', delete $P->{itemNB}, $P ]; + } + } sort keys %{$p->{childs} || {}}; } - } + }; + $ignore = 1; + &$update_tree($compss, &$f($compss)); + &$update; + $ignore = 0; }; - $tree->signal_connect(button_press_event => sub { &$toggle if $_[1]{type} =~ /^2/ }); - $tree->signal_connect(key_press_event => sub { - my ($w, $e) = @_; - my $c = chr($e->{keyval} & 0xff); - &$toggle if $e->{keyval} >= 0x100 ? $c eq "\r" || $c eq "\x8d" : $c eq ' '; - 1; - }); - $tree->signal_connect(tree_select_row => sub { - Gtk->timeout_remove($idle) if $idle; - - if ($_[1]->row->is_leaf) { - ($curr) = $tree->node_get_pixtext($_[1], 0); - $idle = Gtk->timeout_add(100, $display_info); - } else { - $curr = $_[1]; - } - &$toggle if $_[2] == 1; - }); - &$update_size; + + gtkadd($w->{window}, gtkpack_(new Gtk::VBox(0,5), + 0, _("Choose the packages you want to install"), + 1, gtkpack(new Gtk::HBox(0,0), + createScrolledWindow($compss->{tree}), + gtkadd(gtkset_usize(new Gtk::Frame(_("Info")), 150, 0), + createScrolledWindow($info_widget = new Gtk::Text), + ), + ), + 0, gtkpack_(new Gtk::HBox(0,0), 0, $w_size = new Gtk::Label('')), + 0, gtkpack(new Gtk::HBox(0,10), + map { $go ||= $_; $_ } + map { gtksignal_connect(new Gtk::Button($_->[0]), "clicked" => $_->[1]) } + [ _("Install") => sub { $w->{retval} = 1; Gtk->main_quit } ], + #- keep show more or less [ _("Show less") => sub { &$show_add(+10) } ], + #- keep show more or less [ _("Show more") => sub { &$show_add(-10) } ], + ) + )); + $w->{window}->set_usize(map { $_ - 2 * $my_gtk::border - 4 } $windowwidth, $windowheight); + $w->show; + &$show_add(0); + &$update(); + $go->grab_focus; $w->main; } @@ -432,14 +487,15 @@ sub choosePackagesTree { sub installPackages { my ($o, $packages) = @_; - my ($current_total_size, $last_size, $nb, $total_size, $start_time, $last_dtime, $trans_progress_total); + my ($current_total_size, $last_size, $nb, $total_size, $start_time, $last_dtime); my $w = my_gtk->new(_("Installing"), grab => 1); - $w->{window}->set_usize($::windowwidth * 0.8, 260); + $w->{window}->set_usize($windowwidth * 0.8, $windowheight * 0.5); my $text = new Gtk::Label; - my ($msg, $msg_time_remaining, $msg_time_total) = map { new Gtk::Label($_) } '', (_("Estimating")) x 2; + my ($msg, $msg_time_remaining, $msg_time_total) = map { new Gtk::Label } (1..3); my ($progress, $progress_total) = map { new Gtk::ProgressBar } (1..2); - gtkadd($w->{window}, gtkpack(new Gtk::VBox(0,10), + gtkadd($w->{window}, gtkadd(new Gtk::EventBox, + gtkpack(new Gtk::VBox(0,10), _("Please wait, "), $msg, $progress, create_packtable({}, [_("Time remaining "), $msg_time_remaining], @@ -447,62 +503,42 @@ sub installPackages { ), $text, $progress_total, - '', - gtkadd(create_hbox(), - gtksignal_connect(new Gtk::Button(_("Cancel")), - clicked => sub { $pkgs::cancel_install = 1 })), - )); + ))); $msg->set(_("Preparing installation")); $w->sync; - my $oldInstallCallback = \&pkgs::installCallback; - local *pkgs::installCallback = sub { + my $old = \&log::ld; + local *log::ld = sub { my $m = shift; - if ($m =~ /^Starting installation/) { + if ($m =~ /^starting installation:/) { $nb = $_[0]; - $total_size = $_[1]; $current_total_size = 0; + $total_size = $_[2]; $current_total_size = 0; $start_time = time(); - $msg->set(_("%d packages", $nb)); + $msg->set(join '', @_); $w->flush; - } elsif ($m =~ /^Starting installing package/) { + } elsif ($m =~ /^starting installing/) { $progress->update(0); my $name = $_[0]; $msg->set(_("Installing package %s", $name)); $current_total_size += $last_size; - $last_size = c::headerGetEntry($o->{packages}[0]{$name}{header}, 'size'); - $text->set((split /\n/, c::headerGetEntry($o->{packages}[0]{$name}{header}, 'summary'))[0] || ''); + $last_size = c::headerGetEntry($o->{packages}{$name}{header}, 'size'); + $text->set((split /\n/, c::headerGetEntry($o->{packages}{$name}{header}, 'summary'))[0] || ''); $w->flush; - } elsif ($m =~ /^Progressing installing package/) { - $progress->update($_[2] ? $_[1] / $_[2] : 0); + } elsif ($m =~ /^progressing installation/) { + $progress->update($_[2] ? $_[0] / $_[2] : 0); my $dtime = time() - $start_time; - my $ratio = $total_size ? ($_[1] + $current_total_size) / $total_size : 0; + my $ratio = $total_size ? ($_[0] + $current_total_size) / $total_size : 0; my $total_time = $ratio ? $dtime / $ratio : time(); $progress_total->update($ratio); - if ($dtime != $last_dtime && $current_total_size > 2 * 1024 * 1024) { - $msg_time_total->set(formatTime(10 * round($total_time / 10))); - $msg_time_remaining->set(formatTime(10 * round(max($total_time - $dtime, 0) / 10))); + if ($dtime != $last_dtime) { + $msg_time_total->set(formatTime($total_time)); + $msg_time_remaining->set(formatTime(max($total_time - $dtime, 0))); $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) = @_; - my $msg = -_("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.", pkgs::mediumDescr($o->{packages}, $medium)); - - #- if not using a cdrom medium, always abort. - $method eq 'cdrom' and do { - local $my_gtk::grab = 1; - $o->ask_okcancel('', $msg); - }; + } else { goto $old } }; catch_cdie { $o->install_steps::installPackages($packages); } sub { @@ -510,28 +546,23 @@ If you don't have it, press Cancel to avoid installation from this Cd-Rom.", pkg $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 "setstep choosePackages\n"; - } $w->destroy; } + + + #------------------------------------------------------------------------------ sub load_rc($) { - if (my ($f) = grep { -r $_ } map { "$_/$_[0].rc" } ("share", $ENV{SHARE_PATH}, dirname(__FILE__))) { + if (my ($f) = grep { -r $_ } map { "$_/$_[0].rc" } (".", "/usr/share", dirname(__FILE__))) { Gtk::Rc->parse($f); foreach (cat_($f)) { if (/style\s+"background"/ .. /^\s*$/) { - @background1 = map { $_ * 256 * 257 } split ',', $1 if /NORMAL.*\{(.*)\}/; - @background2 = map { $_ * 256 * 257 } split ',', $1 if /PRELIGHT.*\{(.*)\}/; + @background1 = map { $_ * 256 * 256 } split ',', $1 if /NORMAL.*\{(.*)\}/; + @background2 = map { $_ * 256 * 256 } split ',', $1 if /PRELIGHT.*\{(.*)\}/; } } } @@ -552,12 +583,12 @@ style "default-font" { fontset = "$font" } -style "small-font" +style "steps" { fontset = "$font2" } widget "*" style "default-font" -widget "*Steps*" style "small-font" +widget "*Steps*" style "steps" )); } @@ -568,19 +599,6 @@ widget "*Steps*" style "small-font" } #------------------------------------------------------------------------------ -sub create_big_help { - my $w = my_gtk->new('', grab => 1, force_position => [ $::stepswidth, $::logoheight ]); - $w->{rwindow}->set_usize($::logowidth, $::rootheight - $::logoheight); - gtkadd($w->{window}, - gtkpack_(new Gtk::VBox(0,0), - 1, createScrolledWindow(gtktext_insert(new Gtk::Text, - formatAlaTeX(translate($help::steps{$::o->{step}})))), - 0, gtksignal_connect(new Gtk::Button(_("Ok")), "clicked" => sub { Gtk->main_quit }), - )); - $w->main; -} - -#------------------------------------------------------------------------------ sub create_help_window { my ($o) = @_; @@ -592,8 +610,8 @@ sub create_help_window { } else { $w = bless {}, 'my_gtk'; $w->{rwindow} = $w->{window} = new Gtk::Window; - $w->{rwindow}->set_uposition($::rootwidth - $::helpwidth, $::rootheight - $::helpheight); - $w->{rwindow}->set_usize($::helpwidth, $::helpheight); + $w->{rwindow}->set_uposition($width - $helpwidth, $height - $helpheight); + $w->{rwindow}->set_usize($helpwidth, $helpheight); $w->sync; } @@ -616,91 +634,68 @@ sub create_help_window { #- my @pixmap = Gtk::Gdk::Pixmap->create_from_xpm_d($w->{window}->window, undef, @l); #- gtkadd($b, new Gtk::Pixmap(@pixmap)); -# Gtk::XmHTML->init; - my $pixmap = new Gtk::Pixmap( gtkcreate_xpm($w->{window}, "$ENV{SHARE_PATH}/help.xpm")); + Gtk::XmHTML->init; gtkadd($w->{window}, gtkpack_(new Gtk::HBox(0,-2), #- 0, $b, -#- 1, createScrolledWindow($w_help = new Gtk::XmHTML))); - 0, $pixmap, - 1, createScrolledWindow($w_help = new Gtk::Text) - )); - -#- $w_help->source($o->{step} ? translate($o->{steps}{$o->{step}}{help}) : ''); - gtktext_insert($w_help, $o->{step} ? formatAlaTeX(translate($help::steps{$o->{step}})) : ''); + 1, createScrolledWindow($w_help = new Gtk::XmHTML))); +#- 1, createScrolledWindow($w_help = new Gtk::Text))); + $w_help->source($o->{step} ? translate($o->{steps}{$o->{step}}{help}) : ''); +#- gtktext_insert($w_help, $o->{step} ? formatAlaTeX(translate($o->{steps}{$o->{step}}{help})) : ''); $w->show; $o->{help_window} = $w; } -sub set_help { - shift; - gtktext_insert($w_help, - formatAlaTeX(join "\n", - map { translate($help::steps{$_}) } @_)); - 1; -} - #------------------------------------------------------------------------------ sub create_steps_window { my ($o) = @_; - my $PIX_H = my $PIX_W = 21; - $o->{steps_window}->destroy if $o->{steps_window}; + my %reachableSteps if 0; + %reachableSteps = (); my $w = bless {}, 'my_gtk'; $w->{rwindow} = $w->{window} = new Gtk::Window; $w->{rwindow}->set_uposition(0, 0); - $w->{rwindow}->set_usize($::stepswidth, $::stepsheight); - $w->{rwindow}->set_name('Steps'); + $w->{rwindow}->set_usize($stepswidth, $stepsheight); + $w->{rwindow}->set_name("Steps"); $w->{rwindow}->set_events('button_press_mask'); + $w->{rwindow}->signal_connect(button_press_event => sub { + $::setstep or return; + my $Y = $_[1]{'y'}; + map_each { + my (undef, $y, undef, $height) = @{$::b->allocation}; + $y <= $Y && $Y < $y + $height and die "setstep $::a\n"; + } %reachableSteps; + }); $w->show; gtkadd($w->{window}, gtkpack_(new Gtk::VBox(0,0), - (map {; 1, $_ } map { - my $step_name = $_; + (map { 1, $_ } map { my $step = $o->{steps}{$_}; - my $darea = new Gtk::DrawingArea; - my $draw_pix = sub { - my $pixmap = Gtk::Gdk::Pixmap->create_from_xpm($darea->window, - $darea->style->bg('normal'), - $_[1]) or die; - $darea->window->draw_pixmap ($darea->style->bg_gc('normal'), - $pixmap, 0, 0, - ($darea->allocation->[2]-$PIX_W)/2, - ($darea->allocation->[3]-$PIX_H)/2, - $PIX_W , $PIX_H ); - }; + my $circle = + $step->{done} && \@green_circle || + $step->{entered} && \@orange_circle || + \@red_circle; + my @pixmap = Gtk::Gdk::Pixmap->create_from_xpm_d($w->{window}->window, undef, @$circle); - my $f = sub { - my ($type) = @_; - my $color = $step->{done} ? 'green' : $step->{entered} ? 'orange' : 'red'; - "$ENV{SHARE_PATH}/step-$color$type.xpm"; - }; - $darea->set_usize($PIX_W,$PIX_H); - $darea->set_events(['exposure_mask', 'enter_notify_mask', 'leave_notify_mask', 'button_press_mask', 'button_release_mask' ]); - $darea->signal_connect(expose_event => $draw_pix, $f->('')); - if ($step->{reachable}) { - $darea->signal_connect(enter_notify_event => $draw_pix, $f->('-on')); - $darea->signal_connect(leave_notify_event => $draw_pix, $f->('')); - $darea->signal_connect(button_press_event => $draw_pix, $f->('-click')); - $darea->signal_connect(button_release_event => sub { die "setstep $step_name\n" }); - } - gtkpack_(new Gtk::HBox(0,5), 0, $darea, 0, new Gtk::Label(translate($step->{text}))); - } grep { - !eval $o->{steps}{$_}{hidden}; - } @{$o->{orderedSteps}}), + my $w = new Gtk::Label(translate($step->{text})); + + $w->set_name("Steps" . ($step->{reachable} && "Reachable")); + my $b = new Gtk::HBox(0,5); + gtkpack_($b, 0, new Gtk::Pixmap(@pixmap), 0, $w); + + $reachableSteps{$_} = $b if $step->{reachable}; + $b; + } grep { !(($::beginner || !$o->{installClass}) && $o->{steps}{$_}{beginnerHidden}) } @{$o->{orderedSteps}}), 0, gtkpack(new Gtk::HBox(0,0), map { my $t = $_; my $w = new Gtk::Button(''); $w->set_name($t); $w->set_usize(0, 7); - gtksignal_connect($w, clicked => sub { - $::setstep or return; #- just as setstep s - install_theme($o, $t); die "theme_changed\n" - }); + gtksignal_connect($w, clicked => sub { install_theme($o, $t); die "theme_changed\n" }); } @themes))); $w->show; $o->{steps_window} = $w; @@ -712,12 +707,12 @@ sub create_logo_window() { gtkdestroy($o->{logo_window}); my $w = bless {}, 'my_gtk'; $w->{rwindow} = $w->{window} = new Gtk::Window; - $w->{rwindow}->set_uposition($::stepswidth, 0); - $w->{rwindow}->set_usize($::logowidth, $::logoheight); - $w->{rwindow}->set_name("logo"); + $w->{rwindow}->set_uposition($stepswidth, 0); + $w->{rwindow}->set_usize($logowidth, $logoheight); + $w->{rwindow}->set_name("background"); $w->show; my $file = "logo-mandrake.xpm"; - -r $file or $file = "$ENV{SHARE_PATH}/$file"; + -r $file or $file = "/usr/share/$file"; if (-r $file) { my $ww = $w->{window}; my @logo = Gtk::Gdk::Pixmap->create_from_xpm($ww->window, $ww->style->bg('normal'), $file); @@ -726,96 +721,36 @@ sub create_logo_window() { $o->{logo_window} = $w; } -sub init_sizes() { -# my $maxheight = arch() eq "ppc" ? 1024 : 600; -# my $maxwidth = arch() eq "ppc" ? 1280 : 800; - ($::rootheight, $::rootwidth) = (480, 640); - ($::rootheight, $::rootwidth) = my_gtk::gtkroot()->get_size; - #- ($::rootheight, $::rootwidth) = (min(768, $::rootheight), min(1024, $::rootwidth)); - ($::stepswidth, $::stepsheight) = (145, $::rootheight); - ($::logowidth, $::logoheight) = ($::rootwidth - $::stepswidth, 40); - ($::helpwidth, $::helpheight) = ($::rootwidth - $::stepswidth, 100); - ($::windowwidth, $::windowheight) = ($::rootwidth - $::stepswidth, $::rootheight - $::helpheight - $::logoheight); -} - #------------------------------------------------------------------------------ -sub createXconf { - my ($file, $mouse_type, $mouse_dev, $wacom_dev) = @_; - - devices::make("/dev/kbd") if arch() =~ /^sparc/; #- used by Xsun style server. - symlinkf($mouse_dev, "/dev/mouse"); - - #- needed for imlib to start on 8-bit depth visual. - symlink("/tmp/stage2/etc/imrc", "/etc/imrc"); - symlink("/tmp/stage2/etc/im_palette.pal", "etc/im_palette.pal"); - - my $wacom; - if ($wacom_dev) { - $wacom_dev = devices::make($wacom_dev); - $wacom = <<END; -Section "Module" - Load "xf86Wacom.so" -EndSection - -Section "XInput" - SubSection "WacomStylus" - Port "$wacom_dev" - AlwaysCore - EndSubSection - SubSection "WacomCursor" - Port "$wacom_dev" - AlwaysCore - EndSubSection - SubSection "WacomEraser" - Port "$wacom_dev" - AlwaysCore - EndSubSection -EndSection -END - } +sub createXconf($$$) { + my ($file, $mouse_type, $mouse_dev) = @_; + $mouse_type ||= "Microsoft"; + $mouse_dev = devices::make($mouse_dev || "ttyS0"); local *F; open F, ">$file" or die "can't create X configuration file $file"; print F <<END; Section "Files" - FontPath "/usr/X11R6/lib/X11/fonts:unscaled" + FontPath "/usr/X11R6/lib/X11/fonts" EndSection Section "Keyboard" Protocol "Standard" - AutoRepeat 0 0 + AutoRepeat 500 5 LeftAlt Meta RightAlt Meta ScrollLock Compose RightCtl Control -END - - if (arch() =~ /^sparc/) { - print F <<END; - XkbRules "sun" - XkbModel "sun" - XkbLayout "us" - XkbCompat "compat/complete" - XkbTypes "types/complete" - XkbKeycodes "sun(type5)" - XkbGeometry "sun(type5)" - XkbSymbols "sun/us(sun5)" -END - } else { - print F " XkbDisable\n"; - } - - print F <<END; EndSection Section "Pointer" Protocol "$mouse_type" - Device "/dev/mouse" - ZAxisMapping 4 5 + Device "$mouse_dev" + Emulate3Buttons + Emulate3Timeout 50 EndSection -$wacom Section "Monitor" Identifier "My Monitor" @@ -825,7 +760,6 @@ Section "Monitor" VertRefresh 50-70 Modeline "640x480" 25.175 640 664 760 800 480 491 493 525 Modeline "640x480" 28.3 640 664 760 800 480 491 493 525 - ModeLine "800x600" 36 800 824 896 1024 600 601 603 625 EndSection @@ -836,14 +770,9 @@ Section "Device" Chipset "generic" EndSection -Section "Device" - Identifier "svga" - VendorName "Unknown" - BoardName "Unknown" -EndSection Section "Screen" - Driver "vga16" + Driver "svga" Device "Generic VGA" Monitor "My Monitor" Subsection "Display" @@ -853,38 +782,27 @@ Section "Screen" EndSection Section "Screen" - Driver "fbdev" + Driver "vga16" Device "Generic VGA" Monitor "My Monitor" Subsection "Display" - Depth 16 - Modes "default" - ViewPort 0 0 - EndSubsection -EndSection - -Section "Screen" - Driver "svga" - Device "svga" - Monitor "My Monitor" - Subsection "Display" - Depth 16 - Modes "800x600" "640x480" + Modes "640x480" ViewPort 0 0 EndSubsection EndSection Section "Screen" - Driver "accel" - Device "svga" + Driver "fbdev" + Device "Generic VGA" Monitor "My Monitor" Subsection "Display" Depth 16 - Modes "800x600" "640x480" + Modes "default" ViewPort 0 0 EndSubsection EndSection END + } #- ModeLine "640x480" 28 640 672 768 800 480 490 492 525 #-###################################################################################### |