File Coverage

blib/lib/UI/Dialog/KDE.pm
Criterion Covered Total %
statement 47 68 69.1
branch 11 28 39.2
condition 9 22 40.9
subroutine 8 8 100.0
pod 1 1 100.0
total 76 127 59.8


line stmt bran cond sub pod time code
1             package UI::Dialog::KDE;
2             ###############################################################################
3             # Copyright (C) 2004-2016 Kevin C. Krinke
4             #
5             # This library is free software; you can redistribute it and/or
6             # modify it under the terms of the GNU Lesser General Public
7             # License as published by the Free Software Foundation; either
8             # version 2.1 of the License, or (at your option) any later version.
9             #
10             # This library is distributed in the hope that it will be useful,
11             # but WITHOUT ANY WARRANTY; without even the implied warranty of
12             # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13             # Lesser General Public License for more details.
14             #
15             # You should have received a copy of the GNU Lesser General Public
16             # License along with this library; if not, write to the Free Software
17             # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18             ###############################################################################
19 1     1   13092 use 5.006;
  1         3  
20 1     1   3 use strict;
  1         1  
  1         14  
21 1     1   2 use warnings;
  1         1  
  1         18  
22 1     1   3 use Carp;
  1         1  
  1         55  
23 1     1   327 use UI::Dialog;
  1         2  
  1         28  
24              
25             BEGIN {
26 1     1   3 use vars qw( $VERSION @ISA );
  1         2  
  1         44  
27 1     1   6 @ISA = qw( UI::Dialog );
28 1         442 $VERSION = '1.21';
29             }
30              
31             #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
32             #: Constructor Method
33             #:
34              
35             sub new {
36 1     1 1 317 my $proto = shift();
37 1   33     5 my $class = ref($proto) || $proto;
38 1   50     4 my $cfg = {@_} || {};
39 1         1 my $self = {};
40 1         2 bless($self, $class);
41              
42 1   50     9 $self->{'debug'} = $cfg->{'debug'} || 0;
43              
44             #: Dynamic path discovery...
45 1         1 my $CFG_PATH = $cfg->{'PATH'};
46 1 50       4 if ($CFG_PATH) {
    50          
47 0 0       0 if (ref($CFG_PATH) eq "ARRAY") { $self->{'PATHS'} = $CFG_PATH; }
  0 0       0  
    0          
48 0         0 elsif ($CFG_PATH =~ m!:!) { $self->{'PATHS'} = [ split(/:/,$CFG_PATH) ]; }
49 0         0 elsif (-d $CFG_PATH) { $self->{'PATHS'} = [ $CFG_PATH ]; }
50 1         7 } elsif ($ENV{'PATH'}) { $self->{'PATHS'} = [ split(/:/,$ENV{'PATH'}) ]; }
51 0         0 else { $self->{'PATHS'} = ''; }
52              
53 1   50     5 $cfg->{'order'} ||= [ 'kdialog', 'xdialog' ];
54              
55 1   50     9 $self->_debug("ENV->UI_DIALOGS: ".($ENV{'UI_DIALOGS'}||'NULL'),2);
56 1 50       2 $cfg->{'order'} = [ split(/\:/,$ENV{'UI_DIALOGS'}) ] if $ENV{'UI_DIALOGS'};
57              
58 1   50     6 $self->_debug("ENV->UI_DIALOG: ".($ENV{'UI_DIALOG'}||'NULL'),2);
59 1 50       2 unshift(@{$cfg->{'order'}},$ENV{'UI_DIALOG'}) if $ENV{'UI_DIALOG'};
  0         0  
60              
61             $cfg->{'trust-input'} =
62             ( exists $cfg->{'trust-input'}
63 1 50 33     4 && $cfg->{'trust-input'}==1
64             ) ? 1 : 0;
65              
66 1         1 my @opts = ();
67 1         20 foreach my $opt (keys(%$cfg)) { push(@opts,$opt,$cfg->{$opt}); }
  3         5  
68              
69 1         1 foreach my $try (@{$cfg->{'order'}}) {
  1         3  
70 2 100       14 if ($try =~ /^kdialog$/i) {
    50          
71 1         3 $self->_debug("trying kdialog",2);
72 1 50 33     47 if (eval "require UI::Dialog::Backend::KDialog; 1" && $self->_has_variant('kdialog')) {
73 0         0 require UI::Dialog::Backend::KDialog;
74 0         0 $self->{'_ui_dialog'} = new UI::Dialog::Backend::KDialog (@opts);
75 0         0 $self->_debug("using kdialog",2);
76 0         0 last;
77 1         3 } else { next; }
78             } elsif ($try =~ /^(?:xdialog||X)$/i) {
79 1         4 $self->_debug("trying xdialog",2);
80 1 50 33     43 if (eval "require UI::Dialog::Backend::XDialog; 1" && $self->_has_variant('Xdialog')) {
81 0         0 require UI::Dialog::Backend::XDialog;
82 0         0 $self->{'_ui_dialog'} = new UI::Dialog::Backend::XDialog (@opts,'XDIALOG_HIGH_DIALOG_COMPAT',1);
83 0         0 $self->_debug("using xdialog",2);
84 0         0 last;
85 1         3 } else { next; }
86             } else {
87             # we don't know what they're asking for... try UI::Dialog...
88 0 0       0 if (eval "require UI::Dialog; 1") {
89 0         0 require UI::Dialog;
90 0         0 $self->{'_ui_dialog'} = new UI::Dialog (@opts);
91 0         0 $self->_debug(ref($self)." unknown backend: '".$try."', using UI::Dialog instead.",2);
92 0         0 last;
93 0         0 } else { next; }
94             }
95             }
96              
97 1 50       178 ref($self->{'_ui_dialog'}) or croak("unable to load suitable backend.");
98              
99 0           return($self);
100             }
101              
102             1;