diff options
author | Caolán McNamara <caolanm@redhat.com> | 2012-10-06 17:14:10 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2012-10-08 13:03:13 +0100 |
commit | 6799ec80cd9ec6a5d0c3e11ec8a69084396f5420 (patch) | |
tree | 5ec5e7daba874c3859a61afc0ddc730570dcc919 /vcl | |
parent | 9897942db6c53dff3a85b880d9d2b955011ef189 (diff) |
import GtkScrollbar as scrollbars and connect GtkAdjustments
Change-Id: Idef8a338f09b52cf0758a6a35e3b5bbcc96a7383
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/inc/vcl/builder.hxx | 12 | ||||
-rw-r--r-- | vcl/source/window/builder.cxx | 72 |
2 files changed, 73 insertions, 11 deletions
diff --git a/vcl/inc/vcl/builder.hxx b/vcl/inc/vcl/builder.hxx index 246f68dd208c..0a6574c8af03 100644 --- a/vcl/inc/vcl/builder.hxx +++ b/vcl/inc/vcl/builder.hxx @@ -19,6 +19,7 @@ class ListBox; class NumericFormatter; +class ScrollBar; class VCL_DLLPUBLIC VclBuilder { @@ -90,10 +91,11 @@ private: } }; - typedef StringPair SpinButtonAdjustmentMap; + typedef StringPair WidgetAdjustmentMap; Adjustment *get_adjustment_by_name(OString sID); - static void mungeadjustment(NumericFormatter &rTarget, Adjustment &rAdjustment); + static void mungeSpinAdjustment(NumericFormatter &rTarget, Adjustment &rAdjustment); + static void mungeScrollAdjustment(ScrollBar &rTarget, Adjustment &rAdjustment); typedef std::map<OString, OString> WidgetTranslations; typedef std::map<OString, WidgetTranslations> Translations; @@ -105,7 +107,8 @@ private: std::vector<ComboBoxModelMap> m_aModelMaps; std::vector<ModelAndId> m_aModels; std::vector<AdjustmentAndId> m_aAdjustments; - std::vector<SpinButtonAdjustmentMap> m_aAdjustmentMaps; + std::vector<WidgetAdjustmentMap> m_aSpinAdjustmentMaps; + std::vector<WidgetAdjustmentMap> m_aScrollAdjustmentMaps; std::vector<ButtonImageWidgetMap> m_aButtonImageWidgetMaps; StockMap m_aStockMap; Translations m_aTranslations; @@ -179,7 +182,8 @@ 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 extractAdjustment(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); bool extractStock(const OString &id, stringmap &rMap); diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx index 86c06d109067..80daaab2c214 100644 --- a/vcl/source/window/builder.cxx +++ b/vcl/source/window/builder.cxx @@ -18,6 +18,7 @@ #include <vcl/layout.hxx> #include <vcl/lstbox.hxx> #include <vcl/menubtn.hxx> +#include <vcl/scrbar.hxx> #include <vcl/svapp.hxx> #include <vcl/tabctrl.hxx> #include <vcl/tabpage.hxx> @@ -130,14 +131,25 @@ VclBuilder::VclBuilder(Window *pParent, OUString sUIDir, OUString sUIFile, OStri } //Set SpinButton adjustments when everything has been imported - for (std::vector<SpinButtonAdjustmentMap>::iterator aI = m_pParserState->m_aAdjustmentMaps.begin(), - aEnd = m_pParserState->m_aAdjustmentMaps.end(); aI != aEnd; ++aI) + for (std::vector<WidgetAdjustmentMap>::iterator aI = m_pParserState->m_aSpinAdjustmentMaps.begin(), + 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); SAL_WARN_IF(!pTarget || !pAdjustment, "vcl", "missing elements of spinbutton/adjustment"); if (pTarget && pAdjustment) - mungeadjustment(*pTarget, *pAdjustment); + mungeSpinAdjustment(*pTarget, *pAdjustment); + } + + //Set ScrollBar adjustments when everything has been imported + for (std::vector<WidgetAdjustmentMap>::iterator aI = m_pParserState->m_aScrollAdjustmentMaps.begin(), + 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); + SAL_WARN_IF(!pTarget || !pAdjustment, "vcl", "missing elements of scrollbar/adjustment"); + if (pTarget && pAdjustment) + mungeScrollAdjustment(*pTarget, *pAdjustment); } //Set button images when everything has been imported @@ -430,18 +442,31 @@ bool VclBuilder::extractGroup(const OString &id, stringmap &rMap) return false; } -bool VclBuilder::extractAdjustment(const OString &id, stringmap &rMap) +bool VclBuilder::extractSpinAdjustment(const OString &id, stringmap &rMap) { VclBuilder::stringmap::iterator aFind = rMap.find(OString("adjustment")); if (aFind != rMap.end()) { - m_pParserState->m_aAdjustmentMaps.push_back(SpinButtonAdjustmentMap(id, aFind->second)); + m_pParserState->m_aSpinAdjustmentMaps.push_back(WidgetAdjustmentMap(id, aFind->second)); rMap.erase(aFind); return true; } return false; } +bool VclBuilder::extractScrollAdjustment(const OString &id, stringmap &rMap) +{ + VclBuilder::stringmap::iterator aFind = rMap.find(OString("adjustment")); + if (aFind != rMap.end()) + { + m_pParserState->m_aScrollAdjustmentMaps.push_back(WidgetAdjustmentMap(id, aFind->second)); + rMap.erase(aFind); + return true; + } + return false; +} + + bool VclBuilder::extractModel(const OString &id, stringmap &rMap) { VclBuilder::stringmap::iterator aFind = rMap.find(OString("model")); @@ -580,7 +605,7 @@ Window *VclBuilder::makeObject(Window *pParent, const OString &name, const OStri } else if (name == "GtkSpinButton") { - extractAdjustment(id, rMap); + extractSpinAdjustment(id, rMap); OString sPattern = extractPattern(rMap); OString sUnit = sPattern; @@ -656,6 +681,14 @@ Window *VclBuilder::makeObject(Window *pParent, const OString &name, const OStri else pWindow = new FixedLine(pParent, WB_HORZ); } + else if (name == "GtkScrollbar") + { + extractScrollAdjustment(id, rMap); + if (extractOrientation(rMap)) + pWindow = new ScrollBar(pParent, WB_VERT); + else + pWindow = new ScrollBar(pParent, WB_HORZ); + } else if (name == "GtkEntry") { pWindow = new Edit(pParent, WB_LEFT|WB_VCENTER|WB_BORDER|WB_3DLOOK); @@ -1479,7 +1512,7 @@ void VclBuilder::mungemodel(ListBox &rTarget, ListStore &rStore) rTarget.SelectEntryPos(0); } -void VclBuilder::mungeadjustment(NumericFormatter &rTarget, Adjustment &rAdjustment) +void VclBuilder::mungeSpinAdjustment(NumericFormatter &rTarget, Adjustment &rAdjustment) { int nMul = rtl_math_pow10Exp(1, rTarget.GetDecimalDigits()); @@ -1517,4 +1550,29 @@ void VclBuilder::mungeadjustment(NumericFormatter &rTarget, Adjustment &rAdjustm } } +void VclBuilder::mungeScrollAdjustment(ScrollBar &rTarget, Adjustment &rAdjustment) +{ + for (stringmap::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()); + } + } +} + + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |