Merge remote-tracking branch 'origin/3.0'
Conflicts: src/plugins/qmakeprojectmanager/qmakeproject.cpp Change-Id: Id6ac9051d2564788bb180e5a99243d588312ae99
103
doc/examples/accelbubble/main.qml
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (c) 2013 Digia Plc and/or its subsidiary(-ies).
|
||||||
|
** Contact: http://www.qt-project.org/legal
|
||||||
|
**
|
||||||
|
** This file is part of Qt Creator
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** GNU Free Documentation License
|
||||||
|
**
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU Free
|
||||||
|
** Documentation License version 1.3 as published by the Free Software
|
||||||
|
** Foundation and appearing in the file included in the packaging of this
|
||||||
|
** file.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
// **********************************************************************
|
||||||
|
// NOTE: the sections are not ordered by their logical order to avoid
|
||||||
|
// reshuffling the file each time the index order changes (i.e., often).
|
||||||
|
// Run the fixnavi.pl script to adjust the links to the index order.
|
||||||
|
// **********************************************************************
|
||||||
|
|
||||||
|
import QtQuick 2.1
|
||||||
|
import QtQuick.Controls 1.0
|
||||||
|
|
||||||
|
import QtSensors 5.0
|
||||||
|
|
||||||
|
ApplicationWindow {
|
||||||
|
title: qsTr("Accelerate Bubble")
|
||||||
|
id: mainWindow
|
||||||
|
width: 640
|
||||||
|
height: 480
|
||||||
|
visible: true
|
||||||
|
|
||||||
|
Accelerometer {
|
||||||
|
id: accel
|
||||||
|
dataRate: 100
|
||||||
|
active:true
|
||||||
|
|
||||||
|
onReadingChanged: {
|
||||||
|
var newX = (bubble.x + calcRoll(accel.reading.x, accel.reading.y, accel.reading.z) * 0.1)
|
||||||
|
var newY = (bubble.y - calcPitch(accel.reading.x, accel.reading.y, accel.reading.z) * 0.1)
|
||||||
|
|
||||||
|
if (newX < 0)
|
||||||
|
newX = 0
|
||||||
|
|
||||||
|
if (newX > mainWindow.width - bubble.width)
|
||||||
|
newX = mainWindow.width - bubble.width
|
||||||
|
|
||||||
|
if (newY < 18)
|
||||||
|
newY = 18
|
||||||
|
|
||||||
|
if (newY > mainWindow.height - bubble.height)
|
||||||
|
newY = mainWindow.height - bubble.height
|
||||||
|
|
||||||
|
bubble.x = newX
|
||||||
|
bubble.y = newY
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function calcPitch(x, y, z) {
|
||||||
|
return -(Math.atan(y / Math.sqrt(x * x + z * z)) * 57.2957795);
|
||||||
|
}
|
||||||
|
function calcRoll(x, y, z) {
|
||||||
|
return -(Math.atan(x / Math.sqrt(y * y + z * z)) * 57.2957795);
|
||||||
|
}
|
||||||
|
|
||||||
|
Image {
|
||||||
|
id: bubble
|
||||||
|
source: "Bluebubble.svg"
|
||||||
|
smooth: true
|
||||||
|
property real centerX: mainWindow.width / 2
|
||||||
|
property real centerY: mainWindow.height / 2
|
||||||
|
property real bubbleCenter: bubble.width / 2
|
||||||
|
x: centerX - bubbleCenter
|
||||||
|
y: centerY - bubbleCenter
|
||||||
|
|
||||||
|
Behavior on y {
|
||||||
|
SmoothedAnimation {
|
||||||
|
easing.type: Easing.Linear
|
||||||
|
duration: 100
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Behavior on x {
|
||||||
|
SmoothedAnimation {
|
||||||
|
easing.type: Easing.Linear
|
||||||
|
duration: 100
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
MenuBar {
|
||||||
|
Menu {
|
||||||
|
title: qsTr("File")
|
||||||
|
MenuItem {
|
||||||
|
text: qsTr("Exit")
|
||||||
|
onTriggered: Qt.quit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Before Width: | Height: | Size: 7.0 KiB After Width: | Height: | Size: 7.0 KiB |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 5.9 KiB |
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 7.4 KiB |
|
Before Width: | Height: | Size: 6.7 KiB After Width: | Height: | Size: 5.4 KiB |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 4.0 KiB |
|
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 9.1 KiB After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 6.6 KiB |
BIN
doc/images/creator_publishing.png
Normal file
|
After Width: | Height: | Size: 5.8 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 6.5 KiB |
@@ -1,118 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
|
|
||||||
** Contact: http://www.qt-project.org/legal
|
|
||||||
**
|
|
||||||
** This file is part of the documentation of the Qt Toolkit.
|
|
||||||
**
|
|
||||||
** $QT_BEGIN_LICENSE:BSD$
|
|
||||||
** You may use this file under the terms of the BSD license as follows:
|
|
||||||
**
|
|
||||||
** "Redistribution and use in source and binary forms, with or without
|
|
||||||
** modification, are permitted provided that the following conditions are
|
|
||||||
** met:
|
|
||||||
** * Redistributions of source code must retain the above copyright
|
|
||||||
** notice, this list of conditions and the following disclaimer.
|
|
||||||
** * Redistributions in binary form must reproduce the above copyright
|
|
||||||
** notice, this list of conditions and the following disclaimer in
|
|
||||||
** the documentation and/or other materials provided with the
|
|
||||||
** distribution.
|
|
||||||
** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
|
|
||||||
** of its contributors may be used to endorse or promote products derived
|
|
||||||
** from this software without specific prior written permission.
|
|
||||||
**
|
|
||||||
**
|
|
||||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
|
||||||
**
|
|
||||||
** $QT_END_LICENSE$
|
|
||||||
**
|
|
||||||
****************************************************************************/
|
|
||||||
import QtQuick 2.1
|
|
||||||
import QtQuick.Controls 1.0
|
|
||||||
|
|
||||||
//! [sensorimport]
|
|
||||||
import QtSensors 5.0
|
|
||||||
//! [sensorimport]
|
|
||||||
|
|
||||||
|
|
||||||
ApplicationWindow {
|
|
||||||
title: "Accelerate Bubble"
|
|
||||||
id: mainWindow
|
|
||||||
width: 320
|
|
||||||
height: 480
|
|
||||||
visible: true
|
|
||||||
|
|
||||||
Accelerometer {
|
|
||||||
id: accel
|
|
||||||
dataRate: 100
|
|
||||||
active:true
|
|
||||||
|
|
||||||
|
|
||||||
//! [readingchanged]
|
|
||||||
onReadingChanged: {
|
|
||||||
var newX = (bubble.x + calcRoll(accel.reading.x, accel.reading.y, accel.reading.z) * 0.1)
|
|
||||||
var newY = (bubble.y - calcPitch(accel.reading.x, accel.reading.y, accel.reading.z) * 0.1)
|
|
||||||
|
|
||||||
if (newX < 0)
|
|
||||||
newX = 0
|
|
||||||
|
|
||||||
if (newX > mainWindow.width - bubble.width)
|
|
||||||
newX = mainWindow.width - bubble.width
|
|
||||||
|
|
||||||
if (newY < 18)
|
|
||||||
newY = 18
|
|
||||||
|
|
||||||
if (newY > mainWindow.height - bubble.height)
|
|
||||||
newY = mainWindow.height - bubble.height
|
|
||||||
|
|
||||||
bubble.x = newX
|
|
||||||
bubble.y = newY
|
|
||||||
}
|
|
||||||
//! [readingchanged]
|
|
||||||
}
|
|
||||||
|
|
||||||
//! [jsfunctions]
|
|
||||||
function calcPitch(x, y, z) {
|
|
||||||
return -(Math.atan(y / Math.sqrt(x * x + z * z)) * 57.2957795);
|
|
||||||
}
|
|
||||||
function calcRoll(x, y, z) {
|
|
||||||
return -(Math.atan(x / Math.sqrt(y * y + z * z)) * 57.2957795);
|
|
||||||
}
|
|
||||||
//! [jsfunctions]
|
|
||||||
|
|
||||||
Image {
|
|
||||||
id: bubble
|
|
||||||
source: "Bluebubble.svg"
|
|
||||||
smooth: true
|
|
||||||
property real centerX: mainWindow.width / 2
|
|
||||||
property real centerY: mainWindow.height / 2;
|
|
||||||
property real bubbleCenter: bubble.width / 2
|
|
||||||
x: centerX - bubbleCenter
|
|
||||||
y: centerY - bubbleCenter
|
|
||||||
|
|
||||||
//! [smoothedanim]
|
|
||||||
Behavior on y {
|
|
||||||
SmoothedAnimation {
|
|
||||||
easing.type: Easing.Linear
|
|
||||||
duration: 100
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Behavior on x {
|
|
||||||
SmoothedAnimation {
|
|
||||||
easing.type: Easing.Linear
|
|
||||||
duration: 100
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//! [smoothedanim]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
|
|
||||||
** Contact: http://www.qt-project.org/legal
|
|
||||||
**
|
|
||||||
** This file is part of the documentation of the Qt Toolkit.
|
|
||||||
**
|
|
||||||
** $QT_BEGIN_LICENSE:BSD$
|
|
||||||
** You may use this file under the terms of the BSD license as follows:
|
|
||||||
**
|
|
||||||
** "Redistribution and use in source and binary forms, with or without
|
|
||||||
** modification, are permitted provided that the following conditions are
|
|
||||||
** met:
|
|
||||||
** * Redistributions of source code must retain the above copyright
|
|
||||||
** notice, this list of conditions and the following disclaimer.
|
|
||||||
** * Redistributions in binary form must reproduce the above copyright
|
|
||||||
** notice, this list of conditions and the following disclaimer in
|
|
||||||
** the documentation and/or other materials provided with the
|
|
||||||
** distribution.
|
|
||||||
** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
|
|
||||||
** of its contributors may be used to endorse or promote products derived
|
|
||||||
** from this software without specific prior written permission.
|
|
||||||
**
|
|
||||||
**
|
|
||||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
|
||||||
**
|
|
||||||
** $QT_END_LICENSE$
|
|
||||||
**
|
|
||||||
****************************************************************************/
|
|
||||||
//! [initialcode]
|
|
||||||
import QtQuick 2.0
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
width: 100
|
|
||||||
height: 62
|
|
||||||
}
|
|
||||||
//! [initialcode]
|
|
||||||
@@ -1,62 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
|
|
||||||
** Contact: http://www.qt-project.org/legal
|
|
||||||
**
|
|
||||||
** This file is part of the documentation of the Qt Toolkit.
|
|
||||||
**
|
|
||||||
** $QT_BEGIN_LICENSE:BSD$
|
|
||||||
** You may use this file under the terms of the BSD license as follows:
|
|
||||||
**
|
|
||||||
** "Redistribution and use in source and binary forms, with or without
|
|
||||||
** modification, are permitted provided that the following conditions are
|
|
||||||
** met:
|
|
||||||
** * Redistributions of source code must retain the above copyright
|
|
||||||
** notice, this list of conditions and the following disclaimer.
|
|
||||||
** * Redistributions in binary form must reproduce the above copyright
|
|
||||||
** notice, this list of conditions and the following disclaimer in
|
|
||||||
** the documentation and/or other materials provided with the
|
|
||||||
** distribution.
|
|
||||||
** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
|
|
||||||
** of its contributors may be used to endorse or promote products derived
|
|
||||||
** from this software without specific prior written permission.
|
|
||||||
**
|
|
||||||
**
|
|
||||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
|
||||||
**
|
|
||||||
** $QT_END_LICENSE$
|
|
||||||
**
|
|
||||||
****************************************************************************/
|
|
||||||
//! [imports]
|
|
||||||
import QtQuick 2.1
|
|
||||||
import QtQuick.Controls 1.0
|
|
||||||
//! [imports]
|
|
||||||
|
|
||||||
ApplicationWindow {
|
|
||||||
title: "Accelerate Bubble"
|
|
||||||
id: mainWindow
|
|
||||||
width: 320
|
|
||||||
height: 480
|
|
||||||
visible: true
|
|
||||||
|
|
||||||
Image {
|
|
||||||
id: bubble
|
|
||||||
source: "Bluebubble.svg"
|
|
||||||
smooth: true
|
|
||||||
property real centerX: mainWindow.width / 2
|
|
||||||
property real centerY: mainWindow.height / 2
|
|
||||||
property real bubbleCenter: bubble.width / 2
|
|
||||||
x: centerX - bubbleCenter
|
|
||||||
y: centerY - bubbleCenter
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
RESOURCES += \
|
|
||||||
accelbubble.qrc
|
|
||||||
|
|
||||||
SOURCES += \
|
|
||||||
main.cpp
|
|
||||||
|
|
||||||
QT += quick sensors svg xml
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
|
|
||||||
** Contact: http://www.qt-project.org/legal
|
|
||||||
**
|
|
||||||
** This file is part of the documentation of the Qt Toolkit.
|
|
||||||
**
|
|
||||||
** $QT_BEGIN_LICENSE:BSD$
|
|
||||||
** You may use this file under the terms of the BSD license as follows:
|
|
||||||
**
|
|
||||||
** "Redistribution and use in source and binary forms, with or without
|
|
||||||
** modification, are permitted provided that the following conditions are
|
|
||||||
** met:
|
|
||||||
** * Redistributions of source code must retain the above copyright
|
|
||||||
** notice, this list of conditions and the following disclaimer.
|
|
||||||
** * Redistributions in binary form must reproduce the above copyright
|
|
||||||
** notice, this list of conditions and the following disclaimer in
|
|
||||||
** the documentation and/or other materials provided with the
|
|
||||||
** distribution.
|
|
||||||
** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
|
|
||||||
** of its contributors may be used to endorse or promote products derived
|
|
||||||
** from this software without specific prior written permission.
|
|
||||||
**
|
|
||||||
**
|
|
||||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
|
||||||
**
|
|
||||||
** $QT_END_LICENSE$
|
|
||||||
**
|
|
||||||
****************************************************************************/
|
|
||||||
#include <QtGui/QGuiApplication>
|
|
||||||
#include <QtQml/QQmlApplicationEngine>
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
QGuiApplication app(argc, argv);
|
|
||||||
QQmlApplicationEngine engine(QUrl("qrc:///accelbubble.qml"));
|
|
||||||
|
|
||||||
return app.exec();
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -41,20 +41,18 @@
|
|||||||
|
|
||||||
\section1 Creating the Project
|
\section1 Creating the Project
|
||||||
|
|
||||||
Let us start with creating an empty Qt project.
|
|
||||||
|
|
||||||
\list 1
|
\list 1
|
||||||
|
|
||||||
\li Select \gui{File > New File or Project > Other Project >
|
\li Select \gui File > \gui {New File or Project} > \gui Applications >
|
||||||
Empty Qt Project > Choose}.
|
\gui {Qt Quick 2 Application (Qt Quick Controls)} > \gui Choose.
|
||||||
|
|
||||||
\li In the \gui{Name} field, type \b{accelbubble}.
|
\li In the \gui{Name} field, type \b{accelbubble}.
|
||||||
|
|
||||||
\li In the \gui {Create in} field, enter the path for the project files.
|
\li In the \gui {Create in} field, enter the path for the project files.
|
||||||
For example, \c {C:\Qt\examples}, and then click \gui{Next} (on
|
For example, \c {C:\Qt\examples}, and then click \gui{Next} (or
|
||||||
Mac OS X, it is \gui Continue).
|
\gui Continue on Mac OS X).
|
||||||
|
|
||||||
\li Select an Android \l{glossary-buildandrun-kit}{kit} for arm,
|
\li Select an Android \l{glossary-buildandrun-kit}{kit} for ARM,
|
||||||
and click \gui{Next}.
|
and click \gui{Next}.
|
||||||
|
|
||||||
\note Kits are listed if they have been specified in \gui Tools >
|
\note Kits are listed if they have been specified in \gui Tools >
|
||||||
@@ -63,106 +61,73 @@
|
|||||||
\li Select \gui Next in the following dialogs to use the default
|
\li Select \gui Next in the following dialogs to use the default
|
||||||
settings.
|
settings.
|
||||||
|
|
||||||
\li Review the project settings, and click \gui{Finish} (on Mac OS X,
|
\li Review the project settings, and click \gui{Finish} (or \gui Done on
|
||||||
it is \gui Done).
|
Mac OS X).
|
||||||
|
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
\QC creates the project and displays its contents under the \gui Projects
|
\QC generates a default QML file that you can modify to create the main view
|
||||||
view on the sidebar. You can only see a .pro file under the project as we
|
of the application.
|
||||||
created an empty project, but the remaining bits will be added
|
|
||||||
during the course of this tutorial.
|
|
||||||
|
|
||||||
\section1 Creating the Main View
|
\section1 Creating the Main View
|
||||||
|
|
||||||
The main view of the application displays an SVG bubble image at the center
|
The main view of the application displays an SVG bubble image at the center
|
||||||
of the main window.
|
of the main window.
|
||||||
|
|
||||||
\list 1
|
To use the Bluebubble.svg used by the Qt Sensors example, Accel Bubble, in
|
||||||
|
your project, you must copy it to the project directory (same subdirectory
|
||||||
\li In the \gui Edit mode, right-click on the \b{accelbubble} project
|
as the QML file) from the examples directory in the Qt installation
|
||||||
and select \gui{Add new} to open the \gui{New File} dialog.
|
directory. For example:
|
||||||
|
\c {C:\Qt\Qt5.2.0\5.2.0\msvc2010\examples\sensors\accelbubble\content}.
|
||||||
\li Select \gui{Qt > QML File (Qt Quick 2)} and click \gui Choose to
|
The image appears in the \gui Resources pane. You can also use any other
|
||||||
give a name to the QML file.
|
image or a QML type, instead.
|
||||||
|
|
||||||
\li In the \gui Name field, type "accelbubble" and select \gui Next.
|
|
||||||
|
|
||||||
\li Select \gui Finish to add accelbubble.qml to the project.
|
|
||||||
\endlist
|
|
||||||
|
|
||||||
\QC adds a default QML file containing a Rectangle. Here is how the QML
|
|
||||||
file looks:
|
|
||||||
|
|
||||||
\snippet qml/tutorial_initialqml.qml initialcode
|
|
||||||
|
|
||||||
Now let us edit accelbubble.qml to add the bits required for our
|
|
||||||
application.
|
|
||||||
|
|
||||||
\list 1
|
\list 1
|
||||||
|
|
||||||
\li Replace the existing import statement with the following:
|
\li In the \gui Projects view, double-click the main.qml file
|
||||||
|
to open it in the code editor.
|
||||||
|
|
||||||
\snippet qml/tutorial_updatedmainview.qml imports
|
\li Modify the properties of the ApplicationWindow type to specify the
|
||||||
|
application name, give the ApplicationWindow an id, and to set it
|
||||||
|
visible, as illustrated by the following code snippet:
|
||||||
|
|
||||||
\li Replace the Rectangle type with ApplicationWindow, which
|
\quotefromfile accelbubble/main.qml
|
||||||
will be the top-level window for our application.
|
|
||||||
|
|
||||||
\li Set the \a id, \a title, \a visible, and the window dimension
|
|
||||||
properties (width and height) with the values given in the
|
|
||||||
following snippet:
|
|
||||||
|
|
||||||
\quotefromfile qml/tutorial_updatedmainview.qml
|
|
||||||
\skipto ApplicationWindow
|
\skipto ApplicationWindow
|
||||||
\printuntil true
|
\printuntil visible
|
||||||
|
\skipto /^\}/
|
||||||
|
\printuntil }
|
||||||
|
|
||||||
|
\li Click \gui Design to open the file in \QMLD.
|
||||||
|
|
||||||
|
\li In the \gui Navigator pane, select \gui Button and press \key Delete
|
||||||
|
to delete it.
|
||||||
|
|
||||||
|
\li In the \gui Library view, \gui Resources tab, select Bluebubble.svg
|
||||||
|
and drag and drop it to the canvas.
|
||||||
|
|
||||||
|
\li In the \gui Properties pane, \gui Id field, enter \e bubble to be
|
||||||
|
able to reference the image from other places.
|
||||||
|
|
||||||
|
\li In the code editor, add the following new properties to the image to
|
||||||
|
position the image at the center of ApplicationWindow when the
|
||||||
|
application starts:
|
||||||
|
|
||||||
|
\quotefromfile accelbubble/main.qml
|
||||||
|
\skipto Image
|
||||||
|
\printuntil bubble.width
|
||||||
|
|
||||||
|
\li Set the x and y position of the image based on the new
|
||||||
|
properties:
|
||||||
|
|
||||||
|
\dots
|
||||||
|
\printuntil centerY
|
||||||
\skipto /^\}/
|
\skipto /^\}/
|
||||||
\printuntil }
|
\printuntil }
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
\section1 Adding an SVG Image
|
Here is how the accelbubble.qml file looks after you made the changes:
|
||||||
|
|
||||||
SVG is an XML-based image format that enables you to combine vector
|
\quotefromfile accelbubble/main.qml
|
||||||
graphics, raster graphics, and text into one image. It is based on
|
|
||||||
an open standard developed and maintained by \l{http://www.w3.org/}{W3C}.
|
|
||||||
|
|
||||||
Qt supports the \l{http://www.w3.org/TR/SVGTiny12/}{SVGT} v1.2, which is a
|
|
||||||
trimmed version of the \l{http://www.w3.org/TR/SVG12/}{SVG Full v1.2}
|
|
||||||
specification, for mobile devices.
|
|
||||||
|
|
||||||
You can copy the Bluebubble.svg used by the Qt Sensors example, Accel
|
|
||||||
Bubble, to your project directory or find an SVG image that uses SVGT v1.2.
|
|
||||||
|
|
||||||
\note If you choose to create a new SVG image, ensure that the \a svg root
|
|
||||||
element has the \a version attribute with the value 1.1 or 1.2, and baseProfile
|
|
||||||
with \c tiny.
|
|
||||||
|
|
||||||
\list 1
|
|
||||||
\li Open accelbubble.qml in \gui Edit mode and add an Image type
|
|
||||||
within the ApplicationWindow.
|
|
||||||
\li Set the image \a id, \a source, and \a smooth properties as shown
|
|
||||||
in the following code block:
|
|
||||||
|
|
||||||
\quotefromfile qml/tutorial_updatedmainview.qml
|
|
||||||
\skipto Image
|
|
||||||
\printuntil true
|
|
||||||
|
|
||||||
\li Add the following new properties to the image:
|
|
||||||
|
|
||||||
\dots
|
|
||||||
\printuntil bubbleCenter:
|
|
||||||
|
|
||||||
\note These properties are used to position the image
|
|
||||||
at the center of ApplicationWindow when the application starts.
|
|
||||||
\li Set the x and y position of the image based on the new
|
|
||||||
properties.
|
|
||||||
|
|
||||||
\dots
|
|
||||||
\printuntil }
|
|
||||||
\endlist
|
|
||||||
|
|
||||||
Here is how the accelbubble.qml file looks after making the changes
|
|
||||||
mentioned earlier in this section:
|
|
||||||
|
|
||||||
\quotefromfile qml/tutorial_updatedmainview.qml
|
|
||||||
\skipto import QtQuick
|
\skipto import QtQuick
|
||||||
\printuntil 1.0
|
\printuntil 1.0
|
||||||
\codeline
|
\codeline
|
||||||
@@ -170,7 +135,9 @@
|
|||||||
\printuntil true
|
\printuntil true
|
||||||
|
|
||||||
\skipto Image
|
\skipto Image
|
||||||
\printuntil /^\}\
|
\printuntil y:
|
||||||
|
\skipto /^\}/
|
||||||
|
\printuntil }
|
||||||
|
|
||||||
|
|
||||||
\section1 Moving the Bubble
|
\section1 Moving the Bubble
|
||||||
@@ -179,14 +146,15 @@
|
|||||||
Accelerometer sensor values.
|
Accelerometer sensor values.
|
||||||
|
|
||||||
\list 1
|
\list 1
|
||||||
\li Add the following import statement to accelbubble.qml:
|
\li Add the following import statement to main.qml:
|
||||||
|
|
||||||
\snippet qml/tutorial_finalmainqml.qml sensorimport
|
\code
|
||||||
|
import QtSensors 5.0
|
||||||
|
\endcode
|
||||||
|
|
||||||
\li Add the Accelerometer type with the necessary properties as shown
|
\li Add the Accelerometer type with the necessary properties:
|
||||||
in the following code block:
|
|
||||||
|
|
||||||
\quotefromfile qml/tutorial_finalmainqml.qml
|
\quotefromfile accelbubble/main.qml
|
||||||
\skipto Accelerometer
|
\skipto Accelerometer
|
||||||
\printuntil true
|
\printuntil true
|
||||||
\skipto }
|
\skipto }
|
||||||
@@ -196,93 +164,61 @@
|
|||||||
x and y position of the bubble based on the current Accelerometer
|
x and y position of the bubble based on the current Accelerometer
|
||||||
values:
|
values:
|
||||||
|
|
||||||
\snippet qml/tutorial_finalmainqml.qml jsfunctions
|
\quotefromfile accelbubble/main.qml
|
||||||
|
\skipto function
|
||||||
|
\printuntil Math.atan(x
|
||||||
|
\printuntil }
|
||||||
|
|
||||||
\li Add the following JavaScript code for \a onReadingChanged signal of
|
\li Add the following JavaScript code for \a onReadingChanged signal of
|
||||||
Accelerometer type to make the bubble move when the Accelerometer
|
Accelerometer type to make the bubble move when the Accelerometer
|
||||||
values change:
|
values change:
|
||||||
|
|
||||||
\snippet qml/tutorial_finalmainqml.qml readingchanged
|
\quotefromfile accelbubble/main.qml
|
||||||
|
\skipto onReadingChanged
|
||||||
|
\printuntil }
|
||||||
|
|
||||||
\li Add SmoothedAnimation behavior on the \a x and \a y properties of
|
\li Add SmoothedAnimation behavior on the \a x and \a y properties of
|
||||||
the bubble to make its movement look smoother.
|
the bubble to make its movement look smoother.
|
||||||
|
|
||||||
\snippet qml/tutorial_finalmainqml.qml smoothedanim
|
\quotefromfile accelbubble/main.qml
|
||||||
|
\skipto Behavior
|
||||||
|
\printuntil x
|
||||||
|
\printuntil }
|
||||||
|
\printuntil }
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
|
\section1 Adding Dependencies
|
||||||
|
|
||||||
\section1 Running the Application
|
Update the accelbubble.pro file with the following library dependency
|
||||||
|
information:
|
||||||
The main view is complete but the application is not ready yet. This
|
|
||||||
section provides instructions to add a few lines of C++ code that loads the
|
|
||||||
QML file when you try to run the application on an Android device.
|
|
||||||
|
|
||||||
\list 1
|
|
||||||
\li Right-click on the project in \gui Edit mode and select
|
|
||||||
\gui{Add New > Qt > Qt Resource File}.
|
|
||||||
|
|
||||||
\li Name the resource file as \a accelbubble.qrc and click \gui Next.
|
|
||||||
|
|
||||||
\li Select \gui Finish in the following dialog to add the resource file
|
|
||||||
to the project and open it in \gui Edit mode.
|
|
||||||
|
|
||||||
\li Select \gui {Add > Add Prefix} and add \c / as the prefix.
|
|
||||||
|
|
||||||
\note The prefix is used every time you refer to the .qrc file
|
|
||||||
contents from the C++ code.
|
|
||||||
|
|
||||||
\li Select \gui {Add > Add Files} and add accelbubble.qml and Bluebubble.svg
|
|
||||||
to the resource file.
|
|
||||||
|
|
||||||
\li Right-click on the project in \gui Edit mode and select
|
|
||||||
\gui {Add New} to open the \gui {New File} dialog.
|
|
||||||
|
|
||||||
\li Select \gui {C++ > C++ Source File > Choose}
|
|
||||||
|
|
||||||
\li Name the file as \a main.cpp and click \gui Next.
|
|
||||||
|
|
||||||
\li Select \gui Finish to add main.cpp to the project and open it in
|
|
||||||
edit mode.
|
|
||||||
|
|
||||||
\li Add the following lines of C++ code to main.cpp to load the
|
|
||||||
accelbubble.qml file from accelbubble.qrc:
|
|
||||||
|
|
||||||
\quotefromfile tutorial_main.cpp
|
|
||||||
\skipto #include
|
|
||||||
\printuntil }
|
|
||||||
|
|
||||||
\li Update the accelbubble.pro file with the following library
|
|
||||||
dependency information:
|
|
||||||
|
|
||||||
\code
|
\code
|
||||||
QT += quick sensors svg xml
|
QT += quick sensors svg xml
|
||||||
\endcode
|
\endcode
|
||||||
\endlist
|
|
||||||
|
|
||||||
The application is complete and ready to be deployed to the device.
|
\section1 Running the Application
|
||||||
Enable "USB Debugging" on your Android device and connect it to your PC.
|
|
||||||
|
The application is complete and ready to be deployed to an Android device:
|
||||||
|
|
||||||
|
\list 1
|
||||||
|
|
||||||
|
\li Enable \e{USB Debugging} on the device.
|
||||||
|
|
||||||
|
\li Connect the device to the development PC.
|
||||||
|
|
||||||
If you are using a device running Android v4.2.2, it should prompt you to
|
If you are using a device running Android v4.2.2, it should prompt you to
|
||||||
verify the connection to allow USB debugging from the PC it is connected
|
verify the connection to allow USB debugging from the PC it is connected
|
||||||
to. To avoid such prompts every time you connect the device, check
|
to. To avoid such prompts every time you connect the device, check
|
||||||
"Always allow from the computer" and select \gui OK.
|
"Always allow from the computer" and select \gui OK.
|
||||||
|
|
||||||
To run the application on the device, press CTRL + R keys in \QC
|
\li To run the application on the device, press \key {Ctrl+R}.
|
||||||
\gui Edit mode.
|
|
||||||
|
\endlist
|
||||||
|
|
||||||
\section1 Example Code
|
\section1 Example Code
|
||||||
|
|
||||||
When you have completed the steps mentioned in the earlier sections, the
|
When you have completed the steps, the main.qml file should look as follows:
|
||||||
accelbubble.qml, main.cpp, and accelbubble.pro files look as follows:
|
|
||||||
|
|
||||||
\section2 accelbubble.qml
|
\quotefile accelbubble/main.qml
|
||||||
|
|
||||||
\quotefile qml/tutorial_finalmainqml.qml
|
|
||||||
|
|
||||||
\section2 main.cpp
|
|
||||||
|
|
||||||
\quotefile tutorial_main.cpp
|
|
||||||
|
|
||||||
\section2 accelbubble.pro
|
|
||||||
|
|
||||||
\quotefile tutorial_accelbubble.pro
|
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -34,8 +34,6 @@
|
|||||||
\row
|
\row
|
||||||
\li \inlineimage creator-gs-01.png
|
\li \inlineimage creator-gs-01.png
|
||||||
\li \inlineimage creator-gs-02.png
|
\li \inlineimage creator-gs-02.png
|
||||||
\li \inlineimage creator-gs-03.png
|
|
||||||
\li \inlineimage creator-gs-04.png
|
|
||||||
\row
|
\row
|
||||||
\li \b {\l{IDE Overview}}
|
\li \b {\l{IDE Overview}}
|
||||||
|
|
||||||
@@ -46,6 +44,10 @@
|
|||||||
|
|
||||||
If you have not used \QC before, and want to become familiar
|
If you have not used \QC before, and want to become familiar
|
||||||
with the parts of the user interface, go to \l{User Interface}.
|
with the parts of the user interface, go to \l{User Interface}.
|
||||||
|
\row
|
||||||
|
\li \inlineimage creator-gs-03.png
|
||||||
|
\li \inlineimage creator-gs-04.png
|
||||||
|
\row
|
||||||
\li \b {\l{Building and Running an Example}}
|
\li \b {\l{Building and Running an Example}}
|
||||||
|
|
||||||
To check that \l{glossary-buildandrun-kit}{kits} for building and running were
|
To check that \l{glossary-buildandrun-kit}{kits} for building and running were
|
||||||
|
|||||||
@@ -340,6 +340,34 @@ class DumperBase:
|
|||||||
def stringData(self, value):
|
def stringData(self, value):
|
||||||
return self.byteArrayDataHelper(self.dereferenceValue(value))
|
return self.byteArrayDataHelper(self.dereferenceValue(value))
|
||||||
|
|
||||||
|
def extractTemplateArgument(self, typename, position):
|
||||||
|
level = 0
|
||||||
|
skipSpace = False
|
||||||
|
inner = ''
|
||||||
|
for c in typename[typename.find('<') + 1 : -1]:
|
||||||
|
if c == '<':
|
||||||
|
inner += c
|
||||||
|
level += 1
|
||||||
|
elif c == '>':
|
||||||
|
level -= 1
|
||||||
|
inner += c
|
||||||
|
elif c == ',':
|
||||||
|
if level == 0:
|
||||||
|
if position == 0:
|
||||||
|
return inner.strip()
|
||||||
|
position -= 1
|
||||||
|
inner = ''
|
||||||
|
else:
|
||||||
|
inner += c
|
||||||
|
skipSpace = True
|
||||||
|
else:
|
||||||
|
if skipSpace and c == ' ':
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
inner += c
|
||||||
|
skipSpace = False
|
||||||
|
return inner.strip()
|
||||||
|
|
||||||
def putStringValue(self, value):
|
def putStringValue(self, value):
|
||||||
return self.putValue(self.encodeString(value), Hex4EncodedLittleEndian)
|
return self.putValue(self.encodeString(value), Hex4EncodedLittleEndian)
|
||||||
|
|
||||||
|
|||||||
@@ -596,35 +596,6 @@ def lookupType(typestring):
|
|||||||
typesToReport[typestring] = type
|
typesToReport[typestring] = type
|
||||||
return type
|
return type
|
||||||
|
|
||||||
def extractTemplateArgument(type, position):
|
|
||||||
level = 0
|
|
||||||
skipSpace = False
|
|
||||||
inner = ""
|
|
||||||
type = str(type)
|
|
||||||
for c in type[type.find('<') + 1 : -1]:
|
|
||||||
if c == '<':
|
|
||||||
inner += c
|
|
||||||
level += 1
|
|
||||||
elif c == '>':
|
|
||||||
level -= 1
|
|
||||||
inner += c
|
|
||||||
elif c == ',':
|
|
||||||
if level == 0:
|
|
||||||
if position == 0:
|
|
||||||
return inner
|
|
||||||
position -= 1
|
|
||||||
inner = ""
|
|
||||||
else:
|
|
||||||
inner += c
|
|
||||||
skipSpace = True
|
|
||||||
else:
|
|
||||||
if skipSpace and c == ' ':
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
inner += c
|
|
||||||
skipSpace = False
|
|
||||||
return inner
|
|
||||||
|
|
||||||
def templateArgument(type, position):
|
def templateArgument(type, position):
|
||||||
try:
|
try:
|
||||||
# This fails on stock 7.2 with
|
# This fails on stock 7.2 with
|
||||||
@@ -632,7 +603,7 @@ def templateArgument(type, position):
|
|||||||
return type.template_argument(position)
|
return type.template_argument(position)
|
||||||
except:
|
except:
|
||||||
# That's something like "myns::QList<...>"
|
# That's something like "myns::QList<...>"
|
||||||
return lookupType(extractTemplateArgument(type.strip_typedefs(), position))
|
return lookupType(self.extractTemplateArgument(str(type.strip_typedefs()), position))
|
||||||
|
|
||||||
|
|
||||||
# Workaround for gdb < 7.1
|
# Workaround for gdb < 7.1
|
||||||
|
|||||||
@@ -431,34 +431,6 @@ class Dumper(DumperBase):
|
|||||||
def directBaseClass(self, typeobj, index = 0):
|
def directBaseClass(self, typeobj, index = 0):
|
||||||
return typeobj.GetDirectBaseClassAtIndex(index)
|
return typeobj.GetDirectBaseClassAtIndex(index)
|
||||||
|
|
||||||
def extractTemplateArgument(self, typename, index):
|
|
||||||
level = 0
|
|
||||||
skipSpace = False
|
|
||||||
inner = ''
|
|
||||||
for c in typename[typename.find('<') + 1 : -1]:
|
|
||||||
if c == '<':
|
|
||||||
inner += c
|
|
||||||
level += 1
|
|
||||||
elif c == '>':
|
|
||||||
level -= 1
|
|
||||||
inner += c
|
|
||||||
elif c == ',':
|
|
||||||
if level == 0:
|
|
||||||
if index == 0:
|
|
||||||
return inner.strip()
|
|
||||||
index -= 1
|
|
||||||
inner = ''
|
|
||||||
else:
|
|
||||||
inner += c
|
|
||||||
skipSpace = True
|
|
||||||
else:
|
|
||||||
if skipSpace and c == ' ':
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
inner += c
|
|
||||||
skipSpace = False
|
|
||||||
return inner.strip()
|
|
||||||
|
|
||||||
def templateArgument(self, typeobj, index):
|
def templateArgument(self, typeobj, index):
|
||||||
type = typeobj.GetTemplateArgumentType(index)
|
type = typeobj.GetTemplateArgumentType(index)
|
||||||
if type.IsValid():
|
if type.IsValid():
|
||||||
@@ -705,7 +677,10 @@ class Dumper(DumperBase):
|
|||||||
self.startMode_ = args.get('startMode', 1)
|
self.startMode_ = args.get('startMode', 1)
|
||||||
self.processArgs_ = args.get('processArgs', '')
|
self.processArgs_ = args.get('processArgs', '')
|
||||||
self.attachPid_ = args.get('attachPid', 0)
|
self.attachPid_ = args.get('attachPid', 0)
|
||||||
|
self.sysRoot_ = args.get('sysRoot', '')
|
||||||
|
|
||||||
|
if len(self.sysRoot_)>0:
|
||||||
|
self.debugger.SetCurrentPlatformSDKRoot(self.sysRoot_)
|
||||||
self.target = self.debugger.CreateTarget(self.executable_, None, None, True, error)
|
self.target = self.debugger.CreateTarget(self.executable_, None, None, True, error)
|
||||||
self.importDumpers()
|
self.importDumpers()
|
||||||
|
|
||||||
@@ -723,7 +698,6 @@ class Dumper(DumperBase):
|
|||||||
if self.attachPid_ > 0:
|
if self.attachPid_ > 0:
|
||||||
attachInfo = lldb.SBAttachInfo(self.attachPid_)
|
attachInfo = lldb.SBAttachInfo(self.attachPid_)
|
||||||
self.process = self.target.Attach(attachInfo, error)
|
self.process = self.target.Attach(attachInfo, error)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
launchInfo = lldb.SBLaunchInfo(self.processArgs_.split(' '))
|
launchInfo = lldb.SBLaunchInfo(self.processArgs_.split(' '))
|
||||||
launchInfo.SetWorkingDirectory(os.getcwd())
|
launchInfo.SetWorkingDirectory(os.getcwd())
|
||||||
@@ -1613,7 +1587,6 @@ class Dumper(DumperBase):
|
|||||||
self.useFancy = int(args['fancy'])
|
self.useFancy = int(args['fancy'])
|
||||||
if 'passexceptions' in args:
|
if 'passexceptions' in args:
|
||||||
self.passExceptions = int(args['passexceptions'])
|
self.passExceptions = int(args['passexceptions'])
|
||||||
self.passExceptions = True # FIXME
|
|
||||||
self.reportVariables(args)
|
self.reportVariables(args)
|
||||||
|
|
||||||
def disassemble(self, args):
|
def disassemble(self, args):
|
||||||
|
|||||||
@@ -541,10 +541,12 @@ def qdump__QHash(d, value):
|
|||||||
it = nodePtr.dereference().cast(innerType)
|
it = nodePtr.dereference().cast(innerType)
|
||||||
with SubItem(d, i):
|
with SubItem(d, i):
|
||||||
if isCompact:
|
if isCompact:
|
||||||
# cannot reference "key" directly because it is inside
|
key = it["key"]
|
||||||
# anonymous union for (u)int key in Qt4
|
if not key:
|
||||||
keyAddress = d.addressOf(it) + d.ptrSize() # addr + QHashNode*
|
# LLDB can't access directly since it's in anonymous union
|
||||||
d.putMapName(d.createValue(keyAddress, keyType))
|
# for Qt4 optimized int keytype
|
||||||
|
key = it[1]["key"]
|
||||||
|
d.putMapName(key)
|
||||||
d.putItem(it["value"])
|
d.putItem(it["value"])
|
||||||
d.putType(valueType)
|
d.putType(valueType)
|
||||||
else:
|
else:
|
||||||
@@ -553,17 +555,13 @@ def qdump__QHash(d, value):
|
|||||||
|
|
||||||
|
|
||||||
def qdump__QHashNode(d, value):
|
def qdump__QHashNode(d, value):
|
||||||
keyType = d.templateArgument(value.type, 0)
|
|
||||||
valueType = d.templateArgument(value.type, 1)
|
|
||||||
key = value["key"]
|
key = value["key"]
|
||||||
|
if not key:
|
||||||
|
# LLDB can't access directly since it's in anonymous union
|
||||||
|
# for Qt4 optimized int keytype
|
||||||
|
key = value[1]["key"]
|
||||||
val = value["value"]
|
val = value["value"]
|
||||||
|
|
||||||
#if d.isSimpleType(keyType) and d.isSimpleType(valueType):
|
|
||||||
# d.putName(key)
|
|
||||||
# d.putValue(val)
|
|
||||||
#else:
|
|
||||||
d.putEmptyValue()
|
d.putEmptyValue()
|
||||||
|
|
||||||
d.putNumChild(2)
|
d.putNumChild(2)
|
||||||
if d.isExpanded():
|
if d.isExpanded():
|
||||||
with Children(d):
|
with Children(d):
|
||||||
|
|||||||
@@ -985,6 +985,29 @@ QObject *ObjectNodeInstance::createComponent(const QString &componentPath, QQmlC
|
|||||||
return object;
|
return object;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QObject *ObjectNodeInstance::createComponent(const QUrl &componentUrl, QQmlContext *context)
|
||||||
|
{
|
||||||
|
ComponentCompleteDisabler disableComponentComplete;
|
||||||
|
|
||||||
|
Q_UNUSED(disableComponentComplete)
|
||||||
|
|
||||||
|
QQmlComponent component(context->engine(), componentUrl);
|
||||||
|
QObject *object = component.beginCreate(context);
|
||||||
|
|
||||||
|
tweakObjects(object);
|
||||||
|
component.completeCreate();
|
||||||
|
|
||||||
|
if (component.isError()) {
|
||||||
|
qDebug() << componentUrl;
|
||||||
|
foreach (const QQmlError &error, component.errors())
|
||||||
|
qDebug() << error;
|
||||||
|
}
|
||||||
|
|
||||||
|
QQmlEngine::setObjectOwnership(object, QQmlEngine::CppOwnership);
|
||||||
|
|
||||||
|
return object;
|
||||||
|
}
|
||||||
|
|
||||||
QObject *ObjectNodeInstance::createCustomParserObject(const QString &nodeSource, const QStringList &imports, QQmlContext *context)
|
QObject *ObjectNodeInstance::createCustomParserObject(const QString &nodeSource, const QStringList &imports, QQmlContext *context)
|
||||||
{
|
{
|
||||||
ComponentCompleteDisabler disableComponentComplete;
|
ComponentCompleteDisabler disableComponentComplete;
|
||||||
@@ -1013,6 +1036,11 @@ QObject *ObjectNodeInstance::createCustomParserObject(const QString &nodeSource,
|
|||||||
return object;
|
return object;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static QQmlType *getQmlType(const QString &typeName, int majorNumber, int minorNumber)
|
||||||
|
{
|
||||||
|
return QQmlMetaType::qmlType(typeName.toUtf8(), majorNumber, minorNumber);
|
||||||
|
}
|
||||||
|
|
||||||
QObject *ObjectNodeInstance::createPrimitive(const QString &typeName, int majorNumber, int minorNumber, QQmlContext *context)
|
QObject *ObjectNodeInstance::createPrimitive(const QString &typeName, int majorNumber, int minorNumber, QQmlContext *context)
|
||||||
{
|
{
|
||||||
ComponentCompleteDisabler disableComponentComplete;
|
ComponentCompleteDisabler disableComponentComplete;
|
||||||
@@ -1020,13 +1048,16 @@ QObject *ObjectNodeInstance::createPrimitive(const QString &typeName, int majorN
|
|||||||
Q_UNUSED(disableComponentComplete)
|
Q_UNUSED(disableComponentComplete)
|
||||||
|
|
||||||
QObject *object = 0;
|
QObject *object = 0;
|
||||||
QQmlType *type = QQmlMetaType::qmlType(typeName.toUtf8(), majorNumber, minorNumber);
|
QQmlType *type = getQmlType(typeName, majorNumber, minorNumber);
|
||||||
if (type) {
|
|
||||||
|
if (type && !type->isComposite()) {
|
||||||
if (type->typeName() == "QQmlComponent") {
|
if (type->typeName() == "QQmlComponent") {
|
||||||
object = new QQmlComponent(context->engine(), 0);
|
object = new QQmlComponent(context->engine(), 0);
|
||||||
} else {
|
} else {
|
||||||
object = type->create();
|
object = type->create();
|
||||||
}
|
}
|
||||||
|
} else if (type->isComposite()) {
|
||||||
|
object = createComponent(type->sourceUrl(), context);
|
||||||
} else {
|
} else {
|
||||||
qWarning() << "QuickDesigner: Cannot create an object of type"
|
qWarning() << "QuickDesigner: Cannot create an object of type"
|
||||||
<< QString("%1 %2,%3").arg(typeName).arg(majorNumber).arg(minorNumber)
|
<< QString("%1 %2,%3").arg(typeName).arg(majorNumber).arg(minorNumber)
|
||||||
|
|||||||
@@ -74,6 +74,7 @@ public:
|
|||||||
static QObject *createPrimitive(const QString &typeName, int majorNumber, int minorNumber, QQmlContext *context);
|
static QObject *createPrimitive(const QString &typeName, int majorNumber, int minorNumber, QQmlContext *context);
|
||||||
static QObject *createCustomParserObject(const QString &nodeSource, const QStringList &imports, QQmlContext *context);
|
static QObject *createCustomParserObject(const QString &nodeSource, const QStringList &imports, QQmlContext *context);
|
||||||
static QObject *createComponent(const QString &componentPath, QQmlContext *context);
|
static QObject *createComponent(const QString &componentPath, QQmlContext *context);
|
||||||
|
static QObject *createComponent(const QUrl &componentUrl, QQmlContext *context);
|
||||||
static QObject *createComponentWrap(const QString &nodeSource, const QStringList &imports, QQmlContext *context);
|
static QObject *createComponentWrap(const QString &nodeSource, const QStringList &imports, QQmlContext *context);
|
||||||
|
|
||||||
void setInstanceId(qint32 id);
|
void setInstanceId(qint32 id);
|
||||||
|
|||||||
@@ -169,6 +169,13 @@ Rectangle {
|
|||||||
|
|
||||||
id: specificsTwo;
|
id: specificsTwo;
|
||||||
sourceComponent: specificQmlComponent
|
sourceComponent: specificQmlComponent
|
||||||
|
|
||||||
|
property string theSource: specificQmlData
|
||||||
|
|
||||||
|
onTheSourceChanged: {
|
||||||
|
active = false
|
||||||
|
active = true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Loader {
|
Loader {
|
||||||
|
|||||||
@@ -1,24 +0,0 @@
|
|||||||
import bb.cascades 1.0
|
|
||||||
|
|
||||||
Page {
|
|
||||||
id: seconPage
|
|
||||||
paneProperties: NavigationPaneProperties {
|
|
||||||
backButton: ActionItem {
|
|
||||||
onTriggered: {
|
|
||||||
navigationPane.pop()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Container {
|
|
||||||
layout: DockLayout {}
|
|
||||||
Label {
|
|
||||||
text: qsTr("Hello Cascades!")
|
|
||||||
horizontalAlignment: HorizontalAlignment.Center
|
|
||||||
verticalAlignment: VerticalAlignment.Center
|
|
||||||
textStyle {
|
|
||||||
base: SystemDefaults.TextStyles.TitleText
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,37 +1,13 @@
|
|||||||
import bb.cascades 1.0
|
import bb.cascades 1.0
|
||||||
|
|
||||||
NavigationPane {
|
Page {
|
||||||
id: navigationPane
|
|
||||||
Page {
|
|
||||||
Container {
|
Container {
|
||||||
layout: DockLayout {}
|
layout: DockLayout { }
|
||||||
Button {
|
Label {
|
||||||
horizontalAlignment: HorizontalAlignment.Center
|
text: qsTr("Hello World")
|
||||||
|
textStyle.base: SystemDefaults.TextStyles.BigText
|
||||||
verticalAlignment: VerticalAlignment.Center
|
verticalAlignment: VerticalAlignment.Center
|
||||||
text: qsTr("Next")
|
horizontalAlignment: HorizontalAlignment.Center
|
||||||
onClicked: {
|
|
||||||
var page = getSecondPage();
|
|
||||||
navigationPane.push(page);
|
|
||||||
}
|
}
|
||||||
property Page secondPage
|
|
||||||
function getSecondPage() {
|
|
||||||
if (! secondPage) {
|
|
||||||
secondPage = secondPageDefinition.createObject();
|
|
||||||
}
|
|
||||||
return secondPage;
|
|
||||||
}
|
|
||||||
attachedObjects: [
|
|
||||||
ComponentDefinition {
|
|
||||||
id: secondPageDefinition
|
|
||||||
source: "SecondPage.qml"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
onCreationCompleted: {
|
|
||||||
console.log("NavigationPane - onCreationCompleted()");
|
|
||||||
OrientationSupport.supportedDisplayOrientation = SupportedDisplayOrientation.All;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,14 +4,25 @@
|
|||||||
<name>%ProjectName%</name>
|
<name>%ProjectName%</name>
|
||||||
<versionNumber>1.0.0</versionNumber>
|
<versionNumber>1.0.0</versionNumber>
|
||||||
<description>DESCRIPTION</description>
|
<description>DESCRIPTION</description>
|
||||||
|
|
||||||
<initialWindow>
|
<initialWindow>
|
||||||
<systemChrome>none</systemChrome>
|
<systemChrome>none</systemChrome>
|
||||||
<transparent>false</transparent>
|
<transparent>false</transparent>
|
||||||
<autoOrients>true</autoOrients>
|
<autoOrients>true</autoOrients>
|
||||||
<aspectRatio>landscape</aspectRatio>
|
<aspectRatio>landscape</aspectRatio>
|
||||||
</initialWindow>
|
</initialWindow>
|
||||||
|
|
||||||
|
<!-- The icon for the application, which should be 114x114. -->
|
||||||
|
<icon>
|
||||||
|
<image>icon.png</image>
|
||||||
|
</icon>
|
||||||
|
|
||||||
<env value="app/native/lib:/usr/lib/qt4/lib/" var="LD_LIBRARY_PATH"/>
|
<env value="app/native/lib:/usr/lib/qt4/lib/" var="LD_LIBRARY_PATH"/>
|
||||||
|
|
||||||
<action system="true">run_native</action>
|
<action system="true">run_native</action>
|
||||||
<asset path="%ProjectName%" type="Qnx/Elf" entry="true">%ProjectName%</asset>
|
|
||||||
|
<!-- Application assets -->
|
||||||
|
<asset path="%SRC_DIR%/icon.png">icon.png</asset>
|
||||||
<asset path="%SRC_DIR%/assets">assets</asset>
|
<asset path="%SRC_DIR%/assets">assets</asset>
|
||||||
|
<asset path="%ProjectName%" type="Qnx/Elf" entry="true">%ProjectName%</asset>
|
||||||
</qnx>
|
</qnx>
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
#include "%ProjectName%.hpp"
|
|
||||||
|
|
||||||
#include <bb/cascades/Application>
|
|
||||||
#include <Qt/qdeclarativedebug.h>
|
|
||||||
|
|
||||||
Q_DECL_EXPORT int main(int argc, char **argv)
|
|
||||||
{
|
|
||||||
bb::cascades::Application app(argc, argv);
|
|
||||||
|
|
||||||
new %ProjectName:s%(&app);
|
|
||||||
|
|
||||||
return bb::cascades::Application::exec();
|
|
||||||
}
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
#include "%ProjectName%.hpp"
|
|
||||||
|
|
||||||
#include <bb/cascades/Application>
|
|
||||||
#include <bb/cascades/QmlDocument>
|
|
||||||
#include <bb/cascades/AbstractPane>
|
|
||||||
|
|
||||||
%ProjectName:s%::%ProjectName:s%(bb::cascades::Application *app)
|
|
||||||
: QObject(app)
|
|
||||||
{
|
|
||||||
bb::cascades::QmlDocument *qml = bb::cascades::QmlDocument::create("asset:///main.qml").parent(this);
|
|
||||||
bb::cascades::AbstractPane *root = qml->createRootObject<bb::cascades::AbstractPane>();
|
|
||||||
app->setScene(root);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
#ifndef %ProjectName:h%_HPP_
|
|
||||||
#define %ProjectName:h%_HPP_
|
|
||||||
|
|
||||||
#include <QObject>
|
|
||||||
|
|
||||||
namespace bb { namespace cascades { class Application; }}
|
|
||||||
|
|
||||||
class %ProjectName:s% : public QObject
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
%ProjectName:s%(bb::cascades::Application *app);
|
|
||||||
virtual ~%ProjectName:s%() {}
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* %ProjectName:h%_HPP_ */
|
|
||||||
@@ -3,11 +3,15 @@ TEMPLATE = app
|
|||||||
LIBS += -lbbdata -lbb -lbbcascades
|
LIBS += -lbbdata -lbb -lbbcascades
|
||||||
QT += declarative xml
|
QT += declarative xml
|
||||||
|
|
||||||
SOURCES += main.cpp \
|
SOURCES += \
|
||||||
%ProjectName%.cpp
|
src/main.cpp \
|
||||||
|
src/applicationui.cpp \
|
||||||
|
|
||||||
HEADERS += %ProjectName%.hpp
|
HEADERS += \
|
||||||
|
src/applicationui.h \
|
||||||
|
|
||||||
OTHER_FILES += bar-descriptor.xml \
|
OTHER_FILES += \
|
||||||
|
bar-descriptor.xml \
|
||||||
assets/main.qml \
|
assets/main.qml \
|
||||||
assets/SecondPage.qml
|
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
#include "applicationui.h"
|
||||||
|
|
||||||
|
#include <bb/cascades/Application>
|
||||||
|
#include <bb/cascades/QmlDocument>
|
||||||
|
#include <bb/cascades/AbstractPane>
|
||||||
|
|
||||||
|
using namespace bb::cascades;
|
||||||
|
|
||||||
|
ApplicationUI::ApplicationUI(bb::cascades::Application *app) :
|
||||||
|
QObject(app)
|
||||||
|
{
|
||||||
|
// By default the QmlDocument object is owned by the Application instance
|
||||||
|
// and will have the lifespan of the application
|
||||||
|
QmlDocument *qml = QmlDocument::create("asset:///main.qml");
|
||||||
|
|
||||||
|
// Create root object for the UI
|
||||||
|
AbstractPane *root = qml->createRootObject<AbstractPane>();
|
||||||
|
|
||||||
|
// Set created root object as the application scene
|
||||||
|
app->setScene(root);
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
#ifndef APPLICATIONUI_H
|
||||||
|
#define APPLICATIONUI_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
|
||||||
|
namespace bb {
|
||||||
|
namespace cascades {
|
||||||
|
class Application;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class ApplicationUI : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
ApplicationUI(bb::cascades::Application *app);
|
||||||
|
virtual ~ApplicationUI() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* APPLICATIONUI_H */
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
#include "applicationui.h"
|
||||||
|
|
||||||
|
#include <bb/cascades/Application>
|
||||||
|
|
||||||
|
#include <Qt/qdeclarativedebug.h>
|
||||||
|
|
||||||
|
using namespace bb::cascades;
|
||||||
|
|
||||||
|
Q_DECL_EXPORT int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
Application app(argc, argv);
|
||||||
|
|
||||||
|
// Create the Application UI object, this is where the main.qml file
|
||||||
|
// is loaded and the application scene is set.
|
||||||
|
new ApplicationUI(&app);
|
||||||
|
|
||||||
|
// Enter the application main event loop.
|
||||||
|
return Application::exec();
|
||||||
|
}
|
||||||
@@ -38,12 +38,12 @@
|
|||||||
<displayname>BlackBerry Cascades Application</displayname>;
|
<displayname>BlackBerry Cascades Application</displayname>;
|
||||||
<description>Creates a Cascades application for BlackBerry 10.</description>
|
<description>Creates a Cascades application for BlackBerry 10.</description>
|
||||||
<files>
|
<files>
|
||||||
<file source="main.cpp" openeditor="true"/>
|
|
||||||
<file source="assets/main.qml" openeditor="true"/>
|
<file source="assets/main.qml" openeditor="true"/>
|
||||||
<file source="assets/SecondPage.qml" openeditor="true"/>
|
|
||||||
<file source="bar-descriptor.xml" openeditor="true"/>
|
<file source="bar-descriptor.xml" openeditor="true"/>
|
||||||
<file source="project.pro" target="%ProjectName%.pro" openproject="true"/>
|
<file source="project.pro" target="%ProjectName%.pro" openproject="true"/>
|
||||||
<file source="project.hpp" target="%ProjectName%.hpp" openproject="true"/>
|
<file source="src/main.cpp" openeditor="true"/>
|
||||||
<file source="project.cpp" target="%ProjectName%.cpp" openproject="true"/>
|
<file source="src/applicationui.h" openproject="true"/>
|
||||||
|
<file source="src/applicationui.cpp" openproject="true"/>
|
||||||
|
<file source="icon.png"/>
|
||||||
</files>
|
</files>
|
||||||
</wizard>
|
</wizard>
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ void functionUser(Utils::function<int()> generator, Utils::function<void(int)> c
|
|||||||
|
|
||||||
struct GenFunctor
|
struct GenFunctor
|
||||||
{
|
{
|
||||||
int operator()() const { return 29; }
|
int operator()() { return 29; }
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ConsumerFunctor
|
struct ConsumerFunctor
|
||||||
@@ -49,13 +49,6 @@ struct ConsumerFunctor
|
|||||||
void operator()(int) {}
|
void operator()(int) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ConsumerFunctor2
|
|
||||||
{
|
|
||||||
ConsumerFunctor2() : i(0) { }
|
|
||||||
int i;
|
|
||||||
void operator()(int j) { i = j; }
|
|
||||||
};
|
|
||||||
|
|
||||||
int generatorF()
|
int generatorF()
|
||||||
{
|
{
|
||||||
return 42;
|
return 42;
|
||||||
@@ -71,9 +64,6 @@ void test()
|
|||||||
{
|
{
|
||||||
functionUser(GenFunctor(), ConsumerFunctor());
|
functionUser(GenFunctor(), ConsumerFunctor());
|
||||||
functionUser(&generatorF, &consumerF);
|
functionUser(&generatorF, &consumerF);
|
||||||
ConsumerFunctor2 f2;
|
|
||||||
GenFunctor g2;
|
|
||||||
functionUser(Utils::cref(g2), Utils::ref(f2));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // end namespace
|
} // end namespace
|
||||||
|
|||||||
@@ -39,9 +39,9 @@
|
|||||||
# ifdef __GNUC__
|
# ifdef __GNUC__
|
||||||
# include <tr1/functional>
|
# include <tr1/functional>
|
||||||
# endif
|
# endif
|
||||||
namespace Utils { using std::tr1::function; using std::tr1::ref; using std::tr1::cref; }
|
namespace Utils { using std::tr1::function; }
|
||||||
#else
|
#else
|
||||||
namespace Utils { using std::function; using std::ref; using std::cref; }
|
namespace Utils { using std::function; }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif // QTC_FUNCTION_H
|
#endif // QTC_FUNCTION_H
|
||||||
|
|||||||
@@ -50,15 +50,6 @@ QTCREATOR_UTILS_EXPORT QString winGetDLLVersion(WinDLLVersionType t,
|
|||||||
const QString &name,
|
const QString &name,
|
||||||
QString *errorMessage);
|
QString *errorMessage);
|
||||||
|
|
||||||
// Return the short (8.3) file name
|
|
||||||
QTCREATOR_UTILS_EXPORT QString getShortPathName(const QString &name);
|
|
||||||
|
|
||||||
// Returns long name
|
|
||||||
QTCREATOR_UTILS_EXPORT QString getLongPathName(const QString &name);
|
|
||||||
|
|
||||||
// Returns long name with canonical capitalization.
|
|
||||||
QTCREATOR_UTILS_EXPORT QString normalizePathName(const QString &name);
|
|
||||||
|
|
||||||
QTCREATOR_UTILS_EXPORT bool winIs64BitSystem();
|
QTCREATOR_UTILS_EXPORT bool winIs64BitSystem();
|
||||||
|
|
||||||
// Check for a 64bit binary.
|
// Check for a 64bit binary.
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ QtcPlugin {
|
|||||||
|
|
||||||
Depends { name: "Core" }
|
Depends { name: "Core" }
|
||||||
Depends { name: "ProjectExplorer" }
|
Depends { name: "ProjectExplorer" }
|
||||||
Depends { name: "Qt4ProjectManager" }
|
Depends { name: "QmakeProjectManager" }
|
||||||
Depends { name: "Debugger" }
|
Depends { name: "Debugger" }
|
||||||
Depends { name: "QmlDebug" }
|
Depends { name: "QmlDebug" }
|
||||||
Depends { name: "QtSupport" }
|
Depends { name: "QtSupport" }
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ QTC_PLUGIN_DEPENDS += \
|
|||||||
coreplugin \
|
coreplugin \
|
||||||
debugger \
|
debugger \
|
||||||
projectexplorer \
|
projectexplorer \
|
||||||
qt4projectmanager \
|
qmakeprojectmanager \
|
||||||
qtsupport \
|
qtsupport \
|
||||||
texteditor \
|
texteditor \
|
||||||
analyzerbase
|
analyzerbase
|
||||||
|
|||||||
@@ -43,9 +43,9 @@
|
|||||||
|
|
||||||
#include <projectexplorer/target.h>
|
#include <projectexplorer/target.h>
|
||||||
#include <projectexplorer/toolchain.h>
|
#include <projectexplorer/toolchain.h>
|
||||||
#include <qt4projectmanager/qmakebuildconfiguration.h>
|
#include <qmakeprojectmanager/qmakebuildconfiguration.h>
|
||||||
#include <qt4projectmanager/qmakenodes.h>
|
#include <qmakeprojectmanager/qmakenodes.h>
|
||||||
#include <qt4projectmanager/qmakeproject.h>
|
#include <qmakeprojectmanager/qmakeproject.h>
|
||||||
#include <qtsupport/qtkitinformation.h>
|
#include <qtsupport/qtkitinformation.h>
|
||||||
|
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
@@ -86,7 +86,7 @@ static QStringList qtSoPaths(QtSupport::BaseQtVersion *qtVersion)
|
|||||||
RunControl *AndroidDebugSupport::createDebugRunControl(AndroidRunConfiguration *runConfig, QString *errorMessage)
|
RunControl *AndroidDebugSupport::createDebugRunControl(AndroidRunConfiguration *runConfig, QString *errorMessage)
|
||||||
{
|
{
|
||||||
Target *target = runConfig->target();
|
Target *target = runConfig->target();
|
||||||
Qt4Project *project = static_cast<Qt4Project *>(target->project());
|
QmakeProject *project = static_cast<QmakeProject *>(target->project());
|
||||||
|
|
||||||
DebuggerStartParameters params;
|
DebuggerStartParameters params;
|
||||||
params.startMode = AttachToRemoteServer;
|
params.startMode = AttachToRemoteServer;
|
||||||
@@ -102,11 +102,11 @@ RunControl *AndroidDebugSupport::createDebugRunControl(AndroidRunConfiguration *
|
|||||||
params.debuggerCommand = DebuggerKitInformation::debuggerCommand(kit).toString();
|
params.debuggerCommand = DebuggerKitInformation::debuggerCommand(kit).toString();
|
||||||
if (ToolChain *tc = ToolChainKitInformation::toolChain(kit))
|
if (ToolChain *tc = ToolChainKitInformation::toolChain(kit))
|
||||||
params.toolChainAbi = tc->targetAbi();
|
params.toolChainAbi = tc->targetAbi();
|
||||||
params.executable = project->rootQt4ProjectNode()->buildDir() + QLatin1String("/app_process");
|
params.executable = project->rootQmakeProjectNode()->buildDir() + QLatin1String("/app_process");
|
||||||
params.remoteChannel = runConfig->remoteChannel();
|
params.remoteChannel = runConfig->remoteChannel();
|
||||||
params.solibSearchPath.clear();
|
params.solibSearchPath.clear();
|
||||||
QList<Qt4ProFileNode *> nodes = project->allProFiles();
|
QList<QmakeProFileNode *> nodes = project->allProFiles();
|
||||||
foreach (Qt4ProFileNode *node, nodes)
|
foreach (QmakeProFileNode *node, nodes)
|
||||||
if (node->projectType() == ApplicationTemplate)
|
if (node->projectType() == ApplicationTemplate)
|
||||||
params.solibSearchPath.append(node->targetInformation().buildDir);
|
params.solibSearchPath.append(node->targetInformation().buildDir);
|
||||||
QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(kit);
|
QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(kit);
|
||||||
@@ -121,8 +121,8 @@ RunControl *AndroidDebugSupport::createDebugRunControl(AndroidRunConfiguration *
|
|||||||
params.remoteSetupNeeded = true;
|
params.remoteSetupNeeded = true;
|
||||||
//TODO: Not sure if these are the right paths.
|
//TODO: Not sure if these are the right paths.
|
||||||
params.projectSourceDirectory = project->projectDirectory();
|
params.projectSourceDirectory = project->projectDirectory();
|
||||||
params.projectSourceFiles = project->files(Qt4Project::ExcludeGeneratedFiles);
|
params.projectSourceFiles = project->files(QmakeProject::ExcludeGeneratedFiles);
|
||||||
params.projectBuildDirectory = project->rootQt4ProjectNode()->buildDir();
|
params.projectBuildDirectory = project->rootQmakeProjectNode()->buildDir();
|
||||||
}
|
}
|
||||||
|
|
||||||
DebuggerRunControl * const debuggerRunControl
|
DebuggerRunControl * const debuggerRunControl
|
||||||
|
|||||||
@@ -39,7 +39,7 @@
|
|||||||
#include <projectexplorer/target.h>
|
#include <projectexplorer/target.h>
|
||||||
#include <projectexplorer/toolchain.h>
|
#include <projectexplorer/toolchain.h>
|
||||||
|
|
||||||
#include <qt4projectmanager/qmakeproject.h>
|
#include <qmakeprojectmanager/qmakeproject.h>
|
||||||
#include <qtsupport/qtkitinformation.h>
|
#include <qtsupport/qtkitinformation.h>
|
||||||
#include <qtsupport/qtsupportconstants.h>
|
#include <qtsupport/qtsupportconstants.h>
|
||||||
|
|
||||||
@@ -124,7 +124,7 @@ DeployConfiguration *AndroidDeployConfigurationFactory::clone(Target *parent, De
|
|||||||
QList<Core::Id> AndroidDeployConfigurationFactory::availableCreationIds(Target *parent) const
|
QList<Core::Id> AndroidDeployConfigurationFactory::availableCreationIds(Target *parent) const
|
||||||
{
|
{
|
||||||
QList<Core::Id> ids;
|
QList<Core::Id> ids;
|
||||||
if (!qobject_cast<QmakeProjectManager::Qt4Project *>(parent->project()))
|
if (!qobject_cast<QmakeProjectManager::QmakeProject *>(parent->project()))
|
||||||
return ids;
|
return ids;
|
||||||
|
|
||||||
if (!parent->project()->supportsKit(parent->kit()))
|
if (!parent->project()->supportsKit(parent->kit()))
|
||||||
|
|||||||
@@ -45,9 +45,9 @@
|
|||||||
#include <projectexplorer/target.h>
|
#include <projectexplorer/target.h>
|
||||||
#include <projectexplorer/project.h>
|
#include <projectexplorer/project.h>
|
||||||
#include <qtsupport/qtkitinformation.h>
|
#include <qtsupport/qtkitinformation.h>
|
||||||
#include <qt4projectmanager/qmakebuildconfiguration.h>
|
#include <qmakeprojectmanager/qmakebuildconfiguration.h>
|
||||||
#include <qt4projectmanager/qmakeproject.h>
|
#include <qmakeprojectmanager/qmakeproject.h>
|
||||||
#include <qt4projectmanager/qmakenodes.h>
|
#include <qmakeprojectmanager/qmakenodes.h>
|
||||||
#include <QInputDialog>
|
#include <QInputDialog>
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
|
|
||||||
@@ -188,8 +188,8 @@ bool AndroidDeployQtStep::init()
|
|||||||
m_serialNumber = info.serialNumber;
|
m_serialNumber = info.serialNumber;
|
||||||
}
|
}
|
||||||
|
|
||||||
QmakeProjectManager::Qt4BuildConfiguration *bc
|
QmakeProjectManager::QmakeBuildConfiguration *bc
|
||||||
= static_cast<QmakeProjectManager::Qt4BuildConfiguration *>(target()->activeBuildConfiguration());
|
= static_cast<QmakeProjectManager::QmakeBuildConfiguration *>(target()->activeBuildConfiguration());
|
||||||
|
|
||||||
if (m_signPackage) {
|
if (m_signPackage) {
|
||||||
// check keystore and certificate passwords
|
// check keystore and certificate passwords
|
||||||
@@ -345,11 +345,11 @@ void AndroidDeployQtStep::runCommand(const QString &program, const QStringList &
|
|||||||
|
|
||||||
void AndroidDeployQtStep::updateInputFile()
|
void AndroidDeployQtStep::updateInputFile()
|
||||||
{
|
{
|
||||||
QmakeProjectManager::Qt4Project *pro = static_cast<QmakeProjectManager::Qt4Project *>(project());
|
QmakeProjectManager::QmakeProject *pro = static_cast<QmakeProjectManager::QmakeProject *>(project());
|
||||||
QList<QmakeProjectManager::Qt4ProFileNode *> nodes = pro->applicationProFiles();
|
QList<QmakeProjectManager::QmakeProFileNode *> nodes = pro->applicationProFiles();
|
||||||
|
|
||||||
QStringList inputFiles;
|
QStringList inputFiles;
|
||||||
foreach (QmakeProjectManager::Qt4ProFileNode *node, nodes)
|
foreach (QmakeProjectManager::QmakeProFileNode *node, nodes)
|
||||||
inputFiles << node->singleVariableValue(QmakeProjectManager::AndroidDeploySettingsFile);
|
inputFiles << node->singleVariableValue(QmakeProjectManager::AndroidDeploySettingsFile);
|
||||||
|
|
||||||
if (!inputFiles.contains(m_inputFile))
|
if (!inputFiles.contains(m_inputFile))
|
||||||
|
|||||||
@@ -38,9 +38,9 @@
|
|||||||
#include "androidextralibrarylistmodel.h"
|
#include "androidextralibrarylistmodel.h"
|
||||||
|
|
||||||
#include <projectexplorer/target.h>
|
#include <projectexplorer/target.h>
|
||||||
#include <qt4projectmanager/qmakebuildconfiguration.h>
|
#include <qmakeprojectmanager/qmakebuildconfiguration.h>
|
||||||
#include <qt4projectmanager/qmakeproject.h>
|
#include <qmakeprojectmanager/qmakeproject.h>
|
||||||
#include <qt4projectmanager/qmakenodes.h>
|
#include <qmakeprojectmanager/qmakenodes.h>
|
||||||
|
|
||||||
#include <QFileDialog>
|
#include <QFileDialog>
|
||||||
|
|
||||||
@@ -135,7 +135,7 @@ AndroidDeployQtWidget::AndroidDeployQtWidget(AndroidDeployQtStep *step)
|
|||||||
connect(m_ui->createAndroidManifestButton, SIGNAL(clicked()),
|
connect(m_ui->createAndroidManifestButton, SIGNAL(clicked()),
|
||||||
this, SLOT(createManifestButton()));
|
this, SLOT(createManifestButton()));
|
||||||
|
|
||||||
m_extraLibraryListModel = new AndroidExtraLibraryListModel(static_cast<QmakeProjectManager::Qt4Project *>(m_step->project()),
|
m_extraLibraryListModel = new AndroidExtraLibraryListModel(static_cast<QmakeProjectManager::QmakeProject *>(m_step->project()),
|
||||||
this);
|
this);
|
||||||
m_ui->androidExtraLibsListView->setModel(m_extraLibraryListModel);
|
m_ui->androidExtraLibsListView->setModel(m_extraLibraryListModel);
|
||||||
|
|
||||||
@@ -156,8 +156,8 @@ AndroidDeployQtWidget::~AndroidDeployQtWidget()
|
|||||||
|
|
||||||
void AndroidDeployQtWidget::checkProjectTemplate()
|
void AndroidDeployQtWidget::checkProjectTemplate()
|
||||||
{
|
{
|
||||||
QmakeProjectManager::Qt4Project *project = static_cast<QmakeProjectManager::Qt4Project *>(m_step->project());
|
QmakeProjectManager::QmakeProject *project = static_cast<QmakeProjectManager::QmakeProject *>(m_step->project());
|
||||||
if (project->rootQt4ProjectNode()->projectType() == QmakeProjectManager::ApplicationTemplate)
|
if (project->rootQmakeProjectNode()->projectType() == QmakeProjectManager::ApplicationTemplate)
|
||||||
m_ui->additionalLibrariesGroupBox->setEnabled(true);
|
m_ui->additionalLibrariesGroupBox->setEnabled(true);
|
||||||
else
|
else
|
||||||
m_ui->additionalLibrariesGroupBox->setEnabled(false);
|
m_ui->additionalLibrariesGroupBox->setEnabled(false);
|
||||||
@@ -171,9 +171,9 @@ void AndroidDeployQtWidget::createManifestButton()
|
|||||||
|
|
||||||
void AndroidDeployQtWidget::updateInputFileUi()
|
void AndroidDeployQtWidget::updateInputFileUi()
|
||||||
{
|
{
|
||||||
QmakeProjectManager::Qt4Project *project
|
QmakeProjectManager::QmakeProject *project
|
||||||
= static_cast<QmakeProjectManager::Qt4Project *>(m_step->project());
|
= static_cast<QmakeProjectManager::QmakeProject *>(m_step->project());
|
||||||
QList<QmakeProjectManager::Qt4ProFileNode *> nodes = project->applicationProFiles();
|
QList<QmakeProjectManager::QmakeProFileNode *> nodes = project->applicationProFiles();
|
||||||
int size = nodes.size();
|
int size = nodes.size();
|
||||||
if (size == 0 || size == 1) {
|
if (size == 0 || size == 1) {
|
||||||
// there's nothing to select, e.g. before parsing
|
// there's nothing to select, e.g. before parsing
|
||||||
@@ -185,7 +185,7 @@ void AndroidDeployQtWidget::updateInputFileUi()
|
|||||||
m_ui->inputFileComboBox->setVisible(true);
|
m_ui->inputFileComboBox->setVisible(true);
|
||||||
|
|
||||||
m_ui->inputFileComboBox->clear();
|
m_ui->inputFileComboBox->clear();
|
||||||
foreach (QmakeProjectManager::Qt4ProFileNode *node, nodes) {
|
foreach (QmakeProjectManager::QmakeProFileNode *node, nodes) {
|
||||||
QString file = node->singleVariableValue(QmakeProjectManager::AndroidDeploySettingsFile);
|
QString file = node->singleVariableValue(QmakeProjectManager::AndroidDeploySettingsFile);
|
||||||
m_ui->inputFileComboBox->addItem(node->displayName(), file);
|
m_ui->inputFileComboBox->addItem(node->displayName(), file);
|
||||||
}
|
}
|
||||||
@@ -325,8 +325,8 @@ void AndroidDeployQtWidget::activeBuildConfigurationChanged()
|
|||||||
disconnect(m_currentBuildConfiguration, SIGNAL(qmakeBuildConfigurationChanged()),
|
disconnect(m_currentBuildConfiguration, SIGNAL(qmakeBuildConfigurationChanged()),
|
||||||
this, SLOT(updateSigningWarning()));
|
this, SLOT(updateSigningWarning()));
|
||||||
updateSigningWarning();
|
updateSigningWarning();
|
||||||
QmakeProjectManager::Qt4BuildConfiguration *bc
|
QmakeProjectManager::QmakeBuildConfiguration *bc
|
||||||
= qobject_cast<QmakeProjectManager::Qt4BuildConfiguration *>(m_step->target()->activeBuildConfiguration());
|
= qobject_cast<QmakeProjectManager::QmakeBuildConfiguration *>(m_step->target()->activeBuildConfiguration());
|
||||||
m_currentBuildConfiguration = bc;
|
m_currentBuildConfiguration = bc;
|
||||||
if (bc)
|
if (bc)
|
||||||
connect(bc, SIGNAL(qmakeBuildConfigurationChanged()), this, SLOT(updateSigningWarning()));
|
connect(bc, SIGNAL(qmakeBuildConfigurationChanged()), this, SLOT(updateSigningWarning()));
|
||||||
@@ -335,7 +335,7 @@ void AndroidDeployQtWidget::activeBuildConfigurationChanged()
|
|||||||
|
|
||||||
void AndroidDeployQtWidget::updateSigningWarning()
|
void AndroidDeployQtWidget::updateSigningWarning()
|
||||||
{
|
{
|
||||||
QmakeProjectManager::Qt4BuildConfiguration *bc = qobject_cast<QmakeProjectManager::Qt4BuildConfiguration *>(m_step->target()->activeBuildConfiguration());
|
QmakeProjectManager::QmakeBuildConfiguration *bc = qobject_cast<QmakeProjectManager::QmakeBuildConfiguration *>(m_step->target()->activeBuildConfiguration());
|
||||||
bool debug = bc && (bc->qmakeBuildConfiguration() & QtSupport::BaseQtVersion::DebugBuild);
|
bool debug = bc && (bc->qmakeBuildConfiguration() & QtSupport::BaseQtVersion::DebugBuild);
|
||||||
if (m_step->signPackage() && debug) {
|
if (m_step->signPackage() && debug) {
|
||||||
m_ui->signingDebugWarningIcon->setVisible(true);
|
m_ui->signingDebugWarningIcon->setVisible(true);
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ QT_BEGIN_NAMESPACE
|
|||||||
namespace Ui { class AndroidDeployQtWidget; }
|
namespace Ui { class AndroidDeployQtWidget; }
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
namespace QmakeProjectManager { class Qt4BuildConfiguration; }
|
namespace QmakeProjectManager { class QmakeBuildConfiguration; }
|
||||||
|
|
||||||
namespace Android {
|
namespace Android {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
@@ -85,7 +85,7 @@ private:
|
|||||||
Ui::AndroidDeployQtWidget *m_ui;
|
Ui::AndroidDeployQtWidget *m_ui;
|
||||||
AndroidDeployQtStep *m_step;
|
AndroidDeployQtStep *m_step;
|
||||||
AndroidExtraLibraryListModel *m_extraLibraryListModel;
|
AndroidExtraLibraryListModel *m_extraLibraryListModel;
|
||||||
QmakeProjectManager::Qt4BuildConfiguration *m_currentBuildConfiguration;
|
QmakeProjectManager::QmakeBuildConfiguration *m_currentBuildConfiguration;
|
||||||
bool m_ignoreChange;
|
bool m_ignoreChange;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -44,9 +44,9 @@
|
|||||||
#include <projectexplorer/projectexplorerconstants.h>
|
#include <projectexplorer/projectexplorerconstants.h>
|
||||||
#include <projectexplorer/buildsteplist.h>
|
#include <projectexplorer/buildsteplist.h>
|
||||||
#include <projectexplorer/target.h>
|
#include <projectexplorer/target.h>
|
||||||
#include <qt4projectmanager/qmakebuildconfiguration.h>
|
#include <qmakeprojectmanager/qmakebuildconfiguration.h>
|
||||||
#include <qt4projectmanager/qmakeproject.h>
|
#include <qmakeprojectmanager/qmakeproject.h>
|
||||||
#include <qt4projectmanager/qmakenodes.h>
|
#include <qmakeprojectmanager/qmakenodes.h>
|
||||||
|
|
||||||
#include <qtsupport/qtkitinformation.h>
|
#include <qtsupport/qtkitinformation.h>
|
||||||
|
|
||||||
@@ -117,7 +117,7 @@ bool AndroidDeployStep::init()
|
|||||||
if (!version)
|
if (!version)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
const Qt4BuildConfiguration *bc = static_cast<Qt4BuildConfiguration *>(target()->activeBuildConfiguration());
|
const QmakeBuildConfiguration *bc = static_cast<QmakeBuildConfiguration *>(target()->activeBuildConfiguration());
|
||||||
if (!bc)
|
if (!bc)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@@ -134,7 +134,7 @@ bool AndroidDeployStep::init()
|
|||||||
m_androidDirPath = AndroidManager::dirPath(target());
|
m_androidDirPath = AndroidManager::dirPath(target());
|
||||||
m_apkPathDebug = AndroidManager::apkPath(target(), AndroidManager::DebugBuild).toString();
|
m_apkPathDebug = AndroidManager::apkPath(target(), AndroidManager::DebugBuild).toString();
|
||||||
m_apkPathRelease = AndroidManager::apkPath(target(), AndroidManager::ReleaseBuildSigned).toString();
|
m_apkPathRelease = AndroidManager::apkPath(target(), AndroidManager::ReleaseBuildSigned).toString();
|
||||||
m_buildDirectory = static_cast<Qt4Project *>(target()->project())->rootQt4ProjectNode()->buildDir();
|
m_buildDirectory = static_cast<QmakeProject *>(target()->project())->rootQmakeProjectNode()->buildDir();
|
||||||
m_runDeployAction = m_deployAction;
|
m_runDeployAction = m_deployAction;
|
||||||
ToolChain *tc = ToolChainKitInformation::toolChain(target()->kit());
|
ToolChain *tc = ToolChainKitInformation::toolChain(target()->kit());
|
||||||
if (!tc || tc->type() != QLatin1String(Constants::ANDROID_TOOLCHAIN_TYPE)) {
|
if (!tc || tc->type() != QLatin1String(Constants::ANDROID_TOOLCHAIN_TYPE)) {
|
||||||
@@ -143,7 +143,7 @@ bool AndroidDeployStep::init()
|
|||||||
}
|
}
|
||||||
m_ndkToolChainVersion = static_cast<AndroidToolChain *>(tc)->ndkToolChainVersion();
|
m_ndkToolChainVersion = static_cast<AndroidToolChain *>(tc)->ndkToolChainVersion();
|
||||||
|
|
||||||
QString arch = static_cast<Qt4Project *>(project())->rootQt4ProjectNode()->singleVariableValue(QmakeProjectManager::AndroidArchVar);
|
QString arch = static_cast<QmakeProject *>(project())->rootQmakeProjectNode()->singleVariableValue(QmakeProjectManager::AndroidArchVar);
|
||||||
if (!arch.isEmpty())
|
if (!arch.isEmpty())
|
||||||
m_libgnustl = AndroidManager::libGnuStl(arch, m_ndkToolChainVersion);
|
m_libgnustl = AndroidManager::libGnuStl(arch, m_ndkToolChainVersion);
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -29,13 +29,13 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#include "androidextralibrarylistmodel.h"
|
#include "androidextralibrarylistmodel.h"
|
||||||
#include <qt4projectmanager/qmakeproject.h>
|
#include <qmakeprojectmanager/qmakeproject.h>
|
||||||
#include <qt4projectmanager/qmakenodes.h>
|
#include <qmakeprojectmanager/qmakenodes.h>
|
||||||
|
|
||||||
using namespace Android;
|
using namespace Android;
|
||||||
using namespace Internal;
|
using namespace Internal;
|
||||||
|
|
||||||
AndroidExtraLibraryListModel::AndroidExtraLibraryListModel(QmakeProjectManager::Qt4Project *project,
|
AndroidExtraLibraryListModel::AndroidExtraLibraryListModel(QmakeProjectManager::QmakeProject *project,
|
||||||
QObject *parent)
|
QObject *parent)
|
||||||
: QAbstractItemModel(parent)
|
: QAbstractItemModel(parent)
|
||||||
, m_project(project)
|
, m_project(project)
|
||||||
@@ -77,18 +77,18 @@ QVariant AndroidExtraLibraryListModel::data(const QModelIndex &index, int role)
|
|||||||
|
|
||||||
void AndroidExtraLibraryListModel::reset()
|
void AndroidExtraLibraryListModel::reset()
|
||||||
{
|
{
|
||||||
if (m_project->rootQt4ProjectNode()->projectType() != QmakeProjectManager::ApplicationTemplate)
|
if (m_project->rootQmakeProjectNode()->projectType() != QmakeProjectManager::ApplicationTemplate)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
beginResetModel();
|
beginResetModel();
|
||||||
QmakeProjectManager::Qt4ProFileNode *node = m_project->rootQt4ProjectNode();
|
QmakeProjectManager::QmakeProFileNode *node = m_project->rootQmakeProjectNode();
|
||||||
m_entries = node->variableValue(QmakeProjectManager::AndroidExtraLibs);
|
m_entries = node->variableValue(QmakeProjectManager::AndroidExtraLibs);
|
||||||
endResetModel();
|
endResetModel();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AndroidExtraLibraryListModel::addEntries(const QStringList &list)
|
void AndroidExtraLibraryListModel::addEntries(const QStringList &list)
|
||||||
{
|
{
|
||||||
if (m_project->rootQt4ProjectNode()->projectType() != QmakeProjectManager::ApplicationTemplate)
|
if (m_project->rootQmakeProjectNode()->projectType() != QmakeProjectManager::ApplicationTemplate)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
beginInsertRows(QModelIndex(), m_entries.size(), m_entries.size() + list.size());
|
beginInsertRows(QModelIndex(), m_entries.size(), m_entries.size() + list.size());
|
||||||
@@ -96,7 +96,7 @@ void AndroidExtraLibraryListModel::addEntries(const QStringList &list)
|
|||||||
foreach (QString path, list)
|
foreach (QString path, list)
|
||||||
m_entries += QDir(m_project->projectDirectory()).relativeFilePath(path);
|
m_entries += QDir(m_project->projectDirectory()).relativeFilePath(path);
|
||||||
|
|
||||||
QmakeProjectManager::Qt4ProFileNode *node = m_project->rootQt4ProjectNode();
|
QmakeProjectManager::QmakeProFileNode *node = m_project->rootQmakeProjectNode();
|
||||||
node->setProVariable(QLatin1String("ANDROID_EXTRA_LIBS"), m_entries.join(QLatin1String(" ")));
|
node->setProVariable(QLatin1String("ANDROID_EXTRA_LIBS"), m_entries.join(QLatin1String(" ")));
|
||||||
|
|
||||||
endInsertRows();
|
endInsertRows();
|
||||||
@@ -109,7 +109,7 @@ bool greaterModelIndexByRow(const QModelIndex &a, const QModelIndex &b)
|
|||||||
|
|
||||||
void AndroidExtraLibraryListModel::removeEntries(QModelIndexList list)
|
void AndroidExtraLibraryListModel::removeEntries(QModelIndexList list)
|
||||||
{
|
{
|
||||||
if (list.isEmpty() || m_project->rootQt4ProjectNode()->projectType() != QmakeProjectManager::ApplicationTemplate)
|
if (list.isEmpty() || m_project->rootQmakeProjectNode()->projectType() != QmakeProjectManager::ApplicationTemplate)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
std::sort(list.begin(), list.end(), greaterModelIndexByRow);
|
std::sort(list.begin(), list.end(), greaterModelIndexByRow);
|
||||||
@@ -128,6 +128,6 @@ void AndroidExtraLibraryListModel::removeEntries(QModelIndexList list)
|
|||||||
endRemoveRows();
|
endRemoveRows();
|
||||||
}
|
}
|
||||||
|
|
||||||
QmakeProjectManager::Qt4ProFileNode *node = m_project->rootQt4ProjectNode();
|
QmakeProjectManager::QmakeProFileNode *node = m_project->rootQmakeProjectNode();
|
||||||
node->setProVariable(QLatin1String("ANDROID_EXTRA_LIBS"), m_entries.join(QLatin1String(" ")));
|
node->setProVariable(QLatin1String("ANDROID_EXTRA_LIBS"), m_entries.join(QLatin1String(" ")));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,7 +34,7 @@
|
|||||||
#include <QAbstractItemModel>
|
#include <QAbstractItemModel>
|
||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
|
|
||||||
namespace QmakeProjectManager { class Qt4Project; }
|
namespace QmakeProjectManager { class QmakeProject; }
|
||||||
|
|
||||||
namespace Android {
|
namespace Android {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
@@ -42,7 +42,7 @@ class AndroidExtraLibraryListModel : public QAbstractItemModel
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit AndroidExtraLibraryListModel(QmakeProjectManager::Qt4Project *project,
|
explicit AndroidExtraLibraryListModel(QmakeProjectManager::QmakeProject *project,
|
||||||
QObject *parent = 0);
|
QObject *parent = 0);
|
||||||
|
|
||||||
QModelIndex index(int row, int column, const QModelIndex &parent) const;
|
QModelIndex index(int row, int column, const QModelIndex &parent) const;
|
||||||
@@ -58,7 +58,7 @@ private slots:
|
|||||||
void reset();
|
void reset();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QmakeProjectManager::Qt4Project *m_project;
|
QmakeProjectManager::QmakeProject *m_project;
|
||||||
QStringList m_entries;
|
QStringList m_entries;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -42,10 +42,10 @@
|
|||||||
#include <projectexplorer/projectexplorer.h>
|
#include <projectexplorer/projectexplorer.h>
|
||||||
#include <projectexplorer/session.h>
|
#include <projectexplorer/session.h>
|
||||||
#include <projectexplorer/target.h>
|
#include <projectexplorer/target.h>
|
||||||
#include <qt4projectmanager/qmakenodes.h>
|
#include <qmakeprojectmanager/qmakenodes.h>
|
||||||
#include <qt4projectmanager/qmakeproject.h>
|
#include <qmakeprojectmanager/qmakeproject.h>
|
||||||
#include <qt4projectmanager/qmakeprojectmanagerconstants.h>
|
#include <qmakeprojectmanager/qmakeprojectmanagerconstants.h>
|
||||||
#include <qt4projectmanager/qmakebuildconfiguration.h>
|
#include <qmakeprojectmanager/qmakebuildconfiguration.h>
|
||||||
#include <qtsupport/customexecutablerunconfiguration.h>
|
#include <qtsupport/customexecutablerunconfiguration.h>
|
||||||
#include <qtsupport/qtkitinformation.h>
|
#include <qtsupport/qtkitinformation.h>
|
||||||
#include <qtsupport/qtsupportconstants.h>
|
#include <qtsupport/qtsupportconstants.h>
|
||||||
@@ -127,7 +127,7 @@ namespace Internal {
|
|||||||
|
|
||||||
bool AndroidManager::supportsAndroid(ProjectExplorer::Target *target)
|
bool AndroidManager::supportsAndroid(ProjectExplorer::Target *target)
|
||||||
{
|
{
|
||||||
if (!qobject_cast<QmakeProjectManager::Qt4Project *>(target->project()))
|
if (!qobject_cast<QmakeProjectManager::QmakeProject *>(target->project()))
|
||||||
return false;
|
return false;
|
||||||
QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(target->kit());
|
QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(target->kit());
|
||||||
return version && version->platformName() == QLatin1String(QtSupport::Constants::ANDROID_PLATFORM);
|
return version && version->platformName() == QLatin1String(QtSupport::Constants::ANDROID_PLATFORM);
|
||||||
@@ -259,10 +259,10 @@ bool AndroidManager::setBuildTargetSDK(ProjectExplorer::Target *target, const QS
|
|||||||
|
|
||||||
QString AndroidManager::targetArch(ProjectExplorer::Target *target)
|
QString AndroidManager::targetArch(ProjectExplorer::Target *target)
|
||||||
{
|
{
|
||||||
QmakeProjectManager::Qt4Project *pro = qobject_cast<QmakeProjectManager::Qt4Project *>(target->project());
|
QmakeProjectManager::QmakeProject *pro = qobject_cast<QmakeProjectManager::QmakeProject *>(target->project());
|
||||||
if (!pro)
|
if (!pro)
|
||||||
return QString();
|
return QString();
|
||||||
QmakeProjectManager::Qt4ProFileNode *node = pro->rootQt4ProjectNode();
|
QmakeProjectManager::QmakeProFileNode *node = pro->rootQmakeProjectNode();
|
||||||
if (!node)
|
if (!node)
|
||||||
return QString();
|
return QString();
|
||||||
return node->singleVariableValue(QmakeProjectManager::AndroidArchVar);
|
return node->singleVariableValue(QmakeProjectManager::AndroidArchVar);
|
||||||
@@ -330,10 +330,10 @@ Utils::FileName AndroidManager::apkPath(ProjectExplorer::Target *target, BuildTy
|
|||||||
QStringList AndroidManager::availableTargetApplications(ProjectExplorer::Target *target)
|
QStringList AndroidManager::availableTargetApplications(ProjectExplorer::Target *target)
|
||||||
{
|
{
|
||||||
QStringList apps;
|
QStringList apps;
|
||||||
QmakeProjectManager::Qt4Project *qt4Project = qobject_cast<QmakeProjectManager::Qt4Project *>(target->project());
|
QmakeProjectManager::QmakeProject *qmakeProject = qobject_cast<QmakeProjectManager::QmakeProject *>(target->project());
|
||||||
if (!qt4Project)
|
if (!qmakeProject)
|
||||||
return apps;
|
return apps;
|
||||||
foreach (QmakeProjectManager::Qt4ProFileNode *proFile, qt4Project->applicationProFiles()) {
|
foreach (QmakeProjectManager::QmakeProFileNode *proFile, qmakeProject->applicationProFiles()) {
|
||||||
if (proFile->projectType() == QmakeProjectManager::ApplicationTemplate) {
|
if (proFile->projectType() == QmakeProjectManager::ApplicationTemplate) {
|
||||||
if (proFile->targetInformation().target.startsWith(QLatin1String("lib"))
|
if (proFile->targetInformation().target.startsWith(QLatin1String("lib"))
|
||||||
&& proFile->targetInformation().target.endsWith(QLatin1String(".so")))
|
&& proFile->targetInformation().target.endsWith(QLatin1String(".so")))
|
||||||
@@ -509,8 +509,8 @@ QString AndroidManager::targetApplicationPath(ProjectExplorer::Target *target)
|
|||||||
QString selectedApp = targetApplication(target);
|
QString selectedApp = targetApplication(target);
|
||||||
if (selectedApp.isEmpty())
|
if (selectedApp.isEmpty())
|
||||||
return QString();
|
return QString();
|
||||||
QmakeProjectManager::Qt4Project *qt4Project = qobject_cast<QmakeProjectManager::Qt4Project *>(target->project());
|
QmakeProjectManager::QmakeProject *qmakeProject = qobject_cast<QmakeProjectManager::QmakeProject *>(target->project());
|
||||||
foreach (QmakeProjectManager::Qt4ProFileNode *proFile, qt4Project->applicationProFiles()) {
|
foreach (QmakeProjectManager::QmakeProFileNode *proFile, qmakeProject->applicationProFiles()) {
|
||||||
if (proFile->projectType() == QmakeProjectManager::ApplicationTemplate) {
|
if (proFile->projectType() == QmakeProjectManager::ApplicationTemplate) {
|
||||||
if (proFile->targetInformation().target.startsWith(QLatin1String("lib"))
|
if (proFile->targetInformation().target.startsWith(QLatin1String("lib"))
|
||||||
&& proFile->targetInformation().target.endsWith(QLatin1String(".so"))) {
|
&& proFile->targetInformation().target.endsWith(QLatin1String(".so"))) {
|
||||||
@@ -529,8 +529,8 @@ QString AndroidManager::targetApplicationPath(ProjectExplorer::Target *target)
|
|||||||
bool AndroidManager::createAndroidTemplatesIfNecessary(ProjectExplorer::Target *target)
|
bool AndroidManager::createAndroidTemplatesIfNecessary(ProjectExplorer::Target *target)
|
||||||
{
|
{
|
||||||
QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(target->kit());
|
QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(target->kit());
|
||||||
QmakeProjectManager::Qt4Project *qt4Project = qobject_cast<QmakeProjectManager::Qt4Project*>(target->project());
|
QmakeProjectManager::QmakeProject *qmakeProject = qobject_cast<QmakeProjectManager::QmakeProject*>(target->project());
|
||||||
if (!qt4Project || !qt4Project->rootProjectNode() || !version)
|
if (!qmakeProject || !qmakeProject->rootProjectNode() || !version)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// TODO we should create the AndroidManifest.xml file for that version
|
// TODO we should create the AndroidManifest.xml file for that version
|
||||||
@@ -540,7 +540,7 @@ bool AndroidManager::createAndroidTemplatesIfNecessary(ProjectExplorer::Target *
|
|||||||
Utils::FileName javaSrcPath
|
Utils::FileName javaSrcPath
|
||||||
= Utils::FileName::fromString(version->qmakeProperty("QT_INSTALL_PREFIX"))
|
= Utils::FileName::fromString(version->qmakeProperty("QT_INSTALL_PREFIX"))
|
||||||
.appendPath(QLatin1String("src/android/java"));
|
.appendPath(QLatin1String("src/android/java"));
|
||||||
QDir projectDir(qt4Project->projectDirectory());
|
QDir projectDir(qmakeProject->projectDirectory());
|
||||||
Utils::FileName androidPath = dirPath(target);
|
Utils::FileName androidPath = dirPath(target);
|
||||||
|
|
||||||
QStringList m_ignoreFiles;
|
QStringList m_ignoreFiles;
|
||||||
@@ -607,7 +607,7 @@ bool AndroidManager::createAndroidTemplatesIfNecessary(ProjectExplorer::Target *
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!androidFiles.isEmpty())
|
if (!androidFiles.isEmpty())
|
||||||
qt4Project->rootProjectNode()->addFiles(androidFiles);
|
qmakeProject->rootProjectNode()->addFiles(androidFiles);
|
||||||
|
|
||||||
int minApiLevel = 4;
|
int minApiLevel = 4;
|
||||||
if (QtSupport::BaseQtVersion *qt = QtSupport::QtKitInformation::qtVersion(target->kit()))
|
if (QtSupport::BaseQtVersion *qt = QtSupport::QtKitInformation::qtVersion(target->kit()))
|
||||||
@@ -804,17 +804,17 @@ QVector<AndroidManager::Library> AndroidManager::availableQtLibsWithDependencies
|
|||||||
if (tc->type() != QLatin1String(Constants::ANDROID_TOOLCHAIN_TYPE))
|
if (tc->type() != QLatin1String(Constants::ANDROID_TOOLCHAIN_TYPE))
|
||||||
return QVector<AndroidManager::Library>();
|
return QVector<AndroidManager::Library>();
|
||||||
|
|
||||||
QmakeProjectManager::Qt4Project *project = static_cast<QmakeProjectManager::Qt4Project *>(target->project());
|
QmakeProjectManager::QmakeProject *project = static_cast<QmakeProjectManager::QmakeProject *>(target->project());
|
||||||
QString arch = project->rootQt4ProjectNode()->singleVariableValue(QmakeProjectManager::AndroidArchVar);
|
QString arch = project->rootQmakeProjectNode()->singleVariableValue(QmakeProjectManager::AndroidArchVar);
|
||||||
|
|
||||||
AndroidToolChain *atc = static_cast<AndroidToolChain *>(tc);
|
AndroidToolChain *atc = static_cast<AndroidToolChain *>(tc);
|
||||||
QString libgnustl = libGnuStl(arch, atc->ndkToolChainVersion());
|
QString libgnustl = libGnuStl(arch, atc->ndkToolChainVersion());
|
||||||
|
|
||||||
Utils::FileName readelfPath = AndroidConfigurations::instance().readelfPath(target->activeRunConfiguration()->abi().architecture(),
|
Utils::FileName readelfPath = AndroidConfigurations::instance().readelfPath(target->activeRunConfiguration()->abi().architecture(),
|
||||||
atc->ndkToolChainVersion());
|
atc->ndkToolChainVersion());
|
||||||
const QmakeProjectManager::Qt4Project *const qt4Project
|
const QmakeProjectManager::QmakeProject *const qmakeProject
|
||||||
= qobject_cast<const QmakeProjectManager::Qt4Project *>(target->project());
|
= qobject_cast<const QmakeProjectManager::QmakeProject *>(target->project());
|
||||||
if (!qt4Project || !version)
|
if (!qmakeProject || !version)
|
||||||
return QVector<AndroidManager::Library>();
|
return QVector<AndroidManager::Library>();
|
||||||
QString qtLibsPath = version->qmakeProperty("QT_INSTALL_LIBS");
|
QString qtLibsPath = version->qmakeProperty("QT_INSTALL_LIBS");
|
||||||
if (!readelfPath.toFileInfo().exists()) {
|
if (!readelfPath.toFileInfo().exists()) {
|
||||||
@@ -904,11 +904,11 @@ bool AndroidManager::setBundledInLib(ProjectExplorer::Target *target, const QStr
|
|||||||
QStringList AndroidManager::availablePrebundledLibs(ProjectExplorer::Target *target)
|
QStringList AndroidManager::availablePrebundledLibs(ProjectExplorer::Target *target)
|
||||||
{
|
{
|
||||||
QStringList libs;
|
QStringList libs;
|
||||||
QmakeProjectManager::Qt4Project *qt4Project = qobject_cast<QmakeProjectManager::Qt4Project *>(target->project());
|
QmakeProjectManager::QmakeProject *qmakeProject = qobject_cast<QmakeProjectManager::QmakeProject *>(target->project());
|
||||||
if (!qt4Project)
|
if (!qmakeProject)
|
||||||
return libs;
|
return libs;
|
||||||
|
|
||||||
foreach (QmakeProjectManager::Qt4ProFileNode *node, qt4Project->allProFiles())
|
foreach (QmakeProjectManager::QmakeProFileNode *node, qmakeProject->allProFiles())
|
||||||
if (node->projectType() == QmakeProjectManager::LibraryTemplate)
|
if (node->projectType() == QmakeProjectManager::LibraryTemplate)
|
||||||
libs << node->targetInformation().target;
|
libs << node->targetInformation().target;
|
||||||
return libs;
|
return libs;
|
||||||
|
|||||||
@@ -44,7 +44,7 @@
|
|||||||
#include <projectexplorer/projectexplorer.h>
|
#include <projectexplorer/projectexplorer.h>
|
||||||
#include <projectexplorer/kitinformation.h>
|
#include <projectexplorer/kitinformation.h>
|
||||||
#include <texteditor/texteditoractionhandler.h>
|
#include <texteditor/texteditoractionhandler.h>
|
||||||
#include <qt4projectmanager/qmakeproject.h>
|
#include <qmakeprojectmanager/qmakeproject.h>
|
||||||
|
|
||||||
#include <QLineEdit>
|
#include <QLineEdit>
|
||||||
#include <QFileInfo>
|
#include <QFileInfo>
|
||||||
|
|||||||
@@ -42,9 +42,9 @@
|
|||||||
#include <projectexplorer/projectexplorerconstants.h>
|
#include <projectexplorer/projectexplorerconstants.h>
|
||||||
#include <projectexplorer/runconfiguration.h>
|
#include <projectexplorer/runconfiguration.h>
|
||||||
#include <projectexplorer/target.h>
|
#include <projectexplorer/target.h>
|
||||||
#include <qt4projectmanager/qmakebuildconfiguration.h>
|
#include <qmakeprojectmanager/qmakebuildconfiguration.h>
|
||||||
#include <qt4projectmanager/qmakeproject.h>
|
#include <qmakeprojectmanager/qmakeproject.h>
|
||||||
#include <qt4projectmanager/qmakenodes.h>
|
#include <qmakeprojectmanager/qmakenodes.h>
|
||||||
#include <qtsupport/qtkitinformation.h>
|
#include <qtsupport/qtkitinformation.h>
|
||||||
|
|
||||||
#include <coreplugin/icore.h>
|
#include <coreplugin/icore.h>
|
||||||
@@ -98,18 +98,18 @@ void AndroidPackageCreationStep::ctor()
|
|||||||
|
|
||||||
bool AndroidPackageCreationStep::init()
|
bool AndroidPackageCreationStep::init()
|
||||||
{
|
{
|
||||||
const Qt4BuildConfiguration *bc = qobject_cast<Qt4BuildConfiguration *>(target()->activeBuildConfiguration());
|
const QmakeBuildConfiguration *bc = qobject_cast<QmakeBuildConfiguration *>(target()->activeBuildConfiguration());
|
||||||
if (!bc) {
|
if (!bc) {
|
||||||
raiseError(tr("Cannot create Android package: current build configuration is not Qt 4."));
|
raiseError(tr("Cannot create Android package: current build configuration is not Qt 4."));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
Qt4Project *project = static_cast<Qt4Project *>(target()->project());
|
QmakeProject *project = static_cast<QmakeProject *>(target()->project());
|
||||||
m_outputParser.setProjectFileList(project->files(Project::AllFiles));
|
m_outputParser.setProjectFileList(project->files(Project::AllFiles));
|
||||||
|
|
||||||
// Copying
|
// Copying
|
||||||
m_androidDir = AndroidManager::dirPath(target());
|
m_androidDir = AndroidManager::dirPath(target());
|
||||||
Utils::FileName path = m_androidDir;
|
Utils::FileName path = m_androidDir;
|
||||||
QString androidTargetArch = project->rootQt4ProjectNode()->singleVariableValue(QmakeProjectManager::AndroidArchVar);
|
QString androidTargetArch = project->rootQmakeProjectNode()->singleVariableValue(QmakeProjectManager::AndroidArchVar);
|
||||||
if (androidTargetArch.isEmpty()) {
|
if (androidTargetArch.isEmpty()) {
|
||||||
raiseError(tr("Cannot create Android package: No ANDROID_TARGET_ARCH set in make spec."));
|
raiseError(tr("Cannot create Android package: No ANDROID_TARGET_ARCH set in make spec."));
|
||||||
return false;
|
return false;
|
||||||
@@ -434,8 +434,8 @@ void AndroidPackageCreationStep::collectFiles(QList<DeployItem> *deployList,
|
|||||||
if (!version)
|
if (!version)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Qt4Project *project = static_cast<Qt4Project *>(target()->project());
|
QmakeProject *project = static_cast<QmakeProject *>(target()->project());
|
||||||
QString androidTargetArch = project->rootQt4ProjectNode()->singleVariableValue(QmakeProjectManager::AndroidArchVar);
|
QString androidTargetArch = project->rootQmakeProjectNode()->singleVariableValue(QmakeProjectManager::AndroidArchVar);
|
||||||
|
|
||||||
QString androidAssetsPath = m_androidDir.toString() + QLatin1String("/assets/");
|
QString androidAssetsPath = m_androidDir.toString() + QLatin1String("/assets/");
|
||||||
QString androidJarPath = m_androidDir.toString() + QLatin1String("/libs/");
|
QString androidJarPath = m_androidDir.toString() + QLatin1String("/libs/");
|
||||||
|
|||||||
@@ -41,8 +41,8 @@
|
|||||||
#include <projectexplorer/projectexplorer.h>
|
#include <projectexplorer/projectexplorer.h>
|
||||||
#include <projectexplorer/buildmanager.h>
|
#include <projectexplorer/buildmanager.h>
|
||||||
#include <projectexplorer/projectexplorerconstants.h>
|
#include <projectexplorer/projectexplorerconstants.h>
|
||||||
#include <qt4projectmanager/qmakebuildconfiguration.h>
|
#include <qmakeprojectmanager/qmakebuildconfiguration.h>
|
||||||
#include <qt4projectmanager/qmakestep.h>
|
#include <qmakeprojectmanager/qmakestep.h>
|
||||||
|
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
|
|
||||||
@@ -182,7 +182,7 @@ void AndroidPackageCreationWidget::initGui()
|
|||||||
|
|
||||||
// Make the buildconfiguration emit a evironmentChanged() signal
|
// Make the buildconfiguration emit a evironmentChanged() signal
|
||||||
// TODO find a better way
|
// TODO find a better way
|
||||||
Qt4BuildConfiguration *bc = qobject_cast<Qt4BuildConfiguration *>(m_step->target()->activeBuildConfiguration());
|
QmakeBuildConfiguration *bc = qobject_cast<QmakeBuildConfiguration *>(m_step->target()->activeBuildConfiguration());
|
||||||
if (!bc)
|
if (!bc)
|
||||||
return;
|
return;
|
||||||
bool use = bc->useSystemEnvironment();
|
bool use = bc->useSystemEnvironment();
|
||||||
@@ -196,7 +196,7 @@ void AndroidPackageCreationWidget::initGui()
|
|||||||
|
|
||||||
void AndroidPackageCreationWidget::updateSigningWarning()
|
void AndroidPackageCreationWidget::updateSigningWarning()
|
||||||
{
|
{
|
||||||
Qt4BuildConfiguration *bc = qobject_cast<Qt4BuildConfiguration *>(m_step->target()->activeBuildConfiguration());
|
QmakeBuildConfiguration *bc = qobject_cast<QmakeBuildConfiguration *>(m_step->target()->activeBuildConfiguration());
|
||||||
bool debug = bc && (bc->qmakeBuildConfiguration() & QtSupport::BaseQtVersion::DebugBuild);
|
bool debug = bc && (bc->qmakeBuildConfiguration() & QtSupport::BaseQtVersion::DebugBuild);
|
||||||
if (m_step->signPackage() && debug) {
|
if (m_step->signPackage() && debug) {
|
||||||
m_ui->signingDebugWarningIcon->setVisible(true);
|
m_ui->signingDebugWarningIcon->setVisible(true);
|
||||||
@@ -213,7 +213,7 @@ void AndroidPackageCreationWidget::activeBuildConfigurationChanged()
|
|||||||
disconnect(m_currentBuildConfiguration, SIGNAL(qmakeBuildConfigurationChanged()),
|
disconnect(m_currentBuildConfiguration, SIGNAL(qmakeBuildConfigurationChanged()),
|
||||||
this, SLOT(updateSigningWarning()));
|
this, SLOT(updateSigningWarning()));
|
||||||
updateSigningWarning();
|
updateSigningWarning();
|
||||||
Qt4BuildConfiguration *bc = qobject_cast<Qt4BuildConfiguration *>(m_step->target()->activeBuildConfiguration());
|
QmakeBuildConfiguration *bc = qobject_cast<QmakeBuildConfiguration *>(m_step->target()->activeBuildConfiguration());
|
||||||
m_currentBuildConfiguration = bc;
|
m_currentBuildConfiguration = bc;
|
||||||
if (bc)
|
if (bc)
|
||||||
connect(bc, SIGNAL(qmakeBuildConfigurationChanged()), this, SLOT(updateSigningWarning()));
|
connect(bc, SIGNAL(qmakeBuildConfigurationChanged()), this, SLOT(updateSigningWarning()));
|
||||||
@@ -243,7 +243,7 @@ void AndroidPackageCreationWidget::updateAndroidProjectInfo()
|
|||||||
void AndroidPackageCreationWidget::setTargetSDK(const QString &sdk)
|
void AndroidPackageCreationWidget::setTargetSDK(const QString &sdk)
|
||||||
{
|
{
|
||||||
AndroidManager::setBuildTargetSDK(m_step->target(), sdk);
|
AndroidManager::setBuildTargetSDK(m_step->target(), sdk);
|
||||||
Qt4BuildConfiguration *bc = qobject_cast<Qt4BuildConfiguration *>(m_step->target()->activeBuildConfiguration());
|
QmakeBuildConfiguration *bc = qobject_cast<QmakeBuildConfiguration *>(m_step->target()->activeBuildConfiguration());
|
||||||
if (!bc)
|
if (!bc)
|
||||||
return;
|
return;
|
||||||
QMakeStep *qs = bc->qmakeStep();
|
QMakeStep *qs = bc->qmakeStep();
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ class QFileSystemWatcher;
|
|||||||
namespace Ui { class AndroidPackageCreationWidget; }
|
namespace Ui { class AndroidPackageCreationWidget; }
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
namespace QmakeProjectManager { class Qt4BuildConfiguration; }
|
namespace QmakeProjectManager { class QmakeBuildConfiguration; }
|
||||||
|
|
||||||
namespace Android {
|
namespace Android {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
@@ -112,7 +112,7 @@ private:
|
|||||||
CheckModel *m_qtLibsModel;
|
CheckModel *m_qtLibsModel;
|
||||||
CheckModel *m_prebundledLibs;
|
CheckModel *m_prebundledLibs;
|
||||||
QFileSystemWatcher *m_fileSystemWatcher;
|
QFileSystemWatcher *m_fileSystemWatcher;
|
||||||
QmakeProjectManager::Qt4BuildConfiguration *m_currentBuildConfiguration;
|
QmakeProjectManager::QmakeBuildConfiguration *m_currentBuildConfiguration;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
|
|||||||
@@ -37,7 +37,7 @@
|
|||||||
#include <projectexplorer/kitinformation.h>
|
#include <projectexplorer/kitinformation.h>
|
||||||
#include <projectexplorer/gnumakeparser.h>
|
#include <projectexplorer/gnumakeparser.h>
|
||||||
#include <utils/hostosinfo.h>
|
#include <utils/hostosinfo.h>
|
||||||
#include <qt4projectmanager/qmakeparser.h>
|
#include <qmakeprojectmanager/qmakeparser.h>
|
||||||
|
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
|
|
||||||
|
|||||||
@@ -35,8 +35,8 @@
|
|||||||
#include <utils/environment.h>
|
#include <utils/environment.h>
|
||||||
#include <utils/hostosinfo.h>
|
#include <utils/hostosinfo.h>
|
||||||
|
|
||||||
#include <qt4projectmanager/qmakeproject.h>
|
#include <qmakeprojectmanager/qmakeproject.h>
|
||||||
#include <qt4projectmanager/qmakeprojectmanagerconstants.h>
|
#include <qmakeprojectmanager/qmakeprojectmanagerconstants.h>
|
||||||
|
|
||||||
#include <qtsupport/qtkitinformation.h>
|
#include <qtsupport/qtkitinformation.h>
|
||||||
#include <qtsupport/qtsupportconstants.h>
|
#include <qtsupport/qtsupportconstants.h>
|
||||||
@@ -109,12 +109,12 @@ void AndroidQtVersion::addToEnvironment(const ProjectExplorer::Kit *k, Utils::En
|
|||||||
env.set(QLatin1String("ANDROID_NDK_HOST"), AndroidConfigurations::instance().config().toolchainHost);
|
env.set(QLatin1String("ANDROID_NDK_HOST"), AndroidConfigurations::instance().config().toolchainHost);
|
||||||
env.set(QLatin1String("ANDROID_NDK_ROOT"), AndroidConfigurations::instance().config().ndkLocation.toUserOutput());
|
env.set(QLatin1String("ANDROID_NDK_ROOT"), AndroidConfigurations::instance().config().ndkLocation.toUserOutput());
|
||||||
|
|
||||||
Qt4Project *qt4pro = qobject_cast<QmakeProjectManager::Qt4Project *>(ProjectExplorerPlugin::instance()->currentProject());
|
QmakeProject *qmakeProject = qobject_cast<QmakeProjectManager::QmakeProject *>(ProjectExplorerPlugin::instance()->currentProject());
|
||||||
if (!qt4pro || !qt4pro->activeTarget()
|
if (!qmakeProject || !qmakeProject->activeTarget()
|
||||||
|| QtSupport::QtKitInformation::qtVersion(k)->type() != QLatin1String(Constants::ANDROIDQT))
|
|| QtSupport::QtKitInformation::qtVersion(k)->type() != QLatin1String(Constants::ANDROIDQT))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Target *target = qt4pro->activeTarget();
|
Target *target = qmakeProject->activeTarget();
|
||||||
if (DeviceTypeKitInformation::deviceTypeId(target->kit()) != Constants::ANDROID_DEVICE_TYPE)
|
if (DeviceTypeKitInformation::deviceTypeId(target->kit()) != Constants::ANDROID_DEVICE_TYPE)
|
||||||
return;
|
return;
|
||||||
if (AndroidConfigurations::instance().config().ndkLocation.isEmpty()
|
if (AndroidConfigurations::instance().config().ndkLocation.isEmpty()
|
||||||
|
|||||||
@@ -37,8 +37,8 @@
|
|||||||
#include <projectexplorer/target.h>
|
#include <projectexplorer/target.h>
|
||||||
#include <qtsupport/qtoutputformatter.h>
|
#include <qtsupport/qtoutputformatter.h>
|
||||||
#include <qtsupport/qtkitinformation.h>
|
#include <qtsupport/qtkitinformation.h>
|
||||||
#include <qt4projectmanager/qmakeproject.h>
|
#include <qmakeprojectmanager/qmakeproject.h>
|
||||||
#include <qt4projectmanager/qmakenodes.h>
|
#include <qmakeprojectmanager/qmakenodes.h>
|
||||||
|
|
||||||
#include <utils/qtcassert.h>
|
#include <utils/qtcassert.h>
|
||||||
|
|
||||||
@@ -47,7 +47,7 @@ const char PRO_FILE_KEY[] = "Qt4ProjectManager.Qt4RunConfiguration.ProFile";
|
|||||||
}
|
}
|
||||||
|
|
||||||
using namespace ProjectExplorer;
|
using namespace ProjectExplorer;
|
||||||
using QmakeProjectManager::Qt4Project;
|
using QmakeProjectManager::QmakeProject;
|
||||||
|
|
||||||
namespace Android {
|
namespace Android {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
@@ -56,7 +56,7 @@ AndroidRunConfiguration::AndroidRunConfiguration(Target *parent, Core::Id id, co
|
|||||||
: RunConfiguration(parent, id)
|
: RunConfiguration(parent, id)
|
||||||
, m_proFilePath(path)
|
, m_proFilePath(path)
|
||||||
{
|
{
|
||||||
Qt4Project *project = static_cast<Qt4Project *>(parent->project());
|
QmakeProject *project = static_cast<QmakeProject *>(parent->project());
|
||||||
m_parseSuccess = project->validParse(m_proFilePath);
|
m_parseSuccess = project->validParse(m_proFilePath);
|
||||||
m_parseInProgress = project->parseInProgress(m_proFilePath);
|
m_parseInProgress = project->parseInProgress(m_proFilePath);
|
||||||
init();
|
init();
|
||||||
@@ -74,16 +74,16 @@ AndroidRunConfiguration::AndroidRunConfiguration(Target *parent, AndroidRunConfi
|
|||||||
void AndroidRunConfiguration::init()
|
void AndroidRunConfiguration::init()
|
||||||
{
|
{
|
||||||
setDefaultDisplayName(defaultDisplayName());
|
setDefaultDisplayName(defaultDisplayName());
|
||||||
connect(target()->project(), SIGNAL(proFileUpdated(QmakeProjectManager::Qt4ProFileNode*,bool,bool)),
|
connect(target()->project(), SIGNAL(proFileUpdated(QmakeProjectManager::QmakeProFileNode*,bool,bool)),
|
||||||
this, SLOT(proFileUpdated(QmakeProjectManager::Qt4ProFileNode*,bool,bool)));
|
this, SLOT(proFileUpdated(QmakeProjectManager::QmakeProFileNode*,bool,bool)));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AndroidRunConfiguration::fromMap(const QVariantMap &map)
|
bool AndroidRunConfiguration::fromMap(const QVariantMap &map)
|
||||||
{
|
{
|
||||||
const QDir projectDir = QDir(target()->project()->projectDirectory());
|
const QDir projectDir = QDir(target()->project()->projectDirectory());
|
||||||
m_proFilePath = QDir::cleanPath(projectDir.filePath(map.value(QLatin1String(PRO_FILE_KEY)).toString()));
|
m_proFilePath = QDir::cleanPath(projectDir.filePath(map.value(QLatin1String(PRO_FILE_KEY)).toString()));
|
||||||
m_parseSuccess = static_cast<Qt4Project *>(target()->project())->validParse(m_proFilePath);
|
m_parseSuccess = static_cast<QmakeProject *>(target()->project())->validParse(m_proFilePath);
|
||||||
m_parseInProgress = static_cast<Qt4Project *>(target()->project())->parseInProgress(m_proFilePath);
|
m_parseInProgress = static_cast<QmakeProject *>(target()->project())->parseInProgress(m_proFilePath);
|
||||||
|
|
||||||
return RunConfiguration::fromMap(map);
|
return RunConfiguration::fromMap(map);
|
||||||
}
|
}
|
||||||
@@ -108,11 +108,11 @@ QString AndroidRunConfiguration::disabledReason() const
|
|||||||
.arg(QFileInfo(m_proFilePath).fileName());
|
.arg(QFileInfo(m_proFilePath).fileName());
|
||||||
|
|
||||||
if (!m_parseSuccess)
|
if (!m_parseSuccess)
|
||||||
return static_cast<Qt4Project *>(target()->project())->disabledReasonForRunConfiguration(m_proFilePath);
|
return static_cast<QmakeProject *>(target()->project())->disabledReasonForRunConfiguration(m_proFilePath);
|
||||||
return QString();
|
return QString();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AndroidRunConfiguration::proFileUpdated(QmakeProjectManager::Qt4ProFileNode *pro, bool success, bool parseInProgress)
|
void AndroidRunConfiguration::proFileUpdated(QmakeProjectManager::QmakeProFileNode *pro, bool success, bool parseInProgress)
|
||||||
{
|
{
|
||||||
if (m_proFilePath != pro->path())
|
if (m_proFilePath != pro->path())
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -35,7 +35,7 @@
|
|||||||
|
|
||||||
#include <projectexplorer/runconfiguration.h>
|
#include <projectexplorer/runconfiguration.h>
|
||||||
|
|
||||||
namespace QmakeProjectManager { class Qt4ProFileNode; }
|
namespace QmakeProjectManager { class QmakeProFileNode; }
|
||||||
|
|
||||||
namespace Android {
|
namespace Android {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
@@ -70,7 +70,7 @@ protected:
|
|||||||
bool fromMap(const QVariantMap &map);
|
bool fromMap(const QVariantMap &map);
|
||||||
QVariantMap toMap() const;
|
QVariantMap toMap() const;
|
||||||
private slots:
|
private slots:
|
||||||
void proFileUpdated(QmakeProjectManager::Qt4ProFileNode *pro, bool success, bool parseInProgress);
|
void proFileUpdated(QmakeProjectManager::QmakeProFileNode *pro, bool success, bool parseInProgress);
|
||||||
private:
|
private:
|
||||||
void init();
|
void init();
|
||||||
|
|
||||||
|
|||||||
@@ -40,8 +40,8 @@
|
|||||||
#include <projectexplorer/projectexplorerconstants.h>
|
#include <projectexplorer/projectexplorerconstants.h>
|
||||||
#include <projectexplorer/target.h>
|
#include <projectexplorer/target.h>
|
||||||
#include <debugger/debuggerconstants.h>
|
#include <debugger/debuggerconstants.h>
|
||||||
#include <qt4projectmanager/qmakeproject.h>
|
#include <qmakeprojectmanager/qmakeproject.h>
|
||||||
#include <qt4projectmanager/qmakenodes.h>
|
#include <qmakeprojectmanager/qmakenodes.h>
|
||||||
#include <qtsupport/customexecutablerunconfiguration.h>
|
#include <qtsupport/customexecutablerunconfiguration.h>
|
||||||
#include <qtsupport/qtkitinformation.h>
|
#include <qtsupport/qtkitinformation.h>
|
||||||
#include <qtsupport/qtsupportconstants.h>
|
#include <qtsupport/qtsupportconstants.h>
|
||||||
@@ -90,9 +90,9 @@ QList<Core::Id> AndroidRunConfigurationFactory::availableCreationIds(Target *par
|
|||||||
QList<Core::Id> ids;
|
QList<Core::Id> ids;
|
||||||
if (!AndroidManager::supportsAndroid(parent))
|
if (!AndroidManager::supportsAndroid(parent))
|
||||||
return ids;
|
return ids;
|
||||||
QList<Qt4ProFileNode *> nodes = static_cast<Qt4Project *>(parent->project())->allProFiles();
|
QList<QmakeProFileNode *> nodes = static_cast<QmakeProject *>(parent->project())->allProFiles();
|
||||||
const Core::Id base = Core::Id(ANDROID_RC_ID_PREFIX);
|
const Core::Id base = Core::Id(ANDROID_RC_ID_PREFIX);
|
||||||
foreach (Qt4ProFileNode *node, nodes)
|
foreach (QmakeProFileNode *node, nodes)
|
||||||
if (node->projectType() == ApplicationTemplate || node->projectType() == LibraryTemplate)
|
if (node->projectType() == ApplicationTemplate || node->projectType() == LibraryTemplate)
|
||||||
ids << base.withSuffix(node->path());
|
ids << base.withSuffix(node->path());
|
||||||
return ids;
|
return ids;
|
||||||
|
|||||||
@@ -31,7 +31,7 @@
|
|||||||
#define ANDROIDRUNFACTORIES_H
|
#define ANDROIDRUNFACTORIES_H
|
||||||
|
|
||||||
#include <projectexplorer/runconfiguration.h>
|
#include <projectexplorer/runconfiguration.h>
|
||||||
#include <qt4projectmanager/qmakerunconfigurationfactory.h>
|
#include <qmakeprojectmanager/qmakerunconfigurationfactory.h>
|
||||||
|
|
||||||
namespace ProjectExplorer {
|
namespace ProjectExplorer {
|
||||||
class RunControl;
|
class RunControl;
|
||||||
|
|||||||
@@ -30,8 +30,8 @@
|
|||||||
#include "createandroidmanifestwizard.h"
|
#include "createandroidmanifestwizard.h"
|
||||||
|
|
||||||
#include <projectexplorer/target.h>
|
#include <projectexplorer/target.h>
|
||||||
#include <qt4projectmanager/qmakeproject.h>
|
#include <qmakeprojectmanager/qmakeproject.h>
|
||||||
#include <qt4projectmanager/qmakenodes.h>
|
#include <qmakeprojectmanager/qmakenodes.h>
|
||||||
#include <proparser/prowriter.h>
|
#include <proparser/prowriter.h>
|
||||||
#include <QComboBox>
|
#include <QComboBox>
|
||||||
#include <QFormLayout>
|
#include <QFormLayout>
|
||||||
@@ -43,8 +43,8 @@
|
|||||||
|
|
||||||
using namespace Android;
|
using namespace Android;
|
||||||
using namespace Android::Internal;
|
using namespace Android::Internal;
|
||||||
using QmakeProjectManager::Qt4Project;
|
using QmakeProjectManager::QmakeProject;
|
||||||
using QmakeProjectManager::Qt4ProFileNode;
|
using QmakeProjectManager::QmakeProFileNode;
|
||||||
|
|
||||||
//
|
//
|
||||||
// NoApplicationProFilePage
|
// NoApplicationProFilePage
|
||||||
@@ -63,7 +63,7 @@ NoApplicationProFilePage::NoApplicationProFilePage(CreateAndroidManifestWizard *
|
|||||||
//
|
//
|
||||||
// ChooseProFilePage
|
// ChooseProFilePage
|
||||||
//
|
//
|
||||||
ChooseProFilePage::ChooseProFilePage(CreateAndroidManifestWizard *wizard, const QList<Qt4ProFileNode *> &nodes)
|
ChooseProFilePage::ChooseProFilePage(CreateAndroidManifestWizard *wizard, const QList<QmakeProFileNode *> &nodes)
|
||||||
: m_wizard(wizard)
|
: m_wizard(wizard)
|
||||||
{
|
{
|
||||||
QFormLayout *fl = new QFormLayout(this);
|
QFormLayout *fl = new QFormLayout(this);
|
||||||
@@ -73,7 +73,7 @@ ChooseProFilePage::ChooseProFilePage(CreateAndroidManifestWizard *wizard, const
|
|||||||
fl->addRow(label);
|
fl->addRow(label);
|
||||||
|
|
||||||
m_comboBox = new QComboBox(this);
|
m_comboBox = new QComboBox(this);
|
||||||
foreach (Qt4ProFileNode *node, nodes)
|
foreach (QmakeProFileNode *node, nodes)
|
||||||
m_comboBox->addItem(node->displayName(), QVariant::fromValue(static_cast<void *>(node))); // TODO something more?
|
m_comboBox->addItem(node->displayName(), QVariant::fromValue(static_cast<void *>(node))); // TODO something more?
|
||||||
|
|
||||||
connect(m_comboBox, SIGNAL(currentIndexChanged(int)),
|
connect(m_comboBox, SIGNAL(currentIndexChanged(int)),
|
||||||
@@ -86,7 +86,7 @@ ChooseProFilePage::ChooseProFilePage(CreateAndroidManifestWizard *wizard, const
|
|||||||
void ChooseProFilePage::nodeSelected(int index)
|
void ChooseProFilePage::nodeSelected(int index)
|
||||||
{
|
{
|
||||||
Q_UNUSED(index)
|
Q_UNUSED(index)
|
||||||
m_wizard->setNode(static_cast<Qt4ProFileNode *>(m_comboBox->itemData(m_comboBox->currentIndex()).value<void *>()));
|
m_wizard->setNode(static_cast<QmakeProFileNode *>(m_comboBox->itemData(m_comboBox->currentIndex()).value<void *>()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -133,8 +133,8 @@ CreateAndroidManifestWizard::CreateAndroidManifestWizard(ProjectExplorer::Target
|
|||||||
{
|
{
|
||||||
setWindowTitle(tr("Create Android Manifest Wizard"));
|
setWindowTitle(tr("Create Android Manifest Wizard"));
|
||||||
|
|
||||||
Qt4Project *project = static_cast<Qt4Project *>(target->project());
|
QmakeProject *project = static_cast<QmakeProject *>(target->project());
|
||||||
QList<Qt4ProFileNode *> nodes = project->applicationProFiles();
|
QList<QmakeProFileNode *> nodes = project->applicationProFiles();
|
||||||
if (nodes.isEmpty()) {
|
if (nodes.isEmpty()) {
|
||||||
// oh uhm can't create anything
|
// oh uhm can't create anything
|
||||||
addPage(new NoApplicationProFilePage(this));
|
addPage(new NoApplicationProFilePage(this));
|
||||||
@@ -147,12 +147,12 @@ CreateAndroidManifestWizard::CreateAndroidManifestWizard(ProjectExplorer::Target
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QmakeProjectManager::Qt4ProFileNode *CreateAndroidManifestWizard::node() const
|
QmakeProjectManager::QmakeProFileNode *CreateAndroidManifestWizard::node() const
|
||||||
{
|
{
|
||||||
return m_node;
|
return m_node;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CreateAndroidManifestWizard::setNode(QmakeProjectManager::Qt4ProFileNode *node)
|
void CreateAndroidManifestWizard::setNode(QmakeProjectManager::QmakeProFileNode *node)
|
||||||
{
|
{
|
||||||
m_node = node;
|
m_node = node;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ class QComboBox;
|
|||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
namespace ProjectExplorer { class Target; }
|
namespace ProjectExplorer { class Target; }
|
||||||
namespace QmakeProjectManager { class Qt4ProFileNode; }
|
namespace QmakeProjectManager { class QmakeProFileNode; }
|
||||||
|
|
||||||
namespace Android {
|
namespace Android {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
@@ -57,7 +57,7 @@ class ChooseProFilePage : public QWizardPage
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
ChooseProFilePage(CreateAndroidManifestWizard *wizard, const QList<QmakeProjectManager::Qt4ProFileNode *> &nodes);
|
ChooseProFilePage(CreateAndroidManifestWizard *wizard, const QList<QmakeProjectManager::QmakeProFileNode *> &nodes);
|
||||||
private slots:
|
private slots:
|
||||||
void nodeSelected(int index);
|
void nodeSelected(int index);
|
||||||
private:
|
private:
|
||||||
@@ -81,8 +81,8 @@ class CreateAndroidManifestWizard : public Utils::Wizard
|
|||||||
public:
|
public:
|
||||||
CreateAndroidManifestWizard(ProjectExplorer::Target *target);
|
CreateAndroidManifestWizard(ProjectExplorer::Target *target);
|
||||||
|
|
||||||
QmakeProjectManager::Qt4ProFileNode *node() const;
|
QmakeProjectManager::QmakeProFileNode *node() const;
|
||||||
void setNode(QmakeProjectManager::Qt4ProFileNode *node);
|
void setNode(QmakeProjectManager::QmakeProFileNode *node);
|
||||||
|
|
||||||
QString sourceFileName() const;
|
QString sourceFileName() const;
|
||||||
|
|
||||||
@@ -93,7 +93,7 @@ public slots:
|
|||||||
private:
|
private:
|
||||||
void createAndroidManifestFile();
|
void createAndroidManifestFile();
|
||||||
ProjectExplorer::Target *m_target;
|
ProjectExplorer::Target *m_target;
|
||||||
QmakeProjectManager::Qt4ProFileNode *m_node;
|
QmakeProjectManager::QmakeProFileNode *m_node;
|
||||||
QString m_directory;
|
QString m_directory;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -223,11 +223,6 @@ QString CppPreprocessor::cleanPath(const QString &path)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline bool isInjectedFile(const QString &fileName)
|
|
||||||
{
|
|
||||||
return fileName.startsWith(QLatin1Char('<')) && fileName.endsWith(QLatin1Char('>'));
|
|
||||||
}
|
|
||||||
|
|
||||||
QString CppPreprocessor::resolveFile_helper(const QString &fileName, IncludeType type)
|
QString CppPreprocessor::resolveFile_helper(const QString &fileName, IncludeType type)
|
||||||
{
|
{
|
||||||
const QFileInfo fileInfo(fileName);
|
const QFileInfo fileInfo(fileName);
|
||||||
|
|||||||
@@ -88,8 +88,10 @@ void DebuggerItem::reinitializeFromFile()
|
|||||||
{
|
{
|
||||||
QProcess proc;
|
QProcess proc;
|
||||||
proc.start(m_command.toString(), QStringList() << QLatin1String("--version"));
|
proc.start(m_command.toString(), QStringList() << QLatin1String("--version"));
|
||||||
proc.waitForStarted();
|
if (!proc.waitForStarted() || !proc.waitForFinished()) {
|
||||||
proc.waitForFinished();
|
m_engineType = NoEngineType;
|
||||||
|
return;
|
||||||
|
}
|
||||||
QByteArray ba = proc.readAll();
|
QByteArray ba = proc.readAll();
|
||||||
if (ba.contains("gdb")) {
|
if (ba.contains("gdb")) {
|
||||||
m_engineType = GdbEngineType;
|
m_engineType = GdbEngineType;
|
||||||
@@ -120,6 +122,19 @@ void DebuggerItem::reinitializeFromFile()
|
|||||||
m_engineType = PdbEngineType;
|
m_engineType = PdbEngineType;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (ba.isEmpty()) {
|
||||||
|
proc.start(m_command.toString(), QStringList() << QLatin1String("-version"));
|
||||||
|
if (!proc.waitForStarted() || !proc.waitForFinished()) {
|
||||||
|
m_engineType = NoEngineType;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ba = proc.readAll();
|
||||||
|
if (ba.startsWith("cdb")) {
|
||||||
|
m_engineType = CdbEngineType;
|
||||||
|
m_abis = Abi::abisOfBinary(m_command);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
m_engineType = NoEngineType;
|
m_engineType = NoEngineType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -243,11 +243,16 @@ void DebuggerItemManager::autoDetectGdbOrLldbDebuggers()
|
|||||||
|
|
||||||
void DebuggerItemManager::readLegacyDebuggers()
|
void DebuggerItemManager::readLegacyDebuggers()
|
||||||
{
|
{
|
||||||
QFileInfo settingsLocation(Core::ICore::settings()->fileName());
|
QFileInfo systemLocation(Core::ICore::settings(QSettings::SystemScope)->fileName());
|
||||||
FileName legacyKits = FileName::fromString(settingsLocation.absolutePath() + QLatin1String(DEBUGGER_LEGACY_FILENAME));
|
readLegacyDebuggers(FileName::fromString(systemLocation.absolutePath() + QLatin1String(DEBUGGER_LEGACY_FILENAME)));
|
||||||
|
QFileInfo userLocation(Core::ICore::settings()->fileName());
|
||||||
|
readLegacyDebuggers(FileName::fromString(userLocation.absolutePath() + QLatin1String(DEBUGGER_LEGACY_FILENAME)));
|
||||||
|
}
|
||||||
|
|
||||||
|
void DebuggerItemManager::readLegacyDebuggers(const FileName &file)
|
||||||
|
{
|
||||||
PersistentSettingsReader reader;
|
PersistentSettingsReader reader;
|
||||||
if (!reader.load(legacyKits))
|
if (!reader.load(file))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
foreach (const QVariant &v, reader.restoreValues()) {
|
foreach (const QVariant &v, reader.restoreValues()) {
|
||||||
|
|||||||
@@ -83,6 +83,7 @@ private:
|
|||||||
static void autoDetectGdbOrLldbDebuggers();
|
static void autoDetectGdbOrLldbDebuggers();
|
||||||
static void autoDetectCdbDebuggers();
|
static void autoDetectCdbDebuggers();
|
||||||
static void readLegacyDebuggers();
|
static void readLegacyDebuggers();
|
||||||
|
static void readLegacyDebuggers(const Utils::FileName &file);
|
||||||
|
|
||||||
static Utils::PersistentSettingsWriter *m_writer;
|
static Utils::PersistentSettingsWriter *m_writer;
|
||||||
static QList<DebuggerItem> m_debuggers;
|
static QList<DebuggerItem> m_debuggers;
|
||||||
|
|||||||
@@ -37,6 +37,7 @@
|
|||||||
#include <utils/detailswidget.h>
|
#include <utils/detailswidget.h>
|
||||||
#include <utils/pathchooser.h>
|
#include <utils/pathchooser.h>
|
||||||
#include <utils/qtcassert.h>
|
#include <utils/qtcassert.h>
|
||||||
|
#include <utils/winutils.h>
|
||||||
|
|
||||||
#include <QFormLayout>
|
#include <QFormLayout>
|
||||||
#include <QHeaderView>
|
#include <QHeaderView>
|
||||||
@@ -140,7 +141,8 @@ void DebuggerItemConfigWidget::setItem(const DebuggerItem &item)
|
|||||||
void DebuggerItemConfigWidget::apply()
|
void DebuggerItemConfigWidget::apply()
|
||||||
{
|
{
|
||||||
DebuggerItem item = m_model->currentDebugger();
|
DebuggerItem item = m_model->currentDebugger();
|
||||||
QTC_ASSERT(item.isValid(), return);
|
if (!item.isValid())
|
||||||
|
return; // Nothing was selected here.
|
||||||
|
|
||||||
item.setDisplayName(m_displayNameLineEdit->text());
|
item.setDisplayName(m_displayNameLineEdit->text());
|
||||||
item.setCommand(m_binaryChooser->fileName());
|
item.setCommand(m_binaryChooser->fileName());
|
||||||
|
|||||||
@@ -79,12 +79,6 @@
|
|||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
#include <QPushButton>
|
#include <QPushButton>
|
||||||
|
|
||||||
#ifdef Q_OS_UNIX
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <dlfcn.h>
|
|
||||||
#endif
|
|
||||||
#include <ctype.h>
|
|
||||||
|
|
||||||
using namespace ProjectExplorer;
|
using namespace ProjectExplorer;
|
||||||
using namespace Utils;
|
using namespace Utils;
|
||||||
|
|
||||||
@@ -1332,39 +1326,6 @@ static bool isExitedReason(const QByteArray &reason)
|
|||||||
|| reason == "exited"; // inferior exited
|
|| reason == "exited"; // inferior exited
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
void GdbEngine::handleAqcuiredInferior()
|
|
||||||
{
|
|
||||||
// Reverse debugging. FIXME: Should only be used when available.
|
|
||||||
//if (debuggerCore()->boolSetting(EnableReverseDebugging))
|
|
||||||
// postCommand("target response");
|
|
||||||
|
|
||||||
tryLoadDebuggingHelpers();
|
|
||||||
|
|
||||||
# ifndef Q_OS_MAC
|
|
||||||
// intentionally after tryLoadDebuggingHelpers(),
|
|
||||||
// otherwise we'd interrupt solib loading.
|
|
||||||
if (debuggerCore()->boolSetting(AllPluginBreakpoints)) {
|
|
||||||
postCommand("set auto-solib-add on");
|
|
||||||
postCommand("set stop-on-solib-events 0");
|
|
||||||
postCommand("sharedlibrary .*");
|
|
||||||
} else if (debuggerCore()->boolSetting(SelectedPluginBreakpoints)) {
|
|
||||||
postCommand("set auto-solib-add on");
|
|
||||||
postCommand("set stop-on-solib-events 1");
|
|
||||||
postCommand("sharedlibrary "
|
|
||||||
+ theDebuggerStringSetting(SelectedPluginBreakpointsPattern));
|
|
||||||
} else if (debuggerCore()->boolSetting(NoPluginBreakpoints)) {
|
|
||||||
// should be like that already
|
|
||||||
postCommand("set auto-solib-add off");
|
|
||||||
postCommand("set stop-on-solib-events 0");
|
|
||||||
}
|
|
||||||
# endif
|
|
||||||
|
|
||||||
// It's nicer to see a bit of the world we live in.
|
|
||||||
reloadModulesInternal();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void GdbEngine::handleStopResponse(const GdbMi &data)
|
void GdbEngine::handleStopResponse(const GdbMi &data)
|
||||||
{
|
{
|
||||||
// Ignore trap on Windows terminals, which results in
|
// Ignore trap on Windows terminals, which results in
|
||||||
|
|||||||
@@ -32,6 +32,7 @@
|
|||||||
#include <debugger/debuggeractions.h>
|
#include <debugger/debuggeractions.h>
|
||||||
#include <debugger/debuggercore.h>
|
#include <debugger/debuggercore.h>
|
||||||
#include <debugger/debuggerdialogs.h>
|
#include <debugger/debuggerdialogs.h>
|
||||||
|
#include <debugger/debuggerinternalconstants.h>
|
||||||
#include <debugger/debuggerplugin.h>
|
#include <debugger/debuggerplugin.h>
|
||||||
#include <debugger/debuggerprotocol.h>
|
#include <debugger/debuggerprotocol.h>
|
||||||
#include <debugger/debuggerstartparameters.h>
|
#include <debugger/debuggerstartparameters.h>
|
||||||
@@ -66,9 +67,6 @@
|
|||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
#include <QToolTip>
|
#include <QToolTip>
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
|
|
||||||
namespace Debugger {
|
namespace Debugger {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|
||||||
@@ -131,9 +129,16 @@ void LldbEngine::shutdownEngine()
|
|||||||
void LldbEngine::setupEngine()
|
void LldbEngine::setupEngine()
|
||||||
{
|
{
|
||||||
QTC_ASSERT(state() == EngineSetupRequested, qDebug() << state());
|
QTC_ASSERT(state() == EngineSetupRequested, qDebug() << state());
|
||||||
|
if (startParameters().remoteSetupNeeded) {
|
||||||
|
notifyEngineRequestRemoteSetup();
|
||||||
|
} else {
|
||||||
|
startLldb();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void LldbEngine::startLldb()
|
||||||
|
{
|
||||||
m_lldbCmd = startParameters().debuggerCommand;
|
m_lldbCmd = startParameters().debuggerCommand;
|
||||||
|
|
||||||
connect(&m_lldbProc, SIGNAL(error(QProcess::ProcessError)),
|
connect(&m_lldbProc, SIGNAL(error(QProcess::ProcessError)),
|
||||||
SLOT(handleLldbError(QProcess::ProcessError)));
|
SLOT(handleLldbError(QProcess::ProcessError)));
|
||||||
connect(&m_lldbProc, SIGNAL(finished(int,QProcess::ExitStatus)),
|
connect(&m_lldbProc, SIGNAL(finished(int,QProcess::ExitStatus)),
|
||||||
@@ -170,9 +175,14 @@ void LldbEngine::setupInferior()
|
|||||||
const DebuggerStartParameters &sp = startParameters();
|
const DebuggerStartParameters &sp = startParameters();
|
||||||
Command cmd("setupInferior");
|
Command cmd("setupInferior");
|
||||||
cmd.arg("executable", QFileInfo(sp.executable).absoluteFilePath());
|
cmd.arg("executable", QFileInfo(sp.executable).absoluteFilePath());
|
||||||
cmd.arg("startMode", sp.startMode);
|
cmd.arg("startMode", sp.startMode); // directly relying on this is brittle wrt. insertions, so check it here
|
||||||
cmd.arg("processArgs", sp.processArgs);
|
cmd.arg("processArgs", sp.processArgs);
|
||||||
cmd.arg("attachPid", sp.attachPID);
|
cmd.arg("attachPid", ((sp.startMode == AttachCrashedExternal || sp.startMode == AttachExternal)
|
||||||
|
? sp.attachPID : 0));
|
||||||
|
cmd.arg("sysRoot", sp.sysRoot);
|
||||||
|
cmd.arg("remoteChannel", ((sp.startMode == AttachToRemoteProcess || sp.startMode == AttachToRemoteServer)
|
||||||
|
? sp.remoteChannel : QString()));
|
||||||
|
|
||||||
runCommand(cmd);
|
runCommand(cmd);
|
||||||
requestUpdateWatchers();
|
requestUpdateWatchers();
|
||||||
}
|
}
|
||||||
@@ -1107,6 +1117,39 @@ DebuggerEngine *createLldbEngine(const DebuggerStartParameters &startParameters)
|
|||||||
return new LldbEngine(startParameters);
|
return new LldbEngine(startParameters);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LldbEngine::notifyEngineRemoteSetupDone(int portOrPid, int qmlPort)
|
||||||
|
{
|
||||||
|
QTC_ASSERT(state() == EngineSetupRequested, qDebug() << state());
|
||||||
|
DebuggerEngine::notifyEngineRemoteSetupDone(portOrPid, qmlPort);
|
||||||
|
|
||||||
|
if (qmlPort != -1)
|
||||||
|
startParameters().qmlServerPort = qmlPort;
|
||||||
|
if (portOrPid != -1) {
|
||||||
|
if (startParameters().startMode == AttachExternal) {
|
||||||
|
startParameters().attachPID = portOrPid;
|
||||||
|
} else {
|
||||||
|
QString &rc = startParameters().remoteChannel;
|
||||||
|
const int sepIndex = rc.lastIndexOf(QLatin1Char(':'));
|
||||||
|
if (sepIndex != -1) {
|
||||||
|
rc.replace(sepIndex + 1, rc.count() - sepIndex - 1,
|
||||||
|
QString::number(portOrPid));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
startLldb();
|
||||||
|
}
|
||||||
|
|
||||||
|
void LldbEngine::notifyEngineRemoteSetupFailed(const QString &reason)
|
||||||
|
{
|
||||||
|
QTC_ASSERT(state() == EngineSetupRequested, qDebug() << state());
|
||||||
|
DebuggerEngine::notifyEngineRemoteSetupFailed(reason);
|
||||||
|
showMessage(_("ADAPTER START FAILED"));
|
||||||
|
if (!reason.isEmpty()) {
|
||||||
|
const QString title = tr("Adapter start failed");
|
||||||
|
Core::ICore::showWarningWithOptions(title, reason);
|
||||||
|
}
|
||||||
|
notifyEngineSetupFailed();
|
||||||
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -95,6 +95,7 @@ private:
|
|||||||
void executeNextI();
|
void executeNextI();
|
||||||
|
|
||||||
void setupEngine();
|
void setupEngine();
|
||||||
|
void startLldb();
|
||||||
void setupInferior();
|
void setupInferior();
|
||||||
void runEngine();
|
void runEngine();
|
||||||
void shutdownInferior();
|
void shutdownInferior();
|
||||||
@@ -181,6 +182,9 @@ private:
|
|||||||
void handleUpdateStack(const QByteArray &response);
|
void handleUpdateStack(const QByteArray &response);
|
||||||
void handleUpdateThreads(const QByteArray &response);
|
void handleUpdateThreads(const QByteArray &response);
|
||||||
|
|
||||||
|
void notifyEngineRemoteSetupDone(int portOrPid, int qmlPort);
|
||||||
|
void notifyEngineRemoteSetupFailed(const QString &reason);
|
||||||
|
|
||||||
void handleChildren(const WatchData &data0, const GdbMi &item,
|
void handleChildren(const WatchData &data0, const GdbMi &item,
|
||||||
QList<WatchData> *list);
|
QList<WatchData> *list);
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ QtcPlugin {
|
|||||||
|
|
||||||
Depends { name: "Core" }
|
Depends { name: "Core" }
|
||||||
Depends { name: "ProjectExplorer" }
|
Depends { name: "ProjectExplorer" }
|
||||||
Depends { name: "Qt4ProjectManager" }
|
Depends { name: "QmakeProjectManager" }
|
||||||
Depends { name: "Debugger" }
|
Depends { name: "Debugger" }
|
||||||
Depends { name: "QtSupport" }
|
Depends { name: "QtSupport" }
|
||||||
Depends { name: "Qt"; submodules: ["widgets", "xml", "network"] }
|
Depends { name: "Qt"; submodules: ["widgets", "xml", "network"] }
|
||||||
|
|||||||
@@ -5,4 +5,4 @@ QTC_PLUGIN_DEPENDS += \
|
|||||||
coreplugin \
|
coreplugin \
|
||||||
debugger \
|
debugger \
|
||||||
projectexplorer \
|
projectexplorer \
|
||||||
qt4projectmanager
|
qmakeprojectmanager
|
||||||
|
|||||||
@@ -43,11 +43,11 @@
|
|||||||
#include <projectexplorer/projectexplorerconstants.h>
|
#include <projectexplorer/projectexplorerconstants.h>
|
||||||
#include <projectexplorer/toolchain.h>
|
#include <projectexplorer/toolchain.h>
|
||||||
#include <projectexplorer/gcctoolchain.h>
|
#include <projectexplorer/gcctoolchain.h>
|
||||||
#include <qt4projectmanager/qmakebuildconfiguration.h>
|
#include <qmakeprojectmanager/qmakebuildconfiguration.h>
|
||||||
#include <qt4projectmanager/qmakeprojectmanagerconstants.h>
|
#include <qmakeprojectmanager/qmakeprojectmanagerconstants.h>
|
||||||
#include <qt4projectmanager/qmakeprojectmanager.h>
|
#include <qmakeprojectmanager/qmakeprojectmanager.h>
|
||||||
#include <qt4projectmanager/qmakeproject.h>
|
#include <qmakeprojectmanager/qmakeproject.h>
|
||||||
#include <qt4projectmanager/qmakenodes.h>
|
#include <qmakeprojectmanager/qmakenodes.h>
|
||||||
#include <qtsupport/qtkitinformation.h>
|
#include <qtsupport/qtkitinformation.h>
|
||||||
#include <qtsupport/qtparser.h>
|
#include <qtsupport/qtparser.h>
|
||||||
#include <coreplugin/variablemanager.h>
|
#include <coreplugin/variablemanager.h>
|
||||||
|
|||||||
@@ -312,7 +312,7 @@ void IosConfigurations::updateAutomaticKitList()
|
|||||||
//DeviceKitInformation::setDevice(newKit, device);
|
//DeviceKitInformation::setDevice(newKit, device);
|
||||||
|
|
||||||
Debugger::DebuggerItem debugger;
|
Debugger::DebuggerItem debugger;
|
||||||
debugger.setCommand(pToolchain->suggestedDebugger());
|
debugger.setCommand(pToolchain->suggestedDebugger()); // use lldbPath() instead?
|
||||||
debugger.setEngineType(Debugger::LldbEngineType);
|
debugger.setEngineType(Debugger::LldbEngineType);
|
||||||
debugger.setDisplayName(tr("IOS Debugger"));
|
debugger.setDisplayName(tr("IOS Debugger"));
|
||||||
debugger.setAutoDetected(true);
|
debugger.setAutoDetected(true);
|
||||||
@@ -371,6 +371,11 @@ FileName IosConfigurations::developerPath()
|
|||||||
return m_instance->m_developerPath;
|
return m_instance->m_developerPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FileName IosConfigurations::lldbPath()
|
||||||
|
{
|
||||||
|
return m_instance->m_lldbPath;
|
||||||
|
}
|
||||||
|
|
||||||
void IosConfigurations::save()
|
void IosConfigurations::save()
|
||||||
{
|
{
|
||||||
QSettings *settings = Core::ICore::settings();
|
QSettings *settings = Core::ICore::settings();
|
||||||
@@ -432,6 +437,18 @@ void IosConfigurations::setDeveloperPath(const FileName &devPath)
|
|||||||
m_instance->m_developerPath = devPath;
|
m_instance->m_developerPath = devPath;
|
||||||
m_instance->save();
|
m_instance->save();
|
||||||
updateAutomaticKitList();
|
updateAutomaticKitList();
|
||||||
|
QProcess lldbInfo;
|
||||||
|
lldbInfo.start(QLatin1String("xcrun"), QStringList() << QLatin1String("--find")
|
||||||
|
<< QLatin1String("lldb"));
|
||||||
|
if (!lldbInfo.waitForFinished(2000)) {
|
||||||
|
lldbInfo.kill();
|
||||||
|
} else {
|
||||||
|
QByteArray lPath=lldbInfo.readAll();
|
||||||
|
lPath.chop(1);
|
||||||
|
Utils::FileName lldbPath = Utils::FileName::fromString(QString::fromLocal8Bit(lPath.data(), lPath.size()));
|
||||||
|
if (lldbPath.toFileInfo().exists())
|
||||||
|
m_instance->m_lldbPath = lldbPath;
|
||||||
|
}
|
||||||
emit m_instance->updated();
|
emit m_instance->updated();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ public:
|
|||||||
static bool ignoreAllDevices();
|
static bool ignoreAllDevices();
|
||||||
static void setIgnoreAllDevices(bool ignoreDevices);
|
static void setIgnoreAllDevices(bool ignoreDevices);
|
||||||
static Utils::FileName developerPath();
|
static Utils::FileName developerPath();
|
||||||
|
static Utils::FileName lldbPath();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void updated();
|
void updated();
|
||||||
@@ -68,6 +69,7 @@ private:
|
|||||||
static void setDeveloperPath(const Utils::FileName &devPath);
|
static void setDeveloperPath(const Utils::FileName &devPath);
|
||||||
|
|
||||||
Utils::FileName m_developerPath;
|
Utils::FileName m_developerPath;
|
||||||
|
Utils::FileName m_lldbPath;
|
||||||
bool m_ignoreAllDevices;
|
bool m_ignoreAllDevices;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -37,14 +37,24 @@
|
|||||||
#include <debugger/debuggerkitinformation.h>
|
#include <debugger/debuggerkitinformation.h>
|
||||||
#include <debugger/debuggerrunner.h>
|
#include <debugger/debuggerrunner.h>
|
||||||
#include <debugger/debuggerstartparameters.h>
|
#include <debugger/debuggerstartparameters.h>
|
||||||
|
#include <debugger/debuggerrunconfigurationaspect.h>
|
||||||
|
#include <projectexplorer/toolchain.h>
|
||||||
#include <projectexplorer/target.h>
|
#include <projectexplorer/target.h>
|
||||||
#include <qt4projectmanager/qmakebuildconfiguration.h>
|
#include <qmakeprojectmanager/qmakebuildconfiguration.h>
|
||||||
#include <qt4projectmanager/qmakenodes.h>
|
#include <qmakeprojectmanager/qmakenodes.h>
|
||||||
#include <qt4projectmanager/qmakeproject.h>
|
#include <qmakeprojectmanager/qmakeproject.h>
|
||||||
#include <qtsupport/qtkitinformation.h>
|
#include <qtsupport/qtkitinformation.h>
|
||||||
|
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
|
#include <QTcpServer>
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#ifdef Q_OS_UNIX
|
||||||
|
#include <unistd.h>
|
||||||
|
#else
|
||||||
|
#include <io.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
using namespace Debugger;
|
using namespace Debugger;
|
||||||
using namespace ProjectExplorer;
|
using namespace ProjectExplorer;
|
||||||
@@ -56,14 +66,46 @@ namespace Internal {
|
|||||||
RunControl *IosDebugSupport::createDebugRunControl(IosRunConfiguration *runConfig,
|
RunControl *IosDebugSupport::createDebugRunControl(IosRunConfiguration *runConfig,
|
||||||
QString *errorMessage)
|
QString *errorMessage)
|
||||||
{
|
{
|
||||||
//Target *target = runConfig->target();
|
Target *target = runConfig->target();
|
||||||
//Qt4Project *project = static_cast<Qt4Project *>(target->project());
|
if (!target)
|
||||||
|
return 0;
|
||||||
|
ProjectExplorer::IDevice::ConstPtr device = DeviceKitInformation::device(target->kit());
|
||||||
|
if (device.isNull())
|
||||||
|
return 0;
|
||||||
|
QmakeProject *project = static_cast<QmakeProject *>(target->project());
|
||||||
|
|
||||||
DebuggerStartParameters params;
|
DebuggerStartParameters params;
|
||||||
params.startMode = AttachToRemoteServer;
|
if (device->type() == Core::Id(Ios::Constants::IOS_DEVICE_TYPE))
|
||||||
//params.displayName = IosManager::packageName(target);
|
params.startMode = AttachToRemoteProcess;
|
||||||
|
else
|
||||||
|
params.startMode = AttachExternal;
|
||||||
|
params.displayName = runConfig->appName();
|
||||||
params.remoteSetupNeeded = true;
|
params.remoteSetupNeeded = true;
|
||||||
|
|
||||||
|
Debugger::DebuggerRunConfigurationAspect *aspect
|
||||||
|
= runConfig->extraAspect<Debugger::DebuggerRunConfigurationAspect>();
|
||||||
|
if (aspect->useCppDebugger()) {
|
||||||
|
params.languages |= CppLanguage;
|
||||||
|
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 = runConfig->exePath().toString();
|
||||||
|
}
|
||||||
|
if (aspect->useQmlDebugger()) {
|
||||||
|
params.languages |= QmlLanguage;
|
||||||
|
QTcpServer server;
|
||||||
|
QTC_ASSERT(server.listen(QHostAddress::LocalHost)
|
||||||
|
|| server.listen(QHostAddress::LocalHostIPv6), return 0);
|
||||||
|
params.qmlServerAddress = server.serverAddress().toString();
|
||||||
|
params.remoteSetupNeeded = true;
|
||||||
|
//TODO: Not sure if these are the right paths.
|
||||||
|
params.projectSourceDirectory = project->projectDirectory();
|
||||||
|
params.projectSourceFiles = project->files(QmakeProject::ExcludeGeneratedFiles);
|
||||||
|
params.projectBuildDirectory = project->rootQmakeProjectNode()->buildDir();
|
||||||
|
}
|
||||||
|
|
||||||
DebuggerRunControl * const debuggerRunControl
|
DebuggerRunControl * const debuggerRunControl
|
||||||
= DebuggerPlugin::createDebugger(params, runConfig, errorMessage);
|
= DebuggerPlugin::createDebugger(params, runConfig, errorMessage);
|
||||||
new IosDebugSupport(runConfig, debuggerRunControl);
|
new IosDebugSupport(runConfig, debuggerRunControl);
|
||||||
@@ -74,7 +116,7 @@ IosDebugSupport::IosDebugSupport(IosRunConfiguration *runConfig,
|
|||||||
DebuggerRunControl *runControl)
|
DebuggerRunControl *runControl)
|
||||||
: QObject(runControl), m_runControl(runControl),
|
: QObject(runControl), m_runControl(runControl),
|
||||||
m_runner(new IosRunner(this, runConfig, true)),
|
m_runner(new IosRunner(this, runConfig, true)),
|
||||||
m_gdbServerPort(0), m_qmlPort(0)
|
m_gdbServerFd(0), m_qmlPort(0)
|
||||||
{
|
{
|
||||||
|
|
||||||
connect(m_runControl->engine(), SIGNAL(requestRemoteSetup()),
|
connect(m_runControl->engine(), SIGNAL(requestRemoteSetup()),
|
||||||
@@ -84,6 +126,8 @@ IosDebugSupport::IosDebugSupport(IosRunConfiguration *runConfig,
|
|||||||
|
|
||||||
connect(m_runner, SIGNAL(gotGdbSocket(int)),
|
connect(m_runner, SIGNAL(gotGdbSocket(int)),
|
||||||
SLOT(handleGdbServerFd(int)));
|
SLOT(handleGdbServerFd(int)));
|
||||||
|
connect(m_runner, SIGNAL(gotInferiorPid(Q_PID)),
|
||||||
|
SLOT(handleGotInferiorPid(Q_PID)));
|
||||||
connect(m_runner, SIGNAL(finished(bool)),
|
connect(m_runner, SIGNAL(finished(bool)),
|
||||||
SLOT(handleRemoteProcessFinished(bool)));
|
SLOT(handleRemoteProcessFinished(bool)));
|
||||||
|
|
||||||
@@ -93,17 +137,43 @@ IosDebugSupport::IosDebugSupport(IosRunConfiguration *runConfig,
|
|||||||
SLOT(handleRemoteOutput(QString)));
|
SLOT(handleRemoteOutput(QString)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IosDebugSupport::~IosDebugSupport()
|
||||||
|
{
|
||||||
|
if (m_gdbServerFd > 0)
|
||||||
|
close(m_gdbServerFd);
|
||||||
|
}
|
||||||
|
|
||||||
void IosDebugSupport::handleGdbServerFd(int gdbServerFd)
|
void IosDebugSupport::handleGdbServerFd(int gdbServerFd)
|
||||||
{
|
{
|
||||||
Q_UNUSED(gdbServerFd);
|
if (m_gdbServerFd > 0) {
|
||||||
QTC_CHECK(false); // to do transfer fd to debugger
|
close(m_gdbServerFd);
|
||||||
//m_runControl->engine()->notifyEngineRemoteSetupDone(gdbServerPort, qmlPort);
|
m_gdbServerFd = 0;
|
||||||
|
}
|
||||||
|
if (gdbServerFd > 0) {
|
||||||
|
m_runControl->engine()->notifyEngineRemoteSetupDone(m_gdbServerFd, m_qmlPort);
|
||||||
|
} else {
|
||||||
|
m_runControl->engine()->notifyEngineRemoteSetupFailed(
|
||||||
|
tr("Could not get debug server file descriptor."));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void IosDebugSupport::handleGotInferiorPid(Q_PID pid)
|
||||||
|
{
|
||||||
|
if (pid > 0) {
|
||||||
|
//m_runControl->engine()->notifyInferiorPid(pid);
|
||||||
|
m_runControl->engine()->notifyEngineRemoteSetupDone(int(pid), m_qmlPort);
|
||||||
|
} else {
|
||||||
|
m_runControl->engine()->notifyEngineRemoteSetupFailed(
|
||||||
|
tr("Got an invalid process id."));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void IosDebugSupport::handleRemoteProcessFinished(bool cleanEnd)
|
void IosDebugSupport::handleRemoteProcessFinished(bool cleanEnd)
|
||||||
{
|
{
|
||||||
if (!cleanEnd && m_runControl)
|
if (!cleanEnd && m_runControl)
|
||||||
m_runControl->showMessage(tr("Run failed unexpectedly."), AppStuff);
|
m_runControl->showMessage(tr("Run failed unexpectedly."), AppStuff);
|
||||||
|
//m_runControl->engine()->notifyInferiorIll();
|
||||||
|
m_runControl->engine()->abortDebugger();
|
||||||
}
|
}
|
||||||
|
|
||||||
void IosDebugSupport::handleRemoteOutput(const QString &output)
|
void IosDebugSupport::handleRemoteOutput(const QString &output)
|
||||||
|
|||||||
@@ -30,6 +30,7 @@
|
|||||||
#define IOSDEBUGSUPPORT_H
|
#define IOSDEBUGSUPPORT_H
|
||||||
|
|
||||||
#include "iosrunconfiguration.h"
|
#include "iosrunconfiguration.h"
|
||||||
|
#include <QProcess>
|
||||||
|
|
||||||
namespace Debugger { class DebuggerRunControl; }
|
namespace Debugger { class DebuggerRunControl; }
|
||||||
namespace ProjectExplorer { class RunControl; }
|
namespace ProjectExplorer { class RunControl; }
|
||||||
@@ -50,9 +51,11 @@ public:
|
|||||||
|
|
||||||
IosDebugSupport(IosRunConfiguration *runConfig,
|
IosDebugSupport(IosRunConfiguration *runConfig,
|
||||||
Debugger::DebuggerRunControl *runControl);
|
Debugger::DebuggerRunControl *runControl);
|
||||||
|
~IosDebugSupport();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void handleGdbServerFd(int gdbServerFd);
|
void handleGdbServerFd(int gdbServerFd);
|
||||||
|
void handleGotInferiorPid(Q_PID);
|
||||||
void handleRemoteProcessFinished(bool cleanEnd);
|
void handleRemoteProcessFinished(bool cleanEnd);
|
||||||
|
|
||||||
void handleRemoteOutput(const QString &output);
|
void handleRemoteOutput(const QString &output);
|
||||||
@@ -63,7 +66,7 @@ private:
|
|||||||
IosRunner * const m_runner;
|
IosRunner * const m_runner;
|
||||||
const QString m_dumperLib;
|
const QString m_dumperLib;
|
||||||
|
|
||||||
int m_gdbServerPort;
|
int m_gdbServerFd;
|
||||||
int m_qmlPort;
|
int m_qmlPort;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -35,7 +35,7 @@
|
|||||||
#include <projectexplorer/buildsteplist.h>
|
#include <projectexplorer/buildsteplist.h>
|
||||||
#include <projectexplorer/target.h>
|
#include <projectexplorer/target.h>
|
||||||
|
|
||||||
#include <qt4projectmanager/qmakeproject.h>
|
#include <qmakeprojectmanager/qmakeproject.h>
|
||||||
#include <qtsupport/qtkitinformation.h>
|
#include <qtsupport/qtkitinformation.h>
|
||||||
#include <qtsupport/qtsupportconstants.h>
|
#include <qtsupport/qtsupportconstants.h>
|
||||||
|
|
||||||
@@ -112,7 +112,7 @@ DeployConfiguration *IosDeployConfigurationFactory::clone(Target *parent, Deploy
|
|||||||
QList<Core::Id> IosDeployConfigurationFactory::availableCreationIds(Target *parent) const
|
QList<Core::Id> IosDeployConfigurationFactory::availableCreationIds(Target *parent) const
|
||||||
{
|
{
|
||||||
QList<Core::Id> ids;
|
QList<Core::Id> ids;
|
||||||
if (!qobject_cast<QmakeProjectManager::Qt4Project *>(parent->project()))
|
if (!qobject_cast<QmakeProjectManager::QmakeProject *>(parent->project()))
|
||||||
return ids;
|
return ids;
|
||||||
if (!parent->project()->supportsKit(parent->kit()))
|
if (!parent->project()->supportsKit(parent->kit()))
|
||||||
return ids;
|
return ids;
|
||||||
|
|||||||
@@ -39,9 +39,9 @@
|
|||||||
#include <projectexplorer/buildconfiguration.h>
|
#include <projectexplorer/buildconfiguration.h>
|
||||||
#include <projectexplorer/projectexplorerconstants.h>
|
#include <projectexplorer/projectexplorerconstants.h>
|
||||||
#include <projectexplorer/target.h>
|
#include <projectexplorer/target.h>
|
||||||
#include <qt4projectmanager/qmakebuildconfiguration.h>
|
#include <qmakeprojectmanager/qmakebuildconfiguration.h>
|
||||||
#include <qt4projectmanager/qmakeproject.h>
|
#include <qmakeprojectmanager/qmakeproject.h>
|
||||||
#include <qt4projectmanager/qmakenodes.h>
|
#include <qmakeprojectmanager/qmakenodes.h>
|
||||||
|
|
||||||
#include <qtsupport/qtkitinformation.h>
|
#include <qtsupport/qtkitinformation.h>
|
||||||
|
|
||||||
|
|||||||
@@ -35,10 +35,10 @@
|
|||||||
#include <projectexplorer/session.h>
|
#include <projectexplorer/session.h>
|
||||||
#include <projectexplorer/target.h>
|
#include <projectexplorer/target.h>
|
||||||
#include <projectexplorer/toolchain.h>
|
#include <projectexplorer/toolchain.h>
|
||||||
#include <qt4projectmanager/qmakenodes.h>
|
#include <qmakeprojectmanager/qmakenodes.h>
|
||||||
#include <qt4projectmanager/qmakeproject.h>
|
#include <qmakeprojectmanager/qmakeproject.h>
|
||||||
#include <qt4projectmanager/qmakeprojectmanagerconstants.h>
|
#include <qmakeprojectmanager/qmakeprojectmanagerconstants.h>
|
||||||
#include <qt4projectmanager/qmakebuildconfiguration.h>
|
#include <qmakeprojectmanager/qmakebuildconfiguration.h>
|
||||||
#include <qtsupport/customexecutablerunconfiguration.h>
|
#include <qtsupport/customexecutablerunconfiguration.h>
|
||||||
#include <qtsupport/qtkitinformation.h>
|
#include <qtsupport/qtkitinformation.h>
|
||||||
#include <qtsupport/qtsupportconstants.h>
|
#include <qtsupport/qtsupportconstants.h>
|
||||||
@@ -58,7 +58,7 @@ namespace Internal {
|
|||||||
|
|
||||||
bool IosManager::supportsIos(ProjectExplorer::Target *target)
|
bool IosManager::supportsIos(ProjectExplorer::Target *target)
|
||||||
{
|
{
|
||||||
if (!qobject_cast<QmakeProjectManager::Qt4Project *>(target->project()))
|
if (!qobject_cast<QmakeProjectManager::QmakeProject *>(target->project()))
|
||||||
return false;
|
return false;
|
||||||
QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(target->kit());
|
QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(target->kit());
|
||||||
return version && version->type() == QLatin1String(Ios::Constants::IOSQT);
|
return version && version->type() == QLatin1String(Ios::Constants::IOSQT);
|
||||||
@@ -66,8 +66,8 @@ bool IosManager::supportsIos(ProjectExplorer::Target *target)
|
|||||||
|
|
||||||
QString IosManager::resDirForTarget(Target *target)
|
QString IosManager::resDirForTarget(Target *target)
|
||||||
{
|
{
|
||||||
Qt4BuildConfiguration *bc =
|
QmakeBuildConfiguration *bc =
|
||||||
qobject_cast<Qt4BuildConfiguration *>(target->activeBuildConfiguration());
|
qobject_cast<QmakeBuildConfiguration *>(target->activeBuildConfiguration());
|
||||||
return bc->buildDirectory().toString();
|
return bc->buildDirectory().toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -214,6 +214,7 @@ void IosProbe::setupDefaultToolchains(const QString &devPath, const QString &xco
|
|||||||
}
|
}
|
||||||
if (hasClang) {
|
if (hasClang) {
|
||||||
Platform clangProfile;
|
Platform clangProfile;
|
||||||
|
clangProfile.developerPath = Utils::FileName::fromString(devPath);
|
||||||
clangProfile.platformKind = 0;
|
clangProfile.platformKind = 0;
|
||||||
clangProfile.name = clangFullName;
|
clangProfile.name = clangFullName;
|
||||||
clangProfile.platformPath = Utils::FileName(fInfo);
|
clangProfile.platformPath = Utils::FileName(fInfo);
|
||||||
@@ -231,6 +232,7 @@ void IosProbe::setupDefaultToolchains(const QString &devPath, const QString &xco
|
|||||||
}
|
}
|
||||||
if (hasGcc) {
|
if (hasGcc) {
|
||||||
Platform gccProfile;
|
Platform gccProfile;
|
||||||
|
gccProfile.developerPath = Utils::FileName::fromString(devPath);
|
||||||
gccProfile.name = gccFullName;
|
gccProfile.name = gccFullName;
|
||||||
gccProfile.platformKind = 0;
|
gccProfile.platformKind = 0;
|
||||||
// use the arm-apple-darwin10-llvm-* variant and avoid the extraFlags if available???
|
// use the arm-apple-darwin10-llvm-* variant and avoid the extraFlags if available???
|
||||||
|
|||||||
@@ -35,8 +35,8 @@
|
|||||||
#include <utils/environment.h>
|
#include <utils/environment.h>
|
||||||
#include <utils/hostosinfo.h>
|
#include <utils/hostosinfo.h>
|
||||||
|
|
||||||
#include <qt4projectmanager/qmakeproject.h>
|
#include <qmakeprojectmanager/qmakeproject.h>
|
||||||
#include <qt4projectmanager/qmakeprojectmanagerconstants.h>
|
#include <qmakeprojectmanager/qmakeprojectmanagerconstants.h>
|
||||||
|
|
||||||
#include <qtsupport/qtkitinformation.h>
|
#include <qtsupport/qtkitinformation.h>
|
||||||
#include <qtsupport/qtsupportconstants.h>
|
#include <qtsupport/qtsupportconstants.h>
|
||||||
|
|||||||
@@ -36,9 +36,9 @@
|
|||||||
#include <projectexplorer/deployconfiguration.h>
|
#include <projectexplorer/deployconfiguration.h>
|
||||||
#include <projectexplorer/buildstep.h>
|
#include <projectexplorer/buildstep.h>
|
||||||
#include <projectexplorer/buildsteplist.h>
|
#include <projectexplorer/buildsteplist.h>
|
||||||
#include <qt4projectmanager/qmakebuildconfiguration.h>
|
#include <qmakeprojectmanager/qmakebuildconfiguration.h>
|
||||||
#include <qt4projectmanager/qmakeproject.h>
|
#include <qmakeprojectmanager/qmakeproject.h>
|
||||||
#include <qt4projectmanager/qmakenodes.h>
|
#include <qmakeprojectmanager/qmakenodes.h>
|
||||||
#include <qtsupport/qtoutputformatter.h>
|
#include <qtsupport/qtoutputformatter.h>
|
||||||
#include <qtsupport/qtkitinformation.h>
|
#include <qtsupport/qtkitinformation.h>
|
||||||
#include "ui_iosrunconfiguration.h"
|
#include "ui_iosrunconfiguration.h"
|
||||||
@@ -144,9 +144,9 @@ QString IosRunConfiguration::profilePath() const
|
|||||||
|
|
||||||
QString IosRunConfiguration::appName() const
|
QString IosRunConfiguration::appName() const
|
||||||
{
|
{
|
||||||
Qt4Project *pro = qobject_cast<Qt4Project *>(target()->project());
|
QmakeProject *pro = qobject_cast<QmakeProject *>(target()->project());
|
||||||
if (pro) {
|
if (pro) {
|
||||||
const Qt4ProFileNode *node = pro->rootQt4ProjectNode()->findProFileFor(profilePath());
|
const QmakeProFileNode *node = pro->rootQmakeProjectNode()->findProFileFor(profilePath());
|
||||||
if (node) {
|
if (node) {
|
||||||
TargetInformation ti = node->targetInformation();
|
TargetInformation ti = node->targetInformation();
|
||||||
if (ti.valid) {
|
if (ti.valid) {
|
||||||
@@ -167,8 +167,8 @@ Utils::FileName IosRunConfiguration::bundleDir() const
|
|||||||
qDebug() << "unexpected device type in bundleDirForTarget: " << devType.toString();
|
qDebug() << "unexpected device type in bundleDirForTarget: " << devType.toString();
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
Qt4BuildConfiguration *bc =
|
QmakeBuildConfiguration *bc =
|
||||||
qobject_cast<Qt4BuildConfiguration *>(target()->activeBuildConfiguration());
|
qobject_cast<QmakeBuildConfiguration *>(target()->activeBuildConfiguration());
|
||||||
if (bc) {
|
if (bc) {
|
||||||
res = bc->buildDirectory();
|
res = bc->buildDirectory();
|
||||||
switch (bc->buildType()) {
|
switch (bc->buildType()) {
|
||||||
|
|||||||
@@ -39,8 +39,8 @@
|
|||||||
#include <projectexplorer/projectexplorerconstants.h>
|
#include <projectexplorer/projectexplorerconstants.h>
|
||||||
#include <projectexplorer/target.h>
|
#include <projectexplorer/target.h>
|
||||||
#include <debugger/debuggerconstants.h>
|
#include <debugger/debuggerconstants.h>
|
||||||
#include <qt4projectmanager/qmakeproject.h>
|
#include <qmakeprojectmanager/qmakeproject.h>
|
||||||
#include <qt4projectmanager/qmakenodes.h>
|
#include <qmakeprojectmanager/qmakenodes.h>
|
||||||
#include <qtsupport/customexecutablerunconfiguration.h>
|
#include <qtsupport/customexecutablerunconfiguration.h>
|
||||||
#include <qtsupport/qtkitinformation.h>
|
#include <qtsupport/qtkitinformation.h>
|
||||||
#include <qtsupport/qtsupportconstants.h>
|
#include <qtsupport/qtsupportconstants.h>
|
||||||
@@ -97,8 +97,8 @@ QList<Core::Id> IosRunConfigurationFactory::availableCreationIds(Target *parent)
|
|||||||
if (!IosManager::supportsIos(parent))
|
if (!IosManager::supportsIos(parent))
|
||||||
return ids;
|
return ids;
|
||||||
Core::Id baseId(IOS_RC_ID_PREFIX);
|
Core::Id baseId(IOS_RC_ID_PREFIX);
|
||||||
QList<Qt4ProFileNode *> nodes = static_cast<Qt4Project *>(parent->project())->allProFiles();
|
QList<QmakeProFileNode *> nodes = static_cast<QmakeProject *>(parent->project())->allProFiles();
|
||||||
foreach (Qt4ProFileNode *node, nodes)
|
foreach (QmakeProFileNode *node, nodes)
|
||||||
if (node->projectType() == ApplicationTemplate || node->projectType() == LibraryTemplate
|
if (node->projectType() == ApplicationTemplate || node->projectType() == LibraryTemplate
|
||||||
|| node->projectType() == AuxTemplate)
|
|| node->projectType() == AuxTemplate)
|
||||||
ids << baseId.withSuffix(node->path());
|
ids << baseId.withSuffix(node->path());
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
#define IOSRUNFACTORIES_H
|
#define IOSRUNFACTORIES_H
|
||||||
|
|
||||||
#include <projectexplorer/runconfiguration.h>
|
#include <projectexplorer/runconfiguration.h>
|
||||||
#include <qt4projectmanager/qmakerunconfigurationfactory.h>
|
#include <qmakeprojectmanager/qmakerunconfigurationfactory.h>
|
||||||
#include <utils/qtcoverride.h>
|
#include <utils/qtcoverride.h>
|
||||||
|
|
||||||
namespace ProjectExplorer {
|
namespace ProjectExplorer {
|
||||||
|
|||||||
@@ -41,6 +41,7 @@
|
|||||||
#include <QCoreApplication>
|
#include <QCoreApplication>
|
||||||
#include <QList>
|
#include <QList>
|
||||||
#include <QScopedArrayPointer>
|
#include <QScopedArrayPointer>
|
||||||
|
#include <QProcessEnvironment>
|
||||||
|
|
||||||
#if defined(Q_OS_UNIX)
|
#if defined(Q_OS_UNIX)
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
@@ -65,6 +66,7 @@ class MyProcess: public QProcess
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit MyProcess(QObject *parent = 0);
|
explicit MyProcess(QObject *parent = 0);
|
||||||
|
~MyProcess();
|
||||||
int processOutputSocket();
|
int processOutputSocket();
|
||||||
QSocketNotifier *notifier();
|
QSocketNotifier *notifier();
|
||||||
protected:
|
protected:
|
||||||
@@ -224,10 +226,15 @@ MyProcess::MyProcess(QObject *parent) : QProcess(parent)
|
|||||||
if (socketpair(PF_UNIX, SOCK_STREAM, 0, &m_sockets[0]) == -1) {
|
if (socketpair(PF_UNIX, SOCK_STREAM, 0, &m_sockets[0]) == -1) {
|
||||||
qDebug() << "IosToolHandler socketpair failed ";
|
qDebug() << "IosToolHandler socketpair failed ";
|
||||||
}
|
}
|
||||||
shutdown(m_sockets[0], SHUT_WR);
|
|
||||||
m_notifier = new QSocketNotifier(m_sockets[0], QSocketNotifier::Read, this);
|
m_notifier = new QSocketNotifier(m_sockets[0], QSocketNotifier::Read, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MyProcess::~MyProcess()
|
||||||
|
{
|
||||||
|
::close(m_sockets[0]);
|
||||||
|
::close(m_sockets[1]);
|
||||||
|
}
|
||||||
|
|
||||||
int MyProcess::processOutputSocket()
|
int MyProcess::processOutputSocket()
|
||||||
{
|
{
|
||||||
return m_sockets[0];
|
return m_sockets[0];
|
||||||
@@ -245,13 +252,16 @@ void MyProcess::setupChildProcess()
|
|||||||
emit finished(-1, QProcess::CrashExit);
|
emit finished(-1, QProcess::CrashExit);
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
shutdown(1, SHUT_RD); // leave open for handshake when transferring fd?
|
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
MyProcess::MyProcess(QObject *parent) : QProcess(parent)
|
MyProcess::MyProcess(QObject *parent) : QProcess(parent)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MyProcess::~MyProcess()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
int MyProcess::processOutputSocket()
|
int MyProcess::processOutputSocket()
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
@@ -272,6 +282,11 @@ IosToolHandlerPrivate::IosToolHandlerPrivate(IosToolHandler::DeviceType devType,
|
|||||||
q(q), state(NonStarted), devType(devType), buffer(4*lookaheadSize, 0), iBegin(0), iEnd(0),
|
q(q), state(NonStarted), devType(devType), buffer(4*lookaheadSize, 0), iBegin(0), iEnd(0),
|
||||||
gdbSocket(-1)
|
gdbSocket(-1)
|
||||||
{
|
{
|
||||||
|
QProcessEnvironment env(QProcessEnvironment::systemEnvironment());
|
||||||
|
foreach (const QString &k, env.keys())
|
||||||
|
if (k.startsWith(QLatin1String("DYLD_")))
|
||||||
|
env.remove(k);
|
||||||
|
process.setProcessEnvironment(env);
|
||||||
QObject::connect(process.notifier(), SIGNAL(activated(int)), q, SLOT(subprocessHasData(int)));
|
QObject::connect(process.notifier(), SIGNAL(activated(int)), q, SLOT(subprocessHasData(int)));
|
||||||
QObject::connect(&process, SIGNAL(finished(int,QProcess::ExitStatus)),
|
QObject::connect(&process, SIGNAL(finished(int,QProcess::ExitStatus)),
|
||||||
q, SLOT(subprocessFinished(int,QProcess::ExitStatus)));
|
q, SLOT(subprocessFinished(int,QProcess::ExitStatus)));
|
||||||
@@ -498,6 +513,8 @@ int recv_fd(int socket)
|
|||||||
if ( (control_message->cmsg_level == SOL_SOCKET) &&
|
if ( (control_message->cmsg_level == SOL_SOCKET) &&
|
||||||
(control_message->cmsg_type == SCM_RIGHTS) ) {
|
(control_message->cmsg_type == SCM_RIGHTS) ) {
|
||||||
sent_fd = *((int *) CMSG_DATA(control_message));
|
sent_fd = *((int *) CMSG_DATA(control_message));
|
||||||
|
// aknowledge fd
|
||||||
|
send(socket, "x", 1, 0);
|
||||||
return sent_fd;
|
return sent_fd;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -777,7 +794,7 @@ void IosToolHandlerPrivate::subprocessHasData(int socket)
|
|||||||
currentData = buffer.mid(0, lastXmlSize); // remove this??
|
currentData = buffer.mid(0, lastXmlSize); // remove this??
|
||||||
}
|
}
|
||||||
qptrdiff toRead = lookaheadSize - (iEnd - spacerStart);
|
qptrdiff toRead = lookaheadSize - (iEnd - spacerStart);
|
||||||
qptrdiff reallyRead = recv(socket, buffer.data() + iBegin, toRead, 0);
|
qptrdiff reallyRead = recv(socket, buffer.data() + iEnd, toRead, 0);
|
||||||
if (reallyRead == 0) { // eof
|
if (reallyRead == 0) { // eof
|
||||||
stop();
|
stop();
|
||||||
return;
|
return;
|
||||||
@@ -799,14 +816,19 @@ void IosToolHandlerPrivate::subprocessHasData(int socket)
|
|||||||
iEnd += reallyRead;
|
iEnd += reallyRead;
|
||||||
if (reallyRead != toRead)
|
if (reallyRead != toRead)
|
||||||
continue;
|
continue;
|
||||||
if (spacerStart < iEnd && buffer.at(spacerStart) != 'n') {
|
if (spacerStart < iEnd && buffer.at(spacerStart) != 'N') {
|
||||||
++spacerStart;
|
++spacerStart;
|
||||||
while (spacerStart < iEnd && buffer.at(spacerStart) != 'n')
|
while (spacerStart < iEnd && buffer.at(spacerStart) != 'N')
|
||||||
++spacerStart;
|
++spacerStart;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (buffer.at(iEnd-1) != 'd') {
|
||||||
|
qDebug() << "IosToolHandler: bad alignment of spacer: " << buffer.mid(iBegin, iEnd - iBegin);
|
||||||
|
return;
|
||||||
|
}
|
||||||
gdbSocket = recv_fd(socket);
|
gdbSocket = recv_fd(socket);
|
||||||
|
qDebug() << "IosToolHandler: receivedSocket";
|
||||||
gotGdbserverSocket(bundlePath, deviceId, gdbSocket);
|
gotGdbserverSocket(bundlePath, deviceId, gdbSocket);
|
||||||
stop();
|
stop();
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ SUBDIRS = \
|
|||||||
cvs \
|
cvs \
|
||||||
cpptools \
|
cpptools \
|
||||||
qtsupport \
|
qtsupport \
|
||||||
qt4projectmanager \
|
qmakeprojectmanager \
|
||||||
locator \
|
locator \
|
||||||
debugger \
|
debugger \
|
||||||
help \
|
help \
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ Project {
|
|||||||
"qmlprofiler/qmlprofiler.qbs",
|
"qmlprofiler/qmlprofiler.qbs",
|
||||||
"qmlprojectmanager/qmlprojectmanager.qbs",
|
"qmlprojectmanager/qmlprojectmanager.qbs",
|
||||||
"qnx/qnx.qbs",
|
"qnx/qnx.qbs",
|
||||||
"qt4projectmanager/qt4projectmanager.qbs",
|
"qmakeprojectmanager/qmakeprojectmanager.qbs",
|
||||||
"qtsupport/qtsupport.qbs",
|
"qtsupport/qtsupport.qbs",
|
||||||
"remotelinux/remotelinux.qbs",
|
"remotelinux/remotelinux.qbs",
|
||||||
"resourceeditor/resourceeditor.qbs",
|
"resourceeditor/resourceeditor.qbs",
|
||||||
|
|||||||
@@ -111,47 +111,19 @@ static QByteArray runGcc(const FileName &gcc, const QStringList &arguments, cons
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const QStringList gccPredefinedMacrosOptions()
|
||||||
|
{
|
||||||
|
return QStringList() << QLatin1String("-xc++") << QLatin1String("-E") << QLatin1String("-dM");
|
||||||
|
}
|
||||||
|
|
||||||
static QByteArray gccPredefinedMacros(const FileName &gcc, const QStringList &args, const QStringList &env)
|
static QByteArray gccPredefinedMacros(const FileName &gcc, const QStringList &args, const QStringList &env)
|
||||||
{
|
{
|
||||||
QStringList arguments;
|
QStringList arguments = args;
|
||||||
arguments << QLatin1String("-xc++")
|
|
||||||
<< QLatin1String("-E")
|
|
||||||
<< QLatin1String("-dM");
|
|
||||||
foreach (const QString &a, args) {
|
|
||||||
if (a == QLatin1String("-m128bit-long-double") || a == QLatin1String("-m32")
|
|
||||||
|| a == QLatin1String("-m3dnow") || a == QLatin1String("-m3dnowa")
|
|
||||||
|| a == QLatin1String("-m64") || a == QLatin1String("-m96bit-long-double")
|
|
||||||
|| a == QLatin1String("-mabm") || a == QLatin1String("-maes")
|
|
||||||
|| a.startsWith(QLatin1String("-march=")) || a == QLatin1String("-mavx")
|
|
||||||
|| a.startsWith(QLatin1String("-masm=")) || a == QLatin1String("-mcx16")
|
|
||||||
|| a == QLatin1String("-mfma") || a == QLatin1String("-mfma4")
|
|
||||||
|| a == QLatin1String("-mlwp") || a == QLatin1String("-mpclmul")
|
|
||||||
|| a == QLatin1String("-mpopcnt") || a == QLatin1String("-msse")
|
|
||||||
|| a == QLatin1String("-msse2") || a == QLatin1String("-msse2avx")
|
|
||||||
|| a == QLatin1String("-msse3") || a == QLatin1String("-msse4")
|
|
||||||
|| a == QLatin1String("-msse4.1") || a == QLatin1String("-msse4.2")
|
|
||||||
|| a == QLatin1String("-msse4a") || a == QLatin1String("-mssse3")
|
|
||||||
|| a.startsWith(QLatin1String("-mtune=")) || a == QLatin1String("-mxop")
|
|
||||||
|| a == QLatin1String("-Os") || a == QLatin1String("-O0") || a == QLatin1String("-O1")
|
|
||||||
|| a == QLatin1String("-O2") || a == QLatin1String("-O3")
|
|
||||||
|| a == QLatin1String("-ffinite-math-only") || a == QLatin1String("-fshort-double")
|
|
||||||
|| a == QLatin1String("-fshort-wchar") || a == QLatin1String("-fsignaling-nans")
|
|
||||||
|| a == QLatin1String("-fno-inline") || a == QLatin1String("-fno-exceptions")
|
|
||||||
|| a == QLatin1String("-fstack-protector") || a == QLatin1String("-fstack-protector-all")
|
|
||||||
|| a == QLatin1String("-fsanitize=address") || a == QLatin1String("-fno-rtti")
|
|
||||||
|| a.startsWith(QLatin1String("-std=")) || a.startsWith(QLatin1String("-stdlib="))
|
|
||||||
|| a.startsWith(QLatin1String("-specs="))
|
|
||||||
|| a == QLatin1String("-ansi") || a == QLatin1String("-undef")
|
|
||||||
|| a.startsWith(QLatin1String("-D")) || a.startsWith(QLatin1String("-U"))
|
|
||||||
|| a == QLatin1String("-fopenmp") || a == QLatin1String("-Wno-deprecated"))
|
|
||||||
arguments << a;
|
|
||||||
}
|
|
||||||
|
|
||||||
arguments << QLatin1String("-");
|
arguments << QLatin1String("-");
|
||||||
|
|
||||||
QByteArray predefinedMacros = runGcc(gcc, arguments, env);
|
QByteArray predefinedMacros = runGcc(gcc, arguments, env);
|
||||||
// Sanity check in case we get an error message instead of real output:
|
// Sanity check in case we get an error message instead of real output:
|
||||||
QTC_CHECK(predefinedMacros.startsWith("#define "));
|
QTC_CHECK(predefinedMacros.isNull() || predefinedMacros.startsWith("#define "));
|
||||||
if (Utils::HostOsInfo::isMacHost()) {
|
if (Utils::HostOsInfo::isMacHost()) {
|
||||||
// Turn off flag indicating Apple's blocks support
|
// Turn off flag indicating Apple's blocks support
|
||||||
const QByteArray blocksDefine("#define __BLOCKS__ 1");
|
const QByteArray blocksDefine("#define __BLOCKS__ 1");
|
||||||
@@ -169,23 +141,10 @@ static QByteArray gccPredefinedMacros(const FileName &gcc, const QStringList &ar
|
|||||||
|
|
||||||
const int GccToolChain::PREDEFINED_MACROS_CACHE_SIZE = 16;
|
const int GccToolChain::PREDEFINED_MACROS_CACHE_SIZE = 16;
|
||||||
|
|
||||||
QList<HeaderPath> GccToolChain::gccHeaderPaths(const FileName &gcc, const QStringList &args,
|
QList<HeaderPath> GccToolChain::gccHeaderPaths(const FileName &gcc, const QStringList &arguments,
|
||||||
const QStringList &env, const FileName &sysrootPath)
|
const QStringList &env)
|
||||||
{
|
{
|
||||||
QList<HeaderPath> systemHeaderPaths;
|
QList<HeaderPath> systemHeaderPaths;
|
||||||
QStringList arguments;
|
|
||||||
if (!sysrootPath.isEmpty())
|
|
||||||
arguments.append(QString::fromLatin1("--sysroot=%1").arg(sysrootPath.toString()));
|
|
||||||
foreach (const QString &a, args) {
|
|
||||||
if (a.startsWith(QLatin1String("-stdlib=")))
|
|
||||||
arguments << a;
|
|
||||||
}
|
|
||||||
|
|
||||||
arguments << QLatin1String("-xc++")
|
|
||||||
<< QLatin1String("-E")
|
|
||||||
<< QLatin1String("-v")
|
|
||||||
<< QLatin1String("-");
|
|
||||||
|
|
||||||
QByteArray line;
|
QByteArray line;
|
||||||
QByteArray data = runGcc(gcc, arguments, env);
|
QByteArray data = runGcc(gcc, arguments, env);
|
||||||
QBuffer cpp(&data);
|
QBuffer cpp(&data);
|
||||||
@@ -255,6 +214,7 @@ static QList<Abi> guessGccAbi(const QString &m, const QByteArray ¯os)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static QList<Abi> guessGccAbi(const FileName &path, const QStringList &env,
|
static QList<Abi> guessGccAbi(const FileName &path, const QStringList &env,
|
||||||
|
const QByteArray ¯os,
|
||||||
const QStringList &extraArgs = QStringList())
|
const QStringList &extraArgs = QStringList())
|
||||||
{
|
{
|
||||||
if (path.isEmpty())
|
if (path.isEmpty())
|
||||||
@@ -265,7 +225,6 @@ static QList<Abi> guessGccAbi(const FileName &path, const QStringList &env,
|
|||||||
QString machine = QString::fromLocal8Bit(runGcc(path, arguments, env)).trimmed();
|
QString machine = QString::fromLocal8Bit(runGcc(path, arguments, env)).trimmed();
|
||||||
if (machine.isEmpty())
|
if (machine.isEmpty())
|
||||||
return QList<Abi>(); // no need to continue if running failed once...
|
return QList<Abi>(); // no need to continue if running failed once...
|
||||||
QByteArray macros = gccPredefinedMacros(path, QStringList(), env);
|
|
||||||
return guessGccAbi(machine, macros);
|
return guessGccAbi(machine, macros);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -297,6 +256,38 @@ GccToolChain::GccToolChain(const GccToolChain &tc) :
|
|||||||
m_version(tc.m_version)
|
m_version(tc.m_version)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
|
void GccToolChain::setMacroCache(const QStringList &allCxxflags, const QByteArray ¯os) const
|
||||||
|
{
|
||||||
|
if (macros.isNull())
|
||||||
|
return;
|
||||||
|
|
||||||
|
CacheItem runResults;
|
||||||
|
QByteArray data = macros;
|
||||||
|
runResults.first = allCxxflags;
|
||||||
|
if (macros.isNull())
|
||||||
|
data = QByteArray("");
|
||||||
|
runResults.second = data;
|
||||||
|
|
||||||
|
m_predefinedMacros.push_back(runResults);
|
||||||
|
if (m_predefinedMacros.size() > PREDEFINED_MACROS_CACHE_SIZE)
|
||||||
|
m_predefinedMacros.pop_front();
|
||||||
|
}
|
||||||
|
|
||||||
|
QByteArray GccToolChain::macroCache(const QStringList &allCxxflags) const
|
||||||
|
{
|
||||||
|
for (GccCache::iterator it = m_predefinedMacros.begin(); it != m_predefinedMacros.end(); ++it) {
|
||||||
|
if (it->first == allCxxflags) {
|
||||||
|
// Increase cached item priority
|
||||||
|
CacheItem pair = *it;
|
||||||
|
m_predefinedMacros.erase(it);
|
||||||
|
m_predefinedMacros.push_back(pair);
|
||||||
|
|
||||||
|
return pair.second;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return QByteArray();
|
||||||
|
}
|
||||||
|
|
||||||
QString GccToolChain::defaultDisplayName() const
|
QString GccToolChain::defaultDisplayName() const
|
||||||
{
|
{
|
||||||
if (!m_targetAbi.isValid())
|
if (!m_targetAbi.isValid())
|
||||||
@@ -370,31 +361,49 @@ bool GccToolChain::isValid() const
|
|||||||
QByteArray GccToolChain::predefinedMacros(const QStringList &cxxflags) const
|
QByteArray GccToolChain::predefinedMacros(const QStringList &cxxflags) const
|
||||||
{
|
{
|
||||||
QStringList allCxxflags = m_platformCodeGenFlags + cxxflags; // add only cxxflags is empty?
|
QStringList allCxxflags = m_platformCodeGenFlags + cxxflags; // add only cxxflags is empty?
|
||||||
typedef QPair<QStringList, QByteArray> CacheItem;
|
|
||||||
|
|
||||||
for (GccCache::iterator it = m_predefinedMacros.begin(); it != m_predefinedMacros.end(); ++it)
|
QByteArray macros = macroCache(allCxxflags);
|
||||||
if (it->first == allCxxflags) {
|
if (!macros.isNull())
|
||||||
// Increase cached item priority
|
return macros;
|
||||||
CacheItem pair = *it;
|
|
||||||
m_predefinedMacros.erase(it);
|
|
||||||
m_predefinedMacros.push_back(pair);
|
|
||||||
|
|
||||||
return pair.second;
|
|
||||||
}
|
|
||||||
|
|
||||||
CacheItem runResults;
|
|
||||||
runResults.first = allCxxflags;
|
|
||||||
|
|
||||||
// Using a clean environment breaks ccache/distcc/etc.
|
// Using a clean environment breaks ccache/distcc/etc.
|
||||||
Environment env = Environment::systemEnvironment();
|
Environment env = Environment::systemEnvironment();
|
||||||
addToEnvironment(env);
|
addToEnvironment(env);
|
||||||
runResults.second = gccPredefinedMacros(m_compilerCommand, allCxxflags, env.toStringList());
|
QStringList arguments = gccPredefinedMacrosOptions();
|
||||||
|
foreach (const QString &a, allCxxflags) {
|
||||||
|
if (a == QLatin1String("-m128bit-long-double") || a == QLatin1String("-m32")
|
||||||
|
|| a == QLatin1String("-m3dnow") || a == QLatin1String("-m3dnowa")
|
||||||
|
|| a == QLatin1String("-m64") || a == QLatin1String("-m96bit-long-double")
|
||||||
|
|| a == QLatin1String("-mabm") || a == QLatin1String("-maes")
|
||||||
|
|| a.startsWith(QLatin1String("-march=")) || a == QLatin1String("-mavx")
|
||||||
|
|| a.startsWith(QLatin1String("-masm=")) || a == QLatin1String("-mcx16")
|
||||||
|
|| a == QLatin1String("-mfma") || a == QLatin1String("-mfma4")
|
||||||
|
|| a == QLatin1String("-mlwp") || a == QLatin1String("-mpclmul")
|
||||||
|
|| a == QLatin1String("-mpopcnt") || a == QLatin1String("-msse")
|
||||||
|
|| a == QLatin1String("-msse2") || a == QLatin1String("-msse2avx")
|
||||||
|
|| a == QLatin1String("-msse3") || a == QLatin1String("-msse4")
|
||||||
|
|| a == QLatin1String("-msse4.1") || a == QLatin1String("-msse4.2")
|
||||||
|
|| a == QLatin1String("-msse4a") || a == QLatin1String("-mssse3")
|
||||||
|
|| a.startsWith(QLatin1String("-mtune=")) || a == QLatin1String("-mxop")
|
||||||
|
|| a == QLatin1String("-Os") || a == QLatin1String("-O0") || a == QLatin1String("-O1")
|
||||||
|
|| a == QLatin1String("-O2") || a == QLatin1String("-O3")
|
||||||
|
|| a == QLatin1String("-ffinite-math-only") || a == QLatin1String("-fshort-double")
|
||||||
|
|| a == QLatin1String("-fshort-wchar") || a == QLatin1String("-fsignaling-nans")
|
||||||
|
|| a == QLatin1String("-fno-inline") || a == QLatin1String("-fno-exceptions")
|
||||||
|
|| a == QLatin1String("-fstack-protector") || a == QLatin1String("-fstack-protector-all")
|
||||||
|
|| a == QLatin1String("-fsanitize=address") || a == QLatin1String("-fno-rtti")
|
||||||
|
|| a.startsWith(QLatin1String("-std=")) || a.startsWith(QLatin1String("-stdlib="))
|
||||||
|
|| a.startsWith(QLatin1String("-specs="))
|
||||||
|
|| a == QLatin1String("-ansi") || a == QLatin1String("-undef")
|
||||||
|
|| a.startsWith(QLatin1String("-D")) || a.startsWith(QLatin1String("-U"))
|
||||||
|
|| a == QLatin1String("-fopenmp") || a == QLatin1String("-Wno-deprecated"))
|
||||||
|
arguments << a;
|
||||||
|
}
|
||||||
|
macros = gccPredefinedMacros(m_compilerCommand, reinterpretOptions(arguments),
|
||||||
|
env.toStringList());
|
||||||
|
|
||||||
m_predefinedMacros.push_back(runResults);
|
setMacroCache(allCxxflags, macros);
|
||||||
if (m_predefinedMacros.size() > PREDEFINED_MACROS_CACHE_SIZE)
|
return macros;
|
||||||
m_predefinedMacros.pop_front();
|
|
||||||
|
|
||||||
return runResults.second;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -501,8 +510,24 @@ QList<HeaderPath> GccToolChain::systemHeaderPaths(const QStringList &cxxflags, c
|
|||||||
// Using a clean environment breaks ccache/distcc/etc.
|
// Using a clean environment breaks ccache/distcc/etc.
|
||||||
Environment env = Environment::systemEnvironment();
|
Environment env = Environment::systemEnvironment();
|
||||||
addToEnvironment(env);
|
addToEnvironment(env);
|
||||||
m_headerPaths = gccHeaderPaths(m_compilerCommand, m_platformCodeGenFlags + cxxflags , // add only cxxflags is empty?
|
// Prepare arguments
|
||||||
env.toStringList(), sysRoot);
|
QStringList arguments;
|
||||||
|
if (!sysRoot.isEmpty())
|
||||||
|
arguments.append(QString::fromLatin1("--sysroot=%1").arg(sysRoot.toString()));
|
||||||
|
|
||||||
|
QStringList flags;
|
||||||
|
flags << m_platformCodeGenFlags << cxxflags;
|
||||||
|
foreach (const QString &a, flags) {
|
||||||
|
if (a.startsWith(QLatin1String("-stdlib=")))
|
||||||
|
arguments << a;
|
||||||
|
}
|
||||||
|
|
||||||
|
arguments << QLatin1String("-xc++")
|
||||||
|
<< QLatin1String("-E")
|
||||||
|
<< QLatin1String("-v")
|
||||||
|
<< QLatin1String("-");
|
||||||
|
|
||||||
|
m_headerPaths = gccHeaderPaths(m_compilerCommand, reinterpretOptions(arguments), env.toStringList());
|
||||||
}
|
}
|
||||||
return m_headerPaths;
|
return m_headerPaths;
|
||||||
}
|
}
|
||||||
@@ -699,7 +724,8 @@ QList<Abi> GccToolChain::detectSupportedAbis() const
|
|||||||
{
|
{
|
||||||
Environment env = Environment::systemEnvironment();
|
Environment env = Environment::systemEnvironment();
|
||||||
addToEnvironment(env);
|
addToEnvironment(env);
|
||||||
return guessGccAbi(m_compilerCommand, env.toStringList(), platformCodeGenFlags());
|
QByteArray macros = predefinedMacros(QStringList());
|
||||||
|
return guessGccAbi(m_compilerCommand, env.toStringList(), macros, platformCodeGenFlags());
|
||||||
}
|
}
|
||||||
|
|
||||||
QString GccToolChain::detectVersion() const
|
QString GccToolChain::detectVersion() const
|
||||||
@@ -778,7 +804,9 @@ QList<ToolChain *> GccToolChainFactory::autoDetectToolchains(const QString &comp
|
|||||||
return result;
|
return result;
|
||||||
|
|
||||||
GccToolChain::addCommandPathToEnvironment(compilerPath, systemEnvironment);
|
GccToolChain::addCommandPathToEnvironment(compilerPath, systemEnvironment);
|
||||||
QList<Abi> abiList = guessGccAbi(compilerPath, systemEnvironment.toStringList());
|
QByteArray macros
|
||||||
|
= gccPredefinedMacros(compilerPath, gccPredefinedMacrosOptions(), systemEnvironment.toStringList());
|
||||||
|
QList<Abi> abiList = guessGccAbi(compilerPath, systemEnvironment.toStringList(), macros);
|
||||||
if (!abiList.contains(requiredAbi)) {
|
if (!abiList.contains(requiredAbi)) {
|
||||||
if (requiredAbi.wordWidth() != 64
|
if (requiredAbi.wordWidth() != 64
|
||||||
|| !abiList.contains(Abi(requiredAbi.architecture(), requiredAbi.os(), requiredAbi.osFlavor(),
|
|| !abiList.contains(Abi(requiredAbi.architecture(), requiredAbi.os(), requiredAbi.osFlavor(),
|
||||||
@@ -788,6 +816,7 @@ QList<ToolChain *> GccToolChainFactory::autoDetectToolchains(const QString &comp
|
|||||||
|
|
||||||
foreach (const Abi &abi, abiList) {
|
foreach (const Abi &abi, abiList) {
|
||||||
QScopedPointer<GccToolChain> tc(createToolChain(true));
|
QScopedPointer<GccToolChain> tc(createToolChain(true));
|
||||||
|
tc->setMacroCache(QStringList(), macros);
|
||||||
if (tc.isNull())
|
if (tc.isNull())
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
@@ -850,6 +879,7 @@ void GccToolChainConfigWidget::applyImpl()
|
|||||||
tc->setDisplayName(displayName); // reset display name
|
tc->setDisplayName(displayName); // reset display name
|
||||||
tc->setPlatformCodeGenFlags(splitString(m_platformCodeGenFlagsLineEdit->text()));
|
tc->setPlatformCodeGenFlags(splitString(m_platformCodeGenFlagsLineEdit->text()));
|
||||||
tc->setPlatformLinkerFlags(splitString(m_platformLinkerFlagsLineEdit->text()));
|
tc->setPlatformLinkerFlags(splitString(m_platformLinkerFlagsLineEdit->text()));
|
||||||
|
tc->setMacroCache(tc->platformCodeGenFlags(), m_macros);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GccToolChainConfigWidget::setFromToolchain()
|
void GccToolChainConfigWidget::setFromToolchain()
|
||||||
@@ -912,7 +942,9 @@ void GccToolChainConfigWidget::handleCompilerCommandChange()
|
|||||||
if (haveCompiler) {
|
if (haveCompiler) {
|
||||||
Environment env = Environment::systemEnvironment();
|
Environment env = Environment::systemEnvironment();
|
||||||
GccToolChain::addCommandPathToEnvironment(path, env);
|
GccToolChain::addCommandPathToEnvironment(path, env);
|
||||||
abiList = guessGccAbi(path, env.toStringList(),
|
QStringList args = gccPredefinedMacrosOptions() + splitString(m_platformCodeGenFlagsLineEdit->text());
|
||||||
|
m_macros = gccPredefinedMacros(path, args, env.toStringList());
|
||||||
|
abiList = guessGccAbi(path, env.toStringList(), m_macros,
|
||||||
splitString(m_platformCodeGenFlagsLineEdit->text()));
|
splitString(m_platformCodeGenFlagsLineEdit->text()));
|
||||||
}
|
}
|
||||||
m_abiWidget->setEnabled(haveCompiler);
|
m_abiWidget->setEnabled(haveCompiler);
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ namespace ProjectExplorer {
|
|||||||
|
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
class ClangToolChainFactory;
|
class ClangToolChainFactory;
|
||||||
|
class GccToolChainConfigWidget;
|
||||||
class GccToolChainFactory;
|
class GccToolChainFactory;
|
||||||
class MingwToolChainFactory;
|
class MingwToolChainFactory;
|
||||||
class LinuxIccToolChainFactory;
|
class LinuxIccToolChainFactory;
|
||||||
@@ -98,13 +99,21 @@ protected:
|
|||||||
|
|
||||||
GccToolChain(const GccToolChain &);
|
GccToolChain(const GccToolChain &);
|
||||||
|
|
||||||
|
typedef QPair<QStringList, QByteArray> CacheItem;
|
||||||
|
|
||||||
|
void setMacroCache(const QStringList &allCxxflags, const QByteArray ¯oCache) const;
|
||||||
|
QByteArray macroCache(const QStringList &allCxxflags) const;
|
||||||
|
|
||||||
virtual QString defaultDisplayName() const;
|
virtual QString defaultDisplayName() const;
|
||||||
virtual CompilerFlags defaultCompilerFlags() const;
|
virtual CompilerFlags defaultCompilerFlags() const;
|
||||||
|
|
||||||
virtual QList<Abi> detectSupportedAbis() const;
|
virtual QList<Abi> detectSupportedAbis() const;
|
||||||
virtual QString detectVersion() const;
|
virtual QString detectVersion() const;
|
||||||
|
|
||||||
static QList<HeaderPath> gccHeaderPaths(const Utils::FileName &gcc, const QStringList &args, const QStringList &env, const Utils::FileName &sysrootPath);
|
// Reinterpret options for compiler drivers inheriting from GccToolChain (e.g qcc) to apply -Wp option
|
||||||
|
// that passes the initial options directly down to the gcc compiler
|
||||||
|
virtual QStringList reinterpretOptions(const QStringList &argument) const { return argument; }
|
||||||
|
static QList<HeaderPath> gccHeaderPaths(const Utils::FileName &gcc, const QStringList &args, const QStringList &env);
|
||||||
|
|
||||||
static const int PREDEFINED_MACROS_CACHE_SIZE;
|
static const int PREDEFINED_MACROS_CACHE_SIZE;
|
||||||
mutable GccCache m_predefinedMacros;
|
mutable GccCache m_predefinedMacros;
|
||||||
@@ -137,6 +146,7 @@ private:
|
|||||||
mutable QList<HeaderPath> m_headerPaths;
|
mutable QList<HeaderPath> m_headerPaths;
|
||||||
mutable QString m_version;
|
mutable QString m_version;
|
||||||
|
|
||||||
|
friend class Internal::GccToolChainConfigWidget;
|
||||||
friend class Internal::GccToolChainFactory;
|
friend class Internal::GccToolChainFactory;
|
||||||
friend class ToolChainFactory;
|
friend class ToolChainFactory;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -102,6 +102,7 @@ private:
|
|||||||
|
|
||||||
QList<Abi> m_abiList;
|
QList<Abi> m_abiList;
|
||||||
bool m_isReadOnly;
|
bool m_isReadOnly;
|
||||||
|
QByteArray m_macros;
|
||||||
};
|
};
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -312,7 +312,7 @@ FolderNode *FolderNode::findSubFolder(const QString &path)
|
|||||||
In-memory presentation of a virtual folder.
|
In-memory presentation of a virtual folder.
|
||||||
Note that the node itself + all children (files and folders) are "managed" by the owning project.
|
Note that the node itself + all children (files and folders) are "managed" by the owning project.
|
||||||
A virtual folder does not correspond to a actual folder on the file system. See for example the
|
A virtual folder does not correspond to a actual folder on the file system. See for example the
|
||||||
sources, headers and forms folder the qt4projectmanager creates
|
sources, headers and forms folder the QmakeProjectManager creates
|
||||||
VirtualFolderNodes are always sorted before FolderNodes and are sorted according to their priority.
|
VirtualFolderNodes are always sorted before FolderNodes and are sorted according to their priority.
|
||||||
|
|
||||||
\sa ProjectExplorer::FileNode, ProjectExplorer::ProjectNode
|
\sa ProjectExplorer::FileNode, ProjectExplorer::ProjectNode
|
||||||
|
|||||||
@@ -1076,7 +1076,7 @@ QVariantMap Version0Handler::convertBuildConfigurations(Project *project, const
|
|||||||
|
|
||||||
if (id == QLatin1String("Qt4ProjectManager.Qt4BuildConfiguration") ||
|
if (id == QLatin1String("Qt4ProjectManager.Qt4BuildConfiguration") ||
|
||||||
id.startsWith(QLatin1String("Qt4ProjectManager.Qt4BuildConfiguration."))) {
|
id.startsWith(QLatin1String("Qt4ProjectManager.Qt4BuildConfiguration."))) {
|
||||||
// Qt4BuildConfiguration:
|
// QmakeBuildConfiguration:
|
||||||
if (i.key() == QLatin1String("QtVersionId")) {
|
if (i.key() == QLatin1String("QtVersionId")) {
|
||||||
result.insert(QLatin1String("Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId"),
|
result.insert(QLatin1String("Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId"),
|
||||||
i.value().toInt());
|
i.value().toInt());
|
||||||
@@ -1099,7 +1099,7 @@ QVariantMap Version0Handler::convertBuildConfigurations(Project *project, const
|
|||||||
result.insert(QLatin1String("Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory"),
|
result.insert(QLatin1String("Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory"),
|
||||||
i.value());
|
i.value());
|
||||||
} else {
|
} else {
|
||||||
qWarning() << "Unknown Qt4BuildConfiguration Key found:" << i.key() << i.value();
|
qWarning() << "Unknown QmakeBuildConfiguration Key found:" << i.key() << i.value();
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
} else if (id == QLatin1String("CMakeProjectManager.CMakeBuildConfiguration")) {
|
} else if (id == QLatin1String("CMakeProjectManager.CMakeBuildConfiguration")) {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<plugin name=\"Qt4ProjectManager\" version=\"$$QTCREATOR_VERSION\" compatVersion=\"$$QTCREATOR_COMPAT_VERSION\">
|
<plugin name=\"QmakeProjectManager\" version=\"$$QTCREATOR_VERSION\" compatVersion=\"$$QTCREATOR_COMPAT_VERSION\">
|
||||||
<vendor>Digia Plc</vendor>
|
<vendor>Digia Plc</vendor>
|
||||||
<copyright>(C) 2013 Digia Plc</copyright>
|
<copyright>(C) 2013 Digia Plc</copyright>
|
||||||
<license>
|
<license>
|
||||||
@@ -11,7 +11,7 @@ GNU Lesser General Public License Usage
|
|||||||
Alternatively, this plugin may be used under the terms of the GNU Lesser General Public License version 2.1 as published by the Free Software Foundation. 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.
|
Alternatively, this plugin may be used under the terms of the GNU Lesser General Public License version 2.1 as published by the Free Software Foundation. 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.
|
||||||
</license>
|
</license>
|
||||||
<category>Build Systems</category>
|
<category>Build Systems</category>
|
||||||
<description>Provides project type for Qt 4 pro files and tools.</description>
|
<description>Provides project type for Qt/QMake .pro files and tools.</description>
|
||||||
<url>http://www.qt-project.org</url>
|
<url>http://www.qt-project.org</url>
|
||||||
$$dependencyList
|
$$dependencyList
|
||||||
</plugin>
|
</plugin>
|
||||||