summaryrefslogtreecommitdiffstats
path: root/lib/network/drakconnect/global.pm
blob: 59da73c22d94b19f8e273ee4ed540f5318b674bf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
package network::drakconnect::global;

use ugtk2 qw(:create :dialogs :helpers :wrappers);
use mygtk2 qw(gtknew);
use common;
use network::drakconnect;
use network::test;

my $net_test;
sub update_network_status {
    my ($int_state) = @_;
    unless ($net_test) {
        $net_test = network::test->new;
        $net_test->start;
    }
    if ($net_test->is_done) {
        my $isconnected = $net_test->is_connected;
        $int_state->set($isconnected ? N("Connected") : N("Not connected"));
        $net_test->start;
    }
    1;
}

sub configure_net {
    my ($in, $net, $modules_conf) = @_;
    my $int_state;
    my $int_label = Gtk2::WrappedLabel->new($net->{type} eq 'lan' ? N("Gateway:") : N("Interface:"));
    my $int_name = Gtk2::Label->new($net->{type} eq 'lan' ? $net->{network}{GATEWAY} : $net->{net_interface});

    my $dialog = ugtk2->new(N("Internet connection configuration"));
    my $exit_dialogsub = sub { Gtk2->main_quit };
    if (!$net->{type}) {
        $in->ask_warn(
                    N("Warning"),
                    N("You do not have any configured Internet connection.
Run the \"%s\" assistant from the Mageia Control Center", N("Set up a new network interface (LAN, ISDN, ADSL, ...)")));
        return;
    }
    unless ($::isEmbedded) {
        $dialog->{rwindow}->set_position('center');
        $dialog->{rwindow}->set_size_request(-1, -1);
        $dialog->{rwindow}->set_icon(gtkcreate_pixbuf("drakconnect"));
    }
    $dialog->{rwindow}->signal_connect(delete_event => $exit_dialogsub);

    my $param_vbox = Gtk2::VBox->new(0,0);
    my $i = 0;

    my @conf_data = (
                     [ N("Host name (optional)"), \$net->{network}{HOSTNAME} ],
                     [ N("First DNS Server (optional)"),  \$net->{resolv}{dnsServer} ],
                     [ N("Second DNS Server (optional)"), \$net->{resolv}{dnsServer2} ],
                     [ N("Third DNS server (optional)"),  \$net->{resolv}{dnsServer3} ],
                    );
    my @infos;
    gtkpack($param_vbox,
            create_packtable({},
                             map {
                                 my $c;
                                 if (defined $_->[2]) {
                                     $c = Gtk2::Combo->new;
                                     $c->set_popdown_strings(@{$_->[2]});
                                     $infos[2*$i+1] = $c->entry;
                                 } else {
                                     $c = $infos[2*$i+1] = Gtk2::Entry->new;
                                 }
                                 $infos[2*$i+1]->set_text(${$_->[1]});
                                 $i++;
                                 [ Gtk2::WrappedLabel->new($_->[0]), $c ];
                             } @conf_data
                            )
           );

    $dialog->{rwindow}->add(gtkpack_(Gtk2::VBox->new,
                                     0, Gtk2::Label->new(N("Internet Connection Configuration")),
                                     1, gtkadd(gtkcreate_frame(N("Internet access")),
                                               gtkset_border_width(create_packtable({ col_spacings => 5, row_spacings => 5, homogenous => 1 },
                                                                                    [ Gtk2::WrappedLabel->new(N("Connection type: ")),
                                                                                      Gtk2::WrappedLabel->new(translate($net->{type})) ],
                                                                                    [ $int_label, $int_name ],
                                                                                    [ Gtk2::WrappedLabel->new(N("Status:")),
                                                                                      $int_state = Gtk2::WrappedLabel->new(N("Testing your connection...")) ]
                                                                                   ),
                                                                   5),
                                              ),
                                     1, gtkadd(gtkcreate_frame(N("Parameters")), gtkset_border_width($param_vbox, 5)),
                                     0, gtkpack(create_hbox('edge'),
                                                gtksignal_connect(Gtk2::Button->new(N("Cancel")), clicked => $exit_dialogsub),
                                                gtksignal_connect(Gtk2::Button->new(N("Ok")), clicked => sub {
                                                                          foreach my $i (0..$#conf_data) {
                                                                              ${$conf_data[$i][1]} = $infos[2*$i+1]->get_text;
                                                                          }
                                                                          network::drakconnect::apply($in, $net, $modules_conf);
                                                                          $exit_dialogsub->();
                                                                      }),
                                                ),
                                    ),
                           );

    $dialog->{rwindow}->show_all;
    my $update = sub { update_network_status($int_state) };
    $update->();
    Glib::Timeout->add(2000, $update);
    $dialog->main;
}

1;