]> git.saurik.com Git - wxWidgets.git/blobdiff - src/html/htmlwin.cpp
remove MSVC warnings about DLL-exported class inheriting from non DLL-exported one...
[wxWidgets.git] / src / html / htmlwin.cpp
index 3ef8f9a1f9e6493f1d89623aad7d0e02d5e367db..56c6f5d7b7f5becfd1a6557b6567461ec4771489 100644 (file)
@@ -39,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
@@ -71,7 +71,7 @@ private:
     int m_pos,
         m_orient;
 
-    DECLARE_NO_COPY_CLASS(wxHtmlWinAutoScrollTimer)
+    wxDECLARE_NO_COPY_CLASS(wxHtmlWinAutoScrollTimer);
 };
 
 void wxHtmlWinAutoScrollTimer::Notify()
@@ -890,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;
     }