1
/****************************************************************************
3
** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
4
** Contact: http://www.qt-project.org/legal
6
** This file is part of the documentation of the Qt Toolkit.
8
** $QT_BEGIN_LICENSE:BSD$
9
** You may use this file under the terms of the BSD license as follows:
11
** "Redistribution and use in source and binary forms, with or without
12
** modification, are permitted provided that the following conditions are
14
** * Redistributions of source code must retain the above copyright
15
** notice, this list of conditions and the following disclaimer.
16
** * Redistributions in binary form must reproduce the above copyright
17
** notice, this list of conditions and the following disclaimer in
18
** the documentation and/or other materials provided with the
20
** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
21
** of its contributors may be used to endorse or promote products derived
22
** from this software without specific prior written permission.
25
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
39
****************************************************************************/
43
#include "mainwindow.h"
44
#include "xmlwriter.h"
46
MainWindow::MainWindow()
48
QMenu *fileMenu = new QMenu(tr("&File"));
50
QAction *saveAction = fileMenu->addAction(tr("&Save..."));
51
saveAction->setShortcut(tr("Ctrl+S"));
53
QAction *quitAction = fileMenu->addAction(tr("E&xit"));
54
quitAction->setShortcut(tr("Ctrl+Q"));
56
QMenu *insertMenu = new QMenu(tr("&Insert"));
58
QAction *calendarAction = insertMenu->addAction(tr("&Calendar"));
59
calendarAction->setShortcut(tr("Ctrl+I"));
61
menuBar()->addMenu(fileMenu);
62
menuBar()->addMenu(insertMenu);
65
editor = new QTextEdit(this);
68
connect(saveAction, SIGNAL(triggered()), this, SLOT(saveFile()));
69
connect(quitAction, SIGNAL(triggered()), this, SLOT(close()));
70
connect(calendarAction, SIGNAL(triggered()), this, SLOT(insertCalendar()));
72
setCentralWidget(editor);
73
setWindowTitle(tr("Text Document Writer"));
76
void MainWindow::saveFile()
78
QString fileName = QFileDialog::getSaveFileName(this,
79
tr("Save document as:"), "", tr("XML (*.xml)"));
81
if (!fileName.isEmpty()) {
82
if (writeXml(fileName))
83
setWindowTitle(fileName);
85
QMessageBox::warning(this, tr("Warning"),
86
tr("Failed to save the document."), QMessageBox::Cancel,
87
QMessageBox::NoButton);
91
void MainWindow::insertCalendar()
94
QTextCursor cursor(editor->textCursor());
95
cursor.movePosition(QTextCursor::Start);
97
QTextCharFormat format(cursor.charFormat());
98
format.setFontFamily("Courier");
100
QTextCharFormat boldFormat = format;
101
boldFormat.setFontWeight(QFont::Bold);
103
cursor.insertBlock();
104
cursor.insertText(" ", boldFormat);
106
QDate date = QDate::currentDate();
107
int year = date.year(), month = date.month();
109
for (int weekDay = 1; weekDay <= 7; ++weekDay) {
110
cursor.insertText(QString("%1 ").arg(QDate::shortDayName(weekDay), 3),
114
cursor.insertBlock();
115
cursor.insertText(" ", format);
117
for (int column = 1; column < QDate(year, month, 1).dayOfWeek(); ++column) {
118
cursor.insertText(" ", format);
121
for (int day = 1; day <= date.daysInMonth(); ++day) {
123
int weekDay = QDate(year, month, day).dayOfWeek();
125
if (QDate(year, month, day) == date)
126
cursor.insertText(QString("%1 ").arg(day, 3), boldFormat);
128
cursor.insertText(QString("%1 ").arg(day, 3), format);
131
cursor.insertBlock();
132
cursor.insertText(" ", format);
139
bool MainWindow::writeXml(const QString &fileName)
141
XmlWriter documentWriter(editor->document());
143
QDomDocument *domDocument = documentWriter.toXml();
144
QFile file(fileName);
146
if (file.open(QFile::WriteOnly)) {
147
QTextStream textStream(&file);
148
textStream.setCodec(QTextCodec::codecForName("UTF-8"));
150
textStream << domDocument->toString(1).toUtf8();