aboutsummaryrefslogtreecommitdiffstats
path: root/AdminPanel
diff options
context:
space:
mode:
Diffstat (limited to 'AdminPanel')
-rw-r--r--AdminPanel/Rpmdragora/gui.pm138
-rw-r--r--AdminPanel/Rpmdragora/pkg.pm24
-rw-r--r--AdminPanel/rpmdragora.pm74
3 files changed, 150 insertions, 86 deletions
diff --git a/AdminPanel/Rpmdragora/gui.pm b/AdminPanel/Rpmdragora/gui.pm
index 424614a8..67f21ce9 100644
--- a/AdminPanel/Rpmdragora/gui.pm
+++ b/AdminPanel/Rpmdragora/gui.pm
@@ -26,7 +26,7 @@ package AdminPanel::Rpmdragora::gui;
# $Id$
############################################################
-# WARNING: do not modify before asking to matteo or anaselli
+# WARNING: do not modify before asking matteo or anaselli
############################################################
use strict;
@@ -82,6 +82,7 @@ our @EXPORT = qw(
switch_pkg_list_mode
toggle_all
toggle_nodes
+ fast_toggle
);
our ($descriptions, %filters, @filtered_pkgs, %filter_methods, $force_displaying_group, $force_rebuild, @initial_selection, $pkgs, $size_free, $size_selected, $urpm);
@@ -400,25 +401,25 @@ sub node_state {
my ($common, $w, %wtree, %ptree, %pix, @table_item_list);
sub set_node_state {
- my ($iter, $state, $model) = @_;
+ my ($tblItem, $state, $model) = @_;
return if $state eq 'XXX' || !$state;
#$pix{$state} ||= gtkcreate_pixbuf('state_' . $state);
#$model->set($iter, $pkg_columns{state_icon} => $pix{$state});
#$model->set($iter, $pkg_columns{state} => $state);
#$model->set($iter, $pkg_columns{selected} => to_bool(member($state, qw(base installed to_install)))); #$pkg->{selected}));
#$model->set($iter, $pkg_columns{selectable} => to_bool($state ne 'base'));
- $iter->addCell($state,"/usr/share/rpmdrake/icons/state_$state.png");
+ $tblItem->addCell($state,"/usr/share/rpmdrake/icons/state_$state.png");
if(to_bool(member($state, qw(base installed to_install)))){
#$iter->cell(0)->setLabel('x');
# it should be parent()->setChecked(1)
- $iter->cell(0)->parent()->setSelected(1);
+ $tblItem->cell(0)->parent()->setSelected(1);
}else{
#$iter->cell(0)->setLabel('');
- $iter->cell(0)->parent()->setSelected(0);
+ $tblItem->cell(0)->parent()->setSelected(0);
}
if(!to_bool($state ne 'base')){
#$iter->cell(0)->setLabel('-');
- $iter->cell(0)->setLabel('-');
+ $tblItem->cell(0)->setLabel('-');
}
}
@@ -427,7 +428,11 @@ sub set_leaf_state {
set_node_state($_, $state, $model) foreach @{$ptree{$leaf}};
}
-sub grep_unselected { grep { exists $pkgs->{$_} && !$pkgs->{$_}{selected} } @_ }
+sub grep_unselected {
+ my @l = shift();
+ my @result = grep { exists $pkgs->{$_} && !$pkgs->{$_}{selected} } @l ;
+ return @result;
+}
my %groups_tree = ();
@@ -491,6 +496,7 @@ sub add_node {
$w->{detail_list}->addItem($newTableItem);
$ptree{$leaf} = [ $newTableItem->label() ];
$table_item_list[$newTableItem->index()] = $leaf;
+ $newTableItem->DISOWN();
} else {
$iter = $w->{tree_model}->append_set(add_parent($w->{tree},$root, $state), [ $grp_columns{label} => $leaf ]);
#push @{$wtree{$leaf}}, $iter;
@@ -515,25 +521,88 @@ sub update_size {
}
}
+sub treeview_children {
+ my($tbl) = @_;
+ my $it;
+ my @l;
+ my $i=0;
+ # using iterators
+ for ($it = $tbl->itemsBegin(); $it != $tbl->itemsEnd(); ) {
+ my $item = $tbl->YItemIteratorToYItem($it);
+ print "ITEM LABEL: ".$item->index()."\n";
+ push @l, $item;
+ $it = $tbl->nextItem($it);
+ $i++;
+ if ($i == $tbl->itemsCount()) {
+ last;
+ }
+ }
+ # using items
+ #for($i=0;$i<$tbl->itemsCount();$i++) {
+ # print " item label " . $tbl->item($i)->cell(0)->label() . "\n";
+ # push @l, $tbl->item($i);
+ #}
+ return @l;
+}
+
sub children {
- my ($w) = @_;
- map { $w->{detail_list_model}->get($_, $pkg_columns{text}) } gtktreeview_children($w->{detail_list_model});
+ my ($w, @table_item_list) = @_;
+ # map { $w->{detail_list}->get($_, $pkg_columns{text}) } treeview_children($w->{detail_list});
+ # map { $table_item_list[$_->index()] } treeview_children($w->{detail_list});
+ my @children = treeview_children($w->{detail_list});
+ my @result;
+ for my $child(@children){
+ push @result, $table_item_list[$child->index()];
+ }
+ return @result;
}
sub toggle_all {
my ($common, $_val) = @_;
my $w = $common->{widgets};
- my @l = children($w) or return;
+ my @l = children($w, $common->{table_item_list}) or return;
my @unsel = grep_unselected(@l);
my @p = @unsel ?
#- not all is selected, select all if no option to potentially override
(exists $common->{partialsel_unsel} && $common->{partialsel_unsel}->(\@unsel, \@l) ? difference2(\@l, \@unsel) : @unsel)
: @l;
- toggle_nodes($w->{detail_list}->window, $w->{detail_list_model}, \&set_leaf_state, node_state($p[0]), @p);
+ # toggle_nodes($w->{detail_list}, $w->{detail_list_model}, \&set_leaf_state, node_state($p[0]), @p);
+ print "Toggle Nodes: p[0][0]=".$p[0][0]." node_state(".$p[0][0].")=".node_state($p[0][0])."\n";
+ toggle_nodes($w->{detail_list}, $w->{detail_list_model}, \&set_leaf_state, node_state($p[0][0]), @{$p[0]});
update_size($common);
}
+sub fast_toggle {
+ my ($item) = @_;
+ #gtkset_mousecursor_wait($w->{w}{rwindow}->window);
+ #my $_cleaner = before_leaving { gtkset_mousecursor_normal($w->{w}{rwindow}->window) };
+ my $name = $common->{table_item_list}[$item->index()];
+ print "Name: $name\n";
+ my $urpm_obj = $pkgs->{$name}{pkg};
+ if ($urpm_obj->flag_base) {
+ interactive_msg(N("Warning"), N("Removing package %s would break your system", $name));
+ return '';
+ }
+ if ($urpm_obj->flag_skip) {
+ interactive_msg(N("Warning"), N("The \"%s\" package is in urpmi skip list.\nDo you want to select it anyway?", $name), yesno => 1) or return '';
+ $urpm_obj->set_flag_skip(0);
+ }
+ if ($Rpmdragora::pkg::need_restart && !$priority_up_alread_warned) {
+ $priority_up_alread_warned = 1;
+ interactive_msg(N("Warning"), '<b>' . N("Rpmdragora or one of its priority dependencies needs to be updated first. Rpmdragora will then restart.") . '</b>' . "\n\n");
+ }
+ # toggle_nodes($w->{tree}->window, $w->{detail_list_model}, \&set_leaf_state, $w->{detail_list_model}->get($iter, $pkg_columns{state}),
+ my $state;
+ if($item->selected){
+ $state = "to_remove";
+ }else{
+ $state = "to_install";
+ }
+ toggle_nodes($w->{tree}, $w->{detail_list}, \&set_leaf_state, $state, $name);
+ update_size($common);
+};
+
# ask_browse_tree_given_widgets_for_rpmdragora will run gtk+ loop. its main parameter "common" is a hash containing:
# - a "widgets" subhash which holds:
# o a "w" reference on a ugtk2 object
@@ -602,10 +671,10 @@ sub ask_browse_tree_given_widgets_for_rpmdragora {
};
my $fast_toggle = sub {
- my ($iter) = @_;
- gtkset_mousecursor_wait($w->{w}{rwindow}->window);
- my $_cleaner = before_leaving { gtkset_mousecursor_normal($w->{w}{rwindow}->window) };
- my $name = $w->{detail_list_model}->get($iter, $pkg_columns{text});
+ my ($item) = @_;
+ #gtkset_mousecursor_wait($w->{w}{rwindow}->window);
+ #my $_cleaner = before_leaving { gtkset_mousecursor_normal($w->{w}{rwindow}->window) };
+ my $name = $common->{table_item_list}[$item->index()];
my $urpm_obj = $pkgs->{$name}{pkg};
if ($urpm_obj->flag_base) {
@@ -624,8 +693,8 @@ sub ask_browse_tree_given_widgets_for_rpmdragora {
interactive_msg(N("Warning"), '<b>' . N("Rpmdragora or one of its priority dependencies needs to be updated first. Rpmdragora will then restart.") . '</b>' . "\n\n");
}
- toggle_nodes($w->{tree}->window, $w->{detail_list_model}, \&set_leaf_state, $w->{detail_list_model}->get($iter, $pkg_columns{state}),
- $w->{detail_list_model}->get($iter, $pkg_columns{text}));
+ # toggle_nodes($w->{tree}->window, $w->{detail_list_model}, \&set_leaf_state, $w->{detail_list_model}->get($iter, $pkg_columns{state}),
+ toggle_nodes($w->{tree}->window, $w->{detail_list_model}, \&set_leaf_state, $item->selected, $common->{table_item_list}[$item->index()]);
update_size($common);
};
#$w->{detail_list}->get_selection->signal_connect(changed => sub {
@@ -633,16 +702,18 @@ sub ask_browse_tree_given_widgets_for_rpmdragora {
#$model && $iter or return;
# $common->{display_info}($model->get($iter, $pkg_columns{text}));
#});
+ # WARNING: รจ interessante!
#($w->{detail_list}->get_column(0)->get_cell_renderers)[0]->signal_connect(toggled => sub {
- # my ($_cell, $path) = @_; #text_
- # my $iter = $w->{detail_list_model}->get_iter_from_string($path);
- # $fast_toggle->($iter) if $iter;
+ # my ($_cell, $path) = @_; #text_
+ # my $iter = $w->{detail_list_model}->get_iter_from_string($path);
+ # $fast_toggle->($iter) if $iter;
# 1;
#});
$common->{rebuild_tree}->();
update_size($common);
- #$common->{initial_selection} and toggle_nodes($w->{tree}->window, $w->{detail_list_model}, \&set_leaf_state, undef, @{$common->{initial_selection}});
- #my $_b = before_leaving { $clear_all_caches->() };
+ $common->{initial_selection} and toggle_nodes($w->{tree}->window, $w->{detail_list_model}, \&set_leaf_state, undef, @{$common->{initial_selection}});
+ print "QUANTO VALE common->initial_selection ? ".$common->{initial_selection}."\n";
+ my $_b = before_leaving { $clear_all_caches->() };
$common->{init_callback}->() if $common->{init_callback};
#OLD $w->{w}->main;
$w->{w};
@@ -829,9 +900,8 @@ sub toggle_nodes {
format_list(@impossible_to_remove));
@nodes_with_deps = difference2(\@nodes_with_deps, \@impossible_to_remove);
} else {
- slow_func($widget,
- sub { @nodes_with_deps = grep { intersection(\@nodes, [ closure_removal($_) ]) }
- grep { $pkgs->{$_}{selected} && !member($_, @nodes) } keys %$pkgs });
+ @nodes_with_deps = grep { intersection(\@nodes, [ closure_removal($_) ]) }
+ grep { $pkgs->{$_}{selected} && !member($_, @nodes) } keys %$pkgs;
push @nodes_with_deps, @nodes;
$warn_about_additional_packages_to_remove->(
N("Because of their dependencies, the following package(s) must be unselected now:\n\n"));
@@ -851,15 +921,10 @@ sub toggle_nodes {
@nodes = difference2(\@nodes, \@bad_i18n_pkgs);
}
my @requested;
- slow_func(
- $widget,
- sub {
- @requested = $urpm->resolve_requested(
- open_rpm_db(), $urpm->{state},
- { map { $pkgs->{$_}{pkg}->id => 1 } @nodes },
- callback_choices => \&callback_choices,
- );
- },
+ @requested = $urpm->resolve_requested(
+ open_rpm_db(), $urpm->{state},
+ { map { $pkgs->{$_}{pkg}->id => 1 } @nodes },
+ callback_choices => \&callback_choices,
);
@nodes_with_deps = map { urpm_name($_) } @requested;
statusbar_msg_remove($bar_id);
@@ -905,9 +970,8 @@ sub toggle_nodes {
packages_selection_ok:
} else {
my @unrequested;
- slow_func($widget,
- sub { @unrequested = $urpm->disable_selected(open_rpm_db(), $urpm->{state},
- map { $pkgs->{$_}{pkg} } @nodes) });
+ @unrequested = $urpm->disable_selected(open_rpm_db(), $urpm->{state},
+ map { $pkgs->{$_}{pkg} } @nodes);
@nodes_with_deps = map { urpm_name($_) } @unrequested;
statusbar_msg_remove($bar_id);
if (!deps_msg(N("Some packages need to be removed"),
diff --git a/AdminPanel/Rpmdragora/pkg.pm b/AdminPanel/Rpmdragora/pkg.pm
index 67cf8aae..e8c1a08a 100644
--- a/AdminPanel/Rpmdragora/pkg.pm
+++ b/AdminPanel/Rpmdragora/pkg.pm
@@ -120,8 +120,9 @@ sub extract_header {
my ($local_source, %xml_info_pkgs, $bar_id);
my $_statusbar_clean_guard = before_leaving { $bar_id and statusbar_msg_remove($bar_id) };
my $dir = urpm::file_from_local_url($medium->{url});
- $local_source = "$dir/" . $p->filename if $dir;
-
+ print "p->filename: ". $p->filename."\n";
+ $local_source = "$dir/" . $p->filename if $dir;
+ print "local_source: $local_source\n";
if (-e $local_source) {
$bar_id = statusbar_msg(N("Getting information from %s...", $dir), 0);
$urpm->{log}("getting information from rpms from $dir");
@@ -658,10 +659,10 @@ sub perform_installation { #- (partially) duplicated from /usr/sbin/urpmi :-(
local $urpm->{error} = sub { printf STDERR "Error: %s\n", $_[0]; push @error_msgs, $_[0] };
my $w = $::main_window;
- $w->set_sensitive(0);
- my $_restore_sensitive = before_leaving { $w->set_sensitive(1) };
+ #$w->set_sensitive(0);
+ #my $_restore_sensitive = before_leaving { $w->set_sensitive(1) };
- my $_flush_guard = Gtk2::GUI_Update_Guard->new;
+ # my $_flush_guard = Gtk2::GUI_Update_Guard->new;
if (my $group = get_parallel_group()) {
return perform_parallel_install($urpm, $group, $w, \$statusbar_msg_id);
@@ -735,8 +736,8 @@ 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 = Rpmdragora::gurpm->new(1 ? N("Please wait") : N("Package installation..."), N("Initializing..."), transient => $::main_window);
- my $_gurpm_clean_guard = before_leaving { undef $gurpm };
+ # $gurpm = Rpmdragora::gurpm->new(1 ? N("Please wait") : N("Package installation..."), N("Initializing..."), transient => $::main_window);
+ # my $_gurpm_clean_guard = before_leaving { undef $gurpm };
my $something_installed;
if (@to_install && $::rpmdragora_options{auto_orphans}) {
@@ -758,14 +759,17 @@ sub perform_installation { #- (partially) duplicated from /usr/sbin/urpmi :-(
my $pkg = defined $id ? $urpm->{depslist}[$id] : undef;
if ($subtype eq 'start') {
if ($type eq 'trans') {
- $gurpm->label(1 ? N("Preparing package installation...") : N("Preparing package installation transaction..."));
+ print(1 ? N("Preparing package installation...") : N("Preparing package installation transaction..."));
+ # $gurpm->label(1 ? N("Preparing package installation...") : N("Preparing package installation transaction..."));
} elsif (defined $pkg) {
$something_installed = 1;
- $gurpm->label(N("Installing package `%s' (%s/%s)...", $pkg->name, ++$transaction_progress_nb, scalar(@{$transaction->{upgrade}}))
- . "\n" . N("Total: %s/%s", ++$progress_nb, $install_count));
+ print(N("Installing package `%s' (%s/%s)...", $pkg->name, ++$transaction_progress_nb, scalar(@{$transaction->{upgrade}}))."\n" . N("Total: %s/%s", ++$progress_nb, $install_count));
+ # $gurpm->label(N("Installing package `%s' (%s/%s)...", $pkg->name, ++$transaction_progress_nb, scalar(@{$transaction->{upgrade}}))
+ # . "\n" . N("Total: %s/%s", ++$progress_nb, $install_count));
}
} elsif ($subtype eq 'progress') {
$gurpm->progress($total ? ($amount/$total)*100 : 100);
+ print("Progress: ".($total ? ($amount/$total)*100 : 100)."\n");
}
};
diff --git a/AdminPanel/rpmdragora.pm b/AdminPanel/rpmdragora.pm
index c9e0c057..b96ed53d 100644
--- a/AdminPanel/rpmdragora.pm
+++ b/AdminPanel/rpmdragora.pm
@@ -312,46 +312,42 @@ sub interactive_packtable {
sub interactive_list {
my ($title, $contents, $list, $callback, %options) = @_;
- my $d = ugtk2->new($title, grab => 1, if_(exists $options{transient}, transient => $options{transient}));
- $d->{rwindow}->set_position($options{transient} ? 'center_on_parent' : 'center_always');
- my @radios = gtkradio('', @$list);
- my $vbradios = $callback ? create_packtable(
- {},
- mapn {
- my $n = $_[1];
- [ $_[0],
- gtksignal_connect(
- Gtk2::Button->new(but(N("Info..."))),
- clicked => sub { $callback->($n) },
- ) ];
- } \@radios, $list,
- ) : gtkpack__(Gtk2::VBox->new(0, 0), @radios);
+
+ my $factory = yui::YUI::widgetFactory;
+ my $mainw = $factory->createPopupDialog();
+ my $vbox = $factory->createVBox($mainw);
+ my $lbltitle = $factory->createLabel($vbox, N("Dependencies"));
+ my $radiobuttongroup = $factory->createRadioButtonGroup($vbox);
+ my $rbbox = $factory->createVBox($radiobuttongroup);
+ foreach my $item(@$list){
+ my $radiobutton = $factory->createRadioButton($rbbox,$item);
+ $radiobutton->setNotify(0);
+ $radiobuttongroup->addRadioButton($radiobutton);
+ }
+ my $submitButton = $factory->createIconButton($vbox,"", N("OK"));
my $choice;
- my $button_ok;
- gtkadd(
- $d->{window},
- gtkpack__(
- Gtk2::VBox->new(0,5),
- Gtk2::Label->new($contents),
- int(@$list) > 8 ? gtkset_size_request(create_scrolled_window($vbradios), 250, 320) : $vbradios,
- gtkpack__(
- create_hbox(),
- if_(!$options{nocancel},
- gtksignal_connect(
- Gtk2::Button->new(N("Cancel")), clicked => sub { Gtk2->main_quit }),
- ),
- gtksignal_connect(
- $button_ok=Gtk2::Button->new(N("Ok")), clicked => sub {
- each_index { $_->get_active and $choice = $::i } @radios;
- Gtk2->main_quit;
- }
- )
- )
- )
- );
- $d->{window}->set_focus($button_ok);
- $d->main;
- $choice;
+
+ while(1) {
+ my $event = $mainw->waitForEvent();
+ my $eventType = $event->eventType();
+ #event type checking
+ if ($eventType == $yui::YEvent::CancelEvent) {
+ $mainw->destroy();
+ last;
+ }
+ elsif ($eventType == $yui::YEvent::WidgetEvent) {
+ # widget selected
+ my $widget = $event->widget();
+
+ if($widget == $submitButton) {
+ $choice = $radiobuttongroup->currentButton->label();
+ $choice =~s/\&//g;
+ last;
+ }
+ }
+ }
+ $mainw->destroy();
+ return $choice;
}
sub interactive_list_ { interactive_list(@_, if_($::main_window, transient => $::main_window)) }