X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/19d89516ddcaefc55172cb8b5eaa1306eae599f4..6ab6a43579f5e42d4905beef34893c3e7f5253ab:/samples/richedit/wxllist.cpp diff --git a/samples/richedit/wxllist.cpp b/samples/richedit/wxllist.cpp index 94e81f7d7b..3a8e75082e 100644 --- a/samples/richedit/wxllist.cpp +++ b/samples/richedit/wxllist.cpp @@ -448,6 +448,12 @@ wxLayoutObjectIcon::Copy(void) wxLayoutObjectIcon::wxLayoutObjectIcon(wxBitmap *icon) { m_Icon = icon; + if(! m_Icon) +#if wxICON_IS_BITMAP + m_Icon = new wxIcon; +#else + m_Icon = new wxBitmap; +#endif } void @@ -524,12 +530,19 @@ wxLayoutObjectCmd::wxLayoutObjectCmd(int family, int size, int style, int m_StyleInfo = new wxLayoutStyleInfo(family, size,style,weight,underline,fg,bg); } +wxLayoutObjectCmd::wxLayoutObjectCmd(const wxLayoutStyleInfo &si) + +{ + m_StyleInfo = new wxLayoutStyleInfo; + *m_StyleInfo = si; +} + wxLayoutObject * wxLayoutObjectCmd::Copy(void) { wxLayoutObjectCmd *obj = new wxLayoutObjectCmd( - m_StyleInfo->size, m_StyleInfo->family, + m_StyleInfo->size, m_StyleInfo->style, m_StyleInfo->weight, m_StyleInfo->underline, @@ -545,8 +558,8 @@ void wxLayoutObjectCmd::Write(wxString &ostr) { ostr << WXLO_TYPE_CMD << '\n' - << m_StyleInfo->size << '\n' << m_StyleInfo->family << '\n' + << m_StyleInfo->size << '\n' << m_StyleInfo->style << '\n' << m_StyleInfo->weight << '\n' << m_StyleInfo->underline << '\n' @@ -573,10 +586,10 @@ wxLayoutObjectCmd::Read(wxString &istr) wxString tmp; ReadString(tmp, istr); - sscanf(tmp.c_str(),"%d", &obj->m_StyleInfo->size); - ReadString(tmp, istr); sscanf(tmp.c_str(),"%d", &obj->m_StyleInfo->family); ReadString(tmp, istr); + sscanf(tmp.c_str(),"%d", &obj->m_StyleInfo->size); + ReadString(tmp, istr); sscanf(tmp.c_str(),"%d", &obj->m_StyleInfo->style); ReadString(tmp, istr); sscanf(tmp.c_str(),"%d", &obj->m_StyleInfo->weight); @@ -1568,6 +1581,26 @@ wxLayoutList::InternalClear(void) m_CursorStyleInfo = m_DefaultStyleInfo; } +void +wxLayoutList::Read(wxString &istr) +{ + /* In order to handle input of formatted string "nicely", we need + to restore our current font settings after the string. So first + of all, we create a StyleInfo structure with our current + settings. */ + wxLayoutStyleInfo current_si = GetStyleInfo(); + + while(istr.Length()) + { + wxLayoutObject *obj = wxLayoutObject::Read(istr); + if(obj) + Insert(obj); + } + /* Now we use the current_si to restore our last font settings: */ + Insert(new wxLayoutObjectCmd(current_si)); +} + + void wxLayoutList::SetFont(int family, int size, int style, int weight, int underline, wxColour *fg, @@ -2352,15 +2385,10 @@ wxLayoutList::Draw(wxDC &dc, } InvalidateUpdateRect(); -#ifdef DEBUG - if ( m_Selection.m_valid ) - { - WXLO_DEBUG(("Selection is %s : %ld,%ld/%ld,%ld", - m_Selection.m_valid ? "valid" : "invalid", - m_Selection.m_CursorA.x, m_Selection.m_CursorA.y, - m_Selection.m_CursorB.x, m_Selection.m_CursorB.y)); - } -#endif + WXLO_DEBUG(("Selection is %s : l%d,%ld/%ld,%ld", + m_Selection.m_valid ? "valid" : "invalid", + m_Selection.m_CursorA.x, m_Selection.m_CursorA.y, + m_Selection.m_CursorB.x, m_Selection.m_CursorB.y)); } wxLayoutObject * @@ -2860,7 +2888,6 @@ wxLayoutList::GetSelection(wxLayoutDataObject *wxlo, bool invalidate) exp->content.object->Write(string); delete exp; } - wxlo->SetLayoutData(string); } return llist; @@ -2885,11 +2912,13 @@ wxLayoutList::ApplyStyle(wxLayoutStyleInfo const &si, wxDC &dc) if(si.m_fg_valid) { m_CurrentStyleInfo.m_fg = si.m_fg; + m_CurrentStyleInfo.m_fg_valid = true; dc.SetTextForeground(m_CurrentStyleInfo.m_fg); } if(si.m_bg_valid) { m_CurrentStyleInfo.m_bg = si.m_bg; + m_CurrentStyleInfo.m_bg_valid = true; dc.SetTextBackground(m_CurrentStyleInfo.m_bg); } }