aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/AdminPanel/Rpmdragora/gurpm.pm374
-rw-r--r--lib/AdminPanel/Rpmdragora/pkg.pm25
-rw-r--r--lib/AdminPanel/Shared/GUI.pm209
-rw-r--r--lib/AdminPanel/Shared/TimeZone.pm6
-rw-r--r--lib/AdminPanel/rpmdragora.pm14
5 files changed, 459 insertions, 169 deletions
diff --git a/lib/AdminPanel/Rpmdragora/gurpm.pm b/lib/AdminPanel/Rpmdragora/gurpm.pm
index 9c0ea43..7e9363a 100644
--- a/lib/AdminPanel/Rpmdragora/gurpm.pm
+++ b/lib/AdminPanel/Rpmdragora/gurpm.pm
@@ -1,152 +1,296 @@
# vim: set et ts=4 sw=4:
package AdminPanel::Rpmdragora::gurpm;
-#*****************************************************************************
-#
-# Copyright (c) 2002 Guillaume Cottenceau
-# Copyright (c) 2002-2007 Thierry Vignaud <tvignaud@mandriva.com>
-# Copyright (c) 2003, 2004, 2005 MandrakeSoft SA
-# Copyright (c) 2005-2007 Mandriva SA
-# Copyright (c) 2013 Matteo Pasotti <matteo.pasotti@gmail.com>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2, as
-# published by the Free Software Foundation.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-#*****************************************************************************
-#
-# $Id: gurpm.pm 255450 2009-04-03 16:00:16Z tv $
-use strict;
+#============================================================= -*-perl-*-
-use yui;
+=head1 NAME
+
+ AdminPanel::Rpmdragora::gurpm - Module that shows the urpmi
+ progress status
+
+=head1 SYNOPSIS
+
+ my %option = (title => "Urpmi action ivoked", text => "Please wait", );
+ my $gurpmi = AdminPanel::Rpmdragora::gurpm->new(%option);
+ $gurpmi->progress(45);
+
+ #add to an existing dialog
+ %option = (title => "Urpmi action ivoked", text => "Please wait", main_dialog => $dialog, parent => $parent_container);
+ $gurpmi = AdminPanel::Rpmdragora::gurpm->new(%option);
+ $gurpmi->progress(20);
+
+=head1 DESCRIPTION
+
+ This class is used to show the progress of an urpmi operation on
+ its progress bar. It can be istantiated as a popup dialog or used
+ to add label and progress bar into a YLayoutBox container.
+
+=head1 SUPPORT
+
+ You can find documentation for this module with the perldoc command:
+
+ perldoc AdminPanel::Rpmdragora::gurpm
+
+=head1 AUTHOR
+
+ Angelo Naselli <anaselli@linux.it>
+
+=head1 COPYRIGHT and LICENSE
+
+ Copyright (c) 2002 Guillaume Cottenceau
+ Copyright (c) 2002-2007 Thierry Vignaud <tvignaud@mandriva.com>
+ Copyright (c) 2003, 2004, 2005 MandrakeSoft SA
+ Copyright (c) 2005-2007 Mandriva SA
+ Copyright (c) 2013 Matteo Pasotti <matteo.pasotti@gmail.com>
+ Copyright (C) 2015, Angelo Naselli <anaselli@linux.it>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License version 2, as
+ published by the Free Software Foundation.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+
+=cut
+
+
+use Moose;
+use Carp;
use Time::HiRes;
+
+use yui;
use feature 'state';
-sub new {
- my ($class, $title, $initializing, %options) = @_;
- my $self = {
- my $label = 0,
- my $factory = 0,
- my $mainw = 0,
- my $vbox = 0,
- my $progressbar = 0,
- my $cancel = 0
- };
- bless $self, 'AdminPanel::Rpmdragora::gurpm';
- #my $mainw = bless(ugtk2->new($title, %options, default_width => 600, width => 600), $self);
- $self->{factory} = yui::YUI::widgetFactory;
- $self->{mainw} = $self->{factory}->createPopupDialog();
-
- $self->{mainw}->startMultipleChanges();
-
- #$::main_window = $self->{mainw};
- $self->{vbox} = $self->{factory}->createVBox($self->{mainw});
- #OLD $mainw->{label} = gtknew('Label', text => $initializing, alignment => [ 0.5, 0 ]);
- $self->{label} = $self->{factory}->createLabel($self->{vbox}, $initializing);
- $self->{label}->setStretchable( $yui::YD_HORIZ, 1 );
- # size label's heigh to 2 lines in order to prevent dummy vertical resizing:
- #my $context = $mainw->{label}->get_layout->get_context;
- #my $metrics = $context->get_metrics($mainw->{label}->style->font_desc, $context->get_language);
- #$mainw->{label}->set_size_request(-1, 2 * Gtk2::Pango->PANGO_PIXELS($metrics->get_ascent + $metrics->get_descent));
-
- #OLD $mainw->{progressbar} = gtknew('ProgressBar');
- $self->{progressbar} = $self->{factory}->createProgressBar($self->{vbox}, "");
- #gtkadd($mainw->{window}, $mainw->{vbox} = gtknew('VBox', spacing => 5, border_width => 6, children_tight => [
- # $mainw->{label},
- # $mainw->{progressbar}
- #]));
- #$mainw->{rwindow}->set_position('center-on-parent');
- #$mainw->{real_window}->show_all;
- #select(undef, undef, undef, 0.1); #- hackish :-(
- #$mainw->SUPER::sync;
- $self->{mainw}->pollEvent();
- $self->flush();
- $self;
+has 'title' => (
+ is => 'rw',
+ isa => 'Str',
+);
+
+has 'text' => (
+ is => 'rw',
+ isa => 'Str',
+);
+
+has 'main_dialog' => (
+ is => 'rw',
+ isa => 'yui::YDialog',
+);
+
+has 'parent' => (
+ is => 'rw',
+ isa => 'yui::YReplacePoint',
+);
+
+has 'label_widget' => (
+ is => 'rw',
+ isa => 'yui::YLabel',
+ init_arg => undef,
+);
+
+has 'progressbar' => (
+ is => 'rw',
+ isa => 'yui::YProgressBar',
+ init_arg => undef,
+);
+
+#=============================================================
+
+=head2 BUILD
+
+=head3 DESCRIPTION
+
+ The BUILD method is called after a Moose object is created,
+ in this methods Services loads all the service information.
+
+=cut
+
+#=============================================================
+sub BUILD {
+ my $self = shift;
+
+ my $factory = yui::YUI::widgetFactory;
+ my $vbox;
+
+ if (! $self->main_dialog) {
+ if ($self->parent) {
+ carp "WARNING: parent parameter is skipped without main_dialog set\n" ;
+ $self->parent(undef);
+ }
+ $self->main_dialog($factory->createPopupDialog());
+ $vbox = $factory->createVBox($self->main_dialog);
+ }
+ else {
+ die "parent parameter is mandatory with main_dialog" if !$self->parent;
+ $self->main_dialog->startMultipleChanges();
+ $self->parent->deleteChildren();
+ $vbox = $factory->createVBox($self->parent);
+ $factory->createVSpacing($vbox, 0.5);
+ }
+
+ $self->label_widget( $factory->createLabel($vbox, $self->text) );
+ $self->label_widget->setStretchable( $yui::YD_HORIZ, 1 );
+ $self->progressbar( $factory->createProgressBar($vbox, "") );
+
+ if ($self->parent) {
+ $factory->createVSpacing($vbox, 0.5);
+ $self->parent->showChild();
+ $self->main_dialog->recalcLayout();
+ $self->main_dialog->doneMultipleChanges();
+ }
+
+ $self->main_dialog->pollEvent();
+ $self->flush();
}
+
+#=============================================================
+
+=head2 flush
+
+=head3 DESCRIPTION
+
+ Polls a dialog event to refresh the dialog
+
+=cut
+
+#=============================================================
sub flush {
my ($self) = @_;
- $self->{mainw}->recalcLayout();
- $self->{mainw}->doneMultipleChanges();
- $self->{mainw}->waitForEvent(10);
+ $self->main_dialog->startMultipleChanges();
+ $self->main_dialog->recalcLayout();
+ $self->main_dialog->doneMultipleChanges();
- $self->{mainw}->pollEvent();
+ if ($self->main_dialog->isTopmostDialog()) {
+ $self->main_dialog->waitForEvent(10);
+ $self->main_dialog->pollEvent();
+ }
+ else {
+ carp "This dialog is not a top most dialog\n";
+ }
yui::YUI::app()->redrawScreen();
}
+#=============================================================
+
+=head2 label
+
+=head3 INPUT
+
+ $text: text to be shown on label
+
+=head3 DESCRIPTION
+
+ Sets the label text
+
+=cut
+
+#=============================================================
sub label {
- my ($self, $label) = @_;
+ my ($self, $text) = @_;
+
+ $self->main_dialog->startMultipleChanges();
+ $self->label_widget->setValue($text) if $text;
+ $self->main_dialog->doneMultipleChanges();
- $self->{mainw}->startMultipleChanges();
- $self->{label}->setValue($label) if $label;
- #select(undef, undef, undef, 0.1); #- hackish :-(
$self->flush();
}
+#=============================================================
+
+=head2 progress
+
+=head3 INPUT
+
+ $value: integer value in the range 0..100
+
+=head3 DESCRIPTION
+
+ Sets the progress bar percentage value
+
+=cut
+
+#=============================================================
sub progress {
my ($self, $value) = @_;
- state $time;
- $time = 0 if(!defined($time));
+ state $time = 0;
+
$value = 0 if !defined($value) || $value < 0;
$value = 100 if 100 < $value;
- $self->{progressbar}->setValue($value);
+
+ $self->progressbar->setValue($value);
return if Time::HiRes::clock_gettime() - $time < 0.333;
$time = Time::HiRes::clock_gettime();
- $self->{mainw}->startMultipleChanges();
+
$self->flush();
}
-sub DESTROY {
- my ($self) = @_;
- #mygtk2::may_destroy($self);
- $self and $self->{mainw}->destroy;
- #$self = undef;
- $self->{cancel} = undef; #- in case we'll do another one later
-}
+#=============================================================
-sub validate_cancel {
- my ($self, $cancel_msg, $cancel_cb) = @_;
- $self->{mainw}->startMultipleChanges();
- if (!$self->{cancel}) {
- $self->{cancel} = $self->{factory}->createIconButton($self->{vbox},"",$cancel_msg);
- #gtkpack__(
- #$self->{vbox},
- #$self->{hbox_cancel} = gtkpack__(
- #gtknew('HButtonBox'),
- #$self->{cancel} = gtknew('Button', text => $cancel_msg, clicked => \&$cancel_cb),
- #),
- #);
- }
- #$self->{cancel}->set_sensitive(1);
- #$self->{cancel}->show;
- $self->flush();
-}
+=head2 DEMOLISH
-sub invalidate_cancel {
- my ($self) = @_;
- $self->{cancel} and $self->{cancel}->setEnabled(0);
-}
+=head3 INPUT
-sub invalidate_cancel_forever {
- my ($self) = @_;
- #$self->{hbox_cancel} or return;
- #$self->{hbox_cancel}->destroy;
- # FIXME: temporary workaround that prevents
- # Gtk2::Label::set_text() set_text_internal() -> queue_resize() ->
- # size_allocate() call chain to mess up when ->shrink_topwindow()
- # has been called (#32613):
- #$self->shrink_topwindow;
+ $val: boolean value indicating whether or not this method
+ was called as part of the global destruction process
+ (when the Perl interpreter exits)
+
+=head3 DESCRIPTION
+
+ Moose provides a hook for object destruction with the
+ DEMOLISH method as it does for construtor with BUILD
+
+=cut
+
+#=============================================================
+sub DEMOLISH {
+ my ($self, $val) = @_;
+
+ $self->main_dialog->destroy if !$self->parent;
}
+# TODO cancel button cannot be easily managed in libyui polling events
+# removed atm
+#
+# sub validate_cancel {
+# my ($self, $cancel_msg, $cancel_cb) = @_;
+# $self->{main_dialog}->startMultipleChanges();
+# if (!$self->{cancel}) {
+# $self->{cancel} = $self->{factory}->createIconButton($self->{vbox},"",$cancel_msg);
+# #gtkpack__(
+# #$self->{vbox},
+# #$self->{hbox_cancel} = gtkpack__(
+# #gtknew('HButtonBox'),
+# #$self->{cancel} = gtknew('Button', text => $cancel_msg, clicked => \&$cancel_cb),
+# #),
+# #);
+# }
+# #$self->{cancel}->set_sensitive(1);
+# #$self->{cancel}->show;
+# $self->flush();
+# }
+#
+# sub invalidate_cancel {
+# my ($self) = @_;
+# $self->{cancel} and $self->{cancel}->setEnabled(0);
+# }
+#
+# sub invalidate_cancel_forever {
+# my ($self) = @_;
+# #$self->{hbox_cancel} or return;
+# #$self->{hbox_cancel}->destroy;
+# # FIXME: temporary workaround that prevents
+# # Gtk2::Label::set_text() set_text_internal() -> queue_resize() ->
+# # size_allocate() call chain to mess up when ->shrink_topwindow()
+# # has been called (#32613):
+# #$self->shrink_topwindow;
+# }
+
1;
diff --git a/lib/AdminPanel/Rpmdragora/pkg.pm b/lib/AdminPanel/Rpmdragora/pkg.pm
index 96e5b54..f849518 100644
--- a/lib/AdminPanel/Rpmdragora/pkg.pm
+++ b/lib/AdminPanel/Rpmdragora/pkg.pm
@@ -141,9 +141,9 @@ sub extract_header {
$bar_id = statusbar_msg($loc->N("Getting '%s' from XML meta-data...", $xml_info), 0);
my $_gurpm_clean_guard = MDK::Common::Func::before_leaving { undef $gurpm };
if (my $xml_info_file = eval { urpm::media::any_xml_info($urpm, $medium, $xml_info, undef, sub {
- $gurpm ||= AdminPanel::Rpmdragora::gurpm->new($loc->N("Please wait"),
- '', # FIXME: add a real string after cooker
- transient => $::main_window);
+ $gurpm ||= AdminPanel::Rpmdragora::gurpm->new(
+ text => $loc->N("Please wait"),
+ );
download_callback($gurpm, @_)
or goto header_non_available;
}) }) {
@@ -213,7 +213,7 @@ sub download_callback {
if ($mode eq 'start') {
$gurpm->label($loc->N("Downloading package `%s'...", urpm::util::basename($file)));
- $gurpm->validate_cancel(but($loc->N("Cancel")), sub { $canceled = 1 });
+# $gurpm->validate_cancel(but($loc->N("Cancel")), sub { $canceled = 1 });
} elsif ($mode eq 'progress') {
$gurpm->label(
join("\n",
@@ -228,7 +228,7 @@ sub download_callback {
$gurpm->progress(ceil($percent));
} elsif ($mode eq 'end') {
$gurpm->progress(100);
- $gurpm->invalidate_cancel;
+# $gurpm->invalidate_cancel;
}
!$canceled;
}
@@ -457,7 +457,9 @@ sub get_pkgs {
myexit (-1) if (warn_about_media($w, %options) == -1);
- my $gurpm = AdminPanel::Rpmdragora::gurpm->new(1 ? $loc->N("Please wait") : $loc->N("Package installation..."), $loc->N("Initializing..."), transient => $::main_window);
+ my $gurpm = AdminPanel::Rpmdragora::gurpm->new(
+ text => $loc->N("Please wait"),
+ );
my $_gurpm_clean_guard = MDK::Common::Func::before_leaving { undef $gurpm };
my $urpm = open_urpmi_db(update => $probe_only_for_updates && !is_it_a_devel_distro());
@@ -815,7 +817,10 @@ sub perform_installation { #- (partially) duplicated from /usr/sbin/urpmi :-(
# select packages to uninstall for !update mode:
perform_removal($urpm, { map { $_ => $pkgs->{$_} } @to_remove }) if !$probe_only_for_updates;
- $gurpm = AdminPanel::Rpmdragora::gurpm->new($loc->N("Please wait"), $loc->N("Initializing..."), transient => $::main_window);
+ $gurpm = AdminPanel::Rpmdragora::gurpm->new(
+ text => $loc->N("Please wait"),
+ title => $loc->N("Initializing..."),
+ );
# my $_gurpm_clean_guard = MDK::Common::Func::before_leaving { undef $gurpm };
my $something_installed;
@@ -925,7 +930,7 @@ sub perform_installation { #- (partially) duplicated from /usr/sbin/urpmi :-(
},
post_download => sub {
$canceled and goto return_with_exit_code;
- $gurpm->invalidate_cancel_forever;
+# $gurpm->invalidate_cancel_forever;
},
need_restart => sub {
my ($need_restart_formatted) = @_;
@@ -1025,7 +1030,9 @@ sub perform_removal {
my ($urpm, $pkgs) = @_;
my @toremove = map { MDK::Common::Func::if_($pkgs->{$_}{selected}, $pkgs->{$_}{urpm_name}) } keys %$pkgs;
return if !@toremove;
- my $gurpm = AdminPanel::Rpmdragora::gurpm->new(1 ? $loc->N("Please wait") : $loc->N("Please wait, removing packages..."), $loc->N("Initializing..."), transient => $::main_window);
+ my $gurpm = AdminPanel::Rpmdragora::gurpm->new(
+ text => $loc->N("Please wait")
+ );
my $_gurpm_clean_guard = MDK::Common::Func::before_leaving { undef $gurpm };
my $may_be_orphans = 1;
diff --git a/lib/AdminPanel/Shared/GUI.pm b/lib/AdminPanel/Shared/GUI.pm
index bdbc1fc..e305276 100644
--- a/lib/AdminPanel/Shared/GUI.pm
+++ b/lib/AdminPanel/Shared/GUI.pm
@@ -90,8 +90,8 @@ sub _localeInitialize {
=head3 DESCRIPTION
-This function creates an Warning dialog and show the message
-passed as input.
+ This function creates an Warning dialog and show the message
+ passed as input.
=cut
@@ -128,15 +128,15 @@ sub warningMsgBox {
=head3 INPUT
-$info: HASH, information to be passed to the dialog.
- title => dialog title
- text => string to be swhon into the dialog
- richtext => 1 if using rich text
+ $info: HASH, information to be passed to the dialog.
+ title => dialog title
+ text => string to be swhon into the dialog
+ richtext => 1 if using rich text
=head3 DESCRIPTION
-This function creates an Info dialog and show the message
-passed as input.
+ This function creates an Info dialog and show the message
+ passed as input.
=cut
@@ -174,14 +174,14 @@ sub infoMsgBox {
=head3 INPUT
-$info: HASH, information to be passed to the dialog.
- title => dialog title
- text => string to be swhon into the dialog
- richtext => 1 if using rich text
+ $info: HASH, information to be passed to the dialog.
+ title => dialog title
+ text => string to be swhon into the dialog
+ richtext => 1 if using rich text
=head3 DESCRIPTION
-This function creates a dialog and show the message passed as input.
+ This function creates a dialog and show the message passed as input.
=cut
@@ -218,10 +218,10 @@ sub msgBox {
=head3 INPUT
-$info: HASH, information to be passed to the dialog.
- title => dialog title
- text => string to be swhon into the dialog
- richtext => 1 if using rich text
+ $info: HASH, information to be passed to the dialog.
+ title => dialog title
+ text => string to be swhon into the dialog
+ richtext => 1 if using rich text
=head3 OUTPUT
@@ -230,8 +230,8 @@ $info: HASH, information to be passed to the dialog.
=head3 DESCRIPTION
-This function create an OK-Cancel dialog with a 'title' and a
-'text' passed as parameters.
+ This function create an OK-Cancel dialog with a 'title' and a
+ 'text' passed as parameters.
=cut
@@ -270,11 +270,11 @@ sub ask_OkCancel {
=head3 INPUT
-$info: HASH, information to be passed to the dialog.
- title => dialog title
- text => string to be swhon into the dialog
- richtext => 1 if using rich text
- default_button => (optional) 1: "Yes" (any other values "No")
+ $info: HASH, information to be passed to the dialog.
+ title => dialog title
+ text => string to be swhon into the dialog
+ richtext => 1 if using rich text
+ default_button => (optional) 1: "Yes" (any other values "No")
=head3 OUTPUT
@@ -283,8 +283,8 @@ $info: HASH, information to be passed to the dialog.
=head3 DESCRIPTION
-This function create a Yes-No dialog with a 'title' and a
-question 'text' passed as parameters.
+ This function create a Yes-No dialog with a 'title' and a
+ question 'text' passed as parameters.
=cut
@@ -434,12 +434,12 @@ sub arrayListToYItemCollection {
=head3 INPUT
-$info: HASH, information to be passed to the dialog.
- title => dialog title
- header => combobox header
- default_item => selected item if any
- list => item list
- default_button => (optional) 1: Select (any other values Cancel)
+ $info: HASH, information to be passed to the dialog.
+ title => dialog title
+ header => combobox header
+ default_item => selected item if any
+ list => item list
+ default_button => (optional) 1: Select (any other values Cancel)
=head3 OUTPUT
@@ -448,8 +448,8 @@ $info: HASH, information to be passed to the dialog.
=head3 DESCRIPTION
-This function create a dialog with a combobox in which to
-choose an item from a given list.
+ This function create a dialog with a combobox in which to
+ choose an item from a given list.
=cut
@@ -849,8 +849,8 @@ sub hashTreeToYItemCollection {
=head3 DESCRIPTION
-This function create a dialog with a combobox in which to
-choose an item from a given list.
+ This function create a dialog with a combobox in which to
+ choose an item from a given list.
=cut
@@ -966,6 +966,143 @@ sub ask_fromTreeList {
}
+#=============================================================
+
+=head2 select_fromList
+
+=head3 INPUT
+
+ $info: HASH, information to be passed to the dialog.
+ title => dialog title
+ info_label => optional info text
+ header => column header hash reference{
+ text_column => text column header
+ check_column =>
+ }
+ list => item list hash reference
+ containing {
+ text => item text
+ selected => 0 ur undefined means unchecked
+ }
+
+=head3 OUTPUT
+
+ selection: list of selected items
+
+=head3 DESCRIPTION
+
+ This function create a dialog cotaining a table with a list of
+ items to be checked. The list of the checked items is returned.
+
+=cut
+
+#=============================================================
+
+sub select_fromList {
+ my ($self, $info) = @_;
+
+ die "Missing dialog information" if (!$info);
+ die "Title is mandatory" if (! exists $info->{title});
+ die "Header is mandatory" if (! exists $info->{header});
+ die "Header text column is mandatory" if (! $info->{header}->{text_column});
+ die "List is mandatory" if (! exists $info->{list} );
+ my $list = $info->{list};
+ die "At least one element is mandatory into list" if (scalar(@$list) < 1);
+
+ my $selection = [];
+
+ my $mageiaPlugin = "mga";
+ my $factory = yui::YUI::widgetFactory;
+ my $mgaFactory = yui::YExternalWidgets::externalWidgetFactory($mageiaPlugin);
+ $mgaFactory = yui::YMGAWidgetFactory::getYMGAWidgetFactory($mgaFactory);
+
+ ## push application title
+ my $appTitle = yui::YUI::app()->applicationTitle();
+ ## set new title to get it in dialog
+ yui::YUI::app()->setApplicationTitle($info->{title});
+
+ my $dlg = $factory->createPopupDialog($yui::YDialogNormalColor);
+ my $layout = $factory->createVBox($dlg);
+
+ if ($info->{info_label}) {
+ $factory->createLabel($layout, $info->{info_label});
+ }
+
+ my $yTableHeader = new yui::YTableHeader();
+ $yTableHeader->addColumn($info->{header}->{text_column}, $yui::YAlignBegin);
+ $yTableHeader->addColumn($info->{header}->{check_column} || '', $yui::YAlignBegin);
+
+ ## service list (serviceBox)
+ my $selectionTable = $mgaFactory->createCBTable(
+ $layout,
+ $yTableHeader,
+ $yui::YCBTableCheckBoxOnLastColumn
+ );
+ $selectionTable->setImmediateMode(1);
+ $selectionTable->setWeight($yui::YD_HORIZ, 75);
+
+ $selectionTable->startMultipleChanges();
+ $selectionTable->deleteAllItems();
+ my $itemCollection = new yui::YItemCollection;
+ ## NOTE do not sort to preserve item indexes
+ foreach (@{$list}) {
+ my $text = $_->{text} || die "item text is mandatory";
+
+ my $item = new yui::YCBTableItem($text);
+ $item->check( $_->{checked} );
+ $itemCollection->push($item);
+ $item->DISOWN();
+ }
+ $selectionTable->addItems($itemCollection);
+ $selectionTable->doneMultipleChanges();
+
+ my $align = $factory->createRight($layout);
+ my $hbox = $factory->createHBox($align);
+ $factory->createVSpacing($hbox, 1.0);
+ my $okButton = $factory->createPushButton($hbox, $self->loc->N("Ok"));
+ $dlg->setDefaultButton($okButton);
+ $dlg->recalcLayout();
+
+ while (1) {
+ my $event = $dlg->waitForEvent();
+
+ my $eventType = $event->eventType();
+ #event type checking
+ if ($eventType == $yui::YEvent::CancelEvent) {
+ last;
+ }
+ elsif ($eventType == $yui::YEvent::WidgetEvent) {
+ # widget selected
+ my $widget = $event->widget();
+
+ if ($widget == $okButton) {
+ last;
+ }
+ elsif ($widget == $selectionTable) {
+ my $wEvent = yui::toYWidgetEvent($event);
+ if ($wEvent->reason() == $yui::YEvent::ValueChanged) {
+ my $item = $selectionTable->changedItem();
+ if ($item) {
+ my $index = $item->index();
+ $list->[$index]->{checked} = $item->checked();
+ }
+ }
+ }
+ }
+ }
+
+ destroy $dlg;
+
+ #restore old application title
+ yui::YUI::app()->setApplicationTitle($appTitle);
+
+ foreach (@{$list}) {
+ push @{$selection}, $_->{text} if $_->{checked};
+ }
+
+ return $selection;
+}
+
no Moose;
__PACKAGE__->meta->make_immutable;
diff --git a/lib/AdminPanel/Shared/TimeZone.pm b/lib/AdminPanel/Shared/TimeZone.pm
index 9add801..112610c 100644
--- a/lib/AdminPanel/Shared/TimeZone.pm
+++ b/lib/AdminPanel/Shared/TimeZone.pm
@@ -451,9 +451,9 @@ sub writeConfiguration {
# if we are going to use systemd then we have to remove the link only
# if it is not a link, becuase it should be managed by systemd it self
# eval { unlink '/etc/localtime' } unless -l '/etc/localtime';
-# eval { unlink '/etc/localtime' };
-# eval { symlink $tz, '/etc/localtime' };
- eval { File::copy($tz, '/etc/localtime') } ;
+ unlink '/etc/localtime' or Sys::Syslog::syslog('info|local1', "unlinking /etc/localtime failed");
+ Sys::Syslog::syslog('info|local1', "Setting $tz as localtime");
+ symlink $tz, '/etc/localtime' or Sys::Syslog::syslog('info|local1', "linking $tz to /etc/localtime failed");
my $adjtime_file = '/etc/adjtime';
my @adjtime = MDK::Common::File::cat_($adjtime_file);
diff --git a/lib/AdminPanel/rpmdragora.pm b/lib/AdminPanel/rpmdragora.pm
index 16c9125..fd6f5e0 100644
--- a/lib/AdminPanel/rpmdragora.pm
+++ b/lib/AdminPanel/rpmdragora.pm
@@ -233,9 +233,8 @@ our %config = (
sub readconf() {
${$config{$_}{var}} = $config{$_}{default} foreach keys %config;
foreach my $l (MDK::Common::File::cat_($configfile)) {
- foreach (keys %config) {
- ${$config{$_}{var}} = [ split ' ', $1 ] if $l =~ /^\Q$_\E(.*)/;
- }
+ my ($key, @values) = split ' ', $l;
+ ${$config{$key}{var}} = \@values if scalar @values;
}
# special cases:
$::rpmdragora_options{'no-confirmation'} = $no_confirmation->[0] if !defined $::rpmdragora_options{'no-confirmation'};
@@ -248,7 +247,9 @@ sub writeconf() {
# special case:
$no_confirmation->[0] = $::rpmdragora_options{'no-confirmation'};
- MDK::Common::File::output($configfile, map { "$_ " . (ref ${$config{$_}{var}} ? join(' ', @${$config{$_}{var}}) : '') . "\n" } sort keys %config);
+ my @config_content = map { "$_ " . (ref ${$config{$_}{var}} ? join(' ', @${$config{$_}{var}}) : '') . "\n" } sort keys %config;
+ MDK::Common::File::output($configfile, @config_content);
+ print "writeconf done!\n";
}
sub getbanner() {
@@ -1090,8 +1091,9 @@ sub mirrors {
dir => $cachedir,
callback => sub {
$gurpm ||=
- AdminPanel::Rpmdragora::gurpm->new($loc->N("Please wait"),
- transient => $::main_window);
+ AdminPanel::Rpmdragora::gurpm->new(
+ text => $loc->N("Please wait"),
+ );
$canceled ||=
!AdminPanel::Rpmdragora::pkg::download_callback($gurpm, @_);
$gurpm->flush();