X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/05f9197a346867069e89558a4e663cf54b2fd23b..939fadc8aab8cc85906685ed6cdcb46d28f27903:/src/html/htmlwin.cpp diff --git a/src/html/htmlwin.cpp b/src/html/htmlwin.cpp index 835b1d48ba..08e3966044 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 @@ -94,11 +94,11 @@ void wxHtmlWindow::Init() SetBorders(10); } -bool wxHtmlWindow::Create(wxWindow *parent, wxWindowID id, +bool wxHtmlWindow::Create(wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, - long style, const wxString& name) + long style, const wxString& name) { - if (!wxScrolledWindow::Create(parent, id, pos, size, + if (!wxScrolledWindow::Create(parent, id, pos, size, style | wxVSCROLL | wxHSCROLL, name)) return FALSE; @@ -215,7 +215,7 @@ bool wxHtmlWindow::AppendToPage(const wxString& source) bool wxHtmlWindow::LoadPage(const wxString& location) { wxBusyCursor busyCursor; - + wxFSFile *f; bool rt_val; bool needs_refresh = FALSE; @@ -262,9 +262,17 @@ bool wxHtmlWindow::LoadPage(const wxString& location) m_RelatedFrame->SetStatusText(_("Connecting..."), m_RelatedStatusBar); Refresh(FALSE); } - + 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()); @@ -345,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) { @@ -592,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); } @@ -610,11 +622,21 @@ void wxHtmlWindow::AddFilter(wxHtmlFilter *filter) } +bool wxHtmlWindow::IsSelectionEnabled() const +{ +#if wxUSE_CLIPBOARD + return !(m_Style & wxHW_NO_SELECTION); +#else + return false; +#endif +} void wxHtmlWindow::OnLinkClicked(const wxHtmlLinkInfo& link) { - LoadPage(link.GetHref()); + const wxMouseEvent *e = link.GetEvent(); + if (e == NULL || e->LeftUp()) + LoadPage(link.GetHref()); } void wxHtmlWindow::OnCellClicked(wxHtmlCell *cell, @@ -643,9 +665,11 @@ void wxHtmlWindow::OnDraw(wxDC& dc) dc.SetBackgroundMode(wxTRANSPARENT); GetViewStart(&x, &y); - m_Cell->Draw(dc, 0, 0, - y * wxHTML_SCROLL_STEP + rect.GetTop(), - y * wxHTML_SCROLL_STEP + rect.GetBottom()); + wxHtmlRenderingState rstate(NULL); + m_Cell->Draw(dc, 0, 0, + y * wxHTML_SCROLL_STEP + rect.GetTop(), + y * wxHTML_SCROLL_STEP + rect.GetBottom(), + rstate); } @@ -659,31 +683,32 @@ void wxHtmlWindow::OnSize(wxSizeEvent& event) } -void wxHtmlWindow::OnMouseEvent(wxMouseEvent& event) +void wxHtmlWindow::OnMouseMove(wxMouseEvent& event) { - m_tmpMouseMoved = TRUE; + m_tmpMouseMoved = true; +} - if (event.ButtonDown()) +void wxHtmlWindow::OnMouseButton(wxMouseEvent& event) +{ + SetFocus(); + if ( m_Cell ) { - if ( m_Cell ) - { - int sx, sy; - GetViewStart(&sx, &sy); - sx *= wxHTML_SCROLL_STEP; - sy *= wxHTML_SCROLL_STEP; + int sx, sy; + GetViewStart(&sx, &sy); + sx *= wxHTML_SCROLL_STEP; + sy *= wxHTML_SCROLL_STEP; - wxPoint pos = event.GetPosition(); - pos.x += sx; - pos.y += sy; + wxPoint pos = event.GetPosition(); + pos.x += sx; + pos.y += sy; - wxHtmlCell *cell = m_Cell->FindCellByPos(pos.x, pos.y); + wxHtmlCell *cell = m_Cell->FindCellByPos(pos.x, pos.y); - // VZ: is it possible that we don't find anything at all? - // VS: yes. FindCellByPos returns terminal cell and - // containers may have empty borders - if ( cell ) - OnCellClicked(cell, pos.x, pos.y, event); - } + // VZ: is it possible that we don't find anything at all? + // VS: yes. FindCellByPos returns terminal cell and + // containers may have empty borders + if ( cell ) + OnCellClicked(cell, pos.x, pos.y, event); } } @@ -751,9 +776,9 @@ IMPLEMENT_DYNAMIC_CLASS(wxHtmlWindow,wxScrolledWindow) BEGIN_EVENT_TABLE(wxHtmlWindow, wxScrolledWindow) EVT_SIZE(wxHtmlWindow::OnSize) - EVT_LEFT_DOWN(wxHtmlWindow::OnMouseEvent) - EVT_RIGHT_DOWN(wxHtmlWindow::OnMouseEvent) - EVT_MOTION(wxHtmlWindow::OnMouseEvent) + EVT_LEFT_UP(wxHtmlWindow::OnMouseButton) + EVT_RIGHT_UP(wxHtmlWindow::OnMouseButton) + EVT_MOTION(wxHtmlWindow::OnMouseMove) EVT_IDLE(wxHtmlWindow::OnIdle) END_EVENT_TABLE()