diff options
Diffstat (limited to 'examples/richtext')
-rw-r--r-- | examples/richtext/README | 42 | ||||
-rw-r--r-- | examples/richtext/calendar/calendar.pro | 11 | ||||
-rw-r--r-- | examples/richtext/calendar/main.cpp | 52 | ||||
-rw-r--r-- | examples/richtext/calendar/mainwindow.cpp | 214 | ||||
-rw-r--r-- | examples/richtext/calendar/mainwindow.h | 73 | ||||
-rw-r--r-- | examples/richtext/orderform/detailsdialog.cpp | 156 | ||||
-rw-r--r-- | examples/richtext/orderform/detailsdialog.h | 90 | ||||
-rw-r--r-- | examples/richtext/orderform/main.cpp | 55 | ||||
-rw-r--r-- | examples/richtext/orderform/mainwindow.cpp | 249 | ||||
-rw-r--r-- | examples/richtext/orderform/mainwindow.h | 76 | ||||
-rw-r--r-- | examples/richtext/orderform/orderform.pro | 13 | ||||
-rw-r--r-- | examples/richtext/richtext.pro | 14 | ||||
-rw-r--r-- | examples/richtext/syntaxhighlighter/highlighter.cpp | 147 | ||||
-rw-r--r-- | examples/richtext/syntaxhighlighter/highlighter.h | 84 | ||||
-rw-r--r-- | examples/richtext/syntaxhighlighter/main.cpp | 52 | ||||
-rw-r--r-- | examples/richtext/syntaxhighlighter/mainwindow.cpp | 128 | ||||
-rw-r--r-- | examples/richtext/syntaxhighlighter/mainwindow.h | 75 | ||||
-rw-r--r-- | examples/richtext/syntaxhighlighter/syntaxhighlighter.pro | 19 |
18 files changed, 1550 insertions, 0 deletions
diff --git a/examples/richtext/README b/examples/richtext/README new file mode 100644 index 0000000000..6697b237f5 --- /dev/null +++ b/examples/richtext/README @@ -0,0 +1,42 @@ +Qt provides powerful document-oriented rich text engine that supports Unicode +and right-to-left scripts. Documents can be manipulated using a cursor-based +API, and their contents can be imported and exported as both HTML and in a +custom XML format. + +Text is rendered using anti-aliased outline fonts to provide the best +possible on-screen representation. + + +The example launcher provided with Qt can be used to explore each of the +examples in this directory. + +Documentation for these examples can be found via the Tutorial and Examples +link in the main Qt documentation. + + +Finding the Qt Examples and Demos launcher +========================================== + +On Windows: + +The launcher can be accessed via the Windows Start menu. Select the menu +entry entitled "Qt Examples and Demos" entry in the submenu containing +the Qt tools. + +On Mac OS X: + +For the binary distribution, the qtdemo executable is installed in the +/Developer/Applications/Qt directory. For the source distribution, it is +installed alongside the other Qt tools on the path specified when Qt is +configured. + +On Unix/Linux: + +The qtdemo executable is installed alongside the other Qt tools on the path +specified when Qt is configured. + +On all platforms: + +The source code for the launcher can be found in the demos/qtdemo directory +in the Qt package. This example is built at the same time as the Qt libraries, +tools, examples, and demonstrations. diff --git a/examples/richtext/calendar/calendar.pro b/examples/richtext/calendar/calendar.pro new file mode 100644 index 0000000000..5f53ed4cea --- /dev/null +++ b/examples/richtext/calendar/calendar.pro @@ -0,0 +1,11 @@ +HEADERS = mainwindow.h +SOURCES = main.cpp \ + mainwindow.cpp + +# install +target.path = $$[QT_INSTALL_EXAMPLES]/qtbase/richtext/calendar +sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS calendar.pro +sources.path = $$[QT_INSTALL_EXAMPLES]/qtbase/richtext/calendar +INSTALLS += target sources + +symbian: include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri) diff --git a/examples/richtext/calendar/main.cpp b/examples/richtext/calendar/main.cpp new file mode 100644 index 0000000000..b23e883e24 --- /dev/null +++ b/examples/richtext/calendar/main.cpp @@ -0,0 +1,52 @@ +/**************************************************************************** +** +** 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" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + MainWindow window; + window.resize(640, 256); + window.show(); + return app.exec(); +} 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] diff --git a/examples/richtext/calendar/mainwindow.h b/examples/richtext/calendar/mainwindow.h new file mode 100644 index 0000000000..a9cf5216a7 --- /dev/null +++ b/examples/richtext/calendar/mainwindow.h @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** 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$ +** +****************************************************************************/ + +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include <QDate> +#include <QMainWindow> + +QT_BEGIN_NAMESPACE +class QTextBrowser; +QT_END_NAMESPACE + +//! [0] +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(); + +public slots: + void setFontSize(int size); + void setMonth(int month); + void setYear(QDate date); + +private: + void insertCalendar(); + + int fontSize; + QDate selectedDate; + QTextBrowser *editor; +}; +//! [0] + +#endif diff --git a/examples/richtext/orderform/detailsdialog.cpp b/examples/richtext/orderform/detailsdialog.cpp new file mode 100644 index 0000000000..9aa8535c5b --- /dev/null +++ b/examples/richtext/orderform/detailsdialog.cpp @@ -0,0 +1,156 @@ +/**************************************************************************** +** +** 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 "detailsdialog.h" + +//! [0] +DetailsDialog::DetailsDialog(const QString &title, QWidget *parent) + : QDialog(parent) +{ + nameLabel = new QLabel(tr("Name:")); + addressLabel = new QLabel(tr("Address:")); + addressLabel->setAlignment(Qt::AlignLeft | Qt::AlignTop); + + nameEdit = new QLineEdit; + addressEdit = new QTextEdit; + + offersCheckBox = new QCheckBox(tr("Send information about products and " + "special offers")); + + setupItemsTable(); + + buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok + | QDialogButtonBox::Cancel); + + connect(buttonBox, SIGNAL(accepted()), this, SLOT(verify())); + connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject())); +//! [0] + +//! [1] + QGridLayout *mainLayout = new QGridLayout; + mainLayout->addWidget(nameLabel, 0, 0); + mainLayout->addWidget(nameEdit, 0, 1); + mainLayout->addWidget(addressLabel, 1, 0); + mainLayout->addWidget(addressEdit, 1, 1); + mainLayout->addWidget(itemsTable, 0, 2, 2, 1); + mainLayout->addWidget(offersCheckBox, 2, 1, 1, 2); + mainLayout->addWidget(buttonBox, 3, 0, 1, 3); + setLayout(mainLayout); + + setWindowTitle(title); +} +//! [1] + +//! [2] +void DetailsDialog::setupItemsTable() +{ + items << tr("T-shirt") << tr("Badge") << tr("Reference book") + << tr("Coffee cup"); + + itemsTable = new QTableWidget(items.count(), 2); + + for (int row = 0; row < items.count(); ++row) { + QTableWidgetItem *name = new QTableWidgetItem(items[row]); + name->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable); + itemsTable->setItem(row, 0, name); + QTableWidgetItem *quantity = new QTableWidgetItem("1"); + itemsTable->setItem(row, 1, quantity); + } +} +//! [2] + +//! [3] +QList<QPair<QString, int> > DetailsDialog::orderItems() +{ + QList<QPair<QString, int> > orderList; + + for (int row = 0; row < items.count(); ++row) { + QPair<QString, int> item; + item.first = itemsTable->item(row, 0)->text(); + int quantity = itemsTable->item(row, 1)->data(Qt::DisplayRole).toInt(); + item.second = qMax(0, quantity); + orderList.append(item); + } + + return orderList; +} +//! [3] + +//! [4] +QString DetailsDialog::senderName() const +{ + return nameEdit->text(); +} +//! [4] + +//! [5] +QString DetailsDialog::senderAddress() const +{ + return addressEdit->toPlainText(); +} +//! [5] + +//! [6] +bool DetailsDialog::sendOffers() +{ + return offersCheckBox->isChecked(); +} +//! [6] + +//! [7] +void DetailsDialog::verify() +{ + if (!nameEdit->text().isEmpty() && !addressEdit->toPlainText().isEmpty()) { + accept(); + return; + } + + QMessageBox::StandardButton answer; + answer = QMessageBox::warning(this, tr("Incomplete Form"), + tr("The form does not contain all the necessary information.\n" + "Do you want to discard it?"), + QMessageBox::Yes | QMessageBox::No); + + if (answer == QMessageBox::Yes) + reject(); +} +//! [7] diff --git a/examples/richtext/orderform/detailsdialog.h b/examples/richtext/orderform/detailsdialog.h new file mode 100644 index 0000000000..dea3ea125e --- /dev/null +++ b/examples/richtext/orderform/detailsdialog.h @@ -0,0 +1,90 @@ +/**************************************************************************** +** +** 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$ +** +****************************************************************************/ + +#ifndef DETAILSDIALOG_H +#define DETAILSDIALOG_H + +#include <QDialog> +#include <QList> +#include <QPair> +#include <QString> + +QT_BEGIN_NAMESPACE +class QCheckBox; +class QDialogButtonBox; +class QLabel; +class QLineEdit; +class QTableWidget; +class QTextEdit; +class QWidget; +QT_END_NAMESPACE + +//! [0] +class DetailsDialog : public QDialog +{ + Q_OBJECT + +public: + DetailsDialog(const QString &title, QWidget *parent); + +public slots: + void verify(); + +public: + QList<QPair<QString, int> > orderItems(); + QString senderName() const; + QString senderAddress() const; + bool sendOffers(); + +private: + void setupItemsTable(); + + QLabel *nameLabel; + QLabel *addressLabel; + QCheckBox *offersCheckBox; + QLineEdit *nameEdit; + QStringList items; + QTableWidget *itemsTable; + QTextEdit *addressEdit; + QDialogButtonBox *buttonBox; +}; +//! [0] + +#endif diff --git a/examples/richtext/orderform/main.cpp b/examples/richtext/orderform/main.cpp new file mode 100644 index 0000000000..3ad32b8e4e --- /dev/null +++ b/examples/richtext/orderform/main.cpp @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** 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] +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + MainWindow window; + window.resize(640, 480); + window.show(); + window.createSample(); + return app.exec(); +} +//! [0] diff --git a/examples/richtext/orderform/mainwindow.cpp b/examples/richtext/orderform/mainwindow.cpp new file mode 100644 index 0000000000..e08f3ba9d3 --- /dev/null +++ b/examples/richtext/orderform/mainwindow.cpp @@ -0,0 +1,249 @@ +/**************************************************************************** +** +** 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 "detailsdialog.h" +#include "mainwindow.h" + +//! [0] +MainWindow::MainWindow() +{ + QMenu *fileMenu = new QMenu(tr("&File"), this); + QAction *newAction = fileMenu->addAction(tr("&New...")); + newAction->setShortcuts(QKeySequence::New); + printAction = fileMenu->addAction(tr("&Print..."), this, SLOT(printFile())); + printAction->setShortcuts(QKeySequence::Print); + printAction->setEnabled(false); + QAction *quitAction = fileMenu->addAction(tr("E&xit")); + quitAction->setShortcuts(QKeySequence::Quit); + menuBar()->addMenu(fileMenu); + + letters = new QTabWidget; + + connect(newAction, SIGNAL(triggered()), this, SLOT(openDialog())); + connect(quitAction, SIGNAL(triggered()), this, SLOT(close())); + + setCentralWidget(letters); + setWindowTitle(tr("Order Form")); +} +//! [0] + +//! [1] +void MainWindow::createLetter(const QString &name, const QString &address, + QList<QPair<QString,int> > orderItems, + bool sendOffers) +{ + QTextEdit *editor = new QTextEdit; + int tabIndex = letters->addTab(editor, name); + letters->setCurrentIndex(tabIndex); +//! [1] + +//! [2] + QTextCursor cursor(editor->textCursor()); + cursor.movePosition(QTextCursor::Start); +//! [2] //! [3] + QTextFrame *topFrame = cursor.currentFrame(); + QTextFrameFormat topFrameFormat = topFrame->frameFormat(); + topFrameFormat.setPadding(16); + topFrame->setFrameFormat(topFrameFormat); + + QTextCharFormat textFormat; + QTextCharFormat boldFormat; + boldFormat.setFontWeight(QFont::Bold); + + QTextFrameFormat referenceFrameFormat; + referenceFrameFormat.setBorder(1); + referenceFrameFormat.setPadding(8); + referenceFrameFormat.setPosition(QTextFrameFormat::FloatRight); + referenceFrameFormat.setWidth(QTextLength(QTextLength::PercentageLength, 40)); + cursor.insertFrame(referenceFrameFormat); + + cursor.insertText("A company", boldFormat); + cursor.insertBlock(); + cursor.insertText("321 City Street"); + cursor.insertBlock(); + cursor.insertText("Industry Park"); + cursor.insertBlock(); + cursor.insertText("Another country"); +//! [3] + +//! [4] + cursor.setPosition(topFrame->lastPosition()); + + cursor.insertText(name, textFormat); + QString line; + foreach (line, address.split("\n")) { + cursor.insertBlock(); + cursor.insertText(line); + } +//! [4] //! [5] + cursor.insertBlock(); + cursor.insertBlock(); + + QDate date = QDate::currentDate(); + cursor.insertText(tr("Date: %1").arg(date.toString("d MMMM yyyy")), + textFormat); + cursor.insertBlock(); + + QTextFrameFormat bodyFrameFormat; + bodyFrameFormat.setWidth(QTextLength(QTextLength::PercentageLength, 100)); + cursor.insertFrame(bodyFrameFormat); +//! [5] + +//! [6] + cursor.insertText(tr("I would like to place an order for the following " + "items:"), textFormat); + cursor.insertBlock(); +//! [6] //! [7] + cursor.insertBlock(); +//! [7] + +//! [8] + QTextTableFormat orderTableFormat; + orderTableFormat.setAlignment(Qt::AlignHCenter); + QTextTable *orderTable = cursor.insertTable(1, 2, orderTableFormat); + + QTextFrameFormat orderFrameFormat = cursor.currentFrame()->frameFormat(); + orderFrameFormat.setBorder(1); + cursor.currentFrame()->setFrameFormat(orderFrameFormat); +//! [8] + +//! [9] + cursor = orderTable->cellAt(0, 0).firstCursorPosition(); + cursor.insertText(tr("Product"), boldFormat); + cursor = orderTable->cellAt(0, 1).firstCursorPosition(); + cursor.insertText(tr("Quantity"), boldFormat); +//! [9] + +//! [10] + for (int i = 0; i < orderItems.count(); ++i) { + QPair<QString,int> item = orderItems[i]; + int row = orderTable->rows(); + + orderTable->insertRows(row, 1); + cursor = orderTable->cellAt(row, 0).firstCursorPosition(); + cursor.insertText(item.first, textFormat); + cursor = orderTable->cellAt(row, 1).firstCursorPosition(); + cursor.insertText(QString("%1").arg(item.second), textFormat); + } +//! [10] + +//! [11] + cursor.setPosition(topFrame->lastPosition()); + + cursor.insertBlock(); +//! [11] //! [12] + cursor.insertText(tr("Please update my records to take account of the " + "following privacy information:")); + cursor.insertBlock(); +//! [12] + +//! [13] + QTextTable *offersTable = cursor.insertTable(2, 2); + + cursor = offersTable->cellAt(0, 1).firstCursorPosition(); + cursor.insertText(tr("I want to receive more information about your " + "company's products and special offers."), textFormat); + cursor = offersTable->cellAt(1, 1).firstCursorPosition(); + cursor.insertText(tr("I do not want to receive any promotional information " + "from your company."), textFormat); + + if (sendOffers) + cursor = offersTable->cellAt(0, 0).firstCursorPosition(); + else + cursor = offersTable->cellAt(1, 0).firstCursorPosition(); + + cursor.insertText("X", boldFormat); +//! [13] + +//! [14] + cursor.setPosition(topFrame->lastPosition()); + cursor.insertBlock(); + cursor.insertText(tr("Sincerely,"), textFormat); + cursor.insertBlock(); + cursor.insertBlock(); + cursor.insertBlock(); + cursor.insertText(name); + + printAction->setEnabled(true); +} +//! [14] + +//! [15] +void MainWindow::createSample() +{ + DetailsDialog dialog("Dialog with default values", this); + createLetter("Mr. Smith", "12 High Street\nSmall Town\nThis country", + dialog.orderItems(), true); +} +//! [15] + +//! [16] +void MainWindow::openDialog() +{ + DetailsDialog dialog(tr("Enter Customer Details"), this); + + if (dialog.exec() == QDialog::Accepted) + createLetter(dialog.senderName(), dialog.senderAddress(), + dialog.orderItems(), dialog.sendOffers()); +} +//! [16] + +//! [17] +void MainWindow::printFile() +{ +#ifndef QT_NO_PRINTER + QTextEdit *editor = static_cast<QTextEdit*>(letters->currentWidget()); +//! [18] + QPrinter printer; + + QPrintDialog *dialog = new QPrintDialog(&printer, this); + dialog->setWindowTitle(tr("Print Document")); + if (editor->textCursor().hasSelection()) + dialog->addEnabledOption(QAbstractPrintDialog::PrintSelection); + if (dialog->exec() != QDialog::Accepted) + return; +//! [18] + + editor->print(&printer); +#endif +} +//! [17] diff --git a/examples/richtext/orderform/mainwindow.h b/examples/richtext/orderform/mainwindow.h new file mode 100644 index 0000000000..af923f9760 --- /dev/null +++ b/examples/richtext/orderform/mainwindow.h @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** 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$ +** +****************************************************************************/ + +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include <QList> +#include <QMainWindow> +#include <QPair> + +QT_BEGIN_NAMESPACE +class QAction; +class QTabWidget; +QT_END_NAMESPACE + +//! [0] +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(); + void createSample(); + +public slots: + void openDialog(); + void printFile(); + +private: + void createLetter(const QString &name, const QString &address, + QList<QPair<QString,int> > orderItems, + bool sendOffers); + + QAction *printAction; + QTabWidget *letters; +}; +//! [0] + +#endif diff --git a/examples/richtext/orderform/orderform.pro b/examples/richtext/orderform/orderform.pro new file mode 100644 index 0000000000..6a5041ba70 --- /dev/null +++ b/examples/richtext/orderform/orderform.pro @@ -0,0 +1,13 @@ +HEADERS = detailsdialog.h \ + mainwindow.h +SOURCES = detailsdialog.cpp \ + main.cpp \ + mainwindow.cpp + +# install +target.path = $$[QT_INSTALL_EXAMPLES]/qtbase/richtext/orderform +sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS orderform.pro +sources.path = $$[QT_INSTALL_EXAMPLES]/qtbase/richtext/orderform +INSTALLS += target sources + +symbian: include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri) diff --git a/examples/richtext/richtext.pro b/examples/richtext/richtext.pro new file mode 100644 index 0000000000..aec3936833 --- /dev/null +++ b/examples/richtext/richtext.pro @@ -0,0 +1,14 @@ +TEMPLATE = subdirs +SUBDIRS = calendar \ + orderform \ + syntaxhighlighter + +contains(QT_CONFIG, svg): SUBDIRS += textobject + +# install +target.path = $$[QT_INSTALL_EXAMPLES]/qtbase/richtext +sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS richtext.pro README +sources.path = $$[QT_INSTALL_EXAMPLES]/qtbase/richtext +INSTALLS += target sources + +symbian: include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri) diff --git a/examples/richtext/syntaxhighlighter/highlighter.cpp b/examples/richtext/syntaxhighlighter/highlighter.cpp new file mode 100644 index 0000000000..b51aa873a6 --- /dev/null +++ b/examples/richtext/syntaxhighlighter/highlighter.cpp @@ -0,0 +1,147 @@ +/**************************************************************************** +** +** 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 "highlighter.h" + +//! [0] +Highlighter::Highlighter(QTextDocument *parent) + : QSyntaxHighlighter(parent) +{ + HighlightingRule rule; + + keywordFormat.setForeground(Qt::darkBlue); + keywordFormat.setFontWeight(QFont::Bold); + QStringList keywordPatterns; + keywordPatterns << "\\bchar\\b" << "\\bclass\\b" << "\\bconst\\b" + << "\\bdouble\\b" << "\\benum\\b" << "\\bexplicit\\b" + << "\\bfriend\\b" << "\\binline\\b" << "\\bint\\b" + << "\\blong\\b" << "\\bnamespace\\b" << "\\boperator\\b" + << "\\bprivate\\b" << "\\bprotected\\b" << "\\bpublic\\b" + << "\\bshort\\b" << "\\bsignals\\b" << "\\bsigned\\b" + << "\\bslots\\b" << "\\bstatic\\b" << "\\bstruct\\b" + << "\\btemplate\\b" << "\\btypedef\\b" << "\\btypename\\b" + << "\\bunion\\b" << "\\bunsigned\\b" << "\\bvirtual\\b" + << "\\bvoid\\b" << "\\bvolatile\\b"; + foreach (const QString &pattern, keywordPatterns) { + rule.pattern = QRegExp(pattern); + rule.format = keywordFormat; + highlightingRules.append(rule); +//! [0] //! [1] + } +//! [1] + +//! [2] + classFormat.setFontWeight(QFont::Bold); + classFormat.setForeground(Qt::darkMagenta); + rule.pattern = QRegExp("\\bQ[A-Za-z]+\\b"); + rule.format = classFormat; + highlightingRules.append(rule); +//! [2] + +//! [3] + singleLineCommentFormat.setForeground(Qt::red); + rule.pattern = QRegExp("//[^\n]*"); + rule.format = singleLineCommentFormat; + highlightingRules.append(rule); + + multiLineCommentFormat.setForeground(Qt::red); +//! [3] + +//! [4] + quotationFormat.setForeground(Qt::darkGreen); + rule.pattern = QRegExp("\".*\""); + rule.format = quotationFormat; + highlightingRules.append(rule); +//! [4] + +//! [5] + functionFormat.setFontItalic(true); + functionFormat.setForeground(Qt::blue); + rule.pattern = QRegExp("\\b[A-Za-z0-9_]+(?=\\()"); + rule.format = functionFormat; + highlightingRules.append(rule); +//! [5] + +//! [6] + commentStartExpression = QRegExp("/\\*"); + commentEndExpression = QRegExp("\\*/"); +} +//! [6] + +//! [7] +void Highlighter::highlightBlock(const QString &text) +{ + foreach (const HighlightingRule &rule, highlightingRules) { + QRegExp expression(rule.pattern); + int index = expression.indexIn(text); + while (index >= 0) { + int length = expression.matchedLength(); + setFormat(index, length, rule.format); + index = expression.indexIn(text, index + length); + } + } +//! [7] //! [8] + setCurrentBlockState(0); +//! [8] + +//! [9] + int startIndex = 0; + if (previousBlockState() != 1) + startIndex = commentStartExpression.indexIn(text); + +//! [9] //! [10] + while (startIndex >= 0) { +//! [10] //! [11] + int endIndex = commentEndExpression.indexIn(text, startIndex); + int commentLength; + if (endIndex == -1) { + setCurrentBlockState(1); + commentLength = text.length() - startIndex; + } else { + commentLength = endIndex - startIndex + + commentEndExpression.matchedLength(); + } + setFormat(startIndex, commentLength, multiLineCommentFormat); + startIndex = commentStartExpression.indexIn(text, startIndex + commentLength); + } +} +//! [11] diff --git a/examples/richtext/syntaxhighlighter/highlighter.h b/examples/richtext/syntaxhighlighter/highlighter.h new file mode 100644 index 0000000000..5bc69fc218 --- /dev/null +++ b/examples/richtext/syntaxhighlighter/highlighter.h @@ -0,0 +1,84 @@ +/**************************************************************************** +** +** 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$ +** +****************************************************************************/ + +#ifndef HIGHLIGHTER_H +#define HIGHLIGHTER_H + +#include <QSyntaxHighlighter> + +#include <QHash> +#include <QTextCharFormat> + +QT_BEGIN_NAMESPACE +class QTextDocument; +QT_END_NAMESPACE + +//! [0] +class Highlighter : public QSyntaxHighlighter +{ + Q_OBJECT + +public: + Highlighter(QTextDocument *parent = 0); + +protected: + void highlightBlock(const QString &text); + +private: + struct HighlightingRule + { + QRegExp pattern; + QTextCharFormat format; + }; + QVector<HighlightingRule> highlightingRules; + + QRegExp commentStartExpression; + QRegExp commentEndExpression; + + QTextCharFormat keywordFormat; + QTextCharFormat classFormat; + QTextCharFormat singleLineCommentFormat; + QTextCharFormat multiLineCommentFormat; + QTextCharFormat quotationFormat; + QTextCharFormat functionFormat; +}; +//! [0] + +#endif diff --git a/examples/richtext/syntaxhighlighter/main.cpp b/examples/richtext/syntaxhighlighter/main.cpp new file mode 100644 index 0000000000..eecfb12bdc --- /dev/null +++ b/examples/richtext/syntaxhighlighter/main.cpp @@ -0,0 +1,52 @@ +/**************************************************************************** +** +** 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 <QApplication> + +#include "mainwindow.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + MainWindow window; + window.resize(640, 512); + window.show(); + return app.exec(); +} diff --git a/examples/richtext/syntaxhighlighter/mainwindow.cpp b/examples/richtext/syntaxhighlighter/mainwindow.cpp new file mode 100644 index 0000000000..0d64489993 --- /dev/null +++ b/examples/richtext/syntaxhighlighter/mainwindow.cpp @@ -0,0 +1,128 @@ +/**************************************************************************** +** +** 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(QWidget *parent) + : QMainWindow(parent) +{ + setupFileMenu(); + setupHelpMenu(); + setupEditor(); + + setCentralWidget(editor); + setWindowTitle(tr("Syntax Highlighter")); +} +//! [0] + +void MainWindow::about() +{ + QMessageBox::about(this, tr("About Syntax Highlighter"), + tr("<p>The <b>Syntax Highlighter</b> example shows how " \ + "to perform simple syntax highlighting by subclassing " \ + "the QSyntaxHighlighter class and describing " \ + "highlighting rules using regular expressions.</p>")); +} + +void MainWindow::newFile() +{ + editor->clear(); +} + +void MainWindow::openFile(const QString &path) +{ + QString fileName = path; + + if (fileName.isNull()) + fileName = QFileDialog::getOpenFileName(this, + tr("Open File"), "", "C++ Files (*.cpp *.h)"); + + if (!fileName.isEmpty()) { + QFile file(fileName); + if (file.open(QFile::ReadOnly | QFile::Text)) + editor->setPlainText(file.readAll()); + } +} + +//! [1] +void MainWindow::setupEditor() +{ + QFont font; + font.setFamily("Courier"); + font.setFixedPitch(true); + font.setPointSize(10); + + editor = new QTextEdit; + editor->setFont(font); + + highlighter = new Highlighter(editor->document()); + + QFile file("mainwindow.h"); + if (file.open(QFile::ReadOnly | QFile::Text)) + editor->setPlainText(file.readAll()); +} +//! [1] + +void MainWindow::setupFileMenu() +{ + QMenu *fileMenu = new QMenu(tr("&File"), this); + menuBar()->addMenu(fileMenu); + + fileMenu->addAction(tr("&New"), this, SLOT(newFile()), + QKeySequence::New); + + fileMenu->addAction(tr("&Open..."), this, SLOT(openFile()), + QKeySequence::Open); + + fileMenu->addAction(tr("E&xit"), qApp, SLOT(quit()), + QKeySequence::Quit); +} + +void MainWindow::setupHelpMenu() +{ + QMenu *helpMenu = new QMenu(tr("&Help"), this); + menuBar()->addMenu(helpMenu); + + helpMenu->addAction(tr("&About"), this, SLOT(about())); + helpMenu->addAction(tr("About &Qt"), qApp, SLOT(aboutQt())); +} diff --git a/examples/richtext/syntaxhighlighter/mainwindow.h b/examples/richtext/syntaxhighlighter/mainwindow.h new file mode 100644 index 0000000000..cc7cf053f3 --- /dev/null +++ b/examples/richtext/syntaxhighlighter/mainwindow.h @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** 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$ +** +****************************************************************************/ + +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include <QMainWindow> + +#include "highlighter.h" + +QT_BEGIN_NAMESPACE +class QTextEdit; +QT_END_NAMESPACE + +//! [0] +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(QWidget *parent = 0); + +public slots: + void about(); + void newFile(); + void openFile(const QString &path = QString()); + +private: + void setupEditor(); + void setupFileMenu(); + void setupHelpMenu(); + + QTextEdit *editor; + Highlighter *highlighter; +}; +//! [0] + +#endif diff --git a/examples/richtext/syntaxhighlighter/syntaxhighlighter.pro b/examples/richtext/syntaxhighlighter/syntaxhighlighter.pro new file mode 100644 index 0000000000..5939134557 --- /dev/null +++ b/examples/richtext/syntaxhighlighter/syntaxhighlighter.pro @@ -0,0 +1,19 @@ +HEADERS = highlighter.h \ + mainwindow.h +SOURCES = highlighter.cpp \ + mainwindow.cpp \ + main.cpp + +# install +target.path = $$[QT_INSTALL_EXAMPLES]/qtbase/richtext/syntaxhighlighter +sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS syntaxhighlighter.pro examples +sources.path = $$[QT_INSTALL_EXAMPLES]/qtbase/richtext/syntaxhighlighter +INSTALLS += target sources + +symbian: include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri) + +wince*: { + addFiles.files = main.cpp mainwindow.cpp + addFiles.path = . + DEPLOYMENT += addFiles +} |