Merge remote-tracking branch 'origin/2.8'
Conflicts: src/plugins/fakevim/fakevimhandler.cpp Change-Id: I8101f18b87859924644471817d4f1408790d5628
@@ -12,12 +12,4 @@
|
||||
<!-- @homeDir@ and @rootDir@ are some of the supported vars -->
|
||||
<TargetDir>@homeDir@/qtcreator-{version}</TargetDir>
|
||||
<AdminTargetDir>/opt/qtcreator-{version}</AdminTargetDir>
|
||||
|
||||
<Pages>
|
||||
<Page name="LicenseAgreementPage">
|
||||
<AcceptLicenseLabel>I have read and understood the terms contained in the above license agreements.</AcceptLicenseLabel>
|
||||
<RejectLicenseLabel>I do not accept the terms contained in the above license agreements.</RejectLicenseLabel>
|
||||
</Page>
|
||||
</Pages>
|
||||
|
||||
</Installer>
|
||||
|
||||
15
dist/installer/ifw/config/config-mac.xml.in
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0"?>
|
||||
<Installer>
|
||||
<Name>Qt Creator</Name>
|
||||
<Version>{version}</Version>
|
||||
<Title>Qt Creator {version}</Title>
|
||||
<Publisher>Qt Project</Publisher>
|
||||
<ProductUrl>http://qt-project.org</ProductUrl>
|
||||
|
||||
<Icon>logo.png</Icon>
|
||||
<Watermark>watermark.png</Watermark>
|
||||
<UninstallerName>Uninstall Qt Creator</UninstallerName>
|
||||
<!-- @homeDir@ and @rootDir@ are some of the supported vars -->
|
||||
<TargetDir>@homeDir@/Applications/Qt Creator {version}</TargetDir>
|
||||
<AllowSpaceInPath>true</AllowSpaceInPath>
|
||||
</Installer>
|
||||
@@ -11,12 +11,4 @@
|
||||
<UninstallerName>QtCreatorUninst</UninstallerName>
|
||||
<!-- @homeDir@ and @rootDir@ are some of the supported vars -->
|
||||
<TargetDir>@rootDir@/Qt/qtcreator-{version}</TargetDir>
|
||||
|
||||
<Pages>
|
||||
<Page name="LicenseAgreementPage">
|
||||
<AcceptLicenseLabel>I have read and understood the terms contained in the above license agreements.</AcceptLicenseLabel>
|
||||
<RejectLicenseLabel>I do not accept the terms contained in the above license agreements.</RejectLicenseLabel>
|
||||
</Page>
|
||||
</Pages>
|
||||
|
||||
</Installer>
|
||||
|
||||
@@ -57,7 +57,7 @@ Component.prototype.beginInstallation = function()
|
||||
else if (installer.value("os") == "x11")
|
||||
component.qtCreatorBinaryPath = component.qtCreatorBinaryPath + "/bin/qtcreator";
|
||||
else if (installer.value("os") == "mac")
|
||||
component.qtCreatorBinaryPath = "\"" + component.qtCreatorBinaryPath + "/Qt Creator.app/Contents/MacOS/Qt Creator\"";
|
||||
component.qtCreatorBinaryPath = component.qtCreatorBinaryPath + "/Qt Creator.app/Contents/MacOS/Qt Creator";
|
||||
|
||||
if ( installer.value("os") === "win" ) {
|
||||
component.setStopProcessForUpdateRequest(component.qtCreatorBinaryPath, true);
|
||||
@@ -202,7 +202,7 @@ Component.prototype.installationFinished = function()
|
||||
if (component.installed && installer.isInstaller() && installer.status == QInstaller.Success) {
|
||||
var isLaunchQtCreatorCheckBoxChecked = component.userInterface("LaunchQtCreatorCheckBoxForm").launchQtCreatorCheckBox.checked;
|
||||
if (isLaunchQtCreatorCheckBoxChecked)
|
||||
installer.executeDetached(component.qtCreatorBinaryPath);
|
||||
installer.executeDetached(component.qtCreatorBinaryPath, new Array(), "@homeDir@");
|
||||
}
|
||||
} catch(e) {
|
||||
print(e);
|
||||
|
||||
@@ -11,8 +11,7 @@ defines = Q_QDOC \
|
||||
QT_DEPRECATED \
|
||||
Q_NO_USING_KEYWORD \
|
||||
__cplusplus \
|
||||
qtquick \
|
||||
qcmanual
|
||||
$QTC_LICENSE_TYPE
|
||||
|
||||
versionsym = QT_VERSION_STR
|
||||
|
||||
|
||||
@@ -11,6 +11,8 @@ greaterThan(QT_MAJOR_VERSION, 4) {
|
||||
|
||||
VERSION_TAG = $$replace(QTCREATOR_VERSION, "[-.]", )
|
||||
|
||||
isEmpty(LICENSE_TYPE):LICENSE_TYPE=opensource
|
||||
|
||||
# unset the installdir for qdoc, so we force generation
|
||||
# of URLs for the links to the Qt documentation
|
||||
QMAKE_DOCS_INSTALLDIR =
|
||||
@@ -21,7 +23,7 @@ defineReplace(cmdEnv) {
|
||||
}
|
||||
|
||||
defineReplace(qdoc) {
|
||||
return("$$cmdEnv(SRCDIR=$$PWD OUTDIR=$$1 QTC_VERSION=$$QTCREATOR_VERSION QTC_VERSION_TAG=$$VERSION_TAG QT_INSTALL_DOCS=$$[QT_INSTALL_DOCS]) $$QDOC_BIN")
|
||||
return("$$cmdEnv(SRCDIR=$$PWD OUTDIR=$$1 QTC_VERSION=$$QTCREATOR_VERSION QTC_VERSION_TAG=$$VERSION_TAG QTC_LICENSE_TYPE=$$LICENSE_TYPE QT_INSTALL_DOCS=$$[QT_INSTALL_DOCS]) $$QDOC_BIN")
|
||||
}
|
||||
|
||||
QHP_FILE = $$OUT_PWD/doc/html/qtcreator.qhp
|
||||
|
||||
|
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 66 KiB |
|
Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 132 KiB |
|
Before Width: | Height: | Size: 63 KiB After Width: | Height: | Size: 46 KiB |
|
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 43 KiB |
BIN
doc/images/qtcreator-qml-performance-monitor-enterprise.png
Normal file
|
After Width: | Height: | Size: 26 KiB |
@@ -38,8 +38,8 @@
|
||||
for the project. For more information, see
|
||||
\l{Setting Up QML Debugging}.
|
||||
|
||||
\li In the \gui Projects mode, select Qt 4.7.4 in the \gui {Qt version}
|
||||
field.
|
||||
\li In the \gui Projects mode, select a \l{glossary-buildandrun-kit}
|
||||
{kit} with Qt version 4.7.4 or later.
|
||||
|
||||
\note To profile applications on devices, you must install Qt 4.7.4
|
||||
or later libraries on them.
|
||||
@@ -98,6 +98,11 @@
|
||||
The \gui Timeline view displays graphical representations of:
|
||||
|
||||
\list
|
||||
\if defined(enterprise)
|
||||
\li Pixmap loading times and cache sizes
|
||||
|
||||
\li Scene graph events
|
||||
\endif
|
||||
|
||||
\li Painting operations
|
||||
|
||||
@@ -113,7 +118,14 @@
|
||||
|
||||
\endlist
|
||||
|
||||
\if defined(enterprise)
|
||||
Information about the pixmap cache and scene graph events are only available
|
||||
from Qt 5.1 onwards.
|
||||
|
||||
\image qtcreator-qml-performance-monitor-enterprise.png "QML Profiler"
|
||||
\else
|
||||
\image qtcreator-qml-performance-monitor.png "QML Profiler"
|
||||
\endif
|
||||
|
||||
Each row in the timeline (6) describes a type of QML events that were
|
||||
recorded. Move the cursor on an event on a row to see how long it takes and
|
||||
|
||||
@@ -95,6 +95,7 @@
|
||||
as part of the APK, select the \gui {Bundle Qt libraries in APK} option.
|
||||
This is the default option
|
||||
when developing with Qt 5.
|
||||
It is not supported when developing with Qt 4.
|
||||
|
||||
\section1 Using Ministro to Install Qt Libraries
|
||||
|
||||
|
||||
@@ -238,11 +238,7 @@
|
||||
debugging) or runs a separate process (e.g. when using GDB server
|
||||
on embedded Linux). The host side typically
|
||||
consists of \QC itself, often with the help of an external process, such as
|
||||
\if defined(qcmanual)
|
||||
GDB or CDB.
|
||||
\else
|
||||
GDB.
|
||||
\endif
|
||||
|
||||
While this setup might look daunting, it is mostly invisible to
|
||||
the user of \QC. To start debugging on a remote target with the
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
\gui{Text Editor}.
|
||||
|
||||
These settings apply to all projects. To specify editor behavior for an
|
||||
open project, select \gui {Projects > Editor Settings}. For more
|
||||
open project, select \gui Projects > \gui Editor. For more
|
||||
information, see \l{Specifying Editor Settings}.
|
||||
|
||||
You can also specify indentation settings separately for C++ and QML files
|
||||
|
||||
@@ -71,9 +71,8 @@
|
||||
definition files as the primary location.
|
||||
|
||||
When you open a file for editing and the editor cannot find the highlight
|
||||
definition for it, an alert appears. You can turn off the alerts. You can
|
||||
also specify patterns for ignoring files. The editor will not alert you if
|
||||
highlight definitions for the ignored files are not found.
|
||||
definition for it, an alert appears. To suppress the alerts, you can specify
|
||||
patterns for ignoring files.
|
||||
|
||||
To download highlight definition files:
|
||||
|
||||
@@ -103,8 +102,8 @@
|
||||
definition files on your system, or click \gui Browse to locate
|
||||
them in the file system yourself.
|
||||
|
||||
\li In the \gui {Ignored file patterns} field, specify file patterns.
|
||||
You will not receive alerts if the highlight definitions for the
|
||||
\li In the \gui {Ignored file patterns} field, specify file patterns to
|
||||
suppress alerts if the highlight definitions for the
|
||||
specified files are not found.
|
||||
|
||||
\li Click \gui OK to save your changes.
|
||||
@@ -890,8 +889,10 @@
|
||||
\endlist
|
||||
|
||||
To configure the server, select \gui{Tools} > \gui{Options} >
|
||||
\gui{Code Pasting}. In \gui CodePaster, specify the host name of the
|
||||
CodePaster service. In \gui Fileshare, specify the path to a shared
|
||||
\gui{Code Pasting} > \gui CodePaster. In the \gui Server field, specify the
|
||||
host name of the CodePaster service.
|
||||
|
||||
Select \gui Fileshare to specify the path to a shared
|
||||
network drive. The code snippets are copied to the drive as simple files.
|
||||
You have to delete obsolete files from the drive manually.
|
||||
|
||||
@@ -903,6 +904,10 @@
|
||||
To fetch a snippet of code from the server, select \gui{Tools} >
|
||||
\gui{Code Pasting} > \gui{Fetch Snippet} or press \key{Alt+C,Alt+F}.
|
||||
|
||||
To fetch content from a URL on a CodePaster service, select \gui{Tools} >
|
||||
\gui{Code Pasting} > \gui{Fetch from URL}. The content is opened in the code
|
||||
editor.
|
||||
|
||||
\note To use \gui{Pastebin.Com}, configure the domain
|
||||
prefix in \gui{Tools} > \gui{Options} > \gui{Code Pasting} >
|
||||
\gui{Pastebin.com}.
|
||||
@@ -931,6 +936,8 @@
|
||||
or press \key {Alt+(}. To stop recording, select \gui {Tools > Macros >
|
||||
Stop Recording Macro} or press \key {Alt+)}.
|
||||
|
||||
\note The macro recorder does not support code completion.
|
||||
|
||||
To play the last macro, select \gui {Tools > Macros > Play Last Macro} or
|
||||
press \key {Alt+R}.
|
||||
|
||||
@@ -1104,8 +1111,8 @@
|
||||
|
||||
\image qtcreator-indentation.png "Text Editor Behavior options"
|
||||
|
||||
To specify different settings for a particular project, select \gui {Projects >
|
||||
Editor Settings}.
|
||||
To specify different settings for a particular project, select \gui Projects
|
||||
> \gui Editor.
|
||||
|
||||
You can specify how to interpret the \key Tab and \key Backspace key
|
||||
presses and how to align continuation lines.
|
||||
@@ -1297,8 +1304,7 @@
|
||||
|
||||
\section1 Advanced Search
|
||||
|
||||
To search through projects, files on a file system or the currently open
|
||||
file:
|
||||
To search through projects, files on a file system or currently open files:
|
||||
|
||||
\list 1
|
||||
|
||||
@@ -1326,6 +1332,8 @@
|
||||
|
||||
\li \gui{Current File} searches only the current file.
|
||||
|
||||
\li \gui {Open Documents} searches all open files.
|
||||
|
||||
\endlist
|
||||
|
||||
\li Enter the text you are looking for and click \gui Search.
|
||||
|
||||
@@ -64,7 +64,6 @@
|
||||
\li Subversion
|
||||
\li \l{http://subversion.apache.org/}
|
||||
\li Subversion version 1.6.17 and later
|
||||
\li
|
||||
\endtable
|
||||
|
||||
\section1 Setting Up Version Control Systems
|
||||
@@ -555,10 +554,10 @@
|
||||
|
||||
\image qtcreator-gerrit.png
|
||||
|
||||
To view details of the selected change, select \gui Diff.
|
||||
To view details of the selected change, select \gui Show.
|
||||
|
||||
To apply the selected change to the top of your local repository, select
|
||||
\gui Apply. To remove the change after testing it, select \gui Tools >
|
||||
To cherry-pick the selected change to the local repository, select
|
||||
\gui {Cherry Pick}. To remove the change after testing it, select \gui Tools >
|
||||
\gui Git > \gui {Local Repository} > \gui Reset. In the
|
||||
\gui {Undo Changes to} dialog, select the
|
||||
state to reset the working directory to, and then select \gui OK.
|
||||
|
||||
@@ -100,9 +100,7 @@
|
||||
You can look up any issue in the
|
||||
\l{http://bugreports.qt-project.org/}{Qt bug tracker}.
|
||||
|
||||
\if defined(qcmanual)
|
||||
\include widgets/creator-faq-qtdesigner.qdocinc
|
||||
\endif
|
||||
|
||||
\section1 Help Questions
|
||||
|
||||
|
||||
@@ -19,11 +19,7 @@
|
||||
/*!
|
||||
|
||||
\contentspage index.html
|
||||
\if defined(qcmanual)
|
||||
\previouspage creator-developing-generic-linux.html
|
||||
\else
|
||||
\previouspage creator-developing-meego.html
|
||||
\endif
|
||||
\page creator-developing-maemo.html
|
||||
\nextpage creator-developing-meego.html
|
||||
|
||||
@@ -40,11 +36,9 @@
|
||||
development is disabled by default. To enable it, select \gui Help >
|
||||
\gui {About Plugins} > \gui {Device Support} > \gui Madde and restart \QC.
|
||||
|
||||
\if defined(qcmanual)
|
||||
For more
|
||||
information about the Maemo 5 platform, see
|
||||
\l{http://maemo.org/intro/platform/}{Software Platform} on the Maemo web site.
|
||||
\endif
|
||||
|
||||
For more information about developing applications for the Maemo 5
|
||||
platform, select \gui {Help > Index} and look for \gui {Platform Notes},
|
||||
@@ -58,10 +52,8 @@
|
||||
|
||||
\li Maemo 5 device: Nokia N900 with software update release 1.3
|
||||
(V20.2010.36-2) or later installed.
|
||||
\if defined(qcmanual)
|
||||
\li MADDE cross-platform Maemo development
|
||||
tool (installed as part of the Qt 4 SDK).
|
||||
\endif
|
||||
|
||||
\li Nokia USB drivers.
|
||||
|
||||
@@ -234,13 +226,7 @@
|
||||
testing. If you write applications that use Qt Mobility APIs, you might want
|
||||
to test them with real user data. To create a connection as a user, specify
|
||||
the \gui Username and \gui Password in \QC. For more information, see
|
||||
\if defined(qcmanual)
|
||||
\l{Testing with User Data on Maemo Devices}.
|
||||
\else
|
||||
\l{http://doc.qt.digia.com/qtcreator/creator-developing-maemo.html#testing-with-user-data-on-maemo-devices}
|
||||
{Testing with User Data on Maemo Devices}.
|
||||
\endif
|
||||
|
||||
|
||||
You can protect the connections between \QC and
|
||||
a device by using either a password or an SSH key. If you use a password, you
|
||||
@@ -250,22 +236,11 @@
|
||||
If you do not have an SSH key, you can create it in \QC.
|
||||
Encrypted keys are not supported. For more
|
||||
information, see
|
||||
\if defined(qcmanual)
|
||||
\l{Generating SSH Keys}.
|
||||
\else
|
||||
\l{http://doc.qt.digia.com/qtcreator/creator-developing-meego.html#generating-ssh-keys}
|
||||
{Generating SSH Keys}.
|
||||
\endif
|
||||
|
||||
|
||||
You can view processes running on devices and kill them. For more
|
||||
information, see
|
||||
\if defined(qcmanual)
|
||||
\l{Managing Device Processes}.
|
||||
\else
|
||||
\l{http://doc.qt.digia.com/qtcreator/creator-developing-meego.html#managing-device-processes}
|
||||
{Managing Device Processes}.
|
||||
\endif
|
||||
|
||||
|
||||
To configure connections between \QC and a
|
||||
@@ -309,8 +284,6 @@
|
||||
|
||||
\endlist
|
||||
|
||||
\if defined(qcmanual)
|
||||
|
||||
\li To test applications on the emulator (QEMU) separately, you must
|
||||
create a connection to it from the development PC. If you installed
|
||||
Qt 4 SDK, the connection is created automatically and you can omit this
|
||||
@@ -330,7 +303,6 @@
|
||||
connection.
|
||||
|
||||
\endlist
|
||||
\endif
|
||||
|
||||
\li Select \gui Tools > \gui Options > \gui {Build & Run} >
|
||||
\gui Kits > \gui Add to add a kit for building for the device:
|
||||
|
||||
@@ -21,11 +21,7 @@
|
||||
\contentspage index.html
|
||||
\previouspage creator-developing-maemo.html
|
||||
\page creator-developing-meego.html
|
||||
\if defined(qcmanual)
|
||||
\nextpage creator-developing-qnx.html
|
||||
\else
|
||||
\nextpage creator-developing-maemo.html
|
||||
\endif
|
||||
|
||||
\title Connecting MeeGo Harmattan Devices
|
||||
|
||||
@@ -39,12 +35,9 @@
|
||||
development is disabled by default. To enable it, select \gui Help >
|
||||
\gui {About Plugins} > \gui {Device Support} > \gui Madde and restart \QC.
|
||||
|
||||
\if defined(qcmanual)
|
||||
For more information about the Harmattan platform, see
|
||||
\l{http://library.developer.nokia.com/topic/MeeGo_1.2_Harmattan_API/html/guide/html/Developer_Library_Harmattan_overview_5dcf.html}
|
||||
{Harmattan Overview} in the MeeGo 1.2 Harmattan Developer Library.
|
||||
\endif
|
||||
|
||||
|
||||
\note Qt 4 SDK does not contain the tool chains for building applications for
|
||||
other MeeGo devices than MeeGo Harmattan. You can try to run applications
|
||||
@@ -247,13 +240,7 @@
|
||||
If you write applications that use Qt Mobility APIs, you might want to test
|
||||
them with real user data. To create a connection as a user, specify the
|
||||
\gui Username and \gui Password in \QC. For more information, see
|
||||
\if defined(qcmanual)
|
||||
\l{Testing with User Data on MeeGo Devices}.
|
||||
\else
|
||||
\l{http://doc.qt.digia.com/qtcreator/creator-developing-meego.html#testing-with-user-data-on-meego-devices}
|
||||
{Testing with User Data on MeeGo Devices}.
|
||||
\endif
|
||||
|
||||
|
||||
You can protect the connections between \QC and a device by using
|
||||
either a password or an SSH key. If you use a password, you must generate it
|
||||
@@ -262,23 +249,11 @@
|
||||
|
||||
If you do not have an SSH key, you can create it in \QC. Encrypted
|
||||
keys are not supported. For more information, see
|
||||
\if defined(qcmanual)
|
||||
\l{Generating SSH Keys}.
|
||||
\else
|
||||
\l{http://doc.qt.digia.com/qtcreator/creator-developing-meego.html#generating-ssh-keys}
|
||||
{Generating SSH Keys}.
|
||||
\endif
|
||||
|
||||
|
||||
You can view processes running on devices and kill them. For more
|
||||
information, see
|
||||
\if defined(qcmanual)
|
||||
\l{Managing Device Processes}.
|
||||
\else
|
||||
\l{http://doc.qt.digia.com/qtcreator/creator-developing-meego.html#managing-device-processes}
|
||||
{Managing Device Processes}.
|
||||
\endif
|
||||
|
||||
|
||||
To configure connections between \QC and a device:
|
||||
|
||||
@@ -324,8 +299,6 @@
|
||||
|
||||
\endlist
|
||||
|
||||
\if defined(qcmanual)
|
||||
|
||||
\li To test applications on the emulator (QEMU), you must
|
||||
create a connection to it from the development PC. If you installed
|
||||
Qt 4 SDK, the connection is created automatically and you can omit this
|
||||
@@ -355,8 +328,6 @@
|
||||
|
||||
\endlist
|
||||
|
||||
\endif
|
||||
|
||||
\li Select \gui Tools > \gui Options > \gui {Build & Run} >
|
||||
\gui Kits > \gui Add to add a kit for building for the device:
|
||||
|
||||
@@ -410,8 +381,6 @@
|
||||
|
||||
\endlist
|
||||
|
||||
\if defined(qcmanual)
|
||||
|
||||
\section2 Testing with User Data on MeeGo Devices
|
||||
|
||||
To run your application as the default user, you must first assign a
|
||||
@@ -436,8 +405,6 @@
|
||||
\include linux-mobile/linuxdev-keys.qdocinc
|
||||
\include linux-mobile/linuxdev-processes.qdocinc
|
||||
|
||||
\endif
|
||||
|
||||
\section1 Troubleshooting Harmattan Connections
|
||||
|
||||
The addresses used in this example might be reserved by some other
|
||||
|
||||
@@ -104,11 +104,9 @@
|
||||
|
||||
\li Creating new CMake projects with \QC is not supported.
|
||||
|
||||
\if defined(qcmanual)
|
||||
\li On Windows, you must create projects for Maemo 5 and Harmattan
|
||||
device types on the same partition where you installed Qt 4 SDK, \QC, and
|
||||
MADDE.
|
||||
\endif
|
||||
|
||||
\li If error messages displayed in the \gui {Compile Output} pane contain
|
||||
paths where slashes are missing (for example, C:QtSDK),
|
||||
|
||||
@@ -51,11 +51,6 @@
|
||||
\li Develop Qt applications for desktop and mobile devices
|
||||
\li \l{http://qt-project.org}{Qt Developer Network}
|
||||
|
||||
\row
|
||||
\li Develop Qt applications for Nokia mobile devices
|
||||
\li \l{http://www.developer.nokia.com/Develop/Qt/}
|
||||
{Nokia Developer - Qt}
|
||||
|
||||
\row
|
||||
\li Participate in Qt development
|
||||
\li \l{http://qt-project.org/contribute}{Contribute to Qt}
|
||||
|
||||
@@ -115,8 +115,4 @@
|
||||
|
||||
\endlist
|
||||
|
||||
For more information about user experience techniques for mobile devices,
|
||||
see the \l{http://www.developer.nokia.com/Resources/Library/Design_and_UX}
|
||||
on Nokia Developer.
|
||||
|
||||
*/
|
||||
|
||||
@@ -98,7 +98,6 @@
|
||||
|
||||
\list
|
||||
|
||||
\if defined(qcmanual)
|
||||
\li Qt GUI Application
|
||||
|
||||
Use \QD forms to design a Qt widget based user interface for the
|
||||
@@ -110,7 +109,6 @@
|
||||
mobile devices and C++ to implement the application logic.
|
||||
Select this template to develop for devices that support only
|
||||
Qt 4.6.x
|
||||
\endif
|
||||
|
||||
\li Qt Quick Application (Built-in Types)
|
||||
|
||||
@@ -204,6 +202,12 @@
|
||||
Subprojects that enable you to structure your qmake projects as
|
||||
a tree hierarchy
|
||||
|
||||
\li Code Snippet
|
||||
|
||||
Creates a qmake project from a code snippet. When fixing bug
|
||||
reports that contain a code snippet, you can place the code
|
||||
snippet into a project to compile and check it.
|
||||
|
||||
\endlist
|
||||
|
||||
\li Non-Qt Projects
|
||||
@@ -271,18 +275,14 @@
|
||||
|
||||
C++ class, source, or header files that you can use to write the
|
||||
application logic in both Qt Quick projects and
|
||||
\if defined(qcmanual)
|
||||
Qt widget based projects
|
||||
\endif
|
||||
|
||||
\li Qt
|
||||
|
||||
\list
|
||||
|
||||
\if defined(qcmanual)
|
||||
\li \QD forms and \QD form classes, which specify parts of user
|
||||
interfaces in Qt widget based projects
|
||||
\endif
|
||||
|
||||
\li Qt resource files, which allow you to store binary files in the
|
||||
application executable
|
||||
@@ -418,8 +418,7 @@
|
||||
\li \l{Opening Projects}
|
||||
\li \l{Adding Libraries to Projects}
|
||||
\li \l{Adding New Custom Wizards}
|
||||
\li \l{Setting Up a CMake Project}
|
||||
\li \l{Setting Up a Generic Project}
|
||||
\li \l{Using Other Build Systems}
|
||||
\endlist
|
||||
|
||||
*/
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
|
||||
\list 1
|
||||
|
||||
\li Select \gui File > \gui{New File or Project} > \gui{Other Project}
|
||||
\li Select \gui File > \gui{New File or Project} > \gui{Import Project}
|
||||
> \gui{Import Existing Project}.
|
||||
|
||||
\li In \gui{Import Existing Project}, enter the project name
|
||||
|
||||
@@ -26,8 +26,8 @@
|
||||
|
||||
The Qt Build Suite (Qbs) and the Qbs plugin are still experimental, and
|
||||
therefore, you must first enable the plugin manually. If you build \QC
|
||||
yourself from our git repository, you also need to fetch the Qbs submodule to
|
||||
get Qbs support. See \l{Enabling the Qbs Plugin} below.
|
||||
yourself from our Git repository, you also need to fetch the Qbs submodule
|
||||
to get Qbs support.
|
||||
|
||||
To use Qbs to build a project, you must create a .qbs file for the project.
|
||||
For more information, see the
|
||||
|
||||
@@ -55,14 +55,14 @@
|
||||
|
||||
\image qtcreator-qt4-qtversions-add.png
|
||||
|
||||
\li In the \gui{Version name} field, edit the name that \QC
|
||||
suggests for the Qt version.
|
||||
|
||||
\li In the \gui{qmake location} field, enter the path to the
|
||||
directory where the qmake executable is located.
|
||||
\li Select the directory where the qmake executable is located.
|
||||
|
||||
\QC automatically determines the path to the binaries in
|
||||
the Qt installation and displays it in the dialog.
|
||||
the Qt installation and displays it in the \gui{qmake location}
|
||||
field.
|
||||
|
||||
\li In the \gui{Version name} field, edit the name that \QC
|
||||
suggests for the Qt version.
|
||||
|
||||
\li In the \gui Helpers section, you can build the debugging
|
||||
helpers that are available for the Qt version. This is
|
||||
@@ -72,9 +72,7 @@
|
||||
|
||||
\endlist
|
||||
|
||||
\if defined(qcmanual)
|
||||
\include qnx/creator-projects-qt-version-qnx.qdocinc
|
||||
\endif
|
||||
|
||||
*/
|
||||
|
||||
|
||||
@@ -41,16 +41,9 @@
|
||||
For more information on the options you have, see
|
||||
\l{Specifying Run Settings}.
|
||||
|
||||
\if defined(qcmanual)
|
||||
\include projects/creator-projects-running-desktop.qdocinc
|
||||
\endif
|
||||
|
||||
\include projects/creator-projects-running-simulator.qdocinc
|
||||
|
||||
\if defined(qcmanual)
|
||||
\include linux-mobile/creator-projects-running-generic-linux.qdocinc
|
||||
\include linux-mobile/creator-projects-running-madde.qdocinc
|
||||
\include qnx/creator-projects-running-qnx.qdocinc
|
||||
\endif
|
||||
|
||||
*/
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
|
||||
\list 1
|
||||
|
||||
\li Select \gui {Projects > Code Style Settings}.
|
||||
\li Select \gui Projects > \gui {Code Style}.
|
||||
|
||||
\li In the \gui Language field, select \gui C++ or \gui {Qt Quick}.
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
|
||||
\list 1
|
||||
|
||||
\li Select \gui {Projects > Editor Settings}.
|
||||
\li Select \gui Projects > \gui Editor.
|
||||
|
||||
\li In the \gui {Editor Settings} field, select \gui {Custom}.
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
|
||||
\endlist
|
||||
|
||||
\image qtcreator-editor-settings.png "Editor Settings view"
|
||||
\image qtcreator-editor-settings.png "Editor view"
|
||||
|
||||
Click \gui {Restore Global} to revert to the global settings.
|
||||
|
||||
|
||||
@@ -45,13 +45,11 @@
|
||||
parsed .pro files. For more information on how the commands are constructed,
|
||||
see \l{Starting External Processes}.
|
||||
|
||||
\if defined(qcmanual)
|
||||
\include projects/creator-projects-settings-run-desktop.qdocinc
|
||||
\include projects/creator-projects-settings-run-analyze.qdocinc
|
||||
\include projects/creator-projects-settings-run-debug.qdocinc
|
||||
\include linux-mobile/creator-projects-settings-run-linux.qdocinc
|
||||
\include qnx/creator-projects-settings-run-qnx.qdocinc
|
||||
\endif
|
||||
|
||||
\section1 Selecting the Run Environment
|
||||
|
||||
|
||||
@@ -64,11 +64,9 @@
|
||||
\section1 Related Topics
|
||||
|
||||
\list
|
||||
\if defined(qcmanual)
|
||||
\li \l {Using Qt Quick Designer}
|
||||
\li \l {Creating Buttons}
|
||||
\li \l {Creating Scalable Buttons and Borders}
|
||||
\endif
|
||||
\li \l {Exporting Designs from Graphics Software}
|
||||
\li \l {Using QML Modules with Plugins}
|
||||
|
||||
|
||||
@@ -109,7 +109,6 @@
|
||||
|
||||
\endlist
|
||||
|
||||
\if defined(qcmanual)
|
||||
The following sections contain examples of how to create some common
|
||||
components:
|
||||
|
||||
@@ -130,5 +129,4 @@
|
||||
top level when you are done editing the component.
|
||||
|
||||
\image qmldesigner-breadcrumbs.png "Go into Component command"
|
||||
\endif
|
||||
*/
|
||||
|
||||
@@ -35,10 +35,8 @@
|
||||
screens. Typically, the main qml file in a Qt Quick project specifies the
|
||||
main window of an application.
|
||||
|
||||
\if defined(qcmanual)
|
||||
The QML files in the project folder are displayed in \gui {QML Components}
|
||||
in the \gui Library pane.
|
||||
\endif
|
||||
|
||||
You can also use ready-made Qt Quick 1 Components (for Qt 4) to create
|
||||
screens with a native look and feel for a particular target platform.
|
||||
@@ -47,7 +45,6 @@
|
||||
can install Qt Quick 1 Components as part of the Qt 4 SDK and the Qt Quick
|
||||
Controls as part of Qt 5.1, or later.
|
||||
|
||||
\if defined(qcmanual)
|
||||
\section1 Adding Components to Screens
|
||||
|
||||
\list 1
|
||||
@@ -60,7 +57,6 @@
|
||||
For example, you can anchor components to a position on the screen.
|
||||
|
||||
\endlist
|
||||
\endif
|
||||
|
||||
|
||||
\section1 Using Data Models
|
||||
@@ -85,9 +81,7 @@
|
||||
\l{http://qt-project.org/doc/qt-5.0/qtquick/qml-qtquick2-listmodel.html}{ListModel} and the
|
||||
delegate component that creates an instance for each item in the model are
|
||||
added automatically. You can edit item properties
|
||||
\if defined(qcmanual)
|
||||
in the \gui Properties pane or
|
||||
\endif
|
||||
in the code editor. You can also replace the default model and
|
||||
delegate with other, more complex models and delegates in the code editor.
|
||||
|
||||
@@ -112,12 +106,9 @@
|
||||
|
||||
\endlist
|
||||
|
||||
\if defined(qcmanual)
|
||||
To lay out several items in a Column, Row, Grid, or Flow, select
|
||||
the items on the canvas, and then select \gui Layout in the context
|
||||
menu.
|
||||
\endif
|
||||
|
||||
|
||||
\section1 Using States
|
||||
|
||||
@@ -127,7 +118,6 @@
|
||||
controls, their properties and behavior and the available actions. For
|
||||
example, you can use states to create two screens.
|
||||
|
||||
\if defined(qcmanual)
|
||||
To add states, click the empty slot in the \gui States pane. Then modify the
|
||||
new state in the visual editor.
|
||||
|
||||
@@ -136,8 +126,6 @@
|
||||
The properties that you change in a state are highlighted with blue color.
|
||||
In the code editor, you can see the changes recorded as changes to the base
|
||||
state.
|
||||
\endif
|
||||
|
||||
|
||||
To keep the QML code clean, you should create a base state that contains all
|
||||
the types you will need in the application. You can then create states,
|
||||
@@ -160,7 +148,6 @@
|
||||
|
||||
\endlist
|
||||
|
||||
\if defined(qcmanual)
|
||||
To create screens for an application by using states:
|
||||
|
||||
\list 1
|
||||
@@ -195,7 +182,6 @@
|
||||
\endqml
|
||||
|
||||
\endlist
|
||||
\endif
|
||||
|
||||
*/
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ Product {
|
||||
Group {
|
||||
name: "Resources"
|
||||
qbs.install: true
|
||||
qbs.installDir: (qbs.targetOS == "windows" ? "lib/qtcreator" : project.ide_library_path)
|
||||
qbs.installDir: (qbs.targetOS.contains("windows") ? "lib/qtcreator" : project.ide_library_path)
|
||||
+ "/qtcomponents"
|
||||
files: [
|
||||
"*.qml",
|
||||
|
||||
@@ -17,8 +17,16 @@ unix:!macx:!isEmpty(copydata):SUBDIRS += bin
|
||||
|
||||
OTHER_FILES += dist/copyright_template.txt \
|
||||
$$files(dist/changes-*) \
|
||||
qtcreator.qbp \
|
||||
qbs/pluginspec/pluginspec.qbs
|
||||
qtcreator.qbs \
|
||||
qbs/pluginspec/pluginspec.qbs \
|
||||
$$files(dist/installer/ifw/config/config-*) \
|
||||
dist/installer/ifw/packages/org.qtproject.qtcreator/meta/package.xml.in \
|
||||
dist/installer/ifw/packages/org.qtproject.qtcreator.application/meta/installscript.qs \
|
||||
dist/installer/ifw/packages/org.qtproject.qtcreator.application/meta/package.xml.in \
|
||||
dist/installer/ifw/packages/org.qtproject.qtcreator.application/meta/license.txt \
|
||||
$$files(scripts/*.py) \
|
||||
$$files(scripts/*.sh) \
|
||||
$$files(scripts/*.pl)
|
||||
|
||||
qmake_cache = $$targetPath($$IDE_BUILD_TREE/.qmake.cache)
|
||||
!equals(QMAKE_HOST.os, Windows) {
|
||||
@@ -50,6 +58,9 @@ else: PLATFORM = "unknown"
|
||||
|
||||
PATTERN = $${PLATFORM}$(INSTALL_EDITION)-$${QTCREATOR_VERSION}$(INSTALL_POSTFIX)
|
||||
|
||||
macx:INSTALLER_NAME = "qt-creator-$${QTCREATOR_VERSION}"
|
||||
else:INSTALLER_NAME = "qt-creator-$${PATTERN}"
|
||||
|
||||
macx {
|
||||
APPBUNDLE = "$$OUT_PWD/bin/Qt Creator.app"
|
||||
BINDIST_SOURCE = "$$OUT_PWD/bin/Qt Creator.app"
|
||||
@@ -83,7 +94,18 @@ bindist.commands = 7z a -mx9 $$OUT_PWD/qt-creator-$${PATTERN}.7z \"$$BINDIST_SOU
|
||||
bindist_installer.depends = deployqt
|
||||
bindist_installer.commands = 7z a -mx9 $${INSTALLER_ARCHIVE} \"$$BINDIST_INSTALLER_SOURCE\"
|
||||
installer.depends = bindist_installer
|
||||
installer.commands = $$PWD/scripts/packageIfw.py -i \"$(IFW_PATH)\" -v $${QTCREATOR_VERSION} -a \"$${INSTALLER_ARCHIVE}\" "qt-creator-$${PATTERN}"
|
||||
installer.commands = $$PWD/scripts/packageIfw.py -i \"$(IFW_PATH)\" -v $${QTCREATOR_VERSION} -a \"$${INSTALLER_ARCHIVE}\" "$$INSTALLER_NAME"
|
||||
|
||||
macx {
|
||||
# this should be very temporary:
|
||||
MENU_NIB = $$(MENU_NIB_FILE)
|
||||
isEmpty(MENU_NIB): MENU_NIB = "FATAT_SET_MENU_NIB_FILE_ENV"
|
||||
copy_menu_nib_installer.commands = cp -R \"$$MENU_NIB\" \"$${INSTALLER_NAME}.app/Contents/Resources\"
|
||||
|
||||
codesign_installer.commands = codesign -s \"$(SIGNING_IDENTITY)\" $(SIGNING_FLAGS) \"$${INSTALLER_NAME}.app\"
|
||||
dmg_installer.commands = hdiutil create -srcfolder "$${INSTALLER_NAME}.app" -volname \"Qt Creator\" -format UDBZ "qt-creator-$${PATTERN}-installer.dmg" -ov -scrub -stretch 2g
|
||||
QMAKE_EXTRA_TARGETS += codesign_installer dmg_installer copy_menu_nib_installer
|
||||
}
|
||||
|
||||
win32 {
|
||||
deployqt.commands ~= s,/,\\\\,g
|
||||
|
||||
@@ -8,31 +8,35 @@ Project {
|
||||
property string ide_version_minor: '8'
|
||||
property string ide_version_release: '81'
|
||||
property string qtcreator_version: ide_version_major + '.' + ide_version_minor + '.' + ide_version_release
|
||||
property string ide_app_path: qbs.targetOS == "mac" ? "" : "bin"
|
||||
property string ide_app_target: qbs.targetOS == "mac" ? "Qt Creator" : "qtcreator"
|
||||
property string ide_app_path: qbs.targetOS.contains("mac") ? "" : "bin"
|
||||
property string ide_app_target: qbs.targetOS.contains("mac") ? "Qt Creator" : "qtcreator"
|
||||
property string ide_library_path: {
|
||||
if (qbs.targetOS == "mac")
|
||||
if (qbs.targetOS.contains("mac"))
|
||||
return ide_app_target + ".app/Contents/PlugIns"
|
||||
else if (qbs.targetOS == "windows")
|
||||
else if (qbs.targetOS.contains("windows"))
|
||||
return ide_app_path
|
||||
else
|
||||
return "lib/qtcreator"
|
||||
}
|
||||
property string ide_plugin_path: {
|
||||
if (qbs.targetOS == "mac")
|
||||
if (qbs.targetOS.contains("mac"))
|
||||
return ide_library_path
|
||||
else if (qbs.targetOS == "windows")
|
||||
else if (qbs.targetOS.contains("windows"))
|
||||
return "lib/qtcreator/plugins"
|
||||
else
|
||||
return ide_library_path + "/plugins"
|
||||
}
|
||||
property string ide_data_path: qbs.targetOS == "mac" ? ide_app_target + ".app/Contents/Resources"
|
||||
property string ide_data_path: qbs.targetOS.contains("mac")
|
||||
? ide_app_target + ".app/Contents/Resources"
|
||||
: "share/qtcreator"
|
||||
property string ide_libexec_path: qbs.targetOS == "mac" ? ide_data_path
|
||||
property string ide_libexec_path: qbs.targetOS.contains("mac")
|
||||
? ide_data_path
|
||||
: ide_app_path
|
||||
property string ide_doc_path: qbs.targetOS == "mac" ? ide_data_path + "/doc"
|
||||
property string ide_doc_path: qbs.targetOS.contains("mac")
|
||||
? ide_data_path + "/doc"
|
||||
: "share/doc/qtcreator"
|
||||
property string ide_bin_path: qbs.targetOS == "mac" ? ide_app_target + ".app/Contents/MacOS"
|
||||
property string ide_bin_path: qbs.targetOS.contains("mac")
|
||||
? ide_app_target + ".app/Contents/MacOS"
|
||||
: ide_app_path
|
||||
moduleSearchPaths: "qbs"
|
||||
|
||||
@@ -170,7 +174,7 @@ Project {
|
||||
name: project.ide_app_target
|
||||
consoleApplication: qbs.debugInformation
|
||||
|
||||
cpp.rpaths: qbs.targetOS == "mac" ? ["@executable_path/.."]
|
||||
cpp.rpaths: qbs.targetOS.contains("mac") ? ["@executable_path/.."]
|
||||
: ["$ORIGIN/../lib/qtcreator"]
|
||||
cpp.defines: Defaults.defines(qbs)
|
||||
cpp.linkerFlags: {
|
||||
@@ -205,7 +209,7 @@ Project {
|
||||
|
||||
Group {
|
||||
name: "qtcreator.sh"
|
||||
condition: qbs.targetPlatform.indexOf("unix") != -1 && qbs.targetOS != "mac"
|
||||
condition: qbs.targetOS.contains("unix") && !qbs.targetOS.contains("mac")
|
||||
files: "bin/qtcreator.sh"
|
||||
qbs.install: true
|
||||
qbs.installDir: "bin"
|
||||
@@ -213,7 +217,7 @@ Project {
|
||||
|
||||
Group {
|
||||
name: "QtLockedFile_unix"
|
||||
condition: qbs.targetPlatform.indexOf("unix") != -1
|
||||
condition: qbs.targetOS.contains("unix")
|
||||
files: [
|
||||
"src/shared/qtlockedfile/qtlockedfile_unix.cpp"
|
||||
]
|
||||
@@ -221,7 +225,7 @@ Project {
|
||||
|
||||
Group {
|
||||
name: "QtLockedFile_win"
|
||||
condition: qbs.targetOS == "windows"
|
||||
condition: qbs.targetOS.contains("windows")
|
||||
files: [
|
||||
"src/shared/qtlockedfile/qtlockedfile_win.cpp"
|
||||
]
|
||||
|
||||
52
scripts/createSourcePackages.sh
Executable file
@@ -0,0 +1,52 @@
|
||||
#!/bin/bash
|
||||
|
||||
## Command line parameters
|
||||
if [[ $# != 1 ]]; then
|
||||
cat <<USAGE
|
||||
usage:
|
||||
$0 <version>
|
||||
|
||||
Creates tar and zip source package from HEAD of the main repository and submodules.
|
||||
Files and directories are named after <version>.
|
||||
example:
|
||||
$0 2.2.0-beta
|
||||
USAGE
|
||||
exit 1
|
||||
fi
|
||||
|
||||
VERSION=$1
|
||||
PREFIX=qt-creator-${VERSION}-src
|
||||
cd `dirname $0`/..
|
||||
RESULTDIR=`pwd`
|
||||
TEMPSOURCES=`mktemp -d -t qtcCreatorSourcePackage.XXXXXX`
|
||||
echo "Temporary directory: ${TEMPSOURCES}"
|
||||
echo "Creating tar archive..."
|
||||
|
||||
echo " Creating tar sources of repositories..."
|
||||
git archive --format=tar --prefix=${PREFIX}/ HEAD > ${TEMPSOURCES}/__qtcreator_main.tar || exit 1
|
||||
cd src/shared/qbs || exit 1
|
||||
git archive --format=tar --prefix=${PREFIX}/src/shared/qbs/ HEAD > ${TEMPSOURCES}/__qtcreator_qbs.tar || exit 1
|
||||
|
||||
echo " Combining tar sources..."
|
||||
cd ${TEMPSOURCES} || exit 1
|
||||
tar xf __qtcreator_main.tar || exit 1
|
||||
tar xf __qtcreator_qbs.tar || exit 1
|
||||
tar czf "${RESULTDIR}/${PREFIX}.tar.gz" ${PREFIX}/ || exit 1
|
||||
|
||||
echo "Creating zip archive..."
|
||||
echo " Filtering binary vs text files..."
|
||||
# write filter for text files (for use with 'file' command)
|
||||
echo ".*:.*ASCII
|
||||
.*:.*directory
|
||||
.*:.*empty
|
||||
.*:.*POSIX
|
||||
.*:.*html
|
||||
.*:.*text" > __txtpattern || exit 1
|
||||
# list all files
|
||||
find ${PREFIX} > __packagedfiles || exit 1
|
||||
# record file types
|
||||
file -f __packagedfiles > __filetypes || exit 1
|
||||
echo " Creating archive..."
|
||||
# zip text files and binary files separately
|
||||
cat __filetypes | grep -f __txtpattern -v | cut -d: -f1 | zip -9q "${RESULTDIR}/${PREFIX}.zip" -@ || exit 1
|
||||
cat __filetypes | grep -f __txtpattern | cut -d: -f1 | zip -l9q "${RESULTDIR}/${PREFIX}.zip" -@ || exit 1
|
||||
@@ -1,42 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
## Command line parameters
|
||||
if [[ $# != 2 ]]; then
|
||||
cat <<USAGE
|
||||
usage:
|
||||
$0 <refspec> <version>
|
||||
|
||||
Creates tar and zip source package from <refspec>.
|
||||
Files and directories are named after <version>.
|
||||
example:
|
||||
$0 origin/2.2 2.2.0
|
||||
USAGE
|
||||
exit 1
|
||||
fi
|
||||
|
||||
BRANCH=$1
|
||||
VERSION=$2
|
||||
cd `dirname $0`/..
|
||||
RESULTDIR=`pwd`
|
||||
echo "Creating tar archive..."
|
||||
git archive --format=tar --prefix=qt-creator-${VERSION}-src/ ${BRANCH} | gzip > qt-creator-${VERSION}-src.tar.gz || exit 1
|
||||
|
||||
echo "Creating zip archive..."
|
||||
# untargz the sources for the revision into temporary dir
|
||||
TEMPSOURCES=`mktemp -d -t qtcCreatorSourcePackage.XXXXXX`
|
||||
tar xzf qt-creator-${VERSION}-src.tar.gz -C "$TEMPSOURCES" || exit 1
|
||||
cd $TEMPSOURCES || exit 1
|
||||
# write filter for text files (for use with 'file' command)
|
||||
echo ".*:.*ASCII
|
||||
.*:.*directory
|
||||
.*:.*empty
|
||||
.*:.*POSIX
|
||||
.*:.*html
|
||||
.*:.*text" > __txtpattern || exit 1
|
||||
# list all files
|
||||
find qt-creator-${VERSION}-src > __packagedfiles || exit 1
|
||||
# record file types
|
||||
file -f __packagedfiles > __filetypes || exit 1
|
||||
# zip text files and binary files separately
|
||||
cat __filetypes | grep -f __txtpattern -v | cut -d: -f1 | zip -9q "$RESULTDIR"/qt-creator-${VERSION}-src.zip -@ || exit 1
|
||||
cat __filetypes | grep -f __txtpattern | cut -d: -f1 | zip -l9q "$RESULTDIR"/qt-creator-${VERSION}-src.zip -@ || exit 1
|
||||
@@ -12,7 +12,7 @@ cp -a "${sourceFolder}/" "${intermediateFolder}"
|
||||
ln -s /Applications "${intermediateFolder}"
|
||||
cp "$(dirname "${BASH_SOURCE[0]}")/../LICENSE.LGPL" "${intermediateFolder}/LICENSE_LGPL.txt"
|
||||
echo Creating image...
|
||||
hdiutil create -srcfolder "${intermediateFolder}" -volname "${title}" -format UDBZ "${finalDMGName}" -ov -scrub -stretch 1g
|
||||
hdiutil create -srcfolder "${intermediateFolder}" -volname "${title}" -format UDBZ "${finalDMGName}" -ov -scrub -stretch 2g
|
||||
|
||||
# clean up
|
||||
rm -rf "${intermediateFolder}"
|
||||
|
||||
@@ -88,7 +88,7 @@ def main():
|
||||
installer_name = args[0]
|
||||
config_postfix = ''
|
||||
if sys.platform == 'darwin':
|
||||
installer_name = installer_name + '.dmg'
|
||||
config_postfix = '-mac'
|
||||
if sys.platform.startswith('win'):
|
||||
config_postfix = '-windows'
|
||||
if sys.platform.startswith('linux'):
|
||||
|
||||
@@ -32,6 +32,9 @@ def directBaseClass(typeobj, index = 0):
|
||||
def createPointerValue(context, address, pointeeType):
|
||||
return gdb.Value(address).cast(pointeeType.pointer())
|
||||
|
||||
def createReferenceValue(context, address, referencedType):
|
||||
return gdb.Value(address).cast(referencedType.pointer()).dereference()
|
||||
|
||||
def savePrint(output):
|
||||
try:
|
||||
print(output)
|
||||
@@ -1006,23 +1009,6 @@ def check(exp):
|
||||
if not exp:
|
||||
raise RuntimeError("Check failed")
|
||||
|
||||
def checkSimpleRef(ref):
|
||||
count = ref["_q_value"]
|
||||
check(count > 0)
|
||||
check(count < 1000000)
|
||||
|
||||
def checkRef(ref):
|
||||
try:
|
||||
count = ref["atomic"]["_q_value"] # Qt 5.
|
||||
minimum = -1
|
||||
except:
|
||||
count = ref["_q_value"] # Qt 4.
|
||||
minimum = 0
|
||||
# Assume there aren't a million references to any object.
|
||||
check(count >= minimum)
|
||||
check(count < 1000000)
|
||||
|
||||
|
||||
#def couldBePointer(p, align):
|
||||
# type = lookupType("unsigned int")
|
||||
# ptr = gdb.Value(p).cast(type)
|
||||
@@ -1042,12 +1028,8 @@ def checkPointer(p, align = 1):
|
||||
if not isNull(p):
|
||||
p.dereference()
|
||||
|
||||
def isAccessible(p):
|
||||
try:
|
||||
long(p)
|
||||
return True
|
||||
except:
|
||||
return False
|
||||
def pointerValue(p):
|
||||
return long(p)
|
||||
|
||||
def isNull(p):
|
||||
# The following can cause evaluation to abort with "UnicodeEncodeError"
|
||||
@@ -2153,29 +2135,6 @@ class Dumper:
|
||||
with Children(self):
|
||||
self.putFields(value)
|
||||
|
||||
def tryPutObjectNameValue(self, value):
|
||||
try:
|
||||
# Is this derived from QObject?
|
||||
dd = value["d_ptr"]["d"]
|
||||
privateTypeName = self.ns + "QObjectPrivate"
|
||||
privateType = lookupType(privateTypeName)
|
||||
staticMetaObject = value["staticMetaObject"]
|
||||
d_ptr = dd.cast(privateType.pointer()).dereference()
|
||||
objectName = None
|
||||
try:
|
||||
objectName = d_ptr["objectName"]
|
||||
except: # Qt 5
|
||||
p = d_ptr["extraData"]
|
||||
if not isNull(p):
|
||||
objectName = p.dereference()["objectName"]
|
||||
if not objectName is None:
|
||||
data, size, alloc = qStringData(self, objectName)
|
||||
if size > 0:
|
||||
str = readRawMemory(data, 2 * size)
|
||||
self.putValue(str, Hex4EncodedLittleEndian, 1)
|
||||
except:
|
||||
pass
|
||||
|
||||
def readRawMemory(self, base, size):
|
||||
return readRawMemory(base, size)
|
||||
|
||||
|
||||
@@ -102,6 +102,7 @@ def call(value, func, *args):
|
||||
#######################################################################
|
||||
|
||||
qqStringCutOff = 10000
|
||||
qqWatchpointOffset = 10000
|
||||
|
||||
# This is a cache mapping from 'type name' to 'display alternatives'.
|
||||
qqFormats = {}
|
||||
@@ -220,11 +221,11 @@ BreakpointAtCatch = 5
|
||||
BreakpointAtMain = 6
|
||||
BreakpointAtFork = 7
|
||||
BreakpointAtExec = 8
|
||||
BreakpointAtSysCall = 10
|
||||
WatchpointAtAddress = 11
|
||||
WatchpointAtExpression = 12
|
||||
BreakpointOnQmlSignalEmit = 13
|
||||
BreakpointAtJavaScriptThrow = 14
|
||||
BreakpointAtSysCall = 9
|
||||
WatchpointAtAddress = 10
|
||||
WatchpointAtExpression = 11
|
||||
BreakpointOnQmlSignalEmit = 12
|
||||
BreakpointAtJavaScriptThrow = 13
|
||||
|
||||
# See db.StateType
|
||||
stateNames = ["invalid", "unloaded", "connected", "attaching", "launching", "stopped",
|
||||
@@ -248,26 +249,17 @@ def isNull(p):
|
||||
|
||||
Value = lldb.SBValue
|
||||
|
||||
def checkSimpleRef(ref):
|
||||
count = int(ref["_q_value"])
|
||||
check(count > 0)
|
||||
check(count < 1000000)
|
||||
|
||||
def checkRef(ref):
|
||||
try:
|
||||
count = int(ref["atomic"]["_q_value"]) # Qt 5.
|
||||
minimum = -1
|
||||
except:
|
||||
count = int(ref["_q_value"]) # Qt 4.
|
||||
minimum = 0
|
||||
# Assume there aren't a million references to any object.
|
||||
check(count >= minimum)
|
||||
check(count < 1000000)
|
||||
def pointerValue(value):
|
||||
return value.GetValueAsUnsigned()
|
||||
|
||||
def createPointerValue(context, address, pointeeType):
|
||||
addr = int(address) & 0xFFFFFFFFFFFFFFFF
|
||||
return context.CreateValueFromAddress(None, addr, pointeeType).AddressOf()
|
||||
|
||||
def createReferenceValue(context, address, referencedType):
|
||||
addr = int(address) & 0xFFFFFFFFFFFFFFFF
|
||||
return context.CreateValueFromAddress(None, addr, referencedType)
|
||||
|
||||
def impl_SBValue__add__(self, offset):
|
||||
if self.GetType().IsPointerType():
|
||||
if isinstance(offset, int) or isinstance(offset, long):
|
||||
@@ -340,7 +332,10 @@ lldb.SBType.unqualified = lambda self: self.GetUnqualifiedType()
|
||||
lldb.SBType.pointer = lambda self: self.GetPointerType()
|
||||
lldb.SBType.code = lambda self: self.GetTypeClass()
|
||||
lldb.SBType.sizeof = property(lambda self: self.GetByteSize())
|
||||
lldb.SBType.strip_typedefs = lambda self: self.GetCanonicalType()
|
||||
|
||||
|
||||
lldb.SBType.strip_typedefs = \
|
||||
lambda self: self.GetCanonicalType() if hasattr(self, 'GetCanonicalType') else self
|
||||
|
||||
lldb.SBType.__orig__str__ = lldb.SBType.__str__
|
||||
lldb.SBType.__str__ = lldb.SBType.GetName
|
||||
@@ -466,6 +461,9 @@ class SubItem:
|
||||
value = component
|
||||
value.SetPreferSyntheticValue(False)
|
||||
self.name = value.GetName()
|
||||
if self.name is None:
|
||||
d.anonNumber += 1
|
||||
self.name = "#%d" % d.anonNumber
|
||||
else:
|
||||
self.name = component
|
||||
self.iname = "%s.%s" % (d.currentIName, self.name)
|
||||
@@ -518,6 +516,12 @@ class SubItem:
|
||||
self.d.currentAddress = self.savedCurrentAddress
|
||||
return True
|
||||
|
||||
class UnnamedSubItem(SubItem):
|
||||
def __init__(self, d, component):
|
||||
self.d = d
|
||||
self.iname = "%s.%s" % (self.d.currentIName, component)
|
||||
self.name = None
|
||||
|
||||
class Dumper:
|
||||
def __init__(self):
|
||||
self.debugger = lldb.SBDebugger.Create()
|
||||
@@ -851,6 +855,16 @@ class Dumper:
|
||||
result += '],current-thread-id="%s"},' % self.currentThread().id
|
||||
self.report(result)
|
||||
|
||||
def firstUsableFrame(self):
|
||||
thread = self.currentThread()
|
||||
for i in xrange(4):
|
||||
frame = thread.GetFrameAtIndex(i)
|
||||
lineEntry = frame.GetLineEntry()
|
||||
line = lineEntry.GetLine()
|
||||
if line != 0:
|
||||
return i
|
||||
return None
|
||||
|
||||
def reportStack(self, _ = None):
|
||||
if self.process is None:
|
||||
self.report('msg="No process"')
|
||||
@@ -862,14 +876,11 @@ class Dumper:
|
||||
n = thread.GetNumFrames()
|
||||
if n > 4:
|
||||
n = 4
|
||||
firstUsable = None
|
||||
for i in xrange(n):
|
||||
frame = thread.GetFrameAtIndex(i)
|
||||
lineEntry = frame.GetLineEntry()
|
||||
line = lineEntry.GetLine()
|
||||
usable = line != 0
|
||||
if usable and not firstUsable:
|
||||
firstUsable = i
|
||||
result += '{pc="0x%x"' % frame.GetPC()
|
||||
result += ',level="%d"' % frame.idx
|
||||
result += ',addr="0x%x"' % frame.GetPCAddress().GetLoadAddress(self.target)
|
||||
@@ -878,9 +889,7 @@ class Dumper:
|
||||
result += ',fullname="%s"' % fileName(lineEntry.file)
|
||||
result += ',usable="%d"' % usable
|
||||
result += ',file="%s"},' % fileName(lineEntry.file)
|
||||
if not firstUsable:
|
||||
firstUsable = 0
|
||||
result += '],hasmore="0",first-usable="%s"},' % firstUsable
|
||||
result += '],hasmore="0"},'
|
||||
self.report(result)
|
||||
|
||||
def putType(self, type, priority = 0):
|
||||
@@ -915,8 +924,7 @@ class Dumper:
|
||||
if limit is None:
|
||||
return size
|
||||
if limit == 0:
|
||||
#return min(size, qqStringCutOff)
|
||||
return min(size, 100)
|
||||
return min(size, qqStringCutOff)
|
||||
return min(size, limit)
|
||||
|
||||
def putValue(self, value, encoding = None, priority = 0):
|
||||
@@ -956,6 +964,7 @@ class Dumper:
|
||||
def putItem(self, value, tryDynamic=True):
|
||||
#value = value.GetDynamicValue(lldb.eDynamicCanRunTarget)
|
||||
typeName = value.GetTypeName()
|
||||
value.SetPreferDynamicValue(tryDynamic)
|
||||
|
||||
if tryDynamic:
|
||||
self.putAddress(value.address)
|
||||
@@ -995,13 +1004,9 @@ class Dumper:
|
||||
|
||||
# References
|
||||
if value.GetType().IsReferenceType():
|
||||
type = value.GetType().GetDereferencedType().GetPointerType()
|
||||
# FIXME: Find something more direct.
|
||||
origType = value.GetTypeName();
|
||||
value = value.CreateValueFromAddress(value.GetName(),
|
||||
value.AddressOf().GetValueAsUnsigned(), type).Dereference()
|
||||
#value = value.cast(value.dynamic_type)
|
||||
self.putItem(value)
|
||||
type = value.GetType().GetDereferencedType()
|
||||
self.putItem(createReferenceValue(value, value.GetAddress(), type))
|
||||
self.putBetterType(origType)
|
||||
return
|
||||
|
||||
@@ -1014,12 +1019,13 @@ class Dumper:
|
||||
self.putNumChild(0)
|
||||
return
|
||||
|
||||
origType = value.GetType()
|
||||
innerType = value.GetType().GetPointeeType()
|
||||
self.putType(innerType)
|
||||
savedCurrentChildType = self.currentChildType
|
||||
self.currentChildType = str(innerType)
|
||||
self.putItem(value.dereference())
|
||||
inner = value.Dereference()
|
||||
if inner.IsValid():
|
||||
self.putItem(inner)
|
||||
self.currentChildType = savedCurrentChildType
|
||||
self.put('origaddr="%s",' % value.address)
|
||||
return
|
||||
@@ -1050,9 +1056,19 @@ class Dumper:
|
||||
|
||||
def putFields(self, value):
|
||||
n = value.GetNumChildren()
|
||||
m = value.GetType().GetNumberOfDirectBaseClasses()
|
||||
if n > 10000:
|
||||
n = 10000
|
||||
for i in xrange(n):
|
||||
# seems to happen in the 'inheritance' autotest
|
||||
if m > n:
|
||||
m = n
|
||||
for i in xrange(m):
|
||||
child = value.GetChildAtIndex(i)
|
||||
with UnnamedSubItem(self, "@%d" % (i + 1)):
|
||||
#self.put('iname="%s",' % self.currentIName)
|
||||
self.put('name="[%s]",' % child.name)
|
||||
self.putItem(child)
|
||||
for i in xrange(m, n):
|
||||
child = value.GetChildAtIndex(i)
|
||||
with SubItem(self, child):
|
||||
self.putItem(child)
|
||||
@@ -1061,6 +1077,7 @@ class Dumper:
|
||||
frame = self.currentThread().GetSelectedFrame()
|
||||
self.currentIName = 'local'
|
||||
self.put('data=[')
|
||||
self.anonNumber = -1
|
||||
for value in frame.GetVariables(True, True, False, False):
|
||||
if self.dummyValue is None:
|
||||
self.dummyValue = value
|
||||
@@ -1171,7 +1188,15 @@ class Dumper:
|
||||
self.report('exited={status="%s",desc="%s"}'
|
||||
% (self.process.GetExitStatus(), self.process.GetExitDescription()))
|
||||
if type == lldb.SBProcess.eBroadcastBitStateChanged:
|
||||
self.reportData()
|
||||
state = self.process.GetState()
|
||||
if state == lldb.eStateStopped:
|
||||
usableFrame = self.firstUsableFrame()
|
||||
if usableFrame:
|
||||
self.currentThread().SetSelectedFrame(usableFrame)
|
||||
self.reportStack()
|
||||
self.reportThreads()
|
||||
self.reportLocation()
|
||||
self.reportVariables()
|
||||
elif type == lldb.SBProcess.eBroadcastBitInterrupt:
|
||||
pass
|
||||
elif type == lldb.SBProcess.eBroadcastBitSTDOUT:
|
||||
@@ -1193,20 +1218,27 @@ class Dumper:
|
||||
self.handleEvent(event)
|
||||
|
||||
def describeBreakpoint(self, bp, modelId):
|
||||
cond = bp.GetCondition()
|
||||
isWatch = isinstance(bp, lldb.SBWatchpoint)
|
||||
if isWatch:
|
||||
result = 'lldbid="%s"' % (qqWatchpointOffset + bp.GetID())
|
||||
else:
|
||||
result = 'lldbid="%s"' % bp.GetID()
|
||||
result += ',modelid="%s"' % modelId
|
||||
if not bp.IsValid():
|
||||
return
|
||||
result += ',hitcount="%s"' % bp.GetHitCount()
|
||||
if hasattr(bp, 'GetThreadID'):
|
||||
result += ',threadid="%s"' % bp.GetThreadID()
|
||||
try:
|
||||
if hasattr(bp, 'IsOneShot'):
|
||||
result += ',oneshot="%s"' % (1 if bp.IsOneShot() else 0)
|
||||
except:
|
||||
pass
|
||||
if hasattr(bp, 'GetCondition'):
|
||||
cond = bp.GetCondition()
|
||||
result += ',condition="%s"' % binascii.hexlify("" if cond is None else cond)
|
||||
result += ',enabled="%s"' % (1 if bp.IsEnabled() else 0)
|
||||
result += ',valid="%s"' % (1 if bp.IsValid() else 0)
|
||||
result += ',condition="%s"' % ("" if cond is None else cond)
|
||||
result += ',ignorecount="%s"' % bp.GetIgnoreCount()
|
||||
result += ',locations=['
|
||||
if hasattr(bp, 'GetNumLocations'):
|
||||
for i in xrange(bp.GetNumLocations()):
|
||||
loc = bp.GetLocationAtIndex(i)
|
||||
addr = loc.GetAddress()
|
||||
@@ -1227,6 +1259,8 @@ class Dumper:
|
||||
str(args["file"]), int(args["line"]))
|
||||
elif bpType == BreakpointByFunction:
|
||||
bpNew = self.target.BreakpointCreateByName(args["function"])
|
||||
elif bpType == BreakpointByAddress:
|
||||
bpNew = self.target.BreakpointCreateByAddress(args["address"])
|
||||
elif bpType == BreakpointAtMain:
|
||||
bpNew = self.target.BreakpointCreateByName(
|
||||
"main", self.target.GetExecutable().GetFilename())
|
||||
@@ -1236,29 +1270,49 @@ class Dumper:
|
||||
elif bpType == BreakpointAtCatch:
|
||||
bpNew = self.target.BreakpointCreateForException(
|
||||
lldb.eLanguageTypeC_plus_plus, True, False)
|
||||
else:
|
||||
warn("UNKNOWN TYPE")
|
||||
bpNew.SetIgnoreCount(int(args["ignorecount"]))
|
||||
bpNew.SetCondition(str(args["condition"]))
|
||||
bpNew.SetEnabled(int(args["enabled"]))
|
||||
elif bpType == WatchpointAtAddress:
|
||||
error = lldb.SBError()
|
||||
bpNew = self.target.WatchAddress(args["address"], 4, False, True, error)
|
||||
#warn("BPNEW: %s" % bpNew)
|
||||
self.reportError(error)
|
||||
elif bpType == WatchpointAtExpression:
|
||||
# FIXME: Top level-only for now.
|
||||
try:
|
||||
bpNew.SetOneShot(int(args["oneshot"]))
|
||||
frame = self.currentFrame()
|
||||
value = frame.FindVariable(args["expression"])
|
||||
error = lldb.SBError()
|
||||
bpNew = self.target.WatchAddress(value.GetAddress(),
|
||||
value.GetByteSize(), False, True, error)
|
||||
except:
|
||||
pass
|
||||
return
|
||||
else:
|
||||
warn("UNKNOWN BREAKPOINT TYPE: %s" % bpType)
|
||||
return
|
||||
bpNew.SetIgnoreCount(int(args["ignorecount"]))
|
||||
if hasattr(bpNew, 'SetCondition'):
|
||||
bpNew.SetCondition(binascii.unhexlify(args["condition"]))
|
||||
bpNew.SetEnabled(int(args["enabled"]))
|
||||
if hasattr(bpNew, 'SetOneShot'):
|
||||
bpNew.SetOneShot(int(args["oneshot"]))
|
||||
return bpNew
|
||||
|
||||
def changeBreakpoint(self, args):
|
||||
bpChange = self.target.FindBreakpointByID(int(args["lldbid"]))
|
||||
bpChange.SetIgnoreCount(int(args["ignorecount"]))
|
||||
bpChange.SetCondition(str(args["condition"]))
|
||||
bpChange.SetEnabled(int(args["enabled"]))
|
||||
try:
|
||||
bpChange.SetOneShot(int(args["oneshot"]))
|
||||
except:
|
||||
pass
|
||||
id = int(args["lldbid"])
|
||||
if id > qqWatchpointOffset:
|
||||
bp = self.target.FindWatchpointByID(id)
|
||||
else:
|
||||
bp = self.target.FindBreakpointByID(id)
|
||||
bp.SetIgnoreCount(int(args["ignorecount"]))
|
||||
bp.SetCondition(binascii.unhexlify(args["condition"]))
|
||||
bp.SetEnabled(int(args["enabled"]))
|
||||
if hasattr(bp, 'SetOneShot'):
|
||||
bp.SetOneShot(int(args["oneshot"]))
|
||||
|
||||
def removeBreakpoint(self, args):
|
||||
return self.target.BreakpointDelete(int(args["lldbid"]))
|
||||
id = int(args['lldbid'])
|
||||
if id > qqWatchpointOffset:
|
||||
return self.target.DeleteWatchpoint(id - qqWatchpointOffset)
|
||||
return self.target.BreakpointDelete(id)
|
||||
|
||||
def handleBreakpoints(self, args):
|
||||
result = 'bkpts=['
|
||||
@@ -1391,7 +1445,6 @@ class Dumper:
|
||||
self.reportData()
|
||||
|
||||
def updateData(self, args):
|
||||
warn("UPDATE 1")
|
||||
if 'expanded' in args:
|
||||
self.expandedINames = set(args['expanded'].split(','))
|
||||
if 'autoderef' in args:
|
||||
@@ -1404,7 +1457,6 @@ class Dumper:
|
||||
self.passExceptions = int(args['passexceptions'])
|
||||
self.passExceptions = True # FIXME
|
||||
self.reportVariables(args)
|
||||
warn("UPDATE 2")
|
||||
|
||||
def disassemble(self, args):
|
||||
frame = self.currentFrame();
|
||||
|
||||
@@ -18,23 +18,40 @@ movableTypes = set([
|
||||
"QXmlStreamNotationDeclaration", "QXmlStreamEntityDeclaration"
|
||||
])
|
||||
|
||||
def qByteArrayData(d, value):
|
||||
private = value['d'].dereference()
|
||||
checkRef(private['ref'])
|
||||
size = int(private['size'])
|
||||
alloc = int(private['alloc'])
|
||||
def checkSimpleRef(ref):
|
||||
count = int(ref["_q_value"])
|
||||
check(count > 0)
|
||||
check(count < 1000000)
|
||||
|
||||
def checkRef(ref):
|
||||
try:
|
||||
count = int(ref["atomic"]["_q_value"]) # Qt 5.
|
||||
minimum = -1
|
||||
except:
|
||||
count = int(ref["_q_value"]) # Qt 4.
|
||||
minimum = 0
|
||||
# Assume there aren't a million references to any object.
|
||||
check(count >= minimum)
|
||||
check(count < 1000000)
|
||||
|
||||
|
||||
def qByteArrayDataData(d, value):
|
||||
checkRef(value['ref'])
|
||||
size = int(value['size'])
|
||||
alloc = int(value['alloc'])
|
||||
try:
|
||||
# Qt 5. Will fail on Qt 4 due to the missing 'offset' member.
|
||||
addr = d.addressOf(private) + int(private['offset'])
|
||||
addr = d.addressOf(value) + int(value['offset'])
|
||||
except:
|
||||
# Qt 4:
|
||||
addr = private['data']
|
||||
addr = value['data']
|
||||
return createPointerValue(value, addr, d.charType()), size, alloc
|
||||
|
||||
qStringData = qByteArrayData
|
||||
def qByteArrayData(d, value):
|
||||
return d.byteArrayDataData(value['d'].dereference())
|
||||
|
||||
def qEncodeByteArray(d, value, limit = None):
|
||||
data, size, alloc = qByteArrayData(d, value)
|
||||
data, size, alloc = d.byteArrayData(value)
|
||||
if alloc != 0:
|
||||
check(0 <= size and size <= alloc and alloc <= 100*1000*1000)
|
||||
limit = d.computeLimit(size, limit)
|
||||
@@ -44,7 +61,7 @@ def qEncodeByteArray(d, value, limit = None):
|
||||
return s
|
||||
|
||||
def qEncodeString(d, value, limit = 0):
|
||||
data, size, alloc = qStringData(d, value)
|
||||
data, size, alloc = d.stringData(value)
|
||||
if alloc != 0:
|
||||
check(0 <= size and size <= alloc and alloc <= 100*1000*1000)
|
||||
limit = d.computeLimit(size, limit)
|
||||
@@ -53,12 +70,6 @@ def qEncodeString(d, value, limit = 0):
|
||||
s += "2e002e002e00"
|
||||
return s
|
||||
|
||||
def qPutByteArrayValue(d, value):
|
||||
d.putValue(qEncodeByteArray(d, value), Hex2EncodedLatin1)
|
||||
|
||||
def qPutStringValue(d, value):
|
||||
d.putValue(qEncodeString(d, value), Hex4EncodedLittleEndian)
|
||||
|
||||
def mapForms():
|
||||
return "Normal,Compact"
|
||||
|
||||
@@ -87,16 +98,21 @@ def qPutMapName(d, value):
|
||||
|
||||
Dumper.encodeByteArray = qEncodeByteArray
|
||||
Dumper.byteArrayData = qByteArrayData
|
||||
Dumper.putByteArrayValue = qPutByteArrayValue
|
||||
Dumper.byteArrayDataData = qByteArrayDataData
|
||||
Dumper.putByteArrayValue = \
|
||||
lambda d, value: d.putValue(d.encodeByteArray(value), Hex2EncodedLatin1)
|
||||
Dumper.putStringValue = \
|
||||
lambda d, value: d.putValue(d.encodeString(value), Hex4EncodedLittleEndian)
|
||||
|
||||
Dumper.encodeString = qEncodeString
|
||||
Dumper.stringData = qStringData
|
||||
Dumper.putStringValue = qPutStringValue
|
||||
Dumper.stringData = Dumper.byteArrayData
|
||||
Dumper.putMapName = qPutMapName
|
||||
|
||||
Dumper.isMapCompact = \
|
||||
lambda d, keyType, valueType: qMapCompact(d.currentItemFormat(), keyType, valueType)
|
||||
|
||||
|
||||
# Returns True when it encounters a QObject or derived class.
|
||||
def tryPutObjectNameValue(d, value):
|
||||
try:
|
||||
# Is this derived from QObject?
|
||||
@@ -116,8 +132,9 @@ def tryPutObjectNameValue(d, value):
|
||||
if size > 0:
|
||||
str = d.readRawMemory(data, 2 * size)
|
||||
d.putValue(str, Hex4EncodedLittleEndian, 1)
|
||||
return True
|
||||
except:
|
||||
pass
|
||||
return False
|
||||
|
||||
Dumper.tryPutObjectNameValue = tryPutObjectNameValue
|
||||
|
||||
@@ -144,22 +161,29 @@ def qdump__QBasicAtomicPointer(d, value):
|
||||
with Children(d):
|
||||
d.putItem(value["_q_value"])
|
||||
|
||||
def qdump__QByteArrayData(d, value):
|
||||
data, size, alloc = d.byteArrayDataData(value)
|
||||
d.putValue(d.readRawMemory(data, size), Hex2EncodedLatin1)
|
||||
d.putNumChild(size)
|
||||
if d.isExpanded():
|
||||
d.putArrayData(d.charType(), data, size)
|
||||
|
||||
def qform__QByteArray():
|
||||
return "Inline,As Latin1 in Separate Window,As UTF-8 in Separate Window"
|
||||
|
||||
def qdump__QByteArray(d, value):
|
||||
d.putByteArrayValue(value)
|
||||
data, size, alloc = qByteArrayData(d, value)
|
||||
data, size, alloc = d.byteArrayData(value)
|
||||
d.putNumChild(size)
|
||||
format = d.currentItemFormat()
|
||||
if format == 1:
|
||||
d.putDisplay(StopDisplay)
|
||||
elif format == 2:
|
||||
d.putField("editformat", DisplayLatin1String)
|
||||
d.putField("editvalue", qEncodeByteArray(d, value, None))
|
||||
d.putField("editvalue", d.encodeByteArray(value, None))
|
||||
elif format == 3:
|
||||
d.putField("editformat", DisplayUtf8String)
|
||||
d.putField("editvalue", qEncodeByteArray(d, value, None))
|
||||
d.putField("editvalue", d.encodeByteArray(value, None))
|
||||
if d.isExpanded():
|
||||
d.putArrayData(d.charType(), data, size)
|
||||
|
||||
@@ -313,47 +337,50 @@ def qdump__QTime(d, value):
|
||||
d.putValue(value["mds"], MillisecondsSinceMidnight)
|
||||
d.putNumChild(1)
|
||||
if d.isExpanded():
|
||||
qt = d.ns + "Qt::"
|
||||
qtdate = d.ns + "Qt::"
|
||||
qttime = d.ns + "Qt::"
|
||||
if lldbLoaded:
|
||||
qt += "DateFormat::" # FIXME: Bug?...
|
||||
qtdate += "DateFormat::" # FIXME: Bug?...
|
||||
qttime += "TimeSpec::"
|
||||
# FIXME: This improperly uses complex return values.
|
||||
with Children(d):
|
||||
d.putCallItem("toString", value, "toString", qt + "TextDate")
|
||||
d.putCallItem("(ISO)", value, "toString", qt + "ISODate")
|
||||
d.putCallItem("toString", value, "toString", qtdate + "TextDate")
|
||||
d.putCallItem("(ISO)", value, "toString", qtdate + "ISODate")
|
||||
d.putCallItem("(SystemLocale)", value, "toString",
|
||||
qt + "SystemLocaleDate")
|
||||
d.putCallItem("(Locale)", value, "toString", qt + "LocaleDate")
|
||||
d.putCallItem("toUTC", value, "toTimeSpec", qt + "UTC")
|
||||
qtdate + "SystemLocaleDate")
|
||||
d.putCallItem("(Locale)", value, "toString", qtdate + "LocaleDate")
|
||||
d.putCallItem("toUTC", value, "toTimeSpec", qttime + "UTC")
|
||||
else:
|
||||
d.putValue("(invalid)")
|
||||
d.putNumChild(0)
|
||||
|
||||
|
||||
# This relies on the Qt4/Qt5 internal structure layout:
|
||||
# {sharedref(4), date(8), time(4+x)}
|
||||
def qdump__QDateTime(d, value):
|
||||
try:
|
||||
# Fails without debug info.
|
||||
p = value["d"]["d"].dereference()
|
||||
except:
|
||||
d.putPlainChildren(value)
|
||||
return
|
||||
mds = int(p["time"]["mds"])
|
||||
intType = d.lookupType("int")
|
||||
intPtrType = intType.pointer()
|
||||
base = pointerValue(value.cast(intPtrType))
|
||||
mds = int(createReferenceValue(value, base + intPtrType.sizeof + 8, intType))
|
||||
if mds >= 0:
|
||||
d.putValue("%s/%s" % (int(p["date"]["jd"]), mds),
|
||||
JulianDateAndMillisecondsSinceMidnight)
|
||||
jd = int(createReferenceValue(value, base + intPtrType.sizeof, intType))
|
||||
d.putValue("%s/%s" % (jd, mds), JulianDateAndMillisecondsSinceMidnight)
|
||||
d.putNumChild(1)
|
||||
if d.isExpanded():
|
||||
# FIXME: This improperly uses complex return values.
|
||||
with Children(d):
|
||||
qt = d.ns + "Qt::"
|
||||
qtdate = d.ns + "Qt::"
|
||||
qttime = d.ns + "Qt::"
|
||||
if lldbLoaded:
|
||||
qt += "DateFormat::" # FIXME: Bug?...
|
||||
qtdate += "DateFormat::" # FIXME: Bug?...
|
||||
qttime += "TimeSpec::" # FIXME: Bug?...
|
||||
d.putCallItem("toTime_t", value, "toTime_t")
|
||||
d.putCallItem("toString", value, "toString", qt + "TextDate")
|
||||
d.putCallItem("(ISO)", value, "toString", qt + "ISODate")
|
||||
d.putCallItem("(SystemLocale)", value, "toString", qt + "SystemLocaleDate")
|
||||
d.putCallItem("(Locale)", value, "toString", qt + "LocaleDate")
|
||||
d.putCallItem("toUTC", value, "toTimeSpec", qt + "UTC")
|
||||
d.putCallItem("toLocalTime", value, "toTimeSpec", qt + "LocalTime")
|
||||
d.putCallItem("toString", value, "toString", qtdate + "TextDate")
|
||||
d.putCallItem("(ISO)", value, "toString", qtdate + "ISODate")
|
||||
d.putCallItem("(SystemLocale)", value, "toString", qtdate + "SystemLocaleDate")
|
||||
d.putCallItem("(Locale)", value, "toString", qtdate + "LocaleDate")
|
||||
d.putCallItem("toUTC", value, "toTimeSpec", qttime + "UTC")
|
||||
d.putCallItem("toLocalTime", value, "toTimeSpec", qttime + "LocalTime")
|
||||
else:
|
||||
d.putValue("(invalid)")
|
||||
d.putNumChild(0)
|
||||
@@ -627,7 +654,7 @@ def qdump__QHostAddress(d, value):
|
||||
if int(data["ipString"]["d"]["size"]):
|
||||
d.putStringValue(data["ipString"])
|
||||
else:
|
||||
a = long(data["a"])
|
||||
a = int(data["a"])
|
||||
a, n4 = divmod(a, 256)
|
||||
a, n3 = divmod(a, 256)
|
||||
a, n2 = divmod(a, 256)
|
||||
@@ -684,20 +711,12 @@ def qform__QImage():
|
||||
return "Normal,Displayed"
|
||||
|
||||
def qdump__QImage(d, value):
|
||||
try:
|
||||
painters = int(value["painters"])
|
||||
except:
|
||||
d.putPlainChildren(value)
|
||||
return
|
||||
check(0 <= painters and painters < 1000)
|
||||
d_ptr = value["d"]
|
||||
if isNull(d_ptr):
|
||||
d.putValue("(null)")
|
||||
else:
|
||||
checkSimpleRef(d_ptr["ref"])
|
||||
d.putValue("(%dx%d)" % (d_ptr["width"], d_ptr["height"]))
|
||||
bits = d_ptr["data"]
|
||||
nbytes = d_ptr["nbytes"]
|
||||
# This relies on current QImage layout
|
||||
intPtrType = d.lookupType("int").pointer()
|
||||
base = createReferenceValue(value, d.addressOf(value) + 3 * intPtrType.sizeof, intPtrType)
|
||||
width = int(base[1])
|
||||
height = int(base[2])
|
||||
d.putValue("(%dx%d)" % (width, height))
|
||||
d.putNumChild(0)
|
||||
#d.putNumChild(1)
|
||||
if d.isExpanded():
|
||||
@@ -710,13 +729,16 @@ def qdump__QImage(d, value):
|
||||
if format == 1:
|
||||
d.putDisplay(StopDisplay)
|
||||
elif format == 2:
|
||||
d_ptr = value["d"]
|
||||
bits = d_ptr["data"]
|
||||
nbytes = d_ptr["nbytes"]
|
||||
if False:
|
||||
# Take four bytes at a time, this is critical for performance.
|
||||
# In fact, even four at a time is too slow beyond 100x100 or so.
|
||||
d.putField("editformat", DisplayImageData)
|
||||
d.put('%s="' % name)
|
||||
d.put("%08x" % int(d_ptr["width"]))
|
||||
d.put("%08x" % int(d_ptr["height"]))
|
||||
d.put("%08x" % width)
|
||||
d.put("%08x" % height)
|
||||
d.put("%08x" % int(d_ptr["format"]))
|
||||
p = bits.cast(d.intType().pointer())
|
||||
for i in xrange(nbytes / 4):
|
||||
@@ -731,7 +753,7 @@ def qdump__QImage(d, value):
|
||||
gdb.execute("dump binary memory %s %s %s" %
|
||||
(filename, cleanAddress(p), cleanAddress(p + nbytes)))
|
||||
d.putDisplay(DisplayImageFile, " %d %d %d %s"
|
||||
% (d_ptr["width"], d_ptr["height"], d_ptr["format"], filename))
|
||||
% (width, height, d_ptr["format"], filename))
|
||||
|
||||
|
||||
def qdump__QLinkedList(d, value):
|
||||
@@ -970,9 +992,6 @@ def qdump__QObject(d, value):
|
||||
d_ptr = dd.cast(privateType.pointer()).dereference()
|
||||
#warn("D_PTR: %s " % d_ptr)
|
||||
mo = d_ptr["metaObject"]
|
||||
if not isAccessible(mo):
|
||||
d.putInaccessible()
|
||||
return
|
||||
if isNull(mo):
|
||||
mo = staticMetaObject
|
||||
#warn("MO: %s " % mo)
|
||||
@@ -1067,7 +1086,7 @@ def qdump__QObject(d, value):
|
||||
for i in xrange(dynamicPropertyCount):
|
||||
with SubItem(d, i):
|
||||
pp = p.cast(namesType.pointer()).dereference();
|
||||
d.putField("key", qEncodeByteArray(d, pp))
|
||||
d.putField("key", d.encodeByteArray(pp))
|
||||
d.putField("keyencoded", Hex2EncodedLatin1)
|
||||
qq = q.cast(valuesType.pointer().pointer())
|
||||
qq = qq.dereference();
|
||||
@@ -1599,7 +1618,7 @@ def qedit__QString(expr, value):
|
||||
cmd = "call (%s).resize(%d)" % (expr, len(value))
|
||||
gdb.execute(cmd)
|
||||
d = gdb.parse_and_eval(expr)["d"]["data"]
|
||||
cmd = "set {short[%d]}%s={" % (len(value), long(d))
|
||||
cmd = "set {short[%d]}%s={" % (len(value), pointerValue(d))
|
||||
for i in range(len(value)):
|
||||
if i != 0:
|
||||
cmd += ','
|
||||
@@ -1618,12 +1637,12 @@ def qdump__QString(d, value):
|
||||
d.putDisplay(StopDisplay)
|
||||
elif format == 2:
|
||||
d.putField("editformat", DisplayUtf16String)
|
||||
d.putField("editvalue", qEncodeString(d, value, None))
|
||||
d.putField("editvalue", d.encodeString(value, None))
|
||||
|
||||
|
||||
def qdump__QStringRef(d, value):
|
||||
s = value["m_string"].dereference()
|
||||
data, size, alloc = qStringData(d, s)
|
||||
data, size, alloc = d.stringData(s)
|
||||
data += 2 * int(value["m_position"])
|
||||
size = value["m_size"]
|
||||
s = d.readRawMemory(data, 2 * size)
|
||||
@@ -1695,10 +1714,10 @@ def qdump__QUrl(d, value):
|
||||
try:
|
||||
# Qt 5
|
||||
data = value["d"].dereference()
|
||||
str = qEncodeString(d, data["scheme"])
|
||||
str = d.encodeString(data["scheme"])
|
||||
str += "3a002f002f00"
|
||||
str += qEncodeString(d, data["host"])
|
||||
str += qEncodeString(d, data["path"])
|
||||
str += d.encodeString(data["host"])
|
||||
str += d.encodeString(data["path"])
|
||||
d.putValue(str, Hex4EncodedLittleEndian)
|
||||
except:
|
||||
d.putPlainChildren(value)
|
||||
@@ -1907,7 +1926,7 @@ def qedit__QVector(expr, value):
|
||||
gdb.execute(cmd)
|
||||
innerType = d.templateArgument(ob.type, 0)
|
||||
ptr = ob["p"]["array"].cast(d.voidPtrType())
|
||||
cmd = "set {%s[%d]}%s={%s}" % (innerType, len(values), long(ptr), value)
|
||||
cmd = "set {%s[%d]}%s={%s}" % (innerType, len(values), pointerValue(ptr), value)
|
||||
gdb.execute(cmd)
|
||||
|
||||
|
||||
@@ -2003,7 +2022,7 @@ def qdump____c_style_array__(d, value):
|
||||
# Explicitly requested Local 8-bit formatting.
|
||||
d.putValue(blob, Hex2EncodedLocal8Bit)
|
||||
else:
|
||||
d.putValue("@0x%x" % long(value.cast(targetType.pointer())))
|
||||
d.putValue("@0x%x" % pointerValue(value.cast(targetType.pointer())))
|
||||
|
||||
if d.currentIName in d.expandedINames:
|
||||
p = value.address
|
||||
@@ -2295,10 +2314,10 @@ def qdump__std__shared_ptr(d, value):
|
||||
return
|
||||
|
||||
if isSimpleType(d.templateArgument(value.type, 0)):
|
||||
d.putValue("%s @0x%x" % (i.dereference(), long(i)))
|
||||
d.putValue("%s @0x%x" % (i.dereference(), pointerValue(i)))
|
||||
else:
|
||||
i = expensiveDowncast(i)
|
||||
d.putValue("@0x%x" % long(i))
|
||||
d.putValue("@0x%x" % pointerValue(i))
|
||||
|
||||
d.putNumChild(3)
|
||||
with Children(d, 3):
|
||||
@@ -2316,10 +2335,10 @@ def qdump__std__unique_ptr(d, value):
|
||||
return
|
||||
|
||||
if isSimpleType(d.templateArgument(value.type, 0)):
|
||||
d.putValue("%s @0x%x" % (i.dereference(), long(i)))
|
||||
d.putValue("%s @0x%x" % (i.dereference(), pointerValue(i)))
|
||||
else:
|
||||
i = expensiveDowncast(i)
|
||||
d.putValue("@0x%x" % long(i))
|
||||
d.putValue("@0x%x" % pointerValue(i))
|
||||
|
||||
d.putNumChild(1)
|
||||
with Children(d, 1):
|
||||
@@ -2440,17 +2459,17 @@ def qdump__boost__bimaps__bimap(d, value):
|
||||
|
||||
|
||||
def qdump__boost__optional(d, value):
|
||||
if value["m_initialized"] == False:
|
||||
if int(value["m_initialized"]) == 0:
|
||||
d.putValue("<uninitialized>")
|
||||
d.putNumChild(0)
|
||||
else:
|
||||
d.putBetterType(value.type)
|
||||
type = d.templateArgument(value.type, 0)
|
||||
storage = value["m_storage"]
|
||||
if type.code == ReferenceCode:
|
||||
d.putItem(storage.cast(type.target().pointer()).dereference())
|
||||
else:
|
||||
d.putItem(storage.cast(type))
|
||||
d.putBetterType(value.type)
|
||||
|
||||
|
||||
def qdump__boost__shared_ptr(d, value):
|
||||
@@ -2479,6 +2498,7 @@ def qdump__boost__shared_ptr(d, value):
|
||||
if isSimpleType(val.type):
|
||||
d.putNumChild(3)
|
||||
d.putItem(val)
|
||||
d.putBetterType(value.type)
|
||||
else:
|
||||
d.putEmptyValue()
|
||||
|
||||
@@ -2491,18 +2511,18 @@ def qdump__boost__shared_ptr(d, value):
|
||||
|
||||
|
||||
def qdump__boost__gregorian__date(d, value):
|
||||
d.putValue(value["days_"], JulianDate)
|
||||
d.putValue(int(value["days_"]), JulianDate)
|
||||
d.putNumChild(0)
|
||||
|
||||
|
||||
def qdump__boost__posix_time__ptime(d, item):
|
||||
ms = long(item["time_"]["time_count_"]["value_"]) / 1000
|
||||
ms = int(item["time_"]["time_count_"]["value_"]) / 1000
|
||||
d.putValue("%s/%s" % divmod(ms, 86400000), JulianDateAndMillisecondsSinceMidnight)
|
||||
d.putNumChild(0)
|
||||
|
||||
|
||||
def qdump__boost__posix_time__time_duration(d, item):
|
||||
d.putValue(long(item["ticks_"]["value_"]) / 1000, MillisecondsSinceMidnight)
|
||||
d.putValue(int(item["ticks_"]["value_"]) / 1000, MillisecondsSinceMidnight)
|
||||
d.putNumChild(0)
|
||||
|
||||
|
||||
@@ -2569,11 +2589,11 @@ def qdump__QTJSC__JSValue(d, value):
|
||||
payload = value["u"]["asBits"]["payload"]
|
||||
#d.putIntItem("tag", tag)
|
||||
with SubItem(d, "tag"):
|
||||
d.putValue(jstagAsString(long(tag)))
|
||||
d.putValue(jstagAsString(int(tag)))
|
||||
d.putNoType()
|
||||
d.putNumChild(0)
|
||||
|
||||
d.putIntItem("payload", long(payload))
|
||||
d.putIntItem("payload", int(payload))
|
||||
d.putFields(value["u"])
|
||||
|
||||
if tag == -2:
|
||||
@@ -2607,12 +2627,12 @@ def qdump__QScriptValue(d, value):
|
||||
d.putValue("(invalid)")
|
||||
d.putNumChild(0)
|
||||
return
|
||||
if long(dd["type"]) == 1: # Number
|
||||
if int(dd["type"]) == 1: # Number
|
||||
d.putValue(dd["numberValue"])
|
||||
d.putType("%sQScriptValue (Number)" % d.ns)
|
||||
d.putNumChild(0)
|
||||
return
|
||||
if long(dd["type"]) == 2: # String
|
||||
if int(dd["type"]) == 2: # String
|
||||
d.putStringValue(dd["stringValue"])
|
||||
d.putType("%sQScriptValue (String)" % d.ns)
|
||||
return
|
||||
@@ -2621,8 +2641,8 @@ def qdump__QScriptValue(d, value):
|
||||
x = dd["jscValue"]["u"]
|
||||
tag = x["asBits"]["tag"]
|
||||
payload = x["asBits"]["payload"]
|
||||
#isValid = long(x["asBits"]["tag"]) != -6 # Empty
|
||||
#isCell = long(x["asBits"]["tag"]) == -2
|
||||
#isValid = int(x["asBits"]["tag"]) != -6 # Empty
|
||||
#isCell = int(x["asBits"]["tag"]) == -2
|
||||
#warn("IS CELL: %s " % isCell)
|
||||
#isObject = False
|
||||
#className = "UNKNOWN NAME"
|
||||
@@ -2639,7 +2659,7 @@ def qdump__QScriptValue(d, value):
|
||||
# warn("DYNAMIC TYPE: %s" % dtype)
|
||||
# warn("STATUC %s" % cell.type)
|
||||
# type = cell["m_structure"]["m_typeInfo"]["m_type"]
|
||||
# isObject = long(type) == 7 # ObjectType;
|
||||
# isObject = int(type) == 7 # ObjectType;
|
||||
# className = "UNKNOWN NAME"
|
||||
#warn("IS OBJECT: %s " % isObject)
|
||||
|
||||
@@ -2753,14 +2773,14 @@ def qdump__Utils__ElfSection(d, value):
|
||||
d.putPlainChildren(value)
|
||||
|
||||
def qdump__CPlusPlus__Token(d, value):
|
||||
k = value["f"]["kind"];
|
||||
if long(k) == 6:
|
||||
k = int(value["f"]["kind"])
|
||||
if int(k) == 6:
|
||||
d.putValue("T_IDENTIFIER. offset: %d, len: %d"
|
||||
% (value["offset"], value["f"]["length"]))
|
||||
elif long(k) == 7:
|
||||
elif int(k) == 7:
|
||||
d.putValue("T_NUMERIC_LITERAL. offset: %d, value: %d"
|
||||
% (value["offset"], value["f"]["length"]))
|
||||
elif long(k) == 60:
|
||||
elif int(k) == 60:
|
||||
d.putValue("T_RPAREN")
|
||||
else:
|
||||
d.putValue("Type: %s" % k)
|
||||
@@ -2769,8 +2789,8 @@ def qdump__CPlusPlus__Token(d, value):
|
||||
def qdump__CPlusPlus__Internal__PPToken(d, value):
|
||||
k = value["f"]["kind"];
|
||||
data, size, alloc = d.byteArrayData(value["m_src"])
|
||||
length = long(value["f"]["length"])
|
||||
offset = long(value["offset"])
|
||||
length = int(value["f"]["length"])
|
||||
offset = int(value["offset"])
|
||||
#warn("size: %s, alloc: %s, offset: %s, length: %s, data: %s"
|
||||
# % (size, alloc, offset, length, data))
|
||||
d.putValue(encodeCharArray(data + offset, 100, length),
|
||||
@@ -2909,9 +2929,9 @@ if False:
|
||||
def qdump__basic__Function(d, value):
|
||||
min = value["min"]
|
||||
max = value["max"]
|
||||
data, size, alloc = qByteArrayData(d, value["var"])
|
||||
data, size, alloc = d.byteArrayData(value["var"])
|
||||
var = extractCString(data, 0)
|
||||
data, size, alloc = qByteArrayData(d, value["f"])
|
||||
data, size, alloc = d.byteArrayData(value["f"])
|
||||
f = extractCString(data, 0)
|
||||
d.putValue("%s, %s=%f..%f" % (f, var, min, max))
|
||||
d.putNumChild(0)
|
||||
|
||||
@@ -103,12 +103,9 @@ void GraphicalNodeInstance::createEffectItem(bool createEffectItem)
|
||||
s_createEffectItem = createEffectItem;
|
||||
}
|
||||
|
||||
void GraphicalNodeInstance::updateDirtyNodeRecursive()
|
||||
void GraphicalNodeInstance::updateAllDirtyNodesRecursive()
|
||||
{
|
||||
foreach (QQuickItem *childItem, quickItem()->childItems())
|
||||
updateDirtyNodeRecursive(childItem);
|
||||
|
||||
DesignerSupport::updateDirtyNode(quickItem());
|
||||
updateAllDirtyNodesRecursive(quickItem());
|
||||
}
|
||||
|
||||
GraphicalNodeInstance::~GraphicalNodeInstance()
|
||||
@@ -117,27 +114,27 @@ GraphicalNodeInstance::~GraphicalNodeInstance()
|
||||
designerSupport()->derefFromEffectItem(quickItem());
|
||||
}
|
||||
|
||||
void GraphicalNodeInstance::updateDirtyNodeRecursive(QQuickItem *parentItem) const
|
||||
void GraphicalNodeInstance::updateDirtyNodesRecursive(QQuickItem *parentItem) const
|
||||
{
|
||||
foreach (QQuickItem *childItem, parentItem->childItems()) {
|
||||
if (!nodeInstanceServer()->hasInstanceForObject(childItem))
|
||||
updateDirtyNodeRecursive(childItem);
|
||||
updateDirtyNodesRecursive(childItem);
|
||||
}
|
||||
|
||||
DesignerSupport::updateDirtyNode(parentItem);
|
||||
}
|
||||
|
||||
void GraphicalNodeInstance::updateAllDirtyNodeRecursive(QQuickItem *parentItem) const
|
||||
void GraphicalNodeInstance::updateAllDirtyNodesRecursive(QQuickItem *parentItem) const
|
||||
{
|
||||
foreach (QQuickItem *childItem, parentItem->childItems())
|
||||
updateDirtyNodeRecursive(childItem);
|
||||
updateAllDirtyNodesRecursive(childItem);
|
||||
|
||||
DesignerSupport::updateDirtyNode(parentItem);
|
||||
}
|
||||
|
||||
QImage GraphicalNodeInstance::renderImage() const
|
||||
{
|
||||
updateDirtyNodeRecursive(quickItem());
|
||||
updateDirtyNodesRecursive(quickItem());
|
||||
|
||||
QRectF renderBoundingRect = boundingRect();
|
||||
|
||||
@@ -485,20 +482,6 @@ QPair<PropertyName, ServerNodeInstance> GraphicalNodeInstance::anchor(const Prop
|
||||
|
||||
}
|
||||
|
||||
static void doComponentCompleteRecursive(QQuickItem *item)
|
||||
{
|
||||
if (item) {
|
||||
if (DesignerSupport::isComponentComplete(item))
|
||||
return;
|
||||
|
||||
foreach (QQuickItem *childItem, item->childItems())
|
||||
doComponentCompleteRecursive(childItem);
|
||||
|
||||
static_cast<QQmlParserStatus*>(item)->componentComplete();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void disableTextCursor(QQuickItem *item)
|
||||
{
|
||||
foreach (QQuickItem *childItem, item->childItems())
|
||||
@@ -515,7 +498,7 @@ static void disableTextCursor(QQuickItem *item)
|
||||
|
||||
void GraphicalNodeInstance::doComponentComplete()
|
||||
{
|
||||
doComponentCompleteRecursive(quickItem());
|
||||
doComponentCompleteRecursive(quickItem(), nodeInstanceServer());
|
||||
|
||||
disableTextCursor(quickItem());
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@ public:
|
||||
|
||||
QList<ServerNodeInstance> childItems() const;
|
||||
|
||||
void updateDirtyNodeRecursive();
|
||||
void updateAllDirtyNodesRecursive();
|
||||
static void createEffectItem(bool createEffectItem);
|
||||
|
||||
int penWidth() const;
|
||||
@@ -64,8 +64,8 @@ protected:
|
||||
void setHasContent(bool hasContent);
|
||||
DesignerSupport *designerSupport() const;
|
||||
Qt5NodeInstanceServer *qt5NodeInstanceServer() const;
|
||||
void updateDirtyNodeRecursive(QQuickItem *parentItem) const;
|
||||
void updateAllDirtyNodeRecursive(QQuickItem *parentItem) const;
|
||||
void updateDirtyNodesRecursive(QQuickItem *parentItem) const;
|
||||
void updateAllDirtyNodesRecursive(QQuickItem *parentItem) const;
|
||||
QRectF boundingRectWithStepChilds(QQuickItem *parentItem) const;
|
||||
void resetHorizontal();
|
||||
void resetVertical();
|
||||
|
||||
@@ -475,8 +475,13 @@ QList<ServerNodeInstance> NodeInstanceServer::setupInstances(const CreateSceneC
|
||||
setInstanceAuxiliaryData(container);
|
||||
}
|
||||
|
||||
foreach (ServerNodeInstance instance, instanceList)
|
||||
|
||||
QListIterator<ServerNodeInstance> instanceListIterator(instanceList);
|
||||
instanceListIterator.toBack();
|
||||
while (instanceListIterator.hasPrevious()) {
|
||||
ServerNodeInstance instance = instanceListIterator.previous();
|
||||
instance.doComponentComplete();
|
||||
}
|
||||
|
||||
return instanceList;
|
||||
}
|
||||
|
||||
@@ -459,7 +459,7 @@ QVariant ObjectNodeInstance::fixResourcePaths(const QVariant &value)
|
||||
return value;
|
||||
}
|
||||
|
||||
void ObjectNodeInstance::updateDirtyNodeRecursive()
|
||||
void ObjectNodeInstance::updateAllDirtyNodesRecursive()
|
||||
{
|
||||
}
|
||||
|
||||
@@ -1179,6 +1179,38 @@ QObject *ObjectNodeInstance::parentObject(QObject *object)
|
||||
return object->parent();
|
||||
}
|
||||
|
||||
void ObjectNodeInstance::doComponentCompleteRecursive(QObject *object, NodeInstanceServer *nodeInstanceServer)
|
||||
{
|
||||
if (object) {
|
||||
QQuickItem *item = qobject_cast<QQuickItem*>(object);
|
||||
|
||||
if (item && DesignerSupport::isComponentComplete(item))
|
||||
return;
|
||||
|
||||
QList<QObject*> childList = object->children();
|
||||
|
||||
if (item) {
|
||||
foreach (QQuickItem *childItem, item->childItems()) {
|
||||
if (!childList.contains(childItem))
|
||||
childList.append(childItem);
|
||||
}
|
||||
}
|
||||
|
||||
foreach (QObject *child, childList) {
|
||||
if (!nodeInstanceServer->hasInstanceForObject(child))
|
||||
doComponentCompleteRecursive(child, nodeInstanceServer);
|
||||
}
|
||||
|
||||
if (item) {
|
||||
static_cast<QQmlParserStatus*>(item)->componentComplete();
|
||||
} else {
|
||||
QQmlParserStatus *qmlParserStatus = dynamic_cast< QQmlParserStatus*>(object);
|
||||
if (qmlParserStatus)
|
||||
qmlParserStatus->componentComplete();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ObjectNodeInstance::Pointer ObjectNodeInstance::parentInstance() const
|
||||
{
|
||||
QObject *parentHolder = parent();
|
||||
@@ -1247,9 +1279,7 @@ bool ObjectNodeInstance::resetStateProperty(const ObjectNodeInstance::Pointer &/
|
||||
|
||||
void ObjectNodeInstance::doComponentComplete()
|
||||
{
|
||||
QQmlParserStatus *qmlParserStatus = dynamic_cast< QQmlParserStatus*>(object());
|
||||
if (qmlParserStatus)
|
||||
qmlParserStatus->componentComplete();
|
||||
doComponentCompleteRecursive(object(), nodeInstanceServer());
|
||||
}
|
||||
|
||||
bool ObjectNodeInstance::isRootNodeInstance() const
|
||||
|
||||
@@ -186,7 +186,7 @@ public:
|
||||
|
||||
static QVariant fixResourcePaths(const QVariant &value);
|
||||
|
||||
virtual void updateDirtyNodeRecursive();
|
||||
virtual void updateAllDirtyNodesRecursive();
|
||||
|
||||
protected:
|
||||
explicit ObjectNodeInstance(QObject *object);
|
||||
@@ -196,6 +196,7 @@ protected:
|
||||
void deleteObjectsInList(const QQmlProperty &metaProperty);
|
||||
QVariant convertSpecialCharacter(const QVariant& value) const;
|
||||
static QObject *parentObject(QObject *object);
|
||||
static void doComponentCompleteRecursive(QObject *object, NodeInstanceServer *nodeInstanceServer);
|
||||
|
||||
private:
|
||||
QHash<PropertyName, QVariant> m_resetValueHash;
|
||||
|
||||
@@ -158,7 +158,7 @@ bool ServerNodeInstance::holdsGraphical() const
|
||||
|
||||
void ServerNodeInstance::updateDirtyNodeRecursive()
|
||||
{
|
||||
m_nodeInstance->updateDirtyNodeRecursive();
|
||||
m_nodeInstance->updateAllDirtyNodesRecursive();
|
||||
}
|
||||
|
||||
bool ServerNodeInstance::isSubclassOf(const QString &superTypeName) const
|
||||
|
||||
@@ -1777,7 +1777,7 @@
|
||||
<name>Core::ModeManager</name>
|
||||
<message>
|
||||
<source>Switch to <b>%1</b> mode</source>
|
||||
<translation>Gehe zu Mode <b>'%1'</b></translation>
|
||||
<translation>Gehe zu Modus <b>'%1'</b></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -5116,6 +5116,10 @@ Grund: %3</translation>
|
||||
<extracomment>Look-up of a stash via its descriptive message failed.</extracomment>
|
||||
<translation>Es konnte kein Stash mit der Beschreibung "%1" im Repository "%2" gefunden werden.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot retrieve submodule status of "%1": %2</source>
|
||||
<translation>Der Status des Sub-Modules "%1" konnte nicht bestimmt werden: %2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>There were warnings while applying "%1" to "%2":
|
||||
%3</source>
|
||||
@@ -5693,7 +5697,7 @@ Jetzt Commit durchführen?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Actions on Commits...</source>
|
||||
<translation>Aktionen bei Commits...</translation>
|
||||
<translation>Aktionen mit Commits...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Commit</source>
|
||||
@@ -6287,7 +6291,7 @@ Add, modify, and remove document filters, which determine the documentation set
|
||||
</message>
|
||||
<message>
|
||||
<source>Previous Page</source>
|
||||
<translation>Vorangehender Seite</translation>
|
||||
<translation>Vorangehende Seite</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Next Page</source>
|
||||
@@ -9370,22 +9374,6 @@ Wählt eine für Desktop-Entwicklung geeignete Qt-Version aus, sofern sie verfü
|
||||
<source>Configuration unchanged, skipping qmake step.</source>
|
||||
<translation>Unveränderte Konfiguration, qmake-Schritt wird übersprungen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>No Qt version.</source>
|
||||
<translation>Keine Qt-Version.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invalid Qt version.</source>
|
||||
<translation>Ungültige Qt-Version.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Requires Qt 4.7.1 or newer.</source>
|
||||
<translation>Erfordert Qt 4.7.1 oder neuer.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Library not available. <a href='compile'>Compile...</a></source>
|
||||
<translation>Bibliothek nicht verfügbar. <a href='compile'>Kompilieren...</a></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Qt4ProjectManager::QMakeStepConfigWidget</name>
|
||||
@@ -9397,10 +9385,6 @@ Wählt eine für Desktop-Entwicklung geeignete Qt-Version aus, sofern sie verfü
|
||||
<source>The option will only take effect if the project is recompiled. Do you want to recompile now?</source>
|
||||
<translation>Diese Einstellung wird nur nach einer Neuerstellung des Projekts wirksam. Möchten Sie das Projekt neu erstellen?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Building helpers</source>
|
||||
<translation>Ausgabe-Hilfsbibliothek</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><b>qmake:</b> No Qt version set. Cannot run qmake.</source>
|
||||
<translation><b>qmake:</b> Es ist keine Qt-Version eingestellt. qmake kann nicht ausgeführt werden.</translation>
|
||||
@@ -20830,7 +20814,7 @@ Gibt an, wie sich die Rücktaste bezüglich Einrückung verhält.
|
||||
</message>
|
||||
<message>
|
||||
<source>Valgrind Suppression Files</source>
|
||||
<translation>Valgrind-Ausschlußdateien</translation>
|
||||
<translation>Valgrind-Ausschlussdateien</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Valgrind Suppression File (*.supp);;All Files (*)</source>
|
||||
@@ -22015,6 +21999,26 @@ Bitte verwenden Sie den Stop-Button.</translation>
|
||||
<source>Version:</source>
|
||||
<translation>Version:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>No Qt version.</source>
|
||||
<translation>Keine Qt-Version.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Invalid Qt version.</source>
|
||||
<translation>Ungültige Qt-Version.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Requires Qt 4.7.1 or newer.</source>
|
||||
<translation>Erfordert Qt 4.7.1 oder neuer.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Library not available. <a href='compile'>Compile...</a></source>
|
||||
<translation>Bibliothek nicht verfügbar. <a href='compile'>Kompilieren...</a></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Building helpers</source>
|
||||
<translation>Erstelle Hilfsbibliotheken</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QtSupport::Internal::QtOptionsPageWidget</name>
|
||||
@@ -34147,6 +34151,10 @@ Entfernt: %4</translation>
|
||||
<source><b>Qbs:</b> %1</source>
|
||||
<translation><b>Qbs:</b> %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Might make your application vulnerable. Only use in a safe environment.</source>
|
||||
<translation>Potentielle Sicherheitslücke, sollte nur in einer sicheren Umgebung benutzt werden.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Keep going</source>
|
||||
<translation>Fortsetzen</translation>
|
||||
@@ -34155,6 +34163,10 @@ Entfernt: %4</translation>
|
||||
<source>Properties:</source>
|
||||
<translation>Eigenschaften:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable QML debugging:</source>
|
||||
<translation>QML-Debuggen aktivieren:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QbsProjectManager::Internal::QbsCleanStepConfigWidget</name>
|
||||
@@ -34569,13 +34581,6 @@ Entfernt: %4</translation>
|
||||
<translation>Bestimmt, wie der Text in der Textzeile angezeigt wird.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QtSupport::Internal::QtVersionsModel</name>
|
||||
<message>
|
||||
<source>All Versions</source>
|
||||
<translation>Alle Versionen</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Android::Internal::AndroidGdbServerKitInformation</name>
|
||||
<message>
|
||||
@@ -35720,17 +35725,6 @@ Kurznamen können verwendet werden, sofern sie eindeutig sind.</translation>
|
||||
<translation>Erstellt ein Qt Quick 2-UI-Projekt mit einer einzigen QML-Datei, die die Hauptansicht enthält und Qt Quick Controls verwendet.&lt;br/&gt;Sie können Qt Quick 2-UI-Projekte mit QML-Scene ohne Erstellung betrachten. Dieses Projekt erfordert, dass die Qt Quick Controls für die Qt-Version installiert sind.&lt;br/&gt;&lt;br/&gt;Erfordert &lt;b&gt;Qt 5.1&lt;/b&gt; oder neuer.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QuickFixFactory</name>
|
||||
<message>
|
||||
<source>Create Getter and Setter Member Functions</source>
|
||||
<translation>Getter- und Setter-Funktionen erstellen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Generate Missing Q_PROPERTY Members...</source>
|
||||
<translation>Fehlende Q_PROPERTY-Elemente ergänzen...</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CppEditor::QuickFix</name>
|
||||
<message>
|
||||
@@ -37034,4 +37028,33 @@ Dieser Wizard führt Sie durch die essentiellen Schritte, die zum Deployment ein
|
||||
<translation>Erstellt eine C++-/Boost-Datei mit Bindings für Python</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TextEditor::QuickFixFactory</name>
|
||||
<message>
|
||||
<source>Create Getter and Setter Member Functions</source>
|
||||
<translation>Getter- und Setter-Funktionen erstellen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Generate Missing Q_PROPERTY Members...</source>
|
||||
<translation>Fehlende Q_PROPERTY-Elemente ergänzen...</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ShowEditor</name>
|
||||
<message>
|
||||
<source>Show Editor</source>
|
||||
<translation>Editor anzeigen</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DiffEditor::DiffShowEditor</name>
|
||||
<message>
|
||||
<source>Hide Change Description</source>
|
||||
<translation>Beschreibung der Änderung ausblenden</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show Change Description</source>
|
||||
<translation>Beschreibung der Änderung einblenden</translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
||||
|
||||
@@ -14,7 +14,8 @@ DynamicLibrary {
|
||||
return ["-Wl,-s"]
|
||||
}
|
||||
cpp.installNamePrefix: "@rpath/PlugIns/"
|
||||
cpp.rpaths: qbs.targetOS == "mac" ? ["@loader_path/..", "@executable_path/.."]
|
||||
cpp.rpaths: qbs.targetOS.contains("mac")
|
||||
? ["@loader_path/..", "@executable_path/.."]
|
||||
: ["$ORIGIN", "$ORIGIN/.."]
|
||||
cpp.includePaths: [ ".", ".." ]
|
||||
|
||||
|
||||
@@ -48,7 +48,8 @@
|
||||
\mainclass
|
||||
\threadsafe
|
||||
|
||||
\brief Defines a collection of related components that can be viewed as a unit.
|
||||
\brief The Aggregate class defines a collection of related components that
|
||||
can be viewed as a unit.
|
||||
|
||||
An Aggregate is a collection of components that are handled as a unit,
|
||||
such that each component exposes the properties and behavior of the
|
||||
|
||||
@@ -382,13 +382,15 @@ void Document::addUndefinedMacroUse(const QByteArray &name, unsigned offset)
|
||||
|
||||
/*!
|
||||
\class Document::MacroUse
|
||||
\brief Represents the usage of a macro in a \l {Document}.
|
||||
\brief The MacroUse class represents the usage of a macro in a
|
||||
\l {Document}.
|
||||
\sa Document::UndefinedMacroUse
|
||||
*/
|
||||
|
||||
/*!
|
||||
\class Document::UndefinedMacroUse
|
||||
\brief Represents a macro that was looked up, but not found.
|
||||
\brief The UndefinedMacroUse class represents a macro that was looked for,
|
||||
but not found.
|
||||
|
||||
Holds data about the reference to a macro in an \tt{#ifdef} or \tt{#ifndef}
|
||||
or argument to the \tt{defined} operator inside an \tt{#if} or \tt{#elif} that does
|
||||
|
||||
@@ -33,7 +33,8 @@ using namespace CPlusPlus;
|
||||
|
||||
/*!
|
||||
\class Client
|
||||
\brief A notification interface for for C++ preprocessor.
|
||||
\brief The Client class implements a notification interface for the
|
||||
C++ preprocessor.
|
||||
*/
|
||||
|
||||
/*!
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
/*!
|
||||
\class ExtensionSystem::IPlugin
|
||||
\mainclass
|
||||
\brief Base class for all plugins.
|
||||
\brief The IPlugin class is the base class for all plugins.
|
||||
|
||||
The IPlugin class is an abstract class that must be implemented
|
||||
once for each plugin.
|
||||
|
||||
@@ -35,7 +35,8 @@
|
||||
|
||||
/*!
|
||||
\class ExtensionSystem::PluginDetailsView
|
||||
\brief Widget that displays the contents of a PluginSpec.
|
||||
\brief The PluginDetailsView class implements a widget that displays the
|
||||
contents of a PluginSpec.
|
||||
|
||||
Can be used for integration in the application that
|
||||
uses the plugin manager.
|
||||
|
||||
@@ -35,7 +35,8 @@
|
||||
|
||||
/*!
|
||||
\class ExtensionSystem::PluginErrorView
|
||||
\brief Widget that displays the state and error message of a PluginSpec.
|
||||
\brief The PluginErrorView class implements a widget that displays the
|
||||
state and error message of a PluginSpec.
|
||||
|
||||
Can be used for integration in the application that
|
||||
uses the plugin manager.
|
||||
|
||||
@@ -76,7 +76,8 @@ enum { debugLeaks = 0 };
|
||||
\class ExtensionSystem::PluginManager
|
||||
\mainclass
|
||||
|
||||
\brief Core plugin system that manages the plugins, their life cycle and their registered objects.
|
||||
\brief The PluginManager class implements the core plugin system that
|
||||
manages the plugins, their life cycle, and their registered objects.
|
||||
|
||||
The plugin manager is used for the following tasks:
|
||||
\list
|
||||
|
||||
@@ -63,7 +63,8 @@
|
||||
|
||||
/*!
|
||||
\class ExtensionSystem::PluginDependency
|
||||
\brief Struct that contains the name and required compatible version number of a plugin's dependency.
|
||||
\brief The PluginDependency class contains the name and required compatible
|
||||
version number of a plugin's dependency.
|
||||
|
||||
This reflects the data of a dependency tag in the plugin's xml description file.
|
||||
The name and version are used to resolve the dependency, i.e. a plugin with the given name and
|
||||
@@ -102,7 +103,8 @@
|
||||
|
||||
/*!
|
||||
\class ExtensionSystem::PluginSpec
|
||||
\brief Contains the information of the plugins xml description file and
|
||||
\brief The PluginSpec class contains the information of the plugin's XML
|
||||
description file and
|
||||
information about the plugin's current state.
|
||||
|
||||
The plugin spec is also filled with more information as the plugin
|
||||
|
||||
@@ -42,7 +42,8 @@
|
||||
|
||||
/*!
|
||||
\class ExtensionSystem::PluginView
|
||||
\brief Widget that shows a list of all plugins and their state.
|
||||
\brief The PluginView class implements a widget that shows a list of all
|
||||
plugins and their state.
|
||||
|
||||
This can be embedded e.g. in a dialog in the application that
|
||||
uses the plugin manager.
|
||||
|
||||
@@ -30,7 +30,8 @@
|
||||
/*!
|
||||
\class QmlJS::PersistentTrie::Trie
|
||||
|
||||
\brief Implements a trie that is persistent (not on disk but in memory).
|
||||
\brief The Trie class implements a trie that is
|
||||
persistent (not on disk but in memory).
|
||||
|
||||
This means that several versions can coexist, as adding an element
|
||||
is non destructive, and as much as possible is shared.
|
||||
|
||||
@@ -41,7 +41,7 @@ using namespace QmlJS::AST;
|
||||
|
||||
/*!
|
||||
\class QmlJS::Bind
|
||||
\brief Collected information about a single Document.
|
||||
\brief The Bind class collects information about a single Document.
|
||||
\sa Document Context
|
||||
|
||||
Each Document owns an instance of Bind. It provides access to data
|
||||
|
||||
@@ -36,7 +36,8 @@ using namespace QmlJS::AST;
|
||||
|
||||
/*!
|
||||
\class QmlJS::Context
|
||||
\brief Holds information about relationships between documents in a Snapshot.
|
||||
\brief The Context class holds information about relationships between
|
||||
documents in a Snapshot.
|
||||
\sa Document Link Snapshot
|
||||
|
||||
Contexts are usually created through Link. Once created, a Context is immutable
|
||||
|
||||
@@ -39,7 +39,7 @@ using namespace QmlJS::AST;
|
||||
|
||||
/*!
|
||||
\class QmlJS::Document
|
||||
\brief A Qml or JavaScript document.
|
||||
\brief The Document class creates a QML or JavaScript document.
|
||||
\sa Snapshot
|
||||
|
||||
Documents are usually created by the ModelManagerInterface
|
||||
@@ -57,7 +57,7 @@ using namespace QmlJS::AST;
|
||||
|
||||
/*!
|
||||
\class QmlJS::LibraryInfo
|
||||
\brief A Qml library.
|
||||
\brief The LibraryInfo class creates a QML library.
|
||||
\sa Snapshot
|
||||
|
||||
A LibraryInfo is created when the ModelManagerInterface finds
|
||||
@@ -71,11 +71,10 @@ using namespace QmlJS::AST;
|
||||
|
||||
/*!
|
||||
\class QmlJS::Snapshot
|
||||
\brief A set of Document::Ptr and LibraryInfo instances.
|
||||
\brief The Snapshot class holds and offers access to a set of
|
||||
Document::Ptr and LibraryInfo instances.
|
||||
\sa Document LibraryInfo
|
||||
|
||||
A Snapshot holds and offers access to a set of Document and LibraryInfo instances.
|
||||
|
||||
Usually Snapshots are copies of the snapshot maintained and updated by the
|
||||
ModelManagerInterface that updates its instance as parsing
|
||||
threads finish and new information becomes available.
|
||||
|
||||
@@ -37,7 +37,7 @@ using namespace QmlJS;
|
||||
|
||||
/*!
|
||||
\class QmlJS::Evaluate
|
||||
\brief Evaluates \l{AST::Node}s to \l{Value}s.
|
||||
\brief The Evaluate class evaluates \l{AST::Node}s to \l{Value}s.
|
||||
\sa Value ScopeChain
|
||||
|
||||
The Evaluate visitor is constructed with a ScopeChain and accepts JavaScript
|
||||
|
||||
@@ -53,7 +53,8 @@ using namespace QmlJS::AST;
|
||||
|
||||
/*!
|
||||
\class QmlJS::Value
|
||||
\brief Abstract base class for the result of a JS expression.
|
||||
\brief The Value class is an abstract base class for the result of a
|
||||
JS expression.
|
||||
\sa Evaluate ValueOwner ValueVisitor
|
||||
|
||||
A Value represents a category of JavaScript values, such as number
|
||||
|
||||
@@ -122,7 +122,7 @@ public:
|
||||
|
||||
/*!
|
||||
\class QmlJS::Link
|
||||
\brief Creates a Context for a Snapshot.
|
||||
\brief The Link class creates a Context for a Snapshot.
|
||||
\sa Context Snapshot
|
||||
|
||||
Initializes a context by resolving imports. This is an expensive operation.
|
||||
|
||||
@@ -33,7 +33,8 @@ using namespace QmlJS;
|
||||
|
||||
/*!
|
||||
\class QmlJS::ModelManagerInterface
|
||||
\brief Interface to the global state of the QmlJS code model.
|
||||
\brief The ModelManagerInterface class acts as an interface to the
|
||||
global state of the QmlJS code model.
|
||||
\sa QmlJS::Document QmlJS::Snapshot QmlJSTools::Internal::ModelManager
|
||||
|
||||
The ModelManagerInterface is an interface for global state and actions in
|
||||
|
||||
@@ -36,7 +36,8 @@ using namespace QmlJS;
|
||||
|
||||
/*!
|
||||
\class QmlJS::ScopeChain
|
||||
\brief Describes the scopes used for global lookup in a specific location.
|
||||
\brief The ScopeChain class describes the scopes used for global lookup in
|
||||
a specific location.
|
||||
\sa Document Context ScopeBuilder
|
||||
|
||||
A ScopeChain is used to perform global lookup with the lookup() method and
|
||||
|
||||
@@ -35,7 +35,7 @@ using namespace QmlJS;
|
||||
|
||||
/*!
|
||||
\class QmlJS::ValueOwner
|
||||
\brief Manages the lifetime of \l{QmlJS::Value}s.
|
||||
\brief The ValueOwner class manages the lifetime of \l{QmlJS::Value}s.
|
||||
\sa QmlJS::Value
|
||||
|
||||
Values are usually created on a ValueOwner. When the ValueOwner is destroyed
|
||||
|
||||
@@ -29,8 +29,8 @@
|
||||
|
||||
/*!
|
||||
\class QRangeModel
|
||||
\brief The QRangeModel class, helps users to build components that depend
|
||||
on some value and/or position to be in a certain range previously defined
|
||||
\brief The QRangeModel class helps users to build components that depend
|
||||
on some value and/or position to be in a certain range previously defined.
|
||||
|
||||
With this class, the user sets a value range and a position range, which
|
||||
represent the valid values/positions the model can assume. It is worth telling
|
||||
|
||||
@@ -46,7 +46,9 @@ enum { debug = 0 };
|
||||
// ------------- SymbolGroup
|
||||
|
||||
/*!
|
||||
\class SymbolGroup A symbol group storing a tree of expanded symbols rooted on a fake "locals" root element.
|
||||
\class SymbolGroup
|
||||
\brief The SymbolGroup class creates a symbol group storing a tree of
|
||||
expanded symbols rooted on a fake "locals" root element.
|
||||
|
||||
Provides a find() method based on inames ("locals.this.i1.data") and
|
||||
dump() methods used for GDBMI-format dumping and debug helpers.
|
||||
@@ -533,8 +535,10 @@ AbstractSymbolGroupNode *SymbolGroup::find(const std::string &iname) const
|
||||
|
||||
/*!
|
||||
\class LocalsSymbolGroup
|
||||
\brief The LocalsSymbolGroup class creates a Symbol group representing the
|
||||
Locals view.
|
||||
|
||||
Symbol group representing the Locals view. It is firmly associated
|
||||
It is firmly associated
|
||||
with stack frame, function (module) and thread.
|
||||
\ingroup qtcreatorcdbext
|
||||
*/
|
||||
@@ -624,7 +628,9 @@ std::string LocalsSymbolGroup::module() const
|
||||
/*!
|
||||
\class WatchesSymbolGroup
|
||||
|
||||
Watch symbol group. Contains watches as added by Qt Creator as iname='watch.0',
|
||||
\brief The WatchesSymbolGroup class creates a watch symbol group.
|
||||
|
||||
Contains watches as added by \QC as iname='watch.0',
|
||||
name='<expression>'. The IDebugSymbolGroup is created without scope.
|
||||
\ingroup qtcreatorcdbext
|
||||
*/
|
||||
|
||||
@@ -90,7 +90,8 @@ inline std::ostream &operator<<(std::ostream &str, const DebugNodeFlags &f)
|
||||
/*!
|
||||
\class AbstractSymbolGroupNode
|
||||
|
||||
Abstract base class for a node of SymbolGroup providing the child list interface.
|
||||
\brief The AbstractSymbolGroupNode class is an abstract base class for a
|
||||
node of SymbolGroup providing the child list interface.
|
||||
\ingroup qtcreatorcdbext
|
||||
*/
|
||||
AbstractSymbolGroupNode::AbstractSymbolGroupNode(const std::string &name,
|
||||
@@ -207,7 +208,8 @@ void AbstractSymbolGroupNode::setParent(AbstractSymbolGroupNode *n)
|
||||
|
||||
/*! \class BaseSymbolGroupNode
|
||||
|
||||
Base class for a node of SymbolGroup with a flat list of children.
|
||||
\brief The BaseSymbolGroupNode class is the base class for a node of
|
||||
SymbolGroup with a flat list of children.
|
||||
\ingroup qtcreatorcdbext
|
||||
*/
|
||||
|
||||
@@ -276,9 +278,11 @@ std::ostream &operator<<(std::ostream &str, const DEBUG_SYMBOL_PARAMETERS ¶m
|
||||
return str;
|
||||
}
|
||||
|
||||
/*! \struct DumpParameters
|
||||
/*!
|
||||
\class DumpParameters
|
||||
|
||||
All parameters for GDBMI dumping of a symbol group in one struct.
|
||||
\brief The DumpParameters class contains all parameters for GDBMI dumping
|
||||
of a symbol group in one class.
|
||||
The debugging engine passes maps of type names/inames to special
|
||||
integer values indicating hex/dec, etc.
|
||||
\ingroup qtcreatorcdbext
|
||||
@@ -580,7 +584,8 @@ void ErrorSymbolGroupNode::debug(std::ostream &os, const std::string &visitingFu
|
||||
|
||||
/*! \class SymbolGroupNode
|
||||
|
||||
\brief 'Real' node within a symbol group, identified by its index in IDebugSymbolGroup.
|
||||
\brief The SymbolGroupNode class represents a \e real node within a symbol
|
||||
group, identified by its index in IDebugSymbolGroup.
|
||||
|
||||
Provides accessors for fixed-up symbol group value and a dumping facility
|
||||
consisting of:
|
||||
@@ -1472,8 +1477,11 @@ static inline StringStringPair arrayIndexNameIname(int index)
|
||||
|
||||
/*! \class ReferenceSymbolGroupNode
|
||||
|
||||
Artificial node referencing another (real) SymbolGroupNode (added symbol or
|
||||
symbol from within an expanded linked list structure). Forwards the
|
||||
\brief The ReferenceSymbolGroupNode class is an artificial node referencing
|
||||
another (real) SymbolGroupNode (added symbol or symbol from within an
|
||||
expanded linked list structure).
|
||||
|
||||
Forwards the
|
||||
dumping to the referenced node using its own name.
|
||||
\ingroup qtcreatorcdbext */
|
||||
|
||||
@@ -1509,7 +1517,8 @@ void ReferenceSymbolGroupNode::debug(std::ostream &str, const std::string &visit
|
||||
|
||||
/*! \class MapNodeSymbolGroupNode
|
||||
|
||||
\brief A [fake] map node with a fake array index and key/value entries consisting
|
||||
\brief The MapNodeSymbolGroupNode class is a [fake] map node with a fake
|
||||
array index and key/value entries consisting
|
||||
of ReferenceSymbolGroupNode.
|
||||
\ingroup qtcreatorcdbext
|
||||
*/
|
||||
@@ -1559,9 +1568,11 @@ void MapNodeSymbolGroupNode::debug(std::ostream &os, const std::string &visiting
|
||||
|
||||
/*! \class SymbolGroupNodeVisitor
|
||||
|
||||
Visitor that takes care of iterating over the nodes and
|
||||
building the full iname path ('local.foo.bar') that is required for
|
||||
GDBMI dumping. The full name depends on the path on which a node was reached
|
||||
\brief The SymbolGroupNodeVisitor class is a visitor that iterates over the
|
||||
nodes and builds the full iname path ('local.foo.bar') that is required for
|
||||
GDBMI dumping.
|
||||
|
||||
The full name depends on the path on which a node was reached
|
||||
for referenced nodes (a linked list element can be reached via array index
|
||||
or by expanding the whole structure).
|
||||
visit() is not called for the (invisible) root node, but starting with the
|
||||
@@ -1578,7 +1589,7 @@ std::string SymbolGroupNodeVisitor::parentIname(const std::string &iname)
|
||||
}
|
||||
|
||||
/*! \class DebugSymbolGroupNodeVisitor
|
||||
\brief Debug output visitor.
|
||||
\brief The DebugSymbolGroupNodeVisitor class is a debug output visitor.
|
||||
\ingroup qtcreatorcdbext
|
||||
*/
|
||||
|
||||
@@ -1597,7 +1608,8 @@ SymbolGroupNodeVisitor::VisitResult
|
||||
}
|
||||
|
||||
/*! \class DebugFilterSymbolGroupNodeVisitor
|
||||
\brief Debug filtering output visitor.
|
||||
\brief The DebugFilterSymbolGroupNodeVisitor class is a debug filtering
|
||||
output visitor.
|
||||
\ingroup qtcreatorcdbext
|
||||
*/
|
||||
|
||||
@@ -1620,9 +1632,9 @@ SymbolGroupNodeVisitor::VisitResult
|
||||
}
|
||||
|
||||
/*! \class DumpSymbolGroupNodeVisitor
|
||||
|
||||
GDBMI dump output visitor used to report locals values back to the
|
||||
debugging engine. \ingroup qtcreatorcdbext
|
||||
\brief The DumpSymbolGroupNodeVisitor class is a GDBMI dump output visitor
|
||||
used to report locals values back to the debugging engine.
|
||||
\ingroup qtcreatorcdbext
|
||||
*/
|
||||
|
||||
DumpSymbolGroupNodeVisitor::DumpSymbolGroupNodeVisitor(std::ostream &os,
|
||||
|
||||
@@ -47,15 +47,18 @@
|
||||
|
||||
typedef std::vector<int>::size_type VectorIndexType;
|
||||
|
||||
/*! \struct SymbolGroupValueContext
|
||||
\brief Structure to pass all IDebug interfaces required for SymbolGroupValue
|
||||
/*!
|
||||
\class SymbolGroupValueContext
|
||||
\brief The SymbolGroupValueContext class passes all IDebug interfaces
|
||||
required for SymbolGroupValue.
|
||||
\ingroup qtcreatorcdbext */
|
||||
|
||||
/*! \class SymbolGroupValue
|
||||
|
||||
Flyweight tied to a SymbolGroupNode
|
||||
\brief The SymbolGroupValue class is a flyweight tied to a SymbolGroupNode
|
||||
providing a convenient operator[] (name, index) and value
|
||||
getters for notation of dumpers.
|
||||
|
||||
Inaccessible members return a SymbolGroupValue in state 'invalid'.
|
||||
Example:
|
||||
\code
|
||||
@@ -681,9 +684,12 @@ static inline std::string resolveQtSymbol(const char *symbolC,
|
||||
return rc;
|
||||
}
|
||||
|
||||
/*! \struct QtInfo
|
||||
/*!
|
||||
\class QtInfo
|
||||
|
||||
Qt Information determined on demand: Namespace, modules and basic class
|
||||
\brief The QtInfo class provides Qt information determined on demand.
|
||||
|
||||
Namespace, modules, and basic class
|
||||
names containing the module for fast lookup.
|
||||
\ingroup qtcreatorcdbext */
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
/*!
|
||||
\class QSsh::SftpChannel
|
||||
|
||||
\brief This class provides SFTP operations.
|
||||
\brief The SftpChannel class provides SFTP operations.
|
||||
|
||||
Objects are created via SshConnection::createSftpChannel().
|
||||
The channel needs to be initialized with
|
||||
|
||||
@@ -54,13 +54,13 @@ QtcLibrary {
|
||||
var result = [];
|
||||
if (useSystemBotan)
|
||||
result.push("botan-1.10")
|
||||
if (qbs.targetOS === "windows")
|
||||
if (qbs.targetOS.contains("windows"))
|
||||
result.push("advapi32", "user32")
|
||||
else if (qbs.targetOS === "linux")
|
||||
else if (qbs.targetOS.contains("linux"))
|
||||
result.push("rt", "dl");
|
||||
else if (qbs.targetOS === "mac")
|
||||
else if (qbs.targetOS.contains("mac"))
|
||||
result.push("dl");
|
||||
else if (qbs.targetPlatform.indexOf("unix") !== -1)
|
||||
else if (qbs.targetOS.contains("unix"))
|
||||
result.push("rt");
|
||||
return result
|
||||
}
|
||||
@@ -74,7 +74,7 @@ QtcLibrary {
|
||||
result.push("BOTAN_BUILD_COMPILER_IS_MSVC", "BOTAN_TARGET_OS_HAS_GMTIME_S")
|
||||
if (qbs.toolchain === "gcc" || qbs.toolchain === "mingw")
|
||||
result.push("BOTAN_BUILD_COMPILER_IS_GCC")
|
||||
if (qbs.targetOS === "linux")
|
||||
if (qbs.targetOS.contains("linux"))
|
||||
result.push("BOTAN_TARGET_OS_IS_LINUX", "BOTAN_TARGET_OS_HAS_CLOCK_GETTIME",
|
||||
"BOTAN_TARGET_OS_HAS_DLOPEN", " BOTAN_TARGET_OS_HAS_GMTIME_R",
|
||||
"BOTAN_TARGET_OS_HAS_POSIX_MLOCK", "BOTAN_HAS_DYNAMICALLY_LOADED_ENGINE",
|
||||
@@ -82,12 +82,12 @@ QtcLibrary {
|
||||
"BOTAN_HAS_ALLOC_MMAP", "BOTAN_HAS_ENTROPY_SRC_DEV_RANDOM",
|
||||
"BOTAN_HAS_ENTROPY_SRC_EGD", "BOTAN_HAS_ENTROPY_SRC_FTW",
|
||||
"BOTAN_HAS_ENTROPY_SRC_UNIX", "BOTAN_HAS_MUTEX_PTHREAD", "BOTAN_HAS_PIPE_UNIXFD_IO")
|
||||
if (qbs.targetOS === "mac")
|
||||
if (qbs.targetOS.contains("mac"))
|
||||
result.push("BOTAN_TARGET_OS_IS_DARWIN", "BOTAN_TARGET_OS_HAS_GETTIMEOFDAY",
|
||||
"BOTAN_HAS_ALLOC_MMAP", "BOTAN_HAS_ENTROPY_SRC_DEV_RANDOM",
|
||||
"BOTAN_HAS_ENTROPY_SRC_EGD", "BOTAN_HAS_ENTROPY_SRC_FTW",
|
||||
"BOTAN_HAS_ENTROPY_SRC_UNIX", "BOTAN_HAS_MUTEX_PTHREAD", "BOTAN_HAS_PIPE_UNIXFD_IO")
|
||||
if (qbs.targetOS === "windows")
|
||||
if (qbs.targetOS.contains("windows"))
|
||||
result.push("BOTAN_TARGET_OS_IS_WINDOWS",
|
||||
"BOTAN_TARGET_OS_HAS_LOADLIBRARY", "BOTAN_TARGET_OS_HAS_WIN32_GET_SYSTEMTIME",
|
||||
"BOTAN_TARGET_OS_HAS_WIN32_VIRTUAL_LOCK", "BOTAN_HAS_DYNAMICALLY_LOADED_ENGINE",
|
||||
|
||||
@@ -51,7 +51,8 @@
|
||||
/*!
|
||||
\class QSsh::SshConnection
|
||||
|
||||
\brief This class provides an SSH connection, implementing protocol version 2.0
|
||||
\brief The SshConnection class provides an SSH connection, implementing
|
||||
protocol version 2.0.
|
||||
|
||||
It can spawn channels for remote execution and SFTP operations (version 3).
|
||||
It operates asynchronously (non-blocking) and is not thread-safe.
|
||||
|
||||
@@ -43,7 +43,8 @@
|
||||
/*!
|
||||
\class QSsh::SshRemoteProcess
|
||||
|
||||
\brief This class implements an SSH channel for running a remote process.
|
||||
\brief The SshRemoteProcess class implements an SSH channel for running a
|
||||
remote process.
|
||||
|
||||
Objects are created via SshConnection::createRemoteProcess.
|
||||
The process is started via the start() member function.
|
||||
|
||||
@@ -36,7 +36,8 @@
|
||||
/*!
|
||||
\class QSsh::SshRemoteProcessRunner
|
||||
|
||||
\brief Convenience class for running a remote process over an SSH connection.
|
||||
\brief The SshRemoteProcessRunner class is a convenience class for
|
||||
running a remote process over an SSH connection.
|
||||
*/
|
||||
|
||||
namespace QSsh {
|
||||
|
||||
@@ -40,7 +40,8 @@ enum { debug = 0 };
|
||||
|
||||
/*! \class Utils::BaseValidatingLineEdit
|
||||
|
||||
\brief Base class for line edits that perform validation.
|
||||
\brief The BaseValidatingLineEdit class is the base class for line edits
|
||||
that perform validation.
|
||||
|
||||
Performs validation in a virtual validate() function to be implemented in
|
||||
derived classes.
|
||||
|
||||
@@ -34,7 +34,8 @@
|
||||
|
||||
/*!
|
||||
\class Utils::BraceMatcher
|
||||
\brief Generic autocompleter of braces and quotes.
|
||||
\brief The BraceMatcher class implements a generic autocompleter of braces
|
||||
and quotes.
|
||||
|
||||
This is a helper class for autocompleter implementations. To use it,
|
||||
define "brace", "quote", and "delimiter" characters for given language.
|
||||
|
||||
@@ -38,7 +38,8 @@
|
||||
/*!
|
||||
\class Utils::CheckableMessageBox
|
||||
|
||||
\brief A messagebox suitable for questions with a
|
||||
\brief The CheckableMessageBox class implements a message box suitable for
|
||||
questions with a
|
||||
"Do not ask me again" checkbox.
|
||||
|
||||
Emulates the QMessageBox API with
|
||||
|
||||
@@ -37,7 +37,8 @@
|
||||
/*!
|
||||
\class Utils::ClassNameValidatingLineEdit
|
||||
|
||||
\brief A Line edit that validates a C++ class name and emits a signal
|
||||
\brief The ClassNameValidatingLineEdit class implements a line edit that
|
||||
validates a C++ class name and emits a signal
|
||||
to derive suggested file names from it.
|
||||
*/
|
||||
|
||||
|
||||
@@ -41,7 +41,8 @@ static bool isEndOfWordChar(const QChar &c)
|
||||
|
||||
/*! \class Utils::CompletingTextEdit
|
||||
|
||||
\brief A QTextEdit with auto-completion support
|
||||
\brief The CompletingTextEdit class is a QTextEdit with auto-completion
|
||||
support.
|
||||
|
||||
Excerpted from Qt examples/tools/customcompleter
|
||||
*/
|
||||
|
||||
@@ -41,7 +41,8 @@
|
||||
/*!
|
||||
\class Utils::DetailsWidget
|
||||
|
||||
\brief Widget a button to expand a 'Details' area.
|
||||
\brief The DetailsWidget class implements a button to expand a \e Details
|
||||
area.
|
||||
|
||||
This widget is using a grid layout and places the items
|
||||
in the following way:
|
||||
|
||||
@@ -35,7 +35,8 @@
|
||||
/*!
|
||||
\class Utils::ElidingLabel
|
||||
|
||||
\brief A label suitable for displaying elided text.
|
||||
\brief The ElidingLabel class is a label suitable for displaying elided
|
||||
text.
|
||||
*/
|
||||
|
||||
namespace Utils {
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
/*!
|
||||
\class Utils::FakeToolTip
|
||||
|
||||
\brief A widget that pretends to be a tooltip.
|
||||
\brief The FakeToolTip class is a widget that pretends to be a tooltip.
|
||||
|
||||
By default it has Qt::WA_DeleteOnClose set.
|
||||
*/
|
||||
|
||||
@@ -72,7 +72,8 @@ static void execMenuAtWidget(QMenu *menu, QWidget *widget)
|
||||
/*!
|
||||
\class Utils::FancyLineEdit
|
||||
|
||||
\brief A line edit with an embedded pixmap on one side that is connected to
|
||||
\brief The FancyLineEdit class is a line edit with an embedded pixmap on
|
||||
one side that is connected to
|
||||
a menu.
|
||||
|
||||
Additionally, it can display a grayed hintText (like "Type Here to")
|
||||
|
||||
@@ -45,7 +45,8 @@ namespace Utils {
|
||||
|
||||
/*! \class Utils::FancyMainWindow
|
||||
|
||||
\brief MainWindow with dock widgets and additional "lock" functionality
|
||||
\brief The FancyMainWindow class is a MainWindow with dock widgets and
|
||||
additional "lock" functionality
|
||||
(locking the dock widgets in place) and "reset layout" functionality.
|
||||
|
||||
The dock actions and the additional actions should be accessible
|
||||
|
||||
@@ -41,7 +41,8 @@ namespace Utils {
|
||||
/*!
|
||||
\class Utils::FileInProjectFinder
|
||||
|
||||
\brief Helper class to find the 'original' file in the project directory for a given file url.
|
||||
\brief The FileInProjectFinder class is a helper class to find the \e original
|
||||
file in the project directory for a given file URL.
|
||||
|
||||
Often files are copied in the build + deploy process. findFile() searches for an existing file
|
||||
in the project directory for a given file path:
|
||||
|
||||
@@ -36,7 +36,10 @@
|
||||
/*!
|
||||
\class Utils::FileNameValidatingLineEdit
|
||||
|
||||
\brief A control that let's the user choose a (base) file name, based on a QLineEdit. Has
|
||||
\brief The FileNameValidatingLineEdit class is a control that lets the user
|
||||
choose a (base) file name, based on a QLineEdit.
|
||||
|
||||
The class has
|
||||
some validation logic for embedding into QWizardPage.
|
||||
*/
|
||||
|
||||
|
||||
@@ -52,7 +52,8 @@ static inline quint64 getFileLimit()
|
||||
|
||||
/*!
|
||||
\class Utils::FileSystemWatcher
|
||||
\brief File watcher that internally uses a centralized QFileSystemWatcher
|
||||
\brief The FileSystemWatcher class is a file watcher that internally uses
|
||||
a centralized QFileSystemWatcher
|
||||
and enforces limits on Mac OS.
|
||||
|
||||
\section1 Design Considerations
|
||||
|
||||
@@ -42,9 +42,9 @@ namespace Utils {
|
||||
|
||||
/*! \class Utils::FileUtils
|
||||
|
||||
\brief File- and directory-related convenience functions.
|
||||
\brief The FileUtils class contains file and directory related convenience
|
||||
functions.
|
||||
|
||||
File- and directory-related convenience functions.
|
||||
*/
|
||||
|
||||
/*!
|
||||
@@ -411,7 +411,7 @@ TempFileSaver::~TempFileSaver()
|
||||
|
||||
/*! \class Utils::FileName
|
||||
|
||||
\brief A light-weight convenience class for filenames
|
||||
\brief The FileName class is a light-weight convenience class for filenames.
|
||||
|
||||
On windows filenames are compared case insensitively.
|
||||
*/
|
||||
|
||||