]> git.saurik.com Git - wxWidgets.git/blobdiff - src/richtext/richtextbuffer.cpp
generate size event when the dialog is shown for consistency with frames and other...
[wxWidgets.git] / src / richtext / richtextbuffer.cpp
index 0c2e22642a6d187638f19e07a237ac5edc943dc3..aae4eaa57937d9133e1120aaff521cba41693874 100644 (file)
@@ -3206,7 +3206,7 @@ bool wxRichTextParagraph::Draw(wxDC& dc, const wxRichTextRange& range, const wxR
             {
                 wxRichTextObject* child = node2->GetData();
 
-                if (!child->GetRange().IsOutside(lineRange) && !lineRange.IsOutside(range))
+                if (child->GetRange().GetLength() > 0 && !child->GetRange().IsOutside(lineRange) && !lineRange.IsOutside(range))
                 {
                     // Draw this part of the line at the correct position
                     wxRichTextRange objectRange(child->GetRange());
@@ -3251,6 +3251,9 @@ static int wxRichTextGetRangeWidth(const wxRichTextParagraph& para, const wxRich
 {
     wxASSERT(partialExtents.GetCount() >= (size_t) range.GetLength());
 
+    if (partialExtents.GetCount() < (size_t) range.GetLength())
+        return 0;
+
     int leftMostPos = 0;
     if (range.GetStart() - para.GetRange().GetStart() > 0)
         leftMostPos = partialExtents[range.GetStart() - para.GetRange().GetStart() - 1];
@@ -3353,6 +3356,12 @@ bool wxRichTextParagraph::Layout(wxDC& dc, const wxRect& rect, int style)
     {
         wxRichTextObject* child = node->GetData();
 
+        if (child->GetRange().GetLength() == 0)
+        {
+            node = node->GetNext();
+            continue;
+        }
+
         // If this is e.g. a composite text box, it will need to be laid out itself.
         // But if just a text fragment or image, for example, this will
         // do nothing. NB: won't we need to set the position after layout?
@@ -3542,7 +3551,7 @@ bool wxRichTextParagraph::Layout(wxDC& dc, const wxRect& rect, int style)
         {
             wxRichTextObject* child = node2->GetData();
 
-            if (!child->GetRange().IsOutside(lineRange))
+            if (child->GetRange().GetLength() > 0 && !child->GetRange().IsOutside(lineRange))
             {
                 wxRichTextRange rangeToUse = lineRange;
                 rangeToUse.LimitTo(child->GetRange());
@@ -5215,6 +5224,15 @@ bool wxRichTextBuffer::InsertParagraphsWithUndo(long pos, const wxRichTextParagr
 
     action->GetNewParagraphs() = paragraphs;
 
+    if (p && !p->IsDefault())
+    {
+        for (wxRichTextObjectList::compatibility_iterator node = action->GetNewParagraphs().GetChildren().GetFirst(); node; node = node->GetNext())
+        {
+            wxRichTextObject* child = node->GetData();
+            child->SetAttributes(*p);
+        }
+    }
+
     action->SetPosition(pos);
 
     wxRichTextRange range = wxRichTextRange(pos, pos + paragraphs.GetRange().GetEnd() - 1);
@@ -5835,7 +5853,8 @@ bool wxRichTextBuffer::RemoveHandler(const wxString& name)
 }
 
 /// Finds a handler by filename or, if supplied, type
-wxRichTextFileHandler *wxRichTextBuffer::FindHandlerFilenameOrType(const wxString& filename, int imageType)
+wxRichTextFileHandler *wxRichTextBuffer::FindHandlerFilenameOrType(const wxString& filename,
+                                                                   wxRichTextFileType imageType)
 {
     if (imageType != wxRICHTEXT_TYPE_ANY)
         return FindHandler(imageType);
@@ -5865,7 +5884,7 @@ wxRichTextFileHandler* wxRichTextBuffer::FindHandler(const wxString& name)
 }
 
 /// Finds a handler by extension and type
-wxRichTextFileHandler* wxRichTextBuffer::FindHandler(const wxString& extension, int type)
+wxRichTextFileHandler* wxRichTextBuffer::FindHandler(const wxString& extension, wxRichTextFileType type)
 {
     wxList::compatibility_iterator node = sm_handlers.GetFirst();
     while (node)
@@ -5880,7 +5899,7 @@ wxRichTextFileHandler* wxRichTextBuffer::FindHandler(const wxString& extension,
 }
 
 /// Finds a handler by type
-wxRichTextFileHandler* wxRichTextBuffer::FindHandler(int type)
+wxRichTextFileHandler* wxRichTextBuffer::FindHandler(wxRichTextFileType type)
 {
     wxList::compatibility_iterator node = sm_handlers.GetFirst();
     while (node)
@@ -5958,7 +5977,7 @@ wxString wxRichTextBuffer::GetExtWildcard(bool combine, bool save, wxArrayInt* t
 }
 
 /// Load a file
-bool wxRichTextBuffer::LoadFile(const wxString& filename, int type)
+bool wxRichTextBuffer::LoadFile(const wxString& filename, wxRichTextFileType type)
 {
     wxRichTextFileHandler* handler = FindHandlerFilenameOrType(filename, type);
     if (handler)
@@ -5974,7 +5993,7 @@ bool wxRichTextBuffer::LoadFile(const wxString& filename, int type)
 }
 
 /// Save a file
-bool wxRichTextBuffer::SaveFile(const wxString& filename, int type)
+bool wxRichTextBuffer::SaveFile(const wxString& filename, wxRichTextFileType type)
 {
     wxRichTextFileHandler* handler = FindHandlerFilenameOrType(filename, type);
     if (handler)
@@ -5987,7 +6006,7 @@ bool wxRichTextBuffer::SaveFile(const wxString& filename, int type)
 }
 
 /// Load from a stream
-bool wxRichTextBuffer::LoadFile(wxInputStream& stream, int type)
+bool wxRichTextBuffer::LoadFile(wxInputStream& stream, wxRichTextFileType type)
 {
     wxRichTextFileHandler* handler = FindHandler(type);
     if (handler)
@@ -6003,7 +6022,7 @@ bool wxRichTextBuffer::LoadFile(wxInputStream& stream, int type)
 }
 
 /// Save to a stream
-bool wxRichTextBuffer::SaveFile(wxOutputStream& stream, int type)
+bool wxRichTextBuffer::SaveFile(wxOutputStream& stream, wxRichTextFileType type)
 {
     wxRichTextFileHandler* handler = FindHandler(type);
     if (handler)
@@ -6077,7 +6096,7 @@ bool wxRichTextBuffer::PasteFromClipboard(long position)
                 wxRichTextBuffer* richTextBuffer = data.GetRichTextBuffer();
                 if (richTextBuffer)
                 {
-                    InsertParagraphsWithUndo(position+1, *richTextBuffer, GetRichTextCtrl(), wxRICHTEXT_INSERT_WITH_PREVIOUS_PARAGRAPH_STYLE);
+                    InsertParagraphsWithUndo(position+1, *richTextBuffer, GetRichTextCtrl(), 0);
                     if (GetRichTextCtrl())
                         GetRichTextCtrl()->ShowPosition(position + richTextBuffer->GetRange().GetEnd());
                     delete richTextBuffer;
@@ -6101,7 +6120,7 @@ bool wxRichTextBuffer::PasteFromClipboard(long position)
 #else
                 wxString text2 = text;
 #endif
-                InsertTextWithUndo(position+1, text2, GetRichTextCtrl());
+                InsertTextWithUndo(position+1, text2, GetRichTextCtrl(), wxRICHTEXT_INSERT_WITH_PREVIOUS_PARAGRAPH_STYLE);
 
                 if (GetRichTextCtrl())
                     GetRichTextCtrl()->ShowPosition(position + text2.Length());
@@ -6913,6 +6932,9 @@ void wxRichTextAction::UpdateAppearance(long caretPosition, bool sendUpdateEvent
 #endif
                 m_ctrl->Refresh(false);
 
+#if wxRICHTEXT_USE_OWN_CARET
+            m_ctrl->PositionCaret();
+#endif
             if (sendUpdateEvent)
                 wxTextCtrl::SendTextUpdatedEvent(m_ctrl);
         }
@@ -7062,6 +7084,9 @@ bool wxRichTextImage::GetRangeSize(const wxRichTextRange& range, wxSize& size, i
     if (!range.IsWithin(GetRange()))
         return false;
 
+    if (!m_image.Ok())
+        ((wxRichTextImage*) this)->LoadFromBlock();
+
     if (partialExtents)
     {
         if (m_image.Ok())
@@ -7323,7 +7348,7 @@ void wxRichTextImageBlock::Init()
 {
     m_data = NULL;
     m_dataSize = 0;
-    m_imageType = -1;
+    m_imageType = wxBITMAP_TYPE_INVALID;
 }
 
 void wxRichTextImageBlock::Clear()
@@ -7331,7 +7356,7 @@ void wxRichTextImageBlock::Clear()
     delete[] m_data;
     m_data = NULL;
     m_dataSize = 0;
-    m_imageType = -1;
+    m_imageType = wxBITMAP_TYPE_INVALID;
 }
 
 
@@ -7341,7 +7366,8 @@ void wxRichTextImageBlock::Clear()
 // If it's not a JPEG we can make use of 'image', already scaled, so we don't have to
 // load the image a 2nd time.
 
-bool wxRichTextImageBlock::MakeImageBlock(const wxString& filename, int imageType, wxImage& image, bool convertToJPEG)
+bool wxRichTextImageBlock::MakeImageBlock(const wxString& filename, wxBitmapType imageType,
+                                          wxImage& image, bool convertToJPEG)
 {
     m_imageType = imageType;
 
@@ -7385,7 +7411,7 @@ bool wxRichTextImageBlock::MakeImageBlock(const wxString& filename, int imageTyp
 
 // Make an image block from the wxImage in the given
 // format.
-bool wxRichTextImageBlock::MakeImageBlock(wxImage& image, int imageType, int quality)
+bool wxRichTextImageBlock::MakeImageBlock(wxImage& image, wxBitmapType imageType, int quality)
 {
     m_imageType = imageType;
     image.SetOption(wxT("quality"), quality);
@@ -7513,7 +7539,7 @@ bool wxRichTextImageBlock::WriteHex(wxOutputStream& stream)
 }
 
 // Read data in hex from a stream
-bool wxRichTextImageBlock::ReadHex(wxInputStream& stream, int length, int imageType)
+bool wxRichTextImageBlock::ReadHex(wxInputStream& stream, int length, wxBitmapType imageType)
 {
     int dataSize = length/2;