/****************************************************************************+ −
**+ −
** Copyright (C) 2010 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]+ −