The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#! perl

package main;

package EB::Wx::Shell::HtmlViewer;

use base qw(Wx::Dialog);
use base qw(EB::Wx::Shell::Window);
use strict;

# begin wxGlade: ::dependencies
use Wx::Locale gettext => '_T';
# end wxGlade

use Wx::Html;

use Wx qw[
          wxADJUST_MINSIZE
          wxALL
          wxDEFAULT_DIALOG_STYLE
          wxDefaultPosition
          wxDefaultSize
          wxEXPAND
          wxHORIZONTAL
          wxID_CLOSE
          wxID_OK
          wxID_PRINT
          wxID_SAVE
          wxLEFT
          wxMAXIMIZE_BOX
          wxMINIMIZE_BOX
          wxFD_OVERWRITE_PROMPT
          wxRESIZE_BORDER
          wxFD_SAVE
          wxTHICK_FRAME
          wxVERTICAL
       ];

sub new {
	my( $self, $parent, $id, $title, $pos, $size, $style, $name ) = @_;
	$parent = undef              unless defined $parent;
	$id     = -1                 unless defined $id;
	$title  = ""                 unless defined $title;
	$pos    = wxDefaultPosition  unless defined $pos;
	$size   = wxDefaultSize      unless defined $size;
	$name   = ""                 unless defined $name;

# begin wxGlade: EB::Wx::Shell::HtmlViewer::new

	$style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxMAXIMIZE_BOX|wxMINIMIZE_BOX|wxTHICK_FRAME 
		unless defined $style;

	$self = $self->SUPER::new( $parent, $id, $title, $pos, $size, $style, $name );
	$self->{b_print} = Wx::Button->new($self, wxID_PRINT, "");
	$self->{b_save} = Wx::Button->new($self, wxID_SAVE, "");
	$self->{p_close} = Wx::Button->new($self, wxID_CLOSE, "");
	$self->{p_htmlview} = Wx::HtmlWindow->new($self, -1, wxDefaultPosition, wxDefaultSize, );

	$self->__set_properties();
	$self->__do_layout();

	Wx::Event::EVT_BUTTON($self, $self->{b_print}->GetId, \&OnPrint);
	Wx::Event::EVT_BUTTON($self, $self->{b_save}->GetId, \&OnSave);
	Wx::Event::EVT_BUTTON($self, $self->{p_close}->GetId, \&OnClose);

# end wxGlade

	Wx::Event::EVT_HTML_LINK_CLICKED($self->{p_htmlview}, $self->{p_htmlview}->GetId, \&OnLinkClicked);

	$self->{_PRINTER} =  Wx::HtmlEasyPrinting->new('Print');

	$self->sizepos_restore(lc($title));

	return $self;

}

sub info_only {
    my ( $self ) = @_;
    $self->{b_print}->Hide;
    $self->{b_save}->Hide;
}

sub html     { $_[0]->{p_htmlview}  }
sub htmltext :lvalue { $_[0]->{_HTMLTEXT} }
sub printer  { $_[0]->{_PRINTER}  }

sub __set_properties {
	my $self = shift;

# begin wxGlade: EB::Wx::Shell::HtmlViewer::__set_properties

	$self->SetTitle(_T("HTML Uitvoer"));
	$self->SetSize(Wx::Size->new(618, 522));
	$self->{p_close}->SetFocus();
	$self->{p_close}->SetDefault();

# end wxGlade
}

sub __do_layout {
	my $self = shift;

# begin wxGlade: EB::Wx::Shell::HtmlViewer::__do_layout

	$self->{sz_htmlview} = Wx::BoxSizer->new(wxVERTICAL);
	$self->{sz_htmlviewbuttons} = Wx::BoxSizer->new(wxHORIZONTAL);
	$self->{sz_htmlviewbuttons}->Add($self->{b_print}, 0, wxADJUST_MINSIZE, 0);
	$self->{sz_htmlviewbuttons}->Add($self->{b_save}, 0, wxLEFT|wxADJUST_MINSIZE, 5);
	$self->{sz_htmlviewbuttons}->Add(5, 1, 1, wxADJUST_MINSIZE, 0);
	$self->{sz_htmlviewbuttons}->Add($self->{p_close}, 0, wxADJUST_MINSIZE, 0);
	$self->{sz_htmlview}->Add($self->{sz_htmlviewbuttons}, 0, wxALL|wxEXPAND, 5);
	$self->{sz_htmlview}->Add($self->{p_htmlview}, 1, wxEXPAND, 0);
	$self->SetSizer($self->{sz_htmlview});
	$self->Layout();

# end wxGlade
}

sub OnPrint {
    my ($self, $event) = @_;
# wxGlade: EB::Wx::Shell::HtmlViewer::OnPrint <event_handler>
    $self->printer->SetFooter(' - @PAGENUM@ - ');
    $self->printer->PrintText($self->htmltext);
# end wxGlade
}


sub OnSave {
    my ($self, $event) = @_;
# wxGlade: EB::Wx::Shell::HtmlViewer::OnSave <event_handler>
    my $d = Wx::FileDialog->new($self, _T("Opslaan als..."),
				"", _T("raport.html"),
				_T("HTML bestanden (*.html)|*.html"),
				wxFD_SAVE | wxFD_OVERWRITE_PROMPT);
    my $result = $d->ShowModal;
    if ( $result == wxID_OK ) {
	my $file = $d->GetPath;
	open(my $fd, ">", $file);
	print { $fd } $self->htmltext;
	close($fd);
    }
# end wxGlade
}


sub OnClose {
    my ($self, $event) = @_;
# wxGlade: EB::Wx::Shell::HtmlViewer::OnClose <event_handler>
    $self->sizepos_save;
    $self->Show(0);
# end wxGlade
}

sub OnLinkClicked {
    my ($self, $event) = @_;

    my $link = $event->GetLinkInfo->GetHref;

    if ( $link =~ m;^([^:]+)://(.+)$;
	 && (my $rep = EB::Wx::Shell::MainFrame->can("ShowR" . ucfirst(lc($1)))) ) {
	my @a = split(/[?&]/, $2);
	my $args = { select => shift(@a) };
	foreach ( @a ) {
	    if ( /^([^=]+)=(.*)/ ) {
		$args->{$1} = $2;
	    }
	    else {
		$args->{$_} = 1;
	    }
	}
	$rep->($self->GetParent->GetParent, $args);
    }
    elsif ( $link =~ m;^(https?|mailto):; ) {
	Wx::LaunchDefaultBrowser($link);
    }
    else {
	Wx::LogMessage('Link: "%s"', $1);
    }
}

# end of class EB::Wx::Shell::HtmlViewer

1;