summaryrefslogtreecommitdiffstats
path: root/perl-install/diskdrake/smbnfs_gtk.pm
diff options
context:
space:
mode:
Diffstat (limited to 'perl-install/diskdrake/smbnfs_gtk.pm')
-rw-r--r--perl-install/diskdrake/smbnfs_gtk.pm195
1 files changed, 100 insertions, 95 deletions
diff --git a/perl-install/diskdrake/smbnfs_gtk.pm b/perl-install/diskdrake/smbnfs_gtk.pm
index 862132d05..b2417ce83 100644
--- a/perl-install/diskdrake/smbnfs_gtk.pm
+++ b/perl-install/diskdrake/smbnfs_gtk.pm
@@ -1,28 +1,25 @@
-package diskdrake::smbnfs_gtk; # $Id$
+package diskdrake::smbnfs_gtk;
use diagnostics;
use strict;
-use any;
-use fs;
+use fs::get;
use diskdrake::interactive;
use common;
use interactive;
-use network::smb;
-use network::nfs;
-use my_gtk qw(:helpers :wrappers :ask);
+use fs::remote::smb;
+use fs::remote::nfs;
+use mygtk3 qw(gtknew gtkset);
+use ugtk3 qw(:helpers :wrappers :create);
-my ($all_hds, $in, $tree, $current_entry, $current_leaf, %icons);
+my ($all_hds, $in, $tree_model, $current_entry, $current_leaf, %icons);
sub main {
($in, $all_hds, my $type) = @_;
my ($kind) = $type eq 'smb' ? smb2kind() : nfs2kind();
- {
- local $my_gtk::pop_it = 1;
- $kind->check($in) or return;
- }
+ $kind->check($in) or return;
- my $w = my_gtk->new('DiskDrake');
+ my $w = ugtk3->new(N("Partitioning"));
add_smbnfs($w->{window}, $kind);
$w->{rwindow}->set_default_size(400, 300) if $w->{rwindow}->can('set_default_size');
@@ -36,63 +33,61 @@ sub main {
sub try {
my ($kind, $name, @args) = @_;
my $f = $diskdrake::interactive::{$name} or die "unknown function $name";
- try_($kind, $name, \&{$f}, @args);
+ try_($kind, $name, \&$f, @args);
}
sub try_ {
my ($kind, $name, $f, @args) = @_;
eval { $f->($in, @args, $all_hds) };
if (my $err = $@) {
- $in->ask_warn(_("Error"), formatError($err));
+ $in->ask_warn(N("Error"), formatError($err));
}
update($kind);
- Gtk->main_quit if member($name, 'Cancel', 'Done');
+ Gtk3->main_quit if member($name, 'Cancel', 'Done');
}
sub raw_hd_options {
my ($in, $raw_hd) = @_;
- diskdrake::interactive::Options($in, {}, $raw_hd);
+ diskdrake::interactive::Options($in, {}, $raw_hd, fs::get::empty_all_hds());
}
sub raw_hd_mount_point {
my ($in, $raw_hd) = @_;
my ($default) = $raw_hd->{device} =~ m|([^/]+)$|;
$default =~ s/\s+/-/g;
- diskdrake::interactive::Mount_point_raw_hd($in, $raw_hd, $all_hds, [ "/mnt/$default" ]);
+ diskdrake::interactive::Mount_point_raw_hd($in, $raw_hd, $all_hds, "/mnt/$default");
}
sub per_entry_info_box {
my ($box, $kind, $entry) = @_;
- $_->isa('Gtk::Button') or $_->destroy foreach map { $_->widget } $box->children;
- my $info;
- if ($entry) {
- $info = diskdrake::interactive::format_raw_hd_info($entry);
- }
- gtkpack($box, gtkadd(new Gtk::Frame(_("Details")), gtkset_justify(new Gtk::Label($info), 'left')));
+ my $info = $entry ? diskdrake::interactive::format_raw_hd_info($entry) : '';
+ $kind->{per_entry_info_box}->destroy if $kind->{per_entry_info_box};
+ gtkpack($box, $kind->{per_entry_info_box} = gtknew('Frame', text => N("Details"), child => gtknew('Label', text => $info, justify => 'left')));
}
sub per_entry_action_box {
my ($box, $kind, $entry) = @_;
- $_->widget->destroy foreach $box->children;
+ $_->destroy foreach $box->get_children;
my @buttons;
push @buttons, map {
my $s = $_;
- gtksignal_connect(new Gtk::Button(translate($s)), clicked => sub { try($kind, $s, {}, $entry) });
- } (if_($entry->{isMounted}, __("Unmount")),
- if_($entry->{mntpoint} && !$entry->{isMounted}, __("Mount"))) if $entry;
+ gtknew('Button', text => translate($s), clicked => sub { try($kind, $s, {}, $entry) });
+ } (if_($entry->{isMounted}, N_("Unmount")),
+ if_($entry->{mntpoint} && !$entry->{isMounted}, N_("Mount"))) if $entry;
my @l = (
- if_($entry, __("Mount point") => \&raw_hd_mount_point),
- if_($entry && $entry->{mntpoint}, __("Options") => \&raw_hd_options),
- __("Cancel") => sub {},
- __("Done") => \&done,
+ if_($entry, N_("Mount point") => \&raw_hd_mount_point),
+ if_($entry && $entry->{mntpoint}, N_("Options") => \&raw_hd_options),
+ N_("Cancel") => sub {},
+ N_("Done") => \&done,
);
push @buttons, map {
- my ($txt, $f) = @$_;
- gtksignal_connect(new Gtk::Button(translate($txt)), clicked => sub { try_($kind, $txt, $f, $entry) });
+ my ($txt, $f) = @$_;
+ $f ? gtknew('Button', text => translate($txt), clicked => sub { try_($kind, $txt, $f, $entry) })
+ : gtknew('Label', text => "");
} group_by2(@l);
-
- gtkadd($box, gtkpack(new Gtk::HBox(0,0), @buttons));
+
+ gtkadd($box, gtknew('HBox', children_loose => \@buttons));
}
sub done {
@@ -100,28 +95,27 @@ sub done {
diskdrake::interactive::Done($in, $all_hds);
}
-sub set_export_icon {
- my ($entry, $w) = @_;
+sub export_icon {
+ my ($entry) = @_;
$entry ||= {};
- my $icon = $icons{$entry->{isMounted} ? 'mounted' : $entry->{mntpoint} ? 'has_mntpoint' : 'default'};
- ugtk::ctree_set_icon($tree, $w, @$icon);
+ $icons{$entry->{isMounted} ? 'mounted' : $entry->{mntpoint} ? 'has_mntpoint' : 'default'};
}
sub update {
my ($kind) = @_;
per_entry_action_box($kind->{action_box}, $kind, $current_entry);
per_entry_info_box($kind->{info_box}, $kind, $current_entry);
- set_export_icon($current_entry, $current_leaf) if $current_entry;
+ $tree_model->set($current_leaf, 0 => export_icon($current_entry)) if $current_entry;
}
sub find_fstab_entry {
- my ($kind, $e, $add_or_not) = @_;
+ my ($kind, $e, $b_add_or_not) = @_;
my $fs_entry = $kind->to_fstab_entry($e);
- if (my ($fs_entry_) = grep { $fs_entry->{device} eq $_->{device} } @{$kind->{val}}) {
+ if (my $fs_entry_ = find { $fs_entry->{device} eq $_->{device} } @{$kind->{val}}) {
$fs_entry_;
- } elsif ($add_or_not) {
+ } elsif ($b_add_or_not) {
push @{$kind->{val}}, $fs_entry;
$fs_entry;
} else {
@@ -129,26 +123,34 @@ sub find_fstab_entry {
}
}
-sub import_ctree {
+sub import_tree {
my ($kind, $info_box) = @_;
- my (%servers_displayed, %wservers, %wexports, $inside);
+ my (%servers_displayed, %wservers, %wexports);
+
+ $tree_model = Gtk3::TreeStore->new("Gtk3::Gdk::Pixbuf", "Glib::String");
+ my $tree = Gtk3::TreeView->new_with_model($tree_model);
+ $tree->get_selection->set_mode('browse');
- $tree = Gtk::CTree->new(1, 0);
- $tree->set_column_auto_resize(0, 1);
- $tree->set_selection_mode('browse');
- $tree->set_row_height($tree->style->font->ascent + $tree->style->font->descent + 1);
+ my $col = Gtk3::TreeViewColumn->new;
+ $col->pack_start(my $pixrender = Gtk3::CellRendererPixbuf->new, 0);
+ $col->add_attribute($pixrender, 'pixbuf', 0);
+ $col->pack_start(my $texrender = Gtk3::CellRendererText->new, 1);
+ $col->add_attribute($texrender, 'text', 1);
+ $tree->append_column($col);
+
+ $tree->set_headers_visible(0);
foreach ('default', 'server', 'has_mntpoint', 'mounted') {
- $icons{$_} = [ gtkcreate_png("smbnfs_$_") ];
+ $icons{$_} = gtknew('Pixbuf', file => "smbnfs_$_");
}
my $add_server = sub {
my ($server) = @_;
+ my $identifier = $server->{ip} || $server->{name};
my $name = $server->{name} || $server->{ip};
- $servers_displayed{$name} ||= do {
- my $w = $tree->insert_node(undef, undef, [$name], 5, (undef) x 4, 0, 0);
- ugtk::ctree_set_icon($tree, $w, @{$icons{server}});
- $wservers{$w->{_gtk}} = $server;
+ $servers_displayed{$identifier} ||= do {
+ my $w = $tree_model->append_set(undef, [ 0 => $icons{server}, 1 => $name ]);
+ $wservers{$tree_model->get_path_str($w)} = $server;
$w;
};
};
@@ -159,25 +161,25 @@ sub import_ctree {
return @l if !$@;
if ($server->{username}) {
- $in->ask_warn('', _("Can't login using username %s (bad password?)", $server->{username}));
- network::smb::remove_bad_credentials($server);
+ $in->ask_warn('', N("Cannot login using username %s (bad password?)", $server->{username}));
+ fs::remote::smb::remove_bad_credentials($server);
} else {
- if (my @l = network::smb::authentifications_available($server)) {
- my $user = $in->ask_from_list_(_("Domain Authentication Required"),
- _("Which username"), [ @l, __("Another one") ]) or return;
+ if (my @l = fs::remote::smb::authentications_available($server)) {
+ my $user = $in->ask_from_list_(N("Domain Authentication Required"),
+ N("Which username"), [ @l, N_("Another one") ]) or return;
if ($user ne 'Another one') {
- network::smb::read_credentials($server, $user);
+ fs::remote::smb::read_credentials($server, $user);
goto $find_exports;
}
}
}
- if ($in->ask_from(_("Domain Authentication Required"),
- _("Please enter your username, password and domain name to access this host."),
+ if ($in->ask_from(N("Domain Authentication Required"),
+ N("Please enter your username, password and domain name to access this host."),
[
- { label => _("Username"), val => \$server->{username} },
- { label => _("Password"), val => \$server->{password} },
- { label => _("Domain"), val => \$server->{domain} },
+ { label => N("Username"), val => \$server->{username} },
+ { label => N("Password"), val => \$server->{password}, hidden => 1 },
+ { label => N("Domain"), val => \$server->{domain} },
])) {
goto $find_exports;
} else {
@@ -188,21 +190,25 @@ sub import_ctree {
my $add_exports = sub {
my ($node) = @_;
- $tree->expand($node);
- foreach ($find_exports->($wservers{$node->{_gtk}} || return)) { #- can't die here since insert_node provoque a tree_select_row before the %wservers is filled
- my $w = $tree->insert_node($node, undef, [$kind->to_string($_)], 5, (undef) x 4, 1, 0);
- set_export_icon(find_fstab_entry($kind, $_), $w);
- $wexports{$w->{_gtk}} = $_;
+
+ my $path = $tree_model->get_path($node);
+ $tree->expand_row($path, 0);
+
+ foreach ($find_exports->($wservers{$tree_model->get_path_str($node)} || return)) { #- cannot die here since insert_node provoque a tree_select_row before the %wservers is filled
+ my $s = $kind->to_string($_);
+ my $w = $tree_model->append_set($node, [ 0 => export_icon(find_fstab_entry($kind, $_)),
+ 1 => $s ]);
+ $wexports{$tree_model->get_path_str($w)} = $_;
}
};
{
- my $search = new Gtk::Button(_("Search servers"));
+ my $search = gtknew('Button', text => N("Search servers"));
gtkpack__($info_box,
gtksignal_connect($search,
clicked => sub {
$add_server->($_) foreach sort { $a->{name} cmp $b->{name} } $kind->find_servers;
- $search->destroy;
+ gtkset($search, text => N("Search for new servers"));
}));
}
@@ -211,24 +217,23 @@ sub import_ctree {
$add_exports->($node);
}
- $tree->signal_connect(tree_select_row => sub {
- my $curr = $_[1];
- $inside and return;
- $inside = 1;
- if ($curr->row->is_leaf) {
+ $tree->get_selection->signal_connect(changed => sub {
+ my ($_model, $curr) = $_[0]->get_selected;
+ $curr or return;
+
+ if ($tree_model->iter_parent($curr)) {
$current_leaf = $curr;
- $current_entry = find_fstab_entry($kind, $wexports{$curr->{_gtk}} || die(''), 'add');
+ $current_entry = find_fstab_entry($kind, $wexports{$tree_model->get_path_str($curr)} || die(''), 'add');
} else {
- if (!$curr->row->children) {
- gtkset_mousecursor_wait($tree->window);
- my_gtk::flush();
+ if (!$tree_model->iter_has_child($curr)) {
+ gtkset_mousecursor_wait($tree->get_window);
+ ugtk3::flush();
$add_exports->($curr);
- gtkset_mousecursor_normal($tree->window);
+ gtkset_mousecursor_normal($tree->get_window);
}
$current_entry = undef;
}
update($kind);
- $inside = 0;
});
$tree;
}
@@ -237,16 +242,16 @@ sub add_smbnfs {
my ($widget, $kind) = @_;
die if $kind->{main_box};
- $kind->{info_box} = new Gtk::VBox(0,0);
- $kind->{display_box} = createScrolledWindow(import_ctree($kind, $kind->{info_box}));
- $kind->{action_box} = new Gtk::HBox(0,0);
+ $kind->{info_box} = gtknew('VBox');
+ $kind->{display_box} = gtknew('ScrolledWindow', child => import_tree($kind, $kind->{info_box}));
+ $kind->{action_box} = gtknew('HBox');
$kind->{main_box} =
- gtkpack_(new Gtk::VBox(0,7),
- 1, gtkpack(new Gtk::HBox(0,7),
- gtkset_usize($kind->{display_box}, 200, 0),
- $kind->{info_box}),
+ gtknew('VBox', spacing => 7, children => [
+ 1, gtknew('HBox', spacing => 7, children_loose => [
+ gtkset($kind->{display_box}, width => 200),
+ $kind->{info_box} ]),
0, $kind->{action_box},
- );
+ ]);
$widget->add($kind->{main_box});
$current_entry = undef;
@@ -254,12 +259,12 @@ sub add_smbnfs {
$kind;
}
-sub nfs2kind {
- network::nfs->new({ type => 'nfs', name => 'NFS', val => $all_hds->{nfss}, no_auto => 1 });
+sub nfs2kind() {
+ fs::remote::nfs->new({ type => 'nfs', name => 'NFS', val => $all_hds->{nfss}, no_auto => 1 });
}
-sub smb2kind {
- network::smb->new({ type => 'smb', name => 'Samba', val => $all_hds->{smbs}, no_auto => 1 });
+sub smb2kind() {
+ fs::remote::smb->new({ type => 'smb', name => 'Samba', val => $all_hds->{smbs}, no_auto => 1 });
}