From 5ddf8197fa91f0a3fdaa66b519eafafa4a228843 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=A1clav=20Slav=C3=ADk?= Date: Wed, 15 Oct 2008 15:43:10 +0000 Subject: [PATCH] fixed wxHtmlWindow::SelectionToText() to correctly insert newlines after single-cell paragraphs git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_8_BRANCH@56333 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- docs/changes.txt | 2 ++ src/html/htmlwin.cpp | 30 ++++++++++++++++++------------ 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/docs/changes.txt b/docs/changes.txt index ac16a6d1c9..6d21154315 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -99,6 +99,8 @@ All (GUI): - Fixed wxHTML's pagebreaks computation in tables (D.J.Stauffer). - Fixed wxRichTextCtrl input that uses Alt on Mac OS X, for example Polish Pro input. +- Fixed wxHtmlWindow::SelectionToText() to correctly insert newlines after + single-cell paragraphs. All (Unix): diff --git a/src/html/htmlwin.cpp b/src/html/htmlwin.cpp index f72a8a9733..4635f95429 100644 --- a/src/html/htmlwin.cpp +++ b/src/html/htmlwin.cpp @@ -881,21 +881,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 << wxT('\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; }