-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://svn.reviewboard.kde.org/r/5692/
-----------------------------------------------------------
(Updated 2010-10-30 22:30:16.219842)
Review request for kdelibs.
Changes
-------
Crikey, what started as a quick one night hack has now taken on a life of it's
own with tentacles reaching everywhere, but it's good to get the new api right
up front then have to hack it around later. I've only posted the
KLocalizedDate implementation, for the upstream KLocale and KCalendarSystem
changes I've only posted the headers as that's the interesting part.
Updates:
1) Added lots of apidox, but still not finished, I just need a day off tomorrow
so I'm posting it so the api can have another going over :-)
2) Figured out how to allow special use case for setting custom Locales and
Calendar Systems, this is fully documented in the apidox.
3) Made readDate() methods static using global local but with option to
override.
4) Added KLocale::WeekNumberSystem enum and api for different Week Number
Systems (originally planned for 4.7), although we only have the ISO Weeks
implemented at the moment.
5) Added KLocale::DateTimeParseMode enum and api for setting strictness of date
parsing (originally planned for 4.7), although only Liberal parsing is
available for now.
6) Removed all the dayString() type methods and replaced them with a single
formatDateComponent() method. This call uses a new KLocale::DateTimeComponent
enum to specify which component to return. This cleans up a lot of messy api.
I've done the enum as flags so in the future we can do dynamic date formats,
e.g. request just a Day and Month and have it automatically formatted correctly
for the locale without needing translations or extra DateFormat enum values
(again something originally planned to start in 4.7)
7) Added a DefaultComponentFormat value to the KLocale::DateTimeComponentFormat
enum so I don't have to hard code default values into the api, allowing the
default to be changed based on locale.
This is all in addition to the new KLocale::CalendarSystem enum I've posted in
a separate review, which KLocalizedDate now uses.
There's a few new enums there that are placeholders for now, but I'd rather get
them into the api now than have to duplicate api later.
Phew!
Summary
-------
The KCalendarSystem api for localizing dates is awkward, inconvenient,
unintuitive, and long-winded, causing many mistakes to be made or localization
to be ignored altogether. This change adds a new KDate class designed to make
localizing dates as easy as using QDate.
Some QDate code may look like:
QDate myDate( aYear, aMonth, aDay );
int doy = myDate.dayOfYear();
The KDE localized date code looks something like:
QDate myDate;
KGlobal::locale()->calendar()->setDate( myDate, aYear, aMonth, aDay );
int doy = KGlobal::locale()->calendar()->dayOfYear( myDate );
The localized KDate code would look like:
KDate myDate( aYear, aMonth, aDay );
int doy = myDate.dayOfYear();
Much easier.
KDate is a thin wrapper around KCalendarSystem and QDate, with a near identical
api to QDate and as such can be used as a drop-in replacement with very few
changes. Some deprecated or unnecessary KCalendarSystem methods have not been
included, but these can still be accessed via the calendar() methods. Some new
convenience methods have also been added such as setCurrentDate() and
addYearsOn().
Some methods have QDate overloads for convenience, and the assignment and
comparison operators partially work with QDate on the rhs. If anyone knows how
to make it work with QDate on the lhs, or any other QDate compatibility ideas,
I'm all ears.
For now I only intend this to be used as a convenience class by apps internally
and not to be used in kdelibs api as I don't see much advantage in that, but I
may do so if the demand for convenience is there.
I have named it KDate, but there is the possibility people may get confused and
think that KDateTime also localizes datetime's, but that is not the case. If
people think this will be a problem KLocalizedDate is an alternative if more
awkward name.
Diffs (updated)
-----
/trunk/KDE/kdelibs/kdecore/date/klocalizeddate.h PRE-CREATION
/trunk/KDE/kdelibs/kdecore/date/kcalendarsystem.h 1191250
/trunk/KDE/kdelibs/kdecore/date/klocalizeddate.cpp PRE-CREATION
/trunk/KDE/kdelibs/kdecore/localization/klocale.h 1191250
Diff: http://svn.reviewboard.kde.org/r/5692/diff
Testing
-------
Full unit tests included.
Thanks,
John