X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e4e487e2a5d51c93cae3a73745128e3dbd23b168..8f4745feeb2850f3bebb3af45407e164550d541a:/src/html/htmlwin.cpp?ds=sidebyside diff --git a/src/html/htmlwin.cpp b/src/html/htmlwin.cpp index 6437b543c3..82f7c10557 100644 --- a/src/html/htmlwin.cpp +++ b/src/html/htmlwin.cpp @@ -25,6 +25,7 @@ #include "wx/timer.h" #include "wx/settings.h" #include "wx/dataobj.h" + #include "wx/statusbr.h" #endif #include "wx/html/htmlwin.h" @@ -38,9 +39,9 @@ IMPLEMENT_DYNAMIC_CLASS(wxHtmlLinkEvent, wxCommandEvent) IMPLEMENT_DYNAMIC_CLASS(wxHtmlCellEvent, wxCommandEvent) -DEFINE_EVENT_TYPE(wxEVT_COMMAND_HTML_CELL_CLICKED) -DEFINE_EVENT_TYPE(wxEVT_COMMAND_HTML_CELL_HOVER) -DEFINE_EVENT_TYPE(wxEVT_COMMAND_HTML_LINK_CLICKED) +wxDEFINE_EVENT( wxEVT_COMMAND_HTML_CELL_CLICKED, wxHtmlCellEvent ); +wxDEFINE_EVENT( wxEVT_COMMAND_HTML_CELL_HOVER, wxHtmlCellEvent ); +wxDEFINE_EVENT( wxEVT_COMMAND_HTML_LINK_CLICKED, wxHtmlLinkEvent ); #if wxUSE_CLIPBOARD @@ -70,7 +71,7 @@ private: int m_pos, m_orient; - DECLARE_NO_COPY_CLASS(wxHtmlWinAutoScrollTimer) + wxDECLARE_NO_COPY_CLASS(wxHtmlWinAutoScrollTimer); }; void wxHtmlWinAutoScrollTimer::Notify() @@ -291,7 +292,8 @@ void wxHtmlWindow::Init() m_tmpCanDrawLocks = 0; m_FS = new wxFileSystem(); #if wxUSE_STATUSBAR - m_RelatedStatusBar = -1; + m_RelatedStatusBar = NULL; + m_RelatedStatusBarIndex = -1; #endif // wxUSE_STATUSBAR m_RelatedFrame = NULL; m_TitleFormat = wxT("%s"); @@ -363,10 +365,17 @@ void wxHtmlWindow::SetRelatedFrame(wxFrame* frame, const wxString& format) #if wxUSE_STATUSBAR -void wxHtmlWindow::SetRelatedStatusBar(int bar) +void wxHtmlWindow::SetRelatedStatusBar(int index) { - m_RelatedStatusBar = bar; + m_RelatedStatusBarIndex = index; } + +void wxHtmlWindow::SetRelatedStatusBar(wxStatusBar* statusbar, int index) +{ + m_RelatedStatusBar = statusbar; + m_RelatedStatusBarIndex = index; +} + #endif // wxUSE_STATUSBAR @@ -510,9 +519,9 @@ bool wxHtmlWindow::LoadPage(const wxString& location) needs_refresh = true; #if wxUSE_STATUSBAR // load&display it: - if (m_RelatedStatusBar != -1) + if (m_RelatedStatusBarIndex != -1) { - m_RelatedFrame->SetStatusText(_("Connecting..."), m_RelatedStatusBar); + SetHTMLStatusText(_("Connecting...")); Refresh(false); } #endif // wxUSE_STATUSBAR @@ -541,10 +550,10 @@ bool wxHtmlWindow::LoadPage(const wxString& location) wxString src = wxEmptyString; #if wxUSE_STATUSBAR - if (m_RelatedStatusBar != -1) + if (m_RelatedStatusBarIndex != -1) { wxString msg = _("Loading : ") + location; - m_RelatedFrame->SetStatusText(msg, m_RelatedStatusBar); + SetHTMLStatusText(msg); Refresh(false); } #endif // wxUSE_STATUSBAR @@ -577,8 +586,10 @@ bool wxHtmlWindow::LoadPage(const wxString& location) delete f; #if wxUSE_STATUSBAR - if (m_RelatedStatusBar != -1) - m_RelatedFrame->SetStatusText(_("Done"), m_RelatedStatusBar); + if (m_RelatedStatusBarIndex != -1) + { + SetHTMLStatusText(_("Done")); + } #endif // wxUSE_STATUSBAR } } @@ -879,21 +890,27 @@ wxString wxHtmlWindow::DoSelectionToText(wxHtmlSelection *sel) return wxEmptyString; wxClientDC dc(this); - - const wxHtmlCell *end = sel->GetToCell(); wxString text; - wxHtmlTerminalCellsInterator i(sel->GetFromCell(), end); - if ( i ) - { - text << i->ConvertToText(sel); - ++i; - } - const wxHtmlCell *prev = *i; + + wxHtmlTerminalCellsInterator i(sel->GetFromCell(), sel->GetToCell()); + const wxHtmlCell *prev = NULL; + while ( i ) { - if ( prev->GetParent() != i->GetParent() ) - text << _T('\n'); - text << i->ConvertToText(*i == end ? sel : NULL); + // When converting HTML content to plain text, the entire paragraph + // (container in wxHTML) goes on single line. A new paragraph (that + // should go on its own line) has its own container. Therefore, the + // simplest way of detecting where to insert newlines in plain text + // is to check if the parent container changed -- if it did, we moved + // to a new paragraph. + if ( prev && prev->GetParent() != i->GetParent() ) + text << '\n'; + + // NB: we don't need to pass the selection to ConvertToText() in the + // middle of the selected text; it's only useful when only part of + // a cell is selected + text << i->ConvertToText(sel); + prev = *i; ++i; } @@ -1086,9 +1103,10 @@ void wxHtmlWindow::OnPaint(wxPaintEvent& WXUNUSED(event)) void wxHtmlWindow::OnSize(wxSizeEvent& event) { + event.Skip(); + wxDELETE(m_backBuffer); - wxScrolledWindow::OnSize(event); CreateLayout(); // Recompute selection if necessary: @@ -1612,8 +1630,17 @@ void wxHtmlWindow::SetHTMLBackgroundImage(const wxBitmap& bmpBg) void wxHtmlWindow::SetHTMLStatusText(const wxString& text) { #if wxUSE_STATUSBAR - if (m_RelatedStatusBar != -1) - m_RelatedFrame->SetStatusText(text, m_RelatedStatusBar); + if (m_RelatedStatusBarIndex != -1) + { + if (m_RelatedStatusBar) + { + m_RelatedStatusBar->SetStatusText(text, m_RelatedStatusBarIndex); + } + else if (m_RelatedFrame) + { + m_RelatedFrame->SetStatusText(text, m_RelatedStatusBarIndex); + } + } #else wxUnusedVar(text); #endif // wxUSE_STATUSBAR