diff options
Diffstat (limited to 'vcl/source/window/builder.cxx')
-rw-r--r-- | vcl/source/window/builder.cxx | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx index 2f1fd3df4e7f..9797956cfd50 100644 --- a/vcl/source/window/builder.cxx +++ b/vcl/source/window/builder.cxx @@ -1923,6 +1923,8 @@ void VclBuilder::handleTabChild(vcl::Window *pParent, xmlreader::XmlReader &read int nLevel = 1; stringmap aProperties; + std::vector<vcl::EnumContext::Context> context; + while(true) { xmlreader::Span name; @@ -1952,6 +1954,11 @@ void VclBuilder::handleTabChild(vcl::Window *pParent, xmlreader::XmlReader &read } } } + else if (name.equals("style")) + { + context = handleStyle(reader); + --nLevel; + } else if (name.equals("property")) collectProperty(reader, sID, aProperties); } @@ -1977,6 +1984,11 @@ void VclBuilder::handleTabChild(vcl::Window *pParent, xmlreader::XmlReader &read pTabControl->SetPageText(nPageId, OStringToOUString(aFind->second, RTL_TEXTENCODING_UTF8)); pTabControl->SetPageName(nPageId, sID); + if (context.size() != 0) + { + TabPage* pPage = static_cast<TabPage*>(pTabControl->GetTabPage(nPageId)); + pPage->SetContext(context); + } } else pTabControl->RemovePage(pTabControl->GetCurPageId()); @@ -3032,6 +3044,72 @@ void VclBuilder::applyPackingProperty(vcl::Window *pCurrent, } } +std::vector<vcl::EnumContext::Context> VclBuilder::handleStyle(xmlreader::XmlReader &reader) +{ + std::vector<vcl::EnumContext::Context> aContext; + + xmlreader::Span name; + int nsId; + + int nLevel = 1; + + while(true) + { + xmlreader::XmlReader::Result res = reader.nextItem( + xmlreader::XmlReader::Text::NONE, &name, &nsId); + + if (res == xmlreader::XmlReader::Result::Done) + break; + + if (res == xmlreader::XmlReader::Result::Begin) + { + ++nLevel; + if (name.equals("class")) + { + aContext.push_back(getContext(reader)); + } + } + + if (res == xmlreader::XmlReader::Result::End) + { + --nLevel; + } + + if (!nLevel) + break; + } + + return aContext; +} + +vcl::EnumContext::Context VclBuilder::getContext(xmlreader::XmlReader &reader) +{ + xmlreader::Span name; + int nsId; + + while (reader.nextAttribute(&nsId, &name)) + { + if (name.equals("name")) + { + name = reader.getAttributeValue(false); + OString sKey(name.begin, name.length); + + if (sKey.startsWith("context-")) + { + OString sContext = sKey.copy(sKey.indexOf('-') + 1); + OUString sContext2 = OUString(sContext.getStr(), sContext.getLength(), RTL_TEXTENCODING_UTF8); + return vcl::EnumContext::GetContextEnum(sContext2); + } + else + { + SAL_WARN("vcl.layout", "unknown class: " << sKey.getStr()); + } + } + } + + return vcl::EnumContext::Context::Context_Any; +} + OString VclBuilder::getTranslation(const OString &rID, const OString &rProperty) const { Translations::const_iterator aWidgetFind = m_pParserState->m_aTranslations.find(rID); |