forked from qt-creator/qt-creator
Merge remote-tracking branch 'origin/2.6'
Conflicts: src/plugins/madde/maemodeployconfigurationwidget.cpp src/plugins/madde/maemoglobal.cpp src/plugins/madde/maemoinstalltosysrootstep.cpp src/plugins/madde/maemopublisherfremantlefree.cpp src/plugins/madde/qt4maemodeployconfiguration.cpp src/plugins/qt4projectmanager/librarydetailscontroller.cpp src/plugins/qt4projectmanager/qt-desktop/qt4runconfiguration.cpp src/plugins/qt4projectmanager/qt4buildconfiguration.cpp src/plugins/qt4projectmanager/qt4project.cpp src/plugins/qtsupport/baseqtversion.cpp src/plugins/remotelinux/abstractremotelinuxdeployservice.h src/plugins/remotelinux/deploymentinfo.cpp src/plugins/remotelinux/remotelinuxdeployconfigurationfactory.cpp src/plugins/remotelinux/remotelinuxrunconfiguration.cpp src/plugins/remotelinux/remotelinuxrunconfigurationfactory.cpp Change-Id: I2560b528596f284e7b45a2260d8d3037891c5d17
This commit is contained in:
@@ -39,7 +39,7 @@
|
||||
your plugin with.
|
||||
|
||||
\list 1
|
||||
\o Select \gui{File > New File or Project > Other Qt Project > Qt Creator Plugin > Choose}.
|
||||
\o Select \gui{File > New File or Project > Libraries > Qt Creator Plugin > Choose}.
|
||||
|
||||
\image firstplugin-wizard.png "Choose the \QC Plugin Wizard"
|
||||
|
||||
@@ -52,12 +52,12 @@
|
||||
from the project name. You will choose that name later in the wizard.
|
||||
Continue to the next page.
|
||||
|
||||
The \gui{Target Setup} dialog opens.
|
||||
The \gui{Kit Selection} dialog opens.
|
||||
|
||||
\image firstplugin-target.png "Choose the Desktop Target and Matching Qt"
|
||||
\image firstplugin-kitselection.png "Choose the kit to build and run your project with"
|
||||
|
||||
\o Select the target and Qt version to build your project with.
|
||||
For a \QC plugin this needs to be the \gui{Desktop} target,
|
||||
\o Select the \l{glossary-buildandrun-kit}{kit} to build and run your project with.
|
||||
For a \QC plugin this needs to be a kit with \gui{Desktop} device type,
|
||||
and a Qt version that is compatible with the Qt version that your
|
||||
\QC was built with (in the best case the exact same build).
|
||||
If you use an incompatible Qt version to build your plugin, you
|
||||
|
Before Width: | Height: | Size: 98 KiB After Width: | Height: | Size: 98 KiB |
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.5 KiB |
@@ -37,8 +37,8 @@
|
||||
to use them from \QC.
|
||||
|
||||
To run the Valgrind tools on a remote host over SSH, select \gui {Analyze
|
||||
> Valgrind Analyze Memory (Remote)} or \gui {Valgrind Function Profile
|
||||
(Remote)}.
|
||||
> Valgrind Analyze Memory (External)} or \gui {Valgrind Function Profile
|
||||
(External)}.
|
||||
|
||||
To stop the currently running analyzer, select \gui {Analyze
|
||||
> Stop}.
|
||||
|
@@ -252,15 +252,13 @@
|
||||
|
||||
\list 1
|
||||
|
||||
\o Select \gui {Analyze > Valgrind Analyze Memory (Remote)} or
|
||||
\gui {Valgrind Function Profile (Remote)}.
|
||||
\o Select \gui {Analyze > Valgrind Analyze Memory (External)} or
|
||||
\gui {Valgrind Function Profile (External)}.
|
||||
|
||||
\image qtcreator-valgrind-remote-settings.png "Start Debugger dialog"
|
||||
\image qtcreator-valgrind-remote-settings.png "Start Analyzer dialog"
|
||||
|
||||
\o In the \gui Remote group, specify the connection to the remote host.
|
||||
|
||||
\o In the \gui Target group, specify the application to run and analyze
|
||||
on the remote host.
|
||||
\o Specify the application to run and analyze, and the \l{glossary-buildandrun-kit}{kit}
|
||||
to use.
|
||||
|
||||
\endlist
|
||||
|
||||
|
@@ -87,7 +87,7 @@
|
||||
\section1 Attaching to Running Qt Quick Applications
|
||||
|
||||
To profile Qt Quick applications that are not launched by \QC, select
|
||||
\gui {Analyze > QML Profiler (Remote)}. You must enable QML debugging for
|
||||
\gui {Analyze > QML Profiler (External)}. You must enable QML debugging for
|
||||
the application in the project build settings. For more information, see
|
||||
\l{Setting Up QML Debugging}.
|
||||
|
||||
|
@@ -32,8 +32,10 @@
|
||||
and analyze applications on them from \QC.
|
||||
|
||||
If you have a tool chain for building applications for Android devices
|
||||
installed on the development PC, you can add it to \QC. You can then select
|
||||
the \gui {Android} target to run applications on Android devices.
|
||||
installed on the development PC, you can add it to \QC. You can then add a
|
||||
\l{glossary-buildandrun-kit}{kit}
|
||||
with the Android device type, the tool chain, and the Qt version for Android,
|
||||
to build and run applications on Android devices.
|
||||
|
||||
\section1 Requirements
|
||||
|
||||
|
@@ -32,10 +32,10 @@
|
||||
|
||||
\title Setting Up Debugger
|
||||
|
||||
The main debugger settings are associated with the build
|
||||
\l{glossary-development-target}{target} of your project. To specify the
|
||||
debugger and compiler to use for each build target, select \gui Tools >
|
||||
\gui Options > \gui {Build and Run} > \gui Targets.
|
||||
The main debugger settings are associated with the
|
||||
\l{glossary-buildandrun-kit}{kit} you build and run your project with. To specify the
|
||||
debugger and compiler to use for each kit, select \gui Tools >
|
||||
\gui Options > \gui {Build and Run} > \gui Kits.
|
||||
|
||||
You need to set up the debugger only if the automatic setup
|
||||
fails, because the native debugger is missing (as is usually the
|
||||
@@ -45,8 +45,9 @@
|
||||
want to use a locally installed replacement instead).
|
||||
|
||||
\note If you need to change the debugger to use for an automatically
|
||||
detected target, you can \gui{Clone} the target and change the parameters in
|
||||
the clone. Make sure to select the cloned target for your project.
|
||||
detected \l{glossary-buildandrun-kit}{kit},
|
||||
you can \gui{Clone} the kit and change the parameters in
|
||||
the clone. Make sure to select the cloned kit for your project.
|
||||
|
||||
\note To use the debugging tools for Windows, you must install them
|
||||
and add the Symbol Server provided by Microsoft to the symbol search
|
||||
@@ -54,7 +55,7 @@
|
||||
Server in Windows}.
|
||||
|
||||
\note To use the Free Software Foundation (FSF) version of GDB on
|
||||
Mac OS, you must sign it and modify your target settings.
|
||||
Mac OS, you must sign it and modify your \l{glossary-buildandrun-kit}{kit} settings.
|
||||
|
||||
This section explains the options you have for debugging C++ code
|
||||
and provides installation notes for the supported native debuggers.
|
||||
@@ -185,8 +186,7 @@
|
||||
\o On Linux and Windows, use the Python-enabled GDB versions that
|
||||
are installed when you install \QC and Qt SDK. On Mac OS X,
|
||||
use the GDB provided with Xcode.
|
||||
For a custom \l{glossary-development-target}{target}, you can
|
||||
build your own Python-enabled GDB. Follow the instructions in
|
||||
You can also build your own Python-enabled GDB. Follow the instructions in
|
||||
\l{http://developer.qt.nokia.com/wiki/QtCreatorBuildGdb}
|
||||
{Building GDB}.
|
||||
|
||||
@@ -234,7 +234,7 @@
|
||||
supports Python from
|
||||
\l{ftp://ftp.qt.nokia.com/misc/gdb/7.2/gdb72_mac_platform.tar.bz2}.
|
||||
To use FSF GDB on Mac OS, you must sign it and add it to the \QC
|
||||
targets. For more information, see
|
||||
\l{glossary-buildandrun-kit}{kits}. For more information, see
|
||||
\l{Setting up FSF GDB for Mac OS}.
|
||||
|
||||
\note The Mac OS X Snow Leopard (10.6) has a bug that might cause the
|
||||
@@ -272,7 +272,8 @@
|
||||
|
||||
\section1 Setting up FSF GDB for Mac OS
|
||||
|
||||
To use FSF GDB on Mac OS, you must sign it and add it to the \QC targets.
|
||||
To use FSF GDB on Mac OS, you must sign it and add it to the \QC
|
||||
\l{glossary-buildandrun-kit}{kits}.
|
||||
|
||||
\list 1
|
||||
|
||||
@@ -313,13 +314,13 @@
|
||||
\endcode
|
||||
|
||||
\o In \QC, select \gui {Qt Creator > Preferences > Build & Run >
|
||||
Targets} > \gui Add to create a build target that uses FSF GDB.
|
||||
Kits} > \gui Add to create a kit that uses FSF GDB.
|
||||
|
||||
\o In the \gui Debugger field, specify the path to FSF GDB
|
||||
(\c $HOME/gdb72/bin/fsfgdb, but with an explicit value for
|
||||
\c $HOME).
|
||||
|
||||
\o To use the debugger, add the target in the \gui {Build Settings}
|
||||
\o To use the debugger, add the kit in the \gui {Build Settings}
|
||||
of the project.
|
||||
|
||||
\endlist
|
||||
|
@@ -252,9 +252,9 @@
|
||||
|
||||
While this setup might look daunting, it is mostly invisible to
|
||||
the user of \QC. To start debugging on a remote target with the
|
||||
necessary helper processes running, select the target in
|
||||
\gui{Projects > Build Settings}
|
||||
or in the \gui{Debug > Start Debugging} menu.
|
||||
necessary helper processes running, select the corresponding
|
||||
\l{glossary-buildandrun-kit}{kit} in
|
||||
\gui{Projects > Build & Run} or in the \gui{Debug > Start Debugging} menu.
|
||||
|
||||
Special use cases, such as attaching to a running process on the
|
||||
target, might still require manual setup.
|
||||
@@ -693,8 +693,7 @@
|
||||
which may contain both release and debug versions of the library. When you run
|
||||
applications on the Mac OS desktop, the release version of Frameworks is used
|
||||
by default. To step into Frameworks, select the \gui {Use debug versions of
|
||||
Frameworks} option in the project run settings for \gui Desktop and
|
||||
\gui {\QS} targets.
|
||||
Frameworks} option in the project run settings.
|
||||
|
||||
\section2 Viewing Threads
|
||||
|
||||
@@ -792,7 +791,7 @@
|
||||
To give the user simple access also to these items, \QC employs
|
||||
so-called Debugging Helpers. Debugging Helpers come in two varieties,
|
||||
compiled, and Python based, depending on the selected
|
||||
\l{glossary-development-target}{target}.
|
||||
\l{glossary-buildandrun-kit}{kit}.
|
||||
|
||||
By default, Debugging Helpers are automatically and transparently used.
|
||||
To disable them, select \gui Tools > \gui Options > \gui Debugger >
|
||||
|
@@ -89,7 +89,7 @@
|
||||
|
||||
\o To debug applications on devices, check that Qt 4.7.4, or later,
|
||||
libraries are installed on the device and
|
||||
\l{Running on Multiple Targets}{select the device as the target}
|
||||
\l{Running on Multiple Targets}{select the corresponding kit for the device}
|
||||
before you start debugging.
|
||||
|
||||
\endlist
|
||||
|
@@ -549,7 +549,7 @@
|
||||
\o Open project
|
||||
\o Ctrl+Shift+O
|
||||
\row
|
||||
\o Select build and run target
|
||||
\o Select the \l{glossary-buildandrun-kit}{kit} to build and run your project with
|
||||
\o Ctrl+T
|
||||
\row
|
||||
\o Run
|
||||
|
@@ -51,8 +51,8 @@
|
||||
|
||||
You can use the mode selector (1) to change to another \QC mode.
|
||||
|
||||
You can use the target selector (2) to select the
|
||||
\l{glossary-development-target}{target} for running (3), debugging (4), or
|
||||
You can use the kit selector (2) to select the
|
||||
\l{glossary-buildandrun-kit}{kit} for running (3), debugging (4), or
|
||||
building (5) the application. Output from these actions is displayed in the
|
||||
output panes (7).
|
||||
|
||||
|
@@ -54,8 +54,8 @@
|
||||
|
||||
\image qtcreator-embedded-linux-deployment.png "Deploy to embedded Linux"
|
||||
|
||||
When you run the application on the \gui {Embedded Linux} target, \QC
|
||||
deploys the application as specified by the deploy steps. By default,
|
||||
When you run the application on the \gui {Embedded Linux} device,
|
||||
\QC deploys the application as specified by the deploy steps. By default,
|
||||
\QC copies the application files to the device by using the SSH file
|
||||
transfer protocol (SFTP), as specified by the \gui {Upload files via SFTP}
|
||||
step.
|
||||
@@ -91,7 +91,7 @@
|
||||
|
||||
\section1 Creating Debian Installation Packages
|
||||
|
||||
When you run the application on the \gui{Maemo5} or \gui Harmattan target,
|
||||
When you run the application on the \gui{Maemo5} or \gui Harmattan device,
|
||||
\QC generates a Debian installation package in the build directory by
|
||||
default. You can deliver the installation package to users for installation
|
||||
on devices that are of the same type and run the same firmware as the
|
||||
@@ -117,8 +117,9 @@
|
||||
\note \QC automates this process for you.
|
||||
|
||||
\QC provides templates for a set of files that must be included in Debian
|
||||
packages. When you create a \gui Maemo5 or \gui Harmattan target for a
|
||||
project, \QC asks whether packaging files are to be added to the project and
|
||||
packages. When you start using a \l{glossary-buildandrun-kit}{kit} with
|
||||
\gui Maemo5 or \gui Harmattan device type
|
||||
for a project, \QC asks whether packaging files are to be added to the project and
|
||||
to version control. If you plan to edit the packaging files, add them to
|
||||
version control.
|
||||
|
||||
|
@@ -57,9 +57,10 @@
|
||||
\section1 Starting the Emulator
|
||||
|
||||
The \gui {Start MeeGo Emulator} button is visible if you have a project
|
||||
open in \QC for which you have added the Maemo or MeeGo Harmattan
|
||||
build target. It starts the Maemo or MeeGo Harmattan emulator, depending
|
||||
on the selected target.
|
||||
open in \QC for which you have added a \l{glossary-buildandrun-kit}{kit}
|
||||
with Maemo or MeeGo Harmattan device type.
|
||||
It starts the Maemo or MeeGo Harmattan emulator, depending
|
||||
on the selected kit.
|
||||
|
||||
To start the emulator, click
|
||||
\inlineimage qtcreator-maemo-emulator-button.png "Start MeeGo Emulator button"
|
||||
|
@@ -1,8 +1,9 @@
|
||||
\section2 Specifying Run Settings for Linux-Based Devices
|
||||
|
||||
To run an application on a Linux-based device target (embedded Linux, MeeGo
|
||||
Harmattan, or Maemo), create and select a device configuration in the run
|
||||
settings for the project.
|
||||
To run an application on a Linux-based device (embedded Linux, MeeGo
|
||||
Harmattan, or Maemo), create and select a device configuration in the
|
||||
\l{glossary-buildandrun-kit}{kit} that is used for building and running the project and set its
|
||||
device type correspondingly.
|
||||
You can also pass command line arguments to your application.
|
||||
|
||||
\image qtcreator-screenshot-run-settings-maemo.png "Run settings for Linux-based devices"
|
||||
@@ -16,7 +17,7 @@
|
||||
|
||||
When you run the application, \QC copies the files to the connected device.
|
||||
|
||||
For MeeGo Harmattan and Maemo targets, \QC also generates an
|
||||
For MeeGo Harmattan and Maemo device types, \QC also generates an
|
||||
installation package in the build directory by default. You can deliver the
|
||||
installation package to users for installation
|
||||
on devices that are of the same type and run the same firmware as the
|
||||
|
@@ -61,7 +61,8 @@
|
||||
|
||||
\list 1
|
||||
|
||||
\o Select the \gui {Maemo5} build target for your project.
|
||||
\o Select the \l{glossary-buildandrun-kit}{kit} with \gui {Maemo5} device type
|
||||
for your project.
|
||||
|
||||
\o Choose \gui {Build > Publish Project}.
|
||||
|
||||
|
@@ -31,17 +31,17 @@
|
||||
|
||||
If you have a tool chain for building applications for embedded Linux
|
||||
devices (with no MADDE support) installed on the development PC, you can add
|
||||
it to \QC. You can then select the \gui {Embedded Linux} target to
|
||||
run applications on embedded Linux devices.
|
||||
it to \QC. You can then select a \l{glossary-buildandrun-kit}{kit}
|
||||
with \gui {Embedded Linux} device type to
|
||||
build and run applications on embedded Linux devices.
|
||||
|
||||
To be able to run and debug applications on embedded Linux devices, you must
|
||||
create device configurations and select them in the \QC run
|
||||
settings.
|
||||
create device configurations and select them in the \QC \l{glossary-buildandrun-kit}{kit}
|
||||
|
||||
You use a wizard to create the connections. You can edit the settings later
|
||||
in \gui {Tools > Options > Linux Devices > Device Configurations}.
|
||||
in \gui {Tools > Options > Devices > Devices}.
|
||||
|
||||
\image qtcreator-linux-device-configurations.png "Device Configurations dialog"
|
||||
\image qtcreator-linux-device-configurations.png "Devices dialog"
|
||||
|
||||
You can protect the connections between \QC and a device by using
|
||||
either a password or an SSH key. If you do not have an SSH key, you can
|
||||
@@ -67,8 +67,8 @@
|
||||
|
||||
\list 1
|
||||
|
||||
\o Select \gui {Tools > Options > Linux Devices > Device
|
||||
Configurations > Add > Generic Linux Device > Start Wizard}.
|
||||
\o Select \gui {Tools > Options > Linux Devices > Devices > Add
|
||||
> Generic Linux Device > Start Wizard}.
|
||||
|
||||
\image qtcreator-screenshot-devconf-linux.png "Connection Data wizard"
|
||||
|
||||
@@ -91,9 +91,10 @@
|
||||
|
||||
\endlist
|
||||
|
||||
\o Select \gui Tools > \gui Options > \gui {Build & Run} > \gui Targets
|
||||
> \gui Add to add a target for building for the device. Select the
|
||||
Qt version, compiler, and device that you added above.
|
||||
\o Select \gui Tools > \gui Options > \gui {Build & Run} > \gui Kits
|
||||
> \gui Add to add a kit for building for the device. Select the
|
||||
Qt version, compiler, and device that you added above, and choose
|
||||
\gui {Generic Linux Device} for the device type.
|
||||
|
||||
\o To specify build settings:
|
||||
|
||||
@@ -102,9 +103,9 @@
|
||||
\o Open a project for an application you want to develop for the
|
||||
device.
|
||||
|
||||
\o Select \gui {Projects > Targets > Add}.
|
||||
\o Select \gui {Projects > Build & Run Settings > Add Kit}.
|
||||
|
||||
\o Select the target that you added above.
|
||||
\o Select the kit that you added above.
|
||||
|
||||
\endlist
|
||||
|
||||
|
@@ -40,7 +40,7 @@
|
||||
|
||||
\o \l{Deploying Applications to Linux-Based Devices}
|
||||
|
||||
When you deploy the application on a Linux-based device target, such
|
||||
When you deploy the application on a Linux-based device, such
|
||||
as \gui {Embedded Linux}, \gui Harmattan, or \gui{Maemo5}, \QC
|
||||
copies the application files to the connected device. You
|
||||
can test and debug the application on the device.
|
||||
@@ -48,14 +48,14 @@
|
||||
Maemo 5 devices.
|
||||
\o \l{Deploying Applications to QNX Devices}
|
||||
|
||||
When you deploy the application on the \gui{QNX} target, depending
|
||||
When you deploy the application on a \gui{QNX} device, depending
|
||||
on your target device, \QC either generates a BAR package in the
|
||||
build directory and deploys it to the connected device, or copies
|
||||
the application files to the connected device. You can test and
|
||||
debug the application on the device.
|
||||
\o \l{Deploying Applications to Android Devices}
|
||||
|
||||
When you deploy the application on the Android target, \QC copies
|
||||
When you deploy the application on an Android device, \QC copies
|
||||
the application files to the device. In addition, you can determine
|
||||
the Qt libraries to use.
|
||||
\endlist
|
||||
@@ -68,7 +68,7 @@
|
||||
When you are ready to publish the application on a publishing
|
||||
channel, you must make sure that the installation file meets the
|
||||
requirements for publishing and installing applications to the
|
||||
target devices.
|
||||
targeted devices.
|
||||
\endlist
|
||||
|
||||
*/
|
||||
|
@@ -49,7 +49,7 @@
|
||||
with the parts of the user interface, go to \l{User Interface}.
|
||||
\o \bold {\l{Building and Running an Example}}
|
||||
|
||||
To check that \l{glossary-development-target}{targets} were
|
||||
To check that \l{glossary-buildandrun-kit}{kits} for building and running were
|
||||
successfully installed as part of the \QSDK installation, open
|
||||
an example application and run it. If you have not done so
|
||||
before, go to \l{Building and Running an Example}.
|
||||
|
@@ -43,7 +43,8 @@
|
||||
into binaries. Different build configurations allow you to
|
||||
quickly build the project for different purposes.
|
||||
By default, \QC creates \e {debug build} and \e {release build}
|
||||
configurations for each \e target. A debug build contains
|
||||
configurations for each \l{glossary-buildandrun-kit}{kit} defined for your project.
|
||||
A debug build contains
|
||||
additional debug symbols that you need for debugging the
|
||||
application but that you can leave out from the release version.
|
||||
Generally, you use the debug configuration for testing and the
|
||||
@@ -79,6 +80,15 @@
|
||||
copied to a location in the file system of the development PC or
|
||||
a mobile device.
|
||||
|
||||
\row
|
||||
\o Kit
|
||||
\target glossary-buildandrun-kit
|
||||
\o \QC groups build and run specific settings as kits to make
|
||||
cross-platform development easier. Each kit consists of a set
|
||||
of values that define one environment, such as a device,
|
||||
tool chain, Qt version, and debugger command to use. Configure kits at
|
||||
\gui {Tools > Options > Build & Run > Kits}.
|
||||
|
||||
\row
|
||||
\o Mode
|
||||
\target glossary-mode
|
||||
@@ -102,14 +112,15 @@
|
||||
\target glossary-project-qt
|
||||
\o \QC allows you to have multiple versions of Qt installed on your
|
||||
development PC and use different versions to build your projects
|
||||
for different \e targets.
|
||||
for different purposes.
|
||||
|
||||
\row
|
||||
\o Run configuration
|
||||
\target glossary-run-config
|
||||
\o Starts the application in the location where it was copied by
|
||||
the \e {deploy configuration}. By default, when you run a
|
||||
project, \QC builds it, deploys it to the selected \e target,
|
||||
project, \QC builds it, deploys it to the device specified in the selected
|
||||
\l{glossary-buildandrun-kit}{kit},
|
||||
and runs it there. However, if you have not made any changes to
|
||||
the project since you last built and deployed it, \QC simply
|
||||
runs it again.
|
||||
@@ -126,23 +137,6 @@
|
||||
if you need many build configurations for a single set of
|
||||
source files.
|
||||
|
||||
\row
|
||||
\o Target
|
||||
\target glossary-development-target
|
||||
\o \QC groups platform specific settings as targets to make
|
||||
cross-platform development easier. Each target consists of a set
|
||||
of values that define one environment, such as a device,
|
||||
tool chain, Qt version, and debugger command to use.
|
||||
|
||||
\row
|
||||
\o Tool chain
|
||||
\target glossary-tool-chain
|
||||
\o Specifies a compiler and a debugger and other necessary
|
||||
tools for building an application for a particular \e target.
|
||||
\QC tries to detect the tool chains that are available on your
|
||||
system. You can manually add tool chains that are not detected
|
||||
automatically.
|
||||
|
||||
\endtable
|
||||
|
||||
*/
|
||||
|
@@ -107,7 +107,7 @@
|
||||
|
||||
\if defined(qcmanual)
|
||||
\o On Windows, you must create projects for Maemo 5 and Harmattan
|
||||
targets on the same partition where you installed \QSDK, \QC, and
|
||||
device types on the same partition where you installed \QSDK, \QC, and
|
||||
MADDE.
|
||||
\endif
|
||||
|
||||
|
@@ -32,7 +32,8 @@
|
||||
\title Connecting Mobile Targets
|
||||
|
||||
You can connect mobile devices to the development PC to build, run, debug,
|
||||
and analyze applications on them from \QC. When you install mobile targets
|
||||
and analyze applications on them from \QC. When you install
|
||||
\l{glossary-buildandrun-kit}{kits} for building and running on mobile targets
|
||||
as part of the \QSDK, the build and run settings for the target devices are
|
||||
set up automatically in \QC. However, \QSDK does not contain a tool chain
|
||||
for building applications for embedded Linux devices.
|
||||
|
@@ -87,9 +87,10 @@
|
||||
and commands used to build the project.
|
||||
|
||||
\QC provides support for building, running, and deploying Qt
|
||||
applications for desktop environment and mobile devices. Build,
|
||||
applications for desktop environment and mobile devices.
|
||||
\l{glossary-buildandrun-kit}{Kits}, build,
|
||||
run, and deployment settings allow you to quickly switch between
|
||||
targets.
|
||||
different setups and targets.
|
||||
|
||||
For more information, see \l{Building and Running}.
|
||||
\o \bold {\l{Debugging and Analyzing}}
|
||||
|
@@ -50,22 +50,22 @@
|
||||
|
||||
\o Select \gui Projects to configure the project:
|
||||
|
||||
\image qtcreator-gs-build-example-targets.png "Selecting targets"
|
||||
\image qtcreator-gs-build-example-targets.png "Selecting kit for building and running"
|
||||
|
||||
\list 1
|
||||
|
||||
\o Select at least \QS and one of the mobile
|
||||
\l{glossary-development-target}{targets} (1), Maemo 5 or
|
||||
\l{glossary-buildandrun-kit}{kits} (1), Maemo 5 or
|
||||
MeeGo Harmattan, depending on the device you develop for.
|
||||
|
||||
\o Select \gui {Configure Project} (2).
|
||||
|
||||
\endlist
|
||||
|
||||
\o To test the application in \QS, click the \gui {Target
|
||||
\o To test the application in \QS, click the \gui {Kit
|
||||
Selector} and select \gui {\QS}.
|
||||
|
||||
\image qtcreator-gs-build-example-select-qs.png "Selecting Qt Simulator as target"
|
||||
\image qtcreator-gs-build-example-select-qs.png "Selecting Qt Simulator as target device type"
|
||||
|
||||
\o Click
|
||||
\inlineimage qtcreator-run.png
|
||||
|
@@ -34,20 +34,24 @@
|
||||
\image creator_buildingrunning.png
|
||||
|
||||
\QC provides support for building, running, and deploying Qt applications
|
||||
for different \l{glossary-development-target}{targets}.
|
||||
for different targets, or using different compilers, debuggers or Qt versions.
|
||||
\l{glossary-buildandrun-kit}{Kits} define the tools,
|
||||
device type and other settings to use when building and running your project.
|
||||
|
||||
\list
|
||||
\o \l{Building for Multiple Targets}
|
||||
|
||||
\e {Build configurations} contain everything you need to compile
|
||||
the sources into binaries.
|
||||
the sources into binaries. Build configurations use the tools and settings
|
||||
defined in their corresponding \l{glossary-buildandrun-kit}{kit}.
|
||||
|
||||
\o \l{Running on Multiple Targets}
|
||||
|
||||
\e {Run configurations} start the application in the location
|
||||
where it was copied by the \e{deploy configuration}. By default,
|
||||
when you select the \gui Run function, \QC builds the project,
|
||||
deploys it to the selected target, and runs it there. However,
|
||||
deploys it to the target defined in the \l{glossary-buildandrun-kit}{kit},
|
||||
and runs it there. However,
|
||||
if you have not made any changes to the project since you last
|
||||
built and deployed it, \QC simply runs it again.
|
||||
|
||||
@@ -60,8 +64,8 @@
|
||||
|
||||
\o \l{Connecting Mobile Targets}
|
||||
|
||||
When you install tool chains for build targets as part of the \QSDK,
|
||||
the build and run settings for mobile device targets are set up
|
||||
When you install tool chains for device types as part of the \QSDK,
|
||||
the build and run settings for mobile device types are set up
|
||||
automatically. However, you might need to install and configure some
|
||||
additional software on the devices to be able to connect to them
|
||||
from the development PC.
|
||||
@@ -75,7 +79,7 @@
|
||||
\o \l{Customizing the Build Process}
|
||||
|
||||
By default, running an application also builds it and deploys it to
|
||||
a location from where it can be run on the target. You can change
|
||||
a location from where it can be run on the target device. You can change
|
||||
the relationship between the build, run, and deploy configurations.
|
||||
|
||||
\o \l{http://doc.qt.nokia.com/qtsimulator/index.html}
|
||||
@@ -89,7 +93,9 @@
|
||||
Therefore, applications that run well on \QS also run on
|
||||
any device that hosts the Qt and Qt Mobility libraries.
|
||||
The \QS is installed as part of the \QSDK. After it is
|
||||
installed, you can select it as a build target in \QC.
|
||||
installed, you can create a \l{glossary-buildandrun-kit}{kit}
|
||||
with \gui Desktop device type and the Qt Simulator Qt version for
|
||||
building and running your projects.
|
||||
|
||||
\o \l{Using Maemo or MeeGo Harmattan Emulator}
|
||||
|
||||
|
@@ -31,12 +31,15 @@
|
||||
|
||||
\title Building for Multiple Targets
|
||||
|
||||
You can build applications for multiple \l{glossary-development-target}
|
||||
{targets}. By default, when you run the application on a target, you
|
||||
automatically build it for the target and deploy it to the target first.
|
||||
You can build applications for multiple targets, or using different compilers,
|
||||
debuggers or Qt versions. \l{glossary-buildandrun-kit}{Kits} define the tools,
|
||||
device type and other settings to use.
|
||||
|
||||
By default, when you run the application, you
|
||||
automatically build and deploy it first.
|
||||
However, you can also perform each operation separately.
|
||||
|
||||
To check that the application code can be compiled and linked for a target,
|
||||
To check that the application code can be compiled and linked for a device,
|
||||
you can build the project. The build errors and warnings are displayed in
|
||||
the \gui {Issues} output pane. More detailed information is displayed
|
||||
in the \gui {Compile Output} pane.
|
||||
@@ -45,9 +48,9 @@
|
||||
|
||||
\list 1
|
||||
|
||||
\o Select a target for the project.
|
||||
\o Select a \l{glossary-buildandrun-kit}{kit} for the project.
|
||||
|
||||
\image qtcreator-target-selector.png "Target selector"
|
||||
\image qtcreator-kit-selector.png "Kit selector"
|
||||
|
||||
\o Choose \gui {Build > Build Project} or press \key {Ctrl+B}.
|
||||
|
||||
|
@@ -33,9 +33,9 @@
|
||||
|
||||
Qt is supported on a variety of 32-bit and 64-bit platforms, and can
|
||||
usually be built on each platform with GCC, a vendor-supplied compiler, or
|
||||
a third party compiler. In \QC, a \l{glossary-development-target}{target}
|
||||
specifies the compiler and other necessary tools for building an
|
||||
application for a particular platform.
|
||||
a third party compiler. In \QC, a \l{glossary-buildandrun-kit}{kit}
|
||||
specifies the compiler and other necessary tools for building and running an
|
||||
application on a particular platform.
|
||||
|
||||
\QC automatically detects the compilers that are registered by your system
|
||||
or by an SDK. You can add compilers to build applications by using other
|
||||
@@ -64,8 +64,8 @@
|
||||
the application binary interface (ABI) version from the list of available
|
||||
versions. You can also create a custom ABI definition.
|
||||
|
||||
You specify the compiler to use for each target in \gui Tools >
|
||||
\gui Options > \gui {Build & Run} > \gui Targets.
|
||||
You specify the compiler to use for each kit in \gui Tools >
|
||||
\gui Options > \gui {Build & Run} > \gui Kits.
|
||||
|
||||
To add compilers:
|
||||
|
||||
|
@@ -68,9 +68,9 @@
|
||||
use \QC as a code editor and to fully control the steps and commands used to
|
||||
build the project.
|
||||
|
||||
You can install mobile device \l{glossary-development-target}{targets}
|
||||
as part of the \QSDK. The build and run settings for the
|
||||
installed targets are set up automatically. However, you might need to
|
||||
You can install tools for mobile devices
|
||||
as part of the \QSDK. The \l{glossary-buildandrun-kit}{kits} and build and run settings for the
|
||||
installed device types are set up automatically. However, you might need to
|
||||
install and configure some additional software on the devices to be able to
|
||||
connect to them from the development PC.
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
|
||||
In the first step, you
|
||||
select a template for the project. You can filter templates (1) to view only
|
||||
those that apply to a particular target.
|
||||
those that apply to a particular device type.
|
||||
|
||||
\image qtcreator-new-qt-quick-project-wizard.png
|
||||
|
||||
@@ -225,8 +225,8 @@
|
||||
|
||||
To create a new project, select \gui File > \gui{New File or Project} and
|
||||
select the type of your project. The contents of the wizard dialogs depend
|
||||
on the project type and the build targets that you select in the
|
||||
\gui {Target Setup} dialog. Follow the instructions of the wizard.
|
||||
on the project type and the \l{glossary-buildandrun-kit}{kits} that you select in the
|
||||
\gui {Kit Selection} dialog. Follow the instructions of the wizard.
|
||||
|
||||
For examples of creating different types of projects, see
|
||||
\l{Tutorials}.
|
||||
@@ -238,8 +238,8 @@
|
||||
for building and running projects, select \gui{Tools} > \gui{Options} >
|
||||
\gui{Build & Run} > \gui{General}.
|
||||
|
||||
To specify build and run settings for different target platforms, select
|
||||
\gui Projects.
|
||||
To specify build and run settings for different target platforms ,
|
||||
select \gui Projects.
|
||||
|
||||
\section1 Adding Files to Projects
|
||||
|
||||
|
@@ -39,19 +39,20 @@
|
||||
one environment to another. Therefore, we recommend that you click \gui No
|
||||
and enter the information again in the \gui {Configure Project} tab.
|
||||
|
||||
The \gui {Configure Project} tab displays a list of development environments
|
||||
for target platforms that are installed on the development PC and
|
||||
configured in \gui Tools > \gui Options > \gui {Build & Run} > \gui Targets.
|
||||
Select the targets that you want to build the project for.
|
||||
The \gui {Configure Project} tab displays a list of \l{glossary-buildandrun-kit}{kits}
|
||||
for building and running projects, that are installed on the development PC and
|
||||
configured in \gui Tools > \gui Options > \gui {Build & Run} > \gui Kits.
|
||||
Select the kits that you want to build and run the project with.
|
||||
|
||||
\image qtcreator-open-project-targets.png "Configure Project tab"
|
||||
|
||||
Even if you do not intend to build the project, the C++ and QML code models
|
||||
need a Qt version and compiler to offer code completion. To specify them,
|
||||
select the \gui Options link, or select \gui {Tools > Options > Build & Run
|
||||
> Targets}.
|
||||
> Kits}.
|
||||
|
||||
If \QC cannot find an existing build for a particular target, it starts out
|
||||
If \QC cannot find an existing build for a particular \l{glossary-buildandrun-kit}{kit},
|
||||
it starts out
|
||||
from a clean slate, and creates new debug and release build configurations
|
||||
in the specified directory. \QC suggests a name
|
||||
and location for the directory that you can change.
|
||||
@@ -71,7 +72,7 @@
|
||||
\o Select \gui File > \gui{Open File or Project} and select the project
|
||||
to open.
|
||||
|
||||
\o In the \gui {Configure Project} tab, select build targets for your
|
||||
\o In the \gui {Configure Project} tab, select kits for building and running your
|
||||
project, and click \gui {Configure Project}.
|
||||
|
||||
\endlist
|
||||
|
@@ -32,7 +32,7 @@
|
||||
\title Adding Qt Versions
|
||||
|
||||
\QC allows you to have multiple versions of Qt installed on your development
|
||||
PC and use different versions to build your projects for different targets.
|
||||
PC and use different versions to build your projects.
|
||||
For example, \QSDK contains special Qt versions for developing applications
|
||||
for mobile devices.
|
||||
|
||||
@@ -42,8 +42,9 @@
|
||||
\gui {Qt version for} section. To add Qt versions, select
|
||||
\gui {Tools > Options > Build & Run > Qt Versions}.
|
||||
|
||||
You specify the Qt version to use for each \l{glossary-development-target}
|
||||
{target} in \gui Tools > \gui Options > \gui {Build & Run} > \gui Targets.
|
||||
You specify the Qt version to use for each \l{glossary-buildandrun-kit}
|
||||
{kit} for building and running your projects
|
||||
in \gui Tools > \gui Options > \gui {Build & Run} > \gui Kits.
|
||||
|
||||
\section2 Setting Up New Qt Versions
|
||||
|
||||
|
@@ -2,9 +2,9 @@
|
||||
|
||||
\list 1
|
||||
|
||||
\o Select \gui Desktop as the target.
|
||||
\o Select \gui Desktop as the build and run \l{glossary-buildandrun-kit}{kit}.
|
||||
|
||||
\image qtcreator-target-selector.png "Target selector"
|
||||
\image qtcreator-kit-selector.png "Kit selector"
|
||||
|
||||
\o Click the \gui Run button.
|
||||
|
||||
|
@@ -7,7 +7,7 @@
|
||||
|
||||
\list 1
|
||||
|
||||
\o Select \gui {\QS} as the target.
|
||||
\o Select \gui {\QS} as the build and run \l{glossary-buildandrun-kit}{kit}.
|
||||
|
||||
\o Click the \gui Run button.
|
||||
|
||||
|
@@ -55,11 +55,12 @@
|
||||
|
||||
By default, \QC builds projects in a separate directory from the source
|
||||
directory, as \l{glossary-shadow-build} {shadow builds}. This keeps the
|
||||
files generated for each \l{glossary-development-target}{target} separate.
|
||||
If you only build for one target, you can deselect the \gui {Shadow build}
|
||||
files generated for each \l{glossary-buildandrun-kit}{build and run kit} separate.
|
||||
If you only build and run with a single \l{glossary-buildandrun-kit}{kit},
|
||||
you can deselect the \gui {Shadow build}
|
||||
checkbox.
|
||||
|
||||
Shadow building is not supported for the following target platforms on
|
||||
Shadow building is not supported for the following device types on
|
||||
Windows:
|
||||
|
||||
\list
|
||||
@@ -192,7 +193,7 @@
|
||||
|
||||
\list
|
||||
|
||||
\o \l{Adding Targets}
|
||||
\o \l{Adding Kits}
|
||||
\o \l{Adding Qt Versions}
|
||||
\o \l{Adding Compilers}
|
||||
|
||||
|
@@ -33,8 +33,7 @@
|
||||
|
||||
\omit
|
||||
When you install the \QSDK, the build and run settings for the development
|
||||
targets
|
||||
delivered with the \QSDK are set up automatically.
|
||||
targets delivered with the \QSDK are set up automatically.
|
||||
\endomit
|
||||
|
||||
To view and modify the settings for currently open projects, switch to the
|
||||
@@ -42,23 +41,23 @@
|
||||
|
||||
\image qtcreator-project-targets.png
|
||||
|
||||
To add build and run targets for the project, select \gui Add. The list
|
||||
displays targets that are configured in \gui Tools > \gui Options >
|
||||
\gui {Build & Run} > \gui Targets. To add targets to the list, select
|
||||
To add build and run \l{glossary-buildandrun-kit}{kits} for the project, select \gui Add. The list
|
||||
displays kits that are configured in \gui Tools > \gui Options >
|
||||
\gui {Build & Run} > \gui Kits. To add kits to the list, select
|
||||
\gui Manage.
|
||||
|
||||
To remove a target, hover the cursor over it (1) and click
|
||||
\inlineimage qtcreator-target-remove.png "Remove Target button"
|
||||
To remove a kit, hover the cursor over it (1) and click
|
||||
\inlineimage qtcreator-target-remove.png "Remove Kit button"
|
||||
.
|
||||
|
||||
You can select the targets and use the \gui Build menu commands to build,
|
||||
You can select the kits and use the \gui Build menu commands to build,
|
||||
deploy, and run projects.
|
||||
|
||||
The project pane consists of the following tabs:
|
||||
|
||||
\list
|
||||
|
||||
\o \l{Adding Targets}{Targets}
|
||||
\o \l{Adding Kits}{Build & Run}
|
||||
|
||||
\list
|
||||
|
||||
@@ -69,7 +68,7 @@
|
||||
\endlist
|
||||
|
||||
\note If you have not configured the project for building, the
|
||||
\gui Targets tab is replaced by the \l{Opening Projects}
|
||||
\gui {Build & Run} tab is replaced by the \l{Opening Projects}
|
||||
{Configure Projects} tab.
|
||||
|
||||
\o \l{Specifying Editor Settings}{Editor Settings}
|
||||
|
@@ -4,8 +4,7 @@
|
||||
detecting memory leaks and profiling function execution. You can configure
|
||||
the tools according to your needs.
|
||||
|
||||
You can specify analyzer settings for the desktop and \QS targets.
|
||||
You can specify them either globally for all projects or separately for each
|
||||
You can specify analyzer settings either globally for all projects or separately for each
|
||||
project.
|
||||
|
||||
To specify analyzer settings for the current project:
|
||||
|
@@ -1,4 +1,4 @@
|
||||
\section2 Specifying Run Settings for Desktop Targets
|
||||
\section2 Specifying Run Settings for Desktop Device Types
|
||||
|
||||
You can specify command line arguments to be passed to the executable
|
||||
and the working directory to use. The working directory defaults to
|
||||
|
@@ -32,10 +32,10 @@
|
||||
\title Specifying Run Settings
|
||||
|
||||
\QC automatically creates run configurations for your project.
|
||||
To view and modify the settings, select \gui {Projects > Run}.
|
||||
To view and modify the settings, select \gui {Projects > Build & Run > Run}.
|
||||
|
||||
The settings to specify depend on the type of the project and on the build
|
||||
target for the project.
|
||||
The settings to specify depend on the type of the project and on the
|
||||
\l{glossary-buildandrun-kit}{kit} that you build and run the project with.
|
||||
|
||||
Click \gui Add to add run settings for a project and \gui Remove to remove
|
||||
the current settings.
|
||||
|
@@ -29,13 +29,14 @@
|
||||
\page creator-targets.html
|
||||
\nextpage creator-project-qmake.html
|
||||
|
||||
\title Adding Targets
|
||||
\title Adding Kits
|
||||
|
||||
\QC groups platform specific settings as \e targets to make cross-platform
|
||||
development easier. Each target consists of a set of values that define one
|
||||
\QC groups settings used for building and running projects as kits
|
||||
to make cross-platform and cross-configuration
|
||||
development easier. Each kit consists of a set of values that define one
|
||||
environment, such as a device, compiler, Qt version, and debugger command
|
||||
to use, and some metadata, such as an icon and a name for the target. Once
|
||||
you have defined targets, you can select them to build and run projects.
|
||||
to use, and some metadata, such as an icon and a name for the kit. Once
|
||||
you have defined kits, you can select them to build and run projects.
|
||||
|
||||
\QC supports development for the desktop and for the following types of
|
||||
devices:
|
||||
@@ -54,18 +55,18 @@
|
||||
|
||||
\endlist
|
||||
|
||||
To add targets:
|
||||
To add kits:
|
||||
|
||||
\list 1
|
||||
|
||||
\o Select \gui Tools > \gui Options > \gui {Build & Run} > \gui Targets
|
||||
\o Select \gui Tools > \gui Options > \gui {Build & Run} > \gui Kits
|
||||
> \gui Add.
|
||||
|
||||
\image qtcreator-targets.png
|
||||
|
||||
To clone the selected target, select \gui Clone.
|
||||
To clone the selected kit, select \gui Clone.
|
||||
|
||||
\o In the \gui Name column, double-click the target name to change it.
|
||||
\o In the \gui Name column, double-click the kit name to change it.
|
||||
|
||||
|
||||
|
||||
@@ -73,11 +74,11 @@
|
||||
target.
|
||||
|
||||
Double-click the icon next to the field to select the image that is
|
||||
displayed in the target selector for this target. You can use any
|
||||
displayed in the kit selector for this kit. You can use any
|
||||
image in a supported file format (for example, PNG). The image is
|
||||
scaled to the size 64x64 pixels. For example, using the compiler
|
||||
logo as an icon allows you to easily see, which compiler is used to
|
||||
build the project for the selected target.
|
||||
build the project for the selected kit.
|
||||
|
||||
\o In the \gui Device field, select the device configuration to target.
|
||||
|
||||
@@ -104,7 +105,7 @@
|
||||
\QC checks the directories listed in the \c{PATH} environment
|
||||
variable for the qmake executable. If a qmake executable is found,
|
||||
it is referred to as \bold{Qt in PATH} and selected as the Qt
|
||||
version to use for the \gui Desktop target.
|
||||
version to use for the \gui Desktop kit that is created by default.
|
||||
|
||||
\o In the \gui {Qt mkspec} field, specify build instructions for qmake.
|
||||
If you leave this field empty, the default value is used.
|
||||
|
@@ -169,7 +169,7 @@
|
||||
\list
|
||||
\o \l{Specifying Build Settings}
|
||||
\list
|
||||
\o \l{Adding Targets}
|
||||
\o \l{Adding Kits}
|
||||
\o \l{Adding Qt Versions}
|
||||
\o \l{Adding Compilers}
|
||||
\endlist
|
||||
|
@@ -1,6 +1,6 @@
|
||||
\section1 Specifying Run Settings for Qt Quick UI Projects
|
||||
|
||||
You can specify run settings for the \gui Desktop target:
|
||||
You can specify run settings for \l{glossary-buildandrun-kit}{kits} with \gui Desktop device type:
|
||||
|
||||
\list
|
||||
|
||||
|
@@ -59,13 +59,11 @@
|
||||
\o In the \gui {Create in} field, enter the path for the project files.
|
||||
For example, \c {C:\Qt\examples}, and then click \gui{Next}.
|
||||
|
||||
\o In the \gui {Application Type} dialog, select \gui {Built-in
|
||||
elements only (for all platforms)}, and then click \gui{Next}.
|
||||
\o Select \l{glossary-buildandrun-kit}{kits} for running and building your project,
|
||||
and then click \gui{Next}.
|
||||
|
||||
\o Select targets, and then click \gui{Next}.
|
||||
|
||||
\note Targets are listed if they have been specified in \gui Tools >
|
||||
\gui Options > \gui {Build & Run} > \gui Targets.
|
||||
\note Kits are listed if they have been specified in \gui Tools >
|
||||
\gui Options > \gui {Build & Run} > \gui Kits.
|
||||
|
||||
\o Select \gui Next in the following dialogs to use the default
|
||||
settings.
|
||||
|
@@ -154,15 +154,15 @@
|
||||
|
||||
\o Click \gui{Next}.
|
||||
|
||||
The \gui {Target Setup} dialog opens.
|
||||
The \gui {Kit Selection} dialog opens.
|
||||
|
||||
\image qmldesigner-new-project-qt-versions.png "Target Setup dialog"
|
||||
\image qmldesigner-new-project-qt-versions.png "Kit Selection dialog"
|
||||
|
||||
\o Select build targets for your project,
|
||||
\o Select build and run \l{glossary-buildandrun-kit}{kits} for your project,
|
||||
and then click \gui{Next}.
|
||||
|
||||
\note If only one target is specified in \gui Tools > \gui Options >
|
||||
\gui {Build & Run} > \gui Targets, this dialog is skipped.
|
||||
\note If only one kit is specified in \gui Tools > \gui Options >
|
||||
\gui {Build & Run} > \gui Kits, this dialog is skipped.
|
||||
|
||||
The \gui {Mobile Options} dialog opens.
|
||||
|
||||
@@ -172,8 +172,8 @@
|
||||
application behaves when the orientation of the device display
|
||||
rotates between portrait and landscape, and then click \gui Next.
|
||||
|
||||
\note This dialog opens only if you select \gui Maemo5
|
||||
target in the \gui {Target Setup} dialog. On
|
||||
\note This dialog opens only if you select a \l{glossary-buildandrun-kit}{kit}
|
||||
with \gui Maemo5 device type in the \gui {Kit Selection} dialog. On
|
||||
Harmattan, the Qt Quick Components for MeeGo provide native-looking
|
||||
rotation.
|
||||
|
||||
|
@@ -57,15 +57,15 @@
|
||||
\o In the \gui {Create in} field, enter the path for the project files.
|
||||
For example, \c {C:\Qt\examples}, and then click \gui{Next}.
|
||||
|
||||
The \gui {Target Setup} dialog opens.
|
||||
The \gui {Kit Selection} dialog opens.
|
||||
|
||||
\image qtcreator-new-project-qt-versions-qt-gui.png "Target Setup dialog"
|
||||
\image qtcreator-new-project-qt-versions-qt-gui.png "Kit Selection dialog"
|
||||
|
||||
\o Select build targets for your project,
|
||||
\o Select build and run \l{glossary-buildandrun-kit}{kits} for your project,
|
||||
and click \gui{Next}.
|
||||
|
||||
\note If only one target is specified in \gui Tools > \gui Options >
|
||||
\gui {Build & Run} > \gui Targets, this dialog is
|
||||
\note If only one kit is specified in \gui Tools > \gui Options >
|
||||
\gui {Build & Run} > \gui Kits, this dialog is
|
||||
skipped.
|
||||
|
||||
The \gui{Class Information} dialog opens.
|
||||
|
@@ -20,10 +20,11 @@ OTHER_FILES += dist/copyright_template.txt \
|
||||
macx {
|
||||
APPBUNDLE = "$$OUT_PWD/bin/Qt Creator.app"
|
||||
deployqt.commands = $$PWD/scripts/deployqtHelper_mac.sh \"$${APPBUNDLE}\"
|
||||
codesign.commands = codesign -s \"$(SIGNING_IDENTITY)\" \"$${APPBUNDLE}\"
|
||||
bindist.commands = 7z a -mx9 $$OUT_PWD/qt-creator-mac$(INSTALL_EDITION)-$${QTCREATOR_VERSION}$(INSTALL_POSTFIX).7z \"$$OUT_PWD/bin/Qt Creator.app/\"
|
||||
dmg.commands = $$PWD/scripts/makedmg.sh $$OUT_PWD/bin qt-creator-mac$(INSTALL_EDITION)-$${QTCREATOR_VERSION}$(INSTALL_POSTFIX).dmg
|
||||
dmg.depends = deployqt
|
||||
QMAKE_EXTRA_TARGETS += dmg
|
||||
QMAKE_EXTRA_TARGETS += codesign dmg
|
||||
} else {
|
||||
deployqt.commands = $$PWD/scripts/deployqt.py -i $(INSTALL_ROOT)
|
||||
deployqt.depends = install
|
||||
|
@@ -212,35 +212,6 @@ void FindUsages::reportResult(unsigned tokenIndex)
|
||||
_references.append(tokenIndex);
|
||||
}
|
||||
|
||||
bool FindUsages::compareFullyQualifiedName(const QList<const Name *> &path, const QList<const Name *> &other)
|
||||
{
|
||||
if (path.length() != other.length())
|
||||
return false;
|
||||
|
||||
for (int i = 0; i < path.length(); ++i) {
|
||||
if (! compareName(path.at(i), other.at(i)))
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool FindUsages::compareName(const Name *name, const Name *other)
|
||||
{
|
||||
if (name == other)
|
||||
return true;
|
||||
|
||||
else if (name && other) {
|
||||
const Identifier *id = name->identifier();
|
||||
const Identifier *otherId = other->identifier();
|
||||
|
||||
if (id == otherId || (id && id->isEqualTo(otherId)))
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool FindUsages::isLocalScope(Scope *scope)
|
||||
{
|
||||
if (scope) {
|
||||
|
@@ -82,8 +82,6 @@ protected:
|
||||
bool checkCandidates(const QList<LookupItem> &candidates) const;
|
||||
void checkExpression(unsigned startToken, unsigned endToken, Scope *scope = 0);
|
||||
|
||||
static bool compareFullyQualifiedName(const QList<const Name *> &path, const QList<const Name *> &other);
|
||||
static bool compareName(const Name *name, const Name *other);
|
||||
static bool isLocalScope(Scope *scope);
|
||||
|
||||
void statement(StatementAST *ast);
|
||||
|
@@ -88,6 +88,39 @@ static void path_helper(Symbol *symbol, QList<const Name *> *names)
|
||||
}
|
||||
}
|
||||
|
||||
namespace CPlusPlus {
|
||||
|
||||
bool compareName(const Name *name, const Name *other)
|
||||
{
|
||||
if (name == other)
|
||||
return true;
|
||||
|
||||
else if (name && other) {
|
||||
const Identifier *id = name->identifier();
|
||||
const Identifier *otherId = other->identifier();
|
||||
|
||||
if (id == otherId || (id && id->isEqualTo(otherId)))
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool compareFullyQualifiedName(const QList<const Name *> &path, const QList<const Name *> &other)
|
||||
{
|
||||
if (path.length() != other.length())
|
||||
return false;
|
||||
|
||||
for (int i = 0; i < path.length(); ++i) {
|
||||
if (! compareName(path.at(i), other.at(i)))
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
bool ClassOrNamespace::CompareName::operator()(const Name *name, const Name *other) const
|
||||
{
|
||||
Q_ASSERT(name != 0);
|
||||
@@ -416,20 +449,51 @@ QList<LookupItem> ClassOrNamespace::lookup_helper(const Name *name, bool searchI
|
||||
QList<LookupItem> result;
|
||||
|
||||
if (name) {
|
||||
QSet<ClassOrNamespace *> processed;
|
||||
|
||||
if (const QualifiedNameId *q = name->asQualifiedNameId()) {
|
||||
if (! q->base())
|
||||
result = globalNamespace()->find(q->name());
|
||||
|
||||
else if (ClassOrNamespace *binding = lookupType(q->base()))
|
||||
else if (ClassOrNamespace *binding = lookupType(q->base())) {
|
||||
result = binding->find(q->name());
|
||||
|
||||
lookup_helper(name, this, &result, &processed, /*templateId = */ 0);
|
||||
QList<const Name *> fullName;
|
||||
addNames(name, &fullName);
|
||||
|
||||
// It's also possible that there are matches in the parent binding through
|
||||
// a qualified name. For instance, a nested class which is forward declared
|
||||
// in the class but defined outside it - we should capture both.
|
||||
Symbol *match = 0;
|
||||
ClassOrNamespace *parentBinding = binding->parent();
|
||||
while (parentBinding && !match) {
|
||||
for (int j = 0; j < parentBinding->symbols().size() && !match; ++j) {
|
||||
if (Scope *scope = parentBinding->symbols().at(j)->asScope()) {
|
||||
for (unsigned i = 0; i < scope->memberCount(); ++i) {
|
||||
Symbol *candidate = scope->memberAt(i);
|
||||
if (compareFullyQualifiedName(
|
||||
fullName,
|
||||
LookupContext::fullyQualifiedName(candidate))) {
|
||||
match = candidate;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
parentBinding = parentBinding->parent();
|
||||
}
|
||||
|
||||
if (match) {
|
||||
LookupItem item;
|
||||
item.setDeclaration(match);
|
||||
item.setBinding(binding);
|
||||
result.append(item);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
QSet<ClassOrNamespace *> processed;
|
||||
ClassOrNamespace *binding = this;
|
||||
do {
|
||||
lookup_helper(name, binding, &result, &processed, /*templateId = */ 0);
|
||||
@@ -456,6 +520,7 @@ void ClassOrNamespace::lookup_helper(const Name *name, ClassOrNamespace *binding
|
||||
else if (s->isUsingNamespaceDirective())
|
||||
continue;
|
||||
|
||||
|
||||
if (Scope *scope = s->asScope()) {
|
||||
if (Class *klass = scope->asClass()) {
|
||||
if (const Identifier *id = klass->identifier()) {
|
||||
|
@@ -252,6 +252,11 @@ private:
|
||||
QSharedPointer<Control> _control;
|
||||
};
|
||||
|
||||
bool CPLUSPLUS_EXPORT compareName(const Name *name, const Name *other);
|
||||
bool CPLUSPLUS_EXPORT compareFullyQualifiedName(const QList<const Name *> &path,
|
||||
const QList<const Name *> &other);
|
||||
|
||||
|
||||
} // namespace CPlusPlus
|
||||
|
||||
#endif // CPLUSPLUS_LOOKUPCONTEXT_H
|
||||
|
@@ -473,27 +473,38 @@ bool ResolveExpression::visit(SimpleNameAST *ast)
|
||||
if (item.declaration() == 0)
|
||||
continue;
|
||||
|
||||
if (item.type().isAuto()) {
|
||||
if (item.type().isAuto()
|
||||
&& _blockedIds.find(ast->name->identifier()) == _blockedIds.end()) {
|
||||
const Declaration *decl = item.declaration()->asDeclaration();
|
||||
if (!decl)
|
||||
continue;
|
||||
|
||||
Document::Ptr doc = _context.snapshot().document(decl->fileName());
|
||||
|
||||
const StringLiteral *initializationString = decl->getInitializer();
|
||||
if (initializationString == 0)
|
||||
continue;
|
||||
|
||||
QByteArray initializer = QByteArray::fromRawData(initializationString->chars(), initializationString->size()).trimmed();
|
||||
const QByteArray &initializer =
|
||||
QByteArray::fromRawData(initializationString->chars(),
|
||||
initializationString->size()).trimmed();
|
||||
|
||||
// Skip lambda-function initializers
|
||||
if (initializer.length() > 0 && initializer[0] == '[')
|
||||
continue;
|
||||
|
||||
TypeOfExpression exprTyper;
|
||||
Document::Ptr doc = _context.snapshot().document(decl->fileName());
|
||||
exprTyper.init(doc, _context.snapshot(), _context.bindings());
|
||||
|
||||
QList<LookupItem> typeItems = exprTyper(initializer, decl->enclosingScope(), TypeOfExpression::Preprocess);
|
||||
Document::Ptr exprDoc =
|
||||
documentForExpression(exprTyper.preprocessedExpression(initializer));
|
||||
exprDoc->check();
|
||||
ExpressionAST *exprAST = extractExpressionAST(exprDoc);
|
||||
if (!exprAST)
|
||||
continue;
|
||||
|
||||
_blockedIds.insert(ast->name->identifier());
|
||||
const QList<LookupItem> &typeItems = resolve(exprAST, decl->enclosingScope());
|
||||
_blockedIds.erase(ast->name->identifier());
|
||||
if (typeItems.empty())
|
||||
continue;
|
||||
|
||||
|
@@ -36,6 +36,7 @@
|
||||
#include <ASTVisitor.h>
|
||||
#include <FullySpecifiedType.h>
|
||||
#include <Bind.h>
|
||||
#include <set>
|
||||
|
||||
namespace CPlusPlus {
|
||||
|
||||
@@ -118,12 +119,20 @@ protected:
|
||||
// Objective-C expressions
|
||||
virtual bool visit(ObjCMessageExpressionAST *ast);
|
||||
|
||||
|
||||
private:
|
||||
struct IdentifierComp
|
||||
{
|
||||
bool operator()(const Identifier *a, const Identifier *b) const
|
||||
{ return strcmp(a->chars(), b->chars()) < 0; }
|
||||
};
|
||||
|
||||
Scope *_scope;
|
||||
LookupContext _context;
|
||||
Bind bind;
|
||||
QList<LookupItem> _results;
|
||||
bool _reference;
|
||||
std::set<const Identifier *, IdentifierComp> _blockedIds; // Replace by a hash impl.
|
||||
};
|
||||
|
||||
} // namespace CPlusPlus
|
||||
|
@@ -163,23 +163,6 @@ ExpressionAST *TypeOfExpression::expressionAST() const
|
||||
return extractExpressionAST(m_lookupContext.expressionDocument());
|
||||
}
|
||||
|
||||
ExpressionAST *TypeOfExpression::extractExpressionAST(Document::Ptr doc) const
|
||||
{
|
||||
if (! doc->translationUnit()->ast())
|
||||
return 0;
|
||||
|
||||
return doc->translationUnit()->ast()->asExpression();
|
||||
}
|
||||
|
||||
Document::Ptr TypeOfExpression::documentForExpression(const QByteArray &utf8code) const
|
||||
{
|
||||
// create the expression's AST.
|
||||
Document::Ptr doc = Document::create(QLatin1String("<completion>"));
|
||||
doc->setUtf8Source(utf8code);
|
||||
doc->parse(Document::ParseExpression);
|
||||
return doc;
|
||||
}
|
||||
|
||||
void TypeOfExpression::processEnvironment(Document::Ptr doc, Environment *env,
|
||||
QSet<QString> *processed) const
|
||||
{
|
||||
@@ -210,3 +193,24 @@ QByteArray TypeOfExpression::preprocessedExpression(const QByteArray &utf8code)
|
||||
Preprocessor preproc(0, m_environment.data());
|
||||
return preproc.run("<expression>", utf8code);
|
||||
}
|
||||
|
||||
namespace CPlusPlus {
|
||||
|
||||
ExpressionAST *extractExpressionAST(Document::Ptr doc)
|
||||
{
|
||||
if (! doc->translationUnit()->ast())
|
||||
return 0;
|
||||
|
||||
return doc->translationUnit()->ast()->asExpression();
|
||||
}
|
||||
|
||||
Document::Ptr documentForExpression(const QByteArray &utf8code)
|
||||
{
|
||||
// create the expression's AST.
|
||||
Document::Ptr doc = Document::create(QLatin1String("<completion>"));
|
||||
doc->setUtf8Source(utf8code);
|
||||
doc->parse(Document::ParseExpression);
|
||||
return doc;
|
||||
}
|
||||
|
||||
} // namespace CPlusPlus
|
||||
|
@@ -122,15 +122,13 @@ public:
|
||||
Scope *scope() const;
|
||||
|
||||
ExpressionAST *expressionAST() const;
|
||||
QByteArray preprocessedExpression(const QByteArray &utf8code) const;
|
||||
|
||||
private:
|
||||
ExpressionAST *extractExpressionAST(Document::Ptr doc) const;
|
||||
Document::Ptr documentForExpression(const QByteArray &utf8code) const;
|
||||
|
||||
void processEnvironment(Document::Ptr doc, Environment *env,
|
||||
QSet<QString> *processed) const;
|
||||
|
||||
QByteArray preprocessedExpression(const QByteArray &utf8code) const;
|
||||
|
||||
private:
|
||||
Document::Ptr m_thisDocument;
|
||||
@@ -142,6 +140,9 @@ private:
|
||||
mutable QSharedPointer<Environment> m_environment;
|
||||
};
|
||||
|
||||
ExpressionAST CPLUSPLUS_EXPORT *extractExpressionAST(Document::Ptr doc);
|
||||
Document::Ptr CPLUSPLUS_EXPORT documentForExpression(const QByteArray &utf8code);
|
||||
|
||||
} // namespace CPlusPlus
|
||||
|
||||
#endif // CPLUSPLUS_TYPEOFEXPRESSION_H
|
||||
|
@@ -373,20 +373,12 @@ static void writeVariantValue(QXmlStreamWriter &w, const Context &ctx,
|
||||
}
|
||||
|
||||
PersistentSettingsWriter::PersistentSettingsWriter(const FileName &fileName, const QString &docType) :
|
||||
m_fileName(fileName), m_docType(docType), m_mustSave(false)
|
||||
m_fileName(fileName), m_docType(docType)
|
||||
{ }
|
||||
|
||||
void PersistentSettingsWriter::saveValue(const QString &variable, const QVariant &value)
|
||||
bool PersistentSettingsWriter::save(const QVariantMap &data, QWidget *parent) const
|
||||
{
|
||||
if (m_valueMap.contains(variable) && m_valueMap.value(variable) == value)
|
||||
return;
|
||||
m_mustSave = true;
|
||||
m_valueMap.insert(variable, value);
|
||||
}
|
||||
|
||||
bool PersistentSettingsWriter::save(QWidget *parent) const
|
||||
{
|
||||
if (!m_mustSave)
|
||||
if (data == m_savedData)
|
||||
return true;
|
||||
|
||||
QDir tmp;
|
||||
@@ -403,8 +395,8 @@ bool PersistentSettingsWriter::save(QWidget *parent) const
|
||||
arg(QLatin1String(Core::Constants::IDE_VERSION_LONG),
|
||||
QDateTime::currentDateTime().toString(Qt::ISODate)));
|
||||
w.writeStartElement(ctx.qtCreatorElement);
|
||||
const QVariantMap::const_iterator cend = m_valueMap.constEnd();
|
||||
for (QVariantMap::const_iterator it = m_valueMap.constBegin(); it != cend; ++it) {
|
||||
const QVariantMap::const_iterator cend = data.constEnd();
|
||||
for (QVariantMap::const_iterator it = data.constBegin(); it != cend; ++it) {
|
||||
w.writeStartElement(ctx.dataElement);
|
||||
w.writeTextElement(ctx.variableElement, it.key());
|
||||
writeVariantValue(w, ctx, it.value());
|
||||
@@ -416,7 +408,7 @@ bool PersistentSettingsWriter::save(QWidget *parent) const
|
||||
}
|
||||
bool ok = saver.finalize(parent);
|
||||
if (ok)
|
||||
m_mustSave = false;
|
||||
m_savedData = data;
|
||||
return ok;
|
||||
}
|
||||
|
||||
|
@@ -60,16 +60,14 @@ class QTCREATOR_UTILS_EXPORT PersistentSettingsWriter
|
||||
{
|
||||
public:
|
||||
PersistentSettingsWriter(const FileName &fileName, const QString &docType);
|
||||
void saveValue(const QString &variable, const QVariant &value);
|
||||
bool save(QWidget *parent) const;
|
||||
bool save(const QVariantMap &data, QWidget *parent) const;
|
||||
|
||||
Utils::FileName fileName() const;
|
||||
|
||||
private:
|
||||
QMap<QString, QVariant> m_valueMap;
|
||||
const Utils::FileName m_fileName;
|
||||
const QString m_docType;
|
||||
mutable bool m_mustSave;
|
||||
mutable QMap<QString, QVariant> m_savedData;
|
||||
};
|
||||
|
||||
} // namespace Utils
|
||||
|
@@ -66,7 +66,7 @@ QString IAnalyzerTool::defaultActionName(const IAnalyzerTool *tool, StartMode mo
|
||||
{
|
||||
QString base = tool->displayName();
|
||||
if (mode == StartRemote)
|
||||
return base + tr(" (Remote)");
|
||||
return base + tr(" (External)");
|
||||
return base;
|
||||
}
|
||||
|
||||
|
@@ -32,8 +32,8 @@
|
||||
|
||||
#include <coreplugin/icore.h>
|
||||
#include <coreplugin/id.h>
|
||||
#include <projectexplorer/profilechooser.h>
|
||||
#include <projectexplorer/profileinformation.h>
|
||||
#include <projectexplorer/kitchooser.h>
|
||||
#include <projectexplorer/kitinformation.h>
|
||||
#include <ssh/sshconnection.h>
|
||||
#include <utils/pathchooser.h>
|
||||
|
||||
@@ -53,7 +53,7 @@ namespace Internal {
|
||||
class StartRemoteDialogPrivate
|
||||
{
|
||||
public:
|
||||
ProfileChooser *profileChooser;
|
||||
KitChooser *kitChooser;
|
||||
QLineEdit *executable;
|
||||
QLineEdit *arguments;
|
||||
QLineEdit *workingDirectory;
|
||||
@@ -69,7 +69,7 @@ StartRemoteDialog::StartRemoteDialog(QWidget *parent)
|
||||
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
|
||||
setWindowTitle(tr("Start Remote Analysis"));
|
||||
|
||||
d->profileChooser = new ProfileChooser(this, ProfileChooser::RemoteDebugging);
|
||||
d->kitChooser = new KitChooser(this, KitChooser::RemoteDebugging);
|
||||
d->executable = new QLineEdit(this);
|
||||
d->arguments = new QLineEdit(this);
|
||||
d->workingDirectory = new QLineEdit(this);
|
||||
@@ -80,7 +80,7 @@ StartRemoteDialog::StartRemoteDialog(QWidget *parent)
|
||||
|
||||
QFormLayout *formLayout = new QFormLayout;
|
||||
formLayout->setFieldGrowthPolicy(QFormLayout::ExpandingFieldsGrow);
|
||||
formLayout->addRow(tr("Target:"), d->profileChooser);
|
||||
formLayout->addRow(tr("Kit:"), d->kitChooser);
|
||||
formLayout->addRow(tr("Executable:"), d->executable);
|
||||
formLayout->addRow(tr("Arguments:"), d->arguments);
|
||||
formLayout->addRow(tr("Working directory:"), d->workingDirectory);
|
||||
@@ -91,14 +91,14 @@ StartRemoteDialog::StartRemoteDialog(QWidget *parent)
|
||||
|
||||
QSettings *settings = Core::ICore::settings();
|
||||
settings->beginGroup(QLatin1String("AnalyzerStartRemoteDialog"));
|
||||
QString profile = settings->value(QLatin1String("profile")).toString();
|
||||
d->profileChooser->setCurrentProfileId(Core::Id(profile));
|
||||
QString kit = settings->value(QLatin1String("profile")).toString();
|
||||
d->kitChooser->setCurrentKitId(Core::Id(kit));
|
||||
d->executable->setText(settings->value(QLatin1String("executable")).toString());
|
||||
d->workingDirectory->setText(settings->value(QLatin1String("workingDirectory")).toString());
|
||||
d->arguments->setText(settings->value(QLatin1String("arguments")).toString());
|
||||
settings->endGroup();
|
||||
|
||||
connect(d->profileChooser, SIGNAL(activated(int)), SLOT(validate()));
|
||||
connect(d->kitChooser, SIGNAL(activated(int)), SLOT(validate()));
|
||||
connect(d->executable, SIGNAL(textChanged(QString)), SLOT(validate()));
|
||||
connect(d->workingDirectory, SIGNAL(textChanged(QString)), SLOT(validate()));
|
||||
connect(d->arguments, SIGNAL(textChanged(QString)), SLOT(validate()));
|
||||
@@ -117,7 +117,7 @@ void StartRemoteDialog::accept()
|
||||
{
|
||||
QSettings *settings = Core::ICore::settings();
|
||||
settings->beginGroup(QLatin1String("AnalyzerStartRemoteDialog"));
|
||||
settings->setValue(QLatin1String("profile"), d->profileChooser->currentProfileId().toString());
|
||||
settings->setValue(QLatin1String("profile"), d->kitChooser->currentKitId().toString());
|
||||
settings->setValue(QLatin1String("executable"), d->executable->text());
|
||||
settings->setValue(QLatin1String("workingDirectory"), d->workingDirectory->text());
|
||||
settings->setValue(QLatin1String("arguments"), d->arguments->text());
|
||||
@@ -134,8 +134,8 @@ void StartRemoteDialog::validate()
|
||||
|
||||
QSsh::SshConnectionParameters StartRemoteDialog::sshParams() const
|
||||
{
|
||||
Profile *profile = d->profileChooser->currentProfile();
|
||||
IDevice::ConstPtr device = DeviceProfileInformation::device(profile);
|
||||
Kit *kit = d->kitChooser->currentKit();
|
||||
IDevice::ConstPtr device = DeviceKitInformation::device(kit);
|
||||
return device->sshParameters();
|
||||
}
|
||||
|
||||
|
@@ -32,7 +32,7 @@
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="text">
|
||||
<string>Target:</string>
|
||||
<string>Kit:</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
|
@@ -37,7 +37,7 @@
|
||||
|
||||
#include <debugger/debuggerengine.h>
|
||||
#include <debugger/debuggerplugin.h>
|
||||
#include <debugger/debuggerprofileinformation.h>
|
||||
#include <debugger/debuggerkitinformation.h>
|
||||
#include <debugger/debuggerrunner.h>
|
||||
#include <debugger/debuggerstartparameters.h>
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
#include <qt4projectmanager/qt4buildconfiguration.h>
|
||||
#include <qt4projectmanager/qt4nodes.h>
|
||||
#include <qt4projectmanager/qt4project.h>
|
||||
#include <qtsupport/qtprofileinformation.h>
|
||||
#include <qtsupport/qtkitinformation.h>
|
||||
|
||||
#include <QDir>
|
||||
|
||||
@@ -93,10 +93,10 @@ RunControl *AndroidDebugSupport::createDebugRunControl(AndroidRunConfiguration *
|
||||
|
||||
if (runConfig->debuggerAspect()->useCppDebugger()) {
|
||||
params.languages |= CppLanguage;
|
||||
Profile *profile = target->profile();
|
||||
params.sysRoot = SysRootProfileInformation::sysRoot(profile).toString();
|
||||
params.debuggerCommand = DebuggerProfileInformation::debuggerCommand(profile).toString();
|
||||
if (ToolChain *tc = ToolChainProfileInformation::toolChain(profile))
|
||||
Kit *kit = target->kit();
|
||||
params.sysRoot = SysRootKitInformation::sysRoot(kit).toString();
|
||||
params.debuggerCommand = DebuggerKitInformation::debuggerCommand(kit).toString();
|
||||
if (ToolChain *tc = ToolChainKitInformation::toolChain(kit))
|
||||
params.toolChainAbi = tc->targetAbi();
|
||||
params.executable = project->rootQt4ProjectNode()->buildDir() + QLatin1String("/app_process");
|
||||
params.remoteChannel = runConfig->remoteChannel();
|
||||
@@ -105,7 +105,7 @@ RunControl *AndroidDebugSupport::createDebugRunControl(AndroidRunConfiguration *
|
||||
foreach (Qt4ProFileNode *node, nodes)
|
||||
if (node->projectType() == ApplicationTemplate)
|
||||
params.solibSearchPath.append(node->targetInformation().buildDir);
|
||||
QtSupport::BaseQtVersion *version = QtSupport::QtProfileInformation::qtVersion(profile);
|
||||
QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(kit);
|
||||
params.solibSearchPath.append(qtSoPaths(version));
|
||||
}
|
||||
if (runConfig->debuggerAspect()->useQmlDebugger()) {
|
||||
|
@@ -39,7 +39,7 @@
|
||||
#include <projectexplorer/target.h>
|
||||
|
||||
#include <qt4projectmanager/qt4project.h>
|
||||
#include <qtsupport/qtprofileinformation.h>
|
||||
#include <qtsupport/qtkitinformation.h>
|
||||
#include <qtsupport/qtsupportconstants.h>
|
||||
|
||||
using namespace ProjectExplorer;
|
||||
@@ -119,15 +119,15 @@ QList<Core::Id> AndroidDeployConfigurationFactory::availableCreationIds(Target *
|
||||
if (!qobject_cast<Qt4ProjectManager::Qt4Project *>(parent->project()))
|
||||
return ids;
|
||||
|
||||
if (!parent->project()->supportsProfile(parent->profile()))
|
||||
if (!parent->project()->supportsKit(parent->kit()))
|
||||
return ids;
|
||||
|
||||
ToolChain *tc = ToolChainProfileInformation::toolChain(parent->profile());
|
||||
ToolChain *tc = ToolChainKitInformation::toolChain(parent->kit());
|
||||
|
||||
if (!tc || tc->targetAbi().osFlavor() != Abi::AndroidLinuxFlavor)
|
||||
return ids;
|
||||
|
||||
if (QtSupport::QtProfileInformation::qtVersion(parent->profile())->type() != QLatin1String(Constants::ANDROIDQT))
|
||||
if (QtSupport::QtKitInformation::qtVersion(parent->kit())->type() != QLatin1String(Constants::ANDROIDQT))
|
||||
return ids;
|
||||
|
||||
ids << Core::Id(ANDROID_DEPLOYCONFIGURATION_ID);
|
||||
|
@@ -44,7 +44,7 @@
|
||||
#include <qt4projectmanager/qt4project.h>
|
||||
#include <qt4projectmanager/qt4nodes.h>
|
||||
|
||||
#include <qtsupport/qtprofileinformation.h>
|
||||
#include <qtsupport/qtkitinformation.h>
|
||||
|
||||
#include <QDir>
|
||||
|
||||
@@ -97,7 +97,7 @@ bool AndroidDeployStep::init()
|
||||
return false;
|
||||
}
|
||||
|
||||
QtSupport::BaseQtVersion *version = QtSupport::QtProfileInformation::qtVersion(target()->profile());
|
||||
QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(target()->kit());
|
||||
if (!version)
|
||||
return false;
|
||||
|
||||
|
@@ -37,7 +37,7 @@
|
||||
#include <projectexplorer/projectexplorerconstants.h>
|
||||
#include <projectexplorer/target.h>
|
||||
#include <qtsupport/qtsupportconstants.h>
|
||||
#include <qtsupport/qtprofileinformation.h>
|
||||
#include <qtsupport/qtkitinformation.h>
|
||||
|
||||
#include <QCoreApplication>
|
||||
|
||||
|
@@ -44,7 +44,7 @@
|
||||
#include <qt4projectmanager/qt4projectmanagerconstants.h>
|
||||
#include <qt4projectmanager/qt4buildconfiguration.h>
|
||||
#include <qtsupport/customexecutablerunconfiguration.h>
|
||||
#include <qtsupport/qtprofileinformation.h>
|
||||
#include <qtsupport/qtkitinformation.h>
|
||||
#include <qtsupport/qtsupportconstants.h>
|
||||
|
||||
#include <QDir>
|
||||
@@ -81,7 +81,7 @@ bool AndroidManager::supportsAndroid(ProjectExplorer::Target *target)
|
||||
{
|
||||
if (!qobject_cast<Qt4ProjectManager::Qt4Project *>(target->project()))
|
||||
return false;
|
||||
QtSupport::BaseQtVersion *version = QtSupport::QtProfileInformation::qtVersion(target->profile());
|
||||
QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(target->kit());
|
||||
return version && version->platformName() == QLatin1String(QtSupport::Constants::ANDROID_PLATFORM);
|
||||
}
|
||||
|
||||
@@ -388,7 +388,7 @@ QString AndroidManager::targetApplicationPath(ProjectExplorer::Target *target)
|
||||
|
||||
bool AndroidManager::createAndroidTemplatesIfNecessary(ProjectExplorer::Target *target)
|
||||
{
|
||||
QtSupport::BaseQtVersion *version = QtSupport::QtProfileInformation::qtVersion(target->profile());
|
||||
QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(target->kit());
|
||||
Qt4ProjectManager::Qt4Project *qt4Project = qobject_cast<Qt4ProjectManager::Qt4Project*>(target->project());
|
||||
if (!qt4Project || !qt4Project->rootProjectNode() || !version)
|
||||
return false;
|
||||
@@ -555,7 +555,7 @@ void AndroidManager::updateTarget(ProjectExplorer::Target *target, const QString
|
||||
|
||||
Utils::FileName AndroidManager::localLibsRulesFilePath(ProjectExplorer::Target *target)
|
||||
{
|
||||
QtSupport::BaseQtVersion *version = QtSupport::QtProfileInformation::qtVersion(target->profile());
|
||||
QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(target->kit());
|
||||
if (!version)
|
||||
return Utils::FileName();
|
||||
return Utils::FileName::fromString(version->qmakeProperty("QT_INSTALL_LIBS") + QLatin1String("/rules.xml"));
|
||||
@@ -573,7 +573,7 @@ QString AndroidManager::loadLocalJars(ProjectExplorer::Target *target, int apiLe
|
||||
|
||||
QStringList AndroidManager::availableQtLibs(ProjectExplorer::Target *target)
|
||||
{
|
||||
QtSupport::BaseQtVersion *version = QtSupport::QtProfileInformation::qtVersion(target->profile());
|
||||
QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(target->kit());
|
||||
if (!target->activeRunConfiguration())
|
||||
return QStringList();
|
||||
|
||||
|
@@ -36,7 +36,7 @@
|
||||
#include <projectexplorer/buildsteplist.h>
|
||||
#include <projectexplorer/projectexplorerconstants.h>
|
||||
#include <projectexplorer/target.h>
|
||||
#include <qtsupport/qtprofileinformation.h>
|
||||
#include <qtsupport/qtkitinformation.h>
|
||||
#include <qtsupport/qtsupportconstants.h>
|
||||
|
||||
using namespace ProjectExplorer;
|
||||
|
@@ -34,10 +34,10 @@
|
||||
#include "androidtoolchain.h"
|
||||
#include "androidmanager.h"
|
||||
|
||||
#include <projectexplorer/profileinformation.h>
|
||||
#include <projectexplorer/kitinformation.h>
|
||||
#include <projectexplorer/target.h>
|
||||
#include <qtsupport/qtoutputformatter.h>
|
||||
#include <qtsupport/qtprofileinformation.h>
|
||||
#include <qtsupport/qtkitinformation.h>
|
||||
|
||||
#include <utils/qtcassert.h>
|
||||
|
||||
@@ -87,7 +87,7 @@ AndroidConfig AndroidRunConfiguration::config() const
|
||||
|
||||
const Utils::FileName AndroidRunConfiguration::gdbCmd() const
|
||||
{
|
||||
ToolChain *tc = ToolChainProfileInformation::toolChain(target()->profile());
|
||||
ToolChain *tc = ToolChainKitInformation::toolChain(target()->kit());
|
||||
if (!tc)
|
||||
return Utils::FileName();
|
||||
return AndroidConfigurations::instance().gdbPath(tc->targetAbi().architecture());
|
||||
@@ -110,7 +110,7 @@ const QString AndroidRunConfiguration::remoteChannel() const
|
||||
|
||||
const QString AndroidRunConfiguration::dumperLib() const
|
||||
{
|
||||
QtSupport::BaseQtVersion *version = QtSupport::QtProfileInformation::qtVersion(target()->profile());
|
||||
QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(target()->kit());
|
||||
if (!version)
|
||||
return QString();
|
||||
return version->gdbDebuggingHelperLibrary();
|
||||
|
@@ -43,7 +43,7 @@
|
||||
#include <qt4projectmanager/qt4project.h>
|
||||
#include <qt4projectmanager/qt4nodes.h>
|
||||
#include <qtsupport/customexecutablerunconfiguration.h>
|
||||
#include <qtsupport/qtprofileinformation.h>
|
||||
#include <qtsupport/qtkitinformation.h>
|
||||
#include <qtsupport/qtsupportconstants.h>
|
||||
|
||||
|
||||
@@ -140,7 +140,7 @@ RunConfiguration *AndroidRunConfigurationFactory::clone(Target *parent, RunConfi
|
||||
|
||||
bool AndroidRunConfigurationFactory::canHandle(Target *t) const
|
||||
{
|
||||
if (!t->project()->supportsProfile(t->profile()))
|
||||
if (!t->project()->supportsKit(t->kit()))
|
||||
return false;
|
||||
return AndroidManager::supportsAndroid(t);
|
||||
}
|
||||
|
@@ -38,7 +38,7 @@
|
||||
#include <projectexplorer/toolchainmanager.h>
|
||||
#include <projectexplorer/projectexplorer.h>
|
||||
#include <qt4projectmanager/qt4project.h>
|
||||
#include <qtsupport/qtprofileinformation.h>
|
||||
#include <qtsupport/qtkitinformation.h>
|
||||
#include <qtsupport/qtversionmanager.h>
|
||||
|
||||
#include <utils/environment.h>
|
||||
@@ -95,7 +95,7 @@ void AndroidToolChain::addToEnvironment(Environment &env) const
|
||||
|
||||
Qt4Project *qt4pro = qobject_cast<Qt4Project *>(ProjectExplorerPlugin::instance()->currentProject());
|
||||
if (!qt4pro || !qt4pro->activeTarget()
|
||||
|| QtSupport::QtProfileInformation::qtVersion(qt4pro->activeTarget()->profile())->type() != QLatin1String(Constants::ANDROIDQT))
|
||||
|| QtSupport::QtKitInformation::qtVersion(qt4pro->activeTarget()->kit())->type() != QLatin1String(Constants::ANDROIDQT))
|
||||
return;
|
||||
|
||||
QString ndkHost;
|
||||
|
@@ -42,7 +42,7 @@
|
||||
#include "configurestep.h"
|
||||
|
||||
#include <projectexplorer/buildsteplist.h>
|
||||
#include <projectexplorer/profileinformation.h>
|
||||
#include <projectexplorer/kitinformation.h>
|
||||
#include <projectexplorer/projectexplorerconstants.h>
|
||||
#include <projectexplorer/target.h>
|
||||
#include <projectexplorer/toolchain.h>
|
||||
@@ -117,7 +117,7 @@ void AutotoolsBuildConfiguration::setBuildDirectory(const QString &buildDirector
|
||||
|
||||
IOutputParser *AutotoolsBuildConfiguration::createOutputParser() const
|
||||
{
|
||||
ToolChain *tc = ProjectExplorer::ToolChainProfileInformation::toolChain(target()->profile());
|
||||
ToolChain *tc = ProjectExplorer::ToolChainKitInformation::toolChain(target()->kit());
|
||||
if (tc)
|
||||
return tc->outputParser();
|
||||
return 0;
|
||||
@@ -214,7 +214,7 @@ AutotoolsBuildConfiguration *AutotoolsBuildConfigurationFactory::createDefaultCo
|
||||
|
||||
bool AutotoolsBuildConfigurationFactory::canHandle(const Target *t) const
|
||||
{
|
||||
if (!t->project()->supportsProfile(t->profile()))
|
||||
if (!t->project()->supportsKit(t->kit()))
|
||||
return false;
|
||||
return t->project()->id() == Constants::AUTOTOOLS_PROJECT_ID;
|
||||
}
|
||||
|
@@ -44,8 +44,8 @@
|
||||
|
||||
#include <projectexplorer/abi.h>
|
||||
#include <projectexplorer/buildenvironmentwidget.h>
|
||||
#include <projectexplorer/profilemanager.h>
|
||||
#include <projectexplorer/profileinformation.h>
|
||||
#include <projectexplorer/kitmanager.h>
|
||||
#include <projectexplorer/kitinformation.h>
|
||||
#include <projectexplorer/buildconfiguration.h>
|
||||
#include <projectexplorer/buildsteplist.h>
|
||||
#include <projectexplorer/projectexplorerconstants.h>
|
||||
@@ -158,9 +158,9 @@ bool AutotoolsProject::fromMap(const QVariantMap &map)
|
||||
// Load the project tree structure.
|
||||
loadProjectTree();
|
||||
|
||||
Profile *defaultProfile = ProfileManager::instance()->defaultProfile();
|
||||
if (!activeTarget() && defaultProfile)
|
||||
addTarget(createTarget(defaultProfile));
|
||||
Kit *defaultKit = KitManager::instance()->defaultKit();
|
||||
if (!activeTarget() && defaultKit)
|
||||
addTarget(createTarget(defaultKit));
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -418,7 +418,7 @@ void AutotoolsProject::updateCppCodeModel()
|
||||
QByteArray macros;
|
||||
|
||||
if (activeTarget()) {
|
||||
ToolChain *tc = ProjectExplorer::ToolChainProfileInformation::toolChain(activeTarget()->profile());
|
||||
ToolChain *tc = ProjectExplorer::ToolChainKitInformation::toolChain(activeTarget()->kit());
|
||||
if (tc) {
|
||||
const QList<HeaderPath> allHeaderPaths = tc->systemHeaderPaths();
|
||||
foreach (const HeaderPath &headerPath, allHeaderPaths) {
|
||||
|
@@ -41,7 +41,7 @@
|
||||
#include <projectexplorer/target.h>
|
||||
#include <projectexplorer/toolchain.h>
|
||||
#include <projectexplorer/gnumakeparser.h>
|
||||
#include <projectexplorer/profileinformation.h>
|
||||
#include <projectexplorer/kitinformation.h>
|
||||
#include <projectexplorer/projectexplorer.h>
|
||||
#include <projectexplorer/projectexplorerconstants.h>
|
||||
#include <utils/qtcprocess.h>
|
||||
@@ -174,7 +174,7 @@ bool MakeStep::init()
|
||||
|
||||
setIgnoreReturnValue(m_clean);
|
||||
|
||||
ToolChain *tc = ProjectExplorer::ToolChainProfileInformation::toolChain(bc->target()->profile());
|
||||
ToolChain *tc = ProjectExplorer::ToolChainKitInformation::toolChain(target()->kit());
|
||||
|
||||
ProcessParameters *pp = processParameters();
|
||||
pp->setMacroExpander(bc->macroExpander());
|
||||
@@ -289,7 +289,7 @@ QString MakeStepConfigWidget::summaryText() const
|
||||
void MakeStepConfigWidget::updateDetails()
|
||||
{
|
||||
AutotoolsBuildConfiguration *bc = m_makeStep->autotoolsBuildConfiguration();
|
||||
ToolChain *tc = ProjectExplorer::ToolChainProfileInformation::toolChain(m_makeStep->target()->profile());
|
||||
ToolChain *tc = ProjectExplorer::ToolChainKitInformation::toolChain(m_makeStep->target()->kit());
|
||||
|
||||
if (tc) {
|
||||
QString arguments = Utils::QtcProcess::joinArgs(m_makeStep->m_buildTargets);
|
||||
@@ -303,7 +303,7 @@ void MakeStepConfigWidget::updateDetails()
|
||||
param.setArguments(arguments);
|
||||
m_summaryText = param.summary(displayName());
|
||||
} else {
|
||||
m_summaryText = QLatin1String("<b>") + ProjectExplorer::ToolChainProfileInformation::msgNoToolChainInTarget() + QLatin1String("</b>");
|
||||
m_summaryText = QLatin1String("<b>") + ProjectExplorer::ToolChainKitInformation::msgNoToolChainInTarget() + QLatin1String("</b>");
|
||||
}
|
||||
|
||||
emit updateSummary();
|
||||
|
@@ -7,33 +7,35 @@ include(clearcase_dependencies.pri)
|
||||
|
||||
DEFINES += QT_NO_CAST_FROM_ASCII
|
||||
|
||||
HEADERS += annotationhighlighter.h \
|
||||
clearcaseplugin.h \
|
||||
clearcasecontrol.h \
|
||||
settingspage.h \
|
||||
clearcaseeditor.h \
|
||||
clearcasesettings.h \
|
||||
clearcaseconstants.h \
|
||||
clearcasesubmiteditor.h \
|
||||
HEADERS += activityselector.h \
|
||||
annotationhighlighter.h \
|
||||
checkoutdialog.h \
|
||||
activityselector.h \
|
||||
clearcaseconstants.h \
|
||||
clearcasecontrol.h \
|
||||
clearcaseeditor.h \
|
||||
clearcaseplugin.h \
|
||||
clearcasesettings.h \
|
||||
clearcasesubmiteditor.h \
|
||||
clearcasesubmiteditorwidget.h \
|
||||
clearcasesync.h \
|
||||
settingspage.h \
|
||||
versionselector.h
|
||||
|
||||
SOURCES += annotationhighlighter.cpp \
|
||||
clearcaseplugin.cpp \
|
||||
SOURCES += activityselector.cpp \
|
||||
annotationhighlighter.cpp \
|
||||
checkoutdialog.cpp \
|
||||
clearcasecontrol.cpp \
|
||||
settingspage.cpp \
|
||||
clearcaseeditor.cpp \
|
||||
clearcaseplugin.cpp \
|
||||
clearcasesettings.cpp \
|
||||
clearcasesubmiteditor.cpp \
|
||||
checkoutdialog.cpp \
|
||||
activityselector.cpp \
|
||||
clearcasesubmiteditorwidget.cpp \
|
||||
clearcasesync.cpp \
|
||||
settingspage.cpp \
|
||||
versionselector.cpp
|
||||
|
||||
FORMS += settingspage.ui \
|
||||
checkoutdialog.ui \
|
||||
FORMS += checkoutdialog.ui \
|
||||
settingspage.ui \
|
||||
undocheckout.ui \
|
||||
versionselector.ui
|
||||
|
||||
|
@@ -33,6 +33,7 @@ QtcPlugin {
|
||||
"checkoutdialog.cpp",
|
||||
"checkoutdialog.h",
|
||||
"checkoutdialog.ui",
|
||||
"clearcase.qrc",
|
||||
"clearcaseconstants.h",
|
||||
"clearcasecontrol.cpp",
|
||||
"clearcasecontrol.h",
|
||||
@@ -40,13 +41,14 @@ QtcPlugin {
|
||||
"clearcaseeditor.h",
|
||||
"clearcaseplugin.cpp",
|
||||
"clearcaseplugin.h",
|
||||
"clearcase.qrc",
|
||||
"clearcasesettings.cpp",
|
||||
"clearcasesettings.h",
|
||||
"clearcasesubmiteditor.cpp",
|
||||
"clearcasesubmiteditor.h",
|
||||
"clearcasesubmiteditorwidget.cpp",
|
||||
"clearcasesubmiteditorwidget.h",
|
||||
"clearcasesync.cpp",
|
||||
"clearcasesync.h",
|
||||
"settingspage.cpp",
|
||||
"settingspage.h",
|
||||
"settingspage.ui",
|
||||
|
@@ -136,6 +136,16 @@ bool ClearCaseControl::vcsAnnotate(const QString &file, int line)
|
||||
return true;
|
||||
}
|
||||
|
||||
QString ClearCaseControl::vcsOpenText() const
|
||||
{
|
||||
return tr("&Check Out");
|
||||
}
|
||||
|
||||
QString ClearCaseControl::vcsMakeWritableText() const
|
||||
{
|
||||
return tr("&Hijack");
|
||||
}
|
||||
|
||||
void ClearCaseControl::emitRepositoryChanged(const QString &s)
|
||||
{
|
||||
emit repositoryChanged(s);
|
||||
|
@@ -70,6 +70,9 @@ public:
|
||||
|
||||
bool vcsAnnotate(const QString &file, int line);
|
||||
|
||||
QString vcsOpenText() const;
|
||||
QString vcsMakeWritableText() const;
|
||||
|
||||
void emitRepositoryChanged(const QString &);
|
||||
void emitFilesChanged(const QStringList &);
|
||||
void emitConfigurationChanged();
|
||||
|
@@ -38,6 +38,7 @@
|
||||
#include "clearcaseplugin.h"
|
||||
#include "clearcasesubmiteditor.h"
|
||||
#include "clearcasesubmiteditorwidget.h"
|
||||
#include "clearcasesync.h"
|
||||
#include "settingspage.h"
|
||||
#include "versionselector.h"
|
||||
#include "ui_undocheckout.h"
|
||||
@@ -116,8 +117,6 @@ static const char CMD_ID_UPDATE_VIEW[] = "ClearCase.UpdateView";
|
||||
static const char CMD_ID_CHECKIN_ALL[] = "ClearCase.CheckInAll";
|
||||
static const char CMD_ID_STATUS[] = "ClearCase.Status";
|
||||
|
||||
StatusMap ClearCasePlugin::s_statusMap;
|
||||
|
||||
static const VcsBase::VcsBaseEditorParameters editorParameters[] = {
|
||||
{
|
||||
VcsBase::RegularCommandOutput,
|
||||
@@ -182,18 +181,20 @@ ClearCasePlugin::ClearCasePlugin() :
|
||||
m_submitUndoAction(0),
|
||||
m_submitRedoAction(0),
|
||||
m_menuAction(0),
|
||||
m_submitActionTriggered(false)
|
||||
m_submitActionTriggered(false),
|
||||
m_activityMutex(new QMutex),
|
||||
m_statusMap(new StatusMap)
|
||||
{
|
||||
activityMutex = new QMutex;
|
||||
qRegisterMetaType<ClearCase::Internal::FileStatus::Status>("ClearCase::Internal::FileStatus::Status");
|
||||
}
|
||||
|
||||
ClearCasePlugin::~ClearCasePlugin()
|
||||
{
|
||||
cleanCheckInMessageFile();
|
||||
// wait for sync thread to finish reading activities
|
||||
activityMutex->lock();
|
||||
activityMutex->unlock();
|
||||
delete activityMutex;
|
||||
m_activityMutex->lock();
|
||||
m_activityMutex->unlock();
|
||||
delete m_activityMutex;
|
||||
}
|
||||
|
||||
void ClearCasePlugin::cleanCheckInMessageFile()
|
||||
@@ -539,7 +540,7 @@ QStringList ClearCasePlugin::ccGetActiveVobs() const
|
||||
// file must be relative to topLevel, and using '/' path separator
|
||||
FileStatus ClearCasePlugin::vcsStatus(const QString &file) const
|
||||
{
|
||||
return s_statusMap.value(file, FileStatus(FileStatus::Unknown));
|
||||
return m_statusMap->value(file, FileStatus(FileStatus::Unknown));
|
||||
}
|
||||
|
||||
QString ClearCasePlugin::ccGetFileActivity(const QString &workingDir, const QString &file)
|
||||
@@ -569,7 +570,7 @@ ClearCaseSubmitEditor *ClearCasePlugin::openClearCaseSubmitEditor(const QString
|
||||
void ClearCasePlugin::updateStatusActions()
|
||||
{
|
||||
bool hasFile = currentState().hasFile();
|
||||
FileStatus fileStatus = s_statusMap.value(currentState().relativeCurrentFile(), FileStatus(FileStatus::Unknown));
|
||||
FileStatus fileStatus = m_statusMap->value(currentState().relativeCurrentFile(), FileStatus(FileStatus::Unknown));
|
||||
m_checkOutAction->setEnabled(hasFile && (fileStatus.status & (FileStatus::CheckedIn | FileStatus::Hijacked)));
|
||||
m_undoCheckOutAction->setEnabled(hasFile && (fileStatus.status & FileStatus::CheckedOut));
|
||||
m_undoHijackAction->setEnabled(hasFile && (fileStatus.status & FileStatus::Hijacked));
|
||||
@@ -618,9 +619,9 @@ void ClearCasePlugin::addCurrentFile()
|
||||
vcsAdd(state.currentFileTopLevel(), state.relativeCurrentFile());
|
||||
}
|
||||
|
||||
void ClearCasePlugin::setStatus(const QString &file, FileStatus::Status status, bool update)
|
||||
void ClearCasePlugin::setStatus(const QString &file, ClearCase::Internal::FileStatus::Status status, bool update)
|
||||
{
|
||||
s_statusMap[file] = FileStatus(status, QFileInfo(currentState().topLevel(), file).permissions());
|
||||
m_statusMap->insert(file, FileStatus(status, QFileInfo(currentState().topLevel(), file).permissions()));
|
||||
if (update && (currentState().relativeCurrentFile() == file))
|
||||
updateStatusActions();
|
||||
}
|
||||
@@ -705,8 +706,13 @@ void ClearCasePlugin::undoHijackCurrent()
|
||||
const QString fileName = state.relativeCurrentFile();
|
||||
|
||||
bool keep = false;
|
||||
bool askKeep = true;
|
||||
if (m_settings.extDiffAvailable) {
|
||||
QString diffres = diffExternal(ccGetFileVersion(state.topLevel(), fileName), fileName);
|
||||
if (diffres.at(0) != QLatin1Char('F')) { // Files are identical
|
||||
if (diffres.at(0) == QLatin1Char('F')) // Files are identical
|
||||
askKeep = false;
|
||||
}
|
||||
if (askKeep) {
|
||||
Ui::UndoCheckOut unhijackUi;
|
||||
QDialog unhijackDlg;
|
||||
unhijackUi.setupUi(&unhijackDlg);
|
||||
@@ -742,15 +748,20 @@ void ClearCasePlugin::ccDiffWithPred(const QStringList &files)
|
||||
|
||||
if ((m_settings.diffType == GraphicalDiff) && (files.count() == 1)) {
|
||||
QString file = files.first();
|
||||
if (s_statusMap[file].status == FileStatus::Hijacked)
|
||||
if (m_statusMap->value(file).status == FileStatus::Hijacked)
|
||||
diffGraphical(ccGetFileVersion(topLevel, file), file);
|
||||
else
|
||||
diffGraphical(file);
|
||||
return; // done here, diff is opened in a new window
|
||||
}
|
||||
if (!m_settings.extDiffAvailable) {
|
||||
VcsBase::VcsBaseOutputWindow::instance()->appendError(
|
||||
tr("External diff is required to compare multiple files."));
|
||||
return;
|
||||
}
|
||||
QString result;
|
||||
foreach (const QString &file, files) {
|
||||
if (s_statusMap[QDir::fromNativeSeparators(file)].status == FileStatus::Hijacked)
|
||||
if (m_statusMap->value(QDir::fromNativeSeparators(file)).status == FileStatus::Hijacked)
|
||||
result += diffExternal(ccGetFileVersion(topLevel, file), file);
|
||||
else
|
||||
result += diffExternal(file);
|
||||
@@ -813,6 +824,11 @@ void ClearCasePlugin::diffActivity()
|
||||
QTC_ASSERT(state.hasTopLevel(), return);
|
||||
if (ClearCase::Constants::debug)
|
||||
qDebug() << Q_FUNC_INFO;
|
||||
if (!m_settings.extDiffAvailable) {
|
||||
VcsBase::VcsBaseOutputWindow::instance()->appendError(
|
||||
tr("External diff is required to compare multiple files."));
|
||||
return;
|
||||
}
|
||||
QString topLevel = state.topLevel();
|
||||
QString activity = QInputDialog::getText(0, tr("Enter Activity"), tr("Activity Name"), QLineEdit::Normal, m_activity);
|
||||
if (activity.isEmpty())
|
||||
@@ -885,8 +901,8 @@ void ClearCasePlugin::startCheckInAll()
|
||||
QTC_ASSERT(state.hasTopLevel(), return);
|
||||
QString topLevel = state.topLevel();
|
||||
QStringList files;
|
||||
for (StatusMap::ConstIterator iterator = s_statusMap.constBegin();
|
||||
iterator != s_statusMap.constEnd();
|
||||
for (StatusMap::ConstIterator iterator = m_statusMap->constBegin();
|
||||
iterator != m_statusMap->constEnd();
|
||||
++iterator)
|
||||
{
|
||||
if (iterator.value().status == FileStatus::CheckedOut)
|
||||
@@ -1025,8 +1041,8 @@ void ClearCasePlugin::viewStatus()
|
||||
VcsBase::VcsBaseOutputWindow *outputwindow = VcsBase::VcsBaseOutputWindow::instance();
|
||||
outputwindow->appendCommand(QLatin1String("Indexed files status (C=Checked Out, H=Hijacked, ?=Missing)"));
|
||||
bool anymod = false;
|
||||
for (StatusMap::ConstIterator it = s_statusMap.constBegin();
|
||||
it != s_statusMap.constEnd();
|
||||
for (StatusMap::ConstIterator it = m_statusMap->constBegin();
|
||||
it != m_statusMap->constEnd();
|
||||
++it)
|
||||
{
|
||||
char cstat = 0;
|
||||
@@ -1147,6 +1163,7 @@ void ClearCasePlugin::describe(const QString &source, const QString &changeNr)
|
||||
const ClearCaseResponse response =
|
||||
runCleartool(topLevel, args, m_settings.timeOutMS(), 0, codec);
|
||||
description = response.stdOut;
|
||||
if (m_settings.extDiffAvailable)
|
||||
description += diffExternal(id);
|
||||
|
||||
// Re-use an existing view if possible to support
|
||||
@@ -1266,13 +1283,13 @@ bool ClearCasePlugin::vcsOpen(const QString &workingDir, const QString &fileName
|
||||
const QString title = QString::fromLatin1("Checkout %1").arg(file);
|
||||
CheckOutDialog coDialog(title);
|
||||
if (!m_settings.disableIndexer &&
|
||||
(fi.isWritable() || s_statusMap[relFile].status == FileStatus::Unknown))
|
||||
(fi.isWritable() || m_statusMap->value(relFile).status == FileStatus::Unknown))
|
||||
QtConcurrent::run(&sync, topLevel, QStringList(relFile)).waitForFinished();
|
||||
if (s_statusMap[relFile].status == FileStatus::CheckedOut) {
|
||||
if (m_statusMap->value(relFile).status == FileStatus::CheckedOut) {
|
||||
QMessageBox::information(0, tr("ClearCase Checkout"), tr("File is already checked out."));
|
||||
return true;
|
||||
}
|
||||
bool isHijacked = (s_statusMap[relFile].status & FileStatus::Hijacked);
|
||||
bool isHijacked = (m_statusMap->value(relFile).status & FileStatus::Hijacked);
|
||||
if (!isHijacked)
|
||||
coDialog.hideHijack();
|
||||
if (coDialog.exec() == QDialog::Accepted) {
|
||||
@@ -1574,7 +1591,7 @@ QList<QStringPair> ClearCasePlugin::ccGetActivities() const
|
||||
|
||||
void ClearCasePlugin::refreshActivities()
|
||||
{
|
||||
QMutexLocker locker(activityMutex);
|
||||
QMutexLocker locker(m_activityMutex);
|
||||
m_activity = ccGetCurrentActivity();
|
||||
m_activities = ccGetActivities();
|
||||
}
|
||||
@@ -1585,7 +1602,7 @@ QList<QStringPair> ClearCasePlugin::activities(int *current) const
|
||||
QString curActivity;
|
||||
const VcsBase::VcsBasePluginState state = currentState();
|
||||
if (state.topLevel() == state.currentProjectTopLevel()) {
|
||||
QMutexLocker locker(activityMutex);
|
||||
QMutexLocker locker(m_activityMutex);
|
||||
activitiesList = m_activities;
|
||||
curActivity = m_activity;
|
||||
} else {
|
||||
@@ -1693,7 +1710,7 @@ void ClearCasePlugin::updateIndex()
|
||||
if (!project)
|
||||
return;
|
||||
m_checkInAllAction->setEnabled(false);
|
||||
s_statusMap.clear();
|
||||
m_statusMap->clear();
|
||||
QFuture<void> result = QtConcurrent::run(&sync, currentState().topLevel(),
|
||||
project->files(ProjectExplorer::Project::ExcludeGeneratedFiles));
|
||||
if (!m_settings.disableIndexer)
|
||||
@@ -1847,112 +1864,14 @@ void ClearCasePlugin::closing()
|
||||
void ClearCasePlugin::sync(QFutureInterface<void> &future, QString topLevel, QStringList files)
|
||||
{
|
||||
ClearCasePlugin *plugin = ClearCasePlugin::instance();
|
||||
|
||||
ClearCaseSettings settings = plugin->settings();
|
||||
QString program = settings.ccBinaryPath;
|
||||
if (program.isEmpty())
|
||||
return;
|
||||
int total = files.size();
|
||||
bool hot = (total < 10);
|
||||
int processed = 0;
|
||||
QString view = plugin->currentView();
|
||||
if (view.isEmpty())
|
||||
plugin->updateStreamAndView();
|
||||
if (!hot)
|
||||
total = settings.totalFiles.value(view, total);
|
||||
|
||||
// refresh activities list
|
||||
plugin->refreshActivities();
|
||||
|
||||
if (settings.disableIndexer)
|
||||
return;
|
||||
QStringList vobs;
|
||||
if (!settings.indexOnlyVOBs.isEmpty())
|
||||
vobs = settings.indexOnlyVOBs.split(QLatin1Char(','));
|
||||
else
|
||||
vobs = plugin->ccGetActiveVobs();
|
||||
QDir topLevelDir(topLevel);
|
||||
QStringList args(QLatin1String("ls"));
|
||||
if (hot) {
|
||||
// find all files whose permissions changed OR hijacked files
|
||||
// (might have become checked out)
|
||||
foreach (const QString &file, s_statusMap.keys()) {
|
||||
bool permChanged =
|
||||
s_statusMap[file].permissions != QFileInfo(topLevel, file).permissions();
|
||||
if (permChanged || s_statusMap[file].status == FileStatus::Hijacked) {
|
||||
files.append(file);
|
||||
s_statusMap[file].status = FileStatus::Unknown;
|
||||
++total;
|
||||
}
|
||||
}
|
||||
args << files;
|
||||
} else {
|
||||
foreach (const QString &file, files)
|
||||
plugin->setStatus(topLevelDir.relativeFilePath(file), FileStatus::Unknown, false);
|
||||
args << QLatin1String("-recurse");
|
||||
args << vobs;
|
||||
}
|
||||
|
||||
// adding 1 for initial sync in which total is not accurate, to prevent finishing
|
||||
// (we don't want it to become green)
|
||||
future.setProgressRange(0, total + 1);
|
||||
QProcess process;
|
||||
process.setWorkingDirectory(topLevel);
|
||||
process.start(program, args);
|
||||
if (!process.waitForStarted())
|
||||
return;
|
||||
QString buffer;
|
||||
while (process.waitForReadyRead() && !future.isCanceled()) {
|
||||
while (process.state() == QProcess::Running &&
|
||||
process.bytesAvailable() && !future.isCanceled())
|
||||
{
|
||||
QString line = QString::fromLocal8Bit(process.readLine().constData());
|
||||
buffer += line;
|
||||
if (buffer.endsWith(QLatin1Char('\n')) || process.atEnd()) {
|
||||
int atatpos = buffer.indexOf(QLatin1String("@@"));
|
||||
if (atatpos != -1) { // probably managed file
|
||||
// find first whitespace. anything before that is not interesting
|
||||
int wspos = buffer.indexOf(QRegExp(QLatin1String("\\s")));
|
||||
const QString file = QDir::fromNativeSeparators(buffer.left(atatpos));
|
||||
QString ccState;
|
||||
QRegExp reState(QLatin1String("^\\s*\\[[^\\]]*\\]")); // [hijacked]; [loaded but missing]
|
||||
if (reState.indexIn(buffer, wspos + 1, QRegExp::CaretAtOffset) != -1) {
|
||||
ccState = reState.cap();
|
||||
if (ccState.indexOf(QLatin1String("hijacked")) != -1)
|
||||
plugin->setStatus(file, FileStatus::Hijacked, true);
|
||||
else if (ccState.indexOf(QLatin1String("loaded but missing")) != -1)
|
||||
plugin->setStatus(file, FileStatus::Missing, false);
|
||||
}
|
||||
else if (buffer.lastIndexOf(QLatin1String("CHECKEDOUT"), wspos) != -1)
|
||||
plugin->setStatus(file, FileStatus::CheckedOut, true);
|
||||
// don't care about checked-in files not listed in project
|
||||
else if (s_statusMap.contains(file))
|
||||
plugin->setStatus(file, FileStatus::CheckedIn, false);
|
||||
}
|
||||
buffer.clear();
|
||||
future.setProgressValue(qMin(total, ++processed));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!future.isCanceled()) {
|
||||
foreach (const QString &file, files) {
|
||||
QString relFile = topLevelDir.relativeFilePath(file);
|
||||
if (s_statusMap[relFile].status == FileStatus::Unknown)
|
||||
plugin->setStatus(relFile, FileStatus::NotManaged, false);
|
||||
}
|
||||
future.setProgressValue(total + 1);
|
||||
if (!hot) {
|
||||
settings.totalFiles[view] = processed;
|
||||
plugin->setSettings(settings);
|
||||
}
|
||||
}
|
||||
if (process.state() == QProcess::Running)
|
||||
process.kill();
|
||||
process.waitForFinished();
|
||||
ClearCaseSync ccSync(plugin, plugin->m_statusMap);
|
||||
connect(&ccSync, SIGNAL(updateStreamAndView()), plugin, SLOT(updateStreamAndView()));
|
||||
connect(&ccSync, SIGNAL(setStatus(QString, ClearCase::Internal::FileStatus::Status, bool)),
|
||||
plugin, SLOT(setStatus(QString, ClearCase::Internal::FileStatus::Status, bool)));
|
||||
ccSync.run(future, topLevel, files);
|
||||
}
|
||||
|
||||
} // namespace ClearCase
|
||||
} // namespace Internal
|
||||
} // namespace ClearCase
|
||||
|
||||
Q_EXPORT_PLUGIN(ClearCase::Internal::ClearCasePlugin)
|
||||
|
@@ -39,6 +39,8 @@
|
||||
#include <QFile>
|
||||
#include <QPair>
|
||||
#include <QStringList>
|
||||
#include <QMetaType>
|
||||
#include <QSharedPointer>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
class QAction;
|
||||
@@ -145,11 +147,14 @@ public:
|
||||
const QString &fileName, const QString &file2 = QString());
|
||||
FileStatus vcsStatus(const QString &file) const;
|
||||
QString currentView() const { return m_view; }
|
||||
void refreshActivities();
|
||||
|
||||
public slots:
|
||||
void vcsAnnotate(const QString &workingDir, const QString &file,
|
||||
const QString &revision = QString(), int lineNumber = -1) const;
|
||||
bool newActivity();
|
||||
void updateStreamAndView();
|
||||
void setStatus(const QString &file, ClearCase::Internal::FileStatus::Status status, bool update = true);
|
||||
|
||||
private slots:
|
||||
void checkOutCurrentFile();
|
||||
@@ -179,7 +184,6 @@ protected:
|
||||
void updateActions(VcsBase::VcsBasePlugin::ActionState);
|
||||
bool submitEditorAboutToClose(VcsBase::VcsBaseSubmitEditor *submitEditor);
|
||||
QString ccGet(const QString &workingDir, const QString &file, const QString &prefix = QString());
|
||||
void refreshActivities();
|
||||
QList<QStringPair> ccGetActivities() const;
|
||||
|
||||
private:
|
||||
@@ -204,7 +208,6 @@ private:
|
||||
void cleanCheckInMessageFile();
|
||||
inline ClearCaseControl *clearCaseControl() const;
|
||||
QString ccGetFileActivity(const QString &workingDir, const QString &file);
|
||||
void setStatus(const QString &file, FileStatus::Status status, bool update = true);
|
||||
QStringList ccGetActivityVersions(const QString &workingDir, const QString &activity);
|
||||
void updateStatusActions();
|
||||
void diffGraphical(const QString &file1, const QString &file2 = QString());
|
||||
@@ -214,11 +217,9 @@ private:
|
||||
QString runExtDiff(const QString &workingDir, const QStringList &arguments,
|
||||
int timeOut, QTextCodec *outputCodec = 0);
|
||||
QString ccGetView(const QString &workingDir, bool *isDynamic = 0) const;
|
||||
void updateStreamAndView();
|
||||
|
||||
ClearCaseSettings m_settings;
|
||||
|
||||
static StatusMap s_statusMap;
|
||||
QString m_checkInMessageFileName;
|
||||
QString m_topLevel;
|
||||
QString m_stream;
|
||||
@@ -249,8 +250,9 @@ private:
|
||||
QAction *m_submitRedoAction;
|
||||
QAction *m_menuAction;
|
||||
bool m_submitActionTriggered;
|
||||
QMutex *activityMutex;
|
||||
QMutex *m_activityMutex;
|
||||
QList<QStringPair> m_activities;
|
||||
QSharedPointer<StatusMap> m_statusMap;
|
||||
|
||||
static ClearCasePlugin *m_clearcasePluginInstance;
|
||||
};
|
||||
@@ -258,4 +260,6 @@ private:
|
||||
} // namespace Internal
|
||||
} // namespace ClearCase
|
||||
|
||||
Q_DECLARE_METATYPE(ClearCase::Internal::FileStatus::Status)
|
||||
|
||||
#endif // CLEARCASEPLUGIN_H
|
||||
|
@@ -98,6 +98,7 @@ void ClearCaseSettings::fromSettings(QSettings *settings)
|
||||
promptToCheckIn = settings->value(QLatin1String(promptToCheckInKeyC), false).toBool();
|
||||
disableIndexer = settings->value(QLatin1String(disableIndexerKeyC), false).toBool();
|
||||
indexOnlyVOBs = settings->value(QLatin1String(indexOnlyVOBsC), QString()).toString();
|
||||
extDiffAvailable = !Utils::Environment::systemEnvironment().searchInPath(QLatin1String("diff")).isEmpty();
|
||||
settings->beginGroup(QLatin1String(totalFilesKeyC));
|
||||
foreach (const QString &view, settings->childKeys())
|
||||
totalFiles[view] = settings->value(view).toInt();
|
||||
|
@@ -73,6 +73,7 @@ public:
|
||||
bool promptToCheckIn;
|
||||
bool disableIndexer;
|
||||
QString indexOnlyVOBs;
|
||||
bool extDiffAvailable;
|
||||
QHash<QString, int> totalFiles;
|
||||
};
|
||||
|
||||
|
125
src/plugins/clearcase/clearcasesync.cpp
Normal file
125
src/plugins/clearcase/clearcasesync.cpp
Normal file
@@ -0,0 +1,125 @@
|
||||
#include "clearcasesync.h"
|
||||
|
||||
#include <QDir>
|
||||
#include <QFutureInterface>
|
||||
#include <QProcess>
|
||||
#include <QStringList>
|
||||
|
||||
namespace ClearCase {
|
||||
namespace Internal {
|
||||
|
||||
ClearCaseSync::ClearCaseSync(ClearCasePlugin *plugin, QSharedPointer<StatusMap> statusMap) :
|
||||
m_plugin(plugin),
|
||||
m_statusMap(statusMap)
|
||||
{
|
||||
}
|
||||
|
||||
void ClearCaseSync::run(QFutureInterface<void> &future, const QString &topLevel, QStringList &files)
|
||||
{
|
||||
ClearCaseSettings settings = m_plugin->settings();
|
||||
QString program = settings.ccBinaryPath;
|
||||
if (program.isEmpty())
|
||||
return;
|
||||
int total = files.size();
|
||||
bool hot = (total < 10);
|
||||
int processed = 0;
|
||||
QString view = m_plugin->currentView();
|
||||
if (view.isEmpty())
|
||||
emit updateStreamAndView();
|
||||
if (!hot)
|
||||
total = settings.totalFiles.value(view, total);
|
||||
|
||||
// refresh activities list
|
||||
m_plugin->refreshActivities();
|
||||
|
||||
if (settings.disableIndexer)
|
||||
return;
|
||||
QStringList vobs;
|
||||
if (!settings.indexOnlyVOBs.isEmpty())
|
||||
vobs = settings.indexOnlyVOBs.split(QLatin1Char(','));
|
||||
else
|
||||
vobs = m_plugin->ccGetActiveVobs();
|
||||
QDir topLevelDir(topLevel);
|
||||
QStringList args(QLatin1String("ls"));
|
||||
if (hot) {
|
||||
// find all files whose permissions changed OR hijacked files
|
||||
// (might have become checked out)
|
||||
foreach (const QString &file, m_statusMap->keys()) {
|
||||
bool permChanged =
|
||||
m_statusMap->value(file).permissions != QFileInfo(topLevel, file).permissions();
|
||||
if (permChanged || m_statusMap->value(file).status == FileStatus::Hijacked) {
|
||||
files.append(file);
|
||||
(*m_statusMap)[file].status = FileStatus::Unknown;
|
||||
++total;
|
||||
}
|
||||
}
|
||||
args << files;
|
||||
} else {
|
||||
foreach (const QString &file, files)
|
||||
emit setStatus(topLevelDir.relativeFilePath(file), FileStatus::Unknown, false);
|
||||
args << QLatin1String("-recurse");
|
||||
args << vobs;
|
||||
}
|
||||
|
||||
// adding 1 for initial sync in which total is not accurate, to prevent finishing
|
||||
// (we don't want it to become green)
|
||||
future.setProgressRange(0, total + 1);
|
||||
QProcess process;
|
||||
process.setWorkingDirectory(topLevel);
|
||||
process.start(program, args);
|
||||
if (!process.waitForStarted())
|
||||
return;
|
||||
QString buffer;
|
||||
while (process.waitForReadyRead() && !future.isCanceled()) {
|
||||
while (process.state() == QProcess::Running &&
|
||||
process.bytesAvailable() && !future.isCanceled())
|
||||
{
|
||||
QString line = QString::fromLocal8Bit(process.readLine().constData());
|
||||
buffer += line;
|
||||
if (buffer.endsWith(QLatin1Char('\n')) || process.atEnd()) {
|
||||
int atatpos = buffer.indexOf(QLatin1String("@@"));
|
||||
if (atatpos != -1) { // probably managed file
|
||||
// find first whitespace. anything before that is not interesting
|
||||
int wspos = buffer.indexOf(QRegExp(QLatin1String("\\s")));
|
||||
const QString file = QDir::fromNativeSeparators(buffer.left(atatpos));
|
||||
QString ccState;
|
||||
QRegExp reState(QLatin1String("^\\s*\\[[^\\]]*\\]")); // [hijacked]; [loaded but missing]
|
||||
if (reState.indexIn(buffer, wspos + 1, QRegExp::CaretAtOffset) != -1) {
|
||||
ccState = reState.cap();
|
||||
if (ccState.indexOf(QLatin1String("hijacked")) != -1)
|
||||
emit setStatus(file, FileStatus::Hijacked, true);
|
||||
else if (ccState.indexOf(QLatin1String("loaded but missing")) != -1)
|
||||
emit setStatus(file, FileStatus::Missing, false);
|
||||
}
|
||||
else if (buffer.lastIndexOf(QLatin1String("CHECKEDOUT"), wspos) != -1)
|
||||
emit setStatus(file, FileStatus::CheckedOut, true);
|
||||
// don't care about checked-in files not listed in project
|
||||
else if (m_statusMap->contains(file))
|
||||
emit setStatus(file, FileStatus::CheckedIn, true);
|
||||
}
|
||||
buffer.clear();
|
||||
future.setProgressValue(qMin(total, ++processed));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!future.isCanceled()) {
|
||||
foreach (const QString &file, files) {
|
||||
QString relFile = topLevelDir.relativeFilePath(file);
|
||||
if (m_statusMap->value(relFile).status == FileStatus::Unknown)
|
||||
emit setStatus(relFile, FileStatus::NotManaged, false);
|
||||
}
|
||||
future.setProgressValue(total + 1);
|
||||
if (!hot) {
|
||||
settings = m_plugin->settings(); // Might have changed while task was running
|
||||
settings.totalFiles[view] = processed;
|
||||
m_plugin->setSettings(settings);
|
||||
}
|
||||
}
|
||||
if (process.state() == QProcess::Running)
|
||||
process.kill();
|
||||
process.waitForFinished();
|
||||
}
|
||||
|
||||
} // namespace Internal
|
||||
} // namespace ClearCase
|
28
src/plugins/clearcase/clearcasesync.h
Normal file
28
src/plugins/clearcase/clearcasesync.h
Normal file
@@ -0,0 +1,28 @@
|
||||
#ifndef CLEARCASESYNC_H
|
||||
#define CLEARCASESYNC_H
|
||||
|
||||
#include "clearcaseplugin.h"
|
||||
|
||||
namespace ClearCase {
|
||||
namespace Internal {
|
||||
|
||||
class ClearCaseSync : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit ClearCaseSync(ClearCasePlugin *plugin, QSharedPointer<StatusMap> statusMap);
|
||||
void run(QFutureInterface<void> &future, const QString &topLevel, QStringList &files);
|
||||
|
||||
signals:
|
||||
void updateStreamAndView();
|
||||
void setStatus(const QString &file, ClearCase::Internal::FileStatus::Status status, bool update);
|
||||
|
||||
private:
|
||||
ClearCasePlugin *m_plugin;
|
||||
QSharedPointer<StatusMap> m_statusMap;
|
||||
};
|
||||
|
||||
} // namespace Internal
|
||||
} // namespace ClearCase
|
||||
|
||||
#endif // CLEARCASESYNC_H
|
@@ -37,6 +37,7 @@
|
||||
|
||||
#include <coreplugin/icore.h>
|
||||
#include <extensionsystem/pluginmanager.h>
|
||||
#include <utils/environment.h>
|
||||
#include <utils/pathchooser.h>
|
||||
|
||||
#include <QCoreApplication>
|
||||
@@ -71,6 +72,7 @@ ClearCaseSettings SettingsPageWidget::settings() const
|
||||
rc.disableIndexer = m_ui.disableIndexerCheckBox->isChecked();
|
||||
rc.diffArgs = m_ui.diffArgsEdit->text();
|
||||
rc.indexOnlyVOBs = m_ui.indexOnlyVOBsEdit->text();
|
||||
rc.extDiffAvailable = m_ui.externalDiffRadioButton->isEnabled();
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -79,16 +81,23 @@ void SettingsPageWidget::setSettings(const ClearCaseSettings &s)
|
||||
m_ui.commandPathChooser->setPath(s.ccCommand);
|
||||
m_ui.timeOutSpinBox->setValue(s.timeOutS);
|
||||
m_ui.autoCheckOutCheckBox->setChecked(s.autoCheckOut);
|
||||
switch (s.diffType) {
|
||||
case GraphicalDiff:
|
||||
m_ui.graphicalDiffRadioButton->setChecked(true);
|
||||
m_ui.diffWidget->setEnabled(false);
|
||||
break;
|
||||
case ExternalDiff:
|
||||
m_ui.externalDiffRadioButton->setChecked(true);
|
||||
m_ui.diffWidget->setEnabled(true);
|
||||
break;
|
||||
bool extDiffAvailable = !Utils::Environment::systemEnvironment().searchInPath(QLatin1String("diff")).isEmpty();
|
||||
if (extDiffAvailable) {
|
||||
m_ui.diffWarningLabel->setVisible(false);
|
||||
} else {
|
||||
QString diffWarning = tr("In order to use External diff, 'diff' command needs to be accessible.");
|
||||
#ifdef Q_OS_WIN
|
||||
diffWarning.append(tr(" DiffUtils is available for free download "
|
||||
"<a href=\"http://gnuwin32.sourceforge.net/packages/diffutils.htm\">here</a>. "
|
||||
"Please extract it to a directory in your PATH."));
|
||||
#endif
|
||||
m_ui.diffWarningLabel->setText(diffWarning);
|
||||
m_ui.externalDiffRadioButton->setEnabled(false);
|
||||
}
|
||||
if (extDiffAvailable && s.diffType == ExternalDiff)
|
||||
m_ui.externalDiffRadioButton->setChecked(true);
|
||||
else
|
||||
m_ui.graphicalDiffRadioButton->setChecked(true);
|
||||
m_ui.autoAssignActivityCheckBox->setChecked(s.autoAssignActivityName);
|
||||
m_ui.historyCountSpinBox->setValue(s.historyCount);
|
||||
m_ui.promptCheckBox->setChecked(s.promptToCheckIn);
|
||||
|
@@ -7,7 +7,7 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>363</width>
|
||||
<height>384</height>
|
||||
<height>403</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
@@ -39,11 +39,17 @@
|
||||
<string>Diff</string>
|
||||
</property>
|
||||
<layout class="QFormLayout" name="formLayout">
|
||||
<property name="fieldGrowthPolicy">
|
||||
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
|
||||
</property>
|
||||
<item row="0" column="0">
|
||||
<widget class="QRadioButton" name="graphicalDiffRadioButton">
|
||||
<property name="text">
|
||||
<string>&Graphical (Single file only)</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
@@ -55,6 +61,9 @@
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QWidget" name="diffWidget" native="true">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<property name="margin">
|
||||
<number>0</number>
|
||||
@@ -75,6 +84,53 @@
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0" colspan="2">
|
||||
<widget class="QLabel" name="diffWarningLabel">
|
||||
<property name="palette">
|
||||
<palette>
|
||||
<active>
|
||||
<colorrole role="WindowText">
|
||||
<brush brushstyle="SolidPattern">
|
||||
<color alpha="255">
|
||||
<red>255</red>
|
||||
<green>0</green>
|
||||
<blue>0</blue>
|
||||
</color>
|
||||
</brush>
|
||||
</colorrole>
|
||||
</active>
|
||||
<inactive>
|
||||
<colorrole role="WindowText">
|
||||
<brush brushstyle="SolidPattern">
|
||||
<color alpha="255">
|
||||
<red>255</red>
|
||||
<green>0</green>
|
||||
<blue>0</blue>
|
||||
</color>
|
||||
</brush>
|
||||
</colorrole>
|
||||
</inactive>
|
||||
<disabled>
|
||||
<colorrole role="WindowText">
|
||||
<brush brushstyle="SolidPattern">
|
||||
<color alpha="255">
|
||||
<red>68</red>
|
||||
<green>96</green>
|
||||
<blue>92</blue>
|
||||
</color>
|
||||
</brush>
|
||||
</colorrole>
|
||||
</disabled>
|
||||
</palette>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
|
@@ -36,12 +36,12 @@
|
||||
#include <projectexplorer/buildsteplist.h>
|
||||
#include <projectexplorer/gnumakeparser.h>
|
||||
#include <projectexplorer/ioutputparser.h>
|
||||
#include <projectexplorer/profileinformation.h>
|
||||
#include <projectexplorer/kitinformation.h>
|
||||
#include <projectexplorer/projectexplorerconstants.h>
|
||||
#include <projectexplorer/target.h>
|
||||
#include <qtsupport/baseqtversion.h>
|
||||
#include <qtsupport/qtparser.h>
|
||||
#include <qtsupport/qtprofileinformation.h>
|
||||
#include <qtsupport/qtkitinformation.h>
|
||||
#include <utils/qtcassert.h>
|
||||
|
||||
#include <QInputDialog>
|
||||
@@ -113,11 +113,11 @@ ProjectExplorer::IOutputParser *CMakeBuildConfiguration::createOutputParser() co
|
||||
{
|
||||
ProjectExplorer::IOutputParser *parserchain = new ProjectExplorer::GnuMakeParser;
|
||||
|
||||
int versionId = QtSupport::QtProfileInformation::qtVersionId(target()->profile());
|
||||
int versionId = QtSupport::QtKitInformation::qtVersionId(target()->kit());
|
||||
if (versionId >= 0)
|
||||
parserchain->appendOutputParser(new QtSupport::QtParser);
|
||||
|
||||
ProjectExplorer::ToolChain *tc = ProjectExplorer::ToolChainProfileInformation::toolChain(target()->profile());
|
||||
ProjectExplorer::ToolChain *tc = ProjectExplorer::ToolChainKitInformation::toolChain(target()->kit());
|
||||
if (tc)
|
||||
parserchain->appendOutputParser(tc->outputParser());
|
||||
return parserchain;
|
||||
@@ -126,7 +126,7 @@ ProjectExplorer::IOutputParser *CMakeBuildConfiguration::createOutputParser() co
|
||||
Utils::Environment CMakeBuildConfiguration::baseEnvironment() const
|
||||
{
|
||||
Utils::Environment env = BuildConfiguration::baseEnvironment();
|
||||
target()->profile()->addToEnvironment(env);
|
||||
target()->kit()->addToEnvironment(env);
|
||||
return env;
|
||||
}
|
||||
|
||||
@@ -248,7 +248,7 @@ CMakeBuildConfiguration *CMakeBuildConfigurationFactory::restore(ProjectExplorer
|
||||
|
||||
bool CMakeBuildConfigurationFactory::canHandle(const ProjectExplorer::Target *t) const
|
||||
{
|
||||
if (!t->project()->supportsProfile(t->profile()))
|
||||
if (!t->project()->supportsKit(t->kit()))
|
||||
return false;
|
||||
return qobject_cast<CMakeProject *>(t->project());
|
||||
}
|
||||
|
@@ -34,8 +34,8 @@
|
||||
#include <coreplugin/icore.h>
|
||||
#include <utils/pathchooser.h>
|
||||
#include <utils/fancylineedit.h>
|
||||
#include <projectexplorer/profileinformation.h>
|
||||
#include <projectexplorer/profilemanager.h>
|
||||
#include <projectexplorer/kitinformation.h>
|
||||
#include <projectexplorer/kitmanager.h>
|
||||
#include <projectexplorer/toolchain.h>
|
||||
#include <projectexplorer/abi.h>
|
||||
#include <texteditor/fontsettings.h>
|
||||
@@ -405,13 +405,13 @@ void CMakeRunPage::initializePage()
|
||||
m_generatorComboBox->clear();
|
||||
bool hasCodeBlocksGenerator = m_cmakeWizard->cmakeManager()->hasCodeBlocksMsvcGenerator();
|
||||
|
||||
QList<ProjectExplorer::Profile *> profileList =
|
||||
ProjectExplorer::ProfileManager::instance()->profiles();
|
||||
QList<ProjectExplorer::Kit *> kitList =
|
||||
ProjectExplorer::KitManager::instance()->kits();
|
||||
|
||||
foreach (ProjectExplorer::Profile *p, profileList) {
|
||||
QVariant profileVariant = qVariantFromValue(static_cast<void *>(p));
|
||||
foreach (ProjectExplorer::Kit *k, kitList) {
|
||||
QVariant kitVariant = qVariantFromValue(static_cast<void *>(k));
|
||||
|
||||
ProjectExplorer::ToolChain *tc = ProjectExplorer::ToolChainProfileInformation::toolChain(p);
|
||||
ProjectExplorer::ToolChain *tc = ProjectExplorer::ToolChainKitInformation::toolChain(k);
|
||||
if (!tc)
|
||||
continue;
|
||||
ProjectExplorer::Abi targetAbi = tc->targetAbi();
|
||||
@@ -421,21 +421,21 @@ void CMakeRunPage::initializePage()
|
||||
|| targetAbi.osFlavor() == ProjectExplorer::Abi::WindowsMsvc2010Flavor
|
||||
|| targetAbi.osFlavor() == ProjectExplorer::Abi::WindowsMsvc2012Flavor) {
|
||||
if (hasCodeBlocksGenerator && (cachedGenerator.isEmpty() || cachedGenerator == "NMake Makefiles"))
|
||||
m_generatorComboBox->addItem(tr("NMake Generator (%1)").arg(p->displayName()), profileVariant);
|
||||
m_generatorComboBox->addItem(tr("NMake Generator (%1)").arg(k->displayName()), kitVariant);
|
||||
} else if (targetAbi.osFlavor() == ProjectExplorer::Abi::WindowsMSysFlavor) {
|
||||
#ifdef Q_OS_WIN
|
||||
if (cachedGenerator.isEmpty() || cachedGenerator == "MinGW Makefiles")
|
||||
m_generatorComboBox->addItem(tr("MinGW Generator (%1)").arg(p->displayName()), profileVariant);
|
||||
m_generatorComboBox->addItem(tr("MinGW Generator (%1)").arg(p->displayName()), kitVariant);
|
||||
#else
|
||||
if (cachedGenerator.isEmpty() || cachedGenerator == "Unix Makefiles")
|
||||
m_generatorComboBox->addItem(tr("Unix Generator (%1)").arg(p->displayName()), profileVariant);
|
||||
m_generatorComboBox->addItem(tr("Unix Generator (%1)").arg(k->displayName()), kitVariant);
|
||||
#endif
|
||||
|
||||
}
|
||||
} else {
|
||||
// Non windows
|
||||
if (cachedGenerator.isEmpty() || cachedGenerator == "Unix Makefiles")
|
||||
m_generatorComboBox->addItem(tr("Unix Generator (%1)").arg(p->displayName()), profileVariant);
|
||||
m_generatorComboBox->addItem(tr("Unix Generator (%1)").arg(k->displayName()), kitVariant);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -448,15 +448,15 @@ void CMakeRunPage::runCMake()
|
||||
|
||||
int index = m_generatorComboBox->currentIndex();
|
||||
|
||||
ProjectExplorer::Profile *p = 0;
|
||||
ProjectExplorer::Kit *p = 0;
|
||||
if (index >= 0)
|
||||
p = static_cast<ProjectExplorer::Profile *>(m_generatorComboBox->itemData(index).value<void *>());
|
||||
p = static_cast<ProjectExplorer::Kit *>(m_generatorComboBox->itemData(index).value<void *>());
|
||||
if (!p) {
|
||||
m_output->appendPlainText(tr("No generator selected."));
|
||||
return;
|
||||
}
|
||||
|
||||
ProjectExplorer::ToolChain *tc = ProjectExplorer::ToolChainProfileInformation::toolChain(p);
|
||||
ProjectExplorer::ToolChain *tc = ProjectExplorer::ToolChainKitInformation::toolChain(p);
|
||||
|
||||
m_runCMake->setEnabled(false);
|
||||
m_argumentsLineEdit->setEnabled(false);
|
||||
|
@@ -45,8 +45,8 @@
|
||||
#include <projectexplorer/buildenvironmentwidget.h>
|
||||
#include <projectexplorer/buildsteplist.h>
|
||||
#include <projectexplorer/buildmanager.h>
|
||||
#include <projectexplorer/profileinformation.h>
|
||||
#include <projectexplorer/profilemanager.h>
|
||||
#include <projectexplorer/kitinformation.h>
|
||||
#include <projectexplorer/kitmanager.h>
|
||||
#include <projectexplorer/toolchain.h>
|
||||
#include <projectexplorer/target.h>
|
||||
#include <qtsupport/customexecutablerunconfiguration.h>
|
||||
@@ -286,7 +286,7 @@ bool CMakeProject::parseCMakeLists()
|
||||
|
||||
createUiCodeModelSupport();
|
||||
|
||||
ToolChain *tc = ProjectExplorer::ToolChainProfileInformation::toolChain(activeTarget()->profile());
|
||||
ToolChain *tc = ProjectExplorer::ToolChainKitInformation::toolChain(activeTarget()->kit());
|
||||
if (!tc) {
|
||||
emit buildTargetsChanged();
|
||||
emit fileListChanged();
|
||||
@@ -530,9 +530,9 @@ bool CMakeProject::fromMap(const QVariantMap &map)
|
||||
if (!Project::fromMap(map))
|
||||
return false;
|
||||
|
||||
Profile *defaultProfile = ProfileManager::instance()->defaultProfile();
|
||||
if (!activeTarget() && defaultProfile)
|
||||
addTarget(createTarget(defaultProfile));
|
||||
Kit *defaultKit = KitManager::instance()->defaultKit();
|
||||
if (!activeTarget() && defaultKit)
|
||||
addTarget(createTarget(defaultKit));
|
||||
|
||||
// We have a user file, but we could still be missing the cbp file
|
||||
// or simply run createXml with the saved settings
|
||||
|
@@ -496,7 +496,7 @@ QString CMakeRunConfigurationFactory::displayNameForId(const Core::Id id) const
|
||||
|
||||
bool CMakeRunConfigurationFactory::canHandle(ProjectExplorer::Target *parent) const
|
||||
{
|
||||
if (!parent->project()->supportsProfile(parent->profile()))
|
||||
if (!parent->project()->supportsKit(parent->kit()))
|
||||
return false;
|
||||
return qobject_cast<CMakeProject *>(parent->project());
|
||||
}
|
||||
|
@@ -37,7 +37,7 @@
|
||||
#include <projectexplorer/buildsteplist.h>
|
||||
#include <projectexplorer/deployconfiguration.h>
|
||||
#include <projectexplorer/gnumakeparser.h>
|
||||
#include <projectexplorer/profileinformation.h>
|
||||
#include <projectexplorer/kitinformation.h>
|
||||
#include <projectexplorer/projectexplorer.h>
|
||||
#include <projectexplorer/projectexplorerconstants.h>
|
||||
#include <projectexplorer/target.h>
|
||||
@@ -137,7 +137,7 @@ bool MakeStep::init()
|
||||
|
||||
setIgnoreReturnValue(m_clean);
|
||||
|
||||
ProjectExplorer::ToolChain *tc = ProjectExplorer::ToolChainProfileInformation::toolChain(target()->profile());
|
||||
ProjectExplorer::ToolChain *tc = ProjectExplorer::ToolChainKitInformation::toolChain(target()->kit());
|
||||
ProcessParameters *pp = processParameters();
|
||||
pp->setMacroExpander(bc->macroExpander());
|
||||
pp->setEnvironment(bc->environment());
|
||||
@@ -308,7 +308,7 @@ void MakeStepConfigWidget::updateDetails()
|
||||
return;
|
||||
}
|
||||
|
||||
ProjectExplorer::ToolChain *tc = ProjectExplorer::ToolChainProfileInformation::toolChain(m_makeStep->target()->profile());
|
||||
ProjectExplorer::ToolChain *tc = ProjectExplorer::ToolChainKitInformation::toolChain(m_makeStep->target()->kit());
|
||||
if (tc) {
|
||||
QString arguments = Utils::QtcProcess::joinArgs(m_makeStep->buildTargets());
|
||||
Utils::QtcProcess::addArgs(&arguments, m_makeStep->additionalArguments());
|
||||
@@ -321,7 +321,7 @@ void MakeStepConfigWidget::updateDetails()
|
||||
param.setArguments(arguments);
|
||||
m_summaryText = param.summary(displayName());
|
||||
} else {
|
||||
m_summaryText = QLatin1String("<b>") + ProjectExplorer::ToolChainProfileInformation::msgNoToolChainInTarget() + QLatin1String("</b>");
|
||||
m_summaryText = QLatin1String("<b>") + ProjectExplorer::ToolChainKitInformation::msgNoToolChainInTarget() + QLatin1String("</b>");
|
||||
}
|
||||
emit updateSummary();
|
||||
}
|
||||
|
@@ -102,7 +102,8 @@ SOURCES += mainwindow.cpp \
|
||||
idocument.cpp \
|
||||
textdocument.cpp \
|
||||
documentmanager.cpp \
|
||||
removefiledialog.cpp
|
||||
removefiledialog.cpp \
|
||||
iversioncontrol.cpp
|
||||
|
||||
HEADERS += mainwindow.h \
|
||||
editmode.h \
|
||||
|
@@ -152,6 +152,7 @@ QtcPlugin {
|
||||
"versiondialog.cpp",
|
||||
"versiondialog.h",
|
||||
"id.cpp",
|
||||
"iversioncontrol.cpp",
|
||||
"iversioncontrol.h",
|
||||
"variablechooser.cpp",
|
||||
"variablemanager.cpp",
|
||||
|
@@ -825,15 +825,20 @@ DocumentManager::ReadOnlyAction
|
||||
tr("The file <i>%1</i> is read only.").arg(QDir::toNativeSeparators(fileName)),
|
||||
QMessageBox::Cancel, parent);
|
||||
|
||||
QString makeWritableText;
|
||||
QPushButton *vcsButton = 0;
|
||||
if (promptVCS)
|
||||
vcsButton = msgBox.addButton(tr("Open with VCS (%1)").arg(versionControl->displayName()), QMessageBox::AcceptRole);
|
||||
if (promptVCS) {
|
||||
vcsButton = msgBox.addButton(versionControl->vcsOpenText(), QMessageBox::AcceptRole);
|
||||
makeWritableText = versionControl->vcsMakeWritableText();
|
||||
}
|
||||
if (makeWritableText.isEmpty())
|
||||
makeWritableText = tr("Make &Writable");
|
||||
|
||||
QPushButton *makeWritableButton = msgBox.addButton(tr("Make Writable"), QMessageBox::AcceptRole);
|
||||
QPushButton *makeWritableButton = msgBox.addButton(makeWritableText, QMessageBox::AcceptRole);
|
||||
|
||||
QPushButton *saveAsButton = 0;
|
||||
if (displaySaveAsButton)
|
||||
saveAsButton = msgBox.addButton(tr("Save As..."), QMessageBox::ActionRole);
|
||||
saveAsButton = msgBox.addButton(tr("&Save As..."), QMessageBox::ActionRole);
|
||||
|
||||
msgBox.setDefaultButton(vcsButton ? vcsButton : makeWritableButton);
|
||||
msgBox.exec();
|
||||
|
45
src/plugins/coreplugin/iversioncontrol.cpp
Normal file
45
src/plugins/coreplugin/iversioncontrol.cpp
Normal file
@@ -0,0 +1,45 @@
|
||||
/**************************************************************************
|
||||
**
|
||||
** This file is part of Qt Creator
|
||||
**
|
||||
** Copyright (c) 2012 Nokia Corporation and/or its subsidiary(-ies).
|
||||
**
|
||||
** Contact: http://www.qt-project.org/
|
||||
**
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
**
|
||||
** This file may be used under the terms of the GNU Lesser General Public
|
||||
** License version 2.1 as published by the Free Software Foundation and
|
||||
** appearing in the file LICENSE.LGPL included in the packaging of this file.
|
||||
** Please review the following information to ensure the GNU Lesser General
|
||||
** Public License version 2.1 requirements will be met:
|
||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** In addition, as a special exception, Nokia gives you certain additional
|
||||
** rights. These rights are described in the Nokia Qt LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
** Other Usage
|
||||
**
|
||||
** Alternatively, this file may be used in accordance with the terms and
|
||||
** conditions contained in a signed written agreement between you and Nokia.
|
||||
**
|
||||
**
|
||||
**************************************************************************/
|
||||
|
||||
#include "iversioncontrol.h"
|
||||
|
||||
namespace Core {
|
||||
|
||||
QString IVersionControl::vcsOpenText() const
|
||||
{
|
||||
return tr("Open with VCS (%1)").arg(displayName());
|
||||
}
|
||||
|
||||
QString IVersionControl::vcsMakeWritableText() const
|
||||
{
|
||||
return QString();
|
||||
}
|
||||
|
||||
}
|
@@ -163,6 +163,16 @@ public:
|
||||
*/
|
||||
virtual bool vcsAnnotate(const QString &file, int line) = 0;
|
||||
|
||||
/*!
|
||||
* Display text for Open operation
|
||||
*/
|
||||
virtual QString vcsOpenText() const;
|
||||
|
||||
/*!
|
||||
* Display text for Make Writable
|
||||
*/
|
||||
virtual QString vcsMakeWritableText() const;
|
||||
|
||||
signals:
|
||||
void repositoryChanged(const QString &repository);
|
||||
void filesChanged(const QStringList &files);
|
||||
|
@@ -38,8 +38,8 @@ HEADERS += \
|
||||
debuggerstartparameters.h \
|
||||
debuggerstreamops.h \
|
||||
debuggerstringutils.h \
|
||||
debuggerprofileconfigwidget.h \
|
||||
debuggerprofileinformation.h \
|
||||
debuggerkitconfigwidget.h \
|
||||
debuggerkitinformation.h \
|
||||
disassembleragent.h \
|
||||
disassemblerlines.h \
|
||||
loadcoredialog.h \
|
||||
@@ -92,8 +92,8 @@ SOURCES += \
|
||||
debuggerplugin.cpp \
|
||||
debuggerrunner.cpp \
|
||||
debuggerstreamops.cpp \
|
||||
debuggerprofileconfigwidget.cpp \
|
||||
debuggerprofileinformation.cpp \
|
||||
debuggerkitconfigwidget.cpp \
|
||||
debuggerkitinformation.cpp \
|
||||
disassembleragent.cpp \
|
||||
disassemblerlines.cpp \
|
||||
loadcoredialog.cpp \
|
||||
|
@@ -33,10 +33,10 @@ QtcPlugin {
|
||||
|
||||
files: [
|
||||
"debugger.qrc",
|
||||
"debuggerprofileconfigwidget.cpp",
|
||||
"debuggerprofileconfigwidget.h",
|
||||
"debuggerprofileinformation.cpp",
|
||||
"debuggerprofileinformation.h",
|
||||
"debuggerkitconfigwidget.cpp",
|
||||
"debuggerkitconfigwidget.h",
|
||||
"debuggerkitinformation.cpp",
|
||||
"debuggerkitinformation.h",
|
||||
"basewindow.cpp",
|
||||
"breakhandler.cpp",
|
||||
"breakhandler.h",
|
||||
|
@@ -32,15 +32,15 @@
|
||||
#include "debuggerstartparameters.h"
|
||||
|
||||
#include "debuggerconstants.h"
|
||||
#include "debuggerprofileinformation.h"
|
||||
#include "debuggerkitinformation.h"
|
||||
#include "debuggerstringutils.h"
|
||||
#include "cdb/cdbengine.h"
|
||||
#include "shared/hostutils.h"
|
||||
|
||||
#include <coreplugin/icore.h>
|
||||
#include <projectexplorer/abi.h>
|
||||
#include <projectexplorer/profilechooser.h>
|
||||
#include <projectexplorer/profileinformation.h>
|
||||
#include <projectexplorer/kitchooser.h>
|
||||
#include <projectexplorer/kitinformation.h>
|
||||
#include <utils/historycompleter.h>
|
||||
#include <utils/pathchooser.h>
|
||||
#include <utils/qtcassert.h>
|
||||
@@ -88,7 +88,7 @@ namespace Internal {
|
||||
class StartApplicationDialogPrivate
|
||||
{
|
||||
public:
|
||||
ProfileChooser *profileChooser;
|
||||
KitChooser *kitChooser;
|
||||
PathChooser *localExecutablePathChooser;
|
||||
FancyLineEdit *arguments;
|
||||
PathChooser *workingDirectory;
|
||||
@@ -127,7 +127,7 @@ public:
|
||||
bool operator==(const StartApplicationParameters &p) const { return equals(p); }
|
||||
bool operator!=(const StartApplicationParameters &p) const { return !equals(p); }
|
||||
|
||||
Id profileId;
|
||||
Id kitId;
|
||||
QString localExecutable;
|
||||
QString processArgs;
|
||||
QString workingDirectory;
|
||||
@@ -150,7 +150,7 @@ bool StartApplicationParameters::equals(const StartApplicationParameters &rhs) c
|
||||
&& breakAtMain == rhs.breakAtMain
|
||||
&& runInTerminal == rhs.runInTerminal
|
||||
&& serverStartScript == rhs.serverStartScript
|
||||
&& profileId == rhs.profileId
|
||||
&& kitId == rhs.kitId
|
||||
&& debugInfoLocation == rhs.debugInfoLocation;
|
||||
}
|
||||
|
||||
@@ -167,15 +167,15 @@ QString StartApplicationParameters::displayName() const
|
||||
name += QLatin1String("...");
|
||||
}
|
||||
|
||||
if (Profile *profile = ProfileManager::instance()->find(profileId))
|
||||
name += QString::fromLatin1(" (%1)").arg(profile->displayName());
|
||||
if (Kit *kit = KitManager::instance()->find(kitId))
|
||||
name += QString::fromLatin1(" (%1)").arg(kit->displayName());
|
||||
|
||||
return name;
|
||||
}
|
||||
|
||||
void StartApplicationParameters::toSettings(QSettings *settings) const
|
||||
{
|
||||
settings->setValue(_("LastProfileId"), profileId.toString());
|
||||
settings->setValue(_("LastProfileId"), kitId.toString());
|
||||
settings->setValue(_("LastExternalExecutable"), localExecutable);
|
||||
settings->setValue(_("LastExternalExecutableArguments"), processArgs);
|
||||
settings->setValue(_("LastExternalWorkingDirectory"), workingDirectory);
|
||||
@@ -187,8 +187,8 @@ void StartApplicationParameters::toSettings(QSettings *settings) const
|
||||
|
||||
void StartApplicationParameters::fromSettings(const QSettings *settings)
|
||||
{
|
||||
const QString profileIdString = settings->value(_("LastProfileId")).toString();
|
||||
profileId = profileIdString.isEmpty() ? Id() : Id(profileIdString);
|
||||
const QString kitIdString = settings->value(_("LastProfileId")).toString();
|
||||
kitId = kitIdString.isEmpty() ? Id() : Id(kitIdString);
|
||||
localExecutable = settings->value(_("LastExternalExecutable")).toString();
|
||||
processArgs = settings->value(_("LastExternalExecutableArguments")).toString();
|
||||
workingDirectory = settings->value(_("LastExternalWorkingDirectory")).toString();
|
||||
@@ -225,7 +225,7 @@ StartApplicationDialog::StartApplicationDialog(QWidget *parent)
|
||||
|
||||
d->runInTerminalCheckBox = new QCheckBox(this);
|
||||
|
||||
d->profileChooser = new ProfileChooser(this, ProfileChooser::LocalDebugging);
|
||||
d->kitChooser = new KitChooser(this, KitChooser::LocalDebugging);
|
||||
|
||||
d->breakAtMainCheckBox = new QCheckBox(this);
|
||||
d->breakAtMainCheckBox->setText(QString());
|
||||
@@ -263,7 +263,7 @@ StartApplicationDialog::StartApplicationDialog(QWidget *parent)
|
||||
|
||||
QFormLayout *formLayout = new QFormLayout();
|
||||
formLayout->setFieldGrowthPolicy(QFormLayout::AllNonFixedFieldsGrow);
|
||||
formLayout->addRow(tr("&Target:"), d->profileChooser);
|
||||
formLayout->addRow(tr("&Kit:"), d->kitChooser);
|
||||
formLayout->addRow(tr("Local &executable:"), d->localExecutablePathChooser);
|
||||
formLayout->addRow(tr("Command line &arguments:"), d->arguments);
|
||||
formLayout->addRow(tr("&Working directory:"), d->workingDirectory);
|
||||
@@ -319,9 +319,9 @@ void StartApplicationDialog::historyIndexChanged(int index)
|
||||
setParameters(v.value<StartApplicationParameters>());
|
||||
}
|
||||
|
||||
Id StartApplicationDialog::profileId() const
|
||||
Id StartApplicationDialog::kitId() const
|
||||
{
|
||||
return d->profileChooser->currentProfileId();
|
||||
return d->kitChooser->currentKitId();
|
||||
}
|
||||
|
||||
void StartApplicationDialog::updateState()
|
||||
@@ -373,9 +373,9 @@ bool StartApplicationDialog::run(QWidget *parent, QSettings *settings, DebuggerS
|
||||
settings->endGroup();
|
||||
}
|
||||
|
||||
Profile *profile = dialog.d->profileChooser->currentProfile();
|
||||
QTC_ASSERT(profile, return false);
|
||||
fillParameters(sp, profile);
|
||||
Kit *kit = dialog.d->kitChooser->currentKit();
|
||||
QTC_ASSERT(kit, return false);
|
||||
fillParameters(sp, kit);
|
||||
|
||||
sp->executable = newParameters.localExecutable;
|
||||
sp->displayName = newParameters.displayName();
|
||||
@@ -387,7 +387,7 @@ bool StartApplicationDialog::run(QWidget *parent, QSettings *settings, DebuggerS
|
||||
sp->serverStartScript = newParameters.serverStartScript;
|
||||
sp->debugInfoLocation = newParameters.debugInfoLocation;
|
||||
|
||||
bool isLocal = DeviceProfileInformation::device(profile)->type()
|
||||
bool isLocal = DeviceKitInformation::device(kit)->type()
|
||||
== ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE;
|
||||
sp->startMode = isLocal ? StartExternal : StartRemoteProcess;
|
||||
return true;
|
||||
@@ -398,7 +398,7 @@ StartApplicationParameters StartApplicationDialog::parameters() const
|
||||
StartApplicationParameters result;
|
||||
result.localExecutable = d->localExecutablePathChooser->path();
|
||||
result.serverStartScript = d->serverStartScriptPathChooser->path();
|
||||
result.profileId = d->profileChooser->currentProfileId();
|
||||
result.kitId = d->kitChooser->currentKitId();
|
||||
result.debugInfoLocation = d->debuginfoPathChooser->path();
|
||||
result.processArgs = d->arguments->text();
|
||||
result.workingDirectory = d->workingDirectory->path();
|
||||
@@ -409,7 +409,7 @@ StartApplicationParameters StartApplicationDialog::parameters() const
|
||||
|
||||
void StartApplicationDialog::setParameters(const StartApplicationParameters &p)
|
||||
{
|
||||
d->profileChooser->setCurrentProfileId(p.profileId);
|
||||
d->kitChooser->setCurrentKitId(p.kitId);
|
||||
d->localExecutablePathChooser->setPath(p.localExecutable);
|
||||
d->serverStartScriptPathChooser->setPath(p.serverStartScript);
|
||||
d->debuginfoPathChooser->setPath(p.debugInfoLocation);
|
||||
@@ -430,7 +430,7 @@ class AttachToQmlPortDialogPrivate
|
||||
{
|
||||
public:
|
||||
QSpinBox *portSpinBox;
|
||||
ProfileChooser *profileChooser;
|
||||
KitChooser *kitChooser;
|
||||
};
|
||||
|
||||
AttachToQmlPortDialog::AttachToQmlPortDialog(QWidget *parent)
|
||||
@@ -440,7 +440,7 @@ AttachToQmlPortDialog::AttachToQmlPortDialog(QWidget *parent)
|
||||
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
|
||||
setWindowTitle(tr("Start Debugger"));
|
||||
|
||||
d->profileChooser = new ProfileChooser(this);
|
||||
d->kitChooser = new KitChooser(this);
|
||||
|
||||
d->portSpinBox = new QSpinBox(this);
|
||||
d->portSpinBox->setMaximum(65535);
|
||||
@@ -451,7 +451,7 @@ AttachToQmlPortDialog::AttachToQmlPortDialog(QWidget *parent)
|
||||
buttonBox->button(QDialogButtonBox::Ok)->setDefault(true);
|
||||
|
||||
QFormLayout *formLayout = new QFormLayout();
|
||||
formLayout->addRow(tr("Target:"), d->profileChooser);
|
||||
formLayout->addRow(tr("Kit:"), d->kitChooser);
|
||||
formLayout->addRow(tr("&Port:"), d->portSpinBox);
|
||||
|
||||
QVBoxLayout *verticalLayout = new QVBoxLayout(this);
|
||||
@@ -477,14 +477,14 @@ int AttachToQmlPortDialog::port() const
|
||||
return d->portSpinBox->value();
|
||||
}
|
||||
|
||||
Profile *AttachToQmlPortDialog::profile() const
|
||||
Kit *AttachToQmlPortDialog::kit() const
|
||||
{
|
||||
return d->profileChooser->currentProfile();
|
||||
return d->kitChooser->currentKit();
|
||||
}
|
||||
|
||||
void AttachToQmlPortDialog::setProfileId(const Id &id)
|
||||
void AttachToQmlPortDialog::setKitId(const Id &id)
|
||||
{
|
||||
d->profileChooser->setCurrentProfileId(id);
|
||||
d->kitChooser->setCurrentKitId(id);
|
||||
}
|
||||
|
||||
// --------- StartRemoteCdbDialog
|
||||
|
@@ -44,7 +44,7 @@ class QSettings;
|
||||
QT_END_NAMESPACE
|
||||
|
||||
namespace Core { class Id; }
|
||||
namespace ProjectExplorer { class Profile; }
|
||||
namespace ProjectExplorer { class Kit; }
|
||||
|
||||
namespace Debugger {
|
||||
class DebuggerStartParameters;
|
||||
@@ -78,7 +78,7 @@ private:
|
||||
void setParameters(const StartApplicationParameters &p);
|
||||
void setHistory(const QList<StartApplicationParameters> &l);
|
||||
void hideStartScript();
|
||||
Core::Id profileId() const;
|
||||
Core::Id kitId() const;
|
||||
|
||||
StartApplicationDialogPrivate *d;
|
||||
};
|
||||
@@ -94,8 +94,8 @@ public:
|
||||
int port() const;
|
||||
void setPort(const int port);
|
||||
|
||||
ProjectExplorer::Profile *profile() const;
|
||||
void setProfileId(const Core::Id &id);
|
||||
ProjectExplorer::Kit *kit() const;
|
||||
void setKitId(const Core::Id &id);
|
||||
|
||||
private:
|
||||
AttachToQmlPortDialogPrivate *d;
|
||||
|
@@ -28,12 +28,12 @@
|
||||
**
|
||||
**************************************************************************/
|
||||
|
||||
#include "debuggerprofileconfigwidget.h"
|
||||
#include "debuggerkitconfigwidget.h"
|
||||
|
||||
#include "debuggerprofileinformation.h"
|
||||
#include "debuggerkitinformation.h"
|
||||
|
||||
#include <projectexplorer/abi.h>
|
||||
#include <projectexplorer/profileinformation.h>
|
||||
#include <projectexplorer/kitinformation.h>
|
||||
|
||||
#include <utils/pathchooser.h>
|
||||
#include <utils/qtcassert.h>
|
||||
@@ -56,23 +56,23 @@ namespace Internal {
|
||||
static const char dgbToolsDownloadLink32C[] = "http://www.microsoft.com/whdc/devtools/debugging/installx86.Mspx";
|
||||
static const char dgbToolsDownloadLink64C[] = "http://www.microsoft.com/whdc/devtools/debugging/install64bit.Mspx";
|
||||
// -----------------------------------------------------------------------
|
||||
// DebuggerProfileConfigWidget:
|
||||
// DebuggerKitConfigWidget:
|
||||
// -----------------------------------------------------------------------
|
||||
|
||||
DebuggerProfileConfigWidget::DebuggerProfileConfigWidget(ProjectExplorer::Profile *p,
|
||||
const DebuggerProfileInformation *pi,
|
||||
DebuggerKitConfigWidget::DebuggerKitConfigWidget(ProjectExplorer::Kit *k,
|
||||
const DebuggerKitInformation *ki,
|
||||
QWidget *parent) :
|
||||
ProjectExplorer::ProfileConfigWidget(parent),
|
||||
m_profile(p),
|
||||
m_info(pi),
|
||||
ProjectExplorer::KitConfigWidget(parent),
|
||||
m_kit(k),
|
||||
m_info(ki),
|
||||
m_chooser(new Utils::PathChooser)
|
||||
{
|
||||
setToolTip(tr("The debugger to use for this target."));
|
||||
setToolTip(tr("The debugger to use for this kit."));
|
||||
|
||||
QVBoxLayout *layout = new QVBoxLayout(this);
|
||||
layout->setMargin(0);
|
||||
|
||||
ProjectExplorer::ToolChain *tc = ProjectExplorer::ToolChainProfileInformation::toolChain(p);
|
||||
ProjectExplorer::ToolChain *tc = ProjectExplorer::ToolChainKitInformation::toolChain(k);
|
||||
if (tc && tc->targetAbi().os() == ProjectExplorer::Abi::WindowsOS
|
||||
&& tc->targetAbi().osFlavor() != ProjectExplorer::Abi::WindowsMSysFlavor) {
|
||||
QLabel *msvcDebuggerConfigLabel = new QLabel;
|
||||
@@ -104,43 +104,42 @@ DebuggerProfileConfigWidget::DebuggerProfileConfigWidget(ProjectExplorer::Profil
|
||||
connect(m_chooser, SIGNAL(changed(QString)), this, SIGNAL(dirty()));
|
||||
}
|
||||
|
||||
QString DebuggerProfileConfigWidget::displayName() const
|
||||
QString DebuggerKitConfigWidget::displayName() const
|
||||
{
|
||||
return tr("Debugger:");
|
||||
}
|
||||
|
||||
void DebuggerProfileConfigWidget::makeReadOnly()
|
||||
void DebuggerKitConfigWidget::makeReadOnly()
|
||||
{
|
||||
m_chooser->setEnabled(false);
|
||||
}
|
||||
|
||||
void DebuggerProfileConfigWidget::apply()
|
||||
void DebuggerKitConfigWidget::apply()
|
||||
{
|
||||
Utils::FileName fn = m_chooser->fileName();
|
||||
DebuggerProfileInformation::setDebuggerCommand(m_profile, fn);
|
||||
DebuggerKitInformation::setDebuggerCommand(m_kit, fn);
|
||||
}
|
||||
|
||||
void DebuggerProfileConfigWidget::discard()
|
||||
void DebuggerKitConfigWidget::discard()
|
||||
{
|
||||
m_chooser->setFileName(DebuggerProfileInformation::debuggerCommand(m_profile));
|
||||
m_chooser->setFileName(DebuggerKitInformation::debuggerCommand(m_kit));
|
||||
}
|
||||
|
||||
bool DebuggerProfileConfigWidget::isDirty() const
|
||||
bool DebuggerKitConfigWidget::isDirty() const
|
||||
{
|
||||
return m_chooser->fileName() != DebuggerProfileInformation::debuggerCommand(m_profile);
|
||||
return m_chooser->fileName() != DebuggerKitInformation::debuggerCommand(m_kit);
|
||||
}
|
||||
|
||||
QWidget *DebuggerProfileConfigWidget::buttonWidget() const
|
||||
QWidget *DebuggerKitConfigWidget::buttonWidget() const
|
||||
{
|
||||
return m_chooser->buttonAtIndex(1);
|
||||
}
|
||||
|
||||
void DebuggerProfileConfigWidget::autoDetectDebugger()
|
||||
void DebuggerKitConfigWidget::autoDetectDebugger()
|
||||
{
|
||||
QVariant v = m_info->defaultValue(m_profile);
|
||||
QVariant v = m_info->defaultValue(m_kit);
|
||||
m_chooser->setFileName(Utils::FileName::fromString(v.toString()));
|
||||
}
|
||||
|
||||
} // namespace Internal
|
||||
|
||||
} // namespace Debugger
|
@@ -28,32 +28,32 @@
|
||||
**
|
||||
**************************************************************************/
|
||||
|
||||
#ifndef DEBUGGER_DEBUGGERPROFILECONFIGWIDGET_H
|
||||
#define DEBUGGER_DEBUGGERPROFILECONFIGWIDGET_H
|
||||
#ifndef DEBUGGER_DEBUGGERKITCONFIGWIDGET_H
|
||||
#define DEBUGGER_DEBUGGERKITCONFIGWIDGET_H
|
||||
|
||||
#include <projectexplorer/profileconfigwidget.h>
|
||||
#include <projectexplorer/kitconfigwidget.h>
|
||||
|
||||
#include <QLabel>
|
||||
#include <debuggerprofileinformation.h>
|
||||
#include <debuggerkitinformation.h>
|
||||
|
||||
namespace ProjectExplorer { class Profile; }
|
||||
namespace ProjectExplorer { class Kit; }
|
||||
namespace Utils { class PathChooser; }
|
||||
|
||||
namespace Debugger {
|
||||
class DebuggerProfileInformation;
|
||||
class DebuggerKitInformation;
|
||||
|
||||
namespace Internal {
|
||||
// -----------------------------------------------------------------------
|
||||
// DebuggerProfileConfigWidget:
|
||||
// DebuggerKitConfigWidget:
|
||||
// -----------------------------------------------------------------------
|
||||
|
||||
class DebuggerProfileConfigWidget : public ProjectExplorer::ProfileConfigWidget
|
||||
class DebuggerKitConfigWidget : public ProjectExplorer::KitConfigWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
DebuggerProfileConfigWidget(ProjectExplorer::Profile *p,
|
||||
const DebuggerProfileInformation *pi,
|
||||
DebuggerKitConfigWidget(ProjectExplorer::Kit *p,
|
||||
const DebuggerKitInformation *ki,
|
||||
QWidget *parent = 0);
|
||||
|
||||
QString displayName() const;
|
||||
@@ -69,12 +69,12 @@ private slots:
|
||||
void autoDetectDebugger();
|
||||
|
||||
private:
|
||||
ProjectExplorer::Profile *m_profile;
|
||||
const DebuggerProfileInformation *m_info;
|
||||
ProjectExplorer::Kit *m_kit;
|
||||
const DebuggerKitInformation *m_info;
|
||||
Utils::PathChooser *m_chooser;
|
||||
};
|
||||
|
||||
} // namespace Internal
|
||||
} // namespace Debugger
|
||||
|
||||
#endif // DEBUGGER_DEBUGGERPROFILEINFORMATION_H
|
||||
#endif // DEBUGGER_DEBUGGERKITINFORMATION_H
|
@@ -28,9 +28,9 @@
|
||||
**
|
||||
**************************************************************************/
|
||||
|
||||
#include "debuggerprofileinformation.h"
|
||||
#include "debuggerkitinformation.h"
|
||||
|
||||
#include "debuggerprofileconfigwidget.h"
|
||||
#include "debuggerkitconfigwidget.h"
|
||||
|
||||
#include <projectexplorer/abi.h>
|
||||
#include <projectexplorer/projectexplorerconstants.h>
|
||||
@@ -115,30 +115,30 @@ static QPair<QString, QString> autoDetectCdbDebugger()
|
||||
namespace Debugger {
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
// DebuggerProfileInformation:
|
||||
// DebuggerKitInformation:
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
static const char DEBUGGER_INFORMATION[] = "Debugger.Information";
|
||||
|
||||
DebuggerProfileInformation::DebuggerProfileInformation()
|
||||
DebuggerKitInformation::DebuggerKitInformation()
|
||||
{
|
||||
setObjectName(QLatin1String("DebuggerProfileInformation"));
|
||||
setObjectName(QLatin1String("DebuggerKitInformation"));
|
||||
}
|
||||
|
||||
Core::Id DebuggerProfileInformation::dataId() const
|
||||
Core::Id DebuggerKitInformation::dataId() const
|
||||
{
|
||||
static Core::Id id = Core::Id(DEBUGGER_INFORMATION);
|
||||
return id;
|
||||
}
|
||||
|
||||
unsigned int DebuggerProfileInformation::priority() const
|
||||
unsigned int DebuggerKitInformation::priority() const
|
||||
{
|
||||
return 28000;
|
||||
}
|
||||
|
||||
QVariant DebuggerProfileInformation::defaultValue(Profile *p) const
|
||||
QVariant DebuggerKitInformation::defaultValue(Kit *k) const
|
||||
{
|
||||
ToolChain *tc = ToolChainProfileInformation::toolChain(p);
|
||||
ToolChain *tc = ToolChainKitInformation::toolChain(k);
|
||||
Abi abi = Abi::hostAbi();
|
||||
if (tc)
|
||||
abi = tc->targetAbi();
|
||||
@@ -166,11 +166,11 @@ QVariant DebuggerProfileInformation::defaultValue(Profile *p) const
|
||||
return env.searchInPath(debugger);
|
||||
}
|
||||
|
||||
QList<Task> DebuggerProfileInformation::validate(Profile *p) const
|
||||
QList<Task> DebuggerKitInformation::validate(Kit *k) const
|
||||
{
|
||||
const Core::Id id(Constants::TASK_CATEGORY_BUILDSYSTEM);
|
||||
QList<Task> result;
|
||||
FileName dbg = debuggerCommand(p);
|
||||
FileName dbg = debuggerCommand(k);
|
||||
if (dbg.isEmpty()) {
|
||||
result << Task(Task::Warning, tr("No debugger set up."), FileName(), -1, id);
|
||||
return result;
|
||||
@@ -182,7 +182,7 @@ QList<Task> DebuggerProfileInformation::validate(Profile *p) const
|
||||
else if (!fi.isExecutable())
|
||||
result << Task(Task::Error, tr("Debugger not exectutable."), FileName(), -1, id);
|
||||
|
||||
if (ToolChain *tc = ToolChainProfileInformation::toolChain(p)) {
|
||||
if (ToolChain *tc = ToolChainKitInformation::toolChain(k)) {
|
||||
// We need an absolute path to be able to locate Python on Windows.
|
||||
const Abi abi = tc->targetAbi();
|
||||
if (abi.os() == Abi::WindowsOS && !fi.isAbsolute()) {
|
||||
@@ -202,25 +202,25 @@ QList<Task> DebuggerProfileInformation::validate(Profile *p) const
|
||||
return result;
|
||||
}
|
||||
|
||||
ProfileConfigWidget *DebuggerProfileInformation::createConfigWidget(Profile *p) const
|
||||
KitConfigWidget *DebuggerKitInformation::createConfigWidget(Kit *k) const
|
||||
{
|
||||
return new Internal::DebuggerProfileConfigWidget(p, this);
|
||||
return new Internal::DebuggerKitConfigWidget(k, this);
|
||||
}
|
||||
|
||||
ProfileInformation::ItemList DebuggerProfileInformation::toUserOutput(Profile *p) const
|
||||
KitInformation::ItemList DebuggerKitInformation::toUserOutput(Kit *k) const
|
||||
{
|
||||
return ItemList() << qMakePair(tr("Debugger"), debuggerCommand(p).toUserOutput());
|
||||
return ItemList() << qMakePair(tr("Debugger"), debuggerCommand(k).toUserOutput());
|
||||
}
|
||||
|
||||
FileName DebuggerProfileInformation::debuggerCommand(const Profile *p)
|
||||
FileName DebuggerKitInformation::debuggerCommand(const Kit *k)
|
||||
{
|
||||
return FileName::fromString(p ? p->value(Core::Id(DEBUGGER_INFORMATION)).toString() : QString());
|
||||
return FileName::fromString(k ? k->value(Core::Id(DEBUGGER_INFORMATION)).toString() : QString());
|
||||
}
|
||||
|
||||
void DebuggerProfileInformation::setDebuggerCommand(Profile *p, const FileName &command)
|
||||
void DebuggerKitInformation::setDebuggerCommand(Kit *k, const FileName &command)
|
||||
{
|
||||
QTC_ASSERT(p, return);
|
||||
p->setValue(Core::Id(DEBUGGER_INFORMATION), command.toString());
|
||||
QTC_ASSERT(k, return);
|
||||
k->setValue(Core::Id(DEBUGGER_INFORMATION), command.toString());
|
||||
}
|
||||
|
||||
} // namespace Debugger
|
@@ -28,38 +28,38 @@
|
||||
**
|
||||
**************************************************************************/
|
||||
|
||||
#ifndef DEBUGGER_DEBUGGERPROFILEINFORMATION_H
|
||||
#define DEBUGGER_DEBUGGERPROFILEINFORMATION_H
|
||||
#ifndef DEBUGGER_DEBUGGERKITINFORMATION_H
|
||||
#define DEBUGGER_DEBUGGERKITINFORMATION_H
|
||||
|
||||
#include "debugger_global.h"
|
||||
|
||||
#include <projectexplorer/profileinformation.h>
|
||||
#include <projectexplorer/kitinformation.h>
|
||||
|
||||
namespace Debugger {
|
||||
|
||||
class DEBUGGER_EXPORT DebuggerProfileInformation : public ProjectExplorer::ProfileInformation
|
||||
class DEBUGGER_EXPORT DebuggerKitInformation : public ProjectExplorer::KitInformation
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
DebuggerProfileInformation();
|
||||
DebuggerKitInformation();
|
||||
|
||||
Core::Id dataId() const;
|
||||
|
||||
unsigned int priority() const; // the higher the closer to the top.
|
||||
|
||||
QVariant defaultValue(ProjectExplorer::Profile *p) const;
|
||||
QVariant defaultValue(ProjectExplorer::Kit *k) const;
|
||||
|
||||
QList<ProjectExplorer::Task> validate(ProjectExplorer::Profile *p) const;
|
||||
QList<ProjectExplorer::Task> validate(ProjectExplorer::Kit *k) const;
|
||||
|
||||
ProjectExplorer::ProfileConfigWidget *createConfigWidget(ProjectExplorer::Profile *p) const;
|
||||
ProjectExplorer::KitConfigWidget *createConfigWidget(ProjectExplorer::Kit *k) const;
|
||||
|
||||
ItemList toUserOutput(ProjectExplorer::Profile *p) const;
|
||||
ItemList toUserOutput(ProjectExplorer::Kit *k) const;
|
||||
|
||||
static Utils::FileName debuggerCommand(const ProjectExplorer::Profile *p);
|
||||
static void setDebuggerCommand(ProjectExplorer::Profile *p, const Utils::FileName &command);
|
||||
static Utils::FileName debuggerCommand(const ProjectExplorer::Kit *k);
|
||||
static void setDebuggerCommand(ProjectExplorer::Kit *k, const Utils::FileName &command);
|
||||
};
|
||||
|
||||
} // namespace Debugger
|
||||
|
||||
#endif // DEBUGGER_DEBUGGERPROFILEINFORMATION_H
|
||||
#endif // DEBUGGER_DEBUGGERKITINFORMATION_H
|
@@ -41,7 +41,7 @@
|
||||
#include "debuggerrunner.h"
|
||||
#include "debuggerruncontrolfactory.h"
|
||||
#include "debuggerstringutils.h"
|
||||
#include "debuggerprofileinformation.h"
|
||||
#include "debuggerkitinformation.h"
|
||||
#include "memoryagent.h"
|
||||
#include "breakpoint.h"
|
||||
#include "breakhandler.h"
|
||||
@@ -101,9 +101,9 @@
|
||||
#include <projectexplorer/projectexplorersettings.h>
|
||||
#include <projectexplorer/project.h>
|
||||
#include <projectexplorer/session.h>
|
||||
#include <projectexplorer/profilechooser.h>
|
||||
#include <projectexplorer/profileinformation.h>
|
||||
#include <projectexplorer/profilemanager.h>
|
||||
#include <projectexplorer/kitchooser.h>
|
||||
#include <projectexplorer/kitinformation.h>
|
||||
#include <projectexplorer/kitmanager.h>
|
||||
#include <projectexplorer/target.h>
|
||||
#include <projectexplorer/toolchain.h>
|
||||
#include <projectexplorer/toolchainmanager.h>
|
||||
@@ -562,13 +562,13 @@ static inline QString executableForPid(qint64 pid)
|
||||
return QString();
|
||||
}
|
||||
|
||||
class AbiProfileMatcher : public ProfileMatcher
|
||||
class AbiKitMatcher : public KitMatcher
|
||||
{
|
||||
public:
|
||||
explicit AbiProfileMatcher(const QList<Abi> &abis) : m_abis(abis) {}
|
||||
bool matches(const Profile *p) const
|
||||
explicit AbiKitMatcher(const QList<Abi> &abis) : m_abis(abis) {}
|
||||
bool matches(const Kit *p) const
|
||||
{
|
||||
if (const ToolChain *tc = ToolChainProfileInformation::toolChain(p))
|
||||
if (const ToolChain *tc = ToolChainKitInformation::toolChain(p))
|
||||
return m_abis.contains(tc->targetAbi());
|
||||
return false;
|
||||
}
|
||||
@@ -577,13 +577,13 @@ private:
|
||||
const QList<Abi> m_abis;
|
||||
};
|
||||
|
||||
class CompatibleAbiProfileMatcher : public ProfileMatcher
|
||||
class CompatibleAbiKitMatcher : public KitMatcher
|
||||
{
|
||||
public:
|
||||
explicit CompatibleAbiProfileMatcher(const QList<Abi> &abis) : m_abis(abis) {}
|
||||
bool matches(const Profile *p) const
|
||||
explicit CompatibleAbiKitMatcher(const QList<Abi> &abis) : m_abis(abis) {}
|
||||
bool matches(const Kit *p) const
|
||||
{
|
||||
if (const ToolChain *tc = ToolChainProfileInformation::toolChain(p))
|
||||
if (const ToolChain *tc = ToolChainKitInformation::toolChain(p))
|
||||
foreach (const Abi &a, m_abis)
|
||||
if (a.isCompatibleWith(tc->targetAbi()))
|
||||
return true;
|
||||
@@ -594,14 +594,14 @@ private:
|
||||
const QList<Abi> m_abis;
|
||||
};
|
||||
|
||||
class CdbMatcher : ProfileMatcher
|
||||
class CdbMatcher : KitMatcher
|
||||
{
|
||||
public:
|
||||
CdbMatcher(char wordWidth = 0) : m_wordWidth(wordWidth) {}
|
||||
|
||||
bool matches(const Profile *profile) const
|
||||
bool matches(const Kit *k) const
|
||||
{
|
||||
const ToolChain *tc = ToolChainProfileInformation::toolChain(profile);
|
||||
const ToolChain *tc = ToolChainKitInformation::toolChain(k);
|
||||
QTC_ASSERT(tc, return false);
|
||||
const Abi abi = tc->targetAbi();
|
||||
if (abi.architecture() != Abi::X86Architecture
|
||||
@@ -616,58 +616,63 @@ public:
|
||||
return true;
|
||||
}
|
||||
|
||||
// Find a CDB profile for debugging unknown processes.
|
||||
// Find a CDB kit for debugging unknown processes.
|
||||
// On a 64bit OS, prefer a 64bit debugger.
|
||||
static Profile *findUniversalCdbProfile()
|
||||
static Kit *findUniversalCdbKit()
|
||||
{
|
||||
#ifdef Q_OS_WIN
|
||||
if (Utils::winIs64BitSystem()) {
|
||||
CdbMatcher matcher64(64);
|
||||
if (Profile *cdb64Profile = ProfileManager::instance()->find(&matcher64))
|
||||
return cdb64Profile;
|
||||
if (Kit *cdb64Kit = KitManager::instance()->find(&matcher64))
|
||||
return cdb64Kit;
|
||||
}
|
||||
#endif
|
||||
CdbMatcher matcher;
|
||||
return ProfileManager::instance()->find(&matcher);
|
||||
return KitManager::instance()->find(&matcher);
|
||||
}
|
||||
|
||||
private:
|
||||
const char m_wordWidth;
|
||||
};
|
||||
|
||||
void fillParameters(DebuggerStartParameters *sp, const Profile *profile /* = 0 */)
|
||||
void fillParameters(DebuggerStartParameters *sp, const Kit *kit /* = 0 */)
|
||||
{
|
||||
if (!profile) {
|
||||
// This code can only be reached when starting via the command
|
||||
// (-debug pid or executable) without specifying a profile.
|
||||
// Try to find a profile via ABI.
|
||||
if (!kit) {
|
||||
// This code can only be reached when starting via the command line
|
||||
// (-debug pid or executable) or attaching from runconfiguration
|
||||
// without specifying a kit. Try to find a kit via ABI.
|
||||
QList<Abi> abis;
|
||||
if (sp->toolChainAbi.isValid()) {
|
||||
abis.push_back(sp->toolChainAbi);
|
||||
} else {
|
||||
// Try via executable.
|
||||
if (sp->executable.isEmpty()
|
||||
&& (sp->startMode == AttachExternal || sp->startMode == AttachCrashedExternal)) {
|
||||
sp->executable = executableForPid(sp->attachPID);
|
||||
}
|
||||
if (!sp->executable.isEmpty()) {
|
||||
const QList<Abi> abis = Abi::abisOfBinary(Utils::FileName::fromString(sp->executable));
|
||||
if (!sp->executable.isEmpty())
|
||||
abis = Abi::abisOfBinary(Utils::FileName::fromString(sp->executable));
|
||||
}
|
||||
if (!abis.isEmpty()) {
|
||||
AbiProfileMatcher matcher(abis);
|
||||
profile = ProfileManager::instance()->find(&matcher);
|
||||
if (!profile) {
|
||||
CompatibleAbiProfileMatcher matcher(abis);
|
||||
profile = ProfileManager::instance()->find(&matcher);
|
||||
AbiKitMatcher matcher(abis);
|
||||
kit = KitManager::instance()->find(&matcher);
|
||||
if (!kit) {
|
||||
CompatibleAbiKitMatcher matcher(abis);
|
||||
kit = KitManager::instance()->find(&matcher);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!profile)
|
||||
profile = ProfileManager::instance()->defaultProfile();
|
||||
if (!kit)
|
||||
kit = KitManager::instance()->defaultKit();
|
||||
}
|
||||
|
||||
sp->sysRoot = SysRootProfileInformation::sysRoot(profile).toString();
|
||||
sp->debuggerCommand = DebuggerProfileInformation::debuggerCommand(profile).toString();
|
||||
sp->sysRoot = SysRootKitInformation::sysRoot(kit).toString();
|
||||
sp->debuggerCommand = DebuggerKitInformation::debuggerCommand(kit).toString();
|
||||
|
||||
ToolChain *tc = ToolChainProfileInformation::toolChain(profile);
|
||||
ToolChain *tc = ToolChainKitInformation::toolChain(kit);
|
||||
if (tc)
|
||||
sp->toolChainAbi = tc->targetAbi();
|
||||
|
||||
IDevice::ConstPtr device = DeviceProfileInformation::device(profile);
|
||||
IDevice::ConstPtr device = DeviceKitInformation::device(kit);
|
||||
if (device) {
|
||||
sp->connParams = device->sshParameters();
|
||||
sp->remoteChannel = sp->connParams.host + QLatin1Char(':') + QString::number(sp->connParams.port);
|
||||
@@ -1384,14 +1389,14 @@ bool DebuggerPluginPrivate::parseArgument(QStringList::const_iterator &it,
|
||||
{
|
||||
const QString &option = *it;
|
||||
// '-debug <pid>'
|
||||
// '-debug <exe>[,server=<server:port>][,core=<core>][,profile=<profile>]'
|
||||
// '-debug <exe>[,server=<server:port>][,core=<core>][,kit=<kit>]'
|
||||
if (*it == _("-debug")) {
|
||||
++it;
|
||||
if (it == cend) {
|
||||
*errorMessage = msgParameterMissing(*it);
|
||||
return false;
|
||||
}
|
||||
Profile *profile = 0;
|
||||
Kit *kit = 0;
|
||||
DebuggerStartParameters sp;
|
||||
qulonglong pid = it->toULongLong();
|
||||
if (pid) {
|
||||
@@ -1429,12 +1434,12 @@ bool DebuggerPluginPrivate::parseArgument(QStringList::const_iterator &it,
|
||||
sp.displayName = tr("Core file \"%1\"").arg(sp.coreFile);
|
||||
sp.startMessage = tr("Attaching to core file %1.").arg(sp.coreFile);
|
||||
}
|
||||
else if (key == QLatin1String("profile")) {
|
||||
profile = ProfileManager::instance()->find(Id(val));
|
||||
else if (key == QLatin1String("kit")) {
|
||||
kit = KitManager::instance()->find(Id(val));
|
||||
}
|
||||
}
|
||||
}
|
||||
fillParameters(&sp, profile);
|
||||
fillParameters(&sp, kit);
|
||||
if (sp.startMode == StartExternal) {
|
||||
sp.displayName = tr("Executable file \"%1\"").arg(sp.executable);
|
||||
sp.startMessage = tr("Debugging file %1.").arg(sp.executable);
|
||||
@@ -1454,7 +1459,7 @@ bool DebuggerPluginPrivate::parseArgument(QStringList::const_iterator &it,
|
||||
return false;
|
||||
}
|
||||
DebuggerStartParameters sp;
|
||||
fillParameters(&sp, CdbMatcher::findUniversalCdbProfile());
|
||||
fillParameters(&sp, CdbMatcher::findUniversalCdbKit());
|
||||
sp.startMode = AttachCrashedExternal;
|
||||
sp.crashParameter = it->section(QLatin1Char(':'), 0, 0);
|
||||
sp.attachPID = it->section(QLatin1Char(':'), 1, 1).toULongLong();
|
||||
@@ -1575,7 +1580,7 @@ void DebuggerPluginPrivate::attachCore()
|
||||
{
|
||||
AttachCoreDialog dlg(mainWindow());
|
||||
|
||||
dlg.setProfileId(Id(configValue(_("LastExternalProfile")).toString()));
|
||||
dlg.setKitId(Id(configValue(_("LastExternalProfile")).toString()));
|
||||
dlg.setLocalExecutableFile(configValue(_("LastExternalExecutableFile")).toString());
|
||||
dlg.setLocalCoreFile(configValue(_("LastLocalCoreFile")).toString());
|
||||
dlg.setRemoteCoreFile(configValue(_("LastRemoteCoreFile")).toString());
|
||||
@@ -1587,12 +1592,12 @@ void DebuggerPluginPrivate::attachCore()
|
||||
setConfigValue(_("LastExternalExecutableFile"), dlg.localExecutableFile());
|
||||
setConfigValue(_("LastLocalCoreFile"), dlg.localCoreFile());
|
||||
setConfigValue(_("LastRemoteCoreFile"), dlg.remoteCoreFile());
|
||||
setConfigValue(_("LastExternalProfile"), dlg.profile()->id().toString());
|
||||
setConfigValue(_("LastExternalProfile"), dlg.kit()->id().toString());
|
||||
setConfigValue(_("LastExternalStartScript"), dlg.overrideStartScript());
|
||||
|
||||
DebuggerStartParameters sp;
|
||||
QString display = dlg.isLocal() ? dlg.localCoreFile() : dlg.remoteCoreFile();
|
||||
fillParameters(&sp, dlg.profile());
|
||||
fillParameters(&sp, dlg.kit());
|
||||
sp.masterEngineType = GdbEngineType;
|
||||
sp.executable = dlg.localExecutableFile();
|
||||
sp.coreFile = dlg.localCoreFile();
|
||||
@@ -1607,9 +1612,9 @@ void DebuggerPluginPrivate::startRemoteCdbSession()
|
||||
{
|
||||
const QString connectionKey = _("CdbRemoteConnection");
|
||||
DebuggerStartParameters sp;
|
||||
Profile *profile = CdbMatcher::findUniversalCdbProfile();
|
||||
QTC_ASSERT(profile, return);
|
||||
fillParameters(&sp, profile);
|
||||
Kit *kit = CdbMatcher::findUniversalCdbKit();
|
||||
QTC_ASSERT(kit, return);
|
||||
fillParameters(&sp, kit);
|
||||
sp.startMode = AttachToRemoteServer;
|
||||
sp.closeMode = KillAtClose;
|
||||
StartRemoteCdbDialog dlg(mainWindow());
|
||||
@@ -1656,10 +1661,10 @@ void DebuggerPluginPrivate::attachToProcess(bool startServerOnly)
|
||||
}
|
||||
|
||||
dlg->setAttribute(Qt::WA_DeleteOnClose);
|
||||
ProfileChooser *profileChooser = dlg->profileChooser();
|
||||
Profile *profile = profileChooser->currentProfile();
|
||||
QTC_ASSERT(profile, return);
|
||||
IDevice::ConstPtr device = DeviceProfileInformation::device(profile);
|
||||
KitChooser *kitChooser = dlg->kitChooser();
|
||||
Kit *kit = kitChooser->currentKit();
|
||||
QTC_ASSERT(kit, return);
|
||||
IDevice::ConstPtr device = DeviceKitInformation::device(kit);
|
||||
QTC_ASSERT(device, return);
|
||||
DeviceProcess process = dlg->currentProcess();
|
||||
if (process.pid == 0) {
|
||||
@@ -1679,7 +1684,7 @@ void DebuggerPluginPrivate::attachToProcess(bool startServerOnly)
|
||||
|
||||
if (device->type() == ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE) {
|
||||
DebuggerStartParameters sp;
|
||||
fillParameters(&sp, profile);
|
||||
fillParameters(&sp, kit);
|
||||
sp.attachPID = process.pid;
|
||||
sp.displayName = tr("Process %1").arg(process.pid);
|
||||
sp.executable = process.exe;
|
||||
@@ -1695,12 +1700,16 @@ void DebuggerPluginPrivate::attachToProcess(bool startServerOnly)
|
||||
void DebuggerPluginPrivate::attachExternalApplication(ProjectExplorer::RunControl *rc)
|
||||
{
|
||||
DebuggerStartParameters sp;
|
||||
fillParameters(&sp);
|
||||
sp.attachPID = rc->applicationProcessHandle().pid();
|
||||
sp.displayName = tr("Process %1").arg(sp.attachPID);
|
||||
sp.startMode = AttachExternal;
|
||||
sp.closeMode = DetachAtClose;
|
||||
sp.toolChainAbi = rc->abi();
|
||||
Kit *kit = 0;
|
||||
if (const RunConfiguration *runConfiguration = rc->runConfiguration())
|
||||
if (const Target *target = runConfiguration->target())
|
||||
kit = target->kit();
|
||||
fillParameters(&sp, kit);
|
||||
DebuggerRunControlFactory::createAndScheduleRun(sp);
|
||||
}
|
||||
|
||||
@@ -1715,19 +1724,19 @@ void DebuggerPluginPrivate::attachToQmlPort()
|
||||
else
|
||||
dlg.setPort(sp.qmlServerPort);
|
||||
|
||||
const QVariant profileId = configValue(_("LastProfile"));
|
||||
if (profileId.isValid())
|
||||
dlg.setProfileId(Id(profileId.toString()));
|
||||
const QVariant kitId = configValue(_("LastProfile"));
|
||||
if (kitId.isValid())
|
||||
dlg.setKitId(Id(kitId.toString()));
|
||||
|
||||
if (dlg.exec() != QDialog::Accepted)
|
||||
return;
|
||||
|
||||
Profile *profile = dlg.profile();
|
||||
QTC_ASSERT(profile, return);
|
||||
Kit *kit = dlg.kit();
|
||||
QTC_ASSERT(kit, return);
|
||||
setConfigValue(_("LastQmlServerPort"), dlg.port());
|
||||
setConfigValue(_("LastProfile"), profile->id().toString());
|
||||
setConfigValue(_("LastProfile"), kit->id().toString());
|
||||
|
||||
fillParameters(&sp, profile);
|
||||
fillParameters(&sp, kit);
|
||||
sp.qmlServerAddress = sp.connParams.host;
|
||||
sp.qmlServerPort = dlg.port();
|
||||
sp.startMode = AttachToRemoteProcess;
|
||||
@@ -3361,7 +3370,7 @@ bool DebuggerPlugin::initialize(const QStringList &arguments, QString *errorMess
|
||||
mstart->addSeparator(globalcontext, Constants::G_GENERAL);
|
||||
mstart->addSeparator(globalcontext, Constants::G_SPECIAL);
|
||||
|
||||
ProfileManager::instance()->registerProfileInformation(new DebuggerProfileInformation);
|
||||
KitManager::instance()->registerKitInformation(new DebuggerKitInformation);
|
||||
|
||||
return theDebuggerCore->initialize(arguments, errorMessage);
|
||||
}
|
||||
@@ -3455,12 +3464,12 @@ static Target *activeTarget()
|
||||
return project->activeTarget();
|
||||
}
|
||||
|
||||
static Profile *currentProfile()
|
||||
static Kit *currentKit()
|
||||
{
|
||||
Target *t = activeTarget();
|
||||
if (!t || !t->isEnabled())
|
||||
return 0;
|
||||
return activeTarget()->profile();
|
||||
return activeTarget()->kit();
|
||||
}
|
||||
|
||||
static LocalApplicationRunConfiguration *activeLocalRunConfiguration()
|
||||
@@ -3508,7 +3517,7 @@ void DebuggerPluginPrivate::testPythonDumpers1()
|
||||
void DebuggerPluginPrivate::testPythonDumpers2()
|
||||
{
|
||||
DebuggerStartParameters sp;
|
||||
fillParameters(&sp, currentProfile());
|
||||
fillParameters(&sp, currentKit());
|
||||
sp.executable = activeLocalRunConfiguration()->executable();
|
||||
testRunProject(sp, TestCallBack(this, "testPythonDumpers3"));
|
||||
}
|
||||
@@ -3540,7 +3549,7 @@ void DebuggerPluginPrivate::testStateMachine1()
|
||||
void DebuggerPluginPrivate::testStateMachine2()
|
||||
{
|
||||
DebuggerStartParameters sp;
|
||||
fillParameters(&sp, currentProfile());
|
||||
fillParameters(&sp, currentKit());
|
||||
sp.executable = activeLocalRunConfiguration()->executable();
|
||||
sp.testCase = TestNoBoundsOfCurrentFunction;
|
||||
testRunProject(sp, TestCallBack(this, "testStateMachine3"));
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user