home *** CD-ROM | disk | FTP | other *** search
- package interactive;
-
-
-
-
-
-
-
- use common qw(:common :functional);
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- sub new($) {
- my ($type) = @_;
-
- bless {}, ref $type || $type;
- }
-
- sub vnew {
- my ($type, $su) = @_;
- $su = $su eq "su";
- require c;
- if ($ENV{DISPLAY} && c::Xtest($ENV{DISPLAY})) {
- if ($su) {
- $ENV{PATH} = "/sbin:/usr/sbin:$ENV{PATH}";
- $> and exec "kdesu", "-c", "$0 @ARGV";
- }
- require interactive_gtk;
- interactive_gtk->new;
- } else {
- if ($su && $>) {
- die "you must be root to run this program";
- }
- require 'log.pm';
- undef *log::l;
- *log::l = sub {}; # otherwise, it will bother us :(
- require interactive_newt;
- interactive_newt->new;
- }
- }
-
- sub suspend {}
- sub resume {}
- sub end {}
- sub exit { exit($_[0]) }
-
-
-
-
- sub ask_warn($$$) {
- my ($o, $title, $message) = @_;
- ask_from_list2($o, $title, $message, [ _("Ok") ]);
- }
-
- sub ask_yesorno($$$;$) {
- my ($o, $title, $message, $def) = @_;
- ask_from_list2_($o, $title, $message, [ __("Yes"), __("No") ], $def ? "Yes" : "No") eq "Yes";
- }
-
- sub ask_okcancel($$$;$) {
- my ($o, $title, $message, $def) = @_;
- ask_from_list2_($o, $title, $message, [ __("Ok"), __("Cancel") ], $def ? "Ok" : "Cancel") eq "Ok";
- }
-
- sub ask_from_list_ {
- my ($o, $title, $message, $l, $def) = @_;
- @$l == 0 and die '';
- @$l == 1 and return $l->[0];
- goto &ask_from_list2_;
- }
-
- sub ask_from_list {
- my ($o, $title, $message, $l, $def) = @_;
- @$l == 0 and die '';
- @$l == 1 and return $l->[0];
- goto &ask_from_list2;
- }
-
- sub ask_from_list2_($$$$;$) {
- my ($o, $title, $message, $l, $def) = @_;
- untranslate(
- ask_from_list($o, $title, $message, [ map { translate($_) } @$l ], translate($def)),
- @$l);
- }
-
- sub ask_from_list2($$$$;$) {
- my ($o, $title, $message, $l, $def) = @_;
-
- @$l > 10 and $l = [ sort @$l ];
-
- $o->ask_from_listW($title, [ deref($message) ], $l, $def || $l->[0]);
- }
- sub ask_many_from_list_ref($$$$;$) {
- my ($o, $title, $message, $l, $val) = @_;
- return 1 if @$l == 0;
- $o->ask_many_from_list_refW($title, [ deref($message) ], $l, $val);
- }
- sub ask_many_from_list($$$$;$) {
- my ($o, $title, $message, $l, $def) = @_;
-
- my $val = [ map { my $i = $_; \$i } @$def ];
-
- $o->ask_many_from_list_ref($title, $message, $l, $val) ?
- [ map { $$_ } @$val ] : undef;
- }
-
- sub ask_from_entry {
- my ($o, $title, $message, $label, $def, %callback) = @_;
-
- first ($o->ask_from_entries($title, [ deref($message) ], [ $label ], [ $def ], %callback));
- }
-
- sub ask_from_entries($$$$;$%) {
- my ($o, $title, $message, $l, $def, %callback) = @_;
-
- my $val = [ map { my $i = $_; \$i } @{$def || [('') x @$l]} ];
-
- $o->ask_from_entries_ref($title, $message, $l, $val, %callback) ?
- map { $$_ } @$val :
- undef;
- }
-
- sub ask_from_entries_refH($$$;$%) {
- my ($o, $title, $message, $h, %callback) = @_;
-
- ask_from_entries_ref($o, $title, $message,
- [ grep_index { even($::i) } @$h ],
- [ grep_index { odd($::i) } @$h ],
- %callback);
- }
-
-
-
-
- sub ask_from_entries_ref($$$$;$%) {
- my ($o, $title, $message, $l, $val, %callback) = @_;
-
- return unless @$l;
-
- $title = [ deref($title) ];
- $title->[2] ||= _("Cancel") unless $title->[1];
- $title->[1] ||= _("Ok");
-
- my $val_hash = [ map {
- if ((ref $_) eq "SCALAR") {
- { val => $_ }
- } else {
- ($_->{list} && (@{$_->{list}} > 1)) ?
- { %$_, type => "list"} : $_;
- }
- } @$val ];
-
- $o->ask_from_entries_refW($title, [ deref($message) ], $l, $val_hash, %callback)
-
- }
- sub wait_message($$$;$) {
- my ($o, $title, $message, $temp) = @_;
-
- my $w = $o->wait_messageW($title, [ _("Please wait"), deref($message) ]);
- push @tempory::objects, $w if $temp;
- my $b = before_leaving { $o->wait_message_endW($w) };
-
-
- common::add_f4before_leaving(sub { $o->wait_message_nextW([ deref($_[1]) ], $w) }, $b, 'set');
- $b;
- }
-
- sub kill {}
-
-
-
-
- 1;
-