[Libreoffice-commits] core.git: include/vcl vcl/source

Caolán McNamara caolanm at redhat.com
Fri Jun 8 19:34:35 UTC 2018


 include/vcl/builder.hxx       |   13 ++++++++++++-
 vcl/source/outdev/text.cxx    |    1 -
 vcl/source/window/builder.cxx |   23 ++++++++++++++++-------
 3 files changed, 28 insertions(+), 9 deletions(-)

New commits:
commit 83cefb5ceb4428d61a5b9fae80d1e673131e9bfe
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Fri Jun 8 11:08:27 2018 +0100

    support comboboxtext id values
    
    Change-Id: Ibebdaab5b073a55cb646687890bc16d5f55c0341
    Reviewed-on: https://gerrit.libreoffice.org/55460
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/include/vcl/builder.hxx b/include/vcl/builder.hxx
index 71819bf8b2da..0c1ea3b56b14 100644
--- a/include/vcl/builder.hxx
+++ b/include/vcl/builder.hxx
@@ -49,6 +49,17 @@ class VclExpander;
 class VclMultiLineEdit;
 namespace xmlreader { class XmlReader; }
 
+struct ComboBoxTextItem
+{
+    OUString m_sItem;
+    OString m_sId;
+    ComboBoxTextItem(const OUString& rItem, const OString& rId)
+        : m_sItem(rItem)
+        , m_sId(rId)
+    {
+    }
+};
+
 class VCL_DLLPUBLIC VclBuilder
 {
 public:
@@ -361,7 +372,7 @@ private:
     void        handleRow(xmlreader::XmlReader &reader, const OString &rID);
     void        handleTabChild(vcl::Window *pParent, xmlreader::XmlReader &reader);
     void        handleMenu(xmlreader::XmlReader &reader, const OString &rID);
-    std::vector<OUString> handleItems(xmlreader::XmlReader &reader) const;
+    std::vector<ComboBoxTextItem> handleItems(xmlreader::XmlReader &reader) const;
 
     void        handleSizeGroup(xmlreader::XmlReader &reader);
 
diff --git a/vcl/source/outdev/text.cxx b/vcl/source/outdev/text.cxx
index 1d115dc56397..211dda947df8 100644
--- a/vcl/source/outdev/text.cxx
+++ b/vcl/source/outdev/text.cxx
@@ -713,7 +713,6 @@ void OutputDevice::SetTextFillColor()
 
 void OutputDevice::SetTextFillColor( const Color& rColor )
 {
-
     Color aColor( rColor );
     bool bTransFill = ImplIsColorTransparent( aColor );
 
diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx
index 8ba726cfdfed..677bd646b6c9 100644
--- a/vcl/source/window/builder.cxx
+++ b/vcl/source/window/builder.cxx
@@ -2639,11 +2639,11 @@ void VclBuilder::handleAtkObject(xmlreader::XmlReader &reader, vcl::Window *pWin
     }
 }
 
-std::vector<OUString> VclBuilder::handleItems(xmlreader::XmlReader &reader) const
+std::vector<ComboBoxTextItem> VclBuilder::handleItems(xmlreader::XmlReader &reader) const
 {
     int nLevel = 1;
 
-    std::vector<OUString> aItems;
+    std::vector<ComboBoxTextItem> aItems;
     sal_Int32 nItemIndex = 0;
 
     while(true)
@@ -2663,7 +2663,7 @@ std::vector<OUString> VclBuilder::handleItems(xmlreader::XmlReader &reader) cons
             if (name.equals("item"))
             {
                 bool bTranslated = false;
-                OString sContext;
+                OString sContext, sId;
 
                 while (reader.nextAttribute(&nsId, &name))
                 {
@@ -2676,6 +2676,11 @@ std::vector<OUString> VclBuilder::handleItems(xmlreader::XmlReader &reader) cons
                         name = reader.getAttributeValue(false);
                         sContext = OString(name.begin, name.length);
                     }
+                    else if (name.equals("id"))
+                    {
+                        name = reader.getAttributeValue(false);
+                        sId = OString(name.begin, name.length);
+                    }
                 }
 
                 reader.nextItem(
@@ -2695,7 +2700,7 @@ std::vector<OUString> VclBuilder::handleItems(xmlreader::XmlReader &reader) cons
                 if (m_pStringReplace)
                     sFinalValue = (*m_pStringReplace)(sFinalValue);
 
-                aItems.push_back(sFinalValue);
+                aItems.emplace_back(sFinalValue, sId);
                 ++nItemIndex;
             }
         }
@@ -3021,7 +3026,7 @@ void VclBuilder::insertMenuObject(PopupMenu *pParent, PopupMenu *pSubMenu, const
 
 /// Insert items to a ComboBox or a ListBox.
 /// They have no common ancestor that would have 'InsertEntry()', so use a template.
-template<typename T> bool insertItems(vcl::Window *pWindow, VclBuilder::stringmap &rMap, const std::vector<OUString> &rItems)
+template<typename T> bool insertItems(vcl::Window *pWindow, VclBuilder::stringmap &rMap, const std::vector<ComboBoxTextItem> &rItems)
 {
     T *pContainer = dynamic_cast<T*>(pWindow);
     if (!pContainer)
@@ -3029,7 +3034,11 @@ template<typename T> bool insertItems(vcl::Window *pWindow, VclBuilder::stringma
 
     sal_uInt16 nActiveId = extractActive(rMap);
     for (auto const& item : rItems)
-        pContainer->InsertEntry(item);
+    {
+        sal_Int32 nPos = pContainer->InsertEntry(item.m_sItem);
+        if (!item.m_sId.isEmpty())
+            pContainer->SetEntryData(nPos, new OUString(OUString::fromUtf8(item.m_sId)));
+    }
     if (nActiveId < rItems.size())
         pContainer->SelectEntryPos(nActiveId);
 
@@ -3090,7 +3099,7 @@ VclPtr<vcl::Window> VclBuilder::handleObject(vcl::Window *pParent, xmlreader::Xm
 
     stringmap aProperties, aPangoAttributes;
     stringmap aAtkAttributes;
-    std::vector<OUString> aItems;
+    std::vector<ComboBoxTextItem> aItems;
 
     if (!sCustomProperty.isEmpty())
         aProperties[OString("customproperty")] = sCustomProperty;


More information about the Libreoffice-commits mailing list