diff options
-rw-r--r-- | solenv/bin/uilangfilter.xslt | 6 | ||||
-rw-r--r-- | vcl/inc/vcl/builder.hxx | 4 | ||||
-rw-r--r-- | vcl/source/window/builder.cxx | 77 |
3 files changed, 72 insertions, 15 deletions
diff --git a/solenv/bin/uilangfilter.xslt b/solenv/bin/uilangfilter.xslt index a202b0e96637..42d066faee63 100644 --- a/solenv/bin/uilangfilter.xslt +++ b/solenv/bin/uilangfilter.xslt @@ -14,7 +14,7 @@ <xsl:template match="/"> <l><xsl:text> </xsl:text> <xsl:apply-templates select="//*[*[not(self::col)]/@translatable='yes']" /> - <xsl:apply-templates select="interface/object[data/row/col[@translatable='yes']]" /> + <xsl:apply-templates select="interface/object[data/row/col[@id='0'][@translatable='yes']]" /> </l> </xsl:template> @@ -25,10 +25,10 @@ </t><xsl:text> </xsl:text> </xsl:template> -<xsl:template match="col"> +<xsl:template match="col[@id='0']"> <xsl:text> </xsl:text> <xsl:variable name="groupid" select="../../../@id"/> - <t r="stringlist" g="{str:tokenize($groupid,':')[1]}" l="{count(preceding::col[../../../@id=$groupid])}"> + <t r="stringlist" g="{str:tokenize($groupid,':')[1]}" l="{count(preceding::col[@id='0'][../../../@id=$groupid])}"> <xsl:copy-of select="text()" /> </t><xsl:text> </xsl:text> </xsl:template> diff --git a/vcl/inc/vcl/builder.hxx b/vcl/inc/vcl/builder.hxx index 0f6f2282c2c5..ae0bc7fb7e51 100644 --- a/vcl/inc/vcl/builder.hxx +++ b/vcl/inc/vcl/builder.hxx @@ -62,7 +62,8 @@ private: struct ListStore { - std::vector<rtl::OString> m_aEntries; + typedef std::vector<rtl::OString> row; + std::vector<row> m_aEntries; }; struct ModelAndId @@ -189,6 +190,7 @@ private: void collectProperty(xmlreader::XmlReader &reader, const rtl::OString &rID, stringmap &rVec); void handleListStore(xmlreader::XmlReader &reader, const rtl::OString &rID); + void handleRow(xmlreader::XmlReader &reader, const rtl::OString &rID, sal_Int32 nRowIndex); void handleAdjustment(const rtl::OString &rID, stringmap &rProperties); void handleTabChild(Window *pParent, xmlreader::XmlReader &reader); diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx index 49373ee4f39f..50e6b94eb62b 100644 --- a/vcl/source/window/builder.cxx +++ b/vcl/source/window/builder.cxx @@ -536,7 +536,10 @@ Window *VclBuilder::insertObject(Window *pParent, const rtl::OString &rClass, co if (pCurrentChild->IsDialog()) pCurrentChild->SetStyle(pCurrentChild->GetStyle() | WB_SIZEMOVE | WB_3DLOOK); if (pCurrentChild->GetHelpId().isEmpty()) + { pCurrentChild->SetHelpId(m_sHelpRoot + m_sID); + fprintf(stderr, "for toplevel dialog %p %s, set helpid %s\n", this, rID.getStr(), pCurrentChild->GetHelpId().getStr()); + } } else { @@ -782,12 +785,13 @@ void VclBuilder::handleAdjustment(const rtl::OString &rID, stringmap &rPropertie m_pParserState->m_aAdjustments.push_back(AdjustmentAndId(rID, rProperties)); } -void VclBuilder::handleListStore(xmlreader::XmlReader &reader, const rtl::OString &rID) +void VclBuilder::handleRow(xmlreader::XmlReader &reader, const rtl::OString &rID, sal_Int32 nRowIndex) { - m_pParserState->m_aModels.push_back(ModelAndId(rID, new ListStore)); - int nLevel = 1; - sal_Int32 nIndex = 0; + + fprintf(stderr, "handleRow for %s\n", rID.getStr()); + + ListStore::row aRow; while(1) { @@ -807,12 +811,18 @@ void VclBuilder::handleListStore(xmlreader::XmlReader &reader, const rtl::OStrin { bool bTranslated = false; rtl::OString sProperty, sValue; + sal_uInt32 nId = 0; while (reader.nextAttribute(&nsId, &name)) { - if (name.equals(RTL_CONSTASCII_STRINGPARAM("translatable")) && reader.getAttributeValue(false).equals(RTL_CONSTASCII_STRINGPARAM("yes"))) + if (name.equals(RTL_CONSTASCII_STRINGPARAM("id"))) + { + name = reader.getAttributeValue(false); + nId = rtl::OString(name.begin, name.length).toInt32(); + } + else if (nId == 0 && name.equals(RTL_CONSTASCII_STRINGPARAM("translatable")) && reader.getAttributeValue(false).equals(RTL_CONSTASCII_STRINGPARAM("yes"))) { - sValue = getTranslation(rID, rtl::OString::valueOf(nIndex)); + sValue = getTranslation(rID, rtl::OString::valueOf(nRowIndex)); bTranslated = !sValue.isEmpty(); } } @@ -823,9 +833,9 @@ void VclBuilder::handleListStore(xmlreader::XmlReader &reader, const rtl::OStrin if (!bTranslated) sValue = rtl::OString(name.begin, name.length); - m_pParserState->m_aModels.back().m_pModel->m_aEntries.push_back(sValue); - - ++nIndex; + if (aRow.size() < nId+1) + aRow.resize(nId+1); + aRow[nId] = sValue; } } @@ -837,6 +847,45 @@ void VclBuilder::handleListStore(xmlreader::XmlReader &reader, const rtl::OStrin if (!nLevel) break; } + + if (!aRow.empty()) + m_pParserState->m_aModels.back().m_pModel->m_aEntries.push_back(aRow); +} + +void VclBuilder::handleListStore(xmlreader::XmlReader &reader, const rtl::OString &rID) +{ + m_pParserState->m_aModels.push_back(ModelAndId(rID, new ListStore)); + + int nLevel = 1; + sal_Int32 nRowIndex = 0; + + while(1) + { + xmlreader::Span name; + int nsId; + + 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) + { + if (name.equals(RTL_CONSTASCII_STRINGPARAM("row"))) + handleRow(reader, rID, nRowIndex++); + else + ++nLevel; + } + + if (res == xmlreader::XmlReader::RESULT_END) + { + --nLevel; + } + + if (!nLevel) + break; + } } Window* VclBuilder::handleObject(Window *pParent, xmlreader::XmlReader &reader) @@ -1188,10 +1237,16 @@ bool VclBuilder::replace(rtl::OString sID, Window &rReplacement) void VclBuilder::mungemodel(ListBox &rTarget, ListStore &rStore) { - for (std::vector<rtl::OString>::iterator aI = rStore.m_aEntries.begin(), aEnd = rStore.m_aEntries.end(); + for (std::vector<ListStore::row>::iterator aI = rStore.m_aEntries.begin(), aEnd = rStore.m_aEntries.end(); aI != aEnd; ++aI) { - rTarget.InsertEntry(rtl::OStringToOUString(*aI, RTL_TEXTENCODING_UTF8)); + const ListStore::row &rRow = *aI; + sal_uInt16 nEntry = rTarget.InsertEntry(rtl::OStringToOUString(rRow[0], RTL_TEXTENCODING_UTF8)); + if (rRow.size() > 1) + { + sal_IntPtr nValue = rRow[1].toInt32(); + rTarget.SetEntryData(nEntry, (void*)nValue); + } } if (!rStore.m_aEntries.empty()) rTarget.SelectEntryPos(0); |