[Libreoffice-commits] .: 2 commits - vcl/inc vcl/source

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Thu Nov 22 05:45:46 PST 2012


 vcl/inc/vcl/builder.hxx       |   64 ++++++++++--------------
 vcl/source/window/builder.cxx |  109 ++++++++++++++++++++++++++++--------------
 vcl/source/window/layout.cxx  |    2 
 3 files changed, 104 insertions(+), 71 deletions(-)

New commits:
commit cbcc8c80d9972c7a908e144e34bb4e347d4ec641
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Thu Nov 22 12:27:36 2012 +0000

    support setting textbuffers on textviews
    
    Change-Id: Iaab4f17539c65c11870ce9b0635dc5ab47f1fa88

diff --git a/vcl/inc/vcl/builder.hxx b/vcl/inc/vcl/builder.hxx
index e350a81..cbda844 100644
--- a/vcl/inc/vcl/builder.hxx
+++ b/vcl/inc/vcl/builder.hxx
@@ -21,6 +21,7 @@
 class ListBox;
 class NumericFormatter;
 class ScrollBar;
+class VclMultiLineEdit;
 
 class VCL_DLLPUBLIC VclBuilder
 {
@@ -56,23 +57,6 @@ private:
     };
     std::vector<WinAndId> m_aChildren;
 
-    struct ListStore
-    {
-        typedef std::vector<OString> row;
-        std::vector<row> m_aEntries;
-    };
-
-    struct ModelAndId
-    {
-        OString m_sID;
-        ListStore *m_pModel;
-        ModelAndId(const OString &rId, ListStore *pListStore)
-            : m_sID(rId)
-            , m_pModel(pListStore)
-        {
-        }
-    };
-
     struct StringPair
     {
         OString m_sID;
@@ -87,44 +71,50 @@ private:
     typedef StringPair RadioButtonGroupMap;
     typedef StringPair ComboBoxModelMap;
     typedef StringPair ButtonImageWidgetMap;
+    typedef StringPair TextBufferMap;
+    typedef StringPair WidgetAdjustmentMap;
 
-    ListStore *get_model_by_name(OString sID);
-    static void mungemodel(ListBox &rTarget, ListStore &rStore);
-
-    typedef stringmap Adjustment;
-
-    struct AdjustmentAndId
+    struct ListStore
     {
-        OString m_sID;
-        Adjustment m_aAdjustment;
-        AdjustmentAndId(const OString &rId, Adjustment &rAdjustment)
-            : m_sID(rId)
-        {
-            m_aAdjustment.swap(rAdjustment);
-        }
+        typedef std::vector<OString> row;
+        std::vector<row> m_aEntries;
     };
+    const ListStore* get_model_by_name(OString sID) const;
+    static void mungeModel(ListBox &rTarget, const ListStore &rStore);
 
-    typedef StringPair WidgetAdjustmentMap;
+    typedef stringmap TextBuffer;
+    const TextBuffer* get_buffer_by_name(OString sID) const;
+    static void mungeTextBuffer(VclMultiLineEdit &rTarget, const TextBuffer &rTextBuffer);
 
-    Adjustment *get_adjustment_by_name(OString sID);
-    static void mungeSpinAdjustment(NumericFormatter &rTarget, Adjustment &rAdjustment);
-    static void mungeScrollAdjustment(ScrollBar &rTarget, Adjustment &rAdjustment);
+    typedef stringmap Adjustment;
+    const Adjustment *get_adjustment_by_name(OString sID) const;
+    static void mungeSpinAdjustment(NumericFormatter &rTarget, const Adjustment &rAdjustment);
+    static void mungeScrollAdjustment(ScrollBar &rTarget, const Adjustment &rAdjustment);
 
     typedef std::map<OString, OString> WidgetTranslations;
     typedef std::map<OString, WidgetTranslations> Translations;
 
     typedef std::map<OString, OString> StockMap;
+
     struct ParserState
     {
         std::vector<RadioButtonGroupMap> m_aGroupMaps;
+
         std::vector<ComboBoxModelMap> m_aModelMaps;
-        std::vector<ModelAndId> m_aModels;
-        std::vector<AdjustmentAndId> m_aAdjustments;
+        std::map<OString, ListStore> m_aModels;
+
+        std::vector<TextBufferMap> m_aTextBufferMaps;
+        std::map<OString, TextBuffer> m_aTextBuffers;
+
         std::vector<WidgetAdjustmentMap> m_aSpinAdjustmentMaps;
         std::vector<WidgetAdjustmentMap> m_aScrollAdjustmentMaps;
+        std::map<OString, Adjustment> m_aAdjustments;
+
         std::vector<ButtonImageWidgetMap> m_aButtonImageWidgetMaps;
         StockMap m_aStockMap;
+
         Translations m_aTranslations;
+
         std::map<Window*, Window*> m_aRedundantParentWidgets;
     };
 
@@ -185,6 +175,7 @@ private:
     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);
     bool extractSpinAdjustment(const OString &id, stringmap &rVec);
     bool extractScrollAdjustment(const OString &id, stringmap &rVec);
     bool extractImage(const OString &id, stringmap &rMap);
@@ -202,6 +193,7 @@ private:
     void handleListStore(xmlreader::XmlReader &reader, const OString &rID);
     void handleRow(xmlreader::XmlReader &reader, const OString &rID, sal_Int32 nRowIndex);
     void handleAdjustment(const OString &rID, stringmap &rProperties);
+    void handleTextBuffer(const OString &rID, stringmap &rProperties);
     void handleTabChild(Window *pParent, xmlreader::XmlReader &reader);
 
     PackingData get_window_packing_data(const Window *pWindow) const;
diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx
index 463dad0..2caef3e 100644
--- a/vcl/source/window/builder.cxx
+++ b/vcl/source/window/builder.cxx
@@ -157,15 +157,21 @@ VclBuilder::VclBuilder(Window *pParent, OUString sUIDir, OUString sUIFile, OStri
          aEnd = m_pParserState->m_aModelMaps.end(); aI != aEnd; ++aI)
     {
         ListBox *pTarget = get<ListBox>(aI->m_sID);
-        ListStore *pStore = get_model_by_name(aI->m_sValue);
+        const ListStore *pStore = get_model_by_name(aI->m_sValue);
         SAL_WARN_IF(!pTarget || !pStore, "vcl", "missing elements of combobox/liststore");
         if (pTarget && pStore)
-            mungemodel(*pTarget, *pStore);
+            mungeModel(*pTarget, *pStore);
     }
-    for (std::vector<ModelAndId>::iterator aI = m_pParserState->m_aModels.begin(),
-         aEnd = m_pParserState->m_aModels.end(); aI != aEnd; ++aI)
+
+    //Set TextView buffers when everything has been imported
+    for (std::vector<TextBufferMap>::iterator aI = m_pParserState->m_aTextBufferMaps.begin(),
+         aEnd = m_pParserState->m_aTextBufferMaps.end(); aI != aEnd; ++aI)
     {
-        delete aI->m_pModel;
+        VclMultiLineEdit *pTarget = get<VclMultiLineEdit>(aI->m_sID);
+        const TextBuffer *pBuffer = get_buffer_by_name(aI->m_sValue);
+        SAL_WARN_IF(!pTarget || !pBuffer, "vcl", "missing elements of textview/textbuffer");
+        if (pTarget && pBuffer)
+            mungeTextBuffer(*pTarget, *pBuffer);
     }
 
     //Set SpinButton adjustments when everything has been imported
@@ -173,7 +179,7 @@ VclBuilder::VclBuilder(Window *pParent, OUString sUIDir, OUString sUIFile, OStri
          aEnd = m_pParserState->m_aSpinAdjustmentMaps.end(); aI != aEnd; ++aI)
     {
         NumericFormatter *pTarget = dynamic_cast<NumericFormatter*>(get<Window>(aI->m_sID));
-        Adjustment *pAdjustment = get_adjustment_by_name(aI->m_sValue);
+        const Adjustment *pAdjustment = get_adjustment_by_name(aI->m_sValue);
         SAL_WARN_IF(!pTarget || !pAdjustment, "vcl", "missing elements of spinbutton/adjustment");
         if (pTarget && pAdjustment)
             mungeSpinAdjustment(*pTarget, *pAdjustment);
@@ -184,7 +190,7 @@ VclBuilder::VclBuilder(Window *pParent, OUString sUIDir, OUString sUIFile, OStri
          aEnd = m_pParserState->m_aScrollAdjustmentMaps.end(); aI != aEnd; ++aI)
     {
         ScrollBar *pTarget = get<ScrollBar>(aI->m_sID);
-        Adjustment *pAdjustment = get_adjustment_by_name(aI->m_sValue);
+        const Adjustment *pAdjustment = get_adjustment_by_name(aI->m_sValue);
         SAL_WARN_IF(!pTarget || !pAdjustment, "vcl", "missing elements of scrollbar/adjustment");
         if (pTarget && pAdjustment)
             mungeScrollAdjustment(*pTarget, *pAdjustment);
@@ -515,7 +521,6 @@ bool VclBuilder::extractScrollAdjustment(const OString &id, stringmap &rMap)
     return false;
 }
 
-
 bool VclBuilder::extractModel(const OString &id, stringmap &rMap)
 {
     VclBuilder::stringmap::iterator aFind = rMap.find(OString("model"));
@@ -528,6 +533,18 @@ bool VclBuilder::extractModel(const OString &id, stringmap &rMap)
     return false;
 }
 
+bool VclBuilder::extractBuffer(const OString &id, stringmap &rMap)
+{
+    VclBuilder::stringmap::iterator aFind = rMap.find(OString("buffer"));
+    if (aFind != rMap.end())
+    {
+        m_pParserState->m_aTextBufferMaps.push_back(TextBufferMap(id, aFind->second));
+        rMap.erase(aFind);
+        return true;
+    }
+    return false;
+}
+
 bool VclBuilder::extractStock(const OString &id, stringmap &rMap)
 {
     VclBuilder::stringmap::iterator aFind = rMap.find(OString("stock"));
@@ -790,6 +807,8 @@ Window *VclBuilder::makeObject(Window *pParent, const OString &name, const OStri
         pWindow = new Window(pParent);
     else if (name == "GtkTextView")
     {
+        extractBuffer(id, rMap);
+
         WinBits nWinStyle = WB_LEFT | WB_BORDER;
         //VclMultiLineEdit manage their own scrolling,
         //so if it appears as a child of a scrolling window
@@ -1213,7 +1232,12 @@ void VclBuilder::collectPangoAttribute(xmlreader::XmlReader &reader, stringmap &
 
 void VclBuilder::handleAdjustment(const OString &rID, stringmap &rProperties)
 {
-    m_pParserState->m_aAdjustments.push_back(AdjustmentAndId(rID, rProperties));
+    m_pParserState->m_aAdjustments[rID] = rProperties;
+}
+
+void VclBuilder::handleTextBuffer(const OString &rID, stringmap &rProperties)
+{
+    m_pParserState->m_aTextBuffers[rID] = rProperties;
 }
 
 void VclBuilder::handleRow(xmlreader::XmlReader &reader, const OString &rID, sal_Int32 nRowIndex)
@@ -1277,14 +1301,11 @@ void VclBuilder::handleRow(xmlreader::XmlReader &reader, const OString &rID, sal
             break;
     }
 
-    if (!aRow.empty())
-        m_pParserState->m_aModels.back().m_pModel->m_aEntries.push_back(aRow);
+    m_pParserState->m_aModels[rID].m_aEntries.push_back(aRow);
 }
 
 void VclBuilder::handleListStore(xmlreader::XmlReader &reader, const OString &rID)
 {
-    m_pParserState->m_aModels.push_back(ModelAndId(rID, new ListStore));
-
     int nLevel = 1;
     sal_Int32 nRowIndex = 0;
 
@@ -1403,6 +1424,11 @@ Window* VclBuilder::handleObject(Window *pParent, xmlreader::XmlReader &reader)
         handleAdjustment(sID, aProperties);
         return NULL;
     }
+    else if (sClass == "GtkTextBuffer")
+    {
+        handleTextBuffer(sID, aProperties);
+        return NULL;
+    }
 
     if (!pCurrentChild)
         pCurrentChild = insertObject(pParent, sClass, sID, aProperties, aPangoAttributes);
@@ -1654,27 +1680,27 @@ void VclBuilder::set_window_packing_position(const Window *pWindow, sal_Int32 nP
     }
 }
 
-VclBuilder::ListStore *VclBuilder::get_model_by_name(OString sID)
+const VclBuilder::ListStore *VclBuilder::get_model_by_name(OString sID) const
 {
-    for (std::vector<ModelAndId>::iterator aI = m_pParserState->m_aModels.begin(),
-         aEnd = m_pParserState->m_aModels.end(); aI != aEnd; ++aI)
-    {
-        if (aI->m_sID.equals(sID))
-            return aI->m_pModel;
-    }
-
+    std::map<OString, ListStore>::const_iterator aI = m_pParserState->m_aModels.find(sID);
+    if (aI != m_pParserState->m_aModels.end())
+        return &(aI->second);
     return NULL;
 }
 
-VclBuilder::Adjustment *VclBuilder::get_adjustment_by_name(OString sID)
+const VclBuilder::TextBuffer *VclBuilder::get_buffer_by_name(OString sID) const
 {
-    for (std::vector<AdjustmentAndId>::iterator aI = m_pParserState->m_aAdjustments.begin(),
-         aEnd = m_pParserState->m_aAdjustments.end(); aI != aEnd; ++aI)
-    {
-        if (aI->m_sID.equals(sID))
-            return &(aI->m_aAdjustment);
-    }
+    std::map<OString, TextBuffer>::const_iterator aI = m_pParserState->m_aTextBuffers.find(sID);
+    if (aI != m_pParserState->m_aTextBuffers.end())
+        return &(aI->second);
+    return NULL;
+}
 
+const VclBuilder::Adjustment *VclBuilder::get_adjustment_by_name(OString sID) const
+{
+    std::map<OString, Adjustment>::const_iterator aI = m_pParserState->m_aAdjustments.find(sID);
+    if (aI != m_pParserState->m_aAdjustments.end())
+        return &(aI->second);
     return NULL;
 }
 
@@ -1709,9 +1735,9 @@ bool VclBuilder::replace(OString sID, Window &rReplacement)
     return false;
 }
 
-void VclBuilder::mungemodel(ListBox &rTarget, ListStore &rStore)
+void VclBuilder::mungeModel(ListBox &rTarget, const ListStore &rStore)
 {
-    for (std::vector<ListStore::row>::iterator aI = rStore.m_aEntries.begin(), aEnd = rStore.m_aEntries.end();
+    for (std::vector<ListStore::row>::const_iterator aI = rStore.m_aEntries.begin(), aEnd = rStore.m_aEntries.end();
         aI != aEnd; ++aI)
     {
         const ListStore::row &rRow = *aI;
@@ -1726,11 +1752,11 @@ void VclBuilder::mungemodel(ListBox &rTarget, ListStore &rStore)
         rTarget.SelectEntryPos(0);
 }
 
-void VclBuilder::mungeSpinAdjustment(NumericFormatter &rTarget, Adjustment &rAdjustment)
+void VclBuilder::mungeSpinAdjustment(NumericFormatter &rTarget, const Adjustment &rAdjustment)
 {
     int nMul = rtl_math_pow10Exp(1, rTarget.GetDecimalDigits());
 
-    for (stringmap::iterator aI = rAdjustment.begin(), aEnd = rAdjustment.end(); aI != aEnd; ++aI)
+    for (stringmap::const_iterator aI = rAdjustment.begin(), aEnd = rAdjustment.end(); aI != aEnd; ++aI)
     {
         const OString &rKey = aI->first;
         const OString &rValue = aI->second;
@@ -1764,9 +1790,9 @@ void VclBuilder::mungeSpinAdjustment(NumericFormatter &rTarget, Adjustment &rAdj
     }
 }
 
-void VclBuilder::mungeScrollAdjustment(ScrollBar &rTarget, Adjustment &rAdjustment)
+void VclBuilder::mungeScrollAdjustment(ScrollBar &rTarget, const Adjustment &rAdjustment)
 {
-    for (stringmap::iterator aI = rAdjustment.begin(), aEnd = rAdjustment.end(); aI != aEnd; ++aI)
+    for (stringmap::const_iterator aI = rAdjustment.begin(), aEnd = rAdjustment.end(); aI != aEnd; ++aI)
     {
         const OString &rKey = aI->first;
         const OString &rValue = aI->second;
@@ -1788,5 +1814,20 @@ void VclBuilder::mungeScrollAdjustment(ScrollBar &rTarget, Adjustment &rAdjustme
     }
 }
 
+void VclBuilder::mungeTextBuffer(VclMultiLineEdit &rTarget, const TextBuffer &rTextBuffer)
+{
+    for (stringmap::const_iterator aI = rTextBuffer.begin(), aEnd = rTextBuffer.end(); aI != aEnd; ++aI)
+    {
+        const OString &rKey = aI->first;
+        const OString &rValue = aI->second;
+
+        if (rKey == "text")
+            rTarget.SetText(OStringToOUString(rValue, RTL_TEXTENCODING_UTF8));
+        else
+        {
+            SAL_INFO("vcl.layout", "unhandled property :" << rKey.getStr());
+        }
+    }
+}
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit 4546ef5664e7098228d890d112935737d273701b
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Thu Nov 22 11:33:51 2012 +0000

    *height* not width
    
    Change-Id: I6ca792b9658e89d1b3dd147332e57625eb31256a

diff --git a/vcl/source/window/layout.cxx b/vcl/source/window/layout.cxx
index a9aaf4c..e82f5b6 100644
--- a/vcl/source/window/layout.cxx
+++ b/vcl/source/window/layout.cxx
@@ -694,7 +694,7 @@ void VclGrid::calcMaxs(const array_type &A, std::vector<Value> &rWidths, std::ve
                     bool bForceExpandAll = false;
                     sal_Int32 nExpandables = 0;
                     for (sal_Int32 nSpanY = 0; nSpanY < nHeight; ++nSpanY)
-                        if (rWidths[y+nSpanY].m_bExpand)
+                        if (rHeights[y+nSpanY].m_bExpand)
                             ++nExpandables;
                     if (nExpandables == 0)
                     {


More information about the Libreoffice-commits mailing list