/**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the examples of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage ** This file contains pre-release code and may not be distributed. ** You may use this file in accordance with the terms and conditions ** contained in the Technology Preview License Agreement accompanying ** this package. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional ** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. ** ** ** ** ** ** ** ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include #include "window.h" //! [0] Window::Window() { createPreviewGroupBox(); createGeneralOptionsGroupBox(); createDatesGroupBox(); createTextFormatsGroupBox(); QGridLayout *layout = new QGridLayout; layout->addWidget(previewGroupBox, 0, 0); layout->addWidget(generalOptionsGroupBox, 0, 1); layout->addWidget(datesGroupBox, 1, 0); layout->addWidget(textFormatsGroupBox, 1, 1); layout->setSizeConstraint(QLayout::SetFixedSize); setLayout(layout); previewLayout->setRowMinimumHeight(0, calendar->sizeHint().height()); previewLayout->setColumnMinimumWidth(0, calendar->sizeHint().width()); setWindowTitle(tr("Calendar Widget")); } //! [0] void Window::localeChanged(int index) { calendar->setLocale(localeCombo->itemData(index).toLocale()); } //! [1] void Window::firstDayChanged(int index) { calendar->setFirstDayOfWeek(Qt::DayOfWeek( firstDayCombo->itemData(index).toInt())); } //! [1] void Window::selectionModeChanged(int index) { calendar->setSelectionMode(QCalendarWidget::SelectionMode( selectionModeCombo->itemData(index).toInt())); } void Window::horizontalHeaderChanged(int index) { calendar->setHorizontalHeaderFormat(QCalendarWidget::HorizontalHeaderFormat( horizontalHeaderCombo->itemData(index).toInt())); } void Window::verticalHeaderChanged(int index) { calendar->setVerticalHeaderFormat(QCalendarWidget::VerticalHeaderFormat( verticalHeaderCombo->itemData(index).toInt())); } //! [2] void Window::selectedDateChanged() { currentDateEdit->setDate(calendar->selectedDate()); } //! [2] //! [3] void Window::minimumDateChanged(const QDate &date) { calendar->setMinimumDate(date); maximumDateEdit->setDate(calendar->maximumDate()); } //! [3] //! [4] void Window::maximumDateChanged(const QDate &date) { calendar->setMaximumDate(date); minimumDateEdit->setDate(calendar->minimumDate()); } //! [4] //! [5] void Window::weekdayFormatChanged() { QTextCharFormat format; format.setForeground(qvariant_cast( weekdayColorCombo->itemData(weekdayColorCombo->currentIndex()))); calendar->setWeekdayTextFormat(Qt::Monday, format); calendar->setWeekdayTextFormat(Qt::Tuesday, format); calendar->setWeekdayTextFormat(Qt::Wednesday, format); calendar->setWeekdayTextFormat(Qt::Thursday, format); calendar->setWeekdayTextFormat(Qt::Friday, format); } //! [5] //! [6] void Window::weekendFormatChanged() { QTextCharFormat format; format.setForeground(qvariant_cast( weekendColorCombo->itemData(weekendColorCombo->currentIndex()))); calendar->setWeekdayTextFormat(Qt::Saturday, format); calendar->setWeekdayTextFormat(Qt::Sunday, format); } //! [6] //! [7] void Window::reformatHeaders() { QString text = headerTextFormatCombo->currentText(); QTextCharFormat format; if (text == tr("Bold")) { format.setFontWeight(QFont::Bold); } else if (text == tr("Italic")) { format.setFontItalic(true); } else if (text == tr("Green")) { format.setForeground(Qt::green); } calendar->setHeaderTextFormat(format); } //! [7] //! [8] void Window::reformatCalendarPage() { if (firstFridayCheckBox->isChecked()) { QDate firstFriday(calendar->yearShown(), calendar->monthShown(), 1); while (firstFriday.dayOfWeek() != Qt::Friday) firstFriday = firstFriday.addDays(1); QTextCharFormat firstFridayFormat; firstFridayFormat.setForeground(Qt::blue); calendar->setDateTextFormat(firstFriday, firstFridayFormat); } //May First in Red takes precedence if (mayFirstCheckBox->isChecked()) { const QDate mayFirst(calendar->yearShown(), 5, 1); QTextCharFormat mayFirstFormat; mayFirstFormat.setForeground(Qt::red); calendar->setDateTextFormat(mayFirst, mayFirstFormat); } } //! [8] //! [9] void Window::createPreviewGroupBox() { previewGroupBox = new QGroupBox(tr("Preview")); calendar = new QCalendarWidget; calendar->setMinimumDate(QDate(1900, 1, 1)); calendar->setMaximumDate(QDate(3000, 1, 1)); calendar->setGridVisible(true); connect(calendar, SIGNAL(currentPageChanged(int, int)), this, SLOT(reformatCalendarPage())); previewLayout = new QGridLayout; previewLayout->addWidget(calendar, 0, 0, Qt::AlignCenter); previewGroupBox->setLayout(previewLayout); } //! [9] //! [10] void Window::createGeneralOptionsGroupBox() { generalOptionsGroupBox = new QGroupBox(tr("General Options")); localeCombo = new QComboBox; int curLocaleIndex = -1; int index = 0; for (int _lang = QLocale::C; _lang <= QLocale::LastLanguage; ++_lang) { QLocale::Language lang = static_cast(_lang); QList countries = QLocale::countriesForLanguage(lang); for (int i = 0; i < countries.count(); ++i) { QLocale::Country country = countries.at(i); QString label = QLocale::languageToString(lang); label += QLatin1Char('/'); label += QLocale::countryToString(country); QLocale locale(lang, country); if (this->locale().language() == lang && this->locale().country() == country) curLocaleIndex = index; localeCombo->addItem(label, locale); ++index; } } if (curLocaleIndex != -1) localeCombo->setCurrentIndex(curLocaleIndex); localeLabel = new QLabel(tr("&Locale")); localeLabel->setBuddy(localeCombo); firstDayCombo = new QComboBox; firstDayCombo->addItem(tr("Sunday"), Qt::Sunday); firstDayCombo->addItem(tr("Monday"), Qt::Monday); firstDayCombo->addItem(tr("Tuesday"), Qt::Tuesday); firstDayCombo->addItem(tr("Wednesday"), Qt::Wednesday); firstDayCombo->addItem(tr("Thursday"), Qt::Thursday); firstDayCombo->addItem(tr("Friday"), Qt::Friday); firstDayCombo->addItem(tr("Saturday"), Qt::Saturday); firstDayLabel = new QLabel(tr("Wee&k starts on:")); firstDayLabel->setBuddy(firstDayCombo); //! [10] selectionModeCombo = new QComboBox; selectionModeCombo->addItem(tr("Single selection"), QCalendarWidget::SingleSelection); selectionModeCombo->addItem(tr("None"), QCalendarWidget::NoSelection); selectionModeLabel = new QLabel(tr("&Selection mode:")); selectionModeLabel->setBuddy(selectionModeCombo); gridCheckBox = new QCheckBox(tr("&Grid")); gridCheckBox->setChecked(calendar->isGridVisible()); navigationCheckBox = new QCheckBox(tr("&Navigation bar")); navigationCheckBox->setChecked(true); horizontalHeaderCombo = new QComboBox; horizontalHeaderCombo->addItem(tr("Single letter day names"), QCalendarWidget::SingleLetterDayNames); horizontalHeaderCombo->addItem(tr("Short day names"), QCalendarWidget::ShortDayNames); horizontalHeaderCombo->addItem(tr("None"), QCalendarWidget::NoHorizontalHeader); horizontalHeaderCombo->setCurrentIndex(1); horizontalHeaderLabel = new QLabel(tr("&Horizontal header:")); horizontalHeaderLabel->setBuddy(horizontalHeaderCombo); verticalHeaderCombo = new QComboBox; verticalHeaderCombo->addItem(tr("ISO week numbers"), QCalendarWidget::ISOWeekNumbers); verticalHeaderCombo->addItem(tr("None"), QCalendarWidget::NoVerticalHeader); verticalHeaderLabel = new QLabel(tr("&Vertical header:")); verticalHeaderLabel->setBuddy(verticalHeaderCombo); //! [11] connect(localeCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(localeChanged(int))); connect(firstDayCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(firstDayChanged(int))); connect(selectionModeCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(selectionModeChanged(int))); connect(gridCheckBox, SIGNAL(toggled(bool)), calendar, SLOT(setGridVisible(bool))); connect(navigationCheckBox, SIGNAL(toggled(bool)), calendar, SLOT(setNavigationBarVisible(bool))); connect(horizontalHeaderCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(horizontalHeaderChanged(int))); connect(verticalHeaderCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(verticalHeaderChanged(int))); //! [11] QHBoxLayout *checkBoxLayout = new QHBoxLayout; checkBoxLayout->addWidget(gridCheckBox); checkBoxLayout->addStretch(); checkBoxLayout->addWidget(navigationCheckBox); QGridLayout *outerLayout = new QGridLayout; outerLayout->addWidget(localeLabel, 0, 0); outerLayout->addWidget(localeCombo, 0, 1); outerLayout->addWidget(firstDayLabel, 1, 0); outerLayout->addWidget(firstDayCombo, 1, 1); outerLayout->addWidget(selectionModeLabel, 2, 0); outerLayout->addWidget(selectionModeCombo, 2, 1); outerLayout->addLayout(checkBoxLayout, 3, 0, 1, 2); outerLayout->addWidget(horizontalHeaderLabel, 4, 0); outerLayout->addWidget(horizontalHeaderCombo, 4, 1); outerLayout->addWidget(verticalHeaderLabel, 5, 0); outerLayout->addWidget(verticalHeaderCombo, 5, 1); generalOptionsGroupBox->setLayout(outerLayout); //! [12] firstDayChanged(firstDayCombo->currentIndex()); selectionModeChanged(selectionModeCombo->currentIndex()); horizontalHeaderChanged(horizontalHeaderCombo->currentIndex()); verticalHeaderChanged(verticalHeaderCombo->currentIndex()); } //! [12] //! [13] void Window::createDatesGroupBox() { datesGroupBox = new QGroupBox(tr("Dates")); minimumDateEdit = new QDateEdit; minimumDateEdit->setDisplayFormat("MMM d yyyy"); minimumDateEdit->setDateRange(calendar->minimumDate(), calendar->maximumDate()); minimumDateEdit->setDate(calendar->minimumDate()); minimumDateLabel = new QLabel(tr("&Minimum Date:")); minimumDateLabel->setBuddy(minimumDateEdit); currentDateEdit = new QDateEdit; currentDateEdit->setDisplayFormat("MMM d yyyy"); currentDateEdit->setDate(calendar->selectedDate()); currentDateEdit->setDateRange(calendar->minimumDate(), calendar->maximumDate()); currentDateLabel = new QLabel(tr("&Current Date:")); currentDateLabel->setBuddy(currentDateEdit); maximumDateEdit = new QDateEdit; maximumDateEdit->setDisplayFormat("MMM d yyyy"); maximumDateEdit->setDateRange(calendar->minimumDate(), calendar->maximumDate()); maximumDateEdit->setDate(calendar->maximumDate()); maximumDateLabel = new QLabel(tr("Ma&ximum Date:")); maximumDateLabel->setBuddy(maximumDateEdit); //! [13] //! [14] connect(currentDateEdit, SIGNAL(dateChanged(const QDate &)), calendar, SLOT(setSelectedDate(const QDate &))); connect(calendar, SIGNAL(selectionChanged()), this, SLOT(selectedDateChanged())); connect(minimumDateEdit, SIGNAL(dateChanged(const QDate &)), this, SLOT(minimumDateChanged(const QDate &))); connect(maximumDateEdit, SIGNAL(dateChanged(const QDate &)), this, SLOT(maximumDateChanged(const QDate &))); //! [14] QGridLayout *dateBoxLayout = new QGridLayout; dateBoxLayout->addWidget(currentDateLabel, 1, 0); dateBoxLayout->addWidget(currentDateEdit, 1, 1); dateBoxLayout->addWidget(minimumDateLabel, 0, 0); dateBoxLayout->addWidget(minimumDateEdit, 0, 1); dateBoxLayout->addWidget(maximumDateLabel, 2, 0); dateBoxLayout->addWidget(maximumDateEdit, 2, 1); dateBoxLayout->setRowStretch(3, 1); datesGroupBox->setLayout(dateBoxLayout); //! [15] } //! [15] //! [16] void Window::createTextFormatsGroupBox() { textFormatsGroupBox = new QGroupBox(tr("Text Formats")); weekdayColorCombo = createColorComboBox(); weekdayColorCombo->setCurrentIndex( weekdayColorCombo->findText(tr("Black"))); weekdayColorLabel = new QLabel(tr("&Weekday color:")); weekdayColorLabel->setBuddy(weekdayColorCombo); weekendColorCombo = createColorComboBox(); weekendColorCombo->setCurrentIndex( weekendColorCombo->findText(tr("Red"))); weekendColorLabel = new QLabel(tr("Week&end color:")); weekendColorLabel->setBuddy(weekendColorCombo); //! [16] //! [17] headerTextFormatCombo = new QComboBox; headerTextFormatCombo->addItem(tr("Bold")); headerTextFormatCombo->addItem(tr("Italic")); headerTextFormatCombo->addItem(tr("Plain")); headerTextFormatLabel = new QLabel(tr("&Header text:")); headerTextFormatLabel->setBuddy(headerTextFormatCombo); firstFridayCheckBox = new QCheckBox(tr("&First Friday in blue")); mayFirstCheckBox = new QCheckBox(tr("May &1 in red")); //! [17] //! [18] connect(weekdayColorCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(weekdayFormatChanged())); connect(weekendColorCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(weekendFormatChanged())); connect(headerTextFormatCombo, SIGNAL(currentIndexChanged(const QString &)), this, SLOT(reformatHeaders())); connect(firstFridayCheckBox, SIGNAL(toggled(bool)), this, SLOT(reformatCalendarPage())); connect(mayFirstCheckBox, SIGNAL(toggled(bool)), this, SLOT(reformatCalendarPage())); //! [18] QHBoxLayout *checkBoxLayout = new QHBoxLayout; checkBoxLayout->addWidget(firstFridayCheckBox); checkBoxLayout->addStretch(); checkBoxLayout->addWidget(mayFirstCheckBox); QGridLayout *outerLayout = new QGridLayout; outerLayout->addWidget(weekdayColorLabel, 0, 0); outerLayout->addWidget(weekdayColorCombo, 0, 1); outerLayout->addWidget(weekendColorLabel, 1, 0); outerLayout->addWidget(weekendColorCombo, 1, 1); outerLayout->addWidget(headerTextFormatLabel, 2, 0); outerLayout->addWidget(headerTextFormatCombo, 2, 1); outerLayout->addLayout(checkBoxLayout, 3, 0, 1, 2); textFormatsGroupBox->setLayout(outerLayout); weekdayFormatChanged(); weekendFormatChanged(); //! [19] reformatHeaders(); reformatCalendarPage(); } //! [19] //! [20] QComboBox *Window::createColorComboBox() { QComboBox *comboBox = new QComboBox; comboBox->addItem(tr("Red"), Qt::red); comboBox->addItem(tr("Blue"), Qt::blue); comboBox->addItem(tr("Black"), Qt::black); comboBox->addItem(tr("Magenta"), Qt::magenta); return comboBox; } //! [20]