examples/widgets/calendarwidget/window.cpp
changeset 0 1918ee327afb
child 3 41300fa6a67c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/widgets/calendarwidget/window.cpp	Mon Jan 11 14:00:40 2010 +0000
@@ -0,0 +1,462 @@
+/****************************************************************************
+**
+** 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 <QtGui>
+
+#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<QColor>(
+        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<QColor>(
+        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<QLocale::Language>(_lang);
+        QList<QLocale::Country> 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]