| Padre-Plugin-Catalyst documentation | Contained in the Padre-Plugin-Catalyst distribution. |
Padre::Plugin::Catalyst::Panel - A Catalyst plugin panel
version 0.13
This software is copyright (c) 2010 by Breno G. de Oliveira.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
| Padre-Plugin-Catalyst documentation | Contained in the Padre-Plugin-Catalyst distribution. |
package Padre::Plugin::Catalyst::Panel; BEGIN { $Padre::Plugin::Catalyst::Panel::VERSION = '0.13'; } # ABSTRACT: A Catalyst plugin panel use strict; use warnings; use Padre::Wx (); use base 'Wx::Panel'; sub new { my $class = shift; my $main = shift; my $self = $class->SUPER::new( Padre::Current->main->bottom ); require Scalar::Util; $self->{main} = $main; Scalar::Util::weaken( $self->{main} ); # main container my $box = Wx::BoxSizer->new(Wx::wxVERTICAL); # top box, holding buttons, icons and checkboxes my $top_box = Wx::BoxSizer->new(Wx::wxHORIZONTAL); # visual led showing server state my $led = Wx::StaticBitmap->new( $self, -1, Wx::wxNullBitmap ); $led->SetBitmap( $self->led('red') ); $top_box->Add( $led, 0, Wx::wxALIGN_CENTER_VERTICAL ); $self->{led} = $led; # button to toggle server my $button = Wx::Button->new( $self, -1, Wx::gettext('Start Server') ); #Wx::Event::EVT_BUTTON( $self, $button, \&Padre::Plugin::Catalyst::toggle_server ); Wx::Event::EVT_BUTTON( $self, $button, sub { my $panel = shift; if ( $panel->{button}->GetLabel eq Wx::gettext('Start Server') ) { $panel->{main}->on_start_server; } else { $panel->{main}->on_stop_server; } }, ); $top_box->Add( $button, 0, Wx::wxALIGN_CENTER_VERTICAL ); # checkbox to auto-restart my $checkbox = Wx::CheckBox->new( $self, -1, Wx::gettext('auto-restart') ); Wx::Event::EVT_CHECKBOX( $self, $checkbox, sub { shift->{config}->{auto_restart} ^= 1 } ); $top_box->Add( $checkbox, 0, Wx::wxALIGN_CENTER_VERTICAL ); # finishing up the top_box #$box->Add( $top_box, 1, Wx::wxGROW ); $box->Add( $top_box, 0, Wx::wxALIGN_LEFT | Wx::wxALIGN_CENTER_VERTICAL ); # output panel for server require Padre::Wx::Output; my $output = Padre::Wx::Output->new($self); $box->Add( $output, 1, Wx::wxGROW ); # wrapping it up $self->SetSizer($box); # holding on to some objects we'll need to manipulate later on $self->{output} = $output; $self->{button} = $button; $self->{checkbox} = $checkbox; return $self; } sub output { return shift->{output} } sub gettext_label { return Wx::gettext('Catalyst Dev Server') } sub toggle_panel { my ( $self, $enable ) = (@_); my $new_label = [ Wx::gettext('Stop Server'), Wx::gettext('Start Server') ]; $self->{checkbox}->Enable($enable); $self->{button}->SetLabel( $new_label->[$enable] ); $self->{led}->SetBitmap( $self->led( $enable == 1 ? 'red' : 'green' ) ); } # dirty hack to allow seamless use of Padre::Wx::Output sub bottom { return $_[0] } # and now some xpm icons for the server leds sub led { my ( $self, $color ) = (@_); my @red = ( '20 20 192 2', ' c None', '. c #DE9898', '+ c #EC9D9D', '@ c #FA9C9C', '# c #FD9898', '$ c #FC8B8B', '% c #F67979', '& c #E46A6A', '* c #CD5757', '= c #C88989', '- c #F9ACAC', '; c #FFB8B8', '> c #FFBEBE', ', c #FEBDBD', '\' c #FFB5B5', ') c #FFA6A6', '! c #FE9393', '~ c #FF7D7D', '{ c #FF6868', '] c #E85151', '^ c #BB3D3D', '/ c #DE9797', '( c #FAACAC', '_ c #FFC2C2', ': c #FFD1D1', '< c #FED9D9', '[ c #FFD8D8', '} c #FFCECE', '| c #FFBDBD', '1 c #FFA8A8', '2 c #FF8E8E', '3 c #FF7575', '4 c #FF5D5D', '5 c #FF4646', '6 c #BD7B7B', '7 c #FFA2A2', '8 c #FFBCBC', '9 c #FFD4D4', '0 c #FFE5E5', 'a c #FFEDED', 'b c #FFE2E2', 'c c #FFD0D0', 'd c #FFB7B7', 'e c #FF9C9C', 'f c #FF8080', 'g c #FF6666', 'h c #FF4F4F', 'i c #F33A3A', 'j c #F28F8F', 'k c #FFA9A9', 'l c #FEC6C6', 'm c #FFDFDF', 'n c #FFF0F0', 'o c #FFFAFA', 'p c #FFF8F8', 'q c #FFDADA', 'r c #FFC0C0', 's c #FFA3A3', 't c #FF8787', 'u c #FF6B6B', 'v c #FF5252', 'w c #FF3D3D', 'x c #D77C7C', 'y c #FD8C8C', 'z c #FFAAAA', 'A c #FFC7C7', 'B c #FFE0E0', 'C c #FFF2F2', 'D c #FFFCFC', 'E c #FFEFEF', 'F c #FFDCDC', 'G c #FFA5A5', 'H c #FF8888', 'I c #FF6C6C', 'J c #FF5454', 'K c #FF3E3E', 'L c #FF2B2B', 'M c #C26A6A', 'N c #FFC1C1', 'O c #FFD9D9', 'P c #FFEAEA', 'Q c #FFF3F3', 'R c #FFE8E8', 'S c #FFD5D5', 'T c #FFA1A1', 'U c #FF8585', 'V c #FF6969', 'W c #FF5151', 'X c #A83838', 'Y c #F25F5F', 'Z c #FF7E7E', '` c #FF9999', ' . c #FFB4B4', '.. c #FFCACA', '+. c #FFB0B0', '@. c #FF9797', '#. c #FF7C7C', '$. c #FF6363', '%. c #FF4D4D', '&. c #FF3A3A', '*. c #FE2B2B', '=. c #E52525', '-. c #FB5A5A', ';. c #FF7272', '>. c #FF8A8A', ',. c #FFC3C3', '\'. c #FFB3B3', '). c #FF9F9F', '!. c #FF7070', '~. c #FF5A5A', '{. c #FF4747', ']. c #FF3535', '^. c #FF2727', '/. c #E32727', '(. c #F14C4C', '_. c #FF7777', ':. c #FF8B8B', '<. c #FFAFAF', '[. c #FFAEAE', '}. c #FFA7A7', '|. c #FF9A9A', '1. c #FF7676', '2. c #FF6262', '3. c #FF2E2E', '4. c #FF2323', '5. c #E22222', '6. c #D24343', '7. c #FF7474', '8. c #FF8181', '9. c #FF8C8C', '0. c #FF9191', 'a. c #FF7373', 'b. c #FF5353', 'c. c #FF4343', 'd. c #FF2828', 'e. c #FE1E1E', 'f. c #E71A1A', 'g. c #FE5151', 'h. c #FF7171', 'i. c #FF5E5E', 'j. c #FF4444', 'k. c #FF3737', 'l. c #FE2222', 'm. c #FF1414', 'n. c #EF3939', 'o. c #FE3F3F', 'p. c #FF4949', 'q. c #FF5858', 'r. c #FF5B5B', 's. c #FF4040', 't. c #FF3636', 'u. c #FF2C2C', 'v. c #FF1A1A', 'w. c #CB2727', 'x. c #C73636', 'y. c #FF2F2F', 'z. c #FE3838', 'A. c #FF4242', 'B. c #FF4545', 'C. c #FF3F3F', 'D. c #FF3939', 'E. c #FF3232', 'F. c #FF2929', 'G. c #FF1C1C', 'H. c #FF1010', 'I. c #C53535', 'J. c #FF2D2D', 'K. c #FF3131', 'L. c #FF3333', 'M. c #FF2A2A', 'N. c #FF2525', 'O. c #FE1F1F', 'P. c #FE1A1A', 'Q. c #FF1111', 'R. c #B03737', 'S. c #FF1E1E', 'T. c #FE2424', 'U. c #FF2424', 'V. c #FF2121', 'W. c #FF1717', 'X. c #FF0808', 'Y. c #DE2424', 'Z. c #F21F1F', '`. c #FF1818', ' + c #FF1616', '.+ c #FF1313', '++ c #EE1A1A', '@+ c #D22222', '#+ c #983C3C', '$+ c #963E3E', '%+ c #963D3D', '&+ c #983A3A', ' ', ' ', ' . + @ # $ % & * ', ' = - ; > , \' ) ! ~ { ] ^ ', ' / ( _ : < [ } | 1 2 3 4 5 ^ ', ' 6 7 8 9 0 a a b c d e f g h i ^ ', ' j k l m n o p a q r s t u v w ^ ', ' x y z A B C D o E F _ G H I J K L ^ ', ' M H G N O P Q C R S | T U V W w L X ', ' Y Z ` ...q b b [ A +.@.#.$.%.&.*.=. ', ' -.;.>.T \' ,.....N \'.).H !.~.{.].^./. ', ' (.$._.:.e 1 <.[.}.|.>.1.2.h K 3.4.5. ', ' 6.v $.7.8.9.0.0.9.8.a.$.b.c.].d.e.f. ', ' ^ c.g.4 { h.3 3 h.V i.W j.k.L l.m.^ ', ' n.o.p.W q.r.r.q.v p.s.t.u.4.v.w.^ ', ' x.y.z.K A.B.B.c.C.D.E.F.4.G.H.^ ', ' I.^.J.K.L.L.E.3.M.N.O.P.Q.^ ', ' R.S.4.T.N.U.V.S.P.W.X.^ ', ' ^ Y.Z.`.`. +.+++@+^ ', ' ^ #+$+%+&+^ ', ); # I'm too lazy to create a green XPM my @green = (); foreach (@red) { my $color = $_; $color =~ s/#(\w\w)(\w\w)/#$2$1/; push @green, $color; } my $led = { red => \@red, green => \@green, }; return Wx::Bitmap->newFromXPM( $led->{$color} ) if exists $led->{$color}; return; } 1; __END__