sc/source/ui/cctrl/checklistmenu.cxx | 106 +++++++++++++++++++++-------------- 1 file changed, 64 insertions(+), 42 deletions(-)
New commits: commit 2be2786879883badd6d0075e63965bacd312ed23 Author: Kohei Yoshida <kohei.yosh...@collabora.com> Date: Wed Feb 19 23:45:38 2014 -0500 fdo#73565: Populate date members in a locale-safe way. Change-Id: Id90b2829465fada690b0446d6d823e76e792c77b diff --git a/sc/source/ui/cctrl/checklistmenu.cxx b/sc/source/ui/cctrl/checklistmenu.cxx index e055636..2e88e17 100644 --- a/sc/source/ui/cctrl/checklistmenu.cxx +++ b/sc/source/ui/cctrl/checklistmenu.cxx @@ -32,6 +32,7 @@ #include "svtools/fmtfield.hxx" #include "document.hxx" +using namespace com::sun::star; using ::com::sun::star::uno::Reference; using ::com::sun::star::accessibility::XAccessible; using ::com::sun::star::accessibility::XAccessibleContext; @@ -1280,50 +1281,71 @@ void ScCheckListMenuWindow::setMemberSize(size_t n) void ScCheckListMenuWindow::addDateMember(const OUString& rsName, double nVal, bool bVisible) { ScDocument* pDoc = getDoc(); - if ( pDoc ) + SvNumberFormatter* pFormatter = pDoc->GetFormatTable(); + + // Convert the numeric date value to a date object. + Date aDate = *(pFormatter->GetNullDate()); + aDate += static_cast<long>(rtl::math::approxFloor(nVal)); + + sal_uInt16 nYear = aDate.GetYear(); + sal_uInt16 nMonth = aDate.GetMonth(); + sal_uInt16 nDay = aDate.GetDay(); + + // Get the localized month name list. + CalendarWrapper* pCalendar = ScGlobal::GetCalendar(); + uno::Sequence<i18n::CalendarItem2> aMonths = pCalendar->getMonths(); + if (aMonths.getLength() < nMonth) + return; + + OUString aYearName = OUString::number(nYear); + OUString aMonthName = aMonths[nMonth-1].FullName; + OUString aDayName = OUString::number(nDay); + + maChecks.SetUpdateMode(false); + + SvTreeListEntry* pYearEntry = maChecks.FindEntry(NULL, aYearName); + if (!pYearEntry) { - SvNumberFormatter* pFormatter = pDoc->GetFormatTable(); - OUString rsDate; - if ( pFormatter ) - { - OUString sFormat("YYYY/MMMM/DD"); - Color* pColor = NULL; - pFormatter->GetPreviewString(sFormat, - nVal, - rsDate, - &pColor, - ScGlobal::eLnge ); - } - maChecks.SetUpdateMode(false); - sal_Int32 nIndex = 0; - OUString sParent; - SvTreeListEntry* pParent = NULL; - int count = 0; - do - { - OUString sPart = rsDate.getToken( 0, '/', nIndex ); - bool bLeaf = ( ++count == 3 ); - SvTreeListEntry* pChild = maChecks.FindEntry( pParent, sPart ); - if ( !pChild ) - { - if ( bLeaf ) - pChild = maChecks.SvTreeListBox::InsertEntry( sPart, pParent, sal_False, LISTBOX_APPEND, NULL, SvLBoxButtonKind_enabledCheckbox ); - else - pChild = maChecks.SvTreeListBox::InsertEntry( sPart, pParent, sal_True, LISTBOX_APPEND, NULL, SvLBoxButtonKind_enabledCheckbox ); - Member aMember; - aMember.maName = sPart; - aMember.maRealName = rsName; - aMember.mbDate = true; - aMember.mbLeaf = bLeaf; - aMember.mbVisible = bVisible; - aMember.mpParent = pParent; - maMembers.push_back(aMember); - } - sParent = sPart; - pParent = pChild; - } while ( nIndex >= 0 ); - maChecks.SetUpdateMode(true); + pYearEntry = maChecks.InsertEntry(aYearName, NULL, true); + Member aMemYear; + aMemYear.maName = aYearName; + aMemYear.maRealName = rsName; + aMemYear.mbDate = true; + aMemYear.mbLeaf = false; + aMemYear.mbVisible = bVisible; + aMemYear.mpParent = NULL; + maMembers.push_back(aMemYear); + } + + SvTreeListEntry* pMonthEntry = maChecks.FindEntry(pYearEntry, aMonthName); + if (!pMonthEntry) + { + pMonthEntry = maChecks.InsertEntry(aMonthName, pYearEntry, true); + Member aMemMonth; + aMemMonth.maName = aMonthName; + aMemMonth.maRealName = rsName; + aMemMonth.mbDate = true; + aMemMonth.mbLeaf = false; + aMemMonth.mbVisible = bVisible; + aMemMonth.mpParent = pYearEntry; + maMembers.push_back(aMemMonth); } + + SvTreeListEntry* pDayEntry = maChecks.FindEntry(pMonthEntry, aDayName); + if (!pDayEntry) + { + pDayEntry = maChecks.InsertEntry(aDayName, pMonthEntry, false); + Member aMemDay; + aMemDay.maName = aDayName; + aMemDay.maRealName = rsName; + aMemDay.mbDate = true; + aMemDay.mbLeaf = true; + aMemDay.mbVisible = bVisible; + aMemDay.mpParent = pMonthEntry; + maMembers.push_back(aMemDay); + } + + maChecks.SetUpdateMode(true); } void ScCheckListMenuWindow::addMember(const OUString& rName, bool bVisible) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits