doc/src/examples/calendar.qdoc
branchRCL_3
changeset 7 3f74d0d4af4c
equal deleted inserted replaced
6:dee5afe5301f 7:3f74d0d4af4c
       
     1 /****************************************************************************
       
     2 **
       
     3 ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
       
     4 ** All rights reserved.
       
     5 ** Contact: Nokia Corporation (qt-info@nokia.com)
       
     6 **
       
     7 ** This file is part of the documentation of the Qt Toolkit.
       
     8 **
       
     9 ** $QT_BEGIN_LICENSE:LGPL$
       
    10 ** No Commercial Usage
       
    11 ** This file contains pre-release code and may not be distributed.
       
    12 ** You may use this file in accordance with the terms and conditions
       
    13 ** contained in the Technology Preview License Agreement accompanying
       
    14 ** this package.
       
    15 **
       
    16 ** GNU Lesser General Public License Usage
       
    17 ** Alternatively, this file may be used under the terms of the GNU Lesser
       
    18 ** General Public License version 2.1 as published by the Free Software
       
    19 ** Foundation and appearing in the file LICENSE.LGPL included in the
       
    20 ** packaging of this file.  Please review the following information to
       
    21 ** ensure the GNU Lesser General Public License version 2.1 requirements
       
    22 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
       
    23 **
       
    24 ** In addition, as a special exception, Nokia gives you certain additional
       
    25 ** rights.  These rights are described in the Nokia Qt LGPL Exception
       
    26 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
       
    27 **
       
    28 ** If you have questions regarding the use of this file, please contact
       
    29 ** Nokia at qt-info@nokia.com.
       
    30 **
       
    31 **
       
    32 **
       
    33 **
       
    34 **
       
    35 **
       
    36 **
       
    37 **
       
    38 ** $QT_END_LICENSE$
       
    39 **
       
    40 ****************************************************************************/
       
    41 
       
    42 /*!
       
    43     \example richtext/calendar
       
    44     \title Calendar Example
       
    45 
       
    46     The Calendar example shows how to create rich text content and display it using
       
    47     a rich text editor.
       
    48 
       
    49     \image calendar-example.png
       
    50 
       
    51     Specifically, the example demonstrates the following:
       
    52 
       
    53     \list
       
    54       \o Use of a text editor with a text document
       
    55       \o Insertion of tables and frames into a document
       
    56       \o Navigation within a table
       
    57       \o Insert text in different styles
       
    58     \endlist
       
    59 
       
    60     The rich text editor used to display the document is used within a main window
       
    61     application.
       
    62 
       
    63     \section1 MainWindow Class Definition
       
    64 
       
    65     The \c MainWindow class provides a text editor widget and some controls to
       
    66     allow the user to change the month and year shown. The font size used for the
       
    67     text can also be adjusted.
       
    68 
       
    69     \snippet examples/richtext/calendar/mainwindow.h 0
       
    70 
       
    71     The private \c insertCalendar() function performs most of the work, relying on
       
    72     the \c fontSize and \c selectedDate variables to write useful information to
       
    73     the \c editor.
       
    74 
       
    75     \section1 MainWindow Class Implementation
       
    76 
       
    77     The \c MainWindow constructor sets up the user interface and initializes
       
    78     variables used to generate a calendar for each month.
       
    79 
       
    80     \snippet examples/richtext/calendar/mainwindow.cpp 0
       
    81 
       
    82     We begin by setting default values for the selected date that will be highlighted
       
    83     in the calendar and the font size to be used. Since we are using a QMainWindow
       
    84     for the user interface, we construct a widget for use as the central widget.
       
    85 
       
    86     The user interface will include a line of controls above the generated calendar;
       
    87     we construct a label and a combobox to allow the month to be selected, and a
       
    88     spin box for the year. These widgets are configured to provide a reasonable range
       
    89     of values for the user to try:
       
    90 
       
    91     \snippet examples/richtext/calendar/mainwindow.cpp 1
       
    92 
       
    93     We use the \c selectedDate object to obtain the current month and year, and we
       
    94     set these in the combobox and spin box:
       
    95 
       
    96     The font size is displayed in a spin box which we restrict to a sensible range
       
    97     of values:
       
    98 
       
    99     \snippet examples/richtext/calendar/mainwindow.cpp 2
       
   100 
       
   101     We construct an editor and use the \c insertCalendar() function to create
       
   102     a calendar for it. Each calendar is displayed in the same text editor; in
       
   103     this example we use a QTextBrowser since we do not allow the calendar to be
       
   104     edited.
       
   105 
       
   106     The controls used to set the month, year, and font size will not have any
       
   107     effect on the appearance of the calendar unless we make some signal-slot
       
   108     connections:
       
   109 
       
   110     \snippet examples/richtext/calendar/mainwindow.cpp 3
       
   111 
       
   112     The signals are connected to some simple slots in the \c MainWindow class
       
   113     which we will describe later.
       
   114 
       
   115     We create layouts to manage the widgets we constructed:
       
   116 
       
   117     \snippet examples/richtext/calendar/mainwindow.cpp 4
       
   118 
       
   119     Finally, the central widget is set for the window.
       
   120 
       
   121     Each calendar is created for the editor by the \c insertCalendar() function
       
   122     which uses the date and font size, defined by the private \a selectedDate
       
   123     and \c fontSize variables, to produce a suitable plan for the specified
       
   124     month and year.
       
   125 
       
   126     \snippet examples/richtext/calendar/mainwindow.cpp 5
       
   127 
       
   128     We begin by clearing the editor's rich text document, and obtain a text
       
   129     cursor from the editor that we will use to add content. We also create a
       
   130     QDate object based on the currently selected date.
       
   131 
       
   132     The calendar is made up of a table with a gray background color that contains
       
   133     seven columns: one for each day of the week. It is placed in the center of the
       
   134     page with equal space to the left and right of it. All of these properties are
       
   135     set in a QTextTableFormat object:
       
   136 
       
   137     \snippet examples/richtext/calendar/mainwindow.cpp 6
       
   138 
       
   139     Each cell in the table will be padded and spaced to make the text easier to
       
   140     read.
       
   141 
       
   142     We want the columns to have equal widths, so we provide a vector containing
       
   143     percentage widths for each of them and set the constraints in the
       
   144     QTextTableFormat:
       
   145 
       
   146     \snippet examples/richtext/calendar/mainwindow.cpp 7
       
   147 
       
   148     The constraints used for the column widths are only useful if the table has
       
   149     an appropriate number of columns. With the format for the table defined, we
       
   150     construct a new table with one row and seven columns at the current cursor
       
   151     position:
       
   152 
       
   153     \snippet examples/richtext/calendar/mainwindow.cpp 8
       
   154 
       
   155     We only need one row to start with; more can be added as we need them. Using
       
   156     this approach means that we do not need to perform any date calculations
       
   157     until we add cells to the table.
       
   158 
       
   159     When inserting objects into a document with the cursor's insertion functions,
       
   160     the cursor is automatically moved inside the newly inserted object. This means
       
   161     that we can immediately start modifying the table from within:
       
   162 
       
   163     \snippet examples/richtext/calendar/mainwindow.cpp 9
       
   164 
       
   165     Since the table has an outer frame, we obtain the frame and its format so that
       
   166     we can customize it. After making the changes we want, we set the frame's format
       
   167     using the modified format object. We have given the table an outer border one
       
   168     pixel wide.
       
   169 
       
   170     \snippet examples/richtext/calendar/mainwindow.cpp 10
       
   171 
       
   172     In a similar way, we obtain the cursor's current character format and
       
   173     create customized formats based on it.
       
   174 
       
   175     We do not set the format on the cursor because this would change the default
       
   176     character format; instead, we use the customized formats explicitly when we
       
   177     insert text. The following loop inserts the days of the week into the table
       
   178     as bold text:
       
   179 
       
   180     \snippet examples/richtext/calendar/mainwindow.cpp 11
       
   181 
       
   182     For each day of the week, we obtain an existing table cell in the first row
       
   183     (row 0) using the table's \l{QTextTable::cellAt()}{cellAt()} function. Since
       
   184     we start counting the days of the week at day 1 (Monday), we subtract 1 from
       
   185     \c weekDay to ensure that we obtain the cell for the correct column of the
       
   186     table.
       
   187 
       
   188     Before text can be inserted into a cell, we must obtain a cursor with the
       
   189     correct position in the document. The cell provides a function for this
       
   190     purpose, and we use this cursor to insert text using the \c boldFormat
       
   191     character format that we created earlier:
       
   192 
       
   193     \snippet examples/richtext/calendar/mainwindow.cpp 12
       
   194 
       
   195     Inserting text into document objects usually follows the same pattern.
       
   196     Each object can provide a new cursor that corresponds to the first valid
       
   197     position within itself, and this can be used to insert new content. We
       
   198     continue to use this pattern as we insert the days of the month into the
       
   199     table.
       
   200 
       
   201     Since every month has more than seven days, we insert a single row to begin
       
   202     and add days until we reach the end of the month. If the current date is
       
   203     encountered, it is inserted with a special format (created earlier) that
       
   204     makes it stand out:
       
   205 
       
   206     \snippet examples/richtext/calendar/mainwindow.cpp 13
       
   207 
       
   208     We add a new row to the table at the end of each week only if the next week
       
   209     falls within the currently selected month.
       
   210 
       
   211     For each calendar that we create, we change the window title to reflect the
       
   212     currently selected month and year:
       
   213 
       
   214     \snippet examples/richtext/calendar/mainwindow.cpp 14
       
   215 
       
   216     The \c insertCalendar() function relies on up-to-date values for the month,
       
   217     year, and font size. These are set in the following slots:
       
   218 
       
   219     \snippet examples/richtext/calendar/mainwindow.cpp 15
       
   220 
       
   221     The \c setFontSize() function simply changes the private \c fontSize variable
       
   222     before updating the calendar.
       
   223 
       
   224     \snippet examples/richtext/calendar/mainwindow.cpp 16
       
   225 
       
   226     The \c setMonth slot is called when the QComboBox used to select the month is
       
   227     updated. The value supplied is the currently selected row in the combobox.
       
   228     We add 1 to this value to obtain a valid month number, and create a new QDate
       
   229     based on the existing one. The calendar is then updated to use this new date.
       
   230 
       
   231     \snippet examples/richtext/calendar/mainwindow.cpp 17
       
   232 
       
   233     The \c setYear() slot is called when the QDateTimeEdit used to select the
       
   234     year is updated. The value supplied is a QDate object; this makes
       
   235     the construction of a new value for \c selectedDate simple. We update the
       
   236     calendar afterwards to use this new date.
       
   237 */