diff options
Diffstat (limited to 'perl-install/standalone/harddrake2')
-rwxr-xr-x | perl-install/standalone/harddrake2 | 340 |
1 files changed, 193 insertions, 147 deletions
diff --git a/perl-install/standalone/harddrake2 b/perl-install/standalone/harddrake2 index 2087f1b09..9210f5ca7 100755 --- a/perl-install/standalone/harddrake2 +++ b/perl-install/standalone/harddrake2 @@ -6,15 +6,17 @@ use strict; use diagnostics; use lib qw(/usr/lib/libDrakX); use standalone; +use MDK::Common; # help perl_checker use common; # i18n: IMPORTANT: to get correct namespace (drakconf instead of only libDrakX) BEGIN { unshift @::textdomains, 'drakconf' } -use mygtk2 qw(gtknew); #- do not import gtkadd which conflicts with ugtk2 version -use ugtk2 qw(:create :helpers :wrappers); +use mygtk3 qw(gtknew); #- do not import gtkadd which conflicts with ugtk3 version +use ugtk3 qw(:create :helpers :wrappers); use interactive; -use harddrake::data; #- needs to stay after use-ugtk2 as long as this module defines globals containing some N() +use modules::parameters; +use harddrake::data; #- needs to stay after use-ugtk3 as long as this module defines globals containing some N() use fsedit; use pkgs; use POSIX qw(:sys_wait_h); @@ -55,6 +57,7 @@ my %fields = "primary_partitions" => [ N("Primary partitions"), N("the number of the primary partitions") ], "Vendor" => [ N("Vendor"), N("the vendor name of the device") ], "pci_domain" => [ N("PCI domain"), N("the PCI domain of the device") ], + "pci_revision" => [ N("PCI revision"), N("the PCI domain of the device") ], "pci_bus" => [ N("Bus PCI #"), N("the PCI bus on which the device is plugged") ], "pci_device" => [ N("PCI device #"), N("PCI device number") ], "pci_function" => [ N("PCI function #"), N("PCI function number") ], @@ -66,25 +69,23 @@ my %fields = }, CPU => { + "system type" => [ "Sytem Type", "Name of the system" ], + "BogoMIPS" => [ N("Bogomips"), N("the GNU/Linux kernel needs to run a calculation loop at boot time to initialize a timer counter. Its result is stored as bogomips as a way to \"benchmark\" the cpu.") ], "bogomips" => [ N("Bogomips"), N("the GNU/Linux kernel needs to run a calculation loop at boot time to initialize a timer counter. Its result is stored as bogomips as a way to \"benchmark\" the cpu.") ], "cache size" => [ N("Cache size"), N("size of the (second level) cpu cache") ], - "coma_bug" => [ - #-PO: here "comas" is the medical coma, not the lexical coma!! - N("Coma bug"), N("whether this cpu has the Cyrix 6x86 Coma bug") ], "cpu family" => [ N("Cpuid family"), N("family of the cpu (eg: 6 for i686 class)") ], "cpuid level" => [ N("Cpuid level"), N("information level that can be obtained through the cpuid instruction") ], "cpu MHz" => [ N("Frequency (MHz)"), N("the CPU frequency in MHz (Megahertz which in first approximation may be coarsely assimilated to number of instructions the cpu is able to execute per second)") ], "flags" => [ N("Flags"), N("CPU flags reported by the kernel") ], - "fdiv_bug" => [ N("Fdiv bug"), - N("Early Intel Pentium chips manufactured have a bug in their floating point processor which did not achieve the required precision when performing a Floating point DIVision (FDIV)") ], - "fpu" => [ N("Is FPU present"), N("yes means the processor has an arithmetic coprocessor") ], - "fpu_exception" => [ N("Whether the FPU has an irq vector"), N("yes means the arithmetic coprocessor has an exception vector attached") ], - "f00f_bug" => [ N("F00f bug"), N("early pentiums were buggy and freezed when decoding the F00F bytecode") ], - "hlt_bug" => [ N("Halt bug"), - N("Some of the early i486DX-100 chips cannot reliably return to operating mode after the \"halt\" instruction is used") ], + "cpu cores" => [ N("Cores"), N("CPU cores") ], + "core id" => [ N("Core ID"), N("Core ID") ], + "physical id" => [ N("Physical ID"), N("Physical ID") ], + "apicid" => [ N("ACPI ID"), N("ACPI ID") ], + "siblings" => [ N("Siblings"), N("Siblings") ], "level" => [ N("Level"), N("sub generation of the cpu") ], "model" => [ N("Model"), N("generation of the cpu (eg: 8 for Pentium III, ...)") ], "model name" => [ N("Model name"), N("official vendor name of the cpu") ], + "cpu model" => [ N("Model name"), N("official vendor name of the cpu") ], "name" => [ N("Name"), N("the name of the CPU") ], "processor" => [ N("Processor ID"), N("the number of the processor") ], "stepping" => [ N("Model stepping"), N("stepping of the cpu (sub model (generation) number)") ], @@ -99,7 +100,8 @@ my %fields = { channel => [ N("Channel"), N("EIDE/SCSI channel") ], info => [ N("Disk identifier"), N("usually the disk serial number") ], - lun => [ N("Logical unit number"), N("the SCSI target number (LUN). SCSI devices connected to a host are uniquely identified by a + id => [ N("Target id number"), N("the SCSI target identifier") ], + lun => [ N("Logical unit number"), N("the SCSI Logical Unit Number (LUN). SCSI devices connected to a host are uniquely identified by a channel number, a target id and a logical unit number") ], }, MEMORY => @@ -112,6 +114,10 @@ channel number, a target id and a logical unit number") ], 'Current Speed' => [ N("Speed"), N("Speed of the memory bank") ], 'Bank Connections' => [ N("Bank connections"), '' ], 'Socket Designation' => [ N("Name"), N("Socket designation of the memory bank") ], + # for Memory Device: + 'Locator' => [ N("Location"), ], + 'Size' => [ N("Size"), N("Size of the memory device") ], + 'Speed' => [ N("Speed"), N("Speed of the memory bank") ], }, MOUSE => { @@ -125,11 +131,12 @@ channel number, a target id and a logical unit number") ], } ); +my $identification = N("Identification"); my %groups = ( generic => { - N("Identification") => [ qw(Vendor model description info media_type) ], - N("Connection") => [ qw(bus pci_domain pci_bus pci_device pci_function vendor id subvendor subid) ], + $identification => [ qw(Vendor model description info media_type) ], + N("Connection") => [ qw(bus pci_domain pci_bus pci_device pci_function pci_revision vendor id subvendor subid) ], }, AUDIO => { @@ -137,22 +144,21 @@ my %groups = ( }, CPU => { - N("Identification") => [ qw(processor vendor_id), "model name", "cpu family", qw(model level stepping) ], + $identification => [ qw(processor vendor_id), "model name", "cpu family", qw(model level stepping), "cpuid level" ], + N("Cores") => [ 'cpu cores', 'core id', 'physical id', 'apicid', 'siblings' ], N("Performances") => [ "cpu MHz", "cache size", "bogomips" ], - N("Bugs") => [ qw(fdiv_bug coma_bug f00f_bug hlt_bug) ], - N("FPU") => [ qw(fpu fpu_exception) ], }, HARDDISK => { - N("Identification") => [ qw(Vendor Model description info media_type) ], - N("Connection") => [ qw(bus channel lun) ], + $identification => [ qw(Vendor Model description info media_type) ], + N("Connection") => [ qw(bus channel lun id) ], N("Bus identification") => [ qw(vendor id subvendor subid) ], N("Device") => [ qw(device) ], N("Partitions") => [ qw(primary_partitions extended_partitions) ], }, MOUSE => { - N("Identification") => [ qw(name type MOUSETYPE Protocol) ], + $identification => [ qw(name type MOUSETYPE Protocol) ], N("Features") => [ qw(EmulateWheel nbuttons) ], }, ); @@ -173,82 +179,52 @@ my ($current_device, $current_class, $current_configurator); my %sysh = distrib(); my $distro_name = $sysh{system}; -my %menus = ( - 'options' => - #-PO: please keep all "/" characters !!! - N("/_Options"), - 'help' => N("/_Help") - ); - my %menu_options = ( - 'PRINTERS_DETECTION' => [ $menus{options}, N("/Autodetect _printers") ], - 'MODEMS_DETECTION' => [ $menus{options}, N("/Autodetect _modems") ], - 'JAZZ_DETECTION' => [ $menus{options}, N("/Autodetect _jaz drives") ], - 'PARALLEL_ZIP_DETECTION' => [ $menus{options}, N("/Autodetect parallel _zip drives") ], + 'MODEMS_DETECTION' => N("Autodetect _modems"), + 'PARALLEL_ZIP_DETECTION' => N("Autodetect parallel _zip drives"), ); -$ugtk2::wm_icon = "harddrake"; -$w = ugtk2->new(N("Hardware Configuration")); +$ugtk3::wm_icon = "harddrake"; +$w = ugtk3->new(N("Hardware Configuration")); # fake diagnostics pragma: local $::main_window = $w->{real_window}; -my @menu_items = - ( - [ N("/_File"), undef, undef, undef, '<Branch>' ], - [ N("/_File") . N("/_Quit"), N("<control>Q"), \&quit_global, undef, '<Item>' ], - [ join('', @{$menu_options{PRINTERS_DETECTION}}), undef, - sub { $options{PRINTERS_DETECTION} = $check_boxes{PRINTERS_DETECTION}->get_active }, undef, '<CheckItem>' ], - [ join('', @{$menu_options{MODEMS_DETECTION}}), undef, - sub { $options{MODEMS_DETECTION} = $check_boxes{MODEMS_DETECTION}->get_active }, undef, '<CheckItem>' ], - [ join('', @{$menu_options{JAZZ_DETECTION}}), undef, - sub { $options{JAZZ_DETECTION} = $check_boxes{JAZZ_DETECTION}->get_active }, undef, '<CheckItem>' ], - [ join('', @{$menu_options{PARALLEL_ZIP_DETECTION}}), undef, - sub { $options{PARALLEL_ZIP_DETECTION} = $check_boxes{PARALLEL_ZIP_DETECTION}->get_active }, undef, '<CheckItem>' ], - [ $menus{help}, undef, undef, undef, '<Branch>' ], - if_(-x "/usr/sbin/drakhelp_inst", - [ $menus{help} . N("/_Help"), undef, sub { run_program::raw({ detach => 1 }, 'drakhelp', '--id', 'harddrake') }, undef, '<Item>' ], - ), - [ $menus{help} . N("/_Fields description"), undef, sub { - if ($current_device) { - create_dialog(N("Harddrake help"), - '<big><b>' . N("Description of the fields:\n\n") . '</b></big>' - . join("\n\n", map { - my $info = lookup_field($_); - if_($info->[0], formatAlaTeX(qq(<span foreground="royalblue3">$info->[0]:</span> $info->[1]))); - } sort keys %$current_device), - { use_markup => 1, transient => $w->{real_window}, height => 400, scroll => 1 }); - - } else { - create_dialog(N("Select a device!"), N("Once you've selected a device, you'll be able to see the device information in fields displayed on the right frame (\"Information\")"), { transient => $w->{real_window} }); - } - }, - undef, '<Item>' - ], - if_(!-e "/etc/sysconfig/oem", - [ $menus{help} . N("/_Report Bug"), undef, sub { run_program::raw({ detach => 1 }, 'drakbug', '--report', 'harddrake') }, undef, '<Item>' ], - ), - [ $menus{help} . N("/_About..."), undef, sub { - my $license = formatAlaTeX(translate($::license)); - $license =~ s/\n/\n\n/sg; # nicer formatting - my $w = gtknew('AboutDialog', name => N("Harddrake"), - version => mandrake_release_info()->{version}, - copyright => N("Copyright (C) %s by Mandriva", '2001-2008'), - license => $license, wrap_license => 1, - comments => N("This is HardDrake, a %s hardware configuration tool.", $distro_name), - website => 'http://mandrivalinux.com', - website_label => N("Mandriva Linux"), - authors => 'Thierry Vignaud <vignaud@mandriva.com>', - artists => 'Hélène Durosini <ln@mandriva.com>', - translator_credits => - #-PO: put here name(s) and email(s) of translator(s) (eg: "John Smith <jsmith@nowhere.com>") - N("_: Translator(s) name(s) & email(s)\n"), - transient_for => $::main_window, modal => 1, position_policy => 'center-on-parent', - ); - $w->show_all; - $w->run; - }, undef, '<Item>' - ] - ); +my $has_help = -x "/usr/sbin/drakhelp_inst"; +my $ui = gtknew('UIManager', actions => [ + # [name, stock_id, value, label, accelerator, tooltip, callback] + [ 'FileMenu', undef, N("_File") ], + [ 'Quit', undef, N("_Quit"), N("<control>Q"), undef, \&quit_global ], + [ 'OptionsMenu', undef, N("_Options") ], + [ 'HelpMenu', undef, N("_Help") ], + if_($has_help, [ 'Help', undef, N("_Help"), N("<control>H"), undef, \&run_help ]), + [ 'Fields description', undef, N("_Fields description"), undef, undef, \&fields_help ], + [ 'Report Bug', undef, N("_Report Bug"), undef, undef, \&run_drakbug ], + [ 'About', undef, N("_About..."), '', undef, \&about ], + ], + toggle_actions => [ + [ 'MODEMS_DETECTION', undef, $menu_options{MODEMS_DETECTION}, undef, undef, \&handle_modem_option ], + [ 'PARALLEL_ZIP_DETECTION', undef, $menu_options{PARALLEL_ZIP_DETECTION}, undef, undef, \&handle_zip_option ], + ], + string => + join("\n", + qq(<ui> + <menubar name='MenuBar'> + <menu action='FileMenu'> + <menuitem action='Quit'/> + </menu> + <menu action='OptionsMenu'> + <menuitem action='MODEMS_DETECTION'/> + <menuitem action='PARALLEL_ZIP_DETECTION'/> + </menu> + <menu action='HelpMenu'>), + if_($has_help, "<menuitem action='Help'/>"), + qq( + <menuitem action='Fields description'/> + <menuitem action='Report Bug'/> + <menuitem action='About'/> + </menu> + </menubar> +</ui>))); $in = 'interactive'->vnew('su'); #require_root_capability(); @@ -260,26 +236,25 @@ add_icon_path('/usr/share/pixmaps/harddrake2/'); $::noborderWhenEmbedded = 1; -my ($menubar, $factory) = create_factory_menu($w->{real_window}, @menu_items); +my $menubar = $ui->get_widget('/MenuBar'); $w->{window}->set_size_request(805, 550) if !$::isEmbedded; -my $tree_model = Gtk2::TreeStore->new("Gtk2::Gdk::Pixbuf", "Glib::String", "Glib::Int"); -$w->{window}->add(gtkpack_(0, Gtk2::VBox->new(0, 0), +my $tree_model = Gtk3::TreeStore->new("Gtk3::Gdk::Pixbuf", "Glib::String", "Glib::Int"); +$w->{window}->add(gtkpack_(0, Gtk3::VBox->new(0, 0), 0, $menubar, - 0, Gtk2::Banner->new("/usr/share/mcc/themes/default/harddrake-mdk.png", translate("Hardware")), - 1, create_hpaned(gtkadd(Gtk2::Frame->new(N("Detected hardware")), - create_scrolled_window(gtkset_size_request(my $tree = Gtk2::TreeView->new_with_model($tree_model), 350, -1), ['automatic', 'automatic'])), - gtkpack_(0, Gtk2::VBox->new(0, 0), - 1, gtkadd(my $frame = Gtk2::Frame->new(N("Information")), - create_scrolled_window(my $text = Gtk2::TextView->new)), - 0, my $module_cfg_button = gtksignal_connect(Gtk2::Button->new(N("Set current driver options")), + 0, Gtk3::Banner->new("/usr/share/mcc/themes/default/harddrake-mdk.png", translate("Hardware")), + 1, create_hpaned(my $f = gtkadd(Gtk3::Frame->new(N("Detected hardware")), + create_scrolled_window(gtkset_size_request(my $tree = Gtk3::TreeView->new_with_model($tree_model), 350, -1), ['automatic', 'automatic'])), + gtkpack_(0, Gtk3::VBox->new(0, 0), + 1, gtkadd(my $frame = Gtk3::Frame->new(N("Information")), + create_scrolled_window(my $text = Gtk3::TextView->new)), + 0, my $module_cfg_button = gtksignal_connect(Gtk3::Button->new(N("Set current driver options")), clicked => sub { local $SIG{CHLD} = undef; require modules::interactive; modules::interactive::config_window($in, $current_device); - gtkset_mousecursor_normal(); }), - 0, my $config_button = gtksignal_connect(Gtk2::Button->new(N("Run config tool")), + 0, my $config_button = gtksignal_connect(Gtk3::Button->new(N("Run config tool")), # we've a configurator, let's add a button for it and show it clicked => sub { return 1 if defined $pid; @@ -290,18 +265,26 @@ $w->{window}->add(gtkpack_(0, Gtk2::VBox->new(0, 0), ) ); +$f->set_size_request(350, -1); $text->set_wrap_mode('word'); $frame->set_size_request(300, 450) unless $::isEmbedded; # $tree->set_column_auto_resize(0, 1); my (@data, @configurators); -$tree->append_column(my $textcolumn = Gtk2::TreeViewColumn->new_with_attributes(undef, Gtk2::MDV::CellRendererPixWithLabel->new, 'pixbuf' => 0, label => 1)); +$tree->append_column(my $textcolumn = Gtk3::TreeViewColumn->new); +$textcolumn->pack_start(my $img_renderer = Gtk3::CellRendererPixbuf->new, 0); +$textcolumn->set_attributes($img_renderer, pixbuf => 0); + +$textcolumn->pack_start(my $text_renderer = Gtk3::CellRendererText->new, 1); +$textcolumn->set_attributes($text_renderer, text => 1); + $tree->set_headers_visible(0); sub fill_default_text { my ($text) = @_; - $text->get_buffer->set_text(N("Click on a device in the left tree in order to display its information here.")); + $text->get_buffer->set_text(N("Click on a device in the tree on the left in order to display its information here.")); } +my %has_parameter; $tree->get_selection->signal_connect('changed' => sub { my ($select) = @_; my ($model, $iter) = $select->get_selected; @@ -310,7 +293,6 @@ $tree->get_selection->signal_connect('changed' => sub { ($current_device, $current_class) = @{$data[$idx]}; if ($idx ne -1) { - use Gtk2::Pango; my %device_fields = map { # The U+200E character is to force LTR display, as what what follows the colon is always in LTR (device names, paths, etc), # this ensures proper displaying of names like /dev/fd0 (otherwise it gets 'dev/fd0/'). @@ -318,7 +300,7 @@ $tree->get_selection->signal_connect('changed' => sub { my $field = lookup_field($_); if_($_ && $field->[0], $_ => [ - [ $field->[0] . ": \x{200e}", { 'foreground' => 'royalblue3', 'weight' => Gtk2::Pango->PANGO_WEIGHT_BOLD } ], + [ $field->[0] . ": \x{200e}", { 'foreground' => 'royalblue3', 'weight' => 'bold' } ], [ ($current_device->{$_} =~ /^(unknown)/ ? N("unknown") : $current_device->{$_} =~ /^(Unknown)/ ? N("Unknown") : $current_device->{$_} eq 'yes' ? N("Yes") : @@ -330,9 +312,9 @@ $tree->get_selection->signal_connect('changed' => sub { my ($grouped, $ungrouped) = partition { my $field = $_; member($field, map { @$_ } values %groups); - } keys %device_fields; + } sort keys %device_fields; my @formated; - foreach my $group (N("Identification"), grep { $_ ne N("Identification") } keys %groups) { + foreach my $group ($identification, grep { $_ ne $identification } keys %groups) { my @fields = @{$groups{$group}}; # have we at least a member in that group? next unless any { member($_, @fields) } @$grouped; @@ -352,6 +334,15 @@ $tree->get_selection->signal_connect('changed' => sub { $current_configurator = $configurators[$idx]; show_hide($current_configurator && -x first(split /\s+/, $current_configurator), $config_button); # strip arguments for -x test + + # hide module configuration button if needed: + my $driver = $current_device->{driver}; + if (!defined $has_parameter{$driver}) { + local $SIG{CHLD} = undef; + $has_parameter{$driver} ||= to_bool(scalar modules::parameters::parameters($driver)); + } + show_hide($has_parameter{$driver}, $module_cfg_button); + return 1; } } @@ -362,10 +353,11 @@ $tree->get_selection->signal_connect('changed' => sub { $module_cfg_button->hide; }); +$w->{rwindow}->add_accel_group($ui->get_accel_group); # show the main window earlier (so that sub dialogs can use main # window's icon and so that no Gtk+ critical message got displayed): $w->{rwindow}->show_all; -my $flush_guard = Gtk2::GUI_Update_Guard->new; +my $flush_guard = Gtk3::GUI_Update_Guard->new; $_->hide foreach $module_cfg_button, $config_button; # hide buttons while no device my $wait = $in->wait_message(N("Please wait"), N("Detection in progress")); gtkflush() if !$::isEmbedded; @@ -379,10 +371,8 @@ my @classes; foreach my $hw_class (@harddrake::data::tree) { my ($Ident, $title, $icon, $configurator, $detector) = @$hw_class{qw(class string icon configurator detector)}; next if ref($detector) ne "CODE"; #skip class witouth detector - next if $Ident =~ /(MODEM|PRINTER)/ && $::testing; - next if $Ident =~ /JAZZ/ && !$options{JAZZ_DETECTION}; - next if $Ident =~ /MODEM/ && !$options{MODEMS_DETECTION}; - next if $Ident =~ /PRINTER/ && !$options{PRINTERS_DETECTION}; + next if $Ident =~ /MODEM/ && $::testing; + $detect_devices::detect_serial_modem = 0 if $Ident =~ /MODEM/ && !$options{MODEMS_DETECTION}; my @devices = $detector->(\%options); next unless @devices; # Skip empty class (no devices) @@ -424,13 +414,6 @@ foreach (@classes) { $_->{capacity} =~ s/DVD/$dvd/; } $configurator .= harddrake::data::set_removable_configurator($Ident, $_); - if ($Ident eq "AUDIO") { - require harddrake::sound; - my @alter = harddrake::sound::get_alternative($_->{driver}); - if (my $alternative_drivers = join(', ', @alter)) { - $_->{alternative_drivers} = $alternative_drivers; - } - } if ($Ident eq "HARDDISK") { my $hd = $_; my $info = find { $_->{device} eq $hd->{device} } @{$all_hds->{hds}}; @@ -449,11 +432,9 @@ foreach (@classes) { rename_field($_, 'usb_driver', 'driver'); rename_field($_, 'usb_id', 'id'); rename_field($_, 'usb_media_type', 'media_type'); - if ($_->{nice_media_type}) { - delete $_->{media_type}; - rename_field($_, 'nice_media_type', 'media_type'); - } + force_rename_field($_, 'nice_media_type', 'media_type'); rename_field($_, 'usb_pci_bus', 'bus'); + force_rename_field($_, 'nice_bus', 'bus'); rename_field($_, 'usb_vendor', 'vendor'); rename_field($_, 'vendor_name', 'Vendor'); @@ -463,19 +444,32 @@ foreach (@classes) { foreach my $field (qw(device)) { $_->{$field} = "/dev/$_->{$field}" if $_->{$field}; } - foreach my $field (qw(vendor id subvendor subid)) { - $_->{$field} = sprintf("0x%04x", $_->{$field}); - delete $_->{$field} if $_->{$field} eq "0xffff"; # 0xffff equals to '*' + format_bus_ids($_); + if ($_->{pci_revision}) { + $_->{pci_revision} = sprintf("0x%02x", $_->{pci_revision}); + } else { + delete $_->{pci_revision};# if $_->{pci_revision} eq "0x0000"; } + $tree_model->append_set($parent_iter, [ 1 => $custom_id, 2 => $index++ ]); push @data, [ $_, $Ident ]; push @configurators, $configurator; } - $tree->expand_row($tree_model->get_path($parent_iter), 1) unless $title eq N("Unknown/Others"); } undef $flush_guard; +sub format_bus_ids { + my ($device) = @_; + # do not vivify ids: + return if !($device->{vendor} && $device->{id}); + foreach my $field (qw(vendor id subvendor subid)) { + next if !$device->{$field}; + $device->{$field} = sprintf("0x%04x", $device->{$field}); + delete $device->{$field} if $device->{$field} eq "0xffff"; # 0xffff equals to '*' + } +} + sub reap_children() { # reap zombies my $child_pid; @@ -488,9 +482,8 @@ $w->{rwindow}->signal_connect(delete_event => \&quit_global); $w->{rwindow}->set_position('center') unless $::isEmbedded; foreach (keys %menu_options) { - my $title = strip_first_underscore(@{$menu_options{$_}}); $options{$_} = 0 unless defined($options{$_}); # force detection by default - $check_boxes{$_} = $factory->get_widget("<main>" . $title); + $check_boxes{$_} = $ui->get_widget('/MenuBar/OptionsMenu/' . $_); $check_boxes{$_}->set_active($options{$_}); # restore saved values } @@ -498,20 +491,20 @@ $textcolumn->set_min_width(350); #$textcolumn->set_minmax_width(400); $textcolumn->set_sizing('GTK_TREE_VIEW_COLUMN_AUTOSIZE');#GROW_ONLY #$tree->columns_autosize(); -$tree->signal_connect(realize => sub { $tree->get_selection->select_path(Gtk2::TreePath->new_first) }); +$tree->signal_connect(realize => sub { $tree->get_selection->select_path(Gtk3::TreePath->new_first) }); { $SIG{CHLD} = undef; #local $SIG{CHLD} = sub {}; - if (my @packages = difference2([ pkgs::detect_rpmsrate_hardware_packages() ], [ qw(ati.2 dmraid gnome-alsamixer mdadm xmms-alsa) ])) { - @packages = grep { !$in->do_pkgs->is_installed($_) } @packages; - - # workarounding do_pkgs->is_available() destroying $_: - my (@packages2install) = (grep { $in->do_pkgs->is_available($_) } @packages); + # do no try to install too generic hw packages: + my @blacklist = [ qw(dmraid mdadm) ]; + if (my @packages = difference2([ pkgs::detect_hardware_packages($in->do_pkgs) ], @blacklist)) { + @packages = difference2(\@packages, [ $in->do_pkgs->are_installed(@packages) ]); + # we use uniq() because on biarch machines, we got packages twice: + my @packages2install = uniq($in->do_pkgs->are_available(@packages)); undef $wait; - gtkset_mousecursor_normal(); if (@packages2install && $in->ask_yesorno(N("Warning"), N("The following packages need to be installed:\n") . join(', ', @packages2install))) { $in->do_pkgs->install(@packages2install); @@ -520,28 +513,72 @@ $tree->signal_connect(realize => sub { $tree->get_selection->select_path(Gtk2::T } $SIG{CHLD} = \&reap_children; undef $wait; -gtkset_mousecursor_normal(); # fill in default right text since no device is selected on startup: fill_default_text($text); $w->main; +sub about() { + my $license = formatAlaTeX(translate($::license)); + $license =~ s/\n/\n\n/sg; # nicer formatting + my $w = gtknew('AboutDialog', name => N("Harddrake"), + version => mageia_release_info()->{version}, + logo => '/usr/share/icons/harddrake.png', + copyright => N("Copyright (C) %s by %s", '2001-2008', 'Mandriva') . "\n" . N("Copyright (C) %s by %s", '2011', N("Mageia")), + license => $license, wrap_license => 1, + comments => N("This is HardDrake, a %s hardware configuration tool.", $distro_name), + website => 'http://www.mageia.org', + website_label => N("Mageia"), + authors => [ 'Thierry Vignaud <thierry.vignaud.com>' ], + translator_credits => + #-PO: put here name(s) and email(s) of translator(s) (eg: "John Smith <jsmith@nowhere.com>") + N("_: Translator(s) name(s) & email(s)\n"), + transient_for => $::main_window, modal => 1, position_policy => 'center-on-parent', + ); + $w->show_all; + $w->run; +} + +sub fields_help() { + if ($current_device) { + create_dialog(N("Harddrake help"), + '<big><b>' . N("Description of the fields:\n\n") . '</b></big>' + . join("\n\n", map { + my $info = lookup_field($_); + if_($info->[0], formatAlaTeX(qq(<span foreground="royalblue3">$info->[0]:</span> $info->[1]))); + } sort keys %$current_device), + { use_markup => 1, transient => $w->{real_window}, height => 400, scroll => 1 }); + } else { + create_dialog(N("Select a device!"), N("Once you've selected a device, you'll be able to see the device information in fields displayed on the right frame (\"Information\")"), { transient => $w->{real_window} }); + } +} sub quit_global() { kill(15, $pid) if $pid; setVarsInSh($conffile, \%options) if !$::testing; - ugtk2->exit(0); + ugtk3->exit(0); } -sub show_hide { - my ($bool, $button) = @_; - if ($bool) { $button->show } else { $button->hide } +sub run_drakbug() { + run_program::raw({ detach => 1 }, 'drakbug', '--report', 'harddrake'); } +sub run_help() { + run_program::raw({ detach => 1 }, 'drakhelp', '--id', 'harddrake'); +} -sub strip_first_underscore { - join '', map { s/_//; $_ } @_; +sub handle_modem_option() { + $options{MODEMS_DETECTION} = $check_boxes{MODEMS_DETECTION}->get_active; +} + +sub handle_zip_option() { + $options{PARALLEL_ZIP_DETECTION} = $check_boxes{PARALLEL_ZIP_DETECTION}->get_active; +} + +sub show_hide { + my ($bool, $button) = @_; + if ($bool) { $button->show } else { $button->hide } } sub lookup_field { @@ -552,9 +589,18 @@ sub lookup_field { sub titleFormat { my ($title) = @_; - [ $title . "\n", { 'weight' => Gtk2::Pango->PANGO_WEIGHT_BOLD, scale => Gtk2::Pango->PANGO_SCALE_LARGE } ]; + [ $title . "\n", { 'weight' => 'bold', scale => 1.4399999999999 } ]; # Pango->PANGO_SCALE_LARGE } +sub force_rename_field { + my ($dev, $new_field, $field) = @_; + if ($dev->{$new_field}) { + delete $dev->{$field}; + rename_field($dev, $new_field, $field); + } +} + + sub rename_field { my ($dev, $field, $new_field) = @_; if ($dev->{$field}) { |