X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1ee2f9d96d962a1d02d144e1c3c36d8103d8ccbb..ba8ac2c7c30f6a18ac1fae70162be008c3fc378d:/src/common/datetime.cpp diff --git a/src/common/datetime.cpp b/src/common/datetime.cpp index 164cc5b705..928d2effc3 100644 --- a/src/common/datetime.cpp +++ b/src/common/datetime.cpp @@ -308,14 +308,15 @@ static const long MILLISECONDS_PER_DAY = 86400000l; // (i.e. JDN(Jan 1, 1970) = 2440587.5) static const long EPOCH_JDN = 2440587l; -// used only in asserts -#ifdef __WXDEBUG__ +// these values are only used in asserts so don't define them if asserts are +// disabled to avoid warnings about unused static variables +#if wxDEBUG_LEVEL // the date of JDN -0.5 (as we don't work with fractional parts, this is the // reference date for us) is Nov 24, 4714BC static const int JDN_0_YEAR = -4713; static const int JDN_0_MONTH = wxDateTime::Nov; static const int JDN_0_DAY = 24; -#endif // __WXDEBUG__ +#endif // wxDEBUG_LEVEL // the constants used for JDN calculations static const long JDN_OFFSET = 32046l; @@ -350,8 +351,8 @@ wxDateTime::Country wxDateTime::ms_country = wxDateTime::Country_Unknown; // private functions // ---------------------------------------------------------------------------- -// debugger helper: shows what the date really is -#ifdef __WXDEBUG__ +// debugger helper: this function can be called from a debugger to show what +// the date really is extern const char *wxDumpDate(const wxDateTime* dt) { static char buf[128]; @@ -363,7 +364,6 @@ extern const char *wxDumpDate(const wxDateTime* dt) return buf; } -#endif // Debug // get the number of days in the given month of the given year static inline @@ -453,7 +453,7 @@ static long GetTruncatedJDN(wxDateTime::wxDateTime_t day, - JDN_OFFSET; } -#ifdef HAVE_STRFTIME +#ifdef wxHAS_STRFTIME // this function is a wrapper around strftime(3) adding error checking // NOTE: not static because used by datetimefmt.cpp @@ -476,7 +476,7 @@ wxString CallStrftime(const wxString& format, const tm* tm) return s; } -#endif // HAVE_STRFTIME +#endif // wxHAS_STRFTIME // if year and/or month have invalid values, replace them with the current ones static void ReplaceDefaultYearMonthWithCurrent(int *year, @@ -803,12 +803,61 @@ wxDateTime::wxDateTime_t wxDateTime::GetNumberOfDays(wxDateTime::Month month, } } +namespace +{ + +// helper function used by GetEnglish/WeekDayName(): returns 0 if flags is +// Name_Full and 1 if it is Name_Abbr or -1 if the flags is incorrect (and +// asserts in this case) +// +// the return value of this function is used as an index into 2D array +// containing full names in its first row and abbreviated ones in the 2nd one +int NameArrayIndexFromFlag(wxDateTime::NameFlags flags) +{ + switch ( flags ) + { + case wxDateTime::Name_Full: + return 0; + + case wxDateTime::Name_Abbr: + return 1; + + default: + wxFAIL_MSG( "unknown wxDateTime::NameFlags value" ); + } + + return -1; +} + +} // anonymous namespace + +/* static */ +wxString wxDateTime::GetEnglishMonthName(Month month, NameFlags flags) +{ + wxCHECK_MSG( month != Inv_Month, wxEmptyString, "invalid month" ); + + static const char *monthNames[2][MONTHS_IN_YEAR] = + { + { "January", "February", "March", "April", "May", "June", + "July", "August", "September", "October", "November", "December" }, + { "Jan", "Feb", "Mar", "Apr", "May", "Jun", + "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" } + }; + + const int idx = NameArrayIndexFromFlag(flags); + if ( idx == -1 ) + return wxString(); + + return monthNames[idx][month]; +} + /* static */ wxString wxDateTime::GetMonthName(wxDateTime::Month month, wxDateTime::NameFlags flags) { +#ifdef wxHAS_STRFTIME wxCHECK_MSG( month != Inv_Month, wxEmptyString, _T("invalid month") ); -#ifdef HAVE_STRFTIME + // notice that we must set all the fields to avoid confusing libc (GNU one // gets confused to a crash if we don't do this) tm tm; @@ -816,57 +865,37 @@ wxString wxDateTime::GetMonthName(wxDateTime::Month month, tm.tm_mon = month; return CallStrftime(flags == Name_Abbr ? _T("%b") : _T("%B"), &tm); -#else // !HAVE_STRFTIME - wxString ret; - switch(month) +#else // !wxHAS_STRFTIME + return GetEnglishMonthName(month, flags); +#endif // wxHAS_STRFTIME/!wxHAS_STRFTIME +} + +/* static */ +wxString wxDateTime::GetEnglishWeekDayName(WeekDay wday, NameFlags flags) +{ + wxCHECK_MSG( wday != Inv_WeekDay, wxEmptyString, _T("invalid weekday") ); + + static const char *weekdayNames[2][DAYS_PER_400_YEARS] = { - case Jan: - ret = (flags == Name_Abbr ? wxT("Jan"): wxT("January")); - break; - case Feb: - ret = (flags == Name_Abbr ? wxT("Feb"): wxT("Febuary")); - break; - case Mar: - ret = (flags == Name_Abbr ? wxT("Mar"): wxT("March")); - break; - case Apr: - ret = (flags == Name_Abbr ? wxT("Apr"): wxT("April")); - break; - case May: - ret = (flags == Name_Abbr ? wxT("May"): wxT("May")); - break; - case Jun: - ret = (flags == Name_Abbr ? wxT("Jun"): wxT("June")); - break; - case Jul: - ret = (flags == Name_Abbr ? wxT("Jul"): wxT("July")); - break; - case Aug: - ret = (flags == Name_Abbr ? wxT("Aug"): wxT("August")); - break; - case Sep: - ret = (flags == Name_Abbr ? wxT("Sep"): wxT("September")); - break; - case Oct: - ret = (flags == Name_Abbr ? wxT("Oct"): wxT("October")); - break; - case Nov: - ret = (flags == Name_Abbr ? wxT("Nov"): wxT("November")); - break; - case Dec: - ret = (flags == Name_Abbr ? wxT("Dec"): wxT("December")); - break; - } - return ret; -#endif // HAVE_STRFTIME/!HAVE_STRFTIME + { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", + "Saturday" }, + { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }, + }; + + const int idx = NameArrayIndexFromFlag(flags); + if ( idx == -1 ) + return wxString(); + + return weekdayNames[idx][wday]; } /* static */ wxString wxDateTime::GetWeekDayName(wxDateTime::WeekDay wday, wxDateTime::NameFlags flags) { +#ifdef wxHAS_STRFTIME wxCHECK_MSG( wday != Inv_WeekDay, wxEmptyString, _T("invalid weekday") ); -#ifdef HAVE_STRFTIME + // take some arbitrary Sunday (but notice that the day should be such that // after adding wday to it below we still have a valid date, e.g. don't // take 28 here!) @@ -884,34 +913,9 @@ wxString wxDateTime::GetWeekDayName(wxDateTime::WeekDay wday, // ... and call strftime() return CallStrftime(flags == Name_Abbr ? _T("%a") : _T("%A"), &tm); -#else // !HAVE_STRFTIME - wxString ret; - switch(wday) - { - case Sun: - ret = (flags == Name_Abbr ? wxT("Sun") : wxT("Sunday")); - break; - case Mon: - ret = (flags == Name_Abbr ? wxT("Mon") : wxT("Monday")); - break; - case Tue: - ret = (flags == Name_Abbr ? wxT("Tue") : wxT("Tuesday")); - break; - case Wed: - ret = (flags == Name_Abbr ? wxT("Wed") : wxT("Wednesday")); - break; - case Thu: - ret = (flags == Name_Abbr ? wxT("Thu") : wxT("Thursday")); - break; - case Fri: - ret = (flags == Name_Abbr ? wxT("Fri") : wxT("Friday")); - break; - case Sat: - ret = (flags == Name_Abbr ? wxT("Sat") : wxT("Saturday")); - break; - } - return ret; -#endif // HAVE_STRFTIME/!HAVE_STRFTIME +#else // !wxHAS_STRFTIME + return GetEnglishWeekDayName(wday, flags); +#endif // wxHAS_STRFTIME/!wxHAS_STRFTIME } /* static */