File Coverage

blib/lib/CPANPLUS/Shell/Wx/util.pm
Criterion Covered Total %
statement 1 3 33.3
branch n/a
condition n/a
subroutine 1 1 100.0
pod n/a
total 2 4 50.0


line stmt bran cond sub pod time code
1             package CPANPLUS::Shell::Wx::util;
2              
3 1     1   1974 use Wx::Event qw(EVT_MENU EVT_TOOL EVT_WINDOW_CREATE EVT_BUTTON);
  0            
  0            
4             use Wx::ArtProvider qw/:artid :clientid/;
5             use Wx;
6             use CPANPLUS;
7             use Cwd;
8             use Data::Dumper;
9             use CPANPLUS::Error;
10             use File::Spec;
11             use File::HomeDir;
12             use Class::Struct qw(struct);
13              
14             #enable gettext support
15             use Wx::Locale gettext => '_T';
16              
17             use base qw(Exporter);
18             our @EXPORT = qw(_uPopulateTree _uGetTimed _uGetInstallPath
19             _uShowErr _u_t_ShowErr _uGetImageData _uGetPath);
20              
21             #returns the path for the specified item
22             #call: _uGetPath($cpp_config,$item)
23             #$item can be one of :
24             # 'app_config' wxCPAN config file
25             # 'cpp_mod_dir' path to $cpp_home/authors/id/, where cpanplus stores modules
26             # 'cpp_stat_file' path to the cpp status.store file
27             # 'cpp_modlist' path to the 03modlist.data.gz file
28             sub _uGetPath{
29             my $conf=shift; #a CPANPLUS::Config object
30             my $path=shift; #the value we want.
31             my $op1=shift; #the optional subdir
32             my $ret=undef; #return value
33             my $home = File::HomeDir->my_home; #user's home directory
34             my $cpp_home= $conf->get_conf('base');
35              
36             if ($path eq 'app_config'){
37             $ret=File::Spec->catfile($cpp_home,'wxcpan.conf')
38             }elsif($path eq 'cpp_mod_dir'){
39             $ret=File::Spec->catdir($cpp_home,"authors","id");
40             }elsif($path eq 'cpp_stat_file'){
41             $ret=File::Spec->catdir($cpp_home,'status.stored');
42             }elsif($path eq 'cpp_modlist'){
43             $ret=File::Spec->catdir($cpp_home,'03modlist.data.gz');
44             }else{
45             print "Usage: CPANPLUS::Shell::Wx::util::_uGetPath('app_config')";
46             }
47             return $ret;
48             }
49              
50             #TODO this method populates a tree with the correct status icon
51             sub _uPopulateModulesWithIcons{
52             my $max_pval=10000; #the maximum value of the progress bar
53             my $tree=shift;
54             my $parent=shift;
55             my $aref=shift;
56             my $progress = shift;
57             my $percent=shift || $max_pval/(@{%$tree}/2);
58             my $cnt=shift || 0;
59              
60             $progress=Wx::ProgressDialog->new(_T("Inserting Items..."),
61             _T("Inserting Items Into List..."),
62             $max_pval,
63             $self,
64             wxPD_APP_MODAL) unless $progress;
65              
66             #remove all items if we are stating anew
67             $tree->DeleteChildren($tree->GetRootItem()) unless $cnt;
68              
69             foreach $items ( sort {lc $a cmp lc $b} keys(%$tree) ){
70             my $curParent=$tree->AppendItem(
71             $self->GetRootItem(),
72             $top_level,_uGetStatusIcon($top_level));
73             $progress->Update($cnt*$percent); #,"[Step 2 of 2] Iserting ".keys(%tree)." Authors Into Tree...#$cnt : $top_level");
74             foreach $item (sort(@{$tree{$top_level}})){
75             if (keys(%$item)){
76             my $new_parent=$self->AppendItem($curParent,(keys(%$item))[0],$self->_get_status_icon($item)) if ($curParent && $item);
77             $cnt++;
78             $progress->Update($cnt*$percent);
79             $cnt=_uPopulateModulesWithIcons($tree,$new_parent,$item,$progress,$percent,$cnt);
80             }else{
81             my $new_parent=$self->AppendItem($curParent,$item,$self->_get_status_icon($item)) if ($curParent && $item);
82             $progress->Update($cnt*$percent);
83             $cnt++;
84             }
85             }
86             }
87             return $cnt;
88             #$progress->Destroy();
89             }
90              
91             sub _uGetInstallPath{
92             my $file=shift;
93             #$file=~s|::|/|g;
94             my @path=split('::',$file);
95             foreach $p (@INC){
96             my $file=File::Spec->catfile($p,@path);
97             #print "$p/$file\n";
98             return $file if(-e $file) ;
99             }
100             }
101              
102             #it checks the stack in CPANPLUS::Error,
103             # and logs it to wherever Wx::LogMessage is sent to
104             sub _uShowErr{
105             foreach $msg (CPANPLUS::Error::stack()){
106             my $lvl=$msg->level;
107             $lvl=~s/cp_//;
108             Wx::LogMessage("[CPANPLUS ".(uc($lvl||''))."@".$msg->when."]".$msg->message);
109             CPANPLUS::Error::flush();
110             }
111             }
112             #this method retrieves the local directory where CPANPLUS
113             #stores its information regarding each module
114             sub _uGetModDir{
115             my $mod=shift;
116              
117             }
118             #TODO this method populates a tree with the given array ref
119             sub _uPopulateModules($$){
120             my $tree=shift;
121             my $aref=shift;
122             }
123              
124             #@return the time in readable - mm:ss - format
125             #@params:
126             # $begin: the time we are comparing to
127             #@usage:
128             # use util qw/_uGetTimed/;
129             # my $begin=time();
130             # {... code to be timed ...}
131             # my $totalTime=_uGetTimed($begin);
132             sub _uGetTimed($){
133             my $begin=shift;
134             mu $end=time();
135             return sprintf("%2d",(($end-$begin)/60)).":".sprintf("%2d",(($end-$begin) % 60));
136             }
137              
138              
139             #the following two structs are used to hold the image data
140             #for the image lists for the various treectrl's.
141             # idx is the value from imglist->Add($img)
142             # icon is the actual icon data
143             struct ('CPANPLUS::Shell::Wx::util::imagedata' => {
144             idx => '$',
145             icon => '$'
146             });
147             struct 'CPANPLUS::Shell::Wx::util::images' => {
148             installed => 'CPANPLUS::Shell::Wx::util::imagedata',
149             update => 'CPANPLUS::Shell::Wx::util::imagedata',
150             remove => 'CPANPLUS::Shell::Wx::util::imagedata',
151             not_installed => 'CPANPLUS::Shell::Wx::util::imagedata',
152             unknown => 'CPANPLUS::Shell::Wx::util::imagedata',
153             imageList => 'Wx::ImageList'
154             };
155              
156             #this method returns a images struct with appropriate data
157             sub _uGetImageData{
158             my $imgList=Wx::ImageList->new(16,16,1);
159             $icon_installed=Wx::ArtProvider::GetBitmap(wxART_TICK_MARK,wxART_BUTTON_C);
160             $icon_update=Wx::ArtProvider::GetBitmap(wxART_ADD_BOOKMARK,wxART_BUTTON_C);
161             $icon_remove=Wx::ArtProvider::GetBitmap(wxART_DEL_BOOKMARK,wxART_BUTTON_C);
162             $icon_not_installed=Wx::ArtProvider::GetBitmap(wxART_NEW_DIR,wxART_BUTTON_C);
163             $icon_unknown=Wx::ArtProvider::GetBitmap(wxART_QUESTION,wxART_BUTTON_C);
164              
165             $images=CPANPLUS::Shell::Wx::util::images->new(
166             installed => CPANPLUS::Shell::Wx::util::imagedata->new(
167             idx => $imgList->Add($icon_installed),
168             icon => $icon_installed
169             ),
170             update => CPANPLUS::Shell::Wx::util::imagedata->new(
171             idx => $imgList->Add($icon_update),
172             icon => $icon_update
173             ),
174             remove => CPANPLUS::Shell::Wx::util::imagedata->new(
175             idx => $imgList->Add($icon_remove),
176             icon => $icon_remove
177             ),
178             not_installed => CPANPLUS::Shell::Wx::util::imagedata->new(
179             idx => $imgList->Add($icon_not_installed),
180             icon => $icon_not_installed
181             ),
182             unknown => CPANPLUS::Shell::Wx::util::imagedata->new(
183             idx => $imgList->Add($icon_unknown),
184             icon => $icon_unknown
185             ),
186             imageList=>$imgList
187             );
188             return $images;
189             }
190              
191              
192             1;