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.
|
they exist in the paragraph style.
|
||||||
- wxRTC: fixed IsPositionVisible to scroll a position into view correctly.
|
- wxRTC: fixed IsPositionVisible to scroll a position into view correctly.
|
||||||
- wxRTC: fixed a problem with paste resetting the content paragraph style.
|
- 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.
|
- Fixed error in generic tree control CalculatePositions.
|
||||||
- Added wxFD_FILE_MUST_EXIST to wxFileSelector function.
|
- Added wxFD_FILE_MUST_EXIST to wxFileSelector function.
|
||||||
- Added wxDataViewCtrl Get/SetValueByRow functions for forward compatibility
|
- Added wxDataViewCtrl Get/SetValueByRow functions for forward compatibility
|
||||||
|
@@ -59,6 +59,10 @@ wxRichTextAttr wxRichTextStyleDefinition::GetStyleMergedWithBase(const wxRichTex
|
|||||||
if (m_baseStyle.IsEmpty())
|
if (m_baseStyle.IsEmpty())
|
||||||
return m_style;
|
return m_style;
|
||||||
|
|
||||||
|
bool isParaStyle = IsKindOf(CLASSINFO(wxRichTextParagraphStyleDefinition));
|
||||||
|
bool isCharStyle = IsKindOf(CLASSINFO(wxRichTextCharacterStyleDefinition));
|
||||||
|
bool isListStyle = IsKindOf(CLASSINFO(wxRichTextListStyleDefinition));
|
||||||
|
|
||||||
// Collect the styles, detecting loops
|
// Collect the styles, detecting loops
|
||||||
wxArrayString styleNames;
|
wxArrayString styleNames;
|
||||||
wxList styles;
|
wxList styles;
|
||||||
@@ -70,7 +74,16 @@ wxRichTextAttr wxRichTextStyleDefinition::GetStyleMergedWithBase(const wxRichTex
|
|||||||
|
|
||||||
wxString baseStyleName = def->GetBaseStyle();
|
wxString baseStyleName = def->GetBaseStyle();
|
||||||
if (!baseStyleName.IsEmpty() && styleNames.Index(baseStyleName) == wxNOT_FOUND)
|
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
|
else
|
||||||
def = NULL;
|
def = NULL;
|
||||||
}
|
}
|
||||||
@@ -479,6 +492,20 @@ bool wxRichTextStyleSheet::operator==(const wxRichTextStyleSheet& WXUNUSED(sheet
|
|||||||
|
|
||||||
|
|
||||||
#if wxUSE_HTML
|
#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.
|
* wxRichTextStyleListBox: a listbox to display styles.
|
||||||
*/
|
*/
|
||||||
@@ -530,7 +557,16 @@ wxRichTextStyleDefinition* wxRichTextStyleListBox::GetStyle(size_t i) const
|
|||||||
if (i >= m_styleNames.GetCount() /* || i < 0 */ )
|
if (i >= m_styleNames.GetCount() /* || i < 0 */ )
|
||||||
return NULL;
|
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
|
/// Updates the list
|
||||||
@@ -548,17 +584,17 @@ void wxRichTextStyleListBox::UpdateStyles()
|
|||||||
if (GetStyleType() == wxRICHTEXT_STYLE_ALL || GetStyleType() == wxRICHTEXT_STYLE_PARAGRAPH)
|
if (GetStyleType() == wxRICHTEXT_STYLE_ALL || GetStyleType() == wxRICHTEXT_STYLE_PARAGRAPH)
|
||||||
{
|
{
|
||||||
for (i = 0; i < GetStyleSheet()->GetParagraphStyleCount(); i++)
|
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)
|
if (GetStyleType() == wxRICHTEXT_STYLE_ALL || GetStyleType() == wxRICHTEXT_STYLE_CHARACTER)
|
||||||
{
|
{
|
||||||
for (i = 0; i < GetStyleSheet()->GetCharacterStyleCount(); i++)
|
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)
|
if (GetStyleType() == wxRICHTEXT_STYLE_ALL || GetStyleType() == wxRICHTEXT_STYLE_LIST)
|
||||||
{
|
{
|
||||||
for (i = 0; i < GetStyleSheet()->GetListStyleCount(); i++)
|
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();
|
m_styleNames.Sort();
|
||||||
@@ -583,7 +619,23 @@ void wxRichTextStyleListBox::UpdateStyles()
|
|||||||
// Get index for style name
|
// Get index for style name
|
||||||
int wxRichTextStyleListBox::GetIndexForStyle(const wxString& name) const
|
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
|
/// Set selection for string
|
||||||
@@ -652,21 +704,18 @@ wxString wxRichTextStyleListBox::CreateHTML(wxRichTextStyleDefinition* def) cons
|
|||||||
wxString normalTranslated(_("normal"));
|
wxString normalTranslated(_("normal"));
|
||||||
wxString defaultTranslated(_("default"));
|
wxString defaultTranslated(_("default"));
|
||||||
size_t i;
|
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 ||
|
if (name.Find(wxT("normal")) != wxNOT_FOUND || name.Find(normalTranslated) != wxNOT_FOUND ||
|
||||||
name.Find(wxT("default")) != wxNOT_FOUND || name.Find(defaultTranslated) != wxNOT_FOUND)
|
name.Find(wxT("default")) != wxNOT_FOUND || name.Find(defaultTranslated) != wxNOT_FOUND)
|
||||||
{
|
{
|
||||||
wxRichTextStyleDefinition* d = GetStyleSheet()->FindStyle(m_styleNames[i]);
|
wxRichTextAttr attr2(d->GetStyleMergedWithBase(GetStyleSheet()));
|
||||||
if (d)
|
if (attr2.HasFontSize())
|
||||||
{
|
{
|
||||||
wxRichTextAttr attr2(d->GetStyleMergedWithBase(GetStyleSheet()));
|
stdFontSize = attr2.GetFontSize();
|
||||||
if (attr2.HasFontSize())
|
break;
|
||||||
{
|
|
||||||
stdFontSize = attr2.GetFontSize();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -680,7 +729,7 @@ wxString wxRichTextStyleListBox::CreateHTML(wxRichTextStyleDefinition* def) cons
|
|||||||
sizes.Add(0);
|
sizes.Add(0);
|
||||||
for (i = 0; i < m_styleNames.GetCount(); i++)
|
for (i = 0; i < m_styleNames.GetCount(); i++)
|
||||||
{
|
{
|
||||||
wxRichTextStyleDefinition* d = GetStyleSheet()->FindStyle(m_styleNames[i]);
|
wxRichTextStyleDefinition* d = GetStyle(i);
|
||||||
if (d)
|
if (d)
|
||||||
{
|
{
|
||||||
wxRichTextAttr attr2(d->GetStyleMergedWithBase(GetStyleSheet()));
|
wxRichTextAttr attr2(d->GetStyleMergedWithBase(GetStyleSheet()));
|
||||||
|
Reference in New Issue
Block a user