summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMitch Curtis <mitch.curtis@nokia.com>2012-06-21 17:44:04 +0200
committerQt by Nokia <qt-info@nokia.com>2012-06-28 17:15:17 +0200
commitab536c3c71deaaa3b67ca87c47628355d9f348e8 (patch)
treea3a7bff9a2f3f0ecc61da1d5f265cdc1502231ab
parent50dfd15dcc49d12c5335a37999aef041d7fdfaae (diff)
Make QCalendarWidget use its locale's firstDayOfWeek.
QCalendarWidget currently uses Qt::Sunday as the default first day of the week. It has been suggested that a better user experience would see the calendar's locale be used instead. Task-number: QTBUG-19811 Change-Id: I4441bf9ffd52213ef622a4a7f498530b7cc9e110 Reviewed-by: Olivier Goffart <ogoffart@woboq.com> Reviewed-by: Denis Dzyubenko <denis.dzyubenko@nokia.com>
-rw-r--r--examples/widgets/calendarwidget/window.cpp5
-rw-r--r--src/widgets/widgets/qcalendarwidget.cpp8
-rw-r--r--tests/auto/widgets/widgets/qcalendarwidget/tst_qcalendarwidget.cpp38
3 files changed, 47 insertions, 4 deletions
diff --git a/examples/widgets/calendarwidget/window.cpp b/examples/widgets/calendarwidget/window.cpp
index 6796ef7f9d..8ba044bf11 100644
--- a/examples/widgets/calendarwidget/window.cpp
+++ b/examples/widgets/calendarwidget/window.cpp
@@ -67,7 +67,10 @@ Window::Window()
void Window::localeChanged(int index)
{
- calendar->setLocale(localeCombo->itemData(index).toLocale());
+ const QLocale newLocale(localeCombo->itemData(index).toLocale());
+ calendar->setLocale(newLocale);
+ int newLocaleFirstDayIndex = firstDayCombo->findData(newLocale.firstDayOfWeek());
+ firstDayCombo->setCurrentIndex(newLocaleFirstDayIndex);
}
//! [1]
diff --git a/src/widgets/widgets/qcalendarwidget.cpp b/src/widgets/widgets/qcalendarwidget.cpp
index 5ac7348217..7830076d0f 100644
--- a/src/widgets/widgets/qcalendarwidget.cpp
+++ b/src/widgets/widgets/qcalendarwidget.cpp
@@ -941,7 +941,7 @@ QCalendarModel::QCalendarModel(QObject *parent)
m_maximumDate = QDate(7999, 12, 31);
m_shownYear = m_date.year();
m_shownMonth = m_date.month();
- m_firstDay = Qt::Sunday;
+ m_firstDay = QLocale().firstDayOfWeek();
m_horizontalHeaderFormat = QCalendarWidget::ShortDayNames;
m_weekNumbersShown = true;
m_firstColumn = 1;
@@ -1987,7 +1987,7 @@ void QCalendarWidgetPrivate::_q_editingFinished()
A newly created calendar widget uses abbreviated day names, and
both Saturdays and Sundays are marked in red. The calendar grid is
not visible. The week numbers are displayed, and the first column
- day is Sunday.
+ day is the first day of the week for the calendar's locale.
The notation of the days can be altered to a single letter
abbreviations ("M" for "Monday") by setting the
@@ -2696,7 +2696,8 @@ void QCalendarWidget::setSelectionMode(SelectionMode mode)
\property QCalendarWidget::firstDayOfWeek
\brief a value identifying the day displayed in the first column.
- By default, the day displayed in the first column is Sunday
+ By default, the day displayed in the first column
+ is the first day of the week for the calendar's locale.
*/
void QCalendarWidget::setFirstDayOfWeek(Qt::DayOfWeek dayOfWeek)
@@ -2997,6 +2998,7 @@ bool QCalendarWidget::event(QEvent *event)
case QEvent::LayoutDirectionChange:
d->updateButtonIcons();
case QEvent::LocaleChange:
+ d->m_model->setFirstColumnDay(locale().firstDayOfWeek());
d->cachedSizeHint = QSize();
d->updateMonthMenuNames();
d->updateNavigationBar();
diff --git a/tests/auto/widgets/widgets/qcalendarwidget/tst_qcalendarwidget.cpp b/tests/auto/widgets/widgets/qcalendarwidget/tst_qcalendarwidget.cpp
index 4857900dc8..1b48278b0a 100644
--- a/tests/auto/widgets/widgets/qcalendarwidget/tst_qcalendarwidget.cpp
+++ b/tests/auto/widgets/widgets/qcalendarwidget/tst_qcalendarwidget.cpp
@@ -73,6 +73,8 @@ private slots:
void setWeekdayFormat();
void showPrevNext_data();
void showPrevNext();
+
+ void firstDayOfWeek();
};
// Testing get/set functions
@@ -361,5 +363,41 @@ void tst_QCalendarWidget::showPrevNext()
}
}
+void tst_QCalendarWidget::firstDayOfWeek()
+{
+ // Ensure the default locale is chosen.
+ QCalendarWidget calendar;
+ QLocale locale;
+ QCOMPARE(calendar.firstDayOfWeek(), locale.firstDayOfWeek());
+
+ QLocale germanLocale(QLocale::German);
+ QLocale::setDefault(germanLocale);
+ QCalendarWidget germanLocaleCalendar;
+ QCOMPARE(germanLocaleCalendar.firstDayOfWeek(), germanLocale.firstDayOfWeek());
+
+ // Ensure calling setLocale works as well.
+ QLocale frenchLocale(QLocale::French);
+ calendar.setLocale(frenchLocale);
+ QCOMPARE(calendar.firstDayOfWeek(), frenchLocale.firstDayOfWeek());
+
+ // Ensure that widget-specific locale takes precedence over default.
+ QLocale::setDefault(QLocale::English);
+ QCOMPARE(calendar.firstDayOfWeek(), frenchLocale.firstDayOfWeek());
+
+ // Ensure that setting the locale of parent widget has an effect.
+ QWidget* parent = new QWidget;
+ calendar.setParent(parent);
+ QLocale hausaLocale(QLocale::Hausa);
+ parent->setLocale(hausaLocale);
+ QCOMPARE(calendar.firstDayOfWeek(), hausaLocale.firstDayOfWeek());
+
+ // Ensure that widget-specific locale takes precedence over parent.
+ calendar.setLocale(germanLocale);
+ // Sanity check...
+ QCOMPARE(calendar.locale(), germanLocale);
+ QCOMPARE(parent->locale(), hausaLocale);
+ QCOMPARE(calendar.firstDayOfWeek(), germanLocale.firstDayOfWeek());
+}
+
QTEST_MAIN(tst_QCalendarWidget)
#include "tst_qcalendarwidget.moc"