#ifdef _USE_WXWIDGETS_ #include "bbtkWxBrowser.h" #include "bbtkWxBlackBox.h" #include "bbtkWxConsole.h" #include "bbtkConfigurationFile.h" #include "bbtkUtilities.h" namespace bbtk { //======================================================================== enum { bwd_id, fwd_id, home_id, reload_id, include_id, url_id , html_id }; /*EED //======================================================================== void WxHtmlWindow::OnLinkClicked(const wxHtmlLinkInfo& e) { std::cout << "WxHtmlWindow::OnLink"<UpdateURL(); } //======================================================================== */ //======================================================================== BEGIN_EVENT_TABLE(WxBrowser, wxPanel) EVT_BUTTON(bwd_id, WxBrowser::OnBackButton ) EVT_BUTTON(fwd_id, WxBrowser::OnForwardButton ) EVT_BUTTON(home_id, WxBrowser::OnHomeButton ) EVT_BUTTON(reload_id, WxBrowser::OnReloadButton ) EVT_BUTTON(include_id, WxBrowser::OnIncludeFileButton ) EVT_TEXT_ENTER(url_id, WxBrowser::OnURLEnter ) EVT_HTML_LINK_CLICKED(html_id, WxBrowser::OnLinkClicked) END_EVENT_TABLE() //======================================================================== //======================================================================== WxBrowser::WxBrowser ( wxWindow *parent, wxSize size ) : wxPanel ( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL) { wxPanel* panel = this; wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL); wxBoxSizer *bsizer = new wxBoxSizer(wxHORIZONTAL); mwxBackButton = new wxButton( panel, bwd_id,_T("<"),wxDefaultPosition, wxDefaultSize,wxBU_EXACTFIT); bsizer->Add ( mwxBackButton , 0, wxALIGN_CENTRE | wxLEFT | wxTOP | wxBOTTOM , 10 ); mwxForwardButton = new wxButton( panel, fwd_id,_T(">"),wxDefaultPosition, wxDefaultSize,wxBU_EXACTFIT); bsizer->Add ( mwxForwardButton , 0, wxALIGN_CENTRE | wxTOP | wxBOTTOM , 10); mwxHomeButton = new wxButton( panel, home_id,_T("Home"),wxDefaultPosition, wxDefaultSize,wxBU_EXACTFIT); bsizer->Add ( mwxHomeButton , 0, wxALIGN_CENTRE | wxLEFT | wxTOP | wxBOTTOM , 10 ); mwxReloadButton = new wxButton( panel, reload_id,_T("Reload"),wxDefaultPosition, wxDefaultSize,wxBU_EXACTFIT); bsizer->Add ( mwxReloadButton , 0, wxALIGN_CENTRE | wxTOP | wxBOTTOM , 10 ); mwxIncludeFileButton = new wxButton( panel, include_id, _T("RUN"),wxDefaultPosition, wxDefaultSize,wxBU_EXACTFIT); bsizer->Add ( mwxIncludeFileButton , 0, wxALIGN_CENTRE | wxLEFT | wxTOP | wxBOTTOM , 10 ); mwxURL = new wxTextCtrl(panel,url_id,_T(""), wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER); mwxURL->SetLabel(_T("URL")); bsizer->Add(mwxURL, 1, wxEXPAND | wxALL, 10); // mwxHtmlWindow = new WxHtmlWindow(parent,html_id,this,size); mwxHtmlWindow = new WxHtmlWindow(this,html_id,this,size); /* -1, wxDefaultPosition, size, wxHW_SCROLLBAR_AUTO, "bbtk::WxBrowser"); */ mwxHtmlWindow->SetBorders(5); // mwxHtmlWindow->FitInside(); wxStaticBoxSizer* hw = new wxStaticBoxSizer( new wxStaticBox( this, -1, _T(""), wxDefaultPosition, size ), wxVERTICAL ); //EED hw->Add ( mwxHtmlWindow, 1, wxGROW ); hw->Add ( mwxHtmlWindow, 1, wxEXPAND ); //sizer->Add ( mwxHtmlWindow, 1, wxGROW ); //EED sizer->Add ( hw, 1, wxGROW ); // | wxLEFT | wxRIGHT | wxBOTTOM, 10 ); sizer->Add ( bsizer , 0, wxEXPAND ); sizer->Add ( hw, 1, wxGROW ); // | wxLEFT | wxRIGHT | wxBOTTOM, 10 ); panel -> SetSizer(sizer); panel -> SetAutoLayout(true); panel -> Layout(); // GoHome(); /* Connect( mwxBackButton->GetId(), wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) (void (wxPanel::*)(wxEvent&)) &WxBrowser::OnBackButton ); Connect( mwxForwardButton->GetId(), wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) (void (wxPanel::*)(wxEvent&)) &WxBrowser::OnForwardButton ); std::cout << "e="<GetId(), wxEVT_COMMAND_HTML_LINK_CLICKED , wxHtmlLinkEventHandler( //(wxObjectEventFunction) // (void (wxPanel::*)(wxEvent&))& WxBrowser::OnLinkClicked ) ); Connect( mwxHtmlWindow->GetId(), wxEVT_COMMAND_HTML_CELL_HOVER, //(wxObjectEventFunction) wxHtmlCellEventHandler( // (void (wxPanel::*)(wxHtmlCellEvent&))& WxBrowser::OnCell ) ); */ } //======================================================================== //======================================================================== bool WxBrowser::GoTo(std::string& file) { // std::cout << "goto"<LoadPage(std2wx(file)); UpdateURL(); return r; } //======================================================================== //======================================================================== void WxBrowser::OnBackButton(wxCommandEvent& ) { // std::cout << "back"<HistoryBack(); UpdateURL(); } //======================================================================== //======================================================================== void WxBrowser::OnForwardButton(wxCommandEvent& ) { // std::cout << "forward"<HistoryForward(); UpdateURL(); } //======================================================================== //======================================================================== void WxBrowser::GoHome() { std::string url = ConfigurationFile::GetInstance().Get_doc_path(); url += "/bbtkWebSite/menu.html"; GoTo(url); mwxURL->Clear(); mwxURL->AppendText(url); /*EED if (Utilities::FileExists(url)) { GoTo(url); } else { // what ? } */ } //======================================================================== //======================================================================== void WxBrowser::OnHomeButton(wxCommandEvent& ) { GoHome(); } //======================================================================== //======================================================================== void WxBrowser::OnReloadButton(wxCommandEvent& e) { OnURLEnter(e); } //======================================================================== //======================================================================== void WxBrowser::OnIncludeFileButton(wxCommandEvent& ) { std::string filename = wx2std(mwxURL->GetValue()); size_t s = filename.length(); WxConsole* C = WxConsole::GetInstance(); if (C != 0) { if ((s>3) && (filename[s-1]=='s') && (filename[s-2]=='b') && (filename[s-3]=='b') && (filename[s-4]=='.')) { C->SetStatusText(_T("Executing ")+mwxURL->GetValue()); C->InterpretFile(filename); } else { C->SetStatusText(_T("The current page is not a bbs file : cannot execute it")); } } /* std::string bbdoc = ConfigurationFile::GetInstance().Get_url(); bbdoc += "/bbdoc"; std::string command("cd "); command += bbdoc; command += " & bbi -q -n make-index.bbs"; system(command.c_str()); */ } //======================================================================== //======================================================================== void WxBrowser::OnURLEnter( wxCommandEvent&) { std::cout << "OnURL"<LoadPage(mwxURL->GetValue()); } //======================================================================== //======================================================================== void WxBrowser::OnLinkClicked(wxHtmlLinkEvent& e) { std::cout << "WxBrowser::OnLinkClicked"<LoadPage(e.GetLinkInfo().GetHref()); UpdateURL(); } //======================================================================== /* void WxBrowser::OnCell(wxHtmlCellEvent& ) { std::cout << "OnCell"<GetOpenedPage(); if (!mwxHtmlWindow->GetOpenedAnchor().IsEmpty()) { s += _T("#") + mwxHtmlWindow->GetOpenedAnchor(); } mwxURL->Clear(); mwxURL->AppendText(s); } //======================================================================== //======================================================================== void WxBrowser::SetSize( wxSize s) { // wxPanel::SetSize(s); mwxHtmlWindow->SetSize(s); Fit(); } //======================================================================== } #endif