Fixed problems caused by duplicated names across different style types.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_8_BRANCH@67222 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -113,6 +113,8 @@ All (GUI):
|
||||
they exist in the paragraph style.
|
||||
- wxRTC: fixed IsPositionVisible to scroll a position into view correctly.
|
||||
- wxRTC: fixed a problem with paste resetting the content paragraph style.
|
||||
- wxRTC: style list box now copes with names duplicated across style types.
|
||||
Also fixed wxRichTextStyleDefinition::GetStyleMergeWithBase similarly.
|
||||
- Fixed error in generic tree control CalculatePositions.
|
||||
- Added wxFD_FILE_MUST_EXIST to wxFileSelector function.
|
||||
- Added wxDataViewCtrl Get/SetValueByRow functions for forward compatibility
|
||||
|
@@ -58,7 +58,11 @@ wxRichTextAttr wxRichTextStyleDefinition::GetStyleMergedWithBase(const wxRichTex
|
||||
{
|
||||
if (m_baseStyle.IsEmpty())
|
||||
return m_style;
|
||||
|
||||
|
||||
bool isParaStyle = IsKindOf(CLASSINFO(wxRichTextParagraphStyleDefinition));
|
||||
bool isCharStyle = IsKindOf(CLASSINFO(wxRichTextCharacterStyleDefinition));
|
||||
bool isListStyle = IsKindOf(CLASSINFO(wxRichTextListStyleDefinition));
|
||||
|
||||
// Collect the styles, detecting loops
|
||||
wxArrayString styleNames;
|
||||
wxList styles;
|
||||
@@ -67,14 +71,23 @@ wxRichTextAttr wxRichTextStyleDefinition::GetStyleMergedWithBase(const wxRichTex
|
||||
{
|
||||
styles.Insert((wxObject*) def);
|
||||
styleNames.Add(def->GetName());
|
||||
|
||||
|
||||
wxString baseStyleName = def->GetBaseStyle();
|
||||
if (!baseStyleName.IsEmpty() && styleNames.Index(baseStyleName) == wxNOT_FOUND)
|
||||
def = sheet->FindStyle(baseStyleName);
|
||||
{
|
||||
if (isParaStyle)
|
||||
def = sheet->FindParagraphStyle(baseStyleName);
|
||||
else if (isCharStyle)
|
||||
def = sheet->FindCharacterStyle(baseStyleName);
|
||||
else if (isListStyle)
|
||||
def = sheet->FindListStyle(baseStyleName);
|
||||
else
|
||||
def = sheet->FindStyle(baseStyleName);
|
||||
}
|
||||
else
|
||||
def = NULL;
|
||||
}
|
||||
|
||||
|
||||
wxRichTextAttr attr;
|
||||
wxList::compatibility_iterator node = styles.GetFirst();
|
||||
while (node)
|
||||
@@ -83,7 +96,7 @@ wxRichTextAttr wxRichTextStyleDefinition::GetStyleMergedWithBase(const wxRichTex
|
||||
attr.Apply(def->GetStyle(), NULL);
|
||||
node = node->GetNext();
|
||||
}
|
||||
|
||||
|
||||
return attr;
|
||||
}
|
||||
|
||||
@@ -479,6 +492,20 @@ bool wxRichTextStyleSheet::operator==(const wxRichTextStyleSheet& WXUNUSED(sheet
|
||||
|
||||
|
||||
#if wxUSE_HTML
|
||||
|
||||
// Functions for dealing with clashing names for different kinds of style.
|
||||
// Returns "P", "C", or "L" (paragraph, character, list) for
|
||||
// style name | type.
|
||||
static wxString wxGetRichTextStyleType(const wxString& style)
|
||||
{
|
||||
return style.AfterLast(wxT('|'));
|
||||
}
|
||||
|
||||
static wxString wxGetRichTextStyle(const wxString& style)
|
||||
{
|
||||
return style.BeforeLast(wxT('|'));
|
||||
}
|
||||
|
||||
/*!
|
||||
* wxRichTextStyleListBox: a listbox to display styles.
|
||||
*/
|
||||
@@ -530,7 +557,16 @@ wxRichTextStyleDefinition* wxRichTextStyleListBox::GetStyle(size_t i) const
|
||||
if (i >= m_styleNames.GetCount() /* || i < 0 */ )
|
||||
return NULL;
|
||||
|
||||
return GetStyleSheet()->FindStyle(m_styleNames[i]);
|
||||
wxString styleType = wxGetRichTextStyleType(m_styleNames[i]);
|
||||
wxString style = wxGetRichTextStyle(m_styleNames[i]);
|
||||
if (styleType == wxT("P"))
|
||||
return GetStyleSheet()->FindParagraphStyle(style);
|
||||
else if (styleType == wxT("C"))
|
||||
return GetStyleSheet()->FindCharacterStyle(style);
|
||||
else if (styleType == wxT("L"))
|
||||
return GetStyleSheet()->FindListStyle(style);
|
||||
else
|
||||
return GetStyleSheet()->FindStyle(style);
|
||||
}
|
||||
|
||||
/// Updates the list
|
||||
@@ -548,17 +584,17 @@ void wxRichTextStyleListBox::UpdateStyles()
|
||||
if (GetStyleType() == wxRICHTEXT_STYLE_ALL || GetStyleType() == wxRICHTEXT_STYLE_PARAGRAPH)
|
||||
{
|
||||
for (i = 0; i < GetStyleSheet()->GetParagraphStyleCount(); i++)
|
||||
m_styleNames.Add(GetStyleSheet()->GetParagraphStyle(i)->GetName());
|
||||
m_styleNames.Add(GetStyleSheet()->GetParagraphStyle(i)->GetName() + wxT("|P"));
|
||||
}
|
||||
if (GetStyleType() == wxRICHTEXT_STYLE_ALL || GetStyleType() == wxRICHTEXT_STYLE_CHARACTER)
|
||||
{
|
||||
for (i = 0; i < GetStyleSheet()->GetCharacterStyleCount(); i++)
|
||||
m_styleNames.Add(GetStyleSheet()->GetCharacterStyle(i)->GetName());
|
||||
m_styleNames.Add(GetStyleSheet()->GetCharacterStyle(i)->GetName() + wxT("|C"));
|
||||
}
|
||||
if (GetStyleType() == wxRICHTEXT_STYLE_ALL || GetStyleType() == wxRICHTEXT_STYLE_LIST)
|
||||
{
|
||||
for (i = 0; i < GetStyleSheet()->GetListStyleCount(); i++)
|
||||
m_styleNames.Add(GetStyleSheet()->GetListStyle(i)->GetName());
|
||||
m_styleNames.Add(GetStyleSheet()->GetListStyle(i)->GetName() + wxT("|L"));
|
||||
}
|
||||
|
||||
m_styleNames.Sort();
|
||||
@@ -583,7 +619,23 @@ void wxRichTextStyleListBox::UpdateStyles()
|
||||
// Get index for style name
|
||||
int wxRichTextStyleListBox::GetIndexForStyle(const wxString& name) const
|
||||
{
|
||||
return m_styleNames.Index(name);
|
||||
wxString s(name);
|
||||
if (GetStyleType() == wxRICHTEXT_STYLE_PARAGRAPH)
|
||||
s += wxT("|P");
|
||||
else if (GetStyleType() == wxRICHTEXT_STYLE_CHARACTER)
|
||||
s += wxT("|C");
|
||||
else if (GetStyleType() == wxRICHTEXT_STYLE_LIST)
|
||||
s += wxT("|L");
|
||||
else
|
||||
{
|
||||
if (m_styleNames.Index(s + wxT("|P")) != wxNOT_FOUND)
|
||||
s += wxT("|P");
|
||||
else if (m_styleNames.Index(s + wxT("|C")) != wxNOT_FOUND)
|
||||
s += wxT("|C");
|
||||
else if (m_styleNames.Index(s + wxT("|L")) != wxNOT_FOUND)
|
||||
s += wxT("|L");
|
||||
}
|
||||
return m_styleNames.Index(s);
|
||||
}
|
||||
|
||||
/// Set selection for string
|
||||
@@ -652,21 +704,18 @@ wxString wxRichTextStyleListBox::CreateHTML(wxRichTextStyleDefinition* def) cons
|
||||
wxString normalTranslated(_("normal"));
|
||||
wxString defaultTranslated(_("default"));
|
||||
size_t i;
|
||||
for (i = 0; i < m_styleNames.GetCount(); i++)
|
||||
for (i = 0; i < GetStyleSheet()->GetParagraphStyleCount(); i++)
|
||||
{
|
||||
wxString name = m_styleNames[i].Lower();
|
||||
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)
|
||||
{
|
||||
wxRichTextStyleDefinition* d = GetStyleSheet()->FindStyle(m_styleNames[i]);
|
||||
if (d)
|
||||
wxRichTextAttr attr2(d->GetStyleMergedWithBase(GetStyleSheet()));
|
||||
if (attr2.HasFontSize())
|
||||
{
|
||||
wxRichTextAttr attr2(d->GetStyleMergedWithBase(GetStyleSheet()));
|
||||
if (attr2.HasFontSize())
|
||||
{
|
||||
stdFontSize = attr2.GetFontSize();
|
||||
break;
|
||||
}
|
||||
stdFontSize = attr2.GetFontSize();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -680,7 +729,7 @@ wxString wxRichTextStyleListBox::CreateHTML(wxRichTextStyleDefinition* def) cons
|
||||
sizes.Add(0);
|
||||
for (i = 0; i < m_styleNames.GetCount(); i++)
|
||||
{
|
||||
wxRichTextStyleDefinition* d = GetStyleSheet()->FindStyle(m_styleNames[i]);
|
||||
wxRichTextStyleDefinition* d = GetStyle(i);
|
||||
if (d)
|
||||
{
|
||||
wxRichTextAttr attr2(d->GetStyleMergedWithBase(GetStyleSheet()));
|
||||
|
Reference in New Issue
Block a user