Changeset 5841


Ignore:
Timestamp:
07/05/09 00:53:00 (3 years ago)
Author:
azawawi
Message:

[Perl 6] Perl 6 Help Powered by App::Grok with Auto Preview pane :)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Padre-Plugin-Perl6/lib/Padre/Plugin/Perl6/Perl6HelpDialog.pm

    r5836 r5841  
    1616# accessors 
    1717use Class::XSAccessor accessors => { 
    18     _sizer             => '_sizer',              # window sizer 
     18    _hbox              => '_hbox',               # horizontal box sizer 
     19    _vbox              => '_vbox',               # vertical box sizer 
    1920    _search_text       => '_search_text',        # search text control 
    2021    _list              => '_list',               # matches list 
    2122    _targets_index     => '_targets_index',      # targets index 
     23    _help_viewer       => '_help_viewer',        # HTML Help Viewer 
    2224    _plugin            => '_plugin',             # plugin object 
    2325}; 
     
    3335        $main, 
    3436        -1, 
    35         Wx::gettext('Perl 6 Help'), 
     37        Wx::gettext('Perl 6 Help (Powered by App::Grok)'), 
    3638        Wx::wxDefaultPosition, 
    3739        Wx::wxDefaultSize, 
     
    5456 
    5557# 
    56 # handler called when the ok button has been clicked. 
    57 #  
    58 sub _on_ok_button_clicked { 
    59     my ($self) = @_; 
    60  
    61     my $main = $self->_plugin->main; 
    62  
    63     #Open the selected resources here if the user pressed OK 
     58# Fetches the current selection's help HTML via App::Grok 
     59# 
     60sub display_help_in_viewer { 
     61    my $self = shift; 
     62 
    6463    my $selection = $self->_list->GetSelection(); 
    6564    my $help_target = $self->_list->GetClientData($selection); 
     65    my $help_html; 
    6666    if($help_target) { 
    6767        require App::Grok; 
    68         my $grok = App::Grok->new; 
    69         my $grok_text = $grok->render_target($help_target,'xhtml'); 
    70         if($grok_text) { 
    71             my $tmp = File::Temp->new(SUFFIX => '.html'); 
    72             $tmp->unlink_on_destroy(0); 
    73             my $filename = $tmp->filename; 
    74             print $tmp $grok_text; 
    75             close $tmp 
    76                 or warn "Could not close $filename"; 
    77  
    78             # launch the HTML file in your default browser 
    79             require URI::file; 
    80             my $file_url = URI::file->new($filename); 
    81             Wx::LaunchDefaultBrowser($file_url); 
    82  
    83         } else { 
    84             Wx::MessageBox( 
    85                 Wx::gettext('Topic not found!'), 
    86                 Wx::gettext('Perl 6 Help'), 
    87                 Wx::wxOK, 
    88                 $main, 
    89             ); 
    90         } 
    91     } 
    92     $self->Destroy; 
    93 } 
    94  
     68        eval { 
     69            my $grok = App::Grok->new; 
     70            $help_html = $grok->render_target($help_target,'xhtml'); 
     71        }; 
     72    } 
     73     
     74    if(not $help_html) { 
     75        $help_html = '<b>No Help found</b>'; 
     76    } 
     77     
     78    $self->_help_viewer->SetPage($help_html); 
     79 
     80    return; 
     81} 
    9582 
    9683# -- private methods 
     
    10087# 
    10188sub _create { 
    102     my ($self) = @_; 
     89    my $self = shift; 
    10390 
    10491    # create sizer that will host all controls 
    105     my $sizer = Wx::BoxSizer->new( Wx::wxVERTICAL ); 
    106     $self->_sizer($sizer); 
     92    $self->_hbox( Wx::BoxSizer->new( Wx::wxHORIZONTAL ) ); 
     93    $self->_vbox( Wx::BoxSizer->new( Wx::wxVERTICAL ) ); 
    10794 
    10895    # create the controls 
     
    11097    $self->_create_buttons; 
    11198 
    112     # wrap everything in a vbox to add some padding 
    113     $self->SetSizerAndFit($sizer); 
    114     $sizer->SetSizeHints($self); 
     99    # wrap everything in a box to add some padding 
     100    $self->SetSizerAndFit($self->_hbox); 
     101    $self->_hbox->SetSizeHints($self); 
    115102 
    116103    # center the dialog 
     
    127114# 
    128115sub _create_buttons { 
    129     my ($self) = @_; 
    130     my $sizer  = $self->_sizer; 
     116    my $self = shift; 
    131117 
    132118    my $butsizer = $self->CreateStdDialogButtonSizer(Wx::wxOK|Wx::wxCANCEL); 
    133     $sizer->Add($butsizer, 0, Wx::wxALL|Wx::wxEXPAND|Wx::wxALIGN_CENTER, 5 ); 
     119    $self->_vbox->Add($butsizer, 0, Wx::wxALL|Wx::wxEXPAND|Wx::wxALIGN_CENTER, 5 ); 
    134120    Wx::Event::EVT_BUTTON( $self, Wx::wxID_OK, \&_on_ok_button_clicked ); 
    135121} 
     
    139125# 
    140126sub _create_controls { 
    141     my ($self) = @_; 
     127    my $self = shift; 
    142128 
    143129    # search textbox 
     
    149135    my $matches_label = Wx::StaticText->new( $self, -1,  
    150136        Wx::gettext('&Matching Help Topics:') ); 
    151     $self->_list( Wx::ListBox->new( $self, -1, [-1, -1], [400, 300], [],  
     137    $self->_list( Wx::ListBox->new( $self, -1, [-1, -1], [200, 300], [],  
    152138        Wx::wxLB_SINGLE ) ); 
    153  
    154     $self->_sizer->AddSpacer(10); 
    155     $self->_sizer->Add( $search_label, 0, Wx::wxALL|Wx::wxEXPAND, 2 ); 
    156     $self->_sizer->Add( $self->_search_text, 0, Wx::wxALL|Wx::wxEXPAND, 2 ); 
    157     $self->_sizer->Add( $matches_label, 0, Wx::wxALL|Wx::wxEXPAND, 2 ); 
    158     $self->_sizer->Add( $self->_list, 0, Wx::wxALL|Wx::wxEXPAND, 2 ); 
     139         
     140    # HTML Help Viewer 
     141    require Padre::Wx::HtmlWindow; 
     142    $self->_help_viewer( Padre::Wx::HtmlWindow->new($self, -1, [-1,-1], [350, 300] ) ); 
     143    $self->_help_viewer->SetPage(''); 
     144 
     145     
     146    $self->_vbox->AddSpacer(10); 
     147    $self->_vbox->Add( $search_label, 0, Wx::wxALL|Wx::wxEXPAND, 2 ); 
     148    $self->_vbox->Add( $self->_search_text, 0, Wx::wxALL|Wx::wxEXPAND, 2 ); 
     149    $self->_vbox->Add( $matches_label, 0, Wx::wxALL|Wx::wxEXPAND, 2 ); 
     150    $self->_vbox->Add( $self->_list, 0, Wx::wxALL|Wx::wxEXPAND, 2 ); 
     151    $self->_hbox->Add( $self->_vbox, 0, Wx::wxALL|Wx::wxEXPAND, 2 ); 
     152    $self->_hbox->Add( $self->_help_viewer, 0, Wx::wxALL|Wx::wxEXPAND, 0 ); 
    159153 
    160154    $self->_setup_events(); 
     
    188182    }); 
    189183     
    190     Wx::Event::EVT_LISTBOX_DCLICK( $self, $self->_list, sub { 
    191         $self->_on_ok_button_clicked(); 
    192         $self->EndModal(0); 
     184    Wx::Event::EVT_LISTBOX( $self, $self->_list, sub { 
     185        $self->display_help_in_viewer; 
    193186    }); 
     187     
    194188} 
    195189 
     
    234228    if($pos > 0) { 
    235229        $self->_list->Select(0); 
     230        $self->display_help_in_viewer; 
    236231    } 
    237232             
Note: See TracChangeset for help on using the changeset viewer.