X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/39029898248ba8089ce87a1978f1d92af3f6550b..f40f9976fd085fd6d2099de861159bb1062a8f46:/src/html/htmlwin.cpp diff --git a/src/html/htmlwin.cpp b/src/html/htmlwin.cpp index ada2a4d19e..03890efadb 100644 --- a/src/html/htmlwin.cpp +++ b/src/html/htmlwin.cpp @@ -18,7 +18,7 @@ #include "wx/defs.h" #if wxUSE_HTML && wxUSE_STREAMS -#ifdef __BORDLANDC__ +#ifdef __BORLANDC__ #pragma hdrstop #endif @@ -41,7 +41,7 @@ //----------------------------------------------------------------------------- // item of history list -class WXDLLEXPORT wxHtmlHistoryItem : public wxObject +class WXDLLEXPORT wxHtmlHistoryItem { public: wxHtmlHistoryItem(const wxString& p, const wxString& a) {m_Page = p, m_Anchor = a, m_Pos = 0;} @@ -72,8 +72,7 @@ WX_DEFINE_LIST(wxHtmlProcessorList); //----------------------------------------------------------------------------- -wxHtmlWindow::wxHtmlWindow(wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, - long style, const wxString& name) : wxScrolledWindow(parent, id, pos, size, style | wxVSCROLL | wxHSCROLL, name) +void wxHtmlWindow::Init() { m_tmpMouseMoved = FALSE; m_tmpLastLink = NULL; @@ -87,17 +86,28 @@ wxHtmlWindow::wxHtmlWindow(wxWindow *parent, wxWindowID id, const wxPoint& pos, m_Cell = NULL; m_Parser = new wxHtmlWinParser(this); m_Parser->SetFS(m_FS); - SetBorders(10); m_HistoryPos = -1; m_HistoryOn = TRUE; m_History = new wxHtmlHistoryArray; m_Processors = NULL; + m_Style = 0; + SetBorders(10); +} + +bool wxHtmlWindow::Create(wxWindow *parent, wxWindowID id, + const wxPoint& pos, const wxSize& size, + long style, const wxString& name) +{ + if (!wxScrolledWindow::Create(parent, id, pos, size, + style | wxVSCROLL | wxHSCROLL, name)) + return FALSE; + m_Style = style; SetPage(wxT("")); + return TRUE; } - wxHtmlWindow::~wxHtmlWindow() { HistoryClear(); @@ -204,13 +214,12 @@ bool wxHtmlWindow::AppendToPage(const wxString& source) bool wxHtmlWindow::LoadPage(const wxString& location) { + wxBusyCursor busyCursor; + wxFSFile *f; bool rt_val; bool needs_refresh = FALSE; - SetCursor(*wxHOURGLASS_CURSOR); - wxYield(); Refresh(FALSE); - m_tmpCanDrawLocks++; if (m_HistoryOn && (m_HistoryPos != -1)) { @@ -254,14 +263,20 @@ bool wxHtmlWindow::LoadPage(const wxString& location) Refresh(FALSE); } - f = m_FS->OpenFile(location); + f = m_Parser->OpenURL(wxHTML_URL_PAGE, location); + + // try to interpret 'location' as filename instead of URL: + if (f == NULL) + { + wxFileName fn(location); + wxString location2 = wxFileSystem::FileNameToURL(fn); + f = m_Parser->OpenURL(wxHTML_URL_PAGE, location2); + } if (f == NULL) { wxLogError(_("Unable to open requested HTML document: %s"), location.c_str()); m_tmpCanDrawLocks--; - - SetCursor(*wxSTANDARD_CURSOR); return FALSE; } @@ -299,7 +314,6 @@ bool wxHtmlWindow::LoadPage(const wxString& location) m_OpenedPage = f->GetLocation(); if (f->GetAnchor() != wxEmptyString) { - wxYield(); ScrollToAnchor(f->GetAnchor()); } @@ -326,11 +340,9 @@ bool wxHtmlWindow::LoadPage(const wxString& location) if (m_OpenedPageTitle == wxEmptyString) OnSetTitle(wxFileNameFromPath(m_OpenedPage)); - SetCursor(*wxSTANDARD_CURSOR); if (needs_refresh) { - wxYield(); m_tmpCanDrawLocks--; Refresh(); } @@ -341,6 +353,12 @@ bool wxHtmlWindow::LoadPage(const wxString& location) } +bool wxHtmlWindow::LoadFile(const wxFileName& filename) +{ + wxString url = wxFileSystem::FileNameToURL(filename); + return LoadPage(url); +} + bool wxHtmlWindow::ScrollToAnchor(const wxString& anchor) { @@ -488,7 +506,6 @@ bool wxHtmlWindow::HistoryBack() if (a == wxEmptyString) LoadPage(l); else LoadPage(l + wxT("#") + a); m_HistoryOn = TRUE; - wxYield(); m_tmpCanDrawLocks--; Scroll(0, (*m_History)[m_HistoryPos].GetPos()); Refresh(); @@ -519,7 +536,6 @@ bool wxHtmlWindow::HistoryForward() if (a == wxEmptyString) LoadPage(l); else LoadPage(l + wxT("#") + a); m_HistoryOn = TRUE; - wxYield(); m_tmpCanDrawLocks--; Scroll(0, (*m_History)[m_HistoryPos].GetPos()); Refresh(); @@ -590,14 +606,12 @@ wxHtmlProcessorList *wxHtmlWindow::m_GlobalProcessors = NULL; void wxHtmlWindow::CleanUpStatics() { - delete m_DefaultFilter; - m_DefaultFilter = NULL; + wxDELETE(m_DefaultFilter); m_Filters.DeleteContents(TRUE); m_Filters.Clear(); - delete m_GlobalProcessors; - m_GlobalProcessors = NULL; - delete s_cur_hand; - delete s_cur_arrow; + wxDELETE(m_GlobalProcessors); + wxDELETE(s_cur_hand); + wxDELETE(s_cur_arrow); } @@ -618,7 +632,7 @@ void wxHtmlWindow::OnLinkClicked(const wxHtmlLinkInfo& link) void wxHtmlWindow::OnCellClicked(wxHtmlCell *cell, wxCoord x, wxCoord y, const wxMouseEvent& event) -{ +{ wxCHECK_RET( cell, _T("can't be called with NULL cell") ); cell->OnMouseClick(this, x, y, event); @@ -632,23 +646,18 @@ void wxHtmlWindow::OnCellMouseHover(wxHtmlCell * WXUNUSED(cell), void wxHtmlWindow::OnDraw(wxDC& dc) { - int x, y; - wxRegionIterator upd(GetUpdateRegion()); // get the update rect list - int v_y, v_h; + if (m_tmpCanDrawLocks > 0 || m_Cell == NULL) return; - if (m_tmpCanDrawLocks > 0) return; + int x, y; + wxRect rect = GetUpdateRegion().GetBox(); dc.SetMapMode(wxMM_TEXT); dc.SetBackgroundMode(wxTRANSPARENT); GetViewStart(&x, &y); - while (upd) - { - v_y = upd.GetY(); - v_h = upd.GetH(); - if (m_Cell) m_Cell->Draw(dc, 0, 0, y * wxHTML_SCROLL_STEP + v_y, y * wxHTML_SCROLL_STEP + v_h + v_y); - upd++; - } + m_Cell->Draw(dc, 0, 0, + y * wxHTML_SCROLL_STEP + rect.GetTop(), + y * wxHTML_SCROLL_STEP + rect.GetBottom()); } @@ -668,6 +677,7 @@ void wxHtmlWindow::OnMouseEvent(wxMouseEvent& event) if (event.ButtonDown()) { + SetFocus(); if ( m_Cell ) { int sx, sy;