# 
# This file is part of Padre-Plugin-Plack
# 
# This software is copyright (c) 2010 by Patrick Donelan.
# 
# This is free software; you can redistribute it and/or modify it under
# the same terms as the Perl 5 programming language system itself.
# 
package Padre::Plugin::Plack::Panel;

use strict;
use warnings;

our $VERSION = '0.04';

use Padre::Wx   ();
use Padre::Util ('_T');
use Wx          ();
use base 'Wx::Panel';
use Padre::Current;
use Padre::Logger;

sub new {
    my $class = shift;
    my $doc   = shift;
    my $self  = $class->SUPER::new( Padre::Current->main->bottom );
    
    $doc->plugin->build_panel($doc, $self);
    
    return $self;
}

sub set_as_started {
    my $self = shift;
    $self->{start_stop}->SetLabel( _T('Stop') );
    $self->{led}->SetBitmap( $self->led( 'green' ) );
}

sub set_as_stopped {
    my $self = shift;
    $self->{start_stop}->SetLabel( _T('Start') );
    $self->{led}->SetBitmap( $self->led( 'red' ) );
}

sub output { return shift->{output} }

sub gettext_label { 
    my $self = shift;
    
    require File::Basename;
    my $doc = $self->{doc};
    if (my $filename = $doc && $doc->filename) {
        return File::Basename::basename($filename);
    } else {
        return 'Plackup';
    }
}

# dirty hack to allow seamless use of Padre::Wx::Output
sub bottom { return $_[0] }
sub main { warn "here"; return Padre::Current->main }

# taken from Padre::Plugin::Catalyst
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__
=pod

=head1 NAME

Padre::Plugin::Plack::Panel

=head1 VERSION

version 0.100970

=head1 AUTHOR

  Patrick Donelan <pat@patspam.com>

=head1 COPYRIGHT AND LICENSE

This software is copyright (c) 2010 by Patrick Donelan.

This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.

=cut

