diff options
author | Caolán McNamara <caolanm@redhat.com> | 2012-12-14 14:25:29 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2012-12-14 15:43:03 +0000 |
commit | c60ef32a644a707bf7d8a1f0e8408771c48b0c46 (patch) | |
tree | c9cfeff8be7533ffd6ce94e82f6503d226c821dd /vcl | |
parent | de5f128cb394baea1e4e67552b8c30709c596334 (diff) |
add support for loading comboboxtext item strings from .ui
Change-Id: Ic7a43fceb455a119d5b5b17ae79357d92d9ccb3d
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/inc/vcl/builder.hxx | 7 | ||||
-rw-r--r-- | vcl/source/control/tabctrl.cxx | 3 | ||||
-rw-r--r-- | vcl/source/window/builder.cxx | 89 |
3 files changed, 91 insertions, 8 deletions
diff --git a/vcl/inc/vcl/builder.hxx b/vcl/inc/vcl/builder.hxx index e34da3aefcc8..3273f17b2d80 100644 --- a/vcl/inc/vcl/builder.hxx +++ b/vcl/inc/vcl/builder.hxx @@ -204,9 +204,11 @@ public: private: Window *insertObject(Window *pParent, const OString &rClass, const OString &rID, - stringmap &rProps, stringmap &rPangoAttributes); + stringmap &rProps, stringmap &rPangoAttributes, std::vector<OString> &rItems); + + Window *makeObject(Window *pParent, const OString &rClass, const OString &rID, + stringmap &rVec, const std::vector<OString> &rItems); - Window *makeObject(Window *pParent, const OString &rClass, const OString &rID, stringmap &rVec); bool extractGroup(const OString &id, stringmap &rVec); bool extractModel(const OString &id, stringmap &rVec); bool extractBuffer(const OString &id, stringmap &rVec); @@ -236,6 +238,7 @@ private: void handleTextBuffer(const OString &rID, stringmap &rProperties); void handleTabChild(Window *pParent, xmlreader::XmlReader &reader); void handleMenu(xmlreader::XmlReader &reader, const OString &rID); + std::vector<OString> handleItems(xmlreader::XmlReader &reader, const OString &rID); PackingData get_window_packing_data(const Window *pWindow) const; void set_window_packing_position(const Window *pWindow, sal_Int32 nPosition); diff --git a/vcl/source/control/tabctrl.cxx b/vcl/source/control/tabctrl.cxx index 7efd292d3fc9..44bb42438886 100644 --- a/vcl/source/control/tabctrl.cxx +++ b/vcl/source/control/tabctrl.cxx @@ -1938,7 +1938,8 @@ void TabControl::SetTabPage( sal_uInt16 nPageId, TabPage* pTabPage ) { if ( pTabPage ) { - DBG_ASSERT( !pTabPage->IsVisible(), "TabControl::SetTabPage() - Page is visible" ); + DBG_ASSERT( !pTabPage->IsVisible() || pTabPage->isLayoutEnabled(), + "TabControl::SetTabPage() - Non-Layout Enabled Page is visible" ); if ( IsDefaultSize() ) SetTabPageSizePixel( pTabPage->GetSizePixel() ); diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx index 6f3954835e4b..a328bb30ec36 100644 --- a/vcl/source/window/builder.cxx +++ b/vcl/source/window/builder.cxx @@ -682,7 +682,8 @@ bool VclBuilder::extractImage(const OString &id, stringmap &rMap) extern "C" { static void SAL_CALL thisModule() {} } #endif -Window *VclBuilder::makeObject(Window *pParent, const OString &name, const OString &id, stringmap &rMap) +Window *VclBuilder::makeObject(Window *pParent, const OString &name, const OString &id, + stringmap &rMap, const std::vector<OString> &rItems) { bool bIsPlaceHolder = name.isEmpty(); bool bVertical = false; @@ -843,12 +844,28 @@ Window *VclBuilder::makeObject(Window *pParent, const OString &name, const OStri { ComboBox* pComboBox = new ComboBox(pParent, WB_LEFT|WB_DROPDOWN|WB_VCENTER|WB_3DLOOK); pComboBox->EnableAutoSize(true); + if (!rItems.empty()) + { + sal_uInt16 nActiveId = extractActive(rMap); + for (std::vector<OString>::const_iterator aI = rItems.begin(), aEnd = rItems.end(); aI != aEnd; ++aI) + pComboBox->InsertEntry(OStringToOUString(*aI, RTL_TEXTENCODING_UTF8)); + if (nActiveId < rItems.size()) + pComboBox->SelectEntryPos(nActiveId); + } pWindow = pComboBox; } else { ListBox *pListBox = new ListBox(pParent, WB_LEFT|WB_DROPDOWN|WB_VCENTER|WB_3DLOOK); pListBox->EnableAutoSize(true); + if (!rItems.empty()) + { + sal_uInt16 nActiveId = extractActive(rMap); + for (std::vector<OString>::const_iterator aI = rItems.begin(), aEnd = rItems.end(); aI != aEnd; ++aI) + pListBox->InsertEntry(OStringToOUString(*aI, RTL_TEXTENCODING_UTF8)); + if (nActiveId < rItems.size()) + pListBox->SelectEntryPos(nActiveId); + } pWindow = pListBox; } } @@ -994,7 +1011,7 @@ namespace } Window *VclBuilder::insertObject(Window *pParent, const OString &rClass, - const OString &rID, stringmap &rProps, stringmap &rPango) + const OString &rID, stringmap &rProps, stringmap &rPango, std::vector<OString> &rItems) { Window *pCurrentChild = NULL; @@ -1024,7 +1041,7 @@ Window *VclBuilder::insertObject(Window *pParent, const OString &rClass, //been seen yet, then make unattached widgets parent-less toplevels if (pParent == m_pParent && m_bToplevelHasDeferredInit) pParent = NULL; - pCurrentChild = makeObject(pParent, rClass, rID, rProps); + pCurrentChild = makeObject(pParent, rClass, rID, rProps, rItems); } if (pCurrentChild) @@ -1046,6 +1063,7 @@ Window *VclBuilder::insertObject(Window *pParent, const OString &rClass, rProps.clear(); rPango.clear(); + rItems.clear(); if (!pCurrentChild) pCurrentChild = m_aChildren.empty() ? pParent : m_aChildren.back().m_pWindow; @@ -1402,6 +1420,64 @@ void VclBuilder::handleListStore(xmlreader::XmlReader &reader, const OString &rI } } +std::vector<OString> VclBuilder::handleItems(xmlreader::XmlReader &reader, const OString &rID) +{ + int nLevel = 1; + + std::vector<OString> aItems; + sal_Int32 nItemIndex = 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) + { + ++nLevel; + if (name.equals(RTL_CONSTASCII_STRINGPARAM("item"))) + { + bool bTranslated = false; + OString sValue; + + while (reader.nextAttribute(&nsId, &name)) + { + if (name.equals(RTL_CONSTASCII_STRINGPARAM("translatable")) && reader.getAttributeValue(false).equals(RTL_CONSTASCII_STRINGPARAM("yes"))) + { + sValue = getTranslation(rID, OString::valueOf(nItemIndex)); + bTranslated = !sValue.isEmpty(); + } + } + + reader.nextItem( + xmlreader::XmlReader::TEXT_RAW, &name, &nsId); + + if (!bTranslated) + sValue = OString(name.begin, name.length); + + aItems.push_back(sValue); + ++nItemIndex; + } + } + + if (res == xmlreader::XmlReader::RESULT_END) + { + --nLevel; + } + + if (!nLevel) + break; + } + + return aItems; +} + void VclBuilder::handleMenu(xmlreader::XmlReader &reader, const OString &rID) { PopupMenu *pCurrentMenu = new PopupMenu; @@ -1682,6 +1758,7 @@ Window* VclBuilder::handleObject(Window *pParent, xmlreader::XmlReader &reader) int nLevel = 1; stringmap aProperties, aPangoAttributes; + std::vector<OString> aItems; if (!sCustomProperty.isEmpty()) aProperties[OString("customproperty")] = sCustomProperty; @@ -1702,10 +1779,12 @@ Window* VclBuilder::handleObject(Window *pParent, xmlreader::XmlReader &reader) if (!pCurrentChild) { pCurrentChild = insertObject(pParent, sClass, sID, - aProperties, aPangoAttributes); + aProperties, aPangoAttributes, aItems); } handleChild(pCurrentChild, reader); } + else if (name.equals(RTL_CONSTASCII_STRINGPARAM("items"))) + aItems = handleItems(reader, sID); else { ++nLevel; @@ -1737,7 +1816,7 @@ Window* VclBuilder::handleObject(Window *pParent, xmlreader::XmlReader &reader) } if (!pCurrentChild) - pCurrentChild = insertObject(pParent, sClass, sID, aProperties, aPangoAttributes); + pCurrentChild = insertObject(pParent, sClass, sID, aProperties, aPangoAttributes, aItems); return pCurrentChild; } |