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.vajng...@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)
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits