~ubuntu-branches/ubuntu/saucy/padre/saucy-proposed

« back to all changes in this revision

Viewing changes to lib/Padre/Wx/Dialog/PerlFilter.pm

  • Committer: Package Import Robot
  • Author(s): Dominique Dumont, gregor herrmann, Dominique Dumont
  • Date: 2012-01-04 12:04:20 UTC
  • mfrom: (1.3.3)
  • Revision ID: package-import@ubuntu.com-20120104120420-i5oybqwf91m1d3il
Tags: 0.92.ds1-1
[ gregor herrmann ]
* Remove debian/source/local-options; abort-on-upstream-changes
  and unapply-patches are default in dpkg-source since 1.16.1.
* Swap order of alternative (build) dependencies after the perl
  5.14 transition.

[ Dominique Dumont ]
* Imported Upstream version 0.92.ds1
* removed fix-spelling patch (applied upstream)
* lintian-override: use wildcard to avoid listing a gazillion files
* updated size of some 'not-real-man-page' entries
* rules: remove dekstop cruft (replaced by a file provided in debian
  directory)
* control: removed Breaks statement. Add /me to uploaders. Updated
  dependencies
* rules: make sure that non-DFSG file (i.e. the cute butterfly, sigh)
  is not distributed

Show diffs side-by-side

added added

removed removed

Lines of Context:
12
12
# RichTextCtrl
13
13
use Wx::RichText ();
14
14
 
15
 
our $VERSION = '0.90';
 
15
our $VERSION = '0.92';
16
16
our @ISA     = qw{
17
17
        Padre::Wx::Role::Main
18
18
        Wx::Dialog
31
31
                $parent,
32
32
                -1,
33
33
                Wx::gettext('Perl Filter'),
34
 
                Wx::wxDefaultPosition,
35
 
                Wx::wxDefaultSize,
36
 
                Wx::wxDEFAULT_FRAME_STYLE,
 
34
                Wx::DefaultPosition,
 
35
                Wx::DefaultSize,
 
36
                Wx::DEFAULT_FRAME_STYLE,
37
37
        );
38
38
 
39
39
        # Set basic dialog properties
41
41
        $self->SetMinSize( [ 380, 500 ] );
42
42
 
43
43
        # create sizer that will host all controls
44
 
        my $sizer = Wx::BoxSizer->new(Wx::wxHORIZONTAL);
 
44
        my $sizer = Wx::BoxSizer->new(Wx::HORIZONTAL);
45
45
        $self->{sizer} = $sizer;
46
46
 
47
47
        # Create the controls
63
63
 
64
64
        # Dialog Controls, created in keyboard navigation order
65
65
 
 
66
        # Filter type
 
67
        $self->{filter_mode} = Wx::RadioBox->new(
 
68
                $self, -1,
 
69
                Wx::gettext('Input/output:'),
 
70
                Wx::DefaultPosition,
 
71
                Wx::DefaultSize,
 
72
                [   Wx::gettext('$_ for both'),
 
73
 
 
74
                        # Wx::gettext('STDIN/STDOUT'),
 
75
                        Wx::gettext('wrap in map { }'),
 
76
                        Wx::gettext('wrap in grep { }'),
 
77
                ]
 
78
        );
 
79
        $self->{filter_mode_values} = { # Set position of each filter mode
 
80
                default => 0,
 
81
                std     => -1,
 
82
                'map'   => 1,
 
83
                'grep'  => 2,
 
84
        };
 
85
 
66
86
        # Perl source
67
87
        my $source_label = Wx::StaticText->new( $self, -1, Wx::gettext('&Perl filter source:') );
68
88
        $self->{source} = Wx::TextCtrl->new(
69
 
                $self, -1, '', Wx::wxDefaultPosition, Wx::wxDefaultSize,
70
 
                Wx::wxRE_MULTILINE | Wx::wxWANTS_CHARS
 
89
                $self, -1, '', Wx::DefaultPosition, Wx::DefaultSize,
 
90
                Wx::RE_MULTILINE | Wx::WANTS_CHARS
71
91
        );
72
92
 
73
93
        # Input text
74
94
        my $original_label = Wx::StaticText->new( $self, -1, Wx::gettext('Or&iginal text:') );
75
95
        $self->{original_text} = Wx::TextCtrl->new(
76
 
                $self, -1, '', Wx::wxDefaultPosition, Wx::wxDefaultSize,
77
 
                Wx::wxTE_MULTILINE | Wx::wxNO_FULL_REPAINT_ON_RESIZE
 
96
                $self, -1, '', Wx::DefaultPosition, Wx::DefaultSize,
 
97
                Wx::TE_MULTILINE | Wx::NO_FULL_REPAINT_ON_RESIZE
78
98
        );
79
99
 
80
100
        # Matched readonly text field
81
101
        my $result_label = Wx::StaticText->new( $self, -1, Wx::gettext('&Output text:') );
82
102
        $self->{result_text} = Wx::RichTextCtrl->new(
83
 
                $self, -1, '', Wx::wxDefaultPosition, Wx::wxDefaultSize,
84
 
                Wx::wxRE_MULTILINE | Wx::wxRE_READONLY | Wx::wxWANTS_CHARS # Otherwise arrows will not work on win32
 
103
                $self, -1, '', Wx::DefaultPosition, Wx::DefaultSize,
 
104
                Wx::RE_MULTILINE | Wx::RE_READONLY | Wx::WANTS_CHARS # Otherwise arrows will not work on win32
85
105
        );
86
106
 
87
107
        # Run the filter
96
116
 
97
117
        # Close button
98
118
        $self->{close_button} = Wx::Button->new(
99
 
                $self, Wx::wxID_CANCEL, Wx::gettext('&Close'),
 
119
                $self, Wx::ID_CANCEL, Wx::gettext('&Close'),
100
120
        );
101
121
 
102
 
        my $buttons = Wx::BoxSizer->new(Wx::wxHORIZONTAL);
 
122
        my $buttons = Wx::BoxSizer->new(Wx::HORIZONTAL);
103
123
        $buttons->AddStretchSpacer;
104
 
        $buttons->Add( $self->{run_button},    0, Wx::wxALL, 1 );
105
 
        $buttons->Add( $self->{insert_button}, 0, Wx::wxALL, 1 );
106
 
        $buttons->Add( $self->{close_button},  0, Wx::wxALL, 1 );
 
124
        $buttons->Add( $self->{run_button},    0, Wx::ALL, 1 );
 
125
        $buttons->Add( $self->{insert_button}, 0, Wx::ALL, 1 );
 
126
        $buttons->Add( $self->{close_button},  0, Wx::ALL, 1 );
107
127
        $buttons->AddStretchSpacer;
108
128
 
109
129
        # Dialog Layout
110
130
 
111
131
        # Vertical layout of the left hand side
112
 
        my $left = Wx::BoxSizer->new(Wx::wxVERTICAL);
113
 
 
114
 
        $left->Add( $source_label,   0, Wx::wxALL | Wx::wxEXPAND, 1 );
115
 
        $left->Add( $self->{source}, 1, Wx::wxALL | Wx::wxEXPAND, 1 );
116
 
 
117
 
        $left->Add( $original_label,        0, Wx::wxALL | Wx::wxEXPAND, 1 );
118
 
        $left->Add( $self->{original_text}, 1, Wx::wxALL | Wx::wxEXPAND, 1 );
119
 
        $left->Add( $result_label,          0, Wx::wxALL | Wx::wxEXPAND, 1 );
120
 
        $left->Add( $self->{result_text},   1, Wx::wxALL | Wx::wxEXPAND, 1 );
 
132
        my $left = Wx::BoxSizer->new(Wx::VERTICAL);
 
133
 
 
134
        $left->Add( $self->{filter_mode}, 0, Wx::ALL | Wx::EXPAND, 1 );
 
135
 
 
136
        $left->Add( $source_label,   0, Wx::ALL | Wx::EXPAND, 1 );
 
137
        $left->Add( $self->{source}, 1, Wx::ALL | Wx::EXPAND, 1 );
 
138
 
 
139
        $left->Add( $original_label,        0, Wx::ALL | Wx::EXPAND, 1 );
 
140
        $left->Add( $self->{original_text}, 1, Wx::ALL | Wx::EXPAND, 1 );
 
141
        $left->Add( $result_label,          0, Wx::ALL | Wx::EXPAND, 1 );
 
142
        $left->Add( $self->{result_text},   1, Wx::ALL | Wx::EXPAND, 1 );
121
143
        $left->AddSpacer(5);
122
 
        $left->Add( $buttons, 0, Wx::wxALL | Wx::wxEXPAND, 1 );
 
144
        $left->Add( $buttons, 0, Wx::ALL | Wx::EXPAND, 1 );
123
145
 
124
146
        # Main sizer
125
 
        $sizer->Add( $left, 1, Wx::wxALL | Wx::wxEXPAND, 5 );
 
147
        $sizer->Add( $left, 1, Wx::ALL | Wx::EXPAND, 5 );
126
148
}
127
149
 
128
150
sub _bind_events {
132
154
        # $self,
133
155
        # sub {
134
156
        # my ($key_event) = $_[1];
135
 
        # $self->Hide if $key_event->GetKeyCode == Wx::WXK_ESCAPE;
 
157
        # $self->Hide if $key_event->GetKeyCode == Wx::K_ESCAPE;
136
158
        # return;
137
159
        # }
138
160
        # );
146
168
        # $self->{source},
147
169
        # sub {
148
170
        # my ($key_event) = $_[1];
149
 
        # $self->Hide if $key_event->GetKeyCode == Wx::WXK_ESCAPE;
 
171
        # $self->Hide if $key_event->GetKeyCode == Wx::K_ESCAPE;
150
172
        # return;
151
173
        # }
152
174
        # );
155
177
        # $self->{original_text},
156
178
        # sub {
157
179
        # my ($key_event) = $_[1];
158
 
        # $self->Hide if $key_event->GetKeyCode == Wx::WXK_ESCAPE;
 
180
        # $self->Hide if $key_event->GetKeyCode == Wx::K_ESCAPE;
159
181
        # return;
160
182
        # }
161
183
        # );
164
186
        # $self->{result_text},
165
187
        # sub {
166
188
        # my ($key_event) = $_[1];
167
 
        # $self->Hide if $key_event->GetKeyCode == Wx::WXK_ESCAPE;
 
189
        # $self->Hide if $key_event->GetKeyCode == Wx::K_ESCAPE;
168
190
        # return;
169
191
        # }
170
192
        # );
265
287
 
266
288
        my $source        = $self->{source}->GetValue;
267
289
        my $original_text = $self->{original_text}->GetValue;
 
290
        my $filter_mode   = $self->{filter_mode}->GetSelection;
 
291
        my $document      = $self->current->document;
 
292
        my $nl            = defined($document) ? $document->newline : "\n"; # Use (bad) default
 
293
        my $result_text;
268
294
 
269
295
        $self->{result_text}->Clear;
270
296
 
271
 
        $_ = $original_text;
272
 
        my $result_text = eval $source;
 
297
        local $@;
 
298
 
 
299
        my $code = eval "use utf8;package ".__PACKAGE__."::Sandbox;sub{$source\n}";
 
300
 
 
301
        unless ($@) {
 
302
                if ( $filter_mode == $self->{filter_mode_values}->{default} ) {
 
303
                        $result_text = eval {
 
304
                                local $_  = $original_text;
 
305
                                $code->();
 
306
                                $_
 
307
                        }
 
308
                } elsif ( $filter_mode == $self->{filter_mode_values}->{std} ) {
 
309
 
 
310
                        # TODO: use STDIN/STDOUT
 
311
                        #               $_ = $original_text;
 
312
                        #               $result_text = eval $source;
 
313
                } elsif ( $filter_mode == $self->{filter_mode_values}->{map} ) {
 
314
                        $result_text = eval { join( $nl, map { $code->() } split( /$nl/, $original_text ) ) };
 
315
                } elsif ( $filter_mode == $self->{filter_mode_values}->{grep} ) {
 
316
                        $result_text = eval { join( $nl, grep { $code->() } split( /$nl/, $original_text ) ) };
 
317
                }
 
318
        }
 
319
 
 
320
        # Common eval error handling
273
321
        if ($@) {
274
 
                $result_text = Wx::gettext('Error') . ":\n" . $@;
275
 
        }
276
 
 
277
 
        if ( defined $result_text ) {
 
322
                # TODO: Set text color red
 
323
                $self->{result_text}->SetValue(Wx::gettext("Error:\n") . $@);
 
324
        } elsif ( defined $result_text ) {
278
325
                $self->{result_text}->SetValue($result_text);
 
326
        } else {
 
327
 
 
328
                # TODO: Set text color red
 
329
                $self->{result_text}->SetValue('undef');
279
330
        }
280
331
 
281
332
        return;