]> git.saurik.com Git - wxWidgets.git/blame - distrib/msw/tmake/lib/wxFileList.pm
destroy the abort dialog when done with it
[wxWidgets.git] / distrib / msw / tmake / lib / wxFileList.pm
CommitLineData
69c44812
MB
1package wxFileList;
2
3=head1 NAME
4
5wxFileList
6
7=head1 SYNOPSIS
8
9 use wxFileList qw(grep_filetype grep_fileflag grep_not_fileflag
10 grep_source grep_header sort_files make_arrays);
11
12 # shorthand for
13 # @wxGeneric = sort_files grep_filetype 'Generic', @wxALL;
14 # @wxGenericInclude = sort_files grep_filetype 'GenericH', @wxALL;
15 make_arrays( 'wxGeneric', 'wxGenericInclude' );
16
17=head1 METHODS
18
19=cut
20
21use strict;
22
23# alias wxALL from main
24use vars qw(@wxALL);
25*wxALL = \@main::wxALL;
26
27use base 'Exporter';
28use vars qw(@EXPORT_OK %EXPORT_TAGS);
29
30@EXPORT_OK = qw(grep_filetype grep_fileflag grep_not_fileflag
31 grep_source grep_header sort_files make_arrays);
32
33%EXPORT_TAGS = ( 'default' => [ qw(grep_filetype grep_fileflag grep_source
34 grep_not_fileflag grep_header
35 sort_files) ],
36 );
37
38my %type_2_array = (
39 Common => "wxCommon",
40 Generic => "wxGeneric",
41 GenericH => "wxGenericInclude",
42 HTML => "wxHtml",
43 HtmlH => "wxHtmlInclude",
44 Motif => "wxMotif",
45 MotifH => "wxMotifInclude",
46 ProtoH => "wxProtocolInclude",
47 Unix => "wxUnix",
48 UnixH => "wxUnixInclude",
49 WXH => "wxWxInclude",
50 );
51# inverse mapping
52my %array_2_type = map { ( $type_2_array{$_}, $_ ) } keys %type_2_array;
53
54sub _sort {
55 sort { $a->filename cmp $b->filename } @_;
56}
57
58=head2 grep_filetype
59
60 my @files = grep_filetype 'Type', @all_files;
61
62Returns files in C<@all_files> whose file type matches C<'Type'>.
63
64=cut
65
66sub grep_filetype {
67 my $filetype = lc( shift );
68
69 return _sort grep { $filetype eq lc( $_->filetype ) } @_;
70}
71
72=head2 grep_fileflag
73
74=head2 grep_not_fileflag
75
76 my @files = grep_fileflag 'NotX', @all_files;
77 my @files2 = grep_not_fileflag 'NotX', @all_files;
78
79Return files in C<@all_files> [not] having the given file flag.
80
81=cut
82
83sub grep_fileflag {
84 my $fileflag = shift;
85
86 return _sort grep { $_->has_flag( $fileflag ) } @_;
87}
88
89sub grep_not_fileflag {
90 my $fileflag = shift;
91
92 return _sort grep { !( $_->has_flag( $fileflag ) ) } @_;
93}
94
95=head2 grep_header
96
97=head2 grep_source
98
99 my @headers = grep_header @all_files;
100 my @sources = grep_source @all_files;
101
102Return header/source files contained in C<@all_files>.
103
104=cut
105
106sub grep_header {
107 return _sort grep { $_->is_header } @_;
108}
109
110sub grep_source {
111 return _sort grep { $_->is_source } @_;
112}
113
114=head2 sort_files
115
116 my @sorted_files = sort_files @files;
117
118Sorts files by file name.
119
120=cut
121
122sub sort_files {
123 return sort { $a->{filename} cmp $b->{filename} } @_;
124}
125
126=head2 make_arrays
127
128See SYNOPSIS.
129
130=cut
131
132sub make_arrays {
133 my( $package ) = caller;
134
135 foreach my $array ( @_ ) {
136 my $type = $array_2_type{$array};
137
138 unless( $type ) {
139 require Carp;
140 croak( "Invalid array name '$array'" );
141 }
142
143 no strict 'refs';
144 @{"${package}::${array}"} = sort_files grep_filetype $type, @wxALL;
145 }
146}
147
1481;