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

Tomaž Vajngerl tomaz.vajngerl at collabora.co.uk
Sun Mar 22 02:56:51 PDT 2015


 include/vcl/builder.hxx       |    6 ++
 include/vcl/slider.hxx        |    2 
 vcl/source/control/slider.cxx |   10 ++++
 vcl/source/window/builder.cxx |   86 ++++++++++++++++++++++++++++++++++++++++--
 4 files changed, 99 insertions(+), 5 deletions(-)

New commits:
commit c63497472b6b7406a07840ec312ccebe6154bb86
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
Date:   Sun Mar 22 18:32:29 2015 +0900

    vcl: add initial support for GtkScale (as Slider) to VclBuilder
    
    Change-Id: I5c987a3b1ca39c8d382ba775bab762f030496bf5

diff --git a/include/vcl/builder.hxx b/include/vcl/builder.hxx
index 0622f09..2257343 100644
--- a/include/vcl/builder.hxx
+++ b/include/vcl/builder.hxx
@@ -33,6 +33,7 @@ class ListBox;
 class NumericFormatter;
 class PopupMenu;
 class ScrollBar;
+class Slider;
 class DateField;
 class TimeField;
 class VclExpander;
@@ -236,6 +237,7 @@ private:
     static void     mungeAdjustment(DateField &rTarget, const Adjustment &rAdjustment);
     static void     mungeAdjustment(TimeField &rTarget, const Adjustment &rAdjustment);
     static void     mungeAdjustment(ScrollBar &rTarget, const Adjustment &rAdjustment);
+    static void     mungeAdjustment(Slider &rTarget, const Adjustment &rAdjustment);
 
     typedef std::map<OString, OString> WidgetTranslations;
     typedef std::map<OString, WidgetTranslations> Translations;
@@ -276,6 +278,8 @@ private:
         std::vector<WidgetAdjustmentMap> m_aTimeFormatterAdjustmentMaps;
         std::vector<WidgetAdjustmentMap> m_aDateFormatterAdjustmentMaps;
         std::vector<WidgetAdjustmentMap> m_aScrollAdjustmentMaps;
+        std::vector<WidgetAdjustmentMap> m_aSliderAdjustmentMaps;
+
         std::map<OString, Adjustment> m_aAdjustments;
 
         std::vector<ButtonImageWidgetMap> m_aButtonImageWidgetMaps;
@@ -350,7 +354,7 @@ private:
     bool        extractGroup(const OString &id, stringmap &rVec);
     bool        extractModel(const OString &id, stringmap &rVec);
     bool        extractBuffer(const OString &id, stringmap &rVec);
-    bool        extractScrollAdjustment(const OString &id, stringmap &rVec);
+    bool        extractAdjustmentToMap(const OString &id, stringmap &rVec, std::vector<WidgetAdjustmentMap>& rAdjustmentMap);
     bool        extractButtonImage(const OString &id, stringmap &rMap, bool bRadio);
     bool        extractStock(const OString &id, stringmap &rMap);
     void        extractMnemonicWidget(const OString &id, stringmap &rMap);
diff --git a/include/vcl/slider.hxx b/include/vcl/slider.hxx
index 3eb720a..dfc399b 100644
--- a/include/vcl/slider.hxx
+++ b/include/vcl/slider.hxx
@@ -90,7 +90,9 @@ public:
                         { mbFullDrag = bEnable; }
     bool            IsDragEnabled() const { return mbFullDrag; }
 
+    void            SetRangeMin(long nNewRange);
     long            GetRangeMin() const { return mnMinRange; }
+    void            SetRangeMax(long nNewRange);
     long            GetRangeMax() const { return mnMaxRange; }
     void            SetRange( const Range& rRange );
     Range           GetRange() const { return Range( GetRangeMin(), GetRangeMax() ); }
diff --git a/vcl/source/control/slider.cxx b/vcl/source/control/slider.cxx
index 4ef2adc..773f310 100644
--- a/vcl/source/control/slider.cxx
+++ b/vcl/source/control/slider.cxx
@@ -893,6 +893,16 @@ void Slider::EndSlide()
     maEndSlideHdl.Call( this );
 }
 
+void Slider::SetRangeMin(long nNewRange)
+{
+    SetRange(Range(nNewRange, GetRangeMax()));
+}
+
+void Slider::SetRangeMax(long nNewRange)
+{
+    SetRange(Range(GetRangeMin(), nNewRange));
+}
+
 void Slider::SetRange( const Range& rRange )
 {
     // adjust Range
diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx
index 0d921f1..31736c4 100644
--- a/vcl/source/window/builder.cxx
+++ b/vcl/source/window/builder.cxx
@@ -42,6 +42,7 @@
 #include <vcl/toolbox.hxx>
 #include <vcl/vclmedit.hxx>
 #include <vcl/settings.hxx>
+#include <vcl/slider.hxx>
 #include <svdata.hxx>
 #include <svids.hrc>
 #include <window.h>
@@ -334,6 +335,20 @@ VclBuilder::VclBuilder(vcl::Window *pParent, const OUString& sUIDir, const OUStr
             mungeAdjustment(*pTarget, *pAdjustment);
     }
 
+    //Set Scale(Slider) adjustments
+    std::vector<WidgetAdjustmentMap>::iterator aIterator;
+    for (aIterator  = m_pParserState->m_aSliderAdjustmentMaps.begin();
+         aIterator != m_pParserState->m_aSliderAdjustmentMaps.end(); ++aIterator)
+    {
+        Slider* pTarget = dynamic_cast<Slider*>(get<vcl::Window>(aIterator->m_sID));
+        const Adjustment* pAdjustment = get_adjustment_by_name(aIterator->m_sValue);
+        SAL_WARN_IF(!pTarget || !pAdjustment, "vcl", "missing elements of scale(slider)/adjustment");
+        if (pTarget && pAdjustment)
+        {
+            mungeAdjustment(*pTarget, *pAdjustment);
+        }
+    }
+
     //Set size-groups when all widgets have been imported
     for (std::vector<SizeGroup>::iterator aI = m_pParserState->m_aSizeGroups.begin(),
         aEnd = m_pParserState->m_aSizeGroups.end(); aI != aEnd; ++aI)
@@ -586,6 +601,30 @@ OString VclBuilder::extractCustomProperty(VclBuilder::stringmap &rMap)
 
 namespace
 {
+    bool extractDrawValue(VclBuilder::stringmap& rMap)
+    {
+        bool bDrawValue = true;
+        VclBuilder::stringmap::iterator aFind = rMap.find(OString("draw_value"));
+        if (aFind != rMap.end())
+        {
+            bDrawValue = toBool(aFind->second);
+            rMap.erase(aFind);
+        }
+        return bDrawValue;
+    }
+
+    OString extractValuePos(VclBuilder::stringmap& rMap)
+    {
+        OString sRet("top");
+        VclBuilder::stringmap::iterator aFind = rMap.find(OString("value_pos"));
+        if (aFind != rMap.end())
+        {
+            sRet = aFind->second;
+            rMap.erase(aFind);
+        }
+        return sRet;
+    }
+
     OString extractTypeHint(VclBuilder::stringmap &rMap)
     {
         OString sRet("normal");
@@ -1054,12 +1093,12 @@ void VclBuilder::connectDateFormatterAdjustment(const OString &id, const OString
         m_pParserState->m_aDateFormatterAdjustmentMaps.push_back(WidgetAdjustmentMap(id, rAdjustment));
 }
 
-bool VclBuilder::extractScrollAdjustment(const OString &id, VclBuilder::stringmap &rMap)
+bool VclBuilder::extractAdjustmentToMap(const OString& id, VclBuilder::stringmap& rMap, std::vector<WidgetAdjustmentMap>& rAdjustmentMap)
 {
     VclBuilder::stringmap::iterator aFind = rMap.find(OString("adjustment"));
     if (aFind != rMap.end())
     {
-        m_pParserState->m_aScrollAdjustmentMaps.push_back(WidgetAdjustmentMap(id, aFind->second));
+        rAdjustmentMap.push_back(WidgetAdjustmentMap(id, aFind->second));
         rMap.erase(aFind);
         return true;
     }
@@ -1540,7 +1579,7 @@ vcl::Window *VclBuilder::makeObject(vcl::Window *pParent, const OString &name, c
     }
     else if (name == "GtkScrollbar")
     {
-        extractScrollAdjustment(id, rMap);
+        extractAdjustmentToMap(id, rMap, m_pParserState->m_aScrollAdjustmentMaps);
         bVertical = extractOrientation(rMap);
         if (bVertical)
             pWindow = new ScrollBar(pParent, WB_VERT);
@@ -1549,7 +1588,7 @@ vcl::Window *VclBuilder::makeObject(vcl::Window *pParent, const OString &name, c
     }
     else if (name == "GtkProgressBar")
     {
-        extractScrollAdjustment(id, rMap);
+        extractAdjustmentToMap(id, rMap, m_pParserState->m_aScrollAdjustmentMaps);
         bVertical = extractOrientation(rMap);
         if (bVertical)
             pWindow = new ProgressBar(pParent, WB_VERT);
@@ -1598,6 +1637,21 @@ vcl::Window *VclBuilder::makeObject(vcl::Window *pParent, const OString &name, c
     {
         pWindow = new Throbber(pParent, WB_3DLOOK);
     }
+    else if (name == "GtkScale")
+    {
+        extractAdjustmentToMap(id, rMap, m_pParserState->m_aSliderAdjustmentMaps);
+        bool bDrawValue = extractDrawValue(rMap);
+        if (bDrawValue)
+        {
+            OString sValuePos = extractValuePos(rMap);
+            (void)sValuePos;
+        }
+        bVertical = extractOrientation(rMap);
+
+        WinBits nWinStyle = bVertical ? WB_VERT : WB_HORZ;
+
+        pWindow = new Slider(pParent, nWinStyle);
+    }
     else if (name == "GtkToolbar")
     {
         pWindow = new ToolBox(pParent, WB_3DLOOK | WB_TABSTOP);
@@ -3457,6 +3511,30 @@ void VclBuilder::mungeAdjustment(ScrollBar &rTarget, const Adjustment &rAdjustme
     }
 }
 
+void VclBuilder::mungeAdjustment(Slider& rTarget, const Adjustment& rAdjustment)
+{
+    for (stringmap::const_iterator aI = rAdjustment.begin(), aEnd = rAdjustment.end(); aI != aEnd; ++aI)
+    {
+        const OString &rKey = aI->first;
+        const OString &rValue = aI->second;
+
+        if (rKey == "upper")
+            rTarget.SetRangeMax(rValue.toInt32());
+        else if (rKey == "lower")
+            rTarget.SetRangeMin(rValue.toInt32());
+        else if (rKey == "value")
+            rTarget.SetThumbPos(rValue.toInt32());
+        else if (rKey == "step-increment")
+            rTarget.SetLineSize(rValue.toInt32());
+        else if (rKey == "page-increment")
+            rTarget.SetPageSize(rValue.toInt32());
+        else
+        {
+            SAL_INFO("vcl.layout", "unhandled property :" << rKey.getStr());
+        }
+    }
+}
+
 void VclBuilder::mungeTextBuffer(VclMultiLineEdit &rTarget, const TextBuffer &rTextBuffer)
 {
     for (stringmap::const_iterator aI = rTextBuffer.begin(), aEnd = rTextBuffer.end(); aI != aEnd; ++aI)


More information about the Libreoffice-commits mailing list