summaryrefslogtreecommitdiffstats
path: root/perl-install/ugtk2.pm
diff options
context:
space:
mode:
Diffstat (limited to 'perl-install/ugtk2.pm')
-rw-r--r--perl-install/ugtk2.pm42
1 files changed, 33 insertions, 9 deletions
diff --git a/perl-install/ugtk2.pm b/perl-install/ugtk2.pm
index 972ed2a64..3e0cf0988 100644
--- a/perl-install/ugtk2.pm
+++ b/perl-install/ugtk2.pm
@@ -1028,11 +1028,11 @@ sub ask_browse_tree_info {
my $w = ugtk2->new($common->{title});
- my $tree_model = Gtk2::TreeStore->new("Glib::String", "Gtk2::Gdk::Pixbuf", "Glib::String");
+ my $tree_model = Gtk2::TreeStore->new("Glib::String", "Glib::Boolean", "Glib::String", ("Glib::Boolean") x 2);
my $tree = Gtk2::TreeView->new_with_model($tree_model);
$tree->get_selection->set_mode('browse');
$tree->append_column(my $textcolumn = Gtk2::TreeViewColumn->new_with_attributes(undef, Gtk2::CellRendererText->new, 'text' => 0));
- $tree->append_column(my $pixcolumn = Gtk2::TreeViewColumn->new_with_attributes(undef, Gtk2::CellRendererPixbuf->new, 'pixbuf' => 1));
+ $tree->append_column(my $pixcolumn = Gtk2::TreeViewColumn->new_with_attributes(undef, Gtk2::CellRendererToggle->new, 'activatable' => 3, 'active' => 1));
$tree->append_column(Gtk2::TreeViewColumn->new_with_attributes(undef, Gtk2::CellRendererText->new, 'text' => 2));
$tree->set_headers_visible(0);
$tree->set_rules_hint(1);
@@ -1104,24 +1104,35 @@ sub ask_browse_tree_info {
sub ask_browse_tree_info_given_widgets {
my ($common) = @_;
my $w = $common->{widgets};
+ $w->{pixcolumn}->set_clickable(1);
+ $w->{renderer}->set_data(column => 1) if $w->{renderer};
+
my ($curr, $prev_label, $idle, $mouse_toggle_pending);
my (%wtree, %ptree, %pix, %node_state, %state_stats);
my $update_size = sub {
my $new_label = $common->{get_status}();
$prev_label ne $new_label and $w->{status}->set($prev_label = $new_label);
};
+ my $set_state = sub {
+ my ($iter, $state) = @_;
+ if ($state eq 'semiselected') {
+ my $toggle = $w->{tree_model}->get($iter, 1);
+ $w->{tree_model}->set($iter, 4 => 1);
+ } else {
+ $w->{tree_model}->set($iter, 4 => 0);
+ $w->{tree_model}->set($iter, 1 => ($state eq 'selected'));
+ }
+ };
my $set_node_state_flat = sub {
my ($iter, $state) = @_;
$state eq 'XXX' and return;
- $pix{$state} ||= gtkcreate_pixbuf($state);
- $w->{tree_model}->set($iter, 1 => $pix{$state});
+ &$set_state($iter, $state);
};
my $set_node_state_tree; $set_node_state_tree = sub {
my ($iter, $state) = @_;
my $iter_str = $w->{tree_model}->get_path_str($iter);
$state eq 'XXX' and return;
- $pix{$state} ||= gtkcreate_pixbuf($state);
if ($node_state{$iter_str} ne $state) {
my $parent;
if (!$w->{tree_model}->iter_has_child($iter) && ($parent = $w->{tree_model}->iter_parent($iter))) {
@@ -1131,7 +1142,7 @@ sub ask_browse_tree_info_given_widgets {
my $new_state = @list == 1 ? $list[0] : 'semiselected';
$node_state{$parent_str} ne $new_state and $set_node_state_tree->($parent, $new_state);
}
- $w->{tree_model}->set($iter, 1 => $pix{$state});
+ &$set_state($iter, $state);
$node_state{$iter_str} = $state; #- cache for efficiency
}
};
@@ -1148,7 +1159,7 @@ sub ask_browse_tree_info_given_widgets {
my $s; foreach (split '\|', $root) {
my $s2 = $s ? "$s|$_" : $_;
$wtree{$s2} ||= do {
- my $iter = $w->{tree_model}->append_set($s ? $add_parent->($s, $state) : undef, [ 0 => $_ ]);
+ my $iter = $w->{tree_model}->append_set($s ? $add_parent->($s, $state) : undef, [ 0 => $_, 3 => 1 ]);
$iter;
};
$s = $s2;
@@ -1160,7 +1171,7 @@ sub ask_browse_tree_info_given_widgets {
my ($leaf, $root, $options) = @_;
my $state = $common->{node_state}($leaf) or return;
if ($leaf) {
- my $iter = $w->{tree_model}->append_set($add_parent->($root, $state), [ 0 => $leaf ]);
+ my $iter = $w->{tree_model}->append_set($add_parent->($root, $state), [ 0 => $leaf, 3 => 1 ]);
$set_node_state->($iter, $state);
push @{$ptree{$leaf}}, $iter;
} else {
@@ -1169,7 +1180,7 @@ sub ask_browse_tree_info_given_widgets {
#- if leaf is void, we may create the parent and one child (to have the [+] in front of the parent in the ctree)
#- though we use '' as the label of the child; then rpmdrake will connect on tree_expand, and whenever
#- the first child has '' as the label, it will remove the child and add all the "right" children
- $options->{nochild} or $w->{tree_model}->append_set($parent, [ 0 => '' ]);
+ $options->{nochild} or $w->{tree_model}->append_set($parent, [ 0 => '', 3 => 1 ]);
}
};
my $clear_all_caches = sub {
@@ -1263,6 +1274,18 @@ sub ask_browse_tree_info_given_widgets {
}
};
+ $w->{renderer}->signal_connect(toggled => sub {
+ my ($cell, $path_str) = @_;
+ my $path = Gtk2::TreePath->new_from_string($path_str);
+
+ # get toggled iter
+ my $iter = $w->{tree_model}->get_iter($path);
+
+ # set new value
+# $set_state->($iter, $w->{tree_model}->get($iter, 1) ^ 1);
+ $toggle->(0);
+ });
+
$w->{tree}->signal_connect(key_press_event => sub {
my $c = chr($_[1]->keyval & 0xff);
if ($_[1]->keyval >= 0x100 ? $c eq "\r" || $c eq "\x8d" : $c eq ' ') {
@@ -1270,6 +1293,7 @@ sub ask_browse_tree_info_given_widgets {
}
0;
});
+# Got on key/button press
$w->{tree}->get_selection->signal_connect(changed => sub {
my ($model, $iter) = $_[0]->get_selected;
$model && $iter or return;