/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU Free Documentation License Usage
** Alternatively, this file may be used under the terms of the GNU Free
** Documentation License version 1.3 as published by the Free Software
** Foundation and appearing in the file included in the packaging of
** this file. Please review the following information to ensure
** the GNU Free Documentation License version 1.3 requirements
** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
** $QT_END_LICENSE$
**
****************************************************************************/

/*!
    \example mainwindows/dockwidgets
    \title Dock Widgets Example
    \ingroup examples-mainwindow

    \brief The Dock Widgets example shows how to add dock windows to an
    application. It also shows how to use Qt's rich text engine.

    \image dockwidgets-example.png Screenshot of the Dock Widgets example

    The application presents a simple business letter template, and has
    a list of customer names and addresses and a list of standard
    phrases in two dock windows. The user can click a customer to have
    their name and address inserted into the template, and click one or
    more of the standard phrases. Errors can be corrected by clicking
    the Undo button. Once the letter has been prepared it can be printed
    or saved as HTML.

    \section1 MainWindow Class Definition

    Here's the class definition:

    \snippet mainwindows/dockwidgets/mainwindow.h 0

    We will now review each function in turn.

    \section1 MainWindow Class Implementation

    \snippet mainwindows/dockwidgets/mainwindow.cpp 0

    We start by including \c <QtWidgets>, a header file that contains the
    definition of all classes in the Qt Core, Qt GUI and Qt Widgets
    modules. This saves us from having to include
    every class individually and is especially convenient if we add new
    widgets. We also include \c mainwindow.h.

    \snippet mainwindows/dockwidgets/mainwindow.cpp 1

    In the constructor, we start by creating a QTextEdit widget. Then we call
    QMainWindow::setCentralWidget(). This function passes ownership of
    the QTextEdit to the \c MainWindow and tells the \c MainWindow that
    the QTextEdit will occupy the \c MainWindow's central area.

    Then we call \c createActions(), \c createMenus(), \c
    createToolBars(), \c createStatusBar(), and \c createDockWindows()
    to set up the user interface. Finally we call \c setWindowTitle() to
    give the application a title, and \c newLetter() to create a new
    letter template.

    We won't quote the \c createActions(), \c createMenus(), \c
    createToolBars(), and \c createStatusBar() functions since they
    follow the same pattern as all the other Qt examples.

    \snippet mainwindows/dockwidgets/mainwindow.cpp 9

    We create the customers dock window first, and in addition to a
    window title, we also pass it a \c this pointer so that it becomes a
    child of \c MainWindow. Normally we don't have to pass a parent
    because widgets are parented automatically when they are laid out:
    but dock windows aren't laid out using layouts.

    We've chosen to restrict the customers dock window to the left and
    right dock areas. (So the user cannot drag the dock window to the
    top or bottom dock areas.) The user can drag the dock window out of
    the dock areas entirely so that it becomes a free floating window.
    We can change this (and whether the dock window is moveable or
    closable) using QDockWidget::setFeatures().

    Once we've created the dock window we create a list widget with the
    dock window as parent, then we populate the list and make it the
    dock window's widget. Finally we add the dock widget to the \c
    MainWindow using \c addDockWidget(), choosing to put it in the right
    dock area.

    We undertake a similar process for the paragraphs dock window,
    except that we don't restrict which dock areas it can be dragged to.

    Finally we set up the signal-slot connections. If the user clicks a
    customer or a paragraph their \c currentTextChanged() signal will be
    emitted and we connect these to \c insertCustomer() and
    addParagraph() passing the text that was clicked.

    We briefly discuss the rest of the implementation, but have now
    covered everything relating to dock windows.

    \snippet mainwindows/dockwidgets/mainwindow.cpp 2

    In this function we clear the QTextEdit so that it is empty. Next we
    create a QTextCursor on the QTextEdit. We move the cursor to the
    start of the document and create and format a frame. We then create
    some character formats and a table format. We insert a table into
    the document and insert the company's name and address into a table
    using the table and character formats we created earlier. Then we
    insert the skeleton of the letter including two markers \c NAME and
    \c ADDRESS. We will also use the \c{Yours sincerely,} text as a marker.

    \snippet mainwindows/dockwidgets/mainwindow.cpp 6

    If the user clicks a customer we split the customer details into
    pieces. We then look for the \c NAME marker using the \c find()
    function. This function selects the text it finds, so when we call
    \c insertText() with the customer's name the name replaces the marker.
    We then look for the \c ADDRESS marker and replace it with each line
    of the customer's address. Notice that we wrapped all the insertions
    between a \c beginEditBlock() and \c endEditBlock() pair. This means
    that the entire name and address insertion is treated as a single
    operation by the QTextEdit, so a single undo will revert all the
    insertions.

    \snippet mainwindows/dockwidgets/mainwindow.cpp 7

    This function works in a similar way to \c insertCustomer(). First
    we look for the marker, in this case, \c {Yours sincerely,}, and then
    replace it with the standard paragraph that the user clicked. Again
    we use a \c beginEditBlock() ... \c endEditBlock() pair so that the
    insertion can be undone as a single operation.

    \snippet mainwindows/dockwidgets/mainwindow.cpp 3

    Qt's QTextDocument class makes printing documents easy. We simply
    take the QTextEdit's QTextDocument, set up the printer and print the
    document.

    \snippet mainwindows/dockwidgets/mainwindow.cpp 4

    QTextEdit can output its contents in HTML format, so we prompt the
    user for the name of an HTML file and if they provide one we simply
    write the QTextEdit's contents in HTML format to the file.

    \snippet mainwindows/dockwidgets/mainwindow.cpp 5

    If the focus is in the QTextEdit, pressing \uicontrol Ctrl+Z undoes as
    expected. But for the user's convenience we provide an
    application-wide undo function that simply calls the QTextEdit's
    undo: this means that the user can undo regardless of where the
    focus is in the application.
*/
