package dtRdr::HTMLShim::WxHTML; $VERSION = eval{require version}?version::qv($_):$_ for(0.0.1); use warnings; use strict; use Wx (); use Wx::Event qw( EVT_MENU EVT_KEY_UP EVT_LEFT_DCLICK EVT_MOUSE_EVENTS ); use Wx::Html; # XXX could do this, but t/00-load.t doesn't like it # unless(exists($INC{'dtRdr/HTMLWidget.pm'})) { # warn "this isn't meant to be used directly"; # } use constant base => 'Wx::HtmlWindow'; use base 'dtRdr::HTMLWidget'; use dtRdr::Logger; # TEMPORARY {{{ use dtRdr::Traits::Class qw( WARN_NOT_IMPLEMENTED ); use dtRdr::HTMLWidget::Shared qw( get_scroll_pos set_scroll_pos scroll_page_down scroll_page_up jump_to_anchor ); # these are just temporary imports # TEMPORARY }}} use dtRdr::HTMLWidget::Shared (); *filter_HTML = \&dtRdr::HTMLWidget::Shared::absolute_images_filter; =head1 NAME dtRdr::HTMLShim::WxHTML - a cross-platform widget without css =head1 SYNOPSIS This module is scheduled to get some nice concrete boots and a trip to the lake. =cut =head2 new dtRdr::HTMLShim::WxHTML->new(...) =cut sub new { my $package = shift; my ($b_args, $w_args) = @_; my ($parent, @b_args) = @$b_args; my @defaults = ( -1, &Wx::wxDefaultPosition, &Wx::wxDefaultSize, #&Wx::wxHW_NO_SELECTION ); defined($b_args[$_]) or $b_args[$_] = $defaults[$_] for(0..$#defaults); my $self = $package->SUPER::new([$parent, @b_args], $w_args); $self->load_in_progress(0); # XXX ??? --Eric # $self->{print_object} = wxHtmlEasyPrinting->new(); return($self); } # end subroutine new definition ######################################################################## =head2 meddle $hw->meddle; =cut sub meddle { my $self = shift; # "". # "". # "". my @pages = ( [0, "/tmp/img/mailman.html"], [0, "/tmp/img/PythonPowered.html"], [0, "/tmp/img/powerlogo.html"], [0, "http://localhost/osoft-hacks/mailman.html"], [0, "http://localhost/osoft-hacks/PythonPowered.html"], [0, "http://localhost/osoft-hacks/powerlogo.html"], [0, "http://localhost/osoft-hacks/"], [0, "http://osoft.com/"], [0, "http://osoft.com/store/"], [0, "http://dotreader.com/"], [0, "http://scratchcomputing.com/"], [0, "http://vectorsection.org/"], [0, "http://tinaconnolly.com/"], ); my $page = (grep({$_->[0]} @pages))[0]; $page and $self->LoadPage($page->[1]); } # end subroutine meddle definition ######################################################################## =head2 init $hw->init($parent); =cut sub init { my $self = shift; my ($parent) = @_; $self->SUPER::init(@_); $self->{parent} = $parent; # TODO # self->SetRelatedStatusBar(...) # This gets us web browsing, but requires file:// on local stuff # XXX and crashes on windows (bad build?) use Wx::FS; eval{Wx::FileSystem::AddHandler(Wx::InternetFSHandler->new)}; $@ and WARN("error initializing FSHandler, maybe no browsing"); { # this does nothing unless we make a menu/hotkey for it # and might as well keep it in Frame.pm or something EVT_MENU($parent, &Wx::wxID_COPY, sub { my ($h, $e) = @_; warn "copy event"; }); } EVT_LEFT_DCLICK($self, sub {warn "yay";}); EVT_KEY_UP($self, \&OnKeyUp); 0 and EVT_MOUSE_EVENTS($self, sub { my ($h, $e) = @_; warn "mouse event"; wxTheClipboard->Open; wxTheClipboard->Clear; wxTheClipboard->Close; $e->StopPropagation; $e->Skip(1); # even this does nothing useful here! #$h->SetEvtHandlerEnabled(0); }); } # end subroutine init definition ######################################################################## =head2 start_print Hmm, what's this do? I think it is more like a do_print(). =cut sub start_print { my $self = shift; my $page = $self->GetOpenedPage(); my $status; if ($page ne '') { $status = $self->{print_object}->PrintFile($page); } else { $page = $self->{html_source}; $status = $self->{print_object}->PrintText($page, ''); } return $status; } # end subroutine start_print definition ######################################################################## # Not implemented sub get_cursor_pos { return; } # Not implemented sub get_selection_boundary { return; } # XXX what are these? {{{ sub register_get_file { my ($self, $code) = @_; my $old_code = $self->{WxHTMLShim}{get_file}; $self->{WxHTMLShim}{get_file} = $code; return $old_code; } sub register_url_changed { my ($self, $code) = @_; my $old_code = $self->{WxHTMLShim}{url_changed}; $self->{WxHTMLShim}{url_changed} = $code; return $old_code; } sub register_form_post { my ($self, $code) = @_; my $old_code = $self->{WxHTMLShim}{form_post}; $self->{WxHTMLShim}{form_post} = $code; return $old_code; } sub register_form_get { my ($self, $code) = @_; my $old_code = $self->{WxHTMLShim}{form_get}; $self->{WxHTMLShim}{form_get} = $code; return $old_code; } # XXX }}} ######################################################################## =head1 Backend Overrides =head2 OnLinkClicked This is what's called when someone clicks a link $widget->OnLinkClicked($link_obj); =cut sub OnLinkClicked { my $self = shift; my ($link) = @_; my $url = $link->GetHref; warn "link: '", $url, "'"; # XXX complete hack XXX return($self->url_handler->load_url($url)); return $self->SUPER::OnLinkClicked($link); #if (exists $self->{WxHTMLShim}{url_changed}) { # $self->{WxHTMLShim}{url_changed}($self, $url); # return; #} else { return $self->LoadPage('file:///tmp/index.html'); return $self->LoadPage($url); #} } # end subroutine OnLinkClicked definition ######################################################################## use Method::Alias load_url => 'LoadPage'; use Method::Alias LoadURL => 'LoadPage'; =head2 OnOpeningURL $widget->OnOpeningURL($type, $url, $redirect); =cut sub OnOpeningURL { my $self = shift; my ($type, $url, $redirect) = @_; warn "called OnOpeningURL $type|$url|$redirect"; if (exists $self->{WxHTMLShim}{get_file}) { } else { } } # end subroutine OnOpeningURL definition ######################################################################## =head2 OnCellClicked not working -- IS NOT CONNECTED BY WxPerl $hw->OnCellClicked($cell, $x, $y, $event); =cut sub OnCellClicked { my $self = shift; my ($cell, $x, $y, $event) = @_; warn "you clicked on $cell at ($x,$y)"; } # end subroutine OnCellClicked definition ######################################################################## =head2 OnKeyUp $hw->OnKeyUp($event); =cut sub OnKeyUp { my $self = shift; my ($event) = @_; # there's no binding to this: # $self->SUPER::OnKeyUp($event); # wxTheClipboard->clear; warn "OnKeyUp($event)"; } # end subroutine OnKeyUp definition ######################################################################## =head1 AUTHOR Dan Sugalski Eric Wilhelm =head1 COPYRIGHT Copyright (C) 2006 by Dan Sugalski, Eric L. Wilhelm, and OSoft, All Rights Reserved. =head1 NO WARRANTY Absolutely, positively NO WARRANTY, neither express or implied, is offered with this software. You use this software at your own risk. In case of loss, no person or entity owes you anything whatsoever. You have been warned. =head1 LICENSE The dotReader(TM) is OSI Certified Open Source Software licensed under the GNU General Public License (GPL) Version 2, June 1991. Non-encrypted and encrypted packages are usable in connection with the dotReader(TM). The ability to create, edit, or otherwise modify content of such encrypted packages is self-contained within the packages, and NOT provided by the dotReader(TM), and is addressed in a separate commercial license. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. =cut 1; # vim:ts=2:sw=2:et:sta