void wxSwitcherDialog::ShowDescription(int i) { wxSwitcherItem& item = m_listCtrl->GetItems().GetItem(i); wxColour colour = m_listCtrl->GetItems().GetBackgroundColour(); if (!colour.Ok()) colour = GetBackgroundColour(); wxString backgroundColourHex = ColourToHexString(colour); wxString html = wxT("<body bgcolor=\"#") + backgroundColourHex + wxT("\"><b>") + item.GetTitle() + wxT("</b>"); if (!item.GetDescription().IsEmpty()) { html += wxT("<p>"); html += item.GetDescription(); } html += wxT("</body>"); m_descriptionCtrl->SetPage(html); }
/// Creates a suitable HTML fragment for a definition wxString wxRichTextStyleListBox::CreateHTML(wxRichTextStyleDefinition* def) const { // TODO: indicate list format for list style types wxString str; bool isCentred = false; wxRichTextAttr attr(def->GetStyleMergedWithBase(GetStyleSheet())); if (attr.HasAlignment() && attr.GetAlignment() == wxTEXT_ALIGNMENT_CENTRE) isCentred = true; if (isCentred) str << wxT("<center>"); str << wxT("<table><tr>"); if (attr.GetLeftIndent() > 0) { wxClientDC dc((wxWindow*) this); str << wxT("<td width=") << wxMin(50, (ConvertTenthsMMToPixels(dc, attr.GetLeftIndent())/2)) << wxT("></td>"); } if (isCentred) str << wxT("<td nowrap align=\"center\">"); else str << wxT("<td nowrap>"); #ifdef __WXMSW__ int size = 3; #else int size = 4; #endif int stdFontSize = 12; int thisFontSize = ((attr.GetFlags() & wxTEXT_ATTR_FONT_SIZE) != 0) ? attr.GetFontSize() : stdFontSize; if (thisFontSize < stdFontSize) size ++; else if (thisFontSize > stdFontSize) size --; str += wxT("<font"); str << wxT(" size=") << size; if (!attr.GetFontFaceName().IsEmpty()) str << wxT(" face=\"") << attr.GetFontFaceName() << wxT("\""); if (attr.GetTextColour().Ok()) str << wxT(" color=\"#") << ColourToHexString(attr.GetTextColour()) << wxT("\""); str << wxT(">"); bool hasBold = false; bool hasItalic = false; bool hasUnderline = false; if (attr.GetFontWeight() == wxBOLD) hasBold = true; if (attr.GetFontStyle() == wxITALIC) hasItalic = true; if (attr.GetFontUnderlined()) hasUnderline = true; if (hasBold) str << wxT("<b>"); if (hasItalic) str << wxT("<i>"); if (hasUnderline) str << wxT("<u>"); str += def->GetName(); if (hasUnderline) str << wxT("</u>"); if (hasItalic) str << wxT("</i>"); if (hasBold) str << wxT("</b>"); if (isCentred) str << wxT("</centre>"); str << wxT("</font>"); str << wxT("</td></tr></table>"); if (isCentred) str << wxT("</center>"); return str; }
/// Creates a suitable HTML fragment for a definition wxString wxRichTextStyleListBox::CreateHTML(wxRichTextStyleDefinition* def) const { // TODO: indicate list format for list style types wxString str; bool isCentred = false; wxRichTextAttr attr(def->GetStyleMergedWithBase(GetStyleSheet())); if (attr.HasAlignment() && attr.GetAlignment() == wxTEXT_ALIGNMENT_CENTRE) isCentred = true; str << wxT("<html><head></head>"); str << wxT("<body"); if (attr.GetBackgroundColour().Ok()) str << wxT(" bgcolor=\"#") << ColourToHexString(attr.GetBackgroundColour()) << wxT("\""); str << wxT(">"); if (isCentred) str << wxT("<center>"); str << wxT("<table"); if (attr.GetBackgroundColour().Ok()) str << wxT(" bgcolor=\"#") << ColourToHexString(attr.GetBackgroundColour()) << wxT("\""); str << wxT("><tr>"); if (attr.GetLeftIndent() > 0) { wxClientDC dc((wxWindow*) this); str << wxT("<td width=") << wxMin(50, (ConvertTenthsMMToPixels(dc, attr.GetLeftIndent())/2)) << wxT("></td>"); } if (isCentred) str << wxT("<td nowrap align=\"center\">"); else str << wxT("<td nowrap>"); #ifdef __WXMSW__ int size = 2; #else int size = 3; #endif // Guess a standard font size int stdFontSize = 0; // First see if we have a default/normal style to base the size on wxString normalTranslated(_("normal")); wxString defaultTranslated(_("default")); size_t i; for (i = 0; i < GetStyleSheet()->GetParagraphStyleCount(); i++) { wxRichTextStyleDefinition* d = GetStyleSheet()->GetParagraphStyle(i); wxString name = d->GetName().Lower(); if (name.Find(wxT("normal")) != wxNOT_FOUND || name.Find(normalTranslated) != wxNOT_FOUND || name.Find(wxT("default")) != wxNOT_FOUND || name.Find(defaultTranslated) != wxNOT_FOUND) { wxRichTextAttr attr2(d->GetStyleMergedWithBase(GetStyleSheet())); if (attr2.HasFontPointSize()) { stdFontSize = attr2.GetFontSize(); break; } } } if (stdFontSize == 0) { // Look at sizes up to 20 points, and see which is the most common wxArrayInt sizes; size_t maxSize = 20; for (i = 0; i <= maxSize; i++) sizes.Add(0); for (i = 0; i < m_styleNames.GetCount(); i++) { wxRichTextStyleDefinition* d = GetStyle(i); if (d) { wxRichTextAttr attr2(d->GetStyleMergedWithBase(GetStyleSheet())); if (attr2.HasFontPointSize()) { if (attr2.GetFontSize() <= (int) maxSize) sizes[attr2.GetFontSize()] ++; } } } int mostCommonSize = 0; for (i = 0; i <= maxSize; i++) { if (sizes[i] > mostCommonSize) mostCommonSize = i; } if (mostCommonSize > 0) stdFontSize = mostCommonSize; } if (stdFontSize == 0) stdFontSize = 12; int thisFontSize = attr.HasFontPointSize() ? attr.GetFontSize() : stdFontSize; if (thisFontSize < stdFontSize) size --; else if (thisFontSize > stdFontSize) size ++; str += wxT("<font"); str << wxT(" size=") << size; if (!attr.GetFontFaceName().IsEmpty()) str << wxT(" face=\"") << attr.GetFontFaceName() << wxT("\""); if (attr.GetTextColour().IsOk() && attr.GetTextColour() != attr.GetBackgroundColour() && !(!attr.HasBackgroundColour() && attr.GetTextColour() == *wxWHITE)) str << wxT(" color=\"#") << ColourToHexString(attr.GetTextColour()) << wxT("\""); if (attr.GetBackgroundColour().Ok()) str << wxT(" bgcolor=\"#") << ColourToHexString(attr.GetBackgroundColour()) << wxT("\""); str << wxT(">"); bool hasBold = false; bool hasItalic = false; bool hasUnderline = false; if (attr.GetFontWeight() == wxFONTWEIGHT_BOLD) hasBold = true; if (attr.GetFontStyle() == wxFONTSTYLE_ITALIC) hasItalic = true; if (attr.GetFontUnderlined()) hasUnderline = true; if (hasBold) str << wxT("<b>"); if (hasItalic) str << wxT("<i>"); if (hasUnderline) str << wxT("<u>"); wxString name(def->GetName()); if (attr.HasTextEffects() && (attr.GetTextEffects() & (wxTEXT_ATTR_EFFECT_CAPITALS|wxTEXT_ATTR_EFFECT_SMALL_CAPITALS))) name = name.Upper(); str += name; if (hasUnderline) str << wxT("</u>"); if (hasItalic) str << wxT("</i>"); if (hasBold) str << wxT("</b>"); if (isCentred) str << wxT("</centre>"); str << wxT("</font>"); str << wxT("</td></tr></table>"); if (isCentred) str << wxT("</center>"); str << wxT("</body></html>"); return str; }