diff options
Diffstat (limited to 'examples/richtext/calendar/mainwindow.cpp')
-rw-r--r-- | examples/richtext/calendar/mainwindow.cpp | 214 |
1 files changed, 214 insertions, 0 deletions
diff --git a/examples/richtext/calendar/mainwindow.cpp b/examples/richtext/calendar/mainwindow.cpp new file mode 100644 index 0000000000..5117c03ae4 --- /dev/null +++ b/examples/richtext/calendar/mainwindow.cpp @@ -0,0 +1,214 @@ +/**************************************************************************** +** +** Copyright (C) 2011 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:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtGui> + +#include "mainwindow.h" + +//! [0] +MainWindow::MainWindow() +{ + selectedDate = QDate::currentDate(); + fontSize = 10; + + QWidget *centralWidget = new QWidget; +//! [0] + +//! [1] + QLabel *dateLabel = new QLabel(tr("Date:")); + QComboBox *monthCombo = new QComboBox; + + for (int month = 1; month <= 12; ++month) + monthCombo->addItem(QDate::longMonthName(month)); + + QDateTimeEdit *yearEdit = new QDateTimeEdit; + yearEdit->setDisplayFormat("yyyy"); + yearEdit->setDateRange(QDate(1753, 1, 1), QDate(8000, 1, 1)); +//! [1] + + monthCombo->setCurrentIndex(selectedDate.month() - 1); + yearEdit->setDate(selectedDate); + +//! [2] + QLabel *fontSizeLabel = new QLabel(tr("Font size:")); + QSpinBox *fontSizeSpinBox = new QSpinBox; + fontSizeSpinBox->setRange(1, 64); + fontSizeSpinBox->setValue(10); + + editor = new QTextBrowser; + insertCalendar(); +//! [2] + +//! [3] + connect(monthCombo, SIGNAL(activated(int)), this, SLOT(setMonth(int))); + connect(yearEdit, SIGNAL(dateChanged(QDate)), this, SLOT(setYear(QDate))); + connect(fontSizeSpinBox, SIGNAL(valueChanged(int)), + this, SLOT(setFontSize(int))); +//! [3] + +//! [4] + QHBoxLayout *controlsLayout = new QHBoxLayout; + controlsLayout->addWidget(dateLabel); + controlsLayout->addWidget(monthCombo); + controlsLayout->addWidget(yearEdit); + controlsLayout->addSpacing(24); + controlsLayout->addWidget(fontSizeLabel); + controlsLayout->addWidget(fontSizeSpinBox); + controlsLayout->addStretch(1); + + QVBoxLayout *centralLayout = new QVBoxLayout; + centralLayout->addLayout(controlsLayout); + centralLayout->addWidget(editor, 1); + centralWidget->setLayout(centralLayout); + + setCentralWidget(centralWidget); +//! [4] +} + +//! [5] +void MainWindow::insertCalendar() +{ + editor->clear(); + QTextCursor cursor = editor->textCursor(); + cursor.beginEditBlock(); + + QDate date(selectedDate.year(), selectedDate.month(), 1); +//! [5] + +//! [6] + QTextTableFormat tableFormat; + tableFormat.setAlignment(Qt::AlignHCenter); + tableFormat.setBackground(QColor("#e0e0e0")); + tableFormat.setCellPadding(2); + tableFormat.setCellSpacing(4); +//! [6] //! [7] + QVector<QTextLength> constraints; + constraints << QTextLength(QTextLength::PercentageLength, 14) + << QTextLength(QTextLength::PercentageLength, 14) + << QTextLength(QTextLength::PercentageLength, 14) + << QTextLength(QTextLength::PercentageLength, 14) + << QTextLength(QTextLength::PercentageLength, 14) + << QTextLength(QTextLength::PercentageLength, 14) + << QTextLength(QTextLength::PercentageLength, 14); + tableFormat.setColumnWidthConstraints(constraints); +//! [7] + +//! [8] + QTextTable *table = cursor.insertTable(1, 7, tableFormat); +//! [8] + +//! [9] + QTextFrame *frame = cursor.currentFrame(); + QTextFrameFormat frameFormat = frame->frameFormat(); + frameFormat.setBorder(1); + frame->setFrameFormat(frameFormat); +//! [9] + +//! [10] + QTextCharFormat format = cursor.charFormat(); + format.setFontPointSize(fontSize); + + QTextCharFormat boldFormat = format; + boldFormat.setFontWeight(QFont::Bold); + + QTextCharFormat highlightedFormat = boldFormat; + highlightedFormat.setBackground(Qt::yellow); +//! [10] + +//! [11] + for (int weekDay = 1; weekDay <= 7; ++weekDay) { + QTextTableCell cell = table->cellAt(0, weekDay-1); +//! [11] //! [12] + QTextCursor cellCursor = cell.firstCursorPosition(); + cellCursor.insertText(QString("%1").arg(QDate::longDayName(weekDay)), + boldFormat); + } +//! [12] + +//! [13] + table->insertRows(table->rows(), 1); +//! [13] + + while (date.month() == selectedDate.month()) { + int weekDay = date.dayOfWeek(); + QTextTableCell cell = table->cellAt(table->rows()-1, weekDay-1); + QTextCursor cellCursor = cell.firstCursorPosition(); + + if (date == QDate::currentDate()) + cellCursor.insertText(QString("%1").arg(date.day()), highlightedFormat); + else + cellCursor.insertText(QString("%1").arg(date.day()), format); + + date = date.addDays(1); + if (weekDay == 7 && date.month() == selectedDate.month()) + table->insertRows(table->rows(), 1); + } + + cursor.endEditBlock(); +//! [14] + setWindowTitle(tr("Calendar for %1 %2" + ).arg(QDate::longMonthName(selectedDate.month()) + ).arg(selectedDate.year())); +} +//! [14] + +//! [15] +void MainWindow::setFontSize(int size) +{ + fontSize = size; + insertCalendar(); +} +//! [15] + +//! [16] +void MainWindow::setMonth(int month) +{ + selectedDate = QDate(selectedDate.year(), month + 1, selectedDate.day()); + insertCalendar(); +} +//! [16] + +//! [17] +void MainWindow::setYear(QDate date) +{ + selectedDate = QDate(date.year(), selectedDate.month(), selectedDate.day()); + insertCalendar(); +} +//! [17] |