|  | Home · All Classes · Main Classes · Grouped Classes · Modules · Functions |

# mainwindow.cpp Example File
richtext/orderform/mainwindow.cpp

    /****************************************************************************
    **
    ** Copyright (C) 2005-2006 Trolltech ASA. All rights reserved.
    **
    ** This file is part of the example classes of the Qt Toolkit.
    **
    ** Licensees holding valid Qt Preview licenses may use this file in
    ** accordance with the Qt Preview License Agreement provided with the
    ** Software.
    **
    ** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
    ** information about Qt Commercial License Agreements.
    **
    ** Contact info@trolltech.com if any conditions of this licensing are
    ** not clear to you.
    **
    ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
    ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
    **
    ****************************************************************************/

    #include <QtGui>

    #include "detailsdialog.h"
    #include "mainwindow.h"

    MainWindow::MainWindow()
    {
        QMenu *fileMenu = new QMenu(tr("&File"), this);
        QAction *newAction = fileMenu->addAction(tr("&New..."));
        newAction->setShortcut(tr("Ctrl+N"));
        printAction = fileMenu->addAction(tr("&Print..."), this, SLOT(printFile()));
        printAction->setShortcut(tr("Ctrl+P"));
        printAction->setEnabled(false);
        QAction *quitAction = fileMenu->addAction(tr("E&xit"));
        quitAction->setShortcut(tr("Ctrl+Q"));
        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"));
    }

    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);

        QTextCursor cursor(editor->textCursor());
        cursor.movePosition(QTextCursor::Start);
        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");

        cursor.setPosition(topFrame->lastPosition());

        cursor.insertText(name, textFormat);
        QString line;
        foreach (line, address.split("\n")) {
            cursor.insertBlock();
            cursor.insertText(line);
        }
        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);

        cursor.insertText(tr("I would like to place an order for the following "
                             "items:"), textFormat);
        cursor.insertBlock();

        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);

        cursor = orderTable->cellAt(0, 0).firstCursorPosition();
        cursor.insertText(tr("Product"), boldFormat);
        cursor = orderTable->cellAt(0, 1).firstCursorPosition();
        cursor.insertText(tr("Quantity"), boldFormat);

        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);
        }

        cursor.setPosition(topFrame->lastPosition());

        cursor.insertText(tr("Please update my records to take account of the "
                             "following privacy information:"));
        cursor.insertBlock();

        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);

        cursor.setPosition(topFrame->lastPosition());
        cursor.insertBlock();
        cursor.insertText(tr("Sincerely,"), textFormat);
        cursor.insertBlock();
        cursor.insertBlock();
        cursor.insertBlock();
        cursor.insertText(name);

        printAction->setEnabled(true);
    }

    void MainWindow::createSample()
    {
        DetailsDialog dialog("Dialog with default values", this);
        createLetter("Mr. Smith", "12 High Street\nSmall Town\nThis country",
                     dialog.orderItems(), true);
    }

    void MainWindow::openDialog()
    {
        DetailsDialog dialog(tr("Enter Customer Details"), this);

        if (dialog.exec() == QDialog::Accepted)
            createLetter(dialog.senderName(), dialog.senderAddress(),
                         dialog.orderItems(), dialog.sendOffers());
    }

    void MainWindow::printFile()
    {
        QTextEdit *editor = static_cast<QTextEdit*>(letters->currentWidget());
        QTextDocument *document = editor->document();
        QPrinter printer;

        QPrintDialog *dialog = new QPrintDialog(&printer, this);
        dialog->setWindowTitle(tr("Print Document"));
        if (dialog->exec() != QDialog::Accepted)
            return;

        document->print(&printer);
    }