Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • 4.5
  • master
  • 4.4
  • 4.1
  • 4.3
  • 4.2
  • wip/clang-query
  • 4.0
  • 3.6
  • at-master
  • qp-master
  • csa-master
  • at-3.6
  • qp-3.6
  • csa-3.6
  • 3.5
  • at-3.5
  • csa-3.5
  • wip/boostbuildprojectmanager
  • 3.4
  • qp-3.5
  • at-3.4
  • csa-3.4
  • 3.3
  • qp-3.4
  • qp-3.3
  • csa-3.3
  • 3.2
  • qp-3.2
  • 3.1
  • wip/vcproj
  • qp-3.1
  • 3.0
  • qp-3.0
  • 2.8
  • qp-2.8
  • 2.7
  • 2.6
  • 2.5
  • 2.4
  • 2.3
  • 2.2
  • 2.1
  • 2.0
  • 1.3
  • 2.0.1
  • 2.1.0
  • 2.0.0
  • 2.0.0-beta
  • 1.3.1
  • 1.3.0
  • 1.3.0-beta
  • 1.2
  • 1.2.90
  • 1.1
  • 1.0.0
  • 0.9.2-rc1
  • 0.9.1-beta
  • at-v3.4.0
  • at-v3.4.0-beta1
  • at-v3.4.0-rc1
  • at-v3.4.1
  • at-v3.4.2
  • at-v3.5.0
  • at-v3.5.0-beta1
  • at-v3.5.0-rc1
  • at-v3.5.1
  • at-v3.6.0
  • at-v3.6.0-beta1
  • at-v3.6.0-rc1
  • csa-v3.3.0
  • csa-v3.3.0-beta1
  • csa-v3.3.0-rc1
  • csa-v3.3.1
  • csa-v3.3.2
  • csa-v3.4.0
  • csa-v3.4.0-beta1
  • csa-v3.4.0-rc1
  • csa-v3.4.1
  • csa-v3.4.2
  • csa-v3.5.0
  • csa-v3.5.0-beta1
  • csa-v3.5.0-rc1
  • csa-v3.5.1
  • csa-v3.6.0
  • csa-v3.6.0-beta1
  • csa-v3.6.0-rc1
  • qp-v3.1.0
  • qp-v3.1.0-beta1
  • qp-v3.2.0
  • qp-v3.2.0-beta1
  • qp-v3.2.1
  • qp-v3.2.2
  • qp-v3.3.0
  • qp-v3.3.0-beta1
  • qp-v3.3.0-rc1
  • qp-v3.3.1
  • qp-v3.3.2
  • qp-v3.4.0
  • qp-v3.4.0-rc1
  • qp-v3.4.1
  • qp-v3.4.2
  • qp-v3.5.0
  • qp-v3.5.0-beta1
  • qp-v3.5.0-rc1
  • qp-v3.5.1
  • qp-v3.6.0
  • qp-v3.6.0-beta1
  • qp-v3.6.0-rc1
  • tqtc/v2.6.0
  • tqtc/v2.6.0-rc
  • tqtc/v2.6.1
  • tqtc/v2.7.0
  • tqtc/v2.7.0-rc
  • tqtc/v2.7.2
  • tqtc/v2.8.0
  • tqtc/v2.8.0-beta
  • v1.0.0
  • v1.1.0
  • v1.1.0-rc1
  • v1.1.1
  • v1.2.0
  • v1.2.1
  • v1.2.90
  • v1.3.0
  • v1.3.0-beta
  • v1.3.0-rc1
  • v1.3.1
  • v2.0.0
  • v2.0.0-alpha
  • v2.0.0-beta
  • v2.0.0-rc1
  • v2.0.1
  • v2.1.0
  • v2.1.0-beta
  • v2.1.0-beta2
  • v2.1.0-rc1
  • v2.2.0
  • v2.2.0-beta
  • v2.2.0-rc1
  • v2.2.1
  • v2.3.0
  • v2.3.0-beta
  • v2.3.0-rc
  • v2.3.1
  • v2.4.0
  • v2.4.0-beta
  • v2.4.0-rc
  • v2.4.1
  • v2.5.0
  • v2.5.0-beta
  • v2.5.0-rc
  • v2.5.1
  • v2.5.2
  • v2.6.0
  • v2.6.0-beta
  • v2.6.0-rc
  • v2.6.1
158 results

Target

Select target project
  • Tobias Hunger / qt-creator
1 result
Select Git revision
  • 4.5
  • master
  • 4.4
  • 4.1
  • 4.3
  • 4.2
  • wip/clang-query
  • 4.0
  • 3.6
  • at-master
  • qp-master
  • csa-master
  • at-3.6
  • qp-3.6
  • csa-3.6
  • 3.5
  • at-3.5
  • csa-3.5
  • wip/boostbuildprojectmanager
  • 3.4
  • qp-3.5
  • at-3.4
  • csa-3.4
  • 3.3
  • qp-3.4
  • qp-3.3
  • csa-3.3
  • 3.2
  • qp-3.2
  • 3.1
  • wip/vcproj
  • qp-3.1
  • 3.0
  • qp-3.0
  • 2.8
  • qp-2.8
  • 2.7
  • 2.6
  • 2.5
  • 2.4
  • 2.3
  • 2.2
  • 2.1
  • 2.0
  • 1.3
  • 2.0.1
  • 2.1.0
  • 2.0.0
  • 2.0.0-beta
  • 1.3.1
  • 1.3.0
  • 1.3.0-beta
  • 1.2
  • 1.2.90
  • 1.1
  • 1.0.0
  • 0.9.2-rc1
  • 0.9.1-beta
  • at-v3.4.0
  • at-v3.4.0-beta1
  • at-v3.4.0-rc1
  • at-v3.4.1
  • at-v3.4.2
  • at-v3.5.0
  • at-v3.5.0-beta1
  • at-v3.5.0-rc1
  • at-v3.5.1
  • at-v3.6.0
  • at-v3.6.0-beta1
  • at-v3.6.0-rc1
  • csa-v3.3.0
  • csa-v3.3.0-beta1
  • csa-v3.3.0-rc1
  • csa-v3.3.1
  • csa-v3.3.2
  • csa-v3.4.0
  • csa-v3.4.0-beta1
  • csa-v3.4.0-rc1
  • csa-v3.4.1
  • csa-v3.4.2
  • csa-v3.5.0
  • csa-v3.5.0-beta1
  • csa-v3.5.0-rc1
  • csa-v3.5.1
  • csa-v3.6.0
  • csa-v3.6.0-beta1
  • csa-v3.6.0-rc1
  • qp-v3.1.0
  • qp-v3.1.0-beta1
  • qp-v3.2.0
  • qp-v3.2.0-beta1
  • qp-v3.2.1
  • qp-v3.2.2
  • qp-v3.3.0
  • qp-v3.3.0-beta1
  • qp-v3.3.0-rc1
  • qp-v3.3.1
  • qp-v3.3.2
  • qp-v3.4.0
  • qp-v3.4.0-rc1
  • qp-v3.4.1
  • qp-v3.4.2
  • qp-v3.5.0
  • qp-v3.5.0-beta1
  • qp-v3.5.0-rc1
  • qp-v3.5.1
  • qp-v3.6.0
  • qp-v3.6.0-beta1
  • qp-v3.6.0-rc1
  • tqtc/v2.6.0
  • tqtc/v2.6.0-rc
  • tqtc/v2.6.1
  • tqtc/v2.7.0
  • tqtc/v2.7.0-rc
  • tqtc/v2.7.2
  • tqtc/v2.8.0
  • tqtc/v2.8.0-beta
  • v1.0.0
  • v1.1.0
  • v1.1.0-rc1
  • v1.1.1
  • v1.2.0
  • v1.2.1
  • v1.2.90
  • v1.3.0
  • v1.3.0-beta
  • v1.3.0-rc1
  • v1.3.1
  • v2.0.0
  • v2.0.0-alpha
  • v2.0.0-beta
  • v2.0.0-rc1
  • v2.0.1
  • v2.1.0
  • v2.1.0-beta
  • v2.1.0-beta2
  • v2.1.0-rc1
  • v2.2.0
  • v2.2.0-beta
  • v2.2.0-rc1
  • v2.2.1
  • v2.3.0
  • v2.3.0-beta
  • v2.3.0-rc
  • v2.3.1
  • v2.4.0
  • v2.4.0-beta
  • v2.4.0-rc
  • v2.4.1
  • v2.5.0
  • v2.5.0-beta
  • v2.5.0-rc
  • v2.5.1
  • v2.5.2
  • v2.6.0
  • v2.6.0-beta
  • v2.6.0-rc
  • v2.6.1
158 results
Show changes
187 files
+ 29043
10150
Compare changes
  • Side-by-side
  • Inline

Files

Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ General
   * Reworked the projects pane
   * Made the welcome screen tabs into plugins, reimplement IWelcomePage 
     to add your own welcome screen page
   * Overhauled the project pane.

Editing
   * Added support for text editor color schemes
@@ -36,14 +37,19 @@ Editing
   * Handle block selection in fakevim
   * Added Copy full path to the editors combobox
   * Added left/right arrow buttons for "Go back/forward" in navigation history
   * Added smart indentation for pasted text blocks

Refactoring
   * Added rename symbol under cursor
   * Find usages of a symbol

Project support
   * Added support for adding and removing files from a generic Makefile-based
     project
   * Added better control over the environment used for running.
   * Add all cmake files to the project tree (only works with a cvs cmake)
   * Support cmake with Microsoft Visual Studio Compiler (only works with cvs
     cmake)
   * Add all cmake files to the project tree (only works with a  cmake 2.8)
   * Support cmake with Microsoft Visual Studio Compiler (only works with 
     cmake 2.8 )
   * Fix a few cmake wizard bugs, where canceling left creator in a strange
     state
   * The qmake and make steps can now be removed.
@@ -53,6 +59,9 @@ Project support
   * Show subdirectory structure below .pro/.pri files in project tree
   * Add "Show file in Finder/Explorer" (Mac/Windows) to context menu.
     On Linux it opens the containing directory.
   * The qmake step and make step can be removed from qt projects now.
   * Made importing build settings for qt projects more robust
   * Only run qmake, if it needs to be run.

Compilation
   * Support multi-core compilation on Windows/MSVC via jom
@@ -63,18 +72,24 @@ Debugging
   * CDB: Added more types to the dumpers (QSharedPointer, QVector, common
     QMap/QSet types), dereference reference and pointer parameters
   * CDB: Simplified display of STL types in the locals window
   * CDB: Fixed thread handling
   * CDB: Fixed thread handling, display thread position
   * CDB: Added internal dumpers for string types for debuggee crashes
   * CDB: Set symbol paths correctly
   * Improved QObject dumping, print out QRect/QSize, enumerations and flags
   * Made it possible to use the BinEditor plugin for displaying raw memory
   * Replace disassembler window by a real text editor enabling "mixed" output
   * Improved dumper building on options page, run in background

Designer
   * Added support for rearranging and floating form editor tools

Version control plugins
   * Added CVS support
   * Display diff/annotation with correct encoding
   * Added "sync" menu item to the Perforce plugin
   * Fixed locking of temporary submit message files on Windows
   * Use a single, colored output pane for all version control systems
   * Position annotation view of file at current line of editor
   
Wizards
   * Fixed GUI project and form class wizards to use the same settings.
@@ -88,6 +103,9 @@ Platform Specific
Mac
   * Make use of system's language settings

Symbian Target
   * Preliminary support for targeting Qt for Symbian applications

Additional credits go to:
   * Christian Hoenig (Locator filter for symbols in current document)
   * Henrik Abelsson (Configure what to do with externally modified files)
Original line number Diff line number Diff line
@@ -348,7 +348,7 @@
    \snippet examples/addressbook-sdk/part2/addressbook.h members

    We also declare two private QString objects, \c oldName and \c oldAddress.
    These objects are needed to hold the name and address of hte contact that
    These objects are needed to hold the name and address of the contact that
    was last displayed, before the user clicked \gui Add. So, when the user
    clicks \gui Cancel, we can revert to displaying the details of the last
    contact.
@@ -529,7 +529,7 @@

    \snippet examples/addressbook-sdk/part3/addressbook.cpp enable navigation

    We also include these lins of code in the \c cancel() function.
    We also include these lines of code in the \c cancel() function.

    Recall that we intend to emulate a circularly-linked list with our QMap
    object, \c contacts. So in the \c next() function, we obtain an iterator
@@ -735,7 +735,7 @@
    In this chapter, we look at ways to locate contacts and addresses in the
    address book application.

    # image
    \image addressbook-tutorial-part5-screenshot.png

    As we keep adding contacts to our address book, it becomes tedious to
    navigate them with the \gui Next and \gui Previous buttons. In this case,
@@ -750,13 +750,14 @@

    \section1 Designing The FindDialog

    #image
    \image addressbook-tutorial-part5-finddialog-in-designer.png

    We begin by adding a new \c{.ui} file to our project. Right click on your
    We begin by adding a new \c{.ui} file and a corresponding class to our project. Right click on your
    project and select \gui{Add New...}. In the \gui{New File} dialog, select
    \gui{Qt Designer Form}. In the \gui{Qt Designer Form} dialog, select
    \e{Dialog without buttons}. Name it \c{finddialog.ui} and add it to your
    project. The \QD plugin within Qt Creator will now display your new form.
    \gui{Qt Designer Form Class}. In the \gui{Qt Designer Form Class} dialog, select
    \e{Dialog without buttons}. Name the class \c{FindDialog} and add the files it to your
    project. Open your new form in the \QD form editor within Qt Creator by
    double-clicking on the \c{finddialog.ui} file in the \gui{Project Sidebar}.

    To replicate the screenshot above, we need a label, a line edit, and a push
    button. Drag these onto your form. Set their text accordingly and name them
@@ -781,17 +782,6 @@

    \snippet examples/addressbook-sdk/part5/finddialog.cpp constructor

    We connect our signals to their respective slots. Notice that
    \c{findButton}'s \l{QPushButton:}{clicked()} signal is connected to
    \c findClicked() and \l{QDialog::}{accept()}. The \l{QDialog::}{accept()}
    slot provided by QDialog hides the dialog and sets the result code to
    \l{QDialog::}{Accepted}. We use this function to help \c{AddressBook}'s
    \c findContact() function know when the \c FindDialog object has been
    closed. We will explain this logic in further detail when discussing the
    \c findContact() function.

    \image addressbook-tutorial-part5-signals-and-slots.png

    In \c findClicked(), we validate to ensure that the user did not click the
    \gui Find button without entering a contact's name. Then, we set
    \c findText to the search string, extracted from \c lineEdit. After that,
@@ -799,15 +789,24 @@

    \snippet examples/addressbook-sdk/part5/finddialog.cpp findClicked

    The \c findText variable has a public getter function, \c getFindText(),
    associated with it. Since we only ever set \c findText directly in both
    the constructor and in hte \c findClicked() function, we do not create a
    setter function to accompany \c getFindText(). Because \c getFindText() is
    public, classes instantiating and using \c FindDialog can always access the
    search string that the user has entered and accepted.
    \c findText() is public, which makes it easy for classes instantiating
    and using \c FindDialog to access the search string that the user has entered
    and accepted.

    \snippet examples/addressbook-sdk/part5/finddialog.cpp findText

    Finally, we connect our signals to their respective slots. Notice that
    \c{findButton}'s \l{QPushButton::}{clicked()} signal is connected to
    \c findClicked(), which calls \l{QDialog::}{accept()} or \l{QDialog::}{reject()}.
    The \l{QDialog::}{accept()} slot provided by QDialog hides the dialog
    and sets the result code to \l{QDialog::}{Accepted}, while \l{QDialog::}{reject()}
    sets it to \l{QDialog::}{Rejected} accordingly.  We use this function to help
    \c{AddressBook}'s \c findContact() function know when the \c FindDialog object has been
    closed. We will explain this logic in further detail when discussing the
    \c findContact() function.

    \image addressbook-tutorial-part5-signals-and-slots.png


    \section1 The AddressBook Class

@@ -818,7 +817,7 @@

    So far, all our address book features have a QPushButton and a
    corresponding slot. Similarly, for the \gui Find feature, we have
    \c findButton and \c findContact().
    \c{ui->findButton} and \c findContact().

    \snippet examples/addressbook-sdk/part5/addressbook.h slot definition

@@ -838,15 +837,17 @@
    We start out by displaying the \c FindDialog instance, \c dialog. This is
    when the user enters a contact name to look up. Once the user clicks the
    dialog's \c findButton, the dialog is hidden and the result code is set to
    QDialog::Accepted. THis ensures that our \c if statement is always true.
    either QDialog::Accepted or QDialog::Rejected by the FindDialog's
    \c findClicked() method. This ensures that we only search for a contact
    if the user typed something in the FindDialog's line edit.

    We then proceed to extract the search string, which in this case is
    \c contactName, using \c{FindDialog}'s \c getFindText() function. If the
    \c contactName, using \c{FindDialog}'s \c findText() function. If the
    contact exists in our address book, we display it immediately. Otherwise,
    we display the QMessageBox shown below to indicate that their search
    failed.

    # image
    \image addressbook-tutorial-part5-dialogbox.png

    The concept behind finding a contact only applies for cases where we have
    more than two contacts in our address book. Hence, we implement this
@@ -870,7 +871,7 @@
    This chapter covers the file handling features of Qt that we used to write
    loading and saving routines for the address book application.

    # screenshot
    \image addressbook-tutorial-part6-screenshot.png

    Although browsing and searching for contacts are useful features, our
    address book is not really ready for use until we can save existing
@@ -910,7 +911,7 @@
    the push buttons.


    # screenshot of property editor
    \image addressbook-tutorial-part6-propertyeditor.png


    \section1 The AddressBook Class
@@ -935,7 +936,7 @@

    The file dialog that pops up is displayed in the screenshot below:

    #screenshot
    \image addressbook-tutorial-part6-savedialog.png

    If \c fileName is not empty, we create a QFile object, \c file, with
    \c fileName. The QFile object works with QDataStream as QFile is a
@@ -967,7 +968,7 @@
    On Windows, for example, this function pops up a native file dialog, as
    shown in the following screenshot.

    # screenshot
    \image addressbook-tutorial-part6-opendialog.png

    If \c fileName is not empty, again, we use a QFile object, \c file, and
    attempt to open it in \l{QIODevice::}{ReadOnly} mode. Similar to our
@@ -989,8 +990,10 @@
    validate the data obtained to ensure that the file we read from actually
    contains address book contacts. If it does, we display the first contact;
    otherwise, we display a QMessageBox to inform the user about the problem.
    Lastly, we update the interface to enable and disable the push buttons
    accordingly.
    Lastly, we connect the \c clicked() signal of the push buttons
    with the \c loadFromFile() and \c saveToFile():

    \snippet examples/addressbook-sdk/part6/addressbook.cpp connectSlots

*/

@@ -1014,7 +1017,7 @@
    \c exportButton as its \c objectName. The \c toolTip property is set to
    \gui{Export as vCard}.

    # screenshot
    \image addressbook-tutorial-part7-screenshot.png

    \section1 The AddressBook Class

doc/eike_doc.patch

0 → 100644
+138 −0
Original line number Diff line number Diff line
diff --git a/doc/addressbook-sdk.qdoc b/doc/addressbook-sdk.qdoc
index 0441666..7012ea6 100644
--- a/doc/addressbook-sdk.qdoc
+++ b/doc/addressbook-sdk.qdoc
@@ -139,7 +139,7 @@
     \section1 Placing Widgets on The Form
 
     In the \gui{Project Sidebar}, double-click on the \c{addressbook.ui} file.
-    The \QD plugin will be launched, allowing you to design your program's user
+    The \QD form editor will be launched, allowing you to design your program's user
     interface.
 
     We require two \l{QLabel}s to label the input fields as well as a QLineEdit
@@ -156,6 +156,7 @@
     diagram below shows the layout cells and the position of our widgets. Place
     your widgets accordingly and save the form by choosing
     \gui{File | Save} or using the \key{Ctrl+S} shortcut.
+    (We have to actually layout the widgets in a grid layout, this step seems to be missing to me?)
 
     \image addressbook-tutorial-part1-labeled-screenshot.png
 
@@ -311,7 +312,7 @@
     \snippet examples/addressbook-sdk/part2/addressbook.h slot definition
 
     Since the \c AddressBook class is a subclass of QWidget, Qt Creator
-    includes QWidget in the hedaer file.
+    includes QWidget in the header file.
 
     \snippet examples/addressbook-sdk/part2/addressbook.h include
 
@@ -323,7 +324,7 @@
     \snippet examples/addressbook-sdk/part2/addressbook.h members
 
     We also declare two private QString objects, \c oldName and \c oldAddress.
-    These objects are needed to hold the name and address of hte contact that
+    These objects are needed to hold the name and address of the contact that
     was last displayed, before the user clicked \gui Add. So, when the user
     clicks \gui Cancel, we can revert to displaying the details of the last
     contact.
@@ -499,7 +500,7 @@
 
     \snippet examples/addressbook-sdk/part3/addressbook.cpp enable navigation
 
-    We also include these lins of code in the \c cancel() function.
+    We also include these lines of code in the \c cancel() function.
 
     Recall that we intend to emulate a circularly-linked list with our QMap
     object, \c contacts. So in the \c next() function, we obtain an iterator
@@ -722,11 +723,12 @@
 
     #image
 
-    We begin by adding a new \c{.ui} file to our project. Right click on your
+    We begin by adding a new \c{.ui} file and a corresponding class to our project. Right click on your
     project and select \gui{Add New...}. In the \gui{New File} dialog, select
-    \gui{Qt Designer Form}. In the \gui{Qt Designer Form} dialog, select
-    \e{Dialog without buttons}. Name it \c{finddialog.ui} and add it to your
-    project. The \QD plugin within Qt Creator will now display your new form.
+    \gui{Qt Designer Form Class}. In the \gui{Qt Designer Form Class} dialog, select
+    \e{Dialog without buttons}. Name the class \c{FindDialog} and add the files it to your
+    project. Open your new form in the \QD form editor within Qt Creator by
+    double-clicking on the \c{finddialog.ui} file in the \gui{Project Sidebar}.
 
     To replicate the screenshot above, we need a label, a line edit, and a push
     button. Drag these onto your form. Set their text accordingly and name them
@@ -759,6 +761,9 @@
     \c findContact() function know when the \c FindDialog object has been
     closed. We will explain this logic in further detail when discussing the
     \c findContact() function.
+    (The above paragraph is not up to date, since clicked() is not connected
+    to accept(). The description of accept() can move below to the implementation
+    of findClicked().)
 
     \image addressbook-tutorial-part5-signals-and-slots.png
 
@@ -766,17 +771,17 @@
     \gui Find button without entering a contact's name. Then, we set
     \c findText to the search string, extracted from \c lineEdit. After that,
     we clear the contents of \c lineEdit and hide the dialog.
+    (There is no findText member. The description of accept() should move here, together
+    with words about reject.)
 
     \snippet examples/addressbook-sdk/part5/finddialog.cpp findClicked
 
-    The \c findText variable has a public getter function, \c getFindText(),
-    associated with it. Since we only ever set \c findText directly in both
-    the constructor and in hte \c findClicked() function, we do not create a
-    setter function to accompany \c getFindText(). Because \c getFindText() is
+    The \c text of the find dialog's line edit has a public getter function, \c findText(),
+    associated with it. Because \c findText() is
     public, classes instantiating and using \c FindDialog can always access the
     search string that the user has entered and accepted.
 
-    \snippet examples/addressbook-sdk/part5/finddialog.cpp getFindText
+    \snippet examples/addressbook-sdk/part5/finddialog.cpp findText
 
 
     \section1 The AddressBook Class
@@ -788,23 +793,9 @@
 
     So far, all our address book features have a QPushButton and a
     corresponding slot. Similarly, for the \gui Find feature, we have
-    \c findButton and \c findContact().
+    \c {ui->findButton} and \c findContact().
 
     \snippet examples/addressbook-sdk/part5/addressbook.h slot definition
-    \dots
-    \snippet examples/addressbook-sdk/part5/addressbook.h private members
-
-    Lastly, we declare the private variable, \c dialog, which we will use to
-    refer to an instance of \c FindDialog.
-
-    Once we have instantiated a dialog, we might want to use it more than once;
-    using a private variable allows us to refer to it from more than one place
-    in the class.
-
-    Within the \c AddressBook class's constructor, we insantiate our private
-    objects, \c findButton and \c dialog:
-
-    \snippet examples/addressbook-sdk/part5/addressbook.cpp private members
 
     Next, we connect the \c{findButton}'s \l{QPushButton::}{clicked()} signal
     to \c findContact().
@@ -818,10 +809,12 @@
     We start out by displaying the \c FindDialog instance, \c dialog. This is
     when the user enters a contact name to look up. Once the user clicks the
     dialog's \c findButton, the dialog is hidden and the result code is set to
-    QDialog::Accepted. THis ensures that our \c if statement is always true.
+    either QDialog::Accepted or QDialog::Rejected by the FindDialog's
+    \c findClicked() method. This ensures that we only search for a contact
+    if the user typed something in the FindDialog's line edit.
 
     We then proceed to extract the search string, which in this case is
-    \c contactName, using \c{FindDialog}'s \c getFindText() function. If the
+    \c contactName, using \c{FindDialog}'s \c findText() function. If the
     contact exists in our address book, we display it immediately. Otherwise,
     we display the QMessageBox shown below to indicate that their search
     failed.
Original line number Diff line number Diff line
#include <QFileDialog>

#include "addressbook.h"
#include "ui_addressbook.h"

@@ -31,6 +33,12 @@ AddressBook::AddressBook(QWidget *parent)
                SLOT(removeContact()));
    connect(ui->findButton, SIGNAL(clicked()), this,
                SLOT(findContact()));
    //! [connectSlots]
    connect(ui->loadButton, SIGNAL(clicked()), this,
                SLOT(loadFromFile()));
    connect(ui->saveButton, SIGNAL(clicked()), this,
                SLOT(saveToFile()));
    //! [connectSlots]

    setWindowTitle(tr("Simple Address Book"));
}
@@ -292,7 +300,7 @@ void AddressBook::loadFromFile()

//! [loadFromFile part3]
        if (contacts.isEmpty()) {
            QMessagebox::information(this, tr("No contacts in file"),
            QMessageBox::information(this, tr("No contacts in file"),
                tr("The file you are attempting to open contains no contacts."));
        } else {
            QMap<QString, QString>::iterator i = contacts.begin();
Original line number Diff line number Diff line
#include <QFileDialog>
#include <QTextStream>

#include "addressbook.h"
#include "ui_addressbook.h"

@@ -348,5 +351,5 @@ void AddressBook::exportAsVCard()
    out << "END;VCARD" << "\n";

    QMessageBox::information(this, tr("Export Successful"),
        tr("\%1\" has been exported as a vCard.").arg(name));
        tr("\"%1\" has been exported as a vCard.").arg(name));
}
+236 −52
Original line number Diff line number Diff line
@@ -5,7 +5,7 @@

    \title Qt Creator Manual

    \section1 Version 1.2.93
    \section1 Version 1.2.92

    The goal of Qt Creator is to provide a cross-platform, complete Integrated
    Development Environment (IDE) to develop Qt projects. It is available for
@@ -19,30 +19,6 @@
    {qt-creator-request@trolltech.com}. For more information on Qt mailing
    lists, visit \l{http://lists.trolltech.com}{http://lists.trolltech.com}.

    Qt Creator includes a wide range of useful features. Among them are:
    \list 1
        \o \bold{Smart Code Editor}: The code editor provides syntax
            highlighting as well as code completion.
        \o \bold{Qt4 Project Generating Wizard}: This wizard allows the user
           to generate a project for a console application, a GUI application,
           or a C++ library.
        \o \bold{Qt Help Integration}: Qt's entire documentation can be
           accessed easily by clicking on the \gui{Help} button.
        \o \bold{Qt Designer Integration}: User interface forms can be designed
           within Qt Creator. Simply double-click on a \c{.ui} file within the
           \gui{Project Explorer} to launch the integration.
        \o \bold{Locator}: A powerful navigation tool that lets the user locate
           files and classes using minimal keystrokes.
        \o \bold{Support for qmake's .pro file format}: The project's \c{.pro}
           file is used as a project description file.
        \o \bold{Debugging Interface}: Applications can be debugged
           within Qt Creator using a graphical frontend to the GNU symbolic
           debugger (GDB) and the Microsoft Console Debugger (CDB).
    \endlist

    To learn more about the Qt Creator, click on one of the links below:


    \raw HTML
    <img border="0" style="float:right;" src="images/qtcreator-screenshots.png" />
    \endraw 
@@ -60,6 +36,7 @@
       \o   \l{Debugging with Qt Creator}
       \o   \l{CMake Support in Qt Creator}
       \o   \l{Support for Generic Projects in Qt Creator}
       \o   \l{Development of Qt for Symbian Based Applications}
       \o   \l{Handling External Libraries}
       \o   \l{Tips and Tricks}
       \o   \l{Keyboard Shortcuts}
@@ -171,7 +148,8 @@
    to the \gui{Help} mode. To obtain context sensitive help, move your text
    cursor to a Qt class or function and press \key{F1}. The documentation
    will be displayed within a panel on the right, as shown in the screenshot
    below.
    below. If there is enough vertical space, it will be shown in the 
    fullscreen help mode.

    External Documentation provided by the user can be used to augment or
    replace the documentation shipped with Qt Creator and Qt.
@@ -417,13 +395,57 @@
    not need to manually configure your Qt version.

    Otherwise, you can add your Qt version in
    \gui{Tools -> Options... -> Qt Versions}. If you are on the Windows
    platform and use MinGW to compile Qt, you need to tell Qt Creator where
    MinGW is installed. This is done by setting the \gui{MinGW Directory}
    under \gui{Tools -> Options... -> Qt4 -> Qt Versions -> MinGw Directory}.
    If your Qt version is compiled with Microsoft Visual C++'s compiler, Qt
    Creator will automatically set the correct environment variables for
    compilation.
    \gui{Tools -> Options... -> Qt Versions} on Windows and Linux or
    in \gui{Qt Creator -> Preferences... -> Qt Versions} on Mac OS X.
    
    The detailed settings depend on your Operating system and on the targeted
    tool chain
    
        \table
        \row
            \i \image qtcreator-qt4-qtversions.png
               On Linux and Mac OS X, simply set the \gui{Path to QMake}
               to the \c qmake binary of the Qt installation. If a Qt is
               found in the \c PATH environment variable, it will show up.
               
               On both platforms, the platforms Gnu Compiler Collection (GCC)
               is used to compile Qt. On Mac OS, the GCC compiler is part of XCode.
               On Linux, the Intel Compiler (ICC) is supported as a drop-in replacement
               for GCC.
               
        \row
            \i \image qtcreator-qt4-qtversions-win-mingw.png
               If you are on the Windows platform and used MinGW 
               to compile Qt, you need to additionally tell Qt Creator
               where MinGW is installed.  This is done by setting the 
               \gui{MinGW Directory}.
        \row
            \i \image qtcreator-qt4-qtversions-win-msvc.png
               If your Qt version is compiled with Microsoft Visual C++'s
               compiler, Qt Creator will automatically set the correct 
               environment variables for compilation. The \gui{MSVC}
               dropdown box indicates the internal Version Number of the 
               installed Microsoft Visual C++ tool chains:
               
               \list
                   \o  \bold{7.1}: Visual Studio 2003
                   \o  \bold{8.0}: Visual Studio 2005
                   \o  \bold{9.0}: Visual Studio 2008
               \endlist
               
               If you are using the \c{Windows SDK for Windows Server 2008}
               instead of Visual Studio, it will identify as version 9.0.
        \row
            \i \image qtcreator-qt4-qtversions-win-symbian.png
               If you are using Qt for Symbian and your S60 SDK is registered
               with \c devices.exe, Qt Creator will detect the Qt version automatically.
               A known issue is that you cannot just point Creator to \c qmake.exe of Qt for Symbian.
               You can add the path to the Metrowerks Compiler (\gui {MWC Directory})
               if you want to use to build for the emulator. This requires Carbide 2.0
               to be installed. the MWC directory should then point to the directory 
               of your Carbide installation. However, this not needed for compiling for
               the device.
        \endtable
    
    \note By default projects are compiled with the
    \l{glossary-default-qt}{default Qt version}. You can override this in the
@@ -700,6 +722,10 @@
            \i  \bold{Perforce}
            \i  \l{http://www.perforce.com}
            \i  Server version 2006.1 and later
        \row
            \i  \bold{CVS}
            \i  \l{http://www.cvshome.org}
            \i
    \endtable


@@ -867,11 +893,11 @@
    \image qtcreator-locator.png

    Suppose you would like to open your project's \c{main.cpp} file, click on
    \gui Locator or use \key{Ctrl+K}, type in the file name and then press
    \key Return. The file will be opened in the editor. You can also type
    part of a file name and use the wildcard characters \c{*} and \c{?} to
    match \e{any} number of \e{any} characters. A list of all files matching
    your criteria will be displayed.
    \gui Locator or use \key{Ctrl+K} (Mac OS X: \key{Cmd+K}), type in the file 
    name and then press \key Return. The file will be opened in the editor.
    You can also type part of a file name and use the wildcard characters
    \c{*} and \c{?} to match \e{any} number of \e{any} characters. A list 
    of all files matching  your criteria will be displayed.

    \gui Locator not only allows you to navigate files on disk but also other
    "locations", which are organized with \bold{Filters}. Currently there are
@@ -894,8 +920,8 @@
    \e prefix. This prefix is usually a single character followed by
    \key{Space}. For example, to jump to the definition of the class
    \l{http://doc.trolltech.com/qdatastream.html}{QDataStream}, type:
    \key{Ctrl+K} to activate \gui Locator. Then type colon (\key{:}) followed
    by \key{Space} and the class name.
    \key{Ctrl+K} (Mac OS X: \key{Cmd+K}) to activate \gui Locator. 
    Then type colon (\key{:}) followed by \key{Space} and the class name.


    Below is a full list of \l{http://doc.trolltech.com/qdatastream.html}
@@ -973,6 +999,8 @@
    \note By default, if you press \key{Ctrl+K} and do not use a prefix to
    specify a filter, three filters will be enabled: \c{o}, \c{l}, and \c{a}.
    
    \note On Mac OS X, use \key{Cmd+K} instead of \key{Ctrl+K}.

*/


@@ -1080,7 +1108,7 @@
               \l{http://www.microsoft.com/whdc/devtools/debugging/installx86.Mspx}{32-bit}
               or
               \l{http://www.microsoft.com/whdc/devtools/debugging/install64bit.Mspx}{64-bit}
               package (Version 6.10 for the 32-bit or the 64-bit version of Qt Creator, respectively),
               package (Version 6.11.1.404 for the 32-bit or the 64-bit version of Qt Creator, respectively),
               which is freely available for download from the
               \l{http://msdn.microsoft.com/en-us/default.aspx}
               {Microsoft Developer Network}.
@@ -1436,7 +1464,7 @@
    specified in the \c CMake project file.

    Known issues for the current version can be found
    \l{Known Issues of Version 1.1.0}{here}.
    \l{Known Issues of Version 1.2.93}{here}.
*/


@@ -1444,7 +1472,7 @@
    \contentspage index.html
    \previouspage creator-cmake-support.html
    \page creator-generic-projects.html
    \nextpage creator-external-library-handling.html
    \nextpage creator-qt-for-symbian.html

    \title Support for Generic Projects in Qt Creator

@@ -1503,10 +1531,151 @@
    \c{$BUILDDIR} which should work fine.
*/


/*!
    \contentspage index.html
    \previouspage creator-generic-projects.html
    \page creator-qt-for-symbian.html
    \nextpage creator-external-library-handling.html

    \title Development of Qt for Symbian Based Applications

    Qt Creator 1.3 comes with preliminary support for development of
    applications using Qt for the Symbian Platform.

    \e{Note that this is highly experimental, and not intended for production use.
    The primary aim is to allow Symbian developers to familiarize themselves with Qt Creator
    and provide feedback that will help us improve Symbian support in future versions of
    Qt Creator.}

    Please provide us with feedback, using the mailing list or IRC, as described on the
    \l{http://qt.gitorious.org/qt-creator/pages/Home}{Qt Creator Development Wiki}.

    \section2 Getting Started

    You need the following software installed on your PC.
    Only Windows development is supported.

    \list
        \o \l{http://www.forum.nokia.com/main/resources/tools_and_sdks/S60SDK/}
            {S60 Platform SDK 3rd Edition FP1 or higher}
        \o \l{http://www.forum.nokia.com/main/resources/technologies/openc_cpp/}
            {Open C/C++ v1.6.0 or higher.} Install this to all S60 SDKs you plan to use Qt with.
            This is included in the Qt for Symbian binary installers.
        \o Either the GCCE Arm Toolchain that is included in the S60 Platform SDKs, or
            RVCT 2.2 [build 686] or later (which is not available free of charge).
            Your environment needs to find the compiler in the PATH.
        \o Qt for Symbian 4.6.0, installed into the S60 SDKs you want to use.

    \endlist

    And for deploying and running applications on the device
    \list
        \o The Nokia USB drivers that come e.g. with PC Suite.
        \o The \l{http://tools.ext.nokia.com/trk/}{App TRK} application for your device.
    \endlist

    Running Qt based applications on real devices requires the following packages to be installed on
    your device. The packages can be found in the S60 SDK where you installed Open C/C++:
    \list
        \o nokia_plugin\\openc\\s60opencsis\\pips_s60_\<version\>.sis
        \o nokia_plugin\\openc\\s60opencsis\\openc_ssl_s60_\<version\>.sis
        \o nokia_plugin\\opencpp\\s60opencppsis\\stdcpp_s60_\<version\>.sis
    \endlist

    If you want to run your applications in the Symbian Emulator, you also need to install
    Carbide.c++ v2.0.0 or higher.

    \section2 Setting up Qt Creator

    When you run Qt Creator after installing the S60 Platform SDK and Qt for Symbian,
    the installed SDKs and their corresponding Qt versions are automatically detected.
    For each detected S60 SDK with Qt, a special entry is made in the Qt Version Management settings
    \gui{Tools -> Options... -> Qt4 -> Qt Versions}.

    \e{Note that you must use one of these special Qt version entries for building projects
    for the emulator or devices. You can not just point Qt Creator to the qmake executable
    like you would do for a desktop version of Qt.}

    \image qtcreator-qt4-qtversions-win-symbian.png

    If you want to run your applications in the Symbian Emulator, you need to point Qt Creator
    to the Metrowerks Compiler that you want to use, by setting the \gui{MWC Directory}
    of the Qt version to the corresponding Carbide.c++ installation directory.

    You can check what S60 SDKs and corresponding Qt versions are found in the
    \gui{Tools -> Options... -> Qt4 -> S60 SDKs} preference page.
    At the moment it is not possible to override the autodetected settings.

    \image qtcreator-qt4-s60sdks.png

    \section2 Setting up Your Project

    After installing all the prerequisites and checking the setup in Qt Creator as described
    above, you need to make some settings for your project.
    \e{Note that the only supported build system for Qt for Symbian applications in Qt Creator
    is qmake.}

    \section3 Building your Project

    Before you can build your project for the Symbian Platform you need to create build
    configurations for it.
    Open \gui{Projects mode} and make sure that your project is selected for editing in
    \gui{Edit Project Settings for Project ...}. Add debug and release build configurations
    for the Symbian target by selecting the corresponding Qt version from the build configuration
    \gui{Add} menu.

    \image qtcreator-symbian-add-buildconfiguration.png

    The created build configurations default to using the GCCE tool chain. If you want to build
    for the device using RVCT, or for the Symbian Emulator using WINSCW, change the tool chain in
    the \gui{General} section of the build configuration settings (press the \gui{Show Details}
    button first).

    Now you can switch to building your project for the device by selecting one of the
    new build configurations as the active configuration at the top of \gui{Projects mode}.

    \image qtcreator-symbian-change-buildconfiguration.png

    \section3 Running your Project on the Device

    Similar to the build configuration setup for your project you need to create a run configuration
    for running your project on a Symbian device. Add a new run configuration in \gui{Projects mode}
    via \gui{Run Settings}, \gui{Add -> YourApplication on Symbian Device} button.

    \image qtcreator-symbian-add-runconfiguration.png

    \image qtcreator-symbian-details-runconfiguration.png

    In the details of the run configuration you can specify a certificate to use, and
    select one of the devices that you have currently attached to your computer.
    The only connection mode supported at the moment is USB in \e{PC Suite} mode.
    For actually running your application on the device, you need to set the device run configuration
    as the active configuration at the top of \gui{Projects mode}.
    Start the \gui{App TRK} application on your device and press the run button to create
    a package for your application, deploy, install and run it automatically on your device.

    \image qtcreator-symbian-change-runconfiguration.png

    When something goes wrong check the following things:
    \list
        \o Is the device run configuration selected as the active run configuration?
        \o Did you build your application with one of the special Qt versions created for the
            S60 SDKs?
        \o Is the device connected via USB in \e{PC Suite} mode?
        \o Is App TRK running on the device, using the USB connection, and does it have status
            \e{connected}?
        \o Is your device detected and selected in the run configuration details?
    \endlist

    If neither of this helps to solve your problem, search the qt-creator@trolltech.com
    mailinglist archives or provide feedback to us via the methods described on the
    \l{http://qt.gitorious.org/qt-creator/pages/Home}{Qt Creator Development Wiki}.

*/

/*!
    \contentspage index.html
    \previouspage creator-qt-for-symbian.html
    \page creator-external-library-handling.html
    \nextpage creator-tips.html

@@ -1588,7 +1757,8 @@
    \bold{Show and Hide the Sidebar}

    You can show and hide the the sidebar in \gui Edit and \gui Debug mode by
    clicking on the corresponding icon, or by pressing \key{Alt+0}.
    clicking on the corresponding icon, or by pressing \key{Alt+0} (Mac OS X:
    \key{Cmd+0}).

    \bold{Display Signals and Slots}

@@ -1676,19 +1846,19 @@
            \o F4
        \row
            \o Toggle Side Bar
            \o Alt + 0
            \o Alt + 0 / Cmd + 0
        \row
            \o Toggle \gui{Build Issues} pane
            \o Alt + 1
            \o Alt + 1 / Cmd + 1
        \row
            \o Toggle \gui{Search Results} pane
            \o Alt + 2
            \o Alt + 2 / Cmd + 2
        \row
            \o Toggle \gui{Application Output} pane
            \o Alt + 3
            \o Alt + 3 / Cmd + 3
        \row
            \o Toggle \gui{Compile Output} pane
            \o Alt + 4
            \o Alt + 4 / Cmd + 4
    \endtable
*/

@@ -1786,7 +1956,21 @@
    There are some known issues with Qt Creator.
    The development team is aware of those, there is no need to report them as bug.

    \section1 Known Issues of Version 1.2.93
    \section1 Known Issues of Version 1.2.92

    \list
        \o Debugging Helper do not work while doing On Device Debugging.

        \o QML Preview (Run Project) only works if build against Qt with
           Declarative UI.

        \o Setting breakpoints in code that is compiled into the binary more
           than once does not work.

           \endlist


    \section1 Known Issues of Version 1.2.0 and 1.2.1

    \list
        \o Gdb on Windows may not work if the 'Embassy \reg Security Center' software
Original line number Diff line number Diff line
@@ -19,16 +19,16 @@ sources.fileextensions = "qtcreator.qdoc addressbook-sdk.qdoc"

qhp.projects            = QtCreator
qhp.QtCreator.file             = qtcreator.qhp
qhp.QtCreator.namespace        = com.nokia.qtcreator.1293
qhp.QtCreator.namespace        = com.nokia.qtcreator.1292
qhp.QtCreator.virtualFolder    = doc
qhp.QtCreator.indexTitle       = Qt Creator
qhp.QtCreator.indexRoot        =
qhp.QtCreator.extraFiles       = classic.css \
                          images/qt-logo.png \
                          images/qtcreator-screenshots.png
qhp.QtCreator.filterAttributes = qtcreator 1.2.93
qhp.QtCreator.customFilters.QtCreator.name = Qt Creator 1.2.93
qhp.QtCreator.customFilters.QtCreator.filterAttributes = qtcreator 1.2.93
qhp.QtCreator.filterAttributes = qtcreator 1.2.92
qhp.QtCreator.customFilters.QtCreator.name = Qt Creator 1.2.92
qhp.QtCreator.customFilters.QtCreator.filterAttributes = qtcreator 1.2.92

# macros.qdocconf

@@ -211,5 +211,5 @@ HTML.footer = "<p /><address><hr /><div align=\"center\">\n" \
                          "<table width=\"100%\" cellspacing=\"0\" border=\"0\"><tr class=\"address\">\n" \
                          "<td width=\"40%\" align=\"left\">Copyright &copy; 2009 Nokia Corporation and/or its subsidiary(-ies)</td>\n" \
                          "<td width=\"20%\" align=\"center\"><a href=\"trademarks.html\">Trademarks</a></td>\n" \
                          "<td width=\"40%\" align=\"right\"><div align=\"right\">Qt Creator 1.2.93</div></td>\n" \
                          "<td width=\"40%\" align=\"right\"><div align=\"right\">Qt Creator 1.2.92</div></td>\n" \
                          "</tr></table></div></address>"
+4 −0
Original line number Diff line number Diff line
@@ -108,3 +108,7 @@ linux-g++-* {
    # to prevent checking in code that does not compile on other platforms.
    QMAKE_LFLAGS += -Wl,--allow-shlib-undefined -Wl,--no-undefined
}

# Handle S60 support: default on Windows, conditionally built on other platforms.
win32:SUPPORT_QT_S60=1
else:SUPPORT_QT_S60 = $$(QTCREATOR_WITH_S60)
Original line number Diff line number Diff line
@@ -303,48 +303,6 @@
 <shortcut id="FormEditor.FormSettings" >
  <key value="" />
 </shortcut>
 <shortcut id="Git.Diff" >
  <key value="Alt+G, Alt+D" />
 </shortcut>
 <shortcut id="Git.Status" >
  <key value="Alt+G, Alt+S" />
 </shortcut>
 <shortcut id="Git.Log" >
  <key value="Alt+G, Alt+L" />
 </shortcut>
 <shortcut id="Git.Blame" >
  <key value="" />
 </shortcut>
 <shortcut id="Git.Undo" >
  <key value="Alt+G, Alt+U" />
 </shortcut>
 <shortcut id="Git.Add" >
  <key value="Alt+G, Alt+A" />
 </shortcut>
 <shortcut id="Git.DiffProject" >
  <key value="" />
 </shortcut>
 <shortcut id="Git.StatusProject" >
  <key value="" />
 </shortcut>
 <shortcut id="Git.LogProject" >
  <key value="Alt+G, Alt+K" />
 </shortcut>
 <shortcut id="Git.UndoProject" >
  <key value="" />
 </shortcut>
 <shortcut id="Git.ShowCommit" >
  <key value="" />
 </shortcut>
 <shortcut id="Git.Commit" >
  <key value="Alt+G, Alt+C" />
 </shortcut>
 <shortcut id="Git.Pull" >
  <key value="" />
 </shortcut>
 <shortcut id="Git.Push" >
  <key value="" />
 </shortcut>
 <shortcut id="Help.Home" >
  <key value="" />
 </shortcut>
@@ -390,12 +348,6 @@
 <shortcut id="QtScriptEditor.Run" >
  <key value="Ctrl+R" />
 </shortcut>
 <shortcut id="CodePaster.Post" >
  <key value="Alt+C, Alt+P" />
 </shortcut>
 <shortcut id="CodePaster.Fetch" >
  <key value="Alt+C, Alt+F" />
 </shortcut>
 <shortcut id="Debugger.StartExternal" >
  <key value="" />
 </shortcut>
@@ -459,57 +411,6 @@
 <shortcut id="QtCreator.Mode.Debug" >
  <key value="Meta+3" />
 </shortcut>
 <shortcut id="Perforce.Edit" >
  <key value="" />
 </shortcut>
 <shortcut id="Perforce.Add" >
  <key value="" />
 </shortcut>
 <shortcut id="Perforce.Delete" >
  <key value="" />
 </shortcut>
 <shortcut id="Perforce.Revert" >
  <key value="" />
 </shortcut>
 <shortcut id="Perforce.DiffCurrent" >
  <key value="" />
 </shortcut>
 <shortcut id="Perforce.DiffProject" >
  <key value="" />
 </shortcut>
 <shortcut id="Perforce.DiffAll" >
  <key value="" />
 </shortcut>
 <shortcut id="Perforce.Opened" >
  <key value="" />
 </shortcut>
 <shortcut id="Perforce.Submit" >
  <key value="" />
 </shortcut>
 <shortcut id="Perforce.PendingChanges" >
  <key value="" />
 </shortcut>
 <shortcut id="Perforce.Describe" >
  <key value="" />
 </shortcut>
 <shortcut id="Perforce.AnnotateCurrent" >
  <key value="" />
 </shortcut>
 <shortcut id="Perforce.Annotate" >
  <key value="" />
 </shortcut>
 <shortcut id="Perforce.FilelogCurrent" >
  <key value="" />
 </shortcut>
 <shortcut id="Perforce.Filelog" >
  <key value="" />
 </shortcut>
 <shortcut id="Perforce.SubmitCurrentLog" >
  <key value="" />
 </shortcut>
 <shortcut id="Perforce.DiffSelectedFilesInLog" >
  <key value="" />
 </shortcut>
 <shortcut id="Bookmarks.Toggle" >
  <key value="Ctrl+D" />
 </shortcut>
@@ -531,36 +432,6 @@
 <shortcut id="Bookmarks.NextDocument" >
  <key value="" />
 </shortcut>
 <shortcut id="TextEditor.SelectEncoding" >
  <key value="" />
 </shortcut>
 <shortcut id="TextEditor.AutoIndentSelection" >
  <key value="Ctrl+I" />
 </shortcut>
 <shortcut id="TextEditor.VisualizeWhitespace" >
  <key value="" />
 </shortcut>
 <shortcut id="TextEditor.TextWrapping" >
  <key value="" />
 </shortcut>
 <shortcut id="TextEditor.UnCommentSelection" >
  <key value="Ctrl+/" />
 </shortcut>
 <shortcut id="TextEditor.DeleteLine" >
  <key value="Shift+Del" />
 </shortcut>
 <shortcut id="TextEditor.UnCollapseAll" >
  <key value="" />
 </shortcut>
 <shortcut id="FindFilter.Files on Disk" >
  <key value="" />
 </shortcut>
 <shortcut id="FindFilter.All Projects" >
  <key value="Ctrl+Shift+F" />
 </shortcut>
 <shortcut id="FindFilter.Current Project" >
  <key value="Ctrl+Alt+F" />
 </shortcut>
 <shortcut id="QtCreator.Pane.Problems" >
  <key value="Ctrl+1" />
 </shortcut>
Original line number Diff line number Diff line
@@ -184,8 +184,8 @@
	<key>CFBundleIdentifier</key>
	<string>com.nokia.qtcreator</string>
	<key>CFBundleVersion</key>
	<string>1.2.93</string>
	<string>1.2.92</string>
	<key>CFBundleShortVersionString</key>
	<string>1.2.93</string>
	<string>1.2.92</string>
</dict>
</plist>
Original line number Diff line number Diff line
@@ -34,56 +34,6 @@

using namespace CPlusPlus;

    TranslationUnit *_previousUnit;
FastMacroResolver::FastMacroResolver(TranslationUnit *unit, const Snapshot &snapshot)
    : _unit(unit), _snapshot(snapshot)
{
    const QString fileName = QString::fromUtf8(unit->fileName(), unit->fileNameLength());

    QSet<QString> processed;
    updateCache(fileName, &processed);
}

bool FastMacroResolver::isMacro(TranslationUnit *unit, unsigned tokenIndex) const
{
    if (unit != _unit){
        qWarning() << Q_FUNC_INFO << "unexpected translation unit:" << unit->fileName();
        return false;
    }

    const Token &tk = unit->tokenAt(tokenIndex);
    if (tk.isNot(T_IDENTIFIER))
        return false;

    Identifier *id = tk.identifier;
    const QByteArray macroName = QByteArray::fromRawData(id->chars(), id->size());
    return _cachedMacros.contains(macroName);
}

void FastMacroResolver::updateCache(const QString &fileName, QSet<QString> *processed)
{
    if (processed->contains(fileName))
        return;

    processed->insert(fileName);

    if (Document::Ptr doc = _snapshot.value(fileName)) {
        const QList<Macro> definedMacros = doc->definedMacros();

        for (int i = definedMacros.size() - 1; i != -1; --i) {
            const Macro &macro = definedMacros.at(i);

            if (macro.isHidden())
                _cachedMacros.remove(macro.name());
            else
                _cachedMacros.insert(macro.name());
        }

        foreach (const Document::Include &incl, doc->includes())
            updateCache(incl.fileName(), processed);
    }
}

FastPreprocessor::FastPreprocessor(const Snapshot &snapshot)
    : _snapshot(snapshot),
      _preproc(this, &_env)
Original line number Diff line number Diff line
@@ -41,22 +41,6 @@

namespace CPlusPlus {

class CPLUSPLUS_EXPORT FastMacroResolver: public MacroResolver
{
public:
    FastMacroResolver(TranslationUnit *unit, const Snapshot &snapshot);

    virtual bool isMacro(TranslationUnit *unit, unsigned tokenIndex) const;

private:
    void updateCache(const QString &fileName, QSet<QString> *processed);

private:
    TranslationUnit *_unit;
    Snapshot _snapshot;
    QSet<QByteArray> _cachedMacros;
};

class CPLUSPLUS_EXPORT FastPreprocessor: public Client
{
    Environment _env;
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@
#include "LookupContext.h"
#include "ResolveExpression.h"
#include "Overview.h"
#include "CppBindings.h"

#include <CoreTypes.h>
#include <Symbols.h>
@@ -501,27 +502,86 @@ void LookupContext::expand(Scope *scope,
    }
}

Symbol *LookupContext::canonicalSymbol(Symbol *symbol)
static void visibleClassBindings_helper(ClassBinding *classBinding,
                                        QList<ClassBinding *> *allClassBindings,
                                        QSet<ClassBinding *> *processed)
{
    Symbol *canonical = symbol;
    if (! classBinding)
        return;

    for (; symbol; symbol = symbol->next()) {
        if (symbol->name() == canonical->name())
            canonical = symbol;
    else if (processed->contains(classBinding))
        return;

    processed->insert(classBinding);

    foreach (ClassBinding *baseClassBinding, classBinding->baseClassBindings)
        visibleClassBindings_helper(baseClassBinding, allClassBindings, processed);

    allClassBindings->append(classBinding);
}

    return canonical;
static QList<ClassBinding *> visibleClassBindings(Symbol *symbol, NamespaceBinding *globalNamespace)
{
    QList<ClassBinding *> classBindings;

    if (! symbol)
        return classBindings;

    else if (Class *klass = symbol->asClass()) {
        QSet<ClassBinding *> processed;

        visibleClassBindings_helper(NamespaceBinding::find(klass, globalNamespace),
                                    &classBindings, &processed);
    }

Symbol *LookupContext::canonicalSymbol(const QList<Symbol *> &candidates)
    return classBindings;
}

Symbol *LookupContext::canonicalSymbol(Symbol *symbol,
                                       NamespaceBinding *globalNamespace)
{
    Symbol *canonicalSymbol = LookupContext::canonicalSymbol(symbol);

    if (Identifier *symbolId = canonicalSymbol->identifier()) {
        if (symbolId && canonicalSymbol->type()->isFunctionType()) {
            Class *enclosingClass = canonicalSymbol->scope()->owner()->asClass();
            const QList<ClassBinding *> classBindings = visibleClassBindings(enclosingClass, globalNamespace);

            foreach (ClassBinding *baseClassBinding, classBindings) {
                if (! baseClassBinding)
                    continue;

                foreach (Class *baseClass, baseClassBinding->symbols) {
                    if (! baseClass)
                        continue;

                    for (Symbol *c = baseClass->members()->lookat(symbolId); c; c = c->next()) {
                        if (! symbolId->isEqualTo(c->identifier()))
                            continue;
                        else if (Function *f = c->type()->asFunctionType()) {
                            if (f->isVirtual())
                                return LookupContext::canonicalSymbol(f);
                        }
                    }
                }
            }
        }
    }

    return canonicalSymbol;
}

Symbol *LookupContext::canonicalSymbol(const QList<Symbol *> &candidates,
                                       NamespaceBinding *globalNamespaceBinding)
{
    if (candidates.isEmpty())
        return 0;

    return canonicalSymbol(candidates.first());
    return canonicalSymbol(candidates.first(), globalNamespaceBinding);
}

Symbol *LookupContext::canonicalSymbol(const QList<QPair<FullySpecifiedType, Symbol *> > &results)
Symbol *LookupContext::canonicalSymbol(const QList<QPair<FullySpecifiedType, Symbol *> > &results,
                                       NamespaceBinding *globalNamespaceBinding)
{
    QList<Symbol *> candidates;
    QPair<FullySpecifiedType, Symbol *> result;
@@ -529,5 +589,37 @@ Symbol *LookupContext::canonicalSymbol(const QList<QPair<FullySpecifiedType, Sym
    foreach (result, results)
        candidates.append(result.second); // ### not exacly.

    return canonicalSymbol(candidates);
    return canonicalSymbol(candidates, globalNamespaceBinding);
}


Symbol *LookupContext::canonicalSymbol(Symbol *symbol)
{
    Symbol *canonical = symbol;
    Class *canonicalClass = 0;

    for (; symbol; symbol = symbol->next()) {
        if (symbol->identifier() == canonical->identifier()) {
            canonical = symbol;

            if (Class *klass = symbol->asClass())
                canonicalClass = klass;
        }
    }

    if (canonicalClass) {
        Q_ASSERT(canonical != 0);

        if (canonical->isForwardClassDeclaration())
            return canonicalClass; // prefer class declarations when available.
    }

    if (canonical && canonical->scope()->isClassScope()) {
        Class *enclosingClass = canonical->scope()->owner()->asClass();

        if (enclosingClass->identifier() == canonical->identifier())
            return enclosingClass;
    }

    return canonical;
}
Original line number Diff line number Diff line
@@ -54,9 +54,14 @@ public:
    Document::Ptr document(const QString &fileName) const;
    Snapshot snapshot() const;

    static Symbol *canonicalSymbol(Symbol *symbol);
    static Symbol *canonicalSymbol(const QList<Symbol *> &candidates);
    static Symbol *canonicalSymbol(const QList<QPair<FullySpecifiedType, Symbol *> > &candidates); // ### FIXME
    static Symbol *canonicalSymbol(const QList<Symbol *> &candidates,
                                   NamespaceBinding *globalNamespaceBinding);

    static Symbol *canonicalSymbol(Symbol *symbol,
                                   NamespaceBinding *globalNamespaceBinding);

    static Symbol *canonicalSymbol(const QList<QPair<FullySpecifiedType, Symbol *> > &candidates,
                                   NamespaceBinding *globalNamespaceBinding);

    QList<Symbol *> resolve(Name *name) const
    { return resolve(name, visibleScopes()); }
@@ -126,6 +131,8 @@ public:
                                     QList<Scope *> *expandedScopes) const;

private:
    static Symbol *canonicalSymbol(Symbol *symbol);

    QList<Symbol *> resolveQualifiedNameId(QualifiedNameId *q,
                                           const QList<Scope *> &visibleScopes,
                                           ResolveMode mode) const;
Original line number Diff line number Diff line
<plugin name="BinEditor" version="1.2.93" compatVersion="1.2.93">
<plugin name="BinEditor" version="1.2.92" compatVersion="1.2.92">
    <vendor>Nokia Corporation</vendor>
    <copyright>(C) 2008-2009 Nokia Corporation</copyright>
    <license>
@@ -19,7 +19,7 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license>
    <description>Binary editor component.</description>
    <url>http://qt.nokia.com</url>
    <dependencyList>
        <dependency name="Core" version="1.2.93"/>
        <dependency name="TextEditor" version="1.2.93"/>
        <dependency name="Core" version="1.2.92"/>
        <dependency name="TextEditor" version="1.2.92"/>
    </dependencyList>
</plugin>
Original line number Diff line number Diff line
<plugin name="Bookmarks" version="1.2.93" compatVersion="1.2.93">
<plugin name="Bookmarks" version="1.2.92" compatVersion="1.2.92">
    <vendor>Nokia Corporation</vendor>
    <copyright>(C) 2008-2009 Nokia Corporation</copyright>
    <license>
@@ -19,8 +19,8 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license>
    <description>Bookmarks in text editors.</description>
    <url>http://qt.nokia.com</url>
    <dependencyList>
        <dependency name="TextEditor" version="1.2.93"/>
        <dependency name="ProjectExplorer" version="1.2.93"/>
        <dependency name="Core" version="1.2.93"/>
        <dependency name="TextEditor" version="1.2.92"/>
        <dependency name="ProjectExplorer" version="1.2.92"/>
        <dependency name="Core" version="1.2.92"/>
    </dependencyList>
</plugin>
Original line number Diff line number Diff line
<plugin name="CMakeProjectManager" version="1.2.93" compatVersion="1.2.93">
<plugin name="CMakeProjectManager" version="1.2.92" compatVersion="1.2.92">
    <vendor>Nokia Corporation</vendor>
    <copyright>(C) 2008-2009 Nokia Corporation</copyright>
    <license>
@@ -19,9 +19,9 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license>
    <description>CMake support</description>
    <url>http://qt.nokia.com</url>
    <dependencyList>
        <dependency name="TextEditor" version="1.2.93"/>
        <dependency name="ProjectExplorer" version="1.2.93"/>
        <dependency name="CppTools" version="1.2.93"/>
        <dependency name="CppEditor" version="1.2.93"/>
        <dependency name="TextEditor" version="1.2.92"/>
        <dependency name="ProjectExplorer" version="1.2.92"/>
        <dependency name="CppTools" version="1.2.92"/>
        <dependency name="CppEditor" version="1.2.92"/>
    </dependencyList>
</plugin>
Original line number Diff line number Diff line
<plugin name="Core" version="1.2.93" compatVersion="1.2.93">
<plugin name="Core" version="1.2.92" compatVersion="1.2.92">
    <vendor>Nokia Corporation</vendor>
    <copyright>(C) 2008-2009 Nokia Corporation</copyright>
    <license>
Original line number Diff line number Diff line
@@ -35,7 +35,7 @@ namespace Constants {

#define IDE_VERSION_MAJOR 1
#define IDE_VERSION_MINOR 2
#define IDE_VERSION_RELEASE 93
#define IDE_VERSION_RELEASE 92

#define STRINGIFY_INTERNAL(x) #x
#define STRINGIFY(x) STRINGIFY_INTERNAL(x)
Original line number Diff line number Diff line
@@ -69,6 +69,17 @@ bool CoreImpl::showOptionsDialog(const QString &group, const QString &page, QWid
    return m_mainwindow->showOptionsDialog(group, page, parent);
}

bool CoreImpl::showWarningWithOptions(const QString &title, const QString &text,
                                      const QString &details,
                                      const QString &settingsCategory,
                                      const QString &settingsId,
                                      QWidget *parent)
{
    return m_mainwindow->showWarningWithOptions(title, text,
                                                details, settingsCategory,
                                                settingsId, parent);
}

ActionManager *CoreImpl::actionManager() const
{
    return m_mainwindow->actionManager();
Original line number Diff line number Diff line
@@ -50,6 +50,11 @@ public:
    bool showOptionsDialog(const QString &group = QString(),
                           const QString &page = QString(),
                           QWidget *parent = 0);
    bool showWarningWithOptions(const QString &title, const QString &text,
                                const QString &details = QString(),
                                const QString &settingsCategory = QString(),
                                const QString &settingsId = QString(),
                                QWidget *parent = 0);

    ActionManager *actionManager() const;
    FileManager *fileManager() const ;
Original line number Diff line number Diff line
@@ -325,43 +325,39 @@ EditorManager::EditorManager(ICore *core, QWidget *parent) :
    mwindow->addAction(cmd, Constants::G_WINDOW_NAVIGATE);
    connect(m_d->m_goForwardAction, SIGNAL(triggered()), this, SLOT(goForwardInNavigationHistory()));

#ifdef Q_WS_MAC
    QString prefix = tr("Meta+E");
#else
    QString prefix = tr("Ctrl+E");
#endif

    m_d->m_splitAction = new QAction(tr("Split"), this);
    cmd = am->registerAction(m_d->m_splitAction, Constants::SPLIT, editManagerContext);
#ifndef Q_WS_MAC
    cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+E,2")));
#endif
    cmd->setDefaultKeySequence(QKeySequence(tr("%1,2").arg(prefix)));
    mwindow->addAction(cmd, Constants::G_WINDOW_SPLIT);
    connect(m_d->m_splitAction, SIGNAL(triggered()), this, SLOT(split()));

    m_d->m_splitSideBySideAction = new QAction(tr("Split Side by Side"), this);
    cmd = am->registerAction(m_d->m_splitSideBySideAction, Constants::SPLIT_SIDE_BY_SIDE, editManagerContext);
#ifndef Q_WS_MAC
    cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+E,3")));
#endif
    cmd->setDefaultKeySequence(QKeySequence(tr("%1,3").arg(prefix)));
    mwindow->addAction(cmd, Constants::G_WINDOW_SPLIT);
    connect(m_d->m_splitSideBySideAction, SIGNAL(triggered()), this, SLOT(splitSideBySide()));

    m_d->m_removeCurrentSplitAction = new QAction(tr("Remove Current Split"), this);
    cmd = am->registerAction(m_d->m_removeCurrentSplitAction, Constants::REMOVE_CURRENT_SPLIT, editManagerContext);
#ifndef Q_WS_MAC
    cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+E,0")));
#endif
    cmd->setDefaultKeySequence(QKeySequence(tr("%1,0").arg(prefix)));
    mwindow->addAction(cmd, Constants::G_WINDOW_SPLIT);
    connect(m_d->m_removeCurrentSplitAction, SIGNAL(triggered()), this, SLOT(removeCurrentSplit()));

    m_d->m_removeAllSplitsAction = new QAction(tr("Remove All Splits"), this);
    cmd = am->registerAction(m_d->m_removeAllSplitsAction, Constants::REMOVE_ALL_SPLITS, editManagerContext);
#ifndef Q_WS_MAC
    cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+E,1")));
#endif
    cmd->setDefaultKeySequence(QKeySequence(tr("%1,1").arg(prefix)));
    mwindow->addAction(cmd, Constants::G_WINDOW_SPLIT);
    connect(m_d->m_removeAllSplitsAction, SIGNAL(triggered()), this, SLOT(removeAllSplits()));

    m_d->m_gotoOtherSplitAction = new QAction(tr("Goto Other Split"), this);
    cmd = am->registerAction(m_d->m_gotoOtherSplitAction, Constants::GOTO_OTHER_SPLIT, editManagerContext);
#ifndef Q_WS_MAC
    cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+E,o")));
#endif
    cmd->setDefaultKeySequence(QKeySequence(tr("%1,o").arg(prefix)));
    mwindow->addAction(cmd, Constants::G_WINDOW_SPLIT);
    connect(m_d->m_gotoOtherSplitAction, SIGNAL(triggered()), this, SLOT(gotoOtherSplit()));

Original line number Diff line number Diff line
@@ -68,7 +68,7 @@
*/

/*!
    \fn void ICore::showOptionsDialog(const QString &group = QString(),
    \fn bool ICore::showOptionsDialog(const QString &group = QString(),
                               const QString &page = QString())
    \brief Opens the application options/preferences dialog with preselected
    \a page in a specified \a group.
@@ -76,6 +76,20 @@
    The arguments refer to the string IDs of the corresponding IOptionsPage.
*/

/*!
    \fn bool ICore::showWarningWithOptions(const QString &title, const QString &text,
                                   const QString &details = QString(),
                                   const QString &settingsCategory = QString(),
                                   const QString &settingsId = QString(),
                                   QWidget *parent = 0);

    \brief Show a warning message with a button that opens a settings page.

    Should be used to display configuration errors and point users to the setting.
    Returns true if the settings dialog was accepted.
*/


/*!
    \fn ActionManager *ICore::actionManager() const
    \brief Returns the application's action manager.
Original line number Diff line number Diff line
@@ -75,6 +75,12 @@ public:
                                   const QString &page = QString(),
                                   QWidget *parent = 0) = 0;

    virtual bool showWarningWithOptions(const QString &title, const QString &text,
                                       const QString &details = QString(),
                                       const QString &settingsCategory = QString(),
                                       const QString &settingsId = QString(),
                                       QWidget *parent = 0) = 0;

    virtual ActionManager *actionManager() const = 0;
    virtual FileManager *fileManager() const = 0;
    virtual UniqueIDManager *uniqueIDManager() const = 0;
Original line number Diff line number Diff line
@@ -87,6 +87,7 @@
#include <QtGui/QWizard>
#include <QtGui/QPrinter>
#include <QtGui/QToolButton>
#include <QtGui/QMessageBox>

/*
#ifdef Q_OS_UNIX
@@ -1262,3 +1263,28 @@ void MainWindow::setFullScreen(bool on)
    }
}

// Display a warning with an additional button to open
// the debugger settings dialog if settingsId is nonempty.

bool MainWindow::showWarningWithOptions(const QString &title,
                                        const QString &text,
                                        const QString &details,
                                        const QString &settingsCategory,
                                        const QString &settingsId,
                                        QWidget *parent)
{
    if (parent == 0)
        parent = this;
    QMessageBox msgBox(QMessageBox::Warning, title, text,
                       QMessageBox::Ok, parent);
    if (details.isEmpty())
        msgBox.setDetailedText(details);
    QAbstractButton *settingsButton = 0;
    if (!settingsId.isEmpty() || !settingsCategory.isEmpty())
        settingsButton = msgBox.addButton(tr("Settings..."), QMessageBox::AcceptRole);
    msgBox.exec();
    if (settingsButton && msgBox.clickedButton() == settingsButton) {
        return showOptionsDialog(settingsCategory, settingsId);
    }
    return false;
}
Original line number Diff line number Diff line
@@ -138,6 +138,12 @@ public slots:
                           const QString &page = QString(),
                           QWidget *parent = 0);

    bool showWarningWithOptions(const QString &title, const QString &text,
                                const QString &details = QString(),
                                const QString &settingsCategory = QString(),
                                const QString &settingsId = QString(),
                                QWidget *parent = 0);

protected:
    virtual void changeEvent(QEvent *e);
    virtual void closeEvent(QCloseEvent *event);
Original line number Diff line number Diff line
<plugin name="CodePaster" version="1.2.93" compatVersion="1.2.93">
<plugin name="CodePaster" version="1.2.92" compatVersion="1.2.92">
    <vendor>Nokia Corporation</vendor>
    <copyright>(C) 2008-2009 Nokia Corporation</copyright>
    <license>
@@ -19,8 +19,8 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license>
    <description>Codepaster plugin for pushing/fetching diff from server</description>
    <url>http://qt.nokia.com</url>
    <dependencyList>
        <dependency name="TextEditor" version="1.2.93"/>
        <dependency name="ProjectExplorer" version="1.2.93"/>
        <dependency name="Core" version="1.2.93"/>
        <dependency name="TextEditor" version="1.2.92"/>
        <dependency name="ProjectExplorer" version="1.2.92"/>
        <dependency name="Core" version="1.2.92"/>
    </dependencyList>
</plugin>
Original line number Diff line number Diff line
@@ -113,17 +113,13 @@ bool CodepasterPlugin::initialize(const QStringList &arguments, QString *error_m

    m_postAction = new QAction(tr("Paste Snippet..."), this);
    command = actionManager->registerAction(m_postAction, "CodePaster.Post", globalcontext);
#ifndef Q_WS_MAC
    command->setDefaultKeySequence(QKeySequence(tr("Alt+C,Alt+P")));
#endif
    connect(m_postAction, SIGNAL(triggered()), this, SLOT(post()));
    cpContainer->addAction(command);

    m_fetchAction = new QAction(tr("Fetch Snippet..."), this);
    command = actionManager->registerAction(m_fetchAction, "CodePaster.Fetch", globalcontext);
#ifndef Q_WS_MAC
    command->setDefaultKeySequence(QKeySequence(tr("Alt+C,Alt+F")));
#endif
    connect(m_fetchAction, SIGNAL(triggered()), this, SLOT(fetch()));
    cpContainer->addAction(command);

Original line number Diff line number Diff line
<plugin name="CppEditor" version="1.2.93" compatVersion="1.2.93">
<plugin name="CppEditor" version="1.2.92" compatVersion="1.2.92">
    <vendor>Nokia Corporation</vendor>
    <copyright>(C) 2008-2009 Nokia Corporation</copyright>
    <license>
@@ -19,8 +19,8 @@ will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.</license>
    <description>C/C++ editor component.</description>
    <url>http://qt.nokia.com</url>
    <dependencyList>
        <dependency name="Core" version="1.2.93"/>
        <dependency name="TextEditor" version="1.2.93"/>
        <dependency name="CppTools" version="1.2.93"/>
        <dependency name="Core" version="1.2.92"/>
        <dependency name="TextEditor" version="1.2.92"/>
        <dependency name="CppTools" version="1.2.92"/>
    </dependencyList>
</plugin>