diff options
author | Caolán McNamara <caolanm@redhat.com> | 2013-02-21 11:55:01 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2013-02-21 11:55:59 +0000 |
commit | fc2f3ce3c1beb845368a29ebaa29b1c90f4d1469 (patch) | |
tree | 420b40af7a97b61f7bc502d2cc2b57db394c35cb /vcl/source/window/builder.cxx | |
parent | d48d8c5da8c51d7b87a609932d28db6ff132683b (diff) |
add a mechanism to load date fields from .ui files
Change-Id: If546e2f5c0f4b58d1306c737bf69799e8033c5c0
Diffstat (limited to 'vcl/source/window/builder.cxx')
-rw-r--r-- | vcl/source/window/builder.cxx | 60 |
1 files changed, 56 insertions, 4 deletions
diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx index dc25339b42e1..264bf9231637 100644 --- a/vcl/source/window/builder.cxx +++ b/vcl/source/window/builder.cxx @@ -256,6 +256,16 @@ VclBuilder::VclBuilder(Window *pParent, OUString sUIDir, OUString sUIFile, OStri mungeAdjustment(*pTarget, *pAdjustment); } + for (std::vector<WidgetAdjustmentMap>::iterator aI = m_pParserState->m_aDateFormatterAdjustmentMaps.begin(), + aEnd = m_pParserState->m_aDateFormatterAdjustmentMaps.end(); aI != aEnd; ++aI) + { + DateField *pTarget = dynamic_cast<DateField*>(get<Window>(aI->m_sID)); + const 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); + } + //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) @@ -715,6 +725,12 @@ void VclBuilder::connectTimeFormatterAdjustment(const OString &id, const OString m_pParserState->m_aTimeFormatterAdjustmentMaps.push_back(WidgetAdjustmentMap(id, rAdjustment)); } +void VclBuilder::connectDateFormatterAdjustment(const OString &id, const OString &rAdjustment) +{ + if (!rAdjustment.isEmpty()) + m_pParserState->m_aDateFormatterAdjustmentMaps.push_back(WidgetAdjustmentMap(id, rAdjustment)); +} + bool VclBuilder::extractScrollAdjustment(const OString &id, VclBuilder::stringmap &rMap) { VclBuilder::stringmap::iterator aFind = rMap.find(OString("adjustment")); @@ -1024,6 +1040,13 @@ Window *VclBuilder::makeObject(Window *pParent, const OString &name, const OStri TimeField *pField = new TimeField(pParent, nBits); pWindow = pField; } + else if (sPattern == "yy:mm:dd") + { + connectDateFormatterAdjustment(id, sAdjustment); + SAL_INFO("vcl.layout", "making date field for " << name.getStr() << " " << sUnit.getStr()); + DateField *pField = new DateField(pParent, nBits); + pWindow = pField; + } else { connectNumericFormatterAdjustment(id, sAdjustment); @@ -2540,7 +2563,6 @@ void VclBuilder::mungeAdjustment(NumericFormatter &rTarget, const Adjustment &rA } } -//assume all in minutes for the moment void VclBuilder::mungeAdjustment(TimeField &rTarget, const Adjustment &rAdjustment) { for (stringmap::const_iterator aI = rAdjustment.begin(), aEnd = rAdjustment.end(); aI != aEnd; ++aI) @@ -2550,19 +2572,19 @@ void VclBuilder::mungeAdjustment(TimeField &rTarget, const Adjustment &rAdjustme if (rKey == "upper") { - Time aUpper(0, rValue.toInt32()); + Time aUpper(rValue.toInt32()); rTarget.SetMax(aUpper); rTarget.SetLast(aUpper); } else if (rKey == "lower") { - Time aLower(0, rValue.toInt32()); + Time aLower(rValue.toInt32()); rTarget.SetMin(aLower); rTarget.SetFirst(aLower); } else if (rKey == "value") { - Time aValue(0, rValue.toInt32()); + Time aValue(rValue.toInt32()); rTarget.SetTime(aValue); } else @@ -2572,6 +2594,36 @@ void VclBuilder::mungeAdjustment(TimeField &rTarget, const Adjustment &rAdjustme } } +void VclBuilder::mungeAdjustment(DateField &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") + { + Date aUpper(rValue.toInt32()); + rTarget.SetMax(aUpper); + rTarget.SetLast(aUpper); + } + else if (rKey == "lower") + { + Date aLower(rValue.toInt32()); + rTarget.SetMin(aLower); + rTarget.SetFirst(aLower); + } + else if (rKey == "value") + { + Date aValue(rValue.toInt32()); + rTarget.SetDate(aValue); + } + else + { + SAL_INFO("vcl.layout", "unhandled property :" << rKey.getStr()); + } + } +} void VclBuilder::mungeAdjustment(ScrollBar &rTarget, const Adjustment &rAdjustment) { |