summaryrefslogtreecommitdiffstats
path: root/perl-install/install_steps_gtk.pm
diff options
context:
space:
mode:
authorMystery Man <unknown@mandriva.org>2000-11-08 00:01:16 +0000
committerMystery Man <unknown@mandriva.org>2000-11-08 00:01:16 +0000
commitd5c526273db473a7d87a26000585900fc10dda7d (patch)
tree0fdaabe7a00921b6cc556601b103d344fc7ac781 /perl-install/install_steps_gtk.pm
parent9c164312d4bfff6d93e1c4529de6b992f2bebc44 (diff)
downloaddrakx-backup-do-not-use-d5c526273db473a7d87a26000585900fc10dda7d.tar
drakx-backup-do-not-use-d5c526273db473a7d87a26000585900fc10dda7d.tar.gz
drakx-backup-do-not-use-d5c526273db473a7d87a26000585900fc10dda7d.tar.bz2
drakx-backup-do-not-use-d5c526273db473a7d87a26000585900fc10dda7d.tar.xz
drakx-backup-do-not-use-d5c526273db473a7d87a26000585900fc10dda7d.zip
This commit was manufactured by cvs2svn to create branch
'unlabeled-1.1.1'.
Diffstat (limited to 'perl-install/install_steps_gtk.pm')
-rw-r--r--perl-install/install_steps_gtk.pm952
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
#-######################################################################################