From 5e2f3f0d5e72df5a77496fc7440a706808e15f16 Mon Sep 17 00:00:00 2001 From: Daniel Molkentin Date: Thu, 30 Jun 2011 10:16:12 +0200 Subject: [PATCH 001/143] QML l10n fixes - qsTr(): don't use + for visible strings. - add welcomescreen to translation.pro Change-Id: I361ef4a74bd0098cd7a7ee6b596b2b281661d50b Reviewed-on: http://codereview.qt.nokia.com/920 Reviewed-by: Qt Sanity Bot Reviewed-by: Friedemann Kleint --- share/qtcreator/translations/translations.pro | 3 ++- share/qtcreator/welcomescreen/widgets/ExampleBrowser.qml | 2 +- .../welcomescreen/widgets/FeaturedAndNewsListing.qml | 2 +- share/qtcreator/welcomescreen/widgets/Feedback.qml | 8 ++++---- share/qtcreator/welcomescreen/widgets/LineEdit.qml | 2 +- share/qtcreator/welcomescreen/widgets/RecentSessions.qml | 2 +- src/plugins/qmlprofiler/qml/TimeDisplay.qml | 2 +- 7 files changed, 11 insertions(+), 10 deletions(-) diff --git a/share/qtcreator/translations/translations.pro b/share/qtcreator/translations/translations.pro index 51343d4d76f..e84cb51e8f1 100644 --- a/share/qtcreator/translations/translations.pro +++ b/share/qtcreator/translations/translations.pro @@ -40,7 +40,8 @@ plugin_sources -= src/plugins/plugins.pro \ src/plugins/qtestlib \ src/plugins/snippets \ src/plugins/regexp -sources = src/app src/libs $$plugin_sources src/shared share/qtcreator/qmldesigner +sources = src/app src/libs $$plugin_sources src/shared share/qtcreator/qmldesigner \ + share/qtcreator/welcomescreen share/qtcreator/welcomescreen/widgets files = $$files($$PWD/*_??.ts) $$PWD/qtcreator_untranslated.ts for(file, files) { diff --git a/share/qtcreator/welcomescreen/widgets/ExampleBrowser.qml b/share/qtcreator/welcomescreen/widgets/ExampleBrowser.qml index 327af9daa7a..94700c409db 100644 --- a/share/qtcreator/welcomescreen/widgets/ExampleBrowser.qml +++ b/share/qtcreator/welcomescreen/widgets/ExampleBrowser.qml @@ -49,7 +49,7 @@ Item { anchors.left: checkBox.right anchors.verticalCenter: lineEdit.verticalCenter visible: !examplesModel.showTutorialsOnly - text: tag === "" ? qsTr("Filter by Tag") : qsTr("Tag Filter: ") + tag + text: tag === "" ? qsTr("Filter by Tag") : qsTr("Tag Filter: %1").arg(tag) onClicked: tagChooser.visible = !tagChooser.visible } } diff --git a/share/qtcreator/welcomescreen/widgets/FeaturedAndNewsListing.qml b/share/qtcreator/welcomescreen/widgets/FeaturedAndNewsListing.qml index c545b7af910..f9a37d425b7 100644 --- a/share/qtcreator/welcomescreen/widgets/FeaturedAndNewsListing.qml +++ b/share/qtcreator/welcomescreen/widgets/FeaturedAndNewsListing.qml @@ -7,7 +7,7 @@ Item { anchors.top: parent.top anchors.margins: 10 horizontalAlignment: Text.AlignHCenter - text: "Featured News" + text: qsTr("Featured News") // mainColor: "#44A51C" mainColor: "#074C1C" font.bold: true diff --git a/share/qtcreator/welcomescreen/widgets/Feedback.qml b/share/qtcreator/welcomescreen/widgets/Feedback.qml index 71fc1e70dc1..64a3904341a 100644 --- a/share/qtcreator/welcomescreen/widgets/Feedback.qml +++ b/share/qtcreator/welcomescreen/widgets/Feedback.qml @@ -13,7 +13,7 @@ BorderImage { Components.Button { id: openProjectButton - text: "Open Project" + text: qsTr("Open Project...") iconSource: "image://desktoptheme/document-open" onClicked: welcomeMode.openProject(); height: 32 @@ -24,7 +24,7 @@ BorderImage { Components.Button { id: createProjectButton - text: "Create Project" + text: qsTr("Create Project...") iconSource: "image://desktoptheme/document-new" onClicked: welcomeMode.newProject(); height: 32 @@ -36,7 +36,7 @@ BorderImage { Components.Button { id: feedbackButton - text: "Feedback" + text: qsTr("Feedback") iconSource: "qrc:welcome/images/feedback_arrow.png" height: 32 anchors.verticalCenter: parent.verticalCenter @@ -51,6 +51,6 @@ BorderImage { anchors.right: parent.right anchors.leftMargin: 10 anchors.margins: 5 - text: "Help us make Qt Creator even better" + text: qsTr("Help us make Qt Creator even better") } } diff --git a/share/qtcreator/welcomescreen/widgets/LineEdit.qml b/share/qtcreator/welcomescreen/widgets/LineEdit.qml index 9d3654d2766..bea80a85080 100644 --- a/share/qtcreator/welcomescreen/widgets/LineEdit.qml +++ b/share/qtcreator/welcomescreen/widgets/LineEdit.qml @@ -12,12 +12,12 @@ FocusScope { border.right: 5; border.bottom: 5 TextInput { id: input + property string defaultText anchors.verticalCenter: parent.verticalCenter anchors.left: parent.left anchors.right: parent.right anchors.leftMargin: 4 anchors.rightMargin: 4 - property string defaultText: "Click here to search the tutorials and howtos" color: "grey" text: defaultText font.pointSize: 12 diff --git a/share/qtcreator/welcomescreen/widgets/RecentSessions.qml b/share/qtcreator/welcomescreen/widgets/RecentSessions.qml index 3f10805ff97..68fb74cf33e 100644 --- a/share/qtcreator/welcomescreen/widgets/RecentSessions.qml +++ b/share/qtcreator/welcomescreen/widgets/RecentSessions.qml @@ -13,7 +13,7 @@ HeaderItemView { { var newSessionName = sessionName if (model.currentSession) - newSessionName += qsTr(" (current session)"); + newSessionName = qsTr("%1 (current session)").arg(newSessionName); return newSessionName; } diff --git a/src/plugins/qmlprofiler/qml/TimeDisplay.qml b/src/plugins/qmlprofiler/qml/TimeDisplay.qml index 026846f900e..44efa2879db 100644 --- a/src/plugins/qmlprofiler/qml/TimeDisplay.qml +++ b/src/plugins/qmlprofiler/qml/TimeDisplay.qml @@ -126,7 +126,7 @@ TiledCanvas { var timeDisplayBeginTime = Math.min(bt, et); var timeDisplayEndTime = Math.max(bt, et); - timeDisplayText.text = qsTr("length:")+detailedPrintTime(timeDisplayEndTime-timeDisplayBeginTime); + timeDisplayText.text = qsTr("length: %1").arg(detailedPrintTime(timeDisplayEndTime-timeDisplayBeginTime)); timeDisplayEnd.visible = true; timeDisplayEnd.x = xpos + flick.x } From 7ba726529e6e2e5e90b80fda813295d6b24cbf1d Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Wed, 29 Jun 2011 17:14:45 +0200 Subject: [PATCH 002/143] QmlDesigner.FormEditor: Fix handling of property changes Change-Id: I49d36574d4021b4c73c64873b1f21698c038498d Task-number: QTCREATORBUG-5226 Reviewed-on: http://codereview.qt.nokia.com/914 Reviewed-by: Qt Sanity Bot Reviewed-by: Thomas Hartmann --- .../components/formeditor/formeditorscene.cpp | 3 +++ .../components/formeditor/formeditorview.cpp | 22 ++++++++++++------- .../components/formeditor/formeditorview.h | 2 +- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorscene.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorscene.cpp index bb257b32787..1b429d0dd93 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorscene.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditorscene.cpp @@ -196,6 +196,9 @@ void FormEditorScene::synchronizeOtherProperty(const QmlItemNode &qmlItemNode, c if (propertyName == "clip") item->setFlag(QGraphicsItem::ItemClipsChildrenToShape, qmlItemNode.instanceValue("clip").toBool()); + if (propertyName == "z") + item->setZValue(qmlItemNode.instanceValue("z").toDouble()); + if (!qmlItemNode.isRootNode()) { if (propertyName == "visible") item->setContentVisible(qmlItemNode.instanceValue("visible").toBool()); diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp index 3e0ebe06c41..e0d0b58297d 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp @@ -573,16 +573,22 @@ QmlItemNode findRecursiveQmlItemNode(const QmlObjectNode &firstQmlObjectNode) return QmlItemNode(); } -void FormEditorView::otherPropertyChanged(const QmlObjectNode &qmlObjectNode, const QString &propertyName) +void FormEditorView::instancePropertyChange(const QList > &propertyList) { - Q_ASSERT(qmlObjectNode.isValid()); - - QmlItemNode itemNode = findRecursiveQmlItemNode(qmlObjectNode); - - if (itemNode.isValid() && scene()->hasItemForQmlItemNode(itemNode)) { - m_scene->synchronizeOtherProperty(itemNode, propertyName); - m_currentTool->formEditorItemsChanged(QList() << m_scene->itemForQmlItemNode(itemNode)); + typedef QPair NodePropertyPair; + foreach (const NodePropertyPair &nodePropertyPair, propertyList) { + const QmlItemNode itemNode(nodePropertyPair.first); + const QString propertyName = nodePropertyPair.second; + if (itemNode.isValid() && scene()->hasItemForQmlItemNode(itemNode)) { + static QStringList skipList = QStringList() << "x" << "y" << "width" << "height"; + if (!skipList.contains(propertyName)) { + m_scene->synchronizeOtherProperty(itemNode, propertyName); + m_currentTool->formEditorItemsChanged(QList() << m_scene->itemForQmlItemNode(itemNode)); + } + } } + + QmlModelView::instancePropertyChange(propertyList); } void FormEditorView::updateGraphicsIndicators() diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.h b/src/plugins/qmldesigner/components/formeditor/formeditorview.h index 2657d6ae3b0..44ff565aedc 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorview.h +++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.h @@ -108,6 +108,7 @@ public: void instancesRenderImageChanged(const QVector &nodeList); void instancesPreviewImageChanged(const QVector &nodeList); void instancesChildrenChanged(const QVector &nodeList); + void instancePropertyChange(const QList > &propertyList); void rewriterBeginTransaction(); void rewriterEndTransaction(); @@ -123,7 +124,6 @@ signals: void ItemCreatorDeActivated(); protected: - void otherPropertyChanged(const QmlObjectNode &qmlObjectNode, const QString &propertyName); void stateChanged(const QmlModelState &newQmlModelState, const QmlModelState &oldQmlModelState); void reset(); From bc6879cbc8118ad1dc3115aa5567de1e818dae30 Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Wed, 29 Jun 2011 17:23:51 +0200 Subject: [PATCH 003/143] QmlDesigner.NodeInstances: Positioners are resizable again Task-number: QTCREATORBUG-5242 Change-Id: I6f481dc4e9705e0ebdc8f30761afc0c4fc7f2849 Reviewed-on: http://codereview.qt.nokia.com/915 Reviewed-by: Qt Sanity Bot Reviewed-by: Thomas Hartmann --- .../qmlpuppet/qmlpuppet/instances/positionernodeinstance.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/positionernodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/positionernodeinstance.cpp index 718f8a3f061..cf25d0b4b79 100644 --- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/positionernodeinstance.cpp +++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/positionernodeinstance.cpp @@ -48,7 +48,7 @@ bool PositionerNodeInstance::isPositioner() const bool PositionerNodeInstance::isResizable() const { - return false; + return true; } void PositionerNodeInstance::setPropertyVariant(const QString &name, const QVariant &value) From a49b85eac56907c45eb73ff568409a5d9d5fdd57 Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Wed, 29 Jun 2011 19:34:07 +0200 Subject: [PATCH 004/143] QmlDesigner.NodeInstances: Return the implicit size if the size is invalid Task-number: QTCREATORBUG-5240 Change-Id: Ie8be3a2cc728805411a79c1f216ede566c641c17 Reviewed-on: http://codereview.qt.nokia.com/925 Reviewed-by: Qt Sanity Bot Reviewed-by: Thomas Hartmann --- .../instances/sgitemnodeinstance.cpp | 19 ++++++++++++++++++- .../instances/qmlgraphicsitemnodeinstance.cpp | 19 ++++++++++++++++++- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/sgitemnodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/sgitemnodeinstance.cpp index 3b3e7e3e549..acd46e7c164 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/sgitemnodeinstance.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/sgitemnodeinstance.cpp @@ -271,7 +271,24 @@ bool SGItemNodeInstance::isSGItem() const QSizeF SGItemNodeInstance::size() const { - return QSizeF(sgItem()->width(), sgItem()->height()); + double width; + + if (QSGItemPrivate::get(sgItem())->widthValid) { + width = sgItem()->width(); + } else { + width = sgItem()->implicitWidth(); + } + + double height; + + if (QSGItemPrivate::get(sgItem())->heightValid) { + height = sgItem()->height(); + } else { + height = sgItem()->implicitHeight(); + } + + + return QSizeF(width, height); } QRectF SGItemNodeInstance::boundingRectWithStepChilds(QSGItem *parentItem) const diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlgraphicsitemnodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlgraphicsitemnodeinstance.cpp index 0092e7beab3..acb4ad488e1 100644 --- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlgraphicsitemnodeinstance.cpp +++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlgraphicsitemnodeinstance.cpp @@ -104,7 +104,24 @@ bool QmlGraphicsItemNodeInstance::isQmlGraphicsItem() const QSizeF QmlGraphicsItemNodeInstance::size() const { - return QSizeF(qmlGraphicsItem()->width(), qmlGraphicsItem()->height()); + double width; + + if (QDeclarativeItemPrivate::get(qmlGraphicsItem())->widthValid) { + width = qmlGraphicsItem()->width(); + } else { + width = qmlGraphicsItem()->implicitWidth(); + } + + double height; + + if (QDeclarativeItemPrivate::get(qmlGraphicsItem())->heightValid) { + height = qmlGraphicsItem()->height(); + } else { + height = qmlGraphicsItem()->implicitHeight(); + } + + + return QSizeF(width, height); } void QmlGraphicsItemNodeInstance::setPropertyVariant(const QString &name, const QVariant &value) From 39f1e4f2dbe9cfe4b642d3b397c1e0718fcf0741 Mon Sep 17 00:00:00 2001 From: con Date: Wed, 29 Jun 2011 18:09:01 +0200 Subject: [PATCH 005/143] Show news from the start and cycle through them. Change-Id: I0f783148ea3e42ac4f9728a0f32c0452c041b387 Reviewed-on: http://codereview.qt.nokia.com/942 Reviewed-by: Qt Sanity Bot Reviewed-by: Daniel Molkentin --- .../qtcreator/welcomescreen/welcomescreen.qml | 1 - .../widgets/FeaturedAndNewsListing.qml | 2 +- .../welcomescreen/widgets/NewsListing.qml | 86 ++++++++++++++++--- 3 files changed, 73 insertions(+), 16 deletions(-) diff --git a/share/qtcreator/welcomescreen/welcomescreen.qml b/share/qtcreator/welcomescreen/welcomescreen.qml index 77a33ee8b9c..3383f9c85bc 100644 --- a/share/qtcreator/welcomescreen/welcomescreen.qml +++ b/share/qtcreator/welcomescreen/welcomescreen.qml @@ -58,7 +58,6 @@ Image { anchors.fill: parent anchors.margins: 4 } - } TabWidget { diff --git a/share/qtcreator/welcomescreen/widgets/FeaturedAndNewsListing.qml b/share/qtcreator/welcomescreen/widgets/FeaturedAndNewsListing.qml index f9a37d425b7..d6694c945a5 100644 --- a/share/qtcreator/welcomescreen/widgets/FeaturedAndNewsListing.qml +++ b/share/qtcreator/welcomescreen/widgets/FeaturedAndNewsListing.qml @@ -16,7 +16,7 @@ Item { ListModel { id: tempNewsModel - ListElement { title: "Loading news sources..."; description: "Loading..." ; blogIcon: ""; blogName: ""; link: "" } + ListElement { title: ""; description: "Loading news sources..." ; blogIcon: ""; blogName: ""; link: "" } } NewsListing { diff --git a/share/qtcreator/welcomescreen/widgets/NewsListing.qml b/share/qtcreator/welcomescreen/widgets/NewsListing.qml index a756ef7fc3b..14fa94030ee 100644 --- a/share/qtcreator/welcomescreen/widgets/NewsListing.qml +++ b/share/qtcreator/welcomescreen/widgets/NewsListing.qml @@ -1,4 +1,4 @@ -import Qt 4.7 +import QtQuick 1.1 import "../components/" as Components Item { @@ -15,6 +15,13 @@ Item { onTriggered: repeater.incrementIndex() } + Timer { + id: modelUpdateTimer + repeat: false + interval: 1000 + onTriggered: repeater.handleModelUpdate(); + } + Repeater { id: repeater function incrementIndex() { @@ -23,17 +30,34 @@ Item { repeater.itemAt(currentItem).active = true } + function handleModelUpdate() { + timer.stop(); + currentItem = 0; + for (var i = 0; i < count; ++i) { + if (i != currentItem) + repeater.itemAt(i).active = false; + else + repeater.itemAt(i).active = true; + } + timer.start(); + } + function handleModelChanged() { - if (timer.running) - timer.stop(); - currentItem = 0 - //FIXME: this doesn't work - repeater.itemAt(currentItem).active = true - timer.start() + modelUpdateTimer.restart(); + } + + function handleItemRemoved(index, item) { + modelUpdateTimer.restart(); + } + + function handleItemAdded(index, item) { + modelUpdateTimer.restart(); } anchors.fill: parent onModelChanged: handleModelChanged() + onItemAdded: handleItemAdded(index, item) + onItemRemoved: handleItemRemoved(index, item) delegate: Item { property bool active: false id: delegateItem @@ -44,12 +68,30 @@ Item { spacing: 10 width: parent.width id: column - Text { id: heading1; text: title; font.bold: true; wrapMode: Text.WrapAtWordBoundaryOrAnywhere; textFormat: Text.RichText; width: parent.width-icon.width-5 } + Text { + id: heading1; + text: title; + font.bold: true; + wrapMode: Text.WrapAtWordBoundaryOrAnywhere; + textFormat: Text.RichText; + width: parent.width-icon.width-5 + } Row { spacing: 5 width: parent.width - Image { id: icon; source: blogIcon; asynchronous: true } - Text { id: heading2; text: blogName; font.italic: true; wrapMode: Text.WrapAtWordBoundaryOrAnywhere; textFormat: Text.RichText; width: parent.width-icon.width-5 } + Image { + id: icon; + source: blogIcon; + asynchronous: true + } + Text { + id: heading2; + text: blogName; + font.italic: true; + wrapMode: Text.WrapAtWordBoundaryOrAnywhere; + textFormat: Text.RichText; + width: parent.width-icon.width-5 + } } Text { id: text; @@ -58,16 +100,31 @@ Item { textFormat: Text.RichText width: parent.width-10 } - Text { visible: link !== ""; id: readmore; text: qsTr("Click to read more..."); font.italic: true; wrapMode: Text.WrapAtWordBoundaryOrAnywhere; textFormat: Text.RichText } + Text { visible: link !== ""; + id: readmore; + text: qsTr("Click to read more..."); + font.italic: true; + wrapMode: Text.WrapAtWordBoundaryOrAnywhere; + textFormat: Text.RichText + } + } + Components.QStyleItem { + id: styleItem; + cursor: "pointinghandcursor"; + anchors.fill: column + } + MouseArea { + anchors.fill: column; + onClicked: Qt.openUrlExternally(link); + hoverEnabled: true; + id: mouseArea } - Components.QStyleItem { id: styleItem; cursor: "pointinghandcursor"; anchors.fill: column } - MouseArea { anchors.fill: column; onClicked: Qt.openUrlExternally(link); hoverEnabled: true; id: mouseArea } StateGroup { id: activeState states: [ State { name: "active"; when: delegateItem.active; PropertyChanges { target: delegateItem; opacity: 1 } } ] transitions: [ - Transition { from: ""; to: "active"; reversible: true; NumberAnimation { target: delegateItem; property: "opacity"; duration: 200 } } + Transition { from: ""; to: "active"; reversible: true; NumberAnimation { target: delegateItem; property: "opacity"; duration: 1000 } } ] } @@ -76,6 +133,7 @@ Item { State { name: "hovered"; when: mouseArea.containsMouse; PropertyChanges { target: text; color: "#074C1C" } } ] + } } } From 9e5bcf2f4bfcfd4335f7478865dea66822cd2277 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Thu, 30 Jun 2011 11:01:10 +0200 Subject: [PATCH 006/143] Debugger [CDB]: Fix module resolution. Use breakpoint id as response id to identify breakpoints in reponse to 'list breakpoint' command. Change-Id: I31686aef0193bf2e26e38482c7efebf294a358c4 Reviewed-on: http://codereview.qt.nokia.com/940 Reviewed-by: Qt Sanity Bot Reviewed-by: hjk --- src/plugins/debugger/breakpoint.cpp | 7 +++++++ src/plugins/debugger/cdb/cdbengine.cpp | 14 +++++++------- src/plugins/debugger/cdb/cdbparsehelpers.cpp | 14 +++++--------- src/plugins/debugger/cdb/cdbparsehelpers.h | 2 +- 4 files changed, 20 insertions(+), 17 deletions(-) diff --git a/src/plugins/debugger/breakpoint.cpp b/src/plugins/debugger/breakpoint.cpp index c409dde18fa..4c0983d1ddf 100644 --- a/src/plugins/debugger/breakpoint.cpp +++ b/src/plugins/debugger/breakpoint.cpp @@ -51,6 +51,9 @@ namespace Internal { This identifies a breakpoint in the \c BreakHandler. The major parts are strictly increasing over time. + + The minor part identifies a multiple breakpoint + set for example by gdb in constructors. */ @@ -105,6 +108,10 @@ BreakpointModelId BreakpointModelId::child(int row) const This is what the external debuggers use to identify a breakpoint. It is only valid for one debugger run. + + In gdb, the breakpoint number is used, which is constant + during a session. CDB's breakpoint numbers vary if breakpoints + are deleted, so, the ID is used. */ BreakpointResponseId::BreakpointResponseId(const QByteArray &ba) diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp index a2ea611039d..e8b464d5370 100644 --- a/src/plugins/debugger/cdb/cdbengine.cpp +++ b/src/plugins/debugger/cdb/cdbengine.cpp @@ -2512,6 +2512,7 @@ void CdbEngine::attemptBreakpointSynchronization() BreakpointParameters parameters = handler->breakpointData(id); BreakpointResponse response; response.fromParameters(parameters); + response.id = BreakpointResponseId(id.majorPart(), id.minorPart()); // If we encountered that file and have a module for it: Add it. if (parameters.type == BreakpointByFileAndLine && parameters.module.isEmpty()) { const QHash::const_iterator it = m_fileNameModuleHash.constFind(parameters.fileName); @@ -2833,14 +2834,14 @@ void CdbEngine::handleBreakPoints(const GdbMi &value) BreakHandler *handler = breakHandler(); foreach (const GdbMi &breakPointG, value.children()) { BreakpointResponse reportedResponse; - const BreakpointResponseId id = parseBreakPoint(breakPointG, &reportedResponse); + parseBreakPoint(breakPointG, &reportedResponse); if (debugBreakpoints) - qDebug(" Parsed %d: pending=%d %s\n", id.majorPart(), + qDebug(" Parsed %d: pending=%d %s\n", reportedResponse.id.majorPart(), reportedResponse.pending, qPrintable(reportedResponse.toString())); - - if (!reportedResponse.pending) { - BreakpointModelId mid = handler->findBreakpointByResponseId(id); + if (reportedResponse.id.isValid() && !reportedResponse.pending) { + const BreakpointModelId mid = handler->findBreakpointByResponseId(reportedResponse.id); + QTC_ASSERT(mid.isValid(), continue; ) const PendingBreakPointMap::iterator it = m_pendingBreakpointMap.find(mid); if (it != m_pendingBreakpointMap.end()) { // Complete the response and set on handler. @@ -2852,9 +2853,8 @@ void CdbEngine::handleBreakPoints(const GdbMi &value) currentResponse.enabled = reportedResponse.enabled; formatCdbBreakPointResponse(mid, currentResponse, str); if (debugBreakpoints) - qDebug(" Setting for %d: %s\n", id.majorPart(), + qDebug(" Setting for %d: %s\n", currentResponse.id.majorPart(), qPrintable(currentResponse.toString())); - BreakpointModelId mid = handler->findBreakpointByResponseId(id); handler->setResponse(mid, currentResponse); m_pendingBreakpointMap.erase(it); } diff --git a/src/plugins/debugger/cdb/cdbparsehelpers.cpp b/src/plugins/debugger/cdb/cdbparsehelpers.cpp index 92cc42090bb..bade3a09a9a 100644 --- a/src/plugins/debugger/cdb/cdbparsehelpers.cpp +++ b/src/plugins/debugger/cdb/cdbparsehelpers.cpp @@ -298,21 +298,18 @@ static inline bool gdbmiChildToBool(const GdbMi &parent, const char *childName, // Parse extension command listing breakpoints. // Note that not all fields are returned, since file, line, function are encoded // in the expression (that is in addition deleted on resolving for a bp-type breakpoint). -BreakpointResponseId parseBreakPoint(const GdbMi &gdbmi, BreakpointResponse *r, - QString *expression /* = 0 */) +void parseBreakPoint(const GdbMi &gdbmi, BreakpointResponse *r, + QString *expression /* = 0 */) { - BreakpointResponseId id = BreakpointResponseId(-1); - int majorPart = 0; - gdbmiChildToInt(gdbmi, "number", &majorPart); gdbmiChildToBool(gdbmi, "enabled", &(r->enabled)); gdbmiChildToBool(gdbmi, "deferred", &(r->pending)); - r->id = BreakpointResponseId(majorPart); + r->id = BreakpointResponseId(); const GdbMi idG = gdbmi.findChild("id"); if (idG.isValid()) { // Might not be valid if there is not id bool ok; - const BreakpointResponseId cid(idG.data().toInt(&ok)); + const int id = idG.data().toInt(&ok); if (ok) - id = cid; + r->id = BreakpointResponseId(id); } const GdbMi moduleG = gdbmi.findChild("module"); if (moduleG.isValid()) @@ -328,7 +325,6 @@ BreakpointResponseId parseBreakPoint(const GdbMi &gdbmi, BreakpointResponse *r, if (gdbmiChildToInt(gdbmi, "passcount", &(r->ignoreCount))) r->ignoreCount--; gdbmiChildToInt(gdbmi, "thread", &(r->threadSpec)); - return id; } QByteArray cdbWriteMemoryCommand(quint64 addr, const QByteArray &data) diff --git a/src/plugins/debugger/cdb/cdbparsehelpers.h b/src/plugins/debugger/cdb/cdbparsehelpers.h index 66f453b1d66..15a281a8789 100644 --- a/src/plugins/debugger/cdb/cdbparsehelpers.h +++ b/src/plugins/debugger/cdb/cdbparsehelpers.h @@ -69,7 +69,7 @@ QByteArray cdbAddBreakpointCommand(const BreakpointParameters &d, // Parse extension command listing breakpoints. // Note that not all fields are returned, since file, line, function are encoded // in the expression (that is in addition deleted on resolving for a bp-type breakpoint). -BreakpointResponseId parseBreakPoint(const GdbMi &gdbmi, BreakpointResponse *r, QString *expression = 0); +void parseBreakPoint(const GdbMi &gdbmi, BreakpointResponse *r, QString *expression = 0); // Convert a CDB integer value: '00000000`0012a290' -> '12a290', '0n10' ->'10' QByteArray fixCdbIntegerValue(QByteArray t, bool stripLeadingZeros = false, int *basePtr = 0); From b90be2b5bf8b474dbcd46fc97f8b75501a5ab088 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Thu, 30 Jun 2011 10:50:39 +0200 Subject: [PATCH 007/143] Alert the user that he might be missing a toolchain Change-Id: I2c9e3f9eab962b8310f21f9fe5fc392d88089c7f Task-Nr: QTCREATORBUG-5248 Reviewed-on: http://codereview.qt.nokia.com/886 Reviewed-by: Qt Sanity Bot Reviewed-by: Daniel Teske --- src/plugins/qtsupport/qtoptionspage.cpp | 80 +++++++++++++++++++++---- src/plugins/qtsupport/qtoptionspage.h | 10 ++++ 2 files changed, 78 insertions(+), 12 deletions(-) diff --git a/src/plugins/qtsupport/qtoptionspage.cpp b/src/plugins/qtsupport/qtoptionspage.cpp index 411d04675af..232c9ad50fe 100644 --- a/src/plugins/qtsupport/qtoptionspage.cpp +++ b/src/plugins/qtsupport/qtoptionspage.cpp @@ -48,6 +48,7 @@ #include #include #include +#include #include #include @@ -129,6 +130,7 @@ QtOptionsPageWidget::QtOptionsPageWidget(QWidget *parent, QList , m_versionUi(new Internal::Ui::QtVersionInfo()) , m_debuggingHelperUi(new Internal::Ui::DebuggingHelper()) , m_invalidVersionIcon(":/projectexplorer/images/compile_error.png") + , m_warningVersionIcon(":/projectexplorer/images/compile_warning.png") , m_configurationWidget(0) { // Initialize m_versions @@ -169,7 +171,8 @@ QtOptionsPageWidget::QtOptionsPageWidget(QWidget *parent, QList item->setText(0, version->displayName()); item->setText(1, QDir::toNativeSeparators(version->qmakeCommand())); item->setData(0, VersionIdRole, version->uniqueId()); - item->setIcon(0, version->isValid()? m_validVersionIcon : m_invalidVersionIcon); + const ValidityInfo info = validInformation(version); + item->setIcon(0, info.icon); } m_ui->qtdirList->expandAll(); @@ -207,6 +210,9 @@ QtOptionsPageWidget::QtOptionsPageWidget(QWidget *parent, QList connect(QtVersionManager::instance(), SIGNAL(dumpUpdatedFor(QString)), this, SLOT(qtVersionsDumpUpdated(QString))); + + connect(ProjectExplorer::ToolChainManager::instance(), SIGNAL(toolChainsChanged()), + this, SLOT(toolChainsUpdated())); } bool QtOptionsPageWidget::eventFilter(QObject *o, QEvent *e) @@ -320,6 +326,19 @@ void QtOptionsPageWidget::cleanUpQtVersions() updateCleanUpButton(); } +void QtOptionsPageWidget::toolChainsUpdated() +{ + for (int i = 0; i < m_versions.count(); ++i) { + QTreeWidgetItem *item = treeItemForIndex(i); + if (item == m_ui->qtdirList->currentItem()) + updateDescriptionLabel(); + else { + const ValidityInfo info = validInformation(m_versions.at(i)); + item->setIcon(0, info.icon); + } + } +} + void QtOptionsPageWidget::qtVersionsDumpUpdated(const QString &qmakeCommand) { foreach (BaseQtVersion *version, m_versions) { @@ -334,6 +353,49 @@ void QtOptionsPageWidget::qtVersionsDumpUpdated(const QString &qmakeCommand) } } +QtOptionsPageWidget::ValidityInfo QtOptionsPageWidget::validInformation(const BaseQtVersion *version) +{ + ValidityInfo info; + info.icon = m_validVersionIcon; + + if (!version) + return info; + + if (!version->isValid()) { + info.icon = m_invalidVersionIcon; + info.message = version->invalidReason(); + return info; + } + + // Do we have tool chain issues? + QStringList missingToolChains; + int abiCount = 0; + foreach (const ProjectExplorer::Abi &a, version->qtAbis()) { + // Ignore symbian emulator since we do not support it. + if (a.osFlavor() == ProjectExplorer::Abi::SymbianEmulatorFlavor) + continue; + if (ProjectExplorer::ToolChainManager::instance()->findToolChains(a).isEmpty()) + missingToolChains.append(a.toString()); + ++abiCount; + } + + if (missingToolChains.isEmpty()) { + // No: + info.message = tr("Qt version %1 for %2").arg(version->qtVersionString(), version->description()); + } else if (missingToolChains.count() == abiCount) { + // Yes, this Qt version can't be used at all! + info.message = tr("No tool chain can produce code for this Qt version. Please define one or more tool chains."); + info.icon = m_invalidVersionIcon; + } else { + // Yes, some ABIs are unsupported + info.message = tr("Not all possible target environments can be supported due to missing tool chains."); + info.toolTip = tr("The following ABIs are currently not supported:
  • %1
") + .arg(missingToolChains.join(QLatin1String("
  • "))); + info.icon = m_warningVersionIcon; + } + return info; +} + void QtOptionsPageWidget::buildDebuggingHelper(DebuggingHelperBuildTask::Tools tools) { const int index = currentIndex(); @@ -725,17 +787,11 @@ void QtOptionsPageWidget::qtVersionChanged() void QtOptionsPageWidget::updateDescriptionLabel() { QTreeWidgetItem *item = m_ui->qtdirList->currentItem(); - const BaseQtVersion *version = currentVersion(); - if (!version) { - m_versionUi->errorLabel->setText(QString()); - } else if (version->isValid()) { - m_versionUi->errorLabel->setText( tr("Qt version %1 for %2").arg(version->qtVersionString(), - version->description())); - item->setIcon(0, m_validVersionIcon); - } else { - m_versionUi->errorLabel->setText(version->invalidReason()); - item->setIcon(0, m_invalidVersionIcon); - } + const ValidityInfo info = validInformation(currentVersion()); + m_versionUi->errorLabel->setText(info.message); + m_versionUi->errorLabel->setToolTip(info.toolTip); + if (item) + item->setIcon(0, info.icon); } int QtOptionsPageWidget::indexForTreeItem(const QTreeWidgetItem *item) const diff --git a/src/plugins/qtsupport/qtoptionspage.h b/src/plugins/qtsupport/qtoptionspage.h index df89b2c79c9..64bc3ba08c4 100644 --- a/src/plugins/qtsupport/qtoptionspage.h +++ b/src/plugins/qtsupport/qtoptionspage.h @@ -88,6 +88,7 @@ private: QList m_versions; int m_defaultVersion; QIcon m_invalidVersionIcon; + QIcon m_warningVersionIcon; QIcon m_validVersionIcon; QtConfigWidget *m_configurationWidget; @@ -108,8 +109,17 @@ private slots: void slotShowDebuggingBuildLog(); void debuggingHelperBuildFinished(int qtVersionId, const QString &output, DebuggingHelperBuildTask::Tools tools); void cleanUpQtVersions(); + void toolChainsUpdated(); void qtVersionsDumpUpdated(const QString &qmakeCommand); + +private: + struct ValidityInfo { + QString message; + QString toolTip; + QIcon icon; + }; + ValidityInfo validInformation(const BaseQtVersion *version); }; class QtOptionsPage : public Core::IOptionsPage From 5c75f295e92af26a2473d7232b7392aaaab7fbbf Mon Sep 17 00:00:00 2001 From: Daniel Teske Date: Wed, 29 Jun 2011 15:14:09 +0200 Subject: [PATCH 008/143] Also filter files found in OTHER_FILES for qml Change-Id: I85f6958017d18a868bd63745efdd850cabb43761 Reviewed-on: http://codereview.qt.nokia.com/902 Reviewed-by: Qt Sanity Bot Reviewed-by: Aurindam Jana --- src/plugins/qt4projectmanager/qt4nodes.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/qt4projectmanager/qt4nodes.cpp b/src/plugins/qt4projectmanager/qt4nodes.cpp index b53bac567e5..4e60ba5024e 100644 --- a/src/plugins/qt4projectmanager/qt4nodes.cpp +++ b/src/plugins/qt4projectmanager/qt4nodes.cpp @@ -619,7 +619,7 @@ void Qt4PriFileNode::update(ProFile *includeFileExact, QtSupport::ProFileReader for (int i = 0; i < fileTypes.size(); ++i) { FileType type = fileTypes.at(i).type; - QSet newFilePaths = foundFiles[type]; + QSet newFilePaths = filterFiles(type, foundFiles[type]); newFilePaths += filterFiles(type, m_recursiveEnumerateFiles); // We only need to save this information if From f8ec6a1fa5bf1660316993efc3139ad0d45d4059 Mon Sep 17 00:00:00 2001 From: con Date: Thu, 30 Jun 2011 12:11:53 +0200 Subject: [PATCH 009/143] Build fix for Mac 10.5 Change-Id: I28a047f1f17013b911d5ae0badefa18787151abe Reviewed-on: http://codereview.qt.nokia.com/944 Reviewed-by: Qt Sanity Bot Reviewed-by: Daniel Molkentin --- src/plugins/qtsupport/exampleslistmodel.h | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/plugins/qtsupport/exampleslistmodel.h b/src/plugins/qtsupport/exampleslistmodel.h index 97811764b3a..44a9a2aa00e 100644 --- a/src/plugins/qtsupport/exampleslistmodel.h +++ b/src/plugins/qtsupport/exampleslistmodel.h @@ -3,13 +3,9 @@ #include #include +#include ; #include - -QT_BEGIN_NAMESPACE -class QXmlStreamReader; -QT_END_NAMESPACE - namespace QtSupport { namespace Internal { From e25d3dab5efafff1160df8cc8bca746fec23d0c2 Mon Sep 17 00:00:00 2001 From: Daniel Molkentin Date: Thu, 30 Jun 2011 12:12:22 +0200 Subject: [PATCH 010/143] docs: Forum Nokia -> Nokia Developer Change-Id: I80b2150611cca5301282eea05d590e63843a31aa Reviewed-on: http://codereview.qt.nokia.com/945 Reviewed-by: Qt Sanity Bot Reviewed-by: Leena Miettinen --- doc/qtcreator.qdoc | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/doc/qtcreator.qdoc b/doc/qtcreator.qdoc index 340ad5010dc..0dc14163b97 100644 --- a/doc/qtcreator.qdoc +++ b/doc/qtcreator.qdoc @@ -3178,7 +3178,7 @@ To develop applications for Symbian devices, you use qmake and the local Symbian compiler (on Windows) or qmake and a compilation - service at Forum Nokia (on Linux and Mac OS) to build the applications for + service at Nokia Developer (on Linux and Mac OS) to build the applications for the Symbian devices target. The interface to the compilation service, Remote Compiler, is installed as a part of the \QSDK. For more information, see \l{Building with Remote Compiler}. @@ -4373,7 +4373,7 @@ The tool chain for building applications locally on the development PC for the \gui {Symbian Device} target is only supported on Windows. If you develop on Linux or Mac OS, you must use the Remote Compiler - interface to a compilation service at Forum Nokia. For more information, + interface to a compilation service at Nokia Developer. For more information, see \l{Building with Remote Compiler}. \section2 Troubleshooting Build Issues @@ -4587,15 +4587,15 @@ \title Building with Remote Compiler The \gui {Remote Compiler} target is an interface to a compilation service at - Forum Nokia. It provides a simple, standardized environment for building Qt + Nokia Developer. It provides a simple, standardized environment for building Qt applications and creating installation packages for Symbian, Maemo, and MeeGo Harmattan devices when you do not have the necessary tool chains and SDKs installed or they are not supported on the development PC. You can choose from a set of supported devices, such as S60 3rd Edition or S60 5th Edition devices. - You need a Forum Nokia user account to use the Remote Compiler. You can - create an account for free at \l{http://www.forum.nokia.com/}{Forum Nokia}. + You need a Nokia Developer user account to use the Remote Compiler. You can + create an account for free at \l{http://www.developer.nokia.com/}{Nokia Developer}. \note Remote Compiler is an experimental component that is installed as part of \QSDK. @@ -4609,7 +4609,7 @@ Remote Compiler} to install Remote Compiler. \o In Qt Creator, choose \gui {Tools > Options > Projects > Remote Compiler} - to log on to Forum Nokia. + to log on to Nokia Developer. \image remotecompiler-fn-logon.png "Remote Compiler options" @@ -5194,7 +5194,7 @@ (Express Signing). Participants can submit an unsigned SIS file to Ovi Publishing for signing. For more information about how to participate, see - \l {http://wiki.forum.nokia.com/index.php/Guide_to_Publishing_Qt_Applications_to_the_Ovi_Store}{Guide to Publishing Qt Applications to the Ovi Store}. + \l {http://www.developer.nokia.com/Community/Wiki/Guide_to_Publishing_Qt_Applications_to_the_Ovi_Store}{Guide to Publishing Qt Applications to the Ovi Store}. There are also options that do not require you to get a Publisher ID. For more detail about how the Symbian Signed process works, see @@ -5285,7 +5285,7 @@ You can either install the Nokia Smart Installer for Symbian as part of the \QSDK, or download and install it from the - \l{http://wiki.forum.nokia.com/index.php/Nokia_Smart_Installer_for_Symbian}{Nokia Smart Installer for Symbian} + \l{http://www.developer.nokia.com/Community/Wiki/Nokia_Smart_Installer_for_Symbian}{Nokia Smart Installer for Symbian} wiki. To package Nokia Smart Installer with the application, select the \gui {Create Smart Installer @@ -5499,7 +5499,7 @@ The process and requirements to publish Qt applications to Ovi Store are described in the - \l {http://wiki.forum.nokia.com/index.php/Guide_to_Publishing_Qt_Applications_to_the_Ovi_Store}{Guide to Publishing Qt Applications to the Ovi Store} wiki. + \l {http://www.developer.nokia.com/Community/Wiki/Guide_to_Publishing_Qt_Applications_to_the_Ovi_Store}{Guide to Publishing Qt Applications to the Ovi Store} wiki. This section describes how to generate installation packages that @@ -5565,7 +5565,7 @@ device if you use UIDs from the trusted range (0x2xxxxxxx) in a self-signed application: \gui {Unable to install a trusted application from a trusted supplier.} For more - information, see \l{http://wiki.forum.nokia.com/index.php/UID}{UID}. + information, see \l{http://www.developer.nokia.com/Community/Wiki/UID}{UID}. If you try to use more capabilites than the certificate permits, the following error message is displayed on the device: \gui {Requested @@ -5642,7 +5642,7 @@ The applications that you publish on Ovi Store, must meet the testing criteria listed in - \l{http://www.forum.nokia.com/info/sw.nokia.com/id/9cd1eb18-821b-4228-a0a3-36b049c5d608/Maemo_5_Application_OVI_Store_Entry_Requirements.pdf.html} + \l{http://www.developer.nokia.com/info/sw.nokia.com/id/9cd1eb18-821b-4228-a0a3-36b049c5d608/Maemo_5_Application_OVI_Store_Entry_Requirements.pdf.html} {Maemo 5 Applications: Ovi Store Entry Requirements}. Make sure that your application passes the following most commonly @@ -9799,7 +9799,7 @@ \gui Library pane. You can dowload QML templates that specify different types of screens from - \l{https://projects.forum.nokia.com/QMLTemplates}{QML Templates} for use in + \l{https://projects.developer.nokia.com/QMLTemplates}{QML Templates} for use in your Qt Quick projects. You can open and edit the templates in \QD. \section1 Adding Components to Screens @@ -10649,8 +10649,7 @@ \endlist For more information about user experience techniques for mobile devices, see the - \l{http://library.forum.nokia.com/topic/Design_and_User_Experience_Library/GUID-A8DF3EB8-E97C-4DA0-95F6-F464ECC995BC_cover.html}{Design and User Experience Library} - on Forum Nokia. + \l{http://www.developer.nokia.com/Resources/Library/Design_and_UX} on Nokia Developer. */ @@ -12289,7 +12288,7 @@ \row \o Develop Qt applications for Nokia mobile devices - \o \l{http://www.forum.nokia.com/Develop/Qt/}{Forum Nokia - Qt} + \o \l{http://www.developer.nokia.com/Develop/Qt/}{Nokia Developer - Qt} \row \o Participate in Qt development From 8c54fea8849f4dd57eca490853146d55428e0607 Mon Sep 17 00:00:00 2001 From: Daniel Teske Date: Thu, 30 Jun 2011 13:23:20 +0200 Subject: [PATCH 011/143] QtVersionManager Options Dialog: Fix width of error label MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Ia18932d59e4d3a4301ee3520e281d07976a6548e Task-Nr: QTCREATORBUG-5261 Reviewed-on: http://codereview.qt.nokia.com/952 Reviewed-by: Qt Sanity Bot Reviewed-by: Robert Löhning --- src/plugins/qtsupport/qtversioninfo.ui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/qtsupport/qtversioninfo.ui b/src/plugins/qtsupport/qtversioninfo.ui index 0e597e6782e..9df6f277aac 100644 --- a/src/plugins/qtsupport/qtversioninfo.ui +++ b/src/plugins/qtsupport/qtversioninfo.ui @@ -55,7 +55,7 @@ - + From 18ca2234479915583c2dcbdc525af0258df6404f Mon Sep 17 00:00:00 2001 From: con Date: Thu, 30 Jun 2011 16:14:45 +0200 Subject: [PATCH 012/143] Unmaximizing output pane should restore previous size. It was resetting to the default instead. Task-number: QTCREATORBUG-4849 Change-Id: Ibe3acf7045dd051cca3bff94888b155e00fec81b Reviewed-on: http://codereview.qt.nokia.com/954 Reviewed-by: Qt Sanity Bot Reviewed-by: Daniel Teske --- src/plugins/coreplugin/outputpane.cpp | 18 ++++-------------- src/plugins/coreplugin/outputpane.h | 2 -- src/plugins/coreplugin/outputpanemanager.cpp | 13 +------------ src/plugins/coreplugin/outputpanemanager.h | 2 -- 4 files changed, 5 insertions(+), 30 deletions(-) diff --git a/src/plugins/coreplugin/outputpane.cpp b/src/plugins/coreplugin/outputpane.cpp index 782c5ed0295..aee055b9bc1 100644 --- a/src/plugins/coreplugin/outputpane.cpp +++ b/src/plugins/coreplugin/outputpane.cpp @@ -48,12 +48,12 @@ struct OutputPanePlaceHolderPrivate { Core::IMode *m_mode; QSplitter *m_splitter; - bool m_closeable; + int m_lastNonMaxSize; static OutputPanePlaceHolder* m_current; }; OutputPanePlaceHolderPrivate::OutputPanePlaceHolderPrivate(Core::IMode *mode, QSplitter *parent) : - m_mode(mode), m_splitter(parent), m_closeable(true) + m_mode(mode), m_splitter(parent), m_lastNonMaxSize(0) { } @@ -85,16 +85,6 @@ OutputPanePlaceHolder::~OutputPanePlaceHolder() } } -void OutputPanePlaceHolder::setCloseable(bool b) -{ - d->m_closeable = b; -} - -bool OutputPanePlaceHolder::closeable() -{ - return d->m_closeable; -} - void OutputPanePlaceHolder::currentModeChanged(Core::IMode *mode) { if (d->m_current == this) { @@ -110,7 +100,6 @@ void OutputPanePlaceHolder::currentModeChanged(Core::IMode *mode) layout()->addWidget(om); om->show(); om->updateStatusButtons(isVisible()); - om->setCloseable(d->m_closeable); } } @@ -125,6 +114,7 @@ void OutputPanePlaceHolder::maximizeOrMinimize(bool maximize) QList sizes = d->m_splitter->sizes(); if (maximize) { + d->m_lastNonMaxSize = sizes[idx]; int sum = 0; foreach(int s, sizes) sum += s; @@ -133,7 +123,7 @@ void OutputPanePlaceHolder::maximizeOrMinimize(bool maximize) } sizes[idx] = sum - (sizes.count()-1) * 32; } else { - int target = sizeHint().height(); + int target = d->m_lastNonMaxSize > 0 ? d->m_lastNonMaxSize : sizeHint().height(); int space = sizes[idx] - target; if (space > 0) { for (int i = 0; i < sizes.count(); ++i) { diff --git a/src/plugins/coreplugin/outputpane.h b/src/plugins/coreplugin/outputpane.h index 69b7af71af7..1de9343a5a9 100644 --- a/src/plugins/coreplugin/outputpane.h +++ b/src/plugins/coreplugin/outputpane.h @@ -60,8 +60,6 @@ public: explicit OutputPanePlaceHolder(Core::IMode *mode, QSplitter *parent = 0); ~OutputPanePlaceHolder(); - void setCloseable(bool b); - bool closeable(); static OutputPanePlaceHolder *getCurrent(); static bool isCurrentVisible(); diff --git a/src/plugins/coreplugin/outputpanemanager.cpp b/src/plugins/coreplugin/outputpanemanager.cpp index 561e6020dcb..a7e1279166a 100644 --- a/src/plugins/coreplugin/outputpanemanager.cpp +++ b/src/plugins/coreplugin/outputpanemanager.cpp @@ -349,8 +349,7 @@ void OutputPaneManager::buttonTriggered() int idx = it.key(); if (m_widgetComboBox->itemData(m_widgetComboBox->currentIndex()).toInt() == idx && - OutputPanePlaceHolder::isCurrentVisible() - && OutputPanePlaceHolder::getCurrent()->closeable()) { + OutputPanePlaceHolder::isCurrentVisible()) { // we should toggle and the page is already visible and we are actually closeable slotHide(); } else { @@ -464,16 +463,6 @@ void OutputPaneManager::togglePage(bool focus) } } -void OutputPaneManager::setCloseable(bool b) -{ - m_closeButton->setVisible(b); -} - -bool OutputPaneManager::closeable() -{ - return m_closeButton->isVisibleTo(m_closeButton->parentWidget()); -} - void OutputPaneManager::focusInEvent(QFocusEvent *e) { if (m_outputWidgetPane->currentWidget()) diff --git a/src/plugins/coreplugin/outputpanemanager.h b/src/plugins/coreplugin/outputpanemanager.h index f71985d9cb7..921e21dd128 100644 --- a/src/plugins/coreplugin/outputpanemanager.h +++ b/src/plugins/coreplugin/outputpanemanager.h @@ -62,8 +62,6 @@ class OutputPaneManager : public QWidget public: void init(); static OutputPaneManager *instance(); - void setCloseable(bool b); - bool closeable(); QWidget *buttonsWidget(); void updateStatusButtons(bool visible); From 3c1c82ea8577b6f02be96903dc532470e1552e29 Mon Sep 17 00:00:00 2001 From: con Date: Wed, 29 Jun 2011 14:33:14 +0200 Subject: [PATCH 013/143] Center the heading on welcome page. Change-Id: I6713eb330ab4eb6bcbb8b5b897b250b22bca3c20 Reviewed-on: http://codereview.qt.nokia.com/898 Reviewed-by: Qt Sanity Bot Reviewed-by: Daniel Molkentin --- .../qtcreator/welcomescreen/welcomescreen.qml | 2 +- .../welcome/images/center_frame_header.png | Bin 8499 -> 11650 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/share/qtcreator/welcomescreen/welcomescreen.qml b/share/qtcreator/welcomescreen/welcomescreen.qml index 3383f9c85bc..f52564f7239 100644 --- a/share/qtcreator/welcomescreen/welcomescreen.qml +++ b/share/qtcreator/welcomescreen/welcomescreen.qml @@ -18,7 +18,7 @@ Image { id: header; source: "qrc:welcome/images/center_frame_header.png"; anchors.verticalCenter: parent.verticalCenter; - anchors.left: parent.left; + anchors.horizontalCenter: parent.horizontalCenter; anchors.topMargin: 2 } anchors.top: root.top diff --git a/src/plugins/welcome/images/center_frame_header.png b/src/plugins/welcome/images/center_frame_header.png index 4d840b48f96dabfda3c7e03567c41e2305d94c41..ce88366718d2aee171f88b59ea45f947e482a677 100644 GIT binary patch literal 11650 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 literal 8499 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 Wwt%9?ix?Of7(8A5T-G@yGywqI70kB) From cd7f466bb02bf06aa45982261005971818390dec Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Thu, 30 Jun 2011 17:20:40 +0200 Subject: [PATCH 014/143] QmlDesigner.model: fixing checking for imports Change-Id: I878f429c94b75c229738dfc26806e29a5673b102 Reviewed-on: http://codereview.qt.nokia.com/955 Reviewed-by: Qt Sanity Bot Reviewed-by: Thomas Hartmann --- .../components/formeditor/dragtool.cpp | 2 +- .../itemlibrary/itemlibrarymodel.cpp | 2 +- .../itemlibrary/itemlibrarywidget.cpp | 1 + .../qmldesigner/designercore/include/model.h | 2 +- .../qmldesigner/designercore/model/model.cpp | 38 +++++++++++++++++-- .../designercore/model/qmlmodelview.cpp | 2 +- 6 files changed, 40 insertions(+), 7 deletions(-) diff --git a/src/plugins/qmldesigner/components/formeditor/dragtool.cpp b/src/plugins/qmldesigner/components/formeditor/dragtool.cpp index ec62f391f16..435b86e3d7c 100644 --- a/src/plugins/qmldesigner/components/formeditor/dragtool.cpp +++ b/src/plugins/qmldesigner/components/formeditor/dragtool.cpp @@ -291,7 +291,7 @@ void DragTool::dragEnterEvent(QGraphicsSceneDragDropEvent * event) const QString newImportVersion = QString("%1.%2").arg(QString::number(itemLibraryEntry.majorVersion()), QString::number(itemLibraryEntry.minorVersion())); Import newImport = Import::createLibraryImport(newImportUrl, newImportVersion); - if (!view()->model()->hasImport(newImport, true)) { + if (!view()->model()->hasImport(newImport, true, true)) { importToBeAddedList.append(newImport); } diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp index 0987c3fb313..c454f45cd70 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp @@ -408,7 +408,7 @@ void ItemLibraryModel::update(ItemLibraryInfo *itemLibraryInfo, Model *model) bool valid = model->metaInfo(entry.typeName(), entry.majorVersion(), entry.minorVersion()).isValid(); - if (valid && (entry.requiredImport().isEmpty() || model->hasImport(entryToImport(entry), true) || entry.forceImport())) { + if (valid && (entry.requiredImport().isEmpty() || model->hasImport(entryToImport(entry), true, true) || entry.forceImport())) { QString itemSectionName = entry.category(); ItemLibrarySectionModel *sectionModel; ItemLibraryItemModel *itemModel; diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp index 4b5c64a7833..3fe167f2eeb 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp @@ -379,6 +379,7 @@ void ItemLibraryWidget::emitImportChecked() void ItemLibraryWidget::setImportFilter(FilterChangeFlag flag) { + return; static bool block = false; if (!m_d->model) diff --git a/src/plugins/qmldesigner/designercore/include/model.h b/src/plugins/qmldesigner/designercore/include/model.h index e5ce969dbed..b2d51001a43 100644 --- a/src/plugins/qmldesigner/designercore/include/model.h +++ b/src/plugins/qmldesigner/designercore/include/model.h @@ -104,7 +104,7 @@ public: // Imports: QList imports() const; void changeImports(const QList &importsToBeAdded, const QList &importsToBeRemoved); - bool hasImport(const Import &import, bool ignoreAlias = true); + bool hasImport(const Import &import, bool ignoreAlias = true, bool allowHigherVersion = false); RewriterView *rewriterView() const; diff --git a/src/plugins/qmldesigner/designercore/model/model.cpp b/src/plugins/qmldesigner/designercore/model/model.cpp index 18404c3054b..0e01f9c550f 100644 --- a/src/plugins/qmldesigner/designercore/model/model.cpp +++ b/src/plugins/qmldesigner/designercore/model/model.cpp @@ -1742,7 +1742,39 @@ void Model::changeImports(const QList &importsToBeAdded, const QListchangeImports(importsToBeAdded, importsToBeRemoved); } -bool Model::hasImport(const Import &import, bool ignoreAlias) + +static bool compareVersions(const QString &version1, const QString &version2, bool allowHigherVersion) +{ + if (version1 == version2) + return true; + if (!allowHigherVersion) + return false; + QStringList version1List = version1.split('.'); + QStringList version2List = version2.split('.'); + if (version1List.count() == 2 && version2List.count() == 2) { + bool ok; + int major1 = version1List.first().toInt(&ok); + if (!ok) + return false; + int major2 = version2List.first().toInt(&ok); + if (!ok) + return false; + if (major1 >= major2) { + int minor1 = version1List.last().toInt(&ok); + if (!ok) + return false; + int minor2 = version2List.last().toInt(&ok); + if (!ok) + return false; + if (minor1 >= minor2) + return true; + } + } + + return false; +} + +bool Model::hasImport(const Import &import, bool ignoreAlias, bool allowHigherVersion) { if (imports().contains(import)) return true; @@ -1751,10 +1783,10 @@ bool Model::hasImport(const Import &import, bool ignoreAlias) foreach (const Import &existingImport, imports()) { if (existingImport.isFileImport() && import.isFileImport()) - if (existingImport.file() == import.file() && existingImport.version() == import.version()) + if (existingImport.file() == import.file() && compareVersions(existingImport.version(), import.version(), allowHigherVersion)) return true; if (existingImport.isLibraryImport() && import.isLibraryImport()) - if (existingImport.url() == import.url() && existingImport.version() == import.version()) + if (existingImport.url() == import.url() && compareVersions(existingImport.version(), import.version(), allowHigherVersion)) return true; } return false; diff --git a/src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp b/src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp index 682a6e2d4ae..028f028677e 100644 --- a/src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp @@ -196,7 +196,7 @@ QmlItemNode QmlModelView::createQmlItemNode(const ItemLibraryEntry &itemLibraryE } } - if (!model()->hasImport(newImport, true)) { + if (!model()->hasImport(newImport, true, true)) { model()->changeImports(QList() << newImport, QList()); } } From b6c4598682b3a6758f124a7825fa01ae67da3680 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Thu, 30 Jun 2011 17:23:08 +0200 Subject: [PATCH 015/143] QmlDesigner.library: fixing items in library Change-Id: Ic7e8e69ca2f0126c7464c09f8ea99e75cbe12684 Reviewed-on: http://codereview.qt.nokia.com/956 Reviewed-by: Qt Sanity Bot Reviewed-by: Thomas Hartmann --- src/plugins/qmldesigner/qtquickplugin/source/gridview.qml | 6 ++++-- src/plugins/qmldesigner/qtquickplugin/source/listview.qml | 2 +- src/plugins/qmldesigner/qtquickplugin/source/pathview.qml | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/plugins/qmldesigner/qtquickplugin/source/gridview.qml b/src/plugins/qmldesigner/qtquickplugin/source/gridview.qml index 508edc8b832..d24a484d12f 100644 --- a/src/plugins/qmldesigner/qtquickplugin/source/gridview.qml +++ b/src/plugins/qmldesigner/qtquickplugin/source/gridview.qml @@ -1,8 +1,10 @@ import QtQuick 1.0 GridView { - width: 200 - height: 200 + width: 140 + height: 140 + cellWidth: 70 + cellHeight: 70 model: ListModel { diff --git a/src/plugins/qmldesigner/qtquickplugin/source/listview.qml b/src/plugins/qmldesigner/qtquickplugin/source/listview.qml index 3f4f90abd39..6ba85f375ca 100644 --- a/src/plugins/qmldesigner/qtquickplugin/source/listview.qml +++ b/src/plugins/qmldesigner/qtquickplugin/source/listview.qml @@ -1,7 +1,7 @@ import QtQuick 1.0 ListView { - width: 160 + width: 110 height: 160 model: ListModel { ListElement { diff --git a/src/plugins/qmldesigner/qtquickplugin/source/pathview.qml b/src/plugins/qmldesigner/qtquickplugin/source/pathview.qml index 13b3f543c52..fa1bb9e11b0 100644 --- a/src/plugins/qmldesigner/qtquickplugin/source/pathview.qml +++ b/src/plugins/qmldesigner/qtquickplugin/source/pathview.qml @@ -2,7 +2,7 @@ import QtQuick 1.0 PathView { width: 250 - height: 200 + height: 130 path: Path { startX: 120 From 7a8599a99e4a41b8de61a1198abd28ed1107c70e Mon Sep 17 00:00:00 2001 From: Daniel Molkentin Date: Thu, 30 Jun 2011 15:26:43 +0200 Subject: [PATCH 016/143] fix superflous comma Change-Id: I87db58828035d4f2ff29285b7fb8a0acbaeda068 Reviewed-on: http://codereview.qt.nokia.com/953 Reviewed-by: Qt Sanity Bot Reviewed-by: Eike Ziller --- src/plugins/qtsupport/exampleslistmodel.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/qtsupport/exampleslistmodel.h b/src/plugins/qtsupport/exampleslistmodel.h index 44a9a2aa00e..99218a091c6 100644 --- a/src/plugins/qtsupport/exampleslistmodel.h +++ b/src/plugins/qtsupport/exampleslistmodel.h @@ -3,7 +3,7 @@ #include #include -#include ; +#include #include namespace QtSupport { From eb4287189080b478363a571b66532b89cb5ed040 Mon Sep 17 00:00:00 2001 From: Daniel Molkentin Date: Thu, 30 Jun 2011 12:15:43 +0200 Subject: [PATCH 017/143] Desktop Components: Cleanup imports Change-Id: I7fca7c68106240c5cc221a5f1c1e85eee1b01c01 Reviewed-on: http://codereview.qt.nokia.com/946 Reviewed-by: Qt Sanity Bot Reviewed-by: Christian Kamm --- share/qtcreator/welcomescreen/components/Button.qml | 1 - share/qtcreator/welcomescreen/components/CheckBox.qml | 1 - share/qtcreator/welcomescreen/components/ChoiceList.qml | 1 - share/qtcreator/welcomescreen/components/Dial.qml | 1 - share/qtcreator/welcomescreen/components/Frame.qml | 1 - share/qtcreator/welcomescreen/components/GroupBox.qml | 1 - share/qtcreator/welcomescreen/components/Menu.qml | 1 - share/qtcreator/welcomescreen/components/MenuItem.qml | 1 - share/qtcreator/welcomescreen/components/ProgressBar.qml | 1 - share/qtcreator/welcomescreen/components/RadioButton.qml | 1 - share/qtcreator/welcomescreen/components/ScrollArea.qml | 1 - share/qtcreator/welcomescreen/components/ScrollBar.qml | 1 - share/qtcreator/welcomescreen/components/Slider.qml | 1 - share/qtcreator/welcomescreen/components/SpinBox.qml | 1 - share/qtcreator/welcomescreen/components/SplitterRow.qml | 1 - share/qtcreator/welcomescreen/components/Switch.qml | 1 - share/qtcreator/welcomescreen/components/TabBar.qml | 1 - share/qtcreator/welcomescreen/components/TabFrame.qml | 1 - share/qtcreator/welcomescreen/components/TableView.qml | 2 -- share/qtcreator/welcomescreen/components/TextArea.qml | 1 - share/qtcreator/welcomescreen/components/TextField.qml | 1 - share/qtcreator/welcomescreen/components/ToolBar.qml | 1 - share/qtcreator/welcomescreen/components/ToolButton.qml | 1 - 23 files changed, 24 deletions(-) diff --git a/share/qtcreator/welcomescreen/components/Button.qml b/share/qtcreator/welcomescreen/components/Button.qml index 2cc4d434ef1..99307730705 100644 --- a/share/qtcreator/welcomescreen/components/Button.qml +++ b/share/qtcreator/welcomescreen/components/Button.qml @@ -1,6 +1,5 @@ import QtQuick 1.0 import "custom" as Components -import "plugin" Components.Button { id:button diff --git a/share/qtcreator/welcomescreen/components/CheckBox.qml b/share/qtcreator/welcomescreen/components/CheckBox.qml index 51055f84670..d2ffe94feec 100644 --- a/share/qtcreator/welcomescreen/components/CheckBox.qml +++ b/share/qtcreator/welcomescreen/components/CheckBox.qml @@ -1,6 +1,5 @@ import QtQuick 1.0 import "custom" as Components -import "plugin" // jb : Size should not depend on background, we should make it consistent diff --git a/share/qtcreator/welcomescreen/components/ChoiceList.qml b/share/qtcreator/welcomescreen/components/ChoiceList.qml index eb6b5fddbe9..1582cc9ff0b 100644 --- a/share/qtcreator/welcomescreen/components/ChoiceList.qml +++ b/share/qtcreator/welcomescreen/components/ChoiceList.qml @@ -1,6 +1,5 @@ import QtQuick 1.0 import "custom" as Components -import "plugin" Components.ChoiceList { diff --git a/share/qtcreator/welcomescreen/components/Dial.qml b/share/qtcreator/welcomescreen/components/Dial.qml index e1b367b9a4b..95560cb8600 100644 --- a/share/qtcreator/welcomescreen/components/Dial.qml +++ b/share/qtcreator/welcomescreen/components/Dial.qml @@ -1,6 +1,5 @@ import QtQuick 1.0 import "custom" as Components -import "plugin" // jens: ContainsMouse breaks drag functionality diff --git a/share/qtcreator/welcomescreen/components/Frame.qml b/share/qtcreator/welcomescreen/components/Frame.qml index 24a8e8332ef..45031688923 100644 --- a/share/qtcreator/welcomescreen/components/Frame.qml +++ b/share/qtcreator/welcomescreen/components/Frame.qml @@ -1,6 +1,5 @@ import QtQuick 1.0 import "custom" as Components -import "plugin" QStyleBackground { diff --git a/share/qtcreator/welcomescreen/components/GroupBox.qml b/share/qtcreator/welcomescreen/components/GroupBox.qml index d2184d515f6..0afcfc47692 100644 --- a/share/qtcreator/welcomescreen/components/GroupBox.qml +++ b/share/qtcreator/welcomescreen/components/GroupBox.qml @@ -1,6 +1,5 @@ import QtQuick 1.0 import "custom" as Components -import "plugin" Components.GroupBox { id: groupbox diff --git a/share/qtcreator/welcomescreen/components/Menu.qml b/share/qtcreator/welcomescreen/components/Menu.qml index 000219ece9d..158ec52e785 100644 --- a/share/qtcreator/welcomescreen/components/Menu.qml +++ b/share/qtcreator/welcomescreen/components/Menu.qml @@ -1,5 +1,4 @@ import QtQuick 1.0 -import "../components/plugin" MenuBase { diff --git a/share/qtcreator/welcomescreen/components/MenuItem.qml b/share/qtcreator/welcomescreen/components/MenuItem.qml index 52a0511f0f9..1cd0a1d3e4a 100644 --- a/share/qtcreator/welcomescreen/components/MenuItem.qml +++ b/share/qtcreator/welcomescreen/components/MenuItem.qml @@ -1,5 +1,4 @@ import QtQuick 1.0 -import "../components/plugin" MenuItemBase { diff --git a/share/qtcreator/welcomescreen/components/ProgressBar.qml b/share/qtcreator/welcomescreen/components/ProgressBar.qml index 9b2d368a371..88e50da9ffd 100644 --- a/share/qtcreator/welcomescreen/components/ProgressBar.qml +++ b/share/qtcreator/welcomescreen/components/ProgressBar.qml @@ -1,6 +1,5 @@ import QtQuick 1.0 import "custom" as Components -import "plugin" Components.ProgressBar { id:progressbar diff --git a/share/qtcreator/welcomescreen/components/RadioButton.qml b/share/qtcreator/welcomescreen/components/RadioButton.qml index cfc16c95951..552c9ad8c4e 100644 --- a/share/qtcreator/welcomescreen/components/RadioButton.qml +++ b/share/qtcreator/welcomescreen/components/RadioButton.qml @@ -1,6 +1,5 @@ import QtQuick 1.0 import "custom" as Components -import "plugin" // jb : Size should not depend on background, we should make it consistent diff --git a/share/qtcreator/welcomescreen/components/ScrollArea.qml b/share/qtcreator/welcomescreen/components/ScrollArea.qml index 4c79a093d01..4a9cfbdf436 100644 --- a/share/qtcreator/welcomescreen/components/ScrollArea.qml +++ b/share/qtcreator/welcomescreen/components/ScrollArea.qml @@ -1,6 +1,5 @@ import QtQuick 1.0 import "custom" as Components -import "plugin" FocusScope { id: scrollarea diff --git a/share/qtcreator/welcomescreen/components/ScrollBar.qml b/share/qtcreator/welcomescreen/components/ScrollBar.qml index ef1a93779d6..800a90a0473 100644 --- a/share/qtcreator/welcomescreen/components/ScrollBar.qml +++ b/share/qtcreator/welcomescreen/components/ScrollBar.qml @@ -1,6 +1,5 @@ import QtQuick 1.0 import "custom" as Components -import "plugin" Item { id: scrollbar diff --git a/share/qtcreator/welcomescreen/components/Slider.qml b/share/qtcreator/welcomescreen/components/Slider.qml index b8720351fbc..eb7ec22a366 100644 --- a/share/qtcreator/welcomescreen/components/Slider.qml +++ b/share/qtcreator/welcomescreen/components/Slider.qml @@ -1,6 +1,5 @@ import QtQuick 1.0 import "custom" as Components -import "plugin" // jens: ContainsMouse breaks drag functionality diff --git a/share/qtcreator/welcomescreen/components/SpinBox.qml b/share/qtcreator/welcomescreen/components/SpinBox.qml index 919ac95e6b5..525ade6fd18 100644 --- a/share/qtcreator/welcomescreen/components/SpinBox.qml +++ b/share/qtcreator/welcomescreen/components/SpinBox.qml @@ -1,6 +1,5 @@ import QtQuick 1.0 import "custom" as Components -import "plugin" Components.SpinBox { id:spinbox diff --git a/share/qtcreator/welcomescreen/components/SplitterRow.qml b/share/qtcreator/welcomescreen/components/SplitterRow.qml index adcc535e001..9efa010e290 100644 --- a/share/qtcreator/welcomescreen/components/SplitterRow.qml +++ b/share/qtcreator/welcomescreen/components/SplitterRow.qml @@ -1,6 +1,5 @@ import QtQuick 1.0 import "custom" as Components -import "plugin" Components.SplitterRow { handleBackground: QStyleItem { diff --git a/share/qtcreator/welcomescreen/components/Switch.qml b/share/qtcreator/welcomescreen/components/Switch.qml index 5d661ec3d6b..08518b13b51 100644 --- a/share/qtcreator/welcomescreen/components/Switch.qml +++ b/share/qtcreator/welcomescreen/components/Switch.qml @@ -1,6 +1,5 @@ import QtQuick 1.0 import "custom" as Components -import "plugin" Components.Switch { id:widget diff --git a/share/qtcreator/welcomescreen/components/TabBar.qml b/share/qtcreator/welcomescreen/components/TabBar.qml index b5869ebf9d5..1b78aa653da 100644 --- a/share/qtcreator/welcomescreen/components/TabBar.qml +++ b/share/qtcreator/welcomescreen/components/TabBar.qml @@ -1,6 +1,5 @@ import QtQuick 1.0 import "custom" as Components -import "plugin" Item { diff --git a/share/qtcreator/welcomescreen/components/TabFrame.qml b/share/qtcreator/welcomescreen/components/TabFrame.qml index 10d63db3e26..ba664ee1949 100644 --- a/share/qtcreator/welcomescreen/components/TabFrame.qml +++ b/share/qtcreator/welcomescreen/components/TabFrame.qml @@ -1,6 +1,5 @@ import QtQuick 1.0 import "custom" as Components -import "plugin" Item { id: tabWidget diff --git a/share/qtcreator/welcomescreen/components/TableView.qml b/share/qtcreator/welcomescreen/components/TableView.qml index 196a0ed4b6c..b73be18e9ce 100644 --- a/share/qtcreator/welcomescreen/components/TableView.qml +++ b/share/qtcreator/welcomescreen/components/TableView.qml @@ -1,6 +1,4 @@ import QtQuick 1.0 -import "../components" -import "../components/plugin" /* * diff --git a/share/qtcreator/welcomescreen/components/TextArea.qml b/share/qtcreator/welcomescreen/components/TextArea.qml index 440081f829e..92e951f2747 100644 --- a/share/qtcreator/welcomescreen/components/TextArea.qml +++ b/share/qtcreator/welcomescreen/components/TextArea.qml @@ -1,6 +1,5 @@ import QtQuick 1.0 import "custom" as Components -import "plugin" ScrollArea { id:area diff --git a/share/qtcreator/welcomescreen/components/TextField.qml b/share/qtcreator/welcomescreen/components/TextField.qml index ccadadf86fc..0c068245584 100644 --- a/share/qtcreator/welcomescreen/components/TextField.qml +++ b/share/qtcreator/welcomescreen/components/TextField.qml @@ -1,6 +1,5 @@ import QtQuick 1.0 import "custom" as Components -import "plugin" Components.TextField { id: textfield diff --git a/share/qtcreator/welcomescreen/components/ToolBar.qml b/share/qtcreator/welcomescreen/components/ToolBar.qml index 98367723c5a..6185cc6ca1c 100644 --- a/share/qtcreator/welcomescreen/components/ToolBar.qml +++ b/share/qtcreator/welcomescreen/components/ToolBar.qml @@ -1,6 +1,5 @@ import QtQuick 1.0 import "custom" as Components -import "plugin" QStyleItem{ id: toolbar diff --git a/share/qtcreator/welcomescreen/components/ToolButton.qml b/share/qtcreator/welcomescreen/components/ToolButton.qml index 7de72fd10c7..82593bc5524 100644 --- a/share/qtcreator/welcomescreen/components/ToolButton.qml +++ b/share/qtcreator/welcomescreen/components/ToolButton.qml @@ -1,6 +1,5 @@ import QtQuick 1.0 import "custom" as Components -import "plugin" Components.Button { id:button From b18ef1ffb240506368459845fe1b9e932a49b44c Mon Sep 17 00:00:00 2001 From: Daniel Molkentin Date: Thu, 30 Jun 2011 13:53:36 +0200 Subject: [PATCH 018/143] WelcomeScreen: fix components imports on Windows The path-based loader in QML is broken there. Change-Id: I390370ca098e288f6e241c526e068a70f17d676f Reviewed-on: http://codereview.qt.nokia.com/947 Reviewed-by: Qt Sanity Bot Reviewed-by: Christian Kamm --- share/qtcreator/welcomescreen/develop.qml | 8 ++++---- share/qtcreator/welcomescreen/gettingstarted.qml | 4 ++-- share/qtcreator/welcomescreen/welcomescreen.pro | 2 ++ share/qtcreator/welcomescreen/welcomescreen.qml | 2 +- share/qtcreator/welcomescreen/widgets/ExampleBrowser.qml | 2 +- .../welcomescreen/widgets/FeaturedAndNewsListing.qml | 3 ++- share/qtcreator/welcomescreen/widgets/Feedback.qml | 4 ++-- share/qtcreator/welcomescreen/widgets/HeaderItemView.qml | 1 + share/qtcreator/welcomescreen/widgets/LinksBar.qml | 1 - share/qtcreator/welcomescreen/widgets/RecentProjects.qml | 2 +- share/qtcreator/welcomescreen/widgets/RecentSessions.qml | 2 +- src/plugins/welcome/welcomeplugin.cpp | 1 + 12 files changed, 18 insertions(+), 14 deletions(-) diff --git a/share/qtcreator/welcomescreen/develop.qml b/share/qtcreator/welcomescreen/develop.qml index 7473c789570..5f6fac3d2b2 100644 --- a/share/qtcreator/welcomescreen/develop.qml +++ b/share/qtcreator/welcomescreen/develop.qml @@ -1,6 +1,6 @@ import QtQuick 1.0 -import "widgets" -import "components" as Components +import "widgets" as Widgets +import components 1.0 as Components Item { id: root @@ -11,12 +11,12 @@ Item { Item { height: Math.max(recentSessions.height, recentProjects.height) width: root.width-40 - RecentSessions { + Widgets.RecentSessions { id: recentSessions x: 10 width: parent.width / 2 - 10 } - RecentProjects { + Widgets.RecentProjects { id: recentProjects x: parent.width / 2 + 10 width: parent.width / 2 - 10 diff --git a/share/qtcreator/welcomescreen/gettingstarted.qml b/share/qtcreator/welcomescreen/gettingstarted.qml index bb712c0c2a0..20902118f45 100644 --- a/share/qtcreator/welcomescreen/gettingstarted.qml +++ b/share/qtcreator/welcomescreen/gettingstarted.qml @@ -1,4 +1,4 @@ import QtQuick 1.0 -import "widgets" +import "widgets" as Widgets -ExampleBrowser {} +Widgets.ExampleBrowser {} diff --git a/share/qtcreator/welcomescreen/welcomescreen.pro b/share/qtcreator/welcomescreen/welcomescreen.pro index 0e9ebeb25c3..17ffa689110 100644 --- a/share/qtcreator/welcomescreen/welcomescreen.pro +++ b/share/qtcreator/welcomescreen/welcomescreen.pro @@ -1,6 +1,8 @@ TEMPLATE = subdirs SUBDIRS = components/styleitem +QML_IMPORT_PATH += $$OUT_PWD + OTHER_FILES = develop.qml \ gettingstarted.qml \ newssupport.qml \ diff --git a/share/qtcreator/welcomescreen/welcomescreen.qml b/share/qtcreator/welcomescreen/welcomescreen.qml index f52564f7239..845a2f960c3 100644 --- a/share/qtcreator/welcomescreen/welcomescreen.qml +++ b/share/qtcreator/welcomescreen/welcomescreen.qml @@ -1,4 +1,4 @@ -import Qt 4.7 +import QtQuick 1.0 import "widgets" Image { diff --git a/share/qtcreator/welcomescreen/widgets/ExampleBrowser.qml b/share/qtcreator/welcomescreen/widgets/ExampleBrowser.qml index 94700c409db..e91185144a6 100644 --- a/share/qtcreator/welcomescreen/widgets/ExampleBrowser.qml +++ b/share/qtcreator/welcomescreen/widgets/ExampleBrowser.qml @@ -1,5 +1,5 @@ import QtQuick 1.0 -import "../components" as Components +import components 1.0 as Components Item { id: exampleBrowserRoot diff --git a/share/qtcreator/welcomescreen/widgets/FeaturedAndNewsListing.qml b/share/qtcreator/welcomescreen/widgets/FeaturedAndNewsListing.qml index d6694c945a5..d8a3bad22e4 100644 --- a/share/qtcreator/welcomescreen/widgets/FeaturedAndNewsListing.qml +++ b/share/qtcreator/welcomescreen/widgets/FeaturedAndNewsListing.qml @@ -1,5 +1,6 @@ import QtQuick 1.0 -import "../components" as Components +import components 1.0 as Components + Item { InsetText { id: text diff --git a/share/qtcreator/welcomescreen/widgets/Feedback.qml b/share/qtcreator/welcomescreen/widgets/Feedback.qml index 64a3904341a..839e9cbeb42 100644 --- a/share/qtcreator/welcomescreen/widgets/Feedback.qml +++ b/share/qtcreator/welcomescreen/widgets/Feedback.qml @@ -1,5 +1,5 @@ -import Qt 4.7 -import "../components" as Components +import QtQuick 1.0 +import components 1.0 as Components BorderImage { id: inner_background diff --git a/share/qtcreator/welcomescreen/widgets/HeaderItemView.qml b/share/qtcreator/welcomescreen/widgets/HeaderItemView.qml index 1ac0079b113..23c0466daaf 100644 --- a/share/qtcreator/welcomescreen/widgets/HeaderItemView.qml +++ b/share/qtcreator/welcomescreen/widgets/HeaderItemView.qml @@ -1,4 +1,5 @@ import QtQuick 1.0 + Item { id: root height: childrenRect.height diff --git a/share/qtcreator/welcomescreen/widgets/LinksBar.qml b/share/qtcreator/welcomescreen/widgets/LinksBar.qml index a4efb7495c5..e357c17393f 100644 --- a/share/qtcreator/welcomescreen/widgets/LinksBar.qml +++ b/share/qtcreator/welcomescreen/widgets/LinksBar.qml @@ -1,6 +1,5 @@ import QtQuick 1.0 - Row { id: tabBar height: 25 diff --git a/share/qtcreator/welcomescreen/widgets/RecentProjects.qml b/share/qtcreator/welcomescreen/widgets/RecentProjects.qml index 8a9bab30fcc..8f67ca20c04 100644 --- a/share/qtcreator/welcomescreen/widgets/RecentProjects.qml +++ b/share/qtcreator/welcomescreen/widgets/RecentProjects.qml @@ -1,5 +1,5 @@ import QtQuick 1.0 -import "../components" as Components +import components 1.0 as Components HeaderItemView { header: qsTr("Recently Edited Projects") diff --git a/share/qtcreator/welcomescreen/widgets/RecentSessions.qml b/share/qtcreator/welcomescreen/widgets/RecentSessions.qml index 68fb74cf33e..64472cb9b45 100644 --- a/share/qtcreator/welcomescreen/widgets/RecentSessions.qml +++ b/share/qtcreator/welcomescreen/widgets/RecentSessions.qml @@ -1,5 +1,5 @@ import QtQuick 1.0 -import "../components" as Components +import components 1.0 as Components HeaderItemView { header: qsTr("Recently Used Sessions") diff --git a/src/plugins/welcome/welcomeplugin.cpp b/src/plugins/welcome/welcomeplugin.cpp index 2c6e2b6e6e8..d4ef9148bb9 100644 --- a/src/plugins/welcome/welcomeplugin.cpp +++ b/src/plugins/welcome/welcomeplugin.cpp @@ -182,6 +182,7 @@ void WelcomeMode::initPlugins() QDeclarativeEngine *engine = m_welcomePage->engine(); engine->setNetworkAccessManagerFactory(new NetworkAccessManagerFactory); + engine->addImportPath(Core::ICore::instance()->resourcePath() + "/welcomescreen"); foreach (Utils::IWelcomePage *plugin, plugins) { plugin->facilitateQml(engine); m_pluginList.append(plugin); From 3cfa37624395d23d48fddb7e91e83168fe1dfc3f Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Thu, 30 Jun 2011 17:30:17 +0200 Subject: [PATCH 019/143] QmlDesigner: Fix wrong position for reparenting Change-Id: Ie9d9a739e559d5cfc06849ff3e5c086e9ab2224c DoneBy: Marco Bubke Task-number: QTCREATORBUG-3962 Reviewed-on: http://codereview.qt.nokia.com/958 Reviewed-by: Qt Sanity Bot Reviewed-by: Thomas Hartmann --- .../commands/childrenchangedcommand.cpp | 13 ++++++-- .../commands/childrenchangedcommand.h | 6 ++-- .../instances/nodeinstanceserver.cpp | 30 +++++++++++-------- .../qt4informationnodeinstanceserver.cpp | 12 ++++---- .../formeditor/abstractformeditortool.h | 1 + .../components/formeditor/anchortool.cpp | 4 +++ .../components/formeditor/anchortool.h | 2 ++ .../components/formeditor/dragtool.cpp | 7 +++++ .../components/formeditor/dragtool.h | 1 + .../components/formeditor/formeditorview.cpp | 2 ++ .../components/formeditor/itemcreatortool.cpp | 4 +++ .../components/formeditor/itemcreatortool.h | 1 + .../components/formeditor/movemanipulator.cpp | 25 +++++++++++----- .../components/formeditor/movemanipulator.h | 1 + .../components/formeditor/movetool.cpp | 5 ++++ .../components/formeditor/movetool.h | 3 +- .../components/formeditor/resizetool.cpp | 12 ++++++-- .../components/formeditor/resizetool.h | 2 ++ .../components/formeditor/selectiontool.cpp | 5 ++++ .../components/formeditor/selectiontool.h | 2 ++ .../designercore/include/nodeinstanceview.h | 3 ++ .../instances/nodeinstanceview.cpp | 23 ++++++++++---- 22 files changed, 126 insertions(+), 38 deletions(-) diff --git a/share/qtcreator/qml/qmlpuppet/commands/childrenchangedcommand.cpp b/share/qtcreator/qml/qmlpuppet/commands/childrenchangedcommand.cpp index 7559998c815..502778d3f60 100644 --- a/share/qtcreator/qml/qmlpuppet/commands/childrenchangedcommand.cpp +++ b/share/qtcreator/qml/qmlpuppet/commands/childrenchangedcommand.cpp @@ -39,9 +39,10 @@ ChildrenChangedCommand::ChildrenChangedCommand() { } -ChildrenChangedCommand::ChildrenChangedCommand(qint32 parentInstanceId, const QVector &children) +ChildrenChangedCommand::ChildrenChangedCommand(qint32 parentInstanceId, const QVector &children, const QVector &informationVector) : m_parentInstanceId(parentInstanceId), - m_childrenVector(children) + m_childrenVector(children), + m_informationVector(informationVector) { } @@ -55,11 +56,16 @@ qint32 ChildrenChangedCommand::parentInstanceId() const return m_parentInstanceId; } +QVector ChildrenChangedCommand::informations() const +{ + return m_informationVector; +} + QDataStream &operator<<(QDataStream &out, const ChildrenChangedCommand &command) { out << command.parentInstanceId(); out << command.childrenInstances(); - + out << command.informations(); return out; } @@ -67,6 +73,7 @@ QDataStream &operator>>(QDataStream &in, ChildrenChangedCommand &command) { in >> command.m_parentInstanceId; in >> command.m_childrenVector; + in >> command.m_informationVector; return in; } diff --git a/share/qtcreator/qml/qmlpuppet/commands/childrenchangedcommand.h b/share/qtcreator/qml/qmlpuppet/commands/childrenchangedcommand.h index 8441c852a12..e89d88a4a07 100644 --- a/share/qtcreator/qml/qmlpuppet/commands/childrenchangedcommand.h +++ b/share/qtcreator/qml/qmlpuppet/commands/childrenchangedcommand.h @@ -35,7 +35,7 @@ #include #include - +#include "informationcontainer.h" namespace QmlDesigner { @@ -44,14 +44,16 @@ class ChildrenChangedCommand friend QDataStream &operator>>(QDataStream &in, ChildrenChangedCommand &command); public: ChildrenChangedCommand(); - ChildrenChangedCommand(qint32 parentInstanceId, const QVector &childrenInstances); + ChildrenChangedCommand(qint32 parentInstanceId, const QVector &childrenInstancesconst, const QVector &informationVector); QVector childrenInstances() const; qint32 parentInstanceId() const; + QVector informations() const; private: qint32 m_parentInstanceId; QVector m_childrenVector; + QVector m_informationVector; }; QDataStream &operator<<(QDataStream &out, const ChildrenChangedCommand &command); diff --git a/share/qtcreator/qml/qmlpuppet/instances/nodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/instances/nodeinstanceserver.cpp index 7c5e49fd71a..84f7d8fcd28 100644 --- a/share/qtcreator/qml/qmlpuppet/instances/nodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/instances/nodeinstanceserver.cpp @@ -812,17 +812,7 @@ NodeInstanceClientInterface *NodeInstanceServer::nodeInstanceClient() const return m_nodeInstanceClient; } -ChildrenChangedCommand NodeInstanceServer::createChildrenChangedCommand(const ServerNodeInstance &parentInstance, const QList &instanceList) const -{ - QVector instanceVector; - - foreach (const ServerNodeInstance &instance, instanceList) - instanceVector.append(instance.instanceId()); - - return ChildrenChangedCommand(parentInstance.instanceId(), instanceVector); -} - -InformationChangedCommand NodeInstanceServer::createAllInformationChangedCommand(const QList &instanceList, bool initial) const +static QVector createInformationVector(const QList &instanceList, bool initial) { QVector informationVector; @@ -894,7 +884,23 @@ InformationChangedCommand NodeInstanceServer::createAllInformationChangedCommand } - return InformationChangedCommand(informationVector); + return informationVector; +} + + +ChildrenChangedCommand NodeInstanceServer::createChildrenChangedCommand(const ServerNodeInstance &parentInstance, const QList &instanceList) const +{ + QVector instanceVector; + + foreach (const ServerNodeInstance &instance, instanceList) + instanceVector.append(instance.instanceId()); + + return ChildrenChangedCommand(parentInstance.instanceId(), instanceVector, createInformationVector(instanceList, false)); +} + +InformationChangedCommand NodeInstanceServer::createAllInformationChangedCommand(const QList &instanceList, bool initial) const +{ + return InformationChangedCommand(createInformationVector(instanceList, initial)); } static bool supportedVariantType(QVariant::Type type) diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4informationnodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4informationnodeinstanceserver.cpp index ab8831d1160..14cfabb1bc4 100644 --- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4informationnodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4informationnodeinstanceserver.cpp @@ -170,20 +170,22 @@ void Qt4InformationNodeInstanceServer::collectItemChangesAndSendChangeCommands() } } + informationChangedInstanceSet.subtract(m_parentChangedSet); + clearChangedPropertyList(); resetAllItems(); + if (!m_parentChangedSet.isEmpty()) { + sendChildrenChangedCommand(m_parentChangedSet.toList()); + m_parentChangedSet.clear(); + } + if (!informationChangedInstanceSet.isEmpty()) nodeInstanceClient()->informationChanged(createAllInformationChangedCommand(informationChangedInstanceSet.toList())); if (!propertyChangedList.isEmpty()) nodeInstanceClient()->valuesChanged(createValuesChangedCommand(propertyChangedList)); - if (!m_parentChangedSet.isEmpty()) { - sendChildrenChangedCommand(m_parentChangedSet.toList()); - m_parentChangedSet.clear(); - } - if (adjustSceneRect) { QRectF boundingRect = rootNodeInstance().boundingRect(); if (boundingRect.isValid()) { diff --git a/src/plugins/qmldesigner/components/formeditor/abstractformeditortool.h b/src/plugins/qmldesigner/components/formeditor/abstractformeditortool.h index eed1ec30884..f61ef51631c 100644 --- a/src/plugins/qmldesigner/components/formeditor/abstractformeditortool.h +++ b/src/plugins/qmldesigner/components/formeditor/abstractformeditortool.h @@ -82,6 +82,7 @@ public: virtual void formEditorItemsChanged(const QList &itemList) = 0; virtual void instancesCompleted(const QList &itemList) = 0; + virtual void instancesParentChanged(const QList &itemList) = 0; void setItems(const QList &itemList); QList items() const; diff --git a/src/plugins/qmldesigner/components/formeditor/anchortool.cpp b/src/plugins/qmldesigner/components/formeditor/anchortool.cpp index 85d3707e698..b058a502490 100644 --- a/src/plugins/qmldesigner/components/formeditor/anchortool.cpp +++ b/src/plugins/qmldesigner/components/formeditor/anchortool.cpp @@ -220,6 +220,10 @@ void AnchorTool::instancesCompleted(const QList &/*itemList*/) { } +void AnchorTool::instancesParentChanged(const QList &/*itemList*/) +{ +} + AnchorLineHandleItem* AnchorTool::topAnchorLineHandleItem(const QList & itemList) { foreach (QGraphicsItem *item, itemList) { diff --git a/src/plugins/qmldesigner/components/formeditor/anchortool.h b/src/plugins/qmldesigner/components/formeditor/anchortool.h index b5a19a4c797..27fc531fca2 100644 --- a/src/plugins/qmldesigner/components/formeditor/anchortool.h +++ b/src/plugins/qmldesigner/components/formeditor/anchortool.h @@ -74,6 +74,8 @@ public: void formEditorItemsChanged(const QList &itemList); void instancesCompleted(const QList &itemList); + void instancesParentChanged(const QList &itemList); + static AnchorLineHandleItem* topAnchorLineHandleItem(const QList & itemList); diff --git a/src/plugins/qmldesigner/components/formeditor/dragtool.cpp b/src/plugins/qmldesigner/components/formeditor/dragtool.cpp index 435b86e3d7c..38556c08cb1 100644 --- a/src/plugins/qmldesigner/components/formeditor/dragtool.cpp +++ b/src/plugins/qmldesigner/components/formeditor/dragtool.cpp @@ -217,6 +217,12 @@ void DragTool::instancesCompleted(const QList &itemList) QmlDesignerItemLibraryDragAndDrop::CustomDragAndDrop::hide(); } +void DragTool::instancesParentChanged(const QList &itemList) +{ + m_moveManipulator.synchronizeInstanceParent(itemList); +} + + void DragTool::clearMoveDelay() { if (!m_blockMove) @@ -381,6 +387,7 @@ void DragTool::dragMoveEvent(QGraphicsSceneDragDropEvent * event) QTimer::singleShot(1000, m_timerHandler.data(), SLOT(clearMoveDelay())); } } + if (event->mimeData()->hasFormat("application/vnd.bauhaus.libraryresource")) { } } diff --git a/src/plugins/qmldesigner/components/formeditor/dragtool.h b/src/plugins/qmldesigner/components/formeditor/dragtool.h index d397c731587..f2a8db7f108 100644 --- a/src/plugins/qmldesigner/components/formeditor/dragtool.h +++ b/src/plugins/qmldesigner/components/formeditor/dragtool.h @@ -86,6 +86,7 @@ public: void itemsAboutToRemoved(const QList &itemList); void selectedItemsChanged(const QList &itemList); + void instancesParentChanged(const QList &itemList); void updateMoveManipulator(); diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp index e0d0b58297d..3cc58655641 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp @@ -56,6 +56,7 @@ #include #include #include +#include namespace QmlDesigner { @@ -502,6 +503,7 @@ void FormEditorView::instancesChildrenChanged(const QVector &nodeList } m_currentTool->formEditorItemsChanged(itemNodeList); + m_currentTool->instancesParentChanged(itemNodeList); } void FormEditorView::rewriterBeginTransaction() diff --git a/src/plugins/qmldesigner/components/formeditor/itemcreatortool.cpp b/src/plugins/qmldesigner/components/formeditor/itemcreatortool.cpp index 4d6c3a769fb..398dbe1f4d9 100644 --- a/src/plugins/qmldesigner/components/formeditor/itemcreatortool.cpp +++ b/src/plugins/qmldesigner/components/formeditor/itemcreatortool.cpp @@ -145,6 +145,10 @@ void ItemCreatorTool::instancesCompleted(const QList &/*itemLis { } +void ItemCreatorTool::instancesParentChanged(const QList &/*itemList*/) +{ +} + void ItemCreatorTool::setItemString(const QString &itemString) { m_itemString = itemString; diff --git a/src/plugins/qmldesigner/components/formeditor/itemcreatortool.h b/src/plugins/qmldesigner/components/formeditor/itemcreatortool.h index 6c41176020a..f7fab80b026 100644 --- a/src/plugins/qmldesigner/components/formeditor/itemcreatortool.h +++ b/src/plugins/qmldesigner/components/formeditor/itemcreatortool.h @@ -71,6 +71,7 @@ public: void formEditorItemsChanged(const QList &itemList); void instancesCompleted(const QList &itemList); + void instancesParentChanged(const QList &itemList); void setItemString(const QString &itemString); diff --git a/src/plugins/qmldesigner/components/formeditor/movemanipulator.cpp b/src/plugins/qmldesigner/components/formeditor/movemanipulator.cpp index 14bcc542566..c673e741308 100644 --- a/src/plugins/qmldesigner/components/formeditor/movemanipulator.cpp +++ b/src/plugins/qmldesigner/components/formeditor/movemanipulator.cpp @@ -88,6 +88,24 @@ void MoveManipulator::setItems(const QList &itemList) } } +void MoveManipulator::synchronizeInstanceParent(const QList &itemList) +{ + if (m_view->model()) { + foreach (FormEditorItem *item, itemList) { + if (m_itemList.contains(item)) { + QmlItemNode parentItemNode = QmlItemNode(item->qmlItemNode().instanceParent()); + if (parentItemNode.isValid()) { + m_snapper.setContainerFormEditorItem(m_view->scene()->itemForQmlItemNode(parentItemNode)); + m_snapper.setTransformtionSpaceFormEditorItem(m_snapper.containerFormEditorItem()); + m_snapper.updateSnappingLines(m_itemList); + updateHashes(); + break; + } + } + } + } +} + void MoveManipulator::updateHashes() { // foreach (FormEditorItem* item, m_itemList) @@ -344,13 +362,6 @@ void MoveManipulator::reparentTo(FormEditorItem *newParent) item->qmlItemNode().setParentProperty(parent.nodeAbstractProperty("data")); } } - - if (m_view->model()) { - m_snapper.setContainerFormEditorItem(newParent); - m_snapper.setTransformtionSpaceFormEditorItem(m_snapper.containerFormEditorItem()); - m_snapper.updateSnappingLines(m_itemList); - updateHashes(); - } } diff --git a/src/plugins/qmldesigner/components/formeditor/movemanipulator.h b/src/plugins/qmldesigner/components/formeditor/movemanipulator.h index d24cb50716b..a755e62613c 100644 --- a/src/plugins/qmldesigner/components/formeditor/movemanipulator.h +++ b/src/plugins/qmldesigner/components/formeditor/movemanipulator.h @@ -69,6 +69,7 @@ public: ~MoveManipulator(); void setItems(const QList &itemList); void setItem(FormEditorItem* item); + void synchronizeInstanceParent(const QList &itemList); void begin(const QPointF& beginPoint); void update(const QPointF& updatePoint, Snapping useSnapping, State stateToBeManipulated = UseActualState); diff --git a/src/plugins/qmldesigner/components/formeditor/movetool.cpp b/src/plugins/qmldesigner/components/formeditor/movetool.cpp index 5b8226fff40..0b68938bc6f 100644 --- a/src/plugins/qmldesigner/components/formeditor/movetool.cpp +++ b/src/plugins/qmldesigner/components/formeditor/movetool.cpp @@ -256,6 +256,11 @@ void MoveTool::instancesCompleted(const QList & /*itemList*/) { } +void MoveTool::instancesParentChanged(const QList &itemList) +{ + m_moveManipulator.synchronizeInstanceParent(itemList); +} + bool MoveTool::haveSameParent(const QList &itemList) { if (itemList.isEmpty()) diff --git a/src/plugins/qmldesigner/components/formeditor/movetool.h b/src/plugins/qmldesigner/components/formeditor/movetool.h index be9227f714c..9225e098902 100644 --- a/src/plugins/qmldesigner/components/formeditor/movetool.h +++ b/src/plugins/qmldesigner/components/formeditor/movetool.h @@ -67,7 +67,8 @@ public: void selectedItemsChanged(const QList &itemList); - void instancesCompleted(const QList &/*itemList*/); + void instancesCompleted(const QList &itemList); + void instancesParentChanged(const QList &itemList); void updateMoveManipulator(); diff --git a/src/plugins/qmldesigner/components/formeditor/resizetool.cpp b/src/plugins/qmldesigner/components/formeditor/resizetool.cpp index 3063daff4f2..fca319def1c 100644 --- a/src/plugins/qmldesigner/components/formeditor/resizetool.cpp +++ b/src/plugins/qmldesigner/components/formeditor/resizetool.cpp @@ -196,8 +196,14 @@ void ResizeTool::formEditorItemsChanged(const QList &itemList) m_resizeIndicator.updateItems(itemList); } - void ResizeTool::instancesCompleted(const QList &/*itemList*/) - { - } +void ResizeTool::instancesCompleted(const QList &/*itemList*/) +{ +} + + +void ResizeTool::instancesParentChanged(const QList &/*itemList*/) +{ + +} } diff --git a/src/plugins/qmldesigner/components/formeditor/resizetool.h b/src/plugins/qmldesigner/components/formeditor/resizetool.h index d7ffa7a0501..68c935b6766 100644 --- a/src/plugins/qmldesigner/components/formeditor/resizetool.h +++ b/src/plugins/qmldesigner/components/formeditor/resizetool.h @@ -67,9 +67,11 @@ public: void clear(); void formEditorItemsChanged(const QList &itemList); + void instancesParentChanged(const QList &itemList); void instancesCompleted(const QList &itemList); + private: SelectionIndicator m_selectionIndicator; ResizeIndicator m_resizeIndicator; diff --git a/src/plugins/qmldesigner/components/formeditor/selectiontool.cpp b/src/plugins/qmldesigner/components/formeditor/selectiontool.cpp index 110c7512934..b79bf484ab3 100644 --- a/src/plugins/qmldesigner/components/formeditor/selectiontool.cpp +++ b/src/plugins/qmldesigner/components/formeditor/selectiontool.cpp @@ -275,6 +275,11 @@ void SelectionTool::instancesCompleted(const QList &/*itemList* { } +void SelectionTool::instancesParentChanged(const QList &/*itemList*/) +{ + +} + void SelectionTool::selectUnderPoint(QGraphicsSceneMouseEvent *event) { m_singleSelectionManipulator.begin(event->scenePos()); diff --git a/src/plugins/qmldesigner/components/formeditor/selectiontool.h b/src/plugins/qmldesigner/components/formeditor/selectiontool.h index d9b1edcc377..a08c38dcaea 100644 --- a/src/plugins/qmldesigner/components/formeditor/selectiontool.h +++ b/src/plugins/qmldesigner/components/formeditor/selectiontool.h @@ -80,6 +80,8 @@ public: void formEditorItemsChanged(const QList &itemList); void instancesCompleted(const QList &itemList); + void instancesParentChanged(const QList &itemList); + void selectUnderPoint(QGraphicsSceneMouseEvent *event); diff --git a/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h b/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h index 1cc469b4110..5d3ef307d42 100644 --- a/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h +++ b/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h @@ -69,6 +69,7 @@ class ChangeIdsCommand; class RemoveInstancesCommand; class RemovePropertiesCommand; class CompleteComponentCommand; +class InformationContainer; class CORESHARED_EXPORT NodeInstanceView : public AbstractView, public NodeInstanceClientInterface { @@ -161,6 +162,8 @@ private: // functions void clearStateInstance(); NodeInstanceServerInterface *nodeInstanceServer() const; + QMultiHash informationChanged(const QVector &containerVector); + CreateSceneCommand createCreateSceneCommand(); ClearSceneCommand createClearSceneCommand() const; diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp index 65c5a1bfba6..eca58fa321b 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp @@ -1058,14 +1058,11 @@ void NodeInstanceView::pixmapChanged(const PixmapChangedCommand &command) emitInstancesRenderImageChanged(renderImageChangeSet.toList().toVector()); } -void NodeInstanceView::informationChanged(const InformationChangedCommand &command) +QMultiHash NodeInstanceView::informationChanged(const QVector &containerVector) { - if (!model()) - return; - QMultiHash informationChangeHash; - foreach(const InformationContainer &container, command.informations()) { + foreach (const InformationContainer &container, containerVector) { if (hasInstanceForId(container.instanceId())) { NodeInstance instance = instanceForId(container.instanceId()); if (instance.isValid()) { @@ -1076,6 +1073,16 @@ void NodeInstanceView::informationChanged(const InformationChangedCommand &comma } } + return informationChangeHash; +} + +void NodeInstanceView::informationChanged(const InformationChangedCommand &command) +{ + if (!model()) + return; + + QMultiHash informationChangeHash = informationChanged(command.informations()); + if (!informationChangeHash.isEmpty()) emitInstanceInformationsChange(informationChangeHash); } @@ -1138,6 +1145,7 @@ void NodeInstanceView::childrenChanged(const ChildrenChangedCommand &command) if (!model()) return; + QVector childNodeVector; foreach(qint32 instanceId, command.childrenInstances()) { @@ -1148,6 +1156,11 @@ void NodeInstanceView::childrenChanged(const ChildrenChangedCommand &command) } } + QMultiHash informationChangeHash = informationChanged(command.informations()); + + if (!informationChangeHash.isEmpty()) + emitInstanceInformationsChange(informationChangeHash); + if (!childNodeVector.isEmpty()) emitInstancesChildrenChanged(childNodeVector); } From a08251849543138c7e2438c66c7d859c56d69666 Mon Sep 17 00:00:00 2001 From: Daniel Molkentin Date: Thu, 30 Jun 2011 17:31:41 +0200 Subject: [PATCH 020/143] Add missing license headers Change-Id: Iaf30f92e49f4b3de4d7f7c48b22edf19b8286bf5 Reviewed-on: http://codereview.qt.nokia.com/957 Reviewed-by: Daniel Molkentin Reviewed-by: Qt Sanity Bot --- src/plugins/qtsupport/exampleslistmodel.cpp | 32 +++++++++++++++++++++ src/plugins/qtsupport/exampleslistmodel.h | 32 +++++++++++++++++++++ 2 files changed, 64 insertions(+) diff --git a/src/plugins/qtsupport/exampleslistmodel.cpp b/src/plugins/qtsupport/exampleslistmodel.cpp index c1700dc4f4c..398369856b0 100644 --- a/src/plugins/qtsupport/exampleslistmodel.cpp +++ b/src/plugins/qtsupport/exampleslistmodel.cpp @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #include "exampleslistmodel.h" #include diff --git a/src/plugins/qtsupport/exampleslistmodel.h b/src/plugins/qtsupport/exampleslistmodel.h index 99218a091c6..ae6ee735f7b 100644 --- a/src/plugins/qtsupport/exampleslistmodel.h +++ b/src/plugins/qtsupport/exampleslistmodel.h @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #ifndef EXAMPLESLISTMODEL_H #define EXAMPLESLISTMODEL_H From 609354ae47c91ad50ecd02e419ae668a9bb76071 Mon Sep 17 00:00:00 2001 From: Daniel Molkentin Date: Thu, 30 Jun 2011 17:37:02 +0200 Subject: [PATCH 021/143] WelcomeScreen: remove debug output Change-Id: Ie1dc4be339c23d0a50c71e131e264ca5eda8e63a Reviewed-on: http://codereview.qt.nokia.com/959 Reviewed-by: Qt Sanity Bot Reviewed-by: Daniel Molkentin --- .../welcomescreen/components/styleitem/qstyleplugin.cpp | 2 +- src/plugins/qtsupport/exampleslistmodel.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/share/qtcreator/welcomescreen/components/styleitem/qstyleplugin.cpp b/share/qtcreator/welcomescreen/components/styleitem/qstyleplugin.cpp index 2015f0e334e..d615bd4a2f4 100644 --- a/share/qtcreator/welcomescreen/components/styleitem/qstyleplugin.cpp +++ b/share/qtcreator/welcomescreen/components/styleitem/qstyleplugin.cpp @@ -78,7 +78,7 @@ public: void StylePlugin::registerTypes(const char *uri) { - qDebug() << "register" << uri; +// qDebug() << "register" << uri; qmlRegisterType(uri, 1, 0, "QStyleItem"); qmlRegisterType(uri, 1, 0, "RangeModel"); qmlRegisterType(uri, 1, 0, "DropShadow"); diff --git a/src/plugins/qtsupport/exampleslistmodel.cpp b/src/plugins/qtsupport/exampleslistmodel.cpp index 398369856b0..68738065fbd 100644 --- a/src/plugins/qtsupport/exampleslistmodel.cpp +++ b/src/plugins/qtsupport/exampleslistmodel.cpp @@ -262,7 +262,7 @@ QStringList ExamplesListModel::exampleSources() const // Try Creator-provided XML file only if (sources.isEmpty()) { - qDebug() << Q_FUNC_INFO << "falling through to Creator-provided XML file"; + // qDebug() << Q_FUNC_INFO << "falling through to Creator-provided XML file"; sources << QString(resourceDir + QLatin1String("/examples_fallback.xml")); } From d0de83d9bd76dfea14aac85bf4a5687c001c2850 Mon Sep 17 00:00:00 2001 From: Daniel Teske Date: Thu, 30 Jun 2011 17:57:52 +0200 Subject: [PATCH 022/143] Fix project tree, reported on irc Reviewed-By: Trust me Change-Id: Iba035da372a2d005aa1fbf592b29da6b1176c352 Reviewed-on: http://codereview.qt.nokia.com/961 Reviewed-by: Qt Sanity Bot Reviewed-by: Daniel Teske --- src/plugins/qt4projectmanager/qt4nodes.cpp | 29 ++++++++++++++++++---- src/plugins/qt4projectmanager/qt4nodes.h | 3 ++- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/src/plugins/qt4projectmanager/qt4nodes.cpp b/src/plugins/qt4projectmanager/qt4nodes.cpp index 4e60ba5024e..ebf2d0bade3 100644 --- a/src/plugins/qt4projectmanager/qt4nodes.cpp +++ b/src/plugins/qt4projectmanager/qt4nodes.cpp @@ -619,8 +619,8 @@ void Qt4PriFileNode::update(ProFile *includeFileExact, QtSupport::ProFileReader for (int i = 0; i < fileTypes.size(); ++i) { FileType type = fileTypes.at(i).type; - QSet newFilePaths = filterFiles(type, foundFiles[type]); - newFilePaths += filterFiles(type, m_recursiveEnumerateFiles); + QSet newFilePaths = filterFilesProVariables(type, foundFiles[type]); + newFilePaths += filterFilesRecursiveEnumerata(type, m_recursiveEnumerateFiles); // We only need to save this information if // we are watching folders @@ -694,8 +694,8 @@ void Qt4PriFileNode::folderChanged(const QString &folder) const QVector &fileTypes = qt4NodeStaticData()->fileTypeData; for (int i = 0; i < fileTypes.size(); ++i) { FileType type = fileTypes.at(i).type; - QSet add = filterFiles(type, addedFiles); - QSet remove = filterFiles(type, removedFiles); + QSet add = filterFilesRecursiveEnumerata(type, addedFiles); + QSet remove = filterFilesRecursiveEnumerata(type, removedFiles); if (!add.isEmpty() || !remove.isEmpty()) { // Scream :) @@ -1227,7 +1227,26 @@ QStringList Qt4PriFileNode::dynamicVarNames(QtSupport::ProFileReader *readerExac return result; } -QSet Qt4PriFileNode::filterFiles(ProjectExplorer::FileType fileType, const QSet &files) +QSet Qt4PriFileNode::filterFilesProVariables(ProjectExplorer::FileType fileType, const QSet &files) +{ + if (fileType != ProjectExplorer::QMLType && fileType != ProjectExplorer::UnknownFileType) + return files; + QSet result; + if (fileType != ProjectExplorer::QMLType && fileType != ProjectExplorer::UnknownFileType) + return result; + if (fileType == ProjectExplorer::QMLType) { + foreach (const QString &file, files) + if (file.endsWith(".qml")) + result << file; + } else { + foreach (const QString &file, files) + if (!file.endsWith(".qml")) + result << file; + } + return result; +} + +QSet Qt4PriFileNode::filterFilesRecursiveEnumerata(ProjectExplorer::FileType fileType, const QSet &files) { QSet result; if (fileType != ProjectExplorer::QMLType && fileType != ProjectExplorer::UnknownFileType) diff --git a/src/plugins/qt4projectmanager/qt4nodes.h b/src/plugins/qt4projectmanager/qt4nodes.h index d674a75899d..3f2d1e7b8a0 100644 --- a/src/plugins/qt4projectmanager/qt4nodes.h +++ b/src/plugins/qt4projectmanager/qt4nodes.h @@ -153,7 +153,8 @@ protected: void clear(); static QStringList varNames(FileType type); static QStringList dynamicVarNames(QtSupport::ProFileReader *readerExact, QtSupport::ProFileReader *readerCumulative); - static QSet filterFiles(ProjectExplorer::FileType fileType, const QSet &files); + static QSet filterFilesProVariables(ProjectExplorer::FileType fileType, const QSet &files); + static QSet filterFilesRecursiveEnumerata(ProjectExplorer::FileType fileType, const QSet &files); enum ChangeType { AddToProFile, From 368f259d5e58e00986dec8ff2c8c41da92ba8751 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Thu, 30 Jun 2011 13:16:15 +0200 Subject: [PATCH 023/143] Fix unit test Change-Id: Ifb825f44aed8a0df90177a8d75ff6cc579df4d7a Reviewed-on: http://codereview.qt.nokia.com/951 Reviewed-by: Qt Sanity Bot Reviewed-by: Tobias Hunger --- src/plugins/projectexplorer/clangparser.cpp | 2 -- src/plugins/projectexplorer/gccparser.cpp | 20 +++++++++---------- src/plugins/projectexplorer/gnumakeparser.cpp | 2 +- src/plugins/projectexplorer/ldparser.cpp | 4 +--- .../projectexplorer/linuxiccparser.cpp | 4 +--- src/plugins/projectexplorer/task.cpp | 5 +++-- src/plugins/qt4projectmanager/qmakeparser.cpp | 8 +++----- .../qt4projectmanager/qt-s60/abldparser.cpp | 6 ++---- .../qt4projectmanager/qt-s60/rvctparser.cpp | 4 +--- .../qt-s60/s60createpackageparser.cpp | 2 -- .../qt4projectmanager/qt-s60/winscwparser.cpp | 6 ++---- 11 files changed, 23 insertions(+), 40 deletions(-) diff --git a/src/plugins/projectexplorer/clangparser.cpp b/src/plugins/projectexplorer/clangparser.cpp index 577943fabf7..f89a374baa7 100644 --- a/src/plugins/projectexplorer/clangparser.cpp +++ b/src/plugins/projectexplorer/clangparser.cpp @@ -35,8 +35,6 @@ #include "taskwindow.h" #include "projectexplorerconstants.h" -#include - using namespace ProjectExplorer; namespace { diff --git a/src/plugins/projectexplorer/gccparser.cpp b/src/plugins/projectexplorer/gccparser.cpp index 845bb58c6f0..9efca403d58 100644 --- a/src/plugins/projectexplorer/gccparser.cpp +++ b/src/plugins/projectexplorer/gccparser.cpp @@ -35,8 +35,6 @@ #include "taskwindow.h" #include "projectexplorerconstants.h" -#include - using namespace ProjectExplorer; namespace { @@ -105,7 +103,7 @@ void GccParser::stdError(const QString &line) int lineno = m_regExp.cap(3).toInt(); Task task(Task::Unknown, m_regExp.cap(8) /* description */, - QDir::fromNativeSeparators(filename), lineno, + filename, lineno, Constants::TASK_CATEGORY_COMPILE); if (m_regExp.cap(7) == QLatin1String("warning")) task.type = Task::Warning; @@ -123,7 +121,7 @@ void GccParser::stdError(const QString &line) } else if (m_regExpIncluded.indexIn(lne) > -1) { emit addTask(Task(Task::Unknown, lne /* description */, - QDir::fromNativeSeparators(m_regExpIncluded.cap(1)) /* filename */, + m_regExpIncluded.cap(1) /* filename */, m_regExpIncluded.cap(3).toInt() /* linenumber */, Constants::TASK_CATEGORY_COMPILE)); return; @@ -207,7 +205,7 @@ void ProjectExplorerPlugin::testGccOutputParsers_data() << QString() << QString() << (QList() << Task(Task::Error, QLatin1String("#error Symbian error"), - QLatin1String("C:/temp/test/untitled8/main.cpp"), 7, + QLatin1String("C:\\temp\\test\\untitled8\\main.cpp"), 7, Constants::TASK_CATEGORY_COMPILE)) << QString(); // Symbian reports #warning(s) twice (using different syntax). @@ -217,7 +215,7 @@ void ProjectExplorerPlugin::testGccOutputParsers_data() << QString() << QString() << (QList() << Task(Task::Warning, QLatin1String("#warning Symbian warning"), - QLatin1String("C:/temp/test/untitled8/main.cpp"), 8, + QLatin1String("C:\\temp\\test\\untitled8\\main.cpp"), 8, Constants::TASK_CATEGORY_COMPILE)) << QString(); QTest::newRow("GCCE #warning2") @@ -242,7 +240,7 @@ void ProjectExplorerPlugin::testGccOutputParsers_data() Constants::TASK_CATEGORY_COMPILE) << Task(Task::Error, QLatin1String("undefined reference to `MainWindow::doSomething()'"), - QLatin1String("C:/temp/test/untitled8/main.cpp"), 8, + QLatin1String("C:\\temp\\test\\untitled8/main.cpp"), 8, Constants::TASK_CATEGORY_COMPILE) << Task(Task::Error, QLatin1String("collect2: ld returned 1 exit status"), @@ -263,7 +261,7 @@ void ProjectExplorerPlugin::testGccOutputParsers_data() Constants::TASK_CATEGORY_COMPILE) << Task(Task::Error, QLatin1String("undefined reference to `MainWindow::doSomething()'"), - QLatin1String("C:/temp/test/untitled8/main.cpp"), -1, + QLatin1String("C:\\temp\\test\\untitled8/main.cpp"), -1, Constants::TASK_CATEGORY_COMPILE) << Task(Task::Error, QLatin1String("collect2: ld returned 1 exit status"), @@ -278,7 +276,7 @@ void ProjectExplorerPlugin::testGccOutputParsers_data() << (QList() << Task(Task::Error, QLatin1String("file not recognized: File format not recognized"), - QLatin1String("c:/Qt/4.6/lib/QtGuid4.dll"), -1, + QLatin1String("c:\\Qt\\4.6\\lib/QtGuid4.dll"), -1, Constants::TASK_CATEGORY_COMPILE)) << QString(); QTest::newRow("Invalid rpath") @@ -510,11 +508,11 @@ void ProjectExplorerPlugin::testGccOutputParsers_data() Constants::TASK_CATEGORY_COMPILE) << Task(Task::Error, QLatin1String("undefined reference to `vtable for QPlotAxis'"), - QLatin1String("M:/Development/x64/QtPlot/qplotaxis.cpp"), 26, + QLatin1String("M:\\Development\\x64\\QtPlot/qplotaxis.cpp"), 26, Constants::TASK_CATEGORY_COMPILE) << Task(Task::Error, QLatin1String("undefined reference to `vtable for QPlotAxis'"), - QLatin1String("M:/Development/x64/QtPlot/qplotaxis.cpp"), 26, + QLatin1String("M:\\Development\\x64\\QtPlot/qplotaxis.cpp"), 26, Constants::TASK_CATEGORY_COMPILE) << Task(Task::Error, QLatin1String("collect2: ld returned 1 exit status"), diff --git a/src/plugins/projectexplorer/gnumakeparser.cpp b/src/plugins/projectexplorer/gnumakeparser.cpp index 6d01af617f3..ca810541279 100644 --- a/src/plugins/projectexplorer/gnumakeparser.cpp +++ b/src/plugins/projectexplorer/gnumakeparser.cpp @@ -95,7 +95,7 @@ void GnuMakeParser::stdError(const QString &line) m_suppressIssues = true; addTask(Task(Task::Error, m_makefileError.cap(3), - QDir::fromNativeSeparators(m_makefileError.cap(1)), + m_makefileError.cap(1), m_makefileError.cap(2).toInt(), Constants::TASK_CATEGORY_BUILDSYSTEM)); } diff --git a/src/plugins/projectexplorer/ldparser.cpp b/src/plugins/projectexplorer/ldparser.cpp index a1d7980ca0d..a3272b0f16a 100644 --- a/src/plugins/projectexplorer/ldparser.cpp +++ b/src/plugins/projectexplorer/ldparser.cpp @@ -34,8 +34,6 @@ #include "projectexplorerconstants.h" #include "taskwindow.h" -#include - using namespace ProjectExplorer; namespace { @@ -103,7 +101,7 @@ void LdParser::stdError(const QString &line) && !m_regExpLinker.cap(4).startsWith(QLatin1String("(.text+0x"))) filename = m_regExpLinker.cap(4); QString description = m_regExpLinker.cap(8).trimmed(); - Task task(Task::Error, description, QDir::fromNativeSeparators(filename), lineno, + Task task(Task::Error, description, filename, lineno, Constants::TASK_CATEGORY_COMPILE); if (m_regExpInFunction.indexIn(description) > -1 || description.startsWith(QLatin1String("At global scope")) || diff --git a/src/plugins/projectexplorer/linuxiccparser.cpp b/src/plugins/projectexplorer/linuxiccparser.cpp index 074eaf4352f..d29d2f76ad0 100644 --- a/src/plugins/projectexplorer/linuxiccparser.cpp +++ b/src/plugins/projectexplorer/linuxiccparser.cpp @@ -35,8 +35,6 @@ #include "taskwindow.h" #include "projectexplorerconstants.h" -#include - using namespace ProjectExplorer; LinuxIccParser::LinuxIccParser() @@ -75,7 +73,7 @@ void LinuxIccParser::stdError(const QString &line) if (m_expectFirstLine && m_firstLine.indexIn(line) != -1) { // Clear out old task m_temporary = ProjectExplorer::Task(Task::Unknown, m_firstLine.cap(6).trimmed(), - QDir::fromNativeSeparators(m_firstLine.cap(1)), + m_firstLine.cap(1), m_firstLine.cap(2).toInt(), QLatin1String(Constants::TASK_CATEGORY_COMPILE)); QString category = m_firstLine.cap(4); diff --git a/src/plugins/projectexplorer/task.cpp b/src/plugins/projectexplorer/task.cpp index a1571b91b8a..24e3bf56eba 100644 --- a/src/plugins/projectexplorer/task.cpp +++ b/src/plugins/projectexplorer/task.cpp @@ -32,6 +32,8 @@ #include "task.h" +#include + namespace ProjectExplorer { @@ -48,8 +50,7 @@ Task::Task() : taskId(0), type(Unknown), line(-1) Task::Task(TaskType type_, const QString &description_, const QString &file_, int line_, const QString &category_) : - taskId(s_nextId), type(type_), description(description_), file(file_), - line(line_), category(category_) + taskId(s_nextId), type(type_), description(description_), file(QDir::fromNativeSeparators(file_)), line(line_), category(category_) { ++s_nextId; } diff --git a/src/plugins/qt4projectmanager/qmakeparser.cpp b/src/plugins/qt4projectmanager/qmakeparser.cpp index 19d8e7332de..dfc25145470 100644 --- a/src/plugins/qt4projectmanager/qmakeparser.cpp +++ b/src/plugins/qt4projectmanager/qmakeparser.cpp @@ -37,8 +37,6 @@ #include #include -#include - using namespace Qt4ProjectManager; using namespace Qt4ProjectManager::Internal; using ProjectExplorer::Task; @@ -73,7 +71,7 @@ void QMakeParser::stdError(const QString &line) return; } if (m_error.indexIn(lne) > -1) { - QString fileName = QDir::fromNativeSeparators(m_error.cap(1)); + QString fileName = m_error.cap(1); Task::TaskType type = Task::Error; if (fileName.startsWith("WARNING: ")) { type = Task::Warning; @@ -143,7 +141,7 @@ void Qt4ProjectManagerPlugin::testQmakeOutputParsers_data() << (QList() << Task(Task::Error, QLatin1String("Parse Error ('sth odd')"), - QDir::fromNativeSeparators(QLatin1String("e:\\project.pro")), + QLatin1String("e:\\project.pro"), 14, ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM)) << QString(); @@ -166,7 +164,7 @@ void Qt4ProjectManagerPlugin::testQmakeOutputParsers_data() << (QList() << Task(Task::Warning, QLatin1String("Unescaped backslashes are deprecated."), - QLatin1String("e:/NokiaQtSDK/Simulator/Qt/msvc2008/lib/qtmaind.prl"), 1, + QLatin1String("e:\\NokiaQtSDK\\Simulator\\Qt\\msvc2008\\lib\\qtmaind.prl"), 1, ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM)) << QString(); } diff --git a/src/plugins/qt4projectmanager/qt-s60/abldparser.cpp b/src/plugins/qt4projectmanager/qt-s60/abldparser.cpp index c54786eec27..504ac652008 100644 --- a/src/plugins/qt4projectmanager/qt-s60/abldparser.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/abldparser.cpp @@ -35,8 +35,6 @@ #include #include -#include - using namespace Qt4ProjectManager; using namespace ProjectExplorer; using namespace ProjectExplorer::Constants; @@ -78,7 +76,7 @@ void AbldParser::stdOutput(const QString &line) if (m_perlIssue.indexIn(lne) > -1) { m_waitingForStdOutContinuation = true; - m_currentFile = QDir::fromNativeSeparators(m_perlIssue.cap(2)); + m_currentFile = m_perlIssue.cap(2); m_currentLine = m_perlIssue.cap(3).toInt(); Task task(Task::Unknown, @@ -148,7 +146,7 @@ void AbldParser::stdError(const QString &line) } if (lne.startsWith(QLatin1String("MMPFILE \""))) { - m_currentFile = QDir::fromNativeSeparators(lne.mid(9, lne.size() - 10)); + m_currentFile = lne.mid(9, lne.size() - 10); m_waitingForStdErrContinuation = false; return; } diff --git a/src/plugins/qt4projectmanager/qt-s60/rvctparser.cpp b/src/plugins/qt4projectmanager/qt-s60/rvctparser.cpp index 54b1e4ecfb6..c783b4abc2a 100644 --- a/src/plugins/qt4projectmanager/qt-s60/rvctparser.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/rvctparser.cpp @@ -34,8 +34,6 @@ #include #include -#include - using namespace ProjectExplorer; using namespace ProjectExplorer::Constants; using namespace Qt4ProjectManager; @@ -85,7 +83,7 @@ void RvctParser::stdError(const QString &line) m_task = new Task(Task::Unknown, m_warningOrError.cap(5) /* description */, - QDir::fromNativeSeparators(m_warningOrError.cap(1)) /* file */, + m_warningOrError.cap(1) /* file */, m_warningOrError.cap(2).toInt() /* line */, TASK_CATEGORY_COMPILE); if (m_warningOrError.cap(4) == "Warning") diff --git a/src/plugins/qt4projectmanager/qt-s60/s60createpackageparser.cpp b/src/plugins/qt4projectmanager/qt-s60/s60createpackageparser.cpp index 47c52dedba8..5dfea8114eb 100644 --- a/src/plugins/qt4projectmanager/qt-s60/s60createpackageparser.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/s60createpackageparser.cpp @@ -35,8 +35,6 @@ #include #include -#include - using namespace Qt4ProjectManager::Internal; S60CreatePackageParser::S60CreatePackageParser(const QString &packageName) : diff --git a/src/plugins/qt4projectmanager/qt-s60/winscwparser.cpp b/src/plugins/qt4projectmanager/qt-s60/winscwparser.cpp index 4fa0e50096c..b2f2c8d9624 100644 --- a/src/plugins/qt4projectmanager/qt-s60/winscwparser.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/winscwparser.cpp @@ -34,8 +34,6 @@ #include -#include - using namespace Qt4ProjectManager; using namespace ProjectExplorer; using namespace ProjectExplorer::Constants; @@ -59,7 +57,7 @@ void WinscwParser::stdOutput(const QString &line) if (m_compilerProblem.indexIn(lne) > -1) { Task task(Task::Error, m_compilerProblem.cap(3) /* description */, - QDir::fromNativeSeparators(m_compilerProblem.cap(1)) /* filename */, + m_compilerProblem.cap(1) /* filename */, m_compilerProblem.cap(2).toInt() /* linenumber */, TASK_CATEGORY_COMPILE); if (task.description.startsWith(QLatin1String("warning: "))) { @@ -79,7 +77,7 @@ void WinscwParser::stdError(const QString &line) if (m_linkerProblem.indexIn(lne) > -1) { emit addTask(Task(Task::Error, m_linkerProblem.cap(2) /* description */, - QDir::fromNativeSeparators(m_linkerProblem.cap(1)) /* filename */, + m_linkerProblem.cap(1) /* filename */, -1 /* linenumber */, TASK_CATEGORY_COMPILE)); return; From 39828704a9fa91a89729126edb7511c301259d25 Mon Sep 17 00:00:00 2001 From: Daniel Molkentin Date: Thu, 30 Jun 2011 17:56:29 +0200 Subject: [PATCH 024/143] WelcomeScreen: add qmldir to widgets MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I3ced362ce15e813120184f5acae098226efc428e Reviewed-on: http://codereview.qt.nokia.com/960 Reviewed-by: Qt Sanity Bot Reviewed-by: Robert Löhning --- share/qtcreator/welcomescreen/widgets/qmldir | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 share/qtcreator/welcomescreen/widgets/qmldir diff --git a/share/qtcreator/welcomescreen/widgets/qmldir b/share/qtcreator/welcomescreen/widgets/qmldir new file mode 100644 index 00000000000..40e9f991a24 --- /dev/null +++ b/share/qtcreator/welcomescreen/widgets/qmldir @@ -0,0 +1,14 @@ +Button 1.0 Button.qml +ExampleBrowser 1.0 ExampleBrowser.qml +ExampleDelegate 1.0 ExampleDelegate.qml +FeaturedAndNewsListing 1.0 FeaturedAndNewsListing.qml +Feedback 1.0 Feedback.qml +HeaderItemView 1.0 HeaderItemView.qml +InsetText 1.0 InsetText.qml +LineEdit 1.0 LineEdit.qml +LinksBar 1.0 LinksBar.qml +NewsListing 1.0 NewsListing.qml +RatingBar 1.0 RatingBar.qml +RecentProjects 1.0 RecentProjects.qml +RecentSessions 1.0 RecentSessions.qml +TabWidget 1.0 TabWidget.qml From 715d5e9938d0c9106813c3c5211033c37b8fcbe5 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Fri, 1 Jul 2011 09:17:25 +0200 Subject: [PATCH 025/143] Add changes file for 2.3 Change-Id: Ie750fba5e7973f54f47f587382b863ba41f21b30 --- dist/changes-2.3.0 | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 dist/changes-2.3.0 diff --git a/dist/changes-2.3.0 b/dist/changes-2.3.0 new file mode 100644 index 00000000000..d1bb9dadb30 --- /dev/null +++ b/dist/changes-2.3.0 @@ -0,0 +1,46 @@ +Qt Creator version 2.3 contains bug fixes and new features. + +The most important changes are listed in this document. For a complete +list of changes, see the Git log for the Qt Creator sources that +you can check out from the public Git repository. For example: + +git clone git://gitorious.org/qt-creator/qt-creator.git +git log --cherry-pick --pretty=oneline v2.2.1...origin/2.3 + +General + * Welcome page redesign allows searching through examples with descriptions + * Restore previous size when unmaximizing output panes + +Editing + * Fixed lock up when regular expression search matched empty line + +Managing Projects + +Debugging + +Debugging QML/JS + +C++ Support + +QML/JS Support + +Help + +Platform Specific + +Mac + * "Open Terminal Here" opens Terminal.app instead of xterm + +Linux (GNOME and KDE) + +Windows + +Symbian Target + +Maemo Target + +Qt Designer + +Version control plugins + +Additional credits go to: From f8964ec4ef947743beb54e1a2e014b4025a94c16 Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Fri, 1 Jul 2011 08:51:55 +0200 Subject: [PATCH 026/143] QmlJS: Remove ": " when completing components in namespaces. So import QtQuick 1.0 as Q Q.Rec gives you Q.Rectangle instead of Q.Rectangle: Change-Id: I42b05c7310e344fd93ed34a62aabe73a351866e3 Reviewed-on: http://codereview.qt.nokia.com/991 Reviewed-by: Leandro T. C. Melo --- src/plugins/qmljseditor/qmljscompletionassist.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/plugins/qmljseditor/qmljscompletionassist.cpp b/src/plugins/qmljseditor/qmljscompletionassist.cpp index 017fffeeda7..92de68abd0e 100644 --- a/src/plugins/qmljseditor/qmljscompletionassist.cpp +++ b/src/plugins/qmljseditor/qmljscompletionassist.cpp @@ -776,7 +776,9 @@ void QmlJSCompletionAssistProcessor::addCompletionsPropertyLhs(const QHash Date: Fri, 1 Jul 2011 11:29:02 +0200 Subject: [PATCH 027/143] Update changes file. Change-Id: Ida6bc7598ff067e3cc2c3fe643c6157443a685e6 Reviewed-on: http://codereview.qt.nokia.com/995 Reviewed-by: Eike Ziller --- dist/changes-2.3.0 | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/dist/changes-2.3.0 b/dist/changes-2.3.0 index d1bb9dadb30..15a5d8e1be5 100644 --- a/dist/changes-2.3.0 +++ b/dist/changes-2.3.0 @@ -21,8 +21,26 @@ Debugging Debugging QML/JS C++ Support + * Made C++ coding style configurable (QTCREATORBUG-2670, QTCREATORBUG-4310, + QTCREATORBUG-2763, QTCREATORBUG-3623, QTCREATORBUG-567) + * Various indentation fixes (QTCREATORBUG-4993) QML/JS Support + * Updated QML type descriptions for the current state of Qt 5 + * Made tab settings configurable separately and per-project + * Added 'Find usages' functionality for QML types + * Added type resolution for alias properties (QTCREATORBUG-2306) + * Added tooltips to imports + * Added documentation on using QML modules with plugins + * Added support for properties and methods with a revision, allowing + the QtQuick 1.0 and 1.1 imports to behave as intended + * Added 'Reset code model' action to the Tools->QML/JS menu (QTCREATORBUG-4813) + * Use qmlplugindump from Qt 4.8 or newer instead of building own qmldump + * Improved error message for missing prototypes (QTCREATORBUG-4952) + * Fixed completion of slots (QTCREATORBUG-3614, QTCREATORBUG-3459) + * Fixed completion inside grouped property bindings (QTCREATORBUG-3541) + * Fixed scanning and indentation of regular expression literals (QTCREATORBUG-4566) + * Fixed indentation of object literals Help From 181b30316c83bb1f2c917134511c7e6b0c32de2d Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Fri, 1 Jul 2011 11:06:00 +0200 Subject: [PATCH 028/143] Don't show different news item while hovering mouse over it Change-Id: I585a8aca2cfa689d3c5ce324c8330fb4c0bd7fef Reviewed-on: http://codereview.qt.nokia.com/994 Reviewed-by: Qt Sanity Bot Reviewed-by: Daniel Molkentin --- share/qtcreator/welcomescreen/widgets/NewsListing.qml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/share/qtcreator/welcomescreen/widgets/NewsListing.qml b/share/qtcreator/welcomescreen/widgets/NewsListing.qml index 14fa94030ee..392df8b6a26 100644 --- a/share/qtcreator/welcomescreen/widgets/NewsListing.qml +++ b/share/qtcreator/welcomescreen/widgets/NewsListing.qml @@ -117,6 +117,8 @@ Item { anchors.fill: column; onClicked: Qt.openUrlExternally(link); hoverEnabled: true; + onEntered: timer.stop() + onExited: timer.restart() id: mouseArea } From 98c4c2c917fe31fde9e84f05780869de159650d1 Mon Sep 17 00:00:00 2001 From: Daniel Molkentin Date: Fri, 1 Jul 2011 12:10:40 +0200 Subject: [PATCH 029/143] Change name of "Close" button to the more accurate term "Clear" Change-Id: I24e7d27a4ef43ce1579e5068dae0d0f15eda24e6 Reviewed-on: http://codereview.qt.nokia.com/996 Reviewed-by: Qt Sanity Bot Reviewed-by: Daniel Molkentin --- .../welcomescreen/widgets/ExampleBrowser.qml | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/share/qtcreator/welcomescreen/widgets/ExampleBrowser.qml b/share/qtcreator/welcomescreen/widgets/ExampleBrowser.qml index e91185144a6..cc86d29934b 100644 --- a/share/qtcreator/welcomescreen/widgets/ExampleBrowser.qml +++ b/share/qtcreator/welcomescreen/widgets/ExampleBrowser.qml @@ -100,12 +100,12 @@ Item { id: rect radius: 4 opacity: 0.3 - width: closeText.width+4 - height: closeText.height+4 - x: closeText.x-2 - y: closeText.y-2 + width: clearText.width+4 + height: clearText.height+4 + x: clearText.x-2 + y: clearText.y-2 } - Text { id: closeText; text: qsTr("Close"); color: "white"; anchors.centerIn: parent } + Text { id: clearText; text: qsTr("Clear"); color: "white"; anchors.centerIn: parent } MouseArea { id: mouseArea anchors.fill: parent @@ -139,12 +139,12 @@ Item { id: btnRect radius: 4 opacity: 0 - width: closeText.width+4 - height: closeText.height+4 - x: closeText.x-2 - y: closeText.y-2 + width: text.width+4 + height: text.height+4 + x: text.x-2 + y: text.y-2 } - Text { id: closeText; text: model.text; color: "white"; anchors.centerIn: parent } + Text { id: text; text: model.text; color: "white"; anchors.centerIn: parent } MouseArea { id: mouseArea anchors.fill: parent From ccb41b3fdc3662abe7fc42a2774af8ea04ac8998 Mon Sep 17 00:00:00 2001 From: Daniel Molkentin Date: Fri, 1 Jul 2011 12:22:18 +0200 Subject: [PATCH 030/143] WelcomeScreen: Fix margins Change-Id: I0b7b71d354460a6ad137cd776a072409f272dfdb Reviewed-on: http://codereview.qt.nokia.com/997 Reviewed-by: Qt Sanity Bot Reviewed-by: Daniel Molkentin --- share/qtcreator/welcomescreen/widgets/ExampleBrowser.qml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/share/qtcreator/welcomescreen/widgets/ExampleBrowser.qml b/share/qtcreator/welcomescreen/widgets/ExampleBrowser.qml index cc86d29934b..32ce81e8f52 100644 --- a/share/qtcreator/welcomescreen/widgets/ExampleBrowser.qml +++ b/share/qtcreator/welcomescreen/widgets/ExampleBrowser.qml @@ -35,6 +35,7 @@ Item { id: checkBox text: qsTr("Show Examples and Demos") checked: false + anchors.leftMargin: 6 anchors.left: lineEdit.right anchors.verticalCenter: lineEdit.verticalCenter height: lineEdit.height @@ -46,6 +47,7 @@ Item { property string tag Behavior on width { NumberAnimation{} } onTagChanged: { examplesModel.filterTag = tag; examplesModel.updateFilter() } + anchors.leftMargin: 6 anchors.left: checkBox.right anchors.verticalCenter: lineEdit.verticalCenter visible: !examplesModel.showTutorialsOnly @@ -68,7 +70,6 @@ Item { } } - Rectangle { id: tagChooser anchors.fill: parent From 38783197e39d5ae848c15ae510712e806d85e84c Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Fri, 1 Jul 2011 13:39:54 +0200 Subject: [PATCH 031/143] Gcc: Detect more arm variations Change-Id: I7ba71f862ea2be0695643efdb6ca551cc43c95c3 Reviewed-on: http://codereview.qt.nokia.com/1005 Reviewed-by: Qt Sanity Bot Reviewed-by: Tobias Hunger --- src/plugins/projectexplorer/gcctoolchain.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/plugins/projectexplorer/gcctoolchain.cpp b/src/plugins/projectexplorer/gcctoolchain.cpp index a0976771f7e..1c62f61b03e 100644 --- a/src/plugins/projectexplorer/gcctoolchain.cpp +++ b/src/plugins/projectexplorer/gcctoolchain.cpp @@ -189,7 +189,7 @@ static QList guessGccAbi(const QString &m) || p == QLatin1String("i686") || p == QLatin1String("x86")) { arch = ProjectExplorer::Abi::X86Architecture; width = 32; - } else if (p == QLatin1String("arm") || p == QLatin1String("armv5tel")) { + } else if (p.startsWith(QLatin1String("arm"))) { arch = ProjectExplorer::Abi::ArmArchitecture; width = 32; } else if (p == QLatin1String("mipsel")) { @@ -1014,6 +1014,10 @@ void ProjectExplorerPlugin::testGccAbiGuessing_data() QTest::newRow("Linux 7") // Meego << QString::fromLatin1("armv5tel-meego-linux-gnueabi") << (QStringList() << QLatin1String("arm-linux-meego-elf-32bit")); + QTest::newRow("Linux 8") + << QString::fromLatin1("armv5tl-montavista-linux-gnueabi") + << (QStringList() << QLatin1String("arm-linux-generic-elf-32bit")); + QTest::newRow("Mingw 1") << QString::fromLatin1("i686-w64-mingw32") << (QStringList() << QLatin1String("x86-windows-msys-pe-64bit") From ca9a94a0aeda18d82fc823aa8aea4d2138546150 Mon Sep 17 00:00:00 2001 From: Daniel Teske Date: Fri, 1 Jul 2011 14:05:47 +0200 Subject: [PATCH 032/143] Remove redudant updateDocumentation Change-Id: I1967c5f1101dcbc1097c7fe6f26a195f658eab67 Reviewed-on: http://codereview.qt.nokia.com/1007 Reviewed-by: Qt Sanity Bot Reviewed-by: Friedemann Kleint --- src/plugins/qtsupport/qtversionmanager.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/plugins/qtsupport/qtversionmanager.cpp b/src/plugins/qtsupport/qtversionmanager.cpp index 8195f8dedab..551e874b568 100644 --- a/src/plugins/qtsupport/qtversionmanager.cpp +++ b/src/plugins/qtsupport/qtversionmanager.cpp @@ -131,7 +131,6 @@ void QtVersionManager::extensionsInitialized() // and add it to the qt versions findSystemQt(); } - updateDocumentation(); updateSettings(); saveQtVersions(); From 4928ea014bdfdd1c4f9aeaeb44bd165a81a19402 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Thu, 30 Jun 2011 17:37:24 +0200 Subject: [PATCH 033/143] Doc: changes to the Qt Quick Application wizard (cherry picked from commit a51c9b60306cf789fcd4347e2bb8a4352857183e) Change-Id: Ia913f2490515fb7155e7805c18e77d25cdc61f43 Reviewed-on: http://codereview.qt.nokia.com/938 Reviewed-by: Carsten Owerfeldt Reviewed-by: Leena Miettinen --- doc/images/qmldesigner-import-project.png | Bin 13837 -> 16747 bytes ...esigner-new-app-project-mobile-options.png | Bin 9784 -> 9446 bytes .../qmldesigner-new-project-location.png | Bin 10991 -> 12866 bytes .../qmldesigner-new-project-qml-sources.png | Bin 12902 -> 16751 bytes .../qmldesigner-new-project-qt-versions.png | Bin 29977 -> 15673 bytes .../qmldesigner-new-project-summary.png | Bin 15992 -> 17213 bytes ...mldesigner-new-project-symbian-options.png | Bin 12321 -> 11990 bytes doc/images/qmldesigner-new-project.png | Bin 30094 -> 32802 bytes .../qtcreator-new-qt-quick-project-wizard.png | Bin 185417 -> 109600 bytes doc/qtcreator.qdoc | 68 ++++++++++++------ 10 files changed, 45 insertions(+), 23 deletions(-) diff --git a/doc/images/qmldesigner-import-project.png b/doc/images/qmldesigner-import-project.png index 680cb6dc0313558a4f4d384c9c9b83a8564c71ac..1b0ac3d1676d1922cf091261b2fe46686358a284 100644 GIT binary patch literal 16747 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 S>rMs+1_n=8KbLh*2~7YeB)G5u literal 13837 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 literal 9784 zcmeAS@N?(olHy`uVBq!ia0y~yVEn+q!05!m#K6GNct+wp0|NtRfk$L90|Va?5N4dJ z%_q&kz`$PO>FdgVn@N<{MDG~i{a0Wi*N76w(vpn)B8HXg&Ui2|Fz}SPMwGau7AF^F z7L;V>=P?L#Dk?KDFmQpyo%0JSi!#$QN*LDgpRrF7urJsR;fdeEQo>-KZnU~IR zK>Arb%xS^-rA5i93}62@zlJGu&d<$F%`0K}c4pds1_lN;kk*jQlAKhA74I&oGcYJH zc)B=-RLpsMx3)m~`CR!A@)*4&ur%K7^G6+utWgYVRg%TFHd6NwixSQIB?bux3M zP_Sj+922XLt{0Ys@NKh>ICG-a)mO*ki|WiH?{>Zu;o)2*HnU?(^^q@D>n_K{9go%V z5cFHMa_$eYN!nIYw?kAOy_DZw!Ol5h0mrA0-;L$?H&lGPDX;M9bUVM?qm8!WH6Q2K zee-5wXqftj`?h`TUw`}GPr3K{hwTz#V9+>ycy51q=q@$}h6ovs5(Wl8g$s-f7L5+< z3=deCWEmQSsU{d0`;v*l&S75Vvzg}iYd*iax_YV}OW2HCw{Gozzi;>A#mVo|I7%8+ zFBLyJ^6J(tW%s_E8ygm0+IoPi_~oUg|Ni}(C#>FAR(}2>Pb1$37rod$H}2lun|F8D z_j}drL8>;_{r$CV+csf!zcY7vieE5zKe@Fv`}Otp^XJW5SE9J#laIgu`uP3-Zf(sj zHb2ZEoAA=$m_+i_bxdJPg7y^&yf`3uSN-kce;wgEo6q)cF=DEHwDPyy!sqjsyUQ(n zUjMH=T053+3P-SBfY4p_o0C-L$31w+{OTN$mCf1vyJ= zN)uc7j=r?>&?%J!;7oRuj1{wBjbWuvYJJX_inp{=K zxp}>1@^f=}<|MdG@tD6kU}c?I`Tk#8ffxDKehYc>iqkE6|L0e$-M0%}bUDB6xBSgN z-|A~J-Z6=N$hhQkep{|H|K4BUR!4VswDDcJTW`NvFHiI1&9keQRDP{go;vBJ#6ssn zyQx?Hh16*?3r=-v-t}&>%KY_L(>8ByGitv&^YM=o>Dgz~vUvq3zPr8r)h?}@Ig|X) zOZ-qj?{9nS-n{F}uR6xfpBc1vvhu4rlR7#w41RyPV^lJK$~%iIQ9n4JiA>%T{X%?( z&q~JYKQ0JtE!mzkQ$k8Ay=UXc$G5l1Zg*?C_V(lBe!2NGEcUHkcW%%2wdYD6thxH^ zKx6K++SePI)7NfZ+g6&^FZs8mTz!4fH;33=yY~doh}4{Tb^cA`8Eo0yo`)z#eI_V_rzN_<<& z^vJnOZl~<2QJprW>L}Nqf0nh=mady{hHYuhYNZPccdS_P=IopzF;x_9lZc9p)q7_Jvrv-J0$#<#Y!=kKog z_~>YO-@N)S2LzH`gr9H!^WxFb=TU8Pf7xc5`+ey#-nR7j)b3@^&Axx(N&WiyE3eCu z8x`ljx!)`fTb&;L$={IMW7@^LMkXdlB$Az-optZ7^f|k#G9x47^|Z4+hGtX3vz`gx zGzzc0`#{tGkt+NG&Kq-|e%$lKS~WuKmYX?j}D>1k($g`Z1abUE+R{nO@5Rof>k z&#j(&y;P^C>`nUVueJaDrkFhyhR?m9K04Yxlh^C#t3y+`r#Ob}ooTqteX&T^)|->Q zPu1vrX~wtl!0!pW{3nHIPjn4bKb5=Keet4O>jeZmt3?BOTlW-yoB8La^1D!%(Ee8; zL7tVV8eNy9xF#-YaSFV;THt4wxbriAw)ZmnH@?2UzI@rTj*g^-;^}2`cGYIR`nD{# z|65z#&$E8B=FMEF{p@h~r0v1xN$Y#f%jQ-kWMy^b{lC+9Y~I0r&ArCG)^_E;uUwg0 zEiL_iYu*{3_?fe2b$xwzuhuFpZqvtm@qV@!W?X)#@2r0=VsB)T-%clEE!+5d!OxgA>C>;DoO-New)Ld-L7l2g zf9ZVq_57>l@%^=&NgE@QlapVS`PFA%U#EME+3iKZ9A|#sG`{Aq86hIFth2kaRBV@M zm}U5$J3CwXp7ho?OENrJPY3MDG7(u6pfT(3ZO@x$tkm4ylQ&-8EiElAz1vOG%*yJd z(Q#gjqcxs`PKOZC@h&p9nmF~7aD`1*?%Cr-S0v2L#Q z=3`T@+^9Tfqb=6`RCKvUNMhYAH3?#jn}=rUt8n0|M7cPmHYgE z*V8@!EVrLFw6yeenLK&&PyVT&uC_X~KiYHcORMG;t(74LPhHxb!)td=zSTOz*ldbi z!0Tp3+y58e*nK@XVcxvI8fC1T3p-UsHJtCPc5z;NvodbWjHKchpyG0(hfiPMu`)I_ zoyNIgK}VA|UOAk0`O3jxzkWsJzxR0c(S2i17yKpDQ-rGK{`PZ|ww6D_) z_@B+0q&d+;Md<8X*^P(WlV#tY?c`a>_Vukj=Z3?xce`;-n-zRO=4tAj*~@qCZT>1} zXPbFf_T{b1r)SN6ZQSK!w|kG@r`uEFg5u`yTwm|^KXvwu85$LPrueLXGNoJP=c!n} zIZ?qeFOMFr5#BqI!*i0a>3c0^okapKn=5&zHg;%vp5){U?ENDC?%e7dQMqP;y%n-y z+ZQeBuw>*c`vvy8h$v~rO?vUwDraZvjLvnh?lqoSzp_#+ z*h6XJg6r<_i@q%{S6MSv*m~CNyY=?7B&96dUfujy;-~H(95;JS_qotXU%TF(s0~_q zeZE)h(#i5F_Hie&_oV+PzbLZ!eqFF^JBL&=CM7-ANZQk1U>Dn~iLqg^aOSgIK zpRT`kdR$%Q@q^8?wPKI4M{35$o>sr`S-jTam$$F`b7f_)tNm3e1$SRx-`Lo@<@-L*-8nnd=AGP!I`;g1 z$(nwOL3_itHD^FBUj4#c#lcc*XO18PgV<@K=xrPf45CL~8u=IwaI#o2FsKW> zU|^U-yx@w01?f4$S#O22WT$TW-gVk)(*J^u*=LqpG92IvJ?Y^8&M`%*V8v$k^*h2B zURdyRft`d>_VVsY9rrwrbf10B&`>>}(&)>W;&kmsR8Xn$OV_K} z?~JvqWJI#IZf)zB()grrNtMa09EEqGM*=jaRCYOwq+1IzB($zbSz!I;$(9|S{cf%o z4YP|~0~cMqkZ@w5hKtIolPAlMMfm;DV(u|q)^aIWQ#A@?=hX0%4&PTTdFSmL+8(8P z^`WodrWdSfHX=tCZd=9Ys(A6?h0yysovVLG)mlw7I-s;lqIaL4%aqD4JBdr8OAj#E zJa_R~#C)JDDE44>_dSmmm6OY6l}~Ma;t~C&N;G=)S+!L+Uk8i0Dh7!d-FKX-GW+Z+ zkKQlo-(Gus)mk;t<8VSpkzXL&45wZC>leHc-e|eGs zsK{`@$@b3AAD=3ML%vkWu4=j3#K4fc;>i?mwbX`*vj9UTR{>Z+fFF*hP)}JoEJ(__*Bg>F^uHm+q?{=y4)jhqK z-2DH?`N`ea-skMLN&cSB(7?m}UuSxM&C3~g3f#{f>^Hw-ShR1~*VXaA{Pp*KdfjQ> zZ};ctswe4po=wg%v;8}BCn)0Fu1+#5F|(h$aes#O>a|OvHqQTDx#wrC+a4vmUxEx_ z%UaoY-6=Re{r|K0|NnyC_56G-zJC9=w6DwmKPtW~t{!Fk|EGJu_V&A*mKBIETI5n| z7yGfxW!HIeQSY+>7o|G`8u?AmFaE8fxx{70&zsK{hRs$9+$b-Z_MCx1+cz>;Z~y+1 z*x!du-|}Bqs^25l9l!s>x3Bgw^LAEFJzM8}H9J2vHtOw-pV#N#y7}|)^`!baOPK=$ zPuywKdlD?W(zm5#e#$%XS@+oWNfe*Pbgrb)k0Blh0ezLd{-JWn`EZv$Oa`s998S^6Kd5(Cyn!)t&a;UjJj+?(26$ z_HX>PuYcXGg6y;T_jmsNaDD%$v+C^e5l9|M6#eZ z-J%?{UWmFbbh_OxrgzxNi7!w^>Ego$0jt-Vx-8-05xKEMgdu@*s^|-|MOxCKp@CD+ zhNUVSUpw3EvL&zg?Yvvw_y0a@_?|sK^KX+$w0c*#=*kE4&Z-Ju+MWVRaoRTY3Hp#P(#D+Qs~KLLNmGfr@r~B zJM(RExLOye2zec2TqUYhYj9UlllhFc(8L#CwYG)L_O&VLI1#s_M`n@o)$J?Xlp>yU zFo>q!zW?zC_g;U!2WQIf*P6@q`}_N+%l#?0|8sNWx&1$PA9%2j-EP<4$KS79yLPYY z_1f&~>(;JZx$*2ih1!*gOD!1+o*5XyM0aMW>7MaTx!X{uv|>;#pGihy5>?&Aztg^ov^`wKeN-8}HMr%nS_NErKRQR+F8Z{%y#J zG(Oa5msM=t>LotOmAk4*O7NuKe(!Z9h71R$r^>%@vk;Il?&$EyD4IU?Ja_kxPuw2y z;oNMGee?EDKGe8xgQEUsc{7F$hjc$XTyJ9ZE&F|!Nig$Z!kiU7JR)=Q%2l~MVy|}` zKdHy2H=n@+nvYq(i3>$7Oo1!1vor*G98zgd#Wc2aM<0AG)! z%I-gUyKmlDESb`~_N0_%@VObY4>j6NdYha)t8(U?lM~)B^%N{Pzbj@}VU@^ysUzyo z!#bYW`hJWLoPAr4uSe3wvA_M5+11eeTlsxAgU=dpGBZ4leAcLUy2#+g$CM>=AC#Pu z^Hq*i^Szw1e6`*>$-;wg%a1nCOPK%Q+waGY{uVh~1ZN&+H9FMj5Fe4X*-CUy-u}rQ zXXbOvy6l_pAY<3$RYP_;#hiT9} ze@52(C(cxEzrxY}JW_8l5o+)cY1eH%5A_Hsb;Idxz)t z>%Z5W9+@#q&026J14HDr?^90eq=Y{W`=$G2{bUA)X@|OG7BVw9*pb*~40|&F-+GCY zyw5&(b}?*VnO44Fb~JbDk%eMkSRVVDe<&8~o%7f2dHvik#|^U%ChR%+wmit0eZrsB>w}U0JPrdx7$)Sf8@5Bnby||Z|87t{Z^a!8*pS9Bez0sq>O{bXzAAa7$ zkf5pa+reDeHpzn3k-Puq(`7r{LJCyo+NqfAyz9rs{)@*tbC%<#)4DCp$!mAA4ZWL3t^UT9-S3P%?o@+hx<$Hv+^vUX3kM=Jz+ioi(VcgLq$A2|<)#`g&?#pam zJ}Xg(jX~`8C;pO6)^p4JBPO>L>{)r%vsOxQ;)9akb6ryM$`)G2ittGI?T=S8Zao|% zJyB5nPF=Xo3(jwxdHe0rr-B>iMsHZbJCkn z)|aIxOwu_m(&zqor?`=a^6JAoCBTVY=Smkx$)vfyO=%~LCQ3eZvzRdJ&9-CvEAx}2 z9u^$j=e29z>G#*0i>AwSji1kvv5*!#tDtl+&-~b-D9zZV z(NcnECtN;UY;>qGVH3BqoH$GMv(8z|I5#~xv3r8T$&f=!y>r+YHUwxVx6Jb{uzEYM zA-$)AB~q+ojpb{HA}yDUqU~qPiqcNMIs1mivoF2up_qoxu^E+$N;jXDbGhskFS4GS z`%?MSyk(Ky=W^Q2T^SQL-bAGGonHD{>-j@k50*64e$0e@=Eo;BdK{Lbvv?6=MQ+&KnZ3?CYUPdc2xQ{LghUB$#$ zv|BYh{>28x+0pjxj}Oh^T+4cSZ^prdIUJ3A4Dv2hdA@v*FkRYy`PsTtg3e0X7nR$B z1-5*c5u4W~e)GlgJn>0$cXVhJpV8a>N6+$e^4YVubFW-?-&C99V_YwOp-C=#Gbl7} z1}{(lduu`=14F{il_?93vs!9PvF^Tm;gO2K#JexIR3Dn9((>3h*YDMA?F*@qd~CM! zdVCwUBqW@9_i1-3s8|m8Y|TA49b6Q+S`mHe*}Id3*IYzsV6Yah}%M zb7|M)*t-2s2_)b{mRa>*(m|NIS8~$E8hh`ICur)n|0xF>Ow!pV;gMNKXlMY~y* zrtj8FkewV`H?!l`BzBg_bJ7R6&s{m3cKzk$vwCk=8m;AKV9>GO_E)xl?}gtft*cMO zv@$U;eEweW{PF3>zJUi{ZmDLPXSjxog&|_YQ^6N2r)n`UYzX+FBTnWFjf<=OY1O^K z>ULAO85YD$<@u7}F!^rXc843Qgc%mpO#QpXb@$y<1vj6b`WI62xlH=&SIM$VCe10+ zqdC}*@l1-Xn{F$kQ4w=a`b)6I1#pU*99x%eBVaJ+*)<7J8{$JWBSXQGNyRTVtzos5 z^ADK4dZM8Ctv_|s*RcLRu}6?kdb7OvoV@)fQ~mRt&C^cQ?Z2-&`9aC4S<3_kGiRw; zPkhF3V6s==g|+7${NL_0e*4Lu;}c@$S*N#CjMSyd*a-(3ImDr5?h%WJ}g`mtoL!j@#K3Vv+m?M zF4(rr;lN`>CC6#vMlt^HeXXkbn^d@^JZIRkGu%U}BRLZ*xfwpZczEu(eL=lu*Hc}F z1FKU%EPHWjQf%FsdCUyc?Fy7j7#QLdX*IP*i|M*iGpRfMi90-9Oa)_i6fC@y%D~{T zb5-YyZMXAQmq;=&1n7ZkBI3s1R;(*wWGG0U`}gc@<@J9*_6NTY-!gw?6YgS3G+P3XmpY^+nCllSfwz(`|{_tl1zgNBW68raL z-ClnEPEqmF>`0mX_{#S?>+5tUCdB`JV#_LB^Pk;*N9EaBkm=dP&g|Weda=8%+`s?- zul%0}`TTNocB?YUHl#oQ_gy}`_S-()*Ws(BEhHDNo*p)T|9j!*aX)|NH2(X4ukQE7 zckfDHU)%frUbT13ZQf1r*;|p^P6ze}Ge4gDGHa`O_3L}Hs@a@|sJkI@2E6&yq-%v5j9e>HklG z7Yu(MYu@v!(UP%!TB^%=6&R0D8@i%^X{g3$jH>;Z0HXa!SQ+|Br zY~(v&IZbBq^!AL`&a>P3zVvj)AKK5r!15im7GOF1pU)QMa=qR!*Dn$L#ndBzKdiiA z-tLsjzP59EVJDyNWl;SWt$cy8V!KD@xeV{}@6+bZOF1(0Z=d}AeGBs*x9#ec-uAV} z_}DqST?_Me&;0fH`1br8*NpA%eeQiMEPUL4wpCo6qUw{|O;&R9a?2L4x4AuO&;3tt zHtY8Ee$Tm|aPyw=InW&6TU%T9HO}m9XSO+?WR~XRNu8H$_mXw`l$ujZ56W0EJYRP{ z=KtlX+N)2+Z2NI3mJ9%qZ6bK^>B`n#3ob+7Nd-{Jw{k#Qzaop5)}!i9|*$AYH&&W%pvy(aoB@ckc?E9OV$NzQ$f zk#WXC;`QCl&zH`9u6Ev3=xEjV9mdc6CtXdEHGFSgHqZL{%^4Rx-%rw!I|_=oh|1U6 zL9ca!UYnS0E#Gi?dA$0x73gOq}njg~{-Ci*4NuJ^{#rEl;8CUrQ13#DhzpMHAK2qu8pS$x*YJPgpmQ9=8 z*0i6_NHZO@*uC8Zs|=AC#}E!XNxN%gBO&n91- zeE8+=D;MnklpNDEpOjmFJbCZ&zIzW=GdQH$RD7zx;5?sy%`fNPT+6=;eI?f!&i;MA z{NjcB|1T%**Sp~mdNuiYU+j*8#LU;bHon{Y{hs=~3a8MkmbXgmE;b8VG5i5XF8|-@TpO3YJ)GstLS_a|`MAIO?|tX*ihQxA zYW1b9I(_$!y!~=-%ZGr=l?zXqjmqE8{4n{S?zUwlgGXJ%kKBQ|M_F?X4|;%@bYJ8BwYigq)yc` zm(8qrKDYeb9LwPF@bE3*!WL9C8~617`LkVoeZi)K&yGcBmDfKycXOMz(xPT|{<`G{=HQj!;2`xO7$C6_{VRt9bA_x^EMiKHgxjjDKy p-`(+l7J;j;NV~t`^JZ0vSV+;%o44$rjF6*2UngG)S3&sEd diff --git a/doc/images/qmldesigner-new-project-location.png b/doc/images/qmldesigner-new-project-location.png index 4ad188d32ed3cad1f6f9ae3b99224b67164affde..b58aedeb881702af2a10667d4a1094c997880d76 100644 GIT binary patch literal 12866 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 V&$IFqK$|ZZJYD@<);T3K0RXGQ4^#jE literal 10991 zcmeAS@N?(olHy`uVBq!ia0y~yVEn+qz*xz_#K6GtzVQ7*1_lPs0*}aI1_r((Aj~*b zn@^g7fq}im)7O>#Hj^l?j>6)#SzEwDt`Q}Ur6n2pMGPy~o$+8`VBjfnjVN(RElw`V zEGWs$&tnkgR8(eQVBi9YJLeZv7Gk_paFD=AMbN@a*G_zzOf4H9(8EKbfz%*;(KV%UCQOFshx0|!VrJh3P*GcTRt zfb_F=nA3vuON)|I8NU8+ehpLRoS&PUnpeW`?aZ|O3=9lxAgv*pB{``KE8bmFXJAlZ z@N{tushIQjZf%Lo*V^|V-=B&)xv6qPP7Z65dYWqRyK`ONTvSY2)iQOGm^po;&i^`O z`%H7~!eeZ~OgAP}mwlV!KKqE;B9=Md?!{D9TjI12#`}MsEl+!T{?C`&SNq=YxBdO-{@=&; z+zbh7zaOcJU;TgA{@>@xvEQ%m5@K)&U3asDU@f&w!x9RV>J-27w8((X+)vG-XJKMvqoGjZT zyx^eX9IIE^u?)vjEu^-sbrcljEV0#q^TDmjVRf50N-Wl|4+Wvw)86pK-bnA? z-_I$Z&l|r_^3SBXpEybqe9lf}x8{-D@;fV*BS0)z&v^FUOm~xnGVl1JIt5GP3G-&& zl-*UZeS1LJjfMLfHkVm!$qZ0=@b}O>)I~-+MsLBUL||W$$us#daaGD z-+rh^X!mQ*o!JVXcRc2N+!?RAbc&RLwbAN1>Pboa-YwZyG_S+++N~?w)*qd8zAklU z<=tgrynFIWY$m>X6+Z1}%g?A~63;s$&dFIPU2|AeRiT**6seg7YjOg zZrxnXBzyPdzthq^?c{tvR>T?k$TG? z*zC}ko6TGGC6`GA>lu6h3Qn!vSI{o}TI2e*&4;;eJmfA{vELSPpr&B$=EHokI}TUR zGWES9(>YUU+hpStbLXDB^)Nu|N6*%|Ve@6bZTl3)JME1@(6*jStRZR_F77Qe*pk`q z@4_T|uDS8Tjmd0J`En0w*$8|-xOJni^`Xk=%Qt-vGx%&g>EbCF)&0#X# zraJihq{ObD*VgR+eRAFJtXQ@M%lDjL$Q=B97Vme1r%XO`AO1)$0fm*GdJiW>zeyf293= z+xEG0w|{8bwz>NI_4fZSwEsW8T7P5j`?=QZe>PjqUmwE1Fks8=&XBL|(s?FZqIS*g zm{=F!o6le{+1KX6?c3-6y^{a`{NUlA#?RRAOIJRg`>WgTYwP3pZ@KgT&3=D3*=+v3 zkl2Z$21 zi^gJG7H#Vge7TM1aM6^aYr0w&J3F#>rfuT3mU{a7KEsPuw;a~bfBO0Sr=K-J(|_fM z%{@Qc+~Wi@p{q+z=(5Dy+ioX&7kRGo&H5s{O;t`` z=xpoU4v(x(7T&ZQj2UZIIehQD@^i^LzgIQ;tmap2e5WfivC?;+YH$1gt;%9MzkNRx z&l4KGQku6l=d$!-Yq5(w43(?6zFcel`d0os`}uYM{pDBNuRpp!C$Kgl@$VeB___Ym z&IHTvz5ai1dVJ-VYfslcpY!peyL|7(>4H4F!mi9#ez`IBvPo~~GL`8|Zp~QT6Vm*} z>3Z+*`Pl-(QD6i_AVJOP^YtOf~Of~lxZYoK? z4%yA$m^b%?lA!T^VRNg8%q$HvQy;~j`}*(qdwHvp7e78ezRA6R9TXzQ<+mXbPW^?J>#SBwlk0?HXE4U1i3cQQVmR?|#Q zn|a6h*iZYXf-j6G>4(4A==@Vx?OT3zo7y3fDRaNZp55njU$rb`&&Mm`k#GAh=`LTs zjZ>tpaMqdV3yHThma6<#^UX8)@_nbSTG?^_cfv|aGxeK_c?1Qm-*C4c(JZxI<0b8X zd*|E(ean`c)$Lj)r(9C|CFTBcWz%CPdE_>?+uU^C{3O@@PKHK~`tL}j+&aiQJE z&)yFFdF*Dg&-=nO&uh8Sbu-?n%?WqgSS-hvet+-M0?&Kh)=R&)YsUF+oX_=sWw`gn z`Hg>qy62^bv^ZRMz4*Ig$Hl8BrR!Ei7`)Hcyt||0b~3x~#$3V9-AOFLt0!+4>YRCR z`$_RTQ7U_P&zM;nJh5rLsa{NKyK~-=*QX5MUcG1ke$T1XTRLY3eX~=aSn+S$(sK?I z>n^1m$@$l=Pk;CF)V+y@VUH)R4?dS09hRbhTJoB>_4C5T)}@Q~?A|V-r@3|U${qGT z6RW!ZgsAK`N?uye_Q^}PY+j%wQ>?h_`^Ska%}MRGiP1-Tj&9oLbHn6p#hs};q)n9F z?rb~Sd%XGJoO;_l6OlgkR}V#&g1-I(Ls6clWXf|D18#B&mVcbNPTY9el%Qp?AEb*f2$<*HE>zA~ zWAu2NYCwv56)Nvu(w4ZCt?Q&gv%&hB4xUjXl zC@uX_q4M9?-uK=eyS(Gb!DE*WKRm@>yvJ|V@53RVj2k#trY_)rduv~<|L8zoQGyqIw(CbeVZ zDUsXL-UxhpWb@g7?TfXplU5sbPTPOYqdzX~j+m_T;p1!c|?d{)fE-q14=6NxCySLdZzwQ3@>)V$2zXz^%Zwil7 zJ#V8No_prrlE1Im*X7B3Pc15M zTdAINxL9YTEvvqFW;xfHCRx{>O})nD=_lXbKe03S^!7{9N8h~ZKQ5xH|GdpW@NlnK zWKfoSaAEz7qH6sYtA1#`5AA$1RmyntxzDSLR2A;e`dYqP>gKk!@9)lG&9~e7a;5py zp!eTI*PL2Y^LeGO|K6EZlk)!L-QVWB()InfTyNW&&nuVT^ZEAeS@24>lV5Mn-t+Uy zvJ~}5X}`09^A}y3EN|RBxu!htlXQ6e$tmyhn7;OCrg`yl+p(^Rtp9$dGI-10y|w4( z*&3C+2&n$O$hke`{Ni774HN5(C%8LsN zLz<@rRG*$_TfNCV^2(*4Eawo#*M~ENW_M0r>ZT&J#mUv~Rz&IJ;BMJ(KWkoozhRh~ zW%+bdMn=DR=OmMo7XjX<7fm{Q`}XZ}*;|j_L|)k!$oKZtY$3^8TeVj|y~=N+u<7~B zv$N+<`?lIV%&u_K?uX1NRa?(QT$5d!wyaS0kceFV!}zCHzP&Fww!NIUP9Uux7oWl|Kg_*x9aA1F>l{?|C;wM`pP{$-EJ}7uWxS!FS@@l*8jbfQ0D$$ zjlFYq+xcV#1y9~fIdRkY%Dp(1HJ{CFLhU7)6WUfi<=C70^H}eu+TYLY-e;zH+}Tu9 z`TN;&^Zax5$(#1>ja{-gcGCL=dH45N-VA(xZ1tw!u~Xh{U0VG37^~l>*z;%9-iF&> z&~uJV{h-pjB}!Dvaj9$n{vI@bX`)$^|JTP8m8-*8PZl|o82ics<8||{po49 zS^oVy%TF(7Wn94K*XQ8BSC*4u#)g@nH@Y%7M3T^{CD8LV<^8fS_O`kG-sOLi85~k2 z7BV-eWmWlKoc2^&UgEVO!vdoo5_{1EETo>(M@=GSaDz6{5*YuQsX(jh>2mw}U-S9? z{kgk%s~(F*XU(VN^tiv(xzlT3O%{IF=-|$~V%M?K@S0bfpPOCZCGbGy)8l$cxtjNX zv#JtKv2Jyo#ay}SzdLmFW`V{0^Wm?B8a^t5Q{JvNC%br!S8DTjTnu=2vgfJn(GVH$ z#Q9Zo4ChSZD3O&+yAWqK!)#Uja~c=zjZ!s@yjx`B#VPSJxOM1UMDRsD7gK&m~)W-qr$@+*ESg? zL+ zyC`$k#~s>ALgmd9Jq-T3oC$SHtTvb8a$WrJjH=G^^Ak!h#qDhP#8HwvQ&3y(?A)^+ z>9fQu+IF52;FNOv)!4D)@jB<~aY<#$_)Y8dth4czwE~ zWOmsWcb7eeD|4-;vQA4}%J%u@MDxDNTYryDBfg z-#Wut{=Mr_4z}FeeY+hme|cp4?pSOhlk9Rarr7+nGu+O~LY!*pW?{PzZc;8Weireu z;GFb|%WGe_F1-=8{dk%0Ws#4|E-t>fL;Rszz?-WVca(E#-`lsrfA?|Utuy~PGc99| zKetrzcxTGI8HP_?t9(}eNmEiva_O=Om^f!ytM{^LlErHRG`>!s)%LVxdem$yn~%>T z&*UlpJ;JA!{+IjK?u$y*JvaAFI4@-AGug7_Ou# zz1BMR;PcOrf35;EqWu3pnfw3K%%j4$zd`!*puxn(M-uark11XVl(zpj{bAH}hB+~- z{<|NXy=X-vw_V|~;va{@`TwlC*2MlR}>AQ6u(*@pOJwgMJ z)XJla_FZFr5c1{P`TKSjAFi#huibL3)j|04v$;2~?J9YxKK;tB2~x@z0+~0bo!$3f zyMDx$2WO(hnS5oeioV>~UmuY5c5%PmuXEP#Yrb4`zZ`jKhl!b)UfiCFzrVhQesf;1 z*vzBYXOS!SIUUg#(cALo-n~(AJ9qos(rb~IV?v+u$=ltzdv|Z@>uc8UcPyS&$5Fyy zW&P(~b@`pb<9jMU+x=MZL}1^uXXoeFUkweizOJ zPmgo3#hTBnd*$Z*a@$Ocv!|}@`PLAmB|6*d-2T_@?tLy(DIJ@;bDij?dE#6AKP8!5t_)My zeR0D2MGs%!m@a?WB-i?G_6f7OA-5NV=5)-tD)(VYa9yn_kCzs0e***Nc1LX}kBw!iu7wU-eb?xL@Bt;jY1Dh2KAS_?}7>dLgyxZo-Cw z8*if4t(?*|GYQm>>UKH4CEPt$PGS9VO9iiI!fL6Dtyb3(eIQHGcbIN1Eat zrRnk~cgrmizSS3%RJy!g-5|M7wXA=3`OlNPnV!USy(u{7s`EYT>Dt1@3j-`hqcJUltS z4{c0e|M#zMVjcyT89?&$lf*H|c=g^Yr6=Z{Jng75qGLF1=sY`kQh3mplFM z_kC|mIo!Ce;q&I?^Krj_pF7J82J6>V{A;T&mzUl?apJ^R{ZkySPfTR#*4d&Im$mC- zMOB}2%FcUVT&x-oZ9DSVQZi&q?aFh_ZbrGi9gDSQ^c7Zj#n%b(*rH$b(kQu4HSCI*`L0`Lvg%19ac5la?6|l#g! zk|pAAj`ptG*0eEY`k8-oM2wWbq;CK6?K>F6UEBR|;$KeH(|M8mjV5}i2>t&3JGehO zJZ9UP?cbjsIW=|q*YEHBWh^diE2@pIe}B63@87?Z!qUH|JCB@lmy6uF ze}8w;m(S%m~Zk`zt$njtdknUU)Tm>-?Cb z`u2kEu14p>W^USbJT|m&`pR$jmTGLh(bFyAw&XTfYmMUJBANFS?qq1B>|B`?Bj_1t z#&g(U691&^;OWAbO;n}qGdfcADrWALNDElAL0=}=&{%BsmJA=srB`0OSkd93v~Y^b z9`#0t?EkCTg>q-A-pm%}RMj%Hx^-<;75|=^1^Y{DA9!p3lCS;Quw`9@xs}%KZ*Om_ zto)Au-Fy1UzhmJkU)@h}#5xOluL(%=QpncPRJymq%u?uV z)Qldj?Z?mYoZow};^MdDRRw%^IoM)%r@u*C?X$6Z$%2j2{o?!O))*aqXQ`1CvGU<| z^Se{-r2EZ%8CiLJ)&p1Vdi^vX&80rokLDX5QqeYQ|947z{kE-ao2IiwMf2O;`s$@L z(L<)<>D6ZKuo}&Y95tD(RbMVPYwr{BVA;3DY44}5EM65M_FZ{zttNQXyuAH!dS0IO zjrk{XW)v=Xefs(RUtT|tpIMmf<94KQO~tQf=n8B zaKn)hof+>|yg0hX=Jqz;;?U@-@SW9#iyyAgPC7OvS+Y_%Vg=*UD;?=33;F&%oq90A zK!WGqGP$~U$CfVUTq?Bq%F(# z-bUg@jFr)*FELZ!JUbPxf4A!Kr88{@6AXS#UHA9iK9}BQ-=n`2PVCiX%VE-sGLct$+8|v85-~ zXSPqzt9{(NHuA2>`=7lb>PzLGi$(sO_zODRzUn>4iaWR8@7bR6@lau2N_*|LnOp_= z>-O)ybEYou_p9E$?pH1y++KHc+m|+)I4ZeF`) zR`y!Tvg*r=b91f5^<>^_sLLytTshF<_QJt(soM*sPZyl|Wi5-A{93Dw?w1<#>u^$&x#F*RSF^CE4QO&U+@`uJ*^@$M0o+m9FJ(v^y7f zBj&YGRzFB)u66ahJ2$}%hxyI~8U{6dvCg-*<*#3IGgsQ&uT+&`nQ-H}qB zPPdwCGxfogBQm?rP1A{+^G|=nm&wn!vevEEz3@Q4OtgIQ!Z*?^Pi@ySTFdlRo0mx+ zH=pJ2b#rRD(av;nd-dwopMSsh^8QWqcrd<_KhI=JvG&D3&yPke z3!9oVJ5F%ZokzPj9#%XpYW?Q(Pp6CGpR3Nv9eBo*cK1cr>C&|U-}vrkXo&DFx8k^c z(s$9rD{p5T@8-L$bkELPe$CvS!K-6)%3b~3f0eDgd0TAWx;6Lm_E}DecUW~L<>{Ro zsiT4~Zmn8B-*opy`}DHInZ;@I?Y3vWo3rd@Z*SfH`fqQRdF?J(yn1cIncY)sFZ6cH z^6eCS|F5SnbN#taL*+@kKGy1FxV~-5z5J#?W9y-fJx?a>$vZnES+eb^#?m<_N$=e5@TYFhiJeQc487mzeV3Sg z_gQ{)!LCi+@!MCpsJ}clwQFYCluXGd$``g?eZX23e0a{XW5%lMCb z1B=rZ%zWhLta!U*)A75kx2FZJy8X!3f4Wg<=*l*B*0q8!Ze@MAZvNx->({UM%B%+^ zo0`(n(tp2_8uM71*WH~wukzi-y9pNxKt<%q%#MnfCdchx=D24my!m$H-kVW zTp+q>zm*f$-em4P*Bo>31O?9YM*7pK-Pey}EXx9zs8DX{(B$K8Dnef>eR(gNxE$elmN$Fr;u&vEeYc4i zhk-omzAN}_ux*N|S#9Ec{pI}Ey=13J1`8hUeI{30bv?~zrfQh#>Qiqle!l#Xv|IaP z?!9e4*{8<-*;T64-BmIv*fO9c|Lm{b^WW@Re=Rk^DEIchy_5Ef*sA{fQqNTXGP%7r z@bJU_W`oNyn;*)#y{LMm|6Bb?wfOZ7b0jkRW_CDSzo2ROW!;4z|2&TOXquL8WeDyy zcO`8}1c8EQz=vQ0^_BAXehpiDnt>r?b)3tr*|W1_*%%f?`Rrt9Ah-|&GjQ#r@0HuF|}E<3`1| zo9Xf8cT1DEsa#;3Yy17zZT}ZJ+G7HhZRwz5Ta?<@KL7yEy&5*y`P7_T$~- z{_~kxyWVcQ4Vp{JT$kG=V^_0d_wL`j`|bawo8JxDr`pK(;>}a@dPVX2ZOMt3XBpQA zzm8Hne*a9~t=fz4_xxEbKb`AKysYJ?uh#EonCIVPm#;B6yVZB%&(F`}ORt7TZ_kt6 z3^F6<#f!rKnZ?)Ue4KqhYelK%i7N>oV#%G@lvTd7KKUw{`|bPWM_wreO=AJ zKR?y|=171w`gdvsZe5pDr17!$uAAmk6U#XN)^_Iw%*z>;`p)YP5zC#$TGh%?;!yAP zQnY{W>4p{h!wVd*!wCTi(tmYnFI# zdlQ=Veww%5%}r0+o-C4%`*LgFjHrTZy!vVR#V4oj)hhK|{b+&qVHv9hJB1f7cE4|5 z_rv_^Sz!=KGyb`~KJ7O`7Qbz9Mn1&7JSPW)lzp4}2@XM$Y!3wc)LRf6ghr($Z~oL)z5j;l;>Dl-xnz0GvM$e4JkiJz4=0$U0CZv+3#z; z^Z(ycx4XXUWUCFxJKw?^c(Yf(E=>#skZUcdZ)^`14k z^-d`_bzg_832{!mwk>s$(C_N%r_^?22OB_&SPqI>3L|2}-Xw#HV~spyc2a3ulQZQ z9Tw_X#V=|m{r}^(t=qoZ|2oz9HTU!;v2W$Eg-2Iw$J>4QWHj;LI&HJGv-6j%IvM%M zHh$Z~r_;@KPQO~Bz5C#lL~x=uT_to+q4v>#O;xR*Kko3>>)n=@3(&f_O{d_&!{hZ6 zuK!qSoj0wWZ5~I?{*SwV2j7;vQNQ67Q_%n3RYzt_ev#EQzbLZsbJf+-qq=)nKHt0j z&ZX5;vZ6OGGM(t5!nfy>SAA8O_1~AmOG93FiLP3$y*DyDJG=hc<&w>uSEsyNFzNa% zL8}GUs#*)()RRxCPW0&M>WC@)U%u~8)O0VEbvyQdKOY`ncW(KfldY-s_wH8T`#$Zi z%Kggc-JCxkmH+#8S^K))+xk75zizYNne#DrZT;^fy8l;KAFjMA=X)sp<2UNcMJ$YJj<@?CD3}?&agpzo>xGAIJ34iGC<#V?l~?6o(< z?tcq-#y)d)y7Tetg=t|NjSm{k_@W*4tTTuR5GE>rc&= zcMBhXo*h^7mVJBez6|Emo8ImHesBA|s_d%Qv!cAG>-~LZzCSZEY^Is?zMZXtRtxsK zC>chT8~uHnBB~|x%kZ6rSZOr_;^8{x&vn%MPpOdTj z|ATw^+278lF`%Ned+}$X_wxCc#bqnm>h{-HRQz}>|NqDB{Qb6bTYcxMdQaow=l}ip zpJBAni-vRSc08DKy#Cdj_Z+r&wrsez)u-=B`*G>|S22YLEtg8^L~KZSes1ov%xzn@ z`lcraKYwv?v32>om<Ca@ldY>NgYJwXDuU6&LUI;l455q~!W xk&71hty7Qxanipo=(Q08L+H*I#`AyvUsb*_jOj*hHUk3#gQu&X%Q~loCII3{C1U^p diff --git a/doc/images/qmldesigner-new-project-qml-sources.png b/doc/images/qmldesigner-new-project-qml-sources.png index a4bb8939106c67fb214692d85ca9c1121e8079f9..635e4d864829e25811d1d5d0d406cdcc33713727 100644 GIT binary patch literal 16751 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 z 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 literal 12902 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 L{an^LB{Ts5bB)@0 literal 29977 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 ULQRJl7#J8lUHx3vIVCg!0H?&gxc~qF literal 15992 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 diff --git a/doc/images/qmldesigner-new-project-symbian-options.png b/doc/images/qmldesigner-new-project-symbian-options.png index 65cb83dcfbf7ceac54251700e7e7203e1f17b870..4037aaeebc7139038c47c53f0e2360664f882209 100644 GIT binary patch literal 11990 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 literal 12321 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�&Nkjpd-q=0p7*aNEGb>?!0L|r29aK_ zz_?j8ae9he7tftrksEg9W&zj6!;Dte)(g$|&z~wDG;vW)huiM&d}Y&%Z-D|*>%+X* zi(IyAGWM-sZ zO^X7j^($~Rg?O+qXuOY{x;EnO-3z-o;7j`FyJfev z)qTHLeGfmfm6o52H?ObTQvE(|WlQeC_KE4G&d;|Ue3!A$e8Zv%pAN^`vN#GXamqRR zNLFK$$-Y0G@%G#54+w8Qy7}Q`^SWQ!+jFGSAFDOgykAwif%hnzqrj59A3v6x*T1`V zrJGrKUDDBWbAN7oI{hKL3n=uej+Cv9iC-nS%g!#O|+!A*e4 zp`nO>)vD>M_3!V@{lcbr;>O3${&ka`J}h#bzR$&n9_9MAZYknQ`51GvC zcx+yD-v3QTe~j<`w>URVf#cDqoA>mm&YmK$V2a24*ihc377GPtPLZ)Ld-LMrVrOS( z;arZUIe*X0u`Ir~r}FICvrp3tWi*yWm@S^9eR`AIWLZbG7G?LoIaZ~w<`kcsX;*v9 z<#v-oy8Yq9>3uSmK^h`rIuQYBVq6X!3#Z)bN@ZVE-s)r7$HzCX{-1QCz-cYNExH^< z-!9*<$h~;TRe%4Vpr1vl>th59MNjJ;?_Mo4MLWePNJC7SccM}sufhonM`A}@*g;H)s2ab*T!9kP1ulvyEuBIu%uxf8r|9mUs?VR#eiXN;X zb(;kl{5QUdos-q*puw@rgWHb?MU% z>$>Mxi`U(InG;|1S--yWvuf&-_xs;o@-E-E|I87NAZv}a6*&*K9u%G_|Nqu3vv!7q zg{&+qJG|aYJUX*N!J&a^tEl!OufTn*atzb&?0Ns=_7EW ztDL7Wbl#ZdlJ)P+sX8$S&DM=ih#J+G`#yJBhF#s)}qs9`ae9DPj>U5ZnCWAM=Mj z+DZL_Vb9_|)<(X1yZg5F`pme>v!>d!XRp8Msd@J6nw+v7Y0KvpJvTk8U7gc@vO9I6 z(}i={v)13`{A=r%*mZ^DkZ|40sIZqpZSGw5H)j9e{+9n-_UgPK#t^r$6~!>@j<0k2s8w&%V+Z@$&C z@nYXMGcV1z=btZJytp~YEA#d;Y3omaE3FwfM5tGv{amuL@AnQK%#}@DlD_f4QkJ^K`^%rM+Sj+Y84PY) z-C6PP-qh=d%r=U7E!@ApzpTVf)5Y5A<+*)z+i(24C$}rNpr9b%{L7lxZ}~ZOavh$V zrLW(-e);zMfN8Oulu6)_WhRP=haoe51lvu=eurymmfqf4*|Y^7G=08j43Yt%=;6CTmyot+xz+my)o z(|}$Q{^|_ zznR}^o8IOXthsMxKYW`vclNfjTcvj^-uIr?$qQ;#1Rl)VmSDlKZpK5(~ zOfp(}Zq26l*Ew5tvzudg|I%1G<=g#zmErEy*3%c{MoPcARb%~Jck9~B{w~FRTDQ#X z{(M;W;&SDejRLHxF}n^G96h zIOqA>?ax1NkKdQzc)E#IH-En^|L$MER)o0f{ofMOYGiPu;orUO>z99*v#a^>LD}5x zuPbZHlx|*&z#ry2|F4>vknGP@^3_X*XUWuF_9A~Sjjh&em}(x(+Wjr(O#J;@w{G34 zI=arZ`dyT=N<{JXdA%i{Mc0~L{~CF1leFBfYDw;$>&|alW14;I^X&B*xqH{0f3^D@ z-~Ob}o22t1%=q}7CV0C4SgLLM+5g|WtNMBOKOfn=Ue3Dg&D8L?m+#-#f4v&M+<(5E zjm@7s#pln?x8J{V<;x?T!mUn?K~_dV9DDU|=iRum@%66PzvkTC_x1e_S+m@j!+DXB z>W44sXLmpQ{rSqGE3a;E?S5Lyl^AQa(X(UQ{l6b<3+`GUDOjCW1PTx|Y($?$~K?B96A_Pp8kJEaA^=N}3)Prv)&!a?aHYeW|0-Zb)BDU$8J ze&_242Y2saD4%~w%8<=bt9^IDBXQln_$@c?*_jk<3ed6pxtsa?{tt(GB#r&%T5T

    j6I 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 literal 30094 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 diff --git a/doc/images/qtcreator-new-qt-quick-project-wizard.png b/doc/images/qtcreator-new-qt-quick-project-wizard.png index db3b6aa394db73b05750e6e563b2e888cd56b140..e9bcec963540814a2fb4199c86747c07d29dcf9d 100644 GIT binary patch literal 109600 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

    KCu^>8_IM+1t4$ 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%0Dv&-|oZ$%7Z4Ck8KPxW{1 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 z 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 Date: Fri, 1 Jul 2011 12:29:23 +0200 Subject: [PATCH 034/143] WelcomeScreen: fix up layout in develop tab Change-Id: I0e8ac693e9324f680c401254a1a5e55441f672ed Reviewed-on: http://codereview.qt.nokia.com/998 Reviewed-by: Qt Sanity Bot Reviewed-by: Daniel Molkentin --- share/qtcreator/welcomescreen/develop.qml | 11 +++++------ .../welcomescreen/widgets/HeaderItemView.qml | 1 - 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/share/qtcreator/welcomescreen/develop.qml b/share/qtcreator/welcomescreen/develop.qml index 5f6fac3d2b2..93855e618c5 100644 --- a/share/qtcreator/welcomescreen/develop.qml +++ b/share/qtcreator/welcomescreen/develop.qml @@ -4,22 +4,21 @@ import components 1.0 as Components Item { id: root - Components.ScrollArea { id: scrollArea anchors.fill: parent + frame: false Item { height: Math.max(recentSessions.height, recentProjects.height) - width: root.width-40 + width: root.width-20 Widgets.RecentSessions { id: recentSessions - x: 10 - width: parent.width / 2 - 10 + width: parent.width / 2 } Widgets.RecentProjects { id: recentProjects - x: parent.width / 2 + 10 - width: parent.width / 2 - 10 + x: parent.width / 2 + width: parent.width / 2 } } } diff --git a/share/qtcreator/welcomescreen/widgets/HeaderItemView.qml b/share/qtcreator/welcomescreen/widgets/HeaderItemView.qml index 23c0466daaf..3096e014919 100644 --- a/share/qtcreator/welcomescreen/widgets/HeaderItemView.qml +++ b/share/qtcreator/welcomescreen/widgets/HeaderItemView.qml @@ -16,7 +16,6 @@ Item { anchors.top: parent.top anchors.left: parent.left anchors.right: parent.right - anchors.topMargin: 6 } Column { From 23bde7df850588836c341040da69256eebbb5a87 Mon Sep 17 00:00:00 2001 From: Daniel Molkentin Date: Fri, 1 Jul 2011 12:36:34 +0200 Subject: [PATCH 035/143] WelcomeScreen: Don't cap the amount of shown projects/sessions Change-Id: I8548edd63f3e9893f819e145c9244d6befc6ff88 Reviewed-on: http://codereview.qt.nokia.com/999 Reviewed-by: Qt Sanity Bot Reviewed-by: Eike Ziller --- src/plugins/projectexplorer/projectwelcomepage.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/projectexplorer/projectwelcomepage.cpp b/src/plugins/projectexplorer/projectwelcomepage.cpp index 63807deccfb..e24c7a22ca3 100644 --- a/src/plugins/projectexplorer/projectwelcomepage.cpp +++ b/src/plugins/projectexplorer/projectwelcomepage.cpp @@ -58,7 +58,7 @@ SessionModel::SessionModel(SessionManager *manager, QObject *parent) int SessionModel::rowCount(const QModelIndex &) const { - return qMin(m_manager->sessions().count(), 12); + return m_manager->sessions().count(); } QVariant SessionModel::data(const QModelIndex &index, int role) const @@ -95,7 +95,7 @@ ProjectModel::ProjectModel(ProjectExplorerPlugin *plugin, QObject *parent) int ProjectModel::rowCount(const QModelIndex &) const { - return qMin(m_plugin->recentProjects().count(), 6); + return m_plugin->recentProjects().count(); } QVariant ProjectModel::data(const QModelIndex &index, int role) const From 552fb865e9abc29f8f3d4c9b293255c265e91b83 Mon Sep 17 00:00:00 2001 From: Daniel Molkentin Date: Fri, 1 Jul 2011 15:05:44 +0200 Subject: [PATCH 036/143] WelcomeScreen: Don't hit an assert on some machines. Import by module name instead of path everywhere. Change-Id: Ibf4d4d403338bb23b44516c05114001de1d031a1 Reviewed-on: http://codereview.qt.nokia.com/1011 Reviewed-by: Qt Sanity Bot Reviewed-by: Friedemann Kleint --- share/qtcreator/welcomescreen/widgets/NewsListing.qml | 2 +- share/qtcreator/welcomescreen/widgets/TabWidget.qml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/share/qtcreator/welcomescreen/widgets/NewsListing.qml b/share/qtcreator/welcomescreen/widgets/NewsListing.qml index 392df8b6a26..cc353afd44c 100644 --- a/share/qtcreator/welcomescreen/widgets/NewsListing.qml +++ b/share/qtcreator/welcomescreen/widgets/NewsListing.qml @@ -1,5 +1,5 @@ import QtQuick 1.1 -import "../components/" as Components +import components 1.0 as Components Item { id: root diff --git a/share/qtcreator/welcomescreen/widgets/TabWidget.qml b/share/qtcreator/welcomescreen/widgets/TabWidget.qml index cf90dfe980d..d8602e20c48 100644 --- a/share/qtcreator/welcomescreen/widgets/TabWidget.qml +++ b/share/qtcreator/welcomescreen/widgets/TabWidget.qml @@ -1,4 +1,4 @@ -import Qt 4.7 +import QtQuick 1.0 Item { id: tabWidget From f7be9433820287ef4510f47dcbbf2ac17a8db2c7 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Fri, 1 Jul 2011 12:44:14 +0200 Subject: [PATCH 037/143] Doc: replace Forum Nokia with Nokia Developer Change-Id: Idde6892543ade8d392473ced57e5b035d05828c3 Reviewed-on: http://codereview.qt.nokia.com/1001 Reviewed-by: Qt Sanity Bot Reviewed-by: Daniel Molkentin --- doc/symbiandev.qdoc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/doc/symbiandev.qdoc b/doc/symbiandev.qdoc index b200b5cad98..3070c4be189 100644 --- a/doc/symbiandev.qdoc +++ b/doc/symbiandev.qdoc @@ -65,7 +65,7 @@ The tool chain for building applications locally on the development PC for the \gui {Symbian Device} target is only supported on Windows. If you develop on Linux or Mac OS, you must use the Remote Compiler - interface to a compilation service at Forum Nokia. + interface to a compilation service at Nokia Developer. For more information about developing applications for the Symbian platform, select \gui {Help > Index} and look for \gui {Platform Notes}, @@ -104,7 +104,8 @@ Separate installation packages are provided for Symbian^3 and Symbian^1 devices. To check the Symbian platform version of your device, see - \l{http://www.forum.nokia.com/devices}{Device Details}. + \l{http://www.developer.nokia.com/Devices/Device_specifications/} + {Device Specifications}. \note You can also copy the .sis files from \c {\Symbian\sis} to the device using USB storage From f6e4ef380bac35ae957633ef2e86cfaf59228225 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Fri, 1 Jul 2011 12:43:40 +0200 Subject: [PATCH 038/143] Doc: changes to the Welcome page Update screen shots. Change-Id: If007177110d2273bc94b2e90a6335023e8b741e3 Reviewed-on: http://codereview.qt.nokia.com/1000 Reviewed-by: Daniel Molkentin --- doc/images/qtcreator-breakdown.png | Bin 114736 -> 148473 bytes .../qtcreator-gs-build-example-open.png | Bin 79369 -> 67306 bytes doc/images/qtcreator-welcome-session.png | Bin 45125 -> 67830 bytes doc/qtcreator.qdoc | 8 ++------ 4 files changed, 2 insertions(+), 6 deletions(-) diff --git a/doc/images/qtcreator-breakdown.png b/doc/images/qtcreator-breakdown.png index f08024885a4113b00621456e7928bbd49c837429..0a118ae09c11ada3d3ae9bc58fcffeac0be91e54 100644 GIT binary patch literal 148473 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%0AG*W>>` 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 DIt~Mf diff --git a/doc/images/qtcreator-gs-build-example-open.png b/doc/images/qtcreator-gs-build-example-open.png index cdd61dc17c4d1d91c20769ab3a4ea7170b72163d..ef4844086cbc1687125f9facf5158be25bfe257c 100644 GIT binary patch literal 67306 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 diff --git a/doc/images/qtcreator-welcome-session.png b/doc/images/qtcreator-welcome-session.png index b4d87839f689d1898160b39339934610c5e6ccb9..a95a976e46ed48ee90e15e586cdc5d836ad7106b 100644 GIT binary patch literal 67830 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 literal 45125 zcmeAS@N?(olHy`uVBq!ia0y~yV2WU1U|ht(#K6F?<*9xq0|NtRfk$L90|Va?5N4dJ z%_q&kz`$PO>FdgVn}vm+O{V?CX??JeYeb1-X-P(Y5yQ%LXFM1f7i4 zFfed}WPqk#H<=?} z#`n+jV>_oyy9={0HO}DSX!`MFvcCtzg3PKnYUe+{lF&5d;a*Vpc$&qwbCVaIVKI^P z<<(zZ!o$g!QdJ)h(qgmc=K}ScCHJHcF+5s&W93KhJ({WknS1=r7}XRcE9*E|9xYRD z=+%8W`N->!SG_;n6Q1Se`zIu=XOFOeHRJK@Nm-&h8#q`VwIxluWp!z`%RiG2#*3x_ zx}SKT{_?3_%jN=hSID27cY8ALd%U0Acb506$$bkp{RXpR|7Sa~@i#i$;j7qIdXMMN z#N_3lcRaC^u>Y0JGk1@re8irRGv`-KlRkdzj>Rkm0gfXEY9dD%l(%Iu=Da@kN~+XC z_UhZOzx8F-UYo)xs+Kol-tosSUXu?U-KZ6~q-Xu4Pa-x!CzM%Yn$D}Ys+{AT61DHq z|AzZVl7g2Dr92eiIKtaK-FL-x-K+yvtjG2G_gbw|Tq3z^$HGVA*8f8;M{doT+A(pG zS=+{&j_Y5peWl01z@*;V;&MXJ^QR)0W5x^>w{zj_AD;xxb2=3K$&<0Mn4{;z^E9^r zs|9HLz4iDVPKjn_$44rilT{8repDl;IpK3?^yU5XdY$s&%QFjqFDq9NZgf!i zbL9NA;#<56qi-EKk|eixrSs?hok^SwJr_;0%B^;Nt+n7&`95oJvdtzVp2rVoB{5Im z*to?cz;9O3rLuyVk(+NOW<-b;`_HgAx4c^V7_aE;E(ZmHV1EW?DK}mrnV0p#hpX4_ z$(hiu@~J?{w%V(`*Sk-<_{vLRiMEH$VQ+VJ1RhH&I>o}ZG=!7Et$P2xb*dX4noVUq zz>wS^IiZP>!ET+?WJaS34wgsHl4iMg?9r>qs836fSbS7&AJ;5#za`r*tGoF!GBoh6 z7ChxyUVdQDiLI~G?ysD-n&Gg|w|`ydHXoO=PnS4W%Pr!2*+E#MF|nEN^_72XPW(_5 z=#ZYg(!6Ni*@fv3?`1x^IgQU>e#OmqkJo*Xobbpk`HJBoNB?32H?{^w1%ZS;f}`_A|CEC|9;T*=1%$P`|qXZq(>YVc(CiE z|NPjrlzRdkN4`9&kG45zXkcHXf4}#BMiEm^dyTC49EUT^oTcXYI#+Lsl{ufr(GB4|_{k%K>Ovm{-;#-$}d3E#C zH*T-M5T_I+h8-ExyUPSE3Uz0x6|7Pg;BZlp&^?i~Nn#Vj4FT601I0R#_mPX^=41^fbFIGtWOYX5e1*jz{$9m9JC3&ah@EII!X54)(4^JZ#Me6ACP3Wcb{*rn0fJ z3LcrT^N-nV-^CXr)?VAO!$PkA`Q8ur?!`?$`J}{(vnfDBBxq%cR&RND`1H8-&kHO* zethh2?WiDdct+a<;qu=CJO1X@Xwr>Eg%iM{JmE% zT=;M+d%dfhTc5TV!>!x5?SDR*JZqNJ=9_Pdb{5D?KmBxb+Sy&t=T%?H`g&!?VcY6& zGWK;gW@g`}hR4lpdL+;>dvajxE>1~?^ADF!)Z@3d&N0=mS3k_Fnfb(Iv3`%uEuAkH zr+l1K-Cp^}bmQGVH<_bzE_~^9*tYJSd`i#i+D>K zHf94S!HYL<_a#cSCGLEw`QQ4JpOfpQLz15jc(k)@FDCE1m3}dy;I8m1a}!^4bMybd zuJ6B=VUn1bIC0`c8@cm&+vE3EeONlhYX1FvE-Wk@d40knjkRI7uU>Txys~4G zEZ^~$mzS5nxpDFKZE0CqSy9oW&p&6*diVCNZN-NKN5_Nm|30*@Sh3>3y>lHie3q?S zw{F3L1)3V%jXN%W*u^WG#=(5Grz-rPfwP6>{1d_*E51BSuH6!PY7cL$WYnJZH~*$= zxzw)y*=eRB&%*Jq`-D(H87AJ-_3rK}&914jnSQ#|LZ-L3cYfWkmlqei z->><6Hhq4rnVFdwgGN`<>gGin*Tjr?oF^&YuS-pRdOLrAu8EX+?yW7Ur>8x5kRaE8 z+`uP4|NYT!ar=KilDm%{@>-BND^cRwwM!;v)5^b}+7x~>ndfjpO-tsKd2N!%KVF;{ z>mQi+a}Cqt)beyijzh*zH~1y9B;A^MPxbwJ=`Wv7Fa7M^$ho7W&M4+hMQeqz`g!$r zq5rmaeJ|Tl$m9HCuiE1?%0~>&8#=WyE|3%`Xnhx~cgu8w(D9fn2MjxlIe3ny5N3mtezL-(kTI zySuuSl$3t``gO1J`P_5o{CE!k`+fg^my1%^q0i^-&p-dXUVLBn^>ypkt+Rf==kr8& zxrrxJnnjyhTUypcZgx|f%*xKr>`-3*{a`cu`nbKnZY1|h^0XPJpZoIV%ZiXy`SrhV zGhDcRyZY0UlhdY&?Y`UhxT2=!&!3;47cX9X_t)!^U8`2D>gwwH_ph!kvBDDvFCCHa52Y-{<)^<$czMZT>XZ@A=8e>Z@0;?sZdcOI)~cVezvw zp8o#N3)sFf?5y~h6c;xyMz8)sBfFQES66qpu9$aO*|%R`U+-O$!jd#;MwPU28`I>a zXI{wN{9yK5Ei$(9P|rr|1?#`t?flHK_sC@nBf0eTKW!J+1Z{XdrSIF`#O=4gR_%3K z_~D+ww=Z8}c9opW+Nu|`<3euiofRRgrfP@p`+l$b>C>m$VQUN|c*ON$5^C4~`BPKA z>G{0scU33Po;|yC>C%G-4|-42*}2bulFG@Q#m_fY%{u#xTU;+BEbQ5nCwu*$FMdhsGy>iLd4^NO3UVP+MMfj%)RS7n` zx@Rmrxo4u-imZ=C%l_ODQk!s6`S*{N>}JnoQ{@yHcqGhu7!FHpKK;V)z`>J^+&nwV zm6k|m?bw+7JCt4hx$%Jn=jso0{nF#(R7==TZ^4o*&1W>^!sInCv>W%f0l zCIu}mtuIxzMMa}ui;P~k&$qJIi;9TU{CL=I z|LuMeQtF8l$)U_S>aPm*(&J=vG%(=j3$Ancr4LfaBfn_xrYO+h$w+ zO+{V(|M&g>Q@K+m+7_*-{ryeWs>DM<;Lnfa_Hi4NSPvWI@BjO4U+r&D4m)z>$dxN0 z+pE^DUHkj{`}$Wamxry1IQaZ?{?B~>BS${`K741tf#ZJB8OPXfpFi6$V)vcUE+r+kYSpT$swyWZCkvT#({!Ubni6t#`;YH_+-J?hcGz2gZ%9PMj=a0O zIyyQ8PaiT^vwZpUKR-XGZLYk#tMv7?waKbB9}X~|J$v@((WA@#=cn;1a(hnd7T1s4 zU8ZYo(ou8p_PmMG9h!2zv&D?fUa{=RlwH^oxaRtksqe0zGLm~-F?m(z`sAg;ePVLy zJs)Ptut_k?I#^M&C-kyOMyY|O|H-WEtwBNyd!}ZTyy$#gb|B%7>@w%6o1@mIZH`o$ zSW;eYJ=bqz#G6`U-^(VqRbL2N8XbDOkx|)hZ>ipNZiWJx@AsTzca>;nf4K2x?%cUz z-KsV=e?B}s{BF~iD%-Zis=fDe%$OP45@q<>m%ZGy$*8PJ+4r)otu4caD_4%NJ??Rf z1_5b?JEhlS^X7-@O;1lx-`w`$S0<_yTx>!7>%~;2B#*s{V|PtIeGb+l0MeH zMJKO_^Zv7b_Sh)3Z~OVJ&!?w7*4xEc z@B7j}9!cA5$fGRQeRGEAd)3XC&ZKR=nZw7$CG~oC>W83^kSV`sEYc{uvu@?emv6V< zFH=vJIF`44^FGb$W&8Hk{r>jW*VmV?z1j5DoBFq9yRFZDO=WC2nPMc>%X9e1ks~|K zZ`S5C;JJM9;zPZOYgc^u@WHc|-#wc}kn!QMFFbohO#j$CtCYC0GwJbt?*;F!pFVN2 z@E9xe_ANIug!ZhOyl^ISXi36m|APXLEe;wn_sO&+@+=N0@;YY{W*VM$>}-OBT5v5p z`}3%^db{V%6Q0k@;CJiZs@26ibl!RV4M;38zSbl>WvWq9bMr*L_QMYgZoK{W;6Xy! z!RZekB)Kymmif+J=N}Lq?R~i z^Fk0%w6?xITPLT0tNV86nG+`>Hm9B4Fh#_5BjdWYYuB#d|F0@C@@9{uaoYKLy3c5w>tdt!8oU%LGI7|4_h51bChh7{sIbgsazgE?$DWgxn*O?+e*4=b zmVSnHaqG)1WRxa)C{3KT>`2al1-7ebm11 z$=ZC=Z@yjc%;un* zOLHTfO>eodwk2kP0mFl%;_*DZys5eAfq@gP8>9WdOTAQYtE;UUmMmG)Q`_9(nbpkc`~2;x7#}ItiXJSjJEe}7jEmO z9FJf+#(lhS%ihU*R05LcPtM|C{(7OQ{`}jB%c38$cMBRd81fuGGeffE%cqN(;F4>Fz##@?_#&(@83pGJMi@hkH031^DfLD9k@^U-RR`!^7>i+^G`F)~(C? z{q1dz!`Y4rDw49YYXdY^tzO+PYyGV9bMwuQ>&te}<-I-8L*?E5^S17XdOcK> zIGUDao|l+^Bl^{ec8ZECTVkWeL);5ja34<3tY#^PE+S39+KdL5a5q)mmT zvq@%3Zv53~cWFD;HpLwh?rFO&lr4%W)>@zHU-eQ)Qw{83O<;#kzS+mbByZo}LsmZOTH&kot(WI4Y*6b;H8RY89+Lp-I zzIf}_uaEof>)!AEE+s8}eO>J85Ut<8f1jUkfB){?y@ik6T4M|+NHS0Lx_bS3`O{NV zy{GGCnn=m@A3tYtXJ>JGWMpJm*fbB7O*eBwLqpk`7p`9Itv9{AwDj$rotu{~UAld{ zIK#VLul1G&aWaT?FI}>vrMF+S)5UG^#jLGbB3v6IV&dZN-MF#hVup(2q;1=_U5~3? zyLD^nvokZJx96p5Z{D?Q*ODbJN)s!NUGZUK{Np!2?vIrI&U?x-`8IEM`OR4QPD(a; z*5{T~Kgr}RKmNJi^Z&Ku<&jB0HM6AZ;*aMj#|pbY-~Ii!XApFqJJ7i&yk4dVH++;lqdXYrjPX2VY*je%~p!6B`z% z^4tA*@agI4yKD|CL+%xyw^f_Ga@)3VKcCM}Z}#Jtu`qbl!n-o$*OSTq=jK=zzrVM4 z>(;HRs;X}m-R5dl($vg+e606POZm5{(m%d@{!#m*=HFz0J4rdYefjtIDZBT*xw)DB zutBGbkeJxEvbR!YXN+uZ|Ni^^{{NrP=g-fxojrZJx=`n%M~~*!{dzh7&lB}|@~WSo zpI^Urt!>eh6YcVKKi=(rZ^Scs%9Jg&zrW3yGeS{ zdRy*ov#n8Y>o|@@Y}Re?dEofn^t5lHd%JO5`|T|fhZeH_x>joTb^oCwUSHIv&-Z_D zC1O288fU^cPa*5Z^Aj8XXymLjRJ+1IFY);yXrZWZOKxsTJ$dq^(af9~dmn!O z`Tbt?`#U>}ySux0@7`S~b2EbGYo?ot>4R)5<>0QJ;Q0%lzNRXsgYI zU!yveS`HhWS&+;j!O-ViyVlgb=DYOyf4mGDw?gm6e)0QwdhW3_p2KEGZ0EV$Q+(#_ z$=6tY;9MC8A79#C$L^z-?%tIZ7B)8QpU^t>af#JU`^;Ho7BW+(PObm@I)3x!&GRdt z&73hq;@hOtPmN~!%o7%!;`LObw#{$(+O9nbG0^^Zs$3?!JBu-(+Mgo12k?( zrwec9=WTl&qc?r7-XX3n5jtvyQq*g#-}vZ7 zynX%Khflw2FYz)o?>Jz-YcL<)KnEJ7U%{U$x0clM$q_dq8xB9&kUZf{**+G}M-py3HLO#YYk28R zpRDq-XeSR_^VKX>j;5=3k~SLfByYZXBQH8^!R41%UVrslK3T=HN#Tz22NU1yt+%po zN*+twdMn3_!A(h0;>Qw=Qx6L^%;H~R%DH(5)8AKBfsc4IIocokZuMEH_$BM(^N&mW z?&TVr?EAPZM}S#BYemfaO+E8+obJ{=UcMtS=G)4jcioFQj~TT{B=96OTO0E3^KbU< zXX;Z;cV75*ZSn8z-mFRLsp$+BD(S_ajF0I}j!^ovrAfrq)ZBda)hwCgk=iG=eHH3# z`MOlCz+1$1quf*ng@Wo#gBL#^TAX8hwqep;?cnaCN#`X6m8ZQfv5Hjp(GlxDn)Ka6 z+BL9j_uU+`-MpghhZ)-nXNQI@IQ`UU_SrW(7Fb&!HV|>$I8Xbq!J3~>K2{jb>?!>h zqX!z;EZW)A?y&o=p8$(>~=TF8b$%%}$&(u9^h4^@k51IM@GsI-;KmTldRhh#{L12eCN9uIX-F6DC%QCM8ex4)Mm?+^W#Nx@oz|7P4 z_)U-C_LXWJPC8<@bIi;PtA&miUYk*QZ$b4Vn`-Mfo_f=@MYv-1rk{SA#H$$1axSm) zsL!(h57Sn>fB00{I&<^2wm+tlu6H(6yj=D>_H*8AyDw|%eK&vK>E6lv)%5U%JB>M8 z-Afm^YZuPp`{pV4V8_koC3_|s^to5mn%T8WtA$JIxS5$VFds-@{>_z?bEl_4d0IiL zqs`JFfn_2so|RrxH7;FsesoBYIsfn9zk1WPH8f5VOi$lizl9cyy5Vl^NyMC zWeJAqhYzw%kNnu8P+&Lz{k?|idn@_cAHR#0;XI~0(^PTI!QFA@Wp;~hA5D=p{T?76 zEz^Jea6!$7>O__Trssu~4UMOtCT&gnopV#R;jY)FZ$GN$M*e=Dc_ni4$*|Vjn|57) zov8k!H*Rj-!*u=EykGZPO8!{?a6)bsQ@edvtoVlK({FHQJ<48iL8OMOFV$OZbs_%@ zpZk0N2fFeez0Ro{e11inL6GFP?&|&jkNf{`O#ExHn_IXov4PvdF>%q16j#4BCcdZm zpFNOadS1jSC;nW}g8ldhDc|1ZGPBR78Aya^iMj^rP4B+T%5>OZZP@I&Q%x5w{TTMu zF})*k_OHZnc3%zs_A3ax+{dd5?*(SCB@3TKyfB&jC zv>5~>C7y{-zcIJpMl&^P|LS8IhR1%z&4~&x4GCNo z>|&Woo9n)HDJ)!at;Q%qYx3vNg^Mz_YN&NAm)Tt**MIyQFH^(ehZ)(~+`PQ0&%bRn z;8}e6<)cTBnwA9l_tqBuVNX--n|WaErPBEIkFV_8zkfybo`N?v&iUmzs>jVv27gWz zT~RfA+Ia{2Sh4@7zkBzdycw*}aPPp1B=t$Q6PEf<+Bm;s%f%|Mzt!1)LW-`0mB0A> zAX}61kLa;!Z>s-IJl|uyurBe{9M%cVjAjN`o*ea7n&|PR%C`M*;m(+x85+_Ghi^HV zeVBCkp^KXv-}U3ycYUk6^mMIB%V^a^5MrHJtn0vr`)*cSeCeX$r6?G9;Z(>G)k{%oM#Yx|Ge?7P0_-yg?8Sw zcigl7Kw;1?^TMO{w)|t#!G+cS-~!SKhbC=N0UIOOP+Sd#)vt3;VvmD5g9Ai2dmY@3Z>3? z;$V8b?v|*;Q`?!p`aZ2ZDJQ^bCuZKLGx^8Hmx_n}{$IIGe)}rLFDXn1jgtQe%v-Fr zudlZ^kz?aSXT`@Ivjog1D9&*Z+~@Uqzhjy4E1~Rr2Mo@1h;=1O?7pif!gaH>e@kNo zY%M?>4_ou)mp*=eY0oG5FH!iPmdpNb>DQgFlbGypvz*y>|F87pe#f7G+Ir7z=@MY@fehis$b`x7VyQe_62ZzkT`P*#*Zp zp3iQsTy{voz<=WZ`(nZ`H%Yw}mH2f$z*D*2q<7h)f~V@~*Z7zhZ?SlsVX?Ef=YI9{ z{uFW5NeZ1R86K;oS1PB*EDMirlUuqx)#&t|vM0%ni|wv4Jm@a3R<==$t6TbW_ls@s z`S$;2PpY{&>s{y7O?+?Xn3e7HTmRvZ@*FX@&m8I(0*%i4pPwK#@89!^qz(K_ziVIq9rk>2-S@t* zGaL4=`zyP`_9xS6UXi?a^H((JyT0C8E<#1`_b#8;>rc4Oes;8B<>n0^oNA|Mo-lP1m}^)5?u>_A z!@8v(j@+zTf7@cc*SBT9yEPLeo?SC&i3s@gi2YrcZsq>~?glGePuCCC8rpr6RoV|U z6k5vgxScq(Sb4$bsN^JxzTY#J_4sb}n{|m{af0vqZM;zVo^b`OA=FX+=9XjdQx{H=je$isCXtwv>7UtEHAW* zhkgZ zam~yDe(i^!GW9(9wBtchfW%4F!i0?W$x0R~d|M8uEtlwd@^R;zM_)u-cfLtm-OSeW zpkSvAlg9GHuEspBmo35%sOP^sdPe=+*}pLpKW(w>WXg5VuI`*RMSU4dxV*+P24xEw zq2p|~BzvAb+H%$6o#DpM{ztN-|Jqjrl*-qE||X)Y`uJti)G{^+>%_iYgj3=R6Co;tFv zZ@+%c4T$Ggn6>rg!#6K(Y+;v=U$ELbPC3F-U8q3re8lIM>A$}&T>UOuI?Md_?>Sv> zUT~P54VRZUYuAh0U$nGm+a_Zfw8B_Uf%?|(hbbtSp6usElhwN*%<=osRuU4dc?p)K{ zYQJnAKL!S`{8FhBtI2U!Zr)n^^0L$!xx-qEEacMmMMdAdk+=Bu>(`DFn+yN0nRa=( z{?`L@mUgG?@?JhWdEfWHB49=j7v4lWg1hvU;P6lI8O4>&~4JY+3R= zZDmE6Tyg-@kLm5Bd1{J0&h&E6Vb}8Orc*jcWXYFn&*tXGU1DU2vEVwu8Ts#l?aPIZ&l|RUH>unDJE7h3$S>t`si(HL zC!M-qZF+y!x4-Yt^q?di%b6a<^uM zAD;Pnxoo}R^Sz(m`=8gV%2EA%{1D%Xck9=)yQVZ9`tnm=Pv`&R-`~B?*?(=;_j>nB zlc8Z}-t&2{^8fz6eD;&~|M&g!bN6maU`&1Pe*V|P_45PG_x?Mx+B&;9?u3Z%cV0hs z^Y5n*8YEoZTJp7}#l=%c!obA$vyj+Ruhsm2Ufz9o$5cA#(qieZ*H%wXE z>I_|VYu7pZ_VFcuX!3czF#Lb~M1z$fi0*I)e9`+CTjwWfxprLN_i?>CGla4u1k>`!Z8oVE3r-0?Sxyxacm`erw4TBMJN>tvhOruDhm z#!)ejZ{9^-Uo&~*x(_F&w^c0lk(|C+sVDnx^}Po(6%tQwyZVx=a>}BulM-XXa{a64 zPh8fxZ<^br3G-HT?SFmIN1)yHM2OKm?}OV*zRY^NrGbqtPtdvIu}-+zQl58Pk1;S@ z&=WtmkVp1x=u>s8e>Wl?T-h4sdZ_N^+;XvrW@aKl%Rb z*gP|%sNDXYH*fCzd9QuG*UKF>zdXv#qj?X_u;gwDFRNSPd+v;f=WJ>F_RYV~sFt%z z{?_8JPwniVGTlx#xTc9cCHg|9Ur6b?taNxX%cOWZD|>^mSwi3NgR8*Mfz;oDc6f8 zXBiG(*s^<)!JLv;>!!q|7}W8rMhi)ud;a1@<9qD`ldjuu5xBkmaYM~nuASYsXX6&$ z%{-8DCFAw!Z*TIKGTvwZ6_?(2F{Nl{jLF%A8wpiMeEFO$^~C4D<^Er%)fvlmKF+NA z@7p-qecePh>ruPc!HZ7|UigZ}&gvEXsO8?TTjzIc>36&Rx6)?IO3zMu zB>BtA^j-37hUAP{Y-tKUtxRppa;BY=t19#J+cve^-NiE|Joel{uSx285p%9wzj`VE z>CslslDV;I+2QWHEfUkZmY&U+)M^mb>$%b|*ekPVk;bgVh=tcLZP^|+O>}+dX`bt* zvmc42Uf=)KHN9We(lU41#MQHAD!f|1*R&}$FT7uX;mcK4)+H-HUYM6W^ZcG2GnC)X zn_53KaD+rO7t^w_$mue%jkwo0#J*`7zAlQ;i+ zf182f;pX?TF~6?%F*$`s_Z?q%ny)d-J^uI9MNAuizNtLQe1D$jon@jm#rtJMcpZYL zoG#kAq2k;j_l2{IO2fpm-=FQ_x@4VtabZe&_{F8C#eCN%RhFa{?u)x$xAW~pYo%>Kn!RHElymd8t8CNTzx3`CCI*iA zwf|pT_|^SYZ9;0-m#4CK#qKD0ob)*r^2qq|qg|i$0z}SEZBbpa#35(Zf+btdIG#Pc z@pRX?o_$yc#67INmT9?#D-`6HL^50p;ANln3bahqL zvS{A=!Y^AxwhBh>T$!jSlN?n3y+l(`3GAu6!MWprk`AvFcJ2#hiYp>Mg)2T1tUXjq) zG0p9A)z*FcG&MBURjqo~uiYDPdCkR_m5viVI}NuzyEJPXpV{BD=T?QTUKZW@vSDG) zl!Yr7?b^84KIxx-F|NFPqun-pRs!&wkBXUA6jf znn|>eZ}_?|(VB~Io_TTm^{lN`)|SQJ))-jE#)bslzj)qEuy5bAV|Jdu*8JFD5Ep&$ z<9hvBlY>+Dp4DX&XJANPI(4Sx$Hc_MqSKvs{wys`tY6VNF!1}*Mj?V7>>$OY1 zzT(m2SnBh;ak2PUKO?2eFt!F;{gWfP-Qf3Z9|#$3BoS&jKhgrXXA3Wp%a5ntx4H3E|vUlv%b zi`#2;H%lSUG_LC9QgA;Q+})jNn9MeF-n@UGPV4(`SL0w|YIN{n-d*#U%I;DtZiWV( zw8*?RpCezR)tCw|C+6vCug-c`$i%>rylInBQmEZt&c!Fz7_zIUy0FDsFI~O2;?*WT z1_l+uNbaKK<8`HHcD3z_O3w*fm7|j@bN6g%Y*=Jb5zG7!;h8K+pFUhwexvng*9o1V z)mO9P%K!bApYxKdfiLzs|D3lQs^)Dpn`2+Itu<`*)hyHfySFV|eE-p6pLHRcPZyT+ z7hXS>Z^U9nAJ}muiVTT zB%vZa@$nY-_0L9cUo(5U3JZg`e`?_VqLWRPn->)pq@FE!P$TCn zy~^h48I_f7o7dOZ?75y%&U!R==ks|o>HoUrV;(%%5^VbWru*bi->0V?SL-TGegD=X z;CgaE?g_+87r9Ql8GXC4{#wXOg6F)(ocM6Ryeds0u&xp8iL+@A$= zQ=HQ7{k^cvb;-9c5AUW*&D;As%m30Z`L$soV$-IZOgG;qzP|1S`)eh3uY*TVt(dv< z^W&oeZ`Pb$z1}9OG(uiwjeW4F&G&P=#R~Z=_PO76um5~aGxXJ^-%3gq>$={`rLJsQ zwrWpp_4jzANeBApug{8uInY`fKHHZ|~i|r~N>T;^+N;C;P6v9JQ3=h(L#K z^tLl|EHA(QGOM`S>!ra`@8v7?w9}2IukUFqmah#H-Sx`+{!NujAyczo?C^N~Zhx)Z zuCF_v@7t<%B*WzLS#`gxFx#(-+ox;t?fJVkr><+A#``6zpRbC)6EBV5xoEP^KJ~5E z_lv%FpI`42RCL41BIeGunw0adN-ilEGUm!m4AFU$Z&7_9_}rNXo9D|dcwYPZ`Tctn zBosxZrOWotH-Fw7qgGEIxWR zR^8n`f4BL@M~iKW9HVZ3T%Tp}dH?q_kG-FW9hfoe zwe&5Io0}vvzx5qbe1GUp%dYd~^N$q&|MdBIn#&2#UBACr&wo6-{@0&tGH-uw?!9zE zW7A8IxcigX=hxKqzWHFS+WB3d_thKz$e(N9*ClV;oqy#{{n9N9n5Tc#jXK-Pt@=uG z^NDAdCi5OV|M$Kz_v4qs?|EzcpXtq={U&E$O5a>f`_Jpk4=&c3y79|oW?t`oUk@LD zAFpy@X6Q$*z#EsA&%1eKO6{iqoBm8ppTGP6I+tvAL3#c8=e%4MY&7)szu#0Yx%E}o zv^6~IR8FM-|HM?AjO_=<4ou6x{Z!&&;auXiovdiAc-!KVL|%t-aQD z={+s+;8)GhgSLCQcIqgb-+iy;s=(A2d^;?Bg>CS4(VF|g z{;el>o^^G;->Q9guB^|sT_Fs95j90Ot`^TPNj!CJ&-$phvbWf>H|G|zsq5%i>G<#^ z?L4y7SlV5ub(@sQ*Q=s?Wdij7T-%lNCt{*X`q3EHo*#0&X|HnENkv_gsk2q}@9LYz zd|=O1%csY0-DsIK;fKJVM<4gb$4+y&)KtA}!8HMn_aAQxa4j|bY;G@fQ*PVi&wnd* zji-N*4O3SRXGVAGSqGYmc^i=EYdg z?gOb=KVGf1y{h}Sxcy{j(5l7T5+<%yi;d3>oHuXt%XMe_g|5mj$hWQkVzJIkN@w0O z3AToXnX{Iy*KQFwma_hyPVS`_xwTK1^F@g8-!%??mffo$FuB_x^I}`|<+btke?kib zQkn$mRTa>TJ#3f;?8Lzy`$lSv9#x!nEpFb||N#D0!r6g%;qk|8V@NBz-;puDY z(qgadE5EO|%qe}zsWWbcX=!OqP8mjDZ!2$lR3Vz)7cSi^dwjpe%UPECaZdzJ3mX|5 zx7PaZRpyy3%yW0~OOxAk^xA9_Gk^d3u(EAh-r|cHZ!b%-oLZ5vFlWY`dD`tSmR)Q8G3*)-;WB*cnj4`{-DUzVD9WyG5J+y_h%2E%4ceaz~L_lMc+e7oTC0m3^v9 zKQe`T@=81Jh_tjclj9d_&(;<<3%0D>eK}#PQ{pQ(eZTBx)vQ3cq_@o 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 Date: Fri, 1 Jul 2011 16:08:21 +0200 Subject: [PATCH 039/143] Welcome Screen: Don't try to load FDO icons when not on linux Change-Id: I5bfaf78dddb27c42ad515f9506857dace571efd4 Reviewed-on: http://codereview.qt.nokia.com/1009 Reviewed-by: Qt Sanity Bot Reviewed-by: Daniel Molkentin --- .../welcomescreen/widgets/Feedback.qml | 10 +++++++--- src/plugins/welcome/welcomeplugin.cpp | 17 +++++++++++++++++ 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/share/qtcreator/welcomescreen/widgets/Feedback.qml b/share/qtcreator/welcomescreen/widgets/Feedback.qml index 839e9cbeb42..a712746492a 100644 --- a/share/qtcreator/welcomescreen/widgets/Feedback.qml +++ b/share/qtcreator/welcomescreen/widgets/Feedback.qml @@ -10,11 +10,15 @@ BorderImage { Rectangle { color: "black"; width: parent.width; height: 1; anchors.top: parent.top; anchors.left: parent.left } - Components.Button { + Components.QStyleItem { id: styleItem; visible: false } + // whitelist + property bool _hasDesktopTheme: welcomeMode.platform() === "linux" + + Components.Button { id: openProjectButton text: qsTr("Open Project...") - iconSource: "image://desktoptheme/document-open" + iconSource: _hasDesktopTheme ? "image://desktoptheme/document-open" : "" onClicked: welcomeMode.openProject(); height: 32 anchors.left: parent.left @@ -25,7 +29,7 @@ BorderImage { Components.Button { id: createProjectButton text: qsTr("Create Project...") - iconSource: "image://desktoptheme/document-new" + iconSource: _hasDesktopTheme ? "image://desktoptheme/document-new" : "" onClicked: welcomeMode.newProject(); height: 32 anchors.left: openProjectButton.right diff --git a/src/plugins/welcome/welcomeplugin.cpp b/src/plugins/welcome/welcomeplugin.cpp index d4ef9148bb9..0196bda8080 100644 --- a/src/plugins/welcome/welcomeplugin.cpp +++ b/src/plugins/welcome/welcomeplugin.cpp @@ -97,6 +97,8 @@ public: void initPlugins(); int activePlugin() const { return m_activePlugin; } + Q_SCRIPTABLE QString platform() const; + public slots: void sendFeedback(); void newProject(); @@ -195,6 +197,21 @@ void WelcomeMode::initPlugins() QUrl::fromLocalFile(Core::ICore::instance()->resourcePath() + "/welcomescreen/welcomescreen.qml")); } +QString WelcomeMode::platform() const +{ +#if defined(Q_OS_WIN) + return QLatin1String("windows"); +#elif defined(Q_OS_MAC) + return QLatin1String("mac"); +#elif defined(Q_OS_LINUX) + return QLatin1String("linux"); +#elif defined(Q_OS_UNIX) + return QLatin1String("unix"); +#else + return QLatin1String("other") +#endif +} + void WelcomeMode::welcomePluginAdded(QObject *obj) { if (Utils::IWelcomePage *plugin = qobject_cast(obj)) { From 568f8eb8c5d25964bf35f228553b3db0badf5fe4 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Fri, 1 Jul 2011 16:31:25 +0200 Subject: [PATCH 040/143] Doc: App TRK support removed Change-Id: Ifc5b701ab47cf16e895868bc55f0af21f4a0e34b Reviewed-on: http://codereview.qt.nokia.com/1013 Reviewed-by: Qt Sanity Bot Reviewed-by: Leena Miettinen --- doc/images/qtcreator-symbian-run-settings.png | Bin 59316 -> 69392 bytes doc/qtcreator.qdoc | 6 +-- doc/symbiandev.qdoc | 51 ++++-------------- 3 files changed, 14 insertions(+), 43 deletions(-) diff --git a/doc/images/qtcreator-symbian-run-settings.png b/doc/images/qtcreator-symbian-run-settings.png index 50fc30fd348b8632fd94d55d4a6df7c21d17eb39..52d1d8e756accadb200f3d05d3aa978f520ff8a7 100644 GIT binary patch literal 69392 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

    C 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
      w@lnIyIq)zL#_Mdt{aMelT;3g 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 z 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 II;Vst0E*6WzyJUM literal 59316 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

      vlc&&7954manhhx@pf`KkH}5tnM7z!slVR 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

      %1 is still running. " "You have to quit the Analyzer before being able to run another instance." "
      Force it to quit?
      ") - .arg(m_currentRunControl->displayName()); + .arg(m_currentTool->displayName()); bool stopRequested = showPromptDialog(tr("Analyzer Still Running"), msg, tr("Stop Active Run"), tr("Keep Running")); if (!stopRequested) @@ -574,17 +579,16 @@ void AnalyzerManagerPrivate::startLocalTool(IAnalyzerTool *tool, StartMode mode) // user selected to stop the active run. stop it, activate restart on stop m_restartOnStop = true; - stopTool(m_currentTool); + stopTool(m_currentTool, m_currentMode); return; } - IAnalyzerTool::ToolMode toolMode = tool->mode(); + IAnalyzerTool::ToolMode toolMode = tool->toolMode(); // Check the project for whether the build config is in the correct mode // if not, notify the user and urge him to use the correct mode. if (!buildTypeAccepted(toolMode, buildType)) { const QString toolName = tool->displayName(); - const QString toolMode = IAnalyzerTool::modeString(tool->mode()); const QString currentMode = buildType == ProjectExplorer::BuildConfiguration::Debug ? tr("Debug") : tr("Release"); QSettings *settings = Core::ICore::instance()->settings(); @@ -593,11 +597,20 @@ void AnalyzerManagerPrivate::startLocalTool(IAnalyzerTool *tool, StartMode mode) if (settings->contains(configKey)) { ret = settings->value(configKey, QDialog::Accepted).toInt(); } else { + QString toolModeString; + switch (toolMode) { + case IAnalyzerTool::DebugMode: + toolModeString = tr("Debug"); + case IAnalyzerTool::ReleaseMode: + toolModeString = tr("Release"); + case IAnalyzerTool::AnyMode: + break; + } const QString title = tr("Run %1 in %2 Mode?").arg(toolName).arg(currentMode); const QString message = tr("

      You are trying to run the tool '%1' on an application in %2 mode. " "The tool is designed to be used in %3 mode.

      " "Do you want to continue and run it in %2 mode?

      "). - arg(toolName).arg(currentMode).arg(toolMode); + arg(toolName).arg(currentMode).arg(toolModeString); const QString checkBoxText = tr("&Do not ask again"); bool checkBoxSetting = false; const QDialogButtonBox::StandardButton button = @@ -623,15 +636,16 @@ void AnalyzerManagerPrivate::startTool() m_currentTool->startTool(m_currentMode); } -void AnalyzerManagerPrivate::stopTool(IAnalyzerTool *tool) +void AnalyzerManagerPrivate::stopTool(IAnalyzerTool *tool, StartMode mode) { QTC_ASSERT(tool == m_currentTool, /**/); + QTC_ASSERT(mode == m_currentMode, /**/); if (m_currentRunControl) return; // be sure to call handleToolFinished only once, and only when the engine is really finished if (m_currentRunControl->stop() == ProjectExplorer::RunControl::StoppedSynchronously) - handleToolFinished(tool); + handleToolFinished(tool, mode); // else: wait for the finished() signal to trigger handleToolFinished() } @@ -645,52 +659,28 @@ void AnalyzerManagerPrivate::modeChanged(IMode *mode) m_mainWindow->setDockActionsVisible(makeVisible); } -void AnalyzerManagerPrivate::selectTool(IAnalyzerTool *tool, StartMode mode) +QAction *AnalyzerManagerPrivate::actionFromToolAndMode(IAnalyzerTool *tool, StartMode mode) { - int idx = m_tools.indexOf(tool); - QTC_ASSERT(idx >= 0, return); - if (m_currentTool == tool) - return; + foreach (QAction *action, m_actions) + if (m_toolFromAction[action] == tool && m_modeFromAction[action] == mode) + return action; + QTC_ASSERT(false, /**/); + return 0; +} - if (m_currentTool) { - IAnalyzerTool *oldTool = m_currentTool; - saveToolSettings(oldTool); - - ActionManager *am = ICore::instance()->actionManager(); - - foreach (QDockWidget *widget, m_toolWidgets.value(oldTool)) { - QAction *toggleViewAction = widget->toggleViewAction(); - am->unregisterAction(toggleViewAction, - QString("Analyzer." + widget->objectName())); - m_mainWindow->removeDockWidget(widget); - ///NOTE: QMainWindow (and FancyMainWindow) just look at - /// @c findChildren() - ///if we don't do this, all kind of havoc might happen, including: - ///- improper saveState/restoreState - ///- improper list of qdockwidgets in popup menu - ///- ... - widget->setParent(0); +void AnalyzerManagerPrivate::selectSavedTool() +{ + const QSettings *settings = Core::ICore::instance()->settings(); + const QByteArray lastActiveAction = + settings->value(QLatin1String(LAST_ACTIVE_TOOL), QString()).toByteArray(); + foreach (QAction *action, m_actions) { + IAnalyzerTool *tool = m_toolFromAction[action]; + StartMode mode = m_modeFromAction[action]; + if (tool->actionId(mode) == lastActiveAction) { + selectTool(tool, mode); + break; } - oldTool->toolDeselected(); } - - m_currentTool = tool; - m_currentMode = mode; - - m_toolBox->setCurrentIndex(idx); - m_controlsWidget->setCurrentIndex(idx); - - const bool firstTime = !m_defaultSettings.contains(tool); - if (firstTime) { - tool->initializeDockWidgets(); - m_defaultSettings.insert(tool, m_mainWindow->saveSettings()); - } else { - foreach (QDockWidget *widget, m_toolWidgets.value(tool)) - addDock(Qt::DockWidgetArea(widget->property(INITIAL_DOCK_AREA).toInt()), widget); - } - - loadToolSettings(tool); - updateRunActions(); } void AnalyzerManagerPrivate::selectAction() @@ -705,8 +695,67 @@ void AnalyzerManagerPrivate::selectAction(int index) void AnalyzerManagerPrivate::selectAction(QAction *action) { - StartMode mode = StartMode(action->property("StartMode").toInt()); - selectTool(m_toolFromAction[action], mode); + selectTool(m_toolFromAction[action], m_modeFromAction[action]); +} + +void AnalyzerManagerPrivate::selectTool(IAnalyzerTool *tool, StartMode mode) +{ + if (m_currentTool == tool && m_currentMode == mode) + return; + + QAction *action = actionFromToolAndMode(tool, mode); + const int actionIndex = m_actions.indexOf(action); + QTC_ASSERT(actionIndex >= 0, return); + + // Guard against recursion by m_toolBox->setCurrentIndex. + static bool inSelectTool = false; + if (inSelectTool) + return; + inSelectTool = true; + + saveToolSettings(m_currentTool, m_currentMode); + + + // Clean up old tool. + if (m_currentTool) { + ActionManager *am = ICore::instance()->actionManager(); + + foreach (QDockWidget *widget, m_toolWidgets.value(m_currentTool)) { + QAction *toggleViewAction = widget->toggleViewAction(); + am->unregisterAction(toggleViewAction, + QString("Analyzer." + widget->objectName())); + m_mainWindow->removeDockWidget(widget); + ///NOTE: QMainWindow (and FancyMainWindow) just look at + /// @c findChildren() + ///if we don't do this, all kind of havoc might happen, including: + ///- improper saveState/restoreState + ///- improper list of qdockwidgets in popup menu + ///- ... + widget->setParent(0); + } + m_currentTool->toolDeselected(); + } + + // Now change the tool. + m_currentTool = tool; + m_currentMode = mode; + + const bool firstTime = !m_defaultSettings.contains(tool); + if (firstTime) { + tool->initializeDockWidgets(); + m_defaultSettings.insert(tool, m_mainWindow->saveSettings()); + } else { + foreach (QDockWidget *widget, m_toolWidgets.value(tool)) + addDock(Qt::DockWidgetArea(widget->property(INITIAL_DOCK_AREA).toInt()), widget); + } + + loadToolSettings(tool); + + m_toolBox->setCurrentIndex(actionIndex); + m_controlsWidget->setCurrentIndex(actionIndex); + + updateRunActions(); + inSelectTool = false; } void AnalyzerManagerPrivate::addTool(IAnalyzerTool *tool, const StartModes &modes) @@ -714,7 +763,6 @@ void AnalyzerManagerPrivate::addTool(IAnalyzerTool *tool, const StartModes &mode delayedInit(); // Make sure that there is a valid IMode instance. const bool blocked = m_toolBox->blockSignals(true); // Do not make current. - m_controlsWidget->addWidget(tool->createControlWidget()); ActionManager *am = Core::ICore::instance()->actionManager(); foreach (StartMode mode, modes) { @@ -722,24 +770,24 @@ void AnalyzerManagerPrivate::addTool(IAnalyzerTool *tool, const StartModes &mode QString menuGroup = tool->menuGroup(mode); QString actionId = tool->actionId(mode); QAction *action = new QAction(actionName, 0); - action->setProperty("StartMode", int(mode)); Core::Command *command = am->registerAction(action, actionId, Core::Context(Core::Constants::C_GLOBAL)); m_menu->addAction(command, menuGroup); m_actions.append(action); m_toolFromAction[action] = tool; + m_modeFromAction[action] = mode; m_toolBox->addItem(actionName); m_toolBox->blockSignals(blocked); connect(action, SIGNAL(triggered()), SLOT(selectAction())); } - m_toolBox->setEnabled(true); - m_tools.append(tool); + m_toolBox->setEnabled(true); } -void AnalyzerManagerPrivate::handleToolFinished(IAnalyzerTool *tool) +void AnalyzerManagerPrivate::handleToolFinished(IAnalyzerTool *tool, StartMode mode) { QTC_ASSERT(tool == m_currentTool, /**/); + QTC_ASSERT(mode == m_currentMode, /**/); m_currentRunControl = 0; updateRunActions(); @@ -759,7 +807,7 @@ void AnalyzerManagerPrivate::loadToolSettings(IAnalyzerTool *tool) settings->endGroup(); } -void AnalyzerManagerPrivate::saveToolSettings(IAnalyzerTool *tool) +void AnalyzerManagerPrivate::saveToolSettings(IAnalyzerTool *tool, StartMode mode) { if (!tool) return; // no active tool, do nothing @@ -770,7 +818,7 @@ void AnalyzerManagerPrivate::saveToolSettings(IAnalyzerTool *tool) m_mainWindow->saveSettings(settings); settings->setValue("ToolSettingsSaved", true); settings->endGroup(); - settings->setValue(QLatin1String(lastActiveToolC), tool->id()); + settings->setValue(QLatin1String(LAST_ACTIVE_TOOL), tool->actionId(mode)); } void AnalyzerManagerPrivate::updateRunActions() @@ -781,7 +829,7 @@ void AnalyzerManagerPrivate::updateRunActions() bool startEnabled = !m_currentRunControl && pe->canRun(project, Constants::MODE_ANALYZE) - && m_currentTool >= 0; + && m_currentTool; QString disabledReason; if (m_currentRunControl) @@ -822,24 +870,14 @@ void AnalyzerManager::extensionsInitialized() if (d->m_tools.isEmpty()) return; - const QSettings *settings = Core::ICore::instance()->settings(); - const QString lastActiveToolId = - settings->value(QLatin1String(lastActiveToolC), QString()).toString(); - foreach (IAnalyzerTool *tool, d->m_tools) tool->extensionsInitialized(); - - QAction *lastAction = 0; - foreach (QAction *action, d->m_actions) - if (d->m_toolFromAction[action]->id() == lastActiveToolId) - lastAction = action; - if (lastAction) - d->selectAction(lastAction); + d->selectSavedTool(); } void AnalyzerManager::shutdown() { - d->saveToolSettings(d->m_currentTool); + d->saveToolSettings(d->m_currentTool, d->m_currentMode); } void AnalyzerManager::addTool(IAnalyzerTool *tool, const StartModes &modes) @@ -910,30 +948,30 @@ void AnalyzerManager::showMode() ModeManager::instance()->activateMode(m_instance->d->m_mode->id()); } -void AnalyzerManager::stopTool(IAnalyzerTool *tool) +void AnalyzerManager::stopTool(IAnalyzerTool *tool, StartMode mode) { - m_instance->stopTool(tool); + m_instance->d->stopTool(tool, mode); } void AnalyzerManager::startLocalTool(IAnalyzerTool *tool, StartMode mode) { - m_instance->startLocalTool(tool, mode); + m_instance->d->startLocalTool(tool, mode); } void AnalyzerManager::startRemoteTool(IAnalyzerTool *tool, StartMode mode) { - m_instance->startRemoteTool(tool, mode); + m_instance->d->startRemoteTool(tool, mode); } ProjectExplorer::RunControl *AnalyzerManager::createRunControl (ProjectExplorer::RunConfiguration *runConfiguration, const QString &mode) { - return m_instance->createRunControl(runConfiguration, mode); + return m_instance->d->createRunControl(runConfiguration, mode); } -void AnalyzerManager::handleToolFinished(IAnalyzerTool *tool) +void AnalyzerManager::handleToolFinished(IAnalyzerTool *tool, StartMode mode) { - m_instance->d->handleToolFinished(tool); + m_instance->d->handleToolFinished(tool, mode); } IAnalyzerTool *AnalyzerManager::toolById(const QByteArray &id) diff --git a/src/plugins/analyzerbase/analyzermanager.h b/src/plugins/analyzerbase/analyzermanager.h index cc5f4edd5d6..0c66e9ff780 100644 --- a/src/plugins/analyzerbase/analyzermanager.h +++ b/src/plugins/analyzerbase/analyzermanager.h @@ -71,7 +71,7 @@ public: (ProjectExplorer::RunConfiguration *runConfiguration, const QString &mode); // Register a tool and initialize it. - static void addTool(Analyzer::IAnalyzerTool *tool, const StartModes &mode); + static void addTool(IAnalyzerTool *tool, const StartModes &mode); static IAnalyzerTool *toolById(const QByteArray &id); // Dockwidgets are registered to the main window. @@ -83,9 +83,9 @@ public: static void showMode(); static void selectTool(IAnalyzerTool *tool, StartMode mode); static void startTool(IAnalyzerTool *tool, StartMode mode); - static void stopTool(IAnalyzerTool *tool); + static void stopTool(IAnalyzerTool *tool, StartMode mode); - // Convienience functions. + // Convenience functions. static void startLocalTool(IAnalyzerTool *tool, StartMode mode); static void startRemoteTool(IAnalyzerTool *tool, StartMode mode); @@ -95,7 +95,7 @@ public: static void showStatusMessage(const QString &message, int timeoutMS = 10000); static void showPermanentStatusMessage(const QString &message); - static void handleToolFinished(IAnalyzerTool *tool); + static void handleToolFinished(IAnalyzerTool *tool, StartMode mode); private: friend class AnalyzerManagerPrivate; diff --git a/src/plugins/analyzerbase/analyzerruncontrol.cpp b/src/plugins/analyzerbase/analyzerruncontrol.cpp index a9f42e5408a..efa2ecebb0d 100644 --- a/src/plugins/analyzerbase/analyzerruncontrol.cpp +++ b/src/plugins/analyzerbase/analyzerruncontrol.cpp @@ -131,7 +131,7 @@ void AnalyzerRunControl::engineFinished() void AnalyzerRunControl::runControlFinished() { - AnalyzerManager::handleToolFinished(d->m_engine->tool()); + AnalyzerManager::handleToolFinished(d->m_engine->tool(), d->m_engine->mode()); } bool AnalyzerRunControl::isRunning() const diff --git a/src/plugins/analyzerbase/analyzerruncontrol.h b/src/plugins/analyzerbase/analyzerruncontrol.h index a2d0c893d1d..e066ccfac4d 100644 --- a/src/plugins/analyzerbase/analyzerruncontrol.h +++ b/src/plugins/analyzerbase/analyzerruncontrol.h @@ -57,7 +57,7 @@ public: RunConfiguration *runConfiguration); ~AnalyzerRunControl(); - // pure virtuals from ProjectExplorer::RunControl + // ProjectExplorer::RunControl void start(); StopResult stop(); bool isRunning() const; diff --git a/src/plugins/analyzerbase/analyzerruncontrolfactory.cpp b/src/plugins/analyzerbase/analyzerruncontrolfactory.cpp index a3a5258e9b6..2c173cb5930 100644 --- a/src/plugins/analyzerbase/analyzerruncontrolfactory.cpp +++ b/src/plugins/analyzerbase/analyzerruncontrolfactory.cpp @@ -45,6 +45,7 @@ using namespace Analyzer; using namespace Analyzer::Internal; +using namespace ProjectExplorer; ///////////////////////////////////////////////////////////////////////////////// // @@ -55,6 +56,7 @@ using namespace Analyzer::Internal; AnalyzerRunControlFactory::AnalyzerRunControlFactory(QObject *parent) : IRunControlFactory(parent) { + setObjectName(QLatin1String("AnalyzerRunControlFactory")); } bool AnalyzerRunControlFactory::canRun(RunConfiguration *runConfiguration, const QString &mode) const @@ -62,8 +64,7 @@ bool AnalyzerRunControlFactory::canRun(RunConfiguration *runConfiguration, const return runConfiguration->isEnabled() && mode == Constants::MODE_ANALYZE; } -ProjectExplorer::RunControl *AnalyzerRunControlFactory::create(RunConfiguration *runConfiguration, - const QString &mode) +RunControl *AnalyzerRunControlFactory::create(RunConfiguration *runConfiguration, const QString &mode) { QTC_ASSERT(canRun(runConfiguration, mode), return 0); return AnalyzerManager::createRunControl(runConfiguration, mode); @@ -74,16 +75,15 @@ QString AnalyzerRunControlFactory::displayName() const return tr("Analyzer"); } -ProjectExplorer::IRunConfigurationAspect *AnalyzerRunControlFactory::createRunConfigurationAspect() +IRunConfigurationAspect *AnalyzerRunControlFactory::createRunConfigurationAspect() { return new AnalyzerProjectSettings; } -ProjectExplorer::RunConfigWidget *AnalyzerRunControlFactory::createConfigurationWidget(RunConfiguration - *runConfiguration) +RunConfigWidget *AnalyzerRunControlFactory::createConfigurationWidget(RunConfiguration *runConfiguration) { - ProjectExplorer::LocalApplicationRunConfiguration *localRc = - qobject_cast(runConfiguration); + LocalApplicationRunConfiguration *localRc = + qobject_cast(runConfiguration); if (!localRc) return 0; AnalyzerProjectSettings *settings = runConfiguration->extraAspect(); diff --git a/src/plugins/analyzerbase/ianalyzerengine.h b/src/plugins/analyzerbase/ianalyzerengine.h index d3191682fc2..8596fbf53c5 100644 --- a/src/plugins/analyzerbase/ianalyzerengine.h +++ b/src/plugins/analyzerbase/ianalyzerengine.h @@ -83,7 +83,8 @@ public: const AnalyzerStartParameters &startParameters() const { return m_sp; } /// The tool this engine is associated with. - IAnalyzerTool *tool() { return m_tool; } + IAnalyzerTool *tool() const { return m_tool; } + StartMode mode() const { return m_sp.startMode; } signals: /// Should be emitted when the debuggee outputted something. diff --git a/src/plugins/analyzerbase/ianalyzertool.cpp b/src/plugins/analyzerbase/ianalyzertool.cpp index eb0abbfd488..2e234cc11d4 100644 --- a/src/plugins/analyzerbase/ianalyzertool.cpp +++ b/src/plugins/analyzerbase/ianalyzertool.cpp @@ -41,19 +41,6 @@ IAnalyzerTool::IAnalyzerTool(QObject *parent) : QObject(parent) {} -QString IAnalyzerTool::modeString(ToolMode mode) -{ - switch (mode) { - case IAnalyzerTool::DebugMode: - return tr("Debug"); - case IAnalyzerTool::ReleaseMode: - return tr("Release"); - case IAnalyzerTool::AnyMode: - break; - } - return QString(); -} - QByteArray IAnalyzerTool::defaultMenuGroup(StartMode mode) { if (mode == StartRemote) @@ -61,15 +48,17 @@ QByteArray IAnalyzerTool::defaultMenuGroup(StartMode mode) return Analyzer::Constants::G_ANALYZER_TOOLS; } -QByteArray IAnalyzerTool::defaultActionId(const QByteArray &id, StartMode mode) +QByteArray IAnalyzerTool::defaultActionId(const IAnalyzerTool *tool, StartMode mode) { + QByteArray id = tool->id(); if (mode == StartRemote) return "Action." + id + ".RemoteStart." + QByteArray::number(mode); return "Action." + id + ".LocalStart." + QByteArray::number(mode); } -QString IAnalyzerTool::defaultActionName(const QString &base, StartMode mode) +QString IAnalyzerTool::defaultActionName(const IAnalyzerTool *tool, StartMode mode) { + QString base = tool->displayName(); if (mode == StartRemote) return base + tr(" (Remote)"); return base; diff --git a/src/plugins/analyzerbase/ianalyzertool.h b/src/plugins/analyzerbase/ianalyzertool.h index 50e526ed2ec..1f6f23a49cb 100644 --- a/src/plugins/analyzerbase/ianalyzertool.h +++ b/src/plugins/analyzerbase/ianalyzertool.h @@ -78,12 +78,14 @@ public: /// Returns a user readable description name for this tool. virtual QString description() const = 0; /// Returns an id for the start action. - virtual QByteArray actionId(StartMode m) const { return defaultActionId(id(), m); } + virtual QByteArray actionId(StartMode mode) const + { return defaultActionId(this, mode); } /// Returns the menu group the start action should go to. - virtual QByteArray menuGroup(StartMode m) const { return defaultMenuGroup(m); } + virtual QByteArray menuGroup(StartMode mode) const + { return defaultMenuGroup(mode); } /// Returns a short user readable action name for this tool. - virtual QString actionName(StartMode m) const - { return defaultActionName(displayName(), m); } + virtual QString actionName(StartMode mode) const + { return defaultActionName(this, mode); } /** * The mode in which this tool should preferably be run @@ -97,14 +99,12 @@ public: ReleaseMode, AnyMode }; - virtual ToolMode mode() const = 0; - - static QString modeString(ToolMode mode); + virtual ToolMode toolMode() const = 0; /// Convenience implementation. - static QByteArray defaultMenuGroup(StartMode m); - static QByteArray defaultActionId(const QByteArray &id, StartMode m); - static QString defaultActionName(const QString &base, StartMode m); + static QByteArray defaultMenuGroup(StartMode mode); + static QByteArray defaultActionId(const IAnalyzerTool *tool, StartMode mode); + static QString defaultActionName(const IAnalyzerTool *tool, StartMode mode); static void defaultStartTool(IAnalyzerTool *tool, StartMode mode); /// This gets called after all analyzation tools where initialized. @@ -125,8 +125,8 @@ public: virtual IAnalyzerEngine *createEngine(const AnalyzerStartParameters &sp, ProjectExplorer::RunConfiguration *runConfiguration = 0) = 0; - virtual void startTool(StartMode m) - { return defaultStartTool(this, m); } + virtual void startTool(StartMode mode) + { return defaultStartTool(this, mode); } /// Called when tools gets selected. virtual void toolSelected() const {} diff --git a/src/plugins/debugger/debuggerconstants.h b/src/plugins/debugger/debuggerconstants.h index 7ff518a5b37..904d369606d 100644 --- a/src/plugins/debugger/debuggerconstants.h +++ b/src/plugins/debugger/debuggerconstants.h @@ -48,7 +48,7 @@ const char * const C_QMLDEBUGGER = "Qml/JavaScript Debugger"; // Project Explorer run mode (RUN/DEBUG) const char * const DEBUGMODE = "Debugger.DebugMode"; -const char * const DEBUGMODE2 = "Debugger.DebugMode2"; +const char * const DEBUGMODE2 = "Debugger.DebugMode2"; // Breaks on main. // Common actions (accessed by QML inspector) const char * const INTERRUPT = "Debugger.Interrupt"; diff --git a/src/plugins/qmlprofiler/qmlprofilerengine.cpp b/src/plugins/qmlprofiler/qmlprofilerengine.cpp index a1e700c3949..93b87f3dfdb 100644 --- a/src/plugins/qmlprofiler/qmlprofilerengine.cpp +++ b/src/plugins/qmlprofiler/qmlprofilerengine.cpp @@ -159,7 +159,7 @@ void QmlProfilerEngine::stop() void QmlProfilerEngine::stopped() { d->m_running = false; - AnalyzerManager::stopTool(tool()); + AnalyzerManager::stopTool(tool(), mode()); emit finished(); } diff --git a/src/plugins/qmlprofiler/qmlprofilertool.cpp b/src/plugins/qmlprofiler/qmlprofilertool.cpp index f766a555121..372ceccc919 100644 --- a/src/plugins/qmlprofiler/qmlprofilertool.cpp +++ b/src/plugins/qmlprofiler/qmlprofilertool.cpp @@ -121,6 +121,7 @@ public: QmlProfilerTool::QmlProfilerTool(QObject *parent) : IAnalyzerTool(parent), d(new QmlProfilerToolPrivate(this)) { + setObjectName("QmlProfilerTool"); d->m_client = 0; d->m_connectionAttempts = 0; d->m_traceWindow = 0; @@ -163,7 +164,7 @@ QString QmlProfilerTool::description() const "applications using QML."); } -IAnalyzerTool::ToolMode QmlProfilerTool::mode() const +IAnalyzerTool::ToolMode QmlProfilerTool::toolMode() const { return AnyMode; } diff --git a/src/plugins/qmlprofiler/qmlprofilertool.h b/src/plugins/qmlprofiler/qmlprofilertool.h index 15884b89481..50e3d1d55c0 100644 --- a/src/plugins/qmlprofiler/qmlprofilertool.h +++ b/src/plugins/qmlprofiler/qmlprofilertool.h @@ -51,7 +51,7 @@ public: QByteArray id() const; QString displayName() const; QString description() const; - ToolMode mode() const; + ToolMode toolMode() const; void extensionsInitialized() {} void initializeDockWidgets(); diff --git a/src/plugins/qmlprofiler/qmlprojectanalyzerruncontrolfactory.cpp b/src/plugins/qmlprofiler/qmlprojectanalyzerruncontrolfactory.cpp index e1171609dc2..7d5bb347526 100644 --- a/src/plugins/qmlprofiler/qmlprojectanalyzerruncontrolfactory.cpp +++ b/src/plugins/qmlprofiler/qmlprojectanalyzerruncontrolfactory.cpp @@ -68,6 +68,7 @@ AnalyzerStartParameters localStartParameters(ProjectExplorer::RunConfiguration * QmlProjectAnalyzerRunControlFactory::QmlProjectAnalyzerRunControlFactory(QObject *parent) : IRunControlFactory(parent) { + setObjectName(QLatin1String("QmlProjectAnalyzerRunControlFactory")); } bool QmlProjectAnalyzerRunControlFactory::canRun(RunConfiguration *runConfiguration, const QString &mode) const diff --git a/src/plugins/valgrind/callgrindtool.cpp b/src/plugins/valgrind/callgrindtool.cpp index 70dc87a05a7..88abedc536a 100644 --- a/src/plugins/valgrind/callgrindtool.cpp +++ b/src/plugins/valgrind/callgrindtool.cpp @@ -501,9 +501,9 @@ CallgrindTool::CallgrindTool(QObject *parent) : Analyzer::IAnalyzerTool(parent) { d = new CallgrindToolPrivate(this); - Core::ICore *core = Core::ICore::instance(); + setObjectName(QLatin1String("CallgrindTool")); - // EditorManager + Core::ICore *core = Core::ICore::instance(); QObject *editorManager = core->editorManager(); connect(editorManager, SIGNAL(editorOpened(Core::IEditor*)), d, SLOT(editorOpened(Core::IEditor*))); @@ -530,7 +530,7 @@ QString CallgrindTool::description() const "record function calls when a program runs."); } -IAnalyzerTool::ToolMode CallgrindTool::mode() const +IAnalyzerTool::ToolMode CallgrindTool::toolMode() const { return ReleaseMode; } diff --git a/src/plugins/valgrind/callgrindtool.h b/src/plugins/valgrind/callgrindtool.h index 6aba3c7b14a..517753287f3 100644 --- a/src/plugins/valgrind/callgrindtool.h +++ b/src/plugins/valgrind/callgrindtool.h @@ -51,7 +51,7 @@ public: QByteArray id() const; QString displayName() const; QString description() const; - ToolMode mode() const; + ToolMode toolMode() const; void extensionsInitialized(); void initializeDockWidgets(); diff --git a/src/plugins/valgrind/memchecktool.cpp b/src/plugins/valgrind/memchecktool.cpp index 7b7094f2900..b2b744ba95a 100644 --- a/src/plugins/valgrind/memchecktool.cpp +++ b/src/plugins/valgrind/memchecktool.cpp @@ -229,11 +229,6 @@ void MemcheckTool::settingsDestroyed(QObject *settings) m_settings = AnalyzerGlobalSettings::instance(); } -void MemcheckTool::extensionsInitialized() -{ - //ensureWidgets(); // FIXME: Try to do that later. -} - void MemcheckTool::maybeActiveRunConfigurationChanged() { ensureWidgets(); @@ -308,7 +303,7 @@ QString MemcheckTool::description() const "memory leaks"); } -IAnalyzerTool::ToolMode MemcheckTool::mode() const +IAnalyzerTool::ToolMode MemcheckTool::toolMode() const { return DebugMode; } diff --git a/src/plugins/valgrind/memchecktool.h b/src/plugins/valgrind/memchecktool.h index c83b4d6d84b..3035c0d7c3c 100644 --- a/src/plugins/valgrind/memchecktool.h +++ b/src/plugins/valgrind/memchecktool.h @@ -110,10 +110,10 @@ private slots: void suppressionActionTriggered(); private: - ToolMode mode() const; + ToolMode toolMode() const; void ensureWidgets(); void initializeDockWidgets(); - void extensionsInitialized(); + void extensionsInitialized() {} QWidget *createControlWidget(); Analyzer::IAnalyzerEngine *createEngine(const Analyzer::AnalyzerStartParameters &sp, @@ -122,7 +122,6 @@ private: void clearErrorView(); private: - bool m_local; Analyzer::AnalyzerSettings *m_settings; QMenu *m_filterMenu; diff --git a/src/plugins/valgrind/valgrindengine.cpp b/src/plugins/valgrind/valgrindengine.cpp index d3a01fc7e4e..26420cb65fb 100644 --- a/src/plugins/valgrind/valgrindengine.cpp +++ b/src/plugins/valgrind/valgrindengine.cpp @@ -130,7 +130,7 @@ QString ValgrindEngine::executable() const void ValgrindEngine::handleProgressCanceled() { - AnalyzerManager::stopTool(tool()); + AnalyzerManager::stopTool(tool(), mode()); } void ValgrindEngine::handleProgressFinished() From 1e79a68a14709c4255160a06c3278c6eb3ebadd8 Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 4 Jul 2011 10:49:23 +0200 Subject: [PATCH 058/143] analyzer: remover base analyzerruncontrolfactory There is no sensible base implementation for all potential tools. Change-Id: I99e98419a973dd50c6b245f2271ebed2c53f66b7 Reviewed-on: http://codereview.qt.nokia.com/1055 Reviewed-by: hjk --- .../analyzerruncontrolfactory.cpp | 96 ------------------- .../analyzerbase/analyzerruncontrolfactory.h | 71 -------------- 2 files changed, 167 deletions(-) delete mode 100644 src/plugins/analyzerbase/analyzerruncontrolfactory.cpp delete mode 100644 src/plugins/analyzerbase/analyzerruncontrolfactory.h diff --git a/src/plugins/analyzerbase/analyzerruncontrolfactory.cpp b/src/plugins/analyzerbase/analyzerruncontrolfactory.cpp deleted file mode 100644 index 2c173cb5930..00000000000 --- a/src/plugins/analyzerbase/analyzerruncontrolfactory.cpp +++ /dev/null @@ -1,96 +0,0 @@ -/************************************************************************** -** -** This file is part of Qt Creator -** -** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). -** -** Contact: Nokia Corporation (info@qt.nokia.com) -** -** -** GNU Lesser General Public License Usage -** -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this file. -** Please review the following information to ensure the GNU Lesser General -** Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** Other Usage -** -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** If you have questions regarding the use of this file, please contact -** Nokia at info@qt.nokia.com. -** -**************************************************************************/ - -#include "analyzerruncontrolfactory.h" -#include "analyzerruncontrol.h" -#include "analyzerconstants.h" -#include "analyzermanager.h" -#include "analyzerrunconfigwidget.h" -#include "analyzersettings.h" -#include "analyzerstartparameters.h" - -#include -#include - -#include - -using namespace Analyzer; -using namespace Analyzer::Internal; -using namespace ProjectExplorer; - -///////////////////////////////////////////////////////////////////////////////// -// -// AnalyzerRunControlFactory -// -///////////////////////////////////////////////////////////////////////////////// - -AnalyzerRunControlFactory::AnalyzerRunControlFactory(QObject *parent) - : IRunControlFactory(parent) -{ - setObjectName(QLatin1String("AnalyzerRunControlFactory")); -} - -bool AnalyzerRunControlFactory::canRun(RunConfiguration *runConfiguration, const QString &mode) const -{ - return runConfiguration->isEnabled() && mode == Constants::MODE_ANALYZE; -} - -RunControl *AnalyzerRunControlFactory::create(RunConfiguration *runConfiguration, const QString &mode) -{ - QTC_ASSERT(canRun(runConfiguration, mode), return 0); - return AnalyzerManager::createRunControl(runConfiguration, mode); -} - -QString AnalyzerRunControlFactory::displayName() const -{ - return tr("Analyzer"); -} - -IRunConfigurationAspect *AnalyzerRunControlFactory::createRunConfigurationAspect() -{ - return new AnalyzerProjectSettings; -} - -RunConfigWidget *AnalyzerRunControlFactory::createConfigurationWidget(RunConfiguration *runConfiguration) -{ - LocalApplicationRunConfiguration *localRc = - qobject_cast(runConfiguration); - if (!localRc) - return 0; - AnalyzerProjectSettings *settings = runConfiguration->extraAspect(); - if (!settings) - return 0; - - AnalyzerRunConfigWidget *ret = new AnalyzerRunConfigWidget; - ret->setRunConfiguration(runConfiguration); - return ret; -} diff --git a/src/plugins/analyzerbase/analyzerruncontrolfactory.h b/src/plugins/analyzerbase/analyzerruncontrolfactory.h deleted file mode 100644 index 573c87bbfff..00000000000 --- a/src/plugins/analyzerbase/analyzerruncontrolfactory.h +++ /dev/null @@ -1,71 +0,0 @@ -/************************************************************************** -** -** This file is part of Qt Creator -** -** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). -** -** Contact: Nokia Corporation (info@qt.nokia.com) -** -** -** GNU Lesser General Public License Usage -** -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this file. -** Please review the following information to ensure the GNU Lesser General -** Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** Other Usage -** -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** If you have questions regarding the use of this file, please contact -** Nokia at info@qt.nokia.com. -** -**************************************************************************/ - -#ifndef ANALYZERRUNCONTROLFACTORY_H -#define ANALYZERRUNCONTROLFACTORY_H - -#include - -namespace Analyzer { - -class AnalyzerRunControl; -class AnalyzerStartParameters; -class IAnalyzerTool; - -namespace Internal { - -class AnalyzerRunControlFactory: public ProjectExplorer::IRunControlFactory -{ - Q_OBJECT - -public: - AnalyzerRunControlFactory(QObject *parent = 0); - - typedef ProjectExplorer::RunConfiguration RunConfiguration; - typedef ProjectExplorer::RunControl RunControl; - - // IRunControlFactory - bool canRun(RunConfiguration *runConfiguration, const QString &mode) const; - RunControl *create(RunConfiguration *runConfiguration, const QString &mode); - QString displayName() const; - - ProjectExplorer::IRunConfigurationAspect *createRunConfigurationAspect(); - ProjectExplorer::RunConfigWidget *createConfigurationWidget(RunConfiguration *runConfiguration); - -signals: - void runControlCreated(Analyzer::AnalyzerRunControl *); -}; - -} // namespace Internal -} // namespace Analyzer - -#endif // ANALYZERRUNCONTROLFACTORY_H From 36a3028b9d3535dfcd1d144398f49ad518a3f27a Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 4 Jul 2011 10:50:44 +0200 Subject: [PATCH 059/143] analyzer: refactor progress Change-Id: If74c8035bc83a8113c2a15dcacefa38afbbbb4d8 Reviewed-on: http://codereview.qt.nokia.com/1056 Reviewed-by: hjk --- src/plugins/analyzerbase/analyzerbase.pro | 2 - src/plugins/analyzerbase/analyzerconstants.h | 5 +- src/plugins/analyzerbase/analyzermanager.cpp | 243 +++++------------- src/plugins/analyzerbase/analyzermanager.h | 12 +- .../analyzerbase/analyzerruncontrol.cpp | 10 +- src/plugins/analyzerbase/analyzerruncontrol.h | 3 +- src/plugins/analyzerbase/ianalyzertool.cpp | 12 - src/plugins/analyzerbase/ianalyzertool.h | 6 +- .../analyzerbase/startremotedialog.cpp | 4 +- src/plugins/analyzerbase/startremotedialog.h | 12 +- src/plugins/debugger/debuggerconstants.h | 2 +- .../qmlprofiler/codaqmlprofilerrunner.cpp | 2 +- src/plugins/qmlprofiler/qmlprofilerengine.cpp | 2 +- src/plugins/qmlprofiler/qmlprofilertool.cpp | 8 + src/plugins/qmlprofiler/qmlprofilertool.h | 1 + .../qmlprojectanalyzerruncontrolfactory.cpp | 9 +- src/plugins/valgrind/callgrindtool.cpp | 6 + src/plugins/valgrind/callgrindtool.h | 2 + src/plugins/valgrind/memchecktool.cpp | 6 + src/plugins/valgrind/memchecktool.h | 1 + src/plugins/valgrind/valgrindengine.cpp | 2 +- src/plugins/valgrind/valgrindplugin.cpp | 193 +++++++++++++- src/plugins/valgrind/valgrindplugin.h | 3 + 23 files changed, 317 insertions(+), 229 deletions(-) diff --git a/src/plugins/analyzerbase/analyzerbase.pro b/src/plugins/analyzerbase/analyzerbase.pro index ad33056b15a..e42ee34fa8c 100644 --- a/src/plugins/analyzerbase/analyzerbase.pro +++ b/src/plugins/analyzerbase/analyzerbase.pro @@ -15,7 +15,6 @@ SOURCES += \ ianalyzertool.cpp \ analyzerplugin.cpp \ analyzerruncontrol.cpp \ - analyzerruncontrolfactory.cpp \ analyzermanager.cpp \ analyzersettings.cpp \ analyzeroptionspage.cpp \ @@ -30,7 +29,6 @@ HEADERS += \ analyzerconstants.h \ analyzerplugin.h \ analyzerruncontrol.h \ - analyzerruncontrolfactory.h \ analyzermanager.h \ analyzersettings.h \ analyzerstartparameters.h \ diff --git a/src/plugins/analyzerbase/analyzerconstants.h b/src/plugins/analyzerbase/analyzerconstants.h index aa78ed1fd39..636d0e74772 100644 --- a/src/plugins/analyzerbase/analyzerconstants.h +++ b/src/plugins/analyzerbase/analyzerconstants.h @@ -45,17 +45,18 @@ public: explicit StartMode(int m = 0) : m(m) {} operator int() const { return m; } void operator=(int m_) { m = m_; } - // Often used modes. private: int m; }; +// Special values for currently used modes. +// Their meaning is interpreted by the individual tools. enum { StartLocal = -1, StartRemote = -2 }; namespace Constants { // modes and their priorities -const char * const MODE_ANALYZE = "Analyzer.Mode.Analyze"; +const char * const MODE_ANALYZE = "Mode.Analyze"; const int P_MODE_ANALYZE = 76; // context diff --git a/src/plugins/analyzerbase/analyzermanager.cpp b/src/plugins/analyzerbase/analyzermanager.cpp index d74034c8ede..1c9caaefe1a 100644 --- a/src/plugins/analyzerbase/analyzermanager.cpp +++ b/src/plugins/analyzerbase/analyzermanager.cpp @@ -37,12 +37,10 @@ #include "analyzerconstants.h" #include "analyzerplugin.h" #include "analyzerruncontrol.h" -#include "analyzerruncontrolfactory.h" #include "analyzeroptionspage.h" #include "analyzerstartparameters.h" #include "analyzerutils.h" #include "ianalyzertool.h" -#include "startremotedialog.h" #include #include @@ -76,10 +74,6 @@ #include #include -#include -#include -#include - #include #include #include @@ -101,6 +95,7 @@ using namespace Core; using namespace Analyzer::Internal; +using namespace ProjectExplorer; namespace Analyzer { namespace Internal { @@ -108,43 +103,11 @@ namespace Internal { const char LAST_ACTIVE_TOOL[] = "Analyzer.Plugin.LastActiveTool"; const char INITIAL_DOCK_AREA[] = "initial_dock_area"; -AnalyzerStartParameters localStartParameters(ProjectExplorer::RunConfiguration *runConfiguration) -{ - AnalyzerStartParameters sp; - QTC_ASSERT(runConfiguration, return sp); - ProjectExplorer::LocalApplicationRunConfiguration *rc = - qobject_cast(runConfiguration); - QTC_ASSERT(rc, return sp); - - sp.startMode = StartLocal; - sp.environment = rc->environment(); - sp.workingDirectory = rc->workingDirectory(); - sp.debuggee = rc->executable(); - sp.debuggeeArgs = rc->commandLineArguments(); - sp.displayName = rc->displayName(); - sp.connParams.host = QLatin1String("localhost"); - sp.connParams.port = rc->qmlDebugServerPort(); - return sp; -} - -AnalyzerStartParameters remoteLinuxStartParameters(ProjectExplorer::RunConfiguration *runConfiguration) -{ - AnalyzerStartParameters sp; - RemoteLinux::RemoteLinuxRunConfiguration * const rc - = qobject_cast(runConfiguration); - QTC_ASSERT(rc, return sp); - - sp.startMode = StartRemote; - sp.debuggee = rc->remoteExecutableFilePath(); - sp.debuggeeArgs = rc->arguments(); - sp.connParams = rc->deviceConfig()->sshParameters(); - sp.analyzerCmdPrefix = rc->commandPrefix(); - sp.displayName = rc->displayName(); - return sp; -} - - -// AnalyzerMode //////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////// +// +// AnalyzerMode +// +//////////////////////////////////////////////////////////////////// class AnalyzerMode : public Core::IMode { @@ -211,22 +174,18 @@ public: void addTool(IAnalyzerTool *tool, const StartModes &modes); void selectSavedTool(); void selectTool(IAnalyzerTool *tool, StartMode mode); - void stopTool(IAnalyzerTool *tool, StartMode mode); - void handleToolFinished(IAnalyzerTool *tool, StartMode mode); + void handleToolStarted(); + void handleToolFinished(); void saveToolSettings(IAnalyzerTool *tool, StartMode mode); void loadToolSettings(IAnalyzerTool *tool); QAction *actionFromToolAndMode(IAnalyzerTool *tool, StartMode mode); - ProjectExplorer::RunControl *createRunControl - (ProjectExplorer::RunConfiguration *runConfiguration, const QString &mode); - // Convenience. void startLocalTool(IAnalyzerTool *tool, StartMode mode); - void startRemoteTool(IAnalyzerTool *tool, StartMode mode); public slots: void startTool(); - void stopTool() { stopTool(m_currentTool, m_currentMode); } + //void stopTool(); void selectAction(); void selectAction(QAction *); @@ -238,8 +197,7 @@ public slots: public: AnalyzerManager *q; AnalyzerMode *m_mode; - AnalyzerRunControlFactory *m_runControlFactory; - ProjectExplorer::RunControl *m_currentRunControl; + bool m_isRunning; Utils::FancyMainWindow *m_mainWindow; IAnalyzerTool *m_currentTool; StartMode m_currentMode; @@ -267,8 +225,7 @@ public: AnalyzerManagerPrivate::AnalyzerManagerPrivate(AnalyzerManager *qq): q(qq), m_mode(0), - m_runControlFactory(0), - m_currentRunControl(0), + m_isRunning(false), m_mainWindow(0), m_currentTool(0), m_currentMode(), @@ -283,15 +240,11 @@ AnalyzerManagerPrivate::AnalyzerManagerPrivate(AnalyzerManager *qq): m_toolBox->setObjectName(QLatin1String("AnalyzerManagerToolBox")); connect(m_toolBox, SIGNAL(currentIndexChanged(int)), SLOT(selectAction(int))); - m_runControlFactory = new AnalyzerRunControlFactory(); - AnalyzerPlugin::instance()->addAutoReleasedObject(m_runControlFactory); - setupActions(); connect(ModeManager::instance(), SIGNAL(currentModeChanged(Core::IMode*)), this, SLOT(modeChanged(Core::IMode*))); - ProjectExplorer::ProjectExplorerPlugin *pe = - ProjectExplorer::ProjectExplorerPlugin::instance(); + ProjectExplorerPlugin *pe = ProjectExplorerPlugin::instance(); connect(pe, SIGNAL(updateRunActions()), SLOT(updateRunActions())); } @@ -335,7 +288,7 @@ void AnalyzerManagerPrivate::setupActions() m_stopAction->setEnabled(false); m_stopAction->setIcon(QIcon(Constants::ANALYZER_CONTROL_STOP_ICON)); command = am->registerAction(m_stopAction, Constants::STOP, globalcontext); - connect(m_stopAction, SIGNAL(triggered()), this, SLOT(stopTool())); + //connect(m_stopAction, SIGNAL(triggered()), this, SLOT(stopTool())); QAction *separatorAction = new QAction(m_menu); separatorAction->setSeparator(true); @@ -384,8 +337,8 @@ void AnalyzerManagerPrivate::createModeMainWindow() m_mainWindow->setObjectName(QLatin1String("AnalyzerManagerMainWindow")); m_mainWindow->setDocumentMode(true); m_mainWindow->setDockNestingEnabled(true); - m_mainWindow->setDockActionsVisible(ModeManager::instance()->currentMode()->id() == - Constants::MODE_ANALYZE); + m_mainWindow->setDockActionsVisible(false); + //ModeManager::instance()->currentMode() cannot be us yet. connect(m_mainWindow, SIGNAL(resetLayout()), SLOT(resetLayout())); QBoxLayout *editorHolderLayout = new QVBoxLayout; @@ -459,16 +412,16 @@ void AnalyzerManagerPrivate::addDock(Qt::DockWidgetArea area, QDockWidget *dockW } bool buildTypeAccepted(IAnalyzerTool::ToolMode toolMode, - ProjectExplorer::BuildConfiguration::BuildType buildType) + BuildConfiguration::BuildType buildType) { if (toolMode == IAnalyzerTool::AnyMode) return true; - if (buildType == ProjectExplorer::BuildConfiguration::Unknown) + if (buildType == BuildConfiguration::Unknown) return true; - if (buildType == ProjectExplorer::BuildConfiguration::Debug + if (buildType == BuildConfiguration::Debug && toolMode == IAnalyzerTool::DebugMode) return true; - if (buildType == ProjectExplorer::BuildConfiguration::Release + if (buildType == BuildConfiguration::Release && toolMode == IAnalyzerTool::ReleaseMode) return true; return false; @@ -491,52 +444,6 @@ bool AnalyzerManagerPrivate::showPromptDialog(const QString &title, const QStrin return messageBox.clickedStandardButton() == QDialogButtonBox::Yes; } -ProjectExplorer::RunControl *AnalyzerManagerPrivate::createRunControl - (ProjectExplorer::RunConfiguration *runConfiguration, const QString &mode) -{ - Q_UNUSED(mode); - - // FIXME: Move to tool implementations. - AnalyzerStartParameters sp; - if (qobject_cast(runConfiguration)) { - sp = localStartParameters(runConfiguration); - } else if (qobject_cast(runConfiguration)) { - sp = remoteLinuxStartParameters(runConfiguration); - } else { - // Might be S60DeviceRunfiguration, or something else ... - //sp.startMode = StartRemote; - sp.startMode = m_currentMode; - } - - IAnalyzerTool *tool = m_currentTool; - AnalyzerRunControl *rc = new AnalyzerRunControl(tool, sp, runConfiguration); - m_currentRunControl = rc; - return rc; -} - -void AnalyzerManagerPrivate::startRemoteTool(IAnalyzerTool *tool, StartMode mode) -{ - Q_UNUSED(tool); - StartRemoteDialog dlg; - if (dlg.exec() != QDialog::Accepted) - return; - - AnalyzerStartParameters sp; - sp.toolId = tool->id(); - sp.startMode = mode; - sp.connParams = dlg.sshParams(); - sp.debuggee = dlg.executable(); - sp.debuggeeArgs = dlg.arguments(); - sp.displayName = dlg.executable(); - sp.workingDirectory = dlg.workingDirectory(); - - AnalyzerRunControl *rc = new AnalyzerRunControl(tool, sp, 0); - m_currentRunControl = rc; - - ProjectExplorer::ProjectExplorerPlugin::instance() - ->startRunControl(rc, Constants::MODE_ANALYZE); -} - void AnalyzerManagerPrivate::startLocalTool(IAnalyzerTool *tool, StartMode mode) { int index = m_tools.indexOf(tool); @@ -548,17 +455,17 @@ void AnalyzerManagerPrivate::startLocalTool(IAnalyzerTool *tool, StartMode mode) // Make sure mode is shown. q->showMode(); - ProjectExplorer::ProjectExplorerPlugin *pe = ProjectExplorer::ProjectExplorerPlugin::instance(); + ProjectExplorerPlugin *pe = ProjectExplorerPlugin::instance(); // ### not sure if we're supposed to check if the RunConFiguration isEnabled - ProjectExplorer::Project *pro = pe->startupProject(); - const ProjectExplorer::RunConfiguration *runConfig = 0; - ProjectExplorer::BuildConfiguration::BuildType buildType = ProjectExplorer::BuildConfiguration::Unknown; + Project *pro = pe->startupProject(); + const RunConfiguration *runConfig = 0; + BuildConfiguration::BuildType buildType = BuildConfiguration::Unknown; if (pro) { - if (const ProjectExplorer::Target *target = pro->activeTarget()) { + if (const Target *target = pro->activeTarget()) { runConfig = target->activeRunConfiguration(); // Build configuration is 0 for QML projects. - if (const ProjectExplorer::BuildConfiguration *buildConfig = target->activeBuildConfiguration()) + if (const BuildConfiguration *buildConfig = target->activeBuildConfiguration()) buildType = buildConfig->buildType(); } } @@ -566,7 +473,7 @@ void AnalyzerManagerPrivate::startLocalTool(IAnalyzerTool *tool, StartMode mode) return; // Check if there already is an analyzer run. - if (m_currentRunControl) { + if (m_isRunning) { // ask if user wants to restart the analyzer const QString msg = tr("
      %1 is still running. " "You have to quit the Analyzer before being able to run another instance." @@ -579,7 +486,7 @@ void AnalyzerManagerPrivate::startLocalTool(IAnalyzerTool *tool, StartMode mode) // user selected to stop the active run. stop it, activate restart on stop m_restartOnStop = true; - stopTool(m_currentTool, m_currentMode); + q->stopTool(); return; } @@ -589,10 +496,11 @@ void AnalyzerManagerPrivate::startLocalTool(IAnalyzerTool *tool, StartMode mode) // if not, notify the user and urge him to use the correct mode. if (!buildTypeAccepted(toolMode, buildType)) { const QString toolName = tool->displayName(); - const QString currentMode = buildType == ProjectExplorer::BuildConfiguration::Debug ? tr("Debug") : tr("Release"); + const QString currentMode = + buildType == BuildConfiguration::Debug ? tr("Debug") : tr("Release"); QSettings *settings = Core::ICore::instance()->settings(); - const QString configKey = QLatin1String(Constants::MODE_ANALYZE) + QLatin1Char('/') + QLatin1String("AnalyzeCorrectMode"); + const QString configKey = QLatin1String("Analyzer.AnalyzeCorrectMode"); int ret; if (settings->contains(configKey)) { ret = settings->value(configKey, QDialog::Accepted).toInt(); @@ -607,16 +515,18 @@ void AnalyzerManagerPrivate::startLocalTool(IAnalyzerTool *tool, StartMode mode) break; } const QString title = tr("Run %1 in %2 Mode?").arg(toolName).arg(currentMode); - const QString message = tr("

      You are trying to run the tool '%1' on an application in %2 mode. " - "The tool is designed to be used in %3 mode.

      " - "Do you want to continue and run it in %2 mode?

      "). - arg(toolName).arg(currentMode).arg(toolModeString); + const QString message = tr("

      You are trying " + "to run the tool \"%1\" on an application in %2 mode. " + "The tool is designed to be used in %3 mode.

      " + "Do you want to continue and run it in %2 mode?

      ") + .arg(toolName).arg(currentMode).arg(toolModeString); const QString checkBoxText = tr("&Do not ask again"); bool checkBoxSetting = false; const QDialogButtonBox::StandardButton button = - Utils::CheckableMessageBox::question(Core::ICore::instance()->mainWindow(), title, message, checkBoxText, - &checkBoxSetting, QDialogButtonBox::Yes|QDialogButtonBox::Cancel, - QDialogButtonBox::Cancel); + Utils::CheckableMessageBox::question(Core::ICore::instance()->mainWindow(), + title, message, checkBoxText, + &checkBoxSetting, QDialogButtonBox::Yes|QDialogButtonBox::Cancel, + QDialogButtonBox::Cancel); ret = button == QDialogButtonBox::Yes ? QDialog::Accepted : QDialog::Rejected; if (checkBoxSetting && ret == QDialog::Accepted) @@ -626,8 +536,8 @@ void AnalyzerManagerPrivate::startLocalTool(IAnalyzerTool *tool, StartMode mode) return; } - pe->runProject(pro, Constants::MODE_ANALYZE); - + m_isRunning = true; + pe->runProject(pro, tool->id()); updateRunActions(); } @@ -636,27 +546,9 @@ void AnalyzerManagerPrivate::startTool() m_currentTool->startTool(m_currentMode); } -void AnalyzerManagerPrivate::stopTool(IAnalyzerTool *tool, StartMode mode) -{ - QTC_ASSERT(tool == m_currentTool, /**/); - QTC_ASSERT(mode == m_currentMode, /**/); - if (m_currentRunControl) - return; - - // be sure to call handleToolFinished only once, and only when the engine is really finished - if (m_currentRunControl->stop() == ProjectExplorer::RunControl::StoppedSynchronously) - handleToolFinished(tool, mode); - // else: wait for the finished() signal to trigger handleToolFinished() -} - void AnalyzerManagerPrivate::modeChanged(IMode *mode) { - if (!m_mainWindow) - return; - const bool makeVisible = mode->id() == Constants::MODE_ANALYZE; - if (!makeVisible) - return; - m_mainWindow->setDockActionsVisible(makeVisible); + m_mainWindow->setDockActionsVisible(mode == m_mode); } QAction *AnalyzerManagerPrivate::actionFromToolAndMode(IAnalyzerTool *tool, StartMode mode) @@ -784,11 +676,14 @@ void AnalyzerManagerPrivate::addTool(IAnalyzerTool *tool, const StartModes &mode m_toolBox->setEnabled(true); } -void AnalyzerManagerPrivate::handleToolFinished(IAnalyzerTool *tool, StartMode mode) +void AnalyzerManagerPrivate::handleToolStarted() { - QTC_ASSERT(tool == m_currentTool, /**/); - QTC_ASSERT(mode == m_currentMode, /**/); - m_currentRunControl = 0; + m_isRunning = true; // FIXME: Make less global. +} + +void AnalyzerManagerPrivate::handleToolFinished() +{ + m_isRunning = false; updateRunActions(); if (m_restartOnStop) { @@ -823,26 +718,24 @@ void AnalyzerManagerPrivate::saveToolSettings(IAnalyzerTool *tool, StartMode mod void AnalyzerManagerPrivate::updateRunActions() { - ProjectExplorer::ProjectExplorerPlugin *pe = - ProjectExplorer::ProjectExplorerPlugin::instance(); - ProjectExplorer::Project *project = pe->startupProject(); + ProjectExplorerPlugin *pe = ProjectExplorerPlugin::instance(); + Project *project = pe->startupProject(); - bool startEnabled = !m_currentRunControl - && pe->canRun(project, Constants::MODE_ANALYZE) - && m_currentTool; + bool startEnabled = !m_isRunning + && m_currentTool && pe->canRun(project, m_currentTool->id()); QString disabledReason; - if (m_currentRunControl) + if (m_isRunning) disabledReason = tr("An analysis is still in progress."); else if (!m_currentTool) disabledReason = tr("No analyzer tool selected."); else - disabledReason = pe->cannotRunReason(project, Constants::MODE_ANALYZE); + disabledReason = pe->cannotRunReason(project, m_currentTool->id()); m_startAction->setEnabled(startEnabled); m_startAction->setToolTip(disabledReason); - m_toolBox->setEnabled(!m_currentRunControl); - m_stopAction->setEnabled(m_currentRunControl); + m_toolBox->setEnabled(!m_isRunning); + m_stopAction->setEnabled(m_isRunning); } //////////////////////////////////////////////////////////////////// @@ -948,9 +841,9 @@ void AnalyzerManager::showMode() ModeManager::instance()->activateMode(m_instance->d->m_mode->id()); } -void AnalyzerManager::stopTool(IAnalyzerTool *tool, StartMode mode) +void AnalyzerManager::stopTool() { - m_instance->d->stopTool(tool, mode); + stopAction()->trigger(); } void AnalyzerManager::startLocalTool(IAnalyzerTool *tool, StartMode mode) @@ -958,26 +851,20 @@ void AnalyzerManager::startLocalTool(IAnalyzerTool *tool, StartMode mode) m_instance->d->startLocalTool(tool, mode); } -void AnalyzerManager::startRemoteTool(IAnalyzerTool *tool, StartMode mode) +QAction *AnalyzerManager::stopAction() { - m_instance->d->startRemoteTool(tool, mode); + return m_instance->d->m_stopAction; } -ProjectExplorer::RunControl *AnalyzerManager::createRunControl - (ProjectExplorer::RunConfiguration *runConfiguration, const QString &mode) +void AnalyzerManager::handleToolFinished() { - return m_instance->d->createRunControl(runConfiguration, mode); + m_instance->d->handleToolFinished(); } -void AnalyzerManager::handleToolFinished(IAnalyzerTool *tool, StartMode mode) -{ - m_instance->d->handleToolFinished(tool, mode); -} - -IAnalyzerTool *AnalyzerManager::toolById(const QByteArray &id) +IAnalyzerTool *AnalyzerManager::toolFromId(const QByteArray &id) { foreach (IAnalyzerTool *tool, m_instance->d->m_tools) - if (tool->id() == id) + if (id.startsWith(tool->id())) return tool; QTC_ASSERT(false, qDebug() << "NO ANAYLYZER TOOL FOUND FOR ID" << id); return 0; diff --git a/src/plugins/analyzerbase/analyzermanager.h b/src/plugins/analyzerbase/analyzermanager.h index 0c66e9ff780..26bb66a0a86 100644 --- a/src/plugins/analyzerbase/analyzermanager.h +++ b/src/plugins/analyzerbase/analyzermanager.h @@ -67,12 +67,10 @@ public: void extensionsInitialized(); void shutdown(); - static ProjectExplorer::RunControl *createRunControl - (ProjectExplorer::RunConfiguration *runConfiguration, const QString &mode); - // Register a tool and initialize it. static void addTool(IAnalyzerTool *tool, const StartModes &mode); - static IAnalyzerTool *toolById(const QByteArray &id); + static IAnalyzerTool *toolFromId(const QByteArray &id); + static StartMode modeFromId(const QByteArray &id); // Dockwidgets are registered to the main window. static QDockWidget *createDockWidget(IAnalyzerTool *tool, const QString &title, @@ -83,11 +81,10 @@ public: static void showMode(); static void selectTool(IAnalyzerTool *tool, StartMode mode); static void startTool(IAnalyzerTool *tool, StartMode mode); - static void stopTool(IAnalyzerTool *tool, StartMode mode); + static void stopTool(); // Convenience functions. static void startLocalTool(IAnalyzerTool *tool, StartMode mode); - static void startRemoteTool(IAnalyzerTool *tool, StartMode mode); static QString msgToolStarted(const QString &name); static QString msgToolFinished(const QString &name, int issuesFound); @@ -95,7 +92,8 @@ public: static void showStatusMessage(const QString &message, int timeoutMS = 10000); static void showPermanentStatusMessage(const QString &message); - static void handleToolFinished(IAnalyzerTool *tool, StartMode mode); + static void handleToolFinished(); + static QAction *stopAction(); private: friend class AnalyzerManagerPrivate; diff --git a/src/plugins/analyzerbase/analyzerruncontrol.cpp b/src/plugins/analyzerbase/analyzerruncontrol.cpp index efa2ecebb0d..ce87636400c 100644 --- a/src/plugins/analyzerbase/analyzerruncontrol.cpp +++ b/src/plugins/analyzerbase/analyzerruncontrol.cpp @@ -70,7 +70,7 @@ AnalyzerRunControl::Private::Private() // AnalyzerRunControl //////////////////////////////////////////////////// AnalyzerRunControl::AnalyzerRunControl(IAnalyzerTool *tool, const AnalyzerStartParameters &sp, RunConfiguration *runConfiguration) - : RunControl(runConfiguration, Constants::MODE_ANALYZE), + : RunControl(runConfiguration, tool->id()), d(new Private) { d->m_engine = tool->createEngine(sp, runConfiguration); @@ -123,6 +123,12 @@ ProjectExplorer::RunControl::StopResult AnalyzerRunControl::stop() return AsynchronousStop; } +void AnalyzerRunControl::stopIt() +{ + if (stop() == ProjectExplorer::RunControl::StoppedSynchronously) + AnalyzerManager::handleToolFinished(); +} + void AnalyzerRunControl::engineFinished() { d->m_isRunning = false; @@ -131,7 +137,7 @@ void AnalyzerRunControl::engineFinished() void AnalyzerRunControl::runControlFinished() { - AnalyzerManager::handleToolFinished(d->m_engine->tool(), d->m_engine->mode()); + AnalyzerManager::handleToolFinished(); } bool AnalyzerRunControl::isRunning() const diff --git a/src/plugins/analyzerbase/analyzerruncontrol.h b/src/plugins/analyzerbase/analyzerruncontrol.h index e066ccfac4d..046aa847ec3 100644 --- a/src/plugins/analyzerbase/analyzerruncontrol.h +++ b/src/plugins/analyzerbase/analyzerruncontrol.h @@ -47,7 +47,7 @@ namespace Analyzer { class AnalyzerStartParameters; class IAnalyzerTool; -class ANALYZER_EXPORT AnalyzerRunControl: public ProjectExplorer::RunControl +class ANALYZER_EXPORT AnalyzerRunControl : public ProjectExplorer::RunControl { Q_OBJECT @@ -65,6 +65,7 @@ public: QIcon icon() const; private slots: + void stopIt(); void receiveOutput(const QString &, Utils::OutputFormat format); void addTask(ProjectExplorer::Task::TaskType type, const QString &description, diff --git a/src/plugins/analyzerbase/ianalyzertool.cpp b/src/plugins/analyzerbase/ianalyzertool.cpp index 2e234cc11d4..f0dce04541c 100644 --- a/src/plugins/analyzerbase/ianalyzertool.cpp +++ b/src/plugins/analyzerbase/ianalyzertool.cpp @@ -64,16 +64,4 @@ QString IAnalyzerTool::defaultActionName(const IAnalyzerTool *tool, StartMode mo return base; } -void IAnalyzerTool::defaultStartTool(IAnalyzerTool *tool, StartMode mode) -{ - if (mode == StartLocal) - AnalyzerManager::startLocalTool(tool, mode); - if (mode == StartRemote) - AnalyzerManager::startRemoteTool(tool, mode); -} - -void IAnalyzerTool::initializeDockWidgets() -{ -} - } // namespace Analyzer diff --git a/src/plugins/analyzerbase/ianalyzertool.h b/src/plugins/analyzerbase/ianalyzertool.h index 1f6f23a49cb..5ddcde892a4 100644 --- a/src/plugins/analyzerbase/ianalyzertool.h +++ b/src/plugins/analyzerbase/ianalyzertool.h @@ -105,7 +105,6 @@ public: static QByteArray defaultMenuGroup(StartMode mode); static QByteArray defaultActionId(const IAnalyzerTool *tool, StartMode mode); static QString defaultActionName(const IAnalyzerTool *tool, StartMode mode); - static void defaultStartTool(IAnalyzerTool *tool, StartMode mode); /// This gets called after all analyzation tools where initialized. virtual void extensionsInitialized() = 0; @@ -114,7 +113,7 @@ public: * This is called to add all dock widgets if tool becomes active first time. * \sa AnalzyerManager::createDockWidget */ - virtual void initializeDockWidgets(); + virtual void initializeDockWidgets() {} /// Returns a control widget which will be shown in the status bar when /// this tool is selected. Must be non-zero. @@ -125,8 +124,7 @@ public: virtual IAnalyzerEngine *createEngine(const AnalyzerStartParameters &sp, ProjectExplorer::RunConfiguration *runConfiguration = 0) = 0; - virtual void startTool(StartMode mode) - { return defaultStartTool(this, mode); } + virtual void startTool(StartMode mode) = 0; /// Called when tools gets selected. virtual void toolSelected() const {} diff --git a/src/plugins/analyzerbase/startremotedialog.cpp b/src/plugins/analyzerbase/startremotedialog.cpp index cfb28595760..2fdec91bea1 100644 --- a/src/plugins/analyzerbase/startremotedialog.cpp +++ b/src/plugins/analyzerbase/startremotedialog.cpp @@ -40,8 +40,8 @@ namespace Analyzer { -StartRemoteDialog::StartRemoteDialog(QWidget *parent, Qt::WindowFlags f) - : QDialog(parent, f) +StartRemoteDialog::StartRemoteDialog(QWidget *parent) + : QDialog(parent) , m_ui(new Ui::StartRemoteDialog) { m_ui->setupUi(this); diff --git a/src/plugins/analyzerbase/startremotedialog.h b/src/plugins/analyzerbase/startremotedialog.h index 24f32b775f2..258d45554f5 100644 --- a/src/plugins/analyzerbase/startremotedialog.h +++ b/src/plugins/analyzerbase/startremotedialog.h @@ -33,12 +33,11 @@ #ifndef STARTREMOTEDIALOG_H #define STARTREMOTEDIALOG_H -#include +#include "analyzerbase_global.h" #include -QT_BEGIN_NAMESPACE -QT_END_NAMESPACE +#include namespace Analyzer { @@ -46,11 +45,12 @@ namespace Ui { class StartRemoteDialog; } -class StartRemoteDialog : public QDialog { +class ANALYZER_EXPORT StartRemoteDialog : public QDialog +{ Q_OBJECT public: - explicit StartRemoteDialog(QWidget *parent = 0, Qt::WindowFlags f = 0); + explicit StartRemoteDialog(QWidget *parent = 0); virtual ~StartRemoteDialog(); Utils::SshConnectionParameters sshParams() const; @@ -66,6 +66,6 @@ private: Ui::StartRemoteDialog *m_ui; }; -} +} // namespace Analyzer #endif // STARTREMOTEDIALOG_H diff --git a/src/plugins/debugger/debuggerconstants.h b/src/plugins/debugger/debuggerconstants.h index 904d369606d..14e71f2d2ee 100644 --- a/src/plugins/debugger/debuggerconstants.h +++ b/src/plugins/debugger/debuggerconstants.h @@ -39,7 +39,7 @@ namespace Debugger { namespace Constants { // Debug mode -const char * const MODE_DEBUG = "Debugger.Mode.Debug"; +const char * const MODE_DEBUG = "Mode.Debug"; // Contexts const char * const C_DEBUGMODE = "Debugger.DebugMode"; diff --git a/src/plugins/qmlprofiler/codaqmlprofilerrunner.cpp b/src/plugins/qmlprofiler/codaqmlprofilerrunner.cpp index 4e4b91559c2..1cc93a8cf1c 100644 --- a/src/plugins/qmlprofiler/codaqmlprofilerrunner.cpp +++ b/src/plugins/qmlprofiler/codaqmlprofilerrunner.cpp @@ -50,7 +50,7 @@ CodaQmlProfilerRunner::CodaQmlProfilerRunner(S60DeviceRunConfiguration *configur QObject *parent) : AbstractQmlProfilerRunner(parent), m_configuration(configuration), - m_runControl(new CodaRunControl(configuration, Analyzer::Constants::MODE_ANALYZE)) + m_runControl(new CodaRunControl(configuration, "QmlProfiler")) { connect(m_runControl, SIGNAL(finished()), this, SIGNAL(stopped())); connect(m_runControl, diff --git a/src/plugins/qmlprofiler/qmlprofilerengine.cpp b/src/plugins/qmlprofiler/qmlprofilerengine.cpp index 93b87f3dfdb..1de1e399bc1 100644 --- a/src/plugins/qmlprofiler/qmlprofilerengine.cpp +++ b/src/plugins/qmlprofiler/qmlprofilerengine.cpp @@ -159,7 +159,7 @@ void QmlProfilerEngine::stop() void QmlProfilerEngine::stopped() { d->m_running = false; - AnalyzerManager::stopTool(tool(), mode()); + AnalyzerManager::stopTool(); // FIXME: Needed? emit finished(); } diff --git a/src/plugins/qmlprofiler/qmlprofilertool.cpp b/src/plugins/qmlprofiler/qmlprofilertool.cpp index 372ceccc919..597cd07e7c8 100644 --- a/src/plugins/qmlprofiler/qmlprofilertool.cpp +++ b/src/plugins/qmlprofiler/qmlprofilertool.cpp @@ -541,3 +541,11 @@ void QmlProfilerTool::updateRecordingState() if (d->m_traceWindow->isRecording()) clearDisplay(); } + +void QmlProfilerTool::startTool(StartMode mode) +{ + if (mode == StartLocal) + AnalyzerManager::startLocalTool(this, mode); + if (mode == StartRemote) + AnalyzerManager::startLocalTool(this, mode); +} diff --git a/src/plugins/qmlprofiler/qmlprofilertool.h b/src/plugins/qmlprofiler/qmlprofilertool.h index 50e3d1d55c0..f3d9b3063ea 100644 --- a/src/plugins/qmlprofiler/qmlprofilertool.h +++ b/src/plugins/qmlprofiler/qmlprofilertool.h @@ -62,6 +62,7 @@ public: ProjectExplorer::RunConfiguration *runConfiguration = 0); QWidget *createControlWidget(); + void startTool(Analyzer::StartMode mode); public slots: void connectClient(int port); diff --git a/src/plugins/qmlprofiler/qmlprojectanalyzerruncontrolfactory.cpp b/src/plugins/qmlprofiler/qmlprojectanalyzerruncontrolfactory.cpp index 7d5bb347526..4df11ab6144 100644 --- a/src/plugins/qmlprofiler/qmlprojectanalyzerruncontrolfactory.cpp +++ b/src/plugins/qmlprofiler/qmlprojectanalyzerruncontrolfactory.cpp @@ -45,7 +45,7 @@ using namespace Analyzer; using namespace ProjectExplorer; using namespace QmlProfiler::Internal; -AnalyzerStartParameters localStartParameters(ProjectExplorer::RunConfiguration *runConfiguration) +static AnalyzerStartParameters localStartParameters(ProjectExplorer::RunConfiguration *runConfiguration) { AnalyzerStartParameters sp; QTC_ASSERT(runConfiguration, return sp); @@ -73,9 +73,8 @@ QmlProjectAnalyzerRunControlFactory::QmlProjectAnalyzerRunControlFactory(QObject bool QmlProjectAnalyzerRunControlFactory::canRun(RunConfiguration *runConfiguration, const QString &mode) const { - if (!qobject_cast(runConfiguration)) - return false; - return mode == Constants::MODE_ANALYZE; + return mode.startsWith(QLatin1String("QmlProfiler")) + && qobject_cast(runConfiguration); } RunControl *QmlProjectAnalyzerRunControlFactory::create(RunConfiguration *runConfiguration, const QString &mode) @@ -88,7 +87,7 @@ RunControl *QmlProjectAnalyzerRunControlFactory::create(RunConfiguration *runCon AnalyzerRunControl *QmlProjectAnalyzerRunControlFactory::create (const Analyzer::AnalyzerStartParameters &sp, RunConfiguration *runConfiguration) { - return new AnalyzerRunControl(AnalyzerManager::toolById(sp.toolId), sp, runConfiguration); + return new AnalyzerRunControl(AnalyzerManager::toolFromId(sp.toolId), sp, runConfiguration); } QString QmlProjectAnalyzerRunControlFactory::displayName() const diff --git a/src/plugins/valgrind/callgrindtool.cpp b/src/plugins/valgrind/callgrindtool.cpp index 88abedc536a..7e0ea98b195 100644 --- a/src/plugins/valgrind/callgrindtool.cpp +++ b/src/plugins/valgrind/callgrindtool.cpp @@ -47,6 +47,7 @@ #include #include #include +#include #include #include @@ -679,6 +680,11 @@ IAnalyzerEngine *CallgrindToolPrivate::createEngine(const AnalyzerStartParameter return engine; } +void CallgrindTool::startTool(StartMode mode) +{ + ValgrindPlugin::startValgrindTool(this, mode); +} + QWidget *CallgrindTool::createControlWidget() { return d->createControlWidget(); diff --git a/src/plugins/valgrind/callgrindtool.h b/src/plugins/valgrind/callgrindtool.h index 517753287f3..64b034d6409 100644 --- a/src/plugins/valgrind/callgrindtool.h +++ b/src/plugins/valgrind/callgrindtool.h @@ -60,6 +60,8 @@ public: ProjectExplorer::RunConfiguration *runConfiguration = 0); QWidget *createControlWidget(); + void startTool(Analyzer::StartMode mode); + private: CallgrindToolPrivate *d; }; diff --git a/src/plugins/valgrind/memchecktool.cpp b/src/plugins/valgrind/memchecktool.cpp index b2b744ba95a..52ad2a8aa02 100644 --- a/src/plugins/valgrind/memchecktool.cpp +++ b/src/plugins/valgrind/memchecktool.cpp @@ -37,6 +37,7 @@ #include "memcheckerrorview.h" #include "memchecksettings.h" #include "valgrindsettings.h" +#include "valgrindplugin.h" #include #include @@ -466,6 +467,11 @@ IAnalyzerEngine *MemcheckTool::createEngine(const AnalyzerStartParameters &sp, return engine; } +void MemcheckTool::startTool(StartMode mode) +{ + ValgrindPlugin::startValgrindTool(this, mode); +} + void MemcheckTool::engineStarting(const IAnalyzerEngine *engine) { clearErrorView(); diff --git a/src/plugins/valgrind/memchecktool.h b/src/plugins/valgrind/memchecktool.h index 3035c0d7c3c..6f00fa70f9c 100644 --- a/src/plugins/valgrind/memchecktool.h +++ b/src/plugins/valgrind/memchecktool.h @@ -118,6 +118,7 @@ private: Analyzer::IAnalyzerEngine *createEngine(const Analyzer::AnalyzerStartParameters &sp, ProjectExplorer::RunConfiguration *runConfiguration = 0); + void startTool(Analyzer::StartMode mode); void clearErrorView(); diff --git a/src/plugins/valgrind/valgrindengine.cpp b/src/plugins/valgrind/valgrindengine.cpp index 26420cb65fb..3b7279d6fc2 100644 --- a/src/plugins/valgrind/valgrindengine.cpp +++ b/src/plugins/valgrind/valgrindengine.cpp @@ -130,7 +130,7 @@ QString ValgrindEngine::executable() const void ValgrindEngine::handleProgressCanceled() { - AnalyzerManager::stopTool(tool(), mode()); + AnalyzerManager::stopTool(); } void ValgrindEngine::handleProgressFinished() diff --git a/src/plugins/valgrind/valgrindplugin.cpp b/src/plugins/valgrind/valgrindplugin.cpp index 869c6fcd5d4..c5ec6cf839b 100644 --- a/src/plugins/valgrind/valgrindplugin.cpp +++ b/src/plugins/valgrind/valgrindplugin.cpp @@ -33,21 +33,197 @@ **************************************************************************/ #include "valgrindplugin.h" -#include "valgrindsettings.h" -#include "callgrindtool.h" + #include "callgrindsettings.h" -#include "memchecktool.h" +#include "callgrindtool.h" #include "memchecksettings.h" +#include "memchecktool.h" +#include "valgrindsettings.h" -#include +#include #include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include + +#include #include #include +#include using namespace Analyzer; using namespace Valgrind::Internal; +using namespace ProjectExplorer; +///////////////////////////////////////////////////////////////////////////////// +// +// ValgrindRunControlFactory +// +///////////////////////////////////////////////////////////////////////////////// + +namespace Valgrind { +namespace Internal { + +static AnalyzerStartParameters localStartParameters(RunConfiguration *runConfiguration) +{ + AnalyzerStartParameters sp; + QTC_ASSERT(runConfiguration, return sp); + LocalApplicationRunConfiguration *rc = + qobject_cast(runConfiguration); + QTC_ASSERT(rc, return sp); + + sp.startMode = StartLocal; + sp.environment = rc->environment(); + sp.workingDirectory = rc->workingDirectory(); + sp.debuggee = rc->executable(); + sp.debuggeeArgs = rc->commandLineArguments(); + sp.displayName = rc->displayName(); + sp.connParams.host = QLatin1String("localhost"); + sp.connParams.port = rc->qmlDebugServerPort(); + return sp; +} + +static AnalyzerStartParameters remoteLinuxStartParameters(RunConfiguration *runConfiguration) +{ + AnalyzerStartParameters sp; + RemoteLinux::RemoteLinuxRunConfiguration * const rc + = qobject_cast(runConfiguration); + QTC_ASSERT(rc, return sp); + + sp.startMode = StartRemote; + sp.debuggee = rc->remoteExecutableFilePath(); + sp.debuggeeArgs = rc->arguments(); + sp.connParams = rc->deviceConfig()->sshParameters(); + sp.analyzerCmdPrefix = rc->commandPrefix(); + sp.displayName = rc->displayName(); + return sp; +} + + +class ValgrindRunControlFactory: public ProjectExplorer::IRunControlFactory +{ + Q_OBJECT + +public: + ValgrindRunControlFactory(QObject *parent = 0); + + typedef ProjectExplorer::RunConfiguration RunConfiguration; + typedef ProjectExplorer::RunControl RunControl; + + // IRunControlFactory + bool canRun(RunConfiguration *runConfiguration, const QString &mode) const; + RunControl *create(RunConfiguration *runConfiguration, const QString &mode); + QString displayName() const; + + ProjectExplorer::IRunConfigurationAspect *createRunConfigurationAspect(); + ProjectExplorer::RunConfigWidget *createConfigurationWidget(RunConfiguration *runConfiguration); +}; + +ValgrindRunControlFactory::ValgrindRunControlFactory(QObject *parent) + : IRunControlFactory(parent) +{ + setObjectName(QLatin1String("ValgrindRunControlFactory")); +} + +bool ValgrindRunControlFactory::canRun(RunConfiguration *runConfiguration, const QString &mode) const +{ + Q_UNUSED(runConfiguration); + return mode.startsWith("Callgrind") || mode.startsWith("Memcheck"); +} + +RunControl *ValgrindRunControlFactory::create(RunConfiguration *runConfiguration, const QString &mode) +{ + QTC_ASSERT(canRun(runConfiguration, mode), return 0); + + AnalyzerStartParameters sp; + if (qobject_cast(runConfiguration)) { + sp = localStartParameters(runConfiguration); + } else if (qobject_cast(runConfiguration)) { + sp = remoteLinuxStartParameters(runConfiguration); + } else { + // Might be S60DeviceRunfiguration, or something else ... + //sp.startMode = StartRemote; + sp.startMode = StartRemote; + } + + IAnalyzerTool *tool = AnalyzerManager::toolFromId(mode.toLatin1()); + AnalyzerRunControl *rc = new AnalyzerRunControl(tool, sp, runConfiguration); + QObject::connect(AnalyzerManager::stopAction(), SIGNAL(triggered()), rc, SLOT(stopIt())); + //m_isRunning = true; + return rc; +} + +QString ValgrindRunControlFactory::displayName() const +{ + return tr("Analyzer"); +} + +IRunConfigurationAspect *ValgrindRunControlFactory::createRunConfigurationAspect() +{ + return new AnalyzerProjectSettings; +} + +RunConfigWidget *ValgrindRunControlFactory::createConfigurationWidget(RunConfiguration *runConfiguration) +{ + LocalApplicationRunConfiguration *localRc = + qobject_cast(runConfiguration); + if (!localRc) + return 0; + AnalyzerProjectSettings *settings = runConfiguration->extraAspect(); + if (!settings) + return 0; + + AnalyzerRunConfigWidget *ret = new AnalyzerRunConfigWidget; + ret->setRunConfiguration(runConfiguration); + return ret; +} + +///////////////////////////////////////////////////////////////////////////////// +// +// ValgrindPlugin +// +///////////////////////////////////////////////////////////////////////////////// + +static void startRemoteTool(IAnalyzerTool *tool, StartMode mode) +{ + Q_UNUSED(tool); + StartRemoteDialog dlg; + if (dlg.exec() != QDialog::Accepted) + return; + + AnalyzerStartParameters sp; + sp.toolId = tool->id(); + sp.startMode = mode; + sp.connParams = dlg.sshParams(); + sp.debuggee = dlg.executable(); + sp.debuggeeArgs = dlg.arguments(); + sp.displayName = dlg.executable(); + sp.workingDirectory = dlg.workingDirectory(); + + AnalyzerRunControl *rc = new AnalyzerRunControl(tool, sp, 0); + //m_currentRunControl = rc; + QObject::connect(AnalyzerManager::stopAction(), SIGNAL(triggered()), rc, SLOT(stopIt())); + + ProjectExplorer::ProjectExplorerPlugin::instance()->startRunControl(rc, tool->id()); +} + +void ValgrindPlugin::startValgrindTool(IAnalyzerTool *tool, StartMode mode) +{ + if (mode == StartLocal) + AnalyzerManager::startLocalTool(tool, mode); + if (mode == StartRemote) + startRemoteTool(tool, mode); +} static AbstractAnalyzerSubConfig *valgrindConfigFactory() { @@ -89,7 +265,16 @@ bool ValgrindPlugin::initialize(const QStringList &, QString *) AnalyzerManager::addTool(new MemcheckTool(this), modes); AnalyzerManager::addTool(new CallgrindTool(this), modes); + ValgrindRunControlFactory *factory = new ValgrindRunControlFactory(); + addAutoReleasedObject(factory); + return true; } +} // namespace Internal +} // namespace Valgrind + + Q_EXPORT_PLUGIN(Valgrind::Internal::ValgrindPlugin) + +#include "valgrindplugin.moc" diff --git a/src/plugins/valgrind/valgrindplugin.h b/src/plugins/valgrind/valgrindplugin.h index a59bffc5856..9598572bd32 100644 --- a/src/plugins/valgrind/valgrindplugin.h +++ b/src/plugins/valgrind/valgrindplugin.h @@ -36,6 +36,7 @@ #define VALGRINDTOOLBASEPLUGIN_H #include +#include namespace Valgrind { namespace Internal { @@ -49,6 +50,8 @@ public: virtual bool initialize(const QStringList &arguments, QString *errorString); virtual void extensionsInitialized() {} + + static void startValgrindTool(Analyzer::IAnalyzerTool *tool, Analyzer::StartMode mode); }; } // namespace Internal From 538b09efc801e80c64df7ab9f07121c15bf47fae Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 29 Jun 2011 11:48:12 +0200 Subject: [PATCH 060/143] debugger: add missing bridge.py Change-Id: I7e236964007462ca203b898db06e15f77857916b Reviewed-on: http://codereview.qt.nokia.com/1036 Reviewed-by: hjk --- share/qtcreator/dumper/bridge.py | 239 ++++++++++++++++++ .../gdbdebugger/simple/simple_gdbtest_app.cpp | 26 ++ 2 files changed, 265 insertions(+) create mode 100644 share/qtcreator/dumper/bridge.py diff --git a/share/qtcreator/dumper/bridge.py b/share/qtcreator/dumper/bridge.py new file mode 100644 index 00000000000..43c67f6f75f --- /dev/null +++ b/share/qtcreator/dumper/bridge.py @@ -0,0 +1,239 @@ + +try: + import lldb_bridge + +except: + pass + + +#try: +if True: + import gdb + + def registerCommand(name, func): + + class Command(gdb.Command): + def __init__(self): + super(Command, self).__init__(name, gdb.COMMAND_OBSCURE) + def invoke(self, args, from_tty): + output = func(args) + try: + print(output) + except: + out = "" + for c in output: + cc = ord(c) + if cc > 127: + out += "\\\\%d" % cc + elif cc < 0: + out += "\\\\%d" % (cc + 256) + else: + out += c + print(out) + + + + Command() + + + def isGoodGdb(): + #return gdb.VERSION.startswith("6.8.50.2009") \ + # and gdb.VERSION != "6.8.50.20090630-cvs" + return 'parse_and_eval' in __builtin__.dir(gdb) + + + def parseAndEvaluate(exp): + if isGoodGdb(): + return gdb.parse_and_eval(exp) + # Work around non-existing gdb.parse_and_eval as in released 7.0 + gdb.execute("set logging redirect on") + gdb.execute("set logging on") + try: + gdb.execute("print %s" % exp) + except: + gdb.execute("set logging off") + gdb.execute("set logging redirect off") + return None + gdb.execute("set logging off") + gdb.execute("set logging redirect off") + return gdb.history(0) + + + def listOfLocals(varList): + frame = gdb.selected_frame() + try: + frame = gdb.selected_frame() + #warn("FRAME %s: " % frame) + except RuntimeError, error: + warn("FRAME NOT ACCESSIBLE: %s" % error) + return [] + except: + warn("FRAME NOT ACCESSIBLE FOR UNKNOWN REASONS") + return [] + + # New in 7.2 + hasBlock = 'block' in __builtin__.dir(frame) + + items = [] + #warn("HAS BLOCK: %s" % hasBlock) + if hasBlock and isGoodGdb(): + #warn("IS GOOD: %s " % varList) + try: + block = frame.block() + #warn("BLOCK: %s " % block) + except RuntimeError, error: + warn("BLOCK IN FRAME NOT ACCESSIBLE: %s" % error) + return items + except: + warn("BLOCK NOT ACCESSIBLE FOR UNKNOWN REASONS") + return items + + shadowed = {} + while True: + if block is None: + warn("UNEXPECTED 'None' BLOCK") + break + for symbol in block: + name = symbol.print_name + + if name == "__in_chrg": + continue + + # "NotImplementedError: Symbol type not yet supported in + # Python scripts." + #warn("SYMBOL %s: " % symbol.value) + #warn("SYMBOL %s (%s): " % (symbol, name)) + if name in shadowed: + level = shadowed[name] + name1 = "%s " % (name, level) + shadowed[name] = level + 1 + else: + name1 = name + shadowed[name] = 1 + #warn("SYMBOL %s (%s, %s)): " % (symbol, name, symbol.name)) + item = Item(0, "local", name1, name1) + try: + item.value = frame.read_var(name, block) # this is a gdb value + except: + try: + item.value = frame.read_var(name) # this is a gdb value + except: + # RuntimeError: happens for + # void foo() { std::string s; std::wstring w; } + # ValueError: happens for (as of 2010/11/4) + # a local struct as found e.g. in + # gcc sources in gcc.c, int execute() + continue + #warn("ITEM %s: " % item.value) + items.append(item) + # The outermost block in a function has the function member + # FIXME: check whether this is guaranteed. + if not block.function is None: + break + + block = block.superblock + else: + # Assuming gdb 7.0 release or 6.8-symbianelf. + filename, file = createTempFile() + #warn("VARLIST: %s " % varList) + #warn("FILENAME: %s " % filename) + gdb.execute("set logging off") + gdb.execute("set logging redirect off") + gdb.execute("set logging file %s" % filename) + gdb.execute("set logging redirect on") + gdb.execute("set logging on") + try: + gdb.execute("info args") + # We cannot use "info locals" as at least 6.8-symbianelf + # aborts as soon as we hit unreadable memory. + # gdb.execute("interpreter mi '-stack-list-locals 0'") + # results in &"Recursive internal problem.\n", so we have + # the frontend pass us the list of locals. + + # There are two cases, either varList is empty, so we have + # to fetch the list here, or it is not empty with the + # first entry being a dummy. + if len(varList) == 0: + gdb.execute("info locals") + else: + varList = varList[1:] + except: + pass + gdb.execute("set logging off") + gdb.execute("set logging redirect off") + + try: + temp = open(filename, "r") + for line in temp: + if len(line) == 0 or line.startswith(" "): + continue + # The function parameters + pos = line.find(" = ") + if pos < 0: + continue + varList.append(line[0:pos]) + temp.close() + except: + pass + removeTempFile(filename, file) + #warn("VARLIST: %s " % varList) + for name in varList: + #warn("NAME %s " % name) + item = Item(0, "local", name, name) + try: + item.value = frame.read_var(name) # this is a gdb value + except RuntimeError: + pass + #continue + except: + # Something breaking the list, like intermediate gdb warnings + # like 'Warning: can't find linker symbol for virtual table for + # `std::less' value\n\nwarning: found + # `myns::QHashData::shared_null' instead [...] + # that break subsequent parsing. Chicken out and take the + # next "usable" line. + continue + items.append(item) + + return items + + + def catchCliOutput(command): + try: + return gdb.execute(command, to_string=True).split("\n") + except: + pass + filename, file = createTempFile() + gdb.execute("set logging off") + gdb.execute("set logging redirect off") + gdb.execute("set logging file %s" % filename) + gdb.execute("set logging redirect on") + gdb.execute("set logging on") + msg = "" + try: + gdb.execute(command) + except RuntimeError, error: + # For the first phase of core file loading this yield + # "No symbol table is loaded. Use the \"file\" command." + msg = str(error) + except: + msg = "Unknown error" + gdb.execute("set logging off") + gdb.execute("set logging redirect off") + if len(msg): + # Having that might confuse result handlers in the gdbengine. + #warn("CLI ERROR: %s " % msg) + return "CLI ERROR: %s " % msg + temp = open(filename, "r") + lines = [] + for line in temp: + lines.append(line) + temp.close() + removeTempFile(filename, file) + return lines + + + + +#except: +# pass diff --git a/tests/manual/gdbdebugger/simple/simple_gdbtest_app.cpp b/tests/manual/gdbdebugger/simple/simple_gdbtest_app.cpp index 7283d7e8f56..c490f0b4193 100644 --- a/tests/manual/gdbdebugger/simple/simple_gdbtest_app.cpp +++ b/tests/manual/gdbdebugger/simple/simple_gdbtest_app.cpp @@ -2935,8 +2935,34 @@ namespace qc41700 { } // namespace qc41700 +namespace cp42895 { + + // http://codepaster.europe.nokia.com/?id=42895 + + void g(int c, int d) + { + qDebug() << c << d; + // <== break here + // Check there are frames for g and f in the stack view. + dummyStatement(&c, &d); + } + + void f(int a, int b) + { + g(a, b); + } + + void test42895() + { + f(3, 4); + } + +} // namespace cp + + int main(int argc, char *argv[]) { + cp42895::test42895(); bug5046::test5046(); bug4904::test4904(); qc41700::test41700(); From c172e9ed6529615b334867bd2f3205dabadbba5e Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Mon, 4 Jul 2011 12:52:02 +0200 Subject: [PATCH 061/143] RemoteLinux: Fix deploy configuration widget. Show correct device configuration initially. Change-Id: I3e95201eb199e369c613a9c1fc2aaa51251ae777 Reviewed-on: http://codereview.qt.nokia.com/1062 Reviewed-by: Christian Kandeler --- src/plugins/remotelinux/maemodeployconfigurationwidget.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/remotelinux/maemodeployconfigurationwidget.cpp b/src/plugins/remotelinux/maemodeployconfigurationwidget.cpp index cf6b530bb1b..796be2f8748 100644 --- a/src/plugins/remotelinux/maemodeployconfigurationwidget.cpp +++ b/src/plugins/remotelinux/maemodeployconfigurationwidget.cpp @@ -78,6 +78,7 @@ void MaemoDeployConfigurationWidget::init(DeployConfiguration *dc) SLOT(handleSelectedDeviceConfigurationChanged(int))); connect(m_deployConfig, SIGNAL(deviceConfigurationListChanged()), SLOT(handleDeviceConfigurationListChanged())); + handleDeviceConfigurationListChanged(); ui->projectsComboBox->setModel(m_deployConfig->deploymentInfo().data()); connect(m_deployConfig->deploymentInfo().data(), SIGNAL(modelAboutToBeReset()), From c5d6bc49e5d621cd9f5903268fee2341a269d83d Mon Sep 17 00:00:00 2001 From: Christiaan Janssen Date: Wed, 29 Jun 2011 15:05:45 +0200 Subject: [PATCH 062/143] QmlProfiler: refactored the event views into a single class Change-Id: I4fd193490c42894da73951afcf50e40a44abaa07 Reviewed-on: http://codereview.qt.nokia.com/1019 Reviewed-by: Christiaan Janssen --- src/plugins/qmlprofiler/qmlprofiler.pro | 13 +- .../qmlprofiler/qmlprofilercalleeview.cpp | 292 ---------- .../qmlprofiler/qmlprofilercalleeview.h | 71 --- .../qmlprofiler/qmlprofilercallerview.cpp | 288 ---------- .../qmlprofiler/qmlprofilercallerview.h | 71 --- .../qmlprofiler/qmlprofilereventtypes.h | 20 + .../qmlprofiler/qmlprofilereventview.cpp | 544 ++++++++++++++++++ .../qmlprofiler/qmlprofilereventview.h | 161 ++++++ .../qmlprofiler/qmlprofilersummaryview.cpp | 283 --------- .../qmlprofiler/qmlprofilersummaryview.h | 80 --- src/plugins/qmlprofiler/qmlprofilertool.cpp | 60 +- .../qmlprofiler/qmlprofilertraceclient.cpp | 12 +- .../qmlprofiler/qmlprofilertraceclient.h | 22 +- 13 files changed, 771 insertions(+), 1146 deletions(-) delete mode 100644 src/plugins/qmlprofiler/qmlprofilercalleeview.cpp delete mode 100644 src/plugins/qmlprofiler/qmlprofilercalleeview.h delete mode 100644 src/plugins/qmlprofiler/qmlprofilercallerview.cpp delete mode 100644 src/plugins/qmlprofiler/qmlprofilercallerview.h create mode 100644 src/plugins/qmlprofiler/qmlprofilereventtypes.h create mode 100644 src/plugins/qmlprofiler/qmlprofilereventview.cpp create mode 100644 src/plugins/qmlprofiler/qmlprofilereventview.h delete mode 100644 src/plugins/qmlprofiler/qmlprofilersummaryview.cpp delete mode 100644 src/plugins/qmlprofiler/qmlprofilersummaryview.h diff --git a/src/plugins/qmlprofiler/qmlprofiler.pro b/src/plugins/qmlprofiler/qmlprofiler.pro index 1aa41fbe830..9cf9360f73a 100644 --- a/src/plugins/qmlprofiler/qmlprofiler.pro +++ b/src/plugins/qmlprofiler/qmlprofiler.pro @@ -23,14 +23,12 @@ SOURCES += \ tracewindow.cpp \ timelineview.cpp \ qmlprofilerattachdialog.cpp \ - qmlprofilersummaryview.cpp \ qmlprojectanalyzerruncontrolfactory.cpp \ localqmlprofilerrunner.cpp \ codaqmlprofilerrunner.cpp \ remotelinuxqmlprofilerrunner.cpp \ - qmlprofilercalleeview.cpp \ - qmlprofilercallerview.cpp \ - qmlprofilertraceclient.cpp + qmlprofilertraceclient.cpp \ + qmlprofilereventview.cpp HEADERS += \ qmlprofilerconstants.h \ @@ -41,15 +39,14 @@ HEADERS += \ tracewindow.h \ timelineview.h \ qmlprofilerattachdialog.h \ - qmlprofilersummaryview.h \ qmlprojectanalyzerruncontrolfactory.h \ abstractqmlprofilerrunner.h \ localqmlprofilerrunner.h \ codaqmlprofilerrunner.h \ remotelinuxqmlprofilerrunner.h \ - qmlprofilercalleeview.h \ - qmlprofilercallerview.h \ - qmlprofilertraceclient.h + qmlprofilertraceclient.h \ + qmlprofilereventview.h \ + qmlprofilereventtypes.h RESOURCES += \ qml/qml.qrc diff --git a/src/plugins/qmlprofiler/qmlprofilercalleeview.cpp b/src/plugins/qmlprofiler/qmlprofilercalleeview.cpp deleted file mode 100644 index 71fd7677b97..00000000000 --- a/src/plugins/qmlprofiler/qmlprofilercalleeview.cpp +++ /dev/null @@ -1,292 +0,0 @@ -/************************************************************************** -** -** This file is part of Qt Creator -** -** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). -** -** Contact: Nokia Corporation (info@qt.nokia.com) -** -** No Commercial Usage -** -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at info@qt.nokia.com. -** -**************************************************************************/ - -#include "qmlprofilercalleeview.h" - -#include -#include - -#include -#include - -using namespace QmlProfiler::Internal; - -struct BindingData -{ - BindingData() : - displayname(0), filename(0), location(0), details(0), - line(-1), rangeType(-1), level(-1), childrenHash(0), parentBinding(0) {} - - ~BindingData() { - delete displayname; - delete filename; - delete location; - delete childrenHash; - } - QString *displayname; - QString *filename; - QString *location; - QString *details; - int line; - int rangeType; - qint64 level; - QHash *childrenHash; - - // reference to parent binding stored in the hash - BindingData *parentBinding; -}; - -typedef QHash BindingHash; - -enum ItemRole { - LocationRole = Qt::UserRole+1, - FilenameRole = Qt::UserRole+2, - LineRole = Qt::UserRole+3 -}; - -class QmlProfilerCalleeView::QmlProfilerCalleeViewPrivate -{ -public: - QmlProfilerCalleeViewPrivate(QmlProfilerCalleeView *qq) : q(qq) {} - - void recursiveClearHash(BindingHash *hash); - void buildModelFromHash( BindingHash *hash, QStandardItem *parentItem ); - - QmlProfilerCalleeView *q; - - QStandardItemModel *m_model; -// ToDo: avoid unnecessary allocations by using global hash -// BindingHash m_globalHash; - BindingHash m_rootHash; - QList m_bindingBuffer; -}; - -QmlProfilerCalleeView::QmlProfilerCalleeView(QWidget *parent) : - QTreeView(parent), d(new QmlProfilerCalleeViewPrivate(this)) -{ - setObjectName("QmlProfilerCalleeView"); - setRootIsDecorated(true); - header()->setResizeMode(QHeaderView::Interactive); - header()->setMinimumSectionSize(50); - setSortingEnabled(false); - setFrameStyle(QFrame::NoFrame); - - d->m_model = new QStandardItemModel(this); - - setModel(d->m_model); - - d->m_model->setColumnCount(3); - setHeaderLabels(); - - connect(this,SIGNAL(clicked(QModelIndex)), this,SLOT(jumpToItem(QModelIndex))); -} - -QmlProfilerCalleeView::~QmlProfilerCalleeView() -{ - clean(); - delete d->m_model; -} - -void QmlProfilerCalleeView::clean() -{ - d->m_model->clear(); - d->m_model->setColumnCount(3); - - // clean the hashes - d->recursiveClearHash(&d->m_rootHash); - - setHeaderLabels(); - setSortingEnabled(false); -} - -void QmlProfilerCalleeView::addRangedEvent(int type, int nestingLevel, int nestingInType, qint64 startTime, qint64 length, - const QStringList &data, const QString &fileName, int line) -{ - Q_UNUSED(startTime); - Q_UNUSED(nestingInType); - Q_UNUSED(length); - - const QChar colon = QLatin1Char(':'); - QString localName, displayName, location, details; - - if (fileName.isEmpty()) { - displayName = tr(""); - location = QLatin1String("--"); - - } else { - localName = QUrl(fileName).toLocalFile(); - displayName = localName.mid(localName.lastIndexOf(QChar('/')) + 1) + colon + QString::number(line); - location = fileName+colon+QString::number(line); - } - - if (data.isEmpty()) - details = tr("Source code not available"); - else - details = data.join(" ").replace('\n'," "); - - // ToDo: instead of allocating each new event, store them in the global hash - BindingData *newBinding = new BindingData; - newBinding->displayname = new QString(displayName); - newBinding->filename = new QString(fileName); - newBinding->line = line; - newBinding->level = nestingLevel; - newBinding->rangeType = type; - newBinding->location = new QString(location); - newBinding->details = new QString(details); - newBinding->childrenHash = 0; - - d->m_bindingBuffer.prepend(newBinding); - - if (nestingLevel == 1) { - // top level: insert buffered stuff - BindingHash *currentHash = &(d->m_rootHash); - BindingData *lastBinding = 0; - int lastLevel = 0; - - while (d->m_bindingBuffer.length()) { - BindingData *bindingInfo = d->m_bindingBuffer.at(0); - // find the data's place - if (bindingInfo->level > lastLevel) { - currentHash = lastBinding ? lastBinding->childrenHash : &(d->m_rootHash); - bindingInfo->parentBinding = lastBinding; - ++lastLevel; - } else if (bindingInfo->level == lastLevel) { - bindingInfo->parentBinding = lastBinding->parentBinding; - } else if (bindingInfo->level < lastLevel) { - while (bindingInfo->level < lastLevel) { - bindingInfo->parentBinding = lastBinding->parentBinding ? lastBinding->parentBinding->parentBinding : 0; - currentHash = bindingInfo->parentBinding ? bindingInfo->parentBinding->childrenHash : &(d->m_rootHash); - --lastLevel; - } - } - - BindingHash::iterator it = currentHash->find(*bindingInfo->location); - if (it == currentHash->end()) { - bindingInfo->childrenHash = new BindingHash; - currentHash->insert(*bindingInfo->location, bindingInfo); - lastBinding = bindingInfo; - } else { - lastBinding = it.value(); - delete bindingInfo; - } - - d->m_bindingBuffer.removeFirst(); - } - } -} - -void QmlProfilerCalleeView::complete() -{ - // build the model from the hashed data - d->buildModelFromHash( &d->m_rootHash, d->m_model->invisibleRootItem()); - - expandAll(); - resizeColumnToContents(0); - resizeColumnToContents(1); -} - -void QmlProfilerCalleeView::jumpToItem(const QModelIndex &index) -{ - QStandardItem *clickedItem = d->m_model->itemFromIndex(index); - QStandardItem *infoItem; - if (clickedItem->parent()) - infoItem = clickedItem->parent()->child(clickedItem->row(), 0); - else - infoItem = d->m_model->item(index.row(), 0); - - int line = infoItem->data(LineRole).toInt(); - if (line == -1) - return; - QString fileName = infoItem->data(FilenameRole).toString(); - emit gotoSourceLocation(fileName, line); -} - -void QmlProfilerCalleeView::setHeaderLabels() -{ - d->m_model->setHeaderData(0, Qt::Horizontal, QVariant(tr("Location"))); - d->m_model->setHeaderData(1, Qt::Horizontal, QVariant(tr("Type"))); - d->m_model->setHeaderData(2, Qt::Horizontal, QVariant(tr("Details"))); -} - -void QmlProfilerCalleeView::QmlProfilerCalleeViewPrivate::recursiveClearHash(BindingHash *hash) { - QHashIterator it(*hash); - while (it.hasNext()) { - it.next(); - if (it.value()->childrenHash) - recursiveClearHash(it.value()->childrenHash); - delete it.value(); - } - hash->clear(); -} - -inline QString nameForType(int typeNumber) -{ - switch (typeNumber) { - case 0: return QmlProfilerCalleeView::tr("Paint"); - case 1: return QmlProfilerCalleeView::tr("Compile"); - case 2: return QmlProfilerCalleeView::tr("Create"); - case 3: return QmlProfilerCalleeView::tr("Binding"); - case 4: return QmlProfilerCalleeView::tr("Signal"); - } - return QString(); -} - -void QmlProfilerCalleeView::QmlProfilerCalleeViewPrivate::buildModelFromHash( BindingHash *hash, QStandardItem *parentItem ) -{ - QHashIterator it(*hash); - - while (it.hasNext()) { - it.next(); - BindingData *binding = it.value(); - - QStandardItem *nameColumn = new QStandardItem(*binding->displayname); - nameColumn->setEditable(false); - - QStandardItem *typeColumn = new QStandardItem(nameForType(binding->rangeType)); - typeColumn->setEditable(false); - - QStandardItem *detailsColumn = new QStandardItem(*binding->details); - detailsColumn->setEditable(false); - - QStandardItem *firstColumn = nameColumn; - firstColumn->setData(QVariant(*binding->location),LocationRole); - firstColumn->setData(QVariant(*binding->filename),FilenameRole); - firstColumn->setData(QVariant(binding->line),LineRole); - - QList newRow; - newRow << nameColumn << typeColumn << detailsColumn; - parentItem->appendRow(newRow); - if (!binding->childrenHash->isEmpty()) - buildModelFromHash(binding->childrenHash, nameColumn); - } -} diff --git a/src/plugins/qmlprofiler/qmlprofilercalleeview.h b/src/plugins/qmlprofiler/qmlprofilercalleeview.h deleted file mode 100644 index 715a006eddd..00000000000 --- a/src/plugins/qmlprofiler/qmlprofilercalleeview.h +++ /dev/null @@ -1,71 +0,0 @@ -/************************************************************************** -** -** This file is part of Qt Creator -** -** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). -** -** Contact: Nokia Corporation (info@qt.nokia.com) -** -** No Commercial Usage -** -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at info@qt.nokia.com. -** -**************************************************************************/ - -#ifndef QMLPROFILERCALLEEVIEW_H -#define QMLPROFILERCALLEEVIEW_H - -#include - -namespace QmlProfiler { -namespace Internal { - -class QmlProfilerCalleeView : public QTreeView -{ - Q_OBJECT - -public: - explicit QmlProfilerCalleeView(QWidget *parent = 0); - ~QmlProfilerCalleeView(); - -signals: - void gotoSourceLocation(const QString &fileName, int lineNumber); - -public slots: - void clean(); - - void addRangedEvent(int type, int nestingLevel, int nestingInType, qint64 startTime, qint64 length, - const QStringList &data, const QString &fileName, int line); - void complete(); - void jumpToItem(const QModelIndex &index); - -private: - class QmlProfilerCalleeViewPrivate; - QmlProfilerCalleeViewPrivate *d; - - void setHeaderLabels(); -}; - -} // namespace Internal -} // namespace QmlProfiler - -#endif // QMLPROFILERCALLEEVIEW_H diff --git a/src/plugins/qmlprofiler/qmlprofilercallerview.cpp b/src/plugins/qmlprofiler/qmlprofilercallerview.cpp deleted file mode 100644 index 92cece6058d..00000000000 --- a/src/plugins/qmlprofiler/qmlprofilercallerview.cpp +++ /dev/null @@ -1,288 +0,0 @@ -/************************************************************************** -** -** This file is part of Qt Creator -** -** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). -** -** Contact: Nokia Corporation (info@qt.nokia.com) -** -** No Commercial Usage -** -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at info@qt.nokia.com. -** -**************************************************************************/ - -#include "qmlprofilercallerview.h" - -#include -#include - -#include -#include - -using namespace QmlProfiler::Internal; - -struct BindingData -{ - BindingData() : displayname(0) , filename(0) , location(0) , details(0), - line(0), rangeType(0), level(-1), parentList(0) {} - ~BindingData() { - delete displayname; - delete filename; - delete location; - delete parentList; - } - QString *displayname; - QString *filename; - QString *location; - QString *details; - int line; - int rangeType; - qint64 level; - QList< BindingData *> *parentList; -}; - -typedef QHash BindingHash; -typedef QList BindingList; - -enum ItemRole { - LocationRole = Qt::UserRole+1, - FilenameRole = Qt::UserRole+2, - LineRole = Qt::UserRole+3 -}; - -class QmlProfilerCallerView::QmlProfilerCallerViewPrivate -{ -public: - QmlProfilerCallerViewPrivate(QmlProfilerCallerView *qq) : q(qq) {} - - void recursiveClearHash(BindingHash *hash); - void buildModelFromList( BindingList *list, QStandardItem *parentItem, BindingList *listSoFar ); - - QmlProfilerCallerView *q; - - QStandardItemModel *m_model; - BindingHash m_rootHash; - QHash m_pendingChildren; - int m_lastLevel; -}; - -QmlProfilerCallerView::QmlProfilerCallerView(QWidget *parent) : - QTreeView(parent), d(new QmlProfilerCallerViewPrivate(this)) -{ - setObjectName("QmlProfilerCallerView"); - setRootIsDecorated(true); - header()->setResizeMode(QHeaderView::Interactive); - header()->setMinimumSectionSize(50); - setSortingEnabled(false); - setFrameStyle(QFrame::NoFrame); - - d->m_model = new QStandardItemModel(this); - - setModel(d->m_model); - - d->m_model->setColumnCount(3); - setHeaderLabels(); - - connect(this,SIGNAL(clicked(QModelIndex)), this,SLOT(jumpToItem(QModelIndex))); - - d->m_lastLevel = -1; -} - -QmlProfilerCallerView::~QmlProfilerCallerView() -{ - clean(); - delete d->m_model; -} - -void QmlProfilerCallerView::clean() -{ - d->m_model->clear(); - d->m_model->setColumnCount(3); - - foreach (int levelNumber, d->m_pendingChildren.keys()) - d->m_pendingChildren[levelNumber].clear(); - - d->m_lastLevel = -1; - - // clean the hashes - d->recursiveClearHash(&d->m_rootHash); - - setHeaderLabels(); - setSortingEnabled(false); -} - -void QmlProfilerCallerView::addRangedEvent(int type, int nestingLevel, int nestingInType, qint64 startTime, qint64 length, - const QStringList &data, const QString &fileName, int line) -{ - Q_UNUSED(startTime); - Q_UNUSED(nestingInType); - Q_UNUSED(length); - - const QChar colon = QLatin1Char(':'); - QString localName, displayName, location, details; - - if (fileName.isEmpty()) { - displayName = tr(""); - location = QLatin1String("--"); - - } else { - localName = QUrl(fileName).toLocalFile(); - displayName = localName.mid(localName.lastIndexOf(QChar('/')) + 1) + colon + QString::number(line); - location = fileName+colon+QString::number(line); - } - - if (data.isEmpty()) - details = tr("Source code not available"); - else - details = data.join(" ").replace('\n'," "); - - - // New Data: if it's not in the hash, put it there - // if it's in the hash, get the reference from the hash - BindingData *newBinding; - BindingHash::iterator it = d->m_rootHash.find(location); - if (it != d->m_rootHash.end()) { - newBinding = it.value(); - } else { - newBinding = new BindingData; - newBinding->displayname = new QString(displayName); - newBinding->filename = new QString(fileName); - newBinding->line = line; - newBinding->level = nestingLevel; - newBinding->rangeType = type; - newBinding->location = new QString(location); - newBinding->details = new QString(details); - newBinding->parentList = new BindingList(); - d->m_rootHash.insert(location, newBinding); - } - - if (nestingLevel < d->m_lastLevel) { - // I'm the parent of the former - if (d->m_pendingChildren.contains(nestingLevel+1)) { - foreach (BindingData *child, d->m_pendingChildren[nestingLevel + 1]) { - if (!child->parentList->contains(newBinding)) - child->parentList->append(newBinding); - } - d->m_pendingChildren[nestingLevel + 1].clear(); - } - - } - - if (nestingLevel > 1 && !d->m_pendingChildren[nestingLevel].contains(newBinding)) { - // I'm not root... there will come a parent later - d->m_pendingChildren[nestingLevel].append(newBinding); - } - - d->m_lastLevel = nestingLevel; -} - -void QmlProfilerCallerView::complete() -{ - // build the model from the hashed data - BindingList bindingList = d->m_rootHash.values(); - BindingList emptyList; - d->buildModelFromList(&bindingList, d->m_model->invisibleRootItem(), &emptyList); - - expandAll(); - resizeColumnToContents(0); - resizeColumnToContents(1); - collapseAll(); -} - -void QmlProfilerCallerView::jumpToItem(const QModelIndex &index) -{ - QStandardItem *clickedItem = d->m_model->itemFromIndex(index); - QStandardItem *infoItem; - if (clickedItem->parent()) - infoItem = clickedItem->parent()->child(clickedItem->row(), 0); - else - infoItem = d->m_model->item(index.row(), 0); - - int line = infoItem->data(Qt::UserRole+3).toInt(); - if (line == -1) - return; - QString fileName = infoItem->data(Qt::UserRole+2).toString(); - emit gotoSourceLocation(fileName, line); -} - -void QmlProfilerCallerView::setHeaderLabels() -{ - d->m_model->setHeaderData(0, Qt::Horizontal, QVariant(tr("Location"))); - d->m_model->setHeaderData(1, Qt::Horizontal, QVariant(tr("Type"))); - d->m_model->setHeaderData(2, Qt::Horizontal, QVariant(tr("Details"))); -} - -// ToDo: property clean the stored data -void QmlProfilerCallerView::QmlProfilerCallerViewPrivate::recursiveClearHash(BindingHash *hash) { - QHashIterator it(*hash); - while (it.hasNext()) { - it.next(); - delete it.value(); - } - hash->clear(); -} - -inline QString nameForType(int typeNumber) -{ - switch (typeNumber) { - case 0: return QmlProfilerCallerView::tr("Paint"); - case 1: return QmlProfilerCallerView::tr("Compile"); - case 2: return QmlProfilerCallerView::tr("Create"); - case 3: return QmlProfilerCallerView::tr("Binding"); - case 4: return QmlProfilerCallerView::tr("Signal"); - } - return QString(); -} - -void QmlProfilerCallerView::QmlProfilerCallerViewPrivate::buildModelFromList( BindingList *list, QStandardItem *parentItem, BindingList *listSoFar ) -{ - foreach (BindingData *binding, *list) { - if (listSoFar->contains(binding)) - continue; - - QStandardItem *nameColumn = new QStandardItem(*binding->displayname); - nameColumn->setEditable(false); - - QStandardItem *typeColumn = new QStandardItem(nameForType(binding->rangeType)); - typeColumn->setEditable(false); - - QStandardItem *detailsColumn = new QStandardItem(*binding->details); - detailsColumn->setEditable(false); - - QStandardItem *firstColumn = nameColumn; - firstColumn->setData(QVariant(*binding->location),LocationRole); - firstColumn->setData(QVariant(*binding->filename),FilenameRole); - firstColumn->setData(QVariant(binding->line),LineRole); - - QList newRow; - newRow << nameColumn << typeColumn << detailsColumn; - parentItem->appendRow(newRow); - if (!binding->parentList->isEmpty()) { - // avoid infinite loops due to recursive functions - BindingList newParentList(*listSoFar); - newParentList.append(binding); - - buildModelFromList(binding->parentList, nameColumn, &newParentList); - } - } -} diff --git a/src/plugins/qmlprofiler/qmlprofilercallerview.h b/src/plugins/qmlprofiler/qmlprofilercallerview.h deleted file mode 100644 index 7f9416fea98..00000000000 --- a/src/plugins/qmlprofiler/qmlprofilercallerview.h +++ /dev/null @@ -1,71 +0,0 @@ -/************************************************************************** -** -** This file is part of Qt Creator -** -** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). -** -** Contact: Nokia Corporation (info@qt.nokia.com) -** -** No Commercial Usage -** -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at info@qt.nokia.com. -** -**************************************************************************/ - -#ifndef QMLPROFILERCALLERVIEW_H -#define QMLPROFILERCALLERVIEW_H - -#include - -namespace QmlProfiler { -namespace Internal { - -class QmlProfilerCallerView : public QTreeView -{ - Q_OBJECT - -public: - explicit QmlProfilerCallerView(QWidget *parent = 0); - ~QmlProfilerCallerView(); - -signals: - void gotoSourceLocation(const QString &fileName, int lineNumber); - -public slots: - void clean(); - - void addRangedEvent(int type, int nestingLevel, int nestingInType, qint64 startTime, qint64 length, - const QStringList &data, const QString &fileName, int line); - void complete(); - void jumpToItem(const QModelIndex &index); - -private: - class QmlProfilerCallerViewPrivate; - QmlProfilerCallerViewPrivate *d; - - void setHeaderLabels(); -}; - -} // namespace Internal -} // namespace QmlProfiler - -#endif // QMLPROFILERCALLERVIEW_H diff --git a/src/plugins/qmlprofiler/qmlprofilereventtypes.h b/src/plugins/qmlprofiler/qmlprofilereventtypes.h new file mode 100644 index 00000000000..1e324a69d8b --- /dev/null +++ b/src/plugins/qmlprofiler/qmlprofilereventtypes.h @@ -0,0 +1,20 @@ +#ifndef QMLPROFILEREVENTTYPES_H +#define QMLPROFILEREVENTTYPES_H + +namespace QmlProfiler { +namespace Internal { + +enum QmlEventType { + Painting, + Compiling, + Creating, + Binding, + HandlingSignal, + + MaximumQmlEventType +}; + +} +} + +#endif //QMLPROFILEREVENTTYPES_H diff --git a/src/plugins/qmlprofiler/qmlprofilereventview.cpp b/src/plugins/qmlprofiler/qmlprofilereventview.cpp new file mode 100644 index 00000000000..e9eee27ef00 --- /dev/null +++ b/src/plugins/qmlprofiler/qmlprofilereventview.cpp @@ -0,0 +1,544 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** No Commercial Usage +** +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + +#include "qmlprofilereventview.h" + +#include +#include + +#include +#include + +namespace QmlProfiler { +namespace Internal { + +class EventsViewItem : public QStandardItem +{ +public: + EventsViewItem(const QString &text) : QStandardItem(text) {} + + virtual bool operator<(const QStandardItem &other) const + { + if (data().type() == QVariant::String) { + // first column + return data(FilenameRole).toString() == other.data(FilenameRole).toString() ? + data(LineRole).toInt() < other.data(LineRole).toInt() : + data(FilenameRole).toString() < other.data(FilenameRole).toString(); + } + + return data().toDouble() < other.data().toDouble(); + } +}; + + +//////////////////////////////////////////////////////////////////////////////////// + +class QmlProfilerEventStatistics::QmlProfilerEventStatisticsPrivate +{ +public: + QmlProfilerEventStatisticsPrivate(QmlProfilerEventStatistics *qq) : q(qq) {} + + void postProcess(); + + QmlProfilerEventStatistics *q; + QmlEventHash m_rootHash; + QHash m_pendingEvents; + int m_lastLevel; +}; + + +//////////////////////////////////////////////////////////////////////////////////// + +class QmlProfilerEventsView::QmlProfilerEventsViewPrivate +{ +public: + QmlProfilerEventsViewPrivate(QmlProfilerEventsView *qq) : q(qq) {} + + void buildModelFromList(const QmlEventList &list, QStandardItem *parentItem, const QmlEventList &visitedFunctionsList = QmlEventList() ); + int getFieldCount(); + QString displayTime(double time) const; + QString nameForType(int typeNumber) const; + + + QmlProfilerEventsView *q; + + QmlProfilerEventStatistics *m_eventStatistics; + QStandardItemModel *m_model; + QList m_fieldShown; + bool m_showAnonymous; + int m_firstNumericColumn; +}; + + +//////////////////////////////////////////////////////////////////////////////////// + +QmlProfilerEventStatistics::QmlProfilerEventStatistics(QObject *parent) : + QObject(parent), d(new QmlProfilerEventStatisticsPrivate(this)) +{ + setObjectName("QmlProfilerEventStatistics"); + d->m_lastLevel = -1; +} + +QmlProfilerEventStatistics::~QmlProfilerEventStatistics() +{ + clear(); +} + +void QmlProfilerEventStatistics::clear() +{ + foreach (int levelNumber, d->m_pendingEvents.keys()) + d->m_pendingEvents[levelNumber].clear(); + + d->m_lastLevel = -1; + + foreach (QmlEventData *binding, d->m_rootHash.values()) + delete binding; + d->m_rootHash.clear(); +} + +QList QmlProfilerEventStatistics::getEventList() +{ + return d->m_rootHash.values(); +} + +void QmlProfilerEventStatistics::addRangedEvent(int type, int nestingLevel, int nestingInType, qint64 startTime, qint64 length, + const QStringList &data, const QString &fileName, int line) +{ + Q_UNUSED(startTime); + Q_UNUSED(nestingInType); + + const QChar colon = QLatin1Char(':'); + QString localName, displayName, location, details; + + if (data.isEmpty()) + details = tr("Source code not available"); + else { + details = data.join(" ").replace('\n'," ").simplified(); + QRegExp rewrite("\\(function \\$(\\w+)\\(\\) \\{ (return |)(.+) \\}\\)"); + bool match = rewrite.exactMatch(details); + if (match) { + details = rewrite.cap(1) + ": " + rewrite.cap(3); + } + if (details.startsWith(QString("file://"))) + details = details.mid(details.lastIndexOf(QChar('/')) + 1); + } + + if (fileName.isEmpty()) { + displayName = tr(""); + location = QString("--:%1:%2").arg(QString::number(type), details); + } else { + localName = QUrl(fileName).toLocalFile(); + displayName = localName.mid(localName.lastIndexOf(QChar('/')) + 1) + colon + QString::number(line); + location = fileName+colon+QString::number(line); + } + + + // New Data: if it's not in the hash, put it there + // if it's in the hash, get the reference from the hash + QmlEventData *newBinding; + QmlEventHash::iterator it = d->m_rootHash.find(location); + if (it != d->m_rootHash.end()) { + newBinding = it.value(); + newBinding->duration += length; + newBinding->calls++; + if (newBinding->maxTime < length) + newBinding->maxTime = length; + if (newBinding->minTime > length) + newBinding->minTime = length; + } else { + newBinding = new QmlEventData; + newBinding->calls = 1; + newBinding->duration = length; + newBinding->displayname = new QString(displayName); + newBinding->filename = new QString(fileName); + newBinding->location = new QString(location); + newBinding->line = line; + newBinding->minTime = length; + newBinding->maxTime = length; + newBinding->level = nestingLevel; + newBinding->eventType = (QmlEventType)type; + newBinding->details = new QString(details); + newBinding->parentList = new QmlEventList(); + newBinding->childrenList = new QmlEventList(); + d->m_rootHash.insert(location, newBinding); + } + + if (nestingLevel < d->m_lastLevel) { + // I'm the parent of the former + if (d->m_pendingEvents.contains(nestingLevel+1)) { + foreach (QmlEventData *child, d->m_pendingEvents[nestingLevel + 1]) { + if (!newBinding->childrenList->contains(child)) + newBinding->childrenList->append(child); + if (!child->parentList->contains(newBinding)) + child->parentList->append(newBinding); + } + d->m_pendingEvents[nestingLevel + 1].clear(); + } + + } + + if (nestingLevel > 1 && !d->m_pendingEvents[nestingLevel].contains(newBinding)) { + // I'm not root... there will come a parent later + d->m_pendingEvents[nestingLevel].append(newBinding); + } + + d->m_lastLevel = nestingLevel; +} + +void QmlProfilerEventStatistics::complete() +{ + d->postProcess(); + emit dataReady(); +} + +void QmlProfilerEventStatistics::QmlProfilerEventStatisticsPrivate::postProcess() +{ + double totalTime = 0; + + foreach (QmlEventData *binding, m_rootHash.values()) + totalTime += binding->duration; + + foreach (QmlEventData *binding, m_rootHash.values()) { + binding->percentOfTime = binding->duration * 100.0 / totalTime; + binding->timePerCall = binding->calls > 0 ? double(binding->duration) / binding->calls : 0; + } +} + +//////////////////////////////////////////////////////////////////////////////////// + +QmlProfilerEventsView::QmlProfilerEventsView(QWidget *parent, QmlProfilerEventStatistics *model) : + QTreeView(parent), d(new QmlProfilerEventsViewPrivate(this)) +{ + setObjectName("QmlProfilerEventsView"); + header()->setResizeMode(QHeaderView::Interactive); + header()->setDefaultSectionSize(100); + header()->setMinimumSectionSize(50); + setSortingEnabled(false); + setFrameStyle(QFrame::NoFrame); + + d->m_model = new QStandardItemModel(this); + setModel(d->m_model); + connect(this,SIGNAL(clicked(QModelIndex)), this,SLOT(jumpToItem(QModelIndex))); + + d->m_eventStatistics = 0; + setEventStatisticsModel(model); + + d->m_showAnonymous = false; + d->m_firstNumericColumn = 0; + + // default view + setViewType(EventsView); +} + +QmlProfilerEventsView::~QmlProfilerEventsView() +{ + clear(); + delete d->m_model; +} + +void QmlProfilerEventsView::setEventStatisticsModel( QmlProfilerEventStatistics *model ) +{ + if (d->m_eventStatistics) + disconnect(d->m_eventStatistics,SIGNAL(dataReady()),this,SLOT(buildModel())); + d->m_eventStatistics = model; + connect(d->m_eventStatistics,SIGNAL(dataReady()),this,SLOT(buildModel())); +} + +void QmlProfilerEventsView::setFieldViewable(Fields field, bool show) +{ + if (field < MaxFields) { + int length = d->m_fieldShown.count(); + if (field >= length) { + for (int i=length; im_fieldShown << false; + } + d->m_fieldShown[field] = show; + } +} + +void QmlProfilerEventsView::setViewType(ViewTypes type) +{ + switch (type) { + case EventsView: { + setObjectName("QmlProfilerEventsView"); + setFieldViewable(Name, true); + setFieldViewable(Type, true); + setFieldViewable(Percent, true); + setFieldViewable(TotalDuration, true); + setFieldViewable(CallCount, true); + setFieldViewable(TimePerCall, true); + setFieldViewable(MaxTime, true); + setFieldViewable(MinTime, true); + setFieldViewable(Details, false); + setFieldViewable(Parents, false); + setFieldViewable(Children, false); + setShowAnonymousEvents(false); + break; + } + case CallersView: { + setObjectName("QmlProfilerCallersView"); + setFieldViewable(Name, true); + setFieldViewable(Type, true); + setFieldViewable(Percent, false); + setFieldViewable(TotalDuration, false); + setFieldViewable(CallCount, false); + setFieldViewable(TimePerCall, false); + setFieldViewable(MaxTime, false); + setFieldViewable(MinTime, false); + setFieldViewable(Details, true); + setFieldViewable(Parents, true); + setFieldViewable(Children, false); + setShowAnonymousEvents(true); + break; + } + case CalleesView: { + setObjectName("QmlProfilerCalleesView"); + setFieldViewable(Name, true); + setFieldViewable(Type, true); + setFieldViewable(Percent, false); + setFieldViewable(TotalDuration, false); + setFieldViewable(CallCount, false); + setFieldViewable(TimePerCall, false); + setFieldViewable(MaxTime, false); + setFieldViewable(MinTime, false); + setFieldViewable(Details, true); + setFieldViewable(Parents, false); + setFieldViewable(Children, true); + setShowAnonymousEvents(true); + break; + } + default: break; + } + + buildModel(); +} + +void QmlProfilerEventsView::setShowAnonymousEvents( bool showThem ) +{ + d->m_showAnonymous = showThem; +} + +void QmlProfilerEventsView::setHeaderLabels() +{ + int fieldIndex = 0; + d->m_firstNumericColumn = 0; + + if (d->m_fieldShown[Name]) { + d->m_model->setHeaderData(fieldIndex++, Qt::Horizontal, QVariant(tr("Location"))); + d->m_firstNumericColumn++; + } + if (d->m_fieldShown[Type]) { + d->m_model->setHeaderData(fieldIndex++, Qt::Horizontal, QVariant(tr("Type"))); + d->m_firstNumericColumn++; + } + if (d->m_fieldShown[Percent]) + d->m_model->setHeaderData(fieldIndex++, Qt::Horizontal, QVariant(tr("Time in Percent"))); + if (d->m_fieldShown[TotalDuration]) + d->m_model->setHeaderData(fieldIndex++, Qt::Horizontal, QVariant(tr("Total Time"))); + if (d->m_fieldShown[CallCount]) + d->m_model->setHeaderData(fieldIndex++, Qt::Horizontal, QVariant(tr("Calls"))); + if (d->m_fieldShown[TimePerCall]) + d->m_model->setHeaderData(fieldIndex++, Qt::Horizontal, QVariant(tr("Time per Call"))); + if (d->m_fieldShown[MaxTime]) + d->m_model->setHeaderData(fieldIndex++, Qt::Horizontal, QVariant(tr("Longest Time"))); + if (d->m_fieldShown[MinTime]) + d->m_model->setHeaderData(fieldIndex++, Qt::Horizontal, QVariant(tr("Shortest Time"))); + if (d->m_fieldShown[Details]) + d->m_model->setHeaderData(fieldIndex++, Qt::Horizontal, QVariant(tr("Details"))); +} + +void QmlProfilerEventsView::clear() +{ + d->m_model->clear(); + d->m_model->setColumnCount(d->getFieldCount()); + + setHeaderLabels(); + setSortingEnabled(false); +} + +int QmlProfilerEventsView::QmlProfilerEventsViewPrivate::getFieldCount() +{ + int count = 0; + for (int i=0; i < m_fieldShown.count(); ++i) + if (m_fieldShown[i] && i != Parents && i != Children) + count++; + return count; +} + +void QmlProfilerEventsView::buildModel() +{ + if (d->m_eventStatistics) { + clear(); + d->buildModelFromList( d->m_eventStatistics->getEventList(), d->m_model->invisibleRootItem() ); + + bool hasBranches = d->m_fieldShown[Parents] || d->m_fieldShown[Children]; + setRootIsDecorated(hasBranches); + + setSortingEnabled(!hasBranches); + + if (!hasBranches) + sortByColumn(d->m_firstNumericColumn,Qt::DescendingOrder); + + expandAll(); + if (d->m_fieldShown[Name]) + resizeColumnToContents(0); + + if (d->m_fieldShown[Type]) + resizeColumnToContents(d->m_fieldShown[Name]?1:0); + collapseAll(); + } +} + +void QmlProfilerEventsView::QmlProfilerEventsViewPrivate::buildModelFromList( const QmlEventList &list, QStandardItem *parentItem, const QmlEventList &visitedFunctionsList ) +{ + foreach (QmlEventData *binding, list) { + if (visitedFunctionsList.contains(binding)) + continue; + + if ((!m_showAnonymous) && binding->filename->isEmpty()) + continue; + + QList newRow; + if (m_fieldShown[Name]) { + newRow << new EventsViewItem(*binding->displayname); + } + + if (m_fieldShown[Type]) { + newRow << new EventsViewItem(nameForType(binding->eventType)); + newRow.last()->setData(QVariant(binding->eventType)); + } + + if (m_fieldShown[Percent]) { + newRow << new EventsViewItem(QString::number(binding->percentOfTime,'f',2)+QLatin1String(" %")); + newRow.last()->setData(QVariant(binding->eventType)); + } + + if (m_fieldShown[TotalDuration]) { + newRow << new EventsViewItem(displayTime(binding->duration)); + newRow.last()->setData(QVariant(binding->duration)); + } + + if (m_fieldShown[CallCount]) { + newRow << new EventsViewItem(QString::number(binding->calls)); + newRow.last()->setData(QVariant(binding->calls)); + } + + if (m_fieldShown[TimePerCall]) { + newRow << new EventsViewItem(displayTime(binding->timePerCall)); + newRow.last()->setData(QVariant(binding->timePerCall)); + } + + if (m_fieldShown[MaxTime]) { + newRow << new EventsViewItem(displayTime(binding->maxTime)); + newRow.last()->setData(QVariant(binding->maxTime)); + } + + if (m_fieldShown[MinTime]) { + newRow << new EventsViewItem(displayTime(binding->minTime)); + newRow.last()->setData(QVariant(binding->minTime)); + } + + if (m_fieldShown[Details]) { + newRow << new EventsViewItem(*binding->details); + } + + if (!newRow.isEmpty()) { + // no edit + foreach (QStandardItem *item, newRow) + item->setEditable(false); + + // metadata + newRow.at(0)->setData(QVariant(*binding->location),LocationRole); + newRow.at(0)->setData(QVariant(*binding->filename),FilenameRole); + newRow.at(0)->setData(QVariant(binding->line),LineRole); + + // append + parentItem->appendRow(newRow); + + if (m_fieldShown[Parents] && !binding->parentList->isEmpty()) { + QmlEventList newParentList(visitedFunctionsList); + newParentList.append(binding); + + buildModelFromList(*binding->parentList, newRow.at(0), newParentList); + } + + if (m_fieldShown[Children] && !binding->childrenList->isEmpty()) { + QmlEventList newChildrenList(visitedFunctionsList); + newChildrenList.append(binding); + + buildModelFromList(*binding->childrenList, newRow.at(0), newChildrenList); + } + } + } +} + +QString QmlProfilerEventsView::QmlProfilerEventsViewPrivate::displayTime(double time) const +{ + if (time < 1e6) + return QString::number(time/1e3,'f',3) + QString::fromWCharArray(L" \u03BCs"); + if (time < 1e9) + return QString::number(time/1e6,'f',3) + QLatin1String(" ms"); + + return QString::number(time/1e9,'f',3) + QLatin1String(" s"); +} + +QString QmlProfilerEventsView::QmlProfilerEventsViewPrivate::nameForType(int typeNumber) const +{ + switch (typeNumber) { + case 0: return QmlProfilerEventsView::tr("Paint"); + case 1: return QmlProfilerEventsView::tr("Compile"); + case 2: return QmlProfilerEventsView::tr("Create"); + case 3: return QmlProfilerEventsView::tr("Binding"); + case 4: return QmlProfilerEventsView::tr("Signal"); + } + return QString(); +} + +void QmlProfilerEventsView::jumpToItem(const QModelIndex &index) +{ + QStandardItem *clickedItem = d->m_model->itemFromIndex(index); + QStandardItem *infoItem; + if (clickedItem->parent()) + infoItem = clickedItem->parent()->child(clickedItem->row(), 0); + else + infoItem = d->m_model->item(index.row(), 0); + + int line = infoItem->data(LineRole).toInt(); + if (line == -1) + return; + QString fileName = infoItem->data(FilenameRole).toString(); + emit gotoSourceLocation(fileName, line); +} + +} // namespace Internal +} // namespace QmlProfiler diff --git a/src/plugins/qmlprofiler/qmlprofilereventview.h b/src/plugins/qmlprofiler/qmlprofilereventview.h new file mode 100644 index 00000000000..9baba8e42b6 --- /dev/null +++ b/src/plugins/qmlprofiler/qmlprofilereventview.h @@ -0,0 +1,161 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** No Commercial Usage +** +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + +#ifndef QMLPROFILEREVENTVIEW_H +#define QMLPROFILEREVENTVIEW_H + +#include +#include "qmlprofilereventtypes.h" + +namespace QmlProfiler { +namespace Internal { + +struct QmlEventData +{ + QmlEventData() : displayname(0) , filename(0) , location(0) , details(0), + line(0), eventType(MaximumQmlEventType), level(-1), parentList(0), childrenList(0) {} + ~QmlEventData() { + delete displayname; + delete filename; + delete location; + delete parentList; + delete childrenList; + } + QString *displayname; + QString *filename; + QString *location; + QString *details; + int line; + QmlEventType eventType; + qint64 level; + QList< QmlEventData *> *parentList; + QList< QmlEventData *> *childrenList; + qint64 duration; + qint64 calls; + qint64 minTime; + qint64 maxTime; + double timePerCall; + double percentOfTime; +}; + + +typedef QHash QmlEventHash; +typedef QList QmlEventList; + +enum ItemRole { + LocationRole = Qt::UserRole+1, + FilenameRole = Qt::UserRole+2, + LineRole = Qt::UserRole+3 +}; + +class QmlProfilerEventStatistics : public QObject +{ + Q_OBJECT +public: + + explicit QmlProfilerEventStatistics(QObject *parent = 0); + ~QmlProfilerEventStatistics(); + + QmlEventList getEventList(); + +signals: + void dataReady(); + +public slots: + void clear(); + void addRangedEvent(int type, int nestingLevel, int nestingInType, qint64 startTime, qint64 length, + const QStringList &data, const QString &fileName, int line); + void complete(); + +private: + class QmlProfilerEventStatisticsPrivate; + QmlProfilerEventStatisticsPrivate *d; +}; + +class QmlProfilerEventsView : public QTreeView +{ + Q_OBJECT +public: + enum Fields { + Name, + Type, + Percent, + TotalDuration, + CallCount, + TimePerCall, + MaxTime, + MinTime, + Details, + Parents, + Children, + + MaxFields + }; + + enum ViewTypes { + EventsView, + CallersView, + CalleesView, + + MaxViewTypes + }; + + explicit QmlProfilerEventsView(QWidget *parent, QmlProfilerEventStatistics *model); + ~QmlProfilerEventsView(); + + void setEventStatisticsModel( QmlProfilerEventStatistics *model ); + void setFieldViewable(Fields field, bool show); + void setViewType(ViewTypes type); + void setShowAnonymousEvents( bool showThem ); + +signals: + void gotoSourceLocation(const QString &fileName, int lineNumber); + +public slots: + void clear(); + void jumpToItem(const QModelIndex &index); + void buildModel(); + +private: + void setHeaderLabels(); + +private: + class QmlProfilerEventsViewPrivate; + QmlProfilerEventsViewPrivate *d; + +}; + +} // namespace Internal +} // namespace QmlProfiler + +#endif // QMLPROFILEREVENTVIEW_H diff --git a/src/plugins/qmlprofiler/qmlprofilersummaryview.cpp b/src/plugins/qmlprofiler/qmlprofilersummaryview.cpp deleted file mode 100644 index 307d920c57a..00000000000 --- a/src/plugins/qmlprofiler/qmlprofilersummaryview.cpp +++ /dev/null @@ -1,283 +0,0 @@ -/************************************************************************** -** -** This file is part of Qt Creator -** -** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). -** -** Contact: Nokia Corporation (info@qt.nokia.com) -** -** No Commercial Usage -** -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at info@qt.nokia.com. -** -**************************************************************************/ - -#include "qmlprofilersummaryview.h" - -#include -#include - -#include -#include - -using namespace QmlProfiler::Internal; - -struct BindingData -{ - QString displayname; - QString filename; - int line; - qint64 duration; - qint64 calls; - qint64 minTime; - qint64 maxTime; - double tpc; - double percent; -}; - -class QmlProfilerSummaryView::QmlProfilerSummaryViewPrivate -{ -public: - QmlProfilerSummaryViewPrivate(QmlProfilerSummaryView *qq) : q(qq) {} - - QmlProfilerSummaryView *q; - - QStandardItemModel *m_model; - QHash m_bindingHash; - - enum RangeType { - Painting, - Compiling, - Creating, - Binding, - HandlingSignal, - - MaximumRangeType - }; -}; - -class ProfilerItem : public QStandardItem -{ -public: - ProfilerItem(const QString &text) : QStandardItem(text) {} - - virtual bool operator<(const QStandardItem &other) const - { - if (data().type() == QVariant::String) { - // first column - return data(Qt::UserRole+2).toString() == other.data(Qt::UserRole+2).toString() ? - data(Qt::UserRole+3).toInt() < other.data(Qt::UserRole+3).toInt() : - data(Qt::UserRole+2).toString() < other.data(Qt::UserRole+2).toString(); - } - - return data().toDouble() < other.data().toDouble(); - } -}; - -QmlProfilerSummaryView::QmlProfilerSummaryView(QWidget *parent) : - QTreeView(parent), d(new QmlProfilerSummaryViewPrivate(this)) -{ - setObjectName("QmlProfilerSummaryView"); - setRootIsDecorated(false); - header()->setResizeMode(QHeaderView::Interactive); - header()->setMinimumSectionSize(100); - setSortingEnabled(false); - setFrameStyle(QFrame::NoFrame); - - d->m_model = new QStandardItemModel(this); - - setModel(d->m_model); - - d->m_model->setColumnCount(7); - setHeaderLabels(); - - connect(this,SIGNAL(clicked(QModelIndex)), this,SLOT(jumpToItem(QModelIndex))); -} - -QmlProfilerSummaryView::~QmlProfilerSummaryView() -{ - delete d->m_model; -} - -void QmlProfilerSummaryView::clean() -{ - d->m_model->clear(); - d->m_model->setColumnCount(7); - - // clean the hash - QHashIterator it(d->m_bindingHash); - while (it.hasNext()) { - it.next(); - delete it.value(); - } - d->m_bindingHash.clear(); - - setHeaderLabels(); - setSortingEnabled(false); -} - -void QmlProfilerSummaryView::addRangedEvent(int type, int nestingLevel, int nestingInType, qint64 startTime, qint64 length, - const QStringList &data, const QString &fileName, int line) -{ - Q_UNUSED(startTime); - Q_UNUSED(data); - Q_UNUSED(nestingLevel); - Q_UNUSED(nestingInType); - - if (type != QmlProfilerSummaryViewPrivate::Binding && type != QmlProfilerSummaryViewPrivate::HandlingSignal) - return; - - if (fileName.isEmpty()) - return; - const QChar colon = QLatin1Char(':'); - QString localName = QUrl(fileName).toLocalFile(); - QString displayName = localName.mid(localName.lastIndexOf(QChar('/'))+1)+colon+QString::number(line); - QString location = fileName+colon+QString::number(line); - - QHash::iterator it = d->m_bindingHash.find(location); - if (it != d->m_bindingHash.end()) { - BindingData *bindingInfo = it.value(); - bindingInfo->duration += length; - bindingInfo->calls++; - if (bindingInfo->maxTime < length) - bindingInfo->maxTime = length; - if (bindingInfo->minTime > length) - bindingInfo->minTime = length; - } else { - BindingData *newBinding = new BindingData; - newBinding->calls = 1; - newBinding->duration = length; - newBinding->displayname = displayName; - newBinding->filename = fileName; - newBinding->line = line; - newBinding->minTime = length; - newBinding->maxTime = length; - - d->m_bindingHash.insert(location, newBinding); - } -} - -void QmlProfilerSummaryView::complete() -{ - // compute percentages - double totalTime = 0; - - QHashIterator it(d->m_bindingHash); - - while (it.hasNext()) { - it.next(); - totalTime += it.value()->duration; - } - - it.toFront(); - - while (it.hasNext()) { - it.next(); - BindingData *binding = it.value(); - binding->percent = binding->duration * 100.0 / totalTime; - binding->tpc = binding->calls > 0 ? double(binding->duration) / binding->calls : 0; - - appendRow(binding->displayname, - binding->filename, - binding->line, - binding->percent, - binding->duration, - binding->calls, - binding->tpc, - binding->maxTime, - binding->minTime); - - } - setSortingEnabled(true); - sortByColumn(1,Qt::DescendingOrder); - resizeColumnToContents(0); -} - -void QmlProfilerSummaryView::jumpToItem(const QModelIndex &index) -{ - int line = d->m_model->item(index.row(),0)->data(Qt::UserRole+3).toInt(); - if (line == -1) - return; - QString fileName = d->m_model->item(index.row(),0)->data(Qt::UserRole+2).toString(); - emit gotoSourceLocation(fileName, line); -} - -void QmlProfilerSummaryView::appendRow(const QString &displayName, - const QString &fileName, - int line, - double percentTime, - double totalTime, - int nCalls, - double timePerCall, - double maxTime, - double minTime) -{ - QString location = fileName + QLatin1Char(':') + QString::number(line); - ProfilerItem *locationColumn = new ProfilerItem(displayName); - locationColumn->setData(QVariant(location),Qt::UserRole+1); - locationColumn->setData(QVariant(fileName),Qt::UserRole+2); - locationColumn->setData(QVariant(line),Qt::UserRole+3); - locationColumn->setEditable(false); - ProfilerItem *percentColumn = new ProfilerItem(QString::number(percentTime,'f',2)+QLatin1String(" %")); - percentColumn->setData(QVariant(percentTime)); - percentColumn->setEditable(false); - ProfilerItem *timeColumn = new ProfilerItem(displayTime(totalTime)); - timeColumn->setData(QVariant(totalTime)); - timeColumn->setEditable(false); - ProfilerItem *callsColumn = new ProfilerItem(QString::number(nCalls)); - callsColumn->setData(QVariant(nCalls)); - callsColumn->setEditable(false); - ProfilerItem *tpcColumn = new ProfilerItem(displayTime(timePerCall)); - tpcColumn->setData(QVariant(timePerCall)); - tpcColumn->setEditable(false); - ProfilerItem *maxTimeColumn = new ProfilerItem(displayTime(maxTime)); - maxTimeColumn->setData(QVariant(maxTime)); - maxTimeColumn->setEditable(false); - ProfilerItem *minTimeColumn = new ProfilerItem(displayTime(minTime)); - minTimeColumn->setData(QVariant(minTime)); - minTimeColumn->setEditable(false); - - QList newRow; - newRow << locationColumn << percentColumn << timeColumn << callsColumn << tpcColumn << maxTimeColumn << minTimeColumn; - d->m_model->appendRow(newRow); -} - -QString QmlProfilerSummaryView::displayTime(double time) const -{ - if (time < 1e6) - return QString::number(time/1e3,'f',3) + QString::fromWCharArray(L" \u03BCs"); - if (time < 1e9) - return QString::number(time/1e6,'f',3) + QLatin1String(" ms"); - - return QString::number(time/1e9,'f',3) + QLatin1String(" s"); -} - -void QmlProfilerSummaryView::setHeaderLabels() -{ - d->m_model->setHeaderData(0, Qt::Horizontal, QVariant(tr("Location"))); - d->m_model->setHeaderData(1, Qt::Horizontal, QVariant(tr("Time in Percent"))); - d->m_model->setHeaderData(2, Qt::Horizontal, QVariant(tr("Total Time"))); - d->m_model->setHeaderData(3, Qt::Horizontal, QVariant(tr("Calls"))); - d->m_model->setHeaderData(4, Qt::Horizontal, QVariant(tr("Time per Call"))); - d->m_model->setHeaderData(5, Qt::Horizontal, QVariant(tr("Longest Time"))); - d->m_model->setHeaderData(6, Qt::Horizontal, QVariant(tr("Shortest Time"))); -} diff --git a/src/plugins/qmlprofiler/qmlprofilersummaryview.h b/src/plugins/qmlprofiler/qmlprofilersummaryview.h deleted file mode 100644 index 8de750d8063..00000000000 --- a/src/plugins/qmlprofiler/qmlprofilersummaryview.h +++ /dev/null @@ -1,80 +0,0 @@ -/************************************************************************** -** -** This file is part of Qt Creator -** -** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). -** -** Contact: Nokia Corporation (info@qt.nokia.com) -** -** No Commercial Usage -** -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at info@qt.nokia.com. -** -**************************************************************************/ - -#ifndef QMLPROFILERSUMMARYVIEW_H -#define QMLPROFILERSUMMARYVIEW_H - -#include - -namespace QmlProfiler { -namespace Internal { - -class QmlProfilerSummaryView : public QTreeView -{ - Q_OBJECT - -public: - explicit QmlProfilerSummaryView(QWidget *parent = 0); - ~QmlProfilerSummaryView(); - -signals: - void gotoSourceLocation(const QString &fileName, int lineNumber); - -public slots: - void clean(); - void addRangedEvent(int type, int nestingLevel, int nestingInType, qint64 startTime, qint64 length, - const QStringList &data, const QString &fileName, int line); - void complete(); - void jumpToItem(const QModelIndex &index); - -private: - class QmlProfilerSummaryViewPrivate; - QmlProfilerSummaryViewPrivate *d; - - void appendRow(const QString &displayname, - const QString &filename, - int line, - double percentTime, - double totalTime, - int ncalls, - double timepercall, - double maxtime, - double mintime); - void setHeaderLabels(); - QString displayTime(double time) const; -}; - -} // namespace Internal -} // namespace QmlProfiler - -#endif // QMLPROFILERSUMMARYVIEW_H diff --git a/src/plugins/qmlprofiler/qmlprofilertool.cpp b/src/plugins/qmlprofiler/qmlprofilertool.cpp index 597cd07e7c8..3360dea0a22 100644 --- a/src/plugins/qmlprofiler/qmlprofilertool.cpp +++ b/src/plugins/qmlprofiler/qmlprofilertool.cpp @@ -36,9 +36,7 @@ #include "qmlprofilerplugin.h" #include "qmlprofilerconstants.h" #include "qmlprofilerattachdialog.h" -#include "qmlprofilersummaryview.h" -#include "qmlprofilercalleeview.h" -#include "qmlprofilercallerview.h" +#include "qmlprofilereventview.h" #include "tracewindow.h" #include "timelineview.h" @@ -96,9 +94,10 @@ public: QTimer m_connectionTimer; int m_connectionAttempts; TraceWindow *m_traceWindow; - QmlProfilerSummaryView *m_summary; - QmlProfilerCalleeView *m_calleetree; - QmlProfilerCallerView *m_callertree; + QmlProfilerEventStatistics *m_statistics; + QmlProfilerEventsView *m_eventsView; + QmlProfilerEventsView *m_calleeView; + QmlProfilerEventsView *m_callerView; ProjectExplorer::Project *m_project; Utils::FileInProjectFinder m_projectFinder; ProjectExplorer::RunConfiguration *m_runConfiguration; @@ -236,29 +235,25 @@ void QmlProfilerTool::initializeDockWidgets() connect(d->m_traceWindow, SIGNAL(gotoSourceLocation(QString,int)),this, SLOT(gotoSourceLocation(QString,int))); connect(d->m_traceWindow, SIGNAL(timeChanged(qreal)), this, SLOT(updateTimer(qreal))); - d->m_summary = new QmlProfilerSummaryView(mw); + d->m_statistics = new QmlProfilerEventStatistics(mw); + d->m_eventsView = new QmlProfilerEventsView(mw, d->m_statistics); + d->m_eventsView->setViewType(QmlProfilerEventsView::EventsView); connect(d->m_traceWindow, SIGNAL(range(int,int,int,qint64,qint64,QStringList,QString,int)), - d->m_summary, SLOT(addRangedEvent(int,int,int,qint64,qint64,QStringList,QString,int))); + d->m_statistics, SLOT(addRangedEvent(int,int,int,qint64,qint64,QStringList,QString,int))); connect(d->m_traceWindow, SIGNAL(viewUpdated()), - d->m_summary, SLOT(complete())); - connect(d->m_summary, SIGNAL(gotoSourceLocation(QString,int)), + d->m_statistics, SLOT(complete())); + connect(d->m_eventsView, SIGNAL(gotoSourceLocation(QString,int)), this, SLOT(gotoSourceLocation(QString,int))); - d->m_calleetree = new QmlProfilerCalleeView(mw); - connect(d->m_traceWindow, SIGNAL(range(int,int,int,qint64,qint64,QStringList,QString,int)), - d->m_calleetree, SLOT(addRangedEvent(int,int,int,qint64,qint64,QStringList,QString,int))); - connect(d->m_traceWindow, SIGNAL(viewUpdated()), - d->m_calleetree, SLOT(complete())); - connect(d->m_calleetree, SIGNAL(gotoSourceLocation(QString,int)), + d->m_calleeView = new QmlProfilerEventsView(mw, d->m_statistics); + d->m_calleeView->setViewType(QmlProfilerEventsView::CalleesView); + connect(d->m_calleeView, SIGNAL(gotoSourceLocation(QString,int)), this, SLOT(gotoSourceLocation(QString,int))); - d->m_callertree = new QmlProfilerCallerView(mw); - connect(d->m_traceWindow, SIGNAL(range(int,int,int,qint64,qint64,QStringList,QString,int)), - d->m_callertree, SLOT(addRangedEvent(int,int,int,qint64,qint64,QStringList,QString,int))); - connect(d->m_traceWindow, SIGNAL(viewUpdated()), - d->m_callertree, SLOT(complete())); - connect(d->m_callertree, SIGNAL(gotoSourceLocation(QString,int)), + d->m_callerView = new QmlProfilerEventsView(mw, d->m_statistics); + d->m_callerView->setViewType(QmlProfilerEventsView::CallersView); + connect(d->m_callerView, SIGNAL(gotoSourceLocation(QString,int)), this, SLOT(gotoSourceLocation(QString,int))); Core::ICore *core = Core::ICore::instance(); @@ -275,17 +270,17 @@ void QmlProfilerTool::initializeDockWidgets() updateAttachAction(false); - QDockWidget *summaryDock = AnalyzerManager::createDockWidget - (this, tr("Bindings"), d->m_summary, Qt::BottomDockWidgetArea); + QDockWidget *eventsDock = AnalyzerManager::createDockWidget + (this, tr("Events"), d->m_eventsView, Qt::BottomDockWidgetArea); QDockWidget *timelineDock = AnalyzerManager::createDockWidget - (this, tr("Timeline"), d->m_traceWindow, Qt::BottomDockWidgetArea); + (this, tr("Timeline"), d->m_traceWindow, Qt::BottomDockWidgetArea); QDockWidget *calleeDock = AnalyzerManager::createDockWidget - (this, tr("Callees"), d->m_calleetree, Qt::BottomDockWidgetArea); + (this, tr("Callees"), d->m_calleeView, Qt::BottomDockWidgetArea); QDockWidget *callerDock = AnalyzerManager::createDockWidget - (this, tr("Callers"), d->m_callertree, Qt::BottomDockWidgetArea); + (this, tr("Callers"), d->m_callerView, Qt::BottomDockWidgetArea); - mw->splitDockWidget(mw->toolBarDockWidget(), summaryDock, Qt::Vertical); - mw->tabifyDockWidget(summaryDock, timelineDock); + mw->splitDockWidget(mw->toolBarDockWidget(), eventsDock, Qt::Vertical); + mw->tabifyDockWidget(eventsDock, timelineDock); mw->tabifyDockWidget(timelineDock, calleeDock); mw->tabifyDockWidget(calleeDock, callerDock); } @@ -436,9 +431,10 @@ void QmlProfilerTool::updateProjectFileList() void QmlProfilerTool::clearDisplay() { d->m_traceWindow->clearDisplay(); - d->m_summary->clean(); - d->m_calleetree->clean(); - d->m_callertree->clean(); + d->m_statistics->clear(); + d->m_eventsView->clear(); + d->m_calleeView->clear(); + d->m_callerView->clear(); } void QmlProfilerTool::attach() diff --git a/src/plugins/qmlprofiler/qmlprofilertraceclient.cpp b/src/plugins/qmlprofiler/qmlprofilertraceclient.cpp index cfc69dad55e..383c6f8610d 100644 --- a/src/plugins/qmlprofiler/qmlprofilertraceclient.cpp +++ b/src/plugins/qmlprofiler/qmlprofilertraceclient.cpp @@ -42,14 +42,14 @@ QmlProfilerTraceClient::QmlProfilerTraceClient(QDeclarativeDebugConnection *clie : QDeclarativeDebugClient(QLatin1String("CanvasFrameRate"), client), m_inProgressRanges(0), m_maximumTime(0), m_recording(false), m_nestingLevel(0) { - ::memset(m_rangeCount, 0, MaximumRangeType * sizeof(int)); - ::memset(m_nestingInType, 0, MaximumRangeType * sizeof(int)); + ::memset(m_rangeCount, 0, MaximumQmlEventType * sizeof(int)); + ::memset(m_nestingInType, 0, MaximumQmlEventType * sizeof(int)); } void QmlProfilerTraceClient::clearView() { - ::memset(m_rangeCount, 0, MaximumRangeType * sizeof(int)); - ::memset(m_nestingInType, 0, MaximumRangeType * sizeof(int)); + ::memset(m_rangeCount, 0, MaximumQmlEventType * sizeof(int)); + ::memset(m_nestingInType, 0, MaximumQmlEventType * sizeof(int)); m_nestingLevel = 0; emit clear(); } @@ -111,7 +111,7 @@ void QmlProfilerTraceClient::messageReceived(const QByteArray &data) int range; stream >> range; - if (range >= MaximumRangeType) + if (range >= MaximumQmlEventType) return; if (messageType == RangeStart) { @@ -150,7 +150,7 @@ void QmlProfilerTraceClient::messageReceived(const QByteArray &data) Location location = m_rangeLocations[range].count() ? m_rangeLocations[range].pop() : Location(); qint64 startTime = m_rangeStartTimes[range].pop(); - emit this->range((RangeType)range, m_nestingLevel, m_nestingInType[range], startTime, + emit this->range((QmlEventType)range, m_nestingLevel, m_nestingInType[range], startTime, time - startTime, data, location.fileName, location.line); --m_nestingLevel; --m_nestingInType[range]; diff --git a/src/plugins/qmlprofiler/qmlprofilertraceclient.h b/src/plugins/qmlprofiler/qmlprofilertraceclient.h index 207f63e9d6a..65f95b10685 100644 --- a/src/plugins/qmlprofiler/qmlprofilertraceclient.h +++ b/src/plugins/qmlprofiler/qmlprofilertraceclient.h @@ -38,6 +38,8 @@ #include #include +#include "qmlprofilereventtypes.h" + namespace QmlProfiler { namespace Internal { @@ -76,16 +78,6 @@ public: MaximumMessage }; - enum RangeType { - Painting, - Compiling, - Creating, - Binding, - HandlingSignal, - - MaximumRangeType - }; - bool isRecording() const { return m_recording; } public slots: @@ -112,14 +104,14 @@ protected: private: qint64 m_inProgressRanges; - QStack m_rangeStartTimes[MaximumRangeType]; - QStack m_rangeDatas[MaximumRangeType]; - QStack m_rangeLocations[MaximumRangeType]; - int m_rangeCount[MaximumRangeType]; + QStack m_rangeStartTimes[MaximumQmlEventType]; + QStack m_rangeDatas[MaximumQmlEventType]; + QStack m_rangeLocations[MaximumQmlEventType]; + int m_rangeCount[MaximumQmlEventType]; qint64 m_maximumTime; bool m_recording; int m_nestingLevel; - int m_nestingInType[MaximumRangeType]; + int m_nestingInType[MaximumQmlEventType]; }; } // namespace Internal From 25793bdc95716b3a23cf24106775ac621e7cb728 Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 29 Jun 2011 18:50:44 +0200 Subject: [PATCH 063/143] analyzer: enable remote valgrind on windows Change-Id: I9bc3811088c4bc78f0aba2bb375d7d47f15e9f2c Reviewed-on: http://codereview.qt.nokia.com/1037 Reviewed-by: Qt Sanity Bot Reviewed-by: hjk --- src/plugins/plugins.pro | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/src/plugins/plugins.pro b/src/plugins/plugins.pro index 8ef73ff1f27..6ceff9a63c2 100644 --- a/src/plugins/plugins.pro +++ b/src/plugins/plugins.pro @@ -43,11 +43,8 @@ SUBDIRS = plugin_coreplugin \ plugin_macros \ debugger/dumper.pro \ plugin_qmlprofiler \ - plugin_remotelinux - -!win32 { - SUBDIRS += plugin_valgrind -} + plugin_remotelinux \ + plugin_valgrind linux-* { SUBDIRS += debugger/ptracepreload.pro @@ -269,11 +266,9 @@ plugin_analyzerbase.depends = plugin_coreplugin plugin_analyzerbase.depends += plugin_projectexplorer plugin_analyzerbase.depends += plugin_remotelinux -!win32 { - plugin_valgrind.subdir = valgrind - plugin_valgrind.depends = plugin_coreplugin - plugin_valgrind.depends += plugin_analyzerbase -} +plugin_valgrind.subdir = valgrind +plugin_valgrind.depends = plugin_coreplugin +plugin_valgrind.depends += plugin_analyzerbase plugin_qmlprofiler.subdir = qmlprofiler plugin_qmlprofiler.depends = plugin_coreplugin From cfcb07bb0cc09301994bc5ac0173c904cf5d4e2d Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 4 Jul 2011 13:32:20 +0200 Subject: [PATCH 064/143] debugger: workaround for shadowed items in locals view The "" space caused trouble on parameter passing. As workaround, don't produce any. Change-Id: Ibef1bfc8dc43c790ac2a2aeb52d3509347b6c997 Reviewed-on: http://codereview.qt.nokia.com/1068 Reviewed-by: hjk --- share/qtcreator/dumper/bridge.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/share/qtcreator/dumper/bridge.py b/share/qtcreator/dumper/bridge.py index 43c67f6f75f..f8e159ee673 100644 --- a/share/qtcreator/dumper/bridge.py +++ b/share/qtcreator/dumper/bridge.py @@ -105,7 +105,7 @@ if True: #warn("SYMBOL %s (%s): " % (symbol, name)) if name in shadowed: level = shadowed[name] - name1 = "%s " % (name, level) + name1 = "%s@%s" % (name, level) shadowed[name] = level + 1 else: name1 = name From 885df811c44400e5c48fccc3b498d1b6217d94e2 Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 4 Jul 2011 13:37:01 +0200 Subject: [PATCH 065/143] debugger: don't duplicated "full name" information in break response Less information to keep in sync. Change-Id: Icd862bbf8965eefd8ea3ad17b6f574b1f85bb8d2 Reviewed-on: http://codereview.qt.nokia.com/1069 Reviewed-by: hjk Reviewed-by: Qt Sanity Bot --- src/plugins/debugger/breakhandler.cpp | 6 +++--- src/plugins/debugger/breakpoint.cpp | 3 --- src/plugins/debugger/breakpoint.h | 1 - src/plugins/debugger/debuggerstreamops.cpp | 2 -- src/plugins/debugger/gdb/gdbengine.cpp | 16 +++++++++++----- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/plugins/debugger/breakhandler.cpp b/src/plugins/debugger/breakhandler.cpp index ad912ac9d4b..8e73a8fbfd8 100644 --- a/src/plugins/debugger/breakhandler.cpp +++ b/src/plugins/debugger/breakhandler.cpp @@ -1269,10 +1269,10 @@ const BreakpointResponse &BreakHandler::response(BreakpointModelId id) const { static BreakpointResponse dummy; ConstIterator it = m_storage.find(id); - BREAK_ASSERT(it != m_storage.end(), - qDebug() << "NO RESPONSE FOR " << id; return dummy); - if (it == m_storage.end()) + if (it == m_storage.end()) { + qDebug() << "NO RESPONSE FOR " << id; return dummy; + } return it->response; } diff --git a/src/plugins/debugger/breakpoint.cpp b/src/plugins/debugger/breakpoint.cpp index 4c0983d1ddf..f348cf45c24 100644 --- a/src/plugins/debugger/breakpoint.cpp +++ b/src/plugins/debugger/breakpoint.cpp @@ -317,8 +317,6 @@ QString BreakpointResponse::toString() const ts << " Number: " << id.toString(); if (pending) ts << " [pending]"; - if (!fullName.isEmpty()) - ts << " FullName: " << fullName; if (!functionName.isEmpty()) ts << " Function: " << functionName; if (multiple) @@ -334,7 +332,6 @@ void BreakpointResponse::fromParameters(const BreakpointParameters &p) { BreakpointParameters::operator=(p); id = BreakpointResponseId(); - fullName.clear(); multiple = false; correctedLineNumber = 0; hitCount = 0; diff --git a/src/plugins/debugger/breakpoint.h b/src/plugins/debugger/breakpoint.h index c1c2c3074e9..82831320369 100644 --- a/src/plugins/debugger/breakpoint.h +++ b/src/plugins/debugger/breakpoint.h @@ -246,7 +246,6 @@ public: BreakpointResponseId id; //!< Breakpoint number assigned by the debugger engine. bool pending; //!< Breakpoint not fully resolved. int hitCount; //!< Number of times this has been hit. - QString fullName; //!< Full file name acknowledged by the debugger engine. bool multiple; //!< Happens in constructors/gdb. int correctedLineNumber; //!< Line number as seen by gdb. }; diff --git a/src/plugins/debugger/debuggerstreamops.cpp b/src/plugins/debugger/debuggerstreamops.cpp index 81cb608b2a0..7aec95d12cd 100644 --- a/src/plugins/debugger/debuggerstreamops.cpp +++ b/src/plugins/debugger/debuggerstreamops.cpp @@ -151,7 +151,6 @@ QDataStream &operator<<(QDataStream &stream, const BreakpointResponse &s) stream << s.condition; stream << s.ignoreCount; stream << s.fileName; - stream << s.fullName; stream << s.lineNumber; //stream << s.bpCorrectedLineNumber; stream << s.threadSpec; @@ -169,7 +168,6 @@ QDataStream &operator>>(QDataStream &stream, BreakpointResponse &s) stream >> s.condition; stream >> s.ignoreCount; stream >> s.fileName; - stream >> s.fullName; stream >> s.lineNumber; //stream >> s.bpCorrectedLineNumber; stream >> s.threadSpec; diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index e95f4a42770..2227b12ae30 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -2504,13 +2504,19 @@ void GdbEngine::handleBreakInsert1(const GdbResponse &response) BreakHandler *handler = breakHandler(); BreakpointModelId id = response.cookie.value(); if (response.resultClass == GdbResultDone) { - const GdbMi bkpt = response.data.findChild("bkpt"); - const BreakpointResponseId rid(bkpt.findChild("number").data()); + // The result is a list with the first entry marked "bkpt" + // and "unmarked" rest. The "bkpt" one seems to always be + // the "main" entry. Use the "main" entry to retrieve the + // already known data from the BreakpointManager, and then + // iterate over all items to update main- and sub-data. + const GdbMi mainbkpt = response.data.findChild("bkpt"); + QByteArray nr = mainbkpt.findChild("number").data(); + BreakpointResponseId rid(nr); if (!isHiddenBreakpoint(rid)) { BreakpointResponse br = handler->response(id); foreach (const GdbMi bkpt, response.data.children()) { - QByteArray nr = bkpt.findChild("number").data(); - BreakpointResponseId rid(nr); + nr = bkpt.findChild("number").data(); + rid = BreakpointResponseId(nr); if (nr.contains('.')) { // A sub-breakpoint. BreakpointResponse sub; @@ -2519,7 +2525,7 @@ void GdbEngine::handleBreakInsert1(const GdbResponse &response) sub.type = br.type; handler->insertSubBreakpoint(id, sub); } else { - // A primary breakpoint. + // A (the?) primary breakpoint. updateResponse(br, bkpt); br.id = rid; handler->setResponse(id, br); From 7020cdc587b8f8a53f373cd7cd8ad2a3d84b2f36 Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 4 Jul 2011 14:08:48 +0200 Subject: [PATCH 066/143] debugger: fix parsing of last sub-breakpoint of a breakpoint Last chunk was not added properly. Change-Id: I3999650eabdedcebb412f84b530b5817f2ae1e0d Reviewed-on: http://codereview.qt.nokia.com/1070 Reviewed-by: hjk Reviewed-by: Qt Sanity Bot --- src/plugins/debugger/gdb/gdbengine.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index 2227b12ae30..a1ae97da3af 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -2848,7 +2848,7 @@ void GdbEngine::extractDataFromInfoBreak(const QString &output, BreakpointModelI sub.address = address; sub.functionName = QString::fromUtf8(function); sub.setLocation(location); - sub.id = subId; + sub.id = BreakpointResponseId(majorPart, minorPart); sub.type = response.type; sub.address = address; handler->insertSubBreakpoint(id, sub); @@ -2863,7 +2863,20 @@ void GdbEngine::extractDataFromInfoBreak(const QString &output, BreakpointModelI } } } - // Commit main data. + if (minorPart) { + // Commit last chunk. + BreakpointResponse sub; + sub.address = address; + sub.functionName = QString::fromUtf8(function); + sub.setLocation(location); + sub.id = BreakpointResponseId(majorPart, minorPart); + sub.type = response.type; + sub.address = address; + handler->insertSubBreakpoint(id, sub); + location.clear(); + function.clear(); + address = 0; + } } else { qDebug() << "COULD NOT MATCH" << output; response.id = BreakpointResponseId(); // Unavailable. From 73d3ef0ae695e9d5c9dba26750f85e058d9ce8f8 Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 4 Jul 2011 14:24:42 +0200 Subject: [PATCH 067/143] debugger: only update location when the information gets better The contents of the "original location" field is sometimes worse than what we collected otherwise. Use it only if it points to a readable file. Change-Id: I6c7229ead803e9f7970b8322f29469bfbe350b5d Reviewed-on: http://codereview.qt.nokia.com/1072 Reviewed-by: hjk --- src/plugins/debugger/breakpoint.cpp | 10 ++++++++-- src/plugins/debugger/breakpoint.h | 2 +- src/plugins/debugger/gdb/gdbengine.cpp | 6 +++--- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/plugins/debugger/breakpoint.cpp b/src/plugins/debugger/breakpoint.cpp index f348cf45c24..4d1f9c5be70 100644 --- a/src/plugins/debugger/breakpoint.cpp +++ b/src/plugins/debugger/breakpoint.cpp @@ -36,6 +36,7 @@ #include #include +#include namespace Debugger { namespace Internal { @@ -234,12 +235,17 @@ bool BreakpointParameters::conditionsMatch(const QByteArray &other) const return s1 == s2; } -void BreakpointParameters::setLocation(const QByteArray &location) +void BreakpointParameters::updateLocation(const QByteArray &location) { if (location.size()) { int pos = location.indexOf(':'); lineNumber = location.mid(pos + 1).toInt(); - fileName = QString::fromUtf8(location.left(pos)); + QString file = QString::fromUtf8(location.left(pos)); + if (file.startsWith(QLatin1Char('"')) && file.endsWith(QLatin1Char('"'))) + file = file.mid(1, file.size() - 2); + QFileInfo fi(file); + if (fi.isReadable()) + fileName = fi.absoluteFilePath(); } } diff --git a/src/plugins/debugger/breakpoint.h b/src/plugins/debugger/breakpoint.h index 82831320369..7e1fbe5856f 100644 --- a/src/plugins/debugger/breakpoint.h +++ b/src/plugins/debugger/breakpoint.h @@ -209,7 +209,7 @@ public: bool isBreakpoint() const { return !isWatchpoint() && !isTracepoint(); } bool isTracepoint() const { return tracepoint; } QString toString() const; - void setLocation(const QByteArray &location); // file.cpp:42 + void updateLocation(const QByteArray &location); // file.cpp:42 bool operator==(const BreakpointParameters &p) const { return equals(p); } bool operator!=(const BreakpointParameters &p) const { return !equals(p); } diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index a1ae97da3af..490e12c6725 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -2386,7 +2386,7 @@ void GdbEngine::updateResponse(BreakpointResponse &response, const GdbMi &bkpt) response.fileName = name; if (response.fileName.isEmpty()) - response.setLocation(originalLocation); + response.updateLocation(originalLocation); } QString GdbEngine::breakLocation(const QString &file) const @@ -2847,7 +2847,7 @@ void GdbEngine::extractDataFromInfoBreak(const QString &output, BreakpointModelI BreakpointResponse sub; sub.address = address; sub.functionName = QString::fromUtf8(function); - sub.setLocation(location); + sub.updateLocation(location); sub.id = BreakpointResponseId(majorPart, minorPart); sub.type = response.type; sub.address = address; @@ -2868,7 +2868,7 @@ void GdbEngine::extractDataFromInfoBreak(const QString &output, BreakpointModelI BreakpointResponse sub; sub.address = address; sub.functionName = QString::fromUtf8(function); - sub.setLocation(location); + sub.updateLocation(location); sub.id = BreakpointResponseId(majorPart, minorPart); sub.type = response.type; sub.address = address; From 7aea1ec3d9bf50be29e8d6ccef51a9fd7cce2bd7 Mon Sep 17 00:00:00 2001 From: Daniel Molkentin Date: Mon, 4 Jul 2011 12:20:37 +0200 Subject: [PATCH 068/143] WelcomeScreen: Only load the tab when it's being requested. Change-Id: I4cdd10059b4bcbba7db882fca9964a9dcf9a1db4 Reviewed-on: http://codereview.qt.nokia.com/1057 Reviewed-by: Qt Sanity Bot Reviewed-by: Eike Ziller --- share/qtcreator/welcomescreen/widgets/TabWidget.qml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/share/qtcreator/welcomescreen/widgets/TabWidget.qml b/share/qtcreator/welcomescreen/widgets/TabWidget.qml index d8602e20c48..fbd951668c6 100644 --- a/share/qtcreator/welcomescreen/widgets/TabWidget.qml +++ b/share/qtcreator/welcomescreen/widgets/TabWidget.qml @@ -14,12 +14,13 @@ Item { Repeater { id: contentRepeater Loader { + property bool active: index == tabWidget.current id: pageLoader clip: true - opacity: index == tabWidget.current + opacity: active anchors.fill: parent anchors.margins: 4 - source: model.modelData.pageLocation + onActiveChanged: if (active && source == "") source = model.modelData.pageLocation onStatusChanged: { if (pageLoader.status == Loader.Error) console.debug(source + ' failed to load') From 26f3f2055c376abd20f59a433620b60d63d2ffed Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 4 Jul 2011 14:53:37 +0200 Subject: [PATCH 069/143] debugger: don't use C comments in a C++ comment Confuses the disassembler highlighter. Change-Id: If6530860324fcecba678fa60ca608a84b7822e17 Reviewed-on: http://codereview.qt.nokia.com/1074 Reviewed-by: Qt Sanity Bot Reviewed-by: hjk --- src/plugins/debugger/gdb/gdbengine.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index 490e12c6725..85951ccfc63 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -1070,8 +1070,8 @@ void GdbEngine::handleResultRecord(GdbResponse *response) // Happens with some incarnations of gdb 6.8 for "jump to line" // (response->resultClass == GdbResultDone && cmd.command.startsWith("jump")) // (response->resultClass == GdbResultDone && cmd.command.startsWith("detach")) - // Happens when stepping finishes very quickly and issues *stopped/^done - // instead of ^running/*stopped + // Happens when stepping finishes very quickly and issues *stopped and ^done + // instead of ^running and *stopped // (response->resultClass == GdbResultDone && (cmd.flags & RunRequest)); if (!isExpectedResult) { From 675072f11116412e407c3d0a7c62550d64257989 Mon Sep 17 00:00:00 2001 From: Daniel Teske Date: Mon, 4 Jul 2011 11:33:10 +0200 Subject: [PATCH 070/143] Remove old qt version settings on upgrade. Change-Id: I1544c4c241fced2015d2bdfb57a70ce828223786 Reviewed-on: http://codereview.qt.nokia.com/1080 Reviewed-by: Daniel Teske --- src/plugins/qtsupport/qtversionmanager.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/plugins/qtsupport/qtversionmanager.cpp b/src/plugins/qtsupport/qtversionmanager.cpp index 551e874b568..a259363c174 100644 --- a/src/plugins/qtsupport/qtversionmanager.cpp +++ b/src/plugins/qtsupport/qtversionmanager.cpp @@ -428,8 +428,7 @@ bool QtVersionManager::legacyRestore() } s->endArray(); - // TODO add removal of old settings - // s->remove(QtVersionsSectionName); + s->remove(QtVersionsSectionName); return true; } From 5800bb42fbe0b97db587b8e3d2c71d342a17fd00 Mon Sep 17 00:00:00 2001 From: Daniel Teske Date: Mon, 4 Jul 2011 11:16:30 +0200 Subject: [PATCH 071/143] Remove broken code that tried to select the project node This code only works in some cases Change-Id: I7469ed2f14da4307cc6a3864a50eb577383082b3 Reviewed-on: http://codereview.qt.nokia.com/1079 Reviewed-by: Qt Sanity Bot Reviewed-by: Daniel Teske --- src/plugins/projectexplorer/projecttreewidget.cpp | 14 +------------- src/plugins/projectexplorer/projecttreewidget.h | 1 - 2 files changed, 1 insertion(+), 14 deletions(-) diff --git a/src/plugins/projectexplorer/projecttreewidget.cpp b/src/plugins/projectexplorer/projecttreewidget.cpp index 2e326022cc6..1d3b8da6d69 100644 --- a/src/plugins/projectexplorer/projecttreewidget.cpp +++ b/src/plugins/projectexplorer/projecttreewidget.cpp @@ -101,8 +101,7 @@ ProjectTreeWidget::ProjectTreeWidget(QWidget *parent) m_model(0), m_filterProjectsAction(0), m_autoSync(false), - m_autoExpand(true), - m_currentItemLocked(0) + m_autoExpand(true) { m_model = new FlatModel(m_explorer->session()->sessionNode(), this); Project *pro = m_explorer->session()->startupProject(); @@ -282,13 +281,6 @@ void ProjectTreeWidget::setCurrentItem(Node *node, Project *project) if (debug) qDebug() << "ProjectTreeWidget::setCurrentItem(" << (project ? project->displayName() : "0") << ", " << (node ? node->path() : "0") << ")"; - if (m_currentItemLocked) { - if (m_currentItemLocked == node) { - m_currentItemLocked = 0; - return; - } - m_currentItemLocked = 0; - } if (!project) { return; @@ -326,10 +318,6 @@ void ProjectTreeWidget::showContextMenu(const QPoint &pos) void ProjectTreeWidget::handleProjectAdded(ProjectExplorer::Project *project) { - // We disable auto-synchronization for the current node so that the project - // is selected until another file is opened - m_currentItemLocked = m_model->nodeForIndex(m_view->currentIndex()); - Node *node = project->rootProjectNode(); QModelIndex idx = m_model->indexForNode(node); if (m_autoExpand) // disabled while session restoring diff --git a/src/plugins/projectexplorer/projecttreewidget.h b/src/plugins/projectexplorer/projecttreewidget.h index 9a15cc9169d..570aa7fc001 100644 --- a/src/plugins/projectexplorer/projecttreewidget.h +++ b/src/plugins/projectexplorer/projecttreewidget.h @@ -101,7 +101,6 @@ private: QString m_modelId; bool m_autoSync; bool m_autoExpand; - Node *m_currentItemLocked; friend class ProjectTreeWidgetFactory; }; From 163128fae882b27f86cb9b1121059df2a68ad4f3 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Mon, 4 Jul 2011 14:48:01 +0200 Subject: [PATCH 072/143] Valgrind: Fix declspec Change-Id: I4472a34d7ffc747ea4424ce9caa863829fd69f63 Reviewed-on: http://codereview.qt.nokia.com/1075 Reviewed-by: Qt Sanity Bot Reviewed-by: hjk --- src/plugins/valgrind/valgrind_global.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/valgrind/valgrind_global.h b/src/plugins/valgrind/valgrind_global.h index 27ce52a837f..62a4e13cf40 100644 --- a/src/plugins/valgrind/valgrind_global.h +++ b/src/plugins/valgrind/valgrind_global.h @@ -37,7 +37,7 @@ #include -#if defined(VALGRINDTOOLBASE_LIBRARY) +#if defined(VALGRIND_LIBRARY) # define VALGRINDTOOLBASE_EXPORT Q_DECL_EXPORT #else # define VALGRINDTOOLBASE_EXPORT Q_DECL_IMPORT From 06a41da04e726ffd35da18d99cd2f46cb99467be Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 4 Jul 2011 16:16:49 +0200 Subject: [PATCH 073/143] analyzer: move convenience factory back to base plugin Change-Id: Ife82b74ce4b457dd9e6a6cc3749cb629aeeacf58 Reviewed-on: http://codereview.qt.nokia.com/1086 Reviewed-by: hjk Reviewed-by: Qt Sanity Bot --- src/plugins/analyzerbase/analyzermanager.cpp | 37 ++++- src/plugins/analyzerbase/analyzermanager.h | 3 +- src/plugins/analyzerbase/analyzerplugin.cpp | 147 ++++++++++++++++ src/plugins/analyzerbase/ianalyzertool.cpp | 5 + src/plugins/analyzerbase/ianalyzertool.h | 3 +- src/plugins/qmlprofiler/qmlprofilertool.cpp | 8 - src/plugins/qmlprofiler/qmlprofilertool.h | 1 - src/plugins/valgrind/callgrindtool.cpp | 5 - src/plugins/valgrind/callgrindtool.h | 2 - src/plugins/valgrind/memchecktool.cpp | 5 - src/plugins/valgrind/memchecktool.h | 1 - src/plugins/valgrind/valgrindplugin.cpp | 166 ------------------- src/plugins/valgrind/valgrindplugin.h | 1 - 13 files changed, 188 insertions(+), 196 deletions(-) diff --git a/src/plugins/analyzerbase/analyzermanager.cpp b/src/plugins/analyzerbase/analyzermanager.cpp index 1c9caaefe1a..f939c410692 100644 --- a/src/plugins/analyzerbase/analyzermanager.cpp +++ b/src/plugins/analyzerbase/analyzermanager.cpp @@ -42,6 +42,8 @@ #include "analyzerutils.h" #include "ianalyzertool.h" +#include "startremotedialog.h" + #include #include #include @@ -846,11 +848,6 @@ void AnalyzerManager::stopTool() stopAction()->trigger(); } -void AnalyzerManager::startLocalTool(IAnalyzerTool *tool, StartMode mode) -{ - m_instance->d->startLocalTool(tool, mode); -} - QAction *AnalyzerManager::stopAction() { return m_instance->d->m_stopAction; @@ -870,6 +867,36 @@ IAnalyzerTool *AnalyzerManager::toolFromId(const QByteArray &id) return 0; } +static void startRemoteTool(IAnalyzerTool *tool, StartMode mode) +{ + StartRemoteDialog dlg; + if (dlg.exec() != QDialog::Accepted) + return; + + AnalyzerStartParameters sp; + sp.toolId = tool->id(); + sp.startMode = mode; + sp.connParams = dlg.sshParams(); + sp.debuggee = dlg.executable(); + sp.debuggeeArgs = dlg.arguments(); + sp.displayName = dlg.executable(); + sp.workingDirectory = dlg.workingDirectory(); + + AnalyzerRunControl *rc = new AnalyzerRunControl(tool, sp, 0); + QObject::connect(AnalyzerManager::stopAction(), SIGNAL(triggered()), rc, SLOT(stopIt())); + + ProjectExplorer::ProjectExplorerPlugin::instance()->startRunControl(rc, tool->id()); +} + +void AnalyzerManager::defaultStartTool(IAnalyzerTool *tool, StartMode mode) +{ + if (mode == StartLocal) + m_instance->d->startLocalTool(tool, mode); + if (mode == StartRemote) + startRemoteTool(tool, mode); + // m_instance->d->startRemoteTool(tool, mode); +} + } // namespace Analyzer #include "analyzermanager.moc" diff --git a/src/plugins/analyzerbase/analyzermanager.h b/src/plugins/analyzerbase/analyzermanager.h index 26bb66a0a86..68a81611de4 100644 --- a/src/plugins/analyzerbase/analyzermanager.h +++ b/src/plugins/analyzerbase/analyzermanager.h @@ -84,7 +84,8 @@ public: static void stopTool(); // Convenience functions. - static void startLocalTool(IAnalyzerTool *tool, StartMode mode); + //static void startLocalTool(IAnalyzerTool *tool, StartMode mode); + static void defaultStartTool(IAnalyzerTool *tool, StartMode mode); static QString msgToolStarted(const QString &name); static QString msgToolFinished(const QString &name, int issuesFound); diff --git a/src/plugins/analyzerbase/analyzerplugin.cpp b/src/plugins/analyzerbase/analyzerplugin.cpp index e914130f0dd..05e10f2389f 100644 --- a/src/plugins/analyzerbase/analyzerplugin.cpp +++ b/src/plugins/analyzerbase/analyzerplugin.cpp @@ -33,8 +33,14 @@ **************************************************************************/ #include "analyzerplugin.h" + #include "analyzerconstants.h" #include "analyzermanager.h" +#include "analyzerruncontrol.h" +#include "analyzersettings.h" +#include "analyzerstartparameters.h" +#include "analyzerrunconfigwidget.h" +#include "startremotedialog.h" #include "ianalyzertool.h" #include @@ -43,19 +49,152 @@ #include #include + +#include +#include #include #include +#include +#include + +#include + #include +#include #include #include #include using namespace Analyzer; using namespace Analyzer::Internal; +using namespace ProjectExplorer; static AnalyzerPlugin *m_instance = 0; +namespace Analyzer { +namespace Internal { + +///////////////////////////////////////////////////////////////////////////////// +// +// AnalyzerRunControlFactory +// +///////////////////////////////////////////////////////////////////////////////// + +static AnalyzerStartParameters localStartParameters(RunConfiguration *runConfiguration) +{ + AnalyzerStartParameters sp; + QTC_ASSERT(runConfiguration, return sp); + LocalApplicationRunConfiguration *rc = + qobject_cast(runConfiguration); + QTC_ASSERT(rc, return sp); + + sp.startMode = StartLocal; + sp.environment = rc->environment(); + sp.workingDirectory = rc->workingDirectory(); + sp.debuggee = rc->executable(); + sp.debuggeeArgs = rc->commandLineArguments(); + sp.displayName = rc->displayName(); + sp.connParams.host = QLatin1String("localhost"); + sp.connParams.port = rc->qmlDebugServerPort(); + return sp; +} + +static AnalyzerStartParameters remoteLinuxStartParameters(RunConfiguration *runConfiguration) +{ + AnalyzerStartParameters sp; + RemoteLinux::RemoteLinuxRunConfiguration * const rc + = qobject_cast(runConfiguration); + QTC_ASSERT(rc, return sp); + + sp.startMode = StartRemote; + sp.debuggee = rc->remoteExecutableFilePath(); + sp.debuggeeArgs = rc->arguments(); + sp.connParams = rc->deviceConfig()->sshParameters(); + sp.analyzerCmdPrefix = rc->commandPrefix(); + sp.displayName = rc->displayName(); + return sp; +} + + +class AnalyzerRunControlFactory : public ProjectExplorer::IRunControlFactory +{ + Q_OBJECT + +public: + AnalyzerRunControlFactory(QObject *parent = 0); + + typedef ProjectExplorer::RunConfiguration RunConfiguration; + typedef ProjectExplorer::RunControl RunControl; + + // IRunControlFactory + bool canRun(RunConfiguration *runConfiguration, const QString &mode) const; + RunControl *create(RunConfiguration *runConfiguration, const QString &mode); + QString displayName() const; + + ProjectExplorer::IRunConfigurationAspect *createRunConfigurationAspect(); + ProjectExplorer::RunConfigWidget *createConfigurationWidget(RunConfiguration *runConfiguration); +}; + +AnalyzerRunControlFactory::AnalyzerRunControlFactory(QObject *parent) + : IRunControlFactory(parent) +{ + setObjectName(QLatin1String("AnalyzerRunControlFactory")); +} + +bool AnalyzerRunControlFactory::canRun(RunConfiguration *runConfiguration, const QString &mode) const +{ + Q_UNUSED(runConfiguration); + // FIXME: This is not generic. + return mode.startsWith("Callgrind") || mode.startsWith("Memcheck") || mode == "QmlProfiler"; +} + +RunControl *AnalyzerRunControlFactory::create(RunConfiguration *runConfiguration, const QString &mode) +{ + QTC_ASSERT(canRun(runConfiguration, mode), return 0); + + AnalyzerStartParameters sp; + if (qobject_cast(runConfiguration)) { + sp = localStartParameters(runConfiguration); + } else if (qobject_cast(runConfiguration)) { + sp = remoteLinuxStartParameters(runConfiguration); + } else { + // Might be S60DeviceRunfiguration, or something else ... + //sp.startMode = StartRemote; + sp.startMode = StartRemote; + } + + IAnalyzerTool *tool = AnalyzerManager::toolFromId(mode.toLatin1()); + AnalyzerRunControl *rc = new AnalyzerRunControl(tool, sp, runConfiguration); + QObject::connect(AnalyzerManager::stopAction(), SIGNAL(triggered()), rc, SLOT(stopIt())); + //m_isRunning = true; + return rc; +} + +QString AnalyzerRunControlFactory::displayName() const +{ + return tr("Analyzer"); +} + +IRunConfigurationAspect *AnalyzerRunControlFactory::createRunConfigurationAspect() +{ + return new AnalyzerProjectSettings; +} + +RunConfigWidget *AnalyzerRunControlFactory::createConfigurationWidget(RunConfiguration *runConfiguration) +{ + LocalApplicationRunConfiguration *localRc = + qobject_cast(runConfiguration); + if (!localRc) + return 0; + AnalyzerProjectSettings *settings = runConfiguration->extraAspect(); + if (!settings) + return 0; + + AnalyzerRunConfigWidget *ret = new AnalyzerRunConfigWidget; + ret->setRunConfiguration(runConfiguration); + return ret; +} //////////////////////////////////////////////////////////////////////// // @@ -106,6 +245,9 @@ bool AnalyzerPlugin::initialize(const QStringList &arguments, QString *errorStri //: Category under which Analyzer tasks are listed in build issues view hub->addCategory(QLatin1String(Constants::ANALYZERTASK_ID), tr("Analyzer")); + AnalyzerRunControlFactory *factory = new AnalyzerRunControlFactory(); + addAutoReleasedObject(factory); + return true; } @@ -125,4 +267,9 @@ AnalyzerPlugin *AnalyzerPlugin::instance() return m_instance; } +} // namespace Internal +} // namespace Analyzer + Q_EXPORT_PLUGIN(AnalyzerPlugin) + +#include "analyzerplugin.moc" diff --git a/src/plugins/analyzerbase/ianalyzertool.cpp b/src/plugins/analyzerbase/ianalyzertool.cpp index f0dce04541c..3945fdb9a7f 100644 --- a/src/plugins/analyzerbase/ianalyzertool.cpp +++ b/src/plugins/analyzerbase/ianalyzertool.cpp @@ -64,4 +64,9 @@ QString IAnalyzerTool::defaultActionName(const IAnalyzerTool *tool, StartMode mo return base; } +void IAnalyzerTool::defaultStartTool(IAnalyzerTool *tool, StartMode mode) +{ + AnalyzerManager::defaultStartTool(tool, mode); +} + } // namespace Analyzer diff --git a/src/plugins/analyzerbase/ianalyzertool.h b/src/plugins/analyzerbase/ianalyzertool.h index 5ddcde892a4..180e15cd76a 100644 --- a/src/plugins/analyzerbase/ianalyzertool.h +++ b/src/plugins/analyzerbase/ianalyzertool.h @@ -105,6 +105,7 @@ public: static QByteArray defaultMenuGroup(StartMode mode); static QByteArray defaultActionId(const IAnalyzerTool *tool, StartMode mode); static QString defaultActionName(const IAnalyzerTool *tool, StartMode mode); + static void defaultStartTool(IAnalyzerTool *tool, StartMode mode); /// This gets called after all analyzation tools where initialized. virtual void extensionsInitialized() = 0; @@ -124,7 +125,7 @@ public: virtual IAnalyzerEngine *createEngine(const AnalyzerStartParameters &sp, ProjectExplorer::RunConfiguration *runConfiguration = 0) = 0; - virtual void startTool(StartMode mode) = 0; + virtual void startTool(StartMode mode) { defaultStartTool(this, mode); } /// Called when tools gets selected. virtual void toolSelected() const {} diff --git a/src/plugins/qmlprofiler/qmlprofilertool.cpp b/src/plugins/qmlprofiler/qmlprofilertool.cpp index 3360dea0a22..716d4f332ed 100644 --- a/src/plugins/qmlprofiler/qmlprofilertool.cpp +++ b/src/plugins/qmlprofiler/qmlprofilertool.cpp @@ -537,11 +537,3 @@ void QmlProfilerTool::updateRecordingState() if (d->m_traceWindow->isRecording()) clearDisplay(); } - -void QmlProfilerTool::startTool(StartMode mode) -{ - if (mode == StartLocal) - AnalyzerManager::startLocalTool(this, mode); - if (mode == StartRemote) - AnalyzerManager::startLocalTool(this, mode); -} diff --git a/src/plugins/qmlprofiler/qmlprofilertool.h b/src/plugins/qmlprofiler/qmlprofilertool.h index f3d9b3063ea..50e3d1d55c0 100644 --- a/src/plugins/qmlprofiler/qmlprofilertool.h +++ b/src/plugins/qmlprofiler/qmlprofilertool.h @@ -62,7 +62,6 @@ public: ProjectExplorer::RunConfiguration *runConfiguration = 0); QWidget *createControlWidget(); - void startTool(Analyzer::StartMode mode); public slots: void connectClient(int port); diff --git a/src/plugins/valgrind/callgrindtool.cpp b/src/plugins/valgrind/callgrindtool.cpp index 7e0ea98b195..c74dbd4a003 100644 --- a/src/plugins/valgrind/callgrindtool.cpp +++ b/src/plugins/valgrind/callgrindtool.cpp @@ -680,11 +680,6 @@ IAnalyzerEngine *CallgrindToolPrivate::createEngine(const AnalyzerStartParameter return engine; } -void CallgrindTool::startTool(StartMode mode) -{ - ValgrindPlugin::startValgrindTool(this, mode); -} - QWidget *CallgrindTool::createControlWidget() { return d->createControlWidget(); diff --git a/src/plugins/valgrind/callgrindtool.h b/src/plugins/valgrind/callgrindtool.h index 64b034d6409..517753287f3 100644 --- a/src/plugins/valgrind/callgrindtool.h +++ b/src/plugins/valgrind/callgrindtool.h @@ -60,8 +60,6 @@ public: ProjectExplorer::RunConfiguration *runConfiguration = 0); QWidget *createControlWidget(); - void startTool(Analyzer::StartMode mode); - private: CallgrindToolPrivate *d; }; diff --git a/src/plugins/valgrind/memchecktool.cpp b/src/plugins/valgrind/memchecktool.cpp index 52ad2a8aa02..a3a1079e99e 100644 --- a/src/plugins/valgrind/memchecktool.cpp +++ b/src/plugins/valgrind/memchecktool.cpp @@ -467,11 +467,6 @@ IAnalyzerEngine *MemcheckTool::createEngine(const AnalyzerStartParameters &sp, return engine; } -void MemcheckTool::startTool(StartMode mode) -{ - ValgrindPlugin::startValgrindTool(this, mode); -} - void MemcheckTool::engineStarting(const IAnalyzerEngine *engine) { clearErrorView(); diff --git a/src/plugins/valgrind/memchecktool.h b/src/plugins/valgrind/memchecktool.h index 6f00fa70f9c..3035c0d7c3c 100644 --- a/src/plugins/valgrind/memchecktool.h +++ b/src/plugins/valgrind/memchecktool.h @@ -118,7 +118,6 @@ private: Analyzer::IAnalyzerEngine *createEngine(const Analyzer::AnalyzerStartParameters &sp, ProjectExplorer::RunConfiguration *runConfiguration = 0); - void startTool(Analyzer::StartMode mode); void clearErrorView(); diff --git a/src/plugins/valgrind/valgrindplugin.cpp b/src/plugins/valgrind/valgrindplugin.cpp index c5ec6cf839b..94fdadc927c 100644 --- a/src/plugins/valgrind/valgrindplugin.cpp +++ b/src/plugins/valgrind/valgrindplugin.cpp @@ -42,17 +42,6 @@ #include #include -#include -#include -#include -#include -#include - -#include -#include - -#include -#include #include @@ -62,168 +51,16 @@ #include using namespace Analyzer; -using namespace Valgrind::Internal; -using namespace ProjectExplorer; - -///////////////////////////////////////////////////////////////////////////////// -// -// ValgrindRunControlFactory -// -///////////////////////////////////////////////////////////////////////////////// namespace Valgrind { namespace Internal { -static AnalyzerStartParameters localStartParameters(RunConfiguration *runConfiguration) -{ - AnalyzerStartParameters sp; - QTC_ASSERT(runConfiguration, return sp); - LocalApplicationRunConfiguration *rc = - qobject_cast(runConfiguration); - QTC_ASSERT(rc, return sp); - - sp.startMode = StartLocal; - sp.environment = rc->environment(); - sp.workingDirectory = rc->workingDirectory(); - sp.debuggee = rc->executable(); - sp.debuggeeArgs = rc->commandLineArguments(); - sp.displayName = rc->displayName(); - sp.connParams.host = QLatin1String("localhost"); - sp.connParams.port = rc->qmlDebugServerPort(); - return sp; -} - -static AnalyzerStartParameters remoteLinuxStartParameters(RunConfiguration *runConfiguration) -{ - AnalyzerStartParameters sp; - RemoteLinux::RemoteLinuxRunConfiguration * const rc - = qobject_cast(runConfiguration); - QTC_ASSERT(rc, return sp); - - sp.startMode = StartRemote; - sp.debuggee = rc->remoteExecutableFilePath(); - sp.debuggeeArgs = rc->arguments(); - sp.connParams = rc->deviceConfig()->sshParameters(); - sp.analyzerCmdPrefix = rc->commandPrefix(); - sp.displayName = rc->displayName(); - return sp; -} - - -class ValgrindRunControlFactory: public ProjectExplorer::IRunControlFactory -{ - Q_OBJECT - -public: - ValgrindRunControlFactory(QObject *parent = 0); - - typedef ProjectExplorer::RunConfiguration RunConfiguration; - typedef ProjectExplorer::RunControl RunControl; - - // IRunControlFactory - bool canRun(RunConfiguration *runConfiguration, const QString &mode) const; - RunControl *create(RunConfiguration *runConfiguration, const QString &mode); - QString displayName() const; - - ProjectExplorer::IRunConfigurationAspect *createRunConfigurationAspect(); - ProjectExplorer::RunConfigWidget *createConfigurationWidget(RunConfiguration *runConfiguration); -}; - -ValgrindRunControlFactory::ValgrindRunControlFactory(QObject *parent) - : IRunControlFactory(parent) -{ - setObjectName(QLatin1String("ValgrindRunControlFactory")); -} - -bool ValgrindRunControlFactory::canRun(RunConfiguration *runConfiguration, const QString &mode) const -{ - Q_UNUSED(runConfiguration); - return mode.startsWith("Callgrind") || mode.startsWith("Memcheck"); -} - -RunControl *ValgrindRunControlFactory::create(RunConfiguration *runConfiguration, const QString &mode) -{ - QTC_ASSERT(canRun(runConfiguration, mode), return 0); - - AnalyzerStartParameters sp; - if (qobject_cast(runConfiguration)) { - sp = localStartParameters(runConfiguration); - } else if (qobject_cast(runConfiguration)) { - sp = remoteLinuxStartParameters(runConfiguration); - } else { - // Might be S60DeviceRunfiguration, or something else ... - //sp.startMode = StartRemote; - sp.startMode = StartRemote; - } - - IAnalyzerTool *tool = AnalyzerManager::toolFromId(mode.toLatin1()); - AnalyzerRunControl *rc = new AnalyzerRunControl(tool, sp, runConfiguration); - QObject::connect(AnalyzerManager::stopAction(), SIGNAL(triggered()), rc, SLOT(stopIt())); - //m_isRunning = true; - return rc; -} - -QString ValgrindRunControlFactory::displayName() const -{ - return tr("Analyzer"); -} - -IRunConfigurationAspect *ValgrindRunControlFactory::createRunConfigurationAspect() -{ - return new AnalyzerProjectSettings; -} - -RunConfigWidget *ValgrindRunControlFactory::createConfigurationWidget(RunConfiguration *runConfiguration) -{ - LocalApplicationRunConfiguration *localRc = - qobject_cast(runConfiguration); - if (!localRc) - return 0; - AnalyzerProjectSettings *settings = runConfiguration->extraAspect(); - if (!settings) - return 0; - - AnalyzerRunConfigWidget *ret = new AnalyzerRunConfigWidget; - ret->setRunConfiguration(runConfiguration); - return ret; -} - ///////////////////////////////////////////////////////////////////////////////// // // ValgrindPlugin // ///////////////////////////////////////////////////////////////////////////////// -static void startRemoteTool(IAnalyzerTool *tool, StartMode mode) -{ - Q_UNUSED(tool); - StartRemoteDialog dlg; - if (dlg.exec() != QDialog::Accepted) - return; - - AnalyzerStartParameters sp; - sp.toolId = tool->id(); - sp.startMode = mode; - sp.connParams = dlg.sshParams(); - sp.debuggee = dlg.executable(); - sp.debuggeeArgs = dlg.arguments(); - sp.displayName = dlg.executable(); - sp.workingDirectory = dlg.workingDirectory(); - - AnalyzerRunControl *rc = new AnalyzerRunControl(tool, sp, 0); - //m_currentRunControl = rc; - QObject::connect(AnalyzerManager::stopAction(), SIGNAL(triggered()), rc, SLOT(stopIt())); - - ProjectExplorer::ProjectExplorerPlugin::instance()->startRunControl(rc, tool->id()); -} - -void ValgrindPlugin::startValgrindTool(IAnalyzerTool *tool, StartMode mode) -{ - if (mode == StartLocal) - AnalyzerManager::startLocalTool(tool, mode); - if (mode == StartRemote) - startRemoteTool(tool, mode); -} static AbstractAnalyzerSubConfig *valgrindConfigFactory() { @@ -265,9 +102,6 @@ bool ValgrindPlugin::initialize(const QStringList &, QString *) AnalyzerManager::addTool(new MemcheckTool(this), modes); AnalyzerManager::addTool(new CallgrindTool(this), modes); - ValgrindRunControlFactory *factory = new ValgrindRunControlFactory(); - addAutoReleasedObject(factory); - return true; } diff --git a/src/plugins/valgrind/valgrindplugin.h b/src/plugins/valgrind/valgrindplugin.h index 9598572bd32..e07961d559f 100644 --- a/src/plugins/valgrind/valgrindplugin.h +++ b/src/plugins/valgrind/valgrindplugin.h @@ -51,7 +51,6 @@ public: virtual bool initialize(const QStringList &arguments, QString *errorString); virtual void extensionsInitialized() {} - static void startValgrindTool(Analyzer::IAnalyzerTool *tool, Analyzer::StartMode mode); }; } // namespace Internal From 1a1984d14e32a2213143e8e7e64f06c0317c1a8c Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Mon, 4 Jul 2011 14:38:52 +0200 Subject: [PATCH 074/143] Doc: Clang and Linux ICC compilers Change-Id: Ie0fc4a42e225cea4b614c51326548ba6f41f7c90 Reviewed-on: http://codereview.qt.nokia.com/1082 Reviewed-by: Tobias Hunger --- doc/images/qtcreator-toolchains.png | Bin 24272 -> 27068 bytes doc/qtcreator.qdoc | 28 +++++++++++++++++----------- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/doc/images/qtcreator-toolchains.png b/doc/images/qtcreator-toolchains.png index e8d192979bbb3836039692719c10c48a4241856b..510ae0676711f64bbca59729ebcd71b316ac5db1 100644 GIT binary patch literal 27068 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 b_|KoT?RfF8e`i2D6B#^R{an^LB{Ts5%Vv&R literal 24272 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 Y{QqNBZd25k)+~^mr>mdKI;Vst06=~=kpKVy diff --git a/doc/qtcreator.qdoc b/doc/qtcreator.qdoc index 7f11530b0bf..e801054cb41 100644 --- a/doc/qtcreator.qdoc +++ b/doc/qtcreator.qdoc @@ -4035,31 +4035,37 @@ \list - \o GNU Compiler Collection (GCC) is a cross compiler for Linux and + \o GNU Compiler Collection (GCC) is a compiler for Linux and Mac OS X. \o MinGW (Minimalist GNU for Windows) is a native software port of GCC and GNU Binutils for use in the development of native Microsoft - Windows applications on Windows or as cross compiler. MinGW is + Windows applications on Windows. MinGW is distributed together with Qt Creator and Qt SDK for Windows. - \o GCCE (GNU Compiler Collection for Embedded) is an ARM-based - compiler used in Symbian OS 9 and distributed together with the - Symbian OS 9 SDKs. + \o Linux ICC (Intel C++ Compiler) is a group of C and C++ compilers + for Linux. - \o RVCT is an ARM-bases compiler for building applications for Symbian + \o Clang is a C, C++, Objective C, and Objective C++ front-end for the + LLVM compiler for Windows, Linux, Mac OS X, and Symbian. + + \o GCCE (GNU Compiler Collection for Embedded) is an ARM-based + compiler used in Symbian OS 9 and distributed together with \QSDK. + + \o RVCT is an ARM-based compiler for building applications for Symbian devices (requires a license). \o WINSCW is a compiler for building applications that can be run or debugged on the Symbian Emulator. It is distributed together with - Symbian SDKs. + Symbian SDKs (but not with the \QSDK). \endlist - To build an application using MinGW or GCCE, specify the paths to the + To build an application using GCC, MinGW, GCCE, or Clang, specify the paths + to the directories where the compiler and debugger are located and select the application binary interface (ABI) version from the list of available - versions. + versions. You can also create a custom ABI definition. Qt Creator allows you to select a tool chain that matches the Qt version in the \gui Projects mode \gui {Build Settins}. @@ -4071,6 +4077,8 @@ \o Select \gui {Tools > Options... Tool Chains > Add} and select a compiler in the list. + \image qtcreator-toolchains.png + To clone the selected tool chain, select \gui {Clone}. \o In the \gui Name column, double-click the name to change it. @@ -4079,8 +4087,6 @@ where the compiler is located. For WINSCW, enter the path to the Carbide C++ installation directory here. - \image qtcreator-toolchains.png - The other settings to specify depend on the tool chain. \o For RVCT, select the ARM version to use in the \gui {ARM version} From 9adcb64e64512dd3afca4ef4f643c5b6df61a260 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Mon, 4 Jul 2011 14:49:41 +0200 Subject: [PATCH 075/143] Doc: fix capitalization of Git Change-Id: Ibdb109c3e28635e5d7d8f65c9ebb06220926a1c9 Reviewed-on: http://codereview.qt.nokia.com/1078 Reviewed-by: Leena Miettinen --- doc/qtcreator.qdoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/qtcreator.qdoc b/doc/qtcreator.qdoc index e801054cb41..ddcf0d572f4 100644 --- a/doc/qtcreator.qdoc +++ b/doc/qtcreator.qdoc @@ -5315,7 +5315,7 @@ \list 1 - \o Make sure that the source directory is clean. For example, if you use git, + \o Make sure that the source directory is clean. For example, if you use Git, enter the following command: \c {git clean -dfx} @@ -5371,7 +5371,7 @@ \list 1 - \o Make sure that the source directory is clean. For example, if you use git, + \o Make sure that the source directory is clean. For example, if you use Git, enter the following command: \c {git clean -dfx} From b1faac0e732443aeffefba66aca92aa58c9b3008 Mon Sep 17 00:00:00 2001 From: Christiaan Janssen Date: Mon, 4 Jul 2011 17:29:21 +0200 Subject: [PATCH 076/143] Valgrind: fix compilation Change-Id: Id82d6e772b326ea9a59a713a8de8af4a616283da Reviewed-on: http://codereview.qt.nokia.com/1089 Reviewed-by: Qt Sanity Bot Reviewed-by: Christian Kandeler --- src/plugins/valgrind/valgrindplugin.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/plugins/valgrind/valgrindplugin.cpp b/src/plugins/valgrind/valgrindplugin.cpp index 94fdadc927c..83190143a45 100644 --- a/src/plugins/valgrind/valgrindplugin.cpp +++ b/src/plugins/valgrind/valgrindplugin.cpp @@ -108,7 +108,5 @@ bool ValgrindPlugin::initialize(const QStringList &, QString *) } // namespace Internal } // namespace Valgrind - Q_EXPORT_PLUGIN(Valgrind::Internal::ValgrindPlugin) -#include "valgrindplugin.moc" From 926dc43e4b26ff2b103f5e70a6e86f5b60694b5a Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Tue, 5 Jul 2011 08:57:45 +0200 Subject: [PATCH 077/143] Revert "analyzer: enable remote valgrind on windows" It breaks compilation. This reverts commit 25793bdc95716b3a23cf24106775ac621e7cb728. Change-Id: Id5cfe4c90b28f964abd6499dcf9eee2fd64a74b3 Reviewed-on: http://codereview.qt.nokia.com/1141 Reviewed-by: Qt Sanity Bot Reviewed-by: Friedemann Kleint --- src/plugins/plugins.pro | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/plugins/plugins.pro b/src/plugins/plugins.pro index 6ceff9a63c2..8ef73ff1f27 100644 --- a/src/plugins/plugins.pro +++ b/src/plugins/plugins.pro @@ -43,8 +43,11 @@ SUBDIRS = plugin_coreplugin \ plugin_macros \ debugger/dumper.pro \ plugin_qmlprofiler \ - plugin_remotelinux \ - plugin_valgrind + plugin_remotelinux + +!win32 { + SUBDIRS += plugin_valgrind +} linux-* { SUBDIRS += debugger/ptracepreload.pro @@ -266,9 +269,11 @@ plugin_analyzerbase.depends = plugin_coreplugin plugin_analyzerbase.depends += plugin_projectexplorer plugin_analyzerbase.depends += plugin_remotelinux -plugin_valgrind.subdir = valgrind -plugin_valgrind.depends = plugin_coreplugin -plugin_valgrind.depends += plugin_analyzerbase +!win32 { + plugin_valgrind.subdir = valgrind + plugin_valgrind.depends = plugin_coreplugin + plugin_valgrind.depends += plugin_analyzerbase +} plugin_qmlprofiler.subdir = qmlprofiler plugin_qmlprofiler.depends = plugin_coreplugin From 96eb918c3e7c5d3eedb8a59fb63acd45b51b1e0a Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Mon, 4 Jul 2011 17:29:12 +0200 Subject: [PATCH 078/143] RemoteLinux: Remove debug output from project file. Can't remember ever putting that in, but according to git blame, I did. Change-Id: I0017117a527ec115830c2d22a3cf3524a39912a7 Reviewed-on: http://codereview.qt.nokia.com/1143 Reviewed-by: Qt Sanity Bot Reviewed-by: Christian Kandeler --- src/plugins/remotelinux/remotelinux.pro | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/plugins/remotelinux/remotelinux.pro b/src/plugins/remotelinux/remotelinux.pro index 1039af7e313..cc5a0a34292 100644 --- a/src/plugins/remotelinux/remotelinux.pro +++ b/src/plugins/remotelinux/remotelinux.pro @@ -4,8 +4,6 @@ TARGET = RemoteLinux include(../../qtcreatorplugin.pri) include(remotelinux_dependencies.pri) -message(target.path = $$target.path) - HEADERS += \ remotelinuxplugin.h \ remotelinux_export.h \ From e8ae3b6cf1210486da258075941685d02e425d99 Mon Sep 17 00:00:00 2001 From: Daniel Molkentin Date: Mon, 4 Jul 2011 19:13:05 +0200 Subject: [PATCH 079/143] WelcomeScreen: Remove obsolete files. Change-Id: I0b195516f496f0febbe5bd00b3d95858a4b477c3 Reviewed-on: http://codereview.qt.nokia.com/1100 Reviewed-by: Qt Sanity Bot Reviewed-by: Eike Ziller --- .../qtcreator/examplebrowser/qmlexamples.xml | 89 --- .../gettingstartedwelcomepagewidget.cpp | 591 ------------------ .../gettingstartedwelcomepagewidget.h | 120 ---- 3 files changed, 800 deletions(-) delete mode 100644 share/qtcreator/examplebrowser/qmlexamples.xml delete mode 100644 src/plugins/qtsupport/gettingstartedwelcomepagewidget.cpp delete mode 100644 src/plugins/qtsupport/gettingstartedwelcomepagewidget.h diff --git a/share/qtcreator/examplebrowser/qmlexamples.xml b/share/qtcreator/examplebrowser/qmlexamples.xml deleted file mode 100644 index af01655fb62..00000000000 --- a/share/qtcreator/examplebrowser/qmlexamples.xml +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/plugins/qtsupport/gettingstartedwelcomepagewidget.cpp b/src/plugins/qtsupport/gettingstartedwelcomepagewidget.cpp deleted file mode 100644 index 1458c4ec50c..00000000000 --- a/src/plugins/qtsupport/gettingstartedwelcomepagewidget.cpp +++ /dev/null @@ -1,591 +0,0 @@ -/************************************************************************** -** -** This file is part of Qt Creator -** -** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). -** -** Contact: Nokia Corporation (info@qt.nokia.com) -** -** -** GNU Lesser General Public License Usage -** -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this file. -** Please review the following information to ensure the GNU Lesser General -** Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** Other Usage -** -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** If you have questions regarding the use of this file, please contact -** Nokia at info@qt.nokia.com. -** -**************************************************************************/ - -#include "gettingstartedwelcomepagewidget.h" -#include "ui_gettingstartedwelcomepagewidget.h" - -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace Qt4ProjectManager { -namespace Internal { - -const char ExamplePathPropertyName[] = "__qt_ExamplePath"; -const char HelpPathPropertyName[] = "__qt_HelpPath"; -const char QmlMainFileName[] = "__qt_QmlMainFileName"; - -void PixmapDownloader::populatePixmap(QNetworkReply *reply) { - QImage image; - image.loadFromData(reply->readAll()); - m_label->setScaledContents(false); - m_label->setPixmap(QPixmap::fromImage(image)); - deleteLater(); -} - -GettingStartedWelcomePageWidget::GettingStartedWelcomePageWidget(QWidget *parent) : - QWidget(parent), ui(new Ui::GettingStartedWelcomePageWidget), - m_currentFeature(0), m_rssFetcher(0) -{ - ui->setupUi(this); - - ui->didYouKnowTextBrowser->viewport()->setAutoFillBackground(false); - ui->detailsLabel->hide(); - - connect(ui->tutorialTreeWidget, SIGNAL(activated(QString)), SLOT(slotOpenHelpPage(const QString&))); - - QFontMetrics fm = fontMetrics(); - const int margins = 30; - int width = ui->tutorialTreeWidget->minimumWidth() - margins; - - QString itemText = tr("The Qt Creator User Interface"); - QString url = QLatin1String("qthelp://com.nokia.qtcreator/doc/creator-quick-tour.html"); - ui->tutorialTreeWidget->addItem(fm.elidedText(itemText, Qt::ElideRight, width), url, itemText); - - itemText = tr("Building and Running an Example"); - url = QLatin1String("qthelp://com.nokia.qtcreator/doc/creator-build-example-application.html?view=split"); - ui->tutorialTreeWidget->addItem(fm.elidedText(itemText, Qt::ElideRight, width), url, itemText); - - itemText = tr("Creating a Qt C++ Application"); - url = QLatin1String("qthelp://com.nokia.qtcreator/doc/creator-writing-program.html?view=split"); - ui->tutorialTreeWidget->addItem(fm.elidedText(itemText, Qt::ElideRight, width), url, itemText); - - itemText = tr("Creating a Mobile Application"); - url = QLatin1String("qthelp://com.nokia.qtcreator/doc/creator-mobile-example.html?view=split"); - ui->tutorialTreeWidget->addItem(fm.elidedText(itemText, Qt::ElideRight, width), url, itemText); - - itemText = tr("Creating a Qt Quick Application"); - url = QLatin1String("qthelp://com.nokia.qtcreator/doc/creator-qml-application.html?view=split"); - ui->tutorialTreeWidget->addItem(fm.elidedText(itemText, Qt::ElideRight, width), url, itemText); - - srand(QDateTime::currentDateTime().toTime_t()); - QStringList tips = tipsOfTheDay(); - m_currentTip = rand()%tips.count(); - - QTextDocument *doc = ui->didYouKnowTextBrowser->document(); - doc->setDefaultStyleSheet("* {color:black;};"); - ui->didYouKnowTextBrowser->setDocument(doc); - ui->didYouKnowTextBrowser->setText(tips.at(m_currentTip)); - - connect(ui->nextTipBtn, SIGNAL(clicked()), this, SLOT(slotNextTip())); - connect(ui->prevTipBtn, SIGNAL(clicked()), this, SLOT(slotPrevTip())); - connect(ui->openProjectButton, SIGNAL(clicked()), - ProjectExplorer::ProjectExplorerPlugin::instance(), - SLOT(openOpenProjectDialog())); - connect(ui->createNewProjectButton, SIGNAL(clicked()), this, SLOT(slotCreateNewProject())); - - ui->createNewProjectButton->setIcon( - QIcon::fromTheme(QLatin1String("document-new"), ui->createNewProjectButton->icon())); - ui->openProjectButton->setIcon( - QIcon::fromTheme(QLatin1String("document-open"), ui->openProjectButton->icon())); - - m_rssFetcher = new Core::RssFetcher; - connect (m_rssFetcher, SIGNAL(rssItemReady(Core::RssItem)), SLOT(addToFeatures(Core::RssItem))); - connect (m_rssFetcher, SIGNAL(finished(bool)), SLOT(showFeature()), Qt::QueuedConnection); - connect(this, SIGNAL(startRssFetching(QUrl)), m_rssFetcher, SLOT(fetch(QUrl)), Qt::QueuedConnection); - m_rssFetcher->start(QThread::LowestPriority); - const QString featureRssFile = Core::ICore::instance()->resourcePath()+QLatin1String("/rss/featured.rss"); - emit startRssFetching(QUrl::fromLocalFile(featureRssFile)); - - ui->nextFeatureBtn->hide(); - ui->prevFeatureBtn->hide(); - connect(ui->nextFeatureBtn, SIGNAL(clicked()), this, SLOT(slotNextFeature())); - connect(ui->prevFeatureBtn, SIGNAL(clicked()), this, SLOT(slotPrevFeature())); -} - -GettingStartedWelcomePageWidget::~GettingStartedWelcomePageWidget() -{ - m_rssFetcher->exit(); - m_rssFetcher->wait(); - delete m_rssFetcher; - delete ui; -} - -void GettingStartedWelcomePageWidget::parseXmlFile(QFile *file, QMenuHash &cppSubMenuHash, QMenuHash &qmlSubMenuHash, - const QString &examplePath, const QString &sourcePath) -{ - QMenu *cppSubMenu = 0; - QMenu *qmlSubMenu = 0; - bool inExamples = false; - QString dirName; - - QXmlStreamReader reader(file); - - while (!reader.atEnd()) { - switch (reader.readNext()) { - case QXmlStreamReader::StartElement: - if (reader.name() == QLatin1String("category")) { - QString name = reader.attributes().value(QLatin1String("name")).toString(); - if (name.contains(QLatin1String("Tutorial"))) - break; - dirName = reader.attributes().value(QLatin1String("dirname")).toString(); - if (!cppSubMenuHash.contains(dirName)) { - cppSubMenu = new QMenu(name, this); - cppSubMenu->setObjectName(dirName); - cppSubMenuHash.insert(dirName, cppSubMenu); - } else { - cppSubMenu = cppSubMenuHash.value(dirName); - } - if (!qmlSubMenuHash.contains(dirName)) { - qmlSubMenu = new QMenu(name, this); - qmlSubMenu->setObjectName(dirName); - qmlSubMenuHash.insert(dirName, qmlSubMenu); - } else { - qmlSubMenu = qmlSubMenuHash.value(dirName); - } - inExamples = true; - } - if (inExamples && reader.name() == QLatin1String("example")) { - const QChar slash = QLatin1Char('/'); - const QString name = reader.attributes().value(QLatin1String("name")).toString(); - const bool isQml = reader.attributes().value(QLatin1String("qml")).toString() == "true"; - const QString localDir = reader.attributes().value(QLatin1String("filename")).toString(); - const QString fileName = localDir.section('/', -1); - QString replacedFileName = fileName; - replacedFileName.replace(QLatin1Char('-'), QString()); - QString relativeProPath = slash + dirName + slash + localDir + slash + replacedFileName; - - QString finalFileName = examplePath + relativeProPath + QLatin1String(".pro"); - - if (!QFile::exists(finalFileName)) - finalFileName = sourcePath + QLatin1String("/examples") + relativeProPath + QLatin1String(".pro"); - - if (isQml && !QFile::exists(finalFileName)) { - // maybe it's an old-style QML project? - relativeProPath = slash + dirName + slash + localDir + slash + fileName; - finalFileName = examplePath + relativeProPath + QLatin1String(".qmlproject"); - - if (!QFile::exists(finalFileName)) - finalFileName = sourcePath + QLatin1String("/examples") + relativeProPath + QLatin1String(".qmlproject");; - } - - if (!QFile::exists(finalFileName)) - break; - - QString dirNameforHelp = dirName; - dirNameforHelp.replace(slash, QLatin1Char('-')); - QString helpPath = QLatin1String("qthelp://com.trolltech.qt/qdoc/") + - dirNameforHelp + - QLatin1Char('-') + fileName + QLatin1String(".html"); - - QAction *exampleAction = 0; - QAction *beforeAction = 0; - bool duplicate = false; - QMenu *subMenu; - subMenu = isQml ? qmlSubMenu : cppSubMenu; - - foreach (beforeAction, subMenu->actions()) { - int res = beforeAction->text().compare(name, Qt::CaseInsensitive); - if (res==0) { - duplicate = true; - break; - } else if (res<0) - beforeAction = 0; - else if (res>0) { - break; - } - } - - if (!duplicate) { - exampleAction = new QAction(name, subMenu); - subMenu->insertAction(beforeAction, exampleAction); - connect(exampleAction, SIGNAL(triggered()), SLOT(slotOpenExample())); - exampleAction->setProperty(ExamplePathPropertyName, finalFileName); - exampleAction->setProperty(HelpPathPropertyName, helpPath); - if (isQml) - exampleAction->setProperty(QmlMainFileName, fileName); - } - } - break; - case QXmlStreamReader::EndElement: - if (inExamples && reader.name() == QLatin1String("category")) { - if (cppSubMenu->actions().isEmpty()) - delete cppSubMenuHash.take(dirName); - - if (qmlSubMenu->actions().isEmpty()) - delete qmlSubMenuHash.take(dirName); - - inExamples = false; - } - break; - default: - break; - } - } -} - -bool menuEntryCompare(QMenu* first, QMenu* second) -{ - return (QString::localeAwareCompare(first->title(), second->title()) < 0); -} - -void GettingStartedWelcomePageWidget::updateExamples(const QString &examplePath, - const QString &demosPath, - const QString &sourcePath) -{ - - QString demoXml = demosPath + "/qtdemo/xml/examples.xml"; - if (!QFile::exists(demoXml)) { - demoXml = sourcePath + "/demos/qtdemo/xml/examples.xml"; - if (!QFile::exists(demoXml)) - return; - } - - QMenuHash cppSubMenuHash; - QMenuHash qmlSubMenuHash; - - const QString dropDownLabel = tr("Choose an Example..."); - QMenu *cppMenu = new QMenu(ui->cppExamplesButton); - ui->cppExamplesButton->setMenu(cppMenu); - QMenu *qmlMenu = new QMenu(ui->qmlExamplesButton); - - - // let Creator's files take precedence - QString localQmlExamplesXml = - Core::ICore::instance()->resourcePath()+QLatin1String("/examplebrowser/qmlexamples.xml"); - - QFile localDescriptions(localQmlExamplesXml); - if (localDescriptions.open(QFile::ReadOnly)) { - parseXmlFile(&localDescriptions, cppSubMenuHash, qmlSubMenuHash, examplePath, sourcePath); - } - - QFile descriptions(demoXml); - if (!descriptions.open(QFile::ReadOnly)) - return; - - ui->cppExamplesButton->setEnabled(true); - ui->cppExamplesButton->setText(dropDownLabel); - - parseXmlFile(&descriptions, cppSubMenuHash, qmlSubMenuHash, examplePath, sourcePath); - - QList cppSubMenus = cppSubMenuHash.values(); - qSort(cppSubMenus.begin(), cppSubMenus.end(), menuEntryCompare); - QList qmlSubMenus = qmlSubMenuHash.values(); - qSort(qmlSubMenus.begin(), qmlSubMenus.end(), menuEntryCompare); - - foreach (QMenu *menu, cppSubMenus) - cppMenu->addMenu(menu); - foreach (QMenu *menu, qmlSubMenus) - qmlMenu->addMenu(menu); - - if (!qmlMenu->isEmpty()) { - ui->qmlExamplesButton->setMenu(qmlMenu); - ui->qmlExamplesButton->setEnabled(true); - ui->qmlExamplesButton->setText(dropDownLabel); - } -} - -namespace { -void copyRecursive(const QDir& from, const QDir& to, const QString& dir) -{ - QDir dest(to); - dest.mkdir(dir); - dest.cd(dir); - QDir src(from); - src.cd(dir); - foreach(const QFileInfo& roFile, src.entryInfoList(QDir::Files)) { - QFile::copy(roFile.absoluteFilePath(), dest.absolutePath() + '/' + roFile.fileName()); - } - foreach(const QString& roDir, src.entryList(QDir::NoDotAndDotDot|QDir::Dirs)) { - copyRecursive(src, dest, QDir(roDir).dirName()); - } -} -} // namespace - -void GettingStartedWelcomePageWidget::slotOpenExample() -{ - QAction *action = qobject_cast(sender()); - if (!action) - return; - - QString helpFile = action->property(HelpPathPropertyName).toString(); - QString proFile = action->property(ExamplePathPropertyName).toString(); - QString qmlMainFileName; - bool isQmlProject = false; - if (action->dynamicPropertyNames().contains(QmlMainFileName)) { - qmlMainFileName = action->property(QmlMainFileName).toString(); - isQmlProject = true; - } - QStringList files; - - QFileInfo proFileInfo(proFile); - // If the Qt is a distro Qt on Linux, it will not be writable, hence compilation will fail - if (!proFileInfo.isWritable()) - { - QDialog d; - QGridLayout *lay = new QGridLayout(&d); - QLabel *descrLbl = new QLabel; - d.setWindowTitle(tr("Copy Project to writable Location?")); - descrLbl->setTextFormat(Qt::RichText); - descrLbl->setWordWrap(true); - descrLbl->setText(tr("

      The project you are about to open is located in the " - "write-protected location:

      %1
      " - "

      Please select a writable location below and click \"Copy Project and Open\" " - "to open a modifiable copy of the project or click \"Keep Project and Open\" " - "to open the project in location.

      Note: You will not " - "be able to alter or compile your project in the current location.

      ") - .arg(QDir::toNativeSeparators(proFileInfo.dir().absolutePath()))); - lay->addWidget(descrLbl, 0, 0, 1, 2); - QLabel *txt = new QLabel(tr("&Location:")); - Utils::PathChooser *chooser = new Utils::PathChooser; - txt->setBuddy(chooser); - chooser->setExpectedKind(Utils::PathChooser::ExistingDirectory); - QSettings *settings = Core::ICore::instance()->settings(); - chooser->setPath(settings->value( - QString::fromLatin1("General/ProjectsFallbackRoot"), QDir::homePath()).toString()); - lay->addWidget(txt, 1, 0); - lay->addWidget(chooser, 1, 1); - QDialogButtonBox *bb = new QDialogButtonBox; - connect(bb, SIGNAL(accepted()), &d, SLOT(accept())); - connect(bb, SIGNAL(rejected()), &d, SLOT(reject())); - QPushButton *copyBtn = bb->addButton(tr("&Copy Project and Open"), QDialogButtonBox::AcceptRole); - copyBtn->setDefault(true); - bb->addButton(tr("&Keep Project and Open"), QDialogButtonBox::RejectRole); - lay->addWidget(bb, 2, 0, 1, 2); - connect(chooser, SIGNAL(validChanged(bool)), copyBtn, SLOT(setEnabled(bool))); - if (d.exec() == QDialog::Accepted) { - QString exampleDirName = proFileInfo.dir().dirName(); - QString toDir = chooser->path(); - settings->setValue(QString::fromLatin1("General/ProjectsFallbackRoot"), toDir); - QDir toDirWithExamplesDir(toDir); - if (toDirWithExamplesDir.cd(exampleDirName)) { - toDirWithExamplesDir.cdUp(); // step out, just to not be in the way - QMessageBox::warning(topLevelWidget(), tr("Warning"), - tr("The specified location already exists. " - "Please specify a valid location."), - QMessageBox::Ok, QMessageBox::NoButton); - return; - } else { - QDir from = proFileInfo.dir(); - from.cdUp(); - copyRecursive(from, toDir, exampleDirName); - // set vars to new location - proFileInfo = QFileInfo(toDir + '/'+ exampleDirName + '/' + proFileInfo.fileName()); - proFile = proFileInfo.absoluteFilePath(); - } - } - } - - QString tryFile; - if (isQmlProject) { - tryFile = proFileInfo.path() + '/' + "/main.qml"; - if(!QFile::exists(tryFile)) - tryFile = proFileInfo.path() + "/qml/" + qmlMainFileName + ".qml"; - // legacy qmlproject case - if(!QFile::exists(tryFile)) - tryFile = proFileInfo.path() + '/' + qmlMainFileName + ".qml"; - if(QFile::exists(tryFile)) - files << tryFile; - } else { - tryFile = proFileInfo.path() + "/main.cpp"; - if(!QFile::exists(tryFile)) - tryFile = proFileInfo.path() + '/' + proFileInfo.baseName() + ".cpp"; - files << tryFile; - } - if (ProjectExplorer::ProjectExplorerPlugin::instance()->openProject(proFile)) { - Core::ICore::instance()->openFiles(files); - if (!helpFile.isEmpty()) { - // queue this to make sure it gets executed after the editor widget - // has been drawn, so we know whether to show a split help or not - QMetaObject::invokeMethod(this, "slotOpenContextHelpPage", - Qt::QueuedConnection, Q_ARG(QString, helpFile)); - } - } -} - -void GettingStartedWelcomePageWidget::slotOpenHelpPage(const QString& url) -{ - Core::HelpManager *helpManager = Core::HelpManager::instance(); - Q_ASSERT(helpManager); - helpManager->handleHelpRequest(url); -} -void GettingStartedWelcomePageWidget::slotOpenContextHelpPage(const QString& url) -{ - Core::HelpManager *helpManager = Core::HelpManager::instance(); - Q_ASSERT(helpManager); - helpManager->handleHelpRequest(url % QLatin1String("?view=split")); -} - -void GettingStartedWelcomePageWidget::slotCreateNewProject() -{ - Core::ICore::instance()->showNewItemDialog(tr("New Project"), - Core::IWizard::wizardsOfKind(Core::IWizard::ProjectWizard)); -} - -void GettingStartedWelcomePageWidget::slotNextTip() -{ - QStringList tips = tipsOfTheDay(); - m_currentTip = ((m_currentTip+1)%tips.count()); - ui->didYouKnowTextBrowser->setText(tips.at(m_currentTip)); -} - -void GettingStartedWelcomePageWidget::slotPrevTip() -{ - QStringList tips = tipsOfTheDay(); - m_currentTip = ((m_currentTip-1)+tips.count())%tips.count(); - ui->didYouKnowTextBrowser->setText(tips.at(m_currentTip)); -} - -QStringList GettingStartedWelcomePageWidget::tipsOfTheDay() -{ - static QStringList tips; - if (tips.isEmpty()) { - QString altShortcut = -#ifdef Q_WS_MAC - tr("Cmd", "Shortcut key"); -#else - tr("Alt", "Shortcut key"); -#endif - - QString ctrlShortcut = -#ifdef Q_WS_MAC - tr("Cmd", "Shortcut key"); -#else - tr("Ctrl", "Shortcut key"); -#endif - - //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac) - tips.append(tr("You can show and hide the side bar using %1+0.").arg(altShortcut)); - tips.append(tr("You can fine tune the Find function by selecting "Whole Words" " - "or "Case Sensitive". Simply click on the icons on the right end of the line edit.")); - tips.append(tr("If you add external libraries to your project, Qt Creator will automatically offer syntax highlighting " - "and code completion.")); - tips.append(tr("The code completion is CamelCase-aware. For example, to complete namespaceUri " - "you can just type nU and hit Ctrl+Space.")); - tips.append(tr("You can force code completion at any time using Ctrl+Space.")); - tips.append(tr("You can start Qt Creator with a session by calling qtcreator <sessionname>.")); - tips.append(tr("You can return to edit mode from any other mode at any time by hitting Escape.")); - //:%1 gets replaced by Alt (Win/Unix) or Cmd (Mac) - tips.append(tr("You can switch between the output pane by hitting %1+n where n is the number denoted " - "on the buttons at the window bottom:

      " - "1: Build Issues, 2: Search Results, 3: Application Output, " - "4: Compile Output").arg(altShortcut)); - tips.append(tr("You can quickly search methods, classes, help and more using the " - "
      Locator bar (%1+K).").arg(ctrlShortcut)); - tips.append(tr("You can add custom build steps in the " - "build settings.")); - tips.append(tr("Within a session, you can add " - "dependencies between projects.")); - tips.append(tr("You can set the preferred editor encoding for every project in Projects -> Editor Settings -> Default Encoding.")); - tips.append(tr("You can use Qt Creator with a number of " - "revision control systems such as Subversion, Perforce, CVS and Git.")); - tips.append(tr("In the editor, F2 follows symbol definition, Shift+F2 toggles declaration and definition " - "while F4 toggles header file and source file.")); - } - return tips; -} - -void GettingStartedWelcomePageWidget::addToFeatures(const Core::RssItem &feature) -{ - m_featuredItems.append(feature); - if (m_featuredItems.count() > 1) { - ui->nextFeatureBtn->show(); - ui->prevFeatureBtn->show(); - } -} - -void GettingStartedWelcomePageWidget::showFeature(int feature) -{ - if (m_featuredItems.isEmpty()) - return; - - if (feature == -1) { - srand(QDateTime::currentDateTime().toTime_t()); - m_currentFeature = rand()%m_featuredItems.count(); - } - - const Core::RssItem &item = m_featuredItems.at(m_currentFeature); - ui->featuredTextLabel->setTextFormat(Qt::RichText); - QString text = QString::fromLatin1("%1
      %2

      %3").arg(item.category).arg(item.title).arg(item.description); - ui->featuredTextLabel->setText(text); - QString imagePath = item.imagePath; - if (!imagePath.startsWith("http")) { - imagePath = Core::ICore::instance()->resourcePath() + "/rss/" + item.imagePath; - ui->featuredImage->setPixmap(QPixmap(imagePath)); - } else { - new PixmapDownloader(QUrl(imagePath), ui->featuredImage); - } - - if (item.category == QLatin1String("Event")) { - ui->detailsLabel->setText(tr("Details...").arg(item.url)); - ui->detailsLabel->show(); - ui->detailsLabel->setOpenExternalLinks(true); - } - else if (item.category == QLatin1String("Tutorial")) { - ui->detailsLabel->setText(tr("Take Tutorial").arg(item.url+"?view=split")); - ui->detailsLabel->show(); - ui->detailsLabel->setOpenExternalLinks(true); - } -} - -void GettingStartedWelcomePageWidget::slotNextFeature() -{ - QTC_ASSERT(!m_featuredItems.isEmpty(), return); - m_currentFeature = (m_currentFeature+1) % m_featuredItems.count(); - showFeature(m_currentFeature); -} - -void GettingStartedWelcomePageWidget::slotPrevFeature() -{ - QTC_ASSERT(!m_featuredItems.isEmpty(), return); - m_currentFeature = ((m_currentFeature-1)+m_featuredItems.count()) % m_featuredItems.count(); - showFeature(m_currentFeature); -} - -} // namespace Internal -} // namespace Qt4ProjectManager diff --git a/src/plugins/qtsupport/gettingstartedwelcomepagewidget.h b/src/plugins/qtsupport/gettingstartedwelcomepagewidget.h deleted file mode 100644 index 1fe4e8277ee..00000000000 --- a/src/plugins/qtsupport/gettingstartedwelcomepagewidget.h +++ /dev/null @@ -1,120 +0,0 @@ -/************************************************************************** -** -** This file is part of Qt Creator -** -** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). -** -** Contact: Nokia Corporation (info@qt.nokia.com) -** -** -** GNU Lesser General Public License Usage -** -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this file. -** Please review the following information to ensure the GNU Lesser General -** Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** Other Usage -** -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** If you have questions regarding the use of this file, please contact -** Nokia at info@qt.nokia.com. -** -**************************************************************************/ - -#ifndef GETTINGSTARTEDWELCOMEPAGEWIDGET_H -#define GETTINGSTARTEDWELCOMEPAGEWIDGET_H - -#include -#include -#include - -QT_BEGIN_NAMESPACE -class QUrl; -class QLabel; -class QFile; -class QMenu; -QT_END_NAMESPACE - -namespace Core { -class RssFetcher; -class RssItem; -} - -namespace Qt4ProjectManager { -namespace Internal { - -namespace Ui { - class GettingStartedWelcomePageWidget; -} - -typedef QHash QMenuHash; - -class PixmapDownloader : public QNetworkAccessManager { - Q_OBJECT -public: - PixmapDownloader(const QUrl& url, QLabel* label, QObject *parent = 0) - : QNetworkAccessManager(parent), m_url(url), m_label(label) - { - connect(this, SIGNAL(finished(QNetworkReply*)), SLOT(populatePixmap(QNetworkReply*))); - get(QNetworkRequest(url)); - } -public slots: - void populatePixmap(QNetworkReply* reply); - -private: - QUrl m_url; - QLabel *m_label; - -}; - -class GettingStartedWelcomePageWidget : public QWidget -{ - Q_OBJECT -public: - GettingStartedWelcomePageWidget(QWidget *parent = 0); - ~GettingStartedWelcomePageWidget(); - -public slots: - void updateExamples(const QString &examplePath, - const QString &demosPath, - const QString &sourcePath); - -private slots: - void slotOpenHelpPage(const QString &url); - void slotOpenContextHelpPage(const QString &url); - void slotOpenExample(); - void slotNextTip(); - void slotPrevTip(); - void slotNextFeature(); - void slotPrevFeature(); - void slotCreateNewProject(); - void addToFeatures(const Core::RssItem&); - void showFeature(int feature = -1); - -signals: - void startRssFetching(const QUrl&); - -private: - void parseXmlFile(QFile *file, QMenuHash &cppSubMenuHash, QMenuHash &qmlSubMenuHash, - const QString &examplePath, const QString &sourcePath); - QStringList tipsOfTheDay(); - Ui::GettingStartedWelcomePageWidget *ui; - int m_currentTip; - int m_currentFeature; - QList m_featuredItems; - Core::RssFetcher *m_rssFetcher; -}; - -} // namespace Internal -} // namespace Qt4ProjectManager - -#endif // GETTINGSTARTEDWELCOMEPAGEWIDGET_H From 3977723abb20e90657a67cfdd3bef45d099ecde4 Mon Sep 17 00:00:00 2001 From: Daniel Molkentin Date: Fri, 1 Jul 2011 18:29:38 +0200 Subject: [PATCH 080/143] Git: Ignore generated dev doc artifcats. Change-Id: I4eece47f7eb9d01d4f01433a906b28ca0bd0adbb Reviewed-on: http://codereview.qt.nokia.com/1022 Reviewed-by: Qt Sanity Bot Reviewed-by: Daniel Molkentin --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 4fbf6838b3c..d7e54f9836c 100644 --- a/.gitignore +++ b/.gitignore @@ -69,6 +69,7 @@ lib/* lib64/* release doc/html/* +doc/html-dev/* doc/api/html/* doc/pluginhowto/html/* .rcc @@ -86,7 +87,7 @@ bin/qml2puppet bin/qml2puppet.exe bin/qtpromaker bin/qtpromaker.exe -share/doc/qtcreator/qtcreator.qch +share/doc/qtcreator/*.qch src/tools/gen-cpp-ast/generate-ast src/tools/mkvisitor/cplusplus0 src/tools/qml/qmldump/qmldump From ef7405d21da3585d6662864656ed4bc8284b9634 Mon Sep 17 00:00:00 2001 From: Daniel Molkentin Date: Mon, 4 Jul 2011 19:11:37 +0200 Subject: [PATCH 081/143] WelcomeScreen: Fix up fallback xml file Change-Id: I0dbd8f58630dd9ff43b4b9c39af7afa4c6c2f121 Reviewed-on: http://codereview.qt.nokia.com/1098 Reviewed-by: Qt Sanity Bot Reviewed-by: Daniel Molkentin --- share/qtcreator/welcomescreen/examples_fallback.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/share/qtcreator/welcomescreen/examples_fallback.xml b/share/qtcreator/welcomescreen/examples_fallback.xml index 3a0a8dc2b6a..9d4f927caea 100644 --- a/share/qtcreator/welcomescreen/examples_fallback.xml +++ b/share/qtcreator/welcomescreen/examples_fallback.xml @@ -1,11 +1,11 @@ - + demo,declarative,samegame,qml,qt quick - + demo,declarative,flickr,qml,qt quick @@ -41,11 +41,11 @@ demo,interview - + demo,declarative,rssnews,qml,qt quick - + demo,declarative,twitter,qml,qt quick @@ -69,7 +69,7 @@ QtMultimedia Module
      can be used in Qt applications to capture and then play back an audio stream.]]> demo,spectrum,qtmultimedia module - + demo,declarative,minehunt From a0e578608354f3b2b3db8185415267cb5426085a Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Tue, 5 Jul 2011 10:40:37 +0200 Subject: [PATCH 082/143] Valgrind: Remove library and move code into plugin. Compile on Windows. Change-Id: I54a4df0cee585713979d37fe7b838f5a5cf4a7be Reviewed-on: http://codereview.qt.nokia.com/1150 Reviewed-by: Qt Sanity Bot Reviewed-by: Eike Ziller Reviewed-by: Friedemann Kleint --- src/libs/libs.pro | 5 -- src/libs/valgrind/valgrind.pri | 1 - src/libs/valgrind/valgrind.pro | 71 ------------------- src/libs/valgrind/valgrind_global.h | 46 ------------ src/plugins/analyzerbase/analyzersettings.cpp | 1 - src/plugins/plugins.pro | 15 ++-- src/plugins/valgrind/valgrind.pro | 11 ++- .../callgrind/callgrindabstractmodel.cpp | 0 .../callgrind/callgrindabstractmodel.h | 2 - .../valgrind/callgrind/callgrindcallmodel.cpp | 0 .../valgrind/callgrind/callgrindcallmodel.h | 4 +- .../callgrind/callgrindcontroller.cpp | 12 +++- .../valgrind/callgrind/callgrindcontroller.h | 4 +- .../valgrind/callgrind/callgrindcostitem.cpp | 0 .../valgrind/callgrind/callgrindcostitem.h | 4 +- .../callgrind/callgrindcycledetection.cpp | 0 .../callgrind/callgrindcycledetection.h | 0 .../valgrind/callgrind/callgrinddatamodel.cpp | 0 .../valgrind/callgrind/callgrinddatamodel.h | 4 +- .../valgrind/callgrind/callgrindfunction.cpp | 0 .../valgrind/callgrind/callgrindfunction.h | 4 +- .../valgrind/callgrind/callgrindfunction_p.h | 0 .../callgrind/callgrindfunctioncall.cpp | 0 .../callgrind/callgrindfunctioncall.h | 4 +- .../callgrind/callgrindfunctioncycle.cpp | 0 .../callgrind/callgrindfunctioncycle.h | 2 +- .../valgrind/callgrind/callgrindparsedata.cpp | 0 .../valgrind/callgrind/callgrindparsedata.h | 4 +- .../valgrind/callgrind/callgrindparser.cpp | 0 .../valgrind/callgrind/callgrindparser.h | 4 +- .../callgrind/callgrindproxymodel.cpp | 0 .../valgrind/callgrind/callgrindproxymodel.h | 4 +- .../valgrind/callgrind/callgrindrunner.cpp | 0 .../valgrind/callgrind/callgrindrunner.h | 5 +- .../callgrind/callgrindstackbrowser.cpp | 0 .../callgrind/callgrindstackbrowser.h | 4 +- .../valgrind/memcheck/memcheckrunner.cpp | 0 .../valgrind/memcheck/memcheckrunner.h | 5 +- src/plugins/valgrind/valgrind/valgrind.pri | 63 ++++++++++++++++ .../valgrind}/valgrind/valgrindprocess.cpp | 12 +++- .../valgrind}/valgrind/valgrindprocess.h | 18 +++-- .../valgrind}/valgrind/valgrindrunner.cpp | 0 .../valgrind}/valgrind/valgrindrunner.h | 4 +- .../valgrind/xmlprotocol/announcethread.cpp | 0 .../valgrind/xmlprotocol/announcethread.h | 4 +- .../valgrind}/valgrind/xmlprotocol/error.cpp | 0 .../valgrind}/valgrind/xmlprotocol/error.h | 4 +- .../valgrind/xmlprotocol/errorlistmodel.cpp | 0 .../valgrind/xmlprotocol/errorlistmodel.h | 4 +- .../valgrind}/valgrind/xmlprotocol/frame.cpp | 0 .../valgrind}/valgrind/xmlprotocol/frame.h | 4 +- .../valgrind/xmlprotocol/modelhelpers.cpp | 0 .../valgrind/xmlprotocol/modelhelpers.h | 4 +- .../valgrind}/valgrind/xmlprotocol/parser.cpp | 0 .../valgrind}/valgrind/xmlprotocol/parser.h | 4 +- .../valgrind}/valgrind/xmlprotocol/stack.cpp | 0 .../valgrind}/valgrind/xmlprotocol/stack.h | 4 +- .../valgrind/xmlprotocol/stackmodel.cpp | 0 .../valgrind/xmlprotocol/stackmodel.h | 4 +- .../valgrind}/valgrind/xmlprotocol/status.cpp | 0 .../valgrind}/valgrind/xmlprotocol/status.h | 4 +- .../valgrind/xmlprotocol/suppression.cpp | 0 .../valgrind/xmlprotocol/suppression.h | 6 +- .../valgrind/xmlprotocol/threadedparser.cpp | 0 .../valgrind/xmlprotocol/threadedparser.h | 4 +- .../valgrind/valgrind_dependencies.pri | 1 + src/plugins/valgrind/valgrind_global.h | 46 ------------ src/plugins/valgrind/valgrindengine.h | 4 +- src/plugins/valgrind/valgrindsettings.h | 4 +- 69 files changed, 133 insertions(+), 281 deletions(-) delete mode 100644 src/libs/valgrind/valgrind.pri delete mode 100644 src/libs/valgrind/valgrind.pro delete mode 100644 src/libs/valgrind/valgrind_global.h rename src/{libs => plugins/valgrind}/valgrind/callgrind/callgrindabstractmodel.cpp (100%) rename src/{libs => plugins/valgrind}/valgrind/callgrind/callgrindabstractmodel.h (98%) rename src/{libs => plugins/valgrind}/valgrind/callgrind/callgrindcallmodel.cpp (100%) rename src/{libs => plugins/valgrind}/valgrind/callgrind/callgrindcallmodel.h (96%) rename src/{libs => plugins/valgrind}/valgrind/callgrind/callgrindcontroller.cpp (97%) rename src/{libs => plugins/valgrind}/valgrind/callgrind/callgrindcontroller.h (96%) rename src/{libs => plugins/valgrind}/valgrind/callgrind/callgrindcostitem.cpp (100%) rename src/{libs => plugins/valgrind}/valgrind/callgrind/callgrindcostitem.h (97%) rename src/{libs => plugins/valgrind}/valgrind/callgrind/callgrindcycledetection.cpp (100%) rename src/{libs => plugins/valgrind}/valgrind/callgrind/callgrindcycledetection.h (100%) rename src/{libs => plugins/valgrind}/valgrind/callgrind/callgrinddatamodel.cpp (100%) rename src/{libs => plugins/valgrind}/valgrind/callgrind/callgrinddatamodel.h (97%) rename src/{libs => plugins/valgrind}/valgrind/callgrind/callgrindfunction.cpp (100%) rename src/{libs => plugins/valgrind}/valgrind/callgrind/callgrindfunction.h (98%) rename src/{libs => plugins/valgrind}/valgrind/callgrind/callgrindfunction_p.h (100%) rename src/{libs => plugins/valgrind}/valgrind/callgrind/callgrindfunctioncall.cpp (100%) rename src/{libs => plugins/valgrind}/valgrind/callgrind/callgrindfunctioncall.h (97%) rename src/{libs => plugins/valgrind}/valgrind/callgrind/callgrindfunctioncycle.cpp (100%) rename src/{libs => plugins/valgrind}/valgrind/callgrind/callgrindfunctioncycle.h (97%) rename src/{libs => plugins/valgrind}/valgrind/callgrind/callgrindparsedata.cpp (100%) rename src/{libs => plugins/valgrind}/valgrind/callgrind/callgrindparsedata.h (98%) rename src/{libs => plugins/valgrind}/valgrind/callgrind/callgrindparser.cpp (100%) rename src/{libs => plugins/valgrind}/valgrind/callgrind/callgrindparser.h (96%) rename src/{libs => plugins/valgrind}/valgrind/callgrind/callgrindproxymodel.cpp (100%) rename src/{libs => plugins/valgrind}/valgrind/callgrind/callgrindproxymodel.h (96%) rename src/{libs => plugins/valgrind}/valgrind/callgrind/callgrindrunner.cpp (100%) rename src/{libs => plugins/valgrind}/valgrind/callgrind/callgrindrunner.h (94%) rename src/{libs => plugins/valgrind}/valgrind/callgrind/callgrindstackbrowser.cpp (100%) rename src/{libs => plugins/valgrind}/valgrind/callgrind/callgrindstackbrowser.h (95%) rename src/{libs => plugins/valgrind}/valgrind/memcheck/memcheckrunner.cpp (100%) rename src/{libs => plugins/valgrind}/valgrind/memcheck/memcheckrunner.h (93%) create mode 100644 src/plugins/valgrind/valgrind/valgrind.pri rename src/{libs => plugins/valgrind}/valgrind/valgrindprocess.cpp (98%) rename src/{libs => plugins/valgrind}/valgrind/valgrindprocess.h (93%) rename src/{libs => plugins/valgrind}/valgrind/valgrindrunner.cpp (100%) rename src/{libs => plugins/valgrind}/valgrind/valgrindrunner.h (97%) rename src/{libs => plugins/valgrind}/valgrind/xmlprotocol/announcethread.cpp (100%) rename src/{libs => plugins/valgrind}/valgrind/xmlprotocol/announcethread.h (96%) rename src/{libs => plugins/valgrind}/valgrind/xmlprotocol/error.cpp (100%) rename src/{libs => plugins/valgrind}/valgrind/xmlprotocol/error.h (98%) rename src/{libs => plugins/valgrind}/valgrind/xmlprotocol/errorlistmodel.cpp (100%) rename src/{libs => plugins/valgrind}/valgrind/xmlprotocol/errorlistmodel.h (96%) rename src/{libs => plugins/valgrind}/valgrind/xmlprotocol/frame.cpp (100%) rename src/{libs => plugins/valgrind}/valgrind/xmlprotocol/frame.h (97%) rename src/{libs => plugins/valgrind}/valgrind/xmlprotocol/modelhelpers.cpp (100%) rename src/{libs => plugins/valgrind}/valgrind/xmlprotocol/modelhelpers.h (94%) rename src/{libs => plugins/valgrind}/valgrind/xmlprotocol/parser.cpp (100%) rename src/{libs => plugins/valgrind}/valgrind/xmlprotocol/parser.h (96%) rename src/{libs => plugins/valgrind}/valgrind/xmlprotocol/stack.cpp (100%) rename src/{libs => plugins/valgrind}/valgrind/xmlprotocol/stack.h (97%) rename src/{libs => plugins/valgrind}/valgrind/xmlprotocol/stackmodel.cpp (100%) rename src/{libs => plugins/valgrind}/valgrind/xmlprotocol/stackmodel.h (96%) rename src/{libs => plugins/valgrind}/valgrind/xmlprotocol/status.cpp (100%) rename src/{libs => plugins/valgrind}/valgrind/xmlprotocol/status.h (96%) rename src/{libs => plugins/valgrind}/valgrind/xmlprotocol/suppression.cpp (100%) rename src/{libs => plugins/valgrind}/valgrind/xmlprotocol/suppression.h (96%) rename src/{libs => plugins/valgrind}/valgrind/xmlprotocol/threadedparser.cpp (100%) rename src/{libs => plugins/valgrind}/valgrind/xmlprotocol/threadedparser.h (96%) delete mode 100644 src/plugins/valgrind/valgrind_global.h diff --git a/src/libs/libs.pro b/src/libs/libs.pro index 3e34c766e53..f33e687774f 100644 --- a/src/libs/libs.pro +++ b/src/libs/libs.pro @@ -16,11 +16,6 @@ SUBDIRS = \ qmleditorwidgets \ symbianutils - -!win32 { - SUBDIRS += valgrind -} - # Windows: Compile Qt Creator CDB extension if Debugging tools can be detected. win32 { include(qtcreatorcdbext/cdb_detect.pri) diff --git a/src/libs/valgrind/valgrind.pri b/src/libs/valgrind/valgrind.pri deleted file mode 100644 index 7647eeacb01..00000000000 --- a/src/libs/valgrind/valgrind.pri +++ /dev/null @@ -1 +0,0 @@ -LIBS *= -l$$qtLibraryName(Valgrind) diff --git a/src/libs/valgrind/valgrind.pro b/src/libs/valgrind/valgrind.pro deleted file mode 100644 index b670b92bff0..00000000000 --- a/src/libs/valgrind/valgrind.pro +++ /dev/null @@ -1,71 +0,0 @@ -TEMPLATE = lib -TARGET = Valgrind - -include(../../qtcreatorlibrary.pri) -include(../utils/utils.pri) - -TEMPLATE = lib - -DEFINES += VALGRIND_LIBRARY - -QT += network - -HEADERS += valgrind_global.h \ - xmlprotocol/frame.h \ - xmlprotocol/parser.h \ - xmlprotocol/error.h \ - xmlprotocol/status.h \ - xmlprotocol/suppression.h \ - xmlprotocol/threadedparser.h \ - xmlprotocol/announcethread.h \ - xmlprotocol/stack.h \ - xmlprotocol/errorlistmodel.h \ - xmlprotocol/stackmodel.h \ - xmlprotocol/modelhelpers.h \ - callgrind/callgrindparser.h \ - callgrind/callgrindparsedata.h \ - callgrind/callgrindfunction.h \ - callgrind/callgrindfunction_p.h \ - callgrind/callgrindfunctioncycle.h \ - callgrind/callgrindfunctioncall.h \ - callgrind/callgrindcostitem.h \ - callgrind/callgrinddatamodel.h \ - callgrind/callgrindabstractmodel.h \ - callgrind/callgrindcallmodel.h \ - callgrind/callgrindcontroller.h \ - callgrind/callgrindcycledetection.h \ - callgrind/callgrindproxymodel.h \ - callgrind/callgrindstackbrowser.h \ - callgrind/callgrindrunner.h \ - memcheck/memcheckrunner.h \ - valgrindrunner.h \ - valgrindprocess.h - -SOURCES += xmlprotocol/error.cpp \ - xmlprotocol/frame.cpp \ - xmlprotocol/parser.cpp \ - xmlprotocol/status.cpp \ - xmlprotocol/suppression.cpp \ - xmlprotocol/threadedparser.cpp \ - xmlprotocol/announcethread.cpp \ - xmlprotocol/stack.cpp \ - xmlprotocol/errorlistmodel.cpp \ - xmlprotocol/stackmodel.cpp \ - xmlprotocol/modelhelpers.cpp \ - callgrind/callgrindparser.cpp \ - callgrind/callgrindparsedata.cpp \ - callgrind/callgrindfunction.cpp \ - callgrind/callgrindfunctioncycle.cpp \ - callgrind/callgrindfunctioncall.cpp \ - callgrind/callgrindcostitem.cpp \ - callgrind/callgrindabstractmodel.cpp \ - callgrind/callgrinddatamodel.cpp \ - callgrind/callgrindcallmodel.cpp \ - callgrind/callgrindcontroller.cpp \ - callgrind/callgrindcycledetection.cpp \ - callgrind/callgrindproxymodel.cpp \ - callgrind/callgrindrunner.cpp \ - callgrind/callgrindstackbrowser.cpp \ - memcheck/memcheckrunner.cpp \ - valgrindrunner.cpp \ - valgrindprocess.cpp diff --git a/src/libs/valgrind/valgrind_global.h b/src/libs/valgrind/valgrind_global.h deleted file mode 100644 index c09c7814ff6..00000000000 --- a/src/libs/valgrind/valgrind_global.h +++ /dev/null @@ -1,46 +0,0 @@ -/************************************************************************** -** -** This file is part of Qt Creator -** -** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). -** -** Author: Nicolas Arnaud-Cormos, KDAB (nicolas.arnaud-cormos@kdab.com) -** -** Contact: Nokia Corporation (info@qt.nokia.com) -** -** -** GNU Lesser General Public License Usage -** -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this file. -** Please review the following information to ensure the GNU Lesser General -** Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** Other Usage -** -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** If you have questions regarding the use of this file, please contact -** Nokia at info@qt.nokia.com. -** -**************************************************************************/ - -#ifndef VALGRIND_GLOBAL_H -#define VALGRIND_GLOBAL_H - -#include - -#if defined(VALGRIND_LIBRARY) -# define VALGRINDSHARED_EXPORT Q_DECL_EXPORT -#else -# define VALGRINDSHARED_EXPORT Q_DECL_IMPORT -#endif - -#endif // VALGRIND_GLOBAL_H diff --git a/src/plugins/analyzerbase/analyzersettings.cpp b/src/plugins/analyzerbase/analyzersettings.cpp index fa00ab55d06..89fa68b1c21 100644 --- a/src/plugins/analyzerbase/analyzersettings.cpp +++ b/src/plugins/analyzerbase/analyzersettings.cpp @@ -40,7 +40,6 @@ #include "analyzeroptionspage.h" #include -#include #include #include diff --git a/src/plugins/plugins.pro b/src/plugins/plugins.pro index 8ef73ff1f27..6ceff9a63c2 100644 --- a/src/plugins/plugins.pro +++ b/src/plugins/plugins.pro @@ -43,11 +43,8 @@ SUBDIRS = plugin_coreplugin \ plugin_macros \ debugger/dumper.pro \ plugin_qmlprofiler \ - plugin_remotelinux - -!win32 { - SUBDIRS += plugin_valgrind -} + plugin_remotelinux \ + plugin_valgrind linux-* { SUBDIRS += debugger/ptracepreload.pro @@ -269,11 +266,9 @@ plugin_analyzerbase.depends = plugin_coreplugin plugin_analyzerbase.depends += plugin_projectexplorer plugin_analyzerbase.depends += plugin_remotelinux -!win32 { - plugin_valgrind.subdir = valgrind - plugin_valgrind.depends = plugin_coreplugin - plugin_valgrind.depends += plugin_analyzerbase -} +plugin_valgrind.subdir = valgrind +plugin_valgrind.depends = plugin_coreplugin +plugin_valgrind.depends += plugin_analyzerbase plugin_qmlprofiler.subdir = qmlprofiler plugin_qmlprofiler.depends = plugin_coreplugin diff --git a/src/plugins/valgrind/valgrind.pro b/src/plugins/valgrind/valgrind.pro index 18bdb644415..e07d06ee74b 100644 --- a/src/plugins/valgrind/valgrind.pro +++ b/src/plugins/valgrind/valgrind.pro @@ -1,20 +1,18 @@ TEMPLATE = lib TARGET = Valgrind -DEFINES += VALGRIND_LIBRARY - include(../../qtcreatorplugin.pri) -include(valgrind.pri) +include(valgrind_dependencies.pri) +include(valgrind/valgrind.pri) +QT *= network -QT += network +INCLUDEPATH *= $$PWD HEADERS += \ valgrindplugin.h \ - valgrind_global.h \ valgrindengine.h \ valgrindconfigwidget.h \ valgrindsettings.h \ - \ callgrindconfigwidget.h \ callgrindcostdelegate.h \ callgrindcostview.h \ @@ -51,7 +49,6 @@ SOURCES += \ callgrindengine.cpp \ workarounds.cpp \ callgrindtextmark.cpp \ - \ memchecktool.cpp \ memcheckengine.cpp \ memcheckerrorview.cpp \ diff --git a/src/libs/valgrind/callgrind/callgrindabstractmodel.cpp b/src/plugins/valgrind/valgrind/callgrind/callgrindabstractmodel.cpp similarity index 100% rename from src/libs/valgrind/callgrind/callgrindabstractmodel.cpp rename to src/plugins/valgrind/valgrind/callgrind/callgrindabstractmodel.cpp diff --git a/src/libs/valgrind/callgrind/callgrindabstractmodel.h b/src/plugins/valgrind/valgrind/callgrind/callgrindabstractmodel.h similarity index 98% rename from src/libs/valgrind/callgrind/callgrindabstractmodel.h rename to src/plugins/valgrind/valgrind/callgrind/callgrindabstractmodel.h index 8ae9f5826e5..90518e9a09e 100644 --- a/src/libs/valgrind/callgrind/callgrindabstractmodel.h +++ b/src/plugins/valgrind/valgrind/callgrind/callgrindabstractmodel.h @@ -33,8 +33,6 @@ #ifndef LIBVALGRIND_CALLGRINDABSTRACTMODEL_H #define LIBVALGRIND_CALLGRINDABSTRACTMODEL_H -#include "../valgrind_global.h" - #include namespace Valgrind { diff --git a/src/libs/valgrind/callgrind/callgrindcallmodel.cpp b/src/plugins/valgrind/valgrind/callgrind/callgrindcallmodel.cpp similarity index 100% rename from src/libs/valgrind/callgrind/callgrindcallmodel.cpp rename to src/plugins/valgrind/valgrind/callgrind/callgrindcallmodel.cpp diff --git a/src/libs/valgrind/callgrind/callgrindcallmodel.h b/src/plugins/valgrind/valgrind/callgrind/callgrindcallmodel.h similarity index 96% rename from src/libs/valgrind/callgrind/callgrindcallmodel.h rename to src/plugins/valgrind/valgrind/callgrind/callgrindcallmodel.h index ecac253723e..77bc69b8501 100644 --- a/src/libs/valgrind/callgrind/callgrindcallmodel.h +++ b/src/plugins/valgrind/valgrind/callgrind/callgrindcallmodel.h @@ -35,8 +35,6 @@ #include -#include "../valgrind_global.h" - #include "callgrindabstractmodel.h" namespace Valgrind { @@ -48,7 +46,7 @@ class Function; /** * Model to display list of function calls. */ -class VALGRINDSHARED_EXPORT CallModel : public QAbstractItemModel +class CallModel : public QAbstractItemModel { Q_OBJECT public: diff --git a/src/libs/valgrind/callgrind/callgrindcontroller.cpp b/src/plugins/valgrind/valgrind/callgrind/callgrindcontroller.cpp similarity index 97% rename from src/libs/valgrind/callgrind/callgrindcontroller.cpp rename to src/plugins/valgrind/valgrind/callgrind/callgrindcontroller.cpp index d3532c700a5..c968cfa1de6 100644 --- a/src/libs/valgrind/callgrind/callgrindcontroller.cpp +++ b/src/plugins/valgrind/valgrind/callgrind/callgrindcontroller.cpp @@ -35,7 +35,7 @@ #include #include -#include +#include #include #include @@ -137,9 +137,14 @@ void CallgrindController::run(Option option) #if CALLGRIND_CONTROL_DEBUG m_process->setProcessChannelMode(QProcess::ForwardedChannels); +#endif +#ifdef Q_OS_WIN + int pid = 0; +#else + const int pid = m_valgrindProc->pid(); #endif m_process->run(CALLGRIND_CONTROL_BINARY, - QStringList() << optionString << QString::number(m_valgrindProc->pid()), + QStringList() << optionString << QString::number(pid), QString(), QString()); } @@ -200,7 +205,8 @@ void CallgrindController::getLocalDataFile() QTC_ASSERT(m_valgrindProc, return); // we look for callgrind.out.PID, but there may be updated ones called ~.PID.NUM - QString baseFileName = QString("callgrind.out.%1").arg(m_valgrindProc->pid()); + QString baseFileName = QString("callgrind.out.%1"). + arg(m_valgrindProc->pid()); const QString workingDir = m_valgrindProc->workingDirectory(); // first, set the to-be-parsed file to callgrind.out.PID QString fileName = workingDir.isEmpty() ? baseFileName : (workingDir + QDir::separator() + baseFileName); diff --git a/src/libs/valgrind/callgrind/callgrindcontroller.h b/src/plugins/valgrind/valgrind/callgrind/callgrindcontroller.h similarity index 96% rename from src/libs/valgrind/callgrind/callgrindcontroller.h rename to src/plugins/valgrind/valgrind/callgrind/callgrindcontroller.h index 4a648b571d0..0368f5316fe 100644 --- a/src/libs/valgrind/callgrind/callgrindcontroller.h +++ b/src/plugins/valgrind/valgrind/callgrind/callgrindcontroller.h @@ -41,15 +41,13 @@ #include #include -#include - namespace Valgrind { class ValgrindProcess; namespace Callgrind { -class VALGRINDSHARED_EXPORT CallgrindController : public QObject +class CallgrindController : public QObject { Q_OBJECT Q_ENUMS(Option) diff --git a/src/libs/valgrind/callgrind/callgrindcostitem.cpp b/src/plugins/valgrind/valgrind/callgrind/callgrindcostitem.cpp similarity index 100% rename from src/libs/valgrind/callgrind/callgrindcostitem.cpp rename to src/plugins/valgrind/valgrind/callgrind/callgrindcostitem.cpp diff --git a/src/libs/valgrind/callgrind/callgrindcostitem.h b/src/plugins/valgrind/valgrind/callgrind/callgrindcostitem.h similarity index 97% rename from src/libs/valgrind/callgrind/callgrindcostitem.h rename to src/plugins/valgrind/valgrind/callgrind/callgrindcostitem.h index 2bc789e3bb2..c0804606b07 100644 --- a/src/libs/valgrind/callgrind/callgrindcostitem.h +++ b/src/plugins/valgrind/valgrind/callgrind/callgrindcostitem.h @@ -33,7 +33,7 @@ #ifndef LIBVALGRIND_CALLGRIND_COSTITEM_H #define LIBVALGRIND_CALLGRIND_COSTITEM_H -#include "../valgrind_global.h" +#include QT_BEGIN_NAMESPACE class QString; @@ -49,7 +49,7 @@ class ParseData; /** * This class represents the cost(s) at given position(s). */ -class VALGRINDSHARED_EXPORT CostItem +class CostItem { public: /// @p data the file data this cost item was parsed in. diff --git a/src/libs/valgrind/callgrind/callgrindcycledetection.cpp b/src/plugins/valgrind/valgrind/callgrind/callgrindcycledetection.cpp similarity index 100% rename from src/libs/valgrind/callgrind/callgrindcycledetection.cpp rename to src/plugins/valgrind/valgrind/callgrind/callgrindcycledetection.cpp diff --git a/src/libs/valgrind/callgrind/callgrindcycledetection.h b/src/plugins/valgrind/valgrind/callgrind/callgrindcycledetection.h similarity index 100% rename from src/libs/valgrind/callgrind/callgrindcycledetection.h rename to src/plugins/valgrind/valgrind/callgrind/callgrindcycledetection.h diff --git a/src/libs/valgrind/callgrind/callgrinddatamodel.cpp b/src/plugins/valgrind/valgrind/callgrind/callgrinddatamodel.cpp similarity index 100% rename from src/libs/valgrind/callgrind/callgrinddatamodel.cpp rename to src/plugins/valgrind/valgrind/callgrind/callgrinddatamodel.cpp diff --git a/src/libs/valgrind/callgrind/callgrinddatamodel.h b/src/plugins/valgrind/valgrind/callgrind/callgrinddatamodel.h similarity index 97% rename from src/libs/valgrind/callgrind/callgrinddatamodel.h rename to src/plugins/valgrind/valgrind/callgrind/callgrinddatamodel.h index 9035159b67f..c155ef661c5 100644 --- a/src/libs/valgrind/callgrind/callgrinddatamodel.h +++ b/src/plugins/valgrind/valgrind/callgrind/callgrinddatamodel.h @@ -33,8 +33,6 @@ #ifndef VALGRIND_CALLGRIND_CALLGRINDDATAMODEL_H #define VALGRIND_CALLGRIND_CALLGRINDDATAMODEL_H -#include "../valgrind_global.h" - #include "callgrindabstractmodel.h" #include @@ -45,7 +43,7 @@ namespace Callgrind { class Function; class ParseData; -class VALGRINDSHARED_EXPORT DataModel : public QAbstractItemModel +class DataModel : public QAbstractItemModel { Q_OBJECT diff --git a/src/libs/valgrind/callgrind/callgrindfunction.cpp b/src/plugins/valgrind/valgrind/callgrind/callgrindfunction.cpp similarity index 100% rename from src/libs/valgrind/callgrind/callgrindfunction.cpp rename to src/plugins/valgrind/valgrind/callgrind/callgrindfunction.cpp diff --git a/src/libs/valgrind/callgrind/callgrindfunction.h b/src/plugins/valgrind/valgrind/callgrind/callgrindfunction.h similarity index 98% rename from src/libs/valgrind/callgrind/callgrindfunction.h rename to src/plugins/valgrind/valgrind/callgrind/callgrindfunction.h index c52863ff9a4..50a84b92180 100644 --- a/src/libs/valgrind/callgrind/callgrindfunction.h +++ b/src/plugins/valgrind/valgrind/callgrind/callgrindfunction.h @@ -33,8 +33,6 @@ #ifndef LIBVALGRIND_CALLGRIND_FUNCTION_H #define LIBVALGRIND_CALLGRIND_FUNCTION_H -#include "../valgrind_global.h" - #include QT_BEGIN_NAMESPACE @@ -50,7 +48,7 @@ class FunctionCall; class CostItem; class ParseData; -class VALGRINDSHARED_EXPORT Function +class Function { public: /// @p data the ParseData for the file this function was part of diff --git a/src/libs/valgrind/callgrind/callgrindfunction_p.h b/src/plugins/valgrind/valgrind/callgrind/callgrindfunction_p.h similarity index 100% rename from src/libs/valgrind/callgrind/callgrindfunction_p.h rename to src/plugins/valgrind/valgrind/callgrind/callgrindfunction_p.h diff --git a/src/libs/valgrind/callgrind/callgrindfunctioncall.cpp b/src/plugins/valgrind/valgrind/callgrind/callgrindfunctioncall.cpp similarity index 100% rename from src/libs/valgrind/callgrind/callgrindfunctioncall.cpp rename to src/plugins/valgrind/valgrind/callgrind/callgrindfunctioncall.cpp diff --git a/src/libs/valgrind/callgrind/callgrindfunctioncall.h b/src/plugins/valgrind/valgrind/callgrind/callgrindfunctioncall.h similarity index 97% rename from src/libs/valgrind/callgrind/callgrindfunctioncall.h rename to src/plugins/valgrind/valgrind/callgrind/callgrindfunctioncall.h index e84aa30f5e9..2e825ebca37 100644 --- a/src/libs/valgrind/callgrind/callgrindfunctioncall.h +++ b/src/plugins/valgrind/valgrind/callgrind/callgrindfunctioncall.h @@ -33,8 +33,6 @@ #ifndef LIBVALGRIND_CALLGRIND_CALLEE_H #define LIBVALGRIND_CALLGRIND_CALLEE_H -#include "../valgrind_global.h" - #include QT_BEGIN_NAMESPACE @@ -49,7 +47,7 @@ class Function; /** * This represents a function call. */ -class VALGRINDSHARED_EXPORT FunctionCall +class FunctionCall { public: explicit FunctionCall(); diff --git a/src/libs/valgrind/callgrind/callgrindfunctioncycle.cpp b/src/plugins/valgrind/valgrind/callgrind/callgrindfunctioncycle.cpp similarity index 100% rename from src/libs/valgrind/callgrind/callgrindfunctioncycle.cpp rename to src/plugins/valgrind/valgrind/callgrind/callgrindfunctioncycle.cpp diff --git a/src/libs/valgrind/callgrind/callgrindfunctioncycle.h b/src/plugins/valgrind/valgrind/callgrind/callgrindfunctioncycle.h similarity index 97% rename from src/libs/valgrind/callgrind/callgrindfunctioncycle.h rename to src/plugins/valgrind/valgrind/callgrind/callgrindfunctioncycle.h index 249087efa5d..d4feaca2c06 100644 --- a/src/libs/valgrind/callgrind/callgrindfunctioncycle.h +++ b/src/plugins/valgrind/valgrind/callgrind/callgrindfunctioncycle.h @@ -46,7 +46,7 @@ namespace Callgrind { * excluding calees inside the cycle * inclusive cost of a function cycle: sum of inclusive cost of callees of the cycle (see above) */ -class VALGRINDSHARED_EXPORT FunctionCycle : public Function +class FunctionCycle : public Function { public: explicit FunctionCycle(const ParseData *data); diff --git a/src/libs/valgrind/callgrind/callgrindparsedata.cpp b/src/plugins/valgrind/valgrind/callgrind/callgrindparsedata.cpp similarity index 100% rename from src/libs/valgrind/callgrind/callgrindparsedata.cpp rename to src/plugins/valgrind/valgrind/callgrind/callgrindparsedata.cpp diff --git a/src/libs/valgrind/callgrind/callgrindparsedata.h b/src/plugins/valgrind/valgrind/callgrind/callgrindparsedata.h similarity index 98% rename from src/libs/valgrind/callgrind/callgrindparsedata.h rename to src/plugins/valgrind/valgrind/callgrind/callgrindparsedata.h index 5110461a35b..a77f638f6fd 100644 --- a/src/libs/valgrind/callgrind/callgrindparsedata.h +++ b/src/plugins/valgrind/valgrind/callgrind/callgrindparsedata.h @@ -33,7 +33,7 @@ #ifndef LIBVALGRIND_CALLGRIND_PARSEDATA_P_H #define LIBVALGRIND_CALLGRIND_PARSEDATA_P_H -#include "../valgrind_global.h" +#include QT_BEGIN_NAMESPACE class QString; @@ -49,7 +49,7 @@ class Function; /** * Represents all the information extracted from a callgrind data file. */ -class VALGRINDSHARED_EXPORT ParseData +class ParseData { public: explicit ParseData(); diff --git a/src/libs/valgrind/callgrind/callgrindparser.cpp b/src/plugins/valgrind/valgrind/callgrind/callgrindparser.cpp similarity index 100% rename from src/libs/valgrind/callgrind/callgrindparser.cpp rename to src/plugins/valgrind/valgrind/callgrind/callgrindparser.cpp diff --git a/src/libs/valgrind/callgrind/callgrindparser.h b/src/plugins/valgrind/valgrind/callgrind/callgrindparser.h similarity index 96% rename from src/libs/valgrind/callgrind/callgrindparser.h rename to src/plugins/valgrind/valgrind/callgrind/callgrindparser.h index 12629928fdb..40ee2235245 100644 --- a/src/libs/valgrind/callgrind/callgrindparser.h +++ b/src/plugins/valgrind/valgrind/callgrind/callgrindparser.h @@ -33,8 +33,6 @@ #ifndef LIBVALGRIND_CALLGRIND_PARSER_H #define LIBVALGRIND_CALLGRIND_PARSER_H -#include "../valgrind_global.h" - #include QT_BEGIN_NAMESPACE @@ -55,7 +53,7 @@ class ParseData; * the rest is assumed to be zero." * */ -class VALGRINDSHARED_EXPORT Parser : public QObject +class Parser : public QObject { Q_OBJECT diff --git a/src/libs/valgrind/callgrind/callgrindproxymodel.cpp b/src/plugins/valgrind/valgrind/callgrind/callgrindproxymodel.cpp similarity index 100% rename from src/libs/valgrind/callgrind/callgrindproxymodel.cpp rename to src/plugins/valgrind/valgrind/callgrind/callgrindproxymodel.cpp diff --git a/src/libs/valgrind/callgrind/callgrindproxymodel.h b/src/plugins/valgrind/valgrind/callgrind/callgrindproxymodel.h similarity index 96% rename from src/libs/valgrind/callgrind/callgrindproxymodel.h rename to src/plugins/valgrind/valgrind/callgrind/callgrindproxymodel.h index a4967584a57..c4c99e9e7f5 100644 --- a/src/libs/valgrind/callgrind/callgrindproxymodel.h +++ b/src/plugins/valgrind/valgrind/callgrind/callgrindproxymodel.h @@ -33,8 +33,6 @@ #ifndef VALGRIND_CALLGRIND_CALLGRINDPROXYMODEL_H #define VALGRIND_CALLGRIND_CALLGRINDPROXYMODEL_H -#include "../valgrind_global.h" - #include namespace Valgrind { @@ -43,7 +41,7 @@ namespace Callgrind { class DataModel; class Function; -class VALGRINDSHARED_EXPORT DataProxyModel : public QSortFilterProxyModel +class DataProxyModel : public QSortFilterProxyModel { Q_OBJECT diff --git a/src/libs/valgrind/callgrind/callgrindrunner.cpp b/src/plugins/valgrind/valgrind/callgrind/callgrindrunner.cpp similarity index 100% rename from src/libs/valgrind/callgrind/callgrindrunner.cpp rename to src/plugins/valgrind/valgrind/callgrind/callgrindrunner.cpp diff --git a/src/libs/valgrind/callgrind/callgrindrunner.h b/src/plugins/valgrind/valgrind/callgrind/callgrindrunner.h similarity index 94% rename from src/libs/valgrind/callgrind/callgrindrunner.h rename to src/plugins/valgrind/valgrind/callgrind/callgrindrunner.h index 0a42c3ef493..fb7da49db46 100644 --- a/src/libs/valgrind/callgrind/callgrindrunner.h +++ b/src/plugins/valgrind/valgrind/callgrind/callgrindrunner.h @@ -33,8 +33,7 @@ #ifndef VALGRIND_CALLGRIND_CALLGRINDRUNNER_H #define VALGRIND_CALLGRIND_CALLGRINDRUNNER_H -#include -#include +#include #include "callgrindcontroller.h" @@ -44,7 +43,7 @@ namespace Callgrind { class Parser; class CallgrindController; -class VALGRINDSHARED_EXPORT CallgrindRunner : public ValgrindRunner +class CallgrindRunner : public ValgrindRunner { Q_OBJECT diff --git a/src/libs/valgrind/callgrind/callgrindstackbrowser.cpp b/src/plugins/valgrind/valgrind/callgrind/callgrindstackbrowser.cpp similarity index 100% rename from src/libs/valgrind/callgrind/callgrindstackbrowser.cpp rename to src/plugins/valgrind/valgrind/callgrind/callgrindstackbrowser.cpp diff --git a/src/libs/valgrind/callgrind/callgrindstackbrowser.h b/src/plugins/valgrind/valgrind/callgrind/callgrindstackbrowser.h similarity index 95% rename from src/libs/valgrind/callgrind/callgrindstackbrowser.h rename to src/plugins/valgrind/valgrind/callgrind/callgrindstackbrowser.h index 637ea213a19..a7b239ef4b7 100644 --- a/src/libs/valgrind/callgrind/callgrindstackbrowser.h +++ b/src/plugins/valgrind/valgrind/callgrind/callgrindstackbrowser.h @@ -33,8 +33,6 @@ #ifndef CALLGRINDSTACKBROWSER_H #define CALLGRINDSTACKBROWSER_H -#include "../valgrind_global.h" - #include #include @@ -43,7 +41,7 @@ namespace Callgrind { class Function; -class VALGRINDSHARED_EXPORT StackBrowser : public QObject +class StackBrowser : public QObject { Q_OBJECT diff --git a/src/libs/valgrind/memcheck/memcheckrunner.cpp b/src/plugins/valgrind/valgrind/memcheck/memcheckrunner.cpp similarity index 100% rename from src/libs/valgrind/memcheck/memcheckrunner.cpp rename to src/plugins/valgrind/valgrind/memcheck/memcheckrunner.cpp diff --git a/src/libs/valgrind/memcheck/memcheckrunner.h b/src/plugins/valgrind/valgrind/memcheck/memcheckrunner.h similarity index 93% rename from src/libs/valgrind/memcheck/memcheckrunner.h rename to src/plugins/valgrind/valgrind/memcheck/memcheckrunner.h index 6354ea9b323..9fa59570611 100644 --- a/src/libs/valgrind/memcheck/memcheckrunner.h +++ b/src/plugins/valgrind/valgrind/memcheck/memcheckrunner.h @@ -35,8 +35,7 @@ #ifndef VALGRIND_PROTOCOL_MEMCHECKRUNNER_H #define VALGRIND_PROTOCOL_MEMCHECKRUNNER_H -#include -#include +#include namespace Valgrind { @@ -46,7 +45,7 @@ class ThreadedParser; namespace Memcheck { -class VALGRINDSHARED_EXPORT MemcheckRunner : public ValgrindRunner +class MemcheckRunner : public ValgrindRunner { Q_OBJECT diff --git a/src/plugins/valgrind/valgrind/valgrind.pri b/src/plugins/valgrind/valgrind/valgrind.pri new file mode 100644 index 00000000000..73cb4fcdbf0 --- /dev/null +++ b/src/plugins/valgrind/valgrind/valgrind.pri @@ -0,0 +1,63 @@ +QT *= network + +INCLUDEPATH *= $$PWD + +HEADERS += \ + $$PWD/xmlprotocol/frame.h \ + $$PWD/xmlprotocol/parser.h \ + $$PWD/xmlprotocol/error.h \ + $$PWD/xmlprotocol/status.h \ + $$PWD/xmlprotocol/suppression.h \ + $$PWD/xmlprotocol/threadedparser.h \ + $$PWD/xmlprotocol/announcethread.h \ + $$PWD/xmlprotocol/stack.h \ + $$PWD/xmlprotocol/errorlistmodel.h \ + $$PWD/xmlprotocol/stackmodel.h \ + $$PWD/xmlprotocol/modelhelpers.h \ + $$PWD/callgrind/callgrindparser.h \ + $$PWD/callgrind/callgrindparsedata.h \ + $$PWD/callgrind/callgrindfunction.h \ + $$PWD/callgrind/callgrindfunction_p.h \ + $$PWD/callgrind/callgrindfunctioncycle.h \ + $$PWD/callgrind/callgrindfunctioncall.h \ + $$PWD/callgrind/callgrindcostitem.h \ + $$PWD/callgrind/callgrinddatamodel.h \ + $$PWD/callgrind/callgrindabstractmodel.h \ + $$PWD/callgrind/callgrindcallmodel.h \ + $$PWD/callgrind/callgrindcontroller.h \ + $$PWD/callgrind/callgrindcycledetection.h \ + $$PWD/callgrind/callgrindproxymodel.h \ + $$PWD/callgrind/callgrindstackbrowser.h \ + $$PWD/callgrind/callgrindrunner.h \ + $$PWD/memcheck/memcheckrunner.h \ + $$PWD/valgrindrunner.h \ + $$PWD/valgrindprocess.h + +SOURCES += $$PWD/xmlprotocol/error.cpp \ + $$PWD/xmlprotocol/frame.cpp \ + $$PWD/xmlprotocol/parser.cpp \ + $$PWD/xmlprotocol/status.cpp \ + $$PWD/xmlprotocol/suppression.cpp \ + $$PWD/xmlprotocol/threadedparser.cpp \ + $$PWD/xmlprotocol/announcethread.cpp \ + $$PWD/xmlprotocol/stack.cpp \ + $$PWD/xmlprotocol/errorlistmodel.cpp \ + $$PWD/xmlprotocol/stackmodel.cpp \ + $$PWD/xmlprotocol/modelhelpers.cpp \ + $$PWD/callgrind/callgrindparser.cpp \ + $$PWD/callgrind/callgrindparsedata.cpp \ + $$PWD/callgrind/callgrindfunction.cpp \ + $$PWD/callgrind/callgrindfunctioncycle.cpp \ + $$PWD/callgrind/callgrindfunctioncall.cpp \ + $$PWD/callgrind/callgrindcostitem.cpp \ + $$PWD/callgrind/callgrindabstractmodel.cpp \ + $$PWD/callgrind/callgrinddatamodel.cpp \ + $$PWD/callgrind/callgrindcallmodel.cpp \ + $$PWD/callgrind/callgrindcontroller.cpp \ + $$PWD/callgrind/callgrindcycledetection.cpp \ + $$PWD/callgrind/callgrindproxymodel.cpp \ + $$PWD/callgrind/callgrindrunner.cpp \ + $$PWD/callgrind/callgrindstackbrowser.cpp \ + $$PWD/memcheck/memcheckrunner.cpp \ + $$PWD/valgrindrunner.cpp \ + $$PWD/valgrindprocess.cpp diff --git a/src/libs/valgrind/valgrindprocess.cpp b/src/plugins/valgrind/valgrind/valgrindprocess.cpp similarity index 98% rename from src/libs/valgrind/valgrindprocess.cpp rename to src/plugins/valgrind/valgrind/valgrindprocess.cpp index c57877cd3dd..2be53c433ad 100644 --- a/src/libs/valgrind/valgrindprocess.cpp +++ b/src/plugins/valgrind/valgrind/valgrindprocess.cpp @@ -40,6 +40,10 @@ #include +#ifdef Q_OS_WIN +# include +#endif + namespace Valgrind { ValgrindProcess::ValgrindProcess(QObject *parent) @@ -106,7 +110,11 @@ void LocalValgrindProcess::run(const QString &valgrindExecutable, const QStringL m_process.setCommand(valgrindExecutable, arguments); m_process.start(); m_process.waitForStarted(); +#ifdef Q_OS_WIN + m_pid = m_process.pid()->dwProcessId; +#else m_pid = m_process.pid(); +#endif } QString LocalValgrindProcess::errorString() const @@ -119,7 +127,7 @@ QProcess::ProcessError LocalValgrindProcess::error() const return m_process.error(); } -Q_PID LocalValgrindProcess::pid() const +qint64 LocalValgrindProcess::pid() const { return m_pid; } @@ -353,7 +361,7 @@ QString RemoteValgrindProcess::workingDirectory() const return m_workingDir; } -Q_PID RemoteValgrindProcess::pid() const +qint64 RemoteValgrindProcess::pid() const { return m_pid; } diff --git a/src/libs/valgrind/valgrindprocess.h b/src/plugins/valgrind/valgrind/valgrindprocess.h similarity index 93% rename from src/libs/valgrind/valgrindprocess.h rename to src/plugins/valgrind/valgrind/valgrindprocess.h index 903f931ecd7..f4230bcd585 100644 --- a/src/libs/valgrind/valgrindprocess.h +++ b/src/plugins/valgrind/valgrind/valgrindprocess.h @@ -35,8 +35,6 @@ #ifndef VALGRIND_RUNNER_P_H #define VALGRIND_RUNNER_P_H -#include "valgrind_global.h" - #include #include #include @@ -47,7 +45,7 @@ namespace Valgrind { /** * Abstract process that can be subclassed to supply local and remote valgrind runs */ -class VALGRINDSHARED_EXPORT ValgrindProcess : public QObject +class ValgrindProcess : public QObject { Q_OBJECT @@ -68,7 +66,7 @@ public: virtual QString workingDirectory() const = 0; virtual void setEnvironment(const Utils::Environment &environment) = 0; - virtual Q_PID pid() const = 0; + virtual qint64 pid() const = 0; signals: void started(); @@ -80,7 +78,7 @@ signals: /** * Run valgrind on the local machine */ -class VALGRINDSHARED_EXPORT LocalValgrindProcess : public ValgrindProcess +class LocalValgrindProcess : public ValgrindProcess { Q_OBJECT @@ -101,7 +99,7 @@ public: virtual QString workingDirectory() const; virtual void setEnvironment(const Utils::Environment &environment); - virtual Q_PID pid() const; + virtual qint64 pid() const; private slots: void readyReadStandardError(); @@ -109,13 +107,13 @@ private slots: private: Utils::QtcProcess m_process; - Q_PID m_pid; + qint64 m_pid; }; /** * Run valgrind on a remote machine via SSH */ -class VALGRINDSHARED_EXPORT RemoteValgrindProcess : public ValgrindProcess +class RemoteValgrindProcess : public ValgrindProcess { Q_OBJECT @@ -139,7 +137,7 @@ public: virtual QString workingDirectory() const; virtual void setEnvironment(const Utils::Environment &environment); - virtual Q_PID pid() const; + virtual qint64 pid() const; Utils::SshConnection::Ptr connection() const; @@ -163,7 +161,7 @@ private: QString m_debuggeeArgs; QString m_errorString; QProcess::ProcessError m_error; - Q_PID m_pid; + qint64 m_pid; Utils::SshRemoteProcess::Ptr m_findPID; }; diff --git a/src/libs/valgrind/valgrindrunner.cpp b/src/plugins/valgrind/valgrind/valgrindrunner.cpp similarity index 100% rename from src/libs/valgrind/valgrindrunner.cpp rename to src/plugins/valgrind/valgrind/valgrindrunner.cpp diff --git a/src/libs/valgrind/valgrindrunner.h b/src/plugins/valgrind/valgrind/valgrindrunner.h similarity index 97% rename from src/libs/valgrind/valgrindrunner.h rename to src/plugins/valgrind/valgrind/valgrindrunner.h index 09563533ca7..3b866dfc544 100644 --- a/src/libs/valgrind/valgrindrunner.h +++ b/src/plugins/valgrind/valgrind/valgrindrunner.h @@ -38,8 +38,6 @@ #include #include -#include "valgrind_global.h" - namespace Utils { class Environment; class SshConnectionParameters; @@ -49,7 +47,7 @@ namespace Valgrind { class ValgrindProcess; -class VALGRINDSHARED_EXPORT ValgrindRunner : public QObject +class ValgrindRunner : public QObject { Q_OBJECT diff --git a/src/libs/valgrind/xmlprotocol/announcethread.cpp b/src/plugins/valgrind/valgrind/xmlprotocol/announcethread.cpp similarity index 100% rename from src/libs/valgrind/xmlprotocol/announcethread.cpp rename to src/plugins/valgrind/valgrind/xmlprotocol/announcethread.cpp diff --git a/src/libs/valgrind/xmlprotocol/announcethread.h b/src/plugins/valgrind/valgrind/xmlprotocol/announcethread.h similarity index 96% rename from src/libs/valgrind/xmlprotocol/announcethread.h rename to src/plugins/valgrind/valgrind/xmlprotocol/announcethread.h index c46c90ebc55..529e798d87b 100644 --- a/src/libs/valgrind/xmlprotocol/announcethread.h +++ b/src/plugins/valgrind/valgrind/xmlprotocol/announcethread.h @@ -35,8 +35,6 @@ #ifndef LIBVALGRIND_PROTOCOL_ANNOUNCETHREAD_H #define LIBVALGRIND_PROTOCOL_ANNOUNCETHREAD_H -#include "../valgrind_global.h" - #include QT_BEGIN_NAMESPACE @@ -48,7 +46,7 @@ namespace XmlProtocol { class Frame; -class VALGRINDSHARED_EXPORT AnnounceThread { +class AnnounceThread { public: AnnounceThread(); AnnounceThread(const AnnounceThread &other); diff --git a/src/libs/valgrind/xmlprotocol/error.cpp b/src/plugins/valgrind/valgrind/xmlprotocol/error.cpp similarity index 100% rename from src/libs/valgrind/xmlprotocol/error.cpp rename to src/plugins/valgrind/valgrind/xmlprotocol/error.cpp diff --git a/src/libs/valgrind/xmlprotocol/error.h b/src/plugins/valgrind/valgrind/xmlprotocol/error.h similarity index 98% rename from src/libs/valgrind/xmlprotocol/error.h rename to src/plugins/valgrind/valgrind/xmlprotocol/error.h index 4275924d4e1..910098809de 100644 --- a/src/libs/valgrind/xmlprotocol/error.h +++ b/src/plugins/valgrind/valgrind/xmlprotocol/error.h @@ -35,8 +35,6 @@ #ifndef LIBVALGRIND_PROTOCOL_ERROR_H #define LIBVALGRIND_PROTOCOL_ERROR_H -#include "../valgrind_global.h" - #include #include @@ -94,7 +92,7 @@ enum HelgrindErrorKind Misc }; -class VALGRINDSHARED_EXPORT Error +class Error { public: Error(); diff --git a/src/libs/valgrind/xmlprotocol/errorlistmodel.cpp b/src/plugins/valgrind/valgrind/xmlprotocol/errorlistmodel.cpp similarity index 100% rename from src/libs/valgrind/xmlprotocol/errorlistmodel.cpp rename to src/plugins/valgrind/valgrind/xmlprotocol/errorlistmodel.cpp diff --git a/src/libs/valgrind/xmlprotocol/errorlistmodel.h b/src/plugins/valgrind/valgrind/xmlprotocol/errorlistmodel.h similarity index 96% rename from src/libs/valgrind/xmlprotocol/errorlistmodel.h rename to src/plugins/valgrind/valgrind/xmlprotocol/errorlistmodel.h index e524ab4ce9d..fe758ed01a7 100644 --- a/src/libs/valgrind/xmlprotocol/errorlistmodel.h +++ b/src/plugins/valgrind/valgrind/xmlprotocol/errorlistmodel.h @@ -35,8 +35,6 @@ #ifndef LIBVALGRIND_PROTOCOL_ERRORLISTMODEL_H #define LIBVALGRIND_PROTOCOL_ERRORLISTMODEL_H -#include "../valgrind_global.h" - #include #include @@ -46,7 +44,7 @@ namespace XmlProtocol { class Error; class Frame; -class VALGRINDSHARED_EXPORT ErrorListModel : public QAbstractItemModel +class ErrorListModel : public QAbstractItemModel { Q_OBJECT public: diff --git a/src/libs/valgrind/xmlprotocol/frame.cpp b/src/plugins/valgrind/valgrind/xmlprotocol/frame.cpp similarity index 100% rename from src/libs/valgrind/xmlprotocol/frame.cpp rename to src/plugins/valgrind/valgrind/xmlprotocol/frame.cpp diff --git a/src/libs/valgrind/xmlprotocol/frame.h b/src/plugins/valgrind/valgrind/xmlprotocol/frame.h similarity index 97% rename from src/libs/valgrind/xmlprotocol/frame.h rename to src/plugins/valgrind/valgrind/xmlprotocol/frame.h index 7bd3ebcedf9..e7b5cd649ae 100644 --- a/src/libs/valgrind/xmlprotocol/frame.h +++ b/src/plugins/valgrind/valgrind/xmlprotocol/frame.h @@ -35,14 +35,12 @@ #ifndef LIBVALGRIND_PROTOCOL_FRAME_H #define LIBVALGRIND_PROTOCOL_FRAME_H -#include "../valgrind_global.h" - #include namespace Valgrind { namespace XmlProtocol { -class VALGRINDSHARED_EXPORT Frame +class Frame { public: Frame(); diff --git a/src/libs/valgrind/xmlprotocol/modelhelpers.cpp b/src/plugins/valgrind/valgrind/xmlprotocol/modelhelpers.cpp similarity index 100% rename from src/libs/valgrind/xmlprotocol/modelhelpers.cpp rename to src/plugins/valgrind/valgrind/xmlprotocol/modelhelpers.cpp diff --git a/src/libs/valgrind/xmlprotocol/modelhelpers.h b/src/plugins/valgrind/valgrind/xmlprotocol/modelhelpers.h similarity index 94% rename from src/libs/valgrind/xmlprotocol/modelhelpers.h rename to src/plugins/valgrind/valgrind/xmlprotocol/modelhelpers.h index 2792771841c..6c2a57f155c 100644 --- a/src/libs/valgrind/xmlprotocol/modelhelpers.h +++ b/src/plugins/valgrind/valgrind/xmlprotocol/modelhelpers.h @@ -35,7 +35,7 @@ #ifndef LIBVALGRIND_PROTOCOL_MODELHELPERS_H #define LIBVALGRIND_PROTOCOL_MODELHELPERS_H -#include "../valgrind_global.h" +#include QT_BEGIN_NAMESPACE class QString; @@ -46,7 +46,7 @@ namespace XmlProtocol { class Frame; -VALGRINDSHARED_EXPORT QString toolTipForFrame(const Frame &frame); +QString toolTipForFrame(const Frame &frame); } // namespace XmlProtocol } // namespace Valgrind diff --git a/src/libs/valgrind/xmlprotocol/parser.cpp b/src/plugins/valgrind/valgrind/xmlprotocol/parser.cpp similarity index 100% rename from src/libs/valgrind/xmlprotocol/parser.cpp rename to src/plugins/valgrind/valgrind/xmlprotocol/parser.cpp diff --git a/src/libs/valgrind/xmlprotocol/parser.h b/src/plugins/valgrind/valgrind/xmlprotocol/parser.h similarity index 96% rename from src/libs/valgrind/xmlprotocol/parser.h rename to src/plugins/valgrind/valgrind/xmlprotocol/parser.h index ca68a0d69fc..0fed01dad9b 100644 --- a/src/libs/valgrind/xmlprotocol/parser.h +++ b/src/plugins/valgrind/valgrind/xmlprotocol/parser.h @@ -35,8 +35,6 @@ #ifndef LIBVALGRIND_PROTOCOL_PARSER_H #define LIBVALGRIND_PROTOCOL_PARSER_H -#include "../valgrind_global.h" - #include QT_BEGIN_NAMESPACE @@ -53,7 +51,7 @@ class Status; /** * Parser for the Valgrind Output XML Protocol 4 */ -class VALGRINDSHARED_EXPORT Parser : public QObject +class Parser : public QObject { Q_OBJECT diff --git a/src/libs/valgrind/xmlprotocol/stack.cpp b/src/plugins/valgrind/valgrind/xmlprotocol/stack.cpp similarity index 100% rename from src/libs/valgrind/xmlprotocol/stack.cpp rename to src/plugins/valgrind/valgrind/xmlprotocol/stack.cpp diff --git a/src/libs/valgrind/xmlprotocol/stack.h b/src/plugins/valgrind/valgrind/xmlprotocol/stack.h similarity index 97% rename from src/libs/valgrind/xmlprotocol/stack.h rename to src/plugins/valgrind/valgrind/xmlprotocol/stack.h index b26d733d797..72330007f1b 100644 --- a/src/libs/valgrind/xmlprotocol/stack.h +++ b/src/plugins/valgrind/valgrind/xmlprotocol/stack.h @@ -35,8 +35,6 @@ #ifndef LIBVALGRIND_PROTOCOL_STACK_H #define LIBVALGRIND_PROTOCOL_STACK_H -#include "../valgrind_global.h" - #include QT_BEGIN_NAMESPACE @@ -48,7 +46,7 @@ namespace XmlProtocol { class Frame; -class VALGRINDSHARED_EXPORT Stack +class Stack { public: Stack(); diff --git a/src/libs/valgrind/xmlprotocol/stackmodel.cpp b/src/plugins/valgrind/valgrind/xmlprotocol/stackmodel.cpp similarity index 100% rename from src/libs/valgrind/xmlprotocol/stackmodel.cpp rename to src/plugins/valgrind/valgrind/xmlprotocol/stackmodel.cpp diff --git a/src/libs/valgrind/xmlprotocol/stackmodel.h b/src/plugins/valgrind/valgrind/xmlprotocol/stackmodel.h similarity index 96% rename from src/libs/valgrind/xmlprotocol/stackmodel.h rename to src/plugins/valgrind/valgrind/xmlprotocol/stackmodel.h index e9e6662e3b8..df6574fcd0c 100644 --- a/src/libs/valgrind/xmlprotocol/stackmodel.h +++ b/src/plugins/valgrind/valgrind/xmlprotocol/stackmodel.h @@ -35,8 +35,6 @@ #ifndef LIBVALGRIND_PROTOCOL_STACKMODEL_H #define LIBVALGRIND_PROTOCOL_STACKMODEL_H -#include "../valgrind_global.h" - #include namespace Valgrind { @@ -44,7 +42,7 @@ namespace XmlProtocol { class Error; -class VALGRINDSHARED_EXPORT StackModel : public QAbstractItemModel +class StackModel : public QAbstractItemModel { Q_OBJECT public: diff --git a/src/libs/valgrind/xmlprotocol/status.cpp b/src/plugins/valgrind/valgrind/xmlprotocol/status.cpp similarity index 100% rename from src/libs/valgrind/xmlprotocol/status.cpp rename to src/plugins/valgrind/valgrind/xmlprotocol/status.cpp diff --git a/src/libs/valgrind/xmlprotocol/status.h b/src/plugins/valgrind/valgrind/xmlprotocol/status.h similarity index 96% rename from src/libs/valgrind/xmlprotocol/status.h rename to src/plugins/valgrind/valgrind/xmlprotocol/status.h index bc3def72647..1c1089d0e91 100644 --- a/src/libs/valgrind/xmlprotocol/status.h +++ b/src/plugins/valgrind/valgrind/xmlprotocol/status.h @@ -35,15 +35,13 @@ #ifndef LIBVALGRIND_PROTOCOL_STATUS_H #define LIBVALGRIND_PROTOCOL_STATUS_H -#include "../valgrind_global.h" - #include #include namespace Valgrind { namespace XmlProtocol { -class VALGRINDSHARED_EXPORT Status +class Status { public: enum State { diff --git a/src/libs/valgrind/xmlprotocol/suppression.cpp b/src/plugins/valgrind/valgrind/xmlprotocol/suppression.cpp similarity index 100% rename from src/libs/valgrind/xmlprotocol/suppression.cpp rename to src/plugins/valgrind/valgrind/xmlprotocol/suppression.cpp diff --git a/src/libs/valgrind/xmlprotocol/suppression.h b/src/plugins/valgrind/valgrind/xmlprotocol/suppression.h similarity index 96% rename from src/libs/valgrind/xmlprotocol/suppression.h rename to src/plugins/valgrind/valgrind/xmlprotocol/suppression.h index eb7456a6b99..82d781ff765 100644 --- a/src/libs/valgrind/xmlprotocol/suppression.h +++ b/src/plugins/valgrind/valgrind/xmlprotocol/suppression.h @@ -35,8 +35,6 @@ #ifndef LIBVALGRIND_PROTOCOL_SUPPRESSION_H #define LIBVALGRIND_PROTOCOL_SUPPRESSION_H -#include "../valgrind_global.h" - #include QT_BEGIN_NAMESPACE @@ -47,7 +45,7 @@ QT_END_NAMESPACE namespace Valgrind { namespace XmlProtocol { -class VALGRINDSHARED_EXPORT SuppressionFrame +class SuppressionFrame { public: SuppressionFrame(); @@ -76,7 +74,7 @@ private: typedef QVector SuppressionFrames; -class VALGRINDSHARED_EXPORT Suppression +class Suppression { public: Suppression(); diff --git a/src/libs/valgrind/xmlprotocol/threadedparser.cpp b/src/plugins/valgrind/valgrind/xmlprotocol/threadedparser.cpp similarity index 100% rename from src/libs/valgrind/xmlprotocol/threadedparser.cpp rename to src/plugins/valgrind/valgrind/xmlprotocol/threadedparser.cpp diff --git a/src/libs/valgrind/xmlprotocol/threadedparser.h b/src/plugins/valgrind/valgrind/xmlprotocol/threadedparser.h similarity index 96% rename from src/libs/valgrind/xmlprotocol/threadedparser.h rename to src/plugins/valgrind/valgrind/xmlprotocol/threadedparser.h index 0cb274fa8dd..49d6d115090 100644 --- a/src/libs/valgrind/xmlprotocol/threadedparser.h +++ b/src/plugins/valgrind/valgrind/xmlprotocol/threadedparser.h @@ -35,8 +35,6 @@ #ifndef LIBVALGRIND_PROTOCOL_THREADEDPARSER_H #define LIBVALGRIND_PROTOCOL_THREADEDPARSER_H -#include "../valgrind_global.h" - #include QT_BEGIN_NAMESPACE @@ -52,7 +50,7 @@ class Status; /** * ThreadedParser for the Valgrind Output XmlProtocol 4 */ -class VALGRINDSHARED_EXPORT ThreadedParser : public QObject +class ThreadedParser : public QObject { Q_OBJECT diff --git a/src/plugins/valgrind/valgrind_dependencies.pri b/src/plugins/valgrind/valgrind_dependencies.pri index 04786e9e89c..b6b5ec7ed6e 100644 --- a/src/plugins/valgrind/valgrind_dependencies.pri +++ b/src/plugins/valgrind/valgrind_dependencies.pri @@ -2,3 +2,4 @@ include(../../libs/cplusplus/cplusplus.pri) include(../../plugins/analyzerbase/analyzerbase.pri) include(../../plugins/coreplugin/coreplugin.pri) include(../../plugins/texteditor/texteditor.pri) +include(../../libs/utils/utils.pri) diff --git a/src/plugins/valgrind/valgrind_global.h b/src/plugins/valgrind/valgrind_global.h deleted file mode 100644 index 62a4e13cf40..00000000000 --- a/src/plugins/valgrind/valgrind_global.h +++ /dev/null @@ -1,46 +0,0 @@ -/************************************************************************** -** -** This file is part of Qt Creator -** -** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). -** -** Author: Nicolas Arnaud-Cormos, KDAB (nicolas.arnaud-cormos@kdab.com) -** -** Contact: Nokia Corporation (info@qt.nokia.com) -** -** -** GNU Lesser General Public License Usage -** -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this file. -** Please review the following information to ensure the GNU Lesser General -** Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** Other Usage -** -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** If you have questions regarding the use of this file, please contact -** Nokia at info@qt.nokia.com. -** -**************************************************************************/ - -#ifndef VALGRINDTOOLBASE_GLOBAL_H -#define VALGRINDTOOLBASE_GLOBAL_H - -#include - -#if defined(VALGRIND_LIBRARY) -# define VALGRINDTOOLBASE_EXPORT Q_DECL_EXPORT -#else -# define VALGRINDTOOLBASE_EXPORT Q_DECL_IMPORT -#endif - -#endif // VALGRINDTOOLBASE_GLOBAL_H diff --git a/src/plugins/valgrind/valgrindengine.h b/src/plugins/valgrind/valgrindengine.h index 9618312d30b..72901fe6489 100644 --- a/src/plugins/valgrind/valgrindengine.h +++ b/src/plugins/valgrind/valgrindengine.h @@ -35,8 +35,6 @@ #ifndef VALGRINDENGINE_H #define VALGRINDENGINE_H -#include "valgrind_global.h" - #include #include @@ -55,7 +53,7 @@ class AnalyzerSettings; namespace Valgrind { namespace Internal { -class VALGRINDTOOLBASE_EXPORT ValgrindEngine : public Analyzer::IAnalyzerEngine +class ValgrindEngine : public Analyzer::IAnalyzerEngine { Q_OBJECT diff --git a/src/plugins/valgrind/valgrindsettings.h b/src/plugins/valgrind/valgrindsettings.h index c01fc74595d..0e4b5dfe38b 100644 --- a/src/plugins/valgrind/valgrindsettings.h +++ b/src/plugins/valgrind/valgrindsettings.h @@ -35,8 +35,6 @@ #ifndef ANALYZER_INTERNAL_VALGRINDSETTINGS_H #define ANALYZER_INTERNAL_VALGRINDSETTINGS_H -#include "valgrind_global.h" - #include #include @@ -48,7 +46,7 @@ namespace Internal { /** * Generic Valgrind settings shared by all tools. */ -class VALGRINDTOOLBASE_EXPORT ValgrindSettings : public Analyzer::AbstractAnalyzerSubConfig +class ValgrindSettings : public Analyzer::AbstractAnalyzerSubConfig { Q_OBJECT public: From 73a22c90fe13c773e36f7fc9e1405a3cc5c0c8dc Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Tue, 5 Jul 2011 11:54:01 +0200 Subject: [PATCH 083/143] Doc: fix typo Change-Id: I16c400d642aea93145a17fa9c7a6e0b9e68295c5 Reviewed-on: http://codereview.qt.nokia.com/1155 Reviewed-by: Leena Miettinen --- doc/qtcreator.qdoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/qtcreator.qdoc b/doc/qtcreator.qdoc index ddcf0d572f4..056f4586092 100644 --- a/doc/qtcreator.qdoc +++ b/doc/qtcreator.qdoc @@ -3062,7 +3062,7 @@ without delimiter characters and the initial character of each element is capitalized. For example, rewrites \c an_example_symbol as \c anExampleSymbol and \c AN_EXAMPLE_SYMBOL as \c AnExampleSymbol - \i Indentifier + \i Identifier \row \i Complete Switch Statement \i Adds all possible cases to a switch statement of the type \c enum From be452fcaff242a248a5ecc6dff09b467387b0d56 Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 4 Jul 2011 18:33:47 +0200 Subject: [PATCH 084/143] Revert "analyzer: move convenience factory back to base plugin" This reverts commit 06a41da04e726ffd35da18d99cd2f46cb99467be. Change-Id: I06a41da04e726ffd35da18d99cd2f46cb99467bf Reviewed-on: http://codereview.qt.nokia.com/1094 Reviewed-by: Qt Sanity Bot Reviewed-by: hjk --- src/plugins/analyzerbase/analyzermanager.cpp | 37 +---- src/plugins/analyzerbase/analyzermanager.h | 3 +- src/plugins/analyzerbase/analyzerplugin.cpp | 147 ---------------- src/plugins/analyzerbase/ianalyzertool.cpp | 5 - src/plugins/analyzerbase/ianalyzertool.h | 3 +- src/plugins/qmlprofiler/qmlprofilertool.cpp | 8 + src/plugins/qmlprofiler/qmlprofilertool.h | 1 + src/plugins/valgrind/callgrindtool.cpp | 5 + src/plugins/valgrind/callgrindtool.h | 2 + src/plugins/valgrind/memchecktool.cpp | 5 + src/plugins/valgrind/memchecktool.h | 1 + src/plugins/valgrind/valgrindplugin.cpp | 166 +++++++++++++++++++ src/plugins/valgrind/valgrindplugin.h | 1 + 13 files changed, 196 insertions(+), 188 deletions(-) diff --git a/src/plugins/analyzerbase/analyzermanager.cpp b/src/plugins/analyzerbase/analyzermanager.cpp index f939c410692..1c9caaefe1a 100644 --- a/src/plugins/analyzerbase/analyzermanager.cpp +++ b/src/plugins/analyzerbase/analyzermanager.cpp @@ -42,8 +42,6 @@ #include "analyzerutils.h" #include "ianalyzertool.h" -#include "startremotedialog.h" - #include #include #include @@ -848,6 +846,11 @@ void AnalyzerManager::stopTool() stopAction()->trigger(); } +void AnalyzerManager::startLocalTool(IAnalyzerTool *tool, StartMode mode) +{ + m_instance->d->startLocalTool(tool, mode); +} + QAction *AnalyzerManager::stopAction() { return m_instance->d->m_stopAction; @@ -867,36 +870,6 @@ IAnalyzerTool *AnalyzerManager::toolFromId(const QByteArray &id) return 0; } -static void startRemoteTool(IAnalyzerTool *tool, StartMode mode) -{ - StartRemoteDialog dlg; - if (dlg.exec() != QDialog::Accepted) - return; - - AnalyzerStartParameters sp; - sp.toolId = tool->id(); - sp.startMode = mode; - sp.connParams = dlg.sshParams(); - sp.debuggee = dlg.executable(); - sp.debuggeeArgs = dlg.arguments(); - sp.displayName = dlg.executable(); - sp.workingDirectory = dlg.workingDirectory(); - - AnalyzerRunControl *rc = new AnalyzerRunControl(tool, sp, 0); - QObject::connect(AnalyzerManager::stopAction(), SIGNAL(triggered()), rc, SLOT(stopIt())); - - ProjectExplorer::ProjectExplorerPlugin::instance()->startRunControl(rc, tool->id()); -} - -void AnalyzerManager::defaultStartTool(IAnalyzerTool *tool, StartMode mode) -{ - if (mode == StartLocal) - m_instance->d->startLocalTool(tool, mode); - if (mode == StartRemote) - startRemoteTool(tool, mode); - // m_instance->d->startRemoteTool(tool, mode); -} - } // namespace Analyzer #include "analyzermanager.moc" diff --git a/src/plugins/analyzerbase/analyzermanager.h b/src/plugins/analyzerbase/analyzermanager.h index 68a81611de4..26bb66a0a86 100644 --- a/src/plugins/analyzerbase/analyzermanager.h +++ b/src/plugins/analyzerbase/analyzermanager.h @@ -84,8 +84,7 @@ public: static void stopTool(); // Convenience functions. - //static void startLocalTool(IAnalyzerTool *tool, StartMode mode); - static void defaultStartTool(IAnalyzerTool *tool, StartMode mode); + static void startLocalTool(IAnalyzerTool *tool, StartMode mode); static QString msgToolStarted(const QString &name); static QString msgToolFinished(const QString &name, int issuesFound); diff --git a/src/plugins/analyzerbase/analyzerplugin.cpp b/src/plugins/analyzerbase/analyzerplugin.cpp index 05e10f2389f..e914130f0dd 100644 --- a/src/plugins/analyzerbase/analyzerplugin.cpp +++ b/src/plugins/analyzerbase/analyzerplugin.cpp @@ -33,14 +33,8 @@ **************************************************************************/ #include "analyzerplugin.h" - #include "analyzerconstants.h" #include "analyzermanager.h" -#include "analyzerruncontrol.h" -#include "analyzersettings.h" -#include "analyzerstartparameters.h" -#include "analyzerrunconfigwidget.h" -#include "startremotedialog.h" #include "ianalyzertool.h" #include @@ -49,152 +43,19 @@ #include #include - -#include -#include #include #include -#include -#include - -#include - #include -#include #include #include #include using namespace Analyzer; using namespace Analyzer::Internal; -using namespace ProjectExplorer; static AnalyzerPlugin *m_instance = 0; -namespace Analyzer { -namespace Internal { - -///////////////////////////////////////////////////////////////////////////////// -// -// AnalyzerRunControlFactory -// -///////////////////////////////////////////////////////////////////////////////// - -static AnalyzerStartParameters localStartParameters(RunConfiguration *runConfiguration) -{ - AnalyzerStartParameters sp; - QTC_ASSERT(runConfiguration, return sp); - LocalApplicationRunConfiguration *rc = - qobject_cast(runConfiguration); - QTC_ASSERT(rc, return sp); - - sp.startMode = StartLocal; - sp.environment = rc->environment(); - sp.workingDirectory = rc->workingDirectory(); - sp.debuggee = rc->executable(); - sp.debuggeeArgs = rc->commandLineArguments(); - sp.displayName = rc->displayName(); - sp.connParams.host = QLatin1String("localhost"); - sp.connParams.port = rc->qmlDebugServerPort(); - return sp; -} - -static AnalyzerStartParameters remoteLinuxStartParameters(RunConfiguration *runConfiguration) -{ - AnalyzerStartParameters sp; - RemoteLinux::RemoteLinuxRunConfiguration * const rc - = qobject_cast(runConfiguration); - QTC_ASSERT(rc, return sp); - - sp.startMode = StartRemote; - sp.debuggee = rc->remoteExecutableFilePath(); - sp.debuggeeArgs = rc->arguments(); - sp.connParams = rc->deviceConfig()->sshParameters(); - sp.analyzerCmdPrefix = rc->commandPrefix(); - sp.displayName = rc->displayName(); - return sp; -} - - -class AnalyzerRunControlFactory : public ProjectExplorer::IRunControlFactory -{ - Q_OBJECT - -public: - AnalyzerRunControlFactory(QObject *parent = 0); - - typedef ProjectExplorer::RunConfiguration RunConfiguration; - typedef ProjectExplorer::RunControl RunControl; - - // IRunControlFactory - bool canRun(RunConfiguration *runConfiguration, const QString &mode) const; - RunControl *create(RunConfiguration *runConfiguration, const QString &mode); - QString displayName() const; - - ProjectExplorer::IRunConfigurationAspect *createRunConfigurationAspect(); - ProjectExplorer::RunConfigWidget *createConfigurationWidget(RunConfiguration *runConfiguration); -}; - -AnalyzerRunControlFactory::AnalyzerRunControlFactory(QObject *parent) - : IRunControlFactory(parent) -{ - setObjectName(QLatin1String("AnalyzerRunControlFactory")); -} - -bool AnalyzerRunControlFactory::canRun(RunConfiguration *runConfiguration, const QString &mode) const -{ - Q_UNUSED(runConfiguration); - // FIXME: This is not generic. - return mode.startsWith("Callgrind") || mode.startsWith("Memcheck") || mode == "QmlProfiler"; -} - -RunControl *AnalyzerRunControlFactory::create(RunConfiguration *runConfiguration, const QString &mode) -{ - QTC_ASSERT(canRun(runConfiguration, mode), return 0); - - AnalyzerStartParameters sp; - if (qobject_cast(runConfiguration)) { - sp = localStartParameters(runConfiguration); - } else if (qobject_cast(runConfiguration)) { - sp = remoteLinuxStartParameters(runConfiguration); - } else { - // Might be S60DeviceRunfiguration, or something else ... - //sp.startMode = StartRemote; - sp.startMode = StartRemote; - } - - IAnalyzerTool *tool = AnalyzerManager::toolFromId(mode.toLatin1()); - AnalyzerRunControl *rc = new AnalyzerRunControl(tool, sp, runConfiguration); - QObject::connect(AnalyzerManager::stopAction(), SIGNAL(triggered()), rc, SLOT(stopIt())); - //m_isRunning = true; - return rc; -} - -QString AnalyzerRunControlFactory::displayName() const -{ - return tr("Analyzer"); -} - -IRunConfigurationAspect *AnalyzerRunControlFactory::createRunConfigurationAspect() -{ - return new AnalyzerProjectSettings; -} - -RunConfigWidget *AnalyzerRunControlFactory::createConfigurationWidget(RunConfiguration *runConfiguration) -{ - LocalApplicationRunConfiguration *localRc = - qobject_cast(runConfiguration); - if (!localRc) - return 0; - AnalyzerProjectSettings *settings = runConfiguration->extraAspect(); - if (!settings) - return 0; - - AnalyzerRunConfigWidget *ret = new AnalyzerRunConfigWidget; - ret->setRunConfiguration(runConfiguration); - return ret; -} //////////////////////////////////////////////////////////////////////// // @@ -245,9 +106,6 @@ bool AnalyzerPlugin::initialize(const QStringList &arguments, QString *errorStri //: Category under which Analyzer tasks are listed in build issues view hub->addCategory(QLatin1String(Constants::ANALYZERTASK_ID), tr("Analyzer")); - AnalyzerRunControlFactory *factory = new AnalyzerRunControlFactory(); - addAutoReleasedObject(factory); - return true; } @@ -267,9 +125,4 @@ AnalyzerPlugin *AnalyzerPlugin::instance() return m_instance; } -} // namespace Internal -} // namespace Analyzer - Q_EXPORT_PLUGIN(AnalyzerPlugin) - -#include "analyzerplugin.moc" diff --git a/src/plugins/analyzerbase/ianalyzertool.cpp b/src/plugins/analyzerbase/ianalyzertool.cpp index 3945fdb9a7f..f0dce04541c 100644 --- a/src/plugins/analyzerbase/ianalyzertool.cpp +++ b/src/plugins/analyzerbase/ianalyzertool.cpp @@ -64,9 +64,4 @@ QString IAnalyzerTool::defaultActionName(const IAnalyzerTool *tool, StartMode mo return base; } -void IAnalyzerTool::defaultStartTool(IAnalyzerTool *tool, StartMode mode) -{ - AnalyzerManager::defaultStartTool(tool, mode); -} - } // namespace Analyzer diff --git a/src/plugins/analyzerbase/ianalyzertool.h b/src/plugins/analyzerbase/ianalyzertool.h index 180e15cd76a..5ddcde892a4 100644 --- a/src/plugins/analyzerbase/ianalyzertool.h +++ b/src/plugins/analyzerbase/ianalyzertool.h @@ -105,7 +105,6 @@ public: static QByteArray defaultMenuGroup(StartMode mode); static QByteArray defaultActionId(const IAnalyzerTool *tool, StartMode mode); static QString defaultActionName(const IAnalyzerTool *tool, StartMode mode); - static void defaultStartTool(IAnalyzerTool *tool, StartMode mode); /// This gets called after all analyzation tools where initialized. virtual void extensionsInitialized() = 0; @@ -125,7 +124,7 @@ public: virtual IAnalyzerEngine *createEngine(const AnalyzerStartParameters &sp, ProjectExplorer::RunConfiguration *runConfiguration = 0) = 0; - virtual void startTool(StartMode mode) { defaultStartTool(this, mode); } + virtual void startTool(StartMode mode) = 0; /// Called when tools gets selected. virtual void toolSelected() const {} diff --git a/src/plugins/qmlprofiler/qmlprofilertool.cpp b/src/plugins/qmlprofiler/qmlprofilertool.cpp index 716d4f332ed..3360dea0a22 100644 --- a/src/plugins/qmlprofiler/qmlprofilertool.cpp +++ b/src/plugins/qmlprofiler/qmlprofilertool.cpp @@ -537,3 +537,11 @@ void QmlProfilerTool::updateRecordingState() if (d->m_traceWindow->isRecording()) clearDisplay(); } + +void QmlProfilerTool::startTool(StartMode mode) +{ + if (mode == StartLocal) + AnalyzerManager::startLocalTool(this, mode); + if (mode == StartRemote) + AnalyzerManager::startLocalTool(this, mode); +} diff --git a/src/plugins/qmlprofiler/qmlprofilertool.h b/src/plugins/qmlprofiler/qmlprofilertool.h index 50e3d1d55c0..f3d9b3063ea 100644 --- a/src/plugins/qmlprofiler/qmlprofilertool.h +++ b/src/plugins/qmlprofiler/qmlprofilertool.h @@ -62,6 +62,7 @@ public: ProjectExplorer::RunConfiguration *runConfiguration = 0); QWidget *createControlWidget(); + void startTool(Analyzer::StartMode mode); public slots: void connectClient(int port); diff --git a/src/plugins/valgrind/callgrindtool.cpp b/src/plugins/valgrind/callgrindtool.cpp index c74dbd4a003..7e0ea98b195 100644 --- a/src/plugins/valgrind/callgrindtool.cpp +++ b/src/plugins/valgrind/callgrindtool.cpp @@ -680,6 +680,11 @@ IAnalyzerEngine *CallgrindToolPrivate::createEngine(const AnalyzerStartParameter return engine; } +void CallgrindTool::startTool(StartMode mode) +{ + ValgrindPlugin::startValgrindTool(this, mode); +} + QWidget *CallgrindTool::createControlWidget() { return d->createControlWidget(); diff --git a/src/plugins/valgrind/callgrindtool.h b/src/plugins/valgrind/callgrindtool.h index 517753287f3..64b034d6409 100644 --- a/src/plugins/valgrind/callgrindtool.h +++ b/src/plugins/valgrind/callgrindtool.h @@ -60,6 +60,8 @@ public: ProjectExplorer::RunConfiguration *runConfiguration = 0); QWidget *createControlWidget(); + void startTool(Analyzer::StartMode mode); + private: CallgrindToolPrivate *d; }; diff --git a/src/plugins/valgrind/memchecktool.cpp b/src/plugins/valgrind/memchecktool.cpp index a3a1079e99e..52ad2a8aa02 100644 --- a/src/plugins/valgrind/memchecktool.cpp +++ b/src/plugins/valgrind/memchecktool.cpp @@ -467,6 +467,11 @@ IAnalyzerEngine *MemcheckTool::createEngine(const AnalyzerStartParameters &sp, return engine; } +void MemcheckTool::startTool(StartMode mode) +{ + ValgrindPlugin::startValgrindTool(this, mode); +} + void MemcheckTool::engineStarting(const IAnalyzerEngine *engine) { clearErrorView(); diff --git a/src/plugins/valgrind/memchecktool.h b/src/plugins/valgrind/memchecktool.h index 3035c0d7c3c..6f00fa70f9c 100644 --- a/src/plugins/valgrind/memchecktool.h +++ b/src/plugins/valgrind/memchecktool.h @@ -118,6 +118,7 @@ private: Analyzer::IAnalyzerEngine *createEngine(const Analyzer::AnalyzerStartParameters &sp, ProjectExplorer::RunConfiguration *runConfiguration = 0); + void startTool(Analyzer::StartMode mode); void clearErrorView(); diff --git a/src/plugins/valgrind/valgrindplugin.cpp b/src/plugins/valgrind/valgrindplugin.cpp index 83190143a45..04aee6c0b57 100644 --- a/src/plugins/valgrind/valgrindplugin.cpp +++ b/src/plugins/valgrind/valgrindplugin.cpp @@ -42,6 +42,17 @@ #include #include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include #include @@ -51,16 +62,168 @@ #include using namespace Analyzer; +using namespace Valgrind::Internal; +using namespace ProjectExplorer; + +///////////////////////////////////////////////////////////////////////////////// +// +// ValgrindRunControlFactory +// +///////////////////////////////////////////////////////////////////////////////// namespace Valgrind { namespace Internal { +static AnalyzerStartParameters localStartParameters(RunConfiguration *runConfiguration) +{ + AnalyzerStartParameters sp; + QTC_ASSERT(runConfiguration, return sp); + LocalApplicationRunConfiguration *rc = + qobject_cast(runConfiguration); + QTC_ASSERT(rc, return sp); + + sp.startMode = StartLocal; + sp.environment = rc->environment(); + sp.workingDirectory = rc->workingDirectory(); + sp.debuggee = rc->executable(); + sp.debuggeeArgs = rc->commandLineArguments(); + sp.displayName = rc->displayName(); + sp.connParams.host = QLatin1String("localhost"); + sp.connParams.port = rc->qmlDebugServerPort(); + return sp; +} + +static AnalyzerStartParameters remoteLinuxStartParameters(RunConfiguration *runConfiguration) +{ + AnalyzerStartParameters sp; + RemoteLinux::RemoteLinuxRunConfiguration * const rc + = qobject_cast(runConfiguration); + QTC_ASSERT(rc, return sp); + + sp.startMode = StartRemote; + sp.debuggee = rc->remoteExecutableFilePath(); + sp.debuggeeArgs = rc->arguments(); + sp.connParams = rc->deviceConfig()->sshParameters(); + sp.analyzerCmdPrefix = rc->commandPrefix(); + sp.displayName = rc->displayName(); + return sp; +} + + +class ValgrindRunControlFactory: public ProjectExplorer::IRunControlFactory +{ + Q_OBJECT + +public: + ValgrindRunControlFactory(QObject *parent = 0); + + typedef ProjectExplorer::RunConfiguration RunConfiguration; + typedef ProjectExplorer::RunControl RunControl; + + // IRunControlFactory + bool canRun(RunConfiguration *runConfiguration, const QString &mode) const; + RunControl *create(RunConfiguration *runConfiguration, const QString &mode); + QString displayName() const; + + ProjectExplorer::IRunConfigurationAspect *createRunConfigurationAspect(); + ProjectExplorer::RunConfigWidget *createConfigurationWidget(RunConfiguration *runConfiguration); +}; + +ValgrindRunControlFactory::ValgrindRunControlFactory(QObject *parent) + : IRunControlFactory(parent) +{ + setObjectName(QLatin1String("ValgrindRunControlFactory")); +} + +bool ValgrindRunControlFactory::canRun(RunConfiguration *runConfiguration, const QString &mode) const +{ + Q_UNUSED(runConfiguration); + return mode.startsWith("Callgrind") || mode.startsWith("Memcheck"); +} + +RunControl *ValgrindRunControlFactory::create(RunConfiguration *runConfiguration, const QString &mode) +{ + QTC_ASSERT(canRun(runConfiguration, mode), return 0); + + AnalyzerStartParameters sp; + if (qobject_cast(runConfiguration)) { + sp = localStartParameters(runConfiguration); + } else if (qobject_cast(runConfiguration)) { + sp = remoteLinuxStartParameters(runConfiguration); + } else { + // Might be S60DeviceRunfiguration, or something else ... + //sp.startMode = StartRemote; + sp.startMode = StartRemote; + } + + IAnalyzerTool *tool = AnalyzerManager::toolFromId(mode.toLatin1()); + AnalyzerRunControl *rc = new AnalyzerRunControl(tool, sp, runConfiguration); + QObject::connect(AnalyzerManager::stopAction(), SIGNAL(triggered()), rc, SLOT(stopIt())); + //m_isRunning = true; + return rc; +} + +QString ValgrindRunControlFactory::displayName() const +{ + return tr("Analyzer"); +} + +IRunConfigurationAspect *ValgrindRunControlFactory::createRunConfigurationAspect() +{ + return new AnalyzerProjectSettings; +} + +RunConfigWidget *ValgrindRunControlFactory::createConfigurationWidget(RunConfiguration *runConfiguration) +{ + LocalApplicationRunConfiguration *localRc = + qobject_cast(runConfiguration); + if (!localRc) + return 0; + AnalyzerProjectSettings *settings = runConfiguration->extraAspect(); + if (!settings) + return 0; + + AnalyzerRunConfigWidget *ret = new AnalyzerRunConfigWidget; + ret->setRunConfiguration(runConfiguration); + return ret; +} + ///////////////////////////////////////////////////////////////////////////////// // // ValgrindPlugin // ///////////////////////////////////////////////////////////////////////////////// +static void startRemoteTool(IAnalyzerTool *tool, StartMode mode) +{ + Q_UNUSED(tool); + StartRemoteDialog dlg; + if (dlg.exec() != QDialog::Accepted) + return; + + AnalyzerStartParameters sp; + sp.toolId = tool->id(); + sp.startMode = mode; + sp.connParams = dlg.sshParams(); + sp.debuggee = dlg.executable(); + sp.debuggeeArgs = dlg.arguments(); + sp.displayName = dlg.executable(); + sp.workingDirectory = dlg.workingDirectory(); + + AnalyzerRunControl *rc = new AnalyzerRunControl(tool, sp, 0); + //m_currentRunControl = rc; + QObject::connect(AnalyzerManager::stopAction(), SIGNAL(triggered()), rc, SLOT(stopIt())); + + ProjectExplorer::ProjectExplorerPlugin::instance()->startRunControl(rc, tool->id()); +} + +void ValgrindPlugin::startValgrindTool(IAnalyzerTool *tool, StartMode mode) +{ + if (mode == StartLocal) + AnalyzerManager::startLocalTool(tool, mode); + if (mode == StartRemote) + startRemoteTool(tool, mode); +} static AbstractAnalyzerSubConfig *valgrindConfigFactory() { @@ -102,6 +265,9 @@ bool ValgrindPlugin::initialize(const QStringList &, QString *) AnalyzerManager::addTool(new MemcheckTool(this), modes); AnalyzerManager::addTool(new CallgrindTool(this), modes); + ValgrindRunControlFactory *factory = new ValgrindRunControlFactory(); + addAutoReleasedObject(factory); + return true; } diff --git a/src/plugins/valgrind/valgrindplugin.h b/src/plugins/valgrind/valgrindplugin.h index e07961d559f..9598572bd32 100644 --- a/src/plugins/valgrind/valgrindplugin.h +++ b/src/plugins/valgrind/valgrindplugin.h @@ -51,6 +51,7 @@ public: virtual bool initialize(const QStringList &arguments, QString *errorString); virtual void extensionsInitialized() {} + static void startValgrindTool(Analyzer::IAnalyzerTool *tool, Analyzer::StartMode mode); }; } // namespace Internal From 26a4e55842b77f332861d74edd3ba869ce860695 Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 4 Jul 2011 18:34:18 +0200 Subject: [PATCH 085/143] Revert "Valgrind: fix compilation" This reverts commit b1faac0e732443aeffefba66aca92aa58c9b3008. Change-Id: Ib1faac0e732443aeffefba66aca92aa58c9b3009 Reviewed-on: http://codereview.qt.nokia.com/1095 Reviewed-by: Qt Sanity Bot Reviewed-by: hjk --- src/plugins/valgrind/valgrindplugin.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/plugins/valgrind/valgrindplugin.cpp b/src/plugins/valgrind/valgrindplugin.cpp index 04aee6c0b57..c5ec6cf839b 100644 --- a/src/plugins/valgrind/valgrindplugin.cpp +++ b/src/plugins/valgrind/valgrindplugin.cpp @@ -274,5 +274,7 @@ bool ValgrindPlugin::initialize(const QStringList &, QString *) } // namespace Internal } // namespace Valgrind + Q_EXPORT_PLUGIN(Valgrind::Internal::ValgrindPlugin) +#include "valgrindplugin.moc" From 5418a137ddc603f9e504f26a0236ea2ad1429336 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Tue, 5 Jul 2011 09:04:42 +0200 Subject: [PATCH 086/143] Fix original string messages Change-Id: Icc7819585a8382a02b02a28f39dcea8ec1c6a7e6 Reviewed-on: http://codereview.qt.nokia.com/1142 Reviewed-by: Qt Sanity Bot Reviewed-by: Leena Miettinen --- share/qtcreator/translations/translations.pro | 2 +- src/plugins/coreplugin/generalsettings.ui | 6 +++--- src/plugins/debugger/debuggerengine.cpp | 2 +- src/plugins/debugger/gdb/gdboptionspage.ui | 2 +- src/plugins/debugger/stackwindow.cpp | 2 +- src/plugins/debugger/watchwindow.cpp | 2 +- .../designercore/instances/nodeinstanceserverproxy.cpp | 2 +- .../qt-s60/s60deployconfigurationwidget.cpp | 6 +++--- src/plugins/remotelinux/maemopackagecreationstep.cpp | 2 +- 9 files changed, 13 insertions(+), 13 deletions(-) diff --git a/share/qtcreator/translations/translations.pro b/share/qtcreator/translations/translations.pro index e84cb51e8f1..0d6e672a379 100644 --- a/share/qtcreator/translations/translations.pro +++ b/share/qtcreator/translations/translations.pro @@ -1,6 +1,6 @@ include(../../../qtcreator.pri) -LANGUAGES = cs de fr hu ja ru sl zh_CN +LANGUAGES = cs de fr hu ja pl ru sl zh_CN # var, prepend, append defineReplace(prependAll) { diff --git a/src/plugins/coreplugin/generalsettings.ui b/src/plugins/coreplugin/generalsettings.ui index 82398e3e196..960d05b098d 100644 --- a/src/plugins/coreplugin/generalsettings.ui +++ b/src/plugins/coreplugin/generalsettings.ui @@ -78,7 +78,7 @@ - Reset to default. + Reset to default. Reset @@ -196,7 +196,7 @@ - Reset to default. + Reset to default. Reset @@ -206,7 +206,7 @@ - Reset to default. + Reset to default. Reset diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp index 61a8e3bf717..904ced33553 100644 --- a/src/plugins/debugger/debuggerengine.cpp +++ b/src/plugins/debugger/debuggerengine.cpp @@ -1509,7 +1509,7 @@ QString DebuggerEngine::msgWatchpointByExpressionTriggered(BreakpointModelId id, return id ? tr("Data breakpoint %1 (%2) at %3 in thread %4 triggered.") .arg(id.toString()).arg(number).arg(expr).arg(threadId) - : tr("Internal data breakpoint %1 at %2 in thread %4 triggered.") + : tr("Internal data breakpoint %1 at %2 in thread %3 triggered.") .arg(number).arg(expr).arg(threadId); } diff --git a/src/plugins/debugger/gdb/gdboptionspage.ui b/src/plugins/debugger/gdb/gdboptionspage.ui index 9445a0d837a..6fb810fca1b 100644 --- a/src/plugins/debugger/gdb/gdboptionspage.ui +++ b/src/plugins/debugger/gdb/gdboptionspage.ui @@ -154,7 +154,7 @@ on slow machines. In this case, the value should be increased. This is the slowest but safest option. - Try to set breakpoints in plugins always automatically + Always try to set breakpoints in plugins automatically diff --git a/src/plugins/debugger/stackwindow.cpp b/src/plugins/debugger/stackwindow.cpp index d547b6a423b..92e0722e7ac 100644 --- a/src/plugins/debugger/stackwindow.cpp +++ b/src/plugins/debugger/stackwindow.cpp @@ -173,7 +173,7 @@ void StackWindow::contextMenuEvent(QContextMenuEvent *ev) else if (act == actAdjust) resizeColumnsToContents(); else if (act == actShowMemory) { - const QString title = tr("Memory at Frame #%1 (%2) 0x%3)"). + const QString title = tr("Memory at Frame #%1 (%2) 0x%3"). arg(row).arg(frame.function).arg(address, 0, 16); QList ml; ml.push_back(MemoryMarkup(address, 1, QColor(Qt::blue).lighter(), diff --git a/src/plugins/debugger/watchwindow.cpp b/src/plugins/debugger/watchwindow.cpp index 10ed4fe1e65..9bad66fcf90 100644 --- a/src/plugins/debugger/watchwindow.cpp +++ b/src/plugins/debugger/watchwindow.cpp @@ -462,7 +462,7 @@ static inline void addStackLayoutMemoryView(DebuggerEngine *engine, regMap, true, background); const unsigned flags = separateView ? (DebuggerEngine::MemoryView|DebuggerEngine::MemoryReadOnly) : 0; const QString title = - WatchWindow::tr("Memory Layout of Local Variables at 0x%2").arg(start, 0, 16); + WatchWindow::tr("Memory Layout of Local Variables at 0x%1").arg(start, 0, 16); engine->openMemoryView(start, flags, markup, p, title, parent); } diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp index daccbb77c8f..3af5c4f0ba1 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp @@ -203,7 +203,7 @@ NodeInstanceServerProxy::NodeInstanceServerProxy(NodeInstanceView *nodeInstanceV QMessageBox::warning(0, tr("Cannot Find QML Puppet Executable"), tr("The executable of the QML Puppet process (%1) cannot be found. " "Please check your installation. " - "QML Puppet is a process which runs in the background to render the the items."). + "QML Puppet is a process which runs in the background to render the items."). arg(applicationPath)); } } diff --git a/src/plugins/qt4projectmanager/qt-s60/s60deployconfigurationwidget.cpp b/src/plugins/qt4projectmanager/qt-s60/s60deployconfigurationwidget.cpp index c1e748f5559..25e94091b03 100644 --- a/src/plugins/qt4projectmanager/qt-s60/s60deployconfigurationwidget.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/s60deployconfigurationwidget.cpp @@ -633,13 +633,13 @@ void S60DeployConfigurationWidget::getInstalledPackagesResult(const Coda::CodaCo break; case QTMOBILITY_UID: { if (error) - addErrorToTable(str, tr("QtMobility version: "), tr("Error reading QtMobility version")); + addErrorToTable(str, tr("Qt Mobility version: "), tr("Error reading Qt Mobility version")); else - addToTable(str, tr("QtMobility version: "), versionString); + addToTable(str, tr("Qt Mobility version: "), versionString); } break; case QTCOMPONENTS_UID: { - addToTable(str, tr("QtQuick components version: "), error ? tr("Not installed") : versionString); + addToTable(str, tr("Qt Quick components version: "), error ? tr("Not installed") : versionString); } break; default: break; diff --git a/src/plugins/remotelinux/maemopackagecreationstep.cpp b/src/plugins/remotelinux/maemopackagecreationstep.cpp index f48b456000e..af2518898ae 100644 --- a/src/plugins/remotelinux/maemopackagecreationstep.cpp +++ b/src/plugins/remotelinux/maemopackagecreationstep.cpp @@ -640,7 +640,7 @@ MaemoTarPackageCreationStep::MaemoTarPackageCreationStep(BuildStepList *buildCon void MaemoTarPackageCreationStep::ctor() { - setDefaultDisplayName(tr("Create tar ball")); + setDefaultDisplayName(tr("Create tarball")); } bool MaemoTarPackageCreationStep::createPackage(QProcess *buildProc, From a89158b887fcd039c68bd5b48be21c1b0cc72cca Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 4 Jul 2011 19:11:08 +0200 Subject: [PATCH 087/143] analyzer: handle all possibilities to start qml profiler in QmlProfilerTool Change-Id: I286bdc4dc3fbab2e784e72f47ff02644cc2899e5 Reviewed-on: http://codereview.qt.nokia.com/1096 Reviewed-by: Qt Sanity Bot Reviewed-by: hjk --- src/plugins/analyzerbase/analyzermanager.cpp | 2 +- src/plugins/qmlprofiler/qmlprofilerplugin.cpp | 3 +- src/plugins/qmlprofiler/qmlprofilertool.cpp | 13 ++- .../qmlprojectanalyzerruncontrolfactory.cpp | 87 ++++++++++++------- .../qmlprojectanalyzerruncontrolfactory.h | 4 - 5 files changed, 70 insertions(+), 39 deletions(-) diff --git a/src/plugins/analyzerbase/analyzermanager.cpp b/src/plugins/analyzerbase/analyzermanager.cpp index 1c9caaefe1a..4af2935da23 100644 --- a/src/plugins/analyzerbase/analyzermanager.cpp +++ b/src/plugins/analyzerbase/analyzermanager.cpp @@ -450,7 +450,6 @@ void AnalyzerManagerPrivate::startLocalTool(IAnalyzerTool *tool, StartMode mode) QTC_ASSERT(index >= 0, return); QTC_ASSERT(index < m_tools.size(), return); QTC_ASSERT(tool == m_currentTool, return); - QTC_ASSERT(mode == StartLocal, /**/); // Make sure mode is shown. q->showMode(); @@ -587,6 +586,7 @@ void AnalyzerManagerPrivate::selectAction(int index) void AnalyzerManagerPrivate::selectAction(QAction *action) { + AnalyzerManager::showMode(); selectTool(m_toolFromAction[action], m_modeFromAction[action]); } diff --git a/src/plugins/qmlprofiler/qmlprofilerplugin.cpp b/src/plugins/qmlprofiler/qmlprofilerplugin.cpp index 7b1d0a9aac1..1a212218857 100644 --- a/src/plugins/qmlprofiler/qmlprofilerplugin.cpp +++ b/src/plugins/qmlprofiler/qmlprofilerplugin.cpp @@ -51,8 +51,9 @@ bool QmlProfilerPlugin::initialize(const QStringList &arguments, QString *errorS Q_UNUSED(errorString) addAutoReleasedObject(new QmlProjectAnalyzerRunControlFactory()); StartModes modes; + // They are handled the same actually. + //modes.append(StartMode(StartRemote)); modes.append(StartMode(StartLocal)); - modes.append(StartMode(StartRemote)); AnalyzerManager::addTool(new QmlProfilerTool(this), modes); return true; } diff --git a/src/plugins/qmlprofiler/qmlprofilertool.cpp b/src/plugins/qmlprofiler/qmlprofilertool.cpp index 3360dea0a22..decebb6d177 100644 --- a/src/plugins/qmlprofiler/qmlprofilertool.cpp +++ b/src/plugins/qmlprofiler/qmlprofilertool.cpp @@ -540,8 +540,13 @@ void QmlProfilerTool::updateRecordingState() void QmlProfilerTool::startTool(StartMode mode) { - if (mode == StartLocal) - AnalyzerManager::startLocalTool(this, mode); - if (mode == StartRemote) - AnalyzerManager::startLocalTool(this, mode); + using namespace ProjectExplorer; + + // Make sure mode is shown. + AnalyzerManager::showMode(); + + ProjectExplorerPlugin *pe = ProjectExplorerPlugin::instance(); + // ### not sure if we're supposed to check if the RunConFiguration isEnabled + Project *pro = pe->startupProject(); + pe->runProject(pro, id()); } diff --git a/src/plugins/qmlprofiler/qmlprojectanalyzerruncontrolfactory.cpp b/src/plugins/qmlprofiler/qmlprojectanalyzerruncontrolfactory.cpp index 4df11ab6144..2f18a03a767 100644 --- a/src/plugins/qmlprofiler/qmlprojectanalyzerruncontrolfactory.cpp +++ b/src/plugins/qmlprofiler/qmlprojectanalyzerruncontrolfactory.cpp @@ -39,31 +39,20 @@ #include #include +#include +#include + +#include +#include + #include +#include + using namespace Analyzer; using namespace ProjectExplorer; using namespace QmlProfiler::Internal; - -static AnalyzerStartParameters localStartParameters(ProjectExplorer::RunConfiguration *runConfiguration) -{ - AnalyzerStartParameters sp; - QTC_ASSERT(runConfiguration, return sp); - QmlProjectManager::QmlProjectRunConfiguration *rc = - qobject_cast(runConfiguration); - QTC_ASSERT(rc, return sp); - - sp.toolId = "QmlProfiler"; - sp.startMode = StartLocal; - sp.environment = rc->environment(); - sp.workingDirectory = rc->workingDirectory(); - sp.debuggee = rc->observerPath(); - sp.debuggeeArgs = rc->viewerArguments(); - sp.displayName = rc->displayName(); - sp.connParams.host = QLatin1String("localhost"); - sp.connParams.port = rc->qmlDebugServerPort(); - return sp; -} +using namespace QmlProjectManager; QmlProjectAnalyzerRunControlFactory::QmlProjectAnalyzerRunControlFactory(QObject *parent) : IRunControlFactory(parent) @@ -73,21 +62,61 @@ QmlProjectAnalyzerRunControlFactory::QmlProjectAnalyzerRunControlFactory(QObject bool QmlProjectAnalyzerRunControlFactory::canRun(RunConfiguration *runConfiguration, const QString &mode) const { - return mode.startsWith(QLatin1String("QmlProfiler")) - && qobject_cast(runConfiguration); + if (qobject_cast(runConfiguration)) + return mode == QLatin1String("QmlProfiler"); + if (qobject_cast(runConfiguration)) + return mode == QLatin1String("QmlProfiler"); + if (qobject_cast(runConfiguration)) + return mode == QLatin1String("QmlProfiler"); + return false; } RunControl *QmlProjectAnalyzerRunControlFactory::create(RunConfiguration *runConfiguration, const QString &mode) { QTC_ASSERT(canRun(runConfiguration, mode), return 0); - const AnalyzerStartParameters sp = localStartParameters(runConfiguration); - return create(sp, runConfiguration); -} -AnalyzerRunControl *QmlProjectAnalyzerRunControlFactory::create - (const Analyzer::AnalyzerStartParameters &sp, RunConfiguration *runConfiguration) -{ - return new AnalyzerRunControl(AnalyzerManager::toolFromId(sp.toolId), sp, runConfiguration); + AnalyzerStartParameters sp; + sp.toolId = "QmlProfiler"; + + if (QmlProjectRunConfiguration *rc1 = + qobject_cast(runConfiguration)) { + // This is a "plain" .qmlproject. + sp.startMode = StartLocal; + sp.environment = rc1->environment(); + sp.workingDirectory = rc1->workingDirectory(); + sp.debuggee = rc1->observerPath(); + sp.debuggeeArgs = rc1->viewerArguments(); + sp.displayName = rc1->displayName(); + sp.connParams.host = QLatin1String("localhost"); + sp.connParams.port = rc1->qmlDebugServerPort(); + } else if (LocalApplicationRunConfiguration *rc2 = + qobject_cast(runConfiguration)) { + sp.startMode = StartLocal; + sp.environment = rc2->environment(); + sp.workingDirectory = rc2->workingDirectory(); + sp.debuggee = rc2->executable(); + sp.debuggeeArgs = rc2->commandLineArguments(); + sp.displayName = rc2->displayName(); + sp.connParams.host = QLatin1String("localhost"); + sp.connParams.port = rc2->qmlDebugServerPort(); + } else if (RemoteLinux::RemoteLinuxRunConfiguration *rc3 = + qobject_cast(runConfiguration)) { + sp.startMode = StartRemote; + sp.debuggee = rc3->remoteExecutableFilePath(); + sp.debuggeeArgs = rc3->arguments(); + sp.connParams = rc3->deviceConfig()->sshParameters(); + sp.analyzerCmdPrefix = rc3->commandPrefix(); + sp.displayName = rc3->displayName(); + } else { + // Might be S60DeviceRunfiguration, or something else ... ? + //sp.startMode = StartRemote; + QTC_ASSERT(false, return 0); + } + + IAnalyzerTool *tool = AnalyzerManager::toolFromId(mode.toLatin1()); + AnalyzerRunControl *rc = new AnalyzerRunControl(tool, sp, runConfiguration); + QObject::connect(AnalyzerManager::stopAction(), SIGNAL(triggered()), rc, SLOT(stopIt())); + return rc; } QString QmlProjectAnalyzerRunControlFactory::displayName() const diff --git a/src/plugins/qmlprofiler/qmlprojectanalyzerruncontrolfactory.h b/src/plugins/qmlprofiler/qmlprojectanalyzerruncontrolfactory.h index 9c5592bc01e..60b422bea9d 100644 --- a/src/plugins/qmlprofiler/qmlprojectanalyzerruncontrolfactory.h +++ b/src/plugins/qmlprofiler/qmlprojectanalyzerruncontrolfactory.h @@ -54,10 +54,6 @@ public: QString displayName() const; bool canRun(RunConfiguration *runConfiguration, const QString &mode) const; ProjectExplorer::RunControl *create(RunConfiguration *runConfiguration, const QString &mode); - - // FIXME: Remove function. - Analyzer::AnalyzerRunControl *create(const Analyzer::AnalyzerStartParameters &sp, RunConfiguration *runConfiguration); - ProjectExplorer::IRunConfigurationAspect *createRunConfigurationAspect(); ProjectExplorer::RunConfigWidget *createConfigurationWidget(RunConfiguration *runConfiguration); From 010d038f90fd87d24a3d69216effb0f37fbb6425 Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 5 Jul 2011 12:14:41 +0200 Subject: [PATCH 088/143] analyzer: remove shadowed start parameters Also, use only one Tool for all Qml profiling. Change-Id: Ic79d0c3b8781f4dffd8e0cd77af014bf008f4c2e Reviewed-on: http://codereview.qt.nokia.com/1157 Reviewed-by: Qt Sanity Bot Reviewed-by: hjk --- src/plugins/analyzerbase/analyzerconstants.h | 2 +- src/plugins/analyzerbase/ianalyzerengine.cpp | 7 ++ src/plugins/analyzerbase/ianalyzerengine.h | 2 + src/plugins/qmlprofiler/qmlprofilerengine.cpp | 66 +++++++++++-------- src/plugins/qmlprofiler/qmlprofilerengine.h | 2 +- src/plugins/qmlprofiler/qmlprofilertool.cpp | 3 +- .../qmlprojectanalyzerruncontrolfactory.cpp | 24 +++++-- 7 files changed, 71 insertions(+), 35 deletions(-) diff --git a/src/plugins/analyzerbase/analyzerconstants.h b/src/plugins/analyzerbase/analyzerconstants.h index 636d0e74772..c27f98ad2f2 100644 --- a/src/plugins/analyzerbase/analyzerconstants.h +++ b/src/plugins/analyzerbase/analyzerconstants.h @@ -51,7 +51,7 @@ private: // Special values for currently used modes. // Their meaning is interpreted by the individual tools. -enum { StartLocal = -1, StartRemote = -2 }; +enum { StartLocal = -1, StartRemote = -2, StartQml = -3 }; namespace Constants { diff --git a/src/plugins/analyzerbase/ianalyzerengine.cpp b/src/plugins/analyzerbase/ianalyzerengine.cpp index 1d9ac39eab4..91da9d098f1 100644 --- a/src/plugins/analyzerbase/ianalyzerengine.cpp +++ b/src/plugins/analyzerbase/ianalyzerengine.cpp @@ -44,4 +44,11 @@ IAnalyzerEngine::IAnalyzerEngine(IAnalyzerTool *tool, const AnalyzerStartParamet m_tool = tool; } +IAnalyzerEngine::IAnalyzerEngine(IAnalyzerTool *tool, + ProjectExplorer::RunConfiguration *runConfiguration) +{ + m_runConfig = runConfiguration; + m_tool = tool; +} + } // namespace Analyzer diff --git a/src/plugins/analyzerbase/ianalyzerengine.h b/src/plugins/analyzerbase/ianalyzerengine.h index 8596fbf53c5..29c2d0f0b8c 100644 --- a/src/plugins/analyzerbase/ianalyzerengine.h +++ b/src/plugins/analyzerbase/ianalyzerengine.h @@ -65,6 +65,8 @@ class ANALYZER_EXPORT IAnalyzerEngine : public QObject public: IAnalyzerEngine(IAnalyzerTool *tool, const AnalyzerStartParameters &sp, ProjectExplorer::RunConfiguration *runConfiguration = 0); + IAnalyzerEngine(IAnalyzerTool *tool, + ProjectExplorer::RunConfiguration *runConfiguration); /// Start analyzation process. virtual void start() = 0; diff --git a/src/plugins/qmlprofiler/qmlprofilerengine.cpp b/src/plugins/qmlprofiler/qmlprofilerengine.cpp index 1de1e399bc1..18788eff4ae 100644 --- a/src/plugins/qmlprofiler/qmlprofilerengine.cpp +++ b/src/plugins/qmlprofiler/qmlprofilerengine.cpp @@ -46,11 +46,17 @@ #include #include #include +#include +#include +#include +#include +#include #include #include using namespace Analyzer; +using namespace ProjectExplorer; namespace QmlProfiler { namespace Internal { @@ -67,12 +73,11 @@ public: bool attach(const QString &address, uint port); static AbstractQmlProfilerRunner *createRunner(ProjectExplorer::RunConfiguration *runConfiguration, - const AnalyzerStartParameters &m_params, QObject *parent); QmlProfilerEngine *q; - AnalyzerStartParameters m_params; + //AnalyzerStartParameters m_params; AbstractQmlProfilerRunner *m_runner; bool m_running; bool m_fetchingData; @@ -80,28 +85,38 @@ public: }; AbstractQmlProfilerRunner * -QmlProfilerEngine::QmlProfilerEnginePrivate::createRunner(ProjectExplorer::RunConfiguration *configuration, - const AnalyzerStartParameters &m_params, +QmlProfilerEngine::QmlProfilerEnginePrivate::createRunner(ProjectExplorer::RunConfiguration *runConfiguration, QObject *parent) { AbstractQmlProfilerRunner *runner = 0; - if (m_params.startMode == StartLocal) { - LocalQmlProfilerRunner::Configuration configuration; - configuration.executable = m_params.debuggee; - configuration.executableArguments = m_params.debuggeeArgs; - configuration.workingDirectory = m_params.workingDirectory; - configuration.environment = m_params.environment; - configuration.port = m_params.connParams.port; - - runner = new LocalQmlProfilerRunner(configuration, parent); - } else if (m_params.startMode == StartRemote) { - if (Qt4ProjectManager::S60DeviceRunConfiguration *s60Config - = qobject_cast(configuration)) { - runner = new CodaQmlProfilerRunner(s60Config, parent); - } else if (RemoteLinux::RemoteLinuxRunConfiguration *rmConfig - = qobject_cast(configuration)){ - runner = new RemoteLinuxQmlProfilerRunner(rmConfig, parent); - } + if (QmlProjectManager::QmlProjectRunConfiguration *rc1 = + qobject_cast(runConfiguration)) { + // This is a "plain" .qmlproject. + LocalQmlProfilerRunner::Configuration conf; + conf.executable = rc1->observerPath(); + conf.executableArguments = rc1->viewerArguments(); + conf.workingDirectory = rc1->workingDirectory(); + conf.environment = rc1->environment(); + conf.port = rc1->qmlDebugServerPort(); + runner = new LocalQmlProfilerRunner(conf, parent); + } else if (LocalApplicationRunConfiguration *rc2 = + qobject_cast(runConfiguration)) { + // FIXME: Check. + LocalQmlProfilerRunner::Configuration conf; + conf.executable = rc2->executable(); + conf.executableArguments = rc2->commandLineArguments(); + conf.workingDirectory = rc2->workingDirectory(); + conf.environment = rc2->environment(); + conf.port = rc2->qmlDebugServerPort(); + runner = new LocalQmlProfilerRunner(conf, parent); + } else if (Qt4ProjectManager::S60DeviceRunConfiguration *s60Config = + qobject_cast(runConfiguration)) { + runner = new CodaQmlProfilerRunner(s60Config, parent); + } else if (RemoteLinux::RemoteLinuxRunConfiguration *rmConfig = + qobject_cast(runConfiguration)) { + runner = new RemoteLinuxQmlProfilerRunner(rmConfig, parent); + } else { + QTC_ASSERT(false, /**/); } return runner; } @@ -110,12 +125,11 @@ QmlProfilerEngine::QmlProfilerEnginePrivate::createRunner(ProjectExplorer::RunCo // QmlProfilerEngine // -QmlProfilerEngine::QmlProfilerEngine(IAnalyzerTool *tool, const AnalyzerStartParameters &sp, +QmlProfilerEngine::QmlProfilerEngine(IAnalyzerTool *tool, ProjectExplorer::RunConfiguration *runConfiguration) - : IAnalyzerEngine(tool, sp, runConfiguration) + : IAnalyzerEngine(tool, runConfiguration) , d(new QmlProfilerEnginePrivate(this)) { - d->m_params = sp; d->m_running = false; d->m_fetchingData = false; d->m_delayedDelete = false; @@ -131,8 +145,8 @@ QmlProfilerEngine::~QmlProfilerEngine() void QmlProfilerEngine::start() { QTC_ASSERT(!d->m_runner, return); - d->m_runner = QmlProfilerEnginePrivate::createRunner(runConfiguration(), d->m_params, this); - QTC_ASSERT(d->m_runner, return); + d->m_runner = QmlProfilerEnginePrivate::createRunner(runConfiguration(), this); + connect(d->m_runner, SIGNAL(stopped()), this, SLOT(stopped())); connect(d->m_runner, SIGNAL(appendMessage(QString,Utils::OutputFormat)), diff --git a/src/plugins/qmlprofiler/qmlprofilerengine.h b/src/plugins/qmlprofiler/qmlprofilerengine.h index 8a975aee11c..7e9ef48b6f4 100644 --- a/src/plugins/qmlprofiler/qmlprofilerengine.h +++ b/src/plugins/qmlprofiler/qmlprofilerengine.h @@ -45,7 +45,7 @@ class QmlProfilerEngine : public Analyzer::IAnalyzerEngine Q_OBJECT public: - QmlProfilerEngine(Analyzer::IAnalyzerTool *tool, const Analyzer::AnalyzerStartParameters &sp, + QmlProfilerEngine(Analyzer::IAnalyzerTool *tool, ProjectExplorer::RunConfiguration *runConfiguration); ~QmlProfilerEngine(); diff --git a/src/plugins/qmlprofiler/qmlprofilertool.cpp b/src/plugins/qmlprofiler/qmlprofilertool.cpp index decebb6d177..032ecb40c62 100644 --- a/src/plugins/qmlprofiler/qmlprofilertool.cpp +++ b/src/plugins/qmlprofiler/qmlprofilertool.cpp @@ -171,7 +171,7 @@ IAnalyzerTool::ToolMode QmlProfilerTool::toolMode() const IAnalyzerEngine *QmlProfilerTool::createEngine(const AnalyzerStartParameters &sp, ProjectExplorer::RunConfiguration *runConfiguration) { - QmlProfilerEngine *engine = new QmlProfilerEngine(this, sp, runConfiguration); + QmlProfilerEngine *engine = new QmlProfilerEngine(this, runConfiguration); // Check minimum Qt Version. We cannot really be sure what the Qt version // at runtime is, but guess that the active build configuraiton has been used. @@ -201,6 +201,7 @@ IAnalyzerEngine *QmlProfilerTool::createEngine(const AnalyzerStartParameters &sp } } + // FIXME: Check that there's something sensible in sp.connParams if (d->m_connectMode == QmlProfilerToolPrivate::TcpConnection) { d->m_tcpHost = sp.connParams.host; d->m_tcpPort = sp.connParams.port; diff --git a/src/plugins/qmlprofiler/qmlprojectanalyzerruncontrolfactory.cpp b/src/plugins/qmlprofiler/qmlprojectanalyzerruncontrolfactory.cpp index 2f18a03a767..adcdb150415 100644 --- a/src/plugins/qmlprofiler/qmlprojectanalyzerruncontrolfactory.cpp +++ b/src/plugins/qmlprofiler/qmlprojectanalyzerruncontrolfactory.cpp @@ -44,6 +44,8 @@ #include #include +#include +#include #include @@ -62,26 +64,30 @@ QmlProjectAnalyzerRunControlFactory::QmlProjectAnalyzerRunControlFactory(QObject bool QmlProjectAnalyzerRunControlFactory::canRun(RunConfiguration *runConfiguration, const QString &mode) const { + // FIXME: Should this just accept all mode == QLatin1String("QmlProfiler"); ? if (qobject_cast(runConfiguration)) return mode == QLatin1String("QmlProfiler"); if (qobject_cast(runConfiguration)) return mode == QLatin1String("QmlProfiler"); if (qobject_cast(runConfiguration)) return mode == QLatin1String("QmlProfiler"); + if (qobject_cast(runConfiguration)) + return mode == QLatin1String("QmlProfiler"); return false; } RunControl *QmlProjectAnalyzerRunControlFactory::create(RunConfiguration *runConfiguration, const QString &mode) { QTC_ASSERT(canRun(runConfiguration, mode), return 0); - AnalyzerStartParameters sp; sp.toolId = "QmlProfiler"; + sp.startMode = StartQml; // FIXME: The parameter struct is not needed/not used. + + // FIXME: This is only used to communicate the connParams settings. if (QmlProjectRunConfiguration *rc1 = qobject_cast(runConfiguration)) { // This is a "plain" .qmlproject. - sp.startMode = StartLocal; sp.environment = rc1->environment(); sp.workingDirectory = rc1->workingDirectory(); sp.debuggee = rc1->observerPath(); @@ -91,7 +97,6 @@ RunControl *QmlProjectAnalyzerRunControlFactory::create(RunConfiguration *runCon sp.connParams.port = rc1->qmlDebugServerPort(); } else if (LocalApplicationRunConfiguration *rc2 = qobject_cast(runConfiguration)) { - sp.startMode = StartLocal; sp.environment = rc2->environment(); sp.workingDirectory = rc2->workingDirectory(); sp.debuggee = rc2->executable(); @@ -101,15 +106,22 @@ RunControl *QmlProjectAnalyzerRunControlFactory::create(RunConfiguration *runCon sp.connParams.port = rc2->qmlDebugServerPort(); } else if (RemoteLinux::RemoteLinuxRunConfiguration *rc3 = qobject_cast(runConfiguration)) { - sp.startMode = StartRemote; sp.debuggee = rc3->remoteExecutableFilePath(); sp.debuggeeArgs = rc3->arguments(); sp.connParams = rc3->deviceConfig()->sshParameters(); sp.analyzerCmdPrefix = rc3->commandPrefix(); sp.displayName = rc3->displayName(); + } else if (Qt4ProjectManager::S60DeviceRunConfiguration *rc4 = + qobject_cast(runConfiguration)) { + //sp.environment = rc4->environment(); + //sp.workingDirectory = rc4->workingDirectory(); + //sp.debuggee = rc4->executable(); + sp.debuggeeArgs = rc4->commandLineArguments(); + sp.displayName = rc4->displayName(); + sp.connParams.host = QLatin1String("localhost"); + sp.connParams.port = rc4->qmlDebugServerPort(); } else { - // Might be S60DeviceRunfiguration, or something else ... ? - //sp.startMode = StartRemote; + // What could that be? QTC_ASSERT(false, return 0); } From 1a9443bd5c20fb501ac61df0cc5e177e14233675 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Tue, 5 Jul 2011 10:00:20 +0200 Subject: [PATCH 089/143] RemoteLinux: Check deploy config when creating deploy steps. RemoteLinux deploy steps can only exist inside a Qt4MaemoDeployConfiguration. Change-Id: If54e12635901751262240c60c01d2ad4edb345de Reviewed-on: http://codereview.qt.nokia.com/1149 Reviewed-by: Qt Sanity Bot Reviewed-by: Lasse Holmstedt --- src/plugins/remotelinux/maemodeploystepfactory.cpp | 3 +++ src/plugins/remotelinux/maemopackagecreationfactory.cpp | 2 ++ 2 files changed, 5 insertions(+) diff --git a/src/plugins/remotelinux/maemodeploystepfactory.cpp b/src/plugins/remotelinux/maemodeploystepfactory.cpp index a907660129d..82b90fbe347 100644 --- a/src/plugins/remotelinux/maemodeploystepfactory.cpp +++ b/src/plugins/remotelinux/maemodeploystepfactory.cpp @@ -63,6 +63,9 @@ MaemoDeployStepFactory::MaemoDeployStepFactory(QObject *parent) QStringList MaemoDeployStepFactory::availableCreationIds(BuildStepList *parent) const { QStringList ids; + if (!qobject_cast(parent->parent())) + return ids; + AbstractQt4MaemoTarget * const maemoTarget = qobject_cast(parent->target()); if (maemoTarget) diff --git a/src/plugins/remotelinux/maemopackagecreationfactory.cpp b/src/plugins/remotelinux/maemopackagecreationfactory.cpp index bab364abe60..cccb44521c0 100644 --- a/src/plugins/remotelinux/maemopackagecreationfactory.cpp +++ b/src/plugins/remotelinux/maemopackagecreationfactory.cpp @@ -63,6 +63,8 @@ QStringList MaemoPackageCreationFactory::availableCreationIds(ProjectExplorer::B QStringList ids; if (!MaemoGlobal::hasLinuxQt(parent->target())) return ids; + if (!qobject_cast(parent->parent())) + return ids; if (qobject_cast(parent->target()) && !parent->contains(MaemoDebianPackageCreationStep::CreatePackageId)) { ids << MaemoDebianPackageCreationStep::CreatePackageId; From 89e0dd2d2fe2998f8329eeeeee3992cb99eca92b Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 4 Jul 2011 15:50:50 +0200 Subject: [PATCH 090/143] Show shortcut for Locator MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Task-number: QTCREATORBUG-5164 Change-Id: Idd73a88697167de3de984de8519d8bddaa7aefb3 Reviewed-on: http://codereview.qt.nokia.com/1084 Reviewed-by: Qt Sanity Bot Reviewed-by: Robert Löhning --- src/plugins/locator/locatorplugin.cpp | 16 +++++++++++++++- src/plugins/locator/locatorplugin.h | 2 ++ src/plugins/locator/locatorwidget.cpp | 6 +++++- src/plugins/locator/locatorwidget.h | 2 ++ 4 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/plugins/locator/locatorplugin.cpp b/src/plugins/locator/locatorplugin.cpp index 21585404444..43831ebc560 100644 --- a/src/plugins/locator/locatorplugin.cpp +++ b/src/plugins/locator/locatorplugin.cpp @@ -45,12 +45,12 @@ #include #include #include -#include #include #include #include #include #include +#include #include #include @@ -119,6 +119,8 @@ bool LocatorPlugin::initialize(const QStringList &, QString *) ->registerAction(action, "QtCreator.Locate", Core::Context(Core::Constants::C_GLOBAL)); cmd->setDefaultKeySequence(QKeySequence("Ctrl+K")); connect(action, SIGNAL(triggered()), this, SLOT(openLocator())); + connect(cmd, SIGNAL(keySequenceChanged()), this, SLOT(updatePlaceholderText())); + updatePlaceholderText(cmd); Core::ActionContainer *mtools = core->actionManager()->actionContainer(Core::Constants::M_TOOLS); mtools->addAction(cmd); @@ -137,6 +139,18 @@ bool LocatorPlugin::initialize(const QStringList &, QString *) return true; } +void LocatorPlugin::updatePlaceholderText(Core::Command *command) +{ + if (!command) + command = qobject_cast(sender()); + QTC_ASSERT(command, return); + if (command->keySequence().isEmpty()) + m_locatorWidget->setPlaceholderText(tr("Type to locate")); + else + m_locatorWidget->setPlaceholderText(tr("Type to locate (%1)").arg( + command->keySequence().toString(QKeySequence::NativeText))); +} + void LocatorPlugin::openLocator() { m_locatorWidget->show(""); diff --git a/src/plugins/locator/locatorplugin.h b/src/plugins/locator/locatorplugin.h index 11020fa864e..0d2ec895c0e 100644 --- a/src/plugins/locator/locatorplugin.h +++ b/src/plugins/locator/locatorplugin.h @@ -37,6 +37,7 @@ #include "directoryfilter.h" #include +#include #include #include @@ -77,6 +78,7 @@ public slots: private slots: void startSettingsLoad(); void settingsLoaded(); + void updatePlaceholderText(Core::Command *command = 0); private: void loadSettings(); diff --git a/src/plugins/locator/locatorwidget.cpp b/src/plugins/locator/locatorwidget.cpp index d9b83a04c37..5e9024c48b2 100644 --- a/src/plugins/locator/locatorwidget.cpp +++ b/src/plugins/locator/locatorwidget.cpp @@ -306,7 +306,6 @@ LocatorWidget::LocatorWidget(LocatorPlugin *qop) : setWindowIcon(QIcon(QLatin1String(":/locator/images/locator.png"))); QPixmap image(Core::Constants::ICON_MAGNIFIER); m_fileLineEdit->setButtonPixmap(Utils::FancyLineEdit::Left, image); - m_fileLineEdit->setPlaceholderText(tr("Type to locate")); m_fileLineEdit->setButtonToolTip(Utils::FancyLineEdit::Left, tr("Options")); m_fileLineEdit->setFocusPolicy(Qt::ClickFocus); m_fileLineEdit->setButtonVisible(Utils::FancyLineEdit::Left, true); @@ -343,6 +342,11 @@ LocatorWidget::LocatorWidget(LocatorPlugin *qop) : connect(m_showPopupTimer, SIGNAL(timeout()), SLOT(showPopupNow())); } +void LocatorWidget::setPlaceholderText(const QString &text) +{ + m_fileLineEdit->setPlaceholderText(text); +} + void LocatorWidget::updateFilterList() { m_filterMenu->clear(); diff --git a/src/plugins/locator/locatorwidget.h b/src/plugins/locator/locatorwidget.h index f7dd2508e48..bdf053f4131 100644 --- a/src/plugins/locator/locatorwidget.h +++ b/src/plugins/locator/locatorwidget.h @@ -67,6 +67,8 @@ public: void show(const QString &text, int selectionStart = -1, int selectionLength = 0); + void setPlaceholderText(const QString &text); + private slots: void showPopup(); void showPopupNow(); From 45212d3c1a73d788ba49f6fd7923240105ad3136 Mon Sep 17 00:00:00 2001 From: Christiaan Janssen Date: Tue, 5 Jul 2011 12:56:49 +0200 Subject: [PATCH 091/143] QmlProfiler: handling start/stop actions Change-Id: I940025ba1f35f6136b4a12936b9e508ccb9d0d1f Reviewed-on: http://codereview.qt.nokia.com/1160 Reviewed-by: Qt Sanity Bot Reviewed-by: hjk --- src/plugins/analyzerbase/analyzermanager.cpp | 6 ++++++ src/plugins/analyzerbase/analyzermanager.h | 1 + src/plugins/qmlprofiler/qmlprofilerengine.cpp | 2 ++ 3 files changed, 9 insertions(+) diff --git a/src/plugins/analyzerbase/analyzermanager.cpp b/src/plugins/analyzerbase/analyzermanager.cpp index 4af2935da23..37b8a00114d 100644 --- a/src/plugins/analyzerbase/analyzermanager.cpp +++ b/src/plugins/analyzerbase/analyzermanager.cpp @@ -679,6 +679,7 @@ void AnalyzerManagerPrivate::addTool(IAnalyzerTool *tool, const StartModes &mode void AnalyzerManagerPrivate::handleToolStarted() { m_isRunning = true; // FIXME: Make less global. + updateRunActions(); } void AnalyzerManagerPrivate::handleToolFinished() @@ -856,6 +857,11 @@ QAction *AnalyzerManager::stopAction() return m_instance->d->m_stopAction; } +void AnalyzerManager::handleToolStarted() +{ + m_instance->d->handleToolStarted(); +} + void AnalyzerManager::handleToolFinished() { m_instance->d->handleToolFinished(); diff --git a/src/plugins/analyzerbase/analyzermanager.h b/src/plugins/analyzerbase/analyzermanager.h index 26bb66a0a86..42700cac90d 100644 --- a/src/plugins/analyzerbase/analyzermanager.h +++ b/src/plugins/analyzerbase/analyzermanager.h @@ -92,6 +92,7 @@ public: static void showStatusMessage(const QString &message, int timeoutMS = 10000); static void showPermanentStatusMessage(const QString &message); + static void handleToolStarted(); static void handleToolFinished(); static QAction *stopAction(); diff --git a/src/plugins/qmlprofiler/qmlprofilerengine.cpp b/src/plugins/qmlprofiler/qmlprofilerengine.cpp index 18788eff4ae..d62582232b5 100644 --- a/src/plugins/qmlprofiler/qmlprofilerengine.cpp +++ b/src/plugins/qmlprofiler/qmlprofilerengine.cpp @@ -156,6 +156,8 @@ void QmlProfilerEngine::start() d->m_running = true; d->m_delayedDelete = false; + + AnalyzerManager::handleToolStarted(); } void QmlProfilerEngine::stop() From 8b964f96412346bd3c47eb9ceb6c2db9e8d6743a Mon Sep 17 00:00:00 2001 From: Christiaan Janssen Date: Tue, 5 Jul 2011 13:14:37 +0200 Subject: [PATCH 092/143] QmlProfiler: renamed runcontrol factory Change-Id: I1d857d5cf63c01d766874469e7edde6a2c591dca Reviewed-on: http://codereview.qt.nokia.com/1162 Reviewed-by: Qt Sanity Bot Reviewed-by: hjk --- src/plugins/qmlprofiler/qmlprofiler.pro | 8 ++++---- src/plugins/qmlprofiler/qmlprofilerplugin.cpp | 4 ++-- ...tory.cpp => qmlprofilerruncontrolfactory.cpp} | 16 ++++++++-------- ...lfactory.h => qmlprofilerruncontrolfactory.h} | 11 +++++------ 4 files changed, 19 insertions(+), 20 deletions(-) rename src/plugins/qmlprofiler/{qmlprojectanalyzerruncontrolfactory.cpp => qmlprofilerruncontrolfactory.cpp} (89%) rename src/plugins/qmlprofiler/{qmlprojectanalyzerruncontrolfactory.h => qmlprofilerruncontrolfactory.h} (86%) diff --git a/src/plugins/qmlprofiler/qmlprofiler.pro b/src/plugins/qmlprofiler/qmlprofiler.pro index 9cf9360f73a..69ed6b3c451 100644 --- a/src/plugins/qmlprofiler/qmlprofiler.pro +++ b/src/plugins/qmlprofiler/qmlprofiler.pro @@ -23,12 +23,12 @@ SOURCES += \ tracewindow.cpp \ timelineview.cpp \ qmlprofilerattachdialog.cpp \ - qmlprojectanalyzerruncontrolfactory.cpp \ localqmlprofilerrunner.cpp \ codaqmlprofilerrunner.cpp \ remotelinuxqmlprofilerrunner.cpp \ qmlprofilertraceclient.cpp \ - qmlprofilereventview.cpp + qmlprofilereventview.cpp \ + qmlprofilerruncontrolfactory.cpp HEADERS += \ qmlprofilerconstants.h \ @@ -39,14 +39,14 @@ HEADERS += \ tracewindow.h \ timelineview.h \ qmlprofilerattachdialog.h \ - qmlprojectanalyzerruncontrolfactory.h \ abstractqmlprofilerrunner.h \ localqmlprofilerrunner.h \ codaqmlprofilerrunner.h \ remotelinuxqmlprofilerrunner.h \ qmlprofilertraceclient.h \ qmlprofilereventview.h \ - qmlprofilereventtypes.h + qmlprofilereventtypes.h \ + qmlprofilerruncontrolfactory.h RESOURCES += \ qml/qml.qrc diff --git a/src/plugins/qmlprofiler/qmlprofilerplugin.cpp b/src/plugins/qmlprofiler/qmlprofilerplugin.cpp index 1a212218857..9f45ae22ec5 100644 --- a/src/plugins/qmlprofiler/qmlprofilerplugin.cpp +++ b/src/plugins/qmlprofiler/qmlprofilerplugin.cpp @@ -34,7 +34,7 @@ #include "qmlprofilerplugin.h" #include "qmlprofilertool.h" -#include "qmlprojectanalyzerruncontrolfactory.h" +#include "qmlprofilerruncontrolfactory.h" #include @@ -49,7 +49,7 @@ bool QmlProfilerPlugin::initialize(const QStringList &arguments, QString *errorS { Q_UNUSED(arguments) Q_UNUSED(errorString) - addAutoReleasedObject(new QmlProjectAnalyzerRunControlFactory()); + addAutoReleasedObject(new QmlProfilerRunControlFactory()); StartModes modes; // They are handled the same actually. //modes.append(StartMode(StartRemote)); diff --git a/src/plugins/qmlprofiler/qmlprojectanalyzerruncontrolfactory.cpp b/src/plugins/qmlprofiler/qmlprofilerruncontrolfactory.cpp similarity index 89% rename from src/plugins/qmlprofiler/qmlprojectanalyzerruncontrolfactory.cpp rename to src/plugins/qmlprofiler/qmlprofilerruncontrolfactory.cpp index adcdb150415..90f4496b927 100644 --- a/src/plugins/qmlprofiler/qmlprojectanalyzerruncontrolfactory.cpp +++ b/src/plugins/qmlprofiler/qmlprofilerruncontrolfactory.cpp @@ -31,7 +31,7 @@ ** **************************************************************************/ -#include "qmlprojectanalyzerruncontrolfactory.h" +#include "qmlprofilerruncontrolfactory.h" #include "qmlprojectmanager/qmlprojectrunconfiguration.h" #include @@ -56,13 +56,13 @@ using namespace ProjectExplorer; using namespace QmlProfiler::Internal; using namespace QmlProjectManager; -QmlProjectAnalyzerRunControlFactory::QmlProjectAnalyzerRunControlFactory(QObject *parent) +QmlProfilerRunControlFactory::QmlProfilerRunControlFactory(QObject *parent) : IRunControlFactory(parent) { - setObjectName(QLatin1String("QmlProjectAnalyzerRunControlFactory")); + setObjectName(QLatin1String("QmlProfilerRunControlFactory")); } -bool QmlProjectAnalyzerRunControlFactory::canRun(RunConfiguration *runConfiguration, const QString &mode) const +bool QmlProfilerRunControlFactory::canRun(RunConfiguration *runConfiguration, const QString &mode) const { // FIXME: Should this just accept all mode == QLatin1String("QmlProfiler"); ? if (qobject_cast(runConfiguration)) @@ -76,7 +76,7 @@ bool QmlProjectAnalyzerRunControlFactory::canRun(RunConfiguration *runConfigurat return false; } -RunControl *QmlProjectAnalyzerRunControlFactory::create(RunConfiguration *runConfiguration, const QString &mode) +RunControl *QmlProfilerRunControlFactory::create(RunConfiguration *runConfiguration, const QString &mode) { QTC_ASSERT(canRun(runConfiguration, mode), return 0); AnalyzerStartParameters sp; @@ -131,17 +131,17 @@ RunControl *QmlProjectAnalyzerRunControlFactory::create(RunConfiguration *runCon return rc; } -QString QmlProjectAnalyzerRunControlFactory::displayName() const +QString QmlProfilerRunControlFactory::displayName() const { return tr("QML Profiler"); } -IRunConfigurationAspect *QmlProjectAnalyzerRunControlFactory::createRunConfigurationAspect() +IRunConfigurationAspect *QmlProfilerRunControlFactory::createRunConfigurationAspect() { return new AnalyzerProjectSettings; } -RunConfigWidget *QmlProjectAnalyzerRunControlFactory::createConfigurationWidget(RunConfiguration *runConfiguration) +RunConfigWidget *QmlProfilerRunControlFactory::createConfigurationWidget(RunConfiguration *runConfiguration) { QmlProjectManager::QmlProjectRunConfiguration *localRc = qobject_cast(runConfiguration); diff --git a/src/plugins/qmlprofiler/qmlprojectanalyzerruncontrolfactory.h b/src/plugins/qmlprofiler/qmlprofilerruncontrolfactory.h similarity index 86% rename from src/plugins/qmlprofiler/qmlprojectanalyzerruncontrolfactory.h rename to src/plugins/qmlprofiler/qmlprofilerruncontrolfactory.h index 60b422bea9d..c37d2e31a01 100644 --- a/src/plugins/qmlprofiler/qmlprojectanalyzerruncontrolfactory.h +++ b/src/plugins/qmlprofiler/qmlprofilerruncontrolfactory.h @@ -31,24 +31,23 @@ ** **************************************************************************/ -#ifndef QMLPROJECTANALYZERRUNCONTROLFACTORY_H -#define QMLPROJECTANALYZERRUNCONTROLFACTORY_H +#ifndef QMLPROFILERRUNCONTROLFACTORY_H +#define QMLPROFILERRUNCONTROLFACTORY_H #include -//#include #include namespace QmlProfiler { namespace Internal { -class QmlProjectAnalyzerRunControlFactory : public ProjectExplorer::IRunControlFactory +class QmlProfilerRunControlFactory : public ProjectExplorer::IRunControlFactory { Q_OBJECT public: typedef ProjectExplorer::RunConfiguration RunConfiguration; - QmlProjectAnalyzerRunControlFactory(QObject *parent = 0); + QmlProfilerRunControlFactory(QObject *parent = 0); // IRunControlFactory implementation QString displayName() const; @@ -64,4 +63,4 @@ signals: } // namespace Internal } // namespace QmlProfiler -#endif // QMLPROJECTANALYZERRUNCONTROLFACTORY_H +#endif // QMLPROFILERRUNCONTROLFACTORY_H From 4cc8e4d4e3066d60be00b86a3444616805843977 Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Mon, 4 Jul 2011 10:05:18 +0200 Subject: [PATCH 093/143] QmlJS: Fix error message when too new qmltypes files are read. Change-Id: I5c499dd1307ee0e1f474278873706151d562d380 Reviewed-on: http://codereview.qt.nokia.com/1030 Reviewed-by: Fawzi Mohamed --- src/libs/qmljs/qmljstypedescriptionreader.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/qmljs/qmljstypedescriptionreader.cpp b/src/libs/qmljs/qmljstypedescriptionreader.cpp index c95dc741012..d3f392c71bb 100644 --- a/src/libs/qmljs/qmljstypedescriptionreader.cpp +++ b/src/libs/qmljs/qmljstypedescriptionreader.cpp @@ -120,7 +120,7 @@ void TypeDescriptionReader::readDocument(UiProgram *ast) versionString.mid(dotIdx + 1).toInt()); } if (version > ComponentVersion(1, 1)) { - addError(import->versionToken, "Expected version 1.1 or higher"); + addError(import->versionToken, "Expected version 1.1 or lower"); return; } From b48ccacbd0ed80785a0c8bf365f84d81f4b19d39 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Tue, 5 Jul 2011 11:06:45 +0200 Subject: [PATCH 094/143] CDB: Fix build with WinSDK 7.1 Task-number: QTCREATORBUG-5295 Change-Id: Ic330bc3d7744e65d46af89142f730bc21c938072 Reviewed-on: http://codereview.qt.nokia.com/1152 Reviewed-by: Qt Sanity Bot Reviewed-by: Friedemann Kleint --- src/libs/qtcreatorcdbext/qtcreatorcdbext.pro | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/libs/qtcreatorcdbext/qtcreatorcdbext.pro b/src/libs/qtcreatorcdbext/qtcreatorcdbext.pro index c8dfa333ae4..f9da7617b61 100644 --- a/src/libs/qtcreatorcdbext/qtcreatorcdbext.pro +++ b/src/libs/qtcreatorcdbext/qtcreatorcdbext.pro @@ -22,12 +22,18 @@ DEF_FILE=$$PWD/qtcreatorcdbext.def IDE_BASE_PATH=$$dirname(IDE_APP_PATH) -# Find out 64/32bit and determine target directories accordingly. -# TODO: This is an ugly hack. Better check compiler (stderr) or something? -ENV_LIB_PATH=$$(LIBPATH) +# Find out whether we are _building_ 64/32bit and determine target +# directories accordingly. +# +# Newer MSVC versions set CPU, olders do not, so use hacky check on +# LIBPATH if CPU is not available +ENV_CPU=$$(CPU) +ENV_LIBPATH=$$(LIBPATH) - -contains(ENV_LIB_PATH, ^.*amd64.*$) { +contains(ENV_CPU, ^AMD64$) { + DESTDIR=$$IDE_BASE_PATH/lib/$${BASENAME}64 + CDB_PLATFORM=amd64 +} else:isEmpty(ENV_CPU):contains(ENV_LIBPATH, ^.*amd64.*$) { DESTDIR=$$IDE_BASE_PATH/lib/$${BASENAME}64 CDB_PLATFORM=amd64 } else { From be1e4d85ee176ea1b462375516613105cb71cb98 Mon Sep 17 00:00:00 2001 From: Daniel Teske Date: Fri, 1 Jul 2011 18:56:44 +0200 Subject: [PATCH 095/143] Generic Project: Preserve out of project files on "Edit Files" Change-Id: Ia71ed20f8cd5563f1e7fce7a99cf12fc4e7e62c2 Reviewed-on: http://codereview.qt.nokia.com/1076 Reviewed-by: Qt Sanity Bot Reviewed-by: Oswald Buddenhagen Reviewed-by: Daniel Teske --- .../selectablefilesmodel.cpp | 24 ++++++++++++++++++- .../selectablefilesmodel.h | 3 +++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/plugins/genericprojectmanager/selectablefilesmodel.cpp b/src/plugins/genericprojectmanager/selectablefilesmodel.cpp index 4c516f33758..cfcdb98d8f7 100644 --- a/src/plugins/genericprojectmanager/selectablefilesmodel.cpp +++ b/src/plugins/genericprojectmanager/selectablefilesmodel.cpp @@ -58,6 +58,12 @@ SelectableFilesModel::SelectableFilesModel(const QString &baseDir, QObject *pare void SelectableFilesModel::setInitialMarkedFiles(const QStringList &files) { m_files = files.toSet(); + m_outOfBaseDirFiles.clear(); + QString base = m_baseDir + '/'; + foreach (const QString &file, m_files) + if (!file.startsWith(base)) + m_outOfBaseDirFiles.append(file); + m_allFiles = false; } @@ -333,11 +339,16 @@ void SelectableFilesModel::collectPaths(Tree *root, QStringList *result) const QStringList SelectableFilesModel::selectedFiles() const { - QStringList result; + QStringList result = m_outOfBaseDirFiles; collectFiles(m_root, &result); return result; } +QStringList SelectableFilesModel::preservedFiles() const +{ + return m_outOfBaseDirFiles; +} + void SelectableFilesModel::collectFiles(Tree *root, QStringList *result) const { if (root->checked == Qt::Unchecked) @@ -526,6 +537,10 @@ SelectableFilesDialog::SelectableFilesDialog(const QString &path, const QStringL m_view->hide(); layout->addWidget(m_view); + m_preservedFiles = new QLabel; + m_preservedFiles->hide(); + layout->addWidget(m_preservedFiles); + m_progressLabel = new QLabel(this); m_progressLabel->setMaximumWidth(500); layout->addWidget(m_progressLabel); @@ -569,6 +584,13 @@ void SelectableFilesDialog::parsingFinished() m_view->expand(QModelIndex()); smartExpand(m_selectableFilesModel->index(0,0, QModelIndex())); applyFilter(); + const QStringList &preservedFiles = m_selectableFilesModel->preservedFiles(); + if (preservedFiles.isEmpty()) { + m_preservedFiles->hide(); + } else { + m_preservedFiles->show(); + m_preservedFiles->setText(tr("Not showing %1 files that are outside of the base directory.\nThese files are preserved.").arg(preservedFiles.count())); + } } void SelectableFilesDialog::smartExpand(const QModelIndex &index) diff --git a/src/plugins/genericprojectmanager/selectablefilesmodel.h b/src/plugins/genericprojectmanager/selectablefilesmodel.h index 6b81e238fc1..f85b4c5672f 100644 --- a/src/plugins/genericprojectmanager/selectablefilesmodel.h +++ b/src/plugins/genericprojectmanager/selectablefilesmodel.h @@ -88,6 +88,7 @@ public: QStringList selectedFiles() const; QStringList selectedPaths() const; + QStringList preservedFiles() const; // only call this once void startParsing(); @@ -115,6 +116,7 @@ private: // Used in the future thread need to all not used after calling startParsing QString m_baseDir; QSet m_files; + QStringList m_outOfBaseDirFiles; QSet m_suffixes; QFutureWatcher m_watcher; Tree *m_rootForFuture; @@ -143,6 +145,7 @@ private: QLineEdit *m_filterLineEdit; QPushButton *m_applyFilterButton; QTreeView *m_view; + QLabel *m_preservedFiles; QLabel *m_progressLabel; }; From b36cdab396d76bfc26f18a2caf10978c1f05a12c Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Tue, 5 Jul 2011 11:22:56 +0200 Subject: [PATCH 096/143] RemoteLinux: Update changes file. Change-Id: I13a1522abc1c86929ab8da8fc7e4a84958960cee Reviewed-on: http://codereview.qt.nokia.com/1153 Reviewed-by: Qt Sanity Bot Reviewed-by: Leena Miettinen --- dist/changes-2.3.0 | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/dist/changes-2.3.0 b/dist/changes-2.3.0 index c2498575ea8..7c254d3c21b 100644 --- a/dist/changes-2.3.0 +++ b/dist/changes-2.3.0 @@ -59,7 +59,15 @@ Windows Symbian Target -Maemo Target +Remote Linux Support + * Created new plugin "RemoteLinux" comprising support for Maemo/MeeGo and + generic remote Linux hosts + * Generic remote Linux support entails: + * The ability to create a deploy configuration and associated steps the + same way as for Maemo + * A device configuration wizard for a "Generic Linux" device type + * The possibility to add device types and associated wizards and actions + for the device configuration dialog via third-party plugins Qt Designer From 81e65bc1e6ace064a65047edde6d9cbbb9f2de0f Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Tue, 5 Jul 2011 15:56:42 +0200 Subject: [PATCH 097/143] Fix original string messages Change-Id: I60c459de44b72dd2bea23672bee41892dcbc507b Reviewed-on: http://codereview.qt.nokia.com/1168 Reviewed-by: Qt Sanity Bot Reviewed-by: Leena Miettinen --- src/plugins/qtsupport/qtoptionspage.cpp | 2 +- src/plugins/remotelinux/publickeydeploymentdialog.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/qtsupport/qtoptionspage.cpp b/src/plugins/qtsupport/qtoptionspage.cpp index 232c9ad50fe..40febd94108 100644 --- a/src/plugins/qtsupport/qtoptionspage.cpp +++ b/src/plugins/qtsupport/qtoptionspage.cpp @@ -389,7 +389,7 @@ QtOptionsPageWidget::ValidityInfo QtOptionsPageWidget::validInformation(const Ba } else { // Yes, some ABIs are unsupported info.message = tr("Not all possible target environments can be supported due to missing tool chains."); - info.toolTip = tr("The following ABIs are currently not supported:
      • %1
      ") + info.toolTip = tr("The following ABIs are currently not supported:
      • %1
      ") .arg(missingToolChains.join(QLatin1String("
    1. "))); info.icon = m_warningVersionIcon; } diff --git a/src/plugins/remotelinux/publickeydeploymentdialog.cpp b/src/plugins/remotelinux/publickeydeploymentdialog.cpp index 9fe831e1a57..5107b867af6 100644 --- a/src/plugins/remotelinux/publickeydeploymentdialog.cpp +++ b/src/plugins/remotelinux/publickeydeploymentdialog.cpp @@ -64,7 +64,7 @@ PublicKeyDeploymentDialog::PublicKeyDeploymentDialog(const LinuxDeviceConfigurat const QString &dir = QFileInfo(sshParams.privateKeyFile).path(); QString publicKeyFileName = QFileDialog::getOpenFileName(this, tr("Choose Public Key File"), dir, - tr("Public Key Files(*.pub);;All Files (*)")); + tr("Public Key Files (*.pub);;All Files (*)")); if (publicKeyFileName.isEmpty()) { reject(); return; From 0358f70983ee27fbc2c0c6f2167ab721e4147336 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Tue, 5 Jul 2011 16:45:37 +0200 Subject: [PATCH 098/143] RemoteLinux: User string fixes. Change-Id: I5419a0eb0d8c644597efbf8da4090f960658b7b2 Reviewed-on: http://codereview.qt.nokia.com/1175 Reviewed-by: Qt Sanity Bot Reviewed-by: Leena Miettinen --- .../remotelinux/maemouploadandinstalldeploystep.cpp | 2 +- .../remotelinux/qt4maemodeployconfiguration.cpp | 10 +++++----- .../remotelinux/remotelinuxrunconfigurationfactory.cpp | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/plugins/remotelinux/maemouploadandinstalldeploystep.cpp b/src/plugins/remotelinux/maemouploadandinstalldeploystep.cpp index 5101ffb0635..09c22270338 100644 --- a/src/plugins/remotelinux/maemouploadandinstalldeploystep.cpp +++ b/src/plugins/remotelinux/maemouploadandinstalldeploystep.cpp @@ -277,7 +277,7 @@ const QString MaemoUploadAndInstallTarPackageStep::Id("MaemoUploadAndInstallTarP QString MaemoUploadAndInstallTarPackageStep::displayName() { - return tr("Deploy tar package via SFTP upload"); + return tr("Deploy tarball via SFTP upload"); } } // namespace Internal diff --git a/src/plugins/remotelinux/qt4maemodeployconfiguration.cpp b/src/plugins/remotelinux/qt4maemodeployconfiguration.cpp index c022de7226f..c7f039fe176 100644 --- a/src/plugins/remotelinux/qt4maemodeployconfiguration.cpp +++ b/src/plugins/remotelinux/qt4maemodeployconfiguration.cpp @@ -196,15 +196,15 @@ QStringList Qt4MaemoDeployConfigurationFactory::availableCreationIds(Target *par QString Qt4MaemoDeployConfigurationFactory::displayNameForId(const QString &id) const { if (id == Qt4MaemoDeployConfiguration::FremantleWithoutPackagingId) - return tr("Copy files to Maemo5 device"); + return tr("Copy Files to Maemo5 Device"); else if (id == Qt4MaemoDeployConfiguration::FremantleWithPackagingId) - return tr("Build Debian package and install to Maemo5 device"); + return tr("Build Debian Package and Install to Maemo5 Device"); else if (id == Qt4MaemoDeployConfiguration::HarmattanId) - return tr("Build Debian package and install to Harmattan device"); + return tr("Build Debian Package and Install to Harmattan Device"); else if (id == Qt4MaemoDeployConfiguration::MeegoId) - return tr("Build RPM package and install to Meego device"); + return tr("Build RPM Package and Install to MeeGo Device"); else if (id == Qt4MaemoDeployConfiguration::GenericLinuxId) - return tr("Build tarball and install to Linux host"); + return tr("Build Tarball and Install to Linux Host"); return QString(); } diff --git a/src/plugins/remotelinux/remotelinuxrunconfigurationfactory.cpp b/src/plugins/remotelinux/remotelinuxrunconfigurationfactory.cpp index f2c8c974457..2a2d0a967b5 100644 --- a/src/plugins/remotelinux/remotelinuxrunconfigurationfactory.cpp +++ b/src/plugins/remotelinux/remotelinuxrunconfigurationfactory.cpp @@ -102,7 +102,7 @@ QStringList RemoteLinuxRunConfigurationFactory::availableCreationIds(Target *par QString RemoteLinuxRunConfigurationFactory::displayNameForId(const QString &id) const { return QFileInfo(pathFromId(id)).completeBaseName() - + QLatin1String(" (on remote generic Linux device)"); + + tr(" (on Remote Generic Linux Host)"); } RunConfiguration *RemoteLinuxRunConfigurationFactory::create(Target *parent, const QString &id) From 7756371ceab365916097792d2f08e46e880ba5eb Mon Sep 17 00:00:00 2001 From: Christiaan Janssen Date: Tue, 5 Jul 2011 15:50:32 +0200 Subject: [PATCH 099/143] QmlProfiler: disable navigation buttons when no data Change-Id: Ieee8a4c45919c4598d86a817e3489bd3e519d1c8 Reviewed-on: http://codereview.qt.nokia.com/1181 Reviewed-by: Qt Sanity Bot Reviewed-by: Aurindam Jana --- src/plugins/qmlprofiler/qml/MainView.js | 2 -- src/plugins/qmlprofiler/qml/MainView.qml | 21 +++++++++------------ src/plugins/qmlprofiler/tracewindow.cpp | 16 ++++++++++++++++ src/plugins/qmlprofiler/tracewindow.h | 2 ++ 4 files changed, 27 insertions(+), 14 deletions(-) diff --git a/src/plugins/qmlprofiler/qml/MainView.js b/src/plugins/qmlprofiler/qml/MainView.js index bbdc25cfa9a..bd4752d0710 100644 --- a/src/plugins/qmlprofiler/qml/MainView.js +++ b/src/plugins/qmlprofiler/qml/MainView.js @@ -36,7 +36,6 @@ var values = [ ]; //events var ranges = [ ]; var frameFps = [ ]; -var valuesdone = false; var xmargin = 0; var ymargin = 0; var drawFpsGraph = false; @@ -55,7 +54,6 @@ function reset() frameFps = []; xmargin = 0; ymargin = 0; - valuesdone = false; nestingDepth = []; } diff --git a/src/plugins/qmlprofiler/qml/MainView.qml b/src/plugins/qmlprofiler/qml/MainView.qml index 635b4ef8fb0..522d6104592 100644 --- a/src/plugins/qmlprofiler/qml/MainView.qml +++ b/src/plugins/qmlprofiler/qml/MainView.qml @@ -38,9 +38,7 @@ import "MainView.js" as Plotter Rectangle { id: root - property variant colors: Plotter.colors //the colors used for the timeline data - property bool xRay: false //useful for seeing "nested" ranges (but redraw is buggy -- QGV problem?) - property Item currentItem //currently selected item in the view + property bool dataAvailable: false; // move the cursor in the editor signal updateCursorPosition @@ -55,6 +53,7 @@ Rectangle { function clearData() { Plotter.reset(); view.clearData(); + root.dataAvailable = false; rangeMover.x = 2 rangeMover.opacity = 0 } @@ -62,7 +61,6 @@ Rectangle { function clearAll() { clearData(); selectedEventIndex = -1; - Plotter.valuesdone = false; canvas.requestPaint(); view.visible = false; root.elapsedTime = 0; @@ -132,21 +130,21 @@ Rectangle { Connections { target: connection onEvent: { - if (Plotter.valuesdone) { + if (root.dataAvailable) { root.clearData(); } - if (!Plotter.valuesdone && event === 0) //### only handle paint event + if (!root.dataAvailable && event === 0) //### only handle paint event Plotter.values.push(time); } onRange: { - if (Plotter.valuesdone) { + if (root.dataAvailable) { root.clearData(); } // todo: consider nestingLevel - if (!Plotter.valuesdone) { + if (!root.dataAvailable) { if (!Plotter.nestingDepth[type]) Plotter.nestingDepth[type] = nestingInType; else @@ -158,7 +156,7 @@ Rectangle { } onComplete: { - Plotter.valuesdone = true; + root.dataAvailable = true; Plotter.calcFps(); view.visible = true; view.setRanges(Plotter.ranges); @@ -264,7 +262,7 @@ Rectangle { delegate: Rectangle { id: obj - property color baseColor: colors[type] + property color baseColor: Plotter.colors[type] property color myColor: baseColor function conditionalHide() { @@ -302,7 +300,6 @@ Rectangle { } function enableSelected(x,y) { - currentItem = obj myColor = Qt.darker(baseColor, 1.2) rangeDetails.duration = duration rangeDetails.label = label @@ -429,7 +426,7 @@ Rectangle { canvasWindow.height: height onDrawRegion: { - if (Plotter.valuesdone) + if (root.dataAvailable) Plotter.plot(canvas, ctxt, region); else Plotter.drawGraph(canvas, ctxt, region) //just draw the background diff --git a/src/plugins/qmlprofiler/tracewindow.cpp b/src/plugins/qmlprofiler/tracewindow.cpp index dda54f327b0..4e8cce9aeb4 100644 --- a/src/plugins/qmlprofiler/tracewindow.cpp +++ b/src/plugins/qmlprofiler/tracewindow.cpp @@ -73,20 +73,27 @@ TraceWindow::TraceWindow(QWidget *parent) QToolButton *buttonPrev= new QToolButton; buttonPrev->setIcon(QIcon(":/qmlprofiler/prev.png")); connect(buttonPrev, SIGNAL(clicked()), this, SIGNAL(jumpToPrev())); + connect(this, SIGNAL(enableToolbar(bool)), buttonPrev, SLOT(setEnabled(bool))); QToolButton *buttonNext= new QToolButton; buttonNext->setIcon(QIcon(":/qmlprofiler/next.png")); connect(buttonNext, SIGNAL(clicked()), this, SIGNAL(jumpToNext())); + connect(this, SIGNAL(enableToolbar(bool)), buttonNext, SLOT(setEnabled(bool))); QToolButton *buttonZoomIn = new QToolButton; buttonZoomIn->setIcon(QIcon(":/qmlprofiler/magnifier-plus.png")); connect(buttonZoomIn, SIGNAL(clicked()), this, SIGNAL(zoomIn())); + connect(this, SIGNAL(enableToolbar(bool)), buttonZoomIn, SLOT(setEnabled(bool))); QToolButton *buttonZoomOut = new QToolButton; buttonZoomOut->setIcon(QIcon(":/qmlprofiler/magnifier-minus.png")); connect(buttonZoomOut, SIGNAL(clicked()), this, SIGNAL(zoomOut())); + connect(this, SIGNAL(enableToolbar(bool)), buttonZoomOut, SLOT(setEnabled(bool))); + toolBarLayout->addWidget(buttonPrev); toolBarLayout->addWidget(buttonNext); toolBarLayout->addWidget(buttonZoomIn); toolBarLayout->addWidget(buttonZoomOut); + + m_view->setResizeMode(QDeclarativeView::SizeRootObjectToView); m_view->setFocus(); groupLayout->addWidget(m_view); @@ -115,8 +122,11 @@ void TraceWindow::reset(QmlJsDebugClient::QDeclarativeDebugConnection *conn) m_view->rootContext()->setContextProperty("connection", m_plugin.data()); m_view->setSource(QUrl("qrc:/qmlprofiler/MainView.qml")); + updateToolbar(); + connect(m_view->rootObject(), SIGNAL(updateCursorPosition()), this, SLOT(updateCursorPosition())); connect(m_view->rootObject(), SIGNAL(updateTimer()), this, SLOT(updateTimer())); + connect(m_view->rootObject(), SIGNAL(dataAvailableChanged()), this, SLOT(updateToolbar())); connect(this, SIGNAL(jumpToPrev()), m_view->rootObject(), SLOT(prevEvent())); connect(this, SIGNAL(jumpToNext()), m_view->rootObject(), SLOT(nextEvent())); connect(this, SIGNAL(zoomIn()), m_view->rootObject(), SLOT(zoomIn())); @@ -144,6 +154,12 @@ void TraceWindow::clearDisplay() emit internalClearDisplay(); } +void TraceWindow::updateToolbar() +{ + bool dataAvailable = m_view->rootObject()->property("dataAvailable").toBool(); + emit enableToolbar(dataAvailable); +} + void TraceWindow::setRecording(bool recording) { if (m_plugin) diff --git a/src/plugins/qmlprofiler/tracewindow.h b/src/plugins/qmlprofiler/tracewindow.h index f76fea15f7a..dbbcfedb0ae 100644 --- a/src/plugins/qmlprofiler/tracewindow.h +++ b/src/plugins/qmlprofiler/tracewindow.h @@ -64,6 +64,7 @@ public slots: void updateCursorPosition(); void updateTimer(); void clearDisplay(); + void updateToolbar(); signals: void viewUpdated(); @@ -76,6 +77,7 @@ signals: void jumpToNext(); void zoomIn(); void zoomOut(); + void enableToolbar(bool); private: QWeakPointer m_plugin; From 8658d6f1c60d1b926df394c7829146eecd3223d9 Mon Sep 17 00:00:00 2001 From: Christiaan Janssen Date: Tue, 5 Jul 2011 16:40:26 +0200 Subject: [PATCH 100/143] QmlProfiler: Tooltips Change-Id: Ie83698aa10f27989b56b0032d04c416e34f1ded4 Reviewed-on: http://codereview.qt.nokia.com/1182 Reviewed-by: Qt Sanity Bot Reviewed-by: Aurindam Jana --- src/plugins/qmlprofiler/qmlprofilertool.cpp | 2 ++ src/plugins/qmlprofiler/tracewindow.cpp | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/src/plugins/qmlprofiler/qmlprofilertool.cpp b/src/plugins/qmlprofiler/qmlprofilertool.cpp index 032ecb40c62..c93b8c4b676 100644 --- a/src/plugins/qmlprofiler/qmlprofilertool.cpp +++ b/src/plugins/qmlprofiler/qmlprofilertool.cpp @@ -317,6 +317,7 @@ QWidget *QmlProfilerTool::createControlWidget() d->m_clearButton = new QToolButton(toolbarWidget); d->m_clearButton->setIcon(QIcon(QLatin1String(":/qmlprofiler/clean_pane_small.png"))); + d->m_clearButton->setToolTip(tr("Discard data")); connect(d->m_clearButton,SIGNAL(clicked()), this, SLOT(clearDisplay())); layout->addWidget(d->m_clearButton); @@ -391,6 +392,7 @@ void QmlProfilerTool::stopRecording() void QmlProfilerTool::setRecording(bool recording) { d->m_recordingEnabled = recording; + d->m_recordButton->setToolTip( d->m_recordingEnabled ? tr("Disable profiling") : tr("Enable profiling")); if (recording) startRecording(); else diff --git a/src/plugins/qmlprofiler/tracewindow.cpp b/src/plugins/qmlprofiler/tracewindow.cpp index 4e8cce9aeb4..9f7e02c3e2b 100644 --- a/src/plugins/qmlprofiler/tracewindow.cpp +++ b/src/plugins/qmlprofiler/tracewindow.cpp @@ -72,18 +72,22 @@ TraceWindow::TraceWindow(QWidget *parent) toolBarLayout->setSpacing(0); QToolButton *buttonPrev= new QToolButton; buttonPrev->setIcon(QIcon(":/qmlprofiler/prev.png")); + buttonPrev->setToolTip(tr("Jump to previous event")); connect(buttonPrev, SIGNAL(clicked()), this, SIGNAL(jumpToPrev())); connect(this, SIGNAL(enableToolbar(bool)), buttonPrev, SLOT(setEnabled(bool))); QToolButton *buttonNext= new QToolButton; buttonNext->setIcon(QIcon(":/qmlprofiler/next.png")); + buttonNext->setToolTip(tr("Jump to next event")); connect(buttonNext, SIGNAL(clicked()), this, SIGNAL(jumpToNext())); connect(this, SIGNAL(enableToolbar(bool)), buttonNext, SLOT(setEnabled(bool))); QToolButton *buttonZoomIn = new QToolButton; buttonZoomIn->setIcon(QIcon(":/qmlprofiler/magnifier-plus.png")); + buttonZoomIn->setToolTip(tr("Zoom in 10%")); connect(buttonZoomIn, SIGNAL(clicked()), this, SIGNAL(zoomIn())); connect(this, SIGNAL(enableToolbar(bool)), buttonZoomIn, SLOT(setEnabled(bool))); QToolButton *buttonZoomOut = new QToolButton; buttonZoomOut->setIcon(QIcon(":/qmlprofiler/magnifier-minus.png")); + buttonZoomOut->setToolTip(tr("Zoom out 10%")); connect(buttonZoomOut, SIGNAL(clicked()), this, SIGNAL(zoomOut())); connect(this, SIGNAL(enableToolbar(bool)), buttonZoomOut, SLOT(setEnabled(bool))); From 086e0b5789a9bbd2a783724bacd9d5aa0dfe8bc0 Mon Sep 17 00:00:00 2001 From: Christiaan Janssen Date: Tue, 5 Jul 2011 17:49:03 +0200 Subject: [PATCH 101/143] QmlProfiler: changed Analyze Button icon Change-Id: I1246e9292a6d92d406971fa3b655e81df56ba9ae Reviewed-on: http://codereview.qt.nokia.com/1183 Reviewed-by: Qt Sanity Bot Reviewed-by: Aurindam Jana --- src/plugins/qmlprofiler/qml/qml.qrc | 2 ++ src/plugins/qmlprofiler/qml/recordOff.png | Bin 0 -> 589 bytes src/plugins/qmlprofiler/qml/recordOn.png | Bin 0 -> 632 bytes src/plugins/qmlprofiler/qmlprofilertool.cpp | 8 ++++++-- 4 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 src/plugins/qmlprofiler/qml/recordOff.png create mode 100644 src/plugins/qmlprofiler/qml/recordOn.png diff --git a/src/plugins/qmlprofiler/qml/qml.qrc b/src/plugins/qmlprofiler/qml/qml.qrc index 822e2096d02..6f93bec9b8b 100644 --- a/src/plugins/qmlprofiler/qml/qml.qrc +++ b/src/plugins/qmlprofiler/qml/qml.qrc @@ -16,5 +16,7 @@ toolbarbg.png magnifier-minus.png magnifier-plus.png + recordOff.png + recordOn.png diff --git a/src/plugins/qmlprofiler/qml/recordOff.png b/src/plugins/qmlprofiler/qml/recordOff.png new file mode 100644 index 0000000000000000000000000000000000000000..66f4e3b36b18d09d60f29585486251b9d1b9a9ee GIT binary patch literal 589 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s77>k44ofy`glX=O&z`&N| z?e4R5d#AQXMsm#F#`j)FbFd;%$g&?z`(#>;_2(kew&?@Ustd|G~ADY zfkCpwHKN2hKQ}iuuY|$5C^fMpHASI3vm`^o-P1Q9ypd0wfq`*_r;B5V#p$(^ZBM^) z5NMs>%Vqd&S%;a>Y>{8WN0eHp{qv8WEyC5b)lAbx=MPh|vczN$pKoGG9#^*SW$UUyx4Z(M)T&(#)>EYj@eCrhw3A7nVa zsb!LX#QN(qmU&9F-N`erxqm+I{`byB9G6WZ^`;+{wCGb_ep!>DYf-`OyK#RzADvk; zMWd@ppy^{p&+A=At1o}HX%UFg6VKWj#a4Ge$ZN?I7RLsGro#^d?l_6KawuBJ^}pEV zw=(3{Dh1!*bI*+#5+%eqLqeZ^tPpS&Tz;9;_wtGmEsd_GDU&SvI1f*F{+Y93S*B}K z)!uV?+nE(Sh2DLyzV?21tBLQ#PfORkE&e!5vLW~OqWkZ~t7@4)smn|Ey4}yt*?v1R zNp6OUXXBFFZ|l5oZp(dW(Z_Nl$BaXk44ofy`glX=O&z`&N| z?e4R5d#AQXMsm#F#`j)FbFd;%$g&?z`(#>;_2(kew&?@U&lZ-y)2M{ zfkCpwHKN2hKQ}iuuY|$5C^fMpHASI3vm`^o-P1Q9ypd0wfr0U|r;B5V#p$(^?em2l z1&-DiKkpWPQ_L8$bCCL;8LJd49$9ii^!Y1?PLWO} zw!-J1Xa3&oTzKrp^d-r&V$Z&-HqO7d?t{aRee18rEWbQ4Yuz^igI^ca{~I|Tmb{b| zc)Nb5RkZpfEekvQ<30ADcl_>h*Pj=hy-OtUhz-Y&%1TamcN0JVa20K)^PjKm+_9jt z^ys^fhGl0N16`(X57F2(<^5sBn|1BSeos1b>w@vGBbN^|uZdUuv*YM2zlkru+?Q&# zv9ww6<3;Yd1D|c~O7Uzk$Wb)d>pHFVx+&KK1q+Esb@KPWmzuh0b8KjQ^GoV>srQB^ z4u{MRjTtw2q&3tgcX1cCFnm^6@GnPv>*-t9E}d~=F>QPDjE!4?N1KILJWVljl0fZm zui|v}LYX6*1d>l|?s1(IAQ4=4IV)FaMwzs1zoA1SkEcv>NTiw5Iww8}P1eZj>N^`Z zR+hQR7Bu{tbeD}qmAyzIR8jPX9N+s}KX%_%W#&={^=K4H{aC)#qx+ z|19F*rrhJOP(i6fgKeQe$L?6M_xCQX-gl%_li_wVqn|*6tKhLx&0D$8)YVrfegD_` iyW?82?2r48_`OrF9y=}Ff02QKfx*+&&t;ucLK6TnFac2j literal 0 HcmV?d00001 diff --git a/src/plugins/qmlprofiler/qmlprofilertool.cpp b/src/plugins/qmlprofiler/qmlprofilertool.cpp index c93b8c4b676..6cc159ca6f2 100644 --- a/src/plugins/qmlprofiler/qmlprofilertool.cpp +++ b/src/plugins/qmlprofiler/qmlprofilertool.cpp @@ -307,8 +307,7 @@ QWidget *QmlProfilerTool::createControlWidget() layout->setSpacing(0); d->m_recordButton = new QToolButton(toolbarWidget); - - d->m_recordButton->setIcon(QIcon(QLatin1String(":/qmlprofiler/analyzer_category_small.png"))); + // icon and tooltip set in setRecording(), called later d->m_recordButton->setCheckable(true); connect(d->m_recordButton,SIGNAL(toggled(bool)), this, SLOT(setRecording(bool))); @@ -392,7 +391,12 @@ void QmlProfilerTool::stopRecording() void QmlProfilerTool::setRecording(bool recording) { d->m_recordingEnabled = recording; + + // update record button d->m_recordButton->setToolTip( d->m_recordingEnabled ? tr("Disable profiling") : tr("Enable profiling")); + d->m_recordButton->setIcon(QIcon(d->m_recordingEnabled ? QLatin1String(":/qmlprofiler/recordOn.png") : + QLatin1String(":/qmlprofiler/recordOff.png"))); + if (recording) startRecording(); else From 2fba2017830703f620d4e427a8c201fe71570235 Mon Sep 17 00:00:00 2001 From: Daniel Molkentin Date: Tue, 5 Jul 2011 16:10:30 +0200 Subject: [PATCH 102/143] QML Desktop Components: Position ToolTip properly MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Task-Number: QTCREATORBUG-5272 Change-Id: Ia0050d7d63f0ff72fcdbdd2d01c3eb4db8cb8f7a Reviewed-on: http://codereview.qt.nokia.com/1170 Reviewed-by: Qt Sanity Bot Reviewed-by: Robert Löhning --- .../welcomescreen/components/styleitem/qstyleitem.cpp | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/share/qtcreator/welcomescreen/components/styleitem/qstyleitem.cpp b/share/qtcreator/welcomescreen/components/styleitem/qstyleitem.cpp index 3f96d89edd9..c16b931dcd4 100644 --- a/share/qtcreator/welcomescreen/components/styleitem/qstyleitem.cpp +++ b/share/qtcreator/welcomescreen/components/styleitem/qstyleitem.cpp @@ -829,13 +829,7 @@ bool QStyleItem::eventFilter(QObject *o, QEvent *e) { void QStyleItem::showToolTip(const QString &str) { - QPointF scene = mapToScene(width() - 20, 0); - QWidget *focusWidget = qApp->focusWidget(); - if (!focusWidget) - return; - - QPoint global = focusWidget->mapToGlobal(scene.toPoint()); - QToolTip::showText(QPoint(global.x(), global.y()), str); + QToolTip::showText(QCursor::pos(), str); } QRect QStyleItem::subControlRect(const QString &subcontrolString) From e2cdaf7888bd533ffaa074e4721f37c6202557f6 Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Tue, 5 Jul 2011 15:29:19 +0200 Subject: [PATCH 103/143] C++ indenter: Fix function declaration continuation indent. Change-Id: I0ebe1f0f531cb4830f80b80c6bb52caeaee01353 Reviewed-on: http://codereview.qt.nokia.com/1167 Reviewed-by: Leandro T. C. Melo --- src/plugins/cpptools/cppcodeformatter.cpp | 22 +++++----- src/plugins/cpptools/cppcodeformatter.h | 2 + .../codeformatter/tst_codeformatter.cpp | 40 +++++++++++++++++-- 3 files changed, 51 insertions(+), 13 deletions(-) diff --git a/src/plugins/cpptools/cppcodeformatter.cpp b/src/plugins/cpptools/cppcodeformatter.cpp index 4a355f6ffbb..7bb38600ace 100644 --- a/src/plugins/cpptools/cppcodeformatter.cpp +++ b/src/plugins/cpptools/cppcodeformatter.cpp @@ -1058,6 +1058,14 @@ int QtStyleCodeFormatter::loadLexerState(const QTextBlock &block) const return BaseTextDocumentLayout::lexerState(block); } +void QtStyleCodeFormatter::addContinuationIndent(int *paddingDepth) const +{ + if (*paddingDepth == 0) + *paddingDepth = 2*m_tabSettings.m_indentSize; + else + *paddingDepth += m_tabSettings.m_indentSize; +} + void QtStyleCodeFormatter::onEnter(int newState, int *indentDepth, int *savedIndentDepth, int *paddingDepth, int *savedPaddingDepth) const { const State &parentState = state(); @@ -1094,12 +1102,8 @@ void QtStyleCodeFormatter::onEnter(int newState, int *indentDepth, int *savedInd case template_param: if (!lastToken) *paddingDepth = nextTokenPosition-*indentDepth; - else { - if (*paddingDepth == 0) - *paddingDepth = 2*m_tabSettings.m_indentSize; - else - *paddingDepth += m_tabSettings.m_indentSize; - } + else + addContinuationIndent(paddingDepth); break; case statement_with_condition: @@ -1143,14 +1147,14 @@ void QtStyleCodeFormatter::onEnter(int newState, int *indentDepth, int *savedInd if (!lastToken) *paddingDepth = nextTokenPosition-*indentDepth; else - *paddingDepth += m_tabSettings.m_indentSize; + addContinuationIndent(paddingDepth); break; case ternary_op: if (!lastToken) *paddingDepth = spaceOrNextTokenPosition-*indentDepth; else - *paddingDepth += m_tabSettings.m_indentSize; + addContinuationIndent(paddingDepth); break; case stream_op: @@ -1176,7 +1180,7 @@ void QtStyleCodeFormatter::onEnter(int newState, int *indentDepth, int *savedInd break; case member_init_paren_open: - *paddingDepth += m_tabSettings.m_indentSize; + addContinuationIndent(paddingDepth); break; case case_cont: diff --git a/src/plugins/cpptools/cppcodeformatter.h b/src/plugins/cpptools/cppcodeformatter.h index 21f06135a8b..dae19a2e249 100644 --- a/src/plugins/cpptools/cppcodeformatter.h +++ b/src/plugins/cpptools/cppcodeformatter.h @@ -278,6 +278,8 @@ protected: static bool shouldClearPaddingOnEnter(int state); private: + void addContinuationIndent(int *paddingDepth) const; + TextEditor::TabSettings m_tabSettings; CppCodeStyleSettings m_styleSettings; }; diff --git a/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp b/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp index 3df75d4f37b..9dbe5506a71 100644 --- a/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp +++ b/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp @@ -61,9 +61,11 @@ private Q_SLOTS: void preprocessorContinuation(); void cStyleComments(); void cppStyleComments(); - void expressionContinuation(); + void expressionContinuation1(); + void expressionContinuation2(); void assignContinuation1(); void assignContinuation2(); + void declarationContinuation(); void classAccess(); void ternary(); void objcAtDeclarations(); @@ -601,7 +603,7 @@ void tst_CodeFormatter::cppStyleComments() checkIndent(data); } -void tst_CodeFormatter::expressionContinuation() +void tst_CodeFormatter::expressionContinuation1() { QList data; data << Line("void foo() {") @@ -628,9 +630,27 @@ void tst_CodeFormatter::expressionContinuation() << Line(" ~ foo - blah(1)") << Line(" ~ << '?'") << Line(" ~ << \"\\n\";") - << Line(" i += foo(") + << Line("}") + ; + checkIndent(data); +} + +void tst_CodeFormatter::expressionContinuation2() +{ + QList data; + data << Line("void foo() {") + << Line(" i += abc +") + << Line(" ~ foo(,") << Line(" ~ bar,") - << Line(" ~ 2);") + << Line(" ~ 2") + << Line(" ~ );") + << Line(" i += abc +") + << Line(" ~ foo(,") + << Line(" ~ bar(") + << Line(" ~ bar,") + << Line(" ~ 2") + << Line(" ~ ),") + << Line(" ~ abc);") << Line("}") ; checkIndent(data); @@ -676,6 +696,18 @@ void tst_CodeFormatter::assignContinuation2() checkIndent(data, style); } +void tst_CodeFormatter::declarationContinuation() +{ + QList data; + data << Line("void foo(") + << Line("~ int a,") + << Line("~ int b);") + << Line("void foo(int a,") + << Line("~ int b);") + ; + checkIndent(data); +} + void tst_CodeFormatter::classAccess() { QList data; From 1070da91c598be715142486f455e98401ff3831f Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Wed, 6 Jul 2011 10:19:37 +0200 Subject: [PATCH 104/143] Avoid compiler warning on Mac Change-Id: I10eab3a4b5fc4bf43ee80b1b4baf5767c72ab9c1 Reviewed-on: http://codereview.qt.nokia.com/1208 Reviewed-by: Qt Sanity Bot Reviewed-by: hjk --- src/plugins/debugger/debuggersourcepathmappingwidget.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/debugger/debuggersourcepathmappingwidget.cpp b/src/plugins/debugger/debuggersourcepathmappingwidget.cpp index c26c690d342..645d4baeefe 100644 --- a/src/plugins/debugger/debuggersourcepathmappingwidget.cpp +++ b/src/plugins/debugger/debuggersourcepathmappingwidget.cpp @@ -361,7 +361,7 @@ void DebuggerSourcePathMappingWidget::slotAddQt() if (qtSourcesPath.isEmpty()) return; const size_t buildPathCount = sizeof(qtBuildPaths)/sizeof(qtBuildPaths[0]); - for (size_t i = 0; i < buildPathCount; ++i) + for (size_t i = 0; i != buildPathCount; ++i) // use != to avoid 0<0 which triggers warning on Mac m_model->addMapping(QString::fromLatin1(qtBuildPaths[i]), qtSourcesPath); resizeColumns(); setCurrentRow(m_model->rowCount() - 1); @@ -403,7 +403,7 @@ DebuggerSourcePathMappingWidget::SourcePathMap if (qtInstallPath.isEmpty() || buildPathCount == 0) return rc; - for (size_t i = 0; i < buildPathCount; i++) { + for (size_t i = 0; i != buildPathCount; ++i) { // use != to avoid 0<0 which triggers warning on Mac const QString buildPath = QString::fromLatin1(qtBuildPaths[i]); if (!rc.contains(buildPath)) // Do not overwrite user settings. rc.insert(buildPath, qtInstallPath); From 78b1b042e3ef361a81331b2f1ea289fe674c03c0 Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 5 Jul 2011 17:57:57 +0200 Subject: [PATCH 105/143] debugger: replace artificial "{console,log}streamoutput" member in GdbMi Use proper QByteArray member in GdbResponse instead. Less magic, and does not break array-style reponses where all children are assumed to be of the same "type". Change-Id: Ief1efdeb0412f59836e1b2d6f4cb751ddef3216e Reviewed-on: http://codereview.qt.nokia.com/1184 Reviewed-by: Qt Sanity Bot Reviewed-by: Eike Ziller --- .../debugger/gdb/abstractplaingdbadapter.cpp | 2 +- src/plugins/debugger/gdb/classicgdbengine.cpp | 5 +- src/plugins/debugger/gdb/coregdbadapter.cpp | 8 +-- src/plugins/debugger/gdb/gdbengine.cpp | 62 ++++++++----------- src/plugins/debugger/gdb/gdbengine.h | 6 +- src/plugins/debugger/gdb/gdbmi.cpp | 13 ---- src/plugins/debugger/gdb/gdbmi.h | 3 +- src/plugins/debugger/gdb/pythongdbengine.cpp | 2 +- 8 files changed, 39 insertions(+), 62 deletions(-) diff --git a/src/plugins/debugger/gdb/abstractplaingdbadapter.cpp b/src/plugins/debugger/gdb/abstractplaingdbadapter.cpp index f492bcd3784..6fe24772534 100644 --- a/src/plugins/debugger/gdb/abstractplaingdbadapter.cpp +++ b/src/plugins/debugger/gdb/abstractplaingdbadapter.cpp @@ -120,7 +120,7 @@ void AbstractPlainGdbAdapter::handleInfoTarget(const GdbResponse &response) // [some leading stdout here] // >&" Entry point: 0x80831f0 0x08048134 - 0x08048147 is .interp\n" // [some trailing stdout here] - QString msg = _(response.data.findChild("consolestreamoutput").data()); + QString msg = _(response.consoleStreamOutput); QRegExp needle(_("\\bEntry point: 0x([0-9a-f]+)\\b")); if (needle.indexIn(msg) != -1) { m_engine->m_entryPoint = diff --git a/src/plugins/debugger/gdb/classicgdbengine.cpp b/src/plugins/debugger/gdb/classicgdbengine.cpp index 8912bb88482..51ee1b6be12 100644 --- a/src/plugins/debugger/gdb/classicgdbengine.cpp +++ b/src/plugins/debugger/gdb/classicgdbengine.cpp @@ -676,8 +676,7 @@ static bool isAccessSpecifier(const QByteArray &ba) // reads a MI-encoded item frome the consolestream static bool parseConsoleStream(const GdbResponse &response, GdbMi *contents) { - GdbMi output = response.data.findChild("consolestreamoutput"); - QByteArray out = output.data(); + QByteArray out = response.consoleStreamOutput; int markerPos = out.indexOf('"') + 1; // position of 'success marker' if (markerPos == 0 || out.at(markerPos) == 'f') { // 't' or 'f' @@ -1016,7 +1015,7 @@ void GdbEngine::handleDebuggingHelperValue3Classic(const GdbResponse &response) { if (response.resultClass == GdbResultDone) { WatchData data = response.cookie.value(); - QByteArray out = response.data.findChild("consolestreamoutput").data(); + QByteArray out = response.consoleStreamOutput; while (out.endsWith(' ') || out.endsWith('\n')) out.chop(1); QList list = out.split(' '); diff --git a/src/plugins/debugger/gdb/coregdbadapter.cpp b/src/plugins/debugger/gdb/coregdbadapter.cpp index 7527795c99e..6b80ce102c9 100644 --- a/src/plugins/debugger/gdb/coregdbadapter.cpp +++ b/src/plugins/debugger/gdb/coregdbadapter.cpp @@ -124,16 +124,16 @@ void CoreGdbAdapter::handleTemporaryTargetCore(const GdbResponse &response) return; } - GdbMi console = response.data.findChild("consolestreamoutput"); - int pos1 = console.data().indexOf('`'); - int pos2 = console.data().indexOf('\''); + QByteArray console = response.consoleStreamOutput; + int pos1 = console.indexOf('`'); + int pos2 = console.indexOf('\''); if (pos1 == -1 || pos2 == -1) { showMessage(tr("Attach to core failed."), StatusBar); m_engine->notifyEngineSetupFailed(); return; } - m_executable = console.data().mid(pos1 + 1, pos2 - pos1 - 1); + m_executable = console.mid(pos1 + 1, pos2 - pos1 - 1); // Strip off command line arguments. FIXME: make robust. int idx = m_executable.indexOf(_c(' ')); if (idx >= 0) diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index 85951ccfc63..f956c22cf87 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -171,8 +171,7 @@ static int ¤tToken() static QByteArray parsePlainConsoleStream(const GdbResponse &response) { - GdbMi output = response.data.findChild("consolestreamoutput"); - QByteArray out = output.data(); + QByteArray out = response.consoleStreamOutput; // FIXME: proper decoding needed if (out.endsWith("\\n")) out.chop(2); @@ -653,10 +652,8 @@ void GdbEngine::handleResponse(const QByteArray &buff) //qDebug() << "\nLOG STREAM:" + m_pendingLogStreamOutput; //qDebug() << "\nCONSOLE STREAM:" + m_pendingConsoleStreamOutput; - response.data.setStreamOutput("logstreamoutput", - m_pendingLogStreamOutput); - response.data.setStreamOutput("consolestreamoutput", - m_pendingConsoleStreamOutput); + response.logStreamOutput = m_pendingLogStreamOutput; + response.consoleStreamOutput = m_pendingConsoleStreamOutput; m_pendingLogStreamOutput.clear(); m_pendingConsoleStreamOutput.clear(); @@ -1688,7 +1685,7 @@ void GdbEngine::handleInfoProc(const GdbResponse &response) if (response.resultClass == GdbResultDone) { static QRegExp re(_("\\bprocess ([0-9]+)\n")); QTC_ASSERT(re.isValid(), return); - if (re.indexIn(_(response.data.findChild("consolestreamoutput").data())) != -1) + if (re.indexIn(_(response.consoleStreamOutput)) != -1) maybeHandleInferiorPidChanged(re.cap(1)); } } @@ -1700,8 +1697,7 @@ void GdbEngine::handleShowVersion(const GdbResponse &response) m_gdbVersion = 100; m_gdbBuildVersion = -1; m_isMacGdb = false; - GdbMi version = response.data.findChild("consolestreamoutput"); - QString msg = QString::fromLocal8Bit(version.data()); + QString msg = QString::fromLocal8Bit(response.consoleStreamOutput); extractGdbVersion(msg, &m_gdbVersion, &m_gdbBuildVersion, &m_isMacGdb); if (m_gdbVersion > 60500 && m_gdbVersion < 200000) @@ -1726,9 +1722,8 @@ void GdbEngine::handleHasPython(const GdbResponse &response) { if (response.resultClass == GdbResultDone) { m_hasPython = true; - GdbMi contents = response.data.findChild("consolestreamoutput"); GdbMi data; - data.fromStringMultiple(contents.data()); + data.fromStringMultiple(response.consoleStreamOutput); const GdbMi dumpers = data.findChild("dumpers"); foreach (const GdbMi &dumper, dumpers.children()) { QByteArray type = dumper.findChild("type").data(); @@ -2442,7 +2437,7 @@ void GdbEngine::handleWatchInsert(const GdbResponse &response) BreakHandler *handler = breakHandler(); BreakpointResponse br = handler->response(id); // "Hardware watchpoint 2: *0xbfffed40\n" - QByteArray ba = response.data.findChild("consolestreamoutput").data(); + QByteArray ba = response.consoleStreamOutput; GdbMi wpt = response.data.findChild("wpt"); if (wpt.isValid()) { // Mac yields: @@ -2517,6 +2512,7 @@ void GdbEngine::handleBreakInsert1(const GdbResponse &response) foreach (const GdbMi bkpt, response.data.children()) { nr = bkpt.findChild("number").data(); rid = BreakpointResponseId(nr); + QTC_ASSERT(rid.isValid(), continue); if (nr.contains('.')) { // A sub-breakpoint. BreakpointResponse sub; @@ -2664,8 +2660,7 @@ void GdbEngine::handleBreakListMultiple(const GdbResponse &response) { QTC_ASSERT(response.resultClass == GdbResultDone, /**/) const BreakpointModelId id = response.cookie.value(); - const QString str = QString::fromLocal8Bit( - response.data.findChild("consolestreamoutput").data()); + const QString str = QString::fromLocal8Bit(response.consoleStreamOutput); extractDataFromInfoBreak(str, id); } @@ -2720,7 +2715,7 @@ void GdbEngine::handleBreakIgnore(const GdbResponse &response) // // gdb 6.3 does not produce any console output QTC_ASSERT(response.resultClass == GdbResultDone, /**/) - QString msg = _(response.data.findChild("consolestreamoutput").data()); + //QString msg = _(response.consoleStreamOutput); BreakpointModelId id = response.cookie.value(); BreakHandler *handler = breakHandler(); BreakpointResponse br = handler->response(id); @@ -2890,7 +2885,7 @@ void GdbEngine::handleInfoLine(const GdbResponse &response) // Old-style output: "Line 1102 of \"simple/app.cpp\" starts // at address 0x80526aa <_Z10...+131> and ends at 0x80526b5 // <_Z10testQStackv+142>.\n" - QByteArray ba = response.data.findChild("consolestreamoutput").data(); + QByteArray ba = response.consoleStreamOutput; const BreakpointModelId id = response.cookie.value(); const int pos = ba.indexOf(' ', 5); if (ba.startsWith("Line ") && pos != -1) { @@ -3214,8 +3209,7 @@ void GdbEngine::handleModulesList(const GdbResponse &response) if (response.resultClass == GdbResultDone) { // That's console-based output, likely Linux or Windows, // but we can avoid the target dependency here. - QString data = QString::fromLocal8Bit( - response.data.findChild("consolestreamoutput").data()); + QString data = QString::fromLocal8Bit(response.consoleStreamOutput); QTextStream ts(&data, QIODevice::ReadOnly); while (!ts.atEnd()) { QString line = ts.readLine(); @@ -3391,7 +3385,7 @@ void GdbEngine::handleStackListFrames(const GdbResponse &response) if (!handleIt) { // That always happens on symbian gdb with // ^error,data={msg="Previous frame identical to this frame (corrupt stack?)" - // logstreamoutput="Previous frame identical to this frame (corrupt stack?)\n" + // logStreamOutput: "Previous frame identical to this frame (corrupt stack?)\n" //qDebug() << "LISTING STACK FAILED: " << response.toString(); reloadRegisters(); return; @@ -3517,9 +3511,8 @@ void GdbEngine::handleThreadListIds(const GdbResponse &response) void GdbEngine::handleThreadNames(const GdbResponse &response) { if (response.resultClass == GdbResultDone) { - GdbMi contents = response.data.findChild("consolestreamoutput"); GdbMi names; - names.fromString(contents.data()); + names.fromString(response.consoleStreamOutput); Threads threads = threadsHandler()->threads(); @@ -4419,28 +4412,26 @@ DisassemblerLines GdbEngine::parseMiDisassembler(const GdbMi &lines) return result; } -DisassemblerLines GdbEngine::parseCliDisassembler(const GdbMi &output) +DisassemblerLines GdbEngine::parseCliDisassembler(const QByteArray &output) { - const QString someSpace = _(" "); // First line is something like // "Dump of assembler code from 0xb7ff598f to 0xb7ff5a07:" DisassemblerLines dlines; - foreach (const QByteArray &line, output.data().split('\n')) + foreach (const QByteArray &line, output.split('\n')) dlines.appendUnparsed(_(line)); return dlines; } -DisassemblerLines GdbEngine::parseDisassembler(const GdbMi &data) +DisassemblerLines GdbEngine::parseDisassembler(const GdbResponse &response) { // Apple's gdb produces MI output even for CLI commands. // FIXME: Check whether wrapping this into -interpreter-exec console // (i.e. usgind the 'ConsoleCommand' GdbCommandFlag makes a // difference. - GdbMi lines = data.findChild("asm_insns"); + GdbMi lines = response.data.findChild("asm_insns"); if (lines.isValid()) return parseMiDisassembler(lines); - GdbMi output = data.findChild("consolestreamoutput"); - return parseCliDisassembler(output); + return parseCliDisassembler(response.consoleStreamOutput); } void GdbEngine::handleDisassemblerCheck(const GdbResponse &response) @@ -4454,7 +4445,7 @@ void GdbEngine::handleFetchDisassemblerByCliPointMixed(const GdbResponse &respon QTC_ASSERT(ac.agent, return); if (response.resultClass == GdbResultDone) { - DisassemblerLines dlines = parseDisassembler(response.data); + DisassemblerLines dlines = parseDisassembler(response); if (dlines.coversAddress(ac.agent->address())) { ac.agent->setContents(dlines); return; @@ -4469,7 +4460,7 @@ void GdbEngine::handleFetchDisassemblerByCliPointPlain(const GdbResponse &respon QTC_ASSERT(ac.agent, return); if (response.resultClass == GdbResultDone) { - DisassemblerLines dlines = parseDisassembler(response.data); + DisassemblerLines dlines = parseDisassembler(response); if (dlines.coversAddress(ac.agent->address())) { ac.agent->setContents(dlines); return; @@ -4487,7 +4478,7 @@ void GdbEngine::handleFetchDisassemblerByCliRangeMixed(const GdbResponse &respon QTC_ASSERT(ac.agent, return); if (response.resultClass == GdbResultDone) { - DisassemblerLines dlines = parseDisassembler(response.data); + DisassemblerLines dlines = parseDisassembler(response); if (dlines.coversAddress(ac.agent->address())) { ac.agent->setContents(dlines); return; @@ -4502,7 +4493,7 @@ void GdbEngine::handleFetchDisassemblerByCliRangePlain(const GdbResponse &respon QTC_ASSERT(ac.agent, return); if (response.resultClass == GdbResultDone) { - DisassemblerLines dlines = parseDisassembler(response.data); + DisassemblerLines dlines = parseDisassembler(response); if (dlines.size()) { ac.agent->setContents(dlines); return; @@ -5005,8 +4996,7 @@ void GdbEngine::handleCreateFullBacktrace(const GdbResponse &response) { if (response.resultClass == GdbResultDone) { debuggerCore()->openTextEditor(_("Backtrace $"), - _(response.data.findChild("consolestreamoutput").data() - + response.data.findChild("logstreamoutput").data())); + _(response.consoleStreamOutput + response.logStreamOutput)); } } @@ -5053,8 +5043,8 @@ void GdbEngine::handleSetQmlStepBreakpoint(const GdbResponse &response) { //QTC_ASSERT(state() == EngineRunRequested, qDebug() << state()); if (response.resultClass == GdbResultDone) { - // "{logstreamoutput="tbreak 'myns::QScript::FunctionWrapper::proxyCall'\n" - //,consolestreamoutput="Temporary breakpoint 1 at 0xf166e7: + // logStreamOutput: "tbreak 'myns::QScript::FunctionWrapper::proxyCall'\n" + // consoleStreamOutput: "Temporary breakpoint 1 at 0xf166e7: // file bridge/qscriptfunction.cpp, line 75.\n"} QByteArray ba = parsePlainConsoleStream(response); const int pos2 = ba.indexOf(" at 0x"); diff --git a/src/plugins/debugger/gdb/gdbengine.h b/src/plugins/debugger/gdb/gdbengine.h index 3c610ca0347..99d869e3884 100644 --- a/src/plugins/debugger/gdb/gdbengine.h +++ b/src/plugins/debugger/gdb/gdbengine.h @@ -568,9 +568,9 @@ private: ////////// View & Data Stuff ////////// //void handleFetchDisassemblerByMiRangePlain(const GdbResponse &response); void handleDisassemblerCheck(const GdbResponse &response); void handleBreakOnQFatal(const GdbResponse &response); - DisassemblerLines parseDisassembler(const GdbMi &data); - DisassemblerLines parseCliDisassembler(const GdbMi &lines); - DisassemblerLines parseMiDisassembler(const GdbMi &lines); + DisassemblerLines parseDisassembler(const GdbResponse &response); + DisassemblerLines parseCliDisassembler(const QByteArray &response); + DisassemblerLines parseMiDisassembler(const GdbMi &response); bool m_disassembleUsesComma; diff --git a/src/plugins/debugger/gdb/gdbmi.cpp b/src/plugins/debugger/gdb/gdbmi.cpp index 17abe886373..080916037a8 100644 --- a/src/plugins/debugger/gdb/gdbmi.cpp +++ b/src/plugins/debugger/gdb/gdbmi.cpp @@ -228,19 +228,6 @@ void GdbMi::parseList(const char *&from, const char *to) } } -void GdbMi::setStreamOutput(const QByteArray &name, const QByteArray &content) -{ - if (content.isEmpty()) - return; - GdbMi child; - child.m_type = Const; - child.m_name = name; - child.m_data = content; - m_children += child; - if (m_type == Invalid) - m_type = Tuple; -} - static QByteArray ind(int indent) { return QByteArray(2 * indent, ' '); diff --git a/src/plugins/debugger/gdb/gdbmi.h b/src/plugins/debugger/gdb/gdbmi.h index 09cc4cc98a9..c975ba1cadb 100644 --- a/src/plugins/debugger/gdb/gdbmi.h +++ b/src/plugins/debugger/gdb/gdbmi.h @@ -130,7 +130,6 @@ public: qulonglong toAddress() const; void fromString(const QByteArray &str); void fromStringMultiple(const QByteArray &str); - void setStreamOutput(const QByteArray &name, const QByteArray &content); private: friend class GdbResponse; @@ -170,6 +169,8 @@ public: GdbResultClass resultClass; GdbMi data; QVariant cookie; + QByteArray logStreamOutput; + QByteArray consoleStreamOutput; }; void extractGdbVersion(const QString &msg, diff --git a/src/plugins/debugger/gdb/pythongdbengine.cpp b/src/plugins/debugger/gdb/pythongdbengine.cpp index 50ffd4bc0d6..81d5ca302bf 100644 --- a/src/plugins/debugger/gdb/pythongdbengine.cpp +++ b/src/plugins/debugger/gdb/pythongdbengine.cpp @@ -135,7 +135,7 @@ void GdbEngine::handleStackFramePython(const GdbResponse &response) PRECONDITION; if (response.resultClass == GdbResultDone) { const bool partial = response.cookie.toBool(); - QByteArray out = response.data.findChild("consolestreamoutput").data(); + QByteArray out = response.consoleStreamOutput; while (out.endsWith(' ') || out.endsWith('\n')) out.chop(1); int pos = out.indexOf("data="); From a322bd606fa966a011896a1db36e240d27c1d60f Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 5 Jul 2011 18:26:01 +0200 Subject: [PATCH 106/143] Replace qt-info@nokia.com with info@qt.nokia.com Change-Id: I61e7cf189a1c4ea04e2a88a80a4f15e43cd3c018 Reviewed-on: http://codereview.qt.nokia.com/1187 Reviewed-by: Qt Sanity Bot Reviewed-by: Eike Ziller --- doc/api/coding-style.qdoc | 2 +- doc/api/external-tool-spec.qdoc | 2 +- doc/api/qtcreator-dev-wizards.qdoc | 2 +- doc/api/qtcreator-dev.qdoc | 2 +- doc/api/qtcreator-ui-text.qdoc | 2 +- doc/examples/doc_src_plugins.qdoc | 2 +- doc/maemodev.qdoc | 2 +- doc/qtcreator-faq.qdoc | 2 +- doc/symbiandev.qdoc | 2 +- share/qtcreator/dumper/dumper.h | 2 +- share/qtcreator/dumper/dumper_p.h | 2 +- share/qtcreator/dumper/test/main.cpp | 2 +- share/qtcreator/glsl/glsl_120.frag | 2 +- share/qtcreator/glsl/glsl_120.vert | 2 +- share/qtcreator/glsl/glsl_120_common.glsl | 2 +- share/qtcreator/glsl/glsl_es_100.frag | 2 +- share/qtcreator/glsl/glsl_es_100.vert | 2 +- share/qtcreator/glsl/glsl_es_100_common.glsl | 2 +- share/qtcreator/qml/qmldump/main.cpp | 2 +- share/qtcreator/qml/qmldump/qmlstreamwriter.cpp | 2 +- share/qtcreator/qml/qmldump/qmlstreamwriter.h | 2 +- .../qml/qmljsdebugger/editor/abstractliveedittool.cpp | 2 +- .../qtcreator/qml/qmljsdebugger/editor/abstractliveedittool.h | 2 +- .../qml/qmljsdebugger/editor/boundingrecthighlighter.cpp | 2 +- .../qml/qmljsdebugger/editor/boundingrecthighlighter.h | 2 +- share/qtcreator/qml/qmljsdebugger/editor/colorpickertool.cpp | 2 +- share/qtcreator/qml/qmljsdebugger/editor/colorpickertool.h | 2 +- share/qtcreator/qml/qmljsdebugger/editor/livelayeritem.cpp | 2 +- share/qtcreator/qml/qmljsdebugger/editor/livelayeritem.h | 2 +- .../editor/liverubberbandselectionmanipulator.cpp | 2 +- .../qmljsdebugger/editor/liverubberbandselectionmanipulator.h | 2 +- .../qml/qmljsdebugger/editor/liveselectionindicator.cpp | 2 +- .../qml/qmljsdebugger/editor/liveselectionindicator.h | 2 +- .../qml/qmljsdebugger/editor/liveselectionrectangle.cpp | 2 +- .../qml/qmljsdebugger/editor/liveselectionrectangle.h | 2 +- .../qtcreator/qml/qmljsdebugger/editor/liveselectiontool.cpp | 2 +- share/qtcreator/qml/qmljsdebugger/editor/liveselectiontool.h | 2 +- .../qmljsdebugger/editor/livesingleselectionmanipulator.cpp | 2 +- .../qml/qmljsdebugger/editor/livesingleselectionmanipulator.h | 2 +- share/qtcreator/qml/qmljsdebugger/editor/qmltoolbar.cpp | 2 +- share/qtcreator/qml/qmljsdebugger/editor/qmltoolbar.h | 2 +- .../qml/qmljsdebugger/editor/subcomponentmasklayeritem.cpp | 2 +- .../qml/qmljsdebugger/editor/subcomponentmasklayeritem.h | 2 +- share/qtcreator/qml/qmljsdebugger/editor/toolbarcolorbox.cpp | 2 +- share/qtcreator/qml/qmljsdebugger/editor/toolbarcolorbox.h | 2 +- share/qtcreator/qml/qmljsdebugger/editor/zoomtool.cpp | 2 +- share/qtcreator/qml/qmljsdebugger/editor/zoomtool.h | 2 +- share/qtcreator/qml/qmljsdebugger/include/jsdebuggeragent.h | 2 +- .../qml/qmljsdebugger/include/qdeclarativeinspectorservice.h | 2 +- .../qml/qmljsdebugger/include/qdeclarativeviewinspector.h | 2 +- .../qml/qmljsdebugger/include/qdeclarativeviewobserver.h | 2 +- .../qml/qmljsdebugger/include/qmlinspectorconstants.h | 2 +- .../qml/qmljsdebugger/include/qmljsdebugger_global.h | 2 +- .../include/qt_private/qdeclarativedebughelper_p.h | 2 +- .../include/qt_private/qdeclarativedebugservice_p.h | 2 +- .../qmljsdebugger/include/qt_private/qdeclarativestate_p.h | 2 +- share/qtcreator/qml/qmljsdebugger/jsdebuggeragent.cpp | 2 +- .../qml/qmljsdebugger/qdeclarativeinspectorservice.cpp | 2 +- .../qtcreator/qml/qmljsdebugger/qdeclarativeviewinspector.cpp | 2 +- .../qtcreator/qml/qmljsdebugger/qdeclarativeviewinspector_p.h | 2 +- share/qtcreator/qml/qmlobserver/Info.plist.in | 2 +- share/qtcreator/qml/qmlobserver/browser/Browser.qml | 2 +- share/qtcreator/qml/qmlobserver/deviceorientation.cpp | 2 +- share/qtcreator/qml/qmlobserver/deviceorientation.h | 2 +- .../qtcreator/qml/qmlobserver/deviceorientation_harmattan.cpp | 2 +- share/qtcreator/qml/qmlobserver/deviceorientation_maemo5.cpp | 2 +- share/qtcreator/qml/qmlobserver/deviceorientation_symbian.cpp | 2 +- share/qtcreator/qml/qmlobserver/loggerwidget.cpp | 2 +- share/qtcreator/qml/qmlobserver/loggerwidget.h | 2 +- share/qtcreator/qml/qmlobserver/main.cpp | 2 +- share/qtcreator/qml/qmlobserver/proxysettings.cpp | 2 +- share/qtcreator/qml/qmlobserver/proxysettings.h | 2 +- share/qtcreator/qml/qmlobserver/qdeclarativetester.cpp | 2 +- share/qtcreator/qml/qmlobserver/qdeclarativetester.h | 2 +- share/qtcreator/qml/qmlobserver/qmlruntime.cpp | 2 +- share/qtcreator/qml/qmlobserver/qmlruntime.h | 2 +- share/qtcreator/qml/qmlobserver/startup/Logo.qml | 2 +- share/qtcreator/qml/qmlobserver/startup/startup.qml | 2 +- share/qtcreator/qml/qmlobserver/texteditautoresizer_maemo5.h | 2 +- share/qtcreator/qml/qmlpuppet/commands/changeidscommand.cpp | 4 ++-- share/qtcreator/qml/qmlpuppet/commands/changeidscommand.h | 4 ++-- .../qml/qmlpuppet/commands/changenodesourcecommand.cpp | 2 +- .../qml/qmlpuppet/commands/changenodesourcecommand.h | 2 +- .../qml2puppet/instances/qt5informationnodeinstanceserver.cpp | 4 ++-- .../qml2puppet/instances/qt5informationnodeinstanceserver.h | 4 ++-- .../qml2puppet/instances/qt5nodeinstanceclientproxy.cpp | 4 ++-- .../qml2puppet/instances/qt5nodeinstanceclientproxy.h | 4 ++-- .../qmlpuppet/qml2puppet/instances/qt5nodeinstanceserver.cpp | 4 ++-- .../qmlpuppet/qml2puppet/instances/qt5nodeinstanceserver.h | 4 ++-- .../qml2puppet/instances/qt5previewnodeinstanceserver.cpp | 4 ++-- .../qml2puppet/instances/qt5previewnodeinstanceserver.h | 4 ++-- .../qml2puppet/instances/qt5rendernodeinstanceserver.cpp | 4 ++-- .../qml2puppet/instances/qt5rendernodeinstanceserver.h | 4 ++-- .../qml/qmlpuppet/qml2puppet/instances/sgitemnodeinstance.cpp | 4 ++-- .../qml/qmlpuppet/qml2puppet/instances/sgitemnodeinstance.h | 4 ++-- .../qmlpuppet/instances/qt4informationnodeinstanceserver.cpp | 4 ++-- .../qmlpuppet/instances/qt4informationnodeinstanceserver.h | 4 ++-- .../qmlpuppet/instances/qt4nodeinstanceclientproxy.cpp | 4 ++-- .../qmlpuppet/instances/qt4nodeinstanceclientproxy.h | 4 ++-- .../qmlpuppet/qmlpuppet/instances/qt4nodeinstanceserver.cpp | 4 ++-- .../qml/qmlpuppet/qmlpuppet/instances/qt4nodeinstanceserver.h | 4 ++-- .../qtcreator/templates/wizards/helloworld/wizard_sample.xml | 2 +- share/qtcreator/templates/wizards/listmodel/wizard_sample.xml | 2 +- share/qtcreator/templates/wizards/qml-extension/wizard.xml | 2 +- share/qtcreator/templates/wizards/qtcreatorplugin/wizard.xml | 2 +- .../wizards/scriptgeneratedproject/wizard_sample.xml | 2 +- share/qtcreator/translations/check-ts.pl | 2 +- share/qtcreator/welcomescreen/components/custom/Slider.qml | 4 ++-- .../components/styleitem/qdeclarativefolderlistmodel.cpp | 4 ++-- .../components/styleitem/qdeclarativefolderlistmodel.h | 4 ++-- .../welcomescreen/components/styleitem/qrangemodel.cpp | 4 ++-- .../welcomescreen/components/styleitem/qrangemodel.h | 4 ++-- .../welcomescreen/components/styleitem/qrangemodel_p.h | 4 ++-- .../welcomescreen/components/styleitem/qstyleitem.cpp | 2 +- .../qtcreator/welcomescreen/components/styleitem/qstyleitem.h | 2 +- .../welcomescreen/components/styleitem/qstyleplugin.cpp | 2 +- .../welcomescreen/components/styleitem/qstyleplugin.h | 2 +- share/qtcreator/welcomescreen/components/styleitem/qtmenu.cpp | 4 ++-- share/qtcreator/welcomescreen/components/styleitem/qtmenu.h | 4 ++-- .../welcomescreen/components/styleitem/qtmenubar.cpp | 2 +- .../qtcreator/welcomescreen/components/styleitem/qtmenubar.h | 2 +- .../welcomescreen/components/styleitem/qtmenuitem.cpp | 2 +- .../qtcreator/welcomescreen/components/styleitem/qtmenuitem.h | 2 +- .../welcomescreen/components/styleitem/qwheelarea.cpp | 2 +- .../qtcreator/welcomescreen/components/styleitem/qwheelarea.h | 4 ++-- src/libs/3rdparty/botan/build/botan/build.h | 2 +- src/libs/3rdparty/precompiled_headers/botan_pch.h | 2 +- src/libs/aggregation/examples/text/main.cpp | 2 +- src/libs/aggregation/examples/text/main.h | 2 +- src/libs/aggregation/examples/text/myinterfaces.h | 2 +- .../extensionsystem/test/manual/pluginview/plugindialog.cpp | 2 +- .../extensionsystem/test/manual/pluginview/plugindialog.h | 2 +- .../test/manual/pluginview/plugins/plugin1/plugin1.cpp | 2 +- .../test/manual/pluginview/plugins/plugin1/plugin1.h | 2 +- .../test/manual/pluginview/plugins/plugin2/plugin2.cpp | 2 +- .../test/manual/pluginview/plugins/plugin2/plugin2.h | 2 +- .../test/manual/pluginview/plugins/plugin3/plugin3.cpp | 2 +- .../test/manual/pluginview/plugins/plugin3/plugin3.h | 2 +- src/libs/qtconcurrent/QtConcurrentTools | 2 +- src/libs/utils/settingsutils.h | 2 +- src/plugins/coreplugin/infobar.cpp | 2 +- src/plugins/coreplugin/infobar.h | 2 +- src/plugins/cpptools/cpptoolssettings.h | 4 ++-- src/plugins/designer/qt_private/abstractnewformwidget_p.h | 2 +- src/plugins/designer/qt_private/abstractoptionspage_p.h | 2 +- src/plugins/designer/qt_private/abstractsettings_p.h | 2 +- src/plugins/designer/qt_private/formwindowbase_p.h | 2 +- src/plugins/designer/qt_private/iconloader_p.h | 2 +- src/plugins/designer/qt_private/pluginmanager_p.h | 2 +- .../designer/qt_private/qdesigner_formwindowmanager_p.h | 2 +- src/plugins/designer/qt_private/qdesigner_integration_p.h | 2 +- src/plugins/designer/qt_private/qsimpleresource_p.h | 2 +- src/plugins/designer/qt_private/qtresourcemodel_p.h | 2 +- src/plugins/designer/qt_private/shared_enums_p.h | 2 +- src/plugins/designer/qt_private/shared_global_p.h | 2 +- .../components/formeditor/formeditornodeinstanceview.cpp | 2 +- .../components/formeditor/formeditornodeinstanceview.h | 2 +- .../qmldesigner/components/formeditor/formeditorsubwindow.cpp | 2 +- .../qmldesigner/components/formeditor/formeditorsubwindow.h | 2 +- .../qmldesigner/components/formeditor/itemcreatortool.h | 2 +- .../qmldesigner/components/formeditor/manipulatorlayeritem.h | 2 +- src/plugins/qmldesigner/components/logger/logger.cpp | 2 +- src/plugins/qmldesigner/components/logger/logger.h | 2 +- .../components/propertyeditor/genericpropertieswidget.cpp | 2 +- .../components/propertyeditor/genericpropertieswidget.h | 2 +- .../components/stateseditor/stateseditorimageprovider.h | 2 +- .../qmldesigner/components/themeloader/qts60stylethemeio.cpp | 2 +- .../qmldesigner/components/themeloader/qts60stylethemeio.h | 2 +- .../designercore/exceptions/modificationgroupexception.cpp | 2 +- src/plugins/qmldesigner/designercore/include/anchorline.h | 2 +- .../qmldesigner/designercore/include/bytearraymodifier.h | 2 +- .../designercore/include/modificationgroupexception.h | 2 +- .../qmldesigner/designercore/include/modificationgrouptoken.h | 2 +- src/plugins/qmldesigner/designercore/include/nodeanchors.h | 2 +- .../qmldesigner/designercore/include/objectpropertybinding.h | 2 +- .../qmldesigner/designercore/include/propertybinding.h | 2 +- .../designercore/include/replaceallobjectdefinitionsvisitor.h | 2 +- src/plugins/qmldesigner/designercore/include/stylemanager.h | 2 +- .../qmldesigner/designercore/include/widgetplugin_helper.h | 2 +- .../qmldesigner/designercore/include/widgetqueryview.h | 2 +- src/plugins/qmldesigner/designercore/model/anchorline.cpp | 2 +- .../qmldesigner/designercore/model/bytearraymodifier.cpp | 2 +- src/plugins/qmldesigner/designercore/model/copyhelper.cpp | 2 +- src/plugins/qmldesigner/designercore/model/copyhelper.h | 2 +- src/plugins/qmldesigner/designercore/model/modelrewriter.cpp | 2 +- src/plugins/qmldesigner/designercore/model/modelrewriter.h | 2 +- .../qmldesigner/designercore/model/modificationgrouptoken.cpp | 2 +- src/plugins/qmldesigner/designercore/model/nodeanchors.cpp | 2 +- .../qmldesigner/designercore/model/objectpropertybinding.cpp | 2 +- src/plugins/qmldesigner/designercore/model/parsedqml.cpp | 2 +- src/plugins/qmldesigner/designercore/model/parsedqml.h | 2 +- src/plugins/qmldesigner/designercore/model/paster.cpp | 2 +- src/plugins/qmldesigner/designercore/model/paster.h | 2 +- .../qmldesigner/designercore/model/propertybinding.cpp | 2 +- src/plugins/qmldesigner/designercore/preview/stylemanager.cpp | 2 +- src/plugins/qmldesigner/qmlcontextpane.cpp | 2 +- src/plugins/qmldesigner/qmlcontextpane.h | 2 +- src/plugins/qmljstools/qmljstoolssettings.h | 4 ++-- src/plugins/qmlprofiler/codaqmlprofilerrunner.cpp | 4 ++-- src/plugins/qmlprofiler/remotelinuxqmlprofilerrunner.cpp | 4 ++-- src/plugins/qt4projectmanager/applicationlauncher.h | 2 +- .../qt4projectmanager/qt-s60/s60devicedebugruncontrol.cpp | 4 ++-- .../qt4projectmanager/qt-s60/s60devicedebugruncontrol.h | 4 ++-- src/plugins/qtestlib/qtestlibplugin.cpp | 2 +- src/plugins/qtestlib/qtestlibplugin.h | 2 +- src/plugins/regexp/regexpplugin.cpp | 2 +- src/plugins/regexp/regexpplugin.h | 2 +- src/plugins/regexp/regexpwindow.cpp | 2 +- src/plugins/regexp/regexpwindow.h | 2 +- src/plugins/regexp/settings.cpp | 2 +- src/plugins/regexp/settings.h | 2 +- src/shared/qrceditor/test/main.cpp | 2 +- src/shared/qrceditor/test/mainwindow.cpp | 2 +- src/shared/qrceditor/test/mainwindow.h | 2 +- src/shared/qtcreator_gui_pch.h | 2 +- src/shared/qtcreator_pch.h | 2 +- src/shared/qtsingleapplication/qtsinglecoreapplication.cpp | 2 +- src/shared/qtsingleapplication/qtsinglecoreapplication.h | 2 +- src/shared/scriptwrapper/interface_wrap_helpers.h | 2 +- src/tools/gen-cpp-ast/generate-ast.cpp | 2 +- src/tools/makespy/main.cpp | 2 +- src/tools/mkvisitor/main.cpp | 2 +- src/tools/qpatch/qpatch.cpp | 2 +- src/tools/qtcreatorwidgets/customwidget.h | 2 +- src/tools/qtcreatorwidgets/customwidgets.cpp | 2 +- src/tools/qtcreatorwidgets/customwidgets.h | 2 +- src/tools/qtlibspatcher/binpatch.cpp | 2 +- src/tools/qtlibspatcher/binpatch.h | 2 +- src/tools/qtlibspatcher/qtlibspatchermain.cpp | 2 +- tests/auto/aggregation/tst_aggregate.cpp | 2 +- tests/auto/changeset/tst_changeset.cpp | 2 +- tests/auto/cplusplus/ast/tst_ast.cpp | 2 +- tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp | 2 +- tests/auto/cplusplus/codegen/tst_codegen.cpp | 2 +- tests/auto/cplusplus/findusages/tst_findusages.cpp | 2 +- tests/auto/cplusplus/lookup/tst_lookup.cpp | 2 +- tests/auto/cplusplus/misc/tst_misc.cpp | 2 +- tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp | 2 +- tests/auto/cplusplus/semantic/tst_semantic.cpp | 2 +- tests/auto/cplusplus/simplifytypes/tst_simplifytypestest.cpp | 2 +- .../cplusplus/typeprettyprinter/tst_typeprettyprinter.cpp | 2 +- tests/auto/debugger/tst_dumpers.cpp | 2 +- tests/auto/debugger/tst_gdb.cpp | 2 +- tests/auto/debugger/tst_version.cpp | 2 +- tests/auto/environment/tst_environment.cpp | 2 +- .../pluginmanager/circularplugins/plugin1/plugin1.cpp | 2 +- .../pluginmanager/circularplugins/plugin1/plugin1.h | 2 +- .../pluginmanager/circularplugins/plugin2/plugin2.cpp | 2 +- .../pluginmanager/circularplugins/plugin2/plugin2.h | 2 +- .../pluginmanager/circularplugins/plugin3/plugin3.cpp | 2 +- .../pluginmanager/circularplugins/plugin3/plugin3.h | 2 +- .../pluginmanager/correctplugins1/plugin1/plugin1.cpp | 2 +- .../pluginmanager/correctplugins1/plugin1/plugin1.h | 2 +- .../pluginmanager/correctplugins1/plugin2/plugin2.cpp | 2 +- .../pluginmanager/correctplugins1/plugin2/plugin2.h | 2 +- .../pluginmanager/correctplugins1/plugin3/plugin3.cpp | 2 +- .../pluginmanager/correctplugins1/plugin3/plugin3.h | 2 +- .../auto/extensionsystem/pluginmanager/tst_pluginmanager.cpp | 2 +- .../auto/extensionsystem/pluginspec/testplugin/testplugin.cpp | 2 +- tests/auto/extensionsystem/pluginspec/testplugin/testplugin.h | 2 +- .../extensionsystem/pluginspec/testplugin/testplugin_global.h | 2 +- tests/auto/extensionsystem/pluginspec/tst_pluginspec.cpp | 2 +- tests/auto/fakevim/tst_fakevim.cpp | 2 +- tests/auto/filesearch/tst_filesearch.cpp | 2 +- .../highlighterengine/basetextdocumentlayout.h | 2 +- tests/auto/generichighlighter/highlighterengine/formats.cpp | 2 +- tests/auto/generichighlighter/highlighterengine/formats.h | 2 +- .../generichighlighter/highlighterengine/highlightermock.cpp | 2 +- .../generichighlighter/highlighterengine/highlightermock.h | 2 +- .../generichighlighter/highlighterengine/syntaxhighlighter.h | 2 +- tests/auto/generichighlighter/highlighterengine/tabsettings.h | 2 +- .../highlighterengine/tst_highlighterengine.cpp | 2 +- .../generichighlighter/specificrules/tst_specificrules.cpp | 2 +- tests/auto/icheckbuild/ichecklib.cpp | 2 +- tests/auto/icheckbuild/ichecklib.h | 2 +- tests/auto/icheckbuild/ichecklib_global.h | 2 +- tests/auto/icheckbuild/parsemanager.cpp | 2 +- tests/auto/icheckbuild/parsemanager.h | 2 +- tests/auto/icheckbuild/tst_icheckbuild.cpp | 2 +- tests/auto/ioutils/tst_ioutils.cpp | 2 +- tests/auto/profilewriter/tst_profilewriter.cpp | 2 +- tests/auto/qml/codemodel/basic/tst_basic.cpp | 2 +- tests/auto/qml/qmldesigner/bauhaustests/testbauhaus.cpp | 2 +- tests/auto/qml/qmldesigner/bauhaustests/testbauhaus.h | 2 +- tests/auto/qml/qmldesigner/common/statichelpers.cpp | 2 +- tests/auto/qml/qmldesigner/coretests/testrewriterview.cpp | 2 +- tests/auto/qml/qmldesigner/coretests/testrewriterview.h | 2 +- tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp | 2 +- tests/auto/qml/qmldesigner/coretests/tst_testcore.h | 2 +- .../qmldesigner/propertyeditortests/testpropertyeditor.cpp | 2 +- .../qml/qmldesigner/propertyeditortests/testpropertyeditor.h | 2 +- tests/auto/qml/qmldesigner/testview.cpp | 2 +- tests/auto/qml/qmldesigner/testview.h | 2 +- .../qml/qmleditor/qmlcodeformatter/tst_qmlcodeformatter.cpp | 2 +- tests/auto/qml/qmleditor/qmllookup/tst_qmllookup.cpp | 2 +- .../auto/qml/qmlprojectmanager/fileformat/tst_fileformat.cpp | 2 +- tests/auto/qtcprocess/tst_qtcprocess.cpp | 2 +- tests/auto/utils_stringutils/tst_stringutils.cpp | 2 +- tests/manual/appwizards/helpers.cpp | 2 +- tests/manual/appwizards/main.cpp | 2 +- tests/manual/cplusplus-frontend/main.cpp | 2 +- tests/manual/cplusplus-frontend/tests/t1.cpp | 2 +- tests/manual/cplusplus-tools/detail/header.h | 2 +- tests/manual/cplusplus-tools/detail/source.cpp | 2 +- tests/manual/cplusplus-tools/dummy.cpp | 2 +- tests/manual/cplusplus-tools/dummy.h | 2 +- tests/manual/cplusplus-tools/main.cpp | 2 +- tests/manual/cppquickfix/completeswitchcasestatement.cpp | 2 +- tests/manual/cppquickfix/convertnumericliteral.cpp | 2 +- tests/manual/dockwidgets/main.cpp | 2 +- tests/manual/dockwidgets/mainwindow.cpp | 2 +- tests/manual/dockwidgets/mainwindow.h | 2 +- tests/manual/fakevim/main.cpp | 2 +- tests/manual/gdbdebugger/boost/main.cpp | 2 +- tests/manual/gdbdebugger/gui/mainwindow.cpp | 2 +- tests/manual/gdbdebugger/gui/mainwindow.h | 2 +- tests/manual/gdbdebugger/gui/tst_gui.cpp | 2 +- tests/manual/gdbdebugger/helper/main.cpp | 2 +- tests/manual/gdbdebugger/script/math.js | 2 +- .../manual/gdbdebugger/simple/deep/deep/simple_gdbtest_app.h | 4 ++-- tests/manual/gdbdebugger/simple/simple_gdbtest_app.cpp | 2 +- tests/manual/gdbdebugger/simple/simple_gdbtest_plugin.cpp | 2 +- tests/manual/gdbdebugger/spacy path/app with space.cpp | 2 +- tests/manual/gdbdebugger/spacy path/plugin with space.cpp | 2 +- tests/manual/gdbdebugger/spacy-file/app with space.cpp | 2 +- tests/manual/gdbdebugger/spacy-file/plugin with space.cpp | 2 +- tests/manual/plain-cplusplus/Preprocessor.cpp | 2 +- tests/manual/plain-cplusplus/Preprocessor.h | 2 +- tests/manual/plain-cplusplus/main.cpp | 2 +- tests/manual/preprocessor/main.cpp | 2 +- tests/manual/process/main.cpp | 2 +- tests/manual/process/mainwindow.cpp | 2 +- tests/manual/process/mainwindow.h | 2 +- tests/manual/progressmanager/main.cpp | 2 +- tests/manual/progressmanager/roundprogress.cpp | 2 +- tests/manual/progressmanager/roundprogress.h | 2 +- tests/manual/proparser/main.cpp | 2 +- tests/manual/ssh/errorhandling/main.cpp | 2 +- tests/manual/ssh/remoteprocess/argumentscollector.cpp | 2 +- tests/manual/ssh/remoteprocess/argumentscollector.h | 2 +- tests/manual/ssh/remoteprocess/main.cpp | 2 +- tests/manual/ssh/remoteprocess/remoteprocesstest.cpp | 2 +- tests/manual/ssh/remoteprocess/remoteprocesstest.h | 2 +- tests/manual/ssh/sftp/argumentscollector.cpp | 2 +- tests/manual/ssh/sftp/argumentscollector.h | 2 +- tests/manual/ssh/sftp/main.cpp | 2 +- tests/manual/ssh/sftp/parameters.h | 2 +- tests/manual/ssh/sftp/sftptest.cpp | 2 +- tests/manual/ssh/sftp/sftptest.h | 2 +- tests/tools/codaclient/codaclientapplication.cpp | 2 +- tests/tools/codaclient/codaclientapplication.h | 2 +- tests/tools/codaclient/main.cpp | 2 +- tests/tools/cplusplus-dump/dumpers.inc | 2 +- tests/tools/cplusplus-dump/main.cpp | 2 +- tests/tools/qml-ast2dot/main.cpp | 2 +- tests/tools/qtquickappblaster/main.cpp | 2 +- tests/valgrind/callgrind/callgrindparsertests.cpp | 4 ++-- tests/valgrind/callgrind/callgrindparsertests.h | 4 ++-- tests/valgrind/callgrind/modeltest.cpp | 4 ++-- tests/valgrind/callgrind/modeltest.h | 2 +- tests/valgrind/memcheck/modeldemo.cpp | 2 +- tests/valgrind/memcheck/modeldemo.h | 2 +- tests/valgrind/memcheck/testrunner.cpp | 2 +- tests/valgrind/memcheck/testrunner.h | 2 +- 364 files changed, 403 insertions(+), 403 deletions(-) diff --git a/doc/api/coding-style.qdoc b/doc/api/coding-style.qdoc index 82e07312d07..40a2bdec3af 100644 --- a/doc/api/coding-style.qdoc +++ b/doc/api/coding-style.qdoc @@ -15,7 +15,7 @@ ** file. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** ****************************************************************************/ diff --git a/doc/api/external-tool-spec.qdoc b/doc/api/external-tool-spec.qdoc index 8e6362a9a99..8706a6c916a 100644 --- a/doc/api/external-tool-spec.qdoc +++ b/doc/api/external-tool-spec.qdoc @@ -15,7 +15,7 @@ ** file. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** ****************************************************************************/ diff --git a/doc/api/qtcreator-dev-wizards.qdoc b/doc/api/qtcreator-dev-wizards.qdoc index 30bbf227517..fdf122cc7e3 100644 --- a/doc/api/qtcreator-dev-wizards.qdoc +++ b/doc/api/qtcreator-dev-wizards.qdoc @@ -15,7 +15,7 @@ ** file. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** ****************************************************************************/ diff --git a/doc/api/qtcreator-dev.qdoc b/doc/api/qtcreator-dev.qdoc index 864dfd91044..38379ab01b1 100644 --- a/doc/api/qtcreator-dev.qdoc +++ b/doc/api/qtcreator-dev.qdoc @@ -15,7 +15,7 @@ ** file. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** ****************************************************************************/ diff --git a/doc/api/qtcreator-ui-text.qdoc b/doc/api/qtcreator-ui-text.qdoc index ccb8334b6c4..65074d03172 100644 --- a/doc/api/qtcreator-ui-text.qdoc +++ b/doc/api/qtcreator-ui-text.qdoc @@ -15,7 +15,7 @@ ** file. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** ****************************************************************************/ diff --git a/doc/examples/doc_src_plugins.qdoc b/doc/examples/doc_src_plugins.qdoc index 3559130940d..ef4a938b95b 100644 --- a/doc/examples/doc_src_plugins.qdoc +++ b/doc/examples/doc_src_plugins.qdoc @@ -15,7 +15,7 @@ ** file. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** ****************************************************************************/ diff --git a/doc/maemodev.qdoc b/doc/maemodev.qdoc index e6c92d2e2e7..c7ef5739fad 100644 --- a/doc/maemodev.qdoc +++ b/doc/maemodev.qdoc @@ -15,7 +15,7 @@ ** file. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** ****************************************************************************/ diff --git a/doc/qtcreator-faq.qdoc b/doc/qtcreator-faq.qdoc index d212cde60b4..75226113704 100644 --- a/doc/qtcreator-faq.qdoc +++ b/doc/qtcreator-faq.qdoc @@ -15,7 +15,7 @@ ** file. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** ****************************************************************************/ diff --git a/doc/symbiandev.qdoc b/doc/symbiandev.qdoc index 43a2ca7ae9d..dbe2a956d1a 100644 --- a/doc/symbiandev.qdoc +++ b/doc/symbiandev.qdoc @@ -15,7 +15,7 @@ ** file. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** ****************************************************************************/ diff --git a/share/qtcreator/dumper/dumper.h b/share/qtcreator/dumper/dumper.h index 644c9b92012..3a0bda0d852 100644 --- a/share/qtcreator/dumper/dumper.h +++ b/share/qtcreator/dumper/dumper.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/dumper/dumper_p.h b/share/qtcreator/dumper/dumper_p.h index 35b24edbff4..b1b1ad53caf 100644 --- a/share/qtcreator/dumper/dumper_p.h +++ b/share/qtcreator/dumper/dumper_p.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/dumper/test/main.cpp b/share/qtcreator/dumper/test/main.cpp index 00eb317c2ca..fc1b3e8a20c 100644 --- a/share/qtcreator/dumper/test/main.cpp +++ b/share/qtcreator/dumper/test/main.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/glsl/glsl_120.frag b/share/qtcreator/glsl/glsl_120.frag index 93fa2678f6e..6cbf1e71560 100644 --- a/share/qtcreator/glsl/glsl_120.frag +++ b/share/qtcreator/glsl/glsl_120.frag @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/glsl/glsl_120.vert b/share/qtcreator/glsl/glsl_120.vert index af1af6c8c4a..ba307db9132 100644 --- a/share/qtcreator/glsl/glsl_120.vert +++ b/share/qtcreator/glsl/glsl_120.vert @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/glsl/glsl_120_common.glsl b/share/qtcreator/glsl/glsl_120_common.glsl index 297d1048884..387afcc25c3 100644 --- a/share/qtcreator/glsl/glsl_120_common.glsl +++ b/share/qtcreator/glsl/glsl_120_common.glsl @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/glsl/glsl_es_100.frag b/share/qtcreator/glsl/glsl_es_100.frag index e499ff7245a..55393153ba0 100644 --- a/share/qtcreator/glsl/glsl_es_100.frag +++ b/share/qtcreator/glsl/glsl_es_100.frag @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/glsl/glsl_es_100.vert b/share/qtcreator/glsl/glsl_es_100.vert index ff2d5325388..094e78df1dc 100644 --- a/share/qtcreator/glsl/glsl_es_100.vert +++ b/share/qtcreator/glsl/glsl_es_100.vert @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/glsl/glsl_es_100_common.glsl b/share/qtcreator/glsl/glsl_es_100_common.glsl index 1dd90c07edc..0551a38d6b6 100644 --- a/share/qtcreator/glsl/glsl_es_100_common.glsl +++ b/share/qtcreator/glsl/glsl_es_100_common.glsl @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmldump/main.cpp b/share/qtcreator/qml/qmldump/main.cpp index ef3f728c262..a018e6e07e7 100644 --- a/share/qtcreator/qml/qmldump/main.cpp +++ b/share/qtcreator/qml/qmldump/main.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmldump/qmlstreamwriter.cpp b/share/qtcreator/qml/qmldump/qmlstreamwriter.cpp index a7105f65bcb..2e2726b6f0b 100644 --- a/share/qtcreator/qml/qmldump/qmlstreamwriter.cpp +++ b/share/qtcreator/qml/qmldump/qmlstreamwriter.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmldump/qmlstreamwriter.h b/share/qtcreator/qml/qmldump/qmlstreamwriter.h index 1a447d7de60..95c409d9a8d 100644 --- a/share/qtcreator/qml/qmldump/qmlstreamwriter.h +++ b/share/qtcreator/qml/qmldump/qmlstreamwriter.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmljsdebugger/editor/abstractliveedittool.cpp b/share/qtcreator/qml/qmljsdebugger/editor/abstractliveedittool.cpp index 58afa5a9e25..b6d6819c7e4 100644 --- a/share/qtcreator/qml/qmljsdebugger/editor/abstractliveedittool.cpp +++ b/share/qtcreator/qml/qmljsdebugger/editor/abstractliveedittool.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmljsdebugger/editor/abstractliveedittool.h b/share/qtcreator/qml/qmljsdebugger/editor/abstractliveedittool.h index 8fbfc9af474..95a76c94cdf 100644 --- a/share/qtcreator/qml/qmljsdebugger/editor/abstractliveedittool.h +++ b/share/qtcreator/qml/qmljsdebugger/editor/abstractliveedittool.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmljsdebugger/editor/boundingrecthighlighter.cpp b/share/qtcreator/qml/qmljsdebugger/editor/boundingrecthighlighter.cpp index 9580d0d1318..013d28bbec5 100644 --- a/share/qtcreator/qml/qmljsdebugger/editor/boundingrecthighlighter.cpp +++ b/share/qtcreator/qml/qmljsdebugger/editor/boundingrecthighlighter.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmljsdebugger/editor/boundingrecthighlighter.h b/share/qtcreator/qml/qmljsdebugger/editor/boundingrecthighlighter.h index 3bb8ef7fd82..991c9fa913c 100644 --- a/share/qtcreator/qml/qmljsdebugger/editor/boundingrecthighlighter.h +++ b/share/qtcreator/qml/qmljsdebugger/editor/boundingrecthighlighter.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmljsdebugger/editor/colorpickertool.cpp b/share/qtcreator/qml/qmljsdebugger/editor/colorpickertool.cpp index 2ccc2a79d83..1612991d363 100644 --- a/share/qtcreator/qml/qmljsdebugger/editor/colorpickertool.cpp +++ b/share/qtcreator/qml/qmljsdebugger/editor/colorpickertool.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmljsdebugger/editor/colorpickertool.h b/share/qtcreator/qml/qmljsdebugger/editor/colorpickertool.h index d176dde093b..5898ab0f79f 100644 --- a/share/qtcreator/qml/qmljsdebugger/editor/colorpickertool.h +++ b/share/qtcreator/qml/qmljsdebugger/editor/colorpickertool.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmljsdebugger/editor/livelayeritem.cpp b/share/qtcreator/qml/qmljsdebugger/editor/livelayeritem.cpp index 5a8b8e10209..093d9f0a9b7 100644 --- a/share/qtcreator/qml/qmljsdebugger/editor/livelayeritem.cpp +++ b/share/qtcreator/qml/qmljsdebugger/editor/livelayeritem.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmljsdebugger/editor/livelayeritem.h b/share/qtcreator/qml/qmljsdebugger/editor/livelayeritem.h index d5fe730a4c8..15a476e08e6 100644 --- a/share/qtcreator/qml/qmljsdebugger/editor/livelayeritem.h +++ b/share/qtcreator/qml/qmljsdebugger/editor/livelayeritem.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmljsdebugger/editor/liverubberbandselectionmanipulator.cpp b/share/qtcreator/qml/qmljsdebugger/editor/liverubberbandselectionmanipulator.cpp index b7a8ade5d38..3ac067e1475 100644 --- a/share/qtcreator/qml/qmljsdebugger/editor/liverubberbandselectionmanipulator.cpp +++ b/share/qtcreator/qml/qmljsdebugger/editor/liverubberbandselectionmanipulator.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmljsdebugger/editor/liverubberbandselectionmanipulator.h b/share/qtcreator/qml/qmljsdebugger/editor/liverubberbandselectionmanipulator.h index 052284a4096..321d47e060b 100644 --- a/share/qtcreator/qml/qmljsdebugger/editor/liverubberbandselectionmanipulator.h +++ b/share/qtcreator/qml/qmljsdebugger/editor/liverubberbandselectionmanipulator.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmljsdebugger/editor/liveselectionindicator.cpp b/share/qtcreator/qml/qmljsdebugger/editor/liveselectionindicator.cpp index fb118507455..7654d43bea3 100644 --- a/share/qtcreator/qml/qmljsdebugger/editor/liveselectionindicator.cpp +++ b/share/qtcreator/qml/qmljsdebugger/editor/liveselectionindicator.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmljsdebugger/editor/liveselectionindicator.h b/share/qtcreator/qml/qmljsdebugger/editor/liveselectionindicator.h index 78df3cff4b5..2f75df3a4fd 100644 --- a/share/qtcreator/qml/qmljsdebugger/editor/liveselectionindicator.h +++ b/share/qtcreator/qml/qmljsdebugger/editor/liveselectionindicator.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmljsdebugger/editor/liveselectionrectangle.cpp b/share/qtcreator/qml/qmljsdebugger/editor/liveselectionrectangle.cpp index 98605e627ba..194aa61d9a5 100644 --- a/share/qtcreator/qml/qmljsdebugger/editor/liveselectionrectangle.cpp +++ b/share/qtcreator/qml/qmljsdebugger/editor/liveselectionrectangle.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmljsdebugger/editor/liveselectionrectangle.h b/share/qtcreator/qml/qmljsdebugger/editor/liveselectionrectangle.h index 1b179e62ce9..8b33ab20201 100644 --- a/share/qtcreator/qml/qmljsdebugger/editor/liveselectionrectangle.h +++ b/share/qtcreator/qml/qmljsdebugger/editor/liveselectionrectangle.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmljsdebugger/editor/liveselectiontool.cpp b/share/qtcreator/qml/qmljsdebugger/editor/liveselectiontool.cpp index f9b89021329..042b4c3bbe8 100644 --- a/share/qtcreator/qml/qmljsdebugger/editor/liveselectiontool.cpp +++ b/share/qtcreator/qml/qmljsdebugger/editor/liveselectiontool.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmljsdebugger/editor/liveselectiontool.h b/share/qtcreator/qml/qmljsdebugger/editor/liveselectiontool.h index 4f843e44778..0b44225125c 100644 --- a/share/qtcreator/qml/qmljsdebugger/editor/liveselectiontool.h +++ b/share/qtcreator/qml/qmljsdebugger/editor/liveselectiontool.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmljsdebugger/editor/livesingleselectionmanipulator.cpp b/share/qtcreator/qml/qmljsdebugger/editor/livesingleselectionmanipulator.cpp index bdf8abcb27e..dc3c8324497 100644 --- a/share/qtcreator/qml/qmljsdebugger/editor/livesingleselectionmanipulator.cpp +++ b/share/qtcreator/qml/qmljsdebugger/editor/livesingleselectionmanipulator.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmljsdebugger/editor/livesingleselectionmanipulator.h b/share/qtcreator/qml/qmljsdebugger/editor/livesingleselectionmanipulator.h index 2850e624edb..fa4ef942439 100644 --- a/share/qtcreator/qml/qmljsdebugger/editor/livesingleselectionmanipulator.h +++ b/share/qtcreator/qml/qmljsdebugger/editor/livesingleselectionmanipulator.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmljsdebugger/editor/qmltoolbar.cpp b/share/qtcreator/qml/qmljsdebugger/editor/qmltoolbar.cpp index 02ec9d1b06e..3b448b1a0b5 100644 --- a/share/qtcreator/qml/qmljsdebugger/editor/qmltoolbar.cpp +++ b/share/qtcreator/qml/qmljsdebugger/editor/qmltoolbar.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmljsdebugger/editor/qmltoolbar.h b/share/qtcreator/qml/qmljsdebugger/editor/qmltoolbar.h index b1bf62f9e9d..01ea8c4c433 100644 --- a/share/qtcreator/qml/qmljsdebugger/editor/qmltoolbar.h +++ b/share/qtcreator/qml/qmljsdebugger/editor/qmltoolbar.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmljsdebugger/editor/subcomponentmasklayeritem.cpp b/share/qtcreator/qml/qmljsdebugger/editor/subcomponentmasklayeritem.cpp index 33674c0efed..73fca72661a 100644 --- a/share/qtcreator/qml/qmljsdebugger/editor/subcomponentmasklayeritem.cpp +++ b/share/qtcreator/qml/qmljsdebugger/editor/subcomponentmasklayeritem.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmljsdebugger/editor/subcomponentmasklayeritem.h b/share/qtcreator/qml/qmljsdebugger/editor/subcomponentmasklayeritem.h index 02c56a3b193..c9b0d95a9fd 100644 --- a/share/qtcreator/qml/qmljsdebugger/editor/subcomponentmasklayeritem.h +++ b/share/qtcreator/qml/qmljsdebugger/editor/subcomponentmasklayeritem.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmljsdebugger/editor/toolbarcolorbox.cpp b/share/qtcreator/qml/qmljsdebugger/editor/toolbarcolorbox.cpp index 76c7df73912..a6a6c1bc3a4 100644 --- a/share/qtcreator/qml/qmljsdebugger/editor/toolbarcolorbox.cpp +++ b/share/qtcreator/qml/qmljsdebugger/editor/toolbarcolorbox.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmljsdebugger/editor/toolbarcolorbox.h b/share/qtcreator/qml/qmljsdebugger/editor/toolbarcolorbox.h index 26029bb46f2..0db223a7c2d 100644 --- a/share/qtcreator/qml/qmljsdebugger/editor/toolbarcolorbox.h +++ b/share/qtcreator/qml/qmljsdebugger/editor/toolbarcolorbox.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmljsdebugger/editor/zoomtool.cpp b/share/qtcreator/qml/qmljsdebugger/editor/zoomtool.cpp index a2683092b02..c15cd6189da 100644 --- a/share/qtcreator/qml/qmljsdebugger/editor/zoomtool.cpp +++ b/share/qtcreator/qml/qmljsdebugger/editor/zoomtool.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmljsdebugger/editor/zoomtool.h b/share/qtcreator/qml/qmljsdebugger/editor/zoomtool.h index 7eb35bdaef0..8d25d86c7b2 100644 --- a/share/qtcreator/qml/qmljsdebugger/editor/zoomtool.h +++ b/share/qtcreator/qml/qmljsdebugger/editor/zoomtool.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmljsdebugger/include/jsdebuggeragent.h b/share/qtcreator/qml/qmljsdebugger/include/jsdebuggeragent.h index ba7b3a92a26..af2a4806c23 100644 --- a/share/qtcreator/qml/qmljsdebugger/include/jsdebuggeragent.h +++ b/share/qtcreator/qml/qmljsdebugger/include/jsdebuggeragent.h @@ -25,7 +25,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmljsdebugger/include/qdeclarativeinspectorservice.h b/share/qtcreator/qml/qmljsdebugger/include/qdeclarativeinspectorservice.h index c28f0b50ba8..9c4f74c8f54 100644 --- a/share/qtcreator/qml/qmljsdebugger/include/qdeclarativeinspectorservice.h +++ b/share/qtcreator/qml/qmljsdebugger/include/qdeclarativeinspectorservice.h @@ -25,7 +25,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmljsdebugger/include/qdeclarativeviewinspector.h b/share/qtcreator/qml/qmljsdebugger/include/qdeclarativeviewinspector.h index 6ba0427187e..134d642ccb5 100644 --- a/share/qtcreator/qml/qmljsdebugger/include/qdeclarativeviewinspector.h +++ b/share/qtcreator/qml/qmljsdebugger/include/qdeclarativeviewinspector.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmljsdebugger/include/qdeclarativeviewobserver.h b/share/qtcreator/qml/qmljsdebugger/include/qdeclarativeviewobserver.h index 7621a9e8d7e..e5af0328f80 100644 --- a/share/qtcreator/qml/qmljsdebugger/include/qdeclarativeviewobserver.h +++ b/share/qtcreator/qml/qmljsdebugger/include/qdeclarativeviewobserver.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmljsdebugger/include/qmlinspectorconstants.h b/share/qtcreator/qml/qmljsdebugger/include/qmlinspectorconstants.h index eb5ac317e87..a777a4abaa4 100644 --- a/share/qtcreator/qml/qmljsdebugger/include/qmlinspectorconstants.h +++ b/share/qtcreator/qml/qmljsdebugger/include/qmlinspectorconstants.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmljsdebugger/include/qmljsdebugger_global.h b/share/qtcreator/qml/qmljsdebugger/include/qmljsdebugger_global.h index 19f65f7d746..bb364aa5ef0 100644 --- a/share/qtcreator/qml/qmljsdebugger/include/qmljsdebugger_global.h +++ b/share/qtcreator/qml/qmljsdebugger/include/qmljsdebugger_global.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmljsdebugger/include/qt_private/qdeclarativedebughelper_p.h b/share/qtcreator/qml/qmljsdebugger/include/qt_private/qdeclarativedebughelper_p.h index a883d962658..ae53ea65d23 100644 --- a/share/qtcreator/qml/qmljsdebugger/include/qt_private/qdeclarativedebughelper_p.h +++ b/share/qtcreator/qml/qmljsdebugger/include/qt_private/qdeclarativedebughelper_p.h @@ -25,7 +25,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmljsdebugger/include/qt_private/qdeclarativedebugservice_p.h b/share/qtcreator/qml/qmljsdebugger/include/qt_private/qdeclarativedebugservice_p.h index e3771b735e5..3ae834a39c1 100644 --- a/share/qtcreator/qml/qmljsdebugger/include/qt_private/qdeclarativedebugservice_p.h +++ b/share/qtcreator/qml/qmljsdebugger/include/qt_private/qdeclarativedebugservice_p.h @@ -25,7 +25,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmljsdebugger/include/qt_private/qdeclarativestate_p.h b/share/qtcreator/qml/qmljsdebugger/include/qt_private/qdeclarativestate_p.h index b864fc04467..58e064238bd 100644 --- a/share/qtcreator/qml/qmljsdebugger/include/qt_private/qdeclarativestate_p.h +++ b/share/qtcreator/qml/qmljsdebugger/include/qt_private/qdeclarativestate_p.h @@ -25,7 +25,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmljsdebugger/jsdebuggeragent.cpp b/share/qtcreator/qml/qmljsdebugger/jsdebuggeragent.cpp index 958012d92ef..770f5313484 100644 --- a/share/qtcreator/qml/qmljsdebugger/jsdebuggeragent.cpp +++ b/share/qtcreator/qml/qmljsdebugger/jsdebuggeragent.cpp @@ -25,7 +25,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmljsdebugger/qdeclarativeinspectorservice.cpp b/share/qtcreator/qml/qmljsdebugger/qdeclarativeinspectorservice.cpp index b3c94ec6b0a..b55628ab225 100644 --- a/share/qtcreator/qml/qmljsdebugger/qdeclarativeinspectorservice.cpp +++ b/share/qtcreator/qml/qmljsdebugger/qdeclarativeinspectorservice.cpp @@ -25,7 +25,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmljsdebugger/qdeclarativeviewinspector.cpp b/share/qtcreator/qml/qmljsdebugger/qdeclarativeviewinspector.cpp index 946d3f2d8b1..235a359291c 100644 --- a/share/qtcreator/qml/qmljsdebugger/qdeclarativeviewinspector.cpp +++ b/share/qtcreator/qml/qmljsdebugger/qdeclarativeviewinspector.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmljsdebugger/qdeclarativeviewinspector_p.h b/share/qtcreator/qml/qmljsdebugger/qdeclarativeviewinspector_p.h index ed2e007cc20..356e39f29be 100644 --- a/share/qtcreator/qml/qmljsdebugger/qdeclarativeviewinspector_p.h +++ b/share/qtcreator/qml/qmljsdebugger/qdeclarativeviewinspector_p.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmlobserver/Info.plist.in b/share/qtcreator/qml/qmlobserver/Info.plist.in index d8900989ae3..5ca16668c0d 100644 --- a/share/qtcreator/qml/qmlobserver/Info.plist.in +++ b/share/qtcreator/qml/qmlobserver/Info.plist.in @@ -28,7 +28,7 @@ Alternatively, this file may be used in accordance with the terms and conditions contained in a signed written agreement between you and Nokia. If you have questions regarding the use of this file, please contact -Nokia at qt-info@nokia.com. +Nokia at info@qt.nokia.com. CFBundleIconFile @ICON@ CFBundleIdentifier diff --git a/share/qtcreator/qml/qmlobserver/browser/Browser.qml b/share/qtcreator/qml/qmlobserver/browser/Browser.qml index 295d049becb..98e8374ebdf 100644 --- a/share/qtcreator/qml/qmlobserver/browser/Browser.qml +++ b/share/qtcreator/qml/qmlobserver/browser/Browser.qml @@ -25,7 +25,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmlobserver/deviceorientation.cpp b/share/qtcreator/qml/qmlobserver/deviceorientation.cpp index f172869440f..6d2cf2be747 100644 --- a/share/qtcreator/qml/qmlobserver/deviceorientation.cpp +++ b/share/qtcreator/qml/qmlobserver/deviceorientation.cpp @@ -25,7 +25,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmlobserver/deviceorientation.h b/share/qtcreator/qml/qmlobserver/deviceorientation.h index 21ed9702b4f..45e5c020fb0 100644 --- a/share/qtcreator/qml/qmlobserver/deviceorientation.h +++ b/share/qtcreator/qml/qmlobserver/deviceorientation.h @@ -25,7 +25,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmlobserver/deviceorientation_harmattan.cpp b/share/qtcreator/qml/qmlobserver/deviceorientation_harmattan.cpp index ecf15ac091c..34eb4cff958 100644 --- a/share/qtcreator/qml/qmlobserver/deviceorientation_harmattan.cpp +++ b/share/qtcreator/qml/qmlobserver/deviceorientation_harmattan.cpp @@ -25,7 +25,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmlobserver/deviceorientation_maemo5.cpp b/share/qtcreator/qml/qmlobserver/deviceorientation_maemo5.cpp index 58411af93c5..e9241f4675e 100644 --- a/share/qtcreator/qml/qmlobserver/deviceorientation_maemo5.cpp +++ b/share/qtcreator/qml/qmlobserver/deviceorientation_maemo5.cpp @@ -25,7 +25,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmlobserver/deviceorientation_symbian.cpp b/share/qtcreator/qml/qmlobserver/deviceorientation_symbian.cpp index 82af51dab10..84c3a2257b4 100644 --- a/share/qtcreator/qml/qmlobserver/deviceorientation_symbian.cpp +++ b/share/qtcreator/qml/qmlobserver/deviceorientation_symbian.cpp @@ -25,7 +25,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmlobserver/loggerwidget.cpp b/share/qtcreator/qml/qmlobserver/loggerwidget.cpp index 9718cad81d2..f924949a3bf 100644 --- a/share/qtcreator/qml/qmlobserver/loggerwidget.cpp +++ b/share/qtcreator/qml/qmlobserver/loggerwidget.cpp @@ -25,7 +25,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmlobserver/loggerwidget.h b/share/qtcreator/qml/qmlobserver/loggerwidget.h index 382a41972f9..c0a662413e9 100644 --- a/share/qtcreator/qml/qmlobserver/loggerwidget.h +++ b/share/qtcreator/qml/qmlobserver/loggerwidget.h @@ -25,7 +25,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmlobserver/main.cpp b/share/qtcreator/qml/qmlobserver/main.cpp index d678e816c39..e8291d2f5d5 100644 --- a/share/qtcreator/qml/qmlobserver/main.cpp +++ b/share/qtcreator/qml/qmlobserver/main.cpp @@ -25,7 +25,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmlobserver/proxysettings.cpp b/share/qtcreator/qml/qmlobserver/proxysettings.cpp index 67ffd912c38..2a94047c295 100644 --- a/share/qtcreator/qml/qmlobserver/proxysettings.cpp +++ b/share/qtcreator/qml/qmlobserver/proxysettings.cpp @@ -25,7 +25,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmlobserver/proxysettings.h b/share/qtcreator/qml/qmlobserver/proxysettings.h index fbbc945bcee..462f06d8e1d 100644 --- a/share/qtcreator/qml/qmlobserver/proxysettings.h +++ b/share/qtcreator/qml/qmlobserver/proxysettings.h @@ -25,7 +25,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmlobserver/qdeclarativetester.cpp b/share/qtcreator/qml/qmlobserver/qdeclarativetester.cpp index aeb57d2a22a..b51563d844f 100644 --- a/share/qtcreator/qml/qmlobserver/qdeclarativetester.cpp +++ b/share/qtcreator/qml/qmlobserver/qdeclarativetester.cpp @@ -25,7 +25,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmlobserver/qdeclarativetester.h b/share/qtcreator/qml/qmlobserver/qdeclarativetester.h index d302fe749f5..399b031c9b0 100644 --- a/share/qtcreator/qml/qmlobserver/qdeclarativetester.h +++ b/share/qtcreator/qml/qmlobserver/qdeclarativetester.h @@ -25,7 +25,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmlobserver/qmlruntime.cpp b/share/qtcreator/qml/qmlobserver/qmlruntime.cpp index ae2a34a5785..a676a6fd146 100644 --- a/share/qtcreator/qml/qmlobserver/qmlruntime.cpp +++ b/share/qtcreator/qml/qmlobserver/qmlruntime.cpp @@ -25,7 +25,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmlobserver/qmlruntime.h b/share/qtcreator/qml/qmlobserver/qmlruntime.h index 24e9ce76cac..02f8bd6a96f 100644 --- a/share/qtcreator/qml/qmlobserver/qmlruntime.h +++ b/share/qtcreator/qml/qmlobserver/qmlruntime.h @@ -25,7 +25,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmlobserver/startup/Logo.qml b/share/qtcreator/qml/qmlobserver/startup/Logo.qml index 99944581b93..a82d0b86f98 100644 --- a/share/qtcreator/qml/qmlobserver/startup/Logo.qml +++ b/share/qtcreator/qml/qmlobserver/startup/Logo.qml @@ -25,7 +25,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmlobserver/startup/startup.qml b/share/qtcreator/qml/qmlobserver/startup/startup.qml index b3ba87c66ad..ab4a8311a1b 100644 --- a/share/qtcreator/qml/qmlobserver/startup/startup.qml +++ b/share/qtcreator/qml/qmlobserver/startup/startup.qml @@ -25,7 +25,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmlobserver/texteditautoresizer_maemo5.h b/share/qtcreator/qml/qmlobserver/texteditautoresizer_maemo5.h index d492f5d758c..cf51ea68fbc 100644 --- a/share/qtcreator/qml/qmlobserver/texteditautoresizer_maemo5.h +++ b/share/qtcreator/qml/qmlobserver/texteditautoresizer_maemo5.h @@ -25,7 +25,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmlpuppet/commands/changeidscommand.cpp b/share/qtcreator/qml/qmlpuppet/commands/changeidscommand.cpp index c6c4658e34d..32e4ce13617 100644 --- a/share/qtcreator/qml/qmlpuppet/commands/changeidscommand.cpp +++ b/share/qtcreator/qml/qmlpuppet/commands/changeidscommand.cpp @@ -4,7 +4,7 @@ ** ** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). ** -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** ** No Commercial Usage ** @@ -27,7 +27,7 @@ ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmlpuppet/commands/changeidscommand.h b/share/qtcreator/qml/qmlpuppet/commands/changeidscommand.h index 47e6f927f6e..5a8acad6759 100644 --- a/share/qtcreator/qml/qmlpuppet/commands/changeidscommand.h +++ b/share/qtcreator/qml/qmlpuppet/commands/changeidscommand.h @@ -4,7 +4,7 @@ ** ** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). ** -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** ** No Commercial Usage ** @@ -27,7 +27,7 @@ ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmlpuppet/commands/changenodesourcecommand.cpp b/share/qtcreator/qml/qmlpuppet/commands/changenodesourcecommand.cpp index 65b427c21e7..4655c5e68cc 100644 --- a/share/qtcreator/qml/qmlpuppet/commands/changenodesourcecommand.cpp +++ b/share/qtcreator/qml/qmlpuppet/commands/changenodesourcecommand.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmlpuppet/commands/changenodesourcecommand.h b/share/qtcreator/qml/qmlpuppet/commands/changenodesourcecommand.h index 9a04e4811f6..920cc55452f 100644 --- a/share/qtcreator/qml/qmlpuppet/commands/changenodesourcecommand.h +++ b/share/qtcreator/qml/qmlpuppet/commands/changenodesourcecommand.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp index 1e8cd6bdf3c..e316198b500 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp @@ -10,7 +10,7 @@ ** -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** @@ -56,7 +56,7 @@ ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h index c0c078fc475..f7e33530e1a 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h @@ -10,7 +10,7 @@ ** -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** @@ -56,7 +56,7 @@ ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceclientproxy.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceclientproxy.cpp index b66784a9a53..ca2a3f0226a 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceclientproxy.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceclientproxy.cpp @@ -10,7 +10,7 @@ ** -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** @@ -56,7 +56,7 @@ ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceclientproxy.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceclientproxy.h index 2739bddbc92..c6667771014 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceclientproxy.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceclientproxy.h @@ -10,7 +10,7 @@ ** -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** @@ -56,7 +56,7 @@ ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceserver.cpp index a97b2202ec2..2733050759a 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceserver.cpp @@ -10,7 +10,7 @@ ** -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** @@ -56,7 +56,7 @@ ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceserver.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceserver.h index 4faa447eee6..7f252b742a7 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceserver.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceserver.h @@ -10,7 +10,7 @@ ** -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** @@ -56,7 +56,7 @@ ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5previewnodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5previewnodeinstanceserver.cpp index e432ba32faa..1a1e7fd2cca 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5previewnodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5previewnodeinstanceserver.cpp @@ -10,7 +10,7 @@ ** -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** @@ -56,7 +56,7 @@ ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5previewnodeinstanceserver.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5previewnodeinstanceserver.h index bf607212743..33170882334 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5previewnodeinstanceserver.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5previewnodeinstanceserver.h @@ -10,7 +10,7 @@ ** -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** @@ -56,7 +56,7 @@ ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5rendernodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5rendernodeinstanceserver.cpp index e25c0ce3b17..a6167ef82f7 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5rendernodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5rendernodeinstanceserver.cpp @@ -10,7 +10,7 @@ ** -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** @@ -56,7 +56,7 @@ ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5rendernodeinstanceserver.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5rendernodeinstanceserver.h index 78aae47692b..8c96c9d8b4c 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5rendernodeinstanceserver.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5rendernodeinstanceserver.h @@ -10,7 +10,7 @@ ** -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** @@ -56,7 +56,7 @@ ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/sgitemnodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/sgitemnodeinstance.cpp index acd46e7c164..546a5a94807 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/sgitemnodeinstance.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/sgitemnodeinstance.cpp @@ -10,7 +10,7 @@ ** -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** @@ -56,7 +56,7 @@ ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/sgitemnodeinstance.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/sgitemnodeinstance.h index eabd7780096..8951f9227a9 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/sgitemnodeinstance.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/sgitemnodeinstance.h @@ -10,7 +10,7 @@ ** -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** @@ -56,7 +56,7 @@ ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4informationnodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4informationnodeinstanceserver.cpp index 14cfabb1bc4..1bf75ddb380 100644 --- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4informationnodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4informationnodeinstanceserver.cpp @@ -10,7 +10,7 @@ ** -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** @@ -56,7 +56,7 @@ ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4informationnodeinstanceserver.h b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4informationnodeinstanceserver.h index ea5aa990e9e..51b904f02a6 100644 --- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4informationnodeinstanceserver.h +++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4informationnodeinstanceserver.h @@ -10,7 +10,7 @@ ** -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** @@ -56,7 +56,7 @@ ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4nodeinstanceclientproxy.cpp b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4nodeinstanceclientproxy.cpp index 91fe2417c0e..55542ca4ba0 100644 --- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4nodeinstanceclientproxy.cpp +++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4nodeinstanceclientproxy.cpp @@ -10,7 +10,7 @@ ** -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** @@ -56,7 +56,7 @@ ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4nodeinstanceclientproxy.h b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4nodeinstanceclientproxy.h index 4722a2df230..99b1c25186e 100644 --- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4nodeinstanceclientproxy.h +++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4nodeinstanceclientproxy.h @@ -10,7 +10,7 @@ ** -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** @@ -56,7 +56,7 @@ ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4nodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4nodeinstanceserver.cpp index 802fd403c14..55df8bc0a6c 100644 --- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4nodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4nodeinstanceserver.cpp @@ -10,7 +10,7 @@ ** -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** @@ -56,7 +56,7 @@ ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4nodeinstanceserver.h b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4nodeinstanceserver.h index 60c41f27807..54673c9bf9f 100644 --- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4nodeinstanceserver.h +++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4nodeinstanceserver.h @@ -10,7 +10,7 @@ ** -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** @@ -56,7 +56,7 @@ ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** diff --git a/share/qtcreator/templates/wizards/helloworld/wizard_sample.xml b/share/qtcreator/templates/wizards/helloworld/wizard_sample.xml index 3317e0abbdb..5fee3deb6f7 100644 --- a/share/qtcreator/templates/wizards/helloworld/wizard_sample.xml +++ b/share/qtcreator/templates/wizards/helloworld/wizard_sample.xml @@ -28,7 +28,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/templates/wizards/listmodel/wizard_sample.xml b/share/qtcreator/templates/wizards/listmodel/wizard_sample.xml index a8c0afa8c9e..a7011dfcc0d 100644 --- a/share/qtcreator/templates/wizards/listmodel/wizard_sample.xml +++ b/share/qtcreator/templates/wizards/listmodel/wizard_sample.xml @@ -28,7 +28,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/templates/wizards/qml-extension/wizard.xml b/share/qtcreator/templates/wizards/qml-extension/wizard.xml index 49a3dbdf5c3..7ea0ac80c36 100644 --- a/share/qtcreator/templates/wizards/qml-extension/wizard.xml +++ b/share/qtcreator/templates/wizards/qml-extension/wizard.xml @@ -28,7 +28,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/templates/wizards/qtcreatorplugin/wizard.xml b/share/qtcreator/templates/wizards/qtcreatorplugin/wizard.xml index 5f5bb94be31..05a6c3096bb 100644 --- a/share/qtcreator/templates/wizards/qtcreatorplugin/wizard.xml +++ b/share/qtcreator/templates/wizards/qtcreatorplugin/wizard.xml @@ -28,7 +28,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/templates/wizards/scriptgeneratedproject/wizard_sample.xml b/share/qtcreator/templates/wizards/scriptgeneratedproject/wizard_sample.xml index ce32b538105..3718a346e97 100644 --- a/share/qtcreator/templates/wizards/scriptgeneratedproject/wizard_sample.xml +++ b/share/qtcreator/templates/wizards/scriptgeneratedproject/wizard_sample.xml @@ -28,7 +28,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/share/qtcreator/translations/check-ts.pl b/share/qtcreator/translations/check-ts.pl index 5b126d3bf2a..1bf79d54527 100755 --- a/share/qtcreator/translations/check-ts.pl +++ b/share/qtcreator/translations/check-ts.pl @@ -26,7 +26,7 @@ ## conditions contained in a signed written agreement between you and Nokia. ## ## If you have questions regarding the use of this file, please contact -## Nokia at qt-info@nokia.com. +## Nokia at info@qt.nokia.com. ## ## ## diff --git a/share/qtcreator/welcomescreen/components/custom/Slider.qml b/share/qtcreator/welcomescreen/components/custom/Slider.qml index f551baa85ad..5bb78f69fd6 100644 --- a/share/qtcreator/welcomescreen/components/custom/Slider.qml +++ b/share/qtcreator/welcomescreen/components/custom/Slider.qml @@ -2,7 +2,7 @@ ** ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** ** This file is part of the Qt Components project on Qt Labs. ** @@ -20,7 +20,7 @@ ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** ****************************************************************************/ diff --git a/share/qtcreator/welcomescreen/components/styleitem/qdeclarativefolderlistmodel.cpp b/share/qtcreator/welcomescreen/components/styleitem/qdeclarativefolderlistmodel.cpp index 89c072b39f8..061b99edfb3 100644 --- a/share/qtcreator/welcomescreen/components/styleitem/qdeclarativefolderlistmodel.cpp +++ b/share/qtcreator/welcomescreen/components/styleitem/qdeclarativefolderlistmodel.cpp @@ -2,7 +2,7 @@ ** ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** ** This file is part of the examples of the Qt Toolkit. ** @@ -26,7 +26,7 @@ ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** ** ** diff --git a/share/qtcreator/welcomescreen/components/styleitem/qdeclarativefolderlistmodel.h b/share/qtcreator/welcomescreen/components/styleitem/qdeclarativefolderlistmodel.h index f225a04dcd6..d22d0acb0a8 100644 --- a/share/qtcreator/welcomescreen/components/styleitem/qdeclarativefolderlistmodel.h +++ b/share/qtcreator/welcomescreen/components/styleitem/qdeclarativefolderlistmodel.h @@ -2,7 +2,7 @@ ** ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** ** This file is part of the examples of the Qt Toolkit. ** @@ -26,7 +26,7 @@ ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** ** ** diff --git a/share/qtcreator/welcomescreen/components/styleitem/qrangemodel.cpp b/share/qtcreator/welcomescreen/components/styleitem/qrangemodel.cpp index 83c106ecd20..c3a53a6890c 100644 --- a/share/qtcreator/welcomescreen/components/styleitem/qrangemodel.cpp +++ b/share/qtcreator/welcomescreen/components/styleitem/qrangemodel.cpp @@ -2,7 +2,7 @@ ** ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** ** This file is part of the Qt Components project on Qt Labs. ** @@ -20,7 +20,7 @@ ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** ****************************************************************************/ diff --git a/share/qtcreator/welcomescreen/components/styleitem/qrangemodel.h b/share/qtcreator/welcomescreen/components/styleitem/qrangemodel.h index 6144281ed2c..842f9aa00ec 100644 --- a/share/qtcreator/welcomescreen/components/styleitem/qrangemodel.h +++ b/share/qtcreator/welcomescreen/components/styleitem/qrangemodel.h @@ -2,7 +2,7 @@ ** ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** ** This file is part of the Qt Components project on Qt Labs. ** @@ -20,7 +20,7 @@ ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** ****************************************************************************/ diff --git a/share/qtcreator/welcomescreen/components/styleitem/qrangemodel_p.h b/share/qtcreator/welcomescreen/components/styleitem/qrangemodel_p.h index cb72ceff2f6..74edf2f9f5e 100644 --- a/share/qtcreator/welcomescreen/components/styleitem/qrangemodel_p.h +++ b/share/qtcreator/welcomescreen/components/styleitem/qrangemodel_p.h @@ -2,7 +2,7 @@ ** ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** ** This file is part of the Qt Components project on Qt Labs. ** @@ -20,7 +20,7 @@ ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** ****************************************************************************/ diff --git a/share/qtcreator/welcomescreen/components/styleitem/qstyleitem.cpp b/share/qtcreator/welcomescreen/components/styleitem/qstyleitem.cpp index c16b931dcd4..fecffe7b22f 100644 --- a/share/qtcreator/welcomescreen/components/styleitem/qstyleitem.cpp +++ b/share/qtcreator/welcomescreen/components/styleitem/qstyleitem.cpp @@ -2,7 +2,7 @@ ** ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** ** This file is part of the examples of the Qt Toolkit. ** diff --git a/share/qtcreator/welcomescreen/components/styleitem/qstyleitem.h b/share/qtcreator/welcomescreen/components/styleitem/qstyleitem.h index 1b9f9c875ac..4a1da099fc9 100644 --- a/share/qtcreator/welcomescreen/components/styleitem/qstyleitem.h +++ b/share/qtcreator/welcomescreen/components/styleitem/qstyleitem.h @@ -2,7 +2,7 @@ ** ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** ** This file is part of the examples of the Qt Toolkit. ** diff --git a/share/qtcreator/welcomescreen/components/styleitem/qstyleplugin.cpp b/share/qtcreator/welcomescreen/components/styleitem/qstyleplugin.cpp index d615bd4a2f4..6ba3473839c 100644 --- a/share/qtcreator/welcomescreen/components/styleitem/qstyleplugin.cpp +++ b/share/qtcreator/welcomescreen/components/styleitem/qstyleplugin.cpp @@ -2,7 +2,7 @@ ** ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** ** This file is part of the examples of the Qt Toolkit. ** diff --git a/share/qtcreator/welcomescreen/components/styleitem/qstyleplugin.h b/share/qtcreator/welcomescreen/components/styleitem/qstyleplugin.h index 648add70c8f..144cb48aff6 100644 --- a/share/qtcreator/welcomescreen/components/styleitem/qstyleplugin.h +++ b/share/qtcreator/welcomescreen/components/styleitem/qstyleplugin.h @@ -2,7 +2,7 @@ ** ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** ** This file is part of the examples of the Qt Toolkit. ** diff --git a/share/qtcreator/welcomescreen/components/styleitem/qtmenu.cpp b/share/qtcreator/welcomescreen/components/styleitem/qtmenu.cpp index 3647da2d894..7a53f1f5dfa 100644 --- a/share/qtcreator/welcomescreen/components/styleitem/qtmenu.cpp +++ b/share/qtcreator/welcomescreen/components/styleitem/qtmenu.cpp @@ -2,7 +2,7 @@ ** ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** ** This file is part of the Qt Components project on Qt Labs. ** @@ -20,7 +20,7 @@ ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** ****************************************************************************/ diff --git a/share/qtcreator/welcomescreen/components/styleitem/qtmenu.h b/share/qtcreator/welcomescreen/components/styleitem/qtmenu.h index 9e17db3028c..164e707189c 100644 --- a/share/qtcreator/welcomescreen/components/styleitem/qtmenu.h +++ b/share/qtcreator/welcomescreen/components/styleitem/qtmenu.h @@ -2,7 +2,7 @@ ** ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** ** This file is part of the Qt Components project on Qt Labs. ** @@ -20,7 +20,7 @@ ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** ****************************************************************************/ diff --git a/share/qtcreator/welcomescreen/components/styleitem/qtmenubar.cpp b/share/qtcreator/welcomescreen/components/styleitem/qtmenubar.cpp index 7257795a034..b50331be74a 100644 --- a/share/qtcreator/welcomescreen/components/styleitem/qtmenubar.cpp +++ b/share/qtcreator/welcomescreen/components/styleitem/qtmenubar.cpp @@ -2,7 +2,7 @@ ** ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** ** This file is part of the examples of the Qt Toolkit. ** diff --git a/share/qtcreator/welcomescreen/components/styleitem/qtmenubar.h b/share/qtcreator/welcomescreen/components/styleitem/qtmenubar.h index 4c402b8501a..241a098ab7b 100644 --- a/share/qtcreator/welcomescreen/components/styleitem/qtmenubar.h +++ b/share/qtcreator/welcomescreen/components/styleitem/qtmenubar.h @@ -2,7 +2,7 @@ ** ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** ** This file is part of the examples of the Qt Toolkit. ** diff --git a/share/qtcreator/welcomescreen/components/styleitem/qtmenuitem.cpp b/share/qtcreator/welcomescreen/components/styleitem/qtmenuitem.cpp index 8769990133d..a9465428943 100644 --- a/share/qtcreator/welcomescreen/components/styleitem/qtmenuitem.cpp +++ b/share/qtcreator/welcomescreen/components/styleitem/qtmenuitem.cpp @@ -2,7 +2,7 @@ ** ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** ** This file is part of the examples of the Qt Toolkit. ** diff --git a/share/qtcreator/welcomescreen/components/styleitem/qtmenuitem.h b/share/qtcreator/welcomescreen/components/styleitem/qtmenuitem.h index 7c4a1d4f1d0..5fc47e2c920 100644 --- a/share/qtcreator/welcomescreen/components/styleitem/qtmenuitem.h +++ b/share/qtcreator/welcomescreen/components/styleitem/qtmenuitem.h @@ -2,7 +2,7 @@ ** ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** ** This file is part of the examples of the Qt Toolkit. ** diff --git a/share/qtcreator/welcomescreen/components/styleitem/qwheelarea.cpp b/share/qtcreator/welcomescreen/components/styleitem/qwheelarea.cpp index 1a7ae9e6cad..64457b5236c 100644 --- a/share/qtcreator/welcomescreen/components/styleitem/qwheelarea.cpp +++ b/share/qtcreator/welcomescreen/components/styleitem/qwheelarea.cpp @@ -2,7 +2,7 @@ ** ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** ** This file is part of the examples of the Qt Toolkit. ** diff --git a/share/qtcreator/welcomescreen/components/styleitem/qwheelarea.h b/share/qtcreator/welcomescreen/components/styleitem/qwheelarea.h index f1d7016a8f8..a447b7fc080 100644 --- a/share/qtcreator/welcomescreen/components/styleitem/qwheelarea.h +++ b/share/qtcreator/welcomescreen/components/styleitem/qwheelarea.h @@ -2,7 +2,7 @@ ** ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** ** This file is part of the Qt Components project on Qt Labs. ** @@ -20,7 +20,7 @@ ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** ****************************************************************************/ diff --git a/src/libs/3rdparty/botan/build/botan/build.h b/src/libs/3rdparty/botan/build/botan/build.h index f674283e723..cea0132dc98 100644 --- a/src/libs/3rdparty/botan/build/botan/build.h +++ b/src/libs/3rdparty/botan/build/botan/build.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/libs/3rdparty/precompiled_headers/botan_pch.h b/src/libs/3rdparty/precompiled_headers/botan_pch.h index 034a5845fc1..6a2aa431eef 100644 --- a/src/libs/3rdparty/precompiled_headers/botan_pch.h +++ b/src/libs/3rdparty/precompiled_headers/botan_pch.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/libs/aggregation/examples/text/main.cpp b/src/libs/aggregation/examples/text/main.cpp index 81d88727ca6..30a4a1d91b3 100644 --- a/src/libs/aggregation/examples/text/main.cpp +++ b/src/libs/aggregation/examples/text/main.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/libs/aggregation/examples/text/main.h b/src/libs/aggregation/examples/text/main.h index 3c80fea8c6d..111f55df415 100644 --- a/src/libs/aggregation/examples/text/main.h +++ b/src/libs/aggregation/examples/text/main.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/libs/aggregation/examples/text/myinterfaces.h b/src/libs/aggregation/examples/text/myinterfaces.h index 7834af3d47e..9180feaed55 100644 --- a/src/libs/aggregation/examples/text/myinterfaces.h +++ b/src/libs/aggregation/examples/text/myinterfaces.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/libs/extensionsystem/test/manual/pluginview/plugindialog.cpp b/src/libs/extensionsystem/test/manual/pluginview/plugindialog.cpp index 37b53ed11d4..ab2042488b4 100644 --- a/src/libs/extensionsystem/test/manual/pluginview/plugindialog.cpp +++ b/src/libs/extensionsystem/test/manual/pluginview/plugindialog.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/libs/extensionsystem/test/manual/pluginview/plugindialog.h b/src/libs/extensionsystem/test/manual/pluginview/plugindialog.h index 2a98c84af4f..a8c2b098d65 100644 --- a/src/libs/extensionsystem/test/manual/pluginview/plugindialog.h +++ b/src/libs/extensionsystem/test/manual/pluginview/plugindialog.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/libs/extensionsystem/test/manual/pluginview/plugins/plugin1/plugin1.cpp b/src/libs/extensionsystem/test/manual/pluginview/plugins/plugin1/plugin1.cpp index 0bdf6d2b512..e9cb0655544 100644 --- a/src/libs/extensionsystem/test/manual/pluginview/plugins/plugin1/plugin1.cpp +++ b/src/libs/extensionsystem/test/manual/pluginview/plugins/plugin1/plugin1.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/libs/extensionsystem/test/manual/pluginview/plugins/plugin1/plugin1.h b/src/libs/extensionsystem/test/manual/pluginview/plugins/plugin1/plugin1.h index 63e38255660..b28470e5dfb 100644 --- a/src/libs/extensionsystem/test/manual/pluginview/plugins/plugin1/plugin1.h +++ b/src/libs/extensionsystem/test/manual/pluginview/plugins/plugin1/plugin1.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/libs/extensionsystem/test/manual/pluginview/plugins/plugin2/plugin2.cpp b/src/libs/extensionsystem/test/manual/pluginview/plugins/plugin2/plugin2.cpp index 204bf391d32..f177ff2fa5c 100644 --- a/src/libs/extensionsystem/test/manual/pluginview/plugins/plugin2/plugin2.cpp +++ b/src/libs/extensionsystem/test/manual/pluginview/plugins/plugin2/plugin2.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/libs/extensionsystem/test/manual/pluginview/plugins/plugin2/plugin2.h b/src/libs/extensionsystem/test/manual/pluginview/plugins/plugin2/plugin2.h index 21819e498d0..421a35e769a 100644 --- a/src/libs/extensionsystem/test/manual/pluginview/plugins/plugin2/plugin2.h +++ b/src/libs/extensionsystem/test/manual/pluginview/plugins/plugin2/plugin2.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/libs/extensionsystem/test/manual/pluginview/plugins/plugin3/plugin3.cpp b/src/libs/extensionsystem/test/manual/pluginview/plugins/plugin3/plugin3.cpp index f385aae4d46..00138f33a5e 100644 --- a/src/libs/extensionsystem/test/manual/pluginview/plugins/plugin3/plugin3.cpp +++ b/src/libs/extensionsystem/test/manual/pluginview/plugins/plugin3/plugin3.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/libs/extensionsystem/test/manual/pluginview/plugins/plugin3/plugin3.h b/src/libs/extensionsystem/test/manual/pluginview/plugins/plugin3/plugin3.h index a323129bd26..500d38b61b4 100644 --- a/src/libs/extensionsystem/test/manual/pluginview/plugins/plugin3/plugin3.h +++ b/src/libs/extensionsystem/test/manual/pluginview/plugins/plugin3/plugin3.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/libs/qtconcurrent/QtConcurrentTools b/src/libs/qtconcurrent/QtConcurrentTools index 96cda38316c..ca634a4bce7 100644 --- a/src/libs/qtconcurrent/QtConcurrentTools +++ b/src/libs/qtconcurrent/QtConcurrentTools @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/libs/utils/settingsutils.h b/src/libs/utils/settingsutils.h index 6c0f494af52..fb0d8271abe 100644 --- a/src/libs/utils/settingsutils.h +++ b/src/libs/utils/settingsutils.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/coreplugin/infobar.cpp b/src/plugins/coreplugin/infobar.cpp index 29d15a02fe1..bf107416bf5 100644 --- a/src/plugins/coreplugin/infobar.cpp +++ b/src/plugins/coreplugin/infobar.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/coreplugin/infobar.h b/src/plugins/coreplugin/infobar.h index af8e12395b1..0d8e63249a8 100644 --- a/src/plugins/coreplugin/infobar.h +++ b/src/plugins/coreplugin/infobar.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/cpptools/cpptoolssettings.h b/src/plugins/cpptools/cpptoolssettings.h index 48712012afe..52f8744cbc3 100644 --- a/src/plugins/cpptools/cpptoolssettings.h +++ b/src/plugins/cpptools/cpptoolssettings.h @@ -4,7 +4,7 @@ ** ** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). ** -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** ** No Commercial Usage ** @@ -27,7 +27,7 @@ ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/designer/qt_private/abstractnewformwidget_p.h b/src/plugins/designer/qt_private/abstractnewformwidget_p.h index 7ac5dd29374..aaf1d1086e1 100644 --- a/src/plugins/designer/qt_private/abstractnewformwidget_p.h +++ b/src/plugins/designer/qt_private/abstractnewformwidget_p.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/designer/qt_private/abstractoptionspage_p.h b/src/plugins/designer/qt_private/abstractoptionspage_p.h index 242f00f4130..e0b0fd75c4e 100644 --- a/src/plugins/designer/qt_private/abstractoptionspage_p.h +++ b/src/plugins/designer/qt_private/abstractoptionspage_p.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/designer/qt_private/abstractsettings_p.h b/src/plugins/designer/qt_private/abstractsettings_p.h index 736907f4113..ca7615049c1 100644 --- a/src/plugins/designer/qt_private/abstractsettings_p.h +++ b/src/plugins/designer/qt_private/abstractsettings_p.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/designer/qt_private/formwindowbase_p.h b/src/plugins/designer/qt_private/formwindowbase_p.h index 56a02babe11..99239adb914 100644 --- a/src/plugins/designer/qt_private/formwindowbase_p.h +++ b/src/plugins/designer/qt_private/formwindowbase_p.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/designer/qt_private/iconloader_p.h b/src/plugins/designer/qt_private/iconloader_p.h index 7cdd4a8105f..b2eca12a9dd 100644 --- a/src/plugins/designer/qt_private/iconloader_p.h +++ b/src/plugins/designer/qt_private/iconloader_p.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/designer/qt_private/pluginmanager_p.h b/src/plugins/designer/qt_private/pluginmanager_p.h index 6ca50032967..f1edc70836d 100644 --- a/src/plugins/designer/qt_private/pluginmanager_p.h +++ b/src/plugins/designer/qt_private/pluginmanager_p.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/designer/qt_private/qdesigner_formwindowmanager_p.h b/src/plugins/designer/qt_private/qdesigner_formwindowmanager_p.h index 8c3a95d5ca1..539a3a99aa7 100644 --- a/src/plugins/designer/qt_private/qdesigner_formwindowmanager_p.h +++ b/src/plugins/designer/qt_private/qdesigner_formwindowmanager_p.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/designer/qt_private/qdesigner_integration_p.h b/src/plugins/designer/qt_private/qdesigner_integration_p.h index 3014b00d397..af6ad5c9a48 100644 --- a/src/plugins/designer/qt_private/qdesigner_integration_p.h +++ b/src/plugins/designer/qt_private/qdesigner_integration_p.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/designer/qt_private/qsimpleresource_p.h b/src/plugins/designer/qt_private/qsimpleresource_p.h index 19cf8d52391..506efaf61c5 100644 --- a/src/plugins/designer/qt_private/qsimpleresource_p.h +++ b/src/plugins/designer/qt_private/qsimpleresource_p.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/designer/qt_private/qtresourcemodel_p.h b/src/plugins/designer/qt_private/qtresourcemodel_p.h index 83616420520..b132eeb8b23 100644 --- a/src/plugins/designer/qt_private/qtresourcemodel_p.h +++ b/src/plugins/designer/qt_private/qtresourcemodel_p.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/designer/qt_private/shared_enums_p.h b/src/plugins/designer/qt_private/shared_enums_p.h index 7bc821c8b33..24296f7de64 100644 --- a/src/plugins/designer/qt_private/shared_enums_p.h +++ b/src/plugins/designer/qt_private/shared_enums_p.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/designer/qt_private/shared_global_p.h b/src/plugins/designer/qt_private/shared_global_p.h index 587f6280979..41ead1158a8 100644 --- a/src/plugins/designer/qt_private/shared_global_p.h +++ b/src/plugins/designer/qt_private/shared_global_p.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qmldesigner/components/formeditor/formeditornodeinstanceview.cpp b/src/plugins/qmldesigner/components/formeditor/formeditornodeinstanceview.cpp index 4724c10edc7..28331eeba2e 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditornodeinstanceview.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditornodeinstanceview.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qmldesigner/components/formeditor/formeditornodeinstanceview.h b/src/plugins/qmldesigner/components/formeditor/formeditornodeinstanceview.h index d6ed7b223fc..acd68af9231 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditornodeinstanceview.h +++ b/src/plugins/qmldesigner/components/formeditor/formeditornodeinstanceview.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorsubwindow.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorsubwindow.cpp index 49a780fddfb..8ba85336497 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorsubwindow.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditorsubwindow.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorsubwindow.h b/src/plugins/qmldesigner/components/formeditor/formeditorsubwindow.h index 0c902b2586f..5cded6394cc 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorsubwindow.h +++ b/src/plugins/qmldesigner/components/formeditor/formeditorsubwindow.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qmldesigner/components/formeditor/itemcreatortool.h b/src/plugins/qmldesigner/components/formeditor/itemcreatortool.h index f7fab80b026..cd678b26470 100644 --- a/src/plugins/qmldesigner/components/formeditor/itemcreatortool.h +++ b/src/plugins/qmldesigner/components/formeditor/itemcreatortool.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qmldesigner/components/formeditor/manipulatorlayeritem.h b/src/plugins/qmldesigner/components/formeditor/manipulatorlayeritem.h index ae91b5ef35d..53478d01d70 100644 --- a/src/plugins/qmldesigner/components/formeditor/manipulatorlayeritem.h +++ b/src/plugins/qmldesigner/components/formeditor/manipulatorlayeritem.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qmldesigner/components/logger/logger.cpp b/src/plugins/qmldesigner/components/logger/logger.cpp index 5b3a331ae66..42c4013b275 100644 --- a/src/plugins/qmldesigner/components/logger/logger.cpp +++ b/src/plugins/qmldesigner/components/logger/logger.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qmldesigner/components/logger/logger.h b/src/plugins/qmldesigner/components/logger/logger.h index 9f574b8175e..e5ff44d293c 100644 --- a/src/plugins/qmldesigner/components/logger/logger.h +++ b/src/plugins/qmldesigner/components/logger/logger.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qmldesigner/components/propertyeditor/genericpropertieswidget.cpp b/src/plugins/qmldesigner/components/propertyeditor/genericpropertieswidget.cpp index 0d9e194219e..884ee0894ba 100644 --- a/src/plugins/qmldesigner/components/propertyeditor/genericpropertieswidget.cpp +++ b/src/plugins/qmldesigner/components/propertyeditor/genericpropertieswidget.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qmldesigner/components/propertyeditor/genericpropertieswidget.h b/src/plugins/qmldesigner/components/propertyeditor/genericpropertieswidget.h index a5340bbf284..70d5293562a 100644 --- a/src/plugins/qmldesigner/components/propertyeditor/genericpropertieswidget.h +++ b/src/plugins/qmldesigner/components/propertyeditor/genericpropertieswidget.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qmldesigner/components/stateseditor/stateseditorimageprovider.h b/src/plugins/qmldesigner/components/stateseditor/stateseditorimageprovider.h index f688102d4ac..f41c825f909 100644 --- a/src/plugins/qmldesigner/components/stateseditor/stateseditorimageprovider.h +++ b/src/plugins/qmldesigner/components/stateseditor/stateseditorimageprovider.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qmldesigner/components/themeloader/qts60stylethemeio.cpp b/src/plugins/qmldesigner/components/themeloader/qts60stylethemeio.cpp index db005b62677..21013ecb0e4 100644 --- a/src/plugins/qmldesigner/components/themeloader/qts60stylethemeio.cpp +++ b/src/plugins/qmldesigner/components/themeloader/qts60stylethemeio.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qmldesigner/components/themeloader/qts60stylethemeio.h b/src/plugins/qmldesigner/components/themeloader/qts60stylethemeio.h index f68b5b422a3..bc27f95f882 100644 --- a/src/plugins/qmldesigner/components/themeloader/qts60stylethemeio.h +++ b/src/plugins/qmldesigner/components/themeloader/qts60stylethemeio.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qmldesigner/designercore/exceptions/modificationgroupexception.cpp b/src/plugins/qmldesigner/designercore/exceptions/modificationgroupexception.cpp index 20dde948b63..57655ce6873 100644 --- a/src/plugins/qmldesigner/designercore/exceptions/modificationgroupexception.cpp +++ b/src/plugins/qmldesigner/designercore/exceptions/modificationgroupexception.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qmldesigner/designercore/include/anchorline.h b/src/plugins/qmldesigner/designercore/include/anchorline.h index 54d317719ac..c41cebda88e 100644 --- a/src/plugins/qmldesigner/designercore/include/anchorline.h +++ b/src/plugins/qmldesigner/designercore/include/anchorline.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qmldesigner/designercore/include/bytearraymodifier.h b/src/plugins/qmldesigner/designercore/include/bytearraymodifier.h index bfa2eb6a2d3..9110036c170 100644 --- a/src/plugins/qmldesigner/designercore/include/bytearraymodifier.h +++ b/src/plugins/qmldesigner/designercore/include/bytearraymodifier.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qmldesigner/designercore/include/modificationgroupexception.h b/src/plugins/qmldesigner/designercore/include/modificationgroupexception.h index b709522b269..fbfc93bc79f 100644 --- a/src/plugins/qmldesigner/designercore/include/modificationgroupexception.h +++ b/src/plugins/qmldesigner/designercore/include/modificationgroupexception.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qmldesigner/designercore/include/modificationgrouptoken.h b/src/plugins/qmldesigner/designercore/include/modificationgrouptoken.h index 56baa0e4205..08ec189174f 100644 --- a/src/plugins/qmldesigner/designercore/include/modificationgrouptoken.h +++ b/src/plugins/qmldesigner/designercore/include/modificationgrouptoken.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qmldesigner/designercore/include/nodeanchors.h b/src/plugins/qmldesigner/designercore/include/nodeanchors.h index 8b09513a4d3..4486ccceae5 100644 --- a/src/plugins/qmldesigner/designercore/include/nodeanchors.h +++ b/src/plugins/qmldesigner/designercore/include/nodeanchors.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qmldesigner/designercore/include/objectpropertybinding.h b/src/plugins/qmldesigner/designercore/include/objectpropertybinding.h index 562a425f8a4..db43ab59409 100644 --- a/src/plugins/qmldesigner/designercore/include/objectpropertybinding.h +++ b/src/plugins/qmldesigner/designercore/include/objectpropertybinding.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qmldesigner/designercore/include/propertybinding.h b/src/plugins/qmldesigner/designercore/include/propertybinding.h index 775e1245307..85487a1e4fe 100644 --- a/src/plugins/qmldesigner/designercore/include/propertybinding.h +++ b/src/plugins/qmldesigner/designercore/include/propertybinding.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qmldesigner/designercore/include/replaceallobjectdefinitionsvisitor.h b/src/plugins/qmldesigner/designercore/include/replaceallobjectdefinitionsvisitor.h index baa92ffc6a2..98d901f1199 100644 --- a/src/plugins/qmldesigner/designercore/include/replaceallobjectdefinitionsvisitor.h +++ b/src/plugins/qmldesigner/designercore/include/replaceallobjectdefinitionsvisitor.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qmldesigner/designercore/include/stylemanager.h b/src/plugins/qmldesigner/designercore/include/stylemanager.h index 8af2b28f209..838e720d8ab 100644 --- a/src/plugins/qmldesigner/designercore/include/stylemanager.h +++ b/src/plugins/qmldesigner/designercore/include/stylemanager.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qmldesigner/designercore/include/widgetplugin_helper.h b/src/plugins/qmldesigner/designercore/include/widgetplugin_helper.h index 211c31b06c9..83414ab514a 100644 --- a/src/plugins/qmldesigner/designercore/include/widgetplugin_helper.h +++ b/src/plugins/qmldesigner/designercore/include/widgetplugin_helper.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qmldesigner/designercore/include/widgetqueryview.h b/src/plugins/qmldesigner/designercore/include/widgetqueryview.h index 42de5494eb4..5a87046bfb7 100644 --- a/src/plugins/qmldesigner/designercore/include/widgetqueryview.h +++ b/src/plugins/qmldesigner/designercore/include/widgetqueryview.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qmldesigner/designercore/model/anchorline.cpp b/src/plugins/qmldesigner/designercore/model/anchorline.cpp index ee8159ec50e..b8fccdd4a84 100644 --- a/src/plugins/qmldesigner/designercore/model/anchorline.cpp +++ b/src/plugins/qmldesigner/designercore/model/anchorline.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qmldesigner/designercore/model/bytearraymodifier.cpp b/src/plugins/qmldesigner/designercore/model/bytearraymodifier.cpp index 2df0d4246bf..c0676530709 100644 --- a/src/plugins/qmldesigner/designercore/model/bytearraymodifier.cpp +++ b/src/plugins/qmldesigner/designercore/model/bytearraymodifier.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qmldesigner/designercore/model/copyhelper.cpp b/src/plugins/qmldesigner/designercore/model/copyhelper.cpp index 7a9502c658d..1a7ea3b7a07 100644 --- a/src/plugins/qmldesigner/designercore/model/copyhelper.cpp +++ b/src/plugins/qmldesigner/designercore/model/copyhelper.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qmldesigner/designercore/model/copyhelper.h b/src/plugins/qmldesigner/designercore/model/copyhelper.h index bdfd9c8de5e..61f531320e9 100644 --- a/src/plugins/qmldesigner/designercore/model/copyhelper.h +++ b/src/plugins/qmldesigner/designercore/model/copyhelper.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qmldesigner/designercore/model/modelrewriter.cpp b/src/plugins/qmldesigner/designercore/model/modelrewriter.cpp index e57f6f24178..a13345493f7 100644 --- a/src/plugins/qmldesigner/designercore/model/modelrewriter.cpp +++ b/src/plugins/qmldesigner/designercore/model/modelrewriter.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qmldesigner/designercore/model/modelrewriter.h b/src/plugins/qmldesigner/designercore/model/modelrewriter.h index fdbb2148482..05f358fa98e 100644 --- a/src/plugins/qmldesigner/designercore/model/modelrewriter.h +++ b/src/plugins/qmldesigner/designercore/model/modelrewriter.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qmldesigner/designercore/model/modificationgrouptoken.cpp b/src/plugins/qmldesigner/designercore/model/modificationgrouptoken.cpp index 5451717da30..dbadf522ce8 100644 --- a/src/plugins/qmldesigner/designercore/model/modificationgrouptoken.cpp +++ b/src/plugins/qmldesigner/designercore/model/modificationgrouptoken.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qmldesigner/designercore/model/nodeanchors.cpp b/src/plugins/qmldesigner/designercore/model/nodeanchors.cpp index 83a1ac51445..e58778d5be9 100644 --- a/src/plugins/qmldesigner/designercore/model/nodeanchors.cpp +++ b/src/plugins/qmldesigner/designercore/model/nodeanchors.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qmldesigner/designercore/model/objectpropertybinding.cpp b/src/plugins/qmldesigner/designercore/model/objectpropertybinding.cpp index 771b0f01462..f541abb87e8 100644 --- a/src/plugins/qmldesigner/designercore/model/objectpropertybinding.cpp +++ b/src/plugins/qmldesigner/designercore/model/objectpropertybinding.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qmldesigner/designercore/model/parsedqml.cpp b/src/plugins/qmldesigner/designercore/model/parsedqml.cpp index 733c31c38f0..543703df040 100644 --- a/src/plugins/qmldesigner/designercore/model/parsedqml.cpp +++ b/src/plugins/qmldesigner/designercore/model/parsedqml.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qmldesigner/designercore/model/parsedqml.h b/src/plugins/qmldesigner/designercore/model/parsedqml.h index 0bba6c57b87..9b4cbecc7d3 100644 --- a/src/plugins/qmldesigner/designercore/model/parsedqml.h +++ b/src/plugins/qmldesigner/designercore/model/parsedqml.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qmldesigner/designercore/model/paster.cpp b/src/plugins/qmldesigner/designercore/model/paster.cpp index d8dcb79f3f9..52f29146c6f 100644 --- a/src/plugins/qmldesigner/designercore/model/paster.cpp +++ b/src/plugins/qmldesigner/designercore/model/paster.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qmldesigner/designercore/model/paster.h b/src/plugins/qmldesigner/designercore/model/paster.h index 38ccc01b9ec..3f9d07c3926 100644 --- a/src/plugins/qmldesigner/designercore/model/paster.h +++ b/src/plugins/qmldesigner/designercore/model/paster.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qmldesigner/designercore/model/propertybinding.cpp b/src/plugins/qmldesigner/designercore/model/propertybinding.cpp index 792321f0d30..d88ce07e8c7 100644 --- a/src/plugins/qmldesigner/designercore/model/propertybinding.cpp +++ b/src/plugins/qmldesigner/designercore/model/propertybinding.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qmldesigner/designercore/preview/stylemanager.cpp b/src/plugins/qmldesigner/designercore/preview/stylemanager.cpp index 3957af5ff6d..09e89a6df8c 100644 --- a/src/plugins/qmldesigner/designercore/preview/stylemanager.cpp +++ b/src/plugins/qmldesigner/designercore/preview/stylemanager.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qmldesigner/qmlcontextpane.cpp b/src/plugins/qmldesigner/qmlcontextpane.cpp index 64cac4cf49c..447a69fbe37 100644 --- a/src/plugins/qmldesigner/qmlcontextpane.cpp +++ b/src/plugins/qmldesigner/qmlcontextpane.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qmldesigner/qmlcontextpane.h b/src/plugins/qmldesigner/qmlcontextpane.h index 63d334c6db6..9bc72eb9504 100644 --- a/src/plugins/qmldesigner/qmlcontextpane.h +++ b/src/plugins/qmldesigner/qmlcontextpane.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qmljstools/qmljstoolssettings.h b/src/plugins/qmljstools/qmljstoolssettings.h index 9eb8b657c5c..9e7f0815e44 100644 --- a/src/plugins/qmljstools/qmljstoolssettings.h +++ b/src/plugins/qmljstools/qmljstoolssettings.h @@ -4,7 +4,7 @@ ** ** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). ** -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** ** No Commercial Usage ** @@ -27,7 +27,7 @@ ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qmlprofiler/codaqmlprofilerrunner.cpp b/src/plugins/qmlprofiler/codaqmlprofilerrunner.cpp index 1cc93a8cf1c..9a37edd92c5 100644 --- a/src/plugins/qmlprofiler/codaqmlprofilerrunner.cpp +++ b/src/plugins/qmlprofiler/codaqmlprofilerrunner.cpp @@ -4,7 +4,7 @@ ** ** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). ** -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** ** No Commercial Usage ** @@ -27,7 +27,7 @@ ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qmlprofiler/remotelinuxqmlprofilerrunner.cpp b/src/plugins/qmlprofiler/remotelinuxqmlprofilerrunner.cpp index aecb8940ab0..05588e507e1 100644 --- a/src/plugins/qmlprofiler/remotelinuxqmlprofilerrunner.cpp +++ b/src/plugins/qmlprofiler/remotelinuxqmlprofilerrunner.cpp @@ -4,7 +4,7 @@ ** ** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). ** -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** ** No Commercial Usage ** @@ -27,7 +27,7 @@ ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qt4projectmanager/applicationlauncher.h b/src/plugins/qt4projectmanager/applicationlauncher.h index 0315b68c6f3..a17f479fd85 100644 --- a/src/plugins/qt4projectmanager/applicationlauncher.h +++ b/src/plugins/qt4projectmanager/applicationlauncher.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicedebugruncontrol.cpp b/src/plugins/qt4projectmanager/qt-s60/s60devicedebugruncontrol.cpp index d43a455b5f1..b15d8df78a8 100644 --- a/src/plugins/qt4projectmanager/qt-s60/s60devicedebugruncontrol.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/s60devicedebugruncontrol.cpp @@ -4,7 +4,7 @@ ** ** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). ** -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** ** No Commercial Usage ** @@ -27,7 +27,7 @@ ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicedebugruncontrol.h b/src/plugins/qt4projectmanager/qt-s60/s60devicedebugruncontrol.h index d316bf77937..90835dbad5c 100644 --- a/src/plugins/qt4projectmanager/qt-s60/s60devicedebugruncontrol.h +++ b/src/plugins/qt4projectmanager/qt-s60/s60devicedebugruncontrol.h @@ -4,7 +4,7 @@ ** ** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). ** -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** ** No Commercial Usage ** @@ -27,7 +27,7 @@ ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qtestlib/qtestlibplugin.cpp b/src/plugins/qtestlib/qtestlibplugin.cpp index 91d443e7f21..972ec25f7fa 100644 --- a/src/plugins/qtestlib/qtestlibplugin.cpp +++ b/src/plugins/qtestlib/qtestlibplugin.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/qtestlib/qtestlibplugin.h b/src/plugins/qtestlib/qtestlibplugin.h index 7e89b4c0dd8..612b99e8aa2 100644 --- a/src/plugins/qtestlib/qtestlibplugin.h +++ b/src/plugins/qtestlib/qtestlibplugin.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/regexp/regexpplugin.cpp b/src/plugins/regexp/regexpplugin.cpp index f774121bd84..f027c92b0bc 100644 --- a/src/plugins/regexp/regexpplugin.cpp +++ b/src/plugins/regexp/regexpplugin.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/regexp/regexpplugin.h b/src/plugins/regexp/regexpplugin.h index f5084509606..6343dc923a6 100644 --- a/src/plugins/regexp/regexpplugin.h +++ b/src/plugins/regexp/regexpplugin.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/regexp/regexpwindow.cpp b/src/plugins/regexp/regexpwindow.cpp index 7497409e09c..fe9ff1f1c93 100644 --- a/src/plugins/regexp/regexpwindow.cpp +++ b/src/plugins/regexp/regexpwindow.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/regexp/regexpwindow.h b/src/plugins/regexp/regexpwindow.h index 75e2e7cf3df..9b09259443c 100644 --- a/src/plugins/regexp/regexpwindow.h +++ b/src/plugins/regexp/regexpwindow.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/regexp/settings.cpp b/src/plugins/regexp/settings.cpp index 18c08200684..0a58010f0f5 100644 --- a/src/plugins/regexp/settings.cpp +++ b/src/plugins/regexp/settings.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/plugins/regexp/settings.h b/src/plugins/regexp/settings.h index ba7b65fc4c7..56e35431598 100644 --- a/src/plugins/regexp/settings.h +++ b/src/plugins/regexp/settings.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/shared/qrceditor/test/main.cpp b/src/shared/qrceditor/test/main.cpp index 7d1ce834b8d..964abe9ba84 100644 --- a/src/shared/qrceditor/test/main.cpp +++ b/src/shared/qrceditor/test/main.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/shared/qrceditor/test/mainwindow.cpp b/src/shared/qrceditor/test/mainwindow.cpp index 65936871369..0b52d2ae4b9 100644 --- a/src/shared/qrceditor/test/mainwindow.cpp +++ b/src/shared/qrceditor/test/mainwindow.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/shared/qrceditor/test/mainwindow.h b/src/shared/qrceditor/test/mainwindow.h index 7b9d5a88df9..f5555ca99a4 100644 --- a/src/shared/qrceditor/test/mainwindow.h +++ b/src/shared/qrceditor/test/mainwindow.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/shared/qtcreator_gui_pch.h b/src/shared/qtcreator_gui_pch.h index 07274b2407c..9402640d261 100644 --- a/src/shared/qtcreator_gui_pch.h +++ b/src/shared/qtcreator_gui_pch.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/shared/qtcreator_pch.h b/src/shared/qtcreator_pch.h index 56e395ebcb2..6ce7c9c5bec 100644 --- a/src/shared/qtcreator_pch.h +++ b/src/shared/qtcreator_pch.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/shared/qtsingleapplication/qtsinglecoreapplication.cpp b/src/shared/qtsingleapplication/qtsinglecoreapplication.cpp index f988a62f8af..60dbb66aed8 100644 --- a/src/shared/qtsingleapplication/qtsinglecoreapplication.cpp +++ b/src/shared/qtsingleapplication/qtsinglecoreapplication.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/shared/qtsingleapplication/qtsinglecoreapplication.h b/src/shared/qtsingleapplication/qtsinglecoreapplication.h index b51998bb126..d8817749c7c 100644 --- a/src/shared/qtsingleapplication/qtsinglecoreapplication.h +++ b/src/shared/qtsingleapplication/qtsinglecoreapplication.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/shared/scriptwrapper/interface_wrap_helpers.h b/src/shared/scriptwrapper/interface_wrap_helpers.h index cee2a4e9b10..2ef7e0b6696 100644 --- a/src/shared/scriptwrapper/interface_wrap_helpers.h +++ b/src/shared/scriptwrapper/interface_wrap_helpers.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/tools/gen-cpp-ast/generate-ast.cpp b/src/tools/gen-cpp-ast/generate-ast.cpp index ef50686a5fb..012b35cfa90 100644 --- a/src/tools/gen-cpp-ast/generate-ast.cpp +++ b/src/tools/gen-cpp-ast/generate-ast.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/tools/makespy/main.cpp b/src/tools/makespy/main.cpp index d4056652cfa..55c17b9bfb6 100644 --- a/src/tools/makespy/main.cpp +++ b/src/tools/makespy/main.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/tools/mkvisitor/main.cpp b/src/tools/mkvisitor/main.cpp index 7b3b46bb4b2..1d61e67bfad 100644 --- a/src/tools/mkvisitor/main.cpp +++ b/src/tools/mkvisitor/main.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/tools/qpatch/qpatch.cpp b/src/tools/qpatch/qpatch.cpp index 1e3fb49104f..a4362849d13 100644 --- a/src/tools/qpatch/qpatch.cpp +++ b/src/tools/qpatch/qpatch.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/tools/qtcreatorwidgets/customwidget.h b/src/tools/qtcreatorwidgets/customwidget.h index 242e542cd26..a71ff7448b9 100644 --- a/src/tools/qtcreatorwidgets/customwidget.h +++ b/src/tools/qtcreatorwidgets/customwidget.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/tools/qtcreatorwidgets/customwidgets.cpp b/src/tools/qtcreatorwidgets/customwidgets.cpp index 266ef52345b..ac4f2f68f32 100644 --- a/src/tools/qtcreatorwidgets/customwidgets.cpp +++ b/src/tools/qtcreatorwidgets/customwidgets.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/tools/qtcreatorwidgets/customwidgets.h b/src/tools/qtcreatorwidgets/customwidgets.h index 6c62f43c09a..2fbee7448a7 100644 --- a/src/tools/qtcreatorwidgets/customwidgets.h +++ b/src/tools/qtcreatorwidgets/customwidgets.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/tools/qtlibspatcher/binpatch.cpp b/src/tools/qtlibspatcher/binpatch.cpp index ce20038684b..5a6ff176c4e 100644 --- a/src/tools/qtlibspatcher/binpatch.cpp +++ b/src/tools/qtlibspatcher/binpatch.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/tools/qtlibspatcher/binpatch.h b/src/tools/qtlibspatcher/binpatch.h index 04f2a2b91a9..40e4dad7991 100644 --- a/src/tools/qtlibspatcher/binpatch.h +++ b/src/tools/qtlibspatcher/binpatch.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/src/tools/qtlibspatcher/qtlibspatchermain.cpp b/src/tools/qtlibspatcher/qtlibspatchermain.cpp index 41b930aeda7..c752d937c2d 100644 --- a/src/tools/qtlibspatcher/qtlibspatchermain.cpp +++ b/src/tools/qtlibspatcher/qtlibspatchermain.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/aggregation/tst_aggregate.cpp b/tests/auto/aggregation/tst_aggregate.cpp index 8126c635524..d7842346e24 100644 --- a/tests/auto/aggregation/tst_aggregate.cpp +++ b/tests/auto/aggregation/tst_aggregate.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/changeset/tst_changeset.cpp b/tests/auto/changeset/tst_changeset.cpp index 00178e97a1d..c8626f51916 100644 --- a/tests/auto/changeset/tst_changeset.cpp +++ b/tests/auto/changeset/tst_changeset.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/cplusplus/ast/tst_ast.cpp b/tests/auto/cplusplus/ast/tst_ast.cpp index f5aea49a853..35f55e26c19 100644 --- a/tests/auto/cplusplus/ast/tst_ast.cpp +++ b/tests/auto/cplusplus/ast/tst_ast.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp b/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp index 9dbe5506a71..fedea8c9095 100644 --- a/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp +++ b/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/cplusplus/codegen/tst_codegen.cpp b/tests/auto/cplusplus/codegen/tst_codegen.cpp index 78ffdfa6773..158669db0b4 100644 --- a/tests/auto/cplusplus/codegen/tst_codegen.cpp +++ b/tests/auto/cplusplus/codegen/tst_codegen.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/cplusplus/findusages/tst_findusages.cpp b/tests/auto/cplusplus/findusages/tst_findusages.cpp index fe73b54bdb7..d99988ae9e3 100644 --- a/tests/auto/cplusplus/findusages/tst_findusages.cpp +++ b/tests/auto/cplusplus/findusages/tst_findusages.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/cplusplus/lookup/tst_lookup.cpp b/tests/auto/cplusplus/lookup/tst_lookup.cpp index 347ebd4d6de..baabd04624d 100644 --- a/tests/auto/cplusplus/lookup/tst_lookup.cpp +++ b/tests/auto/cplusplus/lookup/tst_lookup.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/cplusplus/misc/tst_misc.cpp b/tests/auto/cplusplus/misc/tst_misc.cpp index 3e465aff05f..b814992b8dc 100644 --- a/tests/auto/cplusplus/misc/tst_misc.cpp +++ b/tests/auto/cplusplus/misc/tst_misc.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp b/tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp index 98a6dbdd9de..b6697e69074 100644 --- a/tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp +++ b/tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/cplusplus/semantic/tst_semantic.cpp b/tests/auto/cplusplus/semantic/tst_semantic.cpp index 5780ac49102..144b87242a9 100644 --- a/tests/auto/cplusplus/semantic/tst_semantic.cpp +++ b/tests/auto/cplusplus/semantic/tst_semantic.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/cplusplus/simplifytypes/tst_simplifytypestest.cpp b/tests/auto/cplusplus/simplifytypes/tst_simplifytypestest.cpp index bc1289a28d7..361a97e47fe 100644 --- a/tests/auto/cplusplus/simplifytypes/tst_simplifytypestest.cpp +++ b/tests/auto/cplusplus/simplifytypes/tst_simplifytypestest.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/cplusplus/typeprettyprinter/tst_typeprettyprinter.cpp b/tests/auto/cplusplus/typeprettyprinter/tst_typeprettyprinter.cpp index e2cfa8d85ad..1ab85cfd55e 100644 --- a/tests/auto/cplusplus/typeprettyprinter/tst_typeprettyprinter.cpp +++ b/tests/auto/cplusplus/typeprettyprinter/tst_typeprettyprinter.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/debugger/tst_dumpers.cpp b/tests/auto/debugger/tst_dumpers.cpp index 0364e70b33a..9471b230bc2 100644 --- a/tests/auto/debugger/tst_dumpers.cpp +++ b/tests/auto/debugger/tst_dumpers.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/debugger/tst_gdb.cpp b/tests/auto/debugger/tst_gdb.cpp index 1d2cca0016c..7586540bf0c 100644 --- a/tests/auto/debugger/tst_gdb.cpp +++ b/tests/auto/debugger/tst_gdb.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/debugger/tst_version.cpp b/tests/auto/debugger/tst_version.cpp index dee60eedbf0..75d91a19cdb 100644 --- a/tests/auto/debugger/tst_version.cpp +++ b/tests/auto/debugger/tst_version.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/environment/tst_environment.cpp b/tests/auto/environment/tst_environment.cpp index bf9a260685c..171eab7238f 100644 --- a/tests/auto/environment/tst_environment.cpp +++ b/tests/auto/environment/tst_environment.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/extensionsystem/pluginmanager/circularplugins/plugin1/plugin1.cpp b/tests/auto/extensionsystem/pluginmanager/circularplugins/plugin1/plugin1.cpp index 814fd139aa3..f116b5c6d32 100644 --- a/tests/auto/extensionsystem/pluginmanager/circularplugins/plugin1/plugin1.cpp +++ b/tests/auto/extensionsystem/pluginmanager/circularplugins/plugin1/plugin1.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/extensionsystem/pluginmanager/circularplugins/plugin1/plugin1.h b/tests/auto/extensionsystem/pluginmanager/circularplugins/plugin1/plugin1.h index 0a6cac61437..529455f888e 100644 --- a/tests/auto/extensionsystem/pluginmanager/circularplugins/plugin1/plugin1.h +++ b/tests/auto/extensionsystem/pluginmanager/circularplugins/plugin1/plugin1.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/extensionsystem/pluginmanager/circularplugins/plugin2/plugin2.cpp b/tests/auto/extensionsystem/pluginmanager/circularplugins/plugin2/plugin2.cpp index cd53d96a5de..ee20164a1cb 100644 --- a/tests/auto/extensionsystem/pluginmanager/circularplugins/plugin2/plugin2.cpp +++ b/tests/auto/extensionsystem/pluginmanager/circularplugins/plugin2/plugin2.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/extensionsystem/pluginmanager/circularplugins/plugin2/plugin2.h b/tests/auto/extensionsystem/pluginmanager/circularplugins/plugin2/plugin2.h index df6aa752e67..5ee45d58fe1 100644 --- a/tests/auto/extensionsystem/pluginmanager/circularplugins/plugin2/plugin2.h +++ b/tests/auto/extensionsystem/pluginmanager/circularplugins/plugin2/plugin2.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/extensionsystem/pluginmanager/circularplugins/plugin3/plugin3.cpp b/tests/auto/extensionsystem/pluginmanager/circularplugins/plugin3/plugin3.cpp index f1da14bd4f6..ee7dbec1203 100644 --- a/tests/auto/extensionsystem/pluginmanager/circularplugins/plugin3/plugin3.cpp +++ b/tests/auto/extensionsystem/pluginmanager/circularplugins/plugin3/plugin3.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ #include "plugin3.h" diff --git a/tests/auto/extensionsystem/pluginmanager/circularplugins/plugin3/plugin3.h b/tests/auto/extensionsystem/pluginmanager/circularplugins/plugin3/plugin3.h index 75277b318d8..3ee0d5c3995 100644 --- a/tests/auto/extensionsystem/pluginmanager/circularplugins/plugin3/plugin3.h +++ b/tests/auto/extensionsystem/pluginmanager/circularplugins/plugin3/plugin3.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin1/plugin1.cpp b/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin1/plugin1.cpp index ff3a35522bc..f146f0ad0f9 100644 --- a/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin1/plugin1.cpp +++ b/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin1/plugin1.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin1/plugin1.h b/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin1/plugin1.h index 987196fe948..58d9777c236 100644 --- a/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin1/plugin1.h +++ b/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin1/plugin1.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin2/plugin2.cpp b/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin2/plugin2.cpp index c1c38e3a697..44e41a02c3e 100644 --- a/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin2/plugin2.cpp +++ b/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin2/plugin2.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin2/plugin2.h b/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin2/plugin2.h index 4ba3b35b57e..b2e9217517c 100644 --- a/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin2/plugin2.h +++ b/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin2/plugin2.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin3/plugin3.cpp b/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin3/plugin3.cpp index b87dfa41aa0..a21d83fa8f7 100644 --- a/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin3/plugin3.cpp +++ b/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin3/plugin3.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin3/plugin3.h b/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin3/plugin3.h index 816295a3053..c6e6a4ef92c 100644 --- a/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin3/plugin3.h +++ b/tests/auto/extensionsystem/pluginmanager/correctplugins1/plugin3/plugin3.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ #ifndef PLUGIN3_H diff --git a/tests/auto/extensionsystem/pluginmanager/tst_pluginmanager.cpp b/tests/auto/extensionsystem/pluginmanager/tst_pluginmanager.cpp index fc7c2d7ad9d..697496fdfc0 100644 --- a/tests/auto/extensionsystem/pluginmanager/tst_pluginmanager.cpp +++ b/tests/auto/extensionsystem/pluginmanager/tst_pluginmanager.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/extensionsystem/pluginspec/testplugin/testplugin.cpp b/tests/auto/extensionsystem/pluginspec/testplugin/testplugin.cpp index acbd4c2f37f..c8d31230cd6 100644 --- a/tests/auto/extensionsystem/pluginspec/testplugin/testplugin.cpp +++ b/tests/auto/extensionsystem/pluginspec/testplugin/testplugin.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/extensionsystem/pluginspec/testplugin/testplugin.h b/tests/auto/extensionsystem/pluginspec/testplugin/testplugin.h index 1bcc08076e4..0837588b8be 100644 --- a/tests/auto/extensionsystem/pluginspec/testplugin/testplugin.h +++ b/tests/auto/extensionsystem/pluginspec/testplugin/testplugin.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/extensionsystem/pluginspec/testplugin/testplugin_global.h b/tests/auto/extensionsystem/pluginspec/testplugin/testplugin_global.h index 519867fc0a1..718f530dfbe 100644 --- a/tests/auto/extensionsystem/pluginspec/testplugin/testplugin_global.h +++ b/tests/auto/extensionsystem/pluginspec/testplugin/testplugin_global.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/extensionsystem/pluginspec/tst_pluginspec.cpp b/tests/auto/extensionsystem/pluginspec/tst_pluginspec.cpp index c1df40de1f4..123ca6d0b55 100644 --- a/tests/auto/extensionsystem/pluginspec/tst_pluginspec.cpp +++ b/tests/auto/extensionsystem/pluginspec/tst_pluginspec.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/fakevim/tst_fakevim.cpp b/tests/auto/fakevim/tst_fakevim.cpp index 1192d863e93..c0bf411f393 100644 --- a/tests/auto/fakevim/tst_fakevim.cpp +++ b/tests/auto/fakevim/tst_fakevim.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/filesearch/tst_filesearch.cpp b/tests/auto/filesearch/tst_filesearch.cpp index 5d8b36c045e..080013e04a1 100644 --- a/tests/auto/filesearch/tst_filesearch.cpp +++ b/tests/auto/filesearch/tst_filesearch.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/generichighlighter/highlighterengine/basetextdocumentlayout.h b/tests/auto/generichighlighter/highlighterengine/basetextdocumentlayout.h index 50ff40f782b..ceb7dec1b2d 100644 --- a/tests/auto/generichighlighter/highlighterengine/basetextdocumentlayout.h +++ b/tests/auto/generichighlighter/highlighterengine/basetextdocumentlayout.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/generichighlighter/highlighterengine/formats.cpp b/tests/auto/generichighlighter/highlighterengine/formats.cpp index 854acf893f4..ec0d8b7109c 100644 --- a/tests/auto/generichighlighter/highlighterengine/formats.cpp +++ b/tests/auto/generichighlighter/highlighterengine/formats.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/generichighlighter/highlighterengine/formats.h b/tests/auto/generichighlighter/highlighterengine/formats.h index 81823697ec1..dddc7abce76 100644 --- a/tests/auto/generichighlighter/highlighterengine/formats.h +++ b/tests/auto/generichighlighter/highlighterengine/formats.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/generichighlighter/highlighterengine/highlightermock.cpp b/tests/auto/generichighlighter/highlighterengine/highlightermock.cpp index a1e5ed8e940..078aa3a8f30 100644 --- a/tests/auto/generichighlighter/highlighterengine/highlightermock.cpp +++ b/tests/auto/generichighlighter/highlighterengine/highlightermock.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/generichighlighter/highlighterengine/highlightermock.h b/tests/auto/generichighlighter/highlighterengine/highlightermock.h index de36ba328cd..f085c826265 100644 --- a/tests/auto/generichighlighter/highlighterengine/highlightermock.h +++ b/tests/auto/generichighlighter/highlighterengine/highlightermock.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/generichighlighter/highlighterengine/syntaxhighlighter.h b/tests/auto/generichighlighter/highlighterengine/syntaxhighlighter.h index 00243c13bb0..34082947e38 100644 --- a/tests/auto/generichighlighter/highlighterengine/syntaxhighlighter.h +++ b/tests/auto/generichighlighter/highlighterengine/syntaxhighlighter.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/generichighlighter/highlighterengine/tabsettings.h b/tests/auto/generichighlighter/highlighterengine/tabsettings.h index 40f63ee22c6..9a20f3641a2 100644 --- a/tests/auto/generichighlighter/highlighterengine/tabsettings.h +++ b/tests/auto/generichighlighter/highlighterengine/tabsettings.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/generichighlighter/highlighterengine/tst_highlighterengine.cpp b/tests/auto/generichighlighter/highlighterengine/tst_highlighterengine.cpp index 24ae2376bc3..2c6a8932d84 100644 --- a/tests/auto/generichighlighter/highlighterengine/tst_highlighterengine.cpp +++ b/tests/auto/generichighlighter/highlighterengine/tst_highlighterengine.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/generichighlighter/specificrules/tst_specificrules.cpp b/tests/auto/generichighlighter/specificrules/tst_specificrules.cpp index e5e97f4d6f5..e270ee02974 100644 --- a/tests/auto/generichighlighter/specificrules/tst_specificrules.cpp +++ b/tests/auto/generichighlighter/specificrules/tst_specificrules.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/icheckbuild/ichecklib.cpp b/tests/auto/icheckbuild/ichecklib.cpp index 0d6e186a0a0..22aefc106bb 100644 --- a/tests/auto/icheckbuild/ichecklib.cpp +++ b/tests/auto/icheckbuild/ichecklib.cpp @@ -25,7 +25,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/icheckbuild/ichecklib.h b/tests/auto/icheckbuild/ichecklib.h index ba0f678398e..8c692f9675d 100644 --- a/tests/auto/icheckbuild/ichecklib.h +++ b/tests/auto/icheckbuild/ichecklib.h @@ -25,7 +25,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/icheckbuild/ichecklib_global.h b/tests/auto/icheckbuild/ichecklib_global.h index 6801dd96160..d46d22c97b7 100644 --- a/tests/auto/icheckbuild/ichecklib_global.h +++ b/tests/auto/icheckbuild/ichecklib_global.h @@ -25,7 +25,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/icheckbuild/parsemanager.cpp b/tests/auto/icheckbuild/parsemanager.cpp index feda22ae05e..1ee0769c657 100644 --- a/tests/auto/icheckbuild/parsemanager.cpp +++ b/tests/auto/icheckbuild/parsemanager.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/icheckbuild/parsemanager.h b/tests/auto/icheckbuild/parsemanager.h index f00154d0ee8..ee8cb2b168d 100644 --- a/tests/auto/icheckbuild/parsemanager.h +++ b/tests/auto/icheckbuild/parsemanager.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/icheckbuild/tst_icheckbuild.cpp b/tests/auto/icheckbuild/tst_icheckbuild.cpp index 0f765b165c6..7a55da291d4 100644 --- a/tests/auto/icheckbuild/tst_icheckbuild.cpp +++ b/tests/auto/icheckbuild/tst_icheckbuild.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/ioutils/tst_ioutils.cpp b/tests/auto/ioutils/tst_ioutils.cpp index 91ea659999c..8783fc32a76 100644 --- a/tests/auto/ioutils/tst_ioutils.cpp +++ b/tests/auto/ioutils/tst_ioutils.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/profilewriter/tst_profilewriter.cpp b/tests/auto/profilewriter/tst_profilewriter.cpp index aad0204acba..5d0a374ead4 100644 --- a/tests/auto/profilewriter/tst_profilewriter.cpp +++ b/tests/auto/profilewriter/tst_profilewriter.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/qml/codemodel/basic/tst_basic.cpp b/tests/auto/qml/codemodel/basic/tst_basic.cpp index 94df6bbddef..b9d175dd124 100644 --- a/tests/auto/qml/codemodel/basic/tst_basic.cpp +++ b/tests/auto/qml/codemodel/basic/tst_basic.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/qml/qmldesigner/bauhaustests/testbauhaus.cpp b/tests/auto/qml/qmldesigner/bauhaustests/testbauhaus.cpp index 782058f66ab..c9fca2e652e 100644 --- a/tests/auto/qml/qmldesigner/bauhaustests/testbauhaus.cpp +++ b/tests/auto/qml/qmldesigner/bauhaustests/testbauhaus.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/qml/qmldesigner/bauhaustests/testbauhaus.h b/tests/auto/qml/qmldesigner/bauhaustests/testbauhaus.h index c4b062fb83d..8f8d5ad26c5 100644 --- a/tests/auto/qml/qmldesigner/bauhaustests/testbauhaus.h +++ b/tests/auto/qml/qmldesigner/bauhaustests/testbauhaus.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/qml/qmldesigner/common/statichelpers.cpp b/tests/auto/qml/qmldesigner/common/statichelpers.cpp index cd0eb6058eb..287d60221dc 100644 --- a/tests/auto/qml/qmldesigner/common/statichelpers.cpp +++ b/tests/auto/qml/qmldesigner/common/statichelpers.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/qml/qmldesigner/coretests/testrewriterview.cpp b/tests/auto/qml/qmldesigner/coretests/testrewriterview.cpp index f9ddd5fd038..f0f96aa571f 100644 --- a/tests/auto/qml/qmldesigner/coretests/testrewriterview.cpp +++ b/tests/auto/qml/qmldesigner/coretests/testrewriterview.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/qml/qmldesigner/coretests/testrewriterview.h b/tests/auto/qml/qmldesigner/coretests/testrewriterview.h index f142393dbd0..1748cdbb64c 100644 --- a/tests/auto/qml/qmldesigner/coretests/testrewriterview.h +++ b/tests/auto/qml/qmldesigner/coretests/testrewriterview.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp b/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp index cef95e1690c..e60c8b76bdf 100644 --- a/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp +++ b/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/qml/qmldesigner/coretests/tst_testcore.h b/tests/auto/qml/qmldesigner/coretests/tst_testcore.h index 61167e75a63..5bf79e57ce9 100644 --- a/tests/auto/qml/qmldesigner/coretests/tst_testcore.h +++ b/tests/auto/qml/qmldesigner/coretests/tst_testcore.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/qml/qmldesigner/propertyeditortests/testpropertyeditor.cpp b/tests/auto/qml/qmldesigner/propertyeditortests/testpropertyeditor.cpp index cb0dd7f1732..1927bf5b27a 100644 --- a/tests/auto/qml/qmldesigner/propertyeditortests/testpropertyeditor.cpp +++ b/tests/auto/qml/qmldesigner/propertyeditortests/testpropertyeditor.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/qml/qmldesigner/propertyeditortests/testpropertyeditor.h b/tests/auto/qml/qmldesigner/propertyeditortests/testpropertyeditor.h index 0d041f46308..235fb40fe22 100644 --- a/tests/auto/qml/qmldesigner/propertyeditortests/testpropertyeditor.h +++ b/tests/auto/qml/qmldesigner/propertyeditortests/testpropertyeditor.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/qml/qmldesigner/testview.cpp b/tests/auto/qml/qmldesigner/testview.cpp index 3851ac77a02..e445e27cf63 100644 --- a/tests/auto/qml/qmldesigner/testview.cpp +++ b/tests/auto/qml/qmldesigner/testview.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/qml/qmldesigner/testview.h b/tests/auto/qml/qmldesigner/testview.h index 30c79767e87..6039fc2489a 100644 --- a/tests/auto/qml/qmldesigner/testview.h +++ b/tests/auto/qml/qmldesigner/testview.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/qml/qmleditor/qmlcodeformatter/tst_qmlcodeformatter.cpp b/tests/auto/qml/qmleditor/qmlcodeformatter/tst_qmlcodeformatter.cpp index d03593fba89..f45f35ef68d 100644 --- a/tests/auto/qml/qmleditor/qmlcodeformatter/tst_qmlcodeformatter.cpp +++ b/tests/auto/qml/qmleditor/qmlcodeformatter/tst_qmlcodeformatter.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/qml/qmleditor/qmllookup/tst_qmllookup.cpp b/tests/auto/qml/qmleditor/qmllookup/tst_qmllookup.cpp index 7ec4e8747da..4977c88ee51 100644 --- a/tests/auto/qml/qmleditor/qmllookup/tst_qmllookup.cpp +++ b/tests/auto/qml/qmleditor/qmllookup/tst_qmllookup.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/qml/qmlprojectmanager/fileformat/tst_fileformat.cpp b/tests/auto/qml/qmlprojectmanager/fileformat/tst_fileformat.cpp index c89018e65c7..ea326182bc8 100644 --- a/tests/auto/qml/qmlprojectmanager/fileformat/tst_fileformat.cpp +++ b/tests/auto/qml/qmlprojectmanager/fileformat/tst_fileformat.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/qtcprocess/tst_qtcprocess.cpp b/tests/auto/qtcprocess/tst_qtcprocess.cpp index 35b0d134338..d8d9dbb59c2 100644 --- a/tests/auto/qtcprocess/tst_qtcprocess.cpp +++ b/tests/auto/qtcprocess/tst_qtcprocess.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/auto/utils_stringutils/tst_stringutils.cpp b/tests/auto/utils_stringutils/tst_stringutils.cpp index 270e286561d..f6d372f7b90 100644 --- a/tests/auto/utils_stringutils/tst_stringutils.cpp +++ b/tests/auto/utils_stringutils/tst_stringutils.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/manual/appwizards/helpers.cpp b/tests/manual/appwizards/helpers.cpp index 1c548b1ded1..ddd636df213 100644 --- a/tests/manual/appwizards/helpers.cpp +++ b/tests/manual/appwizards/helpers.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/manual/appwizards/main.cpp b/tests/manual/appwizards/main.cpp index 2f8b7c81a80..f6b1a8a5ba0 100644 --- a/tests/manual/appwizards/main.cpp +++ b/tests/manual/appwizards/main.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/manual/cplusplus-frontend/main.cpp b/tests/manual/cplusplus-frontend/main.cpp index 464caaf5557..8926bff0d61 100644 --- a/tests/manual/cplusplus-frontend/main.cpp +++ b/tests/manual/cplusplus-frontend/main.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/manual/cplusplus-frontend/tests/t1.cpp b/tests/manual/cplusplus-frontend/tests/t1.cpp index 37a7a6ef871..c4858a88d6a 100644 --- a/tests/manual/cplusplus-frontend/tests/t1.cpp +++ b/tests/manual/cplusplus-frontend/tests/t1.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/manual/cplusplus-tools/detail/header.h b/tests/manual/cplusplus-tools/detail/header.h index 99ae65de0e1..72a50dd98a9 100644 --- a/tests/manual/cplusplus-tools/detail/header.h +++ b/tests/manual/cplusplus-tools/detail/header.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/manual/cplusplus-tools/detail/source.cpp b/tests/manual/cplusplus-tools/detail/source.cpp index c1edc824d4e..e820a14a2a9 100644 --- a/tests/manual/cplusplus-tools/detail/source.cpp +++ b/tests/manual/cplusplus-tools/detail/source.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/manual/cplusplus-tools/dummy.cpp b/tests/manual/cplusplus-tools/dummy.cpp index 190bd2e67d5..e87e4443765 100644 --- a/tests/manual/cplusplus-tools/dummy.cpp +++ b/tests/manual/cplusplus-tools/dummy.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/manual/cplusplus-tools/dummy.h b/tests/manual/cplusplus-tools/dummy.h index 421332a1a3b..a898f9b66a5 100644 --- a/tests/manual/cplusplus-tools/dummy.h +++ b/tests/manual/cplusplus-tools/dummy.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/manual/cplusplus-tools/main.cpp b/tests/manual/cplusplus-tools/main.cpp index 75ab889991b..fddb143a38c 100644 --- a/tests/manual/cplusplus-tools/main.cpp +++ b/tests/manual/cplusplus-tools/main.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/manual/cppquickfix/completeswitchcasestatement.cpp b/tests/manual/cppquickfix/completeswitchcasestatement.cpp index fcf173f052c..6f8286eed9e 100644 --- a/tests/manual/cppquickfix/completeswitchcasestatement.cpp +++ b/tests/manual/cppquickfix/completeswitchcasestatement.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/manual/cppquickfix/convertnumericliteral.cpp b/tests/manual/cppquickfix/convertnumericliteral.cpp index 22576e6781e..55bf4f0e51e 100644 --- a/tests/manual/cppquickfix/convertnumericliteral.cpp +++ b/tests/manual/cppquickfix/convertnumericliteral.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/manual/dockwidgets/main.cpp b/tests/manual/dockwidgets/main.cpp index ea305d91e37..3521ab0458e 100644 --- a/tests/manual/dockwidgets/main.cpp +++ b/tests/manual/dockwidgets/main.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/manual/dockwidgets/mainwindow.cpp b/tests/manual/dockwidgets/mainwindow.cpp index 9b7dfd96b72..eacd29d05c9 100644 --- a/tests/manual/dockwidgets/mainwindow.cpp +++ b/tests/manual/dockwidgets/mainwindow.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/manual/dockwidgets/mainwindow.h b/tests/manual/dockwidgets/mainwindow.h index 3e83a3a687e..b146ee3a968 100644 --- a/tests/manual/dockwidgets/mainwindow.h +++ b/tests/manual/dockwidgets/mainwindow.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/manual/fakevim/main.cpp b/tests/manual/fakevim/main.cpp index a0f9c7f1aea..491779d1312 100644 --- a/tests/manual/fakevim/main.cpp +++ b/tests/manual/fakevim/main.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/manual/gdbdebugger/boost/main.cpp b/tests/manual/gdbdebugger/boost/main.cpp index 5bffac268ee..46f33b9723f 100644 --- a/tests/manual/gdbdebugger/boost/main.cpp +++ b/tests/manual/gdbdebugger/boost/main.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/manual/gdbdebugger/gui/mainwindow.cpp b/tests/manual/gdbdebugger/gui/mainwindow.cpp index a9aa5895ae6..104671b994a 100644 --- a/tests/manual/gdbdebugger/gui/mainwindow.cpp +++ b/tests/manual/gdbdebugger/gui/mainwindow.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/manual/gdbdebugger/gui/mainwindow.h b/tests/manual/gdbdebugger/gui/mainwindow.h index d46535e587e..2a7479e4235 100644 --- a/tests/manual/gdbdebugger/gui/mainwindow.h +++ b/tests/manual/gdbdebugger/gui/mainwindow.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/manual/gdbdebugger/gui/tst_gui.cpp b/tests/manual/gdbdebugger/gui/tst_gui.cpp index 27505e9f1e6..e537b0db970 100644 --- a/tests/manual/gdbdebugger/gui/tst_gui.cpp +++ b/tests/manual/gdbdebugger/gui/tst_gui.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/manual/gdbdebugger/helper/main.cpp b/tests/manual/gdbdebugger/helper/main.cpp index bd2771fdbe8..72139b4c27a 100644 --- a/tests/manual/gdbdebugger/helper/main.cpp +++ b/tests/manual/gdbdebugger/helper/main.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/manual/gdbdebugger/script/math.js b/tests/manual/gdbdebugger/script/math.js index 28b152876f7..60462b8343d 100644 --- a/tests/manual/gdbdebugger/script/math.js +++ b/tests/manual/gdbdebugger/script/math.js @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/manual/gdbdebugger/simple/deep/deep/simple_gdbtest_app.h b/tests/manual/gdbdebugger/simple/deep/deep/simple_gdbtest_app.h index 0fe9c7b81e8..975d64f2a6c 100644 --- a/tests/manual/gdbdebugger/simple/deep/deep/simple_gdbtest_app.h +++ b/tests/manual/gdbdebugger/simple/deep/deep/simple_gdbtest_app.h @@ -4,7 +4,7 @@ ** ** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). ** -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** ** No Commercial Usage ** @@ -27,7 +27,7 @@ ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/manual/gdbdebugger/simple/simple_gdbtest_app.cpp b/tests/manual/gdbdebugger/simple/simple_gdbtest_app.cpp index c490f0b4193..4f3379114d1 100644 --- a/tests/manual/gdbdebugger/simple/simple_gdbtest_app.cpp +++ b/tests/manual/gdbdebugger/simple/simple_gdbtest_app.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/manual/gdbdebugger/simple/simple_gdbtest_plugin.cpp b/tests/manual/gdbdebugger/simple/simple_gdbtest_plugin.cpp index d1e8cb03e07..535a22c40f2 100644 --- a/tests/manual/gdbdebugger/simple/simple_gdbtest_plugin.cpp +++ b/tests/manual/gdbdebugger/simple/simple_gdbtest_plugin.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/manual/gdbdebugger/spacy path/app with space.cpp b/tests/manual/gdbdebugger/spacy path/app with space.cpp index 7b0ee3781de..f94dd73a46a 100644 --- a/tests/manual/gdbdebugger/spacy path/app with space.cpp +++ b/tests/manual/gdbdebugger/spacy path/app with space.cpp @@ -25,7 +25,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/manual/gdbdebugger/spacy path/plugin with space.cpp b/tests/manual/gdbdebugger/spacy path/plugin with space.cpp index ea9498d51ee..4b2b81c0f74 100644 --- a/tests/manual/gdbdebugger/spacy path/plugin with space.cpp +++ b/tests/manual/gdbdebugger/spacy path/plugin with space.cpp @@ -25,7 +25,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com ** **************************************************************************/ diff --git a/tests/manual/gdbdebugger/spacy-file/app with space.cpp b/tests/manual/gdbdebugger/spacy-file/app with space.cpp index 7b0ee3781de..5048b41d187 100644 --- a/tests/manual/gdbdebugger/spacy-file/app with space.cpp +++ b/tests/manual/gdbdebugger/spacy-file/app with space.cpp @@ -25,7 +25,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com ** **************************************************************************/ diff --git a/tests/manual/gdbdebugger/spacy-file/plugin with space.cpp b/tests/manual/gdbdebugger/spacy-file/plugin with space.cpp index ea9498d51ee..4b2b81c0f74 100644 --- a/tests/manual/gdbdebugger/spacy-file/plugin with space.cpp +++ b/tests/manual/gdbdebugger/spacy-file/plugin with space.cpp @@ -25,7 +25,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com ** **************************************************************************/ diff --git a/tests/manual/plain-cplusplus/Preprocessor.cpp b/tests/manual/plain-cplusplus/Preprocessor.cpp index 180cce83e7b..d857a6e2c4e 100644 --- a/tests/manual/plain-cplusplus/Preprocessor.cpp +++ b/tests/manual/plain-cplusplus/Preprocessor.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/manual/plain-cplusplus/Preprocessor.h b/tests/manual/plain-cplusplus/Preprocessor.h index e4c1c48e758..512f6850cc7 100644 --- a/tests/manual/plain-cplusplus/Preprocessor.h +++ b/tests/manual/plain-cplusplus/Preprocessor.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ #ifndef CPLUSPLUS_PREPROCESSOR_H diff --git a/tests/manual/plain-cplusplus/main.cpp b/tests/manual/plain-cplusplus/main.cpp index 443397b6569..78039deab36 100644 --- a/tests/manual/plain-cplusplus/main.cpp +++ b/tests/manual/plain-cplusplus/main.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/manual/preprocessor/main.cpp b/tests/manual/preprocessor/main.cpp index 15ef5f5c715..a90ce47f9ca 100644 --- a/tests/manual/preprocessor/main.cpp +++ b/tests/manual/preprocessor/main.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/manual/process/main.cpp b/tests/manual/process/main.cpp index beecc16b28a..bc1bb5e4807 100644 --- a/tests/manual/process/main.cpp +++ b/tests/manual/process/main.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/manual/process/mainwindow.cpp b/tests/manual/process/mainwindow.cpp index 9ed451832b6..f88ca43b598 100644 --- a/tests/manual/process/mainwindow.cpp +++ b/tests/manual/process/mainwindow.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** *************************************************************************/ diff --git a/tests/manual/process/mainwindow.h b/tests/manual/process/mainwindow.h index 5cc48432a37..e3dacb25507 100644 --- a/tests/manual/process/mainwindow.h +++ b/tests/manual/process/mainwindow.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/manual/progressmanager/main.cpp b/tests/manual/progressmanager/main.cpp index a45c87e39e8..83896f55fa1 100644 --- a/tests/manual/progressmanager/main.cpp +++ b/tests/manual/progressmanager/main.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/manual/progressmanager/roundprogress.cpp b/tests/manual/progressmanager/roundprogress.cpp index 22449cbdf10..b116c2be707 100644 --- a/tests/manual/progressmanager/roundprogress.cpp +++ b/tests/manual/progressmanager/roundprogress.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/manual/progressmanager/roundprogress.h b/tests/manual/progressmanager/roundprogress.h index 43f638e13d7..dbc5d636c55 100644 --- a/tests/manual/progressmanager/roundprogress.h +++ b/tests/manual/progressmanager/roundprogress.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/manual/proparser/main.cpp b/tests/manual/proparser/main.cpp index aec72921224..fb1543557f3 100644 --- a/tests/manual/proparser/main.cpp +++ b/tests/manual/proparser/main.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/manual/ssh/errorhandling/main.cpp b/tests/manual/ssh/errorhandling/main.cpp index c4308c8d0f3..b67c1b5951c 100644 --- a/tests/manual/ssh/errorhandling/main.cpp +++ b/tests/manual/ssh/errorhandling/main.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/manual/ssh/remoteprocess/argumentscollector.cpp b/tests/manual/ssh/remoteprocess/argumentscollector.cpp index 8ba66d7ea34..73e348b1e2c 100644 --- a/tests/manual/ssh/remoteprocess/argumentscollector.cpp +++ b/tests/manual/ssh/remoteprocess/argumentscollector.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/manual/ssh/remoteprocess/argumentscollector.h b/tests/manual/ssh/remoteprocess/argumentscollector.h index 473852cefa0..6efdb0d1a73 100644 --- a/tests/manual/ssh/remoteprocess/argumentscollector.h +++ b/tests/manual/ssh/remoteprocess/argumentscollector.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/manual/ssh/remoteprocess/main.cpp b/tests/manual/ssh/remoteprocess/main.cpp index 89ea6c5c2e8..747ee32f2b4 100644 --- a/tests/manual/ssh/remoteprocess/main.cpp +++ b/tests/manual/ssh/remoteprocess/main.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/manual/ssh/remoteprocess/remoteprocesstest.cpp b/tests/manual/ssh/remoteprocess/remoteprocesstest.cpp index cb1f489ed46..854caadea29 100644 --- a/tests/manual/ssh/remoteprocess/remoteprocesstest.cpp +++ b/tests/manual/ssh/remoteprocess/remoteprocesstest.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/manual/ssh/remoteprocess/remoteprocesstest.h b/tests/manual/ssh/remoteprocess/remoteprocesstest.h index 6163f66f000..d990379df04 100644 --- a/tests/manual/ssh/remoteprocess/remoteprocesstest.h +++ b/tests/manual/ssh/remoteprocess/remoteprocesstest.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/manual/ssh/sftp/argumentscollector.cpp b/tests/manual/ssh/sftp/argumentscollector.cpp index 369f0c6fa40..2bb59725963 100644 --- a/tests/manual/ssh/sftp/argumentscollector.cpp +++ b/tests/manual/ssh/sftp/argumentscollector.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/manual/ssh/sftp/argumentscollector.h b/tests/manual/ssh/sftp/argumentscollector.h index ad0d44f482b..460fe2df52c 100644 --- a/tests/manual/ssh/sftp/argumentscollector.h +++ b/tests/manual/ssh/sftp/argumentscollector.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/manual/ssh/sftp/main.cpp b/tests/manual/ssh/sftp/main.cpp index be362916562..51d5d8a70b7 100644 --- a/tests/manual/ssh/sftp/main.cpp +++ b/tests/manual/ssh/sftp/main.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/manual/ssh/sftp/parameters.h b/tests/manual/ssh/sftp/parameters.h index 66a364bc3d1..70372f7ad44 100644 --- a/tests/manual/ssh/sftp/parameters.h +++ b/tests/manual/ssh/sftp/parameters.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/manual/ssh/sftp/sftptest.cpp b/tests/manual/ssh/sftp/sftptest.cpp index 077ddc19c37..aab3cb2e670 100644 --- a/tests/manual/ssh/sftp/sftptest.cpp +++ b/tests/manual/ssh/sftp/sftptest.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/manual/ssh/sftp/sftptest.h b/tests/manual/ssh/sftp/sftptest.h index 34c6607c0d3..c1a093adc2c 100644 --- a/tests/manual/ssh/sftp/sftptest.h +++ b/tests/manual/ssh/sftp/sftptest.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/tools/codaclient/codaclientapplication.cpp b/tests/tools/codaclient/codaclientapplication.cpp index 62a55385d4c..b6667b4f1b9 100644 --- a/tests/tools/codaclient/codaclientapplication.cpp +++ b/tests/tools/codaclient/codaclientapplication.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/tools/codaclient/codaclientapplication.h b/tests/tools/codaclient/codaclientapplication.h index 6bed1c99399..88beb596b8f 100644 --- a/tests/tools/codaclient/codaclientapplication.h +++ b/tests/tools/codaclient/codaclientapplication.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/tools/codaclient/main.cpp b/tests/tools/codaclient/main.cpp index 80487ab5aa0..0c6ba42e69c 100644 --- a/tests/tools/codaclient/main.cpp +++ b/tests/tools/codaclient/main.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/tools/cplusplus-dump/dumpers.inc b/tests/tools/cplusplus-dump/dumpers.inc index c97824eb3d6..507ef64a5f9 100644 --- a/tests/tools/cplusplus-dump/dumpers.inc +++ b/tests/tools/cplusplus-dump/dumpers.inc @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/tools/cplusplus-dump/main.cpp b/tests/tools/cplusplus-dump/main.cpp index 7fb910f0f2a..861b98528ee 100644 --- a/tests/tools/cplusplus-dump/main.cpp +++ b/tests/tools/cplusplus-dump/main.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/tools/qml-ast2dot/main.cpp b/tests/tools/qml-ast2dot/main.cpp index a49250709b4..8c77249d449 100644 --- a/tests/tools/qml-ast2dot/main.cpp +++ b/tests/tools/qml-ast2dot/main.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/tools/qtquickappblaster/main.cpp b/tests/tools/qtquickappblaster/main.cpp index 36e58195064..0b235e1942b 100644 --- a/tests/tools/qtquickappblaster/main.cpp +++ b/tests/tools/qtquickappblaster/main.cpp @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/valgrind/callgrind/callgrindparsertests.cpp b/tests/valgrind/callgrind/callgrindparsertests.cpp index 73a6c8bd4d1..b1e6a8db9f8 100644 --- a/tests/valgrind/callgrind/callgrindparsertests.cpp +++ b/tests/valgrind/callgrind/callgrindparsertests.cpp @@ -4,7 +4,7 @@ ** ** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). ** -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** ** No Commercial Usage ** @@ -27,7 +27,7 @@ ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/valgrind/callgrind/callgrindparsertests.h b/tests/valgrind/callgrind/callgrindparsertests.h index 545c77f4356..a63a05f4431 100644 --- a/tests/valgrind/callgrind/callgrindparsertests.h +++ b/tests/valgrind/callgrind/callgrindparsertests.h @@ -4,7 +4,7 @@ ** ** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). ** -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** ** No Commercial Usage ** @@ -27,7 +27,7 @@ ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/valgrind/callgrind/modeltest.cpp b/tests/valgrind/callgrind/modeltest.cpp index 53030f8c6b3..d6ec5f1d1f5 100644 --- a/tests/valgrind/callgrind/modeltest.cpp +++ b/tests/valgrind/callgrind/modeltest.cpp @@ -4,7 +4,7 @@ ** ** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). ** -** Contact: Nokia Corporation (qt-info@nokia.com) +** Contact: Nokia Corporation (info@qt.nokia.com) ** ** No Commercial Usage ** @@ -27,7 +27,7 @@ ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/valgrind/callgrind/modeltest.h b/tests/valgrind/callgrind/modeltest.h index 0a6e181c17e..1f93af1aa32 100644 --- a/tests/valgrind/callgrind/modeltest.h +++ b/tests/valgrind/callgrind/modeltest.h @@ -26,7 +26,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/valgrind/memcheck/modeldemo.cpp b/tests/valgrind/memcheck/modeldemo.cpp index a5cf21d24b9..fdaac18046b 100644 --- a/tests/valgrind/memcheck/modeldemo.cpp +++ b/tests/valgrind/memcheck/modeldemo.cpp @@ -28,7 +28,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/valgrind/memcheck/modeldemo.h b/tests/valgrind/memcheck/modeldemo.h index 0f6fcb47604..135535e3caa 100644 --- a/tests/valgrind/memcheck/modeldemo.h +++ b/tests/valgrind/memcheck/modeldemo.h @@ -28,7 +28,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/valgrind/memcheck/testrunner.cpp b/tests/valgrind/memcheck/testrunner.cpp index 2618f73924f..c063e5227eb 100644 --- a/tests/valgrind/memcheck/testrunner.cpp +++ b/tests/valgrind/memcheck/testrunner.cpp @@ -28,7 +28,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/valgrind/memcheck/testrunner.h b/tests/valgrind/memcheck/testrunner.h index 3f8efe029ca..36218c56841 100644 --- a/tests/valgrind/memcheck/testrunner.h +++ b/tests/valgrind/memcheck/testrunner.h @@ -28,7 +28,7 @@ ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. +** Nokia at info@qt.nokia.com. ** **************************************************************************/ From 7ffd2e8b9f7a472652c5f9340c46343ca95c23ab Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Wed, 6 Jul 2011 10:38:53 +0200 Subject: [PATCH 107/143] Add missing license headers. Change-Id: I2dc5d18bfffc8389ad0b162b7dc3b5cc2406027f Reviewed-on: http://codereview.qt.nokia.com/1222 Reviewed-by: Jarek Kobus --- .../cpptools/cppcodestylepreferences.cpp | 32 +++++++++++++++++ .../cpptools/cppcodestylepreferences.h | 32 +++++++++++++++++ src/plugins/cpptools/cppcodestylesettings.cpp | 32 +++++++++++++++++ src/plugins/cpptools/cppcodestylesettings.h | 32 +++++++++++++++++ .../cpptools/cppcodestylesettingsfactory.cpp | 32 +++++++++++++++++ .../cpptools/cppcodestylesettingsfactory.h | 32 +++++++++++++++++ .../cpptools/cppcodestylesettingspage.cpp | 32 +++++++++++++++++ .../cpptools/cppcodestylesettingspage.h | 32 +++++++++++++++++ src/plugins/cpptools/cpptoolssettings.cpp | 32 +++++++++++++++++ src/plugins/cpptools/cpptoolssettings.h | 25 +++++++------- .../codestylesettingspropertiespage.cpp | 32 +++++++++++++++++ .../codestylesettingspropertiespage.h | 32 +++++++++++++++++ .../qmljstools/qmljscodestylesettingspage.cpp | 32 +++++++++++++++++ .../qmljstools/qmljscodestylesettingspage.h | 32 +++++++++++++++++ src/plugins/qmljstools/qmljstoolssettings.h | 25 +++++++------- .../codestylepreferencesmanager.cpp | 32 +++++++++++++++++ .../texteditor/codestylepreferencesmanager.h | 32 +++++++++++++++++ .../texteditor/fallbackselectorwidget.cpp | 32 +++++++++++++++++ .../texteditor/fallbackselectorwidget.h | 32 +++++++++++++++++ .../icodestylepreferencesfactory.cpp | 32 +++++++++++++++++ .../texteditor/icodestylepreferencesfactory.h | 32 +++++++++++++++++ .../texteditor/ifallbackpreferences.cpp | 32 +++++++++++++++++ src/plugins/texteditor/ifallbackpreferences.h | 32 +++++++++++++++++ src/plugins/texteditor/tabpreferences.cpp | 32 +++++++++++++++++ src/plugins/texteditor/tabpreferences.h | 32 +++++++++++++++++ .../texteditor/tabpreferenceswidget.cpp | 32 +++++++++++++++++ src/plugins/texteditor/tabpreferenceswidget.h | 32 +++++++++++++++++ src/plugins/texteditor/tabsettingswidget.cpp | 32 +++++++++++++++++ src/plugins/texteditor/tabsettingswidget.h | 32 +++++++++++++++++ .../qmllookup/data/localIdLookup.qml | 34 ++++++++++++++++++- .../qmllookup/data/localRootLookup.qml | 32 +++++++++++++++++ .../qmllookup/data/localScopeLookup.qml | 32 +++++++++++++++++ .../data/localScriptMethodLookup.qml | 34 ++++++++++++++++++- 33 files changed, 1018 insertions(+), 28 deletions(-) diff --git a/src/plugins/cpptools/cppcodestylepreferences.cpp b/src/plugins/cpptools/cppcodestylepreferences.cpp index 981216c5b26..5e3e27a8aaa 100644 --- a/src/plugins/cpptools/cppcodestylepreferences.cpp +++ b/src/plugins/cpptools/cppcodestylepreferences.cpp @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #include "cppcodestylepreferences.h" using namespace CppTools; diff --git a/src/plugins/cpptools/cppcodestylepreferences.h b/src/plugins/cpptools/cppcodestylepreferences.h index 991e15f0171..022d623e5f2 100644 --- a/src/plugins/cpptools/cppcodestylepreferences.h +++ b/src/plugins/cpptools/cppcodestylepreferences.h @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #ifndef CPPCODESTYLEPREFERENCES_H #define CPPCODESTYLEPREFERENCES_H diff --git a/src/plugins/cpptools/cppcodestylesettings.cpp b/src/plugins/cpptools/cppcodestylesettings.cpp index 13a06e26336..40efe1254ce 100644 --- a/src/plugins/cpptools/cppcodestylesettings.cpp +++ b/src/plugins/cpptools/cppcodestylesettings.cpp @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #include "cppcodestylesettings.h" #include diff --git a/src/plugins/cpptools/cppcodestylesettings.h b/src/plugins/cpptools/cppcodestylesettings.h index 320c99471f7..ea934814b4f 100644 --- a/src/plugins/cpptools/cppcodestylesettings.h +++ b/src/plugins/cpptools/cppcodestylesettings.h @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #ifndef CPPCODESTYLESETTINGS_H #define CPPCODESTYLESETTINGS_H diff --git a/src/plugins/cpptools/cppcodestylesettingsfactory.cpp b/src/plugins/cpptools/cppcodestylesettingsfactory.cpp index b794ace8957..dc2e3ab0b32 100644 --- a/src/plugins/cpptools/cppcodestylesettingsfactory.cpp +++ b/src/plugins/cpptools/cppcodestylesettingsfactory.cpp @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #include "cppcodestylesettingsfactory.h" #include "cppcodestylesettings.h" #include "cppcodestylesettingspage.h" diff --git a/src/plugins/cpptools/cppcodestylesettingsfactory.h b/src/plugins/cpptools/cppcodestylesettingsfactory.h index 53681d6dd00..85c59d55ea3 100644 --- a/src/plugins/cpptools/cppcodestylesettingsfactory.h +++ b/src/plugins/cpptools/cppcodestylesettingsfactory.h @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #ifndef CPPCODESTYLESETTINGSFACTORY_H #define CPPCODESTYLESETTINGSFACTORY_H diff --git a/src/plugins/cpptools/cppcodestylesettingspage.cpp b/src/plugins/cpptools/cppcodestylesettingspage.cpp index 6bb2013efc5..426d3da5d21 100644 --- a/src/plugins/cpptools/cppcodestylesettingspage.cpp +++ b/src/plugins/cpptools/cppcodestylesettingspage.cpp @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #include "cppcodestylesettingspage.h" #include "cppcodestylepreferences.h" #include "ui_cppcodestylesettingspage.h" diff --git a/src/plugins/cpptools/cppcodestylesettingspage.h b/src/plugins/cpptools/cppcodestylesettingspage.h index b632f1cccc1..dce545eeded 100644 --- a/src/plugins/cpptools/cppcodestylesettingspage.h +++ b/src/plugins/cpptools/cppcodestylesettingspage.h @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #ifndef CPPCODESTYLESETTINGSPAGE_H #define CPPCODESTYLESETTINGSPAGE_H diff --git a/src/plugins/cpptools/cpptoolssettings.cpp b/src/plugins/cpptools/cpptoolssettings.cpp index c203b9e5825..41608011615 100644 --- a/src/plugins/cpptools/cpptoolssettings.cpp +++ b/src/plugins/cpptools/cpptoolssettings.cpp @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #include "cpptoolssettings.h" #include "cpptoolsconstants.h" #include "cppcodestylepreferences.h" diff --git a/src/plugins/cpptools/cpptoolssettings.h b/src/plugins/cpptools/cpptoolssettings.h index 52f8744cbc3..cc0004bd7d5 100644 --- a/src/plugins/cpptools/cpptoolssettings.h +++ b/src/plugins/cpptools/cpptoolssettings.h @@ -6,26 +6,25 @@ ** ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** No Commercial Usage -** -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. ** ** GNU Lesser General Public License Usage ** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** ** If you have questions regarding the use of this file, please contact ** Nokia at info@qt.nokia.com. ** diff --git a/src/plugins/projectexplorer/codestylesettingspropertiespage.cpp b/src/plugins/projectexplorer/codestylesettingspropertiespage.cpp index 414d01c8a6c..496cb289bb3 100644 --- a/src/plugins/projectexplorer/codestylesettingspropertiespage.cpp +++ b/src/plugins/projectexplorer/codestylesettingspropertiespage.cpp @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #include "codestylesettingspropertiespage.h" #include "editorconfiguration.h" #include "project.h" diff --git a/src/plugins/projectexplorer/codestylesettingspropertiespage.h b/src/plugins/projectexplorer/codestylesettingspropertiespage.h index 07ba4ae4b71..873c7faaf0f 100644 --- a/src/plugins/projectexplorer/codestylesettingspropertiespage.h +++ b/src/plugins/projectexplorer/codestylesettingspropertiespage.h @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #ifndef CODESTYLESETTINGSPROPERTIESPAGE_H #define CODESTYLESETTINGSPROPERTIESPAGE_H diff --git a/src/plugins/qmljstools/qmljscodestylesettingspage.cpp b/src/plugins/qmljstools/qmljscodestylesettingspage.cpp index 40f2eccdb30..7be5e331849 100644 --- a/src/plugins/qmljstools/qmljscodestylesettingspage.cpp +++ b/src/plugins/qmljstools/qmljscodestylesettingspage.cpp @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #include "qmljscodestylesettingspage.h" #include "ui_qmljscodestylesettingspage.h" #include "qmljstoolsconstants.h" diff --git a/src/plugins/qmljstools/qmljscodestylesettingspage.h b/src/plugins/qmljstools/qmljscodestylesettingspage.h index 733160ba434..76292332030 100644 --- a/src/plugins/qmljstools/qmljscodestylesettingspage.h +++ b/src/plugins/qmljstools/qmljscodestylesettingspage.h @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #ifndef QMLJSCODESTYLESETTINGSPAGE_H #define QMLJSCODESTYLESETTINGSPAGE_H diff --git a/src/plugins/qmljstools/qmljstoolssettings.h b/src/plugins/qmljstools/qmljstoolssettings.h index 9e7f0815e44..8bc0e104614 100644 --- a/src/plugins/qmljstools/qmljstoolssettings.h +++ b/src/plugins/qmljstools/qmljstoolssettings.h @@ -6,26 +6,25 @@ ** ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** No Commercial Usage -** -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. ** ** GNU Lesser General Public License Usage ** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** ** If you have questions regarding the use of this file, please contact ** Nokia at info@qt.nokia.com. ** diff --git a/src/plugins/texteditor/codestylepreferencesmanager.cpp b/src/plugins/texteditor/codestylepreferencesmanager.cpp index f3e31995905..93b0200abcf 100644 --- a/src/plugins/texteditor/codestylepreferencesmanager.cpp +++ b/src/plugins/texteditor/codestylepreferencesmanager.cpp @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #include "codestylepreferencesmanager.h" #include "icodestylepreferencesfactory.h" diff --git a/src/plugins/texteditor/codestylepreferencesmanager.h b/src/plugins/texteditor/codestylepreferencesmanager.h index 1b26228d0b4..a17cf6a2745 100644 --- a/src/plugins/texteditor/codestylepreferencesmanager.h +++ b/src/plugins/texteditor/codestylepreferencesmanager.h @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #ifndef CODESTYLEPREFERENCESMANAGER_H #define CODESTYLEPREFERENCESMANAGER_H diff --git a/src/plugins/texteditor/fallbackselectorwidget.cpp b/src/plugins/texteditor/fallbackselectorwidget.cpp index af931fe1371..8abacb092a2 100644 --- a/src/plugins/texteditor/fallbackselectorwidget.cpp +++ b/src/plugins/texteditor/fallbackselectorwidget.cpp @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #include "fallbackselectorwidget.h" #include "ifallbackpreferences.h" diff --git a/src/plugins/texteditor/fallbackselectorwidget.h b/src/plugins/texteditor/fallbackselectorwidget.h index 795112b6601..205b4a6ebd3 100644 --- a/src/plugins/texteditor/fallbackselectorwidget.h +++ b/src/plugins/texteditor/fallbackselectorwidget.h @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #ifndef FALLBACKSELECTORWIDGET_H #define FALLBACKSELECTORWIDGET_H diff --git a/src/plugins/texteditor/icodestylepreferencesfactory.cpp b/src/plugins/texteditor/icodestylepreferencesfactory.cpp index 888bd013362..fe4b193296a 100644 --- a/src/plugins/texteditor/icodestylepreferencesfactory.cpp +++ b/src/plugins/texteditor/icodestylepreferencesfactory.cpp @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #include "icodestylepreferencesfactory.h" using namespace TextEditor; diff --git a/src/plugins/texteditor/icodestylepreferencesfactory.h b/src/plugins/texteditor/icodestylepreferencesfactory.h index d0c49d884eb..da5c35f134e 100644 --- a/src/plugins/texteditor/icodestylepreferencesfactory.h +++ b/src/plugins/texteditor/icodestylepreferencesfactory.h @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #ifndef ICODESTYLEPREFERENCESFACTORY_H #define ICODESTYLEPREFERENCESFACTORY_H diff --git a/src/plugins/texteditor/ifallbackpreferences.cpp b/src/plugins/texteditor/ifallbackpreferences.cpp index 4dcb2f6f66b..95bfd49d625 100644 --- a/src/plugins/texteditor/ifallbackpreferences.cpp +++ b/src/plugins/texteditor/ifallbackpreferences.cpp @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #include "ifallbackpreferences.h" #include diff --git a/src/plugins/texteditor/ifallbackpreferences.h b/src/plugins/texteditor/ifallbackpreferences.h index a6339abe4e7..435c21a9927 100644 --- a/src/plugins/texteditor/ifallbackpreferences.h +++ b/src/plugins/texteditor/ifallbackpreferences.h @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #ifndef IFALLBACKPREFERENCES_H #define IFALLBACKPREFERENCES_H diff --git a/src/plugins/texteditor/tabpreferences.cpp b/src/plugins/texteditor/tabpreferences.cpp index bb3d439def9..93458d5e83b 100644 --- a/src/plugins/texteditor/tabpreferences.cpp +++ b/src/plugins/texteditor/tabpreferences.cpp @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #include "tabpreferences.h" #include "tabsettings.h" #include "texteditorconstants.h" diff --git a/src/plugins/texteditor/tabpreferences.h b/src/plugins/texteditor/tabpreferences.h index 37a2b7b4c41..c553ab344d5 100644 --- a/src/plugins/texteditor/tabpreferences.h +++ b/src/plugins/texteditor/tabpreferences.h @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #ifndef TABPREFERENCES_H #define TABPREFERENCES_H diff --git a/src/plugins/texteditor/tabpreferenceswidget.cpp b/src/plugins/texteditor/tabpreferenceswidget.cpp index ec559a91f65..a542a9e5c93 100644 --- a/src/plugins/texteditor/tabpreferenceswidget.cpp +++ b/src/plugins/texteditor/tabpreferenceswidget.cpp @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #include "tabpreferenceswidget.h" #include "ui_tabpreferenceswidget.h" #include "tabpreferences.h" diff --git a/src/plugins/texteditor/tabpreferenceswidget.h b/src/plugins/texteditor/tabpreferenceswidget.h index 20132e41af2..a11f6ccad81 100644 --- a/src/plugins/texteditor/tabpreferenceswidget.h +++ b/src/plugins/texteditor/tabpreferenceswidget.h @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #ifndef TABPREFERENCESWIDGET_H #define TABPREFERENCESWIDGET_H diff --git a/src/plugins/texteditor/tabsettingswidget.cpp b/src/plugins/texteditor/tabsettingswidget.cpp index 9e4336902f0..60cc37caf87 100644 --- a/src/plugins/texteditor/tabsettingswidget.cpp +++ b/src/plugins/texteditor/tabsettingswidget.cpp @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #include "tabsettingswidget.h" #include "ui_tabsettingswidget.h" #include "tabsettings.h" diff --git a/src/plugins/texteditor/tabsettingswidget.h b/src/plugins/texteditor/tabsettingswidget.h index ff79a9d8f85..db4818e6f4b 100644 --- a/src/plugins/texteditor/tabsettingswidget.h +++ b/src/plugins/texteditor/tabsettingswidget.h @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #ifndef TEXTEDITOR_TABSETTINGSWIDGET_H #define TEXTEDITOR_TABSETTINGSWIDGET_H diff --git a/tests/auto/qml/qmleditor/qmllookup/data/localIdLookup.qml b/tests/auto/qml/qmleditor/qmllookup/data/localIdLookup.qml index f3df6cd5e38..21306674dbd 100644 --- a/tests/auto/qml/qmleditor/qmllookup/data/localIdLookup.qml +++ b/tests/auto/qml/qmleditor/qmllookup/data/localIdLookup.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 // Try to look up x, y, z, opacity and visible @@ -44,4 +76,4 @@ Item { } } } -} \ No newline at end of file +} diff --git a/tests/auto/qml/qmleditor/qmllookup/data/localRootLookup.qml b/tests/auto/qml/qmleditor/qmllookup/data/localRootLookup.qml index 74562a03e6b..6b74e4e0d03 100644 --- a/tests/auto/qml/qmleditor/qmllookup/data/localRootLookup.qml +++ b/tests/auto/qml/qmleditor/qmllookup/data/localRootLookup.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 // Try to look up prop in child. diff --git a/tests/auto/qml/qmleditor/qmllookup/data/localScopeLookup.qml b/tests/auto/qml/qmleditor/qmllookup/data/localScopeLookup.qml index e103232e4b9..a339300bdb6 100644 --- a/tests/auto/qml/qmleditor/qmllookup/data/localScopeLookup.qml +++ b/tests/auto/qml/qmleditor/qmllookup/data/localScopeLookup.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 // Try to look up prop in all symbol contexts. diff --git a/tests/auto/qml/qmleditor/qmllookup/data/localScriptMethodLookup.qml b/tests/auto/qml/qmleditor/qmllookup/data/localScriptMethodLookup.qml index 9d3f39bef42..a368ab6a571 100644 --- a/tests/auto/qml/qmleditor/qmllookup/data/localScriptMethodLookup.qml +++ b/tests/auto/qml/qmleditor/qmllookup/data/localScriptMethodLookup.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 // Try to look up x, y, z @@ -29,4 +61,4 @@ Item { property variant z: "wrong"; } } -} \ No newline at end of file +} From b7e72a5cd8bf09875477fdfee9dc34cfaa7a47cc Mon Sep 17 00:00:00 2001 From: Daniel Teske Date: Fri, 1 Jul 2011 19:53:43 +0200 Subject: [PATCH 108/143] GenericProject: Fix update on editing project.files The passed in filename is empty if the file is saved with it current name. In that case pass the current name to the GenericProjectManager, which then informs the projects. Change-Id: Id11c474930153e904702e7a0145e1f44331241fd Reviewed-on: http://codereview.qt.nokia.com/1077 Reviewed-by: Qt Sanity Bot Reviewed-by: Daniel Teske --- src/plugins/genericprojectmanager/genericprojectfileseditor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/genericprojectmanager/genericprojectfileseditor.cpp b/src/plugins/genericprojectmanager/genericprojectfileseditor.cpp index 941738c50a9..9b0741dd1d1 100644 --- a/src/plugins/genericprojectmanager/genericprojectfileseditor.cpp +++ b/src/plugins/genericprojectmanager/genericprojectfileseditor.cpp @@ -179,6 +179,6 @@ bool ProjectFilesDocument::save(QString *errorString, const QString &name, bool return false; if (!autoSave) - m_manager->notifyChanged(name); + m_manager->notifyChanged(name.isEmpty() ? fileName() : name); return true; } From c7c1ba32f796d2aea134d28994dc6959d4211e80 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Wed, 6 Jul 2011 11:55:33 +0200 Subject: [PATCH 109/143] Add copyright headers Change-Id: Ib21b9467ff6a692df56bc5cdac6ee768dae0d2a1 Reviewed-on: http://codereview.qt.nokia.com/1226 Reviewed-by: Qt Sanity Bot Reviewed-by: Tobias Hunger --- src/plugins/git/branchadddialog.cpp | 32 +++++++++++++++++++++++++++++ src/plugins/git/branchadddialog.h | 32 +++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) diff --git a/src/plugins/git/branchadddialog.cpp b/src/plugins/git/branchadddialog.cpp index 64e2d32b2ee..4a4981f2abd 100644 --- a/src/plugins/git/branchadddialog.cpp +++ b/src/plugins/git/branchadddialog.cpp @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #include "branchadddialog.h" #include "ui_branchadddialog.h" diff --git a/src/plugins/git/branchadddialog.h b/src/plugins/git/branchadddialog.h index 9fec0966a38..301c3e521cb 100644 --- a/src/plugins/git/branchadddialog.h +++ b/src/plugins/git/branchadddialog.h @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #ifndef BRANCHADDDIALOG_H #define BRANCHADDDIALOG_H From 00f992e2774d5a4dc2c50df6817ff51640fac2c4 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Wed, 6 Jul 2011 09:11:15 +0200 Subject: [PATCH 110/143] Copyright header fixes. Change-Id: I1b9188a4dd6f0d0ef58c2ff4e3c5e4d07acae02f Reviewed-on: http://codereview.qt.nokia.com/1203 Reviewed-by: Qt Sanity Bot Reviewed-by: Tobias Hunger From 7a50c47f51abdf8f18836edbbc21bedb66b4913a Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 6 Jul 2011 09:54:50 +0200 Subject: [PATCH 111/143] display: simplify AnalyzerStartParameters Change-Id: Ibc9db3d7de96461b097d1a78e1bcfd757458fc99 Reviewed-on: http://codereview.qt.nokia.com/1205 Reviewed-by: Qt Sanity Bot Reviewed-by: Friedemann Kleint --- .../analyzerbase/analyzerstartparameters.h | 3 - src/plugins/qmlprofiler/qmlprofilertool.cpp | 2 + src/plugins/valgrind/valgrindplugin.cpp | 70 ++++++------------- 3 files changed, 24 insertions(+), 51 deletions(-) diff --git a/src/plugins/analyzerbase/analyzerstartparameters.h b/src/plugins/analyzerbase/analyzerstartparameters.h index c05b14c7b4d..5265e7099fa 100644 --- a/src/plugins/analyzerbase/analyzerstartparameters.h +++ b/src/plugins/analyzerbase/analyzerstartparameters.h @@ -60,9 +60,6 @@ public: QString debuggee; QString debuggeeArgs; QString analyzerCmdPrefix; - QString remoteMountPoint; - QString localMountDir; - QString remoteSourcesDir; QString displayName; Utils::Environment environment; QString workingDirectory; diff --git a/src/plugins/qmlprofiler/qmlprofilertool.cpp b/src/plugins/qmlprofiler/qmlprofilertool.cpp index 6cc159ca6f2..2623b11358f 100644 --- a/src/plugins/qmlprofiler/qmlprofilertool.cpp +++ b/src/plugins/qmlprofiler/qmlprofilertool.cpp @@ -547,6 +547,8 @@ void QmlProfilerTool::updateRecordingState() void QmlProfilerTool::startTool(StartMode mode) { + Q_UNUSED(mode); + using namespace ProjectExplorer; // Make sure mode is shown. diff --git a/src/plugins/valgrind/valgrindplugin.cpp b/src/plugins/valgrind/valgrindplugin.cpp index c5ec6cf839b..86ac42e97fb 100644 --- a/src/plugins/valgrind/valgrindplugin.cpp +++ b/src/plugins/valgrind/valgrindplugin.cpp @@ -74,59 +74,20 @@ using namespace ProjectExplorer; namespace Valgrind { namespace Internal { -static AnalyzerStartParameters localStartParameters(RunConfiguration *runConfiguration) -{ - AnalyzerStartParameters sp; - QTC_ASSERT(runConfiguration, return sp); - LocalApplicationRunConfiguration *rc = - qobject_cast(runConfiguration); - QTC_ASSERT(rc, return sp); - - sp.startMode = StartLocal; - sp.environment = rc->environment(); - sp.workingDirectory = rc->workingDirectory(); - sp.debuggee = rc->executable(); - sp.debuggeeArgs = rc->commandLineArguments(); - sp.displayName = rc->displayName(); - sp.connParams.host = QLatin1String("localhost"); - sp.connParams.port = rc->qmlDebugServerPort(); - return sp; -} - -static AnalyzerStartParameters remoteLinuxStartParameters(RunConfiguration *runConfiguration) -{ - AnalyzerStartParameters sp; - RemoteLinux::RemoteLinuxRunConfiguration * const rc - = qobject_cast(runConfiguration); - QTC_ASSERT(rc, return sp); - - sp.startMode = StartRemote; - sp.debuggee = rc->remoteExecutableFilePath(); - sp.debuggeeArgs = rc->arguments(); - sp.connParams = rc->deviceConfig()->sshParameters(); - sp.analyzerCmdPrefix = rc->commandPrefix(); - sp.displayName = rc->displayName(); - return sp; -} - - -class ValgrindRunControlFactory: public ProjectExplorer::IRunControlFactory +class ValgrindRunControlFactory : public ProjectExplorer::IRunControlFactory { Q_OBJECT public: ValgrindRunControlFactory(QObject *parent = 0); - typedef ProjectExplorer::RunConfiguration RunConfiguration; - typedef ProjectExplorer::RunControl RunControl; - // IRunControlFactory bool canRun(RunConfiguration *runConfiguration, const QString &mode) const; RunControl *create(RunConfiguration *runConfiguration, const QString &mode); QString displayName() const; - ProjectExplorer::IRunConfigurationAspect *createRunConfigurationAspect(); - ProjectExplorer::RunConfigWidget *createConfigurationWidget(RunConfiguration *runConfiguration); + IRunConfigurationAspect *createRunConfigurationAspect(); + RunConfigWidget *createConfigurationWidget(RunConfiguration *runConfiguration); }; ValgrindRunControlFactory::ValgrindRunControlFactory(QObject *parent) @@ -146,10 +107,24 @@ RunControl *ValgrindRunControlFactory::create(RunConfiguration *runConfiguration QTC_ASSERT(canRun(runConfiguration, mode), return 0); AnalyzerStartParameters sp; - if (qobject_cast(runConfiguration)) { - sp = localStartParameters(runConfiguration); - } else if (qobject_cast(runConfiguration)) { - sp = remoteLinuxStartParameters(runConfiguration); + if (LocalApplicationRunConfiguration *rc1 = + qobject_cast(runConfiguration)) { + sp.startMode = StartLocal; + sp.environment = rc1->environment(); + sp.workingDirectory = rc1->workingDirectory(); + sp.debuggee = rc1->executable(); + sp.debuggeeArgs = rc1->commandLineArguments(); + sp.displayName = rc1->displayName(); + sp.connParams.host = QLatin1String("localhost"); + sp.connParams.port = rc1->qmlDebugServerPort(); + } else if (RemoteLinux::RemoteLinuxRunConfiguration *rc2 = + qobject_cast(runConfiguration)) { + sp.startMode = StartRemote; + sp.debuggee = rc2->remoteExecutableFilePath(); + sp.debuggeeArgs = rc2->arguments(); + sp.connParams = rc2->deviceConfig()->sshParameters(); + sp.analyzerCmdPrefix = rc2->commandPrefix(); + sp.displayName = rc2->displayName(); } else { // Might be S60DeviceRunfiguration, or something else ... //sp.startMode = StartRemote; @@ -159,7 +134,6 @@ RunControl *ValgrindRunControlFactory::create(RunConfiguration *runConfiguration IAnalyzerTool *tool = AnalyzerManager::toolFromId(mode.toLatin1()); AnalyzerRunControl *rc = new AnalyzerRunControl(tool, sp, runConfiguration); QObject::connect(AnalyzerManager::stopAction(), SIGNAL(triggered()), rc, SLOT(stopIt())); - //m_isRunning = true; return rc; } @@ -214,7 +188,7 @@ static void startRemoteTool(IAnalyzerTool *tool, StartMode mode) //m_currentRunControl = rc; QObject::connect(AnalyzerManager::stopAction(), SIGNAL(triggered()), rc, SLOT(stopIt())); - ProjectExplorer::ProjectExplorerPlugin::instance()->startRunControl(rc, tool->id()); + ProjectExplorerPlugin::instance()->startRunControl(rc, tool->id()); } void ValgrindPlugin::startValgrindTool(IAnalyzerTool *tool, StartMode mode) From e3858988a4998ba579907cb12d505259106eaf52 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Wed, 6 Jul 2011 11:58:06 +0200 Subject: [PATCH 112/143] Fix copyright headers Change-Id: Ia2853cb1230b490dcc06b19f0b4436a9d27a079c Reviewed-on: http://codereview.qt.nokia.com/1227 Reviewed-by: Jarek Kobus --- .../qmljscodestylesettingsfactory.cpp | 32 +++++++++++++++++++ .../qmljscodestylesettingsfactory.h | 32 +++++++++++++++++++ src/plugins/qmljstools/qmljstoolssettings.cpp | 32 +++++++++++++++++++ 3 files changed, 96 insertions(+) diff --git a/src/plugins/qmljstools/qmljscodestylesettingsfactory.cpp b/src/plugins/qmljstools/qmljscodestylesettingsfactory.cpp index d372482298b..60a2a29f2d7 100644 --- a/src/plugins/qmljstools/qmljscodestylesettingsfactory.cpp +++ b/src/plugins/qmljstools/qmljscodestylesettingsfactory.cpp @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #include "qmljscodestylesettingsfactory.h" #include "qmljscodestylesettingspage.h" #include "qmljstoolsconstants.h" diff --git a/src/plugins/qmljstools/qmljscodestylesettingsfactory.h b/src/plugins/qmljstools/qmljscodestylesettingsfactory.h index 321f564e92f..7efba77933e 100644 --- a/src/plugins/qmljstools/qmljscodestylesettingsfactory.h +++ b/src/plugins/qmljstools/qmljscodestylesettingsfactory.h @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #ifndef QMLJSCODESTYLESETTINGSFACTORY_H #define QMLJSCODESTYLESETTINGSFACTORY_H diff --git a/src/plugins/qmljstools/qmljstoolssettings.cpp b/src/plugins/qmljstools/qmljstoolssettings.cpp index d471b7e18ee..e1f161f1298 100644 --- a/src/plugins/qmljstools/qmljstoolssettings.cpp +++ b/src/plugins/qmljstools/qmljstoolssettings.cpp @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #include "qmljstoolssettings.h" #include "qmljstoolsconstants.h" From 1ea75f0cbf5329648cefaf17c8949dfebd5130fb Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Wed, 6 Jul 2011 11:52:08 +0200 Subject: [PATCH 113/143] Add copyright header template Change-Id: I17e183cab923e50a1db1632d3701b0673a91ce08 Reviewed-on: http://codereview.qt.nokia.com/1225 Reviewed-by: Qt Sanity Bot Reviewed-by: Tobias Hunger --- dist/copyright_template.txt | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 dist/copyright_template.txt diff --git a/dist/copyright_template.txt b/dist/copyright_template.txt new file mode 100644 index 00000000000..7f313c225fb --- /dev/null +++ b/dist/copyright_template.txt @@ -0,0 +1,32 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + From 15732d1bd2eca57b1f3cc47818a18f8b23232470 Mon Sep 17 00:00:00 2001 From: Daniel Molkentin Date: Tue, 5 Jul 2011 12:59:14 +0200 Subject: [PATCH 114/143] RemoteLinux: Move generic Dir/File functions into Utils. - Make error parameter an optional pointer for consistency with DirUtils::copyRecursively() - Add documentation Change-Id: I6671142341dbdcf2c8ca1118c35ea05548920609 Reviewed-on: http://codereview.qt.nokia.com/1090 Reviewed-by: Qt Sanity Bot Reviewed-by: Christian Kandeler --- src/libs/utils/fileutils.cpp | 140 ++++++++++++++++++ src/libs/utils/fileutils.h | 10 ++ src/plugins/remotelinux/maemoglobal.cpp | 87 ----------- src/plugins/remotelinux/maemoglobal.h | 7 - .../remotelinux/maemoinstalltosysrootstep.cpp | 6 +- .../remotelinux/maemopackagecreationstep.cpp | 4 +- .../maemopublisherfremantlefree.cpp | 4 +- src/plugins/remotelinux/qt4maemotarget.cpp | 8 +- 8 files changed, 162 insertions(+), 104 deletions(-) diff --git a/src/libs/utils/fileutils.cpp b/src/libs/utils/fileutils.cpp index 871e5ebb528..b4eb010a4ae 100644 --- a/src/libs/utils/fileutils.cpp +++ b/src/libs/utils/fileutils.cpp @@ -38,12 +38,152 @@ #include #include #include +#include #include #include #include namespace Utils { +/*! \class Utils::FileUtils + + \brief File- and directory-related convenience functions. + + File- and directory-related convenience functions. +*/ + +/*! + \fn Utils::FileUtils::removeRecursively(const QString &filePath, QString *error) + + Removes the directory \a filePath and its subdirectories recursively. + + \note The \a error parameter is optional. + + \return Whether the operation succeeded. +*/ + +/*! + \fn Utils::FileUtils::copyRecursively(const QString &srcFilePath, const QString &tgtFilePath, QString *error) + + Copies the directory specified by \a srcFilePath recursively to \a tgtFilePath. \a tgtFilePath will contain + the target directory, which will be created. Example usage: + + \code + QString error; + book ok = Utils::FileUtils::copyRecursively("/foo/bar", "/foo/baz", &error); + if (!ok) + qDebug() << error; + \endcode + + This will copy the contents of /foo/bar into to the baz directory under /foo, which will be created in the process. + + \note The \a error parameter is optional. + + \return Whether the operation succeeded. +*/ + +/*! + \fn Utils::FileUtils::isFileNewerThan(const QString &filePath, const QDateTime &timeStamp) + + If \a filePath is a directory, the function will recursively check all files and return + true if one of them is newer than \a timeStamp. If \a filePath is a single file, true will + be returned if the file is newer than \timeStamp. + + \return Whether at least one file in \a filePath has a newer date than \a timeStamp. +*/ + +bool FileUtils::removeRecursively(const QString &filePath, QString *error) +{ + QFileInfo fileInfo(filePath); + if (!fileInfo.exists()) + return true; + QFile::setPermissions(filePath, fileInfo.permissions() | QFile::WriteUser); + if (fileInfo.isDir()) { + QDir dir(filePath); + QStringList fileNames = dir.entryList(QDir::Files | QDir::Hidden + | QDir::System | QDir::Dirs | QDir::NoDotAndDotDot); + foreach (const QString &fileName, fileNames) { + if (!removeRecursively(filePath + QLatin1Char('/') + fileName, error)) + return false; + } + dir.cdUp(); + if (!dir.rmdir(fileInfo.fileName())) { + if (error) { + *error = QCoreApplication::translate("Utils::FileUtils", "Failed to remove directory '%1'.") + .arg(QDir::toNativeSeparators(filePath)); + } + return false; + } + } else { + if (!QFile::remove(filePath)) { + if (error) { + *error = QCoreApplication::translate("Utils::FileUtils", "Failed to remove file '%1'.") + .arg(QDir::toNativeSeparators(filePath)); + } + return false; + } + } + return true; +} + +bool FileUtils::copyRecursively(const QString &srcFilePath, + const QString &tgtFilePath, QString *error) +{ + QFileInfo srcFileInfo(srcFilePath); + if (srcFileInfo.isDir()) { + QDir targetDir(tgtFilePath); + targetDir.cdUp(); + if (!targetDir.mkdir(QFileInfo(tgtFilePath).fileName())) { + if (error) { + *error = QCoreApplication::translate("Utils::FileUtils", "Failed to create directory '%1'.") + .arg(QDir::toNativeSeparators(tgtFilePath)); + return false; + } + } + QDir sourceDir(srcFilePath); + QStringList fileNames = sourceDir.entryList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot | QDir::Hidden | QDir::System); + foreach (const QString &fileName, fileNames) { + const QString newSrcFilePath + = srcFilePath + QLatin1Char('/') + fileName; + const QString newTgtFilePath + = tgtFilePath + QLatin1Char('/') + fileName; + if (!copyRecursively(newSrcFilePath, newTgtFilePath, error)) + return false; + } + } else { + if (!QFile::copy(srcFilePath, tgtFilePath)) { + if (error) { + *error = QCoreApplication::translate("Utils::FileUtils", "Could not copy file '%1' to '%2'.") + .arg(QDir::toNativeSeparators(srcFilePath), + QDir::toNativeSeparators(tgtFilePath)); + } + return false; + } + } + return true; +} + +bool FileUtils::isFileNewerThan(const QString &filePath, + const QDateTime &timeStamp) +{ + QFileInfo fileInfo(filePath); + if (!fileInfo.exists() || fileInfo.lastModified() >= timeStamp) + return true; + if (fileInfo.isDir()) { + const QStringList dirContents = QDir(filePath) + .entryList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot); + foreach (const QString &curFileName, dirContents) { + const QString curFilePath + = filePath + QLatin1Char('/') + curFileName; + if (isFileNewerThan(curFilePath, timeStamp)) + return true; + } + } + return false; +} + + + QByteArray FileReader::fetchQrc(const QString &fileName) { QTC_ASSERT(fileName.startsWith(QLatin1Char(':')), return QByteArray()) diff --git a/src/libs/utils/fileutils.h b/src/libs/utils/fileutils.h index 21f5eee3f2b..d6b4e57ef26 100644 --- a/src/libs/utils/fileutils.h +++ b/src/libs/utils/fileutils.h @@ -45,10 +45,20 @@ class QTemporaryFile; class QWidget; class QTextStream; class QDataStream; +class QDateTime; QT_END_NAMESPACE namespace Utils { +class QTCREATOR_UTILS_EXPORT FileUtils { +public: + static bool removeRecursively(const QString &filePath, QString *error = 0); + static bool copyRecursively(const QString &srcFilePath, + const QString &tgtFilePath, QString *error = 0); + static bool isFileNewerThan(const QString &filePath, + const QDateTime &timeStamp); +}; + class QTCREATOR_UTILS_EXPORT FileReader { Q_DECLARE_TR_FUNCTIONS(Utils::FileUtils) // sic! diff --git a/src/plugins/remotelinux/maemoglobal.cpp b/src/plugins/remotelinux/maemoglobal.cpp index 6d22c179ee3..e022aafd0d2 100644 --- a/src/plugins/remotelinux/maemoglobal.cpp +++ b/src/plugins/remotelinux/maemoglobal.cpp @@ -286,93 +286,6 @@ QString MaemoGlobal::architecture(const QString &qmakePath) return arch; } -bool MaemoGlobal::removeRecursively(const QString &filePath, QString &error) -{ - error.clear(); - QFileInfo fileInfo(filePath); - if (!fileInfo.exists()) - return true; - QFile::setPermissions(filePath, fileInfo.permissions() | QFile::WriteUser); - if (fileInfo.isDir()) { - QDir dir(filePath); - QStringList fileNames = dir.entryList(QDir::Files | QDir::Hidden - | QDir::System | QDir::Dirs | QDir::NoDotAndDotDot); - foreach (const QString &fileName, fileNames) { - if (!removeRecursively(filePath + QLatin1Char('/') + fileName, error)) - return false; - } - dir.cdUp(); - if (!dir.rmdir(fileInfo.fileName())) { - error = tr("Failed to remove directory '%1'.") - .arg(QDir::toNativeSeparators(filePath)); - return false; - } - } else { - if (!QFile::remove(filePath)) { - error = tr("Failed to remove file '%1'.") - .arg(QDir::toNativeSeparators(filePath)); - return false; - } - } - return true; -} - -bool MaemoGlobal::copyRecursively(const QString &srcFilePath, - const QString &tgtFilePath, QString *error) -{ - QFileInfo srcFileInfo(srcFilePath); - if (srcFileInfo.isDir()) { - QDir targetDir(tgtFilePath); - targetDir.cdUp(); - if (!targetDir.mkdir(QFileInfo(tgtFilePath).fileName())) { - if (error) { - *error = tr("Failed to create directory '%1'.") - .arg(QDir::toNativeSeparators(tgtFilePath)); - return false; - } - } - QDir sourceDir(srcFilePath); - QStringList fileNames = sourceDir.entryList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot); - foreach (const QString &fileName, fileNames) { - const QString newSrcFilePath - = srcFilePath + QLatin1Char('/') + fileName; - const QString newTgtFilePath - = tgtFilePath + QLatin1Char('/') + fileName; - if (!copyRecursively(newSrcFilePath, newTgtFilePath)) - return false; - } - } else { - if (!QFile::copy(srcFilePath, tgtFilePath)) { - if (error) { - *error = tr("Could not copy file '%1' to '%2'.") - .arg(QDir::toNativeSeparators(srcFilePath), - QDir::toNativeSeparators(tgtFilePath)); - } - return false; - } - } - return true; -} - -bool MaemoGlobal::isFileNewerThan(const QString &filePath, - const QDateTime &timeStamp) -{ - QFileInfo fileInfo(filePath); - if (!fileInfo.exists() || fileInfo.lastModified() >= timeStamp) - return true; - if (fileInfo.isDir()) { - const QStringList dirContents = QDir(filePath) - .entryList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot); - foreach (const QString &curFileName, dirContents) { - const QString curFilePath - = filePath + QLatin1Char('/') + curFileName; - if (isFileNewerThan(curFilePath, timeStamp)) - return true; - } - } - return false; -} - void MaemoGlobal::addMaddeEnvironment(Utils::Environment &env, const QString &qmakePath) { Utils::Environment maddeEnv; diff --git a/src/plugins/remotelinux/maemoglobal.h b/src/plugins/remotelinux/maemoglobal.h index c185acce5d3..f9751c65056 100644 --- a/src/plugins/remotelinux/maemoglobal.h +++ b/src/plugins/remotelinux/maemoglobal.h @@ -137,13 +137,6 @@ public: static PackagingSystem packagingSystem(const QString &osType); - static bool removeRecursively(const QString &filePath, QString &error); - static bool copyRecursively(const QString &srcFilePath, - const QString &tgtFilePath, QString *error = 0); - - static bool isFileNewerThan(const QString &filePath, - const QDateTime &timeStamp); - template static T *earlierBuildStep(const ProjectExplorer::DeployConfiguration *dc, const ProjectExplorer::BuildStep *laterBuildStep) { diff --git a/src/plugins/remotelinux/maemoinstalltosysrootstep.cpp b/src/plugins/remotelinux/maemoinstalltosysrootstep.cpp index c4111de49d7..ed10d87c9af 100644 --- a/src/plugins/remotelinux/maemoinstalltosysrootstep.cpp +++ b/src/plugins/remotelinux/maemoinstalltosysrootstep.cpp @@ -38,6 +38,8 @@ #include "maemoqtversion.h" #include "qt4maemodeployconfiguration.h" +#include + #include #include #include @@ -323,8 +325,8 @@ void MaemoCopyToSysrootStep::run(QFutureInterface &fi) + deployable.remoteDir + sep + localFileInfo.fileName(); sysrootDir.mkpath(deployable.remoteDir.mid(1)); QString errorMsg; - MaemoGlobal::removeRecursively(targetFilePath, errorMsg); - if (!MaemoGlobal::copyRecursively(deployable.localFilePath, + Utils::FileUtils::removeRecursively(targetFilePath, &errorMsg); + if (!Utils::FileUtils::copyRecursively(deployable.localFilePath, targetFilePath, &errorMsg)) { emit addOutput(tr("Sysroot installation failed: %1\n" " Continuing anyway.").arg(errorMsg), ErrorMessageOutput); diff --git a/src/plugins/remotelinux/maemopackagecreationstep.cpp b/src/plugins/remotelinux/maemopackagecreationstep.cpp index af2518898ae..044b9b71f66 100644 --- a/src/plugins/remotelinux/maemopackagecreationstep.cpp +++ b/src/plugins/remotelinux/maemopackagecreationstep.cpp @@ -205,7 +205,7 @@ bool AbstractMaemoPackageCreationStep::packagingNeeded() const const int deployableCount = deploymentInfo->deployableCount(); for (int i = 0; i < deployableCount; ++i) { - if (MaemoGlobal::isFileNewerThan(deploymentInfo->deployableAt(i).localFilePath, + if (Utils::FileUtils::isFileNewerThan(deploymentInfo->deployableAt(i).localFilePath, packageInfo.lastModified())) return true; } @@ -427,7 +427,7 @@ bool MaemoDebianPackageCreationStep::copyDebianFiles(bool inSourceBuild) return false; } QString error; - if (!MaemoGlobal::removeRecursively(debianDirPath, error)) { + if (!Utils::FileUtils::removeRecursively(debianDirPath, &error)) { raiseError(tr("Packaging failed."), tr("Could not remove directory '%1': %2").arg(debianDirPath, error)); return false; diff --git a/src/plugins/remotelinux/maemopublisherfremantlefree.cpp b/src/plugins/remotelinux/maemopublisherfremantlefree.cpp index 36f6f28bd50..45ab8417238 100644 --- a/src/plugins/remotelinux/maemopublisherfremantlefree.cpp +++ b/src/plugins/remotelinux/maemopublisherfremantlefree.cpp @@ -127,7 +127,7 @@ void MaemoPublisherFremantleFree::createPackage() if (QFileInfo(tmpDirContainer()).exists()) { emit progressReport(tr("Removing left-over temporary directory ...")); QString error; - if (!MaemoGlobal::removeRecursively(tmpDirContainer(), error)) { + if (!Utils::FileUtils::removeRecursively(tmpDirContainer(), &error)) { finishWithFailure(tr("Error removing temporary directory: %1").arg(error), tr("Publishing failed: Could not create source package.")); return; @@ -360,7 +360,7 @@ void MaemoPublisherFremantleFree::runDpkgBuildPackage() } foreach (const QString &filePath, d.filesToExclude()) { QString error; - if (!MaemoGlobal::removeRecursively(filePath, error)) { + if (!Utils::FileUtils::removeRecursively(filePath, &error)) { finishWithFailure(error, tr("Publishing failed: Could not create package.")); } diff --git a/src/plugins/remotelinux/qt4maemotarget.cpp b/src/plugins/remotelinux/qt4maemotarget.cpp index 1a8ed325bc8..92a675c7e85 100644 --- a/src/plugins/remotelinux/qt4maemotarget.cpp +++ b/src/plugins/remotelinux/qt4maemotarget.cpp @@ -311,7 +311,7 @@ void AbstractQt4MaemoTarget::handleTargetToBeRemoved(ProjectExplorer::Target *ta const QStringList otherContents = QDir(packagingPath).entryList(QDir::Dirs | QDir::Files | QDir::Hidden | QDir::NoDotAndDotDot); if (otherContents.isEmpty()) { - if (!MaemoGlobal::removeRecursively(packagingPath, error)) + if (!Utils::FileUtils::removeRecursively(packagingPath, &error)) qDebug("%s", qPrintable(error)); } } @@ -684,7 +684,7 @@ bool AbstractDebBasedQt4MaemoTarget::targetCanBeRemoved() const void AbstractDebBasedQt4MaemoTarget::removeTarget() { QString error; - if (!MaemoGlobal::removeRecursively(debianDirPath(), error)) + if (!Utils::FileUtils::removeRecursively(debianDirPath(), &error)) qDebug("%s", qPrintable(error)); } @@ -705,7 +705,7 @@ AbstractQt4MaemoTarget::ActionStatus AbstractDebBasedQt4MaemoTarget::createSpeci projectDir.path() + QLatin1Char('/') + PackagingDirName); const QString dhMakeDebianDir = projectDir.path() + QLatin1Char('/') + PackagingDirName + QLatin1String("/debian"); - MaemoGlobal::removeRecursively(dhMakeDebianDir, error); + Utils::FileUtils::removeRecursively(dhMakeDebianDir, &error); const QStringList dh_makeArgs = QStringList() << QLatin1String("dh_make") << QLatin1String("-s") << QLatin1String("-n") << QLatin1String("-p") << (defaultPackageFileName() + QLatin1Char('_') @@ -733,7 +733,7 @@ AbstractQt4MaemoTarget::ActionStatus AbstractDebBasedQt4MaemoTarget::createSpeci if (!QFile::rename(dhMakeDebianDir, debianDirPath())) { raiseError(tr("Unable to move new debian directory to '%1'.") .arg(QDir::toNativeSeparators(debianDirPath()))); - MaemoGlobal::removeRecursively(dhMakeDebianDir, error); + Utils::FileUtils::removeRecursively(dhMakeDebianDir, &error); return ActionFailed; } From 8d8d9d4645484c856c5a42f0849284b8799a67ad Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 5 Jul 2011 17:21:43 +0200 Subject: [PATCH 115/143] analyzer: directly start tools from menu Change-Id: I385abbd906e975b75b1c01e597b6e366c5c57126 Reviewed-on: http://codereview.qt.nokia.com/1180 Reviewed-by: Qt Sanity Bot Reviewed-by: Eike Ziller --- src/plugins/analyzerbase/analyzerconstants.h | 1 + src/plugins/analyzerbase/analyzermanager.cpp | 85 ++++++++++++-------- 2 files changed, 51 insertions(+), 35 deletions(-) diff --git a/src/plugins/analyzerbase/analyzerconstants.h b/src/plugins/analyzerbase/analyzerconstants.h index c27f98ad2f2..26f3b0ad540 100644 --- a/src/plugins/analyzerbase/analyzerconstants.h +++ b/src/plugins/analyzerbase/analyzerconstants.h @@ -69,6 +69,7 @@ const char * const START = "Analyzer.Start"; const char * const STARTREMOTE = "Analyzer.StartRemote"; const char * const STOP = "Analyzer.Stop"; +const char * const G_ANALYZER_CONTROL = "Menu.Group.Analyzer.Control"; const char * const G_ANALYZER_TOOLS = "Menu.Group.Analyzer.Tools"; const char * const G_ANALYZER_REMOTE_TOOLS = "Menu.Group.Analyzer.RemoteTools"; diff --git a/src/plugins/analyzerbase/analyzermanager.cpp b/src/plugins/analyzerbase/analyzermanager.cpp index 37b8a00114d..571a1ee8357 100644 --- a/src/plugins/analyzerbase/analyzermanager.cpp +++ b/src/plugins/analyzerbase/analyzermanager.cpp @@ -185,11 +185,8 @@ public: public slots: void startTool(); - //void stopTool(); - - void selectAction(); - void selectAction(QAction *); - void selectAction(int); + void selectToolboxAction(int); + void selectMenuAction(); void modeChanged(Core::IMode *mode); void resetLayout(); void updateRunActions(); @@ -220,6 +217,7 @@ public: QList m_dockWidgets; bool m_restartOnStop; + bool m_handlingManualAction; }; AnalyzerManagerPrivate::AnalyzerManagerPrivate(AnalyzerManager *qq): @@ -235,10 +233,11 @@ AnalyzerManagerPrivate::AnalyzerManagerPrivate(AnalyzerManager *qq): m_toolBox(new QComboBox), m_controlsWidget(new QStackedWidget), m_statusLabel(new Utils::StatusLabel), - m_restartOnStop(false) + m_restartOnStop(false), + m_handlingManualAction(false) { m_toolBox->setObjectName(QLatin1String("AnalyzerManagerToolBox")); - connect(m_toolBox, SIGNAL(currentIndexChanged(int)), SLOT(selectAction(int))); + connect(m_toolBox, SIGNAL(currentIndexChanged(int)), SLOT(selectToolboxAction(int))); setupActions(); @@ -270,6 +269,7 @@ void AnalyzerManagerPrivate::setupActions() m_menu->menu()->setTitle(tr("&Analyze")); m_menu->menu()->setEnabled(true); + m_menu->appendGroup(Constants::G_ANALYZER_CONTROL); m_menu->appendGroup(Constants::G_ANALYZER_TOOLS); m_menu->appendGroup(Constants::G_ANALYZER_REMOTE_TOOLS); @@ -288,12 +288,18 @@ void AnalyzerManagerPrivate::setupActions() m_stopAction->setEnabled(false); m_stopAction->setIcon(QIcon(Constants::ANALYZER_CONTROL_STOP_ICON)); command = am->registerAction(m_stopAction, Constants::STOP, globalcontext); - //connect(m_stopAction, SIGNAL(triggered()), this, SLOT(stopTool())); + m_menu->addAction(command, Constants::G_ANALYZER_CONTROL); - QAction *separatorAction = new QAction(m_menu); - separatorAction->setSeparator(true); - command = am->registerAction(separatorAction, - "Menu.Action.Analyzer.Tools.Separator", globalcontext); + QAction *separatorAction1 = new QAction(m_menu); + separatorAction1->setSeparator(true); + command = am->registerAction(separatorAction1, + "Menu.Action.Analyzer.Tools.Separator1", globalcontext); + m_menu->addAction(command, Constants::G_ANALYZER_TOOLS); + + QAction *separatorAction2 = new QAction(m_menu); + separatorAction2->setSeparator(true); + command = am->registerAction(separatorAction2, + "Menu.Action.Analyzer.Tools.Separator2", globalcontext); m_menu->addAction(command, Constants::G_ANALYZER_REMOTE_TOOLS); } @@ -444,7 +450,7 @@ bool AnalyzerManagerPrivate::showPromptDialog(const QString &title, const QStrin return messageBox.clickedStandardButton() == QDialogButtonBox::Yes; } -void AnalyzerManagerPrivate::startLocalTool(IAnalyzerTool *tool, StartMode mode) +void AnalyzerManagerPrivate::startLocalTool(IAnalyzerTool *tool, StartMode) { int index = m_tools.indexOf(tool); QTC_ASSERT(index >= 0, return); @@ -553,7 +559,7 @@ void AnalyzerManagerPrivate::modeChanged(IMode *mode) QAction *AnalyzerManagerPrivate::actionFromToolAndMode(IAnalyzerTool *tool, StartMode mode) { foreach (QAction *action, m_actions) - if (m_toolFromAction[action] == tool && m_modeFromAction[action] == mode) + if (m_toolFromAction.value(action) == tool && m_modeFromAction[action] == mode) return action; QTC_ASSERT(false, /**/); return 0; @@ -565,8 +571,8 @@ void AnalyzerManagerPrivate::selectSavedTool() const QByteArray lastActiveAction = settings->value(QLatin1String(LAST_ACTIVE_TOOL), QString()).toByteArray(); foreach (QAction *action, m_actions) { - IAnalyzerTool *tool = m_toolFromAction[action]; - StartMode mode = m_modeFromAction[action]; + IAnalyzerTool *tool = m_toolFromAction.value(action); + StartMode mode = m_modeFromAction.value(action); if (tool->actionId(mode) == lastActiveAction) { selectTool(tool, mode); break; @@ -574,20 +580,28 @@ void AnalyzerManagerPrivate::selectSavedTool() } } -void AnalyzerManagerPrivate::selectAction() +void AnalyzerManagerPrivate::selectMenuAction() { - selectAction(qobject_cast(sender())); + if (m_handlingManualAction) + return; + m_handlingManualAction = true; + QAction *action = qobject_cast(sender()); + QTC_ASSERT(action, return); + IAnalyzerTool *tool = m_toolFromAction.value(action); + StartMode mode = m_modeFromAction.value(action); + selectTool(tool, mode); + tool->startTool(mode); + m_handlingManualAction = false; } -void AnalyzerManagerPrivate::selectAction(int index) +void AnalyzerManagerPrivate::selectToolboxAction(int index) { - selectAction(m_actions[index]); -} - -void AnalyzerManagerPrivate::selectAction(QAction *action) -{ - AnalyzerManager::showMode(); - selectTool(m_toolFromAction[action], m_modeFromAction[action]); + if (m_handlingManualAction) + return; + m_handlingManualAction = true; + QAction *action = m_actions[index]; + selectTool(m_toolFromAction.value(action), m_modeFromAction.value(action)); + m_handlingManualAction = false; } void AnalyzerManagerPrivate::selectTool(IAnalyzerTool *tool, StartMode mode) @@ -599,15 +613,8 @@ void AnalyzerManagerPrivate::selectTool(IAnalyzerTool *tool, StartMode mode) const int actionIndex = m_actions.indexOf(action); QTC_ASSERT(actionIndex >= 0, return); - // Guard against recursion by m_toolBox->setCurrentIndex. - static bool inSelectTool = false; - if (inSelectTool) - return; - inSelectTool = true; - saveToolSettings(m_currentTool, m_currentMode); - // Clean up old tool. if (m_currentTool) { ActionManager *am = ICore::instance()->actionManager(); @@ -647,7 +654,6 @@ void AnalyzerManagerPrivate::selectTool(IAnalyzerTool *tool, StartMode mode) m_controlsWidget->setCurrentIndex(actionIndex); updateRunActions(); - inSelectTool = false; } void AnalyzerManagerPrivate::addTool(IAnalyzerTool *tool, const StartModes &modes) @@ -670,7 +676,7 @@ void AnalyzerManagerPrivate::addTool(IAnalyzerTool *tool, const StartModes &mode m_modeFromAction[action] = mode; m_toolBox->addItem(actionName); m_toolBox->blockSignals(blocked); - connect(action, SIGNAL(triggered()), SLOT(selectAction())); + connect(action, SIGNAL(triggered()), SLOT(selectMenuAction())); } m_tools.append(tool); m_toolBox->setEnabled(true); @@ -719,6 +725,13 @@ void AnalyzerManagerPrivate::saveToolSettings(IAnalyzerTool *tool, StartMode mod void AnalyzerManagerPrivate::updateRunActions() { + static bool previousRunning = true; + static IAnalyzerTool *previousTool = 0; + if (previousRunning == m_isRunning && previousTool == m_currentTool) + return; + previousTool = m_currentTool; + previousRunning = m_isRunning; + ProjectExplorerPlugin *pe = ProjectExplorerPlugin::instance(); Project *project = pe->startupProject(); @@ -737,6 +750,8 @@ void AnalyzerManagerPrivate::updateRunActions() m_startAction->setToolTip(disabledReason); m_toolBox->setEnabled(!m_isRunning); m_stopAction->setEnabled(m_isRunning); + foreach (QAction *action, m_actions) + action->setEnabled(!m_isRunning); } //////////////////////////////////////////////////////////////////// From 1f9be179f04c5293ce91f572cb1ea391f039e028 Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Wed, 6 Jul 2011 12:51:04 +0200 Subject: [PATCH 116/143] C++ indenter: Make continuations after ( consistent. Change-Id: Iae780127065e3fce274db10e173f5c0bde15bd92 Reviewed-on: http://codereview.qt.nokia.com/1229 Reviewed-by: Leandro T. C. Melo --- src/plugins/cpptools/cppcodeformatter.cpp | 5 +-- .../codeformatter/tst_codeformatter.cpp | 43 +++++++++++++++++-- 2 files changed, 41 insertions(+), 7 deletions(-) diff --git a/src/plugins/cpptools/cppcodeformatter.cpp b/src/plugins/cpptools/cppcodeformatter.cpp index 7bb38600ace..41e70725f77 100644 --- a/src/plugins/cpptools/cppcodeformatter.cpp +++ b/src/plugins/cpptools/cppcodeformatter.cpp @@ -1144,6 +1144,7 @@ void QtStyleCodeFormatter::onEnter(int newState, int *indentDepth, int *savedInd case arglist_open: case condition_paren_open: + case member_init_paren_open: if (!lastToken) *paddingDepth = nextTokenPosition-*indentDepth; else @@ -1179,10 +1180,6 @@ void QtStyleCodeFormatter::onEnter(int newState, int *indentDepth, int *savedInd *paddingDepth += 2; // savedIndentDepth is the position of ':' break; - case member_init_paren_open: - addContinuationIndent(paddingDepth); - break; - case case_cont: if (m_styleSettings.indentStatementsRelativeToSwitchLabels) *indentDepth += m_tabSettings.m_indentSize; diff --git a/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp b/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp index fedea8c9095..1b882e16145 100644 --- a/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp +++ b/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp @@ -115,7 +115,8 @@ private Q_SLOTS: void functionBodyAndBraces2(); void functionBodyAndBraces3(); void functionBodyAndBraces4(); - void constructor(); + void constructor1(); + void constructor2(); void caseBody1(); void caseBody2(); void caseBody3(); @@ -1080,7 +1081,7 @@ void tst_CodeFormatter::memberInitializer() << Line(" Foo()") << Line(" ~ : baR(),") << Line(" ~ moodoo(barR + ") - << Line(" ~ 42),") + << Line(" ~ 42),") << Line(" ~ xyz()") << Line(" {}") << Line("};") @@ -1764,7 +1765,7 @@ void tst_CodeFormatter::functionBodyAndBraces4() checkIndent(data, codeStyle); } -void tst_CodeFormatter::constructor() +void tst_CodeFormatter::constructor1() { QList data; data << Line("class Foo {") @@ -1782,6 +1783,42 @@ void tst_CodeFormatter::constructor() checkIndent(data, codeStyle); } +void tst_CodeFormatter::constructor2() +{ + QList data; + data << Line("class Foo {") + << Line(" Foo() : _a(0)") + << Line(" {") + << Line(" _b = 0") + << Line(" }") + << Line(" int _a;") + << Line(" Foo()") + << Line(" ~ : _foo(1),") + << Line(" ~ _bar(2),") + << Line(" ~ _carooooo(") + << Line(" ~ foo() + 12),") + << Line(" ~ _carooooo(foo(),") + << Line(" ~ 12)") + << Line(" {") + << Line(" _b = 0") + << Line(" }") + << Line(" int _b;") + << Line(" Foo()") + << Line(" ~ : _foo(1)") + << Line(" ~ , _bar(2)") + << Line(" ~ , _carooooo(") + << Line(" ~ foo() + 12)") + << Line(" ~ , _carooooo(foo(),") + << Line(" ~ 12)") + << Line(" {") + << Line(" _b = 0") + << Line(" }") + << Line("};") + ; + CppCodeStyleSettings codeStyle; + checkIndent(data); +} + void tst_CodeFormatter::caseBody1() { QList data; From 7ecf1e75d42e981a9f98e59742188ff6f712c024 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Tue, 5 Jul 2011 16:15:05 +0200 Subject: [PATCH 117/143] QML debugging: Make sure the engine detects a remote process quitting. Change-Id: Ie41d327432b539264035f104081d4d4b02b56217 Reviewed-on: http://codereview.qt.nokia.com/1171 Reviewed-by: Christian Kandeler --- src/plugins/remotelinux/remotelinuxdebugsupport.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/plugins/remotelinux/remotelinuxdebugsupport.cpp b/src/plugins/remotelinux/remotelinuxdebugsupport.cpp index b7a86df3f7c..b159e052c0a 100644 --- a/src/plugins/remotelinux/remotelinuxdebugsupport.cpp +++ b/src/plugins/remotelinux/remotelinuxdebugsupport.cpp @@ -181,12 +181,16 @@ void AbstractRemoteLinuxDebugSupport::startExecution() void AbstractRemoteLinuxDebugSupport::handleRemoteProcessFinished(qint64 exitCode) { - if (!m_engine || m_state == Inactive || exitCode == 0) + if (!m_engine || m_state == Inactive) return; if (m_state == Debugging) { - if (m_debuggingType != RemoteLinuxRunConfiguration::DebugQmlOnly) + // The QML engine does not realize on its own that the application has finished. + if (m_debuggingType == RemoteLinuxRunConfiguration::DebugQmlOnly) + m_engine->quitDebugger(); + else if (exitCode != 0) m_engine->notifyInferiorIll(); + } else { const QString errorMsg = m_debuggingType == RemoteLinuxRunConfiguration::DebugQmlOnly ? tr("Remote application failed with exit code %1.").arg(exitCode) From ee635dcf9e865c7bc405b81b09f0df5245c4b32a Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Tue, 5 Jul 2011 18:01:58 +0200 Subject: [PATCH 118/143] SSH: Don't allow connectToHost() while already connecting/connected. Also fix callers potentially violating this policy. Change-Id: I630f1c544885df93a81e217e792363c0c2314108 Reviewed-on: http://codereview.qt.nokia.com/1186 Reviewed-by: Qt Sanity Bot Reviewed-by: Daniel Teske --- src/libs/utils/ssh/sshconnection.cpp | 2 ++ src/libs/utils/ssh/sshremoteprocessrunner.cpp | 3 ++- src/plugins/debugger/gdb/remotegdbprocess.cpp | 3 ++- src/plugins/remotelinux/abstractmaemodeploystep.cpp | 3 ++- src/plugins/remotelinux/remotelinuxapplicationrunner.cpp | 3 ++- src/plugins/valgrind/valgrind/valgrindprocess.cpp | 3 ++- 6 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/libs/utils/ssh/sshconnection.cpp b/src/libs/utils/ssh/sshconnection.cpp index 6a712817edb..0efdd0091e6 100644 --- a/src/libs/utils/ssh/sshconnection.cpp +++ b/src/libs/utils/ssh/sshconnection.cpp @@ -620,6 +620,8 @@ void SshConnectionPrivate::sendKeepAlivePacket() void SshConnectionPrivate::connectToHost() { + QTC_ASSERT(m_state == SocketUnconnected, return); + m_incomingData.clear(); m_incomingPacket.reset(); m_sendFacility.reset(); diff --git a/src/libs/utils/ssh/sshremoteprocessrunner.cpp b/src/libs/utils/ssh/sshremoteprocessrunner.cpp index 0d5fa24e932..6a751cc37e7 100644 --- a/src/libs/utils/ssh/sshremoteprocessrunner.cpp +++ b/src/libs/utils/ssh/sshremoteprocessrunner.cpp @@ -145,7 +145,8 @@ void SshRemoteProcessRunnerPrivate::run(const QByteArray &command) } else { connect(m_connection.data(), SIGNAL(connected()), SLOT(handleConnected())); - m_connection->connectToHost(); + if (m_connection->state() == SshConnection::Unconnected) + m_connection->connectToHost(); } } diff --git a/src/plugins/debugger/gdb/remotegdbprocess.cpp b/src/plugins/debugger/gdb/remotegdbprocess.cpp index f32af660e01..124e43f620d 100644 --- a/src/plugins/debugger/gdb/remotegdbprocess.cpp +++ b/src/plugins/debugger/gdb/remotegdbprocess.cpp @@ -98,7 +98,8 @@ void RemoteGdbProcess::realStart(const QString &cmd, const QStringList &args, handleConnected(); } else { connect(m_conn.data(), SIGNAL(connected()), this, SLOT(handleConnected())); - m_conn->connectToHost(); + if (m_conn->state() == SshConnection::Unconnected) + m_conn->connectToHost(); } } diff --git a/src/plugins/remotelinux/abstractmaemodeploystep.cpp b/src/plugins/remotelinux/abstractmaemodeploystep.cpp index e305bdc7195..32755502450 100644 --- a/src/plugins/remotelinux/abstractmaemodeploystep.cpp +++ b/src/plugins/remotelinux/abstractmaemodeploystep.cpp @@ -298,7 +298,8 @@ void AbstractMaemoDeployStep::connectToDevice() connect(m_connection.data(), SIGNAL(connected()), this, SLOT(handleConnected())); writeOutput(tr("Connecting to device...")); - m_connection->connectToHost(); + if (m_connection->state() == SshConnection::Unconnected) + m_connection->connectToHost(); } } diff --git a/src/plugins/remotelinux/remotelinuxapplicationrunner.cpp b/src/plugins/remotelinux/remotelinuxapplicationrunner.cpp index 57ecf01e0ad..340f4154bbf 100644 --- a/src/plugins/remotelinux/remotelinuxapplicationrunner.cpp +++ b/src/plugins/remotelinux/remotelinuxapplicationrunner.cpp @@ -105,7 +105,8 @@ void RemoteLinuxApplicationRunner::start() handleConnected(); } else { emit reportProgress(tr("Connecting to device...")); - m_connection->connectToHost(); + if (m_connection->state() == Utils::SshConnection::Unconnected) + m_connection->connectToHost(); } } diff --git a/src/plugins/valgrind/valgrind/valgrindprocess.cpp b/src/plugins/valgrind/valgrind/valgrindprocess.cpp index 2be53c433ad..b2da5551f2c 100644 --- a/src/plugins/valgrind/valgrind/valgrindprocess.cpp +++ b/src/plugins/valgrind/valgrind/valgrindprocess.cpp @@ -186,7 +186,8 @@ void RemoteValgrindProcess::run(const QString &valgrindExecutable, const QString this, SLOT(connected())); connect(m_connection.data(), SIGNAL(error(Utils::SshError)), this, SLOT(error(Utils::SshError))); - m_connection->connectToHost(); + if (m_connection->state() == Utils::SshConnection::Unconnected) + m_connection->connectToHost(); } else { connected(); } From fd560b2d245a3e9ee1a7b84b07d05ea0c7af8f36 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Wed, 6 Jul 2011 10:32:25 +0200 Subject: [PATCH 119/143] RemoteLinux: Fix port collecting for Harmattan. At some point, the devrootsh tool turned from a sudo implementation to some stupid magic crap thing, so we can't use it anymore. Change-Id: Ice175eb8a1e64e210a26c2cbfb463414e4a91982 Reviewed-on: http://codereview.qt.nokia.com/1213 Reviewed-by: Christian Kandeler --- src/plugins/remotelinux/maemousedportsgatherer.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/plugins/remotelinux/maemousedportsgatherer.cpp b/src/plugins/remotelinux/maemousedportsgatherer.cpp index b5711b5db67..c72371989c1 100644 --- a/src/plugins/remotelinux/maemousedportsgatherer.cpp +++ b/src/plugins/remotelinux/maemousedportsgatherer.cpp @@ -64,10 +64,12 @@ void MaemoUsedPortsGatherer::start(const Utils::SshConnection::Ptr &connection, SLOT(handleRemoteStdOut(QByteArray))); connect(m_procRunner.data(), SIGNAL(processErrorOutputAvailable(QByteArray)), SLOT(handleRemoteStdErr(QByteArray))); - const QString command = MaemoGlobal::remoteSudo(devConf->osType(), - m_procRunner->connection()->connectionParameters().userName) - + QLatin1String(" lsof -nPi4tcp:") + devConf->freePorts().toString() + QString command = QLatin1String("lsof -nPi4tcp:") + devConf->freePorts().toString() + QLatin1String(" -F n |grep '^n' |sed -r 's/[^:]*:([[:digit:]]+).*/\\1/g' |sort -n |uniq"); + if (devConf->osType() != LinuxDeviceConfiguration::HarmattanOsType) { // devrootsh is broken on Harmattan + command.prepend(MaemoGlobal::remoteSudo(devConf->osType(), + devConf->sshParameters().userName) + QLatin1Char(' ')); + } m_procRunner->run(command.toUtf8()); m_running = true; } From 212cb05cc9899b55016a770234cd5140b4643401 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Wed, 6 Jul 2011 11:11:58 +0000 Subject: [PATCH 120/143] MSVC: Detect 64bit architectures on 32bit hosts as well Task-number: QTCREATORBUG-5115 Change-Id: Ia284c308073f2ba826e964ea7d8ff03ce90e7959 Reviewed-on: http://codereview.qt.nokia.com/1234 Reviewed-by: Qt Sanity Bot Reviewed-by: Tobias Hunger --- src/plugins/projectexplorer/msvctoolchain.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/plugins/projectexplorer/msvctoolchain.cpp b/src/plugins/projectexplorer/msvctoolchain.cpp index a1a8683cef7..beb512dfbe8 100644 --- a/src/plugins/projectexplorer/msvctoolchain.cpp +++ b/src/plugins/projectexplorer/msvctoolchain.cpp @@ -610,7 +610,6 @@ QList MsvcToolChainFactory::autoDetect() tmp.append(new MsvcToolChain(generateDisplayName(name, MsvcToolChain::WindowsSDK, MsvcToolChain::s32), findAbiOfMsvc(MsvcToolChain::WindowsSDK, MsvcToolChain::s32, version), sdkVcVarsBat, QLatin1String("/x86"), true)); -#ifdef Q_OS_WIN64 // Add all platforms tmp.append(new MsvcToolChain(generateDisplayName(name, MsvcToolChain::WindowsSDK, MsvcToolChain::s64), findAbiOfMsvc(MsvcToolChain::WindowsSDK, MsvcToolChain::s64, version), @@ -618,7 +617,6 @@ QList MsvcToolChainFactory::autoDetect() tmp.append(new MsvcToolChain(generateDisplayName(name, MsvcToolChain::WindowsSDK, MsvcToolChain::ia64), findAbiOfMsvc(MsvcToolChain::WindowsSDK, MsvcToolChain::ia64, version), sdkVcVarsBat, QLatin1String("/ia64"), true)); -#endif // Make sure the default is front. if (folder == defaultSdkPath) results = tmp + results; From 339f6160fe660a1e919bf7d98d67775b0fc687c9 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Wed, 6 Jul 2011 12:56:23 +0200 Subject: [PATCH 121/143] License Header Change-Id: I8d54198888abb9d2c73cf245065d097651b43bb7 Reviewed-on: http://codereview.qt.nokia.com/1230 Reviewed-by: Qt Sanity Bot Reviewed-by: Tobias Hunger --- share/qtcreator/welcomescreen/develop.qml | 32 +++++++++++++++++++ .../welcomescreen/gettingstarted.qml | 32 +++++++++++++++++++ .../qtcreator/welcomescreen/welcomescreen.qml | 32 +++++++++++++++++++ .../welcomescreen/widgets/Button.qml | 32 +++++++++++++++++++ .../welcomescreen/widgets/ExampleBrowser.qml | 32 +++++++++++++++++++ .../welcomescreen/widgets/ExampleDelegate.qml | 32 +++++++++++++++++++ .../widgets/FeaturedAndNewsListing.qml | 32 +++++++++++++++++++ .../welcomescreen/widgets/Feedback.qml | 32 +++++++++++++++++++ .../welcomescreen/widgets/HeaderItemView.qml | 32 +++++++++++++++++++ .../welcomescreen/widgets/InsetText.qml | 32 +++++++++++++++++++ .../welcomescreen/widgets/LineEdit.qml | 32 +++++++++++++++++++ .../welcomescreen/widgets/LinksBar.qml | 32 +++++++++++++++++++ .../welcomescreen/widgets/NewsListing.qml | 32 +++++++++++++++++++ .../welcomescreen/widgets/RatingBar.qml | 32 +++++++++++++++++++ .../welcomescreen/widgets/RecentProjects.qml | 32 +++++++++++++++++++ .../welcomescreen/widgets/RecentSessions.qml | 32 +++++++++++++++++++ .../welcomescreen/widgets/TabWidget.qml | 32 +++++++++++++++++++ .../welcomescreen/widgets/TagBrowser.qml | 32 +++++++++++++++++++ 18 files changed, 576 insertions(+) diff --git a/share/qtcreator/welcomescreen/develop.qml b/share/qtcreator/welcomescreen/develop.qml index 93855e618c5..aafa0b2af77 100644 --- a/share/qtcreator/welcomescreen/develop.qml +++ b/share/qtcreator/welcomescreen/develop.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 import "widgets" as Widgets import components 1.0 as Components diff --git a/share/qtcreator/welcomescreen/gettingstarted.qml b/share/qtcreator/welcomescreen/gettingstarted.qml index 20902118f45..61a0695af64 100644 --- a/share/qtcreator/welcomescreen/gettingstarted.qml +++ b/share/qtcreator/welcomescreen/gettingstarted.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 import "widgets" as Widgets diff --git a/share/qtcreator/welcomescreen/welcomescreen.qml b/share/qtcreator/welcomescreen/welcomescreen.qml index 845a2f960c3..881c3514bbf 100644 --- a/share/qtcreator/welcomescreen/welcomescreen.qml +++ b/share/qtcreator/welcomescreen/welcomescreen.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 import "widgets" diff --git a/share/qtcreator/welcomescreen/widgets/Button.qml b/share/qtcreator/welcomescreen/widgets/Button.qml index 40bd8708b00..e23428d5f46 100644 --- a/share/qtcreator/welcomescreen/widgets/Button.qml +++ b/share/qtcreator/welcomescreen/widgets/Button.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 BorderImage { diff --git a/share/qtcreator/welcomescreen/widgets/ExampleBrowser.qml b/share/qtcreator/welcomescreen/widgets/ExampleBrowser.qml index a2574a46f97..104fb52b91e 100644 --- a/share/qtcreator/welcomescreen/widgets/ExampleBrowser.qml +++ b/share/qtcreator/welcomescreen/widgets/ExampleBrowser.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 import components 1.0 as Components diff --git a/share/qtcreator/welcomescreen/widgets/ExampleDelegate.qml b/share/qtcreator/welcomescreen/widgets/ExampleDelegate.qml index f66a2e410d6..d4ebfd8c648 100644 --- a/share/qtcreator/welcomescreen/widgets/ExampleDelegate.qml +++ b/share/qtcreator/welcomescreen/widgets/ExampleDelegate.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 Rectangle { diff --git a/share/qtcreator/welcomescreen/widgets/FeaturedAndNewsListing.qml b/share/qtcreator/welcomescreen/widgets/FeaturedAndNewsListing.qml index d8a3bad22e4..1d2ea1208ea 100644 --- a/share/qtcreator/welcomescreen/widgets/FeaturedAndNewsListing.qml +++ b/share/qtcreator/welcomescreen/widgets/FeaturedAndNewsListing.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 import components 1.0 as Components diff --git a/share/qtcreator/welcomescreen/widgets/Feedback.qml b/share/qtcreator/welcomescreen/widgets/Feedback.qml index a712746492a..0b623473cb4 100644 --- a/share/qtcreator/welcomescreen/widgets/Feedback.qml +++ b/share/qtcreator/welcomescreen/widgets/Feedback.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 import components 1.0 as Components diff --git a/share/qtcreator/welcomescreen/widgets/HeaderItemView.qml b/share/qtcreator/welcomescreen/widgets/HeaderItemView.qml index 3096e014919..306cd8f01de 100644 --- a/share/qtcreator/welcomescreen/widgets/HeaderItemView.qml +++ b/share/qtcreator/welcomescreen/widgets/HeaderItemView.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 Item { diff --git a/share/qtcreator/welcomescreen/widgets/InsetText.qml b/share/qtcreator/welcomescreen/widgets/InsetText.qml index 0a271bff3da..94ad5d720bc 100644 --- a/share/qtcreator/welcomescreen/widgets/InsetText.qml +++ b/share/qtcreator/welcomescreen/widgets/InsetText.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 Text { diff --git a/share/qtcreator/welcomescreen/widgets/LineEdit.qml b/share/qtcreator/welcomescreen/widgets/LineEdit.qml index bea80a85080..aedd1d34e45 100644 --- a/share/qtcreator/welcomescreen/widgets/LineEdit.qml +++ b/share/qtcreator/welcomescreen/widgets/LineEdit.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 FocusScope { diff --git a/share/qtcreator/welcomescreen/widgets/LinksBar.qml b/share/qtcreator/welcomescreen/widgets/LinksBar.qml index e357c17393f..2d1bfd54de2 100644 --- a/share/qtcreator/welcomescreen/widgets/LinksBar.qml +++ b/share/qtcreator/welcomescreen/widgets/LinksBar.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 Row { diff --git a/share/qtcreator/welcomescreen/widgets/NewsListing.qml b/share/qtcreator/welcomescreen/widgets/NewsListing.qml index cc353afd44c..75fb1a90fb7 100644 --- a/share/qtcreator/welcomescreen/widgets/NewsListing.qml +++ b/share/qtcreator/welcomescreen/widgets/NewsListing.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.1 import components 1.0 as Components diff --git a/share/qtcreator/welcomescreen/widgets/RatingBar.qml b/share/qtcreator/welcomescreen/widgets/RatingBar.qml index f7d5a671bbb..ff371df62c4 100644 --- a/share/qtcreator/welcomescreen/widgets/RatingBar.qml +++ b/share/qtcreator/welcomescreen/widgets/RatingBar.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 Row { diff --git a/share/qtcreator/welcomescreen/widgets/RecentProjects.qml b/share/qtcreator/welcomescreen/widgets/RecentProjects.qml index 8f67ca20c04..aa11086c95a 100644 --- a/share/qtcreator/welcomescreen/widgets/RecentProjects.qml +++ b/share/qtcreator/welcomescreen/widgets/RecentProjects.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 import components 1.0 as Components diff --git a/share/qtcreator/welcomescreen/widgets/RecentSessions.qml b/share/qtcreator/welcomescreen/widgets/RecentSessions.qml index 64472cb9b45..c9fbfde771e 100644 --- a/share/qtcreator/welcomescreen/widgets/RecentSessions.qml +++ b/share/qtcreator/welcomescreen/widgets/RecentSessions.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 import components 1.0 as Components diff --git a/share/qtcreator/welcomescreen/widgets/TabWidget.qml b/share/qtcreator/welcomescreen/widgets/TabWidget.qml index fbd951668c6..150c74ead80 100644 --- a/share/qtcreator/welcomescreen/widgets/TabWidget.qml +++ b/share/qtcreator/welcomescreen/widgets/TabWidget.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 Item { diff --git a/share/qtcreator/welcomescreen/widgets/TagBrowser.qml b/share/qtcreator/welcomescreen/widgets/TagBrowser.qml index 9b3dfa27934..bcb9cfc56c9 100644 --- a/share/qtcreator/welcomescreen/widgets/TagBrowser.qml +++ b/share/qtcreator/welcomescreen/widgets/TagBrowser.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 Rectangle { From 9018f5d3553470bc4097d39a7ea36df377e05d33 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Wed, 6 Jul 2011 12:57:47 +0200 Subject: [PATCH 122/143] Make the width of details button dependent on its text Task-number: QTCREATORBUG-5311 Change-Id: Ib50dfcb54f2cd23094ca51f2e5ce10890c92a732 Reviewed-on: http://codereview.qt.nokia.com/1166 Reviewed-by: Qt Sanity Bot Reviewed-by: Eike Ziller --- src/libs/utils/detailsbutton.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/libs/utils/detailsbutton.cpp b/src/libs/utils/detailsbutton.cpp index ef38d9b409d..5aa4ef91fca 100644 --- a/src/libs/utils/detailsbutton.cpp +++ b/src/libs/utils/detailsbutton.cpp @@ -80,10 +80,11 @@ DetailsButton::DetailsButton(QWidget *parent) : QAbstractButton(parent), m_fader QSize DetailsButton::sizeHint() const { // TODO: Adjust this when icons become available! + const int w = fontMetrics().width(text()) + 32; #ifdef Q_WS_MAC - return QSize(80, 34); + return QSize(w, 34); #else - return QSize(80, 22); + return QSize(w, 22); #endif } @@ -171,6 +172,7 @@ QPixmap DetailsButton::cacheRendering(const QSize &size, bool checked) QRect textRect = p.fontMetrics().boundingRect(text()); textRect.setWidth(textRect.width() + 15); + textRect.setHeight(textRect.height() + 4); textRect.moveCenter(rect().center()); p.drawText(textRect, Qt::AlignLeft | Qt::AlignVCenter, text()); From b37fda1aa75f79093e018f9e9e74d181cb3710d3 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Wed, 6 Jul 2011 12:56:59 +0200 Subject: [PATCH 123/143] Add dist files to OTHER_FILES Change-Id: I32f525a2478d4442041c52f22f972202ca61f0b8 Reviewed-on: http://codereview.qt.nokia.com/1231 Reviewed-by: Qt Sanity Bot Reviewed-by: Tobias Hunger --- qtcreator.pro | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/qtcreator.pro b/qtcreator.pro index d6ee82b50b8..ec47b1d3d03 100644 --- a/qtcreator.pro +++ b/qtcreator.pro @@ -11,3 +11,16 @@ TEMPLATE = subdirs CONFIG += ordered SUBDIRS = src share + +OTHER_FILES += dist/copyright_template.txt \ + dist/changes-1.1.0 \ + dist/changes-1.1.1 \ + dist/changes-1.2.0 \ + dist/changes-1.2.1 \ + dist/changes-1.3.0 \ + dist/changes-1.3.1 \ + dist/changes-2.0.0 \ + dist/changes-2.0.1 \ + dist/changes-2.1.0 \ + dist/changes-2.2.0 \ + dist/changes-2.3.0 From 8bddd27a2b9894fcd90684126866496dc59efdb1 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Wed, 6 Jul 2011 13:52:23 +0200 Subject: [PATCH 124/143] Maemo: Add possibility to set the SSH port in the device config wizard. This is for weird people who do port forwarding. Task-number: QTCREATORBUG-5317 Change-Id: If15cab3cc3a12aa79aef0e1cfd1111db79e57b7c Reviewed-on: http://codereview.qt.nokia.com/1235 Reviewed-by: Qt Sanity Bot Reviewed-by: Christian Kandeler --- .../remotelinux/maemodeviceconfigwizard.cpp | 21 +++++++++--- .../maemodeviceconfigwizardstartpage.ui | 34 ++++++++++++++++--- 2 files changed, 45 insertions(+), 10 deletions(-) diff --git a/src/plugins/remotelinux/maemodeviceconfigwizard.cpp b/src/plugins/remotelinux/maemodeviceconfigwizard.cpp index 60a8605ea10..969515a75c3 100644 --- a/src/plugins/remotelinux/maemodeviceconfigwizard.cpp +++ b/src/plugins/remotelinux/maemodeviceconfigwizard.cpp @@ -82,6 +82,7 @@ struct WizardData QString publicKeyFilePath; QString userName; QString password; + int sshPort; }; enum PageId { @@ -119,6 +120,9 @@ public: m_ui->hwButton->setChecked(true); handleDeviceTypeChanged(); m_ui->hostNameLineEdit->setText(defaultHost(deviceType())); + m_ui->sshPortSpinBox->setMinimum(1); + m_ui->sshPortSpinBox->setMaximum(65535); + m_ui->sshPortSpinBox->setValue(22); connect(m_ui->nameLineEdit, SIGNAL(textChanged(QString)), this, SIGNAL(completeChanged())); connect(m_ui->hostNameLineEdit, SIGNAL(textChanged(QString)), this, @@ -150,12 +154,20 @@ public: ? LinuxDeviceConfiguration::Physical : LinuxDeviceConfiguration::Emulator; } + int sshPort() const + { + return deviceType() == LinuxDeviceConfiguration::Emulator + ? 6666 : m_ui->sshPortSpinBox->value(); + } + private slots: void handleDeviceTypeChanged() { const bool enable = deviceType() == LinuxDeviceConfiguration::Physical; m_ui->hostNameLabel->setEnabled(enable); m_ui->hostNameLineEdit->setEnabled(enable); + m_ui->sshPortLabel->setEnabled(enable); + m_ui->sshPortSpinBox->setEnabled(enable); } private: @@ -495,9 +507,9 @@ private: SshConnectionParameters sshParams(SshConnectionParameters::NoProxy); sshParams.authenticationType = SshConnectionParameters::AuthenticationByPassword; sshParams.host = hostAddress(); - sshParams.port = 22; + sshParams.port = m_wizardData.sshPort; sshParams.password = password(); - sshParams.timeout = 30; + sshParams.timeout = 10; sshParams.userName = defaultUser(m_wizardData.osType); m_ui->statusLabel->setText(tr("Deploying... ")); m_keyDeployer->deployPublicKey(sshParams, m_wizardData.publicKeyFilePath); @@ -609,18 +621,17 @@ LinuxDeviceConfiguration::Ptr MaemoDeviceConfigWizard::deviceConfiguration() Utils::SshConnectionParameters sshParams(Utils::SshConnectionParameters::NoProxy); sshParams.userName = defaultUser(d->wizardData.osType); sshParams.host = d->wizardData.hostName; + sshParams.port = d->wizardData.sshPort; if (d->wizardData.deviceType == LinuxDeviceConfiguration::Emulator) { sshParams.authenticationType = Utils::SshConnectionParameters::AuthenticationByPassword; sshParams.password = d->wizardData.osType == LinuxDeviceConfiguration::MeeGoOsType ? QLatin1String("meego") : QString(); - sshParams.port = 6666; sshParams.timeout = 30; freePortsSpec = QLatin1String("13219,14168"); doTest = false; } else { sshParams.authenticationType = Utils::SshConnectionParameters::AuthenticationByKey; sshParams.privateKeyFile = d->wizardData.privateKeyFilePath; - sshParams.port = 22; sshParams.timeout = 10; freePortsSpec = QLatin1String("10000-10100"); doTest = true; @@ -643,7 +654,7 @@ int MaemoDeviceConfigWizard::nextId() const d->wizardData.osType = d->startPage.osType(); d->wizardData.deviceType = d->startPage.deviceType(); d->wizardData.hostName = d->startPage.hostName(); - + d->wizardData.sshPort = d->startPage.sshPort(); if (d->wizardData.deviceType == LinuxDeviceConfiguration::Emulator) return FinalPageId; return PreviousKeySetupCheckPageId; diff --git a/src/plugins/remotelinux/maemodeviceconfigwizardstartpage.ui b/src/plugins/remotelinux/maemodeviceconfigwizardstartpage.ui index dc89ebe98fc..062a89c4d17 100644 --- a/src/plugins/remotelinux/maemodeviceconfigwizardstartpage.ui +++ b/src/plugins/remotelinux/maemodeviceconfigwizardstartpage.ui @@ -6,17 +6,14 @@ 0 0 - 727 - 136 + 721 + 176 WizardPage - - QFormLayout::AllNonFixedFieldsGrow - @@ -102,6 +99,33 @@ + + + + The SSH port: + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + From 0efdb6cde6498782f17fe7ab2cc79b6091a6277e Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Wed, 6 Jul 2011 14:56:58 +0200 Subject: [PATCH 125/143] SSH: Fix race condition. Change-Id: I4f52a2b604db14d088f2416989a502f91a16deab Reviewed-on: http://codereview.qt.nokia.com/1237 Reviewed-by: Qt Sanity Bot Reviewed-by: Daniel Teske --- src/libs/utils/ssh/sshconnection.cpp | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/libs/utils/ssh/sshconnection.cpp b/src/libs/utils/ssh/sshconnection.cpp index 0efdd0091e6..5ff083e6d2b 100644 --- a/src/libs/utils/ssh/sshconnection.cpp +++ b/src/libs/utils/ssh/sshconnection.cpp @@ -48,6 +48,7 @@ #include #include +#include #include #include @@ -70,15 +71,12 @@ namespace { void doStaticInitializationsIfNecessary() { + QMutexLocker locker(&staticInitMutex); if (!staticInitializationsDone) { - staticInitMutex.lock(); - if (!staticInitializationsDone) { - Botan::LibraryInitializer::initialize("thread_safe=true"); - qRegisterMetaType("Utils::SshError"); - qRegisterMetaType("Utils::SftpJobId"); - staticInitializationsDone = true; - } - staticInitMutex.unlock(); + Botan::LibraryInitializer::initialize("thread_safe=true"); + qRegisterMetaType("Utils::SshError"); + qRegisterMetaType("Utils::SftpJobId"); + staticInitializationsDone = true; } } } // anonymous namespace From 7d4194d97b4120d175365ad94aa3549ba762c543 Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Wed, 6 Jul 2011 14:43:24 +0200 Subject: [PATCH 126/143] QmlDesigner.NodeInstances: Fix no dummydata Task-number: QTCREATORBUG-5296 Change-Id: Ia640e03a4a70f15001ab7476713677c52b964cf8 Reviewed-on: http://codereview.qt.nokia.com/1236 Reviewed-by: Qt Sanity Bot Reviewed-by: Alessandro Portale --- .../qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceserver.cpp | 1 + .../qml/qmlpuppet/qmlpuppet/instances/qt4nodeinstanceserver.cpp | 1 + 2 files changed, 2 insertions(+) diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceserver.cpp index 2733050759a..1e7bf4619a7 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceserver.cpp @@ -138,6 +138,7 @@ QList Qt5NodeInstanceServer::setupScene(const CreateSceneCom { setupFileUrl(command.fileUrl()); setupImports(command.imports()); + setupDummyData(command.fileUrl()); QList instanceList = setupInstances(command); diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4nodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4nodeinstanceserver.cpp index 55df8bc0a6c..57aec35e823 100644 --- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4nodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4nodeinstanceserver.cpp @@ -160,6 +160,7 @@ QList Qt4NodeInstanceServer::setupScene(const CreateSceneCom { setupFileUrl(command.fileUrl()); setupImports(command.imports()); + setupDummyData(command.fileUrl()); static_cast(QObjectPrivate::get(declarativeView()->scene()))->processDirtyItemsEmitted = true; From 60a4d2aa732a5d455b7ed1e82350fa87fac3eb5c Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Wed, 6 Jul 2011 15:55:07 +0200 Subject: [PATCH 127/143] QmlDesigner.FormEditor: Fix painting of the background Caching of the QGraphicsView is broken. Task-number: QTCREATORBUG-5258 Change-Id: I7db2bff4809b592aaccfa74c37a3212edb29d403 Reviewed-on: http://codereview.qt.nokia.com/1239 Reviewed-by: Qt Sanity Bot Reviewed-by: Marco Bubke --- .../components/formeditor/formeditorgraphicsview.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorgraphicsview.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorgraphicsview.cpp index 52623f77168..c3b6993659a 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorgraphicsview.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditorgraphicsview.cpp @@ -46,8 +46,7 @@ FormEditorGraphicsView::FormEditorGraphicsView(QWidget *parent) : setTransformationAnchor(QGraphicsView::AnchorUnderMouse); setResizeAnchor(QGraphicsView::AnchorViewCenter); setAlignment(Qt::AlignCenter); - setCacheMode(QGraphicsView::CacheBackground); -// setCacheMode(QGraphicsView::CacheBackground); + setCacheMode(QGraphicsView::CacheNone); setViewportUpdateMode(QGraphicsView::MinimalViewportUpdate); setOptimizationFlags(QGraphicsView::DontSavePainterState); // setViewportUpdateMode(QGraphicsView::NoViewportUpdate); From 718d40aeca2dd5b9f2cff691686e5b3b9a0aae74 Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 6 Jul 2011 16:29:01 +0200 Subject: [PATCH 128/143] debugger: add note which patch to apply for FSF gdb on Mac Change-Id: If52ed2255bf10b3880ecb6a370d8268809612fd9 Reviewed-on: http://codereview.qt.nokia.com/1246 Reviewed-by: hjk --- share/qtcreator/patches/README | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/share/qtcreator/patches/README b/share/qtcreator/patches/README index 319a0c83059..06997ecd6bc 100644 --- a/share/qtcreator/patches/README +++ b/share/qtcreator/patches/README @@ -1,6 +1,10 @@ As baseline, d85391173658dc6dcbf1acc5edbe331b1296f572 (Mon Jun 20 17:53:28) should be used. +For Mac: + + + gdb-increased-dcache-line-size.patch + For Linux: + gdb-increased-dcache-line-size.patch From 5b0fc95354140c714b6933a811a6561b69d4bcda Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 6 Jul 2011 11:57:33 +0200 Subject: [PATCH 129/143] analyzer: remove clutter Change-Id: I195b92107e90519d456dbd12a28e9ad236e4b298 Reviewed-on: http://codereview.qt.nokia.com/1241 Reviewed-by: Qt Sanity Bot Reviewed-by: hjk --- .../analyzerbase/analyzerruncontrol.cpp | 33 +++++++++++++------ src/plugins/analyzerbase/analyzerruncontrol.h | 5 ++- 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/src/plugins/analyzerbase/analyzerruncontrol.cpp b/src/plugins/analyzerbase/analyzerruncontrol.cpp index ce87636400c..889b2a911b6 100644 --- a/src/plugins/analyzerbase/analyzerruncontrol.cpp +++ b/src/plugins/analyzerbase/analyzerruncontrol.cpp @@ -47,11 +47,16 @@ #include #include -#include -using namespace Analyzer; +using namespace ProjectExplorer; -// AnalyzerRunControl::Private /////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// +// +// AnalyzerRunControl::Private +// +////////////////////////////////////////////////////////////////////////// + +namespace Analyzer { class AnalyzerRunControl::Private { @@ -67,7 +72,12 @@ AnalyzerRunControl::Private::Private() {} -// AnalyzerRunControl //////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// +// +// AnalyzerRunControl +// +////////////////////////////////////////////////////////////////////////// + AnalyzerRunControl::AnalyzerRunControl(IAnalyzerTool *tool, const AnalyzerStartParameters &sp, RunConfiguration *runConfiguration) : RunControl(runConfiguration, tool->id()), @@ -94,6 +104,7 @@ AnalyzerRunControl::~AnalyzerRunControl() delete d->m_engine; d->m_engine = 0; + delete d; } void AnalyzerRunControl::start() @@ -105,7 +116,7 @@ void AnalyzerRunControl::start() // clear about-to-be-outdated tasks ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); - ProjectExplorer::TaskHub *hub = pm->getObject(); + TaskHub *hub = pm->getObject(); hub->clearTasks(Constants::ANALYZERTASK_ID); d->m_isRunning = true; @@ -113,7 +124,7 @@ void AnalyzerRunControl::start() d->m_engine->start(); } -ProjectExplorer::RunControl::StopResult AnalyzerRunControl::stop() +RunControl::StopResult AnalyzerRunControl::stop() { if (!d->m_engine || !d->m_isRunning) return StoppedSynchronously; @@ -125,7 +136,7 @@ ProjectExplorer::RunControl::StopResult AnalyzerRunControl::stop() void AnalyzerRunControl::stopIt() { - if (stop() == ProjectExplorer::RunControl::StoppedSynchronously) + if (stop() == RunControl::StoppedSynchronously) AnalyzerManager::handleToolFinished(); } @@ -162,12 +173,12 @@ void AnalyzerRunControl::receiveOutput(const QString &text, Utils::OutputFormat appendMessage(text, format); } -void AnalyzerRunControl::addTask(ProjectExplorer::Task::TaskType type, const QString &description, +void AnalyzerRunControl::addTask(Task::TaskType type, const QString &description, const QString &file, int line) { ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); - ProjectExplorer::TaskHub *hub = pm->getObject(); - hub->addTask(ProjectExplorer::Task(type, description, file, line, Constants::ANALYZERTASK_ID)); + TaskHub *hub = pm->getObject(); + hub->addTask(Task(type, description, file, line, Constants::ANALYZERTASK_ID)); ///FIXME: get a better API for this into Qt Creator QList panes = pm->getObjects(); @@ -178,3 +189,5 @@ void AnalyzerRunControl::addTask(ProjectExplorer::Task::TaskType type, const QSt } } } + +} // namespace Analyzer diff --git a/src/plugins/analyzerbase/analyzerruncontrol.h b/src/plugins/analyzerbase/analyzerruncontrol.h index 046aa847ec3..ff320a4e2b6 100644 --- a/src/plugins/analyzerbase/analyzerruncontrol.h +++ b/src/plugins/analyzerbase/analyzerruncontrol.h @@ -52,9 +52,8 @@ class ANALYZER_EXPORT AnalyzerRunControl : public ProjectExplorer::RunControl Q_OBJECT public: - typedef ProjectExplorer::RunConfiguration RunConfiguration; AnalyzerRunControl(IAnalyzerTool *tool, const AnalyzerStartParameters &sp, - RunConfiguration *runConfiguration); + ProjectExplorer::RunConfiguration *runConfiguration); ~AnalyzerRunControl(); // ProjectExplorer::RunControl @@ -76,7 +75,7 @@ private slots: private: class Private; - QScopedPointer d; + Private *d; }; } // namespace Analyzer From a4c4d67772cf243e9f694e78129bf9a24d0304b0 Mon Sep 17 00:00:00 2001 From: Thomas Murach Date: Wed, 6 Jul 2011 15:48:52 +0000 Subject: [PATCH 130/143] corrected license headers Change-Id: I56fa50745a80abf52488bebe6a5a72cf26932a8b Merge-request: 352 Reviewed-by: Tobias Hunger Reviewed-on: http://codereview.qt.nokia.com/1251 --- .../qmlpuppet/commands/changeidscommand.cpp | 27 +++---- .../qml/qmlpuppet/commands/changeidscommand.h | 27 +++---- .../qt5informationnodeinstanceserver.cpp | 70 +++++----------- .../qt5informationnodeinstanceserver.h | 70 +++++----------- .../instances/qt5nodeinstanceclientproxy.cpp | 70 +++++----------- .../instances/qt5nodeinstanceclientproxy.h | 70 +++++----------- .../instances/qt5nodeinstanceserver.cpp | 70 +++++----------- .../instances/qt5nodeinstanceserver.h | 70 +++++----------- .../qt5previewnodeinstanceserver.cpp | 70 +++++----------- .../instances/qt5previewnodeinstanceserver.h | 70 +++++----------- .../instances/qt5rendernodeinstanceserver.cpp | 70 +++++----------- .../instances/qt5rendernodeinstanceserver.h | 70 +++++----------- .../instances/sgitemnodeinstance.cpp | 70 +++++----------- .../qml2puppet/instances/sgitemnodeinstance.h | 70 +++++----------- .../qt4informationnodeinstanceserver.cpp | 70 +++++----------- .../qt4informationnodeinstanceserver.h | 70 +++++----------- .../instances/qt4nodeinstanceclientproxy.cpp | 70 +++++----------- .../instances/qt4nodeinstanceclientproxy.h | 70 +++++----------- .../instances/qt4nodeinstanceserver.cpp | 70 +++++----------- .../instances/qt4nodeinstanceserver.h | 70 +++++----------- .../Qt/AlignmentHorizontalButtons.qml | 32 ++++++++ .../Qt/AlignmentVerticalButtons.qml | 32 ++++++++ .../propertyeditor/Qt/AnchorBox.qml | 32 ++++++++ .../propertyeditor/Qt/AnchorButtons.qml | 32 ++++++++ .../Qt/BorderImageSpecifics.qml | 32 ++++++++ .../propertyeditor/Qt/CheckBox.qml | 32 ++++++++ .../propertyeditor/Qt/ColorGroupBox.qml | 32 ++++++++ .../propertyeditor/Qt/ColorLabel.qml | 32 ++++++++ .../propertyeditor/Qt/ColorScheme.qml | 32 ++++++++ .../propertyeditor/Qt/ColorTypeButtons.qml | 32 ++++++++ .../propertyeditor/Qt/ComboBox.qml | 32 ++++++++ .../propertyeditor/Qt/DoubleSpinBox.qml | 32 ++++++++ .../Qt/DoubleSpinBoxAlternate.qml | 32 ++++++++ .../propertyeditor/Qt/ExpressionEditor.qml | 32 ++++++++ .../propertyeditor/Qt/Extended.qml | 32 ++++++++ .../Qt/ExtendedFunctionButton.qml | 32 ++++++++ .../propertyeditor/Qt/ExtendedPane.qml | 32 ++++++++ .../propertyeditor/Qt/ExtendedSwitches.qml | 32 ++++++++ .../propertyeditor/Qt/FlagedButton.qml | 32 ++++++++ .../propertyeditor/Qt/FlickableGroupBox.qml | 32 ++++++++ .../propertyeditor/Qt/FlickableSpecifics.qml | 32 ++++++++ .../propertyeditor/Qt/FlipableSpecifics.qml | 32 ++++++++ .../propertyeditor/Qt/FlowSpecifics.qml | 32 ++++++++ .../propertyeditor/Qt/FontComboBox.qml | 32 ++++++++ .../propertyeditor/Qt/FontGroupBox.qml | 32 ++++++++ .../propertyeditor/Qt/FontStyleButtons.qml | 32 ++++++++ .../propertyeditor/Qt/Geometry.qml | 32 ++++++++ .../propertyeditor/Qt/GridSpecifics.qml | 32 ++++++++ .../propertyeditor/Qt/GridViewSpecifics.qml | 32 ++++++++ .../propertyeditor/Qt/GroupBox.qml | 32 ++++++++ .../propertyeditor/Qt/GroupBoxOption.qml | 32 ++++++++ .../propertyeditor/Qt/HorizontalLayout.qml | 32 ++++++++ .../propertyeditor/Qt/HorizontalWhiteLine.qml | 32 ++++++++ .../propertyeditor/Qt/ImageSpecifics.qml | 32 ++++++++ .../propertyeditor/Qt/IntEditor.qml | 32 ++++++++ .../propertyeditor/Qt/ItemPane.qml | 32 ++++++++ .../qmldesigner/propertyeditor/Qt/Label.qml | 32 ++++++++ .../qmldesigner/propertyeditor/Qt/Layout.qml | 32 ++++++++ .../propertyeditor/Qt/LayoutPane.qml | 32 ++++++++ .../propertyeditor/Qt/LineEdit.qml | 32 ++++++++ .../propertyeditor/Qt/ListViewSpecifics.qml | 32 ++++++++ .../propertyeditor/Qt/Modifiers.qml | 32 ++++++++ .../propertyeditor/Qt/MouseAreaSpecifics.qml | 32 ++++++++ .../propertyeditor/Qt/PathViewSpecifics.qml | 32 ++++++++ .../propertyeditor/Qt/PlaceHolder.qml | 32 ++++++++ .../propertyeditor/Qt/PropertyFrame.qml | 32 ++++++++ .../Qt/RectangleColorGroupBox.qml | 32 ++++++++ .../propertyeditor/Qt/RectangleSpecifics.qml | 32 ++++++++ .../propertyeditor/Qt/RowSpecifics.qml | 32 ++++++++ .../propertyeditor/Qt/ScrollArea.qml | 32 ++++++++ .../propertyeditor/Qt/SliderWidget.qml | 32 ++++++++ .../qmldesigner/propertyeditor/Qt/SpinBox.qml | 32 ++++++++ .../Qt/StandardTextColorGroupBox.qml | 32 ++++++++ .../Qt/StandardTextGroupBox.qml | 32 ++++++++ .../propertyeditor/Qt/Switches.qml | 32 ++++++++ .../propertyeditor/Qt/TextEditSpecifics.qml | 32 ++++++++ .../propertyeditor/Qt/TextInputGroupBox.qml | 32 ++++++++ .../propertyeditor/Qt/TextInputSpecifics.qml | 32 ++++++++ .../propertyeditor/Qt/TextSpecifics.qml | 32 ++++++++ .../propertyeditor/Qt/Transformation.qml | 32 ++++++++ .../qmldesigner/propertyeditor/Qt/Type.qml | 32 ++++++++ .../propertyeditor/Qt/VerticalLayout.qml | 32 ++++++++ .../propertyeditor/Qt/Visibility.qml | 32 ++++++++ .../propertyeditor/Qt/emptyPane.qml | 32 ++++++++ .../QtWebKit/WebViewSpecifics.qml | 32 ++++++++ .../welcomescreen/components/Button.qml | 32 ++++++++ .../welcomescreen/components/ButtonRow.qml | 32 ++++++++ .../welcomescreen/components/CheckBox.qml | 32 ++++++++ .../welcomescreen/components/ChoiceList.qml | 32 ++++++++ .../welcomescreen/components/ContextMenu.qml | 32 ++++++++ .../welcomescreen/components/Dial.qml | 32 ++++++++ .../welcomescreen/components/Frame.qml | 32 ++++++++ .../welcomescreen/components/GroupBox.qml | 32 ++++++++ .../welcomescreen/components/Menu.qml | 32 ++++++++ .../welcomescreen/components/MenuItem.qml | 32 ++++++++ .../welcomescreen/components/ProgressBar.qml | 32 ++++++++ .../welcomescreen/components/RadioButton.qml | 32 ++++++++ .../welcomescreen/components/ScrollArea.qml | 32 ++++++++ .../welcomescreen/components/ScrollBar.qml | 32 ++++++++ .../welcomescreen/components/Slider.qml | 32 ++++++++ .../welcomescreen/components/SpinBox.qml | 32 ++++++++ .../welcomescreen/components/SplitterRow.qml | 32 ++++++++ .../welcomescreen/components/Switch.qml | 32 ++++++++ .../welcomescreen/components/Tab.qml | 32 ++++++++ .../welcomescreen/components/TabBar.qml | 32 ++++++++ .../welcomescreen/components/TabFrame.qml | 32 ++++++++ .../welcomescreen/components/TableColumn.qml | 32 ++++++++ .../welcomescreen/components/TableView.qml | 32 ++++++++ .../welcomescreen/components/TextArea.qml | 32 ++++++++ .../welcomescreen/components/TextField.qml | 32 ++++++++ .../welcomescreen/components/ToolBar.qml | 32 ++++++++ .../welcomescreen/components/ToolButton.qml | 32 ++++++++ .../components/custom/BasicButton.qml | 32 ++++++++ .../components/custom/Button.qml | 32 ++++++++ .../components/custom/ButtonColumn.qml | 32 ++++++++ .../components/custom/ButtonRow.qml | 32 ++++++++ .../components/custom/CheckBox.qml | 32 ++++++++ .../components/custom/ChoiceList.qml | 32 ++++++++ .../components/custom/GroupBox.qml | 32 ++++++++ .../components/custom/ProgressBar.qml | 32 ++++++++ .../components/custom/SpinBox.qml | 32 ++++++++ .../components/custom/SplitterRow.qml | 32 ++++++++ .../components/custom/TextField.qml | 32 ++++++++ .../custom/behaviors/ButtonBehavior.qml | 32 ++++++++ .../custom/behaviors/ModalPopupBehavior.qml | 32 ++++++++ .../custom/private/ChoiceListPopup.qml | 32 ++++++++ src/libs/cplusplus/findcdbbreakpoint.cpp | 32 ++++++++ src/libs/cplusplus/findcdbbreakpoint.h | 32 ++++++++ src/plugins/coreplugin/multifeedrssmodel.cpp | 32 ++++++++ src/plugins/coreplugin/multifeedrssmodel.h | 32 ++++++++ .../coreplugin/networkaccessmanager.cpp | 32 ++++++++ src/plugins/coreplugin/networkaccessmanager.h | 32 ++++++++ .../stateseditor/HorizontalScrollBar.qml | 32 ++++++++ .../components/stateseditor/stateslist.qml | 32 ++++++++ .../model/modelnodecontextmenu.cpp | 32 ++++++++ .../designercore/model/modelnodecontextmenu.h | 32 ++++++++ .../qtquickplugin/source/gridview.qml | 32 ++++++++ .../qtquickplugin/source/listview.qml | 32 ++++++++ .../qtquickplugin/source/pathview.qml | 32 ++++++++ .../qmldesigner/qtquickplugin/source/text.qml | 32 ++++++++ .../qtquickplugin/source/textedit.qml | 32 ++++++++ .../qtquickplugin/source/textinput.qml | 32 ++++++++ .../qmlprofiler/canvas/qdeclarativecanvas.cpp | 47 +++++------ .../qmlprofiler/canvas/qdeclarativecanvas_p.h | 47 +++++------ .../canvas/qdeclarativecanvastimer.cpp | 47 +++++------ .../canvas/qdeclarativecanvastimer_p.h | 47 +++++------ .../canvas/qdeclarativecontext2d.cpp | 47 +++++------ .../canvas/qdeclarativecontext2d_p.h | 47 +++++------ .../canvas/qdeclarativetiledcanvas_p.h | 79 ++++++++++++------- .../qmlprofiler/codaqmlprofilerrunner.cpp | 25 +++--- .../qmlprofiler/codaqmlprofilerrunner.h | 25 +++--- .../qmlprofiler/localqmlprofilerrunner.cpp | 25 +++--- .../qmlprofiler/localqmlprofilerrunner.h | 25 +++--- src/plugins/qmlprofiler/qml/Detail.qml | 25 +++--- src/plugins/qmlprofiler/qml/Label.qml | 25 +++--- src/plugins/qmlprofiler/qml/MainView.qml | 25 +++--- src/plugins/qmlprofiler/qml/RangeDetails.qml | 25 +++--- src/plugins/qmlprofiler/qml/RangeMover.qml | 25 +++--- src/plugins/qmlprofiler/qml/TimeDisplay.qml | 32 ++++++++ src/plugins/qmlprofiler/qmlprofiler_global.h | 25 +++--- .../qmlprofiler/qmlprofilerconstants.h | 25 +++--- src/plugins/qmlprofiler/qmlprofilerengine.cpp | 25 +++--- src/plugins/qmlprofiler/qmlprofilerengine.h | 25 +++--- .../qmlprofiler/qmlprofilereventtypes.h | 32 ++++++++ .../qmlprofiler/qmlprofilereventview.cpp | 25 +++--- .../qmlprofiler/qmlprofilereventview.h | 25 +++--- src/plugins/qmlprofiler/qmlprofilerplugin.cpp | 25 +++--- src/plugins/qmlprofiler/qmlprofilerplugin.h | 25 +++--- .../qmlprofilerruncontrolfactory.cpp | 25 +++--- .../qmlprofilerruncontrolfactory.h | 25 +++--- src/plugins/qmlprofiler/qmlprofilertool.cpp | 25 +++--- src/plugins/qmlprofiler/qmlprofilertool.h | 25 +++--- .../qmlprofiler/qmlprofilertraceclient.cpp | 25 +++--- .../qmlprofiler/qmlprofilertraceclient.h | 25 +++--- .../remotelinuxqmlprofilerrunner.cpp | 25 +++--- .../remotelinuxqmlprofilerrunner.h | 25 +++--- src/plugins/qmlprofiler/timelineview.cpp | 25 +++--- src/plugins/qmlprofiler/timelineview.h | 25 +++--- src/plugins/qmlprofiler/tracewindow.cpp | 25 +++--- src/plugins/qmlprofiler/tracewindow.h | 25 +++--- .../qt-s60/s60devicedebugruncontrol.cpp | 25 +++--- .../qt-s60/s60devicedebugruncontrol.h | 25 +++--- src/tools/examplesscanner/helpextractor.cpp | 32 ++++++++ src/tools/examplesscanner/helpextractor.h | 32 ++++++++ src/tools/examplesscanner/main.cpp | 32 ++++++++ src/tools/qtpromaker/main.cpp | 31 ++++++++ .../externaltool/tst_externaltooltest.cpp | 32 ++++++++ .../auto/qml/qmldesigner/data/fx/MyButton.qml | 32 ++++++++ .../qml/qmldesigner/data/fx/TabWidget.qml | 32 ++++++++ .../qml/qmldesigner/data/fx/attributes.qml | 32 ++++++++ .../auto/qml/qmldesigner/data/fx/bigtest.qml | 32 ++++++++ .../qml/qmldesigner/data/fx/components.qml | 32 ++++++++ tests/auto/qml/qmldesigner/data/fx/empty.qml | 32 ++++++++ .../qml/qmldesigner/data/fx/helloworld.qml | 32 ++++++++ tests/auto/qml/qmldesigner/data/fx/image.qml | 32 ++++++++ .../auto/qml/qmldesigner/data/fx/imports.qml | 32 ++++++++ .../qml/qmldesigner/data/fx/properties.qml | 32 ++++++++ .../qml/qmldesigner/data/fx/selectiontest.qml | 32 ++++++++ tests/auto/qml/qmldesigner/data/fx/states.qml | 32 ++++++++ .../qmldesigner/data/fx/subitems/SubItem.qml | 32 ++++++++ tests/auto/qml/qmldesigner/data/fx/tabs.qml | 32 ++++++++ .../auto/qml/qmldesigner/data/fx/topitem.qml | 32 ++++++++ .../qml/qmldesigner/data/fx/usingbutton.qml | 32 ++++++++ .../qml/qmldesigner/data/fx/usingmybutton.qml | 32 ++++++++ .../qml/qmldesigner/data/qwidget/test.qml | 32 ++++++++ .../qmlimportscenario_01/myqmlapp.qml | 32 ++++++++ .../qmlproject01/QmlProject01.qml | 32 ++++++++ .../qmlproject02/QmlProject02.qml | 32 ++++++++ .../subfolder1/myqmlapp.qml | 32 ++++++++ .../trolltech/QmlModule01/QmlComponent01.qml | 32 ++++++++ .../com/nokia/QmlModule02/QmlComponent02.qml | 32 ++++++++ .../simple/deep/deep/simple_gdbtest_app.h | 25 +++--- .../qml/testfiles/components/MyButton.qml | 32 ++++++++ tests/manual/qml/testfiles/empty.qml | 32 ++++++++ tests/manual/qml/testfiles/flipable.qml | 32 ++++++++ tests/manual/qml/testfiles/helloworld.qml | 32 ++++++++ .../qml/testfiles/helloworld_inverted.qml | 32 ++++++++ tests/manual/qml/testfiles/images.qml | 32 ++++++++ tests/manual/qml/testfiles/listmodel.qml | 32 ++++++++ tests/manual/qml/testfiles/listview.qml | 32 ++++++++ tests/manual/qml/testfiles/states.qml | 32 ++++++++ tests/manual/qml/testfiles/subcomponent.qml | 32 ++++++++ tests/manual/qml/testfiles/usingbutton.qml | 32 ++++++++ tests/manual/qml/testfiles/webview.qml | 32 ++++++++ tests/tools/cplusplus-dump/tests/templ01.cpp | 31 ++++++++ .../callgrind/callgrindparsertests.cpp | 27 +++---- .../valgrind/callgrind/callgrindparsertests.h | 27 +++---- tests/valgrind/callgrind/modeltest.cpp | 25 +++--- tests/valgrind/memcheck/parsertests.cpp | 23 +++--- tests/valgrind/memcheck/parsertests.h | 23 +++--- .../valgrind/memcheck/testapps/free1/main.cpp | 32 ++++++++ .../valgrind/memcheck/testapps/free2/main.cpp | 32 ++++++++ .../memcheck/testapps/invalidjump/main.cpp | 32 ++++++++ .../valgrind/memcheck/testapps/leak1/main.cpp | 32 ++++++++ .../valgrind/memcheck/testapps/leak2/main.cpp | 32 ++++++++ .../valgrind/memcheck/testapps/leak3/main.cpp | 32 ++++++++ .../valgrind/memcheck/testapps/leak4/main.cpp | 32 ++++++++ .../memcheck/testapps/overlap/main.cpp | 32 ++++++++ .../memcheck/testapps/syscall/main.cpp | 32 ++++++++ .../memcheck/testapps/uninit1/main.cpp | 32 ++++++++ .../memcheck/testapps/uninit2/main.cpp | 32 ++++++++ .../memcheck/testapps/uninit3/main.cpp | 32 ++++++++ 242 files changed, 6674 insertions(+), 1620 deletions(-) diff --git a/share/qtcreator/qml/qmlpuppet/commands/changeidscommand.cpp b/share/qtcreator/qml/qmlpuppet/commands/changeidscommand.cpp index 32e4ce13617..525f9b1f5aa 100644 --- a/share/qtcreator/qml/qmlpuppet/commands/changeidscommand.cpp +++ b/share/qtcreator/qml/qmlpuppet/commands/changeidscommand.cpp @@ -2,30 +2,29 @@ ** ** This file is part of Qt Creator ** -** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). ** ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** No Commercial Usage -** -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. ** ** GNU Lesser General Public License Usage ** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** ** If you have questions regarding the use of this file, please contact ** Nokia at info@qt.nokia.com. ** diff --git a/share/qtcreator/qml/qmlpuppet/commands/changeidscommand.h b/share/qtcreator/qml/qmlpuppet/commands/changeidscommand.h index 5a8acad6759..dd254539da5 100644 --- a/share/qtcreator/qml/qmlpuppet/commands/changeidscommand.h +++ b/share/qtcreator/qml/qmlpuppet/commands/changeidscommand.h @@ -2,30 +2,29 @@ ** ** This file is part of Qt Creator ** -** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). ** ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** No Commercial Usage -** -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. ** ** GNU Lesser General Public License Usage ** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** ** If you have questions regarding the use of this file, please contact ** Nokia at info@qt.nokia.com. ** diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp index e316198b500..0997e125d01 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp @@ -1,65 +1,33 @@ /************************************************************************** - ** - -** This file is part of Qt Creator - +** This file is part of Qt Creator ** - -** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). - +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). ** - -** Contact: Nokia Corporation (info@qt.nokia.com) - +** Contact: Nokia Corporation (info@qt.nokia.com) ** - -** No Commercial Usage - ** - -** This file contains pre-release code and may not be distributed. - -** You may use this file in accordance with the terms and conditions - -** contained in the Technology Preview License Agreement accompanying - -** this package. - +** GNU Lesser General Public License Usage ** - -** GNU Lesser General Public License Usage - +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** - -** Alternatively, this file may be used under the terms of the GNU Lesser - -** General Public License version 2.1 as published by the Free Software - -** Foundation and appearing in the file LICENSE.LGPL included in the - -** packaging of this file. Please review the following information to - -** ensure the GNU Lesser General Public License version 2.1 requirements - -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. - +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** - -** In addition, as a special exception, Nokia gives you certain additional - -** rights. These rights are described in the Nokia Qt LGPL Exception - -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. - +** Other Usage ** - -** If you have questions regarding the use of this file, please contact - -** Nokia at info@qt.nokia.com. - +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. ** - **************************************************************************/ #include "qt5informationnodeinstanceserver.h" diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h index f7e33530e1a..e97e2c25d5d 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h @@ -1,65 +1,33 @@ /************************************************************************** - ** - -** This file is part of Qt Creator - +** This file is part of Qt Creator ** - -** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). - +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). ** - -** Contact: Nokia Corporation (info@qt.nokia.com) - +** Contact: Nokia Corporation (info@qt.nokia.com) ** - -** No Commercial Usage - ** - -** This file contains pre-release code and may not be distributed. - -** You may use this file in accordance with the terms and conditions - -** contained in the Technology Preview License Agreement accompanying - -** this package. - +** GNU Lesser General Public License Usage ** - -** GNU Lesser General Public License Usage - +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** - -** Alternatively, this file may be used under the terms of the GNU Lesser - -** General Public License version 2.1 as published by the Free Software - -** Foundation and appearing in the file LICENSE.LGPL included in the - -** packaging of this file. Please review the following information to - -** ensure the GNU Lesser General Public License version 2.1 requirements - -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. - +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** - -** In addition, as a special exception, Nokia gives you certain additional - -** rights. These rights are described in the Nokia Qt LGPL Exception - -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. - +** Other Usage ** - -** If you have questions regarding the use of this file, please contact - -** Nokia at info@qt.nokia.com. - +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. ** - **************************************************************************/ #ifndef QMLDESIGNER_QT5INFORMATIONNODEINSTANCESERVER_H diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceclientproxy.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceclientproxy.cpp index ca2a3f0226a..452dc103167 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceclientproxy.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceclientproxy.cpp @@ -1,65 +1,33 @@ /************************************************************************** - ** - -** This file is part of Qt Creator - +** This file is part of Qt Creator ** - -** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). - +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). ** - -** Contact: Nokia Corporation (info@qt.nokia.com) - +** Contact: Nokia Corporation (info@qt.nokia.com) ** - -** No Commercial Usage - ** - -** This file contains pre-release code and may not be distributed. - -** You may use this file in accordance with the terms and conditions - -** contained in the Technology Preview License Agreement accompanying - -** this package. - +** GNU Lesser General Public License Usage ** - -** GNU Lesser General Public License Usage - +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** - -** Alternatively, this file may be used under the terms of the GNU Lesser - -** General Public License version 2.1 as published by the Free Software - -** Foundation and appearing in the file LICENSE.LGPL included in the - -** packaging of this file. Please review the following information to - -** ensure the GNU Lesser General Public License version 2.1 requirements - -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. - +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** - -** In addition, as a special exception, Nokia gives you certain additional - -** rights. These rights are described in the Nokia Qt LGPL Exception - -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. - +** Other Usage ** - -** If you have questions regarding the use of this file, please contact - -** Nokia at info@qt.nokia.com. - +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. ** - **************************************************************************/ #include "qt5nodeinstanceclientproxy.h" diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceclientproxy.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceclientproxy.h index c6667771014..3a1fb76323a 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceclientproxy.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceclientproxy.h @@ -1,65 +1,33 @@ /************************************************************************** - ** - -** This file is part of Qt Creator - +** This file is part of Qt Creator ** - -** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). - +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). ** - -** Contact: Nokia Corporation (info@qt.nokia.com) - +** Contact: Nokia Corporation (info@qt.nokia.com) ** - -** No Commercial Usage - ** - -** This file contains pre-release code and may not be distributed. - -** You may use this file in accordance with the terms and conditions - -** contained in the Technology Preview License Agreement accompanying - -** this package. - +** GNU Lesser General Public License Usage ** - -** GNU Lesser General Public License Usage - +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** - -** Alternatively, this file may be used under the terms of the GNU Lesser - -** General Public License version 2.1 as published by the Free Software - -** Foundation and appearing in the file LICENSE.LGPL included in the - -** packaging of this file. Please review the following information to - -** ensure the GNU Lesser General Public License version 2.1 requirements - -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. - +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** - -** In addition, as a special exception, Nokia gives you certain additional - -** rights. These rights are described in the Nokia Qt LGPL Exception - -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. - +** Other Usage ** - -** If you have questions regarding the use of this file, please contact - -** Nokia at info@qt.nokia.com. - +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. ** - **************************************************************************/ #ifndef QMLDESIGNER_QT5NODEINSTANCECLIENTPROXY_H diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceserver.cpp index 1e7bf4619a7..821752a979b 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceserver.cpp @@ -1,65 +1,33 @@ /************************************************************************** - ** - -** This file is part of Qt Creator - +** This file is part of Qt Creator ** - -** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). - +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). ** - -** Contact: Nokia Corporation (info@qt.nokia.com) - +** Contact: Nokia Corporation (info@qt.nokia.com) ** - -** No Commercial Usage - ** - -** This file contains pre-release code and may not be distributed. - -** You may use this file in accordance with the terms and conditions - -** contained in the Technology Preview License Agreement accompanying - -** this package. - +** GNU Lesser General Public License Usage ** - -** GNU Lesser General Public License Usage - +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** - -** Alternatively, this file may be used under the terms of the GNU Lesser - -** General Public License version 2.1 as published by the Free Software - -** Foundation and appearing in the file LICENSE.LGPL included in the - -** packaging of this file. Please review the following information to - -** ensure the GNU Lesser General Public License version 2.1 requirements - -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. - +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** - -** In addition, as a special exception, Nokia gives you certain additional - -** rights. These rights are described in the Nokia Qt LGPL Exception - -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. - +** Other Usage ** - -** If you have questions regarding the use of this file, please contact - -** Nokia at info@qt.nokia.com. - +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. ** - **************************************************************************/ #include "qt5nodeinstanceserver.h" diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceserver.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceserver.h index 7f252b742a7..58f0342ba9b 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceserver.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceserver.h @@ -1,65 +1,33 @@ /************************************************************************** - ** - -** This file is part of Qt Creator - +** This file is part of Qt Creator ** - -** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). - +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). ** - -** Contact: Nokia Corporation (info@qt.nokia.com) - +** Contact: Nokia Corporation (info@qt.nokia.com) ** - -** No Commercial Usage - ** - -** This file contains pre-release code and may not be distributed. - -** You may use this file in accordance with the terms and conditions - -** contained in the Technology Preview License Agreement accompanying - -** this package. - +** GNU Lesser General Public License Usage ** - -** GNU Lesser General Public License Usage - +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** - -** Alternatively, this file may be used under the terms of the GNU Lesser - -** General Public License version 2.1 as published by the Free Software - -** Foundation and appearing in the file LICENSE.LGPL included in the - -** packaging of this file. Please review the following information to - -** ensure the GNU Lesser General Public License version 2.1 requirements - -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. - +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** - -** In addition, as a special exception, Nokia gives you certain additional - -** rights. These rights are described in the Nokia Qt LGPL Exception - -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. - +** Other Usage ** - -** If you have questions regarding the use of this file, please contact - -** Nokia at info@qt.nokia.com. - +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. ** - **************************************************************************/ #ifndef QT5NODEINSTANCESERVER_H diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5previewnodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5previewnodeinstanceserver.cpp index 1a1e7fd2cca..4c3f6b56874 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5previewnodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5previewnodeinstanceserver.cpp @@ -1,65 +1,33 @@ /************************************************************************** - ** - -** This file is part of Qt Creator - +** This file is part of Qt Creator ** - -** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). - +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). ** - -** Contact: Nokia Corporation (info@qt.nokia.com) - +** Contact: Nokia Corporation (info@qt.nokia.com) ** - -** No Commercial Usage - ** - -** This file contains pre-release code and may not be distributed. - -** You may use this file in accordance with the terms and conditions - -** contained in the Technology Preview License Agreement accompanying - -** this package. - +** GNU Lesser General Public License Usage ** - -** GNU Lesser General Public License Usage - +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** - -** Alternatively, this file may be used under the terms of the GNU Lesser - -** General Public License version 2.1 as published by the Free Software - -** Foundation and appearing in the file LICENSE.LGPL included in the - -** packaging of this file. Please review the following information to - -** ensure the GNU Lesser General Public License version 2.1 requirements - -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. - +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** - -** In addition, as a special exception, Nokia gives you certain additional - -** rights. These rights are described in the Nokia Qt LGPL Exception - -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. - +** Other Usage ** - -** If you have questions regarding the use of this file, please contact - -** Nokia at info@qt.nokia.com. - +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. ** - **************************************************************************/ #include "qt5previewnodeinstanceserver.h" diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5previewnodeinstanceserver.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5previewnodeinstanceserver.h index 33170882334..e10359abc91 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5previewnodeinstanceserver.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5previewnodeinstanceserver.h @@ -1,65 +1,33 @@ /************************************************************************** - ** - -** This file is part of Qt Creator - +** This file is part of Qt Creator ** - -** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). - +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). ** - -** Contact: Nokia Corporation (info@qt.nokia.com) - +** Contact: Nokia Corporation (info@qt.nokia.com) ** - -** No Commercial Usage - ** - -** This file contains pre-release code and may not be distributed. - -** You may use this file in accordance with the terms and conditions - -** contained in the Technology Preview License Agreement accompanying - -** this package. - +** GNU Lesser General Public License Usage ** - -** GNU Lesser General Public License Usage - +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** - -** Alternatively, this file may be used under the terms of the GNU Lesser - -** General Public License version 2.1 as published by the Free Software - -** Foundation and appearing in the file LICENSE.LGPL included in the - -** packaging of this file. Please review the following information to - -** ensure the GNU Lesser General Public License version 2.1 requirements - -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. - +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** - -** In addition, as a special exception, Nokia gives you certain additional - -** rights. These rights are described in the Nokia Qt LGPL Exception - -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. - +** Other Usage ** - -** If you have questions regarding the use of this file, please contact - -** Nokia at info@qt.nokia.com. - +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. ** - **************************************************************************/ #ifndef QMLDESIGNER_QT5PREVIEWNODEINSTANCESERVER_H diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5rendernodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5rendernodeinstanceserver.cpp index a6167ef82f7..a96c066b1c7 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5rendernodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5rendernodeinstanceserver.cpp @@ -1,65 +1,33 @@ /************************************************************************** - ** - -** This file is part of Qt Creator - +** This file is part of Qt Creator ** - -** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). - +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). ** - -** Contact: Nokia Corporation (info@qt.nokia.com) - +** Contact: Nokia Corporation (info@qt.nokia.com) ** - -** No Commercial Usage - ** - -** This file contains pre-release code and may not be distributed. - -** You may use this file in accordance with the terms and conditions - -** contained in the Technology Preview License Agreement accompanying - -** this package. - +** GNU Lesser General Public License Usage ** - -** GNU Lesser General Public License Usage - +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** - -** Alternatively, this file may be used under the terms of the GNU Lesser - -** General Public License version 2.1 as published by the Free Software - -** Foundation and appearing in the file LICENSE.LGPL included in the - -** packaging of this file. Please review the following information to - -** ensure the GNU Lesser General Public License version 2.1 requirements - -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. - +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** - -** In addition, as a special exception, Nokia gives you certain additional - -** rights. These rights are described in the Nokia Qt LGPL Exception - -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. - +** Other Usage ** - -** If you have questions regarding the use of this file, please contact - -** Nokia at info@qt.nokia.com. - +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. ** - **************************************************************************/ #include "qt5rendernodeinstanceserver.h" diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5rendernodeinstanceserver.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5rendernodeinstanceserver.h index 8c96c9d8b4c..ddfdfc16d01 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5rendernodeinstanceserver.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5rendernodeinstanceserver.h @@ -1,65 +1,33 @@ /************************************************************************** - ** - -** This file is part of Qt Creator - +** This file is part of Qt Creator ** - -** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). - +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). ** - -** Contact: Nokia Corporation (info@qt.nokia.com) - +** Contact: Nokia Corporation (info@qt.nokia.com) ** - -** No Commercial Usage - ** - -** This file contains pre-release code and may not be distributed. - -** You may use this file in accordance with the terms and conditions - -** contained in the Technology Preview License Agreement accompanying - -** this package. - +** GNU Lesser General Public License Usage ** - -** GNU Lesser General Public License Usage - +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** - -** Alternatively, this file may be used under the terms of the GNU Lesser - -** General Public License version 2.1 as published by the Free Software - -** Foundation and appearing in the file LICENSE.LGPL included in the - -** packaging of this file. Please review the following information to - -** ensure the GNU Lesser General Public License version 2.1 requirements - -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. - +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** - -** In addition, as a special exception, Nokia gives you certain additional - -** rights. These rights are described in the Nokia Qt LGPL Exception - -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. - +** Other Usage ** - -** If you have questions regarding the use of this file, please contact - -** Nokia at info@qt.nokia.com. - +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. ** - **************************************************************************/ #ifndef QMLDESIGNER_QT5RENDERNODEINSTANCESERVER_H diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/sgitemnodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/sgitemnodeinstance.cpp index 546a5a94807..4b51e6f1653 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/sgitemnodeinstance.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/sgitemnodeinstance.cpp @@ -1,65 +1,33 @@ /************************************************************************** - ** - -** This file is part of Qt Creator - +** This file is part of Qt Creator ** - -** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). - +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). ** - -** Contact: Nokia Corporation (info@qt.nokia.com) - +** Contact: Nokia Corporation (info@qt.nokia.com) ** - -** No Commercial Usage - ** - -** This file contains pre-release code and may not be distributed. - -** You may use this file in accordance with the terms and conditions - -** contained in the Technology Preview License Agreement accompanying - -** this package. - +** GNU Lesser General Public License Usage ** - -** GNU Lesser General Public License Usage - +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** - -** Alternatively, this file may be used under the terms of the GNU Lesser - -** General Public License version 2.1 as published by the Free Software - -** Foundation and appearing in the file LICENSE.LGPL included in the - -** packaging of this file. Please review the following information to - -** ensure the GNU Lesser General Public License version 2.1 requirements - -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. - +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** - -** In addition, as a special exception, Nokia gives you certain additional - -** rights. These rights are described in the Nokia Qt LGPL Exception - -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. - +** Other Usage ** - -** If you have questions regarding the use of this file, please contact - -** Nokia at info@qt.nokia.com. - +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. ** - **************************************************************************/ #include "sgitemnodeinstance.h" diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/sgitemnodeinstance.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/sgitemnodeinstance.h index 8951f9227a9..e344ff45a18 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/sgitemnodeinstance.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/sgitemnodeinstance.h @@ -1,65 +1,33 @@ /************************************************************************** - ** - -** This file is part of Qt Creator - +** This file is part of Qt Creator ** - -** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). - +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). ** - -** Contact: Nokia Corporation (info@qt.nokia.com) - +** Contact: Nokia Corporation (info@qt.nokia.com) ** - -** No Commercial Usage - ** - -** This file contains pre-release code and may not be distributed. - -** You may use this file in accordance with the terms and conditions - -** contained in the Technology Preview License Agreement accompanying - -** this package. - +** GNU Lesser General Public License Usage ** - -** GNU Lesser General Public License Usage - +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** - -** Alternatively, this file may be used under the terms of the GNU Lesser - -** General Public License version 2.1 as published by the Free Software - -** Foundation and appearing in the file LICENSE.LGPL included in the - -** packaging of this file. Please review the following information to - -** ensure the GNU Lesser General Public License version 2.1 requirements - -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. - +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** - -** In addition, as a special exception, Nokia gives you certain additional - -** rights. These rights are described in the Nokia Qt LGPL Exception - -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. - +** Other Usage ** - -** If you have questions regarding the use of this file, please contact - -** Nokia at info@qt.nokia.com. - +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. ** - **************************************************************************/ #ifndef SGITEMNODEINSTANCE_H diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4informationnodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4informationnodeinstanceserver.cpp index 1bf75ddb380..9c23b88fbb8 100644 --- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4informationnodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4informationnodeinstanceserver.cpp @@ -1,65 +1,33 @@ /************************************************************************** - ** - -** This file is part of Qt Creator - +** This file is part of Qt Creator ** - -** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). - +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). ** - -** Contact: Nokia Corporation (info@qt.nokia.com) - +** Contact: Nokia Corporation (info@qt.nokia.com) ** - -** No Commercial Usage - ** - -** This file contains pre-release code and may not be distributed. - -** You may use this file in accordance with the terms and conditions - -** contained in the Technology Preview License Agreement accompanying - -** this package. - +** GNU Lesser General Public License Usage ** - -** GNU Lesser General Public License Usage - +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** - -** Alternatively, this file may be used under the terms of the GNU Lesser - -** General Public License version 2.1 as published by the Free Software - -** Foundation and appearing in the file LICENSE.LGPL included in the - -** packaging of this file. Please review the following information to - -** ensure the GNU Lesser General Public License version 2.1 requirements - -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. - +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** - -** In addition, as a special exception, Nokia gives you certain additional - -** rights. These rights are described in the Nokia Qt LGPL Exception - -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. - +** Other Usage ** - -** If you have questions regarding the use of this file, please contact - -** Nokia at info@qt.nokia.com. - +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. ** - **************************************************************************/ #include "qt4informationnodeinstanceserver.h" diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4informationnodeinstanceserver.h b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4informationnodeinstanceserver.h index 51b904f02a6..1390827ff56 100644 --- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4informationnodeinstanceserver.h +++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4informationnodeinstanceserver.h @@ -1,65 +1,33 @@ /************************************************************************** - ** - -** This file is part of Qt Creator - +** This file is part of Qt Creator ** - -** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). - +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). ** - -** Contact: Nokia Corporation (info@qt.nokia.com) - +** Contact: Nokia Corporation (info@qt.nokia.com) ** - -** No Commercial Usage - ** - -** This file contains pre-release code and may not be distributed. - -** You may use this file in accordance with the terms and conditions - -** contained in the Technology Preview License Agreement accompanying - -** this package. - +** GNU Lesser General Public License Usage ** - -** GNU Lesser General Public License Usage - +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** - -** Alternatively, this file may be used under the terms of the GNU Lesser - -** General Public License version 2.1 as published by the Free Software - -** Foundation and appearing in the file LICENSE.LGPL included in the - -** packaging of this file. Please review the following information to - -** ensure the GNU Lesser General Public License version 2.1 requirements - -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. - +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** - -** In addition, as a special exception, Nokia gives you certain additional - -** rights. These rights are described in the Nokia Qt LGPL Exception - -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. - +** Other Usage ** - -** If you have questions regarding the use of this file, please contact - -** Nokia at info@qt.nokia.com. - +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. ** - **************************************************************************/ #ifndef INFORMATIONNODEINSTANCESERVER_H diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4nodeinstanceclientproxy.cpp b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4nodeinstanceclientproxy.cpp index 55542ca4ba0..fd540e0032e 100644 --- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4nodeinstanceclientproxy.cpp +++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4nodeinstanceclientproxy.cpp @@ -1,65 +1,33 @@ /************************************************************************** - ** - -** This file is part of Qt Creator - +** This file is part of Qt Creator ** - -** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). - +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). ** - -** Contact: Nokia Corporation (info@qt.nokia.com) - +** Contact: Nokia Corporation (info@qt.nokia.com) ** - -** No Commercial Usage - ** - -** This file contains pre-release code and may not be distributed. - -** You may use this file in accordance with the terms and conditions - -** contained in the Technology Preview License Agreement accompanying - -** this package. - +** GNU Lesser General Public License Usage ** - -** GNU Lesser General Public License Usage - +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** - -** Alternatively, this file may be used under the terms of the GNU Lesser - -** General Public License version 2.1 as published by the Free Software - -** Foundation and appearing in the file LICENSE.LGPL included in the - -** packaging of this file. Please review the following information to - -** ensure the GNU Lesser General Public License version 2.1 requirements - -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. - +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** - -** In addition, as a special exception, Nokia gives you certain additional - -** rights. These rights are described in the Nokia Qt LGPL Exception - -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. - +** Other Usage ** - -** If you have questions regarding the use of this file, please contact - -** Nokia at info@qt.nokia.com. - +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. ** - **************************************************************************/ #include "qt4nodeinstanceclientproxy.h" diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4nodeinstanceclientproxy.h b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4nodeinstanceclientproxy.h index 99b1c25186e..97d22a0f565 100644 --- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4nodeinstanceclientproxy.h +++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4nodeinstanceclientproxy.h @@ -1,65 +1,33 @@ /************************************************************************** - ** - -** This file is part of Qt Creator - +** This file is part of Qt Creator ** - -** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). - +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). ** - -** Contact: Nokia Corporation (info@qt.nokia.com) - +** Contact: Nokia Corporation (info@qt.nokia.com) ** - -** No Commercial Usage - ** - -** This file contains pre-release code and may not be distributed. - -** You may use this file in accordance with the terms and conditions - -** contained in the Technology Preview License Agreement accompanying - -** this package. - +** GNU Lesser General Public License Usage ** - -** GNU Lesser General Public License Usage - +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** - -** Alternatively, this file may be used under the terms of the GNU Lesser - -** General Public License version 2.1 as published by the Free Software - -** Foundation and appearing in the file LICENSE.LGPL included in the - -** packaging of this file. Please review the following information to - -** ensure the GNU Lesser General Public License version 2.1 requirements - -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. - +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** - -** In addition, as a special exception, Nokia gives you certain additional - -** rights. These rights are described in the Nokia Qt LGPL Exception - -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. - +** Other Usage ** - -** If you have questions regarding the use of this file, please contact - -** Nokia at info@qt.nokia.com. - +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. ** - **************************************************************************/ #ifndef QMLDESIGNER_QT4NODEINSTANCECLIENTPROXY_H diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4nodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4nodeinstanceserver.cpp index 57aec35e823..7354f2303ee 100644 --- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4nodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4nodeinstanceserver.cpp @@ -1,65 +1,33 @@ /************************************************************************** - ** - -** This file is part of Qt Creator - +** This file is part of Qt Creator ** - -** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). - +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). ** - -** Contact: Nokia Corporation (info@qt.nokia.com) - +** Contact: Nokia Corporation (info@qt.nokia.com) ** - -** No Commercial Usage - ** - -** This file contains pre-release code and may not be distributed. - -** You may use this file in accordance with the terms and conditions - -** contained in the Technology Preview License Agreement accompanying - -** this package. - +** GNU Lesser General Public License Usage ** - -** GNU Lesser General Public License Usage - +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** - -** Alternatively, this file may be used under the terms of the GNU Lesser - -** General Public License version 2.1 as published by the Free Software - -** Foundation and appearing in the file LICENSE.LGPL included in the - -** packaging of this file. Please review the following information to - -** ensure the GNU Lesser General Public License version 2.1 requirements - -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. - +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** - -** In addition, as a special exception, Nokia gives you certain additional - -** rights. These rights are described in the Nokia Qt LGPL Exception - -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. - +** Other Usage ** - -** If you have questions regarding the use of this file, please contact - -** Nokia at info@qt.nokia.com. - +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. ** - **************************************************************************/ #include "qt4nodeinstanceserver.h" diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4nodeinstanceserver.h b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4nodeinstanceserver.h index 54673c9bf9f..67ee32102e9 100644 --- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4nodeinstanceserver.h +++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4nodeinstanceserver.h @@ -1,65 +1,33 @@ /************************************************************************** - ** - -** This file is part of Qt Creator - +** This file is part of Qt Creator ** - -** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). - +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). ** - -** Contact: Nokia Corporation (info@qt.nokia.com) - +** Contact: Nokia Corporation (info@qt.nokia.com) ** - -** No Commercial Usage - ** - -** This file contains pre-release code and may not be distributed. - -** You may use this file in accordance with the terms and conditions - -** contained in the Technology Preview License Agreement accompanying - -** this package. - +** GNU Lesser General Public License Usage ** - -** GNU Lesser General Public License Usage - +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** - -** Alternatively, this file may be used under the terms of the GNU Lesser - -** General Public License version 2.1 as published by the Free Software - -** Foundation and appearing in the file LICENSE.LGPL included in the - -** packaging of this file. Please review the following information to - -** ensure the GNU Lesser General Public License version 2.1 requirements - -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. - +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** - -** In addition, as a special exception, Nokia gives you certain additional - -** rights. These rights are described in the Nokia Qt LGPL Exception - -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. - +** Other Usage ** - -** If you have questions regarding the use of this file, please contact - -** Nokia at info@qt.nokia.com. - +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. ** - **************************************************************************/ #ifndef QT4NODEINSTANCESERVER_H diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/AlignmentHorizontalButtons.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/AlignmentHorizontalButtons.qml index 849ab25517e..35f3e9d9668 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/AlignmentHorizontalButtons.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/AlignmentHorizontalButtons.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/AlignmentVerticalButtons.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/AlignmentVerticalButtons.qml index ac6a79ca266..3e9d8ca699d 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/AlignmentVerticalButtons.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/AlignmentVerticalButtons.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/AnchorBox.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/AnchorBox.qml index e24c5905e01..2c6a4057f51 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/AnchorBox.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/AnchorBox.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/AnchorButtons.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/AnchorButtons.qml index 3f4b8fbf4a9..1aaa42f2ad9 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/AnchorButtons.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/AnchorButtons.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/BorderImageSpecifics.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/BorderImageSpecifics.qml index a12ae4f0c47..10a73dff433 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/BorderImageSpecifics.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/BorderImageSpecifics.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/CheckBox.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/CheckBox.qml index b161a2c084c..cc9db08018e 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/CheckBox.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/CheckBox.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/ColorGroupBox.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/ColorGroupBox.qml index 5b08c18876e..d36219f407e 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/ColorGroupBox.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/ColorGroupBox.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/ColorLabel.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/ColorLabel.qml index 0305bc8610e..4535b902214 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/ColorLabel.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/ColorLabel.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/ColorScheme.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/ColorScheme.qml index ff90e779c1a..40fc5a822eb 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/ColorScheme.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/ColorScheme.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/ColorTypeButtons.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/ColorTypeButtons.qml index 8436718b4b9..2e02ac9f861 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/ColorTypeButtons.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/ColorTypeButtons.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/ComboBox.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/ComboBox.qml index c4aa6c7d0bb..8c4d606731a 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/ComboBox.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/ComboBox.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/DoubleSpinBox.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/DoubleSpinBox.qml index 8045f707d58..c0caf712366 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/DoubleSpinBox.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/DoubleSpinBox.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/DoubleSpinBoxAlternate.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/DoubleSpinBoxAlternate.qml index 2fe97d2ae17..519cc229b09 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/DoubleSpinBoxAlternate.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/DoubleSpinBoxAlternate.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/ExpressionEditor.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/ExpressionEditor.qml index 483efc6ce51..ed4d021589d 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/ExpressionEditor.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/ExpressionEditor.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/Extended.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/Extended.qml index ac2f56fd20b..202715c8130 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/Extended.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/Extended.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/ExtendedFunctionButton.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/ExtendedFunctionButton.qml index b943e395d39..317fcaa3c59 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/ExtendedFunctionButton.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/ExtendedFunctionButton.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/ExtendedPane.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/ExtendedPane.qml index 5e4ba4f58a2..8f5e56753af 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/ExtendedPane.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/ExtendedPane.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/ExtendedSwitches.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/ExtendedSwitches.qml index 3669e3b169c..6c3c70a175f 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/ExtendedSwitches.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/ExtendedSwitches.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/FlagedButton.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/FlagedButton.qml index dc0e978d21b..a2bf73b863a 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/FlagedButton.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/FlagedButton.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/FlickableGroupBox.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/FlickableGroupBox.qml index 162b9284002..cd3a39a9060 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/FlickableGroupBox.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/FlickableGroupBox.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/FlickableSpecifics.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/FlickableSpecifics.qml index 6c4d0824182..79276766b9d 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/FlickableSpecifics.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/FlickableSpecifics.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/FlipableSpecifics.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/FlipableSpecifics.qml index 1d5c021f4bc..1adfb4deaed 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/FlipableSpecifics.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/FlipableSpecifics.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/FlowSpecifics.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/FlowSpecifics.qml index 9bc59d05060..726c70b09c7 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/FlowSpecifics.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/FlowSpecifics.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/FontComboBox.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/FontComboBox.qml index e11059f22aa..328ba27f2a0 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/FontComboBox.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/FontComboBox.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/FontGroupBox.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/FontGroupBox.qml index c57846486fe..c6cacc72d10 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/FontGroupBox.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/FontGroupBox.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/FontStyleButtons.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/FontStyleButtons.qml index 0abd7f7e89f..40945268b53 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/FontStyleButtons.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/FontStyleButtons.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/Geometry.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/Geometry.qml index bc8e47ddb50..737083ff89c 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/Geometry.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/Geometry.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/GridSpecifics.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/GridSpecifics.qml index 092b19963b7..ed75c200586 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/GridSpecifics.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/GridSpecifics.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/GridViewSpecifics.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/GridViewSpecifics.qml index fc9cf78b1fb..aeedc767860 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/GridViewSpecifics.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/GridViewSpecifics.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/GroupBox.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/GroupBox.qml index 927d8624d49..ae25549708f 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/GroupBox.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/GroupBox.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/GroupBoxOption.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/GroupBoxOption.qml index 5a753f8e629..ac414f3fc32 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/GroupBoxOption.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/GroupBoxOption.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/HorizontalLayout.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/HorizontalLayout.qml index e232a9748d5..51020b0f416 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/HorizontalLayout.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/HorizontalLayout.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/HorizontalWhiteLine.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/HorizontalWhiteLine.qml index d37816a8e14..b99bec51cc0 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/HorizontalWhiteLine.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/HorizontalWhiteLine.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/ImageSpecifics.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/ImageSpecifics.qml index fd45f644b6a..d24debbceef 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/ImageSpecifics.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/ImageSpecifics.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/IntEditor.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/IntEditor.qml index e7fbabf4fca..e8897871456 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/IntEditor.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/IntEditor.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/ItemPane.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/ItemPane.qml index 5689950fe2a..d5624f314dd 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/ItemPane.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/ItemPane.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/Label.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/Label.qml index c3c7c5851ae..c1d188784ec 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/Label.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/Label.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/Layout.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/Layout.qml index 1475dd06ff7..bbde64075b9 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/Layout.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/Layout.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/LayoutPane.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/LayoutPane.qml index efa89e20ea4..918f27369c3 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/LayoutPane.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/LayoutPane.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/LineEdit.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/LineEdit.qml index 0909caf8466..a80e4dbde12 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/LineEdit.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/LineEdit.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/ListViewSpecifics.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/ListViewSpecifics.qml index dbab81eeb25..0ba6f1af544 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/ListViewSpecifics.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/ListViewSpecifics.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/Modifiers.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/Modifiers.qml index 13bd9ba2ee2..d1f6b59646a 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/Modifiers.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/Modifiers.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/MouseAreaSpecifics.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/MouseAreaSpecifics.qml index 9a7777c23d8..b5041c7f4a8 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/MouseAreaSpecifics.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/MouseAreaSpecifics.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/PathViewSpecifics.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/PathViewSpecifics.qml index 47eae2e405c..c0a2fbd9730 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/PathViewSpecifics.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/PathViewSpecifics.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/PlaceHolder.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/PlaceHolder.qml index 7c1ad73db5f..979293ce134 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/PlaceHolder.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/PlaceHolder.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/PropertyFrame.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/PropertyFrame.qml index 13086c4cbc0..144a07e3fa0 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/PropertyFrame.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/PropertyFrame.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/RectangleColorGroupBox.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/RectangleColorGroupBox.qml index a6feca92d6a..79dafeccdba 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/RectangleColorGroupBox.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/RectangleColorGroupBox.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/RectangleSpecifics.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/RectangleSpecifics.qml index 66e2ddcfe80..ebeb4afc0e6 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/RectangleSpecifics.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/RectangleSpecifics.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/RowSpecifics.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/RowSpecifics.qml index 0ffe12f1e22..13bf7a22040 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/RowSpecifics.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/RowSpecifics.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/ScrollArea.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/ScrollArea.qml index 85913dbd3a0..5db50627e03 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/ScrollArea.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/ScrollArea.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/SliderWidget.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/SliderWidget.qml index b0a5a61f46d..2972ca2779e 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/SliderWidget.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/SliderWidget.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/SpinBox.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/SpinBox.qml index 60f79d618a6..18303831bbe 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/SpinBox.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/SpinBox.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/StandardTextColorGroupBox.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/StandardTextColorGroupBox.qml index 07645f30362..926d677a8f3 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/StandardTextColorGroupBox.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/StandardTextColorGroupBox.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/StandardTextGroupBox.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/StandardTextGroupBox.qml index 3f29936cbfb..fda6d93522d 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/StandardTextGroupBox.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/StandardTextGroupBox.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/Switches.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/Switches.qml index f9c8890062c..e842709425a 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/Switches.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/Switches.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/TextEditSpecifics.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/TextEditSpecifics.qml index 6a0dc35f3bf..f7c26a54c92 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/TextEditSpecifics.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/TextEditSpecifics.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/TextInputGroupBox.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/TextInputGroupBox.qml index dc64c577090..577e364c8df 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/TextInputGroupBox.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/TextInputGroupBox.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/TextInputSpecifics.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/TextInputSpecifics.qml index 3a98fe9a61c..1d55a3e3651 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/TextInputSpecifics.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/TextInputSpecifics.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/TextSpecifics.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/TextSpecifics.qml index 666c5091c47..78e83dff062 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/TextSpecifics.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/TextSpecifics.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/Transformation.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/Transformation.qml index 8a0af921242..047abcfd8f7 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/Transformation.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/Transformation.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/Type.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/Type.qml index 702212eda81..54b43f91b38 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/Type.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/Type.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/VerticalLayout.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/VerticalLayout.qml index f60d062eeec..5ff63d5a45f 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/VerticalLayout.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/VerticalLayout.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/Visibility.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/Visibility.qml index 398ca2b29ab..741902affe6 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/Visibility.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/Visibility.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/emptyPane.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/emptyPane.qml index 5f2b1e506b5..10a563827c8 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/emptyPane.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/emptyPane.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 diff --git a/share/qtcreator/qmldesigner/propertyeditor/QtWebKit/WebViewSpecifics.qml b/share/qtcreator/qmldesigner/propertyeditor/QtWebKit/WebViewSpecifics.qml index 575c510a589..a089b954789 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/QtWebKit/WebViewSpecifics.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/QtWebKit/WebViewSpecifics.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Bauhaus 1.0 import "../Qt/" diff --git a/share/qtcreator/welcomescreen/components/Button.qml b/share/qtcreator/welcomescreen/components/Button.qml index 99307730705..050eeb4ddc0 100644 --- a/share/qtcreator/welcomescreen/components/Button.qml +++ b/share/qtcreator/welcomescreen/components/Button.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 import "custom" as Components diff --git a/share/qtcreator/welcomescreen/components/ButtonRow.qml b/share/qtcreator/welcomescreen/components/ButtonRow.qml index 7123b415b94..b2cba92849d 100644 --- a/share/qtcreator/welcomescreen/components/ButtonRow.qml +++ b/share/qtcreator/welcomescreen/components/ButtonRow.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 import "custom" as Components diff --git a/share/qtcreator/welcomescreen/components/CheckBox.qml b/share/qtcreator/welcomescreen/components/CheckBox.qml index d2ffe94feec..b8b94ca77f5 100644 --- a/share/qtcreator/welcomescreen/components/CheckBox.qml +++ b/share/qtcreator/welcomescreen/components/CheckBox.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 import "custom" as Components diff --git a/share/qtcreator/welcomescreen/components/ChoiceList.qml b/share/qtcreator/welcomescreen/components/ChoiceList.qml index 1582cc9ff0b..cf72493421f 100644 --- a/share/qtcreator/welcomescreen/components/ChoiceList.qml +++ b/share/qtcreator/welcomescreen/components/ChoiceList.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 import "custom" as Components diff --git a/share/qtcreator/welcomescreen/components/ContextMenu.qml b/share/qtcreator/welcomescreen/components/ContextMenu.qml index 14fbc8da9dd..9592a2068c1 100644 --- a/share/qtcreator/welcomescreen/components/ContextMenu.qml +++ b/share/qtcreator/welcomescreen/components/ContextMenu.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 import "custom" as Components diff --git a/share/qtcreator/welcomescreen/components/Dial.qml b/share/qtcreator/welcomescreen/components/Dial.qml index 95560cb8600..9793b46be1e 100644 --- a/share/qtcreator/welcomescreen/components/Dial.qml +++ b/share/qtcreator/welcomescreen/components/Dial.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 import "custom" as Components diff --git a/share/qtcreator/welcomescreen/components/Frame.qml b/share/qtcreator/welcomescreen/components/Frame.qml index 45031688923..f101cb6b01e 100644 --- a/share/qtcreator/welcomescreen/components/Frame.qml +++ b/share/qtcreator/welcomescreen/components/Frame.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 import "custom" as Components diff --git a/share/qtcreator/welcomescreen/components/GroupBox.qml b/share/qtcreator/welcomescreen/components/GroupBox.qml index 0afcfc47692..b9de3ad662a 100644 --- a/share/qtcreator/welcomescreen/components/GroupBox.qml +++ b/share/qtcreator/welcomescreen/components/GroupBox.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 import "custom" as Components diff --git a/share/qtcreator/welcomescreen/components/Menu.qml b/share/qtcreator/welcomescreen/components/Menu.qml index 158ec52e785..8db25dbcae5 100644 --- a/share/qtcreator/welcomescreen/components/Menu.qml +++ b/share/qtcreator/welcomescreen/components/Menu.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 MenuBase { diff --git a/share/qtcreator/welcomescreen/components/MenuItem.qml b/share/qtcreator/welcomescreen/components/MenuItem.qml index 1cd0a1d3e4a..d02b3500a65 100644 --- a/share/qtcreator/welcomescreen/components/MenuItem.qml +++ b/share/qtcreator/welcomescreen/components/MenuItem.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 MenuItemBase { diff --git a/share/qtcreator/welcomescreen/components/ProgressBar.qml b/share/qtcreator/welcomescreen/components/ProgressBar.qml index 88e50da9ffd..358993554d1 100644 --- a/share/qtcreator/welcomescreen/components/ProgressBar.qml +++ b/share/qtcreator/welcomescreen/components/ProgressBar.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 import "custom" as Components diff --git a/share/qtcreator/welcomescreen/components/RadioButton.qml b/share/qtcreator/welcomescreen/components/RadioButton.qml index 552c9ad8c4e..9045158fb67 100644 --- a/share/qtcreator/welcomescreen/components/RadioButton.qml +++ b/share/qtcreator/welcomescreen/components/RadioButton.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 import "custom" as Components diff --git a/share/qtcreator/welcomescreen/components/ScrollArea.qml b/share/qtcreator/welcomescreen/components/ScrollArea.qml index 4a9cfbdf436..8f32e38d261 100644 --- a/share/qtcreator/welcomescreen/components/ScrollArea.qml +++ b/share/qtcreator/welcomescreen/components/ScrollArea.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 import "custom" as Components diff --git a/share/qtcreator/welcomescreen/components/ScrollBar.qml b/share/qtcreator/welcomescreen/components/ScrollBar.qml index 800a90a0473..fcd16450ed9 100644 --- a/share/qtcreator/welcomescreen/components/ScrollBar.qml +++ b/share/qtcreator/welcomescreen/components/ScrollBar.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 import "custom" as Components diff --git a/share/qtcreator/welcomescreen/components/Slider.qml b/share/qtcreator/welcomescreen/components/Slider.qml index eb7ec22a366..ca2c5a49fea 100644 --- a/share/qtcreator/welcomescreen/components/Slider.qml +++ b/share/qtcreator/welcomescreen/components/Slider.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 import "custom" as Components diff --git a/share/qtcreator/welcomescreen/components/SpinBox.qml b/share/qtcreator/welcomescreen/components/SpinBox.qml index 525ade6fd18..a929adfa728 100644 --- a/share/qtcreator/welcomescreen/components/SpinBox.qml +++ b/share/qtcreator/welcomescreen/components/SpinBox.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 import "custom" as Components diff --git a/share/qtcreator/welcomescreen/components/SplitterRow.qml b/share/qtcreator/welcomescreen/components/SplitterRow.qml index 9efa010e290..ced970e27f3 100644 --- a/share/qtcreator/welcomescreen/components/SplitterRow.qml +++ b/share/qtcreator/welcomescreen/components/SplitterRow.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 import "custom" as Components diff --git a/share/qtcreator/welcomescreen/components/Switch.qml b/share/qtcreator/welcomescreen/components/Switch.qml index 08518b13b51..fcc54094c10 100644 --- a/share/qtcreator/welcomescreen/components/Switch.qml +++ b/share/qtcreator/welcomescreen/components/Switch.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 import "custom" as Components diff --git a/share/qtcreator/welcomescreen/components/Tab.qml b/share/qtcreator/welcomescreen/components/Tab.qml index b0e223da385..520f07db750 100644 --- a/share/qtcreator/welcomescreen/components/Tab.qml +++ b/share/qtcreator/welcomescreen/components/Tab.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 Item { diff --git a/share/qtcreator/welcomescreen/components/TabBar.qml b/share/qtcreator/welcomescreen/components/TabBar.qml index 1b78aa653da..27d648f0b12 100644 --- a/share/qtcreator/welcomescreen/components/TabBar.qml +++ b/share/qtcreator/welcomescreen/components/TabBar.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 import "custom" as Components diff --git a/share/qtcreator/welcomescreen/components/TabFrame.qml b/share/qtcreator/welcomescreen/components/TabFrame.qml index ba664ee1949..d9e730dade2 100644 --- a/share/qtcreator/welcomescreen/components/TabFrame.qml +++ b/share/qtcreator/welcomescreen/components/TabFrame.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 import "custom" as Components diff --git a/share/qtcreator/welcomescreen/components/TableColumn.qml b/share/qtcreator/welcomescreen/components/TableColumn.qml index b40334bbf59..9081f6af132 100644 --- a/share/qtcreator/welcomescreen/components/TableColumn.qml +++ b/share/qtcreator/welcomescreen/components/TableColumn.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 QtObject { diff --git a/share/qtcreator/welcomescreen/components/TableView.qml b/share/qtcreator/welcomescreen/components/TableView.qml index b73be18e9ce..132610c3f66 100644 --- a/share/qtcreator/welcomescreen/components/TableView.qml +++ b/share/qtcreator/welcomescreen/components/TableView.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 /* diff --git a/share/qtcreator/welcomescreen/components/TextArea.qml b/share/qtcreator/welcomescreen/components/TextArea.qml index 92e951f2747..c222e9ecc31 100644 --- a/share/qtcreator/welcomescreen/components/TextArea.qml +++ b/share/qtcreator/welcomescreen/components/TextArea.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 import "custom" as Components diff --git a/share/qtcreator/welcomescreen/components/TextField.qml b/share/qtcreator/welcomescreen/components/TextField.qml index 0c068245584..62adbddb9ee 100644 --- a/share/qtcreator/welcomescreen/components/TextField.qml +++ b/share/qtcreator/welcomescreen/components/TextField.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 import "custom" as Components diff --git a/share/qtcreator/welcomescreen/components/ToolBar.qml b/share/qtcreator/welcomescreen/components/ToolBar.qml index 6185cc6ca1c..a33fd69e3b5 100644 --- a/share/qtcreator/welcomescreen/components/ToolBar.qml +++ b/share/qtcreator/welcomescreen/components/ToolBar.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 import "custom" as Components diff --git a/share/qtcreator/welcomescreen/components/ToolButton.qml b/share/qtcreator/welcomescreen/components/ToolButton.qml index 82593bc5524..2747947d5d2 100644 --- a/share/qtcreator/welcomescreen/components/ToolButton.qml +++ b/share/qtcreator/welcomescreen/components/ToolButton.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 import "custom" as Components diff --git a/share/qtcreator/welcomescreen/components/custom/BasicButton.qml b/share/qtcreator/welcomescreen/components/custom/BasicButton.qml index ee591e2026c..79ceb40b510 100644 --- a/share/qtcreator/welcomescreen/components/custom/BasicButton.qml +++ b/share/qtcreator/welcomescreen/components/custom/BasicButton.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 import "./behaviors" // ButtonBehavior diff --git a/share/qtcreator/welcomescreen/components/custom/Button.qml b/share/qtcreator/welcomescreen/components/custom/Button.qml index 45abc83f604..f3a4af3adf1 100644 --- a/share/qtcreator/welcomescreen/components/custom/Button.qml +++ b/share/qtcreator/welcomescreen/components/custom/Button.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 BasicButton { diff --git a/share/qtcreator/welcomescreen/components/custom/ButtonColumn.qml b/share/qtcreator/welcomescreen/components/custom/ButtonColumn.qml index 8d63a855c3b..4a1fe634eb1 100644 --- a/share/qtcreator/welcomescreen/components/custom/ButtonColumn.qml +++ b/share/qtcreator/welcomescreen/components/custom/ButtonColumn.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import "ButtonGroup.js" as Behavior diff --git a/share/qtcreator/welcomescreen/components/custom/ButtonRow.qml b/share/qtcreator/welcomescreen/components/custom/ButtonRow.qml index 7c2d3ea7ad6..1f1ceeb5b22 100644 --- a/share/qtcreator/welcomescreen/components/custom/ButtonRow.qml +++ b/share/qtcreator/welcomescreen/components/custom/ButtonRow.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import "ButtonGroup.js" as Behavior diff --git a/share/qtcreator/welcomescreen/components/custom/CheckBox.qml b/share/qtcreator/welcomescreen/components/custom/CheckBox.qml index a49d71d8a53..851b032dcc9 100644 --- a/share/qtcreator/welcomescreen/components/custom/CheckBox.qml +++ b/share/qtcreator/welcomescreen/components/custom/CheckBox.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 import "./behaviors" diff --git a/share/qtcreator/welcomescreen/components/custom/ChoiceList.qml b/share/qtcreator/welcomescreen/components/custom/ChoiceList.qml index a316f042ed9..4da78ffa7d8 100644 --- a/share/qtcreator/welcomescreen/components/custom/ChoiceList.qml +++ b/share/qtcreator/welcomescreen/components/custom/ChoiceList.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 import "./private" as Private diff --git a/share/qtcreator/welcomescreen/components/custom/GroupBox.qml b/share/qtcreator/welcomescreen/components/custom/GroupBox.qml index ab1117e3e8a..87b471074cd 100644 --- a/share/qtcreator/welcomescreen/components/custom/GroupBox.qml +++ b/share/qtcreator/welcomescreen/components/custom/GroupBox.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 FocusScope { diff --git a/share/qtcreator/welcomescreen/components/custom/ProgressBar.qml b/share/qtcreator/welcomescreen/components/custom/ProgressBar.qml index 3ad8bca6c0b..995d477fdaa 100644 --- a/share/qtcreator/welcomescreen/components/custom/ProgressBar.qml +++ b/share/qtcreator/welcomescreen/components/custom/ProgressBar.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 Item { diff --git a/share/qtcreator/welcomescreen/components/custom/SpinBox.qml b/share/qtcreator/welcomescreen/components/custom/SpinBox.qml index 1110ff824e0..e17b56c931a 100644 --- a/share/qtcreator/welcomescreen/components/custom/SpinBox.qml +++ b/share/qtcreator/welcomescreen/components/custom/SpinBox.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 FocusScope { diff --git a/share/qtcreator/welcomescreen/components/custom/SplitterRow.qml b/share/qtcreator/welcomescreen/components/custom/SplitterRow.qml index adf73f317bb..7c709311593 100644 --- a/share/qtcreator/welcomescreen/components/custom/SplitterRow.qml +++ b/share/qtcreator/welcomescreen/components/custom/SplitterRow.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 import "private" diff --git a/share/qtcreator/welcomescreen/components/custom/TextField.qml b/share/qtcreator/welcomescreen/components/custom/TextField.qml index b38b3ecb70d..17188d10a2d 100644 --- a/share/qtcreator/welcomescreen/components/custom/TextField.qml +++ b/share/qtcreator/welcomescreen/components/custom/TextField.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 import "./behaviors" // TextEditMouseBehavior diff --git a/share/qtcreator/welcomescreen/components/custom/behaviors/ButtonBehavior.qml b/share/qtcreator/welcomescreen/components/custom/behaviors/ButtonBehavior.qml index 57ea626906c..da8c49149ba 100644 --- a/share/qtcreator/welcomescreen/components/custom/behaviors/ButtonBehavior.qml +++ b/share/qtcreator/welcomescreen/components/custom/behaviors/ButtonBehavior.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 Item { diff --git a/share/qtcreator/welcomescreen/components/custom/behaviors/ModalPopupBehavior.qml b/share/qtcreator/welcomescreen/components/custom/behaviors/ModalPopupBehavior.qml index 108bf02ae21..0e5da2c3117 100644 --- a/share/qtcreator/welcomescreen/components/custom/behaviors/ModalPopupBehavior.qml +++ b/share/qtcreator/welcomescreen/components/custom/behaviors/ModalPopupBehavior.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 // KNOWN ISSUES diff --git a/share/qtcreator/welcomescreen/components/custom/private/ChoiceListPopup.qml b/share/qtcreator/welcomescreen/components/custom/private/ChoiceListPopup.qml index 5ed7f277da2..5445fdc1653 100644 --- a/share/qtcreator/welcomescreen/components/custom/private/ChoiceListPopup.qml +++ b/share/qtcreator/welcomescreen/components/custom/private/ChoiceListPopup.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 MouseArea { diff --git a/src/libs/cplusplus/findcdbbreakpoint.cpp b/src/libs/cplusplus/findcdbbreakpoint.cpp index e9db57fc707..d1e6162fb1b 100644 --- a/src/libs/cplusplus/findcdbbreakpoint.cpp +++ b/src/libs/cplusplus/findcdbbreakpoint.cpp @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #include "findcdbbreakpoint.h" #include diff --git a/src/libs/cplusplus/findcdbbreakpoint.h b/src/libs/cplusplus/findcdbbreakpoint.h index 6f1cfedc46a..a19a96d44eb 100644 --- a/src/libs/cplusplus/findcdbbreakpoint.h +++ b/src/libs/cplusplus/findcdbbreakpoint.h @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #ifndef CPLUSPLUS_FINDBREAKPOINT_H #define CPLUSPLUS_FINDBREAKPOINT_H diff --git a/src/plugins/coreplugin/multifeedrssmodel.cpp b/src/plugins/coreplugin/multifeedrssmodel.cpp index 66fe94822c7..64b3ad2eeb5 100644 --- a/src/plugins/coreplugin/multifeedrssmodel.cpp +++ b/src/plugins/coreplugin/multifeedrssmodel.cpp @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #include "multifeedrssmodel.h" #include diff --git a/src/plugins/coreplugin/multifeedrssmodel.h b/src/plugins/coreplugin/multifeedrssmodel.h index 1d0d0363a85..a6a125565bf 100644 --- a/src/plugins/coreplugin/multifeedrssmodel.h +++ b/src/plugins/coreplugin/multifeedrssmodel.h @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #ifndef MULTIFEEDRSSMODEL_H #define MULTIFEEDRSSMODEL_H diff --git a/src/plugins/coreplugin/networkaccessmanager.cpp b/src/plugins/coreplugin/networkaccessmanager.cpp index 8297e94e139..88dec43e005 100644 --- a/src/plugins/coreplugin/networkaccessmanager.cpp +++ b/src/plugins/coreplugin/networkaccessmanager.cpp @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #include "networkaccessmanager.h" #include diff --git a/src/plugins/coreplugin/networkaccessmanager.h b/src/plugins/coreplugin/networkaccessmanager.h index cd4a8aa60e4..a45ad3fa32b 100644 --- a/src/plugins/coreplugin/networkaccessmanager.h +++ b/src/plugins/coreplugin/networkaccessmanager.h @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #include "core_global.h" #include diff --git a/src/plugins/qmldesigner/components/stateseditor/HorizontalScrollBar.qml b/src/plugins/qmldesigner/components/stateseditor/HorizontalScrollBar.qml index 699fdeef6ab..738d521e060 100644 --- a/src/plugins/qmldesigner/components/stateseditor/HorizontalScrollBar.qml +++ b/src/plugins/qmldesigner/components/stateseditor/HorizontalScrollBar.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 Item { diff --git a/src/plugins/qmldesigner/components/stateseditor/stateslist.qml b/src/plugins/qmldesigner/components/stateseditor/stateslist.qml index 19b6bfb0681..924258029e6 100644 --- a/src/plugins/qmldesigner/components/stateseditor/stateslist.qml +++ b/src/plugins/qmldesigner/components/stateseditor/stateslist.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 Rectangle { diff --git a/src/plugins/qmldesigner/designercore/model/modelnodecontextmenu.cpp b/src/plugins/qmldesigner/designercore/model/modelnodecontextmenu.cpp index 780c090730d..88cb7278a57 100644 --- a/src/plugins/qmldesigner/designercore/model/modelnodecontextmenu.cpp +++ b/src/plugins/qmldesigner/designercore/model/modelnodecontextmenu.cpp @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #include "modelnodecontextmenu.h" #include #include diff --git a/src/plugins/qmldesigner/designercore/model/modelnodecontextmenu.h b/src/plugins/qmldesigner/designercore/model/modelnodecontextmenu.h index bbec61c2107..df37142954f 100644 --- a/src/plugins/qmldesigner/designercore/model/modelnodecontextmenu.h +++ b/src/plugins/qmldesigner/designercore/model/modelnodecontextmenu.h @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #ifndef MODELNODECONTEXTMENU_H #define MODELNODECONTEXTMENU_H diff --git a/src/plugins/qmldesigner/qtquickplugin/source/gridview.qml b/src/plugins/qmldesigner/qtquickplugin/source/gridview.qml index d24a484d12f..3fd0503bb7e 100644 --- a/src/plugins/qmldesigner/qtquickplugin/source/gridview.qml +++ b/src/plugins/qmldesigner/qtquickplugin/source/gridview.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 GridView { diff --git a/src/plugins/qmldesigner/qtquickplugin/source/listview.qml b/src/plugins/qmldesigner/qtquickplugin/source/listview.qml index 6ba85f375ca..5c5277e1f4e 100644 --- a/src/plugins/qmldesigner/qtquickplugin/source/listview.qml +++ b/src/plugins/qmldesigner/qtquickplugin/source/listview.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 ListView { diff --git a/src/plugins/qmldesigner/qtquickplugin/source/pathview.qml b/src/plugins/qmldesigner/qtquickplugin/source/pathview.qml index fa1bb9e11b0..2eea6619e56 100644 --- a/src/plugins/qmldesigner/qtquickplugin/source/pathview.qml +++ b/src/plugins/qmldesigner/qtquickplugin/source/pathview.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 PathView { diff --git a/src/plugins/qmldesigner/qtquickplugin/source/text.qml b/src/plugins/qmldesigner/qtquickplugin/source/text.qml index 088dfdd1240..10a9aabc82c 100644 --- a/src/plugins/qmldesigner/qtquickplugin/source/text.qml +++ b/src/plugins/qmldesigner/qtquickplugin/source/text.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 Text { diff --git a/src/plugins/qmldesigner/qtquickplugin/source/textedit.qml b/src/plugins/qmldesigner/qtquickplugin/source/textedit.qml index ac1bc18b443..87254f21c49 100644 --- a/src/plugins/qmldesigner/qtquickplugin/source/textedit.qml +++ b/src/plugins/qmldesigner/qtquickplugin/source/textedit.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 Text { diff --git a/src/plugins/qmldesigner/qtquickplugin/source/textinput.qml b/src/plugins/qmldesigner/qtquickplugin/source/textinput.qml index d78a430d030..423e599993d 100644 --- a/src/plugins/qmldesigner/qtquickplugin/source/textinput.qml +++ b/src/plugins/qmldesigner/qtquickplugin/source/textinput.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 Text { diff --git a/src/plugins/qmlprofiler/canvas/qdeclarativecanvas.cpp b/src/plugins/qmlprofiler/canvas/qdeclarativecanvas.cpp index e66ef7c3dde..06c27d12b46 100644 --- a/src/plugins/qmlprofiler/canvas/qdeclarativecanvas.cpp +++ b/src/plugins/qmlprofiler/canvas/qdeclarativecanvas.cpp @@ -1,43 +1,34 @@ -/**************************************************************************** +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** This file is part of the QtDeclarative module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. ** ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** ** If you have questions regarding the use of this file, please contact ** Nokia at info@qt.nokia.com. ** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +**************************************************************************/ #include "qdeclarativecanvas_p.h" #include "qdeclarativecanvastimer_p.h" diff --git a/src/plugins/qmlprofiler/canvas/qdeclarativecanvas_p.h b/src/plugins/qmlprofiler/canvas/qdeclarativecanvas_p.h index d7601d35e36..b43eefecef8 100644 --- a/src/plugins/qmlprofiler/canvas/qdeclarativecanvas_p.h +++ b/src/plugins/qmlprofiler/canvas/qdeclarativecanvas_p.h @@ -1,43 +1,34 @@ -/**************************************************************************** +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** This file is part of the QtDeclarative module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. ** ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** ** If you have questions regarding the use of this file, please contact ** Nokia at info@qt.nokia.com. ** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +**************************************************************************/ #ifndef QDECLARATIVECANVAS_P_H #define QDECLARATIVECANVAS_P_H diff --git a/src/plugins/qmlprofiler/canvas/qdeclarativecanvastimer.cpp b/src/plugins/qmlprofiler/canvas/qdeclarativecanvastimer.cpp index c5efd4f1b4c..44a3d3b56be 100644 --- a/src/plugins/qmlprofiler/canvas/qdeclarativecanvastimer.cpp +++ b/src/plugins/qmlprofiler/canvas/qdeclarativecanvastimer.cpp @@ -1,43 +1,34 @@ -/**************************************************************************** +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** This file is part of the QtDeclarative module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. ** ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** ** If you have questions regarding the use of this file, please contact ** Nokia at info@qt.nokia.com. ** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +**************************************************************************/ #include #include diff --git a/src/plugins/qmlprofiler/canvas/qdeclarativecanvastimer_p.h b/src/plugins/qmlprofiler/canvas/qdeclarativecanvastimer_p.h index f77a5685cbe..17ad439adf0 100644 --- a/src/plugins/qmlprofiler/canvas/qdeclarativecanvastimer_p.h +++ b/src/plugins/qmlprofiler/canvas/qdeclarativecanvastimer_p.h @@ -1,43 +1,34 @@ -/**************************************************************************** +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** This file is part of the QtDeclarative module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. ** ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** ** If you have questions regarding the use of this file, please contact ** Nokia at info@qt.nokia.com. ** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +**************************************************************************/ #ifndef QDECLARATIVECANVASTIMER_P_H #define QDECLARATIVECANVASTIMER_P_H diff --git a/src/plugins/qmlprofiler/canvas/qdeclarativecontext2d.cpp b/src/plugins/qmlprofiler/canvas/qdeclarativecontext2d.cpp index ed9d73d3ff4..ddaa3d4d951 100644 --- a/src/plugins/qmlprofiler/canvas/qdeclarativecontext2d.cpp +++ b/src/plugins/qmlprofiler/canvas/qdeclarativecontext2d.cpp @@ -1,43 +1,34 @@ -/**************************************************************************** +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** This file is part of the QtDeclarative module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. ** ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** ** If you have questions regarding the use of this file, please contact ** Nokia at info@qt.nokia.com. ** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +**************************************************************************/ #include "qdeclarativecontext2d_p.h" diff --git a/src/plugins/qmlprofiler/canvas/qdeclarativecontext2d_p.h b/src/plugins/qmlprofiler/canvas/qdeclarativecontext2d_p.h index 73575fdb613..5d6048d4498 100644 --- a/src/plugins/qmlprofiler/canvas/qdeclarativecontext2d_p.h +++ b/src/plugins/qmlprofiler/canvas/qdeclarativecontext2d_p.h @@ -1,43 +1,34 @@ -/**************************************************************************** +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** This file is part of the QtDeclarative module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. ** ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** ** If you have questions regarding the use of this file, please contact ** Nokia at info@qt.nokia.com. ** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +**************************************************************************/ #ifndef QDECLARATIVECONTEXT2D_P_H #define QDECLARATIVECONTEXT2D_P_H diff --git a/src/plugins/qmlprofiler/canvas/qdeclarativetiledcanvas_p.h b/src/plugins/qmlprofiler/canvas/qdeclarativetiledcanvas_p.h index ce8346007b5..6a0a21ee19a 100644 --- a/src/plugins/qmlprofiler/canvas/qdeclarativetiledcanvas_p.h +++ b/src/plugins/qmlprofiler/canvas/qdeclarativetiledcanvas_p.h @@ -1,43 +1,34 @@ -/**************************************************************************** +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). ** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** This file is part of the QtDeclarative module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. ** ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** ** If you have questions regarding the use of this file, please contact ** Nokia at info@qt.nokia.com. ** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +**************************************************************************/ #ifndef QDECLARATIVETILEDCANVAS_P_H #define QDECLARATIVETILEDCANVAS_P_H @@ -52,7 +43,37 @@ QT_MODULE(Declarative) class Context2D; class TiledCanvas : public QDeclarativeItem { - Q_OBJECT + Q_OBJECT/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ Q_PROPERTY(QSizeF canvasSize READ canvasSize WRITE setCanvasSize NOTIFY canvasSizeChanged) Q_PROPERTY(QSize tileSize READ tileSize WRITE setTileSize NOTIFY tileSizeChanged) diff --git a/src/plugins/qmlprofiler/codaqmlprofilerrunner.cpp b/src/plugins/qmlprofiler/codaqmlprofilerrunner.cpp index 9a37edd92c5..a2414b8f3b7 100644 --- a/src/plugins/qmlprofiler/codaqmlprofilerrunner.cpp +++ b/src/plugins/qmlprofiler/codaqmlprofilerrunner.cpp @@ -6,26 +6,25 @@ ** ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** No Commercial Usage -** -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. ** ** GNU Lesser General Public License Usage ** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** ** If you have questions regarding the use of this file, please contact ** Nokia at info@qt.nokia.com. ** diff --git a/src/plugins/qmlprofiler/codaqmlprofilerrunner.h b/src/plugins/qmlprofiler/codaqmlprofilerrunner.h index 82dbe97d399..e9e931713fb 100644 --- a/src/plugins/qmlprofiler/codaqmlprofilerrunner.h +++ b/src/plugins/qmlprofiler/codaqmlprofilerrunner.h @@ -6,26 +6,25 @@ ** ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** No Commercial Usage -** -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. ** ** GNU Lesser General Public License Usage ** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** ** If you have questions regarding the use of this file, please contact ** Nokia at info@qt.nokia.com. ** diff --git a/src/plugins/qmlprofiler/localqmlprofilerrunner.cpp b/src/plugins/qmlprofiler/localqmlprofilerrunner.cpp index 38eb80e78d0..98762b82e8a 100644 --- a/src/plugins/qmlprofiler/localqmlprofilerrunner.cpp +++ b/src/plugins/qmlprofiler/localqmlprofilerrunner.cpp @@ -6,26 +6,25 @@ ** ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** No Commercial Usage -** -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. ** ** GNU Lesser General Public License Usage ** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** ** If you have questions regarding the use of this file, please contact ** Nokia at info@qt.nokia.com. ** diff --git a/src/plugins/qmlprofiler/localqmlprofilerrunner.h b/src/plugins/qmlprofiler/localqmlprofilerrunner.h index c50ed762020..2a8b7031b24 100644 --- a/src/plugins/qmlprofiler/localqmlprofilerrunner.h +++ b/src/plugins/qmlprofiler/localqmlprofilerrunner.h @@ -6,26 +6,25 @@ ** ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** No Commercial Usage -** -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. ** ** GNU Lesser General Public License Usage ** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** ** If you have questions regarding the use of this file, please contact ** Nokia at info@qt.nokia.com. ** diff --git a/src/plugins/qmlprofiler/qml/Detail.qml b/src/plugins/qmlprofiler/qml/Detail.qml index 815130c6af8..c0ec386b846 100644 --- a/src/plugins/qmlprofiler/qml/Detail.qml +++ b/src/plugins/qmlprofiler/qml/Detail.qml @@ -6,26 +6,25 @@ ** ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** No Commercial Usage -** -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. ** ** GNU Lesser General Public License Usage ** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** ** If you have questions regarding the use of this file, please contact ** Nokia at info@qt.nokia.com. ** diff --git a/src/plugins/qmlprofiler/qml/Label.qml b/src/plugins/qmlprofiler/qml/Label.qml index f1fa86b5675..abe28391bbe 100644 --- a/src/plugins/qmlprofiler/qml/Label.qml +++ b/src/plugins/qmlprofiler/qml/Label.qml @@ -6,26 +6,25 @@ ** ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** No Commercial Usage -** -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. ** ** GNU Lesser General Public License Usage ** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** ** If you have questions regarding the use of this file, please contact ** Nokia at info@qt.nokia.com. ** diff --git a/src/plugins/qmlprofiler/qml/MainView.qml b/src/plugins/qmlprofiler/qml/MainView.qml index 522d6104592..b66c73396b8 100644 --- a/src/plugins/qmlprofiler/qml/MainView.qml +++ b/src/plugins/qmlprofiler/qml/MainView.qml @@ -6,26 +6,25 @@ ** ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** No Commercial Usage -** -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. ** ** GNU Lesser General Public License Usage ** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** ** If you have questions regarding the use of this file, please contact ** Nokia at info@qt.nokia.com. ** diff --git a/src/plugins/qmlprofiler/qml/RangeDetails.qml b/src/plugins/qmlprofiler/qml/RangeDetails.qml index 3b817e28c9f..7b4207f0afe 100644 --- a/src/plugins/qmlprofiler/qml/RangeDetails.qml +++ b/src/plugins/qmlprofiler/qml/RangeDetails.qml @@ -6,26 +6,25 @@ ** ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** No Commercial Usage -** -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. ** ** GNU Lesser General Public License Usage ** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** ** If you have questions regarding the use of this file, please contact ** Nokia at info@qt.nokia.com. ** diff --git a/src/plugins/qmlprofiler/qml/RangeMover.qml b/src/plugins/qmlprofiler/qml/RangeMover.qml index 193921c6887..14443783b87 100644 --- a/src/plugins/qmlprofiler/qml/RangeMover.qml +++ b/src/plugins/qmlprofiler/qml/RangeMover.qml @@ -6,26 +6,25 @@ ** ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** No Commercial Usage -** -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. ** ** GNU Lesser General Public License Usage ** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** ** If you have questions regarding the use of this file, please contact ** Nokia at info@qt.nokia.com. ** diff --git a/src/plugins/qmlprofiler/qml/TimeDisplay.qml b/src/plugins/qmlprofiler/qml/TimeDisplay.qml index 44efa2879db..24dd47d8cf0 100644 --- a/src/plugins/qmlprofiler/qml/TimeDisplay.qml +++ b/src/plugins/qmlprofiler/qml/TimeDisplay.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 import Monitor 1.0 import "MainView.js" as Plotter diff --git a/src/plugins/qmlprofiler/qmlprofiler_global.h b/src/plugins/qmlprofiler/qmlprofiler_global.h index ac97df4bf4f..a241f0615f3 100644 --- a/src/plugins/qmlprofiler/qmlprofiler_global.h +++ b/src/plugins/qmlprofiler/qmlprofiler_global.h @@ -6,26 +6,25 @@ ** ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** No Commercial Usage -** -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. ** ** GNU Lesser General Public License Usage ** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** ** If you have questions regarding the use of this file, please contact ** Nokia at info@qt.nokia.com. ** diff --git a/src/plugins/qmlprofiler/qmlprofilerconstants.h b/src/plugins/qmlprofiler/qmlprofilerconstants.h index ea7d06df2d2..0a21fd7ad58 100644 --- a/src/plugins/qmlprofiler/qmlprofilerconstants.h +++ b/src/plugins/qmlprofiler/qmlprofilerconstants.h @@ -6,26 +6,25 @@ ** ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** No Commercial Usage -** -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. ** ** GNU Lesser General Public License Usage ** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** ** If you have questions regarding the use of this file, please contact ** Nokia at info@qt.nokia.com. ** diff --git a/src/plugins/qmlprofiler/qmlprofilerengine.cpp b/src/plugins/qmlprofiler/qmlprofilerengine.cpp index d62582232b5..27f34056ff5 100644 --- a/src/plugins/qmlprofiler/qmlprofilerengine.cpp +++ b/src/plugins/qmlprofiler/qmlprofilerengine.cpp @@ -6,26 +6,25 @@ ** ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** No Commercial Usage -** -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. ** ** GNU Lesser General Public License Usage ** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** ** If you have questions regarding the use of this file, please contact ** Nokia at info@qt.nokia.com. ** diff --git a/src/plugins/qmlprofiler/qmlprofilerengine.h b/src/plugins/qmlprofiler/qmlprofilerengine.h index 7e9ef48b6f4..02dceaf8e2e 100644 --- a/src/plugins/qmlprofiler/qmlprofilerengine.h +++ b/src/plugins/qmlprofiler/qmlprofilerengine.h @@ -6,26 +6,25 @@ ** ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** No Commercial Usage -** -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. ** ** GNU Lesser General Public License Usage ** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** ** If you have questions regarding the use of this file, please contact ** Nokia at info@qt.nokia.com. ** diff --git a/src/plugins/qmlprofiler/qmlprofilereventtypes.h b/src/plugins/qmlprofiler/qmlprofilereventtypes.h index 1e324a69d8b..1739f90aefd 100644 --- a/src/plugins/qmlprofiler/qmlprofilereventtypes.h +++ b/src/plugins/qmlprofiler/qmlprofilereventtypes.h @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #ifndef QMLPROFILEREVENTTYPES_H #define QMLPROFILEREVENTTYPES_H diff --git a/src/plugins/qmlprofiler/qmlprofilereventview.cpp b/src/plugins/qmlprofiler/qmlprofilereventview.cpp index e9eee27ef00..dc75dd5cb85 100644 --- a/src/plugins/qmlprofiler/qmlprofilereventview.cpp +++ b/src/plugins/qmlprofiler/qmlprofilereventview.cpp @@ -6,26 +6,25 @@ ** ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** No Commercial Usage -** -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. ** ** GNU Lesser General Public License Usage ** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** ** If you have questions regarding the use of this file, please contact ** Nokia at info@qt.nokia.com. ** diff --git a/src/plugins/qmlprofiler/qmlprofilereventview.h b/src/plugins/qmlprofiler/qmlprofilereventview.h index 9baba8e42b6..eac510a9e24 100644 --- a/src/plugins/qmlprofiler/qmlprofilereventview.h +++ b/src/plugins/qmlprofiler/qmlprofilereventview.h @@ -6,26 +6,25 @@ ** ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** No Commercial Usage -** -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. ** ** GNU Lesser General Public License Usage ** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** ** If you have questions regarding the use of this file, please contact ** Nokia at info@qt.nokia.com. ** diff --git a/src/plugins/qmlprofiler/qmlprofilerplugin.cpp b/src/plugins/qmlprofiler/qmlprofilerplugin.cpp index 9f45ae22ec5..995a13cb5d0 100644 --- a/src/plugins/qmlprofiler/qmlprofilerplugin.cpp +++ b/src/plugins/qmlprofiler/qmlprofilerplugin.cpp @@ -6,26 +6,25 @@ ** ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** No Commercial Usage -** -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. ** ** GNU Lesser General Public License Usage ** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** ** If you have questions regarding the use of this file, please contact ** Nokia at info@qt.nokia.com. ** diff --git a/src/plugins/qmlprofiler/qmlprofilerplugin.h b/src/plugins/qmlprofiler/qmlprofilerplugin.h index 3a46fa37ed5..e6ce2b1d9c6 100644 --- a/src/plugins/qmlprofiler/qmlprofilerplugin.h +++ b/src/plugins/qmlprofiler/qmlprofilerplugin.h @@ -6,26 +6,25 @@ ** ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** No Commercial Usage -** -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. ** ** GNU Lesser General Public License Usage ** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** ** If you have questions regarding the use of this file, please contact ** Nokia at info@qt.nokia.com. ** diff --git a/src/plugins/qmlprofiler/qmlprofilerruncontrolfactory.cpp b/src/plugins/qmlprofiler/qmlprofilerruncontrolfactory.cpp index 90f4496b927..1b0edfeef42 100644 --- a/src/plugins/qmlprofiler/qmlprofilerruncontrolfactory.cpp +++ b/src/plugins/qmlprofiler/qmlprofilerruncontrolfactory.cpp @@ -6,26 +6,25 @@ ** ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** No Commercial Usage -** -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. ** ** GNU Lesser General Public License Usage ** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** ** If you have questions regarding the use of this file, please contact ** Nokia at info@qt.nokia.com. ** diff --git a/src/plugins/qmlprofiler/qmlprofilerruncontrolfactory.h b/src/plugins/qmlprofiler/qmlprofilerruncontrolfactory.h index c37d2e31a01..d360fb3ae9c 100644 --- a/src/plugins/qmlprofiler/qmlprofilerruncontrolfactory.h +++ b/src/plugins/qmlprofiler/qmlprofilerruncontrolfactory.h @@ -6,26 +6,25 @@ ** ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** No Commercial Usage -** -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. ** ** GNU Lesser General Public License Usage ** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** ** If you have questions regarding the use of this file, please contact ** Nokia at info@qt.nokia.com. ** diff --git a/src/plugins/qmlprofiler/qmlprofilertool.cpp b/src/plugins/qmlprofiler/qmlprofilertool.cpp index 2623b11358f..ee70f049ce9 100644 --- a/src/plugins/qmlprofiler/qmlprofilertool.cpp +++ b/src/plugins/qmlprofiler/qmlprofilertool.cpp @@ -6,26 +6,25 @@ ** ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** No Commercial Usage -** -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. ** ** GNU Lesser General Public License Usage ** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** ** If you have questions regarding the use of this file, please contact ** Nokia at info@qt.nokia.com. ** diff --git a/src/plugins/qmlprofiler/qmlprofilertool.h b/src/plugins/qmlprofiler/qmlprofilertool.h index f3d9b3063ea..1b0bca3381b 100644 --- a/src/plugins/qmlprofiler/qmlprofilertool.h +++ b/src/plugins/qmlprofiler/qmlprofilertool.h @@ -6,26 +6,25 @@ ** ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** No Commercial Usage -** -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. ** ** GNU Lesser General Public License Usage ** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** ** If you have questions regarding the use of this file, please contact ** Nokia at info@qt.nokia.com. ** diff --git a/src/plugins/qmlprofiler/qmlprofilertraceclient.cpp b/src/plugins/qmlprofiler/qmlprofilertraceclient.cpp index 383c6f8610d..9e663d7c21b 100644 --- a/src/plugins/qmlprofiler/qmlprofilertraceclient.cpp +++ b/src/plugins/qmlprofiler/qmlprofilertraceclient.cpp @@ -6,26 +6,25 @@ ** ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** No Commercial Usage -** -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. ** ** GNU Lesser General Public License Usage ** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** ** If you have questions regarding the use of this file, please contact ** Nokia at info@qt.nokia.com. ** diff --git a/src/plugins/qmlprofiler/qmlprofilertraceclient.h b/src/plugins/qmlprofiler/qmlprofilertraceclient.h index 65f95b10685..39a3a929693 100644 --- a/src/plugins/qmlprofiler/qmlprofilertraceclient.h +++ b/src/plugins/qmlprofiler/qmlprofilertraceclient.h @@ -6,26 +6,25 @@ ** ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** No Commercial Usage -** -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. ** ** GNU Lesser General Public License Usage ** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** ** If you have questions regarding the use of this file, please contact ** Nokia at info@qt.nokia.com. ** diff --git a/src/plugins/qmlprofiler/remotelinuxqmlprofilerrunner.cpp b/src/plugins/qmlprofiler/remotelinuxqmlprofilerrunner.cpp index 05588e507e1..efccff105c7 100644 --- a/src/plugins/qmlprofiler/remotelinuxqmlprofilerrunner.cpp +++ b/src/plugins/qmlprofiler/remotelinuxqmlprofilerrunner.cpp @@ -6,26 +6,25 @@ ** ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** No Commercial Usage -** -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. ** ** GNU Lesser General Public License Usage ** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** ** If you have questions regarding the use of this file, please contact ** Nokia at info@qt.nokia.com. ** diff --git a/src/plugins/qmlprofiler/remotelinuxqmlprofilerrunner.h b/src/plugins/qmlprofiler/remotelinuxqmlprofilerrunner.h index a6b24f7e6e6..cf7a444a6fe 100644 --- a/src/plugins/qmlprofiler/remotelinuxqmlprofilerrunner.h +++ b/src/plugins/qmlprofiler/remotelinuxqmlprofilerrunner.h @@ -6,26 +6,25 @@ ** ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** No Commercial Usage -** -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. ** ** GNU Lesser General Public License Usage ** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** ** If you have questions regarding the use of this file, please contact ** Nokia at info@qt.nokia.com. ** diff --git a/src/plugins/qmlprofiler/timelineview.cpp b/src/plugins/qmlprofiler/timelineview.cpp index 4af994fb22d..79afcf2cc2c 100644 --- a/src/plugins/qmlprofiler/timelineview.cpp +++ b/src/plugins/qmlprofiler/timelineview.cpp @@ -6,26 +6,25 @@ ** ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** No Commercial Usage -** -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. ** ** GNU Lesser General Public License Usage ** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** ** If you have questions regarding the use of this file, please contact ** Nokia at info@qt.nokia.com. ** diff --git a/src/plugins/qmlprofiler/timelineview.h b/src/plugins/qmlprofiler/timelineview.h index 327ec5112cc..ca0bffc7925 100644 --- a/src/plugins/qmlprofiler/timelineview.h +++ b/src/plugins/qmlprofiler/timelineview.h @@ -6,26 +6,25 @@ ** ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** No Commercial Usage -** -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. ** ** GNU Lesser General Public License Usage ** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** ** If you have questions regarding the use of this file, please contact ** Nokia at info@qt.nokia.com. ** diff --git a/src/plugins/qmlprofiler/tracewindow.cpp b/src/plugins/qmlprofiler/tracewindow.cpp index 9f7e02c3e2b..f5dee6e244a 100644 --- a/src/plugins/qmlprofiler/tracewindow.cpp +++ b/src/plugins/qmlprofiler/tracewindow.cpp @@ -6,26 +6,25 @@ ** ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** No Commercial Usage -** -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. ** ** GNU Lesser General Public License Usage ** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** ** If you have questions regarding the use of this file, please contact ** Nokia at info@qt.nokia.com. ** diff --git a/src/plugins/qmlprofiler/tracewindow.h b/src/plugins/qmlprofiler/tracewindow.h index dbbcfedb0ae..ffd414d9ca7 100644 --- a/src/plugins/qmlprofiler/tracewindow.h +++ b/src/plugins/qmlprofiler/tracewindow.h @@ -6,26 +6,25 @@ ** ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** No Commercial Usage -** -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. ** ** GNU Lesser General Public License Usage ** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** ** If you have questions regarding the use of this file, please contact ** Nokia at info@qt.nokia.com. ** diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicedebugruncontrol.cpp b/src/plugins/qt4projectmanager/qt-s60/s60devicedebugruncontrol.cpp index b15d8df78a8..35eb8df7b43 100644 --- a/src/plugins/qt4projectmanager/qt-s60/s60devicedebugruncontrol.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/s60devicedebugruncontrol.cpp @@ -6,26 +6,25 @@ ** ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** No Commercial Usage -** -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. ** ** GNU Lesser General Public License Usage ** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** ** If you have questions regarding the use of this file, please contact ** Nokia at info@qt.nokia.com. ** diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicedebugruncontrol.h b/src/plugins/qt4projectmanager/qt-s60/s60devicedebugruncontrol.h index 90835dbad5c..d608635f35d 100644 --- a/src/plugins/qt4projectmanager/qt-s60/s60devicedebugruncontrol.h +++ b/src/plugins/qt4projectmanager/qt-s60/s60devicedebugruncontrol.h @@ -6,26 +6,25 @@ ** ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** No Commercial Usage -** -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. ** ** GNU Lesser General Public License Usage ** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** ** If you have questions regarding the use of this file, please contact ** Nokia at info@qt.nokia.com. ** diff --git a/src/tools/examplesscanner/helpextractor.cpp b/src/tools/examplesscanner/helpextractor.cpp index 7fad8551976..741d3b9cb8c 100644 --- a/src/tools/examplesscanner/helpextractor.cpp +++ b/src/tools/examplesscanner/helpextractor.cpp @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #include "helpextractor.h" #include diff --git a/src/tools/examplesscanner/helpextractor.h b/src/tools/examplesscanner/helpextractor.h index 4210a6635db..c81578a8143 100644 --- a/src/tools/examplesscanner/helpextractor.h +++ b/src/tools/examplesscanner/helpextractor.h @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #ifndef HELPEXTRACTOR_H #define HELPEXTRACTOR_H diff --git a/src/tools/examplesscanner/main.cpp b/src/tools/examplesscanner/main.cpp index 5c47a9788b0..b958eadafec 100644 --- a/src/tools/examplesscanner/main.cpp +++ b/src/tools/examplesscanner/main.cpp @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #include #include "helpextractor.h" diff --git a/src/tools/qtpromaker/main.cpp b/src/tools/qtpromaker/main.cpp index 4c6e28cf58d..beed3bd4cad 100644 --- a/src/tools/qtpromaker/main.cpp +++ b/src/tools/qtpromaker/main.cpp @@ -1,3 +1,34 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ #include #include diff --git a/tests/auto/externaltool/tst_externaltooltest.cpp b/tests/auto/externaltool/tst_externaltooltest.cpp index 6bee760aa31..a73e63fd1d4 100644 --- a/tests/auto/externaltool/tst_externaltooltest.cpp +++ b/tests/auto/externaltool/tst_externaltooltest.cpp @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #include #include diff --git a/tests/auto/qml/qmldesigner/data/fx/MyButton.qml b/tests/auto/qml/qmldesigner/data/fx/MyButton.qml index 3ab43139cb2..f083acad631 100644 --- a/tests/auto/qml/qmldesigner/data/fx/MyButton.qml +++ b/tests/auto/qml/qmldesigner/data/fx/MyButton.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 Rectangle { diff --git a/tests/auto/qml/qmldesigner/data/fx/TabWidget.qml b/tests/auto/qml/qmldesigner/data/fx/TabWidget.qml index 26d25b47b58..c754d692c89 100644 --- a/tests/auto/qml/qmldesigner/data/fx/TabWidget.qml +++ b/tests/auto/qml/qmldesigner/data/fx/TabWidget.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 Item { diff --git a/tests/auto/qml/qmldesigner/data/fx/attributes.qml b/tests/auto/qml/qmldesigner/data/fx/attributes.qml index e2d4ed37c41..1ced49f30f7 100644 --- a/tests/auto/qml/qmldesigner/data/fx/attributes.qml +++ b/tests/auto/qml/qmldesigner/data/fx/attributes.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 Item { diff --git a/tests/auto/qml/qmldesigner/data/fx/bigtest.qml b/tests/auto/qml/qmldesigner/data/fx/bigtest.qml index d1f886ac80b..dd08059daa2 100644 --- a/tests/auto/qml/qmldesigner/data/fx/bigtest.qml +++ b/tests/auto/qml/qmldesigner/data/fx/bigtest.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 Item { diff --git a/tests/auto/qml/qmldesigner/data/fx/components.qml b/tests/auto/qml/qmldesigner/data/fx/components.qml index add7b94aaab..b2db3956913 100644 --- a/tests/auto/qml/qmldesigner/data/fx/components.qml +++ b/tests/auto/qml/qmldesigner/data/fx/components.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 Rectangle { diff --git a/tests/auto/qml/qmldesigner/data/fx/empty.qml b/tests/auto/qml/qmldesigner/data/fx/empty.qml index dd9e9ea1930..97ce134d96a 100644 --- a/tests/auto/qml/qmldesigner/data/fx/empty.qml +++ b/tests/auto/qml/qmldesigner/data/fx/empty.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 Item { diff --git a/tests/auto/qml/qmldesigner/data/fx/helloworld.qml b/tests/auto/qml/qmldesigner/data/fx/helloworld.qml index bc17ab1b27d..9e906f58d8a 100644 --- a/tests/auto/qml/qmldesigner/data/fx/helloworld.qml +++ b/tests/auto/qml/qmldesigner/data/fx/helloworld.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 Rectangle { diff --git a/tests/auto/qml/qmldesigner/data/fx/image.qml b/tests/auto/qml/qmldesigner/data/fx/image.qml index b91e557a75e..45891aed3cd 100644 --- a/tests/auto/qml/qmldesigner/data/fx/image.qml +++ b/tests/auto/qml/qmldesigner/data/fx/image.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 Rectangle { diff --git a/tests/auto/qml/qmldesigner/data/fx/imports.qml b/tests/auto/qml/qmldesigner/data/fx/imports.qml index 5331e595ba7..bdef719dbfd 100644 --- a/tests/auto/qml/qmldesigner/data/fx/imports.qml +++ b/tests/auto/qml/qmldesigner/data/fx/imports.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import "subitems" import QtWebKit 1.0 as Web diff --git a/tests/auto/qml/qmldesigner/data/fx/properties.qml b/tests/auto/qml/qmldesigner/data/fx/properties.qml index 12b79f63f80..a937a617123 100644 --- a/tests/auto/qml/qmldesigner/data/fx/properties.qml +++ b/tests/auto/qml/qmldesigner/data/fx/properties.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 Item { diff --git a/tests/auto/qml/qmldesigner/data/fx/selectiontest.qml b/tests/auto/qml/qmldesigner/data/fx/selectiontest.qml index 6e5b2fbd298..9d8941d3cc0 100644 --- a/tests/auto/qml/qmldesigner/data/fx/selectiontest.qml +++ b/tests/auto/qml/qmldesigner/data/fx/selectiontest.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 Item { diff --git a/tests/auto/qml/qmldesigner/data/fx/states.qml b/tests/auto/qml/qmldesigner/data/fx/states.qml index 2e50ca9b7be..932f8c58918 100644 --- a/tests/auto/qml/qmldesigner/data/fx/states.qml +++ b/tests/auto/qml/qmldesigner/data/fx/states.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 Rectangle { diff --git a/tests/auto/qml/qmldesigner/data/fx/subitems/SubItem.qml b/tests/auto/qml/qmldesigner/data/fx/subitems/SubItem.qml index d518e0f84e1..297a4e1223d 100644 --- a/tests/auto/qml/qmldesigner/data/fx/subitems/SubItem.qml +++ b/tests/auto/qml/qmldesigner/data/fx/subitems/SubItem.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 Rectangle { diff --git a/tests/auto/qml/qmldesigner/data/fx/tabs.qml b/tests/auto/qml/qmldesigner/data/fx/tabs.qml index fba203cc249..c795acbc0b9 100644 --- a/tests/auto/qml/qmldesigner/data/fx/tabs.qml +++ b/tests/auto/qml/qmldesigner/data/fx/tabs.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 TabWidget { diff --git a/tests/auto/qml/qmldesigner/data/fx/topitem.qml b/tests/auto/qml/qmldesigner/data/fx/topitem.qml index 244a7ac6f3e..829763bdb7a 100644 --- a/tests/auto/qml/qmldesigner/data/fx/topitem.qml +++ b/tests/auto/qml/qmldesigner/data/fx/topitem.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import Qt 4.7 as Qt46 import "subitems" diff --git a/tests/auto/qml/qmldesigner/data/fx/usingbutton.qml b/tests/auto/qml/qmldesigner/data/fx/usingbutton.qml index 553a28cbfab..e479e24f822 100644 --- a/tests/auto/qml/qmldesigner/data/fx/usingbutton.qml +++ b/tests/auto/qml/qmldesigner/data/fx/usingbutton.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import "components" as X diff --git a/tests/auto/qml/qmldesigner/data/fx/usingmybutton.qml b/tests/auto/qml/qmldesigner/data/fx/usingmybutton.qml index e263cdde127..6c1685575ad 100644 --- a/tests/auto/qml/qmldesigner/data/fx/usingmybutton.qml +++ b/tests/auto/qml/qmldesigner/data/fx/usingmybutton.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 Item { diff --git a/tests/auto/qml/qmldesigner/data/qwidget/test.qml b/tests/auto/qml/qmldesigner/data/qwidget/test.qml index 6f0fb825540..88149ff3777 100644 --- a/tests/auto/qml/qmldesigner/data/qwidget/test.qml +++ b/tests/auto/qml/qmldesigner/data/qwidget/test.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + diff --git a/tests/manual/appwizards/qmlimportscenario_01/myqmlapp.qml b/tests/manual/appwizards/qmlimportscenario_01/myqmlapp.qml index a01ab8c41f1..bc96ad03817 100644 --- a/tests/manual/appwizards/qmlimportscenario_01/myqmlapp.qml +++ b/tests/manual/appwizards/qmlimportscenario_01/myqmlapp.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 Rectangle { diff --git a/tests/manual/appwizards/qmlimportscenario_01/qmlproject01/QmlProject01.qml b/tests/manual/appwizards/qmlimportscenario_01/qmlproject01/QmlProject01.qml index 58056ec9582..005056518a1 100644 --- a/tests/manual/appwizards/qmlimportscenario_01/qmlproject01/QmlProject01.qml +++ b/tests/manual/appwizards/qmlimportscenario_01/qmlproject01/QmlProject01.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 Rectangle { diff --git a/tests/manual/appwizards/qmlimportscenario_01/qmlproject02/QmlProject02.qml b/tests/manual/appwizards/qmlimportscenario_01/qmlproject02/QmlProject02.qml index 7a348db668f..e79d4c0b55c 100644 --- a/tests/manual/appwizards/qmlimportscenario_01/qmlproject02/QmlProject02.qml +++ b/tests/manual/appwizards/qmlimportscenario_01/qmlproject02/QmlProject02.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 Rectangle { diff --git a/tests/manual/appwizards/qmlimportscenario_02/subfolder1/myqmlapp.qml b/tests/manual/appwizards/qmlimportscenario_02/subfolder1/myqmlapp.qml index a01ab8c41f1..bc96ad03817 100644 --- a/tests/manual/appwizards/qmlimportscenario_02/subfolder1/myqmlapp.qml +++ b/tests/manual/appwizards/qmlimportscenario_02/subfolder1/myqmlapp.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 Rectangle { diff --git a/tests/manual/appwizards/qmlimportscenario_02/subfolder2/no/trolltech/QmlModule01/QmlComponent01.qml b/tests/manual/appwizards/qmlimportscenario_02/subfolder2/no/trolltech/QmlModule01/QmlComponent01.qml index 7fc3078c5aa..140e7aa8f2b 100644 --- a/tests/manual/appwizards/qmlimportscenario_02/subfolder2/no/trolltech/QmlModule01/QmlComponent01.qml +++ b/tests/manual/appwizards/qmlimportscenario_02/subfolder2/no/trolltech/QmlModule01/QmlComponent01.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 Rectangle { diff --git a/tests/manual/appwizards/qmlimportscenario_02/subfolder3/com/nokia/QmlModule02/QmlComponent02.qml b/tests/manual/appwizards/qmlimportscenario_02/subfolder3/com/nokia/QmlModule02/QmlComponent02.qml index ebbfb454874..0cefc4c5b9e 100644 --- a/tests/manual/appwizards/qmlimportscenario_02/subfolder3/com/nokia/QmlModule02/QmlComponent02.qml +++ b/tests/manual/appwizards/qmlimportscenario_02/subfolder3/com/nokia/QmlModule02/QmlComponent02.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 Rectangle { diff --git a/tests/manual/gdbdebugger/simple/deep/deep/simple_gdbtest_app.h b/tests/manual/gdbdebugger/simple/deep/deep/simple_gdbtest_app.h index 975d64f2a6c..f3b02d65973 100644 --- a/tests/manual/gdbdebugger/simple/deep/deep/simple_gdbtest_app.h +++ b/tests/manual/gdbdebugger/simple/deep/deep/simple_gdbtest_app.h @@ -6,26 +6,25 @@ ** ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** No Commercial Usage -** -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. ** ** GNU Lesser General Public License Usage ** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** ** If you have questions regarding the use of this file, please contact ** Nokia at info@qt.nokia.com. ** diff --git a/tests/manual/qml/testfiles/components/MyButton.qml b/tests/manual/qml/testfiles/components/MyButton.qml index 46daf874e75..64cb9b97009 100644 --- a/tests/manual/qml/testfiles/components/MyButton.qml +++ b/tests/manual/qml/testfiles/components/MyButton.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 Rectangle { diff --git a/tests/manual/qml/testfiles/empty.qml b/tests/manual/qml/testfiles/empty.qml index a99ada09cdb..5d1706cafd4 100644 --- a/tests/manual/qml/testfiles/empty.qml +++ b/tests/manual/qml/testfiles/empty.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 Rectangle { diff --git a/tests/manual/qml/testfiles/flipable.qml b/tests/manual/qml/testfiles/flipable.qml index 993a679fc9f..f85aebac83a 100644 --- a/tests/manual/qml/testfiles/flipable.qml +++ b/tests/manual/qml/testfiles/flipable.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 Flipable { diff --git a/tests/manual/qml/testfiles/helloworld.qml b/tests/manual/qml/testfiles/helloworld.qml index bc17ab1b27d..9e906f58d8a 100644 --- a/tests/manual/qml/testfiles/helloworld.qml +++ b/tests/manual/qml/testfiles/helloworld.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 Rectangle { diff --git a/tests/manual/qml/testfiles/helloworld_inverted.qml b/tests/manual/qml/testfiles/helloworld_inverted.qml index 30f9300f1e9..76dd0537ae4 100644 --- a/tests/manual/qml/testfiles/helloworld_inverted.qml +++ b/tests/manual/qml/testfiles/helloworld_inverted.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 Rectangle { diff --git a/tests/manual/qml/testfiles/images.qml b/tests/manual/qml/testfiles/images.qml index 56a50059152..4ad6b7e587e 100644 --- a/tests/manual/qml/testfiles/images.qml +++ b/tests/manual/qml/testfiles/images.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 Rectangle { diff --git a/tests/manual/qml/testfiles/listmodel.qml b/tests/manual/qml/testfiles/listmodel.qml index ea7ef6829ab..b85f678692d 100644 --- a/tests/manual/qml/testfiles/listmodel.qml +++ b/tests/manual/qml/testfiles/listmodel.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 ListModel { diff --git a/tests/manual/qml/testfiles/listview.qml b/tests/manual/qml/testfiles/listview.qml index 9cceba83556..6e302c57ed8 100644 --- a/tests/manual/qml/testfiles/listview.qml +++ b/tests/manual/qml/testfiles/listview.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtQuick 1.0 Item { diff --git a/tests/manual/qml/testfiles/states.qml b/tests/manual/qml/testfiles/states.qml index 2e50ca9b7be..932f8c58918 100644 --- a/tests/manual/qml/testfiles/states.qml +++ b/tests/manual/qml/testfiles/states.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 Rectangle { diff --git a/tests/manual/qml/testfiles/subcomponent.qml b/tests/manual/qml/testfiles/subcomponent.qml index 656c54ef762..584d20beff9 100644 --- a/tests/manual/qml/testfiles/subcomponent.qml +++ b/tests/manual/qml/testfiles/subcomponent.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 Rectangle { diff --git a/tests/manual/qml/testfiles/usingbutton.qml b/tests/manual/qml/testfiles/usingbutton.qml index 553a28cbfab..e479e24f822 100644 --- a/tests/manual/qml/testfiles/usingbutton.qml +++ b/tests/manual/qml/testfiles/usingbutton.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import Qt 4.7 import "components" as X diff --git a/tests/manual/qml/testfiles/webview.qml b/tests/manual/qml/testfiles/webview.qml index 46fd1b34db9..e3c42a7c3c7 100644 --- a/tests/manual/qml/testfiles/webview.qml +++ b/tests/manual/qml/testfiles/webview.qml @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + import QtWebKit 1.0 // Test loading of import libraries diff --git a/tests/tools/cplusplus-dump/tests/templ01.cpp b/tests/tools/cplusplus-dump/tests/templ01.cpp index dcabffae59e..53453b51229 100644 --- a/tests/tools/cplusplus-dump/tests/templ01.cpp +++ b/tests/tools/cplusplus-dump/tests/templ01.cpp @@ -1,3 +1,34 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ struct QString { diff --git a/tests/valgrind/callgrind/callgrindparsertests.cpp b/tests/valgrind/callgrind/callgrindparsertests.cpp index b1e6a8db9f8..7021e57634d 100644 --- a/tests/valgrind/callgrind/callgrindparsertests.cpp +++ b/tests/valgrind/callgrind/callgrindparsertests.cpp @@ -1,31 +1,30 @@ /************************************************************************** ** -** This file is part of Qt Creator Instrumentation Tools +** This file is part of Qt Creator ** ** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). ** ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** No Commercial Usage -** -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. ** ** GNU Lesser General Public License Usage ** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** ** If you have questions regarding the use of this file, please contact ** Nokia at info@qt.nokia.com. ** diff --git a/tests/valgrind/callgrind/callgrindparsertests.h b/tests/valgrind/callgrind/callgrindparsertests.h index a63a05f4431..56048b537a1 100644 --- a/tests/valgrind/callgrind/callgrindparsertests.h +++ b/tests/valgrind/callgrind/callgrindparsertests.h @@ -1,31 +1,30 @@ /************************************************************************** ** -** This file is part of Qt Creator Instrumentation Tools +** This file is part of Qt Creator ** ** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). ** ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** No Commercial Usage -** -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. ** ** GNU Lesser General Public License Usage ** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** ** If you have questions regarding the use of this file, please contact ** Nokia at info@qt.nokia.com. ** diff --git a/tests/valgrind/callgrind/modeltest.cpp b/tests/valgrind/callgrind/modeltest.cpp index d6ec5f1d1f5..77cf91df7e4 100644 --- a/tests/valgrind/callgrind/modeltest.cpp +++ b/tests/valgrind/callgrind/modeltest.cpp @@ -6,26 +6,25 @@ ** ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** No Commercial Usage -** -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. ** ** GNU Lesser General Public License Usage ** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception +** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** ** If you have questions regarding the use of this file, please contact ** Nokia at info@qt.nokia.com. ** diff --git a/tests/valgrind/memcheck/parsertests.cpp b/tests/valgrind/memcheck/parsertests.cpp index 9c53c6252ca..8fb296cd278 100644 --- a/tests/valgrind/memcheck/parsertests.cpp +++ b/tests/valgrind/memcheck/parsertests.cpp @@ -1,19 +1,13 @@ /************************************************************************** ** -** This file is part of Qt Creator Analyzer Tools +** This file is part of Qt Creator ** -** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). ** ** Author: Frank Osterfeld, KDAB (frank.osterfeld@kdab.com) ** ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** Commercial Usage -** -** Licensees holding valid Qt Commercial licenses may use this file in -** accordance with the Qt Commercial License Agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Nokia. ** ** GNU Lesser General Public License Usage ** @@ -24,8 +18,17 @@ ** Public License version 2.1 requirements will be met: ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://qt.nokia.com/contact. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/valgrind/memcheck/parsertests.h b/tests/valgrind/memcheck/parsertests.h index a5b08fdb266..b157d0338a3 100644 --- a/tests/valgrind/memcheck/parsertests.h +++ b/tests/valgrind/memcheck/parsertests.h @@ -1,19 +1,13 @@ /************************************************************************** ** -** This file is part of Qt Creator Analyzer Tools +** This file is part of Qt Creator ** -** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). ** ** Author: Frank Osterfeld, KDAB (frank.osterfeld@kdab.com) ** ** Contact: Nokia Corporation (info@qt.nokia.com) ** -** Commercial Usage -** -** Licensees holding valid Qt Commercial licenses may use this file in -** accordance with the Qt Commercial License Agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Nokia. ** ** GNU Lesser General Public License Usage ** @@ -24,8 +18,17 @@ ** Public License version 2.1 requirements will be met: ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://qt.nokia.com/contact. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. ** **************************************************************************/ diff --git a/tests/valgrind/memcheck/testapps/free1/main.cpp b/tests/valgrind/memcheck/testapps/free1/main.cpp index 7b847565586..c5b7787a903 100644 --- a/tests/valgrind/memcheck/testapps/free1/main.cpp +++ b/tests/valgrind/memcheck/testapps/free1/main.cpp @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #include int main() diff --git a/tests/valgrind/memcheck/testapps/free2/main.cpp b/tests/valgrind/memcheck/testapps/free2/main.cpp index cb4e295c61c..f624174ed90 100644 --- a/tests/valgrind/memcheck/testapps/free2/main.cpp +++ b/tests/valgrind/memcheck/testapps/free2/main.cpp @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #include int main() diff --git a/tests/valgrind/memcheck/testapps/invalidjump/main.cpp b/tests/valgrind/memcheck/testapps/invalidjump/main.cpp index 7c608d40234..08ca68d6e36 100644 --- a/tests/valgrind/memcheck/testapps/invalidjump/main.cpp +++ b/tests/valgrind/memcheck/testapps/invalidjump/main.cpp @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + void foo() { } int main() diff --git a/tests/valgrind/memcheck/testapps/leak1/main.cpp b/tests/valgrind/memcheck/testapps/leak1/main.cpp index db71561a6bb..4441f4c655b 100644 --- a/tests/valgrind/memcheck/testapps/leak1/main.cpp +++ b/tests/valgrind/memcheck/testapps/leak1/main.cpp @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #include int main() diff --git a/tests/valgrind/memcheck/testapps/leak2/main.cpp b/tests/valgrind/memcheck/testapps/leak2/main.cpp index 6a6ec0745bc..cb7ecc206b1 100644 --- a/tests/valgrind/memcheck/testapps/leak2/main.cpp +++ b/tests/valgrind/memcheck/testapps/leak2/main.cpp @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #include char *lower; diff --git a/tests/valgrind/memcheck/testapps/leak3/main.cpp b/tests/valgrind/memcheck/testapps/leak3/main.cpp index 13735b67087..aeab3e8368f 100644 --- a/tests/valgrind/memcheck/testapps/leak3/main.cpp +++ b/tests/valgrind/memcheck/testapps/leak3/main.cpp @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #include char *lower; diff --git a/tests/valgrind/memcheck/testapps/leak4/main.cpp b/tests/valgrind/memcheck/testapps/leak4/main.cpp index 79999a5c9ad..9dadc2cf639 100644 --- a/tests/valgrind/memcheck/testapps/leak4/main.cpp +++ b/tests/valgrind/memcheck/testapps/leak4/main.cpp @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #include struct Foo diff --git a/tests/valgrind/memcheck/testapps/overlap/main.cpp b/tests/valgrind/memcheck/testapps/overlap/main.cpp index 0066239a106..46c64d8d5b0 100644 --- a/tests/valgrind/memcheck/testapps/overlap/main.cpp +++ b/tests/valgrind/memcheck/testapps/overlap/main.cpp @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #include int main() diff --git a/tests/valgrind/memcheck/testapps/syscall/main.cpp b/tests/valgrind/memcheck/testapps/syscall/main.cpp index 2411cb909ab..70978c2e991 100644 --- a/tests/valgrind/memcheck/testapps/syscall/main.cpp +++ b/tests/valgrind/memcheck/testapps/syscall/main.cpp @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #pragma GCC diagnostic ignored "-Wuninitialized" int main() diff --git a/tests/valgrind/memcheck/testapps/uninit1/main.cpp b/tests/valgrind/memcheck/testapps/uninit1/main.cpp index 301da075fe6..c35672b482b 100644 --- a/tests/valgrind/memcheck/testapps/uninit1/main.cpp +++ b/tests/valgrind/memcheck/testapps/uninit1/main.cpp @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #pragma GCC diagnostic ignored "-Wuninitialized" int main() diff --git a/tests/valgrind/memcheck/testapps/uninit2/main.cpp b/tests/valgrind/memcheck/testapps/uninit2/main.cpp index 0deb9566482..7610d7549c3 100644 --- a/tests/valgrind/memcheck/testapps/uninit2/main.cpp +++ b/tests/valgrind/memcheck/testapps/uninit2/main.cpp @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #pragma GCC diagnostic ignored "-Wuninitialized" int main() diff --git a/tests/valgrind/memcheck/testapps/uninit3/main.cpp b/tests/valgrind/memcheck/testapps/uninit3/main.cpp index 5320e6d5f36..31c5d70b369 100644 --- a/tests/valgrind/memcheck/testapps/uninit3/main.cpp +++ b/tests/valgrind/memcheck/testapps/uninit3/main.cpp @@ -1,3 +1,35 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (info@qt.nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at info@qt.nokia.com. +** +**************************************************************************/ + #pragma GCC diagnostic ignored "-Wuninitialized" int main() From 765ba3b4b99c289b268907b9fefffad545fdb120 Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Wed, 6 Jul 2011 15:48:21 +0200 Subject: [PATCH 131/143] QmlDesigner: Prevent item hoping for reparenting Because of the asynchronous nature of the formeditor the item can be between to states. This looks like the item is hoping around. To prevent this a token is sent to the instances and back. For the time frame the painting is disabled. Change-Id: If7e937cba8171248464ad350bb14438c020b25f9 Reviewed-on: http://codereview.qt.nokia.com/1189 Reviewed-by: Qt Sanity Bot Reviewed-by: Alessandro Portale --- .../qml/qmlpuppet/commands/commands.pri | 2 + .../qml/qmlpuppet/commands/tokencommand.cpp | 114 ++++++++++++++++++ .../qml/qmlpuppet/commands/tokencommand.h | 100 +++++++++++++++ .../instances/nodeinstanceclientproxy.cpp | 13 ++ .../instances/nodeinstanceclientproxy.h | 2 + .../instances/nodeinstanceserver.cpp | 6 + .../qmlpuppet/instances/nodeinstanceserver.h | 2 +- .../interfaces/nodeinstanceclientinterface.h | 2 + .../nodeinstanceserverinterface.cpp | 4 + .../interfaces/nodeinstanceserverinterface.h | 2 + .../qt5informationnodeinstanceserver.cpp | 17 +++ .../qt5informationnodeinstanceserver.h | 5 + .../qt4informationnodeinstanceserver.cpp | 26 +++- .../qt4informationnodeinstanceserver.h | 4 + .../components/formeditor/formeditorview.cpp | 4 + .../components/formeditor/formeditorview.h | 1 + .../components/formeditor/movemanipulator.cpp | 58 ++++++--- .../components/formeditor/movemanipulator.h | 3 +- .../components/integration/componentview.cpp | 2 + .../components/integration/componentview.h | 2 + .../designdocumentcontrollerview.cpp | 5 + .../designdocumentcontrollerview.h | 2 + .../itemlibrary/itemlibraryview.cpp | 5 + .../components/itemlibrary/itemlibraryview.h | 2 + .../designercore/include/abstractview.h | 5 + .../include/nodeabstractproperty.h | 12 ++ .../designercore/include/nodeinstanceview.h | 6 + .../designercore/include/qmlmodelview.h | 1 + .../designercore/include/rewriterview.h | 2 + .../instances/nodeinstanceserverproxy.cpp | 9 ++ .../instances/nodeinstanceserverproxy.h | 1 + .../instances/nodeinstanceview.cpp | 32 +++++ .../designercore/model/abstractview.cpp | 12 ++ .../qmldesigner/designercore/model/model.cpp | 30 +++++ .../qmldesigner/designercore/model/model_p.h | 3 +- .../model/nodeabstractproperty.cpp | 32 +++++ .../designercore/model/qmlmodelview.cpp | 5 + .../designercore/model/rewriterview.cpp | 5 + .../designercore/model/viewlogger.cpp | 7 ++ .../designercore/model/viewlogger.h | 2 + 40 files changed, 524 insertions(+), 23 deletions(-) create mode 100644 share/qtcreator/qml/qmlpuppet/commands/tokencommand.cpp create mode 100644 share/qtcreator/qml/qmlpuppet/commands/tokencommand.h diff --git a/share/qtcreator/qml/qmlpuppet/commands/commands.pri b/share/qtcreator/qml/qmlpuppet/commands/commands.pri index c6c9282d1b8..5ae623cf3f2 100644 --- a/share/qtcreator/qml/qmlpuppet/commands/commands.pri +++ b/share/qtcreator/qml/qmlpuppet/commands/commands.pri @@ -1,6 +1,7 @@ INCLUDEPATH += $$PWD/ HEADERS += $$PWD/synchronizecommand.h +HEADERS += $$PWD/tokencommand.h HEADERS += $$PWD/componentcompletedcommand.h HEADERS += $$PWD/completecomponentcommand.h HEADERS += $$PWD/statepreviewimagechangedcommand.h @@ -24,6 +25,7 @@ HEADERS += $$PWD/changeauxiliarycommand.h SOURCES += $$PWD/synchronizecommand.cpp +SOURCES += $$PWD/tokencommand.cpp SOURCES += $$PWD/componentcompletedcommand.cpp SOURCES += $$PWD/completecomponentcommand.cpp SOURCES += $$PWD/statepreviewimagechangedcommand.cpp diff --git a/share/qtcreator/qml/qmlpuppet/commands/tokencommand.cpp b/share/qtcreator/qml/qmlpuppet/commands/tokencommand.cpp new file mode 100644 index 00000000000..bb8279a9711 --- /dev/null +++ b/share/qtcreator/qml/qmlpuppet/commands/tokencommand.cpp @@ -0,0 +1,114 @@ +/************************************************************************** + +** + +** This file is part of Qt Creator + +** + +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). + +** + +** Contact: Nokia Corporation (qt-info@nokia.com) + +** + +** No Commercial Usage + +** + +** This file contains pre-release code and may not be distributed. + +** You may use this file in accordance with the terms and conditions + +** contained in the Technology Preview License Agreement accompanying + +** this package. + +** + +** GNU Lesser General Public License Usage + +** + +** Alternatively, this file may be used under the terms of the GNU Lesser + +** General Public License version 2.1 as published by the Free Software + +** Foundation and appearing in the file LICENSE.LGPL included in the + +** packaging of this file. Please review the following information to + +** ensure the GNU Lesser General Public License version 2.1 requirements + +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. + +** + +** In addition, as a special exception, Nokia gives you certain additional + +** rights. These rights are described in the Nokia Qt LGPL Exception + +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. + +** + +** If you have questions regarding the use of this file, please contact + +** Nokia at qt-info@nokia.com. + +** + +**************************************************************************/ + +#include "tokencommand.h" + +namespace QmlDesigner { + +TokenCommand::TokenCommand() + : m_tokenNumber(-1) +{ +} + +TokenCommand::TokenCommand(const QString &tokenName, qint32 tokenNumber, const QVector &instanceIdVector) + : m_tokenName(tokenName), + m_tokenNumber(tokenNumber), + m_instanceIdVector(instanceIdVector) +{ +} + +QString TokenCommand::tokenName() const +{ + return m_tokenName; +} + +qint32 TokenCommand::tokenNumber() const +{ + return m_tokenNumber; +} + +QVector TokenCommand::instances() const +{ + return m_instanceIdVector; +} + +QDataStream &operator<<(QDataStream &out, const TokenCommand &command) +{ + out << command.tokenName(); + out << command.tokenNumber(); + out << command.instances(); + return out; +} + +QDataStream &operator>>(QDataStream &in, TokenCommand &command) +{ + in >> command.m_tokenName; + in >> command.m_tokenNumber; + in >> command.m_instanceIdVector; + + return in; +} + + +} // namespace QmlDesigner diff --git a/share/qtcreator/qml/qmlpuppet/commands/tokencommand.h b/share/qtcreator/qml/qmlpuppet/commands/tokencommand.h new file mode 100644 index 00000000000..ef4325a8d71 --- /dev/null +++ b/share/qtcreator/qml/qmlpuppet/commands/tokencommand.h @@ -0,0 +1,100 @@ +/************************************************************************** + +** + +** This file is part of Qt Creator + +** + +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). + +** + +** Contact: Nokia Corporation (qt-info@nokia.com) + +** + +** No Commercial Usage + +** + +** This file contains pre-release code and may not be distributed. + +** You may use this file in accordance with the terms and conditions + +** contained in the Technology Preview License Agreement accompanying + +** this package. + +** + +** GNU Lesser General Public License Usage + +** + +** Alternatively, this file may be used under the terms of the GNU Lesser + +** General Public License version 2.1 as published by the Free Software + +** Foundation and appearing in the file LICENSE.LGPL included in the + +** packaging of this file. Please review the following information to + +** ensure the GNU Lesser General Public License version 2.1 requirements + +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. + +** + +** In addition, as a special exception, Nokia gives you certain additional + +** rights. These rights are described in the Nokia Qt LGPL Exception + +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. + +** + +** If you have questions regarding the use of this file, please contact + +** Nokia at qt-info@nokia.com. + +** + +**************************************************************************/ + +#ifndef QMLDESIGNER_TOKENCOMMAND_H +#define QMLDESIGNER_TOKENCOMMAND_H + + +#include +#include + +namespace QmlDesigner { + +class TokenCommand +{ + friend QDataStream &operator>>(QDataStream &in, TokenCommand &command); + +public: + TokenCommand(); + TokenCommand(const QString &tokenName, qint32 tokenNumber, const QVector &instances); + + QString tokenName() const; + qint32 tokenNumber() const; + QVector instances() const; + +private: + QString m_tokenName; + qint32 m_tokenNumber; + QVector m_instanceIdVector; +}; + +QDataStream &operator<<(QDataStream &out, const TokenCommand &command); +QDataStream &operator>>(QDataStream &in, TokenCommand &command); + +} // namespace QmlDesigner + +Q_DECLARE_METATYPE(QmlDesigner::TokenCommand) + + +#endif // QMLDESIGNER_TOKENCOMMAND_H diff --git a/share/qtcreator/qml/qmlpuppet/instances/nodeinstanceclientproxy.cpp b/share/qtcreator/qml/qmlpuppet/instances/nodeinstanceclientproxy.cpp index ad10cdc57ca..bdefc54d91c 100644 --- a/share/qtcreator/qml/qmlpuppet/instances/nodeinstanceclientproxy.cpp +++ b/share/qtcreator/qml/qmlpuppet/instances/nodeinstanceclientproxy.cpp @@ -57,6 +57,7 @@ #include "changestatecommand.h" #include "completecomponentcommand.h" #include "synchronizecommand.h" +#include "tokencommand.h" #include "informationchangedcommand.h" #include "pixmapchangedcommand.h" @@ -133,6 +134,11 @@ void NodeInstanceClientProxy::componentCompleted(const ComponentCompletedCommand writeCommand(QVariant::fromValue(command)); } +void NodeInstanceClientProxy::token(const TokenCommand &command) +{ + writeCommand(QVariant::fromValue(command)); +} + void NodeInstanceClientProxy::flush() { } @@ -267,6 +273,10 @@ void NodeInstanceClientProxy::changeNodeSource(const ChangeNodeSourceCommand &co { nodeInstanceServer()->changeNodeSource(command); } +void NodeInstanceClientProxy::redirectToken(const TokenCommand &command) +{ + nodeInstanceServer()->token(command); +} void NodeInstanceClientProxy::dispatchCommand(const QVariant &command) { @@ -285,6 +295,7 @@ void NodeInstanceClientProxy::dispatchCommand(const QVariant &command) static const int completeComponentCommandType = QMetaType::type("CompleteComponentCommand"); static const int synchronizeCommandType = QMetaType::type("SynchronizeCommand"); static const int changeNodeSourceCommandType = QMetaType::type("ChangeNodeSourceCommand"); + static const int tokenCommandType = QMetaType::type("TokenCommand"); if (command.userType() == createInstancesCommandType) { createInstances(command.value()); @@ -314,6 +325,8 @@ void NodeInstanceClientProxy::dispatchCommand(const QVariant &command) completeComponent(command.value()); else if (command.userType() == changeNodeSourceCommandType) changeNodeSource(command.value()); + else if (command.userType() == tokenCommandType) + redirectToken(command.value()); else if (command.userType() == synchronizeCommandType) { SynchronizeCommand synchronizeCommand = command.value(); m_synchronizeId = synchronizeCommand.synchronizeId(); diff --git a/share/qtcreator/qml/qmlpuppet/instances/nodeinstanceclientproxy.h b/share/qtcreator/qml/qmlpuppet/instances/nodeinstanceclientproxy.h index 0ee07bf354a..ba429123f0a 100644 --- a/share/qtcreator/qml/qmlpuppet/instances/nodeinstanceclientproxy.h +++ b/share/qtcreator/qml/qmlpuppet/instances/nodeinstanceclientproxy.h @@ -75,6 +75,7 @@ public: void childrenChanged(const ChildrenChangedCommand &command); void statePreviewImagesChanged(const StatePreviewImageChangedCommand &command); void componentCompleted(const ComponentCompletedCommand &command); + void token(const TokenCommand &command); void flush(); void synchronizeWithClientProcess(); @@ -101,6 +102,7 @@ protected: void changeState(const ChangeStateCommand &command); void completeComponent(const CompleteComponentCommand &command); void changeNodeSource(const ChangeNodeSourceCommand &command); + void redirectToken(const TokenCommand &command); private slots: void readDataStream(); diff --git a/share/qtcreator/qml/qmlpuppet/instances/nodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/instances/nodeinstanceserver.cpp index 84f7d8fcd28..5acbc7fcf8e 100644 --- a/share/qtcreator/qml/qmlpuppet/instances/nodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/instances/nodeinstanceserver.cpp @@ -74,6 +74,7 @@ #include "componentcompletedcommand.h" #include "createscenecommand.h" #include "changenodesourcecommand.h" +#include "tokencommand.h" #include "dummycontextobject.h" @@ -338,6 +339,11 @@ void NodeInstanceServer::changeNodeSource(const ChangeNodeSourceCommand &command startRenderTimer(); } +void NodeInstanceServer::token(const TokenCommand &/*command*/) +{ + +} + void NodeInstanceServer::setupImports(const QVector &containerVector) { foreach (const AddImportContainer &container, containerVector) { diff --git a/share/qtcreator/qml/qmlpuppet/instances/nodeinstanceserver.h b/share/qtcreator/qml/qmlpuppet/instances/nodeinstanceserver.h index bd45ec48492..ea24316fda1 100644 --- a/share/qtcreator/qml/qmlpuppet/instances/nodeinstanceserver.h +++ b/share/qtcreator/qml/qmlpuppet/instances/nodeinstanceserver.h @@ -92,6 +92,7 @@ public: void changeState(const ChangeStateCommand &command); void completeComponent(const CompleteComponentCommand &command); void changeNodeSource(const ChangeNodeSourceCommand &command); + void token(const TokenCommand &command); ServerNodeInstance instanceForId(qint32 id) const; bool hasInstanceForId(qint32 id) const; @@ -152,7 +153,6 @@ protected: virtual void collectItemChangesAndSendChangeCommands() = 0; - ValuesChangedCommand createValuesChangedCommand(const QList &instanceList) const; ValuesChangedCommand createValuesChangedCommand(const QVector &propertyList) const; PixmapChangedCommand createPixmapChangedCommand(const QList &instanceList) const; diff --git a/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceclientinterface.h b/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceclientinterface.h index 77bf3355efc..46f45e794e6 100644 --- a/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceclientinterface.h +++ b/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceclientinterface.h @@ -43,6 +43,7 @@ class InformationChangedCommand; class ChildrenChangedCommand; class StatePreviewImageChangedCommand; class ComponentCompletedCommand; +class TokenCommand; class NodeInstanceClientInterface { @@ -53,6 +54,7 @@ public: virtual void childrenChanged(const ChildrenChangedCommand &command) = 0; virtual void statePreviewImagesChanged(const StatePreviewImageChangedCommand &command) = 0; virtual void componentCompleted(const ComponentCompletedCommand &command) = 0; + virtual void token(const TokenCommand &command) = 0; virtual void flush() {}; virtual void synchronizeWithClientProcess() {} diff --git a/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceserverinterface.cpp b/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceserverinterface.cpp index ce2bb010427..c047308ab56 100644 --- a/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceserverinterface.cpp +++ b/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceserverinterface.cpp @@ -61,6 +61,7 @@ #include "statepreviewimagechangedcommand.h" #include "componentcompletedcommand.h" #include "synchronizecommand.h" +#include "tokencommand.h" namespace QmlDesigner { @@ -169,6 +170,9 @@ void NodeInstanceServerInterface::registerCommands() qRegisterMetaType("ChangeAuxiliaryCommand"); qRegisterMetaTypeStreamOperators("ChangeAuxiliaryCommand"); + + qRegisterMetaType("TokenCommand"); + qRegisterMetaTypeStreamOperators("TokenCommand"); } } diff --git a/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceserverinterface.h b/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceserverinterface.h index 98d1fe38656..3ba65974600 100644 --- a/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceserverinterface.h +++ b/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceserverinterface.h @@ -55,6 +55,7 @@ class RemovePropertiesCommand; class ChangeStateCommand; class CompleteComponentCommand; class ChangeNodeSourceCommand; +class TokenCommand; class NodeInstanceServerInterface : public QObject { @@ -81,6 +82,7 @@ public: virtual void changeState(const ChangeStateCommand &command) = 0; virtual void completeComponent(const CompleteComponentCommand &command) = 0; virtual void changeNodeSource(const ChangeNodeSourceCommand &command) = 0; + virtual void token(const TokenCommand &command) = 0; static void registerCommands(); }; diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp index 0997e125d01..c0dd079a9fc 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp @@ -60,6 +60,7 @@ #include "completecomponentcommand.h" #include "componentcompletedcommand.h" #include "createscenecommand.h" +#include "tokencommand.h" #include "dummycontextobject.h" @@ -72,6 +73,20 @@ Qt5InformationNodeInstanceServer::Qt5InformationNodeInstanceServer(NodeInstanceC { } +void Qt5InformationNodeInstanceServer::sendTokenBack() +{ + foreach (const TokenCommand &command, m_tokenList) + nodeInstanceClient()->token(command); + + m_tokenList.clear(); +} + +void Qt5InformationNodeInstanceServer::token(const TokenCommand &command) +{ + m_tokenList.append(command); + startRenderTimer(); +} + void Qt5InformationNodeInstanceServer::collectItemChangesAndSendChangeCommands() { static bool inFunction = false; @@ -125,6 +140,8 @@ void Qt5InformationNodeInstanceServer::collectItemChangesAndSendChangeCommands() resetAllItems(); clearChangedPropertyList(); + sendTokenBack(); + if (!informationChangedInstanceSet.isEmpty()) nodeInstanceClient()->informationChanged(createAllInformationChangedCommand(informationChangedInstanceSet.toList())); diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h index e97e2c25d5d..7e969428d6a 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h @@ -34,6 +34,7 @@ #define QMLDESIGNER_QT5INFORMATIONNODEINSTANCESERVER_H #include "qt5nodeinstanceserver.h" +#include "tokencommand.h" namespace QmlDesigner { @@ -47,14 +48,18 @@ public: void clearScene(const ClearSceneCommand &command); void createScene(const CreateSceneCommand &command); void completeComponent(const CompleteComponentCommand &command); + void token(const TokenCommand &command); protected: void collectItemChangesAndSendChangeCommands(); void sendChildrenChangedCommand(const QList childList); + void sendTokenBack(); + private: QSet m_parentChangedSet; QList m_completedComponentList; + QList m_tokenList; }; } // namespace QmlDesigner diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4informationnodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4informationnodeinstanceserver.cpp index 9c23b88fbb8..48ab73adf9b 100644 --- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4informationnodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4informationnodeinstanceserver.cpp @@ -75,6 +75,8 @@ #include "completecomponentcommand.h" #include "componentcompletedcommand.h" #include "createscenecommand.h" +#include "tokencommand.h" + #include "dummycontextobject.h" @@ -85,6 +87,20 @@ Qt4InformationNodeInstanceServer::Qt4InformationNodeInstanceServer(NodeInstanceC { } +void Qt4InformationNodeInstanceServer::sendTokenBack() +{ + foreach (const TokenCommand &command, m_tokenList) + nodeInstanceClient()->token(command); + + m_tokenList.clear(); +} + +void Qt4InformationNodeInstanceServer::token(const TokenCommand &command) +{ + m_tokenList.append(command); + startRenderTimer(); +} + void Qt4InformationNodeInstanceServer::collectItemChangesAndSendChangeCommands() { static bool inFunction = false; @@ -143,10 +159,7 @@ void Qt4InformationNodeInstanceServer::collectItemChangesAndSendChangeCommands() clearChangedPropertyList(); resetAllItems(); - if (!m_parentChangedSet.isEmpty()) { - sendChildrenChangedCommand(m_parentChangedSet.toList()); - m_parentChangedSet.clear(); - } + sendTokenBack(); if (!informationChangedInstanceSet.isEmpty()) nodeInstanceClient()->informationChanged(createAllInformationChangedCommand(informationChangedInstanceSet.toList())); @@ -154,6 +167,11 @@ void Qt4InformationNodeInstanceServer::collectItemChangesAndSendChangeCommands() if (!propertyChangedList.isEmpty()) nodeInstanceClient()->valuesChanged(createValuesChangedCommand(propertyChangedList)); + if (!m_parentChangedSet.isEmpty()) { + sendChildrenChangedCommand(m_parentChangedSet.toList()); + m_parentChangedSet.clear(); + } + if (adjustSceneRect) { QRectF boundingRect = rootNodeInstance().boundingRect(); if (boundingRect.isValid()) { diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4informationnodeinstanceserver.h b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4informationnodeinstanceserver.h index 1390827ff56..04f3064b6d3 100644 --- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4informationnodeinstanceserver.h +++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qt4informationnodeinstanceserver.h @@ -34,6 +34,7 @@ #define INFORMATIONNODEINSTANCESERVER_H #include "qt4nodeinstanceserver.h" +#include "tokencommand.h" namespace QmlDesigner { @@ -47,14 +48,17 @@ public: void clearScene(const ClearSceneCommand &command); void createScene(const CreateSceneCommand &command); void completeComponent(const CompleteComponentCommand &command); + void token(const TokenCommand &command); protected: void collectItemChangesAndSendChangeCommands(); void sendChildrenChangedCommand(const QList childList); + void sendTokenBack(); private: QSet m_parentChangedSet; QList m_completedComponentList; + QList m_tokenList; }; } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp index 3cc58655641..473f6b2ebf1 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp @@ -490,6 +490,10 @@ void FormEditorView::instancesPreviewImageChanged(const QVector &/*no } +void FormEditorView::instancesToken(const QString &tokenName, int tokenNumber, const QVector &nodeVector) +{ +} + void FormEditorView::instancesChildrenChanged(const QVector &nodeList) { QList itemNodeList; diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.h b/src/plugins/qmldesigner/components/formeditor/formeditorview.h index 44ff565aedc..b723c4bcef3 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorview.h +++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.h @@ -109,6 +109,7 @@ public: void instancesPreviewImageChanged(const QVector &nodeList); void instancesChildrenChanged(const QVector &nodeList); void instancePropertyChange(const QList > &propertyList); + void instancesToken(const QString &tokenName, int tokenNumber, const QVector &nodeVector); void rewriterBeginTransaction(); void rewriterEndTransaction(); diff --git a/src/plugins/qmldesigner/components/formeditor/movemanipulator.cpp b/src/plugins/qmldesigner/components/formeditor/movemanipulator.cpp index c673e741308..91926dc5dfd 100644 --- a/src/plugins/qmldesigner/components/formeditor/movemanipulator.cpp +++ b/src/plugins/qmldesigner/components/formeditor/movemanipulator.cpp @@ -88,22 +88,33 @@ void MoveManipulator::setItems(const QList &itemList) } } -void MoveManipulator::synchronizeInstanceParent(const QList &itemList) +void MoveManipulator::synchronizeParent(const QList &itemList, const ModelNode &parentNode) { - if (m_view->model()) { - foreach (FormEditorItem *item, itemList) { - if (m_itemList.contains(item)) { - QmlItemNode parentItemNode = QmlItemNode(item->qmlItemNode().instanceParent()); - if (parentItemNode.isValid()) { + bool snapperUpdated = false; + + foreach (FormEditorItem *item, itemList) { + if (m_itemList.contains(item)) { + QmlItemNode parentItemNode = QmlItemNode(parentNode); + if (parentItemNode.isValid()) { + if (snapperUpdated == false && m_snapper.containerFormEditorItem() != m_view->scene()->itemForQmlItemNode(parentItemNode)) { m_snapper.setContainerFormEditorItem(m_view->scene()->itemForQmlItemNode(parentItemNode)); m_snapper.setTransformtionSpaceFormEditorItem(m_snapper.containerFormEditorItem()); m_snapper.updateSnappingLines(m_itemList); updateHashes(); - break; + snapperUpdated = true; } } } } + + update(m_lastPosition, NoSnapping, UseBaseState); +} + +void MoveManipulator::synchronizeInstanceParent(const QList &itemList) +{ + if (m_view->model() && !m_itemList.isEmpty()) + synchronizeParent(itemList, m_itemList.first()->qmlItemNode().instanceParent()); + } void MoveManipulator::updateHashes() @@ -257,6 +268,7 @@ QHash MoveManipulator::tanslatedBoundingRects(const QHa */ void MoveManipulator::update(const QPointF& updatePoint, Snapping useSnapping, State stateToBeManipulated) { + m_lastPosition = updatePoint; deleteSnapLines(); //Since they position is changed and the item is moved the snapping lines are //are obsolete. The new updated snapping lines (color and visibility) will be //calculated in snapPoint() called in moveNode() later @@ -329,6 +341,7 @@ void MoveManipulator::clear() m_beginPositionHash.clear(); m_beginPositionInSceneSpaceHash.clear(); m_itemList.clear(); + m_lastPosition = QPointF(); m_rewriterTransaction.commit(); @@ -350,17 +363,30 @@ void MoveManipulator::reparentTo(FormEditorItem *newParent) if (!itemsCanReparented()) return; - foreach (FormEditorItem* item, m_itemList) { - if (!item || !item->qmlItemNode().isValid()) - continue; + QVector nodeReparentVector; + NodeAbstractProperty parentProperty; - QmlItemNode parent(newParent->qmlItemNode()); - if (parent.isValid()) { - if (parent.hasDefaultProperty()) - item->qmlItemNode().setParentProperty(parent.nodeAbstractProperty(parent.defaultProperty())); - else - item->qmlItemNode().setParentProperty(parent.nodeAbstractProperty("data")); + QmlItemNode parent(newParent->qmlItemNode()); + if (parent.isValid()) { + if (parent.hasDefaultProperty()) { + parentProperty = parent.nodeAbstractProperty(parent.defaultProperty()); + } else { + parentProperty = parent.nodeAbstractProperty("data"); } + + foreach (FormEditorItem* item, m_itemList) { + if (!item || !item->qmlItemNode().isValid()) + continue; + + if (parentProperty != item->qmlItemNode().modelNode().parentProperty()) + nodeReparentVector.append(item->qmlItemNode().modelNode()); + + } + + foreach (const ModelNode &nodeToReparented, nodeReparentVector) + parentProperty.reparentHere(nodeToReparented); + + synchronizeParent(m_itemList, parentProperty.parentModelNode()); } } diff --git a/src/plugins/qmldesigner/components/formeditor/movemanipulator.h b/src/plugins/qmldesigner/components/formeditor/movemanipulator.h index a755e62613c..671feef0388 100644 --- a/src/plugins/qmldesigner/components/formeditor/movemanipulator.h +++ b/src/plugins/qmldesigner/components/formeditor/movemanipulator.h @@ -70,7 +70,7 @@ public: void setItems(const QList &itemList); void setItem(FormEditorItem* item); void synchronizeInstanceParent(const QList &itemList); - + void synchronizeParent(const QList &itemList, const ModelNode &parentNode); void begin(const QPointF& beginPoint); void update(const QPointF& updatePoint, Snapping useSnapping, State stateToBeManipulated = UseActualState); void reparentTo(FormEditorItem *newParent); @@ -123,6 +123,7 @@ private: QList m_graphicsLineList; bool m_isActive; RewriterTransaction m_rewriterTransaction; + QPointF m_lastPosition; }; } diff --git a/src/plugins/qmldesigner/components/integration/componentview.cpp b/src/plugins/qmldesigner/components/integration/componentview.cpp index a2d818d4dd2..539c57578d4 100644 --- a/src/plugins/qmldesigner/components/integration/componentview.cpp +++ b/src/plugins/qmldesigner/components/integration/componentview.cpp @@ -212,6 +212,8 @@ void ComponentView::instanceInformationsChange(const QMultiHash &/*nodeList*/) {} void ComponentView::instancesPreviewImageChanged(const QVector &/*nodeList*/) {} void ComponentView::instancesChildrenChanged(const QVector &/*nodeList*/) {} +void ComponentView::instancesToken(const QString &/*tokenName*/, int /*tokenNumber*/, const QVector &/*nodeVector*/) {} + void ComponentView::nodeSourceChanged(const ModelNode &, const QString & /*newNodeSource*/) {} void ComponentView::rewriterBeginTransaction() {} diff --git a/src/plugins/qmldesigner/components/integration/componentview.h b/src/plugins/qmldesigner/components/integration/componentview.h index fef34556b51..3541fbc7602 100644 --- a/src/plugins/qmldesigner/components/integration/componentview.h +++ b/src/plugins/qmldesigner/components/integration/componentview.h @@ -81,6 +81,8 @@ public: void instancesRenderImageChanged(const QVector &nodeList); void instancesPreviewImageChanged(const QVector &nodeList); void instancesChildrenChanged(const QVector &nodeList); + void instancesToken(const QString &tokenName, int tokenNumber, const QVector &nodeVector); + void nodeSourceChanged(const ModelNode &modelNode, const QString &newNodeSource); void rewriterBeginTransaction(); diff --git a/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.cpp b/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.cpp index ead2ab44a1d..41c0e819cca 100644 --- a/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.cpp +++ b/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.cpp @@ -92,6 +92,11 @@ void DesignDocumentControllerView::instancesChildrenChanged(const QVector &/*nodeVector*/) +{ + +} + void DesignDocumentControllerView::nodeSourceChanged(const ModelNode &, const QString & /*newNodeSource*/) { diff --git a/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.h b/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.h index a915eeb4cd9..6725ab4ea44 100644 --- a/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.h +++ b/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.h @@ -68,6 +68,8 @@ public: void instancesRenderImageChanged(const QVector &nodeList); void instancesPreviewImageChanged(const QVector &nodeList); void instancesChildrenChanged(const QVector &nodeList); + void instancesToken(const QString &tokenName, int tokenNumber, const QVector &nodeVector); + void nodeSourceChanged(const ModelNode &modelNode, const QString &newNodeSource); void rewriterBeginTransaction(); diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp index 611257b27f0..27133cffde8 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp @@ -172,6 +172,11 @@ void ItemLibraryView::instancesChildrenChanged(const QVector &/*nodeL } +void ItemLibraryView::instancesToken(const QString &/*tokenName*/, int /*tokenNumber*/, const QVector &/*nodeVector*/) +{ + +} + void ItemLibraryView::nodeSourceChanged(const ModelNode &, const QString & /*newNodeSource*/) { diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.h b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.h index 3c61139efe3..576de225462 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.h +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.h @@ -84,6 +84,8 @@ public: void instancesRenderImageChanged(const QVector &nodeList); void instancesPreviewImageChanged(const QVector &nodeList); void instancesChildrenChanged(const QVector &nodeList); + void instancesToken(const QString &tokenName, int tokenNumber, const QVector &nodeVector); + void nodeSourceChanged(const ModelNode &modelNode, const QString &newNodeSource); void rewriterBeginTransaction(); diff --git a/src/plugins/qmldesigner/designercore/include/abstractview.h b/src/plugins/qmldesigner/designercore/include/abstractview.h index 88fc9204c9c..45b2a064d67 100644 --- a/src/plugins/qmldesigner/designercore/include/abstractview.h +++ b/src/plugins/qmldesigner/designercore/include/abstractview.h @@ -121,8 +121,11 @@ public: void emitInstancesChildrenChanged(const QVector &nodeList); void emitRewriterBeginTransaction(); void emitRewriterEndTransaction(); + void emitInstanceToken(const QString &token, int number, const QVector &nodeVector); void emitActualStateChanged(const ModelNode &node); + void sendTokenToInstances(const QString &token, int number, const QVector &nodeVector); + virtual void modelAttached(Model *model); virtual void modelAboutToBeDetached(Model *model); @@ -144,6 +147,8 @@ public: virtual void instancesRenderImageChanged(const QVector &nodeList) = 0; virtual void instancesPreviewImageChanged(const QVector &nodeList) = 0; virtual void instancesChildrenChanged(const QVector &nodeList) = 0; + virtual void instancesToken(const QString &tokenName, int tokenNumber, const QVector &nodeVector) = 0; + virtual void nodeSourceChanged(const ModelNode &modelNode, const QString &newNodeSource) = 0; virtual void rewriterBeginTransaction() = 0; diff --git a/src/plugins/qmldesigner/designercore/include/nodeabstractproperty.h b/src/plugins/qmldesigner/designercore/include/nodeabstractproperty.h index 6260a3461c3..9e69201688d 100644 --- a/src/plugins/qmldesigner/designercore/include/nodeabstractproperty.h +++ b/src/plugins/qmldesigner/designercore/include/nodeabstractproperty.h @@ -47,6 +47,11 @@ class NodeAbstractProperty : public AbstractProperty friend class QmlDesigner::ModelNode; friend class QmlDesigner::Internal::ModelPrivate; friend class QmlDesigner::AbstractProperty; + + friend CORESHARED_EXPORT bool operator ==(const NodeAbstractProperty &property1, const NodeAbstractProperty &property2); + friend CORESHARED_EXPORT bool operator !=(const NodeAbstractProperty &property1, const NodeAbstractProperty &property2); + friend CORESHARED_EXPORT uint qHash(const NodeAbstractProperty& property); + public: NodeAbstractProperty(); NodeAbstractProperty(const NodeAbstractProperty &property, AbstractView *view); @@ -63,6 +68,13 @@ protected: void reparentHere(const ModelNode &modelNode, bool isNodeList); }; + +CORESHARED_EXPORT bool operator ==(const NodeAbstractProperty &property1, const NodeAbstractProperty &property2); +CORESHARED_EXPORT bool operator !=(const NodeAbstractProperty &property1, const NodeAbstractProperty &property2); +CORESHARED_EXPORT uint qHash(const NodeAbstractProperty& property); +CORESHARED_EXPORT QTextStream& operator<<(QTextStream &stream, const NodeAbstractProperty &property); +CORESHARED_EXPORT QDebug operator<<(QDebug debug, const NodeAbstractProperty &property); + } // namespace QmlDesigner #endif // NODEABSTRACTPROPERTY_H diff --git a/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h b/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h index 5d3ef307d42..053da698e22 100644 --- a/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h +++ b/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h @@ -70,6 +70,7 @@ class RemoveInstancesCommand; class RemovePropertiesCommand; class CompleteComponentCommand; class InformationContainer; +class TokenCommand; class CORESHARED_EXPORT NodeInstanceView : public AbstractView, public NodeInstanceClientInterface { @@ -107,10 +108,12 @@ public: void instancesRenderImageChanged(const QVector &nodeList); void instancesPreviewImageChanged(const QVector &nodeList); void instancesChildrenChanged(const QVector &nodeList); + void instancesToken(const QString &tokenName, int tokenNumber, const QVector &nodeVector); void auxiliaryDataChanged(const ModelNode &node, const QString &name, const QVariant &data); void customNotification(const AbstractView *view, const QString &identifier, const QList &nodeList, const QList &data); void nodeSourceChanged(const ModelNode &modelNode, const QString &newNodeSource); + void rewriterBeginTransaction(); void rewriterEndTransaction(); @@ -136,11 +139,14 @@ public: void childrenChanged(const ChildrenChangedCommand &command); void statePreviewImagesChanged(const StatePreviewImageChangedCommand &command); void componentCompleted(const ComponentCompletedCommand &command); + void token(const TokenCommand &command); QImage statePreviewImage(const ModelNode &stateNode) const; void setPathToQt(const QString &pathToQt); + void sendToken(const QString &token, int number, const QVector &nodeVector); + signals: void qmlPuppetCrashed(); diff --git a/src/plugins/qmldesigner/designercore/include/qmlmodelview.h b/src/plugins/qmldesigner/designercore/include/qmlmodelview.h index 4b72f12481b..d77bfbb6cb3 100644 --- a/src/plugins/qmldesigner/designercore/include/qmlmodelview.h +++ b/src/plugins/qmldesigner/designercore/include/qmlmodelview.h @@ -98,6 +98,7 @@ public: void instancesRenderImageChanged(const QVector &nodeList); void instancesPreviewImageChanged(const QVector &nodeList); void instancesChildrenChanged(const QVector &nodeList); + void instancesToken(const QString &tokenName, int tokenNumber, const QVector &nodeVector); void rewriterBeginTransaction(); void rewriterEndTransaction(); diff --git a/src/plugins/qmldesigner/designercore/include/rewriterview.h b/src/plugins/qmldesigner/designercore/include/rewriterview.h index 2f3bf35e5c7..e78b6e733a9 100644 --- a/src/plugins/qmldesigner/designercore/include/rewriterview.h +++ b/src/plugins/qmldesigner/designercore/include/rewriterview.h @@ -143,6 +143,8 @@ public: void instancesRenderImageChanged(const QVector &nodeList); void instancesPreviewImageChanged(const QVector &nodeList); void instancesChildrenChanged(const QVector &nodeList); + void instancesToken(const QString &tokenName, int tokenNumber, const QVector &nodeVector); + void nodeSourceChanged(const ModelNode &modelNode, const QString &newNodeSource); void rewriterBeginTransaction(); diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp index 3af5c4f0ba1..8c8f1bef42a 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp @@ -65,6 +65,7 @@ #include "imagecontainer.h" #include "statepreviewimagechangedcommand.h" #include "componentcompletedcommand.h" +#include "tokencommand.h" #include "synchronizecommand.h" @@ -241,6 +242,7 @@ void NodeInstanceServerProxy::dispatchCommand(const QVariant &command) static const int statePreviewImageChangedCommandType = QMetaType::type("StatePreviewImageChangedCommand"); static const int componentCompletedCommandType = QMetaType::type("ComponentCompletedCommand"); static const int synchronizeCommandType = QMetaType::type("SynchronizeCommand"); + static const int tokenCommandType = QMetaType::type("TokenCommand"); if (command.userType() == informationChangedCommandType) nodeInstanceClient()->informationChanged(command.value()); @@ -254,6 +256,8 @@ void NodeInstanceServerProxy::dispatchCommand(const QVariant &command) nodeInstanceClient()->statePreviewImagesChanged(command.value()); else if (command.userType() == componentCompletedCommandType) nodeInstanceClient()->componentCompleted(command.value()); + else if (command.userType() == tokenCommandType) + nodeInstanceClient()->token(command.value()); else if (command.userType() == synchronizeCommandType) { SynchronizeCommand synchronizeCommand = command.value(); m_synchronizeId = synchronizeCommand.synchronizeId(); @@ -523,4 +527,9 @@ void NodeInstanceServerProxy::changeNodeSource(const ChangeNodeSourceCommand &co writeCommand(QVariant::fromValue(command)); } +void NodeInstanceServerProxy::token(const TokenCommand &command) +{ + writeCommand(QVariant::fromValue(command)); +} + } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.h b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.h index 6197694df0e..42bf3e95ce6 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.h +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.h @@ -71,6 +71,7 @@ public: void changeState(const ChangeStateCommand &command); void completeComponent(const CompleteComponentCommand &command); void changeNodeSource(const ChangeNodeSourceCommand &command); + void token(const TokenCommand &command); protected: void writeCommand(const QVariant &command); diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp index eca58fa321b..b21add18e2b 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp @@ -80,6 +80,7 @@ #include "statepreviewimagechangedcommand.h" #include "completecomponentcommand.h" #include "componentcompletedcommand.h" +#include "tokencommand.h" #include "nodeinstanceserverproxy.h" @@ -483,6 +484,11 @@ void NodeInstanceView::instancesChildrenChanged(const QVector &/*node } +void NodeInstanceView::instancesToken(const QString &/*tokenName*/, int /*tokenNumber*/, const QVector &/*nodeVector*/) +{ + +} + void NodeInstanceView::auxiliaryDataChanged(const ModelNode &node, const QString &name, const QVariant &data) { if (node.isRootNode() && (name == "width" || name == "height")) { @@ -1165,4 +1171,30 @@ void NodeInstanceView::childrenChanged(const ChildrenChangedCommand &command) emitInstancesChildrenChanged(childNodeVector); } +void NodeInstanceView::token(const TokenCommand &command) +{ + if (!model()) + return; + + QVector nodeVector; + + foreach (const qint32 &instanceId, command.instances()) { + if (hasModelNodeForInternalId(instanceId)) { + nodeVector.append(modelNodeForInternalId(instanceId)); + } + } + + + emitInstanceToken(command.tokenName(), command.tokenNumber(), nodeVector); +} + +void NodeInstanceView::sendToken(const QString &token, int number, const QVector &nodeVector) +{ + QVector instanceIdVector; + foreach (const ModelNode &node, nodeVector) + instanceIdVector.append(node.internalId()); + + nodeInstanceServer()->token(TokenCommand(token, number, instanceIdVector)); +} + } diff --git a/src/plugins/qmldesigner/designercore/model/abstractview.cpp b/src/plugins/qmldesigner/designercore/model/abstractview.cpp index 4117986b1ea..b8f589b6694 100644 --- a/src/plugins/qmldesigner/designercore/model/abstractview.cpp +++ b/src/plugins/qmldesigner/designercore/model/abstractview.cpp @@ -429,6 +429,18 @@ void AbstractView::emitRewriterBeginTransaction() model()->m_d->notifyRewriterBeginTransaction(); } +void AbstractView::sendTokenToInstances(const QString &token, int number, const QVector &nodeVector) +{ + if (nodeInstanceView()) + nodeInstanceView()->sendToken(token, number, nodeVector); +} + +void AbstractView::emitInstanceToken(const QString &token, int number, const QVector &nodeVector) +{ + if (nodeInstanceView()) + model()->m_d->notifyInstanceToken(token, number, nodeVector); +} + void AbstractView::emitRewriterEndTransaction() { if (model()) diff --git a/src/plugins/qmldesigner/designercore/model/model.cpp b/src/plugins/qmldesigner/designercore/model/model.cpp index 0e01f9c550f..938026c3f9f 100644 --- a/src/plugins/qmldesigner/designercore/model/model.cpp +++ b/src/plugins/qmldesigner/designercore/model/model.cpp @@ -681,6 +681,36 @@ void ModelPrivate::notifyRewriterEndTransaction() } } +void ModelPrivate::notifyInstanceToken(const QString &token, int number, const QVector &nodeVector) +{ + bool resetModel = false; + QString description; + + QVector internalVector(toInternalNodeVector(nodeVector)); + + + try { + if (rewriterView()) + rewriterView()->instancesToken(token, number, toModelNodeVector(internalVector, rewriterView())); + } catch (RewritingException &e) { + description = e.description(); + resetModel = true; + } + + foreach (const QWeakPointer &view, m_viewList) { + Q_ASSERT(view != 0); + view->instancesToken(token, number, toModelNodeVector(internalVector, view.data())); + } + + if (nodeInstanceView()) { + nodeInstanceView()->instancesToken(token, number, toModelNodeVector(internalVector, nodeInstanceView())); + } + + if (resetModel) { + resetModelByRewriter(description); + } +} + void ModelPrivate::notifyCustomNotification(const AbstractView *senderView, const QString &identifier, const QList &nodeList, const QList &data) { bool resetModel = false; diff --git a/src/plugins/qmldesigner/designercore/model/model_p.h b/src/plugins/qmldesigner/designercore/model/model_p.h index c806b1b82ae..bc6ff14564e 100644 --- a/src/plugins/qmldesigner/designercore/model/model_p.h +++ b/src/plugins/qmldesigner/designercore/model/model_p.h @@ -156,12 +156,13 @@ public: void notifyInstancesRenderImageChanged(const QVector &nodeList); void notifyInstancesPreviewImageChanged(const QVector &nodeList); void notifyInstancesChildrenChanged(const QVector &nodeList); + void notifyInstanceToken(const QString &token, int number, const QVector &nodeVector); + void notifyActualStateChanged(const ModelNode &node); void notifyRewriterBeginTransaction(); void notifyRewriterEndTransaction(); - void setSelectedNodes(const QList &selectedNodeList); void clearSelectedNodes(); QList selectedNodes() const; diff --git a/src/plugins/qmldesigner/designercore/model/nodeabstractproperty.cpp b/src/plugins/qmldesigner/designercore/model/nodeabstractproperty.cpp index 530269f22a3..8ebd1d4a7e0 100644 --- a/src/plugins/qmldesigner/designercore/model/nodeabstractproperty.cpp +++ b/src/plugins/qmldesigner/designercore/model/nodeabstractproperty.cpp @@ -141,4 +141,36 @@ QList NodeAbstractProperty::allSubNodes() return toModelNodeList(property->allSubNodes(), view()); } +/*! + \brief Returns if the the two property handles reference the same property in the same node +*/ +bool operator ==(const NodeAbstractProperty &property1, const NodeAbstractProperty &property2) +{ + return AbstractProperty(property1) == AbstractProperty(property2); +} + +/*! + \brief Returns if the the two property handles do not reference the same property in the same node + */ +bool operator !=(const NodeAbstractProperty &property1, const NodeAbstractProperty &property2) +{ + return !(property1 == property2); +} + +uint qHash(const NodeAbstractProperty &property) +{ + return qHash(AbstractProperty(property)); +} + +QDebug operator<<(QDebug debug, const NodeAbstractProperty &property) +{ + return debug.nospace() << "NodeAbstractProperty(" << (property.isValid() ? property.name() : QLatin1String("invalid")) << ')'; +} + +QTextStream& operator<<(QTextStream &stream, const NodeAbstractProperty &property) +{ + stream << "NodeAbstractProperty(" << property.name() << ')'; + + return stream; +} } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp b/src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp index 028f028677e..ceec3fbd212 100644 --- a/src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmlmodelview.cpp @@ -414,6 +414,11 @@ void QmlModelView::importsChanged(const QList &/*addedImports*/, const Q } +void QmlModelView::instancesToken(const QString &/*tokenName*/, int /*tokenNumber*/, const QVector &/*nodeVector*/) +{ + +} + void QmlModelView::nodeSourceChanged(const ModelNode &, const QString & /*newNodeSource*/) { diff --git a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp index 6b1d820012c..a2ce780006b 100644 --- a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp +++ b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp @@ -407,6 +407,11 @@ void RewriterView::instancesChildrenChanged(const QVector & /*nodeLis } +void RewriterView::instancesToken(const QString &/*tokenName*/, int /*tokenNumber*/, const QVector &/*nodeVector*/) +{ + +} + void RewriterView::nodeSourceChanged(const ModelNode &, const QString & /*newNodeSource*/) { diff --git a/src/plugins/qmldesigner/designercore/model/viewlogger.cpp b/src/plugins/qmldesigner/designercore/model/viewlogger.cpp index b49a2358a95..2bb3e4eadc8 100644 --- a/src/plugins/qmldesigner/designercore/model/viewlogger.cpp +++ b/src/plugins/qmldesigner/designercore/model/viewlogger.cpp @@ -260,6 +260,13 @@ void ViewLogger::instancesChildrenChanged(const QVector &nodeList) m_output << time() << indent("node: ") << node << endl; } +void ViewLogger::instancesToken(const QString &tokenName, int tokenNumber, const QVector &nodeVector) +{ + m_output << time() << indent("instancesToken:") << tokenName << tokenNumber << endl; + foreach (const ModelNode &node, nodeVector) + m_output << time() << indent("node: ") << node << endl; +} + void ViewLogger::nodeSourceChanged(const ModelNode &node, const QString & /*newNodeSource*/) { m_output << time() << indent("nodeSourceChanged:") << endl; diff --git a/src/plugins/qmldesigner/designercore/model/viewlogger.h b/src/plugins/qmldesigner/designercore/model/viewlogger.h index 01fc89ca25e..2ca8ffa5e7e 100644 --- a/src/plugins/qmldesigner/designercore/model/viewlogger.h +++ b/src/plugins/qmldesigner/designercore/model/viewlogger.h @@ -81,6 +81,8 @@ public: void instancesRenderImageChanged(const QVector &nodeList); void instancesPreviewImageChanged(const QVector &nodeList); void instancesChildrenChanged(const QVector &nodeList); + void instancesToken(const QString &tokenName, int tokenNumber, const QVector &nodeVector); + void nodeSourceChanged(const ModelNode &modelNode, const QString &newNodeSource); void rewriterBeginTransaction(); From 92c0768691423e0b49f5fe1fed3a7b6602bfd77e Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Wed, 6 Jul 2011 15:55:26 +0200 Subject: [PATCH 132/143] QmlDesigner: Fix warning Change-Id: Ic43b3eab06b4f730ee5b4099e4438a280e00b418 Reviewed-on: http://codereview.qt.nokia.com/1240 Reviewed-by: Qt Sanity Bot Reviewed-by: Marco Bubke --- .../qmldesigner/components/formeditor/formeditorview.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp index 473f6b2ebf1..a2ed9a85548 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp @@ -490,7 +490,7 @@ void FormEditorView::instancesPreviewImageChanged(const QVector &/*no } -void FormEditorView::instancesToken(const QString &tokenName, int tokenNumber, const QVector &nodeVector) +void FormEditorView::instancesToken(const QString &/*tokenName*/, int /*tokenNumber*/, const QVector &/*nodeVector*/) { } From 6cf89dcf650090e740e838c07bdbd5330d39edef Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Thu, 7 Jul 2011 10:05:35 +0200 Subject: [PATCH 133/143] tr()-fix. Use Plural forms. Change-Id: I58612cedf33defa78d1cb58e69c49c62a755d726 Reviewed-on: http://codereview.qt.nokia.com/1287 Reviewed-by: Qt Sanity Bot Reviewed-by: Friedemann Kleint --- src/plugins/genericprojectmanager/selectablefilesmodel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/genericprojectmanager/selectablefilesmodel.cpp b/src/plugins/genericprojectmanager/selectablefilesmodel.cpp index cfcdb98d8f7..a9b5582f2fa 100644 --- a/src/plugins/genericprojectmanager/selectablefilesmodel.cpp +++ b/src/plugins/genericprojectmanager/selectablefilesmodel.cpp @@ -589,7 +589,7 @@ void SelectableFilesDialog::parsingFinished() m_preservedFiles->hide(); } else { m_preservedFiles->show(); - m_preservedFiles->setText(tr("Not showing %1 files that are outside of the base directory.\nThese files are preserved.").arg(preservedFiles.count())); + m_preservedFiles->setText(tr("Not showing %n files that are outside of the base directory.\nThese files are preserved.", 0, preservedFiles.count())); } } From 500981b9c0c96c9aec65a996cfc4b058d0a56ccc Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 5 Jul 2011 15:36:49 +0200 Subject: [PATCH 134/143] analyzer: change default dockwidget layout for callgrind tool Change-Id: I7bdfa0a023f813c5da5fdec1d2c8a5abff6092b7 Reviewed-on: http://codereview.qt.nokia.com/1179 Reviewed-by: Qt Sanity Bot Reviewed-by: Eike Ziller --- src/plugins/valgrind/callgrindtool.cpp | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/plugins/valgrind/callgrindtool.cpp b/src/plugins/valgrind/callgrindtool.cpp index 7e0ea98b195..eef04d82a91 100644 --- a/src/plugins/valgrind/callgrindtool.cpp +++ b/src/plugins/valgrind/callgrindtool.cpp @@ -118,7 +118,6 @@ public: QWidget *createControlWidget(); void initializeDockWidgets(); - void ensureDockWidgets(); void doClear(bool clearParseData); void updateEventCombo(); @@ -577,14 +576,14 @@ void CallgrindToolPrivate::initializeDockWidgets() Utils::FancyMainWindow *mw = AnalyzerManager::mainWindow(); m_visualisation = new Visualisation(mw); m_visualisation->setFrameStyle(QFrame::NoFrame); - m_visualisation->setObjectName("Valgrind.CallgrindToolPrivate.Visualisation"); + m_visualisation->setObjectName("Valgrind.CallgrindTool.Visualisation"); m_visualisation->setModel(m_dataModel); connect(m_visualisation, SIGNAL(functionActivated(const Valgrind::Callgrind::Function*)), this, SLOT(visualisationFunctionSelected(const Valgrind::Callgrind::Function*))); m_callersView = new CostView(mw); + m_callersView->setObjectName("Valgrind.CallgrindTool.CallersView"); m_callersView->sortByColumn(CallModel::CostColumn); - m_callersView->setObjectName("Valgrind.CallgrindToolPrivate.CallersView"); m_callersView->setFrameStyle(QFrame::NoFrame); // enable sorting QSortFilterProxyModel *callerProxy = new QSortFilterProxyModel(m_callersModel); @@ -595,8 +594,8 @@ void CallgrindToolPrivate::initializeDockWidgets() this, SLOT(callerFunctionSelected(QModelIndex))); m_calleesView = new CostView(mw); + m_calleesView->setObjectName("Valgrind.CallgrindTool.CalleesView"); m_calleesView->sortByColumn(CallModel::CostColumn); - m_calleesView->setObjectName("Valgrind.CallgrindToolPrivate.CalleesView"); m_calleesView->setFrameStyle(QFrame::NoFrame); // enable sorting QSortFilterProxyModel *calleeProxy = new QSortFilterProxyModel(m_calleesModel); @@ -607,11 +606,11 @@ void CallgrindToolPrivate::initializeDockWidgets() this, SLOT(calleeFunctionSelected(QModelIndex))); m_flatView = new CostView(mw); + m_flatView->setObjectName("Valgrind.CallgrindTool.FlatView"); m_flatView->sortByColumn(DataModel::SelfCostColumn); m_flatView->setFrameStyle(QFrame::NoFrame); m_flatView->setAttribute(Qt::WA_MacShowFocusRect, false); m_flatView->setModel(m_proxyModel); - m_flatView->setObjectName("Valgrind.CallgrindToolPrivate.FlatView"); connect(m_flatView, SIGNAL(activated(QModelIndex)), this, SLOT(dataFunctionSelected(QModelIndex))); @@ -628,12 +627,15 @@ void CallgrindToolPrivate::initializeDockWidgets() QDockWidget *visualizationDock = AnalyzerManager::createDockWidget (q, tr("Visualization"), m_visualisation, Qt::RightDockWidgetArea); + + callersDock->show(); + calleesDock->show(); + flatDock->show(); visualizationDock->hide(); - mw->splitDockWidget(mw->toolBarDockWidget(), calleesDock, Qt::Vertical); - mw->splitDockWidget(mw->toolBarDockWidget(), callersDock, Qt::Vertical); mw->splitDockWidget(mw->toolBarDockWidget(), flatDock, Qt::Vertical); - mw->tabifyDockWidget(callersDock, calleesDock); + mw->splitDockWidget(mw->toolBarDockWidget(), calleesDock, Qt::Vertical); + mw->splitDockWidget(calleesDock, callersDock, Qt::Horizontal); } IAnalyzerEngine *CallgrindTool::createEngine(const AnalyzerStartParameters &sp, From 378da003e9a951da840f39e1fe54370494dff1cd Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 6 Jul 2011 12:01:23 +0200 Subject: [PATCH 135/143] analyzer: use an enum for StartMode and add comment make intentions clear Change-Id: I10d78ad0dd8d410206fc0109b6a3d2b447404553 Reviewed-on: http://codereview.qt.nokia.com/1242 Reviewed-by: Qt Sanity Bot Reviewed-by: hjk --- src/plugins/analyzerbase/analyzerconstants.h | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/plugins/analyzerbase/analyzerconstants.h b/src/plugins/analyzerbase/analyzerconstants.h index 26f3b0ad540..23f15e7b807 100644 --- a/src/plugins/analyzerbase/analyzerconstants.h +++ b/src/plugins/analyzerbase/analyzerconstants.h @@ -39,19 +39,17 @@ namespace Analyzer { -class StartMode -{ -public: - explicit StartMode(int m = 0) : m(m) {} - operator int() const { return m; } - void operator=(int m_) { m = m_; } -private: - int m; -}; - // Special values for currently used modes. // Their meaning is interpreted by the individual tools. -enum { StartLocal = -1, StartRemote = -2, StartQml = -3 }; +// FIXME: The plan is to remove this entirely from the +// public interface and let the tools handle that internally. + +enum StartMode +{ + StartLocal = -1, + StartRemote = -2, + StartQml = -3 +}; namespace Constants { From 11dde67267417fc73a0c574359c2abf4b7e995bd Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 6 Jul 2011 14:13:04 +0200 Subject: [PATCH 136/143] qmlprofiler: instantiate docks when using the toolbar Change-Id: Ic839a4cf18494115a9a9ace4738ecb163722c40b Reviewed-on: http://codereview.qt.nokia.com/1244 Reviewed-by: Qt Sanity Bot Reviewed-by: hjk --- src/plugins/qmlprofiler/qmlprofilertool.cpp | 10 ++++++++++ src/plugins/qmlprofiler/qmlprofilertool.h | 1 + 2 files changed, 11 insertions(+) diff --git a/src/plugins/qmlprofiler/qmlprofilertool.cpp b/src/plugins/qmlprofiler/qmlprofilertool.cpp index ee70f049ce9..688d6e673db 100644 --- a/src/plugins/qmlprofiler/qmlprofilertool.cpp +++ b/src/plugins/qmlprofiler/qmlprofilertool.cpp @@ -227,6 +227,14 @@ IAnalyzerEngine *QmlProfilerTool::createEngine(const AnalyzerStartParameters &sp void QmlProfilerTool::initializeDockWidgets() { + ensureWidgets(); +} + +void QmlProfilerTool::ensureWidgets() +{ + if (d->m_traceWindow) + return; + Utils::FancyMainWindow *mw = AnalyzerManager::mainWindow(); d->m_traceWindow = new TraceWindow(mw); @@ -297,6 +305,8 @@ void QmlProfilerTool::toolDeselected() QWidget *QmlProfilerTool::createControlWidget() { + ensureWidgets(); + // custom toolbar (TODO) QWidget *toolbarWidget = new QWidget; toolbarWidget->setObjectName(QLatin1String("QmlProfilerToolBarWidget")); diff --git a/src/plugins/qmlprofiler/qmlprofilertool.h b/src/plugins/qmlprofiler/qmlprofilertool.h index 1b0bca3381b..4b5912d3ab8 100644 --- a/src/plugins/qmlprofiler/qmlprofilertool.h +++ b/src/plugins/qmlprofiler/qmlprofilertool.h @@ -91,6 +91,7 @@ private: void updateAttachAction(bool isCurrentTool); void connectToClient(); void updateRecordingState(); + void ensureWidgets(); class QmlProfilerToolPrivate; QmlProfilerToolPrivate *d; From 38c7f981cca6de68f0b7cb995fcee5857c27f4e9 Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 6 Jul 2011 14:41:16 +0200 Subject: [PATCH 137/143] analyzer: postpone selecting saved tool ... until the analyze mode is actually selected Change-Id: I7d03c48a4b4260d54bf3218b3a493ceacd2d2967 Reviewed-on: http://codereview.qt.nokia.com/1243 Reviewed-by: Qt Sanity Bot Reviewed-by: hjk --- src/plugins/analyzerbase/analyzermanager.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/plugins/analyzerbase/analyzermanager.cpp b/src/plugins/analyzerbase/analyzermanager.cpp index 571a1ee8357..d3c6daa241a 100644 --- a/src/plugins/analyzerbase/analyzermanager.cpp +++ b/src/plugins/analyzerbase/analyzermanager.cpp @@ -553,7 +553,16 @@ void AnalyzerManagerPrivate::startTool() void AnalyzerManagerPrivate::modeChanged(IMode *mode) { - m_mainWindow->setDockActionsVisible(mode == m_mode); + if (mode && mode == m_mode) { + m_mainWindow->setDockActionsVisible(true); + static bool firstTime = true; + if (firstTime) + selectSavedTool(); + firstTime = false; + updateRunActions(); + } else { + m_mainWindow->setDockActionsVisible(false); + } } QAction *AnalyzerManagerPrivate::actionFromToolAndMode(IAnalyzerTool *tool, StartMode mode) @@ -781,7 +790,6 @@ void AnalyzerManager::extensionsInitialized() foreach (IAnalyzerTool *tool, d->m_tools) tool->extensionsInitialized(); - d->selectSavedTool(); } void AnalyzerManager::shutdown() From 4823487b5959dd04d4a199d9242823ea080ea60b Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 6 Jul 2011 16:28:02 +0200 Subject: [PATCH 138/143] analyzer: fix control/dockwidget construction order Change-Id: Id39c55617c6441b221fc321d71e73168f2b3e4bd Reviewed-on: http://codereview.qt.nokia.com/1245 Reviewed-by: Qt Sanity Bot Reviewed-by: Friedemann Kleint --- src/plugins/analyzerbase/analyzermanager.cpp | 77 +++++++++----------- 1 file changed, 34 insertions(+), 43 deletions(-) diff --git a/src/plugins/analyzerbase/analyzermanager.cpp b/src/plugins/analyzerbase/analyzermanager.cpp index d3c6daa241a..f17ab1c5ac8 100644 --- a/src/plugins/analyzerbase/analyzermanager.cpp +++ b/src/plugins/analyzerbase/analyzermanager.cpp @@ -170,7 +170,8 @@ public: bool showPromptDialog(const QString &title, const QString &text, const QString &stopButtonText, const QString &cancelButtonText) const; - void addDock(Qt::DockWidgetArea area, QDockWidget *dockWidget); + void activateDock(Qt::DockWidgetArea area, QDockWidget *dockWidget); + void deactivateDock(QDockWidget *dockWidget); void addTool(IAnalyzerTool *tool, const StartModes &modes); void selectSavedTool(); void selectTool(IAnalyzerTool *tool, StartMode mode); @@ -206,10 +207,11 @@ public: QAction *m_stopAction; ActionContainer *m_menu; QComboBox *m_toolBox; - QStackedWidget *m_controlsWidget; + QStackedWidget *m_controlsStackWidget; Utils::StatusLabel *m_statusLabel; typedef QMap MainWindowSettingsMap; QHash > m_toolWidgets; + QHash m_controlsWidgetFromTool; MainWindowSettingsMap m_defaultSettings; // list of dock widgets to prevent memory leak @@ -217,7 +219,6 @@ public: QList m_dockWidgets; bool m_restartOnStop; - bool m_handlingManualAction; }; AnalyzerManagerPrivate::AnalyzerManagerPrivate(AnalyzerManager *qq): @@ -231,13 +232,12 @@ AnalyzerManagerPrivate::AnalyzerManagerPrivate(AnalyzerManager *qq): m_stopAction(0), m_menu(0), m_toolBox(new QComboBox), - m_controlsWidget(new QStackedWidget), + m_controlsStackWidget(new QStackedWidget), m_statusLabel(new Utils::StatusLabel), - m_restartOnStop(false), - m_handlingManualAction(false) + m_restartOnStop(false) { m_toolBox->setObjectName(QLatin1String("AnalyzerManagerToolBox")); - connect(m_toolBox, SIGNAL(currentIndexChanged(int)), SLOT(selectToolboxAction(int))); + connect(m_toolBox, SIGNAL(activated(int)), SLOT(selectToolboxAction(int))); setupActions(); @@ -344,7 +344,6 @@ void AnalyzerManagerPrivate::createModeMainWindow() m_mainWindow->setDocumentMode(true); m_mainWindow->setDockNestingEnabled(true); m_mainWindow->setDockActionsVisible(false); - //ModeManager::instance()->currentMode() cannot be us yet. connect(m_mainWindow, SIGNAL(resetLayout()), SLOT(resetLayout())); QBoxLayout *editorHolderLayout = new QVBoxLayout; @@ -371,7 +370,7 @@ void AnalyzerManagerPrivate::createModeMainWindow() analyzeToolBarLayout->addWidget(toolButton(m_stopAction)); analyzeToolBarLayout->addWidget(new Utils::StyledSeparator); analyzeToolBarLayout->addWidget(m_toolBox); - analyzeToolBarLayout->addWidget(m_controlsWidget); + analyzeToolBarLayout->addWidget(m_controlsStackWidget); analyzeToolBarLayout->addWidget(m_statusLabel); analyzeToolBarLayout->addStretch(); @@ -398,7 +397,7 @@ void AnalyzerManagerPrivate::createModeMainWindow() centralLayout->setStretch(1, 0); } -void AnalyzerManagerPrivate::addDock(Qt::DockWidgetArea area, QDockWidget *dockWidget) +void AnalyzerManagerPrivate::activateDock(Qt::DockWidgetArea area, QDockWidget *dockWidget) { dockWidget->setParent(m_mainWindow); m_mainWindow->addDockWidget(area, dockWidget); @@ -417,6 +416,17 @@ void AnalyzerManagerPrivate::addDock(Qt::DockWidgetArea area, QDockWidget *dockW viewsMenu->addAction(cmd); } +void AnalyzerManagerPrivate::deactivateDock(QDockWidget *dockWidget) +{ + ActionManager *am = ICore::instance()->actionManager(); + QAction *toggleViewAction = dockWidget->toggleViewAction(); + am->unregisterAction(toggleViewAction, QString("Analyzer." + dockWidget->objectName())); + m_mainWindow->removeDockWidget(dockWidget); + dockWidget->hide(); + // Prevent saveState storing the data of the wrong children. + dockWidget->setParent(0); +} + bool buildTypeAccepted(IAnalyzerTool::ToolMode toolMode, BuildConfiguration::BuildType buildType) { @@ -591,26 +601,18 @@ void AnalyzerManagerPrivate::selectSavedTool() void AnalyzerManagerPrivate::selectMenuAction() { - if (m_handlingManualAction) - return; - m_handlingManualAction = true; QAction *action = qobject_cast(sender()); QTC_ASSERT(action, return); IAnalyzerTool *tool = m_toolFromAction.value(action); StartMode mode = m_modeFromAction.value(action); selectTool(tool, mode); tool->startTool(mode); - m_handlingManualAction = false; } void AnalyzerManagerPrivate::selectToolboxAction(int index) { - if (m_handlingManualAction) - return; - m_handlingManualAction = true; QAction *action = m_actions[index]; selectTool(m_toolFromAction.value(action), m_modeFromAction.value(action)); - m_handlingManualAction = false; } void AnalyzerManagerPrivate::selectTool(IAnalyzerTool *tool, StartMode mode) @@ -622,25 +624,11 @@ void AnalyzerManagerPrivate::selectTool(IAnalyzerTool *tool, StartMode mode) const int actionIndex = m_actions.indexOf(action); QTC_ASSERT(actionIndex >= 0, return); - saveToolSettings(m_currentTool, m_currentMode); - // Clean up old tool. if (m_currentTool) { - ActionManager *am = ICore::instance()->actionManager(); - - foreach (QDockWidget *widget, m_toolWidgets.value(m_currentTool)) { - QAction *toggleViewAction = widget->toggleViewAction(); - am->unregisterAction(toggleViewAction, - QString("Analyzer." + widget->objectName())); - m_mainWindow->removeDockWidget(widget); - ///NOTE: QMainWindow (and FancyMainWindow) just look at - /// @c findChildren() - ///if we don't do this, all kind of havoc might happen, including: - ///- improper saveState/restoreState - ///- improper list of qdockwidgets in popup menu - ///- ... - widget->setParent(0); - } + saveToolSettings(m_currentTool, m_currentMode); + foreach (QDockWidget *widget, m_toolWidgets.value(m_currentTool)) + deactivateDock(widget); m_currentTool->toolDeselected(); } @@ -648,19 +636,24 @@ void AnalyzerManagerPrivate::selectTool(IAnalyzerTool *tool, StartMode mode) m_currentTool = tool; m_currentMode = mode; - const bool firstTime = !m_defaultSettings.contains(tool); - if (firstTime) { + if (!m_defaultSettings.contains(tool)) { + // First time the tool is used. tool->initializeDockWidgets(); m_defaultSettings.insert(tool, m_mainWindow->saveSettings()); - } else { - foreach (QDockWidget *widget, m_toolWidgets.value(tool)) - addDock(Qt::DockWidgetArea(widget->property(INITIAL_DOCK_AREA).toInt()), widget); + + QTC_ASSERT(!m_controlsWidgetFromTool.contains(tool), /**/); + QWidget *widget = tool->createControlWidget(); + m_controlsWidgetFromTool[tool] = widget; + m_controlsStackWidget->addWidget(widget); } + foreach (QDockWidget *widget, m_toolWidgets.value(tool)) + activateDock(Qt::DockWidgetArea(widget->property(INITIAL_DOCK_AREA).toInt()), widget); loadToolSettings(tool); + QTC_ASSERT(m_controlsWidgetFromTool.contains(tool), /**/); + m_controlsStackWidget->setCurrentWidget(m_controlsWidgetFromTool.value(tool)); m_toolBox->setCurrentIndex(actionIndex); - m_controlsWidget->setCurrentIndex(actionIndex); updateRunActions(); } @@ -670,7 +663,6 @@ void AnalyzerManagerPrivate::addTool(IAnalyzerTool *tool, const StartModes &mode delayedInit(); // Make sure that there is a valid IMode instance. const bool blocked = m_toolBox->blockSignals(true); // Do not make current. - m_controlsWidget->addWidget(tool->createControlWidget()); ActionManager *am = Core::ICore::instance()->actionManager(); foreach (StartMode mode, modes) { QString actionName = tool->actionName(mode); @@ -812,7 +804,6 @@ QDockWidget *AnalyzerManager::createDockWidget(IAnalyzerTool *tool, const QStrin d->m_dockWidgets.append(AnalyzerManagerPrivate::DockPtr(dockWidget)); dockWidget->setWindowTitle(title); d->m_toolWidgets[tool].push_back(dockWidget); - d->addDock(area, dockWidget); return dockWidget; } From 868613b5edd91b347795247e24c2e7156d24e081 Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 6 Jul 2011 16:52:14 +0200 Subject: [PATCH 139/143] analyzer: merge dockwidget and toolbar creation. Now that dock and control widgets are always created as late as possible and both are needed immediately afterward it makes sense to merge there construction. This also reduces the chance to create a partial tool gui in an inconsitent state. Change-Id: Ic7f405d65b2b8f0b4ee3ff0ef991d6e4746bac0a Reviewed-on: http://codereview.qt.nokia.com/1249 Reviewed-by: Qt Sanity Bot Reviewed-by: hjk --- src/plugins/analyzerbase/analyzermanager.cpp | 6 +- src/plugins/analyzerbase/ianalyzertool.h | 9 +- src/plugins/qmlprofiler/qmlprofilertool.cpp | 37 +++--- src/plugins/qmlprofiler/qmlprofilertool.h | 3 +- src/plugins/valgrind/callgrindtool.cpp | 123 +++++++++---------- src/plugins/valgrind/callgrindtool.h | 2 +- src/plugins/valgrind/memchecktool.cpp | 23 ++-- src/plugins/valgrind/memchecktool.h | 4 +- 8 files changed, 91 insertions(+), 116 deletions(-) diff --git a/src/plugins/analyzerbase/analyzermanager.cpp b/src/plugins/analyzerbase/analyzermanager.cpp index f17ab1c5ac8..cdf4e5d167b 100644 --- a/src/plugins/analyzerbase/analyzermanager.cpp +++ b/src/plugins/analyzerbase/analyzermanager.cpp @@ -637,12 +637,10 @@ void AnalyzerManagerPrivate::selectTool(IAnalyzerTool *tool, StartMode mode) m_currentMode = mode; if (!m_defaultSettings.contains(tool)) { - // First time the tool is used. - tool->initializeDockWidgets(); + QWidget *widget = tool->createWidgets(); + QTC_ASSERT(widget, /**/); m_defaultSettings.insert(tool, m_mainWindow->saveSettings()); - QTC_ASSERT(!m_controlsWidgetFromTool.contains(tool), /**/); - QWidget *widget = tool->createControlWidget(); m_controlsWidgetFromTool[tool] = widget; m_controlsStackWidget->addWidget(widget); } diff --git a/src/plugins/analyzerbase/ianalyzertool.h b/src/plugins/analyzerbase/ianalyzertool.h index 5ddcde892a4..8b7e489ad82 100644 --- a/src/plugins/analyzerbase/ianalyzertool.h +++ b/src/plugins/analyzerbase/ianalyzertool.h @@ -109,15 +109,10 @@ public: /// This gets called after all analyzation tools where initialized. virtual void extensionsInitialized() = 0; - /** - * This is called to add all dock widgets if tool becomes active first time. - * \sa AnalzyerManager::createDockWidget - */ - virtual void initializeDockWidgets() {} - + /// Creates all widgets used by the tool. /// Returns a control widget which will be shown in the status bar when /// this tool is selected. Must be non-zero. - virtual QWidget *createControlWidget() = 0; + virtual QWidget *createWidgets() = 0; /// Returns a new engine for the given start parameters. /// Called each time the tool is launched. diff --git a/src/plugins/qmlprofiler/qmlprofilertool.cpp b/src/plugins/qmlprofiler/qmlprofilertool.cpp index 688d6e673db..fd004b7ae0b 100644 --- a/src/plugins/qmlprofiler/qmlprofilertool.cpp +++ b/src/plugins/qmlprofiler/qmlprofilertool.cpp @@ -225,15 +225,23 @@ IAnalyzerEngine *QmlProfilerTool::createEngine(const AnalyzerStartParameters &sp return engine; } -void QmlProfilerTool::initializeDockWidgets() +void QmlProfilerTool::toolSelected() { - ensureWidgets(); + updateAttachAction(true); } -void QmlProfilerTool::ensureWidgets() +void QmlProfilerTool::toolDeselected() { - if (d->m_traceWindow) - return; + updateAttachAction(false); +} + +QWidget *QmlProfilerTool::createWidgets() +{ + QTC_ASSERT(!d->m_traceWindow, return 0); + + // + // DockWidgets + // Utils::FancyMainWindow *mw = AnalyzerManager::mainWindow(); @@ -291,23 +299,10 @@ void QmlProfilerTool::ensureWidgets() mw->tabifyDockWidget(eventsDock, timelineDock); mw->tabifyDockWidget(timelineDock, calleeDock); mw->tabifyDockWidget(calleeDock, callerDock); -} -void QmlProfilerTool::toolSelected() -{ - updateAttachAction(true); -} - -void QmlProfilerTool::toolDeselected() -{ - updateAttachAction(false); -} - -QWidget *QmlProfilerTool::createControlWidget() -{ - ensureWidgets(); - - // custom toolbar (TODO) + // + // Toolbar + // QWidget *toolbarWidget = new QWidget; toolbarWidget->setObjectName(QLatin1String("QmlProfilerToolBarWidget")); diff --git a/src/plugins/qmlprofiler/qmlprofilertool.h b/src/plugins/qmlprofiler/qmlprofilertool.h index 4b5912d3ab8..c4520d5a65f 100644 --- a/src/plugins/qmlprofiler/qmlprofilertool.h +++ b/src/plugins/qmlprofiler/qmlprofilertool.h @@ -53,14 +53,13 @@ public: ToolMode toolMode() const; void extensionsInitialized() {} - void initializeDockWidgets(); void toolSelected(); void toolDeselected(); Analyzer::IAnalyzerEngine *createEngine(const Analyzer::AnalyzerStartParameters &sp, ProjectExplorer::RunConfiguration *runConfiguration = 0); - QWidget *createControlWidget(); + QWidget *createWidgets(); void startTool(Analyzer::StartMode mode); public slots: diff --git a/src/plugins/valgrind/callgrindtool.cpp b/src/plugins/valgrind/callgrindtool.cpp index eef04d82a91..d89632d6c73 100644 --- a/src/plugins/valgrind/callgrindtool.cpp +++ b/src/plugins/valgrind/callgrindtool.cpp @@ -115,8 +115,7 @@ public: void setParseData(ParseData *data); CostDelegate::CostFormat costFormat() const; - QWidget *createControlWidget(); - void initializeDockWidgets(); + QWidget *createWidgets(); void doClear(bool clearParseData); void updateEventCombo(); @@ -566,13 +565,67 @@ void CallgrindTool::extensionsInitialized() } } -void CallgrindTool::initializeDockWidgets() +IAnalyzerEngine *CallgrindTool::createEngine(const AnalyzerStartParameters &sp, + ProjectExplorer::RunConfiguration *runConfiguration) { - d->initializeDockWidgets(); + return d->createEngine(sp, runConfiguration); } -void CallgrindToolPrivate::initializeDockWidgets() +IAnalyzerEngine *CallgrindToolPrivate::createEngine(const AnalyzerStartParameters &sp, + ProjectExplorer::RunConfiguration *runConfiguration) { + CallgrindEngine *engine = new CallgrindEngine(q, sp, runConfiguration); + + connect(engine, SIGNAL(parserDataReady(CallgrindEngine *)), + SLOT(takeParserData(CallgrindEngine *))); + connect(engine, SIGNAL(starting(const Analyzer::IAnalyzerEngine*)), + SLOT(engineStarting(const Analyzer::IAnalyzerEngine*))); + connect(engine, SIGNAL(finished()), + SLOT(engineFinished())); + + connect(this, SIGNAL(dumpRequested()), engine, SLOT(dump())); + connect(this, SIGNAL(resetRequested()), engine, SLOT(reset())); + connect(this, SIGNAL(pauseToggled(bool)), engine, SLOT(setPaused(bool))); + + // initialize engine + engine->setPaused(m_pauseAction->isChecked()); + + // we may want to toggle collect for one function only in this run + engine->setToggleCollectFunction(m_toggleCollectFunction); + m_toggleCollectFunction.clear(); + + AnalyzerManager::showStatusMessage(AnalyzerManager::msgToolStarted(q->displayName())); + + // apply project settings + AnalyzerProjectSettings *analyzerSettings = runConfiguration->extraAspect(); + CallgrindProjectSettings *settings = analyzerSettings->subConfig(); + QTC_ASSERT(settings, return engine) + + QTC_ASSERT(m_visualisation, return engine); + m_visualisation->setMinimumInclusiveCostRatio(settings->visualisationMinimumInclusiveCostRatio() / 100.0); + m_proxyModel->setMinimumInclusiveCostRatio(settings->minimumInclusiveCostRatio() / 100.0); + m_dataModel->setVerboseToolTipsEnabled(settings->enableEventToolTips()); + + return engine; +} + +void CallgrindTool::startTool(StartMode mode) +{ + ValgrindPlugin::startValgrindTool(this, mode); +} + +QWidget *CallgrindTool::createWidgets() +{ + return d->createWidgets(); +} + +QWidget *CallgrindToolPrivate::createWidgets() +{ + QTC_ASSERT(!m_visualisation, return 0); + + // + // DockWidgets + // Utils::FancyMainWindow *mw = AnalyzerManager::mainWindow(); m_visualisation = new Visualisation(mw); m_visualisation->setFrameStyle(QFrame::NoFrame); @@ -636,64 +689,10 @@ void CallgrindToolPrivate::initializeDockWidgets() mw->splitDockWidget(mw->toolBarDockWidget(), flatDock, Qt::Vertical); mw->splitDockWidget(mw->toolBarDockWidget(), calleesDock, Qt::Vertical); mw->splitDockWidget(calleesDock, callersDock, Qt::Horizontal); -} -IAnalyzerEngine *CallgrindTool::createEngine(const AnalyzerStartParameters &sp, - ProjectExplorer::RunConfiguration *runConfiguration) -{ - return d->createEngine(sp, runConfiguration); -} - -IAnalyzerEngine *CallgrindToolPrivate::createEngine(const AnalyzerStartParameters &sp, - ProjectExplorer::RunConfiguration *runConfiguration) -{ - CallgrindEngine *engine = new CallgrindEngine(q, sp, runConfiguration); - - connect(engine, SIGNAL(parserDataReady(CallgrindEngine *)), - SLOT(takeParserData(CallgrindEngine *))); - connect(engine, SIGNAL(starting(const Analyzer::IAnalyzerEngine*)), - SLOT(engineStarting(const Analyzer::IAnalyzerEngine*))); - connect(engine, SIGNAL(finished()), - SLOT(engineFinished())); - - connect(this, SIGNAL(dumpRequested()), engine, SLOT(dump())); - connect(this, SIGNAL(resetRequested()), engine, SLOT(reset())); - connect(this, SIGNAL(pauseToggled(bool)), engine, SLOT(setPaused(bool))); - - // initialize engine - engine->setPaused(m_pauseAction->isChecked()); - - // we may want to toggle collect for one function only in this run - engine->setToggleCollectFunction(m_toggleCollectFunction); - m_toggleCollectFunction.clear(); - - AnalyzerManager::showStatusMessage(AnalyzerManager::msgToolStarted(q->displayName())); - - // apply project settings - AnalyzerProjectSettings *analyzerSettings = runConfiguration->extraAspect(); - CallgrindProjectSettings *settings = analyzerSettings->subConfig(); - QTC_ASSERT(settings, return engine) - - QTC_ASSERT(m_visualisation, return engine); - m_visualisation->setMinimumInclusiveCostRatio(settings->visualisationMinimumInclusiveCostRatio() / 100.0); - m_proxyModel->setMinimumInclusiveCostRatio(settings->minimumInclusiveCostRatio() / 100.0); - m_dataModel->setVerboseToolTipsEnabled(settings->enableEventToolTips()); - - return engine; -} - -void CallgrindTool::startTool(StartMode mode) -{ - ValgrindPlugin::startValgrindTool(this, mode); -} - -QWidget *CallgrindTool::createControlWidget() -{ - return d->createControlWidget(); -} - -QWidget *CallgrindToolPrivate::createControlWidget() -{ + // + // Control Widget + // QAction *action = 0; QWidget *widget = new QWidget; QHBoxLayout *layout = new QHBoxLayout; diff --git a/src/plugins/valgrind/callgrindtool.h b/src/plugins/valgrind/callgrindtool.h index 64b034d6409..f51cecd732c 100644 --- a/src/plugins/valgrind/callgrindtool.h +++ b/src/plugins/valgrind/callgrindtool.h @@ -58,7 +58,7 @@ public: Analyzer::IAnalyzerEngine *createEngine(const Analyzer::AnalyzerStartParameters &sp, ProjectExplorer::RunConfiguration *runConfiguration = 0); - QWidget *createControlWidget(); + QWidget *createWidgets(); void startTool(Analyzer::StartMode mode); diff --git a/src/plugins/valgrind/memchecktool.cpp b/src/plugins/valgrind/memchecktool.cpp index 52ad2a8aa02..9c2e89a8174 100644 --- a/src/plugins/valgrind/memchecktool.cpp +++ b/src/plugins/valgrind/memchecktool.cpp @@ -232,8 +232,6 @@ void MemcheckTool::settingsDestroyed(QObject *settings) void MemcheckTool::maybeActiveRunConfigurationChanged() { - ensureWidgets(); - AnalyzerSettings *settings = 0; ProjectExplorer::ProjectExplorerPlugin *pe = ProjectExplorer::ProjectExplorerPlugin::instance(); if (ProjectExplorer::Project *project = pe->startupProject()) { @@ -355,15 +353,10 @@ private: QStringList m_projectFiles; }; -void MemcheckTool::initializeDockWidgets() -{ - ensureWidgets(); -} -void MemcheckTool::ensureWidgets() +QWidget *MemcheckTool::createWidgets() { - if (m_errorView) - return; + QTC_ASSERT(!m_errorView, return 0); Utils::FancyMainWindow *mw = AnalyzerManager::mainWindow(); @@ -391,12 +384,10 @@ void MemcheckTool::ensureWidgets() connect(ProjectExplorer::ProjectExplorerPlugin::instance(), SIGNAL(updateRunActions()), SLOT(maybeActiveRunConfigurationChanged())); -} - -QWidget *MemcheckTool::createControlWidget() -{ - ensureWidgets(); + // + // The Control Widget. + // QAction *action = 0; QHBoxLayout *layout = new QHBoxLayout; QToolButton *button = 0; @@ -519,7 +510,7 @@ void MemcheckTool::internalParserError(const QString &errorString) void MemcheckTool::clearErrorView() { - ensureWidgets(); + QTC_ASSERT(m_errorView, return); m_errorModel->clear(); qDeleteAll(m_suppressionActions); @@ -529,7 +520,7 @@ void MemcheckTool::clearErrorView() void MemcheckTool::updateErrorFilter() { - ensureWidgets(); + QTC_ASSERT(m_errorView, return); QTC_ASSERT(m_settings, return); AbstractMemcheckSettings *memcheckSettings = m_settings->subConfig(); diff --git a/src/plugins/valgrind/memchecktool.h b/src/plugins/valgrind/memchecktool.h index 6f00fa70f9c..60fa6842923 100644 --- a/src/plugins/valgrind/memchecktool.h +++ b/src/plugins/valgrind/memchecktool.h @@ -111,10 +111,8 @@ private slots: private: ToolMode toolMode() const; - void ensureWidgets(); - void initializeDockWidgets(); void extensionsInitialized() {} - QWidget *createControlWidget(); + QWidget *createWidgets(); Analyzer::IAnalyzerEngine *createEngine(const Analyzer::AnalyzerStartParameters &sp, ProjectExplorer::RunConfiguration *runConfiguration = 0); From 25ead2a20f2e77fc8508197ad19bef4b90e79396 Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 6 Jul 2011 16:52:14 +0200 Subject: [PATCH 140/143] analyzer: remove unneeded function declaration Change-Id: Iffee3a32a711085a4904e743a18d875306a4e546 Reviewed-on: http://codereview.qt.nokia.com/1289 Reviewed-by: Qt Sanity Bot Reviewed-by: hjk --- src/plugins/valgrind/callgrindtool.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/plugins/valgrind/callgrindtool.h b/src/plugins/valgrind/callgrindtool.h index f51cecd732c..35da11be719 100644 --- a/src/plugins/valgrind/callgrindtool.h +++ b/src/plugins/valgrind/callgrindtool.h @@ -54,7 +54,6 @@ public: ToolMode toolMode() const; void extensionsInitialized(); - void initializeDockWidgets(); Analyzer::IAnalyzerEngine *createEngine(const Analyzer::AnalyzerStartParameters &sp, ProjectExplorer::RunConfiguration *runConfiguration = 0); From c9b2809d4eae0abbe8b2799b8384cce43843f57b Mon Sep 17 00:00:00 2001 From: Leandro Melo Date: Thu, 7 Jul 2011 09:29:52 +0200 Subject: [PATCH 141/143] Update changes file Change-Id: I7261c91b99db4bc0149346277226b8a01687e70c Reviewed-on: http://codereview.qt.nokia.com/1271 Reviewed-by: Eike Ziller Reviewed-by: Leena Miettinen --- dist/changes-2.3.0 | 1 + 1 file changed, 1 insertion(+) diff --git a/dist/changes-2.3.0 b/dist/changes-2.3.0 index 7c254d3c21b..2757e3ce971 100644 --- a/dist/changes-2.3.0 +++ b/dist/changes-2.3.0 @@ -14,6 +14,7 @@ General Editing * Fixed lock up when regular expression search matched empty line + * Completions are now computed in a separate thread (non-blocking editor) Managing Projects From 17623c877fa89d7faf8c5effb4c8c3ee1da64ef7 Mon Sep 17 00:00:00 2001 From: Christiaan Janssen Date: Thu, 7 Jul 2011 09:42:37 +0200 Subject: [PATCH 142/143] QmlProfiler: removed unused images Change-Id: Ic28529c1dd309cbe455155f7f991d2b41088c28c Reviewed-on: http://codereview.qt.nokia.com/1291 Reviewed-by: Qt Sanity Bot Reviewed-by: Aurindam Jana --- .../qmlprofiler/qml/analyzer_category_small.png | Bin 705 -> 0 bytes src/plugins/qmlprofiler/qml/qml.qrc | 3 --- src/plugins/qmlprofiler/qml/range.png | Bin 442 -> 0 bytes src/plugins/qmlprofiler/qml/toolbarbg.png | Bin 817 -> 0 bytes 4 files changed, 3 deletions(-) delete mode 100644 src/plugins/qmlprofiler/qml/analyzer_category_small.png delete mode 100644 src/plugins/qmlprofiler/qml/range.png delete mode 100644 src/plugins/qmlprofiler/qml/toolbarbg.png diff --git a/src/plugins/qmlprofiler/qml/analyzer_category_small.png b/src/plugins/qmlprofiler/qml/analyzer_category_small.png deleted file mode 100644 index 5bc90fbf9184b4a32ded2b35523b481b87db64f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 705 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s77>k44ofy`glX=O&z`&N| z?e44RCiEUs&hB%~%zxBGu?)=`IF zB8@8qnxiB(2yW+E_f&2^uQWd*l4IVhq8)#BJU`G{zu?rbU%!^U z-etwX^!E2YyH9PuUcB(Ap0~Wcx$#@=|0CZ^1XymB#_rv``SUN452s3FV^?1_S-@y( zSnb~5-~amM%goyM7bhFr+gCa>?+RP}vTXNS#-alu8zYw7%n8yEDUfM@Ej&5n_L2aN z57{pQ^`=Yqx=mR(?PUpnrrGQp+sXmHJ(v$|+)%)vsgJ9Ymi$>(41*t%@jho-;& z?@ziZ=h?*`sMvn&z~_#|FJvaD2tE9I@@estl2Z?__pgX!S7h0nAAjKW!l{oEs=JpI zJ6w4?$)l3b3pcM$$yS%Zl0C|*pHy}S zy-MojG&VNg5~Uk+{pc07OQnXslb4jttXu9pEw$&V_mM)Mtx>9dkBuF~+7!FHyRW=1 zef8DK$n$^!!-dGU#90g`)20i4F4oc2m5t}(Sg>{D#*5vLXI#A+T65n$RnkjyN>EDF z{ImICVHqY;Klb^rzIuzvfI+%~;STGW{eR{=KQO-VeE(~6iA!!#zcW8{F)%PNc)I$z JtaD0e0s!VrKs^8e diff --git a/src/plugins/qmlprofiler/qml/qml.qrc b/src/plugins/qmlprofiler/qml/qml.qrc index 6f93bec9b8b..acb92c1d774 100644 --- a/src/plugins/qmlprofiler/qml/qml.qrc +++ b/src/plugins/qmlprofiler/qml/qml.qrc @@ -5,15 +5,12 @@ MainView.js MainView.qml popup.png - range.png RangeDetails.qml RangeMover.qml - analyzer_category_small.png TimeDisplay.qml clean_pane_small.png prev.png next.png - toolbarbg.png magnifier-minus.png magnifier-plus.png recordOff.png diff --git a/src/plugins/qmlprofiler/qml/range.png b/src/plugins/qmlprofiler/qml/range.png deleted file mode 100644 index 2ac200fe18a6029c2f5c02f8381aafa82165956a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 442 zcmeAS@N?(olHy`uVBq!ia0y~yVBlw9U~uGMV_;z5Yxx((z`(#+;1OBOz`!jG!i)^F z=14FwFy?r=IEHxezMZ^Rk0nv0ZGU32u36op(A~_f*@B&IO&%ueoE8RXlxR)#m=e?A z_K-=0tMf+0|A_$x^U95slb^|iY5w&4bjJLC^}kK;->E6KB+qD6uV@UfXfB`8D*U3I zG2@`YmWMhIH!}K0G{z-&JLz&vF5rJDzaunW+4pkZB$eAS#}YZ~x@EbnUUA!m*f7qz zcDn3p@5=QDyV>q+jGdp%CAP$JV|Sh3U*~DpSsZ(u#OrR|Q@pQNwdpK})Q1z_eB+iU z`bDXJ+c`hz`=6!a!6ib<1&ubY;gqYHzyHa- zHCMw}?{=D6FvRvHTwG&(RDdmW$En%+7GIN3?VI{3Qn*Wn_jKjwnuVd~U7AE|a(`W} znQ%SRZT?E7ODX=kraR6qmHKXKw)@(R&WssvyH~p%j>&%GVshr&(a^<->rBg(q|$yr wT6NLjx|Fpb@8;UVs~I!0d*}XG-d4*b_et@yVZgph1_lNOPgg&ebxsLQ04U_V?*IS* diff --git a/src/plugins/qmlprofiler/qml/toolbarbg.png b/src/plugins/qmlprofiler/qml/toolbarbg.png deleted file mode 100644 index a94d5465b52ffeccdcf4d8b9e1c232c536bef371..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 817 zcmeAS@N?(olHy`uVBq!ia0y~yV2}f04mJh`25Wk44ofy`glX=O&z`&N| z?e4?m^Fe)sHn(@y&fSy7P&0fMhQMe>`e;!x!=QHXq;QZm>yhd}`ljmN|Z^b9CkBi$`_O)|% zX{UNpLL_^e*3u8J?e2eKwc9hl-u7Eg3eSqptEoc!81tJKZ|2V5yYS&c<>mP=FAIIo zzq6A!gy*)A+J&~;!o|VedDq^0-MzEs^ouV)cnmn^F#9p8H)uSNNL8KWwS3b@mo?fC zB9xB(Jk#3Ku$U=RYHQv}+llqwXI`E2y8ChR#MSaa`PuAu{uYXTXwcfADK<6zY+Tdj zO&caT$P4gayYWuYA~C{;X^U^%`U4XiGBeIAZ&Tgs$KbVIc^l6J(I0n$H&{0IX+A(zAQwzwc)HmL=DE$Lp#j#=74@P~3!;PuE24RsHA3=FJn?UbvkGzt{A2i5+2@p6yFI*tNg zrP!&zCmpa|kjS`vY48hnHkTvDO1YUgUnp<-TPhXxCR^w&+XlWr0>4!+?N~dz$>RY( z=SAO?G||U1?dx|T8hV!uoKl;O{;@0FIuu)NA<#6 z|LA=s@_SM(Zce-MMY1ZZ^hQCHQDa+5ruTzX&a~SvY|32k@K_iIi}7E)ydmWE_bcKa z8_s97G)`r_uHLxo;-q(i9|bmWURUSf&0+Nuk}bW=8T0n<6J3>})P`A&y1|8a9_u$c X%E~n#F!E+#U|{fc^>bP0l+XkKAb@TO From 600127e8758122501cd4f14b394bfc8e5f95872b Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Thu, 30 Jun 2011 18:44:44 +0200 Subject: [PATCH 143/143] fix quoting of strings with spaces and backslashes at the end the regexp would match twice at the end, and thus insert a stray quote. so use a discrete loop instead. fixed the same thing in proparser/ioutils and consoleprocess before ... Change-Id: I62b80fb4ea68e00145861f289bc13440c5078873 Reviewed-on: http://codereview.qt.nokia.com/1302 Reviewed-by: Qt Sanity Bot Reviewed-by: Joerg Bornemann Reviewed-by: Oswald Buddenhagen --- src/libs/utils/qtcprocess.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/libs/utils/qtcprocess.cpp b/src/libs/utils/qtcprocess.cpp index e730fd98cfe..6c54a9cb001 100644 --- a/src/libs/utils/qtcprocess.cpp +++ b/src/libs/utils/qtcprocess.cpp @@ -568,7 +568,10 @@ QString QtcProcess::quoteArg(const QString &arg) // The argument must not end with a \ since this would be interpreted // as escaping the quote -- rather put the \ behind the quote: e.g. // rather use "foo"\ than "foo\" - ret.replace(QRegExp(QLatin1String("(\\\\*)$")), QLatin1String("\"\\1")); + int i = ret.length(); + while (i > 0 && ret.at(i - 1) == QLatin1Char('\\')) + --i; + ret.insert(i, QLatin1Char('"')); ret.prepend(QLatin1Char('"')); } // FIXME: Without this, quoting is not foolproof. But it needs support in the process setup, etc.
    2. K4JLPtF>MJqd z*;7wuQ>YKhIxtqa;^<-^F_&!9U*q;ool=5K-sz>E0jxP46%MfBq)e`b)-I+$X#^>xoHvDn>itJeg_t`A;0`_*kz->|er zq5^9hGR%Z$NAb8V4qSfup=_mXSm`zIiOWq{ogvw49n)XEUNd+4`nX^Xskx$8uSXU6Pc^lAed)^+^RS~k#n$avTR-vH z*Q57kFI?Dpw|d?8B{m;lo}M}X^4q`4>h%U)adYPV3Od5bHPu+@F@aX6kFzr zOg`ztpnPyiZiYcd)E0)c#V1qP7!;TS7|yU5SlyUdVm0?*L3-|M_5+rCkM7v}Zm;KR z)xyKi*4(Xrvwr{8u18b#?`x#qUiw#gf48yyj~_DSzZ&n}Kl+i8!Djit8T;){9z9l2 z_q@F+-27g)4ENE#h(C|*UVdzj7V~{*eStIY@9(SMQ_tczP}cE2$5)Pj{0!>?t& z+p(Ncv876C^UXJB7FpbU`SopX!Zs%3iD|iyA6#fpa8--C*b#QEgv&;`$W*GgV(z~5 z*D>Gg&RuZ1xN=R&NvW-8raNvI-*Hc)Mx$fj+PRn8k8Im~`BYK)yVMgQ2iP*E$)3H; zIZ53*CEb%Z@h^+w_OH(`ncNPt*AZD~yFV}H`@A=YH>J6&s+UFudAp)b z-x|BKel!yEesjP2eeS~a?P6yL;aYQN+e=JX#-(N zo@%jfUk0IwK#!Jh0{bqW?M%zh|F1u9)8Sp;#UA99zGptBVrze-+jF4+14l}B`gz70 zJ9`t8k{=y26c7I2Qq6Vrq0_?t)w)O5<=;4QBAu=MlSc3K)l!XT-pET?=Uyt{-+$rU z-`L-*EG#T7ZEbuHEK9y;-e2h5Tds8V-pRAO=W97X{*~sYlAhX)^CyOxn{LCEUavA zh~JW6-)8m~?k$2ck=x9+Z7Z?byJCfgiprAD91-8;6k7x~#Ymgy`S|(mtNNN19Ubla zcI)fjBZq==PcBtkd+pBkyLveaho>$rE={ud@-jI!^=R7W@^^QBe!HDtF2}g~p%SPF z?)F-G?dsL9FE1}&y0rCV%BFSk<;5ZDJtYbP9B<#gWnnsavh(`JbG}Q1Or?15Rrd=x zaeP%_YJBkG;$k~HyY1KRy)3a}m~r-5AItp<7cN}PGm+BP*512kk6dQWnJ*lQEdk|R zoSX}TR`P#dU^CO_+t;sOKYpxS^3m|Ja*Ke|T^|Jjo1F(gR#tg02n~BzuWfNa-$V%n zQY$k0*OV;%SJ-lC-IV;f-w$zr-gav0+y3M|^^0R>*?s-_V!aX9?YwOnQ`+sj>iuNI zW?E$D27b=vzmPrkQ~dX}5uc7WvR%+#x_Xh5vXYasTHUY1Pmdk{RH@Js(BEGC>)rBD zvD|svzbJIn*?ibLgO}k#%&wPDXG%6%N>4xg^!buKe_k%>e;cmKz|gU5?g@{d#&1tY za@$=ku(+?rqoHLJ8nd!^>+&ag_hYQm>J(%d94;$NmpgN{;IOjmKC4K-u!&|KI${A& z?VpG+GhEm?aq*FFy{+s^z2xJ|T4S_jR9BokJ82~YgN@7LBZa|hr{u65_0sb_KXv88 z;=eVn($1?xnXftv=%uVI`rP%V`Iy_!Teipi7w`P?f?x8t=bZhby z;O_~$<@M*+752`2S6evsOGMnqGY1UR7#iF(?{2M;R*}15vAp8%8P}tW*2m0bm5l#) z;a`qX{LE>pmiInfwRwK`v%Srm!|Bsw3TAD+q5HVqDY0bH1aJ0UBYoY{u!R90y3rd< zLXZ0kG@Haua*W*QH+7no_H3KiUpIaIR%3JK!_h}m>*V=sduHxi`QyMe<=^3F0XcczjUrI(L~C0R&WyU1+v%#WI#aH}nOq#dwL%Z^Gtxw;) zzR69QIz2_!j-6ovTiKH<@|&kyi#-=RtyQ$S?3sq`q95jmh#Yu0URg8Wg7cro`c; z|7oM_v*AV8_8Waq-}Los^3B~#mPRo!Oj>MF^yb5XPjlnf+1`33Yi&5u|3bF!vJESx z`R4w6?d4lrdyI#Hfo=ACc^#pu{eONQlz-N#%)DqON*$p?=<9;Mn<*L0?OnB||&PGPS~ep}rlz;s~O_i2si zxOqN&f91XP5+lQfn>GFiCros5H#*5RW8b6a@v}e9v7UISIKfiqC7WibDV=crGFe5KUu0A2-%Z-+WaXbm1jyN~T$mUp` zQVF^_k7@qC+MkCGE@YHpuiCt5iPKW%Z1sm7oa_6=Z+?Hs!r|=P-d7X$Aj^Au+9xJA zwSBgE0^QdxzPo?@;#FIPk{uoo-U|zusHohS{C7uvP?$@0G`qRn_0FS7#WsIy?#5Kc z)tc~n3F}s5l5zZNP# z{vOeCp`Q8LUUv?~ma5IaukSq`$q(uc%uZYe7BYrZJ^5`j_lalfP1W(JEIagRmEPOX zpQrE76!>_qFOQQ;u_fU9A)kCst5^5f`FkXcF65tB&0QXIE#qmcwsH=0npdA0L(G{O zFVCh_9j~qOTX^mI)HQRZj-^zcKeOXTsYG&gZtI)%Lap!8oI{^ArN?_rdU8tisp|7n zuln@n3(Vg1AmimnRzXHaL2j=3XHIJPdrXR}D057^{$84YWw7jT_U-qV%h@?`EaZ#e z-TwRTnriu(wMm85&u&F-4hsJH$ECDU=!#M1Ill`(Z!#OiME0s)`eaq@=ICg-!-#=_ zXI7ii%Y(&SybKjB`z4<8Ffe3A?s7S_Y(vwLBu9@sDW$CQQ{Q>KYMSwc#eYHA=_grR zqoSv%dIn!u80jt2>-%A;7WdLiN}|;{O*iOMMm{^i#p$N!m?XYY@Ee*b51D6IIq=1TLQ4;I^e zHvQaCbJhK^)vi~wv-tjO%6k9P@;;B=%&!mE2QODE-=f{OX1?miUnNyP>=%bUTblPT z)J0?s@9HT_&i$VJ`{oUnLigXFT(kF>KI&bx|C;_RRqhzkgL^+b{q(o&;6Xf z)!*-~FTVRb+VrihvrA6Ghogp*CnsC2y0-D~<0GQ8%|*D~TJEp-SEiDC*mT$b?vtCJ zs~Yi|9$nRnLAoirzD>LP>n8-y4Z z+>+V(YPbF*=GQ5rSC8(r-rV;pqN#7o+OW{)DesnkNLKTm`|Vdp-En?-jR~QQ4B7^2 zif(5VHB-8_ov_@^U$fm}()l0p_6OOo9Cqhe_}}Erm%H!N?*6VZl~}b(^lGSYBh&re zUl#v9cl=CaG;A%vPdn@1zb*HDVdu#(n)#*5cBYG(%?3BySexg6R~$RU>uvA5TW+Go z$?4V6)hElP&7MfL`ObTC+B9>kO5Tk*TdVv3e%&4wxaZST2L^_|_W=tXME)Op_uj0B z_p#a3zaQ^ySve`@XDy${f}oT99V;jAzPA1U^1ppmKlts9oH+ibCoFqkXa4%$`xvd8 zd)y|~_1b;ey3t9h_w-Y#luL8wPMT94I!%6}#ofr@P2ro;R;ski%ZclMV`T_9U3cqS za9E&sjE_ir?e&*N-RIL+PIZl(RFat~YF)Ic<6_auDDl5NCvN_m|HvzE;$&BmP{+X1 z8^%iM)!B|Ei#qCbV>hL3cG+aByLiK=`F~c2p6Wk!<bdj#zD9j=Fwc6v;7?5qo1OK$))fKe>{^$d zEmUs6`&j(@|HZ{QE?jt!xkANvvD3ng9AhJkgOB5+^u?+yzkd~X=jpCWD`1$OxlO5} z`}jVSx*Ub`eOIr?%ZNRC|MJN#eFYN}lLO23<0a&zE}U=tcmA)^+*db>Z7XBK-_8B{ z_J8L4DE|G@b!8liSN?8zSKEKF;^%kQ&G-J;xAt!S?_K@v%v&qgI;T~a+IfC8O#XBA z)_JvEiK|>V7RtT&SNa~(AF-9*_mEAoMc~)_Lq6c1PTGu@f=(O@@9`M#WxZe){_ek# zg@pyEf1>oLwKDqYsc-7FXJ(sz(0!xF+goz*$Bzz>TYTR3_Zx1{Ny4Z4wiRXmy7GMS{!s?H}-Kpv8bk3g94Om%vA@KD)t^W@TI9t6~d)o=a)*tp)*bdaJYD_?T3%wf6i;XC%S)4Ox1?KCw>#&-JZ5|gLGc$pPiD~>zcLq zzPfNr*M9f$J(>y33>r%(U4LFzI92V%`xM{Q>Pi11OcG1?O`krU`D(@AtcTxHSDzR7 zah~&5c-@X4JqK6s|90k6Z>F00!KLzP>ur*y#YLZ;sA#!V_Fr!D^Vh3xZY{VdueCgV z-s|$J)BW{Zx1OpyZFm33lj^IfxdHt3=BF0-e|uA&extCKd)t!#xo;QPZTr0A-rQRe zUw*$|uI=^j)Mz(^ok@NR=@Ti@+z3r{U#BZnn9mEEAg#;m(0Dz$Fqt6aV`nTE?dpFS<|G>r|_U7x8N^0C(;@khtw z$0yG2mpL;zl=%ZA!<9{Uf>V3X?J}|b*&AB8u6H>D!;P9krzy|3nKSqNTl{Q~;mn91 zC;5---wI!Hb;9h>t5+>ucg^2-OPpVa|J&t1*NzIP@8Q^aoNGyC(a!Wk+fOb^i@de% zj7;N$V`ZQj(FjZac{YLjGOn^q&beM6r>l1>@{O#Rxt86Mz+JYnn;vt0{{A-F@9pi~ zn*&!~+RgJK{-J>s!-|ky7jL8;dG&*1;eW9`e))_m%52^j-k-PkPLc1n)LkBt5g|+W zExu;meD*uP80X&Hy!H0~zpBLVz4$`FPW$(hm)+s(%%82}`jo)b=%6%tcTMMKpMQq+ zwUfGgAO1PV&$>Qu&&5^wlj=;%&J`}-X#9M?$%)1_*JsVh6Slkc@Ak~@>#t|mMGM?B z?NRr+zhq4|whJ2EDN%uUZghSutdIR^ReMAeqg>rm&ZB6jZX8;)>!pci4v%x> z2IIXB29^6X(w|?FJ(T&#;fG=M^JP*y>Lxy#e_-d^r(5?GUiPcq9I|M^^ibm+a^>~n z3{D(hqbla^`<;2!tJP`YHO2`qteEI0@-TRlrEo^cYh+p5jzCI(O<3cYZ!-CLL-XgsYY2WyJ z=bB~iP`-Ur+d<^P!-v)yIRyger5H~5oZs+bV<4kWbk%XwO7{Lnrv3kz*?IY1onJU{ z{;^N}TXom&UAfWMy+B$)PE_=ny2!?>qFTlC9XBp+|FvUhWwmtnYG1#m>1sUN+rwl} z+M3i0H*@lGLExzMCjlo8TT`pKeNGEY%0>ROP4q}HkO^{o=j1ie3FHU@i}O?aGuoWn>i*@TcdKz**~2)kz#ab_lr5Lam)9={>ALXq1Ylf zRrTD=d%@=&`YujftG+aBi*iv0erYU(*P42uGjayD_Zk?L5PrpA;I?F(u3Zw2++8*|fQezQZlC{5k%QGoYPFT0Ep_?)ZtmMDOYPs@Qq>J*Vwfwg^UNvn zVdPS_hI7)kg-IrV-|T+PS6-6hzC>r11P?<%Wzx-SXS|lOF*HcdFe*;kp#8b7(PZxQ zntz_1|NkiZTV2l9+Wb9@ed&%%oOf+?!@g?k3tlF25Z3P=9r2D_`+achzV)?4I zYfWdLovh|7Wm)uOk!yEXclYj+jLgi5UQ68;Z!A{sb(6L#$=H6SZtDxp$md%-?uYCA zyKI^C_w{;L{w>T585X-sKAl;A{#&%j%{KjnX zOw~RPjf){hH@i~azIgQPluEJ9oCcS~;vGw#9e%DKUVO+RZS%}CC0|Q6?iQSVlP7J# z&EmgoKdZkh%Gj#^e!PACH2o7njd7a#pJ&h9TDxq4W_j(OJ+dzB%PyX&tn}Kz#_;8> zYxVxB%!gH5pGUvGr&#u~KI?POcC)7&WhJf_N#;M=CHwjD`L(mY{QKt?UKG4CY)kd` zIl1WfKD_<>LuU@PDGwHeCwb^GA?Dl>- z{GLDSMSZXC@1nDNH2lpZOpa!rzW@JULGbL{6BiU!Y%5bvbzgIzc6R!SH79(FoWGQJ z&%D1zZ|McmtD>O?Kl|&7Osy-{I`RA^ zCri`j&BX}`3Nw9{1+8S~lQEFsSslK9U)9%D^XK0`Gt;>K=hNwj+xh+H+tvQ~@bLHd z_v=@$e*F38`aPezT$DPyyN#uKBO@bkZ_CZj&zCpNx^iZw@yd`_d;3aXURrwO$dT3I z>&x=q+~2=HL~F0{r)tHzFBjeU?S3!!UVT-l^N3!0-HX}%dI9YHvewrwGcqvT%Kmra zoL%KhtJV8Gu1udW_hT@pV$HV}#Q@#EPbZbu{F(CHDdO9nx}IsPn&#N=xmTq=BkHgF zwuilEwulPX_OJP!a@=+KN#Wy_(&zrxJgZ9h@WEl7?n$l#UbX*D?DLg2^Z1r>vSd!9 zoy|6{UzNvP6R+$LKO7_7)7u_2ea%FVZ!-IHHhq_qI>5-VLUT&WleqllLa)8~|A&5m zbLHmxez~X5uO8nzpFKomuGX$=+wI@ZUN1KN^F7P5jKAHF9L!gJ>UX}R{r1_fNx@$m z^Ovoy%x*{znEuZ`|7L~hlhco1Pg>pYofYfezu>u=zNJ==|2%~adNy14PZ1N=Pq^`w zTUzYRSp~Cy6SqE(>3$J>@>RyEr@`r;xz<~`9CzO>r8n2|`U3UIzuE1@rIVJH&i(Xu z*~@p=|J|8bx#dZbd>il$^YH z@7}$B%XinC?~I9yj+T~^@=_3xl9J-$;yO3a_VtSw5`uz(v9Z1?Lhij%rEhO-y}CO5 z_s^e(GkxUx!((H87Y2xMvCcmqt|2mAKmOaNPf@!{RyH>`cXywzRr{qQmi^#BWBR!{ zE7z}opTWt^eS2H(?74GepXa$K1+Kmtq#+{oQct*|d*0>pV@VrLxO$gu6 z)uBU&!q!AQeE063hvT;yufHgIdcIN0Ov{_MX>YLh;d6Wq2RCfpx;6Clto#_){{Dbx z%jLr-G%cPl{Q2&#J=fa37H+ta)9dtD#8ypJRW;RV&HCGG^WDn!32yY%)Li_Nhqu*f zc|iVuxhGjFP4?^g`0dlT>~uMLoMn?F!-0nd z7BbhHYG;OCh?`aa$fYjRnjzi6=Tb%8#c!pP>_uaL-8PcoY0C`_{kry`rA+wZV;)Ni zlY>COt@72jbDiC@H;1mvX)i0?8uV7v&%?7b@cHwQmkmcA^m}@EdU|$={=WCEmjA#x zb1hX>Rn1NNr#%vow71kdwfNVXEvr}?&X-RXpQ82t+rnVYZ9RU;$66|~R{xu{`u5eV z%FLI0^D7-V7XEMf_U)T)^fnh4mm4>3Y=~H+8N5tIRrTlZ-@+U$Q@xgkt$tcmnUj-K zQ?qC8+_@)HUfu9se9^?r?AVbbJhE0>mMmGaa^=fLc2K-UMa|m2{rjDrnaIa9yW zb1#=yrX8^Vwb(cM?ewL3J^s-g+tw9&dg{sjX?z>gb<^id-@Pr)hw9RQS|=GYY&bOe z`kB~IpAJ^C+s&`+Vzp_s?@rR^k~i1;Saj^nlF5HgdWYr5Kb^5FIqK1OhHZaNR2DyT z`(eAU_d#0%}Gc4F(6Xv;(H{44t=agubmB_nD`~4i}rk`53oq=J)q5GEhJ(d_3n+x3h^%yRCfXnRA+X2e)*uKiciMSZC=G-_4)*UYvjE)2F1~ zx|f!R*BVZKcCNPii8XiHv2~1n`5}93&vLE5tlaXiT0`X2#l`NMH*fY-x%BGl>Yp`r z85u7QwQ?_Byf`;Ece($3IZ4Tr&p%Jsi4>BMm@#WsmVv~cy?bM0Vt##ldwb)I__(-z zWp8iwo%8ea<1Y@7m!Ge9{h9o{(Bk6H`)_|fnVFZTHu)qE+hhBg?z6m?RUqnSUj-v-sDt zWokwf66JgTnN6r`1zOK-d-~^vuoF`mFI0eVp+>R=caOtK-H|Oyt~yk_MqnZ zmw>9&W$z9BZz{G3IK7BJ0PSjs&3ak==nj&POZTMu!Wpzou>enYr%@zhcXU zdYMLt9iP`~+cGseY}mAESNNqZN0z_&Qnfc~t=UW;*`>{(0lVc6Ys2oxz21}lVunPp zhKN*e+4bp9Ba)Vx&pzw6_+p01BPly44#h7HEKH3qN|BL~cT3xHI#+*ZxNz^@y<4}s zW`aGj`0`5)kyFjTBjuDPo=7lwS9({S7(?8bRqmq`H&-6(#n(3hMU=G;8%Y|K6>+o z*|$H&*?_#ial;YI+Vg8|dIX$SJb!h<+Sc%Q!rf|+%)&1hDxdv5yzRnO5SPPN3_2!x zW>NV2>PJFcP8o0A&;8VZ+)Zy&uZzq@j*`EF3h@__AH~u^B zs<*fPGw%Gk)&0bmsp`{m&#no{VrY=Gu$mRN<9i7&1B0NA&bKi_Uo;+VI?K=qIy z!-A6gUrO8a-<<1<*pad5@n8OhQ}k-eSAJ;bbpmz8t}u&=i@(3Iaq;2<=T@)ZCnX_q zW2tj(ZLOc5pOcf*@#J^1vu4jWHa3=(mDP{g@!@(F~^Ii z`ud-n^7UKSzuG9jSnL04)z8!CHcSD7&Wi_`+j@nAyFp6dGtNuBfBfu3jhm19)&}k? zGyk?qZ^D}sQ=)(R32a{avO7KhO#Pce&>9+xtkC2Fr;1m={*13%-SDXb8qQnY)45_HvEHjcK-ef0(0ihWoBkR znPN26%eLS_!@-1zy;WbYt`7hE=TF+XIX_S9@0YQwsrdEf<>7Yz`}^zbV`F9KpRa#9 zHC#o=GbU!v#f&qjPTks;8(m%fdqv>lv~zPR=YM|^x2r_c(D37{tE=Zq|Nj17f2!B} zo->{MNds(My%%7!rOg(}^`d`r&N@|D{WO zo2`F6&z-y5T{U8V>0X8Zx*xA|FY%t<;d~?8?5(Ek&!mH$Mvi|%7~6Rn%JTlqXxVY; z>1ib;u?ss6bsF16|2VZFn!S{}vs-+6>bYu1rUP95asQvXe^ksf-zI7DX>-vbkE{VegPix`kwN?!k&F&J#*XIcF%r>?Hf$;l}-^=X%=_L;Qe`F6GI;`Ua3 zdvlXpTyKVt+UA>gu3b}`>gDX@6j%SZwAHEbzw)>D_v;V0@ygeHIQaDRbnB=?hYp$L z-MNuE{rB-Z$zkuUgSDobSjDanx|Vf|f#JrVPGd2>ITAIinP;ChllbE6YaVw(d-BN} zIcBrZe*5}#`_@bmsb4Q1E?j5IzVByYeqQnZjExg=FK?Xv{>aSkYwP3p=RLjD$+#=_ z{-26%+g{FJ{A=HayuZJ`zP`3L`j^`K_j~8(Pc6H}#*iRx@N4q<@VzoC>^J~AK& zA~$K%O$G+8R;SC?#1#4xntT&nBJ9nCzvOQE+-lU?bu{VatgLsp=D&Yko&6+g=9^<1 ze|%iM?}v(6!_OJ^0id+$m7T2(YO`{fNcFlX@ygj)XlSfhyr4Qd`u05AYQMQwt|~&B z;8yF2<0ewMe|~(FlatH7wr1k#r~H4C3@bi75Y-Obv2!P*Lqx=lE>Z0}ckjw;o{*dI za`iV||M0HGj~*-k6yb7Rz2wf0qI)m5?QZ(R6dlcWfBOB8{u4byVnahiL#N)qc#fa5 zPwv_KHJ;J){XU6xvdo)%&G&}lN8uo$B^Nqe*qZCI znLFP}%FLZIX_Aok1(Pds_J3ZR{%R-`UTm4hz+gB3{D!Sl)7}L;eeSHiSs$v|n4#U( z*DrXfcwfwnvW408X5GF^16Hm6x0C1-K(_ng|9 zPBy7&HnOE zz3a-F>v1|IU*%4GFG%F|{a37R_-O8xibAaoho+zT`c<6mXV>xNADFkCE>Ec~*ZBAC zpWWj}cG|n=?D~1MkoUTl=#~t&!Vh0!XP!GfJ@1T(76EZ`;^;+c?;kd?LSV8VxQ z-^vOLU*6uXKl$X7j}=d!KFz+q?(K^=Po8`+VE_8@6w?lHINf0&CW+c{kNW_oJru-njK)t9{ji-Crhv zT2Gn*tFQ8~E#AGjB1Kj>nXA=l@x^z)!eYG7d`a7UGs8rx*DdBSXw8sZhl9cd4;5|g z)w|D4&@KFW@6@R-7o~|F(swb}edXNFw=!haJH96; zm4rHzkN3WQ{NTdfMuirES6g*H-m7M?sQIzsV1k5c)|J@!)0eGZlU zMdinv1e{h}-*myUwz|67!-J#K<y5OD<>s#4_`2T6T8!8p#F$rx%@@F8JI(m|}Fdw)y6T6+x07WjfWfL>VM*XJyZR zsWWZvSLJzr(+lTW`F!S3Y?)_r`s^3;c%e0+bF3>rahaOcov>Hsy1oASvi$X>l3!nO zJ6;1VaLs*ta6x!{=f_gUwXg1+ocw(KiXMh->+GD{cplzazA15f;XD6YP36Z+q#EAY z8B}>FtT-1R^i@*g$lv%^%E_RWSYMVz<}GXQv)sGPNIm)cJmu?e4}I@R`Mdcbs1i{N zKECFD3e$@p?VM5TpQNOi@A&m&(*lFvw~MDPi|llc_);zRU|Zok_m8iyOE2BV%p9SW z8J9R=`|^KIWo{Q8@*AapI;KyYH?Qu~lauFkwZqrdJlLt+BH+~D>Y84)`R1B+J3<^k zc7FSp{eR=C7lkqbb7PFkufG43-D`F2$WG<6q5IW*BSVv~TzU0(|BNKF*=G~j78JK1 z-EXnVe)YybFS1UaeDvy{TzLJA-6{LIB9g^)6|kGPmdTyPe)KakszBIlojlzxH_Kh8iArhLH5S>wP!uQ&mD&2W`E1%WTb^9kz?- z=w+|^`AhZKpK|kS49Oo(zu#lMCiUN?U911cNQyq zrOh9OfV&UQe_kx^-(}sld&0>S89w*harMt`Y>d**b4ry@WJzqO z_qz4Bx4u?lxKZ$;WWz&Fn>W5{)$1F#>6%_u6MlbeXU^SSruO#sR#v|bigSSqv*X8$ zjQ8Hm$qNdNS(%mgIkrPh!e+&u4L`WtTNwx^Fz-Dv%|=D-@3Z@ov>OnYm2(M-`S<3h)CW$w+hORUoOu3Nh^ zGWqmI^@%L&b);UiGB9-AwYK7miw#YCYjx${{4MVuJ^J+L^Z9bm&pUeh1)N@ZZocEg z&#+4S`PO&mRrgChcWUJ7Z+l<2PS)a1?&CJgn`sKSD*6O|>^1!7^=ZmSnQ5iF52nB9 zwcL9%X8!(1bDdwW3{n3#fipPn<#FZxBGoldvmb|FW|-r)M|k5llULYEx~yw zaq^-$zi-TP_PH%~Cek$3ZPEYm{NDSC+z$+1+zpo%sjQBZ-rs&F&Hl&UnT%i9eI9_9 z_f%cd*&>w}78d5=abmK@gz&PQ$M=N(Z@(vZZcn*<^5Lm_@7J%F{PO9^!ni5!Qn3^5 zl1*!Vl{Q^IT>8AgB6@q?T(jI;%CanqEdo^))2x@jk6^8TbJ!^658JHR6W?W{vXu&% znk<=ZJo=>=?;6|itdXzMp99+EP<2ViC*UI4K^XmUqT3hda*Z0)Z zP^vd*-=?aBSPQZL*s0t9K5dtr}_5W`kBR zDSp|1xcdlbJ4QaNel-BO&1tVB+C(q3UgLqxr^08NL7n%O0Geo4E-h#HADfz*`t<43 zsI}X6GducAPxL4$F6QRq+Esk{>GN~~-Z6b>9cx^y?Qqb)<)uXllQaiEH#k(qth z?%n0(IxjM_Gc!+~J!>k#qcm|v@$ZMq?o!fHhYlakG>Ixd`pw{-s6E3Rea)?#H-CO{ zT2-*~uF!4gtel*Ei*|4^#7?TMt^J$7|L?Ph4-E?*I4okF-*ho!Psz(m`TPHhNlV{e z?mzz>AA6+LnJ;%2Z`?TX{Bv$lv*X6yjSH5aJ$aIop{uKF*Ou@TPfwmaDZ+L1P`x(D zHVNM}`}zME(l+1xbLDXr%e%aFRn3m8FPCQK=jW#zNC*lFipkkCSXf%F3|aN<+qZXo zEMFOByxiS>GiO=QO0~%+KmA{@;JDxV>$h**xUZ&57 zQ~&i|hRLLpDtBdP$}x1fC^cSS_G|P|iTbpPd6UMBm%At5{1Xs7{}#7pC0Cx$8HQhz zIUjrW*Gt!a-Z{DQY#DPKOW{fXhXuB0o&R|)P+#T#M?}ZoDaG>N# z!dce4G95o3nuN@=4vkn@d*WXIyL#FEJ425SLnDRT?|=Ar?h<=Rn3w(U55HHnbMBk{=ly=s@9NX*_Lt4xvh%V0 z+f#S;-hY2qH@9BLdG^_7_vR(b-GBZirS$vrmMR|aIhX%`a=tZPJ1pSMOP=a~Q(EKu zxYL5=AHPt$`ta{et#eCkHz$1k9_bY*^E;kL>HfD%P7!&BbrC*X&N(Q2hRMllD~Kgplkn2MWF#O8KU3KDi?I$L>E_$-6%u`yu7`S)wkD0U2gWJ zMXR#&u4iv?xL}&0`OQbj#LU!cht+JKU&m(c?>;|sjpny^wRhe23HZKFUcIa6VV4)T zL)zD`Ny4+TUYW4fZgyk$`^&cL788TR?b6`;)5~*ekGg(+{^(}@8Rg~realya13_Tz z+q=K5w#Ehv&Yg3^B&pkLsbPWo@(K%yQs45QIV<1Q?bA86|3|0orqk2)%lEa;_FMk_ z{r&&f{Qs}pUGgW)=8)l;wabmKor(W?{YtO4I@g^%)9q#<@oNjOl=h@%tluA2dv?{) z1QWYU|3Ca!`q#cFeEJ-lnmsS1F3$4Vn#SKFW!d1oeZ_tkwaG6T?OTr(pMI`)YR`gA z%L3-qEM8V?p}lDR+u%4)b%B4AKbw46A93Y>yt(0zVDa3_(lr5v7Nw8B|2Mz!{brZV z)dhl1)@wI?nA7x>>-qUijRMbwOxGRHALqzRz4>ZRE_*gZgx$l#KMP*`|8(WR2Tp$R zovZ4tm+iS~f9GS;y@|y}%l!SnWF z)2Hd@R+~t*dhs?cUe*d>CzUH|jnpL@J`#e2Jk`tLJr)84;%c1vY;3bUt&(vt^V zoEFrm3+!r9vR zHdtdKiw%PdpOx2%n-ruB+2%394{y855N&YzFZ zcfb7?a9dA&QegOuVWzD<4KM4!aGk0#&jo4du z&0;OXo!F^2n@uZn&fGaJZukTqp0t%o;N;V~b*m1=R<@NEr|U#G zguefAT03{M{l8eJd*adOzEt`>+b)r$Dz-UTQbafR{M*^To<}CE)3|p#Gw93K65qJL z3zqJvy7a1@*}wkd`Xug%UAn9i|bSEsM9R*Rkc{b+lx-1~`654-dK@Ah*DdzWsbY|Ne%=!=dv_eHBmLILkZt@56sS zg_XBYS$}!3Ekr~#d~1YNR@U5EALne={XcurvtnCO(Of~t>o&gc>{r)EsO)+Yxze-n z;I?0jkDt!s`IW+(yUyzJE4D_h69UT;rDp$XC~VO3aEv}{Vt+(pwQ!X5>)UJe!WMEH zvT$0zTDxlphw6oAVa6{?jCL*Gck&IRlep!v1v~lHzYWzBWnbW3TX_3$xil;Lz1sB} z>r?)`vaZxUdjH9FtHz#v#qTT}i!-Ml_1qdQGr^#|v}wiC6+3nub@IL{xYGEMZfWVX zb4)B@~uwtqjS~yYne@HpdSA&9@F8KfWW1Z_2z(CB`&6 zp_B;@mH!&^8urXRt|V@2@cEH?=bUGUnr|++dMxJ0wyy^owK^B>fA;mPuV8o2x4+W4 zd+gohZtpp2lbkqfUFG>>=U(vFxyqfmlNBpeRC#H$j(1>4aAsbsrPkx~{Su-V0)AXG z^#9amZ~v(NS+D8(zrjV~x)R$z?7V7x*8Sd}C6m%{5W3y|94R4p;e~+eqSDkva)%vdaJkL$$QHz8TX!>>;GbfWxAXMf@||5xR9;NIfUX&oD5%}z})aVy!f^XaAR+52DqT)({X3F>-q_c)=1lC`UlPi1zg5`YbuWMNRx8l2SNV?I`s2RABBj2b z^CwO$%={}UDJh=4J8u4u^vqeJzc~+?2nzntn_dCGP(zwiY=TjneOUtV%b!Trtp=Po)vd3XEYpo? zx#uQN|M!{|!L={HE!da-XUdX> z1=V5d)1J${Txq(~`LdYZHm$XfXTN(}IX!ey$IkM%&67nKo+Us1z0c;(h0KMew=}(< z`SuvQ9J(}L^_HJ}!@1z&znAa*@@3Wvz0`-doK?^Na8)@Mxiu}-L-_Ce-mQK||MvgM zR9?&{_sQjMUitq@Zs%jCT}^zMQy075GAt6*z4WSM+a)tA9R&x)2N~OspT3dx@8_{_ z*-uWhgdCWu`+V!;chQ?vI1*0&z2vah>zUE3&UbH$A2*A-#QtM{|9+$Y{&G(j z`>SNjwc`05ybysRs{mdDYy*!RRlwEV&d$N>$-2S_+ljd#P ztDmpyTUGKl$0Bn7+V?ivL7B`?m1c=~dR%knU#Iuvn}JTuk6pX(uKCLSc*c(}Pi|gb zw`)%~uDo&5Fnb^dGn>;C?FU3oU<*(Kq0EiTSVheJKP7o{-2UAAkM zpQ7R;o4f(cqZ2?bbQ<|67)@Gi<+IJ9YBXyZ4HZu1|aOJ3dI(`tQE@W$quN zzt!*geSh96g_XxI-nuzsiiw$uUhT)OqmFC8H0}?zcDxo7wPE#&gZKQ83bi=|UbwPb z{OFcjR;!ert(OS?@qE^& zJ^brXTz|VFL&hw&50^|_FY9!01}#@&a~grPQ7dj4Iln4j18yu7qVH(H11FyjW3x00U{YMQ33_AqRS`1ANOH=BEk z=|s*+&FtT57kBfsxIKMuHF@)U>ACN|2!8AeEjAIYKIJd-J$*Lcd<*@Vddh!}vvp=H z-@JTrtgyLxWZjp7pO=0gXBMbYd~OlBU0tADE-X&2_Qs-#XOTXVhr`J)?j z7)~4LoZi^{f0GXPl&y=OeR(;rZSmCPOLDv=&t{eyUWf?D^yUg}Zcu;l(V{Jpqj18x zxz#H6AxF1~TxVZ)SJ`AMUthweHxB~T4)4(2$^NZm*P+Rem?foExwt18EwcRo)#2IU znVaM8None&TYkIUY{YZANal1^%=4(%tNb>HE?ujbx%t4AQ=4>@xjBP3Z!?zNE3#qD zqeJ)hubs)rFm36YSkvYH-yKee*WWgNxqY^J$-e)dj@9u_OZEpH5dPpOvh&Hh&-Hg= zjNUHfv5&Jny>ZrwkN0Dvd*f=>ty!t9YA0Z^aDsi%{0Q+*7k`_NM;=_CF8A51ewk(8 z?rCkac9)!A{#*OW@z0FEs&{QVuQTa0E0Z0&&eMV&kxLtdxmpiY*i5M0+}m#yFOQb)jPpM%CUftq;% z6+e#(9bI<(+LL*c+OwXr?cCulYM6O#@5_JJUp|%zuNRG&c6o`-&u4#=cW>HWTl{X% zb?IZ9ey!xU{rT*dVGu*Zt~=XbdCZJBvB_!SgjYAG?_3*L`Te$aTKUsG+cqD1E7;-L z#ICe4L`O`>fuW$qDD~z0Yxxl}8oM_9U%fBLLYbd;zQ5Yv1ruD)+uizb>U4dnjY;yH zJ-O9sX(92om78r@zc}Zt@s2Xh{T;nN<(??>trr(&UYwi1cao)R)O|_GzZ>TLeC5?1 zkfFYeCFTA3d(SLh=NMQXy)1O{*q++?Q7Lyme%kgTQ{3vM;}Tw3;cEqD@oC1zd-mww z;#kmeZI*fMrvAKbRl;9a20xko|D*j(x8IxxFU|LDS+&ZW|Di$d|M%C|c*p&Ey{T}z z{QSojp$}RtjiWd7r-w2vSznd))5z*~L71w_|9{(qd!Co}KHpSamdbkMPt7trJGZ=B z#RkjymdvtF^XKsN`{{h)_Uz4@RxyegYKI-a8eSY6Zet8~If# z`O~H?1&ak87C!S-zPzj{Vnv^K5BDVVTetcCTc1{9{Hwe_Qsk*c?$f69Wj-J3X3U)$ z$`bVVOe^>0$6r|{a9*B%esh}q&DpBg_2Uff_l0TkPwI}8Yw76>*1BRdEw%O23y)?^ zkb5=$JQn|_G&3b~nyT}0HTB-$jRGd7y^}v35#Ki5ZQ0VF(#_VlKl{DQvV1AO|CRXX zugjNwTCifu(UY@_Hf<8A`nyN+*a8KmiQGb)bgUyjKZv)@d?KqDY8e^H&^6`$o=qC_ zT2^pxt>kd6`E{t(IQh?V9k1NCv*)f!l64HeZ1MNPbup0jNk@;&wic>d`ZDDDv@d_3 zE}izV{??~oUj!Q3>TUmcDehLX2bXU-x4&|XPLMCRrjn{ zy}sOWWzSr@i<9bqbW|6uxp+TtN_^H8MuAlxYuO+CUZ@)=krEPGIW_w9>r%msRdZQV z4mOq~E;l!d)eZUN>>58`LxVSrv7_W8XWM*>_V2IqyCSANw&+WC4iY<`dE(C(`I&v~ zLBdO`x9?xXB*lRkiEMkJ9H|Ag8`R-GdmsuR&fx_nM2N8T04?+?H zH{EOgf5)vg(?N1tQF_*u(C1PK*KMWj=H1QPf7A3&K=9<5OdWk!8aJ=sWN?0w?;htn zd)`-U_E@NJa>Epsz+7g_x9cP>-K?r8Sa$EhDQ+TC`@vhHa-WR@L}Fm-XMfZNeGtH6;d2t$IdkKDTaiPJXVU$#`a2a;554 zKLO2>iG~+1UYxk=74yugQ)a0g4pKX=xh8e`xf83mW(ZH_N!tDLf#wV|-)yNYw>VEv z&i>=ve0*|6Z~LUz)jofme@Nb3_xpas-TA+sY=3{?eOz4Xlshy2_A@1I{PE=E?0C(Ov%St5;I*;@G6P{SF_wa`5$?YNh3hCP#0C)~?!^?jR{6_d;As{Ebym z$*p&6GvjAm%rI%oS{L4~?GG4R$e9lJ!t+{P1=2!1tbMb6G zY~u6wW|%pHz^W4lpZ-)TopFfTl@l~K%qRNH6q5+yqp9iX@BjY&`~MrC@BY1N_3kTfi{ms4zi*vy zRq7@(+e+-!r*5fO1_k3~s$SJ=U+u8io3UWy1Ct|C3x8c%Igc@bt)2bUQwD(qlT*K? zrPsc)P@bc;vCrT1+tn#kLdq){rYzJfUl#Yb++A6)hn^#HgQ@p?OfWhQ@?0+gQEnm9SQl@Wq=xqZ{k*?(9eTkPA zKm73U-fuxcqr!{-Q~!Qgf0aXkgC%XVrJCBYw9UPLE;e#>bnR)}9o~LyMgD_#`IT8) zZ>1Os9uZi4is$f;e?ew=Kqz!-|`Ilk7sYa`E--~w}&5p{`vQ>Zu;q^AzHPS3Ukgs-yO5=-@m#Tdv@OA zZ|_yt3zwFaef#p|$B)?47kUpo{&*#;G$iB-zg&J!&Y81kuf8m?`}cfyYGnIi!|HEu zPXF$m9d-N6G`pov#~%OuqItpOY++1D%8s5taW{fRO5fbrIB%ZZ&O6KRuPKnZe*eC_ zgv5+#)1E#4ZsE3%VX~Z}e9`JXKPP*rINuYSn>d3}y)@C)dHykB!4?-Im+dUBfo8MM zPM7}D{G(={*V02X+z&T;g0@xnrrF&++y6Nh36_s64Vw%^yzj^zOHPJg~=23oh;vW`1G=kk56J9*{jEjMpHf39d>U9)$K zfYahO7ahKf>?faYO3dr`{6GJ5m1Wa}7WWmcHFH861e`KjzF5Dko9?bB|L&XJ+%Nm= zLe4X^honI!)q1ckAEXBKJ%l9~`iS~BAcioS_EOe7|;!rg4v6q`=Hw)xMfn9oe z3zw8%eX?)=vxUp~O=spma6Bja=i$rTx8@%hI22nhbnHq!_A=5v|L4oi-=?kFs~(jm zIi)sj^VziGfTj;E9Ltt(U3>Z&>x5NJTe%pVmR_E)W$o!l3=I5lH}Gv}iCSA0wTq>3 zWAfk5ecZRZc^@xg?K}9_!jf@izl?K@)cB!F~OEo5ag(YHRDvKAt$H zyR>X7Tb9=E_fdx23KjourJg){-0sFS?gu#ryIE_z*IqWzKU1?qr{Hh9e{0>>Z+$_t z!(SL=r>~dJzPI^(i?6f?Ux|sU-IrrE`L+J(H`n#sSuLJoZW3a+r0uht?e>r7)`-Wy zjQ%#=_w=#5Z%#J|IC1bMn)FB(!x;j6&E#47l?34ZdcdI z{rGBYCRf8(n{8_hj*G2PKB^F+b+Y@sP}U{6ic1s1e%&GqeaPd#e7w2XQG`afSjv+)cpB2`M zC@+q^*?H;GoxiNl-hcai*Ii(WTl1FftM&;qG^mSl@8tfyb3<>yO56C_4NDZN@86qj zI_v29KjAvpbJl79J>C4>?yIY5`OMi>tpZLQclWi;cW-(=uR8C@DJivC%UGEjBXstC zIq0@L@uN*M3&WSFMeDrfrVFHYaPWt%Os$$^`1brs{nPeITr>V3N?utTTDkM5dh5sU zOWdTLott|u2G+H-s~%2T9K!5pl>6XSI>{Pnf5|Hf$6yFF;;Co-IK3VS(zF=TzXzyb>vVi zxxM)&d&;Hvd9LRle`I50b5WWYVBr#Odp>V_e?sozq|G-ungX<@9?mr3pAr4N=7W7} zE`#j14bS6h(}GTLgjk$-`l-W3DMlHzAe|#S^ZnQFzw<0(?B?IUdslbzNfn`!Po?i0 zJ^m7|6!zkh*xKHu3=V=*O^OUbh2LGF8uOR!mI8VLo`;i!4(r)HXA3XY_y^n<7fA{E{`MN2$85JKiGVFdQ=*00;?@bw~oOCnx z0Ud&xVeZxyTfg%hXEKQ1_;!=O| zNsGSMFJ2s&1}X(hKnGtf4dUG?qW9xj)(#F(N{_240j+cwaJtT_22x`(EAbL&P0nIT f>Tz%WXFmJ7&|vfOzpoh>7#KWV{an^LB{Ts5HR(~e diff --git a/doc/qtcreator.qdoc b/doc/qtcreator.qdoc index ea8ddca2157..7f11530b0bf 100644 --- a/doc/qtcreator.qdoc +++ b/doc/qtcreator.qdoc @@ -4514,7 +4514,7 @@ The tool tip of the target selector shows more details about the actual device that will be used when you run your application. - \o Start the debugging agent (CODA or App TRK) application on your device. + \o Start the CODA debugging agent on the device. \note If you use CODA over an USB connection, it starts up automatically when you connect the device to the development PC. @@ -4537,7 +4537,7 @@ \o The Nokia USB drivers that come with \e{PC Suite} or \e{Ovi Suite} have been installed on the development PC. \o The device is connected through USB cable in \e{PC Suite} mode. - \o The debugging agent (App TRK or CODA) is running on the device with + \o The CODA debugging agent is running on the device with the status \e connected. \note If you use the CODA debugging agent over WLAN, you must enter @@ -6072,7 +6072,7 @@ debugging agent on the device. For more information, see \l{Connecting Symbian Devices}. - \o Start the debugging agent, App TRK or CODA, on the device. + \o Start the CODA debugging agent on the device. \o Click the \gui {Target Selector} and select \gui {Symbian Device}. diff --git a/doc/symbiandev.qdoc b/doc/symbiandev.qdoc index 3070c4be189..43a2ca7ae9d 100644 --- a/doc/symbiandev.qdoc +++ b/doc/symbiandev.qdoc @@ -51,8 +51,8 @@ the standard methods for installing applications. To debug applications on Symbian devices by using the Qt Creator \gui Debug - mode, you must install an on-device debugging agent on the device. You have - a choice between App TRK and CODA debugging agents. For more information, + mode, you must install the CODA on-device debugging agent on the device. + For more information, see \if defined(qcmanual) \l{Using On-device Debugging Agents}. @@ -78,10 +78,10 @@ following: \list \o The Nokia USB drivers that come with \e{PC Suite} or \e{Ovi Suite} - \o An on-device debugging agent, \e {App TRK} or \e CODA, installed on + \o The \e CODA on-device debugging agent installed on the device - \o \e Qt installed on the device - \o \e {Qt Mobility APIs} installed on the device, if you use them in + \o \e {Qt libraries} installed on the device + \o \e {Qt Mobility libraries} installed on the device, if you use them in applications \o \e {QtWebKit} installed on the device, if you use web functionality in applications @@ -127,11 +127,6 @@ and follow the instructions on the screen to install Qt mobility libraries to the device. - \o Choose \gui {Start > Qt SDK > Symbian^3 Qt 4.7.3 > Install TRK - (Debug Agent) for Symbian^3 on Device} and follow the - instructions on the screen to install - the App TRK debugging agent to the device. - \o Choose \gui {Start > Qt SDK > Symbian^3 Qt 4.7.3 > Install QtWebKit for for Qt 4.7.3 on Symbian^3 Device} and follow the instructions on the screen to install QtWebKit to the device. @@ -156,11 +151,6 @@ for Symbian^1 on Device} and follow the instructions on the screen to install Qt mobility libraries to the device. - \o Choose \gui {Start > Qt SDK > Symbian^1 Qt 4.7.3 > Install TRK - (Debug Agent)} for the type of the connected device and follow the - instructions on the screen to install - the App TRK debugging agent to the device. - \o Choose \gui {Start > Qt SDK > Symbian^1 Qt 4.7.3 > Install QtWebKit for for Qt 4.7.3 on Symbian^1 Device} and follow the instructions on the screen to install QtWebKit to the device. @@ -174,43 +164,26 @@ \if defined(qcmanual) \section1 Using On-device Debugging Agents - CODA is a new on-device debugging agent that will eventually replace App TRK. - You can choose which debugging agent to use in the \gui {Run Settings} for - the project. - - CODA offers the following benefits: + Support for the App TRK on-device debugging agent has been removed from + Qt Creator 2.3. Only CODA is supported. It offers the following benefits: \list - \o Extended error information + \o Extensive error information \o Debugging over WLAN - \o Extended information about the device + \o Extensive information about the device \endlist - CODA differs from App TRK in the following ways: - - \list - - \o CODA does not support debugging over a Bluetooth connection. - - \o CODA supports only Symbian^1 and Symbian^3 devices. It does not - support S60 3rd Edition devices. - - \endlist + \note CODA does not support debugging over a Bluetooth connection. \section2 Installing Debugging Agents You can download CODA from the \l{http://tools.ext.nokia.com/coda/}{CODA download server}. - The \QSDK installation program creates a shortcut for installing - App TRK on Symbian devices, but you can also download and install it - separately from the - \l{http://tools.ext.nokia.com/trk/}{App TRK download server}. - \section1 Adding Symbian Platform SDKs \QSDK contains all the tools you need for developing Qt applications for @@ -259,9 +232,7 @@ The tool tip of the target selector shows more details about the actual device that will be used when you run your application. - \o Start the debugging application, App TRK or CODA, on the device and - deny the - Bluetooth connection. + \o Start the CODA debugging agent on the device. \o Select \gui Options to select USB as connection type. From 31817e59dc3e7efa7b9a08a64cd740e1cc4d2bac Mon Sep 17 00:00:00 2001 From: Pawel Polanski Date: Thu, 30 Jun 2011 17:07:01 +0200 Subject: [PATCH 041/143] Symbian: Creator crash when info is downloaded from device MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit and there is a change in symbian devices connected to the PC via the USB Change-Id: Ib57b284978ca42940254c52d5cb4e394c6fd6ceb Reviewed-on: http://codereview.qt.nokia.com/993 Reviewed-by: Qt Sanity Bot Reviewed-by: Paweł Polański (cherry picked from commit 445959eb23dc6f293afc543d4e2696c4f5ad7480) --- .../qt-s60/s60deployconfigurationwidget.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/plugins/qt4projectmanager/qt-s60/s60deployconfigurationwidget.cpp b/src/plugins/qt4projectmanager/qt-s60/s60deployconfigurationwidget.cpp index a648335b0ed..c1e748f5559 100644 --- a/src/plugins/qt4projectmanager/qt-s60/s60deployconfigurationwidget.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/s60deployconfigurationwidget.cpp @@ -481,7 +481,8 @@ void S60DeployConfigurationWidget::codaEvent(const Coda::CodaEvent &event) switch (event.type()) { case Coda::CodaEvent::LocatorHello: // Commands accepted now codaIncreaseProgress(); - m_codaInfoDevice->sendSymbianOsDataGetQtVersionCommand(Coda::CodaCallback(this, &S60DeployConfigurationWidget::getQtVersionCommandResult)); + if (m_codaInfoDevice) + m_codaInfoDevice->sendSymbianOsDataGetQtVersionCommand(Coda::CodaCallback(this, &S60DeployConfigurationWidget::getQtVersionCommandResult)); break; default: break; @@ -570,7 +571,8 @@ void S60DeployConfigurationWidget::getQtVersionCommandResult(const Coda::CodaCom } } codaIncreaseProgress(); - m_codaInfoDevice->sendSymbianOsDataGetRomInfoCommand(Coda::CodaCallback(this, &S60DeployConfigurationWidget::getRomInfoResult)); + if (m_codaInfoDevice) + m_codaInfoDevice->sendSymbianOsDataGetRomInfoCommand(Coda::CodaCallback(this, &S60DeployConfigurationWidget::getRomInfoResult)); } void S60DeployConfigurationWidget::getRomInfoResult(const Coda::CodaCommandResult &result) @@ -595,7 +597,8 @@ void S60DeployConfigurationWidget::getRomInfoResult(const Coda::CodaCommandResul packagesOfInterest.append(CODA_UID); packagesOfInterest.append(QTMOBILITY_UID); packagesOfInterest.append(QTCOMPONENTS_UID); - m_codaInfoDevice->sendSymbianInstallGetPackageInfoCommand(Coda::CodaCallback(this, &S60DeployConfigurationWidget::getInstalledPackagesResult), packagesOfInterest); + if (m_codaInfoDevice) + m_codaInfoDevice->sendSymbianInstallGetPackageInfoCommand(Coda::CodaCallback(this, &S60DeployConfigurationWidget::getInstalledPackagesResult), packagesOfInterest); } void S60DeployConfigurationWidget::getInstalledPackagesResult(const Coda::CodaCommandResult &result) @@ -649,8 +652,9 @@ void S60DeployConfigurationWidget::getInstalledPackagesResult(const Coda::CodaCo QStringList keys; keys << QLatin1String("EDisplayXPixels"); keys << QLatin1String("EDisplayYPixels"); - //keys << "EMemoryRAMFree"; - m_codaInfoDevice->sendSymbianOsDataGetHalInfoCommand(Coda::CodaCallback(this, &S60DeployConfigurationWidget::getHalResult), keys); + + if (m_codaInfoDevice) + m_codaInfoDevice->sendSymbianOsDataGetHalInfoCommand(Coda::CodaCallback(this, &S60DeployConfigurationWidget::getHalResult), keys); } void S60DeployConfigurationWidget::getHalResult(const Coda::CodaCommandResult &result) From d6c376e406260e0a71476474a6250029b9686c57 Mon Sep 17 00:00:00 2001 From: Daniel Molkentin Date: Fri, 1 Jul 2011 16:29:55 +0200 Subject: [PATCH 042/143] WelcomeScreen: Use QUrl for page location Silences warning from QtDeclarative in Qt 4.8 Change-Id: Iabab0988408b040fd590ebccb24f7fb59614ac8b Reviewed-on: http://codereview.qt.nokia.com/1014 Reviewed-by: Qt Sanity Bot Reviewed-by: Friedemann Kleint --- src/libs/utils/iwelcomepage.h | 5 +++-- src/plugins/projectexplorer/projectwelcomepage.h | 2 +- src/plugins/qtsupport/gettingstartedwelcomepage.h | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/libs/utils/iwelcomepage.h b/src/libs/utils/iwelcomepage.h index d2dd6129a1e..4363beb78e6 100644 --- a/src/libs/utils/iwelcomepage.h +++ b/src/libs/utils/iwelcomepage.h @@ -36,6 +36,7 @@ #include #include +#include #include "utils_global.h" @@ -52,14 +53,14 @@ class QTCREATOR_UTILS_EXPORT IWelcomePage : public QObject Q_OBJECT Q_PROPERTY(QString title READ title CONSTANT) - Q_PROPERTY(QString pageLocation READ pageLocation CONSTANT) + Q_PROPERTY(QUrl pageLocation READ pageLocation CONSTANT) Q_PROPERTY(int priority READ priority CONSTANT) public: IWelcomePage(); virtual ~IWelcomePage(); - virtual QString pageLocation() const = 0; + virtual QUrl pageLocation() const = 0; virtual QString title() const = 0; virtual int priority() const { return 0; } virtual void facilitateQml(QDeclarativeEngine *) {} diff --git a/src/plugins/projectexplorer/projectwelcomepage.h b/src/plugins/projectexplorer/projectwelcomepage.h index 5b3d2da2cb0..f63009f8988 100644 --- a/src/plugins/projectexplorer/projectwelcomepage.h +++ b/src/plugins/projectexplorer/projectwelcomepage.h @@ -103,7 +103,7 @@ public: ProjectWelcomePage(); void facilitateQml(QDeclarativeEngine *engine); - QString pageLocation() const { return Core::ICore::instance()->resourcePath() + QLatin1String("/welcomescreen/develop.qml"); } + QUrl pageLocation() const { return QUrl::fromLocalFile(Core::ICore::instance()->resourcePath() + QLatin1String("/welcomescreen/develop.qml")); } QWidget *page() { return 0; } QString title() const { return tr("Develop"); } int priority() const { return 20; } diff --git a/src/plugins/qtsupport/gettingstartedwelcomepage.h b/src/plugins/qtsupport/gettingstartedwelcomepage.h index 1c421d024ae..e77fdea3784 100644 --- a/src/plugins/qtsupport/gettingstartedwelcomepage.h +++ b/src/plugins/qtsupport/gettingstartedwelcomepage.h @@ -56,7 +56,7 @@ class GettingStartedWelcomePage : public Utils::IWelcomePage public: GettingStartedWelcomePage(); - QString pageLocation() const { return Core::ICore::instance()->resourcePath() + QLatin1String("/welcomescreen/gettingstarted.qml"); } + QUrl pageLocation() const { return QUrl::fromLocalFile(Core::ICore::instance()->resourcePath() + QLatin1String("/welcomescreen/gettingstarted.qml")); } QString title() const { return tr("Getting Started");} int priority() const { return 10; } void facilitateQml(QDeclarativeEngine *); From 050fdf9d5204558af9329db2b656250f3d6fe98b Mon Sep 17 00:00:00 2001 From: con Date: Tue, 28 Jun 2011 15:28:29 +0200 Subject: [PATCH 043/143] Set focus to variable chooser when it opens. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Task-number: QTCREATORBUG-4307 Change-Id: I8dff162c01ced12f1b715ce6c803f7b611625abf Reviewed-on: http://codereview.qt.nokia.com/918 Reviewed-by: Qt Sanity Bot Reviewed-by: Robert Löhning --- src/plugins/coreplugin/variablechooser.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/plugins/coreplugin/variablechooser.cpp b/src/plugins/coreplugin/variablechooser.cpp index ec8e45f3d57..09528d0654a 100644 --- a/src/plugins/coreplugin/variablechooser.cpp +++ b/src/plugins/coreplugin/variablechooser.cpp @@ -52,6 +52,7 @@ VariableChooser::VariableChooser(QWidget *parent) : ui->variableList->setAttribute(Qt::WA_MacShowFocusRect, false); ui->variableDescription->setAttribute(Qt::WA_MacSmallSize); setWindowFlags(Qt::Tool | Qt::WindowStaysOnTopHint); + setFocusPolicy(Qt::StrongFocus); setFocusProxy(ui->variableList); VariableManager *vm = VariableManager::instance(); @@ -155,6 +156,8 @@ void VariableChooser::updatePositionAndShow() move(parentCenter.x() - width()/2, parentCenter.y() - height()/2); } show(); + raise(); + activateWindow(); } void VariableChooser::handleItemActivated(QListWidgetItem *item) From 5de373a9747b417d39cd67590242282f340ae1d1 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Fri, 1 Jul 2011 16:22:38 +0200 Subject: [PATCH 044/143] Delay creation of the tag browser. Change-Id: I7d82d31cb391e692ee78d6b7ac916bdbfe42978e Reviewed-on: http://codereview.qt.nokia.com/1015 Reviewed-by: Qt Sanity Bot Reviewed-by: Friedemann Kleint Reviewed-by: Daniel Molkentin --- .../welcomescreen/widgets/ExampleBrowser.qml | 133 +---------------- .../welcomescreen/widgets/TagBrowser.qml | 141 ++++++++++++++++++ 2 files changed, 147 insertions(+), 127 deletions(-) create mode 100644 share/qtcreator/welcomescreen/widgets/TagBrowser.qml diff --git a/share/qtcreator/welcomescreen/widgets/ExampleBrowser.qml b/share/qtcreator/welcomescreen/widgets/ExampleBrowser.qml index 32ce81e8f52..a2574a46f97 100644 --- a/share/qtcreator/welcomescreen/widgets/ExampleBrowser.qml +++ b/share/qtcreator/welcomescreen/widgets/ExampleBrowser.qml @@ -8,16 +8,6 @@ Item { width: parent.width height: lineEdit.height - Connections { - target: gettingStarted - onTagsUpdated: { - var tagList = gettingStarted.tagList() - for (var tag in tagList) { - tagsTestModel.append({ "text": tagList[tag], "value": tagList[tag] }); - } - } - } - Components.TextField { Behavior on width { NumberAnimation{} } placeholderText: !checkBox.checked ? qsTr("Search in Tutorials") : qsTr("Search in Tutorials, Examples and Demos") @@ -27,10 +17,6 @@ Item { onTextChanged: examplesModel.filterRegExp = RegExp('.*'+text, "im") } - ListModel { - id: tagsTestModel - } - Components.CheckBox { id: checkBox text: qsTr("Show Examples and Demos") @@ -52,7 +38,10 @@ Item { anchors.verticalCenter: lineEdit.verticalCenter visible: !examplesModel.showTutorialsOnly text: tag === "" ? qsTr("Filter by Tag") : qsTr("Tag Filter: %1").arg(tag) - onClicked: tagChooser.visible = !tagChooser.visible + onClicked: { + tagBrowserLoader.source = "TagBrowser.qml" + tagBrowserLoader.item.visible = true + } } } Components.ScrollArea { @@ -70,118 +59,8 @@ Item { } } - Rectangle { - id: tagChooser + Loader { + id: tagBrowserLoader anchors.fill: parent - color: "darkgrey" - visible: false - opacity: 0.95 - radius: 6 - MouseArea { anchors.fill: parent; hoverEnabled: true } // disable mouse on background - Text { - id: descr; - anchors.margins: 6; - color: "white"; - text: qsTr("Please choose a tag to filter for:"); - anchors.top: parent.top; - anchors.left: parent.left - font.bold: true - } - - Item { - width: rect.width - height: rect.height - - anchors.margins: 6; - anchors.top: parent.top; - anchors.right: parent.right - - Rectangle { - color: "red" - id: rect - radius: 4 - opacity: 0.3 - width: clearText.width+4 - height: clearText.height+4 - x: clearText.x-2 - y: clearText.y-2 - } - Text { id: clearText; text: qsTr("Clear"); color: "white"; anchors.centerIn: parent } - MouseArea { - id: mouseArea - anchors.fill: parent - hoverEnabled: true - onClicked: { - tagChooser.visible = false; - tagFilterButton.tag = ""; - } - } - } - - Flickable { - id: flickable - anchors.fill: parent - anchors.margins: 6 - anchors.topMargin: descr.height + anchors.margins*2 - contentHeight: flow.height - contentWidth: flow.width - flickableDirection: Flickable.VerticalFlick - clip: true - Flow { - width: tagChooser.width - id: flow - spacing: 6 - Repeater { - model: tagsTestModel - delegate: Item { - width: btnRect.width - height: btnRect.height - Rectangle { - id: btnRect - radius: 4 - opacity: 0 - width: text.width+4 - height: text.height+4 - x: text.x-2 - y: text.y-2 - } - Text { id: text; text: model.text; color: "white"; anchors.centerIn: parent } - MouseArea { - id: mouseArea - anchors.fill: parent - hoverEnabled: true - } - - states: [ - State { - name: "selected" - when: mouseArea.pressed - }, - State { - name: "hovered" - when: mouseArea.containsMouse - PropertyChanges { - target: btnRect - color: "darkblue" - opacity: 0.3 - } - } - ] - transitions: [ - Transition { - from: "hovered" - to: "selected" - ParallelAnimation { - PropertyAction { target: tagFilterButton; property: "tag"; value: model.value } - PropertyAction { target: tagChooser; property: "visible"; value: false } - ColorAnimation { to: "#00000000"; duration: 0 } - } - } - ] - } - } - } - - } } } diff --git a/share/qtcreator/welcomescreen/widgets/TagBrowser.qml b/share/qtcreator/welcomescreen/widgets/TagBrowser.qml new file mode 100644 index 00000000000..9b3dfa27934 --- /dev/null +++ b/share/qtcreator/welcomescreen/widgets/TagBrowser.qml @@ -0,0 +1,141 @@ +import QtQuick 1.0 + +Rectangle { + id: tagChooser + + anchors.fill: parent + color: "darkgrey" + opacity: 0.95 + radius: 6 + visible: false + + property bool needsUpdate: true; + + Connections { + target: gettingStarted + onTagsUpdated: needsUpdate = true + } + + onVisibleChanged: { + if (visible && needsUpdate) { + needsUpdate = false; + tagsModel.clear(); + var tagList = gettingStarted.tagList() + for (var tag in tagList) { + tagsModel.append({ "text": tagList[tag], "value": tagList[tag] }); + } + } + } + + ListModel { + id: tagsModel + } + + MouseArea { anchors.fill: parent; hoverEnabled: true } // disable mouse on background + Text { + id: descr; + anchors.margins: 6; + color: "white"; + text: qsTr("Please choose a tag to filter for:"); + anchors.top: parent.top; + anchors.left: parent.left + font.bold: true + } + + Item { + width: rect.width + height: rect.height + + anchors.margins: 6; + anchors.top: parent.top; + anchors.right: parent.right + + Rectangle { + color: "red" + id: rect + radius: 4 + opacity: 0.3 + width: clearText.width+4 + height: clearText.height+4 + x: clearText.x-2 + y: clearText.y-2 + } + Text { id: clearText; text: qsTr("Clear"); color: "white"; anchors.centerIn: parent } + MouseArea { + id: mouseArea + anchors.fill: parent + hoverEnabled: true + onClicked: { + tagChooser.visible = false; + tagFilterButton.tag = ""; + } + } + } + + Flickable { + id: flickable + anchors.fill: parent + anchors.margins: 6 + anchors.topMargin: descr.height + anchors.margins*2 + contentHeight: flow.height + contentWidth: flow.width + flickableDirection: Flickable.VerticalFlick + clip: true + Flow { + width: tagChooser.width + id: flow + spacing: 6 + Repeater { + id: tagsList + model: tagsModel + delegate: Item { + width: btnRect.width + height: btnRect.height + Rectangle { + id: btnRect + radius: 4 + opacity: 0 + width: text.width+4 + height: text.height+4 + x: text.x-2 + y: text.y-2 + } + Text { id: text; text: model.text; color: "white"; anchors.centerIn: parent } + MouseArea { + id: mouseArea + anchors.fill: parent + hoverEnabled: true + } + + states: [ + State { + name: "selected" + when: mouseArea.pressed + }, + State { + name: "hovered" + when: mouseArea.containsMouse + PropertyChanges { + target: btnRect + color: "darkblue" + opacity: 0.3 + } + } + ] + transitions: [ + Transition { + from: "hovered" + to: "selected" + ParallelAnimation { + PropertyAction { target: tagFilterButton; property: "tag"; value: model.value } + PropertyAction { target: tagChooser; property: "visible"; value: false } + ColorAnimation { to: "#00000000"; duration: 0 } + } + } + ] + } + } + } + + } +} From a5624a47a151ce322622b467d71c0149d409e324 Mon Sep 17 00:00:00 2001 From: Daniel Molkentin Date: Fri, 1 Jul 2011 18:28:56 +0200 Subject: [PATCH 045/143] WelcomeScreen Delay loading of ExamplesModel. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ...until the Help system is is initialized properly. Change-Id: I70b629d246f418629623f09de0d270bf355b71de Reviewed-on: http://codereview.qt.nokia.com/1021 Reviewed-by: Qt Sanity Bot Reviewed-by: Robert Löhning --- src/plugins/qtsupport/exampleslistmodel.cpp | 19 ++++++++++++++++++- src/plugins/qtsupport/exampleslistmodel.h | 18 ++++++++++++++++-- .../qtsupport/gettingstartedwelcomepage.h | 2 -- 3 files changed, 34 insertions(+), 5 deletions(-) diff --git a/src/plugins/qtsupport/exampleslistmodel.cpp b/src/plugins/qtsupport/exampleslistmodel.cpp index 68738065fbd..03a84f504b3 100644 --- a/src/plugins/qtsupport/exampleslistmodel.cpp +++ b/src/plugins/qtsupport/exampleslistmodel.cpp @@ -39,6 +39,7 @@ #include #include +#include #include #include @@ -67,7 +68,9 @@ ExamplesListModel::ExamplesListModel(QObject *parent) : setRoleNames(roleNames); connect(QtVersionManager::instance(), SIGNAL(updateExamples(QString,QString,QString)), - SLOT(readNewsItems(QString,QString,QString))); + SLOT(cacheExamplesPath(QString,QString,QString))); + connect(Core::HelpManager::instance(), SIGNAL(setupFinished()), + SLOT(helpInitialized())); } QList ExamplesListModel::parseExamples(QXmlStreamReader* reader, const QString& projectsOffset) @@ -337,6 +340,20 @@ QVariant ExamplesListModel::data(const QModelIndex &index, int role) const } +void ExamplesListModel::cacheExamplesPath(const QString &examplesPath, const QString &demosPath, const QString &sourcePath) +{ + m_cache = QMakePathCache(examplesPath, demosPath, sourcePath); +} + +void ExamplesListModel::helpInitialized() +{ + disconnect(this, SLOT(cacheExamplesPath(QString, QString, QString))); + connect(QtVersionManager::instance(), SIGNAL(updateExamples(QString,QString,QString)), + SLOT(readNewsItems(QString,QString,QString))); + readNewsItems(m_cache.examplesPath, m_cache.demosPath, m_cache.examplesPath); +} + + ExamplesListModelFilter::ExamplesListModelFilter(QObject *parent) : QSortFilterProxyModel(parent), m_showTutorialsOnly(true) { diff --git a/src/plugins/qtsupport/exampleslistmodel.h b/src/plugins/qtsupport/exampleslistmodel.h index ae6ee735f7b..fc36970f0b0 100644 --- a/src/plugins/qtsupport/exampleslistmodel.h +++ b/src/plugins/qtsupport/exampleslistmodel.h @@ -60,6 +60,15 @@ struct ExampleItem { bool hasSourceCode; }; +struct QMakePathCache { + QString examplesPath; + QString demosPath; + QString sourcePath; + QMakePathCache() {} + QMakePathCache(const QString &_examplesPath, const QString &_demosPath, const QString &_sourcePath) + : examplesPath(_examplesPath), demosPath(_demosPath), sourcePath(_sourcePath) {} +}; + class ExamplesListModel : public QAbstractListModel { Q_OBJECT public: @@ -71,12 +80,15 @@ public: QStringList tags() const { return m_tags; } -public slots: - void readNewsItems(const QString &examplesPath, const QString &demosPath, const QString &sourcePath); signals: void tagsUpdated(); +public slots: + void readNewsItems(const QString &examplesPath, const QString &demosPath, const QString &sourcePath); + void cacheExamplesPath(const QString &examplesPath, const QString &demosPath, const QString &sourcePath); + void helpInitialized(); + private: QList parseExamples(QXmlStreamReader* reader, const QString& projectsOffset); QList parseDemos(QXmlStreamReader* reader, const QString& projectsOffset); @@ -85,6 +97,8 @@ private: QStringList exampleSources() const; QList exampleItems; QStringList m_tags; + QMakePathCache m_cache; + }; class ExamplesListModelFilter : public QSortFilterProxyModel { diff --git a/src/plugins/qtsupport/gettingstartedwelcomepage.h b/src/plugins/qtsupport/gettingstartedwelcomepage.h index e77fdea3784..b67d62c5c97 100644 --- a/src/plugins/qtsupport/gettingstartedwelcomepage.h +++ b/src/plugins/qtsupport/gettingstartedwelcomepage.h @@ -68,8 +68,6 @@ signals: public slots: void openSplitHelp(const QUrl &help); void openProject(const QString& projectFile, const QStringList& additionalFilesToOpen, const QUrl& help); - -public slots: void updateTagsModel(); private: From a8b248f4ed9acb3ab64f1b26d0dba20aabebbc70 Mon Sep 17 00:00:00 2001 From: Leandro Melo Date: Wed, 29 Jun 2011 17:45:52 +0200 Subject: [PATCH 046/143] Editors: Dont configure form's text editor unnecessarily It's sufficient (and actually better) to configure the plain text editor at the moment in which the xml is synchronized. Task-number: QTCREATORBUG-5251 Change-Id: Ib2a3e1828f61770871486b8fbc1618abda1a5a74 Reviewed-on: http://codereview.qt.nokia.com/931 Reviewed-by: Qt Sanity Bot Reviewed-by: Friedemann Kleint (cherry picked from commit 754b8b3ac70e123bdb57c0dd21082ccc534a4366) --- src/plugins/designer/formwindoweditor.cpp | 12 ++---------- src/plugins/designer/formwindoweditor.h | 1 - src/plugins/texteditor/plaintexteditor.cpp | 5 +++++ src/plugins/texteditor/plaintexteditor.h | 1 + 4 files changed, 8 insertions(+), 11 deletions(-) diff --git a/src/plugins/designer/formwindoweditor.cpp b/src/plugins/designer/formwindoweditor.cpp index 516795f27ff..6057002e2b3 100644 --- a/src/plugins/designer/formwindoweditor.cpp +++ b/src/plugins/designer/formwindoweditor.cpp @@ -88,7 +88,6 @@ FormWindowEditor::FormWindowEditor(Internal::DesignerXmlEditor *editor, // Force update of open editors model. connect(&d->m_file, SIGNAL(saved()), this, SIGNAL(changed())); connect(&d->m_file, SIGNAL(changed()), this, SIGNAL(changed())); - connect(this, SIGNAL(changed()), this, SLOT(configureXmlEditor())); } FormWindowEditor::~FormWindowEditor() @@ -196,19 +195,12 @@ void FormWindowEditor::syncXmlEditor() syncXmlEditor(contents()); } -void FormWindowEditor::configureXmlEditor() const -{ - TextEditor::PlainTextEditorWidget *widget = - qobject_cast(d->m_textEditor.widget()); - if (widget) - widget->configure(Core::ICore::instance()->mimeDatabase()->findByFile( - d->m_file.fileName())); -} - void FormWindowEditor::syncXmlEditor(const QString &contents) { d->m_textEditor.editorWidget()->setPlainText(contents); d->m_textEditor.editorWidget()->setReadOnly(true); + static_cast + (d->m_textEditor.editorWidget())->configure(file()->mimeType()); } Core::IFile *FormWindowEditor::file() diff --git a/src/plugins/designer/formwindoweditor.h b/src/plugins/designer/formwindoweditor.h index 3260917e693..b348a2ffd6b 100644 --- a/src/plugins/designer/formwindoweditor.h +++ b/src/plugins/designer/formwindoweditor.h @@ -97,7 +97,6 @@ public: public slots: void syncXmlEditor(); - void configureXmlEditor() const; private slots: void slotOpen(QString *errorString, const QString &fileName); diff --git a/src/plugins/texteditor/plaintexteditor.cpp b/src/plugins/texteditor/plaintexteditor.cpp index ca6008d0e7a..d2925ff0d70 100644 --- a/src/plugins/texteditor/plaintexteditor.cpp +++ b/src/plugins/texteditor/plaintexteditor.cpp @@ -154,6 +154,11 @@ void PlainTextEditorWidget::configure() configure(mimeType); } +void PlainTextEditorWidget::configure(const QString &mimeType) +{ + configure(Core::ICore::instance()->mimeDatabase()->findByType(mimeType)); +} + void PlainTextEditorWidget::configure(const Core::MimeType &mimeType) { Highlighter *highlighter = new Highlighter(); diff --git a/src/plugins/texteditor/plaintexteditor.h b/src/plugins/texteditor/plaintexteditor.h index 6b003ea080e..2fb3185d87d 100644 --- a/src/plugins/texteditor/plaintexteditor.h +++ b/src/plugins/texteditor/plaintexteditor.h @@ -68,6 +68,7 @@ class TEXTEDITOR_EXPORT PlainTextEditorWidget : public BaseTextEditorWidget public: PlainTextEditorWidget(QWidget *parent); + void configure(const QString& mimeType); void configure(const Core::MimeType &mimeType); bool isMissingSyntaxDefinition() const; bool ignoreMissingSyntaxDefinition() const; From 53295db969cef0b233a56faab3ed216c66961a37 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Mon, 4 Jul 2011 09:29:28 +0200 Subject: [PATCH 047/143] Debugger[CDB]: Display more context in disassembly. Emulate gdb's behaviour trying to disassemble the function. Task-number: QTCREATORBUG-5205 Change-Id: I2f4dc9393e12324b0423734c5235758a25395fec Reviewed-on: http://codereview.qt.nokia.com/1029 Reviewed-by: Qt Sanity Bot Reviewed-by: Friedemann Kleint --- src/plugins/debugger/cdb/cdbengine.cpp | 138 +++++++++++++++++++++++- src/plugins/debugger/cdb/cdbengine.h | 11 +- src/plugins/debugger/debuggerengine.cpp | 1 + src/plugins/debugger/debuggerengine.h | 2 + 4 files changed, 149 insertions(+), 3 deletions(-) diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp index e8b464d5370..9d2d1e30264 100644 --- a/src/plugins/debugger/cdb/cdbengine.cpp +++ b/src/plugins/debugger/cdb/cdbengine.cpp @@ -478,6 +478,7 @@ void CdbEngine::init() m_extensionMessageBuffer.clear(); m_pendingBreakpointMap.clear(); m_customSpecialStopData.clear(); + m_symbolAddressCache.clear(); // Create local list of mappings in native separators m_sourcePathMappings.clear(); @@ -1532,16 +1533,149 @@ void CdbEngine::selectThread(int index) postBuiltinCommand(cmd, 0, &CdbEngine::dummyHandler, CommandListStack); } +// Default address range for showing disassembly. +enum { DisassemblerRange = 512 }; + +/* Try to emulate gdb's behaviour: When passed an address, display + * the disassembled function. CDB's 'u' (disassemble) command takes a symbol, + * but does not display the whole function, only 10 lines per default. + * So, to ensure the agent's + * address is in that range, resolve the function symbol, cache it and + * request the disassembly for a range that contains the agent's address. */ + void CdbEngine::fetchDisassembler(DisassemblerAgent *agent) { QTC_ASSERT(m_accessible, return;) + const QString function = agent->location().functionName(); + const QString module = agent->location().from(); + const QVariant cookie = qVariantFromValue(agent); + if (function.isEmpty() || module.isEmpty()) { + // No function, display a default range. + postDisassemblerCommand(agent->address(), cookie); + } else { + postResolveSymbol(module, function, cookie); + } +} + +void CdbEngine::postDisassemblerCommand(quint64 address, const QVariant &cookie) +{ + postDisassemblerCommand(address - DisassemblerRange / 2, + address + DisassemblerRange / 2, cookie); +} + +void CdbEngine::postDisassemblerCommand(quint64 address, quint64 endAddress, + const QVariant &cookie) +{ QByteArray cmd; ByteArrayInputStream str(cmd); - str << "u " << hex << hexPrefixOn << agent->address() << " L40"; - const QVariant cookie = qVariantFromValue(agent); + str << "u " << hex < addresses = m_symbolAddressCache.values(symbol); + if (addresses.isEmpty()) { + QVariantList cookieList; + cookieList << QVariant(symbol) << cookie; + showMessage(QLatin1String("Resolving symbol: ") + symbol, LogMisc); + postBuiltinCommand(QByteArray("x ") + symbol.toLatin1(), 0, + &CdbEngine::handleResolveSymbol, 0, + QVariant(cookieList)); + } else { + showMessage(QString::fromLatin1("Using cached addresses for %1."). + arg(symbol), LogMisc); + handleResolveSymbol(addresses, cookie); + } +} + +// Parse address from 'x' response. +// "00000001`3f7ebe80 module!foo (void)" +static inline quint64 resolvedAddress(const QByteArray &line) +{ + const int blankPos = line.indexOf(' '); + if (blankPos >= 0) { + QByteArray addressBA = line.left(blankPos); + if (addressBA.size() > 9 && addressBA.at(8) == '`') + addressBA.remove(8, 1); + bool ok; + const quint64 address = addressBA.toULongLong(&ok, 16); + if (ok) + return address; + } + return 0; +} + +void CdbEngine::handleResolveSymbol(const CdbBuiltinCommandPtr &command) +{ + QTC_ASSERT(command->cookie.type() == QVariant::List, return; ); + const QVariantList cookieList = command->cookie.toList(); + const QString symbol = cookieList.front().toString(); + // Insert all matches of (potentially) ambiguous symbols + if (const int size = command->reply.size()) { + for (int i = 0; i < size; i++) { + if (const quint64 address = resolvedAddress(command->reply.at(i))) { + m_symbolAddressCache.insert(symbol, address); + showMessage(QString::fromLatin1("Obtained 0x%1 for %2 (#%3)"). + arg(address, 0, 16).arg(symbol).arg(i + 1), LogMisc); + } + } + } else { + showMessage(QLatin1String("Symbol resolution failed: ") + + QString::fromLatin1(command->joinedReply()), + LogError); + } + handleResolveSymbol(m_symbolAddressCache.values(symbol), cookieList.back()); +} + +// Find the function address matching needle in a list of function +// addresses obtained from the 'x' command. Check for the +// mimimum POSITIVE offset (needle >= function address.) +static inline quint64 findClosestFunctionAddress(const QList &addresses, + quint64 needle) +{ + const int size = addresses.size(); + if (!size) + return 0; + if (size == 1) + return addresses.front(); + int closestIndex = 0; + quint64 closestOffset = 0xFFFFFFFF; + for (int i = 0; i < size; i++) { + if (addresses.at(i) <= needle) { + const quint64 offset = needle - addresses.at(i); + if (offset < offset) { + closestOffset = offset; + closestIndex = i; + } + } + } + return addresses.at(closestIndex); +} + +void CdbEngine::handleResolveSymbol(const QList &addresses, const QVariant &cookie) +{ + // Disassembly mode: Determine suitable range containing the + // agent's address within the function to display. + if (qVariantCanConvert(cookie)) { + DisassemblerAgent *agent = cookie.value(); + const quint64 agentAddress = agent->address(); + const quint64 functionAddress + = findClosestFunctionAddress(addresses, agentAddress); + if (functionAddress > 0 && functionAddress <= agentAddress) { + quint64 endAddress = agentAddress + DisassemblerRange / 2; + if (const quint64 remainder = endAddress % 8) + endAddress += 8 - remainder; + postDisassemblerCommand(functionAddress, endAddress, cookie); + } else { + postDisassemblerCommand(agentAddress, cookie); + } + return; + } +} + // Parse: "00000000`77606060 cc int 3" void CdbEngine::handleDisassembler(const CdbBuiltinCommandPtr &command) { diff --git a/src/plugins/debugger/cdb/cdbengine.h b/src/plugins/debugger/cdb/cdbengine.h index ef97f1fc729..9c21dd4b0a8 100644 --- a/src/plugins/debugger/cdb/cdbengine.h +++ b/src/plugins/debugger/cdb/cdbengine.h @@ -40,6 +40,7 @@ #include #include #include +#include #include #include #include @@ -211,8 +212,12 @@ private: void postWidgetAtCommand(); void handleCustomSpecialStop(const QVariant &v); void postFetchMemory(const MemoryViewCookie &c); + inline void postDisassemblerCommand(quint64 address, const QVariant &cookie = QVariant()); + void postDisassemblerCommand(quint64 address, quint64 endAddress, + const QVariant &cookie = QVariant()); + void postResolveSymbol(const QString &module, const QString &function, + const QVariant &cookie = QVariant()); void evaluateExpression(QByteArray exp, const QVariant &cookie = QVariant()); - // Builtin commands void dummyHandler(const CdbBuiltinCommandPtr &); void handleStackTrace(const CdbExtensionCommandPtr &); @@ -220,7 +225,10 @@ private: void handleDisassembler(const CdbBuiltinCommandPtr &); void handleJumpToLineAddressResolution(const CdbBuiltinCommandPtr &); void handleExpression(const CdbExtensionCommandPtr &); + void handleResolveSymbol(const CdbBuiltinCommandPtr &command); + void handleResolveSymbol(const QList &addresses, const QVariant &cookie); void jumpToAddress(quint64 address); + // Extension commands void handleThreads(const CdbExtensionCommandPtr &); void handlePid(const CdbExtensionCommandPtr &reply); @@ -270,6 +278,7 @@ private: int m_watchPointY; PendingBreakPointMap m_pendingBreakpointMap; QHash m_fileNameModuleHash; + QMultiHash m_symbolAddressCache; bool m_ignoreCdbOutput; QVariantList m_customSpecialStopData; QList m_sourcePathMappings; diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp index a46841c2f12..61a8e3bf717 100644 --- a/src/plugins/debugger/debuggerengine.cpp +++ b/src/plugins/debugger/debuggerengine.cpp @@ -97,6 +97,7 @@ Internal::Location::Location(const StackFrame &frame, bool marker) m_functionName = frame.function; m_hasDebugInfo = frame.isUsable(); m_address = frame.address; + m_from = frame.from; } QDebug operator<<(QDebug d, DebuggerState state) diff --git a/src/plugins/debugger/debuggerengine.h b/src/plugins/debugger/debuggerengine.h index 8fc593c8e93..7fabfd253d9 100644 --- a/src/plugins/debugger/debuggerengine.h +++ b/src/plugins/debugger/debuggerengine.h @@ -100,6 +100,7 @@ public: Location(const StackFrame &frame, bool marker = true); QString fileName() const { return m_fileName; } QString functionName() const { return m_functionName; } + QString from() const { return m_from; } int lineNumber() const { return m_lineNumber; } void setNeedsRaise(bool on) { m_needsRaise = on; } void setNeedsMarker(bool on) { m_needsMarker = on; } @@ -118,6 +119,7 @@ private: int m_lineNumber; QString m_fileName; QString m_functionName; + QString m_from; quint64 m_address; }; From b3812bf94f0f0e771ed832c14335ff868cfc0cff Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Fri, 1 Jul 2011 16:57:17 +0200 Subject: [PATCH 048/143] Debugger: Make disassembler caching smarter. Check if address is contained in range of lines. Task-number: QTCREATORBUG-5205 Change-Id: I12a4f2f2f3837e164fd093e80fb427e9234136af Reviewed-on: http://codereview.qt.nokia.com/1017 Reviewed-by: Qt Sanity Bot Reviewed-by: Friedemann Kleint --- src/plugins/debugger/disassembleragent.cpp | 103 ++++++++++++++++----- src/plugins/debugger/disassembleragent.h | 3 + src/plugins/debugger/disassemblerlines.cpp | 16 ++++ src/plugins/debugger/disassemblerlines.h | 3 + 4 files changed, 100 insertions(+), 25 deletions(-) diff --git a/src/plugins/debugger/disassembleragent.cpp b/src/plugins/debugger/disassembleragent.cpp index ca63193ee70..80d58ad7f2d 100644 --- a/src/plugins/debugger/disassembleragent.cpp +++ b/src/plugins/debugger/disassembleragent.cpp @@ -56,6 +56,8 @@ #include #include #include +#include +#include using namespace Core; using namespace TextEditor; @@ -69,6 +71,27 @@ namespace Internal { // /////////////////////////////////////////////////////////////////////// +class FrameKey +{ +public: + FrameKey() : startAddress(0), endAddress(0) {} + inline bool matches(const Location &loc) const; + + QString functionName; + QString fileName; + quint64 startAddress; + quint64 endAddress; +}; + +bool FrameKey::matches(const Location &loc) const +{ + return loc.address() >= startAddress + && loc.address() < endAddress + && loc.fileName() == fileName && loc.functionName() == functionName; +} + +typedef QPair CacheEntry; + class DisassemblerAgentPrivate { public: @@ -83,8 +106,9 @@ public: QPointer engine; ITextMark *locationMark; QList breakpointMarks; - - QHash cache; + + QList cache; + QString mimeType; bool m_resetLocationScheduled; }; @@ -130,6 +154,14 @@ DisassemblerAgent::~DisassemblerAgent() d = 0; } +int DisassemblerAgent::indexOf(const Location &loc) const +{ + for (int i = 0; i < d->cache.size(); i++) + if (d->cache.at(i).first.matches(loc)) + return i; + return -1; +} + void DisassemblerAgent::cleanup() { d->cache.clear(); @@ -150,12 +182,6 @@ void DisassemblerAgent::resetLocation() } } -static QString frameKey(const Location &loc) -{ - return _("%1:%2:%3").arg(loc.functionName()) - .arg(loc.fileName()).arg(loc.address()); -} - const Location &DisassemblerAgent::location() const { return d->location; @@ -172,20 +198,28 @@ bool DisassemblerAgent::isMixed() const void DisassemblerAgent::setLocation(const Location &loc) { d->location = loc; - if (isMixed()) { - QHash::ConstIterator it = - d->cache.find(frameKey(loc)); - if (it != d->cache.end()) { - QString msg = _("Use cache disassembler for '%1' in '%2'") - .arg(loc.functionName()).arg(loc.fileName()); - d->engine->showMessage(msg); - setContents(*it); - updateBreakpointMarkers(); - updateLocationMarker(); - return; + int index = indexOf(loc); + if (index != -1) { + // Refresh when not displaying a function and there is not sufficient + // context left past the address. + if (!isMixed() && d->cache.at(index).first.endAddress - loc.address() < 24) { + index = -1; + d->cache.removeAt(index); } } - d->engine->fetchDisassembler(this); + if (index != -1) { + const FrameKey &key = d->cache.at(index).first; + const QString msg = + _("Using cached disassembly for 0x%1 (0x%2-0x%3) in '%4'/ '%5'") + .arg(loc.address(), 0, 16) + .arg(key.startAddress, 0, 16).arg(key.endAddress, 0, 16) + .arg(loc.functionName(), QDir::toNativeSeparators(loc.fileName())); + d->engine->showMessage(msg); + setContentsToEditor(d->cache.at(index).second); + d->m_resetLocationScheduled = false; // In case reset from previous run still pending. + } else { + d->engine->fetchDisassembler(this); + } } void DisassemblerAgentPrivate::configureMimeType() @@ -223,6 +257,24 @@ void DisassemblerAgent::setMimeType(const QString &mt) } void DisassemblerAgent::setContents(const DisassemblerLines &contents) +{ + QTC_ASSERT(d, return); + if (contents.size()) { + const quint64 startAddress = contents.startAddress(); + const quint64 endAddress = contents.endAddress(); + if (startAddress) { + FrameKey key; + key.fileName = d->location.fileName(); + key.functionName = d->location.functionName(); + key.startAddress = startAddress; + key.endAddress = endAddress; + d->cache.append(CacheEntry(key, contents)); + } + } + setContentsToEditor(contents); +} + +void DisassemblerAgent::setContentsToEditor(const DisassemblerLines &contents) { QTC_ASSERT(d, return); using namespace Core; @@ -260,7 +312,6 @@ void DisassemblerAgent::setContents(const DisassemblerLines &contents) plainTextEdit->setPlainText(str); plainTextEdit->setReadOnly(true); - d->cache.insert(frameKey(d->location), contents); d->editor->setDisplayName(_("Disassembler (%1)") .arg(d->location.functionName())); @@ -272,9 +323,10 @@ void DisassemblerAgent::updateLocationMarker() { QTC_ASSERT(d->editor, return); - const DisassemblerLines &contents = d->cache.value(frameKey(d->location)); + const int index = indexOf(d->location); + const DisassemblerLines contents = index != -1 ? + d->cache.at(index).second : DisassemblerLines(); int lineNumber = contents.lineForAddress(d->location.address()); - if (d->location.needsMarker()) { d->editor->markableInterface()->removeMark(d->locationMark); if (lineNumber) @@ -300,8 +352,9 @@ void DisassemblerAgent::updateBreakpointMarkers() if (ids.isEmpty()) return; - const DisassemblerLines &contents = d->cache.value(frameKey(d->location)); - + const int index = indexOf(d->location); + const DisassemblerLines contents = index != -1 ? + d->cache.at(index).second : DisassemblerLines(); foreach (TextEditor::ITextMark *marker, d->breakpointMarks) d->editor->markableInterface()->removeMark(marker); d->breakpointMarks.clear(); diff --git a/src/plugins/debugger/disassembleragent.h b/src/plugins/debugger/disassembleragent.h index 71665e42214..fea7c848828 100644 --- a/src/plugins/debugger/disassembleragent.h +++ b/src/plugins/debugger/disassembleragent.h @@ -72,6 +72,9 @@ public: bool isMixed() const; private: + void setContentsToEditor(const DisassemblerLines &contents); + int indexOf(const Location &loc) const; + DisassemblerAgentPrivate *d; }; diff --git a/src/plugins/debugger/disassemblerlines.cpp b/src/plugins/debugger/disassemblerlines.cpp index 2e2bad655e7..4beee54169e 100644 --- a/src/plugins/debugger/disassemblerlines.cpp +++ b/src/plugins/debugger/disassemblerlines.cpp @@ -80,6 +80,22 @@ quint64 DisassemblerLine::addressFromDisassemblyLine(const QString &line) return l.address; } +quint64 DisassemblerLines::startAddress() const +{ + for (int i = 0; i < m_data.size(); ++i) + if (m_data.at(i).address) + return m_data.at(i).address; + return 0; +} + +quint64 DisassemblerLines::endAddress() const +{ + for (int i = m_data.size()- 1; i >= 0; --i) + if (m_data.at(i).address) + return m_data.at(i).address; + return 0; +} + int DisassemblerLines::lineForAddress(quint64 address) const { return m_rowCache.value(address); diff --git a/src/plugins/debugger/disassemblerlines.h b/src/plugins/debugger/disassemblerlines.h index ae0160e6381..59cf0a1255d 100644 --- a/src/plugins/debugger/disassemblerlines.h +++ b/src/plugins/debugger/disassemblerlines.h @@ -83,6 +83,9 @@ public: const DisassemblerLine &at(int i) const { return m_data.at(i); } int lineForAddress(quint64 address) const; + quint64 startAddress() const; + quint64 endAddress() const; + private: QString m_lastFunction; QVector m_data; From a2b1642447dcefa81dab6dcbba9cd4a205419eff Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Mon, 4 Jul 2011 10:27:56 +0200 Subject: [PATCH 049/143] changelog: Debugger. Reviewed-by: hjk Change-Id: If2089eec1af83f8f212184cb957aef4aab90bfe6 Reviewed-on: http://codereview.qt.nokia.com/1033 Reviewed-by: Qt Sanity Bot Reviewed-by: Friedemann Kleint --- dist/changes-2.3.0 | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dist/changes-2.3.0 b/dist/changes-2.3.0 index 15a5d8e1be5..019dbce58ef 100644 --- a/dist/changes-2.3.0 +++ b/dist/changes-2.3.0 @@ -17,6 +17,9 @@ Editing Managing Projects Debugging + * Color memory display highlighting the variables in stack layout + * Correct source location for breakpoints in CDB using code model + (QTCREATORBUG-2317) Debugging QML/JS From d1f2e1f8afbb891433ea381d890f157a7b3d3f37 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Fri, 1 Jul 2011 15:22:38 +0200 Subject: [PATCH 050/143] Update changes file Change-Id: I8374c92dd27fc031373c65428c467dde8838a419 Reviewed-on: http://codereview.qt.nokia.com/1012 Reviewed-by: Qt Sanity Bot Reviewed-by: Leena Miettinen --- dist/changes-2.3.0 | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/dist/changes-2.3.0 b/dist/changes-2.3.0 index 019dbce58ef..c2498575ea8 100644 --- a/dist/changes-2.3.0 +++ b/dist/changes-2.3.0 @@ -10,6 +10,7 @@ git log --cherry-pick --pretty=oneline v2.2.1...origin/2.3 General * Welcome page redesign allows searching through examples with descriptions * Restore previous size when unmaximizing output panes + * Added support for building with the Clang compiler Editing * Fixed lock up when regular expression search matched empty line @@ -63,5 +64,9 @@ Maemo Target Qt Designer Version control plugins + * Git: Manage remote repositories + * Git: Improved branch dialog + * Bazaar: lots of small improvements Additional credits go to: + Hugues Delorme for his work on the Bazaar plugin as well as version control base. From 343ac57943d1d79ba6cd712c41c37be1a66d9a2c Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Mon, 4 Jul 2011 11:32:21 +0200 Subject: [PATCH 051/143] Doc: removed link to KDE style guide because it had moved Added the guidelines. Change-Id: I121ef920475a24c653ecc87292cee5472a0a8a5f Reviewed-on: http://codereview.qt.nokia.com/1047 Reviewed-by: Eike Ziller --- doc/api/qtcreator-ui-text.qdoc | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/doc/api/qtcreator-ui-text.qdoc b/doc/api/qtcreator-ui-text.qdoc index 0d6d3497be2..ccb8334b6c4 100644 --- a/doc/api/qtcreator-ui-text.qdoc +++ b/doc/api/qtcreator-ui-text.qdoc @@ -154,10 +154,6 @@ \section1 UI Text Capitalization - The capitalization of the Qt Creator UI text follows the - \l{http://developer.kde.org/documentation/standards/kde/style/basics/labels.html#items} - {KDE Style Guide}. - Two styles are used, book title and sentence style: \list @@ -168,6 +164,11 @@ \endlist + When using book style capitalization, capitalize all words, except + prepositions that are shorter than five letters (for example, 'with' but + 'Without'), conjunctions (for example, and, or, but), and articles (a, an, + the). + Use book style capitalization for: \list @@ -182,6 +183,9 @@ \endlist + When using sentence style capitalization, capitalize only the first letter, + except proper names. + Use sentence style capitalization for: \list From 99d9f065b3d61453f003eb6b520f36217f5f7fa9 Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 30 Jun 2011 13:44:22 +0200 Subject: [PATCH 052/143] analyzer: refactoring of analyzer manager Change-Id: I60268b8bc86e439beb3fca8f4b6a87ea03925bad Reviewed-on: http://codereview.qt.nokia.com/1049 Reviewed-by: hjk --- src/plugins/analyzerbase/analyzerconstants.h | 3 + src/plugins/analyzerbase/analyzermanager.cpp | 334 ++++++++++-------- src/plugins/analyzerbase/analyzermanager.h | 42 ++- .../analyzerbase/analyzerruncontrol.cpp | 13 +- src/plugins/analyzerbase/analyzerruncontrol.h | 6 +- .../analyzerruncontrolfactory.cpp | 69 +--- .../analyzerbase/analyzerruncontrolfactory.h | 4 +- .../analyzerbase/analyzerstartparameters.h | 1 + src/plugins/analyzerbase/ianalyzerengine.cpp | 19 +- src/plugins/analyzerbase/ianalyzerengine.h | 30 +- src/plugins/analyzerbase/ianalyzertool.h | 16 +- src/plugins/qmlprofiler/qmlprofilerengine.cpp | 20 +- src/plugins/qmlprofiler/qmlprofilerengine.h | 5 +- src/plugins/qmlprofiler/qmlprofilerplugin.cpp | 63 +--- src/plugins/qmlprofiler/qmlprofilerplugin.h | 4 - src/plugins/qmlprofiler/qmlprofilertool.cpp | 84 ++--- src/plugins/qmlprofiler/qmlprofilertool.h | 12 +- .../qmlprojectanalyzerruncontrolfactory.cpp | 18 +- .../qmlprojectanalyzerruncontrolfactory.h | 6 +- src/plugins/valgrind/callgrindengine.cpp | 16 +- src/plugins/valgrind/callgrindengine.h | 13 +- src/plugins/valgrind/callgrindtool.cpp | 74 ++-- src/plugins/valgrind/callgrindtool.h | 10 +- src/plugins/valgrind/memcheckengine.cpp | 6 +- src/plugins/valgrind/memcheckengine.h | 5 +- src/plugins/valgrind/memchecktool.cpp | 52 +-- src/plugins/valgrind/memchecktool.h | 13 +- src/plugins/valgrind/valgrindengine.cpp | 8 +- src/plugins/valgrind/valgrindengine.h | 9 +- src/plugins/valgrind/valgrindplugin.cpp | 16 +- src/plugins/valgrind/valgrindplugin.h | 2 +- 31 files changed, 461 insertions(+), 512 deletions(-) diff --git a/src/plugins/analyzerbase/analyzerconstants.h b/src/plugins/analyzerbase/analyzerconstants.h index 883f77b9cf4..4a110a49acf 100644 --- a/src/plugins/analyzerbase/analyzerconstants.h +++ b/src/plugins/analyzerbase/analyzerconstants.h @@ -61,6 +61,9 @@ const char * const START = "Analyzer.Start"; const char * const STARTREMOTE = "Analyzer.StartRemote"; const char * const STOP = "Analyzer.Stop"; +const char * const G_ANALYZER_TOOLS = "Menu.Group.Analyzer.Tools"; +const char * const G_ANALYZER_REMOTE_TOOLS = "Menu.Group.Analyzer.RemoteTools"; + // options dialog const char * const ANALYZER_SETTINGS_CATEGORY = "T.Analyzer"; const char * const ANALYZER_SETTINGS_TR_CATEGORY = diff --git a/src/plugins/analyzerbase/analyzermanager.cpp b/src/plugins/analyzerbase/analyzermanager.cpp index 8553afab86a..86f5b1d8175 100644 --- a/src/plugins/analyzerbase/analyzermanager.cpp +++ b/src/plugins/analyzerbase/analyzermanager.cpp @@ -76,7 +76,9 @@ #include #include -#include +#include +#include +#include #include #include @@ -105,10 +107,44 @@ namespace Analyzer { namespace Internal { const char lastActiveToolC[] = "Analyzer.Plugin.LastActiveTool"; -const char G_ANALYZER_TOOLS[] = "Menu.Group.Analyzer.Tools"; -const char G_ANALYZER_REMOTE_TOOLS[] = "Menu.Group.Analyzer.RemoteTools"; const char INITIAL_DOCK_AREA[] = "initial_dock_area"; +AnalyzerStartParameters localStartParameters(ProjectExplorer::RunConfiguration *runConfiguration) +{ + AnalyzerStartParameters sp; + QTC_ASSERT(runConfiguration, return sp); + ProjectExplorer::LocalApplicationRunConfiguration *rc = + qobject_cast(runConfiguration); + QTC_ASSERT(rc, return sp); + + sp.startMode = StartLocal; + sp.environment = rc->environment(); + sp.workingDirectory = rc->workingDirectory(); + sp.debuggee = rc->executable(); + sp.debuggeeArgs = rc->commandLineArguments(); + sp.displayName = rc->displayName(); + sp.connParams.host = QLatin1String("localhost"); + sp.connParams.port = rc->qmlDebugServerPort(); + return sp; +} + +AnalyzerStartParameters remoteLinuxStartParameters(ProjectExplorer::RunConfiguration *runConfiguration) +{ + AnalyzerStartParameters sp; + RemoteLinux::RemoteLinuxRunConfiguration * const rc + = qobject_cast(runConfiguration); + QTC_ASSERT(rc, return sp); + + sp.debuggee = rc->remoteExecutableFilePath(); + sp.debuggeeArgs = rc->arguments(); + sp.connParams = rc->deviceConfig()->sshParameters(); + sp.analyzerCmdPrefix = rc->commandPrefix(); + sp.startMode = StartRemote; + sp.displayName = rc->displayName(); + return sp; +} + + // AnalyzerMode //////////////////////////////////////////////////// class AnalyzerMode : public Core::IMode @@ -175,44 +211,40 @@ public: const QString &stopButtonText, const QString &cancelButtonText) const; void addDock(Qt::DockWidgetArea area, QDockWidget *dockWidget); - void startAction(int tool); + void startLocalTool(IAnalyzerTool *tool); + void startRemoteTool(IAnalyzerTool *tool); void addTool(IAnalyzerTool *tool); - void addToolAction(IAnalyzerTool *tool, bool local); + void stopTool(IAnalyzerTool *tool); + void handleToolFinished(IAnalyzerTool *tool); int indexOf(IAnalyzerTool *tool) const; - int indexOf(QAction *action) const; IAnalyzerTool *toolAt(int idx) const; + void saveToolSettings(IAnalyzerTool *tool); + void loadToolSettings(IAnalyzerTool *tool); + + void registerRunControlFactory(ProjectExplorer::IRunControlFactory *factory); + ProjectExplorer::RunControl *createRunControl + (ProjectExplorer::RunConfiguration *runConfiguration, const QString &mode); public slots: - void startAction() { startAction(m_currentIndex); } - void startToolRemote(); - void stopTool(); + void startTool(); + void stopTool() { stopTool(m_currentTool); } - void handleToolFinished(); - void selectAction(); - void selectAction(int); - void selectAction(QAction *); + void selectTool(); + void selectTool(IAnalyzerTool *tool); + void selectTool(QAction *); + void selectTool(int); void modeChanged(Core::IMode *mode); - void runControlCreated(Analyzer::AnalyzerRunControl *); void resetLayout(); - void saveToolSettings(Analyzer::IAnalyzerTool *tool); - void loadToolSettings(Analyzer::IAnalyzerTool *tool); void updateRunActions(); - void registerRunControlFactory(ProjectExplorer::IRunControlFactory *factory); public: - struct ToolData { - IAnalyzerTool *tool; - QAction *action; - bool local; - }; - AnalyzerManager *q; AnalyzerMode *m_mode; AnalyzerRunControlFactory *m_runControlFactory; ProjectExplorer::RunControl *m_currentRunControl; Utils::FancyMainWindow *m_mainWindow; - int m_currentIndex; - QList m_actions; + IAnalyzerTool *m_currentTool; + QHash m_toolFromAction; QList m_tools; QAction *m_startAction; QAction *m_stopAction; @@ -222,7 +254,7 @@ public: ActionContainer *m_viewsMenu; Utils::StatusLabel *m_statusLabel; typedef QMap MainWindowSettingsMap; - QMap > m_toolWidgets; + QHash > m_toolWidgets; MainWindowSettingsMap m_defaultSettings; // list of dock widgets to prevent memory leak @@ -239,7 +271,7 @@ AnalyzerManager::AnalyzerManagerPrivate::AnalyzerManagerPrivate(AnalyzerManager m_runControlFactory(0), m_currentRunControl(0), m_mainWindow(0), - m_currentIndex(-1), + m_currentTool(0), m_startAction(0), m_stopAction(0), m_menu(0), @@ -251,7 +283,7 @@ AnalyzerManager::AnalyzerManagerPrivate::AnalyzerManagerPrivate(AnalyzerManager m_initialized(false) { m_toolBox->setObjectName(QLatin1String("AnalyzerManagerToolBox")); - connect(m_toolBox, SIGNAL(currentIndexChanged(int)), SLOT(selectAction(int))); + connect(m_toolBox, SIGNAL(currentIndexChanged(int)), SLOT(selectTool(int))); m_runControlFactory = new AnalyzerRunControlFactory(); registerRunControlFactory(m_runControlFactory); @@ -279,8 +311,6 @@ void AnalyzerManager::AnalyzerManagerPrivate::registerRunControlFactory (ProjectExplorer::IRunControlFactory *factory) { AnalyzerPlugin::instance()->addAutoReleasedObject(factory); - connect(factory, SIGNAL(runControlCreated(Analyzer::AnalyzerRunControl*)), - this, SLOT(runControlCreated(Analyzer::AnalyzerRunControl*))); } void AnalyzerManager::AnalyzerManagerPrivate::setupActions() @@ -295,8 +325,8 @@ void AnalyzerManager::AnalyzerManagerPrivate::setupActions() m_menu->menu()->setTitle(tr("&Analyze")); m_menu->menu()->setEnabled(true); - m_menu->appendGroup(G_ANALYZER_TOOLS); - m_menu->appendGroup(G_ANALYZER_REMOTE_TOOLS); + m_menu->appendGroup(Constants::G_ANALYZER_TOOLS); + m_menu->appendGroup(Constants::G_ANALYZER_REMOTE_TOOLS); Core::ActionContainer *menubar = am->actionContainer(Core::Constants::MENU_BAR); @@ -307,7 +337,7 @@ void AnalyzerManager::AnalyzerManagerPrivate::setupActions() m_startAction = new QAction(tr("Start"), m_menu); m_startAction->setIcon(QIcon(Constants::ANALYZER_CONTROL_START_ICON)); command = am->registerAction(m_startAction, Constants::START, globalcontext); - connect(m_startAction, SIGNAL(triggered()), this, SLOT(startAction())); + connect(m_startAction, SIGNAL(triggered()), this, SLOT(startTool())); m_stopAction = new QAction(tr("Stop"), m_menu); m_stopAction->setEnabled(false); @@ -319,7 +349,7 @@ void AnalyzerManager::AnalyzerManagerPrivate::setupActions() separatorAction->setSeparator(true); command = am->registerAction(separatorAction, "Menu.Action.Analyzer.Tools.Separator", globalcontext); - m_menu->addAction(command, G_ANALYZER_REMOTE_TOOLS); + m_menu->addAction(command, Constants::G_ANALYZER_REMOTE_TOOLS); m_viewsMenu = am->actionContainer(Core::Id(Core::Constants::M_WINDOW_VIEWS)); } @@ -477,8 +507,30 @@ bool AnalyzerManager::AnalyzerManagerPrivate::showPromptDialog(const QString &ti return messageBox.clickedStandardButton() == QDialogButtonBox::Yes; } -void AnalyzerManager::AnalyzerManagerPrivate::startToolRemote() +ProjectExplorer::RunControl *AnalyzerManager::AnalyzerManagerPrivate::createRunControl + (ProjectExplorer::RunConfiguration *runConfiguration, const QString &mode) { + Q_UNUSED(mode); + + AnalyzerStartParameters sp; + if (qobject_cast(runConfiguration)) { + sp = localStartParameters(runConfiguration); + } else if (qobject_cast(runConfiguration)) { + sp = remoteLinuxStartParameters(runConfiguration); + } else { + // might be S60DeviceRunfiguration, or something else ... + sp.startMode = StartRemote; + } + + IAnalyzerTool *tool = m_currentTool; + AnalyzerRunControl *rc = new AnalyzerRunControl(tool, sp, runConfiguration); + m_currentRunControl = rc; + return rc; +} + +void AnalyzerManager::AnalyzerManagerPrivate::startRemoteTool(IAnalyzerTool *tool) +{ + Q_UNUSED(tool); StartRemoteDialog dlg; if (dlg.exec() != QDialog::Accepted) return; @@ -491,23 +543,20 @@ void AnalyzerManager::AnalyzerManagerPrivate::startToolRemote() sp.startMode = StartRemote; sp.workingDirectory = dlg.workingDirectory(); - AnalyzerRunControl *runControl = m_runControlFactory->create(sp, 0); + AnalyzerRunControl *runControl = new AnalyzerRunControl(tool, sp, 0); + + m_currentRunControl = runControl; - QTC_ASSERT(runControl, return); ProjectExplorer::ProjectExplorerPlugin::instance() ->startRunControl(runControl, Constants::MODE_ANALYZE); } -void AnalyzerManager::AnalyzerManagerPrivate::startAction(int index) +void AnalyzerManager::AnalyzerManagerPrivate::startLocalTool(IAnalyzerTool *tool) { + int index = indexOf(tool); QTC_ASSERT(index >= 0, return); - QTC_ASSERT(index < m_actions.size(), return); - QTC_ASSERT(index == m_currentIndex, return); - - if (!m_actions.at(index).local) { - startToolRemote(); - return; - } + QTC_ASSERT(index < m_tools.size(), return); + QTC_ASSERT(tool == m_currentTool, return); // make sure mode is shown q->showMode(); @@ -543,11 +592,10 @@ void AnalyzerManager::AnalyzerManagerPrivate::startAction(int index) // user selected to stop the active run. stop it, activate restart on stop m_restartOnStop = true; - stopTool(); + stopTool(m_currentTool); return; } - IAnalyzerTool *tool = toolAt(index); IAnalyzerTool::ToolMode toolMode = tool->mode(); // Check the project for whether the build config is in the correct mode @@ -588,15 +636,21 @@ void AnalyzerManager::AnalyzerManagerPrivate::startAction(int index) updateRunActions(); } - -void AnalyzerManager::AnalyzerManagerPrivate::stopTool() +void AnalyzerManager::AnalyzerManagerPrivate::startTool() { + if (m_currentTool) + m_currentTool->startTool(); +} + +void AnalyzerManager::AnalyzerManagerPrivate::stopTool(IAnalyzerTool *tool) +{ + QTC_ASSERT(tool == m_currentTool, /**/); if (m_currentRunControl) return; // be sure to call handleToolFinished only once, and only when the engine is really finished if (m_currentRunControl->stop() == ProjectExplorer::RunControl::StoppedSynchronously) - handleToolFinished(); + handleToolFinished(tool); // else: wait for the finished() signal to trigger handleToolFinished() } @@ -610,14 +664,20 @@ void AnalyzerManager::AnalyzerManagerPrivate::modeChanged(IMode *mode) m_mainWindow->setDockActionsVisible(makeVisible); } -void AnalyzerManager::AnalyzerManagerPrivate::selectAction(int idx) +void AnalyzerManager::AnalyzerManagerPrivate::selectTool(int index) { + selectTool(m_tools[index]); +} + +void AnalyzerManager::AnalyzerManagerPrivate::selectTool(IAnalyzerTool *tool) +{ + int idx = indexOf(tool); QTC_ASSERT(idx >= 0, return); - if (m_currentIndex == idx) + if (m_currentTool == tool) return; - if (m_currentIndex != -1) { - IAnalyzerTool *oldTool = toolAt(m_currentIndex); + if (m_currentTool) { + IAnalyzerTool *oldTool = m_currentTool; saveToolSettings(oldTool); ActionManager *am = ICore::instance()->actionManager(); @@ -638,113 +698,81 @@ void AnalyzerManager::AnalyzerManagerPrivate::selectAction(int idx) oldTool->toolDeselected(); } - m_currentIndex = idx; + m_currentTool = tool; m_toolBox->setCurrentIndex(idx); m_controlsWidget->setCurrentIndex(idx); - IAnalyzerTool *newTool = toolAt(idx); - - const bool firstTime = !m_defaultSettings.contains(newTool); + const bool firstTime = !m_defaultSettings.contains(tool); if (firstTime) { - newTool->initializeDockWidgets(); - m_defaultSettings.insert(newTool, m_mainWindow->saveSettings()); + tool->initializeDockWidgets(); + m_defaultSettings.insert(tool, m_mainWindow->saveSettings()); } else { - foreach (QDockWidget *widget, m_toolWidgets.value(newTool)) + foreach (QDockWidget *widget, m_toolWidgets.value(tool)) addDock(Qt::DockWidgetArea(widget->property(INITIAL_DOCK_AREA).toInt()), widget); } - loadToolSettings(newTool); + loadToolSettings(tool); updateRunActions(); } -void AnalyzerManager::AnalyzerManagerPrivate::selectAction() +void AnalyzerManager::AnalyzerManagerPrivate::selectTool() { - selectAction(qobject_cast(sender())); + selectTool(qobject_cast(sender())); } -void AnalyzerManager::AnalyzerManagerPrivate::selectAction(QAction *action) +void AnalyzerManager::AnalyzerManagerPrivate::selectTool(QAction *action) { - selectAction(indexOf(action)); -} - -int AnalyzerManager::AnalyzerManagerPrivate::indexOf(QAction *action) const -{ - for (int i = 0; i != m_actions.size(); ++i) - if (m_actions.at(i).action == action) - return i; - return -1; + selectTool(m_toolFromAction[action]); } int AnalyzerManager::AnalyzerManagerPrivate::indexOf(IAnalyzerTool *tool) const { - for (int i = 0; i != m_actions.size(); ++i) - if (toolAt(i) == tool) - return i; - return -1; + return m_tools.indexOf(tool); } IAnalyzerTool *AnalyzerManager::AnalyzerManagerPrivate::toolAt(int idx) const { QTC_ASSERT(idx >= 0, return 0); - QTC_ASSERT(idx < m_actions.size(), return 0); - return m_actions.at(idx).tool; + QTC_ASSERT(idx < m_tools.size(), return 0); + return m_tools.at(idx); } -void AnalyzerManager::AnalyzerManagerPrivate::addToolAction(IAnalyzerTool *tool, bool local) +void AnalyzerManager::AnalyzerManagerPrivate::addTool(IAnalyzerTool *tool) { ActionManager *am = Core::ICore::instance()->actionManager(); + delayedInit(); // be sure that there is a valid IMode instance - QString actionId = QString("Action.Analyzer.Tools.%1").arg(m_actions.size()); - QString displayName = tool->displayName() + (local ? QString() : tr(" (Remote)")); + QString actionId = QString("Action.Analyzer.Tools." + tool->id()); + QString displayName = tool->displayName(); QAction *action = new QAction(displayName, 0); - - ToolData data; - data.tool = tool; - data.local = local; - data.action = action; - m_actions.append(data); + qDebug() << "ACTION: " << tool << actionId; Core::Command *command = am->registerAction(action, actionId, Core::Context(Core::Constants::C_GLOBAL)); - m_menu->addAction(command, local ? G_ANALYZER_TOOLS : G_ANALYZER_REMOTE_TOOLS); - connect(action, SIGNAL(triggered()), SLOT(selectAction())); + m_menu->addAction(command, QString::fromLatin1(tool->menuGroup())); + connect(action, SIGNAL(triggered()), SLOT(selectTool())); const bool blocked = m_toolBox->blockSignals(true); // Do not make current. m_toolBox->addItem(displayName); m_toolBox->blockSignals(blocked); m_toolBox->setEnabled(true); -} - -void AnalyzerManager::AnalyzerManagerPrivate::addTool(IAnalyzerTool *tool) -{ - delayedInit(); // be sure that there is a valid IMode instance - m_tools.append(tool); - if (tool->canRunLocally()) - addToolAction(tool, true); - if (tool->canRunRemotely()) - addToolAction(tool, false); // Populate controls widget. QWidget *controlWidget = tool->createControlWidget(); // might be 0 m_controlsWidget->addWidget(controlWidget ? controlWidget : AnalyzerUtils::createDummyWidget()); - tool->initialize(); + m_tools.append(tool); + m_toolFromAction[action] = tool; } -void AnalyzerManager::AnalyzerManagerPrivate::runControlCreated(AnalyzerRunControl *rc) -{ - QTC_ASSERT(!m_currentRunControl, /**/); - m_currentRunControl = rc; - connect(rc, SIGNAL(finished()), this, SLOT(handleToolFinished())); -} - -void AnalyzerManager::AnalyzerManagerPrivate::handleToolFinished() +void AnalyzerManager::AnalyzerManagerPrivate::handleToolFinished(IAnalyzerTool *tool) { + QTC_ASSERT(tool == m_currentTool, /**/); m_currentRunControl = 0; updateRunActions(); if (m_restartOnStop) { - startAction(m_currentIndex); + m_currentTool->startTool(); m_restartOnStop = false; } } @@ -781,12 +809,12 @@ void AnalyzerManager::AnalyzerManagerPrivate::updateRunActions() bool startEnabled = !m_currentRunControl && pe->canRun(project, Constants::MODE_ANALYZE) - && m_currentIndex >= 0; + && m_currentTool >= 0; QString disabledReason; if (m_currentRunControl) disabledReason = tr("An analysis is still in progress."); - else if (m_currentIndex == -1) + else if (!m_currentTool) disabledReason = tr("No analyzer tool selected."); else disabledReason = pe->cannotRunReason(project, Constants::MODE_ANALYZE); @@ -825,42 +853,37 @@ void AnalyzerManager::extensionsInitialized() const QSettings *settings = Core::ICore::instance()->settings(); const QString lastActiveToolId = settings->value(QLatin1String(lastActiveToolC), QString()).toString(); - int lastAction = 0; + IAnalyzerTool *lastTool = 0; foreach (IAnalyzerTool *tool, d->m_tools) { tool->extensionsInitialized(); if (tool->id() == lastActiveToolId) - lastAction = d->indexOf(tool); + lastTool = tool; } - d->selectAction(lastAction); + d->selectTool(lastTool); } void AnalyzerManager::shutdown() { - d->saveToolSettings(d->m_actions[d->m_currentIndex].tool); -} - -AnalyzerManager *AnalyzerManager::instance() -{ - return m_instance; + d->saveToolSettings(d->m_currentTool); } void AnalyzerManager::registerRunControlFactory(ProjectExplorer::IRunControlFactory *factory) { - d->registerRunControlFactory(factory); + m_instance->d->registerRunControlFactory(factory); } void AnalyzerManager::addTool(IAnalyzerTool *tool) { - d->addTool(tool); + m_instance->d->addTool(tool); } QDockWidget *AnalyzerManager::createDockWidget(IAnalyzerTool *tool, const QString &title, QWidget *widget, Qt::DockWidgetArea area) { - QTC_ASSERT(!widget->objectName().isEmpty(), return 0;); - + QTC_ASSERT(!widget->objectName().isEmpty(), return 0); + AnalyzerManagerPrivate *d = m_instance->d; QDockWidget *dockWidget = d->m_mainWindow->addDockForWidget(widget); dockWidget->setProperty(INITIAL_DOCK_AREA, int(area)); d->m_dockWidgets.append(AnalyzerManagerPrivate::DockPtr(dockWidget)); @@ -870,37 +893,30 @@ QDockWidget *AnalyzerManager::createDockWidget(IAnalyzerTool *tool, const QStrin return dockWidget; } -IAnalyzerEngine *AnalyzerManager::createEngine(const AnalyzerStartParameters &sp, - ProjectExplorer::RunConfiguration *runConfiguration) -{ - IAnalyzerTool *tool = d->toolAt(d->m_currentIndex); - QTC_ASSERT(tool, return 0); - return tool->createEngine(sp, runConfiguration); -} - void AnalyzerManager::selectTool(IAnalyzerTool *tool) { - d->selectAction(d->indexOf(tool)); + m_instance->d->selectTool(tool); } void AnalyzerManager::startTool(IAnalyzerTool *tool) { - d->startAction(d->indexOf(tool)); + QTC_ASSERT(tool == m_instance->d->m_currentTool, return); + m_instance->d->startTool(); } -Utils::FancyMainWindow *AnalyzerManager::mainWindow() const +Utils::FancyMainWindow *AnalyzerManager::mainWindow() { - return d->m_mainWindow; + return m_instance->d->m_mainWindow; } void AnalyzerManager::AnalyzerManagerPrivate::resetLayout() { - m_mainWindow->restoreSettings(m_defaultSettings.value(toolAt(m_currentIndex))); + m_mainWindow->restoreSettings(m_defaultSettings.value(m_currentTool)); } void AnalyzerManager::showStatusMessage(const QString &message, int timeoutMS) { - d->m_statusLabel->showStatusMessage(message, timeoutMS); + m_instance->d->m_statusLabel->showStatusMessage(message, timeoutMS); } void AnalyzerManager::showPermanentStatusMessage(const QString &message) @@ -922,13 +938,43 @@ QString AnalyzerManager::msgToolFinished(const QString &name, int issuesFound) void AnalyzerManager::showMode() { - if (d->m_mode) - ModeManager::instance()->activateMode(d->m_mode->id()); + if (m_instance->d->m_mode) + ModeManager::instance()->activateMode(m_instance->d->m_mode->id()); } -void AnalyzerManager::stopTool() +void AnalyzerManager::stopTool(IAnalyzerTool *tool) { - d->stopTool(); + m_instance->stopTool(tool); +} + +void AnalyzerManager::startLocalTool(IAnalyzerTool *tool) +{ + m_instance->startLocalTool(tool); +} + +void AnalyzerManager::startRemoteTool(IAnalyzerTool *tool) +{ + m_instance->startRemoteTool(tool); +} + +ProjectExplorer::RunControl *AnalyzerManager::createRunControl + (ProjectExplorer::RunConfiguration *runConfiguration, const QString &mode) +{ + return m_instance->createRunControl(runConfiguration, mode); +} + +void AnalyzerManager::handleToolFinished(IAnalyzerTool *tool) +{ + m_instance->d->handleToolFinished(tool); +} + +IAnalyzerTool *AnalyzerManager::toolById(const QByteArray &id) +{ + foreach (IAnalyzerTool *tool, m_instance->d->m_tools) + if (tool->id() == id) + return tool; + QTC_ASSERT(false, qDebug() << "NO ANAYLYZER TOOL FOUND FOR ID" << id); + return 0; } #include "analyzermanager.moc" diff --git a/src/plugins/analyzerbase/analyzermanager.h b/src/plugins/analyzerbase/analyzermanager.h index a46ce59cb10..bb511486bbf 100644 --- a/src/plugins/analyzerbase/analyzermanager.h +++ b/src/plugins/analyzerbase/analyzermanager.h @@ -48,10 +48,6 @@ namespace Utils { class FancyMainWindow; } -namespace ProjectExplorer { -class RunConfiguration; -} - namespace Analyzer { class IAnalyzerTool; class IAnalyzerEngine; @@ -65,37 +61,39 @@ public: explicit AnalyzerManager(QObject *parent = 0); ~AnalyzerManager(); - static AnalyzerManager *instance(); - void registerRunControlFactory(ProjectExplorer::IRunControlFactory *factory); - + static void registerRunControlFactory(ProjectExplorer::IRunControlFactory *factory); void extensionsInitialized(); void shutdown(); - /** - * Register a tool and initialize it. - */ - void addTool(Analyzer::IAnalyzerTool *tool); + static ProjectExplorer::RunControl *createRunControl + (ProjectExplorer::RunConfiguration *runConfiguration, const QString &mode); + + // Register a tool and initialize it. + static void addTool(Analyzer::IAnalyzerTool *tool); + static IAnalyzerTool *toolById(const QByteArray &id); // Dockwidgets are registered to the main window. - QDockWidget *createDockWidget(IAnalyzerTool *tool, const QString &title, + static QDockWidget *createDockWidget(IAnalyzerTool *tool, const QString &title, QWidget *widget, Qt::DockWidgetArea area = Qt::TopDockWidgetArea); - Utils::FancyMainWindow *mainWindow() const; + static Utils::FancyMainWindow *mainWindow(); - void showMode(); - void selectTool(IAnalyzerTool *tool); - void startTool(IAnalyzerTool *tool); - void stopTool(); + static void showMode(); + static void selectTool(IAnalyzerTool *tool); + static void startTool(IAnalyzerTool *tool); + static void stopTool(IAnalyzerTool *tool); + + // Convienience functions. + static void startLocalTool(IAnalyzerTool *tool); + static void startRemoteTool(IAnalyzerTool *tool); static QString msgToolStarted(const QString &name); static QString msgToolFinished(const QString &name, int issuesFound); - IAnalyzerEngine *createEngine(const AnalyzerStartParameters &sp, - ProjectExplorer::RunConfiguration *runConfiguration); + static void showStatusMessage(const QString &message, int timeoutMS = 10000); + static void showPermanentStatusMessage(const QString &message); -public slots: - void showStatusMessage(const QString &message, int timeoutMS = 10000); - void showPermanentStatusMessage(const QString &message); + static void handleToolFinished(IAnalyzerTool *tool); private: class AnalyzerManagerPrivate; diff --git a/src/plugins/analyzerbase/analyzerruncontrol.cpp b/src/plugins/analyzerbase/analyzerruncontrol.cpp index 920c62ef107..a9f42e5408a 100644 --- a/src/plugins/analyzerbase/analyzerruncontrol.cpp +++ b/src/plugins/analyzerbase/analyzerruncontrol.cpp @@ -47,6 +47,7 @@ #include #include +#include using namespace Analyzer; @@ -67,12 +68,12 @@ AnalyzerRunControl::Private::Private() // AnalyzerRunControl //////////////////////////////////////////////////// -AnalyzerRunControl::AnalyzerRunControl(const AnalyzerStartParameters &sp, - RunConfiguration *runConfiguration) +AnalyzerRunControl::AnalyzerRunControl(IAnalyzerTool *tool, + const AnalyzerStartParameters &sp, RunConfiguration *runConfiguration) : RunControl(runConfiguration, Constants::MODE_ANALYZE), d(new Private) { - d->m_engine = AnalyzerManager::instance()->createEngine(sp, runConfiguration); + d->m_engine = tool->createEngine(sp, runConfiguration); if (!d->m_engine) return; @@ -83,6 +84,7 @@ AnalyzerRunControl::AnalyzerRunControl(const AnalyzerStartParameters &sp, SLOT(addTask(ProjectExplorer::Task::TaskType,QString,QString,int))); connect(d->m_engine, SIGNAL(finished()), SLOT(engineFinished())); + connect(this, SIGNAL(finished()), SLOT(runControlFinished()), Qt::QueuedConnection); } AnalyzerRunControl::~AnalyzerRunControl() @@ -127,6 +129,11 @@ void AnalyzerRunControl::engineFinished() emit finished(); } +void AnalyzerRunControl::runControlFinished() +{ + AnalyzerManager::handleToolFinished(d->m_engine->tool()); +} + bool AnalyzerRunControl::isRunning() const { return d->m_isRunning; diff --git a/src/plugins/analyzerbase/analyzerruncontrol.h b/src/plugins/analyzerbase/analyzerruncontrol.h index 59a2a2e7209..a2d0c893d1d 100644 --- a/src/plugins/analyzerbase/analyzerruncontrol.h +++ b/src/plugins/analyzerbase/analyzerruncontrol.h @@ -45,6 +45,7 @@ namespace Analyzer { class AnalyzerStartParameters; +class IAnalyzerTool; class ANALYZER_EXPORT AnalyzerRunControl: public ProjectExplorer::RunControl { @@ -52,8 +53,8 @@ class ANALYZER_EXPORT AnalyzerRunControl: public ProjectExplorer::RunControl public: typedef ProjectExplorer::RunConfiguration RunConfiguration; - // the constructor is likely to gain more arguments later - explicit AnalyzerRunControl(const AnalyzerStartParameters &sp, RunConfiguration *runConfiguration); + AnalyzerRunControl(IAnalyzerTool *tool, const AnalyzerStartParameters &sp, + RunConfiguration *runConfiguration); ~AnalyzerRunControl(); // pure virtuals from ProjectExplorer::RunControl @@ -70,6 +71,7 @@ private slots: const QString &file, int line); void engineFinished(); + void runControlFinished(); private: class Private; diff --git a/src/plugins/analyzerbase/analyzerruncontrolfactory.cpp b/src/plugins/analyzerbase/analyzerruncontrolfactory.cpp index 3e7efb81e85..a3a5258e9b6 100644 --- a/src/plugins/analyzerbase/analyzerruncontrolfactory.cpp +++ b/src/plugins/analyzerbase/analyzerruncontrolfactory.cpp @@ -33,59 +33,25 @@ #include "analyzerruncontrolfactory.h" #include "analyzerruncontrol.h" #include "analyzerconstants.h" +#include "analyzermanager.h" #include "analyzerrunconfigwidget.h" #include "analyzersettings.h" #include "analyzerstartparameters.h" -#include - #include - -#include -#include +#include #include using namespace Analyzer; using namespace Analyzer::Internal; -AnalyzerStartParameters localStartParameters(ProjectExplorer::RunConfiguration *runConfiguration) -{ - AnalyzerStartParameters sp; - QTC_ASSERT(runConfiguration, return sp); - ProjectExplorer::LocalApplicationRunConfiguration *rc = - qobject_cast(runConfiguration); - QTC_ASSERT(rc, return sp); +///////////////////////////////////////////////////////////////////////////////// +// +// AnalyzerRunControlFactory +// +///////////////////////////////////////////////////////////////////////////////// - sp.startMode = StartLocal; - sp.environment = rc->environment(); - sp.workingDirectory = rc->workingDirectory(); - sp.debuggee = rc->executable(); - sp.debuggeeArgs = rc->commandLineArguments(); - sp.displayName = rc->displayName(); - sp.connParams.host = QLatin1String("localhost"); - sp.connParams.port = rc->qmlDebugServerPort(); - return sp; -} - -AnalyzerStartParameters remoteLinuxStartParameters(ProjectExplorer::RunConfiguration *runConfiguration) -{ - AnalyzerStartParameters sp; - RemoteLinux::RemoteLinuxRunConfiguration * const rc - = qobject_cast(runConfiguration); - QTC_ASSERT(rc, return sp); - - sp.debuggee = rc->remoteExecutableFilePath(); - sp.debuggeeArgs = rc->arguments(); - sp.connParams = rc->deviceConfig()->sshParameters(); - sp.analyzerCmdPrefix = rc->commandPrefix(); - sp.startMode = StartRemote; - sp.displayName = rc->displayName(); - return sp; -} - - -// AnalyzerRunControlFactory //////////////////////////////////////////////////// AnalyzerRunControlFactory::AnalyzerRunControlFactory(QObject *parent) : IRunControlFactory(parent) { @@ -100,26 +66,7 @@ ProjectExplorer::RunControl *AnalyzerRunControlFactory::create(RunConfiguration const QString &mode) { QTC_ASSERT(canRun(runConfiguration, mode), return 0); - - AnalyzerStartParameters sp; - if (qobject_cast(runConfiguration)) { - sp = localStartParameters(runConfiguration); - } else if (qobject_cast(runConfiguration)) { - sp = remoteLinuxStartParameters(runConfiguration); - } else { - // might be S60DeviceRunfiguration, or something else ... - sp.startMode = StartRemote; - } - - return create(sp, runConfiguration); -} - -AnalyzerRunControl *AnalyzerRunControlFactory::create(const AnalyzerStartParameters &sp, - RunConfiguration *runConfiguration) -{ - AnalyzerRunControl *rc = new AnalyzerRunControl(sp, runConfiguration); - emit runControlCreated(rc); - return rc; + return AnalyzerManager::createRunControl(runConfiguration, mode); } QString AnalyzerRunControlFactory::displayName() const diff --git a/src/plugins/analyzerbase/analyzerruncontrolfactory.h b/src/plugins/analyzerbase/analyzerruncontrolfactory.h index 7c518f15cc8..573c87bbfff 100644 --- a/src/plugins/analyzerbase/analyzerruncontrolfactory.h +++ b/src/plugins/analyzerbase/analyzerruncontrolfactory.h @@ -39,6 +39,7 @@ namespace Analyzer { class AnalyzerRunControl; class AnalyzerStartParameters; +class IAnalyzerTool; namespace Internal { @@ -52,10 +53,9 @@ public: typedef ProjectExplorer::RunConfiguration RunConfiguration; typedef ProjectExplorer::RunControl RunControl; - // virtuals from IRunControlFactory + // IRunControlFactory bool canRun(RunConfiguration *runConfiguration, const QString &mode) const; RunControl *create(RunConfiguration *runConfiguration, const QString &mode); - AnalyzerRunControl *create(const AnalyzerStartParameters &sp, RunConfiguration *rc = 0); QString displayName() const; ProjectExplorer::IRunConfigurationAspect *createRunConfigurationAspect(); diff --git a/src/plugins/analyzerbase/analyzerstartparameters.h b/src/plugins/analyzerbase/analyzerstartparameters.h index a867108c42f..b82a4e85fee 100644 --- a/src/plugins/analyzerbase/analyzerstartparameters.h +++ b/src/plugins/analyzerbase/analyzerstartparameters.h @@ -57,6 +57,7 @@ public: AnalyzerStartMode startMode; Utils::SshConnectionParameters connParams; + QByteArray toolId; QString debuggee; QString debuggeeArgs; QString analyzerCmdPrefix; diff --git a/src/plugins/analyzerbase/ianalyzerengine.cpp b/src/plugins/analyzerbase/ianalyzerengine.cpp index 1da091d93ca..1d9ac39eab4 100644 --- a/src/plugins/analyzerbase/ianalyzerengine.cpp +++ b/src/plugins/analyzerbase/ianalyzerengine.cpp @@ -36,21 +36,12 @@ namespace Analyzer { -IAnalyzerEngine::IAnalyzerEngine(const AnalyzerStartParameters &sp, - ProjectExplorer::RunConfiguration *runConfiguration) - : m_runConfig(runConfiguration) - , m_sp(sp) +IAnalyzerEngine::IAnalyzerEngine(IAnalyzerTool *tool, const AnalyzerStartParameters &sp, + ProjectExplorer::RunConfiguration *runConfiguration) { -} - -ProjectExplorer::RunConfiguration *IAnalyzerEngine::runConfiguration() const -{ - return m_runConfig; -} - -AnalyzerStartParameters IAnalyzerEngine::startParameters() const -{ - return m_sp; + m_runConfig = runConfiguration; + m_sp = sp; + m_tool = tool; } } // namespace Analyzer diff --git a/src/plugins/analyzerbase/ianalyzerengine.h b/src/plugins/analyzerbase/ianalyzerengine.h index d8a9bd88957..d3191682fc2 100644 --- a/src/plugins/analyzerbase/ianalyzerengine.h +++ b/src/plugins/analyzerbase/ianalyzerengine.h @@ -51,6 +51,8 @@ class RunConfiguration; namespace Analyzer { +class IAnalyzerTool; + /** * An IAnalyzerEngine instance handles the launch of an analyzation tool. * @@ -61,40 +63,44 @@ class ANALYZER_EXPORT IAnalyzerEngine : public QObject Q_OBJECT public: - explicit IAnalyzerEngine(const AnalyzerStartParameters &sp, + IAnalyzerEngine(IAnalyzerTool *tool, const AnalyzerStartParameters &sp, ProjectExplorer::RunConfiguration *runConfiguration = 0); - /// start analyzation process + /// Start analyzation process. virtual void start() = 0; - /// trigger async stop of the analyzation process + /// Trigger async stop of the analyzation process. virtual void stop() = 0; - /// controller actions + /// Controller actions. virtual bool canPause() const { return false; } virtual void pause() {} virtual void unpause() {} - /// the active run configuration for this engine, might be zero - ProjectExplorer::RunConfiguration *runConfiguration() const; + /// The active run configuration for this engine, might be zero. + ProjectExplorer::RunConfiguration *runConfiguration() const { return m_runConfig; } - /// the start parameters for this engine - AnalyzerStartParameters startParameters() const; + /// The start parameters for this engine. + const AnalyzerStartParameters &startParameters() const { return m_sp; } + + /// The tool this engine is associated with. + IAnalyzerTool *tool() { return m_tool; } signals: - /// should be emitted when the debuggee outputted something + /// Should be emitted when the debuggee outputted something. void outputReceived(const QString &, Utils::OutputFormat format); - /// can be emitted when you want to show a task, e.g. to display an error + /// Can be emitted when you want to show a task, e.g. to display an error. void taskToBeAdded(ProjectExplorer::Task::TaskType type, const QString &description, const QString &file, int line); - /// must be emitted when the engine finished + /// Must be emitted when the engine finished. void finished(); - /// must be emitted when the engine is starting + /// Must be emitted when the engine is starting. void starting(const Analyzer::IAnalyzerEngine *); private: ProjectExplorer::RunConfiguration *m_runConfig; AnalyzerStartParameters m_sp; + IAnalyzerTool *m_tool; }; } // namespace Analyzer diff --git a/src/plugins/analyzerbase/ianalyzertool.h b/src/plugins/analyzerbase/ianalyzertool.h index 0e77b82199f..222713741c5 100644 --- a/src/plugins/analyzerbase/ianalyzertool.h +++ b/src/plugins/analyzerbase/ianalyzertool.h @@ -67,11 +67,13 @@ public: explicit IAnalyzerTool(QObject *parent = 0); /// Returns a unique ID for this tool. - virtual QString id() const = 0; + virtual QByteArray id() const = 0; /// Returns a short user readable display name for this tool. virtual QString displayName() const = 0; /// Returns a user readable description name for this tool. virtual QString description() const = 0; + /// Returns the name of the menu group of the start action. + virtual QByteArray menuGroup() const = 0; /** * The mode in which this tool should preferably be run @@ -89,11 +91,6 @@ public: static QString modeString(ToolMode mode); - /** - * The implementation should setup widgets for the output pane here and - * optionally add dock widgets in the analyzation mode if wanted. - */ - virtual void initialize() = 0; /// This gets called after all analyzation tools where initialized. virtual void extensionsInitialized() = 0; @@ -112,11 +109,8 @@ public: virtual IAnalyzerEngine *createEngine(const AnalyzerStartParameters &sp, ProjectExplorer::RunConfiguration *runConfiguration = 0) = 0; - /// Returns true when this tool can be run on the loca machine. - virtual bool canRunLocally() const = 0; - - /// Returns true when this tool can be run on a remote machine. - virtual bool canRunRemotely() const = 0; + /// Starts the tool. + virtual void startTool() = 0; /// Called when tools gets selected. virtual void toolSelected() const {} diff --git a/src/plugins/qmlprofiler/qmlprofilerengine.cpp b/src/plugins/qmlprofiler/qmlprofilerengine.cpp index 8d0f1ec981c..a1e700c3949 100644 --- a/src/plugins/qmlprofiler/qmlprofilerengine.cpp +++ b/src/plugins/qmlprofiler/qmlprofilerengine.cpp @@ -50,6 +50,8 @@ #include #include +using namespace Analyzer; + namespace QmlProfiler { namespace Internal { @@ -65,12 +67,12 @@ public: bool attach(const QString &address, uint port); static AbstractQmlProfilerRunner *createRunner(ProjectExplorer::RunConfiguration *runConfiguration, - const Analyzer::AnalyzerStartParameters &m_params, + const AnalyzerStartParameters &m_params, QObject *parent); QmlProfilerEngine *q; - Analyzer::AnalyzerStartParameters m_params; + AnalyzerStartParameters m_params; AbstractQmlProfilerRunner *m_runner; bool m_running; bool m_fetchingData; @@ -79,11 +81,11 @@ public: AbstractQmlProfilerRunner * QmlProfilerEngine::QmlProfilerEnginePrivate::createRunner(ProjectExplorer::RunConfiguration *configuration, - const Analyzer::AnalyzerStartParameters &m_params, + const AnalyzerStartParameters &m_params, QObject *parent) { AbstractQmlProfilerRunner *runner = 0; - if (m_params.startMode == Analyzer::StartLocal) { + if (m_params.startMode == StartLocal) { LocalQmlProfilerRunner::Configuration configuration; configuration.executable = m_params.debuggee; configuration.executableArguments = m_params.debuggeeArgs; @@ -92,7 +94,7 @@ QmlProfilerEngine::QmlProfilerEnginePrivate::createRunner(ProjectExplorer::RunCo configuration.port = m_params.connParams.port; runner = new LocalQmlProfilerRunner(configuration, parent); - } else if (m_params.startMode == Analyzer::StartRemote) { + } else if (m_params.startMode == StartRemote) { if (Qt4ProjectManager::S60DeviceRunConfiguration *s60Config = qobject_cast(configuration)) { runner = new CodaQmlProfilerRunner(s60Config, parent); @@ -108,9 +110,9 @@ QmlProfilerEngine::QmlProfilerEnginePrivate::createRunner(ProjectExplorer::RunCo // QmlProfilerEngine // -QmlProfilerEngine::QmlProfilerEngine(const Analyzer::AnalyzerStartParameters &sp, - ProjectExplorer::RunConfiguration *runConfiguration) - : IAnalyzerEngine(sp, runConfiguration) +QmlProfilerEngine::QmlProfilerEngine(IAnalyzerTool *tool, const AnalyzerStartParameters &sp, + ProjectExplorer::RunConfiguration *runConfiguration) + : IAnalyzerEngine(tool, sp, runConfiguration) , d(new QmlProfilerEnginePrivate(this)) { d->m_params = sp; @@ -157,7 +159,7 @@ void QmlProfilerEngine::stop() void QmlProfilerEngine::stopped() { d->m_running = false; - Analyzer::AnalyzerManager::instance()->stopTool(); + AnalyzerManager::stopTool(tool()); emit finished(); } diff --git a/src/plugins/qmlprofiler/qmlprofilerengine.h b/src/plugins/qmlprofiler/qmlprofilerengine.h index 85a041dfe52..8a975aee11c 100644 --- a/src/plugins/qmlprofiler/qmlprofilerengine.h +++ b/src/plugins/qmlprofiler/qmlprofilerengine.h @@ -43,9 +43,10 @@ namespace Internal { class QmlProfilerEngine : public Analyzer::IAnalyzerEngine { Q_OBJECT + public: - explicit QmlProfilerEngine(const Analyzer::AnalyzerStartParameters &sp, - ProjectExplorer::RunConfiguration *runConfiguration); + QmlProfilerEngine(Analyzer::IAnalyzerTool *tool, const Analyzer::AnalyzerStartParameters &sp, + ProjectExplorer::RunConfiguration *runConfiguration); ~QmlProfilerEngine(); signals: diff --git a/src/plugins/qmlprofiler/qmlprofilerplugin.cpp b/src/plugins/qmlprofiler/qmlprofilerplugin.cpp index 3f2dd503696..8e292b9dfca 100644 --- a/src/plugins/qmlprofiler/qmlprofilerplugin.cpp +++ b/src/plugins/qmlprofiler/qmlprofilerplugin.cpp @@ -32,98 +32,59 @@ **************************************************************************/ #include "qmlprofilerplugin.h" -#include "qmlprofilerconstants.h" -#include "qmlprojectanalyzerruncontrolfactory.h" -#include -#include -#include -#include -#include -#include +#include "qmlprofilertool.h" +#include "qmlprojectanalyzerruncontrolfactory.h" #include -#include -#include -#include -#include - #include -#include "qmlprofilertool.h" - using namespace Analyzer; using namespace QmlProfiler::Internal; -QmlProfilerPlugin *QmlProfilerPlugin::m_instance = 0; bool QmlProfilerPlugin::debugOutput = false; - class QmlProfilerPlugin::QmlProfilerPluginPrivate { public: - QmlProfilerPluginPrivate(QmlProfilerPlugin *qq): - q(qq) - {} - - void initialize(const QStringList &arguments, QString *errorString); - QmlProjectAnalyzerRunControlFactory *m_runControlFactory; - QmlProfilerPlugin *q; }; -void QmlProfilerPlugin::QmlProfilerPluginPrivate::initialize(const QStringList &arguments, QString *errorString) -{ - Q_UNUSED(arguments) - Q_UNUSED(errorString) - - m_runControlFactory = new QmlProjectAnalyzerRunControlFactory(); - Analyzer::AnalyzerManager::instance()->registerRunControlFactory(m_runControlFactory); -} - - - QmlProfilerPlugin::QmlProfilerPlugin() - : d(new QmlProfilerPluginPrivate(this)) -{ - m_instance = this; -} + : d(new QmlProfilerPluginPrivate()) +{} QmlProfilerPlugin::~QmlProfilerPlugin() { delete d; - m_instance = 0; } bool QmlProfilerPlugin::initialize(const QStringList &arguments, QString *errorString) { - d->initialize(arguments, errorString); - - AnalyzerManager::instance()->addTool(new QmlProfilerTool(this)); - + Q_UNUSED(arguments) + Q_UNUSED(errorString) + d->m_runControlFactory = new QmlProjectAnalyzerRunControlFactory(); + AnalyzerManager::registerRunControlFactory(d->m_runControlFactory); + AnalyzerManager::addTool(new QmlProfilerTool(true, this)); + AnalyzerManager::addTool(new QmlProfilerTool(false, this)); return true; } void QmlProfilerPlugin::extensionsInitialized() { - // Retrieve objects from the plugin manager's object pool + // Retrieve objects from the plugin manager's object pool. // "In the extensionsInitialized method, a plugin can be sure that all // plugins that depend on it are completely initialized." } ExtensionSystem::IPlugin::ShutdownFlag QmlProfilerPlugin::aboutToShutdown() { - // Save settings + // Save settings. // Disconnect from signals that are not needed during shutdown // Hide UI (if you add UI that is not in the main window directly) return SynchronousShutdown; } -QmlProfilerPlugin *QmlProfilerPlugin::instance() -{ - return m_instance; -} - Q_EXPORT_PLUGIN(QmlProfilerPlugin) diff --git a/src/plugins/qmlprofiler/qmlprofilerplugin.h b/src/plugins/qmlprofiler/qmlprofilerplugin.h index aa6a749c834..8690c6d7070 100644 --- a/src/plugins/qmlprofiler/qmlprofilerplugin.h +++ b/src/plugins/qmlprofiler/qmlprofilerplugin.h @@ -46,8 +46,6 @@ class QmlProfilerPlugin : public ExtensionSystem::IPlugin Q_OBJECT public: - static QmlProfilerPlugin *instance(); - QmlProfilerPlugin(); ~QmlProfilerPlugin(); @@ -60,8 +58,6 @@ public: private: class QmlProfilerPluginPrivate; QmlProfilerPluginPrivate *d; - - static QmlProfilerPlugin *m_instance; }; } // namespace Internal diff --git a/src/plugins/qmlprofiler/qmlprofilertool.cpp b/src/plugins/qmlprofiler/qmlprofilertool.cpp index bb810d04e86..a857f5b1bf4 100644 --- a/src/plugins/qmlprofiler/qmlprofilertool.cpp +++ b/src/plugins/qmlprofiler/qmlprofilertool.cpp @@ -92,6 +92,7 @@ public: QmlProfilerTool *q; + bool m_local; QDeclarativeDebugConnection *m_client; QTimer m_connectionTimer; int m_connectionAttempts; @@ -118,9 +119,10 @@ public: QString m_ostDevice; }; -QmlProfilerTool::QmlProfilerTool(QObject *parent) +QmlProfilerTool::QmlProfilerTool(bool local, QObject *parent) : IAnalyzerTool(parent), d(new QmlProfilerToolPrivate(this)) { + d->m_local = local; d->m_client = 0; d->m_connectionAttempts = 0; d->m_traceWindow = 0; @@ -132,6 +134,13 @@ QmlProfilerTool::QmlProfilerTool(QObject *parent) d->m_connectionTimer.setInterval(200); connect(&d->m_connectionTimer, SIGNAL(timeout()), SLOT(tryToConnect())); + + qmlRegisterType("Monitor", 1, 0, "Canvas"); + qmlRegisterType("Monitor", 1, 0, "TiledCanvas"); + qmlRegisterType(); + qmlRegisterType(); + qmlRegisterType(); + qmlRegisterType("Monitor", 1, 0,"TimelineView"); } QmlProfilerTool::~QmlProfilerTool() @@ -140,14 +149,26 @@ QmlProfilerTool::~QmlProfilerTool() delete d; } -QString QmlProfilerTool::id() const +QByteArray QmlProfilerTool::id() const { - return "QmlProfiler"; + return d->m_local ? "QmlLocalProfiler" : "QmlRemoteProfiler"; } QString QmlProfilerTool::displayName() const { - return tr("QML Profiler"); + return d->m_local ? tr("QML Profiler") : tr("QML Profiler (Remote)"); +} + +QByteArray QmlProfilerTool::menuGroup() const +{ + return d->m_local ? Analyzer::Constants::G_ANALYZER_TOOLS + : Analyzer::Constants::G_ANALYZER_REMOTE_TOOLS; +} + +void QmlProfilerTool::startTool() +{ + return d->m_local ? AnalyzerManager::startLocalTool(this) + : AnalyzerManager::startRemoteTool(this); } QString QmlProfilerTool::description() const @@ -164,7 +185,7 @@ IAnalyzerTool::ToolMode QmlProfilerTool::mode() const IAnalyzerEngine *QmlProfilerTool::createEngine(const AnalyzerStartParameters &sp, ProjectExplorer::RunConfiguration *runConfiguration) { - QmlProfilerEngine *engine = new QmlProfilerEngine(sp, runConfiguration); + QmlProfilerEngine *engine = new QmlProfilerEngine(this, sp, runConfiguration); // Check minimum Qt Version. We cannot really be sure what the Qt version // at runtime is, but guess that the active build configuraiton has been used. @@ -218,24 +239,9 @@ IAnalyzerEngine *QmlProfilerTool::createEngine(const AnalyzerStartParameters &sp return engine; } -void QmlProfilerTool::initialize() -{ - qmlRegisterType("Monitor", 1, 0, "Canvas"); - qmlRegisterType("Monitor", 1, 0, "TiledCanvas"); - qmlRegisterType(); - qmlRegisterType(); - qmlRegisterType(); - qmlRegisterType("Monitor", 1, 0,"TimelineView"); -} - -void QmlProfilerTool::extensionsInitialized() -{ -} - void QmlProfilerTool::initializeDockWidgets() { - Analyzer::AnalyzerManager *analyzerMgr = Analyzer::AnalyzerManager::instance(); - Utils::FancyMainWindow *mw = analyzerMgr->mainWindow(); + Utils::FancyMainWindow *mw = AnalyzerManager::mainWindow(); d->m_traceWindow = new TraceWindow(mw); d->m_traceWindow->reset(d->m_client); @@ -282,21 +288,14 @@ void QmlProfilerTool::initializeDockWidgets() updateAttachAction(false); - QDockWidget *summaryDock = - analyzerMgr->createDockWidget(this, tr("Bindings"), - d->m_summary, Qt::BottomDockWidgetArea); - - QDockWidget *timelineDock = - analyzerMgr->createDockWidget(this, tr("Timeline"), - d->m_traceWindow, Qt::BottomDockWidgetArea); - - QDockWidget *calleeDock = - analyzerMgr->createDockWidget(this, tr("Callees"), - d->m_calleetree, Qt::BottomDockWidgetArea); - - QDockWidget *callerDock = - analyzerMgr->createDockWidget(this, tr("Callers"), - d->m_callertree, Qt::BottomDockWidgetArea); + QDockWidget *summaryDock = AnalyzerManager::createDockWidget + (this, tr("Bindings"), d->m_summary, Qt::BottomDockWidgetArea); + QDockWidget *timelineDock = AnalyzerManager::createDockWidget + (this, tr("Timeline"), d->m_traceWindow, Qt::BottomDockWidgetArea); + QDockWidget *calleeDock = AnalyzerManager::createDockWidget + (this, tr("Callees"), d->m_calleetree, Qt::BottomDockWidgetArea); + QDockWidget *callerDock = AnalyzerManager::createDockWidget + (this, tr("Callers"), d->m_callertree, Qt::BottomDockWidgetArea); mw->splitDockWidget(mw->toolBarDockWidget(), summaryDock, Qt::Vertical); mw->tabifyDockWidget(summaryDock, timelineDock); @@ -447,17 +446,6 @@ void QmlProfilerTool::updateProjectFileList() d->m_project->files(ProjectExplorer::Project::ExcludeGeneratedFiles)); } -bool QmlProfilerTool::canRunRemotely() const -{ - // TODO: Is this correct? - return true; -} - -bool QmlProfilerTool::canRunLocally() const -{ - return true; -} - void QmlProfilerTool::clearDisplay() { d->m_traceWindow->clearDisplay(); @@ -479,7 +467,7 @@ void QmlProfilerTool::attach() d->m_tcpHost = dialog.address(); connectClient(d->m_tcpPort); - AnalyzerManager::instance()->showMode(); + AnalyzerManager::showMode(); } else { stopRecording(); } diff --git a/src/plugins/qmlprofiler/qmlprofilertool.h b/src/plugins/qmlprofiler/qmlprofilertool.h index 13e34375cda..c5b963aeb89 100644 --- a/src/plugins/qmlprofiler/qmlprofilertool.h +++ b/src/plugins/qmlprofiler/qmlprofilertool.h @@ -45,28 +45,26 @@ class QmlProfilerTool : public Analyzer::IAnalyzerTool Q_OBJECT public: - explicit QmlProfilerTool(QObject *parent = 0); + QmlProfilerTool(bool local, QObject *parent); ~QmlProfilerTool(); - QString id() const; + QByteArray id() const; QString displayName() const; + QByteArray menuGroup() const; QString description() const; ToolMode mode() const; - void initialize(); - void extensionsInitialized(); + void extensionsInitialized() {} void initializeDockWidgets(); void toolSelected(); void toolDeselected(); + void startTool(); Analyzer::IAnalyzerEngine *createEngine(const Analyzer::AnalyzerStartParameters &sp, ProjectExplorer::RunConfiguration *runConfiguration = 0); QWidget *createControlWidget(); - bool canRunRemotely() const; - bool canRunLocally() const; - public slots: void connectClient(int port); void disconnectClient(); diff --git a/src/plugins/qmlprofiler/qmlprojectanalyzerruncontrolfactory.cpp b/src/plugins/qmlprofiler/qmlprojectanalyzerruncontrolfactory.cpp index aad9d920f17..e1171609dc2 100644 --- a/src/plugins/qmlprofiler/qmlprojectanalyzerruncontrolfactory.cpp +++ b/src/plugins/qmlprofiler/qmlprojectanalyzerruncontrolfactory.cpp @@ -33,7 +33,9 @@ #include "qmlprojectanalyzerruncontrolfactory.h" #include "qmlprojectmanager/qmlprojectrunconfiguration.h" + #include +#include #include #include @@ -51,6 +53,7 @@ AnalyzerStartParameters localStartParameters(ProjectExplorer::RunConfiguration * qobject_cast(runConfiguration); QTC_ASSERT(rc, return sp); + sp.toolId = "QmlProfiler"; sp.startMode = StartLocal; sp.environment = rc->environment(); sp.workingDirectory = rc->workingDirectory(); @@ -76,19 +79,15 @@ bool QmlProjectAnalyzerRunControlFactory::canRun(RunConfiguration *runConfigurat RunControl *QmlProjectAnalyzerRunControlFactory::create(RunConfiguration *runConfiguration, const QString &mode) { - if (!qobject_cast(runConfiguration) - || mode != Constants::MODE_ANALYZE) { - return 0; - } + QTC_ASSERT(canRun(runConfiguration, mode), return 0); const AnalyzerStartParameters sp = localStartParameters(runConfiguration); return create(sp, runConfiguration); } -AnalyzerRunControl *QmlProjectAnalyzerRunControlFactory::create(const Analyzer::AnalyzerStartParameters &sp, RunConfiguration *runConfiguration) +AnalyzerRunControl *QmlProjectAnalyzerRunControlFactory::create + (const Analyzer::AnalyzerStartParameters &sp, RunConfiguration *runConfiguration) { - AnalyzerRunControl *rc = new AnalyzerRunControl(sp, runConfiguration); - emit runControlCreated(rc); - return rc; + return new AnalyzerRunControl(AnalyzerManager::toolById(sp.toolId), sp, runConfiguration); } QString QmlProjectAnalyzerRunControlFactory::displayName() const @@ -104,7 +103,7 @@ IRunConfigurationAspect *QmlProjectAnalyzerRunControlFactory::createRunConfigura RunConfigWidget *QmlProjectAnalyzerRunControlFactory::createConfigurationWidget(RunConfiguration *runConfiguration) { QmlProjectManager::QmlProjectRunConfiguration *localRc = - qobject_cast(runConfiguration); + qobject_cast(runConfiguration); if (!localRc) return 0; @@ -113,6 +112,7 @@ RunConfigWidget *QmlProjectAnalyzerRunControlFactory::createConfigurationWidget( return 0; Analyzer::AnalyzerRunConfigWidget *ret = new Analyzer::AnalyzerRunConfigWidget; + ret->setRunConfiguration(runConfiguration); return ret; } diff --git a/src/plugins/qmlprofiler/qmlprojectanalyzerruncontrolfactory.h b/src/plugins/qmlprofiler/qmlprojectanalyzerruncontrolfactory.h index c4de8f60dea..9c5592bc01e 100644 --- a/src/plugins/qmlprofiler/qmlprojectanalyzerruncontrolfactory.h +++ b/src/plugins/qmlprofiler/qmlprojectanalyzerruncontrolfactory.h @@ -51,10 +51,12 @@ public: QmlProjectAnalyzerRunControlFactory(QObject *parent = 0); // IRunControlFactory implementation + QString displayName() const; bool canRun(RunConfiguration *runConfiguration, const QString &mode) const; ProjectExplorer::RunControl *create(RunConfiguration *runConfiguration, const QString &mode); - Analyzer::AnalyzerRunControl *create(const Analyzer::AnalyzerStartParameters &sp, RunConfiguration *runConfiguration = 0); - QString displayName() const; + + // FIXME: Remove function. + Analyzer::AnalyzerRunControl *create(const Analyzer::AnalyzerStartParameters &sp, RunConfiguration *runConfiguration); ProjectExplorer::IRunConfigurationAspect *createRunConfigurationAspect(); ProjectExplorer::RunConfigWidget *createConfigurationWidget(RunConfiguration *runConfiguration); diff --git a/src/plugins/valgrind/callgrindengine.cpp b/src/plugins/valgrind/callgrindengine.cpp index 9fc18f85f0b..988c7093291 100644 --- a/src/plugins/valgrind/callgrindengine.cpp +++ b/src/plugins/valgrind/callgrindengine.cpp @@ -45,22 +45,24 @@ using namespace Analyzer; using namespace Valgrind; using namespace Valgrind::Internal; -CallgrindEngine::CallgrindEngine(const AnalyzerStartParameters &sp, - ProjectExplorer::RunConfiguration *runConfiguration) - : ValgrindEngine(sp, runConfiguration) +CallgrindEngine::CallgrindEngine(IAnalyzerTool *tool, const AnalyzerStartParameters &sp, + ProjectExplorer::RunConfiguration *runConfiguration) + : ValgrindEngine(tool, sp, runConfiguration) , m_markAsPaused(false) { connect(&m_runner, SIGNAL(finished()), this, SLOT(slotFinished())); connect(&m_runner, SIGNAL(started()), this, SLOT(slotStarted())); - connect(m_runner.parser(), SIGNAL(parserDataReady()), this, SLOT(slotFinished())); - - connect(&m_runner, SIGNAL(statusMessage(QString)), - Analyzer::AnalyzerManager::instance(), SLOT(showStatusMessage(QString))); + connect(&m_runner, SIGNAL(statusMessage(QString)), SLOT(showStatusMessage(QString))); m_progress->setProgressRange(0, 2); } +void CallgrindEngine::showStatusMessage(const QString &msg) +{ + AnalyzerManager::showStatusMessage(msg); +} + QStringList CallgrindEngine::toolArguments() const { QStringList arguments; diff --git a/src/plugins/valgrind/callgrindengine.h b/src/plugins/valgrind/callgrindengine.h index 33e8d426ca3..53a10a8a416 100644 --- a/src/plugins/valgrind/callgrindengine.h +++ b/src/plugins/valgrind/callgrindengine.h @@ -46,8 +46,8 @@ class CallgrindEngine : public Valgrind::Internal::ValgrindEngine Q_OBJECT public: - explicit CallgrindEngine(const Analyzer::AnalyzerStartParameters &sp, - ProjectExplorer::RunConfiguration *runConfiguration); + CallgrindEngine(Analyzer::IAnalyzerTool *tool, const Analyzer::AnalyzerStartParameters &sp, + ProjectExplorer::RunConfiguration *runConfiguration); void start(); @@ -79,15 +79,16 @@ protected: signals: void parserDataReady(CallgrindEngine *engine); +private slots: + void slotFinished(); + void slotStarted(); + void showStatusMessage(const QString &msg); + private: Valgrind::Callgrind::CallgrindRunner m_runner; bool m_markAsPaused; QStringList m_extraArguments; - -private slots: - void slotFinished(); - void slotStarted(); }; } // namespace Internal diff --git a/src/plugins/valgrind/callgrindtool.cpp b/src/plugins/valgrind/callgrindtool.cpp index 874a4fc00c6..9e084c96843 100644 --- a/src/plugins/valgrind/callgrindtool.cpp +++ b/src/plugins/valgrind/callgrindtool.cpp @@ -175,6 +175,7 @@ public slots: public: CallgrindTool *q; + bool m_local; DataModel *m_dataModel; DataProxyModel *m_proxyModel; StackBrowser *m_stackBrowser; @@ -217,6 +218,7 @@ public: CallgrindToolPrivate::CallgrindToolPrivate(CallgrindTool *parent) : q(parent) + , m_local(true) , m_dataModel(new DataModel(this)) , m_proxyModel(new DataProxyModel(this)) , m_stackBrowser(new StackBrowser(this)) @@ -497,10 +499,11 @@ static QToolButton *createToolButton(QAction *action) return button; } -CallgrindTool::CallgrindTool(QObject *parent) +CallgrindTool::CallgrindTool(bool local, QObject *parent) : Analyzer::IAnalyzerTool(parent) { d = new CallgrindToolPrivate(this); + d->m_local = local; Core::ICore *core = Core::ICore::instance(); // EditorManager @@ -514,14 +517,21 @@ CallgrindTool::~CallgrindTool() delete d; } -QString CallgrindTool::id() const +QByteArray CallgrindTool::id() const { - return "Callgrind"; + return d->m_local ? "CallgrindLocal" : "CallgrindRemote"; } QString CallgrindTool::displayName() const { - return tr("Valgrind Function Profile"); + return d->m_local ? tr("Valgrind Function Profile") + : tr("Valgrind Function Profile (Remote)"); +} + +QByteArray CallgrindTool::menuGroup() const +{ + return d->m_local ? Analyzer::Constants::G_ANALYZER_TOOLS + : Analyzer::Constants::G_ANALYZER_REMOTE_TOOLS; } QString CallgrindTool::description() const @@ -530,15 +540,19 @@ QString CallgrindTool::description() const "record function calls when a program runs."); } +void CallgrindTool::startTool() +{ + if (d->m_local) + AnalyzerManager::startLocalTool(this); + else + AnalyzerManager::startRemoteTool(this); +} + IAnalyzerTool::ToolMode CallgrindTool::mode() const { return ReleaseMode; } -void CallgrindTool::initialize() -{ -} - void CallgrindTool::extensionsInitialized() { Core::ICore *core = Core::ICore::instance(); @@ -577,8 +591,7 @@ void CallgrindTool::initializeDockWidgets() void CallgrindToolPrivate::initializeDockWidgets() { - AnalyzerManager *am = AnalyzerManager::instance(); - Utils::FancyMainWindow *mw = am->mainWindow(); + Utils::FancyMainWindow *mw = AnalyzerManager::mainWindow(); m_visualisation = new Visualisation(mw); m_visualisation->setFrameStyle(QFrame::NoFrame); m_visualisation->setObjectName("Valgrind.CallgrindToolPrivate.Visualisation"); @@ -621,21 +634,17 @@ void CallgrindToolPrivate::initializeDockWidgets() updateCostFormat(); - QDockWidget *callersDock = - am->createDockWidget(q, tr("Callers"), m_callersView, - Qt::BottomDockWidgetArea); + QDockWidget *callersDock = AnalyzerManager::createDockWidget + (q, tr("Callers"), m_callersView, Qt::BottomDockWidgetArea); - QDockWidget *flatDock = - am->createDockWidget(q, tr("Functions"), m_flatView, - Qt::BottomDockWidgetArea); + QDockWidget *flatDock = AnalyzerManager::createDockWidget + (q, tr("Functions"), m_flatView, Qt::BottomDockWidgetArea); - QDockWidget *calleesDock = - am->createDockWidget(q, tr("Callees"), m_calleesView, - Qt::BottomDockWidgetArea); + QDockWidget *calleesDock = AnalyzerManager::createDockWidget + (q, tr("Callees"), m_calleesView, Qt::BottomDockWidgetArea); - QDockWidget *visualizationDock = - am->createDockWidget(q, tr("Visualization"), m_visualisation, - Qt::RightDockWidgetArea); + QDockWidget *visualizationDock = AnalyzerManager::createDockWidget + (q, tr("Visualization"), m_visualisation, Qt::RightDockWidgetArea); visualizationDock->hide(); mw->splitDockWidget(mw->toolBarDockWidget(), calleesDock, Qt::Vertical); @@ -653,7 +662,7 @@ IAnalyzerEngine *CallgrindTool::createEngine(const AnalyzerStartParameters &sp, IAnalyzerEngine *CallgrindToolPrivate::createEngine(const AnalyzerStartParameters &sp, ProjectExplorer::RunConfiguration *runConfiguration) { - CallgrindEngine *engine = new CallgrindEngine(sp, runConfiguration); + CallgrindEngine *engine = new CallgrindEngine(q, sp, runConfiguration); connect(engine, SIGNAL(parserDataReady(CallgrindEngine *)), SLOT(takeParserData(CallgrindEngine *))); @@ -673,7 +682,7 @@ IAnalyzerEngine *CallgrindToolPrivate::createEngine(const AnalyzerStartParameter engine->setToggleCollectFunction(m_toggleCollectFunction); m_toggleCollectFunction.clear(); - AnalyzerManager::instance()->showStatusMessage(AnalyzerManager::msgToolStarted(q->displayName())); + AnalyzerManager::showStatusMessage(AnalyzerManager::msgToolStarted(q->displayName())); // apply project settings AnalyzerProjectSettings *analyzerSettings = runConfiguration->extraAspect(); @@ -862,7 +871,7 @@ void CallgrindToolPrivate::engineFinished() if (data) showParserResults(data); else - AnalyzerManager::instance()->showStatusMessage(tr("Profiling aborted.")); + AnalyzerManager::showStatusMessage(tr("Profiling aborted.")); } void CallgrindToolPrivate::showParserResults(const ParseData *data) @@ -879,7 +888,7 @@ void CallgrindToolPrivate::showParserResults(const ParseData *data) } else { msg = tr("Parsing failed."); } - AnalyzerManager::instance()->showStatusMessage(msg); + AnalyzerManager::showStatusMessage(msg); } void CallgrindToolPrivate::editorOpened(Core::IEditor *editor) @@ -938,8 +947,8 @@ void CallgrindToolPrivate::handleShowCostsOfFunction() m_toggleCollectFunction = QString("%1()").arg(qualifiedFunctionName); - AnalyzerManager::instance()->selectTool(q); - AnalyzerManager::instance()->startTool(q); + AnalyzerManager::selectTool(q); + AnalyzerManager::startTool(q); } void CallgrindToolPrivate::slotRequestDump() @@ -999,15 +1008,6 @@ void CallgrindToolPrivate::createTextMarks() } } -bool CallgrindTool::canRunLocally() const -{ -#ifdef Q_OS_WINDOWS - return false; -#else - return true; -#endif -} - } // namespace Internal } // namespace Valgrind diff --git a/src/plugins/valgrind/callgrindtool.h b/src/plugins/valgrind/callgrindtool.h index e3a438b70ac..f6a50b0c897 100644 --- a/src/plugins/valgrind/callgrindtool.h +++ b/src/plugins/valgrind/callgrindtool.h @@ -45,15 +45,16 @@ class CallgrindTool : public Analyzer::IAnalyzerTool Q_OBJECT public: - explicit CallgrindTool(QObject *parent = 0); + CallgrindTool(bool local, QObject *parent); ~CallgrindTool(); - QString id() const; + QByteArray id() const; QString displayName() const; + QByteArray menuGroup() const; QString description() const; ToolMode mode() const; - void initialize(); + void startTool(); void extensionsInitialized(); void initializeDockWidgets(); @@ -61,9 +62,6 @@ public: ProjectExplorer::RunConfiguration *runConfiguration = 0); QWidget *createControlWidget(); - bool canRunRemotely() const { return true; } - bool canRunLocally() const; - private: CallgrindToolPrivate *d; }; diff --git a/src/plugins/valgrind/memcheckengine.cpp b/src/plugins/valgrind/memcheckengine.cpp index 10e82fc1dbc..341b7a5470d 100644 --- a/src/plugins/valgrind/memcheckengine.cpp +++ b/src/plugins/valgrind/memcheckengine.cpp @@ -49,9 +49,9 @@ using namespace Valgrind::XmlProtocol; namespace Valgrind { namespace Internal { -MemcheckEngine::MemcheckEngine(const Analyzer::AnalyzerStartParameters &sp, - ProjectExplorer::RunConfiguration *runConfiguration) - : ValgrindEngine(sp, runConfiguration) +MemcheckEngine::MemcheckEngine(IAnalyzerTool *tool, const AnalyzerStartParameters &sp, + ProjectExplorer::RunConfiguration *runConfiguration) + : ValgrindEngine(tool, sp, runConfiguration) { connect(&m_parser, SIGNAL(error(Valgrind::XmlProtocol::Error)), SIGNAL(parserError(Valgrind::XmlProtocol::Error))); diff --git a/src/plugins/valgrind/memcheckengine.h b/src/plugins/valgrind/memcheckengine.h index de21bdf5cd4..6fb21599db4 100644 --- a/src/plugins/valgrind/memcheckengine.h +++ b/src/plugins/valgrind/memcheckengine.h @@ -46,9 +46,10 @@ namespace Internal { class MemcheckEngine : public ValgrindEngine { Q_OBJECT + public: - explicit MemcheckEngine(const Analyzer::AnalyzerStartParameters &sp, - ProjectExplorer::RunConfiguration *runConfiguration); + MemcheckEngine(Analyzer::IAnalyzerTool *tool, const Analyzer::AnalyzerStartParameters &sp, + ProjectExplorer::RunConfiguration *runConfiguration); void start(); void stop(); diff --git a/src/plugins/valgrind/memchecktool.cpp b/src/plugins/valgrind/memchecktool.cpp index 109029a15b9..f38f1143845 100644 --- a/src/plugins/valgrind/memchecktool.cpp +++ b/src/plugins/valgrind/memchecktool.cpp @@ -184,9 +184,10 @@ static void initKindFilterAction(QAction *action, const QList &kinds) action->setData(data); } -MemcheckTool::MemcheckTool(QObject *parent) +MemcheckTool::MemcheckTool(bool local, QObject *parent) : Analyzer::IAnalyzerTool(parent) { + m_local = local; m_settings = 0; m_errorModel = 0; m_errorProxyModel = 0; @@ -292,9 +293,15 @@ void MemcheckTool::maybeActiveRunConfigurationChanged() m_errorProxyModel->setFilterExternalIssues(memcheckSettings->filterExternalIssues()); } -QString MemcheckTool::id() const +QByteArray MemcheckTool::id() const { - return "Memcheck"; + return m_local ? "MemcheckLocal" : "MemcheckGlobal"; +} + +QByteArray MemcheckTool::menuGroup() const +{ + return m_local ? Analyzer::Constants::G_ANALYZER_TOOLS + : Analyzer::Constants::G_ANALYZER_REMOTE_TOOLS; } QString MemcheckTool::displayName() const @@ -313,6 +320,14 @@ IAnalyzerTool::ToolMode MemcheckTool::mode() const return DebugMode; } +void MemcheckTool::startTool() +{ + if (m_local) + AnalyzerManager::startLocalTool(this); + else + AnalyzerManager::startRemoteTool(this); +} + class FrameFinder : public ErrorListModel::RelevantFrameFinder { public: @@ -369,8 +384,7 @@ void MemcheckTool::ensureWidgets() if (m_errorView) return; - AnalyzerManager *am = AnalyzerManager::instance(); - Utils::FancyMainWindow *mw = am->mainWindow(); + Utils::FancyMainWindow *mw = AnalyzerManager::mainWindow(); m_errorView = new MemcheckErrorView; m_errorView->setObjectName(QLatin1String("MemcheckErrorView")); @@ -390,9 +404,8 @@ void MemcheckTool::ensureWidgets() m_errorView->setAutoScroll(false); m_errorView->setObjectName("Valgrind.MemcheckTool.ErrorView"); - QDockWidget *errorDock = - am->createDockWidget(this, tr("Memory Issues"), m_errorView, - Qt::BottomDockWidgetArea); + QDockWidget *errorDock = AnalyzerManager::createDockWidget + (this, tr("Memory Issues"), m_errorView, Qt::BottomDockWidgetArea); mw->splitDockWidget(mw->toolBarDockWidget(), errorDock, Qt::Vertical); connect(ProjectExplorer::ProjectExplorerPlugin::instance(), @@ -457,9 +470,10 @@ QWidget *MemcheckTool::createControlWidget() IAnalyzerEngine *MemcheckTool::createEngine(const AnalyzerStartParameters &sp, ProjectExplorer::RunConfiguration *runConfiguration) { - m_frameFinder->setFiles(runConfiguration ? runConfiguration->target()->project()->files(ProjectExplorer::Project::AllFiles) : QStringList()); + m_frameFinder->setFiles(runConfiguration ? runConfiguration->target() + ->project()->files(ProjectExplorer::Project::AllFiles) : QStringList()); - MemcheckEngine *engine = new MemcheckEngine(sp, runConfiguration); + MemcheckEngine *engine = new MemcheckEngine(this, sp, runConfiguration); connect(engine, SIGNAL(starting(const Analyzer::IAnalyzerEngine*)), this, SLOT(engineStarting(const Analyzer::IAnalyzerEngine*))); @@ -468,7 +482,7 @@ IAnalyzerEngine *MemcheckTool::createEngine(const AnalyzerStartParameters &sp, connect(engine, SIGNAL(internalParserError(QString)), this, SLOT(internalParserError(QString))); connect(engine, SIGNAL(finished()), this, SLOT(finished())); - AnalyzerManager::instance()->showStatusMessage(AnalyzerManager::msgToolStarted(displayName())); + AnalyzerManager::showStatusMessage(AnalyzerManager::msgToolStarted(displayName())); return engine; } @@ -556,21 +570,7 @@ void MemcheckTool::finished() m_goBack->setEnabled(n > 0); m_goNext->setEnabled(n > 0); const QString msg = AnalyzerManager::msgToolFinished(displayName(), n); - AnalyzerManager::instance()->showStatusMessage(msg); -} - -bool MemcheckTool::canRunRemotely() const -{ - return true; -} - -bool MemcheckTool::canRunLocally() const -{ -#ifdef Q_OS_WINDOWS - return false; -#else - return true; -#endif + AnalyzerManager::showStatusMessage(msg); } } // namespace Internal diff --git a/src/plugins/valgrind/memchecktool.h b/src/plugins/valgrind/memchecktool.h index 611471290ce..04ea84851a6 100644 --- a/src/plugins/valgrind/memchecktool.h +++ b/src/plugins/valgrind/memchecktool.h @@ -91,12 +91,13 @@ class MemcheckTool : public Analyzer::IAnalyzerTool Q_OBJECT public: - explicit MemcheckTool(QObject *parent = 0); + MemcheckTool(bool local, QObject *parent); - QString id() const; + QByteArray id() const; QString displayName() const; QString description() const; - ToolMode mode() const; + QByteArray menuGroup() const; + void startTool(); private slots: void settingsDestroyed(QObject *settings); @@ -111,11 +112,9 @@ private slots: void suppressionActionTriggered(); private: + ToolMode mode() const; void ensureWidgets(); - bool canRunRemotely() const; - bool canRunLocally() const; void initializeDockWidgets(); - void initialize() {} void extensionsInitialized(); QWidget *createControlWidget(); @@ -124,6 +123,8 @@ private: void clearErrorView(); +private: + bool m_local; Analyzer::AnalyzerSettings *m_settings; QMenu *m_filterMenu; diff --git a/src/plugins/valgrind/valgrindengine.cpp b/src/plugins/valgrind/valgrindengine.cpp index e4cddcfd895..d3a01fc7e4e 100644 --- a/src/plugins/valgrind/valgrindengine.cpp +++ b/src/plugins/valgrind/valgrindengine.cpp @@ -52,9 +52,9 @@ using namespace Analyzer; using namespace Valgrind::Internal; using namespace Utils; -ValgrindEngine::ValgrindEngine(const AnalyzerStartParameters &sp, - ProjectExplorer::RunConfiguration *runConfiguration) - : IAnalyzerEngine(sp, runConfiguration), +ValgrindEngine::ValgrindEngine(IAnalyzerTool *tool, const AnalyzerStartParameters &sp, + ProjectExplorer::RunConfiguration *runConfiguration) + : IAnalyzerEngine(tool, sp, runConfiguration), m_settings(0), m_progress(new QFutureInterface()), m_progressWatcher(new QFutureWatcher()), @@ -130,7 +130,7 @@ QString ValgrindEngine::executable() const void ValgrindEngine::handleProgressCanceled() { - AnalyzerManager::instance()->stopTool(); + AnalyzerManager::stopTool(tool()); } void ValgrindEngine::handleProgressFinished() diff --git a/src/plugins/valgrind/valgrindengine.h b/src/plugins/valgrind/valgrindengine.h index 2a790a59ed7..9618312d30b 100644 --- a/src/plugins/valgrind/valgrindengine.h +++ b/src/plugins/valgrind/valgrindengine.h @@ -37,7 +37,6 @@ #include "valgrind_global.h" -#include #include #include @@ -59,10 +58,12 @@ namespace Internal { class VALGRINDTOOLBASE_EXPORT ValgrindEngine : public Analyzer::IAnalyzerEngine { Q_OBJECT + public: - explicit ValgrindEngine(const Analyzer::AnalyzerStartParameters &sp, - ProjectExplorer::RunConfiguration *runConfiguration); - virtual ~ValgrindEngine(); + ValgrindEngine(Analyzer::IAnalyzerTool *tool, + const Analyzer::AnalyzerStartParameters &sp, + ProjectExplorer::RunConfiguration *runConfiguration); + ~ValgrindEngine(); void start(); void stop(); diff --git a/src/plugins/valgrind/valgrindplugin.cpp b/src/plugins/valgrind/valgrindplugin.cpp index e9f13d02654..2ff9472bc7b 100644 --- a/src/plugins/valgrind/valgrindplugin.cpp +++ b/src/plugins/valgrind/valgrindplugin.cpp @@ -80,14 +80,16 @@ bool ValgrindPlugin::initialize(const QStringList &, QString *) AnalyzerGlobalSettings::instance()->registerSubConfigs(&globalCallgrindFactory, &projectCallgrindFactory); AnalyzerGlobalSettings::instance()->registerSubConfigs(&globalMemcheckFactory, &projectMemcheckFactory); - AnalyzerManager::instance()->addTool(new MemcheckTool(this)); - AnalyzerManager::instance()->addTool(new CallgrindTool(this)); +#ifndef Q_OS_WIN + AnalyzerManager::addTool(new MemcheckTool(true, this)); +#endif + AnalyzerManager::addTool(new MemcheckTool(false, this)); +#ifndef Q_OS_WIN + AnalyzerManager::addTool(new CallgrindTool(true, this)); +#endif + AnalyzerManager::addTool(new CallgrindTool(false, this)); + return true; } - -void ValgrindPlugin::extensionsInitialized() -{ -} - Q_EXPORT_PLUGIN(Valgrind::Internal::ValgrindPlugin) diff --git a/src/plugins/valgrind/valgrindplugin.h b/src/plugins/valgrind/valgrindplugin.h index 6dee7dd5442..a59bffc5856 100644 --- a/src/plugins/valgrind/valgrindplugin.h +++ b/src/plugins/valgrind/valgrindplugin.h @@ -48,7 +48,7 @@ public: ValgrindPlugin() {} virtual bool initialize(const QStringList &arguments, QString *errorString); - virtual void extensionsInitialized(); + virtual void extensionsInitialized() {} }; } // namespace Internal From daefb0c83a58ca65acd2573f2d48bb8fe7bdc410 Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 30 Jun 2011 14:39:15 +0200 Subject: [PATCH 053/143] qmlprofiler: simplify plugin construction Change-Id: I26fe148669656637a82a30012e8632b105d4f073 Reviewed-on: http://codereview.qt.nokia.com/1050 Reviewed-by: Qt Sanity Bot Reviewed-by: hjk --- src/plugins/analyzerbase/analyzermanager.cpp | 9 +-------- src/plugins/qmlprofiler/qmlprofilerplugin.cpp | 15 +-------------- src/plugins/qmlprofiler/qmlprofilerplugin.h | 7 +------ 3 files changed, 3 insertions(+), 28 deletions(-) diff --git a/src/plugins/analyzerbase/analyzermanager.cpp b/src/plugins/analyzerbase/analyzermanager.cpp index 86f5b1d8175..3d295e6bcaf 100644 --- a/src/plugins/analyzerbase/analyzermanager.cpp +++ b/src/plugins/analyzerbase/analyzermanager.cpp @@ -221,7 +221,6 @@ public: void saveToolSettings(IAnalyzerTool *tool); void loadToolSettings(IAnalyzerTool *tool); - void registerRunControlFactory(ProjectExplorer::IRunControlFactory *factory); ProjectExplorer::RunControl *createRunControl (ProjectExplorer::RunConfiguration *runConfiguration, const QString &mode); @@ -286,7 +285,7 @@ AnalyzerManager::AnalyzerManagerPrivate::AnalyzerManagerPrivate(AnalyzerManager connect(m_toolBox, SIGNAL(currentIndexChanged(int)), SLOT(selectTool(int))); m_runControlFactory = new AnalyzerRunControlFactory(); - registerRunControlFactory(m_runControlFactory); + AnalyzerPlugin::instance()->addAutoReleasedObject(m_runControlFactory); setupActions(); @@ -307,12 +306,6 @@ AnalyzerManager::AnalyzerManagerPrivate::~AnalyzerManagerPrivate() } } -void AnalyzerManager::AnalyzerManagerPrivate::registerRunControlFactory - (ProjectExplorer::IRunControlFactory *factory) -{ - AnalyzerPlugin::instance()->addAutoReleasedObject(factory); -} - void AnalyzerManager::AnalyzerManagerPrivate::setupActions() { Core::ICore *core = Core::ICore::instance(); diff --git a/src/plugins/qmlprofiler/qmlprofilerplugin.cpp b/src/plugins/qmlprofiler/qmlprofilerplugin.cpp index 8e292b9dfca..3265cb28a79 100644 --- a/src/plugins/qmlprofiler/qmlprofilerplugin.cpp +++ b/src/plugins/qmlprofiler/qmlprofilerplugin.cpp @@ -45,27 +45,14 @@ using namespace QmlProfiler::Internal; bool QmlProfilerPlugin::debugOutput = false; -class QmlProfilerPlugin::QmlProfilerPluginPrivate -{ -public: - QmlProjectAnalyzerRunControlFactory *m_runControlFactory; -}; - QmlProfilerPlugin::QmlProfilerPlugin() - : d(new QmlProfilerPluginPrivate()) {} -QmlProfilerPlugin::~QmlProfilerPlugin() -{ - delete d; -} - bool QmlProfilerPlugin::initialize(const QStringList &arguments, QString *errorString) { Q_UNUSED(arguments) Q_UNUSED(errorString) - d->m_runControlFactory = new QmlProjectAnalyzerRunControlFactory(); - AnalyzerManager::registerRunControlFactory(d->m_runControlFactory); + addAutoReleasedObject(new QmlProjectAnalyzerRunControlFactory()); AnalyzerManager::addTool(new QmlProfilerTool(true, this)); AnalyzerManager::addTool(new QmlProfilerTool(false, this)); return true; diff --git a/src/plugins/qmlprofiler/qmlprofilerplugin.h b/src/plugins/qmlprofiler/qmlprofilerplugin.h index 8690c6d7070..3a46fa37ed5 100644 --- a/src/plugins/qmlprofiler/qmlprofilerplugin.h +++ b/src/plugins/qmlprofiler/qmlprofilerplugin.h @@ -46,18 +46,13 @@ class QmlProfilerPlugin : public ExtensionSystem::IPlugin Q_OBJECT public: - QmlProfilerPlugin(); - ~QmlProfilerPlugin(); + QmlProfilerPlugin() {} bool initialize(const QStringList &arguments, QString *errorString); void extensionsInitialized(); ShutdownFlag aboutToShutdown(); static bool debugOutput; - -private: - class QmlProfilerPluginPrivate; - QmlProfilerPluginPrivate *d; }; } // namespace Internal From f0a0e5b1eacb05a1a3f7090441d01f881aff03af Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 30 Jun 2011 18:55:48 +0200 Subject: [PATCH 054/143] analyzer: move responsibility for run modes to individual tools Change-Id: Iaf2fa9d4c087470649336a453c6a9a7db12d220f Reviewed-on: http://codereview.qt.nokia.com/1051 Reviewed-by: hjk --- src/plugins/analyzerbase/analyzerconstants.h | 13 +- src/plugins/analyzerbase/analyzermanager.cpp | 185 +++++++++--------- src/plugins/analyzerbase/analyzermanager.h | 19 +- .../analyzerbase/analyzerstartparameters.h | 7 +- src/plugins/analyzerbase/ianalyzertool.cpp | 30 +++ src/plugins/analyzerbase/ianalyzertool.h | 26 ++- src/plugins/qmlprofiler/qmlprofilerplugin.cpp | 9 +- src/plugins/qmlprofiler/qmlprofilertool.cpp | 20 +- src/plugins/qmlprofiler/qmlprofilertool.h | 4 +- src/plugins/valgrind/callgrindtool.cpp | 28 +-- src/plugins/valgrind/callgrindtool.h | 4 +- src/plugins/valgrind/memchecktool.cpp | 19 +- src/plugins/valgrind/memchecktool.h | 4 +- src/plugins/valgrind/valgrindplugin.cpp | 12 +- 14 files changed, 193 insertions(+), 187 deletions(-) diff --git a/src/plugins/analyzerbase/analyzerconstants.h b/src/plugins/analyzerbase/analyzerconstants.h index 4a110a49acf..5d1f51558eb 100644 --- a/src/plugins/analyzerbase/analyzerconstants.h +++ b/src/plugins/analyzerbase/analyzerconstants.h @@ -39,12 +39,19 @@ namespace Analyzer { -enum AnalyzerStartMode +class StartMode { - StartLocal, - StartRemote +public: + explicit StartMode(int m = 0) : m(m) {} + operator int() const { return m; } + void operator=(int m_) { m = m_; } + // Often used modes. +private: + int m; }; +enum { StartLocal = -1, StartRemote = -2 }; + namespace Constants { // modes and their priorities diff --git a/src/plugins/analyzerbase/analyzermanager.cpp b/src/plugins/analyzerbase/analyzermanager.cpp index 3d295e6bcaf..46a6b726dae 100644 --- a/src/plugins/analyzerbase/analyzermanager.cpp +++ b/src/plugins/analyzerbase/analyzermanager.cpp @@ -100,7 +100,6 @@ #include using namespace Core; -using namespace Analyzer; using namespace Analyzer::Internal; namespace Analyzer { @@ -135,11 +134,11 @@ AnalyzerStartParameters remoteLinuxStartParameters(ProjectExplorer::RunConfigura = qobject_cast(runConfiguration); QTC_ASSERT(rc, return sp); + sp.startMode = StartRemote; sp.debuggee = rc->remoteExecutableFilePath(); sp.debuggeeArgs = rc->arguments(); sp.connParams = rc->deviceConfig()->sshParameters(); sp.analyzerCmdPrefix = rc->commandPrefix(); - sp.startMode = StartRemote; sp.displayName = rc->displayName(); return sp; } @@ -178,7 +177,6 @@ public: }; } // namespace Internal -} // namespace Analyzer //////////////////////////////////////////////////////////////////// // @@ -186,7 +184,7 @@ public: // //////////////////////////////////////////////////////////////////// -class AnalyzerManager::AnalyzerManagerPrivate : public QObject +class AnalyzerManagerPrivate : public QObject { Q_OBJECT @@ -211,27 +209,29 @@ public: const QString &stopButtonText, const QString &cancelButtonText) const; void addDock(Qt::DockWidgetArea area, QDockWidget *dockWidget); - void startLocalTool(IAnalyzerTool *tool); - void startRemoteTool(IAnalyzerTool *tool); - void addTool(IAnalyzerTool *tool); + void addTool(IAnalyzerTool *tool, const StartModes &modes); void stopTool(IAnalyzerTool *tool); void handleToolFinished(IAnalyzerTool *tool); int indexOf(IAnalyzerTool *tool) const; IAnalyzerTool *toolAt(int idx) const; void saveToolSettings(IAnalyzerTool *tool); void loadToolSettings(IAnalyzerTool *tool); + void selectTool(IAnalyzerTool *tool, StartMode mode); ProjectExplorer::RunControl *createRunControl (ProjectExplorer::RunConfiguration *runConfiguration, const QString &mode); + // Convenience. + void startLocalTool(IAnalyzerTool *tool, StartMode mode); + void startRemoteTool(IAnalyzerTool *tool, StartMode mode); + public slots: void startTool(); void stopTool() { stopTool(m_currentTool); } - void selectTool(); - void selectTool(IAnalyzerTool *tool); - void selectTool(QAction *); - void selectTool(int); + void selectAction(); + void selectAction(QAction *); + void selectAction(int); void modeChanged(Core::IMode *mode); void resetLayout(); void updateRunActions(); @@ -243,8 +243,10 @@ public: ProjectExplorer::RunControl *m_currentRunControl; Utils::FancyMainWindow *m_mainWindow; IAnalyzerTool *m_currentTool; + StartMode m_currentMode; QHash m_toolFromAction; QList m_tools; + QList m_actions; QAction *m_startAction; QAction *m_stopAction; ActionContainer *m_menu; @@ -264,13 +266,14 @@ public: bool m_initialized; }; -AnalyzerManager::AnalyzerManagerPrivate::AnalyzerManagerPrivate(AnalyzerManager *qq): +AnalyzerManagerPrivate::AnalyzerManagerPrivate(AnalyzerManager *qq): q(qq), m_mode(0), m_runControlFactory(0), m_currentRunControl(0), m_mainWindow(0), m_currentTool(0), + m_currentMode(), m_startAction(0), m_stopAction(0), m_menu(0), @@ -282,7 +285,7 @@ AnalyzerManager::AnalyzerManagerPrivate::AnalyzerManagerPrivate(AnalyzerManager m_initialized(false) { m_toolBox->setObjectName(QLatin1String("AnalyzerManagerToolBox")); - connect(m_toolBox, SIGNAL(currentIndexChanged(int)), SLOT(selectTool(int))); + connect(m_toolBox, SIGNAL(currentIndexChanged(int)), SLOT(selectAction(int))); m_runControlFactory = new AnalyzerRunControlFactory(); AnalyzerPlugin::instance()->addAutoReleasedObject(m_runControlFactory); @@ -296,7 +299,7 @@ AnalyzerManager::AnalyzerManagerPrivate::AnalyzerManagerPrivate(AnalyzerManager connect(pe, SIGNAL(updateRunActions()), SLOT(updateRunActions())); } -AnalyzerManager::AnalyzerManagerPrivate::~AnalyzerManagerPrivate() +AnalyzerManagerPrivate::~AnalyzerManagerPrivate() { // as we have to setParent(0) on dock widget that are not selected, // we keep track of all and make sure we don't leak any @@ -306,7 +309,7 @@ AnalyzerManager::AnalyzerManagerPrivate::~AnalyzerManagerPrivate() } } -void AnalyzerManager::AnalyzerManagerPrivate::setupActions() +void AnalyzerManagerPrivate::setupActions() { Core::ICore *core = Core::ICore::instance(); Core::ActionManager *am = core->actionManager(); @@ -347,7 +350,7 @@ void AnalyzerManager::AnalyzerManagerPrivate::setupActions() m_viewsMenu = am->actionContainer(Core::Id(Core::Constants::M_WINDOW_VIEWS)); } -void AnalyzerManager::AnalyzerManagerPrivate::delayedInit() +void AnalyzerManagerPrivate::delayedInit() { if (m_initialized) return; @@ -359,7 +362,7 @@ void AnalyzerManager::AnalyzerManagerPrivate::delayedInit() m_initialized = true; } -QWidget *AnalyzerManager::AnalyzerManagerPrivate::createModeContents() +QWidget *AnalyzerManagerPrivate::createModeContents() { // right-side window with editor, output etc. MiniSplitter *mainWindowSplitter = new MiniSplitter; @@ -385,7 +388,7 @@ static QToolButton *toolButton(QAction *action) return button; } -QWidget *AnalyzerManager::AnalyzerManagerPrivate::createModeMainWindow() +QWidget *AnalyzerManagerPrivate::createModeMainWindow() { m_mainWindow = new Utils::FancyMainWindow(); m_mainWindow->setObjectName(QLatin1String("AnalyzerManagerMainWindow")); @@ -448,7 +451,7 @@ QWidget *AnalyzerManager::AnalyzerManagerPrivate::createModeMainWindow() return m_mainWindow; } -void AnalyzerManager::AnalyzerManagerPrivate::addDock(Qt::DockWidgetArea area, +void AnalyzerManagerPrivate::addDock(Qt::DockWidgetArea area, QDockWidget *dockWidget) { dockWidget->setParent(m_mainWindow); @@ -481,7 +484,7 @@ bool buildTypeAccepted(IAnalyzerTool::ToolMode toolMode, return false; } -bool AnalyzerManager::AnalyzerManagerPrivate::showPromptDialog(const QString &title, +bool AnalyzerManagerPrivate::showPromptDialog(const QString &title, const QString &text, const QString &stopButtonText, const QString &cancelButtonText) const @@ -500,7 +503,7 @@ bool AnalyzerManager::AnalyzerManagerPrivate::showPromptDialog(const QString &ti return messageBox.clickedStandardButton() == QDialogButtonBox::Yes; } -ProjectExplorer::RunControl *AnalyzerManager::AnalyzerManagerPrivate::createRunControl +ProjectExplorer::RunControl *AnalyzerManagerPrivate::createRunControl (ProjectExplorer::RunConfiguration *runConfiguration, const QString &mode) { Q_UNUSED(mode); @@ -521,7 +524,7 @@ ProjectExplorer::RunControl *AnalyzerManager::AnalyzerManagerPrivate::createRunC return rc; } -void AnalyzerManager::AnalyzerManagerPrivate::startRemoteTool(IAnalyzerTool *tool) +void AnalyzerManagerPrivate::startRemoteTool(IAnalyzerTool *tool, StartMode mode) { Q_UNUSED(tool); StartRemoteDialog dlg; @@ -529,11 +532,12 @@ void AnalyzerManager::AnalyzerManagerPrivate::startRemoteTool(IAnalyzerTool *too return; AnalyzerStartParameters sp; + sp.toolId = tool->id(); + sp.startMode = mode; sp.connParams = dlg.sshParams(); sp.debuggee = dlg.executable(); sp.debuggeeArgs = dlg.arguments(); sp.displayName = dlg.executable(); - sp.startMode = StartRemote; sp.workingDirectory = dlg.workingDirectory(); AnalyzerRunControl *runControl = new AnalyzerRunControl(tool, sp, 0); @@ -544,14 +548,15 @@ void AnalyzerManager::AnalyzerManagerPrivate::startRemoteTool(IAnalyzerTool *too ->startRunControl(runControl, Constants::MODE_ANALYZE); } -void AnalyzerManager::AnalyzerManagerPrivate::startLocalTool(IAnalyzerTool *tool) +void AnalyzerManagerPrivate::startLocalTool(IAnalyzerTool *tool, StartMode mode) { int index = indexOf(tool); QTC_ASSERT(index >= 0, return); QTC_ASSERT(index < m_tools.size(), return); QTC_ASSERT(tool == m_currentTool, return); + QTC_ASSERT(mode == StartLocal, /**/); - // make sure mode is shown + // Make sure mode is shown. q->showMode(); ProjectExplorer::ProjectExplorerPlugin *pe = ProjectExplorer::ProjectExplorerPlugin::instance(); @@ -594,8 +599,8 @@ void AnalyzerManager::AnalyzerManagerPrivate::startLocalTool(IAnalyzerTool *tool // Check the project for whether the build config is in the correct mode // if not, notify the user and urge him to use the correct mode. if (!buildTypeAccepted(toolMode, buildType)) { - const QString &toolName = tool->displayName(); - const QString &toolMode = IAnalyzerTool::modeString(tool->mode()); + const QString toolName = tool->displayName(); + const QString toolMode = IAnalyzerTool::modeString(tool->mode()); const QString currentMode = buildType == ProjectExplorer::BuildConfiguration::Debug ? tr("Debug") : tr("Release"); QSettings *settings = Core::ICore::instance()->settings(); @@ -629,13 +634,12 @@ void AnalyzerManager::AnalyzerManagerPrivate::startLocalTool(IAnalyzerTool *tool updateRunActions(); } -void AnalyzerManager::AnalyzerManagerPrivate::startTool() +void AnalyzerManagerPrivate::startTool() { - if (m_currentTool) - m_currentTool->startTool(); + m_currentTool->startTool(m_currentMode); } -void AnalyzerManager::AnalyzerManagerPrivate::stopTool(IAnalyzerTool *tool) +void AnalyzerManagerPrivate::stopTool(IAnalyzerTool *tool) { QTC_ASSERT(tool == m_currentTool, /**/); if (m_currentRunControl) @@ -647,7 +651,7 @@ void AnalyzerManager::AnalyzerManagerPrivate::stopTool(IAnalyzerTool *tool) // else: wait for the finished() signal to trigger handleToolFinished() } -void AnalyzerManager::AnalyzerManagerPrivate::modeChanged(IMode *mode) +void AnalyzerManagerPrivate::modeChanged(IMode *mode) { if (!m_mainWindow) return; @@ -657,12 +661,7 @@ void AnalyzerManager::AnalyzerManagerPrivate::modeChanged(IMode *mode) m_mainWindow->setDockActionsVisible(makeVisible); } -void AnalyzerManager::AnalyzerManagerPrivate::selectTool(int index) -{ - selectTool(m_tools[index]); -} - -void AnalyzerManager::AnalyzerManagerPrivate::selectTool(IAnalyzerTool *tool) +void AnalyzerManagerPrivate::selectTool(IAnalyzerTool *tool, StartMode mode) { int idx = indexOf(tool); QTC_ASSERT(idx >= 0, return); @@ -692,6 +691,7 @@ void AnalyzerManager::AnalyzerManagerPrivate::selectTool(IAnalyzerTool *tool) } m_currentTool = tool; + m_currentMode = mode; m_toolBox->setCurrentIndex(idx); m_controlsWidget->setCurrentIndex(idx); @@ -709,68 +709,77 @@ void AnalyzerManager::AnalyzerManagerPrivate::selectTool(IAnalyzerTool *tool) updateRunActions(); } -void AnalyzerManager::AnalyzerManagerPrivate::selectTool() +void AnalyzerManagerPrivate::selectAction() { - selectTool(qobject_cast(sender())); + selectAction(qobject_cast(sender())); } -void AnalyzerManager::AnalyzerManagerPrivate::selectTool(QAction *action) +void AnalyzerManagerPrivate::selectAction(int index) { - selectTool(m_toolFromAction[action]); + selectAction(m_actions[index]); } -int AnalyzerManager::AnalyzerManagerPrivate::indexOf(IAnalyzerTool *tool) const +void AnalyzerManagerPrivate::selectAction(QAction *action) +{ + StartMode mode = StartMode(action->property("StartMode").toInt()); + selectTool(m_toolFromAction[action], mode); +} + +int AnalyzerManagerPrivate::indexOf(IAnalyzerTool *tool) const { return m_tools.indexOf(tool); } -IAnalyzerTool *AnalyzerManager::AnalyzerManagerPrivate::toolAt(int idx) const +IAnalyzerTool *AnalyzerManagerPrivate::toolAt(int idx) const { QTC_ASSERT(idx >= 0, return 0); QTC_ASSERT(idx < m_tools.size(), return 0); return m_tools.at(idx); } -void AnalyzerManager::AnalyzerManagerPrivate::addTool(IAnalyzerTool *tool) +void AnalyzerManagerPrivate::addTool(IAnalyzerTool *tool, const StartModes &modes) { - ActionManager *am = Core::ICore::instance()->actionManager(); delayedInit(); // be sure that there is a valid IMode instance - QString actionId = QString("Action.Analyzer.Tools." + tool->id()); - QString displayName = tool->displayName(); - QAction *action = new QAction(displayName, 0); - qDebug() << "ACTION: " << tool << actionId; - - Core::Command *command = am->registerAction(action, actionId, - Core::Context(Core::Constants::C_GLOBAL)); - m_menu->addAction(command, QString::fromLatin1(tool->menuGroup())); - connect(action, SIGNAL(triggered()), SLOT(selectTool())); - - const bool blocked = m_toolBox->blockSignals(true); // Do not make current. - m_toolBox->addItem(displayName); - m_toolBox->blockSignals(blocked); - m_toolBox->setEnabled(true); - // Populate controls widget. + ActionManager *am = Core::ICore::instance()->actionManager(); QWidget *controlWidget = tool->createControlWidget(); // might be 0 m_controlsWidget->addWidget(controlWidget ? controlWidget : AnalyzerUtils::createDummyWidget()); + + const bool blocked = m_toolBox->blockSignals(true); // Do not make current. + foreach (StartMode mode, modes) { + QString actionName = tool->actionName(mode); + QString menuGroup = tool->menuGroup(mode); + QString actionId = tool->actionId(mode); + QAction *action = new QAction(actionName, 0); + action->setProperty("StartMode", int(mode)); + Core::Command *command = am->registerAction(action, actionId, + Core::Context(Core::Constants::C_GLOBAL)); + m_menu->addAction(command, menuGroup); + m_actions.append(action); + m_toolFromAction[action] = tool; + m_toolBox->addItem(actionName); + m_toolBox->blockSignals(blocked); + connect(action, SIGNAL(triggered()), SLOT(selectAction())); + } + m_toolBox->setEnabled(true); + m_tools.append(tool); - m_toolFromAction[action] = tool; } -void AnalyzerManager::AnalyzerManagerPrivate::handleToolFinished(IAnalyzerTool *tool) +void AnalyzerManagerPrivate::handleToolFinished(IAnalyzerTool *tool) { QTC_ASSERT(tool == m_currentTool, /**/); m_currentRunControl = 0; updateRunActions(); if (m_restartOnStop) { - m_currentTool->startTool(); + m_currentTool->startTool(m_currentMode); m_restartOnStop = false; } } -void AnalyzerManager::AnalyzerManagerPrivate::loadToolSettings(IAnalyzerTool *tool) +void AnalyzerManagerPrivate::loadToolSettings(IAnalyzerTool *tool) { QTC_ASSERT(m_mainWindow, return); QSettings *settings = Core::ICore::instance()->settings(); @@ -780,7 +789,7 @@ void AnalyzerManager::AnalyzerManagerPrivate::loadToolSettings(IAnalyzerTool *to settings->endGroup(); } -void AnalyzerManager::AnalyzerManagerPrivate::saveToolSettings(IAnalyzerTool *tool) +void AnalyzerManagerPrivate::saveToolSettings(IAnalyzerTool *tool) { if (!tool) return; // no active tool, do nothing @@ -794,7 +803,7 @@ void AnalyzerManager::AnalyzerManagerPrivate::saveToolSettings(IAnalyzerTool *to settings->setValue(QLatin1String(lastActiveToolC), tool->id()); } -void AnalyzerManager::AnalyzerManagerPrivate::updateRunActions() +void AnalyzerManagerPrivate::updateRunActions() { ProjectExplorer::ProjectExplorerPlugin *pe = ProjectExplorer::ProjectExplorerPlugin::instance(); @@ -846,15 +855,16 @@ void AnalyzerManager::extensionsInitialized() const QSettings *settings = Core::ICore::instance()->settings(); const QString lastActiveToolId = settings->value(QLatin1String(lastActiveToolC), QString()).toString(); - IAnalyzerTool *lastTool = 0; - foreach (IAnalyzerTool *tool, d->m_tools) { + foreach (IAnalyzerTool *tool, d->m_tools) tool->extensionsInitialized(); - if (tool->id() == lastActiveToolId) - lastTool = tool; - } - d->selectTool(lastTool); + QAction *lastAction = 0; + foreach (QAction *action, d->m_actions) + if (d->m_toolFromAction[action]->id() == lastActiveToolId) + lastAction = action; + if (lastAction) + d->selectAction(lastAction); } void AnalyzerManager::shutdown() @@ -862,14 +872,9 @@ void AnalyzerManager::shutdown() d->saveToolSettings(d->m_currentTool); } -void AnalyzerManager::registerRunControlFactory(ProjectExplorer::IRunControlFactory *factory) +void AnalyzerManager::addTool(IAnalyzerTool *tool, const StartModes &modes) { - m_instance->d->registerRunControlFactory(factory); -} - -void AnalyzerManager::addTool(IAnalyzerTool *tool) -{ - m_instance->d->addTool(tool); + m_instance->d->addTool(tool, modes); } QDockWidget *AnalyzerManager::createDockWidget(IAnalyzerTool *tool, const QString &title, @@ -886,15 +891,15 @@ QDockWidget *AnalyzerManager::createDockWidget(IAnalyzerTool *tool, const QStrin return dockWidget; } -void AnalyzerManager::selectTool(IAnalyzerTool *tool) +void AnalyzerManager::selectTool(IAnalyzerTool *tool, StartMode mode) { - m_instance->d->selectTool(tool); + m_instance->d->selectTool(tool, mode); } -void AnalyzerManager::startTool(IAnalyzerTool *tool) +void AnalyzerManager::startTool(IAnalyzerTool *tool, StartMode mode) { QTC_ASSERT(tool == m_instance->d->m_currentTool, return); - m_instance->d->startTool(); + tool->startTool(mode); } Utils::FancyMainWindow *AnalyzerManager::mainWindow() @@ -902,7 +907,7 @@ Utils::FancyMainWindow *AnalyzerManager::mainWindow() return m_instance->d->m_mainWindow; } -void AnalyzerManager::AnalyzerManagerPrivate::resetLayout() +void AnalyzerManagerPrivate::resetLayout() { m_mainWindow->restoreSettings(m_defaultSettings.value(m_currentTool)); } @@ -940,14 +945,14 @@ void AnalyzerManager::stopTool(IAnalyzerTool *tool) m_instance->stopTool(tool); } -void AnalyzerManager::startLocalTool(IAnalyzerTool *tool) +void AnalyzerManager::startLocalTool(IAnalyzerTool *tool, StartMode mode) { - m_instance->startLocalTool(tool); + m_instance->startLocalTool(tool, mode); } -void AnalyzerManager::startRemoteTool(IAnalyzerTool *tool) +void AnalyzerManager::startRemoteTool(IAnalyzerTool *tool, StartMode mode) { - m_instance->startRemoteTool(tool); + m_instance->startRemoteTool(tool, mode); } ProjectExplorer::RunControl *AnalyzerManager::createRunControl @@ -970,4 +975,6 @@ IAnalyzerTool *AnalyzerManager::toolById(const QByteArray &id) return 0; } +} // namespace Analyzer + #include "analyzermanager.moc" diff --git a/src/plugins/analyzerbase/analyzermanager.h b/src/plugins/analyzerbase/analyzermanager.h index bb511486bbf..cc5f4edd5d6 100644 --- a/src/plugins/analyzerbase/analyzermanager.h +++ b/src/plugins/analyzerbase/analyzermanager.h @@ -36,6 +36,7 @@ #define ANALYZERMANAGER_H #include "analyzerbase_global.h" +#include "analyzerconstants.h" #include "projectexplorer/runconfiguration.h" #include @@ -49,9 +50,11 @@ class FancyMainWindow; } namespace Analyzer { + +typedef QList StartModes; + class IAnalyzerTool; -class IAnalyzerEngine; -class AnalyzerStartParameters; +class AnalyzerManagerPrivate; class ANALYZER_EXPORT AnalyzerManager : public QObject { @@ -61,7 +64,6 @@ public: explicit AnalyzerManager(QObject *parent = 0); ~AnalyzerManager(); - static void registerRunControlFactory(ProjectExplorer::IRunControlFactory *factory); void extensionsInitialized(); void shutdown(); @@ -69,7 +71,7 @@ public: (ProjectExplorer::RunConfiguration *runConfiguration, const QString &mode); // Register a tool and initialize it. - static void addTool(Analyzer::IAnalyzerTool *tool); + static void addTool(Analyzer::IAnalyzerTool *tool, const StartModes &mode); static IAnalyzerTool *toolById(const QByteArray &id); // Dockwidgets are registered to the main window. @@ -79,13 +81,13 @@ public: static Utils::FancyMainWindow *mainWindow(); static void showMode(); - static void selectTool(IAnalyzerTool *tool); - static void startTool(IAnalyzerTool *tool); + static void selectTool(IAnalyzerTool *tool, StartMode mode); + static void startTool(IAnalyzerTool *tool, StartMode mode); static void stopTool(IAnalyzerTool *tool); // Convienience functions. - static void startLocalTool(IAnalyzerTool *tool); - static void startRemoteTool(IAnalyzerTool *tool); + static void startLocalTool(IAnalyzerTool *tool, StartMode mode); + static void startRemoteTool(IAnalyzerTool *tool, StartMode mode); static QString msgToolStarted(const QString &name); static QString msgToolFinished(const QString &name, int issuesFound); @@ -96,7 +98,6 @@ public: static void handleToolFinished(IAnalyzerTool *tool); private: - class AnalyzerManagerPrivate; friend class AnalyzerManagerPrivate; AnalyzerManagerPrivate *const d; }; diff --git a/src/plugins/analyzerbase/analyzerstartparameters.h b/src/plugins/analyzerbase/analyzerstartparameters.h index b82a4e85fee..c05b14c7b4d 100644 --- a/src/plugins/analyzerbase/analyzerstartparameters.h +++ b/src/plugins/analyzerbase/analyzerstartparameters.h @@ -50,11 +50,10 @@ class ANALYZER_EXPORT AnalyzerStartParameters { public: AnalyzerStartParameters() - : startMode(StartLocal) - , connParams(Utils::SshConnectionParameters::NoProxy) - { } + : connParams(Utils::SshConnectionParameters::NoProxy) + {} - AnalyzerStartMode startMode; + StartMode startMode; Utils::SshConnectionParameters connParams; QByteArray toolId; diff --git a/src/plugins/analyzerbase/ianalyzertool.cpp b/src/plugins/analyzerbase/ianalyzertool.cpp index 600d18f8447..b77104ba085 100644 --- a/src/plugins/analyzerbase/ianalyzertool.cpp +++ b/src/plugins/analyzerbase/ianalyzertool.cpp @@ -33,6 +33,7 @@ **************************************************************************/ #include "ianalyzertool.h" +#include "analyzermanager.h" namespace Analyzer { @@ -53,6 +54,35 @@ QString IAnalyzerTool::modeString(ToolMode mode) return QString(); } +QByteArray IAnalyzerTool::defaultMenuGroup(StartMode mode) +{ + if (mode == StartRemote) + return Analyzer::Constants::G_ANALYZER_REMOTE_TOOLS; + return Analyzer::Constants::G_ANALYZER_TOOLS; +} + +QByteArray IAnalyzerTool::defaultActionId(const QByteArray &id, StartMode mode) +{ + if (mode == StartRemote) + return "Action." + id + ".RemoteStart." + QByteArray::number(mode); + return "Action." + id + ".LocalStart." + QByteArray::number(mode); +} + +QString IAnalyzerTool::defaultActionName(const QString &base, StartMode mode) +{ + if (mode == StartRemote) + return base + tr(" (Remote)"); + return base; +} + +void IAnalyzerTool::defaultStartTool(IAnalyzerTool *tool, StartMode mode) +{ + if (mode == StartLocal) + AnalyzerManager::startLocalTool(tool, mode); + if (mode == StartRemote) + AnalyzerManager::startRemoteTool(tool, mode); +} + void IAnalyzerTool::initializeDockWidgets() { } diff --git a/src/plugins/analyzerbase/ianalyzertool.h b/src/plugins/analyzerbase/ianalyzertool.h index 222713741c5..74de749c816 100644 --- a/src/plugins/analyzerbase/ianalyzertool.h +++ b/src/plugins/analyzerbase/ianalyzertool.h @@ -36,6 +36,7 @@ #define IANALYZERTOOL_H #include "analyzerbase_global.h" +#include "analyzerconstants.h" #include @@ -49,8 +50,12 @@ class AnalyzerStartParameters; class IAnalyzerOutputPaneAdapter; class IAnalyzerEngine; + /** * This class represents an analyzation tool, e.g. "Valgrind Memcheck". + * + * Each tool can run in different run modes. The modes are specific to the mode. + * * @code * bool YourPlugin::initialize(const QStringList &arguments, QString *errorString) * { @@ -72,13 +77,18 @@ public: virtual QString displayName() const = 0; /// Returns a user readable description name for this tool. virtual QString description() const = 0; - /// Returns the name of the menu group of the start action. - virtual QByteArray menuGroup() const = 0; + /// Returns an id for the start action. + virtual QByteArray actionId(StartMode m) const { return defaultActionId(id(), m); } + /// Returns the menu group the start action should go to. + virtual QByteArray menuGroup(StartMode m) const { return defaultMenuGroup(m); } + /// Returns a short user readable action name for this tool. + virtual QString actionName(StartMode m) const + { return defaultActionName(displayName(), m); } /** * The mode in which this tool should preferably be run * - * The memcheckt tool, for example, requires debug symbols, hence DebugMode + * The memcheck tool, for example, requires debug symbols, hence DebugMode * is preferred. On the other hand, callgrind should look at optimized code, * hence ReleaseMode. */ @@ -91,6 +101,12 @@ public: static QString modeString(ToolMode mode); + /// Convenience implementation. + static QByteArray defaultMenuGroup(StartMode m); + static QByteArray defaultActionId(const QByteArray &id, StartMode m); + static QString defaultActionName(const QString &base, StartMode m); + static void defaultStartTool(IAnalyzerTool *tool, StartMode mode); + /// This gets called after all analyzation tools where initialized. virtual void extensionsInitialized() = 0; @@ -109,8 +125,8 @@ public: virtual IAnalyzerEngine *createEngine(const AnalyzerStartParameters &sp, ProjectExplorer::RunConfiguration *runConfiguration = 0) = 0; - /// Starts the tool. - virtual void startTool() = 0; + virtual void startTool(StartMode m) + { return defaultStartTool(this, m); } /// Called when tools gets selected. virtual void toolSelected() const {} diff --git a/src/plugins/qmlprofiler/qmlprofilerplugin.cpp b/src/plugins/qmlprofiler/qmlprofilerplugin.cpp index 3265cb28a79..7b1d0a9aac1 100644 --- a/src/plugins/qmlprofiler/qmlprofilerplugin.cpp +++ b/src/plugins/qmlprofiler/qmlprofilerplugin.cpp @@ -45,16 +45,15 @@ using namespace QmlProfiler::Internal; bool QmlProfilerPlugin::debugOutput = false; -QmlProfilerPlugin::QmlProfilerPlugin() -{} - bool QmlProfilerPlugin::initialize(const QStringList &arguments, QString *errorString) { Q_UNUSED(arguments) Q_UNUSED(errorString) addAutoReleasedObject(new QmlProjectAnalyzerRunControlFactory()); - AnalyzerManager::addTool(new QmlProfilerTool(true, this)); - AnalyzerManager::addTool(new QmlProfilerTool(false, this)); + StartModes modes; + modes.append(StartMode(StartLocal)); + modes.append(StartMode(StartRemote)); + AnalyzerManager::addTool(new QmlProfilerTool(this), modes); return true; } diff --git a/src/plugins/qmlprofiler/qmlprofilertool.cpp b/src/plugins/qmlprofiler/qmlprofilertool.cpp index a857f5b1bf4..f766a555121 100644 --- a/src/plugins/qmlprofiler/qmlprofilertool.cpp +++ b/src/plugins/qmlprofiler/qmlprofilertool.cpp @@ -92,7 +92,6 @@ public: QmlProfilerTool *q; - bool m_local; QDeclarativeDebugConnection *m_client; QTimer m_connectionTimer; int m_connectionAttempts; @@ -119,10 +118,9 @@ public: QString m_ostDevice; }; -QmlProfilerTool::QmlProfilerTool(bool local, QObject *parent) +QmlProfilerTool::QmlProfilerTool(QObject *parent) : IAnalyzerTool(parent), d(new QmlProfilerToolPrivate(this)) { - d->m_local = local; d->m_client = 0; d->m_connectionAttempts = 0; d->m_traceWindow = 0; @@ -151,24 +149,12 @@ QmlProfilerTool::~QmlProfilerTool() QByteArray QmlProfilerTool::id() const { - return d->m_local ? "QmlLocalProfiler" : "QmlRemoteProfiler"; + return "QmlProfiler"; } QString QmlProfilerTool::displayName() const { - return d->m_local ? tr("QML Profiler") : tr("QML Profiler (Remote)"); -} - -QByteArray QmlProfilerTool::menuGroup() const -{ - return d->m_local ? Analyzer::Constants::G_ANALYZER_TOOLS - : Analyzer::Constants::G_ANALYZER_REMOTE_TOOLS; -} - -void QmlProfilerTool::startTool() -{ - return d->m_local ? AnalyzerManager::startLocalTool(this) - : AnalyzerManager::startRemoteTool(this); + return tr("QML Profiler"); } QString QmlProfilerTool::description() const diff --git a/src/plugins/qmlprofiler/qmlprofilertool.h b/src/plugins/qmlprofiler/qmlprofilertool.h index c5b963aeb89..15884b89481 100644 --- a/src/plugins/qmlprofiler/qmlprofilertool.h +++ b/src/plugins/qmlprofiler/qmlprofilertool.h @@ -45,12 +45,11 @@ class QmlProfilerTool : public Analyzer::IAnalyzerTool Q_OBJECT public: - QmlProfilerTool(bool local, QObject *parent); + explicit QmlProfilerTool(QObject *parent); ~QmlProfilerTool(); QByteArray id() const; QString displayName() const; - QByteArray menuGroup() const; QString description() const; ToolMode mode() const; @@ -58,7 +57,6 @@ public: void initializeDockWidgets(); void toolSelected(); void toolDeselected(); - void startTool(); Analyzer::IAnalyzerEngine *createEngine(const Analyzer::AnalyzerStartParameters &sp, ProjectExplorer::RunConfiguration *runConfiguration = 0); diff --git a/src/plugins/valgrind/callgrindtool.cpp b/src/plugins/valgrind/callgrindtool.cpp index 9e084c96843..70dc87a05a7 100644 --- a/src/plugins/valgrind/callgrindtool.cpp +++ b/src/plugins/valgrind/callgrindtool.cpp @@ -175,7 +175,6 @@ public slots: public: CallgrindTool *q; - bool m_local; DataModel *m_dataModel; DataProxyModel *m_proxyModel; StackBrowser *m_stackBrowser; @@ -218,7 +217,6 @@ public: CallgrindToolPrivate::CallgrindToolPrivate(CallgrindTool *parent) : q(parent) - , m_local(true) , m_dataModel(new DataModel(this)) , m_proxyModel(new DataProxyModel(this)) , m_stackBrowser(new StackBrowser(this)) @@ -499,11 +497,10 @@ static QToolButton *createToolButton(QAction *action) return button; } -CallgrindTool::CallgrindTool(bool local, QObject *parent) +CallgrindTool::CallgrindTool(QObject *parent) : Analyzer::IAnalyzerTool(parent) { d = new CallgrindToolPrivate(this); - d->m_local = local; Core::ICore *core = Core::ICore::instance(); // EditorManager @@ -519,19 +516,12 @@ CallgrindTool::~CallgrindTool() QByteArray CallgrindTool::id() const { - return d->m_local ? "CallgrindLocal" : "CallgrindRemote"; + return "Callgrind"; } QString CallgrindTool::displayName() const { - return d->m_local ? tr("Valgrind Function Profile") - : tr("Valgrind Function Profile (Remote)"); -} - -QByteArray CallgrindTool::menuGroup() const -{ - return d->m_local ? Analyzer::Constants::G_ANALYZER_TOOLS - : Analyzer::Constants::G_ANALYZER_REMOTE_TOOLS; + return tr("Valgrind Function Profile"); } QString CallgrindTool::description() const @@ -540,14 +530,6 @@ QString CallgrindTool::description() const "record function calls when a program runs."); } -void CallgrindTool::startTool() -{ - if (d->m_local) - AnalyzerManager::startLocalTool(this); - else - AnalyzerManager::startRemoteTool(this); -} - IAnalyzerTool::ToolMode CallgrindTool::mode() const { return ReleaseMode; @@ -947,8 +929,8 @@ void CallgrindToolPrivate::handleShowCostsOfFunction() m_toggleCollectFunction = QString("%1()").arg(qualifiedFunctionName); - AnalyzerManager::selectTool(q); - AnalyzerManager::startTool(q); + AnalyzerManager::selectTool(q, StartMode(StartLocal)); + AnalyzerManager::startTool(q, StartMode(StartLocal)); } void CallgrindToolPrivate::slotRequestDump() diff --git a/src/plugins/valgrind/callgrindtool.h b/src/plugins/valgrind/callgrindtool.h index f6a50b0c897..6aba3c7b14a 100644 --- a/src/plugins/valgrind/callgrindtool.h +++ b/src/plugins/valgrind/callgrindtool.h @@ -45,16 +45,14 @@ class CallgrindTool : public Analyzer::IAnalyzerTool Q_OBJECT public: - CallgrindTool(bool local, QObject *parent); + CallgrindTool(QObject *parent); ~CallgrindTool(); QByteArray id() const; QString displayName() const; - QByteArray menuGroup() const; QString description() const; ToolMode mode() const; - void startTool(); void extensionsInitialized(); void initializeDockWidgets(); diff --git a/src/plugins/valgrind/memchecktool.cpp b/src/plugins/valgrind/memchecktool.cpp index f38f1143845..7b7094f2900 100644 --- a/src/plugins/valgrind/memchecktool.cpp +++ b/src/plugins/valgrind/memchecktool.cpp @@ -184,10 +184,9 @@ static void initKindFilterAction(QAction *action, const QList &kinds) action->setData(data); } -MemcheckTool::MemcheckTool(bool local, QObject *parent) +MemcheckTool::MemcheckTool(QObject *parent) : Analyzer::IAnalyzerTool(parent) { - m_local = local; m_settings = 0; m_errorModel = 0; m_errorProxyModel = 0; @@ -295,13 +294,7 @@ void MemcheckTool::maybeActiveRunConfigurationChanged() QByteArray MemcheckTool::id() const { - return m_local ? "MemcheckLocal" : "MemcheckGlobal"; -} - -QByteArray MemcheckTool::menuGroup() const -{ - return m_local ? Analyzer::Constants::G_ANALYZER_TOOLS - : Analyzer::Constants::G_ANALYZER_REMOTE_TOOLS; + return "MemcheckLocal"; } QString MemcheckTool::displayName() const @@ -320,14 +313,6 @@ IAnalyzerTool::ToolMode MemcheckTool::mode() const return DebugMode; } -void MemcheckTool::startTool() -{ - if (m_local) - AnalyzerManager::startLocalTool(this); - else - AnalyzerManager::startRemoteTool(this); -} - class FrameFinder : public ErrorListModel::RelevantFrameFinder { public: diff --git a/src/plugins/valgrind/memchecktool.h b/src/plugins/valgrind/memchecktool.h index 04ea84851a6..c83b4d6d84b 100644 --- a/src/plugins/valgrind/memchecktool.h +++ b/src/plugins/valgrind/memchecktool.h @@ -91,13 +91,11 @@ class MemcheckTool : public Analyzer::IAnalyzerTool Q_OBJECT public: - MemcheckTool(bool local, QObject *parent); + MemcheckTool(QObject *parent); QByteArray id() const; QString displayName() const; QString description() const; - QByteArray menuGroup() const; - void startTool(); private slots: void settingsDestroyed(QObject *settings); diff --git a/src/plugins/valgrind/valgrindplugin.cpp b/src/plugins/valgrind/valgrindplugin.cpp index 2ff9472bc7b..869c6fcd5d4 100644 --- a/src/plugins/valgrind/valgrindplugin.cpp +++ b/src/plugins/valgrind/valgrindplugin.cpp @@ -80,14 +80,14 @@ bool ValgrindPlugin::initialize(const QStringList &, QString *) AnalyzerGlobalSettings::instance()->registerSubConfigs(&globalCallgrindFactory, &projectCallgrindFactory); AnalyzerGlobalSettings::instance()->registerSubConfigs(&globalMemcheckFactory, &projectMemcheckFactory); + StartModes modes; #ifndef Q_OS_WIN - AnalyzerManager::addTool(new MemcheckTool(true, this)); + modes.append(StartMode(StartLocal)); #endif - AnalyzerManager::addTool(new MemcheckTool(false, this)); -#ifndef Q_OS_WIN - AnalyzerManager::addTool(new CallgrindTool(true, this)); -#endif - AnalyzerManager::addTool(new CallgrindTool(false, this)); + modes.append(StartMode(StartRemote)); + + AnalyzerManager::addTool(new MemcheckTool(this), modes); + AnalyzerManager::addTool(new CallgrindTool(this), modes); return true; } From fd370662bae51a883eaee7d17efcc6f19ebe0045 Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 30 Jun 2011 19:13:55 +0200 Subject: [PATCH 055/143] analyzer: cleanup mode construction Change-Id: Icdb89bb581a234820e0c6318f20f8e033ed7b3f0 Reviewed-on: http://codereview.qt.nokia.com/1052 Reviewed-by: hjk --- src/plugins/analyzerbase/analyzermanager.cpp | 66 ++++++-------------- 1 file changed, 19 insertions(+), 47 deletions(-) diff --git a/src/plugins/analyzerbase/analyzermanager.cpp b/src/plugins/analyzerbase/analyzermanager.cpp index 46a6b726dae..60d9781a1d2 100644 --- a/src/plugins/analyzerbase/analyzermanager.cpp +++ b/src/plugins/analyzerbase/analyzermanager.cpp @@ -203,8 +203,7 @@ public: void delayedInit(); void setupActions(); - QWidget *createModeContents(); - QWidget *createModeMainWindow(); + void createModeMainWindow(); bool showPromptDialog(const QString &title, const QString &text, const QString &stopButtonText, const QString &cancelButtonText) const; @@ -212,8 +211,6 @@ public: void addTool(IAnalyzerTool *tool, const StartModes &modes); void stopTool(IAnalyzerTool *tool); void handleToolFinished(IAnalyzerTool *tool); - int indexOf(IAnalyzerTool *tool) const; - IAnalyzerTool *toolAt(int idx) const; void saveToolSettings(IAnalyzerTool *tool); void loadToolSettings(IAnalyzerTool *tool); void selectTool(IAnalyzerTool *tool, StartMode mode); @@ -252,7 +249,6 @@ public: ActionContainer *m_menu; QComboBox *m_toolBox; QStackedWidget *m_controlsWidget; - ActionContainer *m_viewsMenu; Utils::StatusLabel *m_statusLabel; typedef QMap MainWindowSettingsMap; QHash > m_toolWidgets; @@ -263,7 +259,6 @@ public: QList m_dockWidgets; bool m_restartOnStop; - bool m_initialized; }; AnalyzerManagerPrivate::AnalyzerManagerPrivate(AnalyzerManager *qq): @@ -279,10 +274,8 @@ AnalyzerManagerPrivate::AnalyzerManagerPrivate(AnalyzerManager *qq): m_menu(0), m_toolBox(new QComboBox), m_controlsWidget(new QStackedWidget), - m_viewsMenu(0), m_statusLabel(new Utils::StatusLabel), - m_restartOnStop(false), - m_initialized(false) + m_restartOnStop(false) { m_toolBox->setObjectName(QLatin1String("AnalyzerManagerToolBox")); connect(m_toolBox, SIGNAL(currentIndexChanged(int)), SLOT(selectAction(int))); @@ -346,39 +339,33 @@ void AnalyzerManagerPrivate::setupActions() command = am->registerAction(separatorAction, "Menu.Action.Analyzer.Tools.Separator", globalcontext); m_menu->addAction(command, Constants::G_ANALYZER_REMOTE_TOOLS); - - m_viewsMenu = am->actionContainer(Core::Id(Core::Constants::M_WINDOW_VIEWS)); } void AnalyzerManagerPrivate::delayedInit() { - if (m_initialized) + if (m_mode) return; m_mode = new AnalyzerMode(q); - m_mode->setWidget(createModeContents()); - AnalyzerPlugin::instance()->addAutoReleasedObject(m_mode); + createModeMainWindow(); - m_initialized = true; -} - -QWidget *AnalyzerManagerPrivate::createModeContents() -{ - // right-side window with editor, output etc. + // Right-side window with editor, output etc. MiniSplitter *mainWindowSplitter = new MiniSplitter; - mainWindowSplitter->addWidget(createModeMainWindow()); + mainWindowSplitter->addWidget(m_mainWindow); mainWindowSplitter->addWidget(new OutputPanePlaceHolder(m_mode, mainWindowSplitter)); mainWindowSplitter->setStretchFactor(0, 10); mainWindowSplitter->setStretchFactor(1, 0); mainWindowSplitter->setOrientation(Qt::Vertical); - // navigation + right-side window + // Navigation + right-side window. MiniSplitter *splitter = new MiniSplitter; splitter->addWidget(new NavigationWidgetPlaceHolder(m_mode)); splitter->addWidget(mainWindowSplitter); splitter->setStretchFactor(0, 0); splitter->setStretchFactor(1, 1); - return splitter; + m_mode->setWidget(splitter); + + AnalyzerPlugin::instance()->addAutoReleasedObject(m_mode); } static QToolButton *toolButton(QAction *action) @@ -388,7 +375,7 @@ static QToolButton *toolButton(QAction *action) return button; } -QWidget *AnalyzerManagerPrivate::createModeMainWindow() +void AnalyzerManagerPrivate::createModeMainWindow() { m_mainWindow = new Utils::FancyMainWindow(); m_mainWindow->setObjectName(QLatin1String("AnalyzerManagerMainWindow")); @@ -447,12 +434,9 @@ QWidget *AnalyzerManagerPrivate::createModeMainWindow() centralLayout->addWidget(documentAndRightPane); centralLayout->setStretch(0, 1); centralLayout->setStretch(1, 0); - - return m_mainWindow; } -void AnalyzerManagerPrivate::addDock(Qt::DockWidgetArea area, - QDockWidget *dockWidget) +void AnalyzerManagerPrivate::addDock(Qt::DockWidgetArea area, QDockWidget *dockWidget) { dockWidget->setParent(m_mainWindow); m_mainWindow->addDockWidget(area, dockWidget); @@ -465,7 +449,9 @@ void AnalyzerManagerPrivate::addDock(Qt::DockWidgetArea area, Command *cmd = am->registerAction(toggleViewAction, QString("Analyzer." + dockWidget->objectName()), globalContext); cmd->setAttribute(Command::CA_Hide); - m_viewsMenu->addAction(cmd); + + ActionContainer *viewsMenu = am->actionContainer(Core::Id(Core::Constants::M_WINDOW_VIEWS)); + viewsMenu->addAction(cmd); } bool buildTypeAccepted(IAnalyzerTool::ToolMode toolMode, @@ -484,10 +470,8 @@ bool buildTypeAccepted(IAnalyzerTool::ToolMode toolMode, return false; } -bool AnalyzerManagerPrivate::showPromptDialog(const QString &title, - const QString &text, - const QString &stopButtonText, - const QString &cancelButtonText) const +bool AnalyzerManagerPrivate::showPromptDialog(const QString &title, const QString &text, + const QString &stopButtonText, const QString &cancelButtonText) const { Utils::CheckableMessageBox messageBox(Core::ICore::instance()->mainWindow()); messageBox.setWindowTitle(title); @@ -550,7 +534,7 @@ void AnalyzerManagerPrivate::startRemoteTool(IAnalyzerTool *tool, StartMode mode void AnalyzerManagerPrivate::startLocalTool(IAnalyzerTool *tool, StartMode mode) { - int index = indexOf(tool); + int index = m_tools.indexOf(tool); QTC_ASSERT(index >= 0, return); QTC_ASSERT(index < m_tools.size(), return); QTC_ASSERT(tool == m_currentTool, return); @@ -663,7 +647,7 @@ void AnalyzerManagerPrivate::modeChanged(IMode *mode) void AnalyzerManagerPrivate::selectTool(IAnalyzerTool *tool, StartMode mode) { - int idx = indexOf(tool); + int idx = m_tools.indexOf(tool); QTC_ASSERT(idx >= 0, return); if (m_currentTool == tool) return; @@ -725,18 +709,6 @@ void AnalyzerManagerPrivate::selectAction(QAction *action) selectTool(m_toolFromAction[action], mode); } -int AnalyzerManagerPrivate::indexOf(IAnalyzerTool *tool) const -{ - return m_tools.indexOf(tool); -} - -IAnalyzerTool *AnalyzerManagerPrivate::toolAt(int idx) const -{ - QTC_ASSERT(idx >= 0, return 0); - QTC_ASSERT(idx < m_tools.size(), return 0); - return m_tools.at(idx); -} - void AnalyzerManagerPrivate::addTool(IAnalyzerTool *tool, const StartModes &modes) { delayedInit(); // be sure that there is a valid IMode instance From d6bf0c37321d942a248c5bc22086202ec0a915d3 Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 30 Jun 2011 19:30:56 +0200 Subject: [PATCH 056/143] analyzer: remove dummy control widgets Change-Id: I9c15e557699f2f321619fb07feea8d4489006c83 Reviewed-on: http://codereview.qt.nokia.com/1053 Reviewed-by: hjk --- src/plugins/analyzerbase/analyzerconstants.h | 3 --- src/plugins/analyzerbase/analyzermanager.cpp | 10 ++++------ src/plugins/analyzerbase/analyzerutils.cpp | 7 ------- src/plugins/analyzerbase/analyzerutils.h | 2 -- src/plugins/analyzerbase/ianalyzertool.cpp | 5 ----- src/plugins/analyzerbase/ianalyzertool.h | 6 +++--- 6 files changed, 7 insertions(+), 26 deletions(-) diff --git a/src/plugins/analyzerbase/analyzerconstants.h b/src/plugins/analyzerbase/analyzerconstants.h index 5d1f51558eb..aa78ed1fd39 100644 --- a/src/plugins/analyzerbase/analyzerconstants.h +++ b/src/plugins/analyzerbase/analyzerconstants.h @@ -86,9 +86,6 @@ const char * const ANALYZER_CONTROL_STOP_ICON = const char * const ANALYZERTASK_ID = "Analyzer.TaskId"; -// private -const char * const ANALYZER_DUMMYWIDGET_ID = "Analyzer.DummyWidget"; - } // namespace Constants } // namespace Analyzer diff --git a/src/plugins/analyzerbase/analyzermanager.cpp b/src/plugins/analyzerbase/analyzermanager.cpp index 60d9781a1d2..4cc96a059cf 100644 --- a/src/plugins/analyzerbase/analyzermanager.cpp +++ b/src/plugins/analyzerbase/analyzermanager.cpp @@ -711,14 +711,12 @@ void AnalyzerManagerPrivate::selectAction(QAction *action) void AnalyzerManagerPrivate::addTool(IAnalyzerTool *tool, const StartModes &modes) { - delayedInit(); // be sure that there is a valid IMode instance - - ActionManager *am = Core::ICore::instance()->actionManager(); - QWidget *controlWidget = tool->createControlWidget(); // might be 0 - m_controlsWidget->addWidget(controlWidget - ? controlWidget : AnalyzerUtils::createDummyWidget()); + delayedInit(); // Make sure that there is a valid IMode instance. const bool blocked = m_toolBox->blockSignals(true); // Do not make current. + + m_controlsWidget->addWidget(tool->createControlWidget()); + ActionManager *am = Core::ICore::instance()->actionManager(); foreach (StartMode mode, modes) { QString actionName = tool->actionName(mode); QString menuGroup = tool->menuGroup(mode); diff --git a/src/plugins/analyzerbase/analyzerutils.cpp b/src/plugins/analyzerbase/analyzerutils.cpp index 532a3c559f3..83107e8312f 100644 --- a/src/plugins/analyzerbase/analyzerutils.cpp +++ b/src/plugins/analyzerbase/analyzerutils.cpp @@ -116,10 +116,3 @@ CPlusPlus::Symbol *AnalyzerUtils::findSymbolUnderCursor() const CPlusPlus::LookupItem &lookupItem = lookupItems.first(); // ### TODO: select best candidate. return lookupItem.declaration(); } - -QWidget *AnalyzerUtils::createDummyWidget() -{ - QWidget *widget = new QWidget; - widget->setProperty(Constants::ANALYZER_DUMMYWIDGET_ID, QVariant(true)); - return widget; -} diff --git a/src/plugins/analyzerbase/analyzerutils.h b/src/plugins/analyzerbase/analyzerutils.h index cece97438fd..61f6b8a98df 100644 --- a/src/plugins/analyzerbase/analyzerutils.h +++ b/src/plugins/analyzerbase/analyzerutils.h @@ -46,8 +46,6 @@ class Symbol; namespace AnalyzerUtils { ANALYZER_EXPORT CPlusPlus::Symbol *findSymbolUnderCursor(); - - ANALYZER_EXPORT QWidget *createDummyWidget(); } #endif // ANALYZERUTILS_H diff --git a/src/plugins/analyzerbase/ianalyzertool.cpp b/src/plugins/analyzerbase/ianalyzertool.cpp index b77104ba085..eb0abbfd488 100644 --- a/src/plugins/analyzerbase/ianalyzertool.cpp +++ b/src/plugins/analyzerbase/ianalyzertool.cpp @@ -87,9 +87,4 @@ void IAnalyzerTool::initializeDockWidgets() { } -QWidget *IAnalyzerTool::createControlWidget() -{ - return 0; -} - } // namespace Analyzer diff --git a/src/plugins/analyzerbase/ianalyzertool.h b/src/plugins/analyzerbase/ianalyzertool.h index 74de749c816..50e526ed2ec 100644 --- a/src/plugins/analyzerbase/ianalyzertool.h +++ b/src/plugins/analyzerbase/ianalyzertool.h @@ -116,9 +116,9 @@ public: */ virtual void initializeDockWidgets(); - /// Returns a control widget which will be shown - /// in the output pane when this tool is selected. - virtual QWidget *createControlWidget(); + /// Returns a control widget which will be shown in the status bar when + /// this tool is selected. Must be non-zero. + virtual QWidget *createControlWidget() = 0; /// Returns a new engine for the given start parameters. /// Called each time the tool is launched. From 2086d94866c462c299680398c355e43fe4117e9b Mon Sep 17 00:00:00 2001 From: hjk Date: Fri, 1 Jul 2011 14:19:12 +0200 Subject: [PATCH 057/143] analyzer: finish split of tools into "tools-with-modes" Change-Id: I82b61c07172a33b861a7d6db903ac2516019498b Reviewed-on: http://codereview.qt.nokia.com/1054 Reviewed-by: hjk --- src/plugins/analyzerbase/analyzermanager.cpp | 224 ++++++++++-------- src/plugins/analyzerbase/analyzermanager.h | 8 +- .../analyzerbase/analyzerruncontrol.cpp | 2 +- src/plugins/analyzerbase/analyzerruncontrol.h | 2 +- .../analyzerruncontrolfactory.cpp | 14 +- src/plugins/analyzerbase/ianalyzerengine.h | 3 +- src/plugins/analyzerbase/ianalyzertool.cpp | 19 +- src/plugins/analyzerbase/ianalyzertool.h | 24 +- src/plugins/debugger/debuggerconstants.h | 2 +- src/plugins/qmlprofiler/qmlprofilerengine.cpp | 2 +- src/plugins/qmlprofiler/qmlprofilertool.cpp | 3 +- src/plugins/qmlprofiler/qmlprofilertool.h | 2 +- .../qmlprojectanalyzerruncontrolfactory.cpp | 1 + src/plugins/valgrind/callgrindtool.cpp | 6 +- src/plugins/valgrind/callgrindtool.h | 2 +- src/plugins/valgrind/memchecktool.cpp | 7 +- src/plugins/valgrind/memchecktool.h | 5 +- src/plugins/valgrind/valgrindengine.cpp | 2 +- 18 files changed, 176 insertions(+), 152 deletions(-) diff --git a/src/plugins/analyzerbase/analyzermanager.cpp b/src/plugins/analyzerbase/analyzermanager.cpp index 4cc96a059cf..d74034c8ede 100644 --- a/src/plugins/analyzerbase/analyzermanager.cpp +++ b/src/plugins/analyzerbase/analyzermanager.cpp @@ -105,7 +105,7 @@ using namespace Analyzer::Internal; namespace Analyzer { namespace Internal { -const char lastActiveToolC[] = "Analyzer.Plugin.LastActiveTool"; +const char LAST_ACTIVE_TOOL[] = "Analyzer.Plugin.LastActiveTool"; const char INITIAL_DOCK_AREA[] = "initial_dock_area"; AnalyzerStartParameters localStartParameters(ProjectExplorer::RunConfiguration *runConfiguration) @@ -209,11 +209,13 @@ public: void addDock(Qt::DockWidgetArea area, QDockWidget *dockWidget); void addTool(IAnalyzerTool *tool, const StartModes &modes); - void stopTool(IAnalyzerTool *tool); - void handleToolFinished(IAnalyzerTool *tool); - void saveToolSettings(IAnalyzerTool *tool); - void loadToolSettings(IAnalyzerTool *tool); + void selectSavedTool(); void selectTool(IAnalyzerTool *tool, StartMode mode); + void stopTool(IAnalyzerTool *tool, StartMode mode); + void handleToolFinished(IAnalyzerTool *tool, StartMode mode); + void saveToolSettings(IAnalyzerTool *tool, StartMode mode); + void loadToolSettings(IAnalyzerTool *tool); + QAction *actionFromToolAndMode(IAnalyzerTool *tool, StartMode mode); ProjectExplorer::RunControl *createRunControl (ProjectExplorer::RunConfiguration *runConfiguration, const QString &mode); @@ -224,7 +226,7 @@ public: public slots: void startTool(); - void stopTool() { stopTool(m_currentTool); } + void stopTool() { stopTool(m_currentTool, m_currentMode); } void selectAction(); void selectAction(QAction *); @@ -242,6 +244,7 @@ public: IAnalyzerTool *m_currentTool; StartMode m_currentMode; QHash m_toolFromAction; + QHash m_modeFromAction; QList m_tools; QList m_actions; QAction *m_startAction; @@ -446,11 +449,12 @@ void AnalyzerManagerPrivate::addDock(Qt::DockWidgetArea area, QDockWidget *dockW ActionManager *am = ICore::instance()->actionManager(); QAction *toggleViewAction = dockWidget->toggleViewAction(); toggleViewAction->setText(dockWidget->windowTitle()); - Command *cmd = am->registerAction(toggleViewAction, QString("Analyzer." + dockWidget->objectName()), - globalContext); + Command *cmd = am->registerAction(toggleViewAction, + QString("Analyzer." + dockWidget->objectName()), globalContext); cmd->setAttribute(Command::CA_Hide); - ActionContainer *viewsMenu = am->actionContainer(Core::Id(Core::Constants::M_WINDOW_VIEWS)); + ActionContainer *viewsMenu = + am->actionContainer(Core::Id(Core::Constants::M_WINDOW_VIEWS)); viewsMenu->addAction(cmd); } @@ -492,14 +496,16 @@ ProjectExplorer::RunControl *AnalyzerManagerPrivate::createRunControl { Q_UNUSED(mode); + // FIXME: Move to tool implementations. AnalyzerStartParameters sp; if (qobject_cast(runConfiguration)) { sp = localStartParameters(runConfiguration); } else if (qobject_cast(runConfiguration)) { sp = remoteLinuxStartParameters(runConfiguration); } else { - // might be S60DeviceRunfiguration, or something else ... - sp.startMode = StartRemote; + // Might be S60DeviceRunfiguration, or something else ... + //sp.startMode = StartRemote; + sp.startMode = m_currentMode; } IAnalyzerTool *tool = m_currentTool; @@ -524,12 +530,11 @@ void AnalyzerManagerPrivate::startRemoteTool(IAnalyzerTool *tool, StartMode mode sp.displayName = dlg.executable(); sp.workingDirectory = dlg.workingDirectory(); - AnalyzerRunControl *runControl = new AnalyzerRunControl(tool, sp, 0); - - m_currentRunControl = runControl; + AnalyzerRunControl *rc = new AnalyzerRunControl(tool, sp, 0); + m_currentRunControl = rc; ProjectExplorer::ProjectExplorerPlugin::instance() - ->startRunControl(runControl, Constants::MODE_ANALYZE); + ->startRunControl(rc, Constants::MODE_ANALYZE); } void AnalyzerManagerPrivate::startLocalTool(IAnalyzerTool *tool, StartMode mode) @@ -566,7 +571,7 @@ void AnalyzerManagerPrivate::startLocalTool(IAnalyzerTool *tool, StartMode mode) const QString msg = tr("