summaryrefslogtreecommitdiff
path: root/src/plugins
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@digia.com>2014-08-15 14:42:30 +0200
committerEike Ziller <eike.ziller@digia.com>2014-08-15 16:14:34 +0200
commitd9d0aba1c4870eaddd9ec3be1561ed0a39bcc74d (patch)
treed2d40ffee8d17ae3193064d861894a5661908dd0 /src/plugins
parent23536e9b426aba67880a9ef19e9c67517e642df0 (diff)
parent8c133689be164cfdb8f77078a97dce3c97397afe (diff)
downloadqt-creator-d9d0aba1c4870eaddd9ec3be1561ed0a39bcc74d.tar.gz
Merge remote-tracking branch 'origin/3.2'
Conflicts: qtcreator.pri qtcreator.qbs src/plugins/coreplugin/editormanager/editormanager.cpp src/plugins/projectexplorer/editorconfiguration.cpp src/plugins/projectexplorer/projectfilewizardextension.cpp src/plugins/qmakeandroidsupport/createandroidmanifestwizard.cpp Change-Id: I8de0f6fcdd8d214fbc14e79f74cb0206e6e2c6c1
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/android/androidrunner.cpp10
-rw-r--r--src/plugins/android/androidsettingswidget.cpp4
-rw-r--r--src/plugins/coreplugin/editormanager/editormanager.cpp2
-rw-r--r--src/plugins/diffeditor/diffeditor.cpp1
-rw-r--r--src/plugins/diffeditor/diffeditorcontroller.cpp10
-rw-r--r--src/plugins/diffeditor/diffeditorcontroller.h4
-rw-r--r--src/plugins/diffeditor/diffeditordocument.cpp1
-rw-r--r--src/plugins/diffeditor/diffeditorplugin.cpp72
-rw-r--r--src/plugins/diffeditor/diffutils.cpp42
-rw-r--r--src/plugins/diffeditor/diffutils.h1
-rw-r--r--src/plugins/diffeditor/sidebysidediffeditorwidget.cpp47
-rw-r--r--src/plugins/diffeditor/unifieddiffeditorwidget.cpp29
-rw-r--r--src/plugins/diffeditor/unifieddiffeditorwidget.h3
-rw-r--r--src/plugins/git/gerrit/gerritpushdialog.cpp5
-rw-r--r--src/plugins/git/gitclient.cpp163
-rw-r--r--src/plugins/git/gitclient.h66
-rw-r--r--src/plugins/ios/iosprobe.cpp6
-rw-r--r--src/plugins/projectexplorer/editorconfiguration.cpp28
-rw-r--r--src/plugins/projectexplorer/editorconfiguration.h6
-rw-r--r--src/plugins/projectexplorer/projectwizardpage.cpp6
-rw-r--r--src/plugins/qbsprojectmanager/defaultpropertyprovider.cpp4
-rw-r--r--src/plugins/qbsprojectmanager/qbsconstants.h1
-rw-r--r--src/plugins/qbsprojectmanager/qbsproject.cpp7
-rw-r--r--src/plugins/qbsprojectmanager/qbsprojectmanager.qbs1
-rw-r--r--src/plugins/qmakeandroidsupport/createandroidmanifestwizard.cpp7
-rw-r--r--src/plugins/qmakeprojectmanager/librarydetailscontroller.cpp2
-rw-r--r--src/plugins/qmakeprojectmanager/qmakenodes.cpp4
-rw-r--r--src/plugins/qmakeprojectmanager/wizards/qtquickapp.cpp20
-rw-r--r--src/plugins/qmakeprojectmanager/wizards/qtquickappwizard.cpp2
-rw-r--r--src/plugins/qmakeprojectmanager/wizards/qtquickappwizardpages.cpp21
-rw-r--r--src/plugins/qmldesigner/components/debugview/debugview.cpp12
-rw-r--r--src/plugins/qmldesigner/components/formeditor/contentnoteditableindicator.cpp8
-rw-r--r--src/plugins/qmldesigner/components/formeditor/dragtool.cpp15
-rw-r--r--src/plugins/qmldesigner/components/formeditor/dragtool.h1
-rw-r--r--src/plugins/qmldesigner/components/formeditor/formeditorview.cpp2
-rw-r--r--src/plugins/qmldesigner/components/importmanager/importswidget.cpp3
-rw-r--r--src/plugins/qmldesigner/components/integration/designdocument.cpp2
-rw-r--r--src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp13
-rw-r--r--src/plugins/qmldesigner/components/navigator/navigatorview.cpp12
-rw-r--r--src/plugins/qmldesigner/components/propertyeditor/qmlanchorbindingproxy.cpp163
-rw-r--r--src/plugins/qmldesigner/components/propertyeditor/qmlanchorbindingproxy.h6
-rw-r--r--src/plugins/qmldesigner/components/propertyeditor/quick2propertyeditorview.cpp5
-rw-r--r--src/plugins/qmldesigner/componentsplugin/Controls/ButtonSpecifics.qml23
-rw-r--r--src/plugins/qmldesigner/componentsplugin/Controls/CheckBoxSpecifics.qml5
-rw-r--r--src/plugins/qmldesigner/componentsplugin/Controls/RadioButtonSpecifics.qml5
-rw-r--r--src/plugins/qmldesigner/componentsplugin/Controls/TextAreaSpecifics.qml4
-rw-r--r--src/plugins/qmldesigner/componentsplugin/Controls/TextFieldSpecifics.qml13
-rw-r--r--src/plugins/qmldesigner/componentsplugin/components.metainfo16
-rw-r--r--src/plugins/qmldesigner/designercore/include/modelnode.h2
-rw-r--r--src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp2
-rw-r--r--src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp16
-rw-r--r--src/plugins/qmldesigner/designercore/instances/puppetcreator.h3
-rw-r--r--src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp8
-rw-r--r--src/plugins/qmldesigner/designercore/model/modelnode.cpp2
-rw-r--r--src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp7
-rw-r--r--src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp8
-rw-r--r--src/plugins/qmldesigner/designersettings.cpp9
-rw-r--r--src/plugins/qmldesigner/designersettings.h1
-rw-r--r--src/plugins/qmldesigner/qmldesignerconstants.h1
-rw-r--r--src/plugins/qmlprofiler/qml/SelectionRange.qml2
-rw-r--r--src/plugins/qmlprojectmanager/qmlapplicationwizard.cpp3
-rw-r--r--src/plugins/qtsupport/customexecutablerunconfiguration.cpp2
-rw-r--r--src/plugins/resourceeditor/resourcenode.cpp18
-rw-r--r--src/plugins/texteditor/texteditoroverlay.cpp43
-rw-r--r--src/plugins/winrt/winrtdevicefactory.cpp8
-rw-r--r--src/plugins/winrt/winrtpackagedeploymentstep.cpp71
-rw-r--r--src/plugins/winrt/winrtpackagedeploymentstep.h2
67 files changed, 738 insertions, 353 deletions
diff --git a/src/plugins/android/androidrunner.cpp b/src/plugins/android/androidrunner.cpp
index 51c9af54a3..e484e0e094 100644
--- a/src/plugins/android/androidrunner.cpp
+++ b/src/plugins/android/androidrunner.cpp
@@ -37,8 +37,10 @@
#include <debugger/debuggerrunconfigurationaspect.h>
#include <projectexplorer/target.h>
+#include <qtsupport/qtkitinformation.h>
#include <utils/qtcassert.h>
+#include <QDir>
#include <QTime>
#include <QtConcurrentRun>
#include <QTemporaryFile>
@@ -93,6 +95,10 @@ AndroidRunner::AndroidRunner(QObject *parent,
m_pongFile = _("/data/local/tmp/qt/debug-pong-") + m_packageName;
m_gdbserverSocket = packageDir + _("/debug-socket");
m_gdbserverPath = packageDir + _("/lib/gdbserver");
+ const QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(target->kit());
+ if (version && version->qtVersion() >= QtSupport::QtVersionNumber(5, 4, 0))
+ m_gdbserverPath += _(".so");
+
m_gdbserverCommand = m_gdbserverPath + _(" --multi +") + m_gdbserverSocket;
// Detect busybox, as we need to pass -w to ps to get wide output.
QProcess psProc;
@@ -292,7 +298,7 @@ void AndroidRunner::asyncStart()
// Handling ping.
for (int i = 0; ; ++i) {
- QTemporaryFile tmp(_("pingpong"));
+ QTemporaryFile tmp(QDir::tempPath() + _("/pingpong"));
tmp.open();
tmp.close();
@@ -324,7 +330,7 @@ void AndroidRunner::asyncStart()
void AndroidRunner::handleRemoteDebuggerRunning()
{
if (m_useCppDebugger) {
- QTemporaryFile tmp(_("pingpong"));
+ QTemporaryFile tmp(QDir::tempPath() + _("/pingpong"));
tmp.open();
QProcess process;
diff --git a/src/plugins/android/androidsettingswidget.cpp b/src/plugins/android/androidsettingswidget.cpp
index 7243f99de5..d50f91006d 100644
--- a/src/plugins/android/androidsettingswidget.cpp
+++ b/src/plugins/android/androidsettingswidget.cpp
@@ -592,8 +592,8 @@ void AndroidSettingsWidget::showGdbWarningDialog()
tr("Unsupported GDB"),
tr("The GDB inside this NDK seems to not support Python. "
"The Qt Project offers fixed GDB builds at: "
- "<a href=\"http://download.qt-project.org/official_releases/gdb/osx/\">"
- "http://download.qt-project.org/official_releases/gdb/osx/</a>"));
+ "<a href=\"http://download.qt-project.org/official_releases/gdb/\">"
+ "http://download.qt-project.org/official_releases/gdb/</a>"));
}
void AndroidSettingsWidget::manageAVD()
diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp
index 9e5d7715ef..f42d8bf837 100644
--- a/src/plugins/coreplugin/editormanager/editormanager.cpp
+++ b/src/plugins/coreplugin/editormanager/editormanager.cpp
@@ -1629,6 +1629,8 @@ bool EditorManagerPrivate::saveDocumentAs(IDocument *document)
const QString filter = MimeDatabase::allFiltersString();
QString selectedFilter =
MimeDatabase::findByFile(QFileInfo(document->filePath())).filterString();
+ if (selectedFilter.isEmpty())
+ selectedFilter = MimeDatabase::findByType(document->mimeType()).filterString();
const QString &absoluteFilePath =
DocumentManager::getSaveAsFileName(document, filter, &selectedFilter);
diff --git a/src/plugins/diffeditor/diffeditor.cpp b/src/plugins/diffeditor/diffeditor.cpp
index 3f34e60beb..ddd064a663 100644
--- a/src/plugins/diffeditor/diffeditor.cpp
+++ b/src/plugins/diffeditor/diffeditor.cpp
@@ -611,6 +611,7 @@ void DiffEditor::showDiffEditor(QWidget *newEditor)
writeCurrentDiffEditorSetting(m_currentEditor);
updateDiffEditorSwitcher();
+ widget()->setFocusProxy(m_currentEditor);
}
QWidget *DiffEditor::readLegacyCurrentDiffEditorSetting()
diff --git a/src/plugins/diffeditor/diffeditorcontroller.cpp b/src/plugins/diffeditor/diffeditorcontroller.cpp
index 7ff6a98348..c07adfc787 100644
--- a/src/plugins/diffeditor/diffeditorcontroller.cpp
+++ b/src/plugins/diffeditor/diffeditorcontroller.cpp
@@ -272,4 +272,14 @@ void DiffEditorController::requestChunkActions(QMenu *menu,
emit chunkActionsRequested(menu, diffFileIndex, chunkIndex);
}
+void DiffEditorController::requestSaveState()
+{
+ emit saveStateRequested();
+}
+
+void DiffEditorController::requestRestoreState()
+{
+ emit restoreStateRequested();
+}
+
} // namespace DiffEditor
diff --git a/src/plugins/diffeditor/diffeditorcontroller.h b/src/plugins/diffeditor/diffeditorcontroller.h
index 8314e1bda2..4505d5f5b9 100644
--- a/src/plugins/diffeditor/diffeditorcontroller.h
+++ b/src/plugins/diffeditor/diffeditorcontroller.h
@@ -73,6 +73,8 @@ public slots:
void requestChunkActions(QMenu *menu,
int diffFileIndex,
int chunkIndex);
+ void requestSaveState();
+ void requestRestoreState();
void branchesForCommitReceived(const QString &output);
void expandBranchesRequested();
@@ -87,6 +89,8 @@ signals:
void chunkActionsRequested(QMenu *menu,
int diffFileIndex,
int chunkIndex);
+ void saveStateRequested();
+ void restoreStateRequested();
void expandBranchesRequested(const QString &revision);
void reloaderChanged(DiffEditorReloader *reloader);
diff --git a/src/plugins/diffeditor/diffeditordocument.cpp b/src/plugins/diffeditor/diffeditordocument.cpp
index 817f0d946c..b65be0c10f 100644
--- a/src/plugins/diffeditor/diffeditordocument.cpp
+++ b/src/plugins/diffeditor/diffeditordocument.cpp
@@ -46,6 +46,7 @@ DiffEditorDocument::DiffEditorDocument() :
m_controller(new DiffEditorController(this))
{
setId(Constants::DIFF_EDITOR_ID);
+ setMimeType(QLatin1String(Constants::DIFF_EDITOR_MIMETYPE));
setTemporary(true);
}
diff --git a/src/plugins/diffeditor/diffeditorplugin.cpp b/src/plugins/diffeditor/diffeditorplugin.cpp
index 6c6346998a..63a29d985e 100644
--- a/src/plugins/diffeditor/diffeditorplugin.cpp
+++ b/src/plugins/diffeditor/diffeditorplugin.cpp
@@ -132,7 +132,9 @@ void SimpleDiffEditorReloader::reload()
QList<FileData> fileDataList;
fileDataList << fileData;
+ controller()->requestSaveState();
controller()->setDiffFiles(fileDataList);
+ controller()->requestRestoreState();
reloadFinished();
}
@@ -299,6 +301,25 @@ void DiffEditor::Internal::DiffEditorPlugin::testMakePatch_data()
rows.clear();
rows << RowData(_("ABCD"));
+ rows << RowData(_(""), TextLineData::Separator);
+ rows << RowData(_(""), TextLineData::Separator);
+ chunk.rows = rows;
+ patchText = header + _("@@ -1,2 +1,1 @@\n"
+ "-ABCD\n"
+ "-\n"
+ "+ABCD\n"
+ "\\ No newline at end of file\n");
+
+ QTest::newRow("Two last EOLs removed") << chunk
+ << fileName
+ << fileName
+ << true
+ << patchText;
+
+ ///////////
+
+ rows.clear();
+ rows << RowData(_("ABCD"));
rows << RowData(TextLineData::Separator, _(""));
chunk.rows = rows;
patchText = header + _("@@ -1,1 +1,1 @@\n"
@@ -418,6 +439,26 @@ void DiffEditor::Internal::DiffEditorPlugin::testMakePatch_data()
<< fileName
<< false
<< patchText;
+
+ ///////////
+
+ rows.clear();
+ rows << RowData(_("ABCD"));
+ rows << RowData(TextLineData::Separator, _(""));
+ rows << RowData(_(""), _("EFGH"));
+ chunk.rows = rows;
+ patchText = header + _("@@ -1,1 +1,3 @@\n"
+ " ABCD\n"
+ "+\n"
+ "+EFGH\n"
+ "\\ No newline at end of file\n");
+
+ QTest::newRow("Blank line followed by No newline")
+ << chunk
+ << fileName
+ << fileName
+ << true
+ << patchText;
}
void DiffEditor::Internal::DiffEditorPlugin::testMakePatch()
@@ -748,6 +789,37 @@ void DiffEditor::Internal::DiffEditorPlugin::testReadPatch_data()
QTest::newRow("2 chunks - first ends with blank line") << patch
<< fileDataList4;
+
+ //////////////
+
+ patch = _("diff --git a/file foo.txt b/file foo.txt\n"
+ "index 1234567..9876543 100644\n"
+ "--- a/file foo.txt\n"
+ "+++ b/file foo.txt\n"
+ "@@ -1,1 +1,3 @@ void DiffEditor::ctor()\n"
+ " ABCD\n"
+ "+\n"
+ "+EFGH\n"
+ "\\ No newline at end of file\n");
+
+ fileData1.leftFileInfo = DiffFileInfo(_("file foo.txt"), _("1234567"));
+ fileData1.rightFileInfo = DiffFileInfo(_("file foo.txt"), _("9876543"));
+ fileData1.fileOperation = FileData::ChangeFile;
+ chunkData1.leftStartingLineNumber = 0;
+ chunkData1.rightStartingLineNumber = 0;
+ rows1.clear();
+ rows1 << RowData(_("ABCD"));
+ rows1 << RowData(TextLineData::Separator, _(""));
+ rows1 << RowData(_(""), _("EFGH"));
+ chunkData1.rows = rows1;
+ fileData1.chunks.clear();
+ fileData1.chunks << chunkData1;
+
+ QList<FileData> fileDataList5;
+ fileDataList5 << fileData1;
+
+ QTest::newRow("Blank line followed by No newline") << patch
+ << fileDataList5;
}
void DiffEditor::Internal::DiffEditorPlugin::testReadPatch()
diff --git a/src/plugins/diffeditor/diffutils.cpp b/src/plugins/diffeditor/diffutils.cpp
index c483eb3b89..a51e4182b8 100644
--- a/src/plugins/diffeditor/diffutils.cpp
+++ b/src/plugins/diffeditor/diffutils.cpp
@@ -362,15 +362,33 @@ QString DiffUtils::makePatch(const ChunkData &chunkData,
int rightLineCount = 0;
QList<TextLineData> leftBuffer, rightBuffer;
- int lastEqualRow = -1;
+ int rowToBeSplit = -1;
+
if (lastChunk) {
- for (int i = chunkData.rows.count(); i > 0; i--) {
- if (chunkData.rows.at(i - 1).equal) {
- if (i != chunkData.rows.count())
- lastEqualRow = i - 1;
+ // Detect the case when the last equal line is followed by
+ // only separators on left or on right. In that case
+ // the last equal line needs to be split.
+ const int rowCount = chunkData.rows.count();
+ int i = 0;
+ for (i = rowCount; i > 0; i--) {
+ const RowData &rowData = chunkData.rows.at(i - 1);
+ if (rowData.leftLine.textLineType != TextLineData::Separator
+ || rowData.rightLine.textLineType != TextLineData::TextLine)
break;
- }
}
+ const int leftSeparator = i;
+ for (i = rowCount; i > 0; i--) {
+ const RowData &rowData = chunkData.rows.at(i - 1);
+ if (rowData.rightLine.textLineType != TextLineData::Separator
+ || rowData.leftLine.textLineType != TextLineData::TextLine)
+ break;
+ }
+ const int rightSeparator = i;
+ const int commonSeparator = qMin(leftSeparator, rightSeparator);
+ if (commonSeparator > 0
+ && commonSeparator < rowCount
+ && chunkData.rows.at(commonSeparator - 1).equal)
+ rowToBeSplit = commonSeparator - 1;
}
for (int i = 0; i <= chunkData.rows.count(); i++) {
@@ -379,7 +397,7 @@ QString DiffUtils::makePatch(const ChunkData &chunkData,
: RowData(TextLineData(TextLineData::Separator)); // dummy,
// ensure we process buffers to the end.
// rowData will be equal
- if (rowData.equal && i != lastEqualRow) {
+ if (rowData.equal && i != rowToBeSplit) {
if (leftBuffer.count()) {
for (int j = 0; j < leftBuffer.count(); j++) {
const QString line = makePatchLine(QLatin1Char('-'),
@@ -439,7 +457,9 @@ QString DiffUtils::makePatch(const ChunkData &chunkData,
+ QString::number(chunkData.rightStartingLineNumber + 1)
+ QLatin1Char(',')
+ QString::number(rightLineCount)
- + QLatin1String(" @@\n");
+ + QLatin1String(" @@")
+ + chunkData.contextInfo
+ + QLatin1Char('\n');
diffText.prepend(chunkLine);
@@ -530,8 +550,6 @@ static QList<RowData> readLines(const QString &patch,
Diff &last = diffList.last();
if (last.text.isEmpty())
break;
- if (last.text.at(0) == newLine) // there is a new line
- break;
if (last.command == Diff::Equal) {
if (noNewLineInEqual >= 0)
@@ -690,7 +708,7 @@ static QList<ChunkData> readChunks(const QString &patch,
// @@ -leftPos[,leftCount] +rightPos[,rightCount] @@
"@@ -(\\d+)(?:,\\d+)? \\+(\\d+)(?:,\\d+)? @@"
// optional hint (e.g. function name)
- "(?:\\ +[^\\n]*)?"
+ "(\\ +[^\\n]*)?"
// end of line (need to be followed by text line)
"(?:\\n))"));
@@ -706,6 +724,7 @@ static QList<ChunkData> readChunks(const QString &patch,
const QString captured = capturedTexts.at(1);
const int leftStartingPos = capturedTexts.at(2).toInt();
const int rightStartingPos = capturedTexts.at(3).toInt();
+ const QString contextInfo = capturedTexts.at(4);
if (endOfLastChunk > 0) {
const QString lines = patch.mid(endOfLastChunk,
pos - endOfLastChunk);
@@ -722,6 +741,7 @@ static QList<ChunkData> readChunks(const QString &patch,
ChunkData chunkData;
chunkData.leftStartingLineNumber = leftStartingPos - 1;
chunkData.rightStartingLineNumber = rightStartingPos - 1;
+ chunkData.contextInfo = contextInfo;
chunkDataList.append(chunkData);
} while ((pos = chunkRegExp.indexIn(patch, pos)) != -1);
diff --git a/src/plugins/diffeditor/diffutils.h b/src/plugins/diffeditor/diffutils.h
index b649538026..407e6e1551 100644
--- a/src/plugins/diffeditor/diffutils.h
+++ b/src/plugins/diffeditor/diffutils.h
@@ -95,6 +95,7 @@ public:
bool contextChunk;
int leftStartingLineNumber;
int rightStartingLineNumber;
+ QString contextInfo;
};
class DIFFEDITOR_EXPORT FileData {
diff --git a/src/plugins/diffeditor/sidebysidediffeditorwidget.cpp b/src/plugins/diffeditor/sidebysidediffeditorwidget.cpp
index 9e530f15c2..7a895e9ac8 100644
--- a/src/plugins/diffeditor/sidebysidediffeditorwidget.cpp
+++ b/src/plugins/diffeditor/sidebysidediffeditorwidget.cpp
@@ -154,6 +154,8 @@ public:
public slots:
void setDisplaySettings(const DisplaySettings &ds);
+ void saveStateRequested();
+ void restoreStateRequested();
signals:
void jumpToOriginalFileRequested(int diffFileIndex,
@@ -205,6 +207,7 @@ private:
QColor m_fileLineForeground;
QColor m_chunkLineForeground;
QColor m_textForeground;
+ QByteArray m_state;
// MultiHighlighter *m_highlighter;
};
@@ -338,6 +341,23 @@ SideDiffEditorWidget::SideDiffEditorWidget(QWidget *parent)
// baseTextDocument()->setSyntaxHighlighter(m_highlighter);
}
+void SideDiffEditorWidget::saveStateRequested()
+{
+ if (!m_state.isNull())
+ return;
+
+ m_state = saveState();
+}
+
+void SideDiffEditorWidget::restoreStateRequested()
+{
+ if (m_state.isNull())
+ return;
+
+ restoreState(m_state);
+ m_state.clear();
+}
+
void SideDiffEditorWidget::setDisplaySettings(const DisplaySettings &ds)
{
DisplaySettings settings = displaySettings();
@@ -836,6 +856,7 @@ SideBySideDiffEditorWidget::SideBySideDiffEditorWidget(QWidget *parent)
QVBoxLayout *l = new QVBoxLayout(this);
l->setMargin(0);
l->addWidget(m_splitter);
+ setFocusProxy(m_rightEditor);
clear(tr("No controller"));
}
@@ -856,6 +877,14 @@ void SideBySideDiffEditorWidget::setDiffEditorGuiController(
this, SLOT(clearAll(QString)));
disconnect(m_controller, SIGNAL(diffFilesChanged(QList<FileData>,QString)),
this, SLOT(setDiff(QList<FileData>,QString)));
+ disconnect(m_controller, SIGNAL(saveStateRequested()),
+ m_leftEditor, SLOT(saveStateRequested()));
+ disconnect(m_controller, SIGNAL(saveStateRequested()),
+ m_rightEditor, SLOT(saveStateRequested()));
+ disconnect(m_controller, SIGNAL(restoreStateRequested()),
+ m_leftEditor, SLOT(restoreStateRequested()));
+ disconnect(m_controller, SIGNAL(restoreStateRequested()),
+ m_rightEditor, SLOT(restoreStateRequested()));
disconnect(m_guiController, SIGNAL(currentDiffFileIndexChanged(int)),
this, SLOT(setCurrentDiffFileIndex(int)));
@@ -871,6 +900,14 @@ void SideBySideDiffEditorWidget::setDiffEditorGuiController(
this, SLOT(clearAll(QString)));
connect(m_controller, SIGNAL(diffFilesChanged(QList<FileData>,QString)),
this, SLOT(setDiff(QList<FileData>,QString)));
+ connect(m_controller, SIGNAL(saveStateRequested()),
+ m_leftEditor, SLOT(saveStateRequested()));
+ connect(m_controller, SIGNAL(saveStateRequested()),
+ m_rightEditor, SLOT(saveStateRequested()));
+ connect(m_controller, SIGNAL(restoreStateRequested()),
+ m_leftEditor, SLOT(restoreStateRequested()));
+ connect(m_controller, SIGNAL(restoreStateRequested()),
+ m_rightEditor, SLOT(restoreStateRequested()));
connect(m_guiController, SIGNAL(currentDiffFileIndexChanged(int)),
this, SLOT(setCurrentDiffFileIndex(int)));
@@ -936,11 +973,6 @@ void SideBySideDiffEditorWidget::setCurrentDiffFileIndex(int diffFileIndex)
void SideBySideDiffEditorWidget::showDiff()
{
- // TODO: remember the line number of the line in the middle
- const int verticalValue = m_leftEditor->verticalScrollBar()->value();
- const int leftHorizontalValue = m_leftEditor->horizontalScrollBar()->value();
- const int rightHorizontalValue = m_rightEditor->horizontalScrollBar()->value();
-
clear(tr("No difference"));
QMap<int, QList<DiffSelection> > leftFormats;
@@ -1151,11 +1183,6 @@ void SideBySideDiffEditorWidget::showDiff()
}
m_foldingBlocker = false;
*/
- m_leftEditor->verticalScrollBar()->setValue(verticalValue);
- m_rightEditor->verticalScrollBar()->setValue(verticalValue);
- m_leftEditor->horizontalScrollBar()->setValue(leftHorizontalValue);
- m_rightEditor->horizontalScrollBar()->setValue(rightHorizontalValue);
-
// m_leftEditor->updateFoldingHighlight(QPoint(-1, -1));
// m_rightEditor->updateFoldingHighlight(QPoint(-1, -1));
}
diff --git a/src/plugins/diffeditor/unifieddiffeditorwidget.cpp b/src/plugins/diffeditor/unifieddiffeditorwidget.cpp
index 063160c854..be7a4f7782 100644
--- a/src/plugins/diffeditor/unifieddiffeditorwidget.cpp
+++ b/src/plugins/diffeditor/unifieddiffeditorwidget.cpp
@@ -134,6 +134,10 @@ void UnifiedDiffEditorWidget::setDiffEditorGuiController(
this, SLOT(clearAll(QString)));
disconnect(m_controller, SIGNAL(diffFilesChanged(QList<FileData>,QString)),
this, SLOT(setDiff(QList<FileData>,QString)));
+ disconnect(m_controller, SIGNAL(saveStateRequested()),
+ this, SLOT(saveStateRequested()));
+ disconnect(m_controller, SIGNAL(restoreStateRequested()),
+ this, SLOT(restoreStateRequested()));
disconnect(m_guiController, SIGNAL(currentDiffFileIndexChanged(int)),
this, SLOT(setCurrentDiffFileIndex(int)));
@@ -149,6 +153,10 @@ void UnifiedDiffEditorWidget::setDiffEditorGuiController(
this, SLOT(clearAll(QString)));
connect(m_controller, SIGNAL(diffFilesChanged(QList<FileData>,QString)),
this, SLOT(setDiff(QList<FileData>,QString)));
+ connect(m_controller, SIGNAL(saveStateRequested()),
+ this, SLOT(saveStateRequested()));
+ connect(m_controller, SIGNAL(restoreStateRequested()),
+ this, SLOT(restoreStateRequested()));
connect(m_guiController, SIGNAL(currentDiffFileIndexChanged(int)),
this, SLOT(setCurrentDiffFileIndex(int)));
@@ -158,6 +166,23 @@ void UnifiedDiffEditorWidget::setDiffEditorGuiController(
}
}
+void UnifiedDiffEditorWidget::saveStateRequested()
+{
+ if (!m_state.isNull())
+ return;
+
+ m_state = saveState();
+}
+
+void UnifiedDiffEditorWidget::restoreStateRequested()
+{
+ if (m_state.isNull())
+ return;
+
+ restoreState(m_state);
+ m_state.clear();
+}
+
DiffEditorGuiController *UnifiedDiffEditorWidget::diffEditorGuiController() const
{
return m_guiController;
@@ -613,7 +638,9 @@ QString UnifiedDiffEditorWidget::showChunk(const ChunkData &chunkData,
+ QString::number(chunkData.rightStartingLineNumber+ 1)
+ QLatin1Char(',')
+ QString::number(rightLineCount)
- + QLatin1String(" @@\n");
+ + QLatin1String(" @@")
+ + chunkData.contextInfo
+ + QLatin1Char('\n');
diffText.prepend(chunkLine);
diff --git a/src/plugins/diffeditor/unifieddiffeditorwidget.h b/src/plugins/diffeditor/unifieddiffeditorwidget.h
index dc94d22660..69ffb65823 100644
--- a/src/plugins/diffeditor/unifieddiffeditorwidget.h
+++ b/src/plugins/diffeditor/unifieddiffeditorwidget.h
@@ -87,6 +87,8 @@ private slots:
void slotSendChunkToCodePaster();
void slotApplyChunk();
void slotRevertChunk();
+ void saveStateRequested();
+ void restoreStateRequested();
private:
void setLeftLineNumber(int blockNumber, int lineNumber);
@@ -139,6 +141,7 @@ private:
QTextCharFormat m_rightLineFormat;
QTextCharFormat m_leftCharFormat;
QTextCharFormat m_rightCharFormat;
+ QByteArray m_state;
};
} // namespace DiffEditor
diff --git a/src/plugins/git/gerrit/gerritpushdialog.cpp b/src/plugins/git/gerrit/gerritpushdialog.cpp
index 13a5eb9a4d..a09938d876 100644
--- a/src/plugins/git/gerrit/gerritpushdialog.cpp
+++ b/src/plugins/git/gerrit/gerritpushdialog.cpp
@@ -160,9 +160,10 @@ GerritPushDialog::GerritPushDialog(const QString &workingDir, const QString &rev
updateCommits(m_ui->localBranchComboBox->currentIndex());
setRemoteBranches();
+ QRegExpValidator *noSpaceValidator = new QRegExpValidator(QRegExp(QLatin1String("^\\S+$")), this);
m_ui->reviewersLineEdit->setText(reviewerList);
-
- m_ui->topicLineEdit->setValidator(new QRegExpValidator(QRegExp(QLatin1String("^\\S+$")), this));
+ m_ui->reviewersLineEdit->setValidator(noSpaceValidator);
+ m_ui->topicLineEdit->setValidator(noSpaceValidator);
m_valid = true;
}
diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index e5576ed57e..714c792927 100644
--- a/src/plugins/git/gitclient.cpp
+++ b/src/plugins/git/gitclient.cpp
@@ -124,13 +124,19 @@ public:
private slots:
void slotShowDescriptionReceived(const QString &data);
- void slotDiffOutputReceived(const QString &contents);
+ void slotTextualDiffOutputReceived(const QString &contents);
private:
void postCollectShowDescription(const QString &id);
- void postCollectDiffOutput(const QStringList &arguments);
- void postCollectDiffOutput(const QList<QStringList> &argumentsList);
- void addJob(VcsBase::Command *command, const QStringList &arguments);
+ void postCollectTextualDiffOutputUsingDiffCommand(const QStringList &arguments);
+ void postCollectTextualDiffOutputUsingDiffCommand(const QList<QStringList> &argumentsList);
+ void postCollectTextualDiffOutputUsingShowCommand(const QStringList &arguments);
+ void postCollectTextualDiffOutput(const QString &gitCommand,
+ const QList<QStringList> &argumentsList);
+ void addJob(VcsBase::Command *command,
+ const QString &gitCommand,
+ const QStringList &arguments);
+ QStringList addHeadWhenCommandInProgress() const;
int timeout() const;
QProcessEnvironment processEnvironment() const;
Utils::FileName gitPath() const;
@@ -154,7 +160,9 @@ GitDiffHandler::GitDiffHandler(DiffEditor::DiffEditorController *controller,
void GitDiffHandler::diffFile(const QString &fileName)
{
- postCollectDiffOutput(QStringList() << QLatin1String("--") << fileName);
+ postCollectTextualDiffOutputUsingDiffCommand(addHeadWhenCommandInProgress()
+ << QLatin1String("--")
+ << fileName);
}
void GitDiffHandler::diffFiles(const QStringList &stagedFileNames,
@@ -169,28 +177,31 @@ void GitDiffHandler::diffFiles(const QStringList &stagedFileNames,
arguments << stagedArguments;
if (!unstagedFileNames.isEmpty()) {
- QStringList unstagedArguments;
+ QStringList unstagedArguments = addHeadWhenCommandInProgress();
unstagedArguments << QLatin1String("--");
unstagedArguments << unstagedFileNames;
arguments << unstagedArguments;
}
- postCollectDiffOutput(arguments);
+ postCollectTextualDiffOutputUsingDiffCommand(arguments);
}
void GitDiffHandler::diffProjects(const QStringList &projectPaths)
{
- postCollectDiffOutput(QStringList() << QLatin1String("--") << projectPaths);
+ postCollectTextualDiffOutputUsingDiffCommand(addHeadWhenCommandInProgress()
+ << QLatin1String("--")
+ << projectPaths);
}
void GitDiffHandler::diffRepository()
{
- postCollectDiffOutput(QStringList());
+ postCollectTextualDiffOutputUsingDiffCommand(addHeadWhenCommandInProgress());
}
void GitDiffHandler::diffBranch(const QString &branchName)
{
- postCollectDiffOutput(QStringList() << branchName);
+ postCollectTextualDiffOutputUsingDiffCommand(addHeadWhenCommandInProgress()
+ << branchName);
}
void GitDiffHandler::show(const QString &id)
@@ -206,6 +217,7 @@ void GitDiffHandler::postCollectShowDescription(const QString &id)
return;
}
+ m_controller->requestSaveState();
m_controller->clear(m_waitMessage);
VcsBase::Command *command = new VcsBase::Command(gitPath(),
m_workingDirectory,
@@ -231,7 +243,11 @@ void GitDiffHandler::slotShowDescriptionReceived(const QString &description)
return;
}
- postCollectDiffOutput(QStringList() << m_id + QLatin1Char('^') << m_id);
+ postCollectTextualDiffOutputUsingShowCommand(QStringList()
+ << QLatin1String("--format=format:") // omit header, already generated
+ << QLatin1String(noColorOption)
+ << QLatin1String(decorateOption)
+ << m_id);
// need to be called after postCollectDiffOutput(), since it clears the description
m_controller->setDescription(
@@ -239,10 +255,14 @@ void GitDiffHandler::slotShowDescriptionReceived(const QString &description)
description));
}
-void GitDiffHandler::addJob(VcsBase::Command *command, const QStringList &arguments)
+void GitDiffHandler::addJob(VcsBase::Command *command,
+ const QString &gitCommand,
+ const QStringList &arguments)
{
QStringList args;
- args << QLatin1String("diff");
+ args << gitCommand;
+ args << QLatin1String("-m"); // show diff agains parents instead of merge commits
+ args << QLatin1String("--first-parent"); // show only first parent
if (m_controller->isIgnoreWhitespace())
args << QLatin1String("--ignore-space-change");
args << QLatin1String("--unified=") + QString::number(
@@ -251,34 +271,57 @@ void GitDiffHandler::addJob(VcsBase::Command *command, const QStringList &argume
command->addJob(args, timeout());
}
-void GitDiffHandler::postCollectDiffOutput(const QStringList &arguments)
+QStringList GitDiffHandler::addHeadWhenCommandInProgress() const
{
- postCollectDiffOutput(QList<QStringList>() << arguments);
+ QStringList args;
+ // This is workaround for lack of support for merge commits and resolving conflicts,
+ // we compare the current state of working tree to the HEAD of current branch
+ // instead of showing unsupported combined diff format.
+ GitClient::CommandInProgress commandInProgress = m_gitClient->checkCommandInProgress(m_workingDirectory);
+ if (commandInProgress != GitClient::NoCommand)
+ args << QLatin1String(HEAD);
+ return args;
}
-void GitDiffHandler::postCollectDiffOutput(const QList<QStringList> &argumentsList)
+void GitDiffHandler::postCollectTextualDiffOutputUsingDiffCommand(const QStringList &arguments)
+{
+ postCollectTextualDiffOutputUsingDiffCommand(QList<QStringList>() << arguments);
+}
+
+void GitDiffHandler::postCollectTextualDiffOutputUsingDiffCommand(const QList<QStringList> &argumentsList)
+{
+ postCollectTextualDiffOutput(QLatin1String("diff"), argumentsList);
+}
+
+void GitDiffHandler::postCollectTextualDiffOutputUsingShowCommand(const QStringList &arguments)
+{
+ postCollectTextualDiffOutput(QLatin1String("show"), QList<QStringList>() << arguments);
+}
+
+void GitDiffHandler::postCollectTextualDiffOutput(const QString &gitCommand, const QList<QStringList> &argumentsList)
{
if (m_controller.isNull()) {
deleteLater();
return;
}
+ m_controller->requestSaveState();
m_controller->clear(m_waitMessage);
VcsBase::Command *command = new VcsBase::Command(gitPath(),
m_workingDirectory,
processEnvironment());
command->setCodec(EditorManager::defaultTextCodec());
connect(command, SIGNAL(output(QString)),
- this, SLOT(slotDiffOutputReceived(QString)));
+ this, SLOT(slotTextualDiffOutputReceived(QString)));
command->addFlags(diffExecutionFlags());
for (int i = 0; i < argumentsList.count(); i++)
- addJob(command, argumentsList.at(i));
+ addJob(command, gitCommand, argumentsList.at(i));
command->execute();
}
-void GitDiffHandler::slotDiffOutputReceived(const QString &contents)
+void GitDiffHandler::slotTextualDiffOutputReceived(const QString &contents)
{
if (m_controller.isNull()) {
deleteLater();
@@ -290,6 +333,7 @@ void GitDiffHandler::slotDiffOutputReceived(const QString &contents)
= DiffEditor::DiffUtils::readPatch(
contents, m_controller->isIgnoreWhitespace(), &ok);
m_controller->setDiffFiles(fileDataList, m_workingDirectory);
+ m_controller->requestRestoreState();
deleteLater();
}
@@ -713,7 +757,7 @@ GitClient::~GitClient()
{
}
-QString GitClient::findRepositoryForDirectory(const QString &dir)
+QString GitClient::findRepositoryForDirectory(const QString &dir) const
{
if (dir.isEmpty() || dir.endsWith(QLatin1String("/.git"))
|| dir.contains(QLatin1String("/.git/"))) {
@@ -937,7 +981,7 @@ VcsBase::VcsBaseEditorWidget *GitClient::createVcsEditor(
void GitClient::diff(const QString &workingDirectory,
const QStringList &unstagedFileNames,
- const QStringList &stagedFileNames)
+ const QStringList &stagedFileNames) const
{
GitDiffEditorReloader::DiffType diffType = GitDiffEditorReloader::DiffProjectList;
@@ -968,19 +1012,24 @@ void GitClient::diff(const QString &workingDirectory,
controller->setReloader(reloader);
reloader->setWorkingDirectory(workingDirectory);
- reloader->setDiffType(diffType);
- if (diffType == GitDiffEditorReloader::DiffFileList)
- reloader->setFileList(stagedFileNames, unstagedFileNames);
- else if (diffType == GitDiffEditorReloader::DiffProjectList)
- reloader->setProjectList(unstagedFileNames);
}
+ DiffEditor::DiffEditorController *controller = diffEditorDocument->controller();
+ GitDiffEditorReloader *reloader = static_cast<GitDiffEditorReloader *>(controller->reloader());
+ reloader->setDiffType(diffType);
+ // we force setFileList, since the lists can be different
+ // e.g. when double click for the second time on different file inside commit editor
+ if (diffType == GitDiffEditorReloader::DiffFileList)
+ reloader->setFileList(stagedFileNames, unstagedFileNames);
+ else if (diffType == GitDiffEditorReloader::DiffProjectList) // the same when unstaged file was clicked
+ reloader->setProjectList(unstagedFileNames);
+
diffEditorDocument->controller()->requestReload();
EditorManager::activateEditorForDocument(diffEditorDocument);
}
-void GitClient::diff(const QString &workingDirectory, const QString &fileName)
+void GitClient::diff(const QString &workingDirectory, const QString &fileName) const
{
const QString title = tr("Git Diff \"%1\"").arg(fileName);
const QString sourceFile = VcsBase::VcsBaseEditorWidget::getSource(
@@ -1006,7 +1055,7 @@ void GitClient::diff(const QString &workingDirectory, const QString &fileName)
}
void GitClient::diffBranch(const QString &workingDirectory,
- const QString &branchName)
+ const QString &branchName) const
{
const QString title = tr("Git Diff Branch \"%1\"").arg(branchName);
const QString documentId = QLatin1String("Branch:") + branchName;
@@ -1521,7 +1570,7 @@ static inline bool splitCommitParents(const QString &line,
}
bool GitClient::synchronousRevListCmd(const QString &workingDirectory, const QStringList &arguments,
- QString *output, QString *errorMessage)
+ QString *output, QString *errorMessage) const
{
QByteArray outputTextData;
QByteArray errorText;
@@ -1545,7 +1594,7 @@ bool GitClient::synchronousParentRevisions(const QString &workingDirectory,
const QStringList &files /* = QStringList() */,
const QString &revision,
QStringList *parents,
- QString *errorMessage)
+ QString *errorMessage) const
{
QString outputText;
QString errorText;
@@ -1578,7 +1627,7 @@ bool GitClient::synchronousParentRevisions(const QString &workingDirectory,
static const char defaultShortLogFormatC[] = "%h (%an \"%s";
static const int maxShortLogLength = 120;
-QString GitClient::synchronousShortDescription(const QString &workingDirectory, const QString &revision)
+QString GitClient::synchronousShortDescription(const QString &workingDirectory, const QString &revision) const
{
// Short SHA 1, author, subject
QString output = synchronousShortDescription(workingDirectory, revision,
@@ -1593,7 +1642,7 @@ QString GitClient::synchronousShortDescription(const QString &workingDirectory,
return output;
}
-QString GitClient::synchronousCurrentLocalBranch(const QString &workingDirectory)
+QString GitClient::synchronousCurrentLocalBranch(const QString &workingDirectory) const
{
QByteArray outputTextData;
QStringList arguments;
@@ -1611,7 +1660,7 @@ QString GitClient::synchronousCurrentLocalBranch(const QString &workingDirectory
}
bool GitClient::synchronousHeadRefs(const QString &workingDirectory, QStringList *output,
- QString *errorMessage)
+ QString *errorMessage) const
{
QStringList args;
args << QLatin1String("show-ref") << QLatin1String("--head")
@@ -1643,7 +1692,7 @@ bool GitClient::synchronousHeadRefs(const QString &workingDirectory, QStringList
}
// Retrieve topic (branch, tag or HEAD hash)
-QString GitClient::synchronousTopic(const QString &workingDirectory)
+QString GitClient::synchronousTopic(const QString &workingDirectory) const
{
// First try to find branch
QString branch = synchronousCurrentLocalBranch(workingDirectory);
@@ -1711,7 +1760,7 @@ QString GitClient::synchronousTopRevision(const QString &workingDirectory, QStri
}
void GitClient::synchronousTagsForCommit(const QString &workingDirectory, const QString &revision,
- QString &precedes, QString &follows)
+ QString &precedes, QString &follows) const
{
QByteArray pr;
QStringList arguments;
@@ -1789,7 +1838,7 @@ bool GitClient::isFastForwardMerge(const QString &workingDirectory, const QStrin
// Format an entry in a one-liner for selection list using git log.
QString GitClient::synchronousShortDescription(const QString &workingDirectory, const QString &revision,
- const QString &format)
+ const QString &format) const
{
QString description;
QByteArray outputTextData;
@@ -1831,7 +1880,7 @@ static inline QString creatorStashMessage(const QString &keyword = QString())
* StashIgnoreUnchanged: Be quiet about unchanged repositories (used for IVersionControl's snapshots). */
QString GitClient::synchronousStash(const QString &workingDirectory, const QString &messageKeyword,
- unsigned flags, bool *unchanged)
+ unsigned flags, bool *unchanged) const
{
if (unchanged)
*unchanged = false;
@@ -1874,7 +1923,7 @@ QString GitClient::synchronousStash(const QString &workingDirectory, const QStri
bool GitClient::executeSynchronousStash(const QString &workingDirectory,
const QString &message,
- QString *errorMessage)
+ QString *errorMessage) const
{
QByteArray outputText;
QByteArray errorText;
@@ -1893,7 +1942,7 @@ bool GitClient::executeSynchronousStash(const QString &workingDirectory,
// Resolve a stash name from message
bool GitClient::stashNameFromMessage(const QString &workingDirectory,
const QString &message, QString *name,
- QString *errorMessage)
+ QString *errorMessage) const
{
// All happy
if (message.startsWith(QLatin1String(stashNamePrefix))) {
@@ -1917,7 +1966,7 @@ bool GitClient::stashNameFromMessage(const QString &workingDirectory,
}
bool GitClient::synchronousBranchCmd(const QString &workingDirectory, QStringList branchArgs,
- QString *output, QString *errorMessage)
+ QString *output, QString *errorMessage) const
{
branchArgs.push_front(QLatin1String("branch"));
QByteArray outputText;
@@ -1931,7 +1980,7 @@ bool GitClient::synchronousBranchCmd(const QString &workingDirectory, QStringLis
}
bool GitClient::synchronousTagCmd(const QString &workingDirectory, QStringList tagArgs,
- QString *output, QString *errorMessage)
+ QString *output, QString *errorMessage) const
{
tagArgs.push_front(QLatin1String("tag"));
QByteArray outputText;
@@ -1945,7 +1994,7 @@ bool GitClient::synchronousTagCmd(const QString &workingDirectory, QStringList t
}
bool GitClient::synchronousForEachRefCmd(const QString &workingDirectory, QStringList args,
- QString *output, QString *errorMessage)
+ QString *output, QString *errorMessage) const
{
args.push_front(QLatin1String("for-each-ref"));
QByteArray outputText;
@@ -1960,7 +2009,7 @@ bool GitClient::synchronousForEachRefCmd(const QString &workingDirectory, QStrin
}
bool GitClient::synchronousRemoteCmd(const QString &workingDirectory, QStringList remoteArgs,
- QString *output, QString *errorMessage, bool silent)
+ QString *output, QString *errorMessage, bool silent) const
{
remoteArgs.push_front(QLatin1String("remote"));
QByteArray outputText;
@@ -1975,7 +2024,7 @@ bool GitClient::synchronousRemoteCmd(const QString &workingDirectory, QStringLis
}
QMap<QString,QString> GitClient::synchronousRemotesList(const QString &workingDirectory,
- QString *errorMessage)
+ QString *errorMessage) const
{
QMap<QString,QString> result;
QString output;
@@ -2001,7 +2050,7 @@ QMap<QString,QString> GitClient::synchronousRemotesList(const QString &workingDi
}
QStringList GitClient::synchronousSubmoduleStatus(const QString &workingDirectory,
- QString *errorMessage)
+ QString *errorMessage) const
{
QByteArray outputTextData;
QByteArray errorText;
@@ -2018,7 +2067,7 @@ QStringList GitClient::synchronousSubmoduleStatus(const QString &workingDirector
return commandOutputLinesFromLocal8Bit(outputTextData);
}
-SubmoduleDataMap GitClient::submoduleList(const QString &workingDirectory)
+SubmoduleDataMap GitClient::submoduleList(const QString &workingDirectory) const
{
SubmoduleDataMap result;
QString gitmodulesFileName = workingDirectory + QLatin1String("/.gitmodules");
@@ -2076,7 +2125,7 @@ SubmoduleDataMap GitClient::submoduleList(const QString &workingDirectory)
}
bool GitClient::synchronousShow(const QString &workingDirectory, const QString &id,
- QString *output, QString *errorMessage)
+ QString *output, QString *errorMessage) const
{
if (!canShow(id)) {
*errorMessage = msgCannotShow(id);
@@ -2253,7 +2302,7 @@ bool GitClient::isValidRevision(const QString &revision) const
Utils::SynchronousProcessResponse GitClient::synchronousGit(const QString &workingDirectory,
const QStringList &gitArguments,
unsigned flags,
- QTextCodec *outputCodec)
+ QTextCodec *outputCodec) const
{
return VcsBasePlugin::runVcs(workingDirectory, gitExecutable(), gitArguments,
settings()->intValue(GitSettings::timeoutKey) * 1000,
@@ -2339,7 +2388,7 @@ void GitClient::fetchFinished(const QVariant &cookie)
}
GitClient::StatusResult GitClient::gitStatus(const QString &workingDirectory, StatusMode mode,
- QString *output, QString *errorMessage)
+ QString *output, QString *errorMessage) const
{
// Run 'status'. Note that git returns exitcode 1 if there are no added files.
QByteArray outputText;
@@ -2378,7 +2427,7 @@ GitClient::StatusResult GitClient::gitStatus(const QString &workingDirectory, St
return StatusUnchanged;
}
-QString GitClient::commandInProgressDescription(const QString &workingDirectory)
+QString GitClient::commandInProgressDescription(const QString &workingDirectory) const
{
switch (checkCommandInProgress(workingDirectory)) {
case NoCommand:
@@ -2396,7 +2445,7 @@ QString GitClient::commandInProgressDescription(const QString &workingDirectory)
return QString();
}
-GitClient::CommandInProgress GitClient::checkCommandInProgress(const QString &workingDirectory)
+GitClient::CommandInProgress GitClient::checkCommandInProgress(const QString &workingDirectory) const
{
const QString gitDir = findGitDirForRepository(workingDirectory);
if (QFile::exists(gitDir + QLatin1String("/MERGE_HEAD")))
@@ -2490,7 +2539,7 @@ void GitClient::continuePreviousGitCommand(const QString &workingDirectory,
}
}
-QString GitClient::extendedShowDescription(const QString &workingDirectory, const QString &text)
+QString GitClient::extendedShowDescription(const QString &workingDirectory, const QString &text) const
{
if (!text.startsWith(QLatin1String("commit ")))
return text;
@@ -2509,7 +2558,7 @@ QString GitClient::extendedShowDescription(const QString &workingDirectory, cons
// Quietly retrieve branch list of remote repository URL
//
// The branch HEAD is pointing to is always returned first.
-QStringList GitClient::synchronousRepositoryBranches(const QString &repositoryURL)
+QStringList GitClient::synchronousRepositoryBranches(const QString &repositoryURL) const
{
QStringList arguments(QLatin1String("ls-remote"));
arguments << repositoryURL << QLatin1String(HEAD) << QLatin1String("refs/heads/*");
@@ -3071,7 +3120,7 @@ void GitClient::fetch(const QString &workingDirectory, const QString &remote)
bool GitClient::executeAndHandleConflicts(const QString &workingDirectory,
const QStringList &arguments,
- const QString &abortCommand)
+ const QString &abortCommand) const
{
// Disable UNIX terminals to suppress SSH prompting.
const unsigned flags = VcsBasePlugin::SshPasswordPrompt
@@ -3374,7 +3423,7 @@ void GitClient::stashPop(const QString &workingDirectory)
bool GitClient::synchronousStashRestore(const QString &workingDirectory,
const QString &stash,
bool pop,
- const QString &branch /* = QString()*/)
+ const QString &branch /* = QString()*/) const
{
QStringList arguments(QLatin1String("stash"));
if (branch.isEmpty())
@@ -3386,7 +3435,7 @@ bool GitClient::synchronousStashRestore(const QString &workingDirectory,
bool GitClient::synchronousStashRemove(const QString &workingDirectory,
const QString &stash /* = QString() */,
- QString *errorMessage /* = 0 */)
+ QString *errorMessage /* = 0 */) const
{
QStringList arguments(QLatin1String("stash"));
if (stash.isEmpty())
@@ -3408,7 +3457,7 @@ bool GitClient::synchronousStashRemove(const QString &workingDirectory,
bool GitClient::synchronousStashList(const QString &workingDirectory,
QList<Stash> *stashes,
- QString *errorMessage /* = 0 */)
+ QString *errorMessage /* = 0 */) const
{
stashes->clear();
QStringList arguments(QLatin1String("stash"));
diff --git a/src/plugins/git/gitclient.h b/src/plugins/git/gitclient.h
index 2c2cfb141e..07af9a0a48 100644
--- a/src/plugins/git/gitclient.h
+++ b/src/plugins/git/gitclient.h
@@ -139,16 +139,16 @@ public:
Utils::FileName gitExecutable(bool *ok = 0, QString *errorMessage = 0) const;
unsigned gitVersion(QString *errorMessage = 0) const;
- QString findRepositoryForDirectory(const QString &dir);
+ QString findRepositoryForDirectory(const QString &dir) const;
QString findGitDirForRepository(const QString &repositoryDir) const;
bool managesFile(const QString &workingDirectory, const QString &fileName) const;
- void diff(const QString &workingDirectory, const QString &fileName);
+ void diff(const QString &workingDirectory, const QString &fileName) const;
void diff(const QString &workingDirectory,
const QStringList &unstagedFileNames,
- const QStringList &stagedFileNames = QStringList());
+ const QStringList &stagedFileNames = QStringList()) const;
void diffBranch(const QString &workingDirectory,
- const QString &branchName);
+ const QString &branchName) const;
void merge(const QString &workingDirectory, const QStringList &unmergedFileNames = QStringList());
void status(const QString &workingDirectory);
@@ -193,57 +193,57 @@ public:
enum { StashPromptDescription = 0x1, StashImmediateRestore = 0x2, StashIgnoreUnchanged = 0x4 };
QString synchronousStash(const QString &workingDirectory,
const QString &messageKeyword = QString(),
- unsigned flags = 0, bool *unchanged = 0);
+ unsigned flags = 0, bool *unchanged = 0) const;
bool executeSynchronousStash(const QString &workingDirectory,
const QString &message = QString(),
- QString *errorMessage = 0);
+ QString *errorMessage = 0) const;
bool synchronousStashRestore(const QString &workingDirectory,
const QString &stash,
bool pop = false,
- const QString &branch = QString());
+ const QString &branch = QString()) const;
bool synchronousStashRemove(const QString &workingDirectory,
const QString &stash = QString(),
- QString *errorMessage = 0);
+ QString *errorMessage = 0) const;
bool synchronousBranchCmd(const QString &workingDirectory, QStringList branchArgs,
- QString *output, QString *errorMessage);
+ QString *output, QString *errorMessage) const;
bool synchronousTagCmd(const QString &workingDirectory, QStringList tagArgs,
- QString *output, QString *errorMessage);
+ QString *output, QString *errorMessage) const;
bool synchronousForEachRefCmd(const QString &workingDirectory, QStringList args,
- QString *output, QString *errorMessage = 0);
+ QString *output, QString *errorMessage = 0) const;
bool synchronousRemoteCmd(const QString &workingDirectory, QStringList remoteArgs,
- QString *output, QString *errorMessage, bool silent = false);
+ QString *output, QString *errorMessage, bool silent = false) const;
QMap<QString,QString> synchronousRemotesList(const QString &workingDirectory,
- QString *errorMessage = 0);
+ QString *errorMessage = 0) const;
QStringList synchronousSubmoduleStatus(const QString &workingDirectory,
- QString *errorMessage = 0);
- SubmoduleDataMap submoduleList(const QString &workingDirectory);
+ QString *errorMessage = 0) const;
+ SubmoduleDataMap submoduleList(const QString &workingDirectory) const;
bool synchronousShow(const QString &workingDirectory, const QString &id,
- QString *output, QString *errorMessage);
+ QString *output, QString *errorMessage) const;
bool synchronousRevListCmd(const QString &workingDirectory, const QStringList &arguments,
- QString *output, QString *errorMessage = 0);
+ QString *output, QString *errorMessage = 0) const;
bool synchronousParentRevisions(const QString &workingDirectory,
const QStringList &files /* = QStringList() */,
const QString &revision,
QStringList *parents,
- QString *errorMessage);
- QString synchronousShortDescription(const QString &workingDirectory, const QString &revision);
+ QString *errorMessage) const;
+ QString synchronousShortDescription(const QString &workingDirectory, const QString &revision) const;
QString synchronousShortDescription(const QString &workingDirectory, const QString &revision,
- const QString &format);
+ const QString &format) const;
- QString synchronousCurrentLocalBranch(const QString &workingDirectory);
+ QString synchronousCurrentLocalBranch(const QString &workingDirectory) const;
bool synchronousHeadRefs(const QString &workingDirectory, QStringList *output,
- QString *errorMessage = 0);
- QString synchronousTopic(const QString &workingDirectory);
+ QString *errorMessage = 0) const;
+ QString synchronousTopic(const QString &workingDirectory) const;
bool synchronousRevParseCmd(const QString &workingDirectory, const QString &ref,
QString *output, QString *errorMessage = 0) const;
QString synchronousTopRevision(const QString &workingDirectory, QString *errorMessage = 0);
void synchronousTagsForCommit(const QString &workingDirectory, const QString &revision,
- QString &precedes, QString &follows);
+ QString &precedes, QString &follows) const;
bool isRemoteCommit(const QString &workingDirectory, const QString &commit);
bool isFastForwardMerge(const QString &workingDirectory, const QString &branch);
@@ -279,11 +279,11 @@ public:
void revert(const QStringList &files, bool revertStaging);
bool synchronousStashList(const QString &workingDirectory,
QList<Stash> *stashes,
- QString *errorMessage = 0);
+ QString *errorMessage = 0) const;
// Resolve a stash name from message (for IVersionControl's names).
bool stashNameFromMessage(const QString &workingDirectory,
const QString &messge, QString *name,
- QString *errorMessage = 0);
+ QString *errorMessage = 0) const;
QString readConfigValue(const QString &workingDirectory, const QString &configVar) const;
@@ -305,14 +305,14 @@ public:
StatusResult gitStatus(const QString &workingDirectory,
StatusMode mode,
QString *output = 0,
- QString *errorMessage = 0);
+ QString *errorMessage = 0) const;
- CommandInProgress checkCommandInProgress(const QString &workingDirectory);
- QString commandInProgressDescription(const QString &workingDirectory);
+ CommandInProgress checkCommandInProgress(const QString &workingDirectory) const;
+ QString commandInProgressDescription(const QString &workingDirectory) const;
void continueCommandIfNeeded(const QString &workingDirectory, bool allowContinue = true);
- QString extendedShowDescription(const QString &workingDirectory, const QString &text);
+ QString extendedShowDescription(const QString &workingDirectory, const QString &text) const;
void launchGitK(const QString &workingDirectory, const QString &fileName);
void launchGitK(const QString &workingDirectory) { launchGitK(workingDirectory, QString()); }
@@ -321,7 +321,7 @@ public:
void launchRepositoryBrowser(const QString &workingDirectory);
- QStringList synchronousRepositoryBranches(const QString &repositoryURL);
+ QStringList synchronousRepositoryBranches(const QString &repositoryURL) const;
GitSettings *settings() const;
@@ -397,7 +397,7 @@ private:
// log windows updating (using VcsBasePlugin::runVcs with flags).
inline Utils::SynchronousProcessResponse
synchronousGit(const QString &workingDirectory, const QStringList &arguments,
- unsigned flags = 0, QTextCodec *outputCodec = 0);
+ unsigned flags = 0, QTextCodec *outputCodec = 0) const;
// determine version as '(major << 16) + (minor << 8) + patch' or 0.
unsigned synchronousGitVersion(QString *errorMessage = 0) const;
@@ -409,7 +409,7 @@ private:
bool revertStaging);
void connectRepositoryChanged(const QString & repository, VcsBase::Command *cmd);
bool executeAndHandleConflicts(const QString &workingDirectory, const QStringList &arguments,
- const QString &abortCommand = QString());
+ const QString &abortCommand = QString()) const;
bool tryLauchingGitK(const QProcessEnvironment &env,
const QString &workingDirectory,
const QString &fileName,
diff --git a/src/plugins/ios/iosprobe.cpp b/src/plugins/ios/iosprobe.cpp
index 54c01975cd..8cea854e15 100644
--- a/src/plugins/ios/iosprobe.cpp
+++ b/src/plugins/ios/iosprobe.cpp
@@ -63,7 +63,7 @@ static int compareVersions(const QString &v1, const QString &v2)
QStringList v1L = v1.split(QLatin1Char('.'));
QStringList v2L = v2.split(QLatin1Char('.'));
int i = 0;
- while (v1.length() > i && v1.length() > i) {
+ while (v1L.length() > i && v2L.length() > i) {
bool n1Ok, n2Ok;
int n1 = v1L.value(i).toInt(&n1Ok);
int n2 = v2L.value(i).toInt(&n2Ok);
@@ -77,9 +77,9 @@ static int compareVersions(const QString &v1, const QString &v2)
return 1;
++i;
}
- if (v1.length() > v2.length())
+ if (v1L.length() > v2L.length())
return -1;
- if (v1.length() < v2.length())
+ if (v1L.length() < v2L.length())
return 1;
return 0;
}
diff --git a/src/plugins/projectexplorer/editorconfiguration.cpp b/src/plugins/projectexplorer/editorconfiguration.cpp
index 2358920a2c..6f7ef0abe1 100644
--- a/src/plugins/projectexplorer/editorconfiguration.cpp
+++ b/src/plugins/projectexplorer/editorconfiguration.cpp
@@ -32,8 +32,11 @@
#include "projectexplorer.h"
#include "project.h"
+#include <utils/algorithm.h>
+
#include <coreplugin/id.h>
#include <coreplugin/icore.h>
+#include <coreplugin/editormanager/editormanager.h>
#include <texteditor/basetexteditor.h>
#include <texteditor/texteditorsettings.h>
#include <texteditor/simplecodestylepreferences.h>
@@ -82,6 +85,7 @@ struct EditorConfigurationPrivate
QTextCodec *m_textCodec;
QMap<Core::Id, ICodeStylePreferences *> m_languageCodeStylePreferences;
+ QList<BaseTextEditor *> m_editors;
};
EditorConfiguration::EditorConfiguration() : d(new EditorConfigurationPrivate)
@@ -116,6 +120,8 @@ EditorConfiguration::EditorConfiguration() : d(new EditorConfigurationPrivate)
connect(SessionManager::instance(), SIGNAL(aboutToRemoveProject(ProjectExplorer::Project*)),
this, SLOT(slotAboutToRemoveProject(ProjectExplorer::Project*)));
+ connect(Core::EditorManager::instance(), SIGNAL(editorsClosed(QList<Core::IEditor*>)),
+ this, SLOT(editorsClosed(QList<Core::IEditor*>)));
}
EditorConfiguration::~EditorConfiguration()
@@ -256,6 +262,7 @@ void EditorConfiguration::configureEditor(BaseTextEditor *textEditor) const
if (widget)
switchSettings(widget);
}
+ d->m_editors.append(textEditor);
}
void EditorConfiguration::deconfigureEditor(BaseTextEditor *textEditor) const
@@ -264,6 +271,8 @@ void EditorConfiguration::deconfigureEditor(BaseTextEditor *textEditor) const
if (widget)
widget->setCodeStyle(TextEditorSettings::codeStyle(widget->languageSettingsId()));
+ d->m_editors.removeOne(textEditor);
+
// TODO: what about text codec and switching settings?
}
@@ -384,16 +393,15 @@ void EditorConfiguration::slotAboutToRemoveProject(ProjectExplorer::Project *pro
if (project->editorConfiguration() != this)
return;
- foreach (Core::IEditor *editor, Core::DocumentModel::editorsForOpenedDocuments()) {
- if (TextEditor::BaseTextEditor *textEditor = qobject_cast<TextEditor::BaseTextEditor*>(editor)) {
- Core::IDocument *document = editor->document();
- if (document) {
- Project *editorProject = SessionManager::projectForFile(document->filePath());
- if (project == editorProject)
- deconfigureEditor(textEditor);
- }
- }
- }
+ foreach (TextEditor::BaseTextEditor *editor, d->m_editors)
+ deconfigureEditor(editor);
+}
+
+void EditorConfiguration::editorsClosed(const QList<Core::IEditor*> &closedEditors)
+{
+ Utils::erase(d->m_editors, [&closedEditors](Core::IEditor *editor) {
+ return closedEditors.contains(editor);
+ });
}
TabSettings actualTabSettings(const QString &fileName,
diff --git a/src/plugins/projectexplorer/editorconfiguration.h b/src/plugins/projectexplorer/editorconfiguration.h
index 71e825df16..6631a84953 100644
--- a/src/plugins/projectexplorer/editorconfiguration.h
+++ b/src/plugins/projectexplorer/editorconfiguration.h
@@ -35,7 +35,10 @@
#include <QObject>
#include <QVariantMap>
-namespace Core { class Id; }
+namespace Core {
+class IEditor;
+class Id;
+}
namespace TextEditor {
class BaseTextEditor;
@@ -107,6 +110,7 @@ private slots:
void setTextCodec(QTextCodec *textCodec);
void slotAboutToRemoveProject(ProjectExplorer::Project *project);
+ void editorsClosed(const QList<Core::IEditor*> &closedEditors);
private:
void switchSettings(TextEditor::BaseTextEditorWidget *baseTextEditor) const;
diff --git a/src/plugins/projectexplorer/projectwizardpage.cpp b/src/plugins/projectexplorer/projectwizardpage.cpp
index 3a37bdd500..c7b93a44e2 100644
--- a/src/plugins/projectexplorer/projectwizardpage.cpp
+++ b/src/plugins/projectexplorer/projectwizardpage.cpp
@@ -115,8 +115,10 @@ void BestNodeSelector::inspect(AddNewTree *tree)
const int projectDirectorySize = projectDirectory.size();
if (!m_commonDirectory.startsWith(projectDirectory))
return;
- bool betterMatch = projectDirectorySize > m_bestMatchLength
- || (projectDirectorySize == m_bestMatchLength && tree->priority() > m_bestMatchPriority);
+ bool betterMatch = tree->priority() > 0
+ && (projectDirectorySize > m_bestMatchLength
+ || (projectDirectorySize == m_bestMatchLength && tree->priority() > m_bestMatchPriority));
+
if (betterMatch) {
m_bestMatchPriority = tree->priority();
m_bestMatchLength = projectDirectorySize;
diff --git a/src/plugins/qbsprojectmanager/defaultpropertyprovider.cpp b/src/plugins/qbsprojectmanager/defaultpropertyprovider.cpp
index e5b0ac5a4d..605100e06c 100644
--- a/src/plugins/qbsprojectmanager/defaultpropertyprovider.cpp
+++ b/src/plugins/qbsprojectmanager/defaultpropertyprovider.cpp
@@ -163,6 +163,10 @@ QVariantMap DefaultPropertyProvider::properties(const ProjectExplorer::Kit *k, c
if (!toolchainPrefix.isEmpty())
data.insert(QLatin1String(CPP_TOOLCHAINPREFIX), toolchainPrefix);
data.insert(QLatin1String(CPP_COMPILERNAME), compilerName);
+ if (targetAbi.os() != ProjectExplorer::Abi::WindowsOS
+ || targetAbi.osFlavor() == ProjectExplorer::Abi::WindowsMSysFlavor) {
+ data.insert(QLatin1String(CPP_LINKERNAME), compilerName);
+ }
data.insert(QLatin1String(CPP_TOOLCHAINPATH), cxxFileInfo.absolutePath());
if (targetAbi.osFlavor() == ProjectExplorer::Abi::WindowsMsvc2013Flavor) {
const QLatin1String flags("/FS");
diff --git a/src/plugins/qbsprojectmanager/qbsconstants.h b/src/plugins/qbsprojectmanager/qbsconstants.h
index c0af1997b0..4575e8cbd4 100644
--- a/src/plugins/qbsprojectmanager/qbsconstants.h
+++ b/src/plugins/qbsprojectmanager/qbsconstants.h
@@ -42,6 +42,7 @@ const char QBS_TOOLCHAIN[] = "qbs.toolchain";
const char CPP_TOOLCHAINPATH[] = "cpp.toolchainInstallPath";
const char CPP_TOOLCHAINPREFIX[] = "cpp.toolchainPrefix";
const char CPP_COMPILERNAME[] = "cpp.compilerName";
+const char CPP_LINKERNAME[] = "cpp.linkerName";
const char CPP_PLATFORMCFLAGS[] = "cpp.platformCFlags";
const char CPP_PLATFORMCXXFLAGS[] = "cpp.platformCxxFlags";
const char CPP_XCODESDKNAME[] = "cpp.xcodeSdkName";
diff --git a/src/plugins/qbsprojectmanager/qbsproject.cpp b/src/plugins/qbsprojectmanager/qbsproject.cpp
index 8e73b24a40..5a63f82cf1 100644
--- a/src/plugins/qbsprojectmanager/qbsproject.cpp
+++ b/src/plugins/qbsprojectmanager/qbsproject.cpp
@@ -749,6 +749,13 @@ void QbsProject::updateApplicationTargets(const qbs::ProjectData &projectData)
{
ProjectExplorer::BuildTargetInfoList applications;
foreach (const qbs::ProductData &productData, projectData.allProducts()) {
+ if (!productData.isEnabled() || !productData.isRunnable())
+ continue;
+ if (productData.targetArtifacts().isEmpty()) { // No build yet.
+ applications.list << ProjectExplorer::BuildTargetInfo(Utils::FileName(),
+ Utils::FileName::fromString(productData.location().fileName()));
+ continue;
+ }
foreach (const qbs::TargetArtifact &ta, productData.targetArtifacts()) {
QTC_ASSERT(ta.isValid(), continue);
if (!ta.isExecutable())
diff --git a/src/plugins/qbsprojectmanager/qbsprojectmanager.qbs b/src/plugins/qbsprojectmanager/qbsprojectmanager.qbs
index bfee79593f..d026f069f3 100644
--- a/src/plugins/qbsprojectmanager/qbsprojectmanager.qbs
+++ b/src/plugins/qbsprojectmanager/qbsprojectmanager.qbs
@@ -76,6 +76,7 @@ QtcPlugin {
"qbscleanstep.cpp",
"qbscleanstep.h",
"qbscleanstepconfigwidget.ui",
+ "qbsconstants.h",
"qbsdeployconfigurationfactory.cpp",
"qbsdeployconfigurationfactory.h",
"qbsinstallstep.cpp",
diff --git a/src/plugins/qmakeandroidsupport/createandroidmanifestwizard.cpp b/src/plugins/qmakeandroidsupport/createandroidmanifestwizard.cpp
index 8e2f16239a..5c0aead33a 100644
--- a/src/plugins/qmakeandroidsupport/createandroidmanifestwizard.cpp
+++ b/src/plugins/qmakeandroidsupport/createandroidmanifestwizard.cpp
@@ -228,8 +228,11 @@ QString CreateAndroidManifestWizard::sourceFileName() const
return srcFolder;
Utils::FileName srcPath
= Utils::FileName::fromString(srcFolder)
- .appendPath(QLatin1String("src/android/java"));
- srcPath.appendPath(QLatin1String("AndroidManifest.xml"));
+ .appendPath(QLatin1String("src/android"));
+ if (QFile::exists(srcPath.toString() + QLatin1String("/templates/AndroidManifest.xml")))
+ srcPath.appendPath(QLatin1String("/templates/AndroidManifest.xml"));
+ else
+ srcPath.appendPath(QLatin1String("/java/AndroidManifest.xml"));
return srcPath.toString();
}
diff --git a/src/plugins/qmakeprojectmanager/librarydetailscontroller.cpp b/src/plugins/qmakeprojectmanager/librarydetailscontroller.cpp
index afe18ef262..6b1a20bb05 100644
--- a/src/plugins/qmakeprojectmanager/librarydetailscontroller.cpp
+++ b/src/plugins/qmakeprojectmanager/librarydetailscontroller.cpp
@@ -597,7 +597,7 @@ static QString generatePreTargetDepsSnippet(AddLibraryWizard::Platforms platform
generatedPlatforms |= windowsPlatforms;
} else {
if (windowsPlatforms & AddLibraryWizard::WindowsMSVCPlatform) {
- str << "win32:!win32-g++ " << preTargetDepsSnippet << libName << ".lib\n";
+ str << "win32:!win32-g++: " << preTargetDepsSnippet << libName << ".lib\n";
generatedPlatforms |= AddLibraryWizard::WindowsMSVCPlatform; // mingw will be handled with common scopes
}
// mingw not generated yet, will be joined with unix like
diff --git a/src/plugins/qmakeprojectmanager/qmakenodes.cpp b/src/plugins/qmakeprojectmanager/qmakenodes.cpp
index cb8052a5dd..76ac873a60 100644
--- a/src/plugins/qmakeprojectmanager/qmakenodes.cpp
+++ b/src/plugins/qmakeprojectmanager/qmakenodes.cpp
@@ -1289,10 +1289,13 @@ QStringList QmakePriFileNode::varNames(ProjectExplorer::FileType type, QtSupport
break;
case ProjectExplorer::QMLType:
vars << QLatin1String("OTHER_FILES");
+ vars << QLatin1String("DISTFILES");
break;
default:
vars << QLatin1String("OTHER_FILES");
+ vars << QLatin1String("DISTFILES");
vars << QLatin1String("ICON");
+ vars << QLatin1String("QMAKE_INFO_PLIST");
break;
}
return vars;
@@ -1353,6 +1356,7 @@ QStringList QmakePriFileNode::varNamesForRemoving()
vars << QLatin1String("SUBDIRS");
vars << QLatin1String("OTHER_FILES");
vars << QLatin1String("ICON");
+ vars << QLatin1String("QMAKE_INFO_PLIST");
return vars;
}
diff --git a/src/plugins/qmakeprojectmanager/wizards/qtquickapp.cpp b/src/plugins/qmakeprojectmanager/wizards/qtquickapp.cpp
index f64789053f..931c214ab3 100644
--- a/src/plugins/qmakeprojectmanager/wizards/qtquickapp.cpp
+++ b/src/plugins/qmakeprojectmanager/wizards/qtquickapp.cpp
@@ -31,6 +31,8 @@
#include <utils/qtcassert.h>
#include <utils/fileutils.h>
+#include <extensionsystem/pluginmanager.h>
+#include <extensionsystem/pluginspec.h>
#include <QDebug>
#include <QDir>
@@ -173,6 +175,12 @@ class TemplateInfoList
public:
TemplateInfoList()
{
+ QSet<QString> availablePlugins;
+ foreach (ExtensionSystem::PluginSpec *s, ExtensionSystem::PluginManager::plugins()) {
+ if (s->state() == ExtensionSystem::PluginSpec::Running && !s->hasError())
+ availablePlugins += s->name();
+ }
+
QMultiMap<QString, TemplateInfo> multiMap;
foreach (const QString &templateName, templateNames()) {
const QString templatePath = templateRootDirectory() + templateName;
@@ -185,7 +193,17 @@ public:
info.templateName = templateName;
info.templatePath = templatePath;
QXmlStreamReader reader(&xmlFile);
- if (parseTemplateXml(reader, &info))
+ if (!parseTemplateXml(reader, &info))
+ continue;
+
+ bool ok = true;
+ foreach (const QString &neededPlugin, info.requiredPlugins) {
+ if (!availablePlugins.contains(neededPlugin)) {
+ ok = false;
+ break;
+ }
+ }
+ if (ok)
multiMap.insert(info.priority, info);
}
m_templateInfoList = multiMap.values();
diff --git a/src/plugins/qmakeprojectmanager/wizards/qtquickappwizard.cpp b/src/plugins/qmakeprojectmanager/wizards/qtquickappwizard.cpp
index ba56fbddb2..59b06b88e8 100644
--- a/src/plugins/qmakeprojectmanager/wizards/qtquickappwizard.cpp
+++ b/src/plugins/qmakeprojectmanager/wizards/qtquickappwizard.cpp
@@ -71,6 +71,8 @@ QtQuickAppWizardDialog::QtQuickAppWizardDialog(QWidget *parent,
addPage(m_componentSetPage);
addKitsPage();
+
+ setRequiredFeatures(Core::Feature(QtSupport::Constants::FEATURE_QT_QUICK));
}
void QtQuickAppWizardDialog::initializePage(int id)
diff --git a/src/plugins/qmakeprojectmanager/wizards/qtquickappwizardpages.cpp b/src/plugins/qmakeprojectmanager/wizards/qtquickappwizardpages.cpp
index 78451eaf54..1dd36a63ef 100644
--- a/src/plugins/qmakeprojectmanager/wizards/qtquickappwizardpages.cpp
+++ b/src/plugins/qmakeprojectmanager/wizards/qtquickappwizardpages.cpp
@@ -30,8 +30,6 @@
#include "qtquickappwizardpages.h"
#include <utils/wizard.h>
-#include <extensionsystem/pluginmanager.h>
-#include <extensionsystem/pluginspec.h>
#include <QComboBox>
#include <QLabel>
@@ -58,23 +56,8 @@ QtQuickComponentSetPage::QtQuickComponentSetPage(QWidget *parent)
QLabel *label = new QLabel(tr("Qt Quick component set:"), this);
d->m_versionComboBox = new QComboBox(this);
- QSet<QString> availablePlugins;
- foreach (ExtensionSystem::PluginSpec *s, ExtensionSystem::PluginManager::plugins()) {
- if (s->state() == ExtensionSystem::PluginSpec::Running && !s->hasError())
- availablePlugins += s->name();
- }
-
- foreach (const TemplateInfo &templateInfo, QtQuickApp::templateInfos()) {
- bool ok = true;
- foreach (const QString &neededPlugin, templateInfo.requiredPlugins) {
- if (!availablePlugins.contains(neededPlugin)) {
- ok = false;
- break;
- }
- }
- if (ok)
- d->m_versionComboBox->addItem(templateInfo.displayName);
- }
+ foreach (const TemplateInfo &templateInfo, QtQuickApp::templateInfos())
+ d->m_versionComboBox->addItem(templateInfo.displayName);
l->addWidget(label);
l->addWidget(d->m_versionComboBox);
diff --git a/src/plugins/qmldesigner/components/debugview/debugview.cpp b/src/plugins/qmldesigner/components/debugview/debugview.cpp
index aeeebfdf68..4e582907b6 100644
--- a/src/plugins/qmldesigner/components/debugview/debugview.cpp
+++ b/src/plugins/qmldesigner/components/debugview/debugview.cpp
@@ -212,9 +212,19 @@ void DebugView::rootNodeTypeChanged(const QString &type, int majorVersion, int m
}
}
-void DebugView::selectedNodesChanged(const QList<ModelNode> & /*selectedNodeList*/,
+void DebugView::selectedNodesChanged(const QList<ModelNode> &selectedNodes /*selectedNodeList*/,
const QList<ModelNode> & /*lastSelectedNodeList*/)
{
+ foreach (const ModelNode &selectedNode, selectedNodes) {
+ QTextStream message;
+ QString string;
+ message.setString(&string);
+ message << selectedNode;
+ foreach (const VariantProperty &property, selectedNode.variantProperties()) {
+ message << property;
+ }
+ log(tr("Node selected:"), string);
+ }
}
void DebugView::scriptFunctionsChanged(const ModelNode & /*node*/, const QStringList & /*scriptFunctionList*/)
diff --git a/src/plugins/qmldesigner/components/formeditor/contentnoteditableindicator.cpp b/src/plugins/qmldesigner/components/formeditor/contentnoteditableindicator.cpp
index 5cba0e3565..9ef118aee0 100644
--- a/src/plugins/qmldesigner/components/formeditor/contentnoteditableindicator.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/contentnoteditableindicator.cpp
@@ -31,6 +31,7 @@
#include "nodemetainfo.h"
#include <QSet>
+#include <QPen>
namespace QmlDesigner {
@@ -95,13 +96,14 @@ void ContentNotEditableIndicator::addAddiationEntries(const QList<FormEditorItem
if (!m_entryList.contains(EntryPair(formEditorItem, 0))) {
QGraphicsRectItem *indicatorShape = new QGraphicsRectItem(m_layerItem);
+ QPen linePen;
+ linePen.setColor("#a0a0a0");
+ indicatorShape->setPen(linePen);
QRectF boundingRectangleInSceneSpace = formEditorItem->qmlItemNode().instanceSceneTransform().mapRect(formEditorItem->qmlItemNode().instanceBoundingRect());
indicatorShape->setRect(boundingRectangleInSceneSpace);
- static QBrush brush(QColor(0, 0, 0, 130), Qt::BDiagPattern);
+ static QBrush brush(QColor(0, 0, 0, 10), Qt::BDiagPattern);
indicatorShape->setBrush(brush);
- formEditorItem->blurContent(true);
-
m_entryList.append(EntryPair(formEditorItem, indicatorShape));
}
diff --git a/src/plugins/qmldesigner/components/formeditor/dragtool.cpp b/src/plugins/qmldesigner/components/formeditor/dragtool.cpp
index b7a5ff220c..a4c19fa4b1 100644
--- a/src/plugins/qmldesigner/components/formeditor/dragtool.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/dragtool.cpp
@@ -81,7 +81,7 @@ void DragTool::keyPressEvent(QKeyEvent *event)
if (event->key() == Qt::Key_Escape) {
abort();
event->accept();
- m_rewriterTransaction.commit();
+ commitTransaction();
view()->changeToSelectionTool();
}
}
@@ -232,7 +232,7 @@ void DragTool::dropEvent(const QList<QGraphicsItem*> &/*itemList*/, QGraphicsSce
event->accept();
end(generateUseSnapping(event->modifiers()));
- m_rewriterTransaction.commit();
+ commitTransaction();
if (m_dragNode.isValid())
view()->setSelectedModelNode(m_dragNode);
@@ -282,7 +282,7 @@ void DragTool::dragLeaveEvent(const QList<QGraphicsItem*> &/*itemList*/, QGraphi
if (m_dragNode.isValid())
m_dragNode.destroy();
- m_rewriterTransaction.commit();
+ commitTransaction();
view()->changeToSelectionTool();
}
@@ -361,4 +361,13 @@ void DragTool::move(const QPointF &scenePosition, const QList<QGraphicsItem*> &
}
}
+void DragTool::commitTransaction()
+{
+ try {
+ m_rewriterTransaction.commit();
+ } catch (RewritingException &e) {
+ e.showException();
+ }
+}
+
}
diff --git a/src/plugins/qmldesigner/components/formeditor/dragtool.h b/src/plugins/qmldesigner/components/formeditor/dragtool.h
index 844c980dc8..eacef05229 100644
--- a/src/plugins/qmldesigner/components/formeditor/dragtool.h
+++ b/src/plugins/qmldesigner/components/formeditor/dragtool.h
@@ -91,6 +91,7 @@ protected:
void end(Snapper::Snapping useSnapping);
void move(const QPointF &scenePos, const QList<QGraphicsItem *> &itemList);
void createDragNode(const QMimeData *mimeData, const QPointF &scenePosition, const QList<QGraphicsItem *> &itemList);
+ void commitTransaction();
private:
MoveManipulator m_moveManipulator;
diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp
index 5b7cdca461..ad34739ac0 100644
--- a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp
@@ -646,7 +646,7 @@ void FormEditorView::delayedReset()
m_resizeTool->clear();
m_dragTool->clear();
m_scene->clearFormEditorItems();
- if (QmlItemNode::isValidQmlItemNode(rootModelNode()))
+ if (isAttached() && QmlItemNode::isValidQmlItemNode(rootModelNode()))
setupFormEditorItemTree(rootModelNode());
}
diff --git a/src/plugins/qmldesigner/components/importmanager/importswidget.cpp b/src/plugins/qmldesigner/components/importmanager/importswidget.cpp
index e58ff77120..9768b4a997 100644
--- a/src/plugins/qmldesigner/components/importmanager/importswidget.cpp
+++ b/src/plugins/qmldesigner/components/importmanager/importswidget.cpp
@@ -92,6 +92,9 @@ void ImportsWidget::removeUsedImports()
static bool importLess(const Import &firstImport, const Import &secondImport)
{
+ if (firstImport.url() == secondImport.url())
+ return firstImport.toString() < secondImport.toString();
+
if (firstImport.url() == "QtQuick")
return true;
diff --git a/src/plugins/qmldesigner/components/integration/designdocument.cpp b/src/plugins/qmldesigner/components/integration/designdocument.cpp
index beee3b46d5..23cf2e791e 100644
--- a/src/plugins/qmldesigner/components/integration/designdocument.cpp
+++ b/src/plugins/qmldesigner/components/integration/designdocument.cpp
@@ -422,6 +422,8 @@ void DesignDocument::cutSelected()
static void scatterItem(const ModelNode &pastedNode, const ModelNode &targetNode, int offset = -2000)
{
+ if (targetNode.metaInfo().isValid() && targetNode.metaInfo().isLayoutable())
+ return;
bool scatter = false;
foreach (const ModelNode &childNode, targetNode.directSubModelNodes()) {
diff --git a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp
index a32f2504fa..91b2c657cd 100644
--- a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp
+++ b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp
@@ -50,8 +50,11 @@
#include <QtDebug>
+#define DISABLE_VISIBLE_PROPERTIES
+
namespace QmlDesigner {
+#ifndef DISABLE_VISIBLE_PROPERTIES
static PropertyNameList visibleProperties(const ModelNode &node)
{
PropertyNameList propertyList;
@@ -75,6 +78,7 @@ static PropertyNameList visibleProperties(const ModelNode &node)
return propertyList;
}
+#endif
static QList<ModelNode> acceptedModelNodeChildren(const ModelNode &parentNode)
{
@@ -84,7 +88,9 @@ static QList<ModelNode> acceptedModelNodeChildren(const ModelNode &parentNode)
if (parentNode.metaInfo().hasDefaultProperty())
properties.append(parentNode.metaInfo().defaultPropertyName());
+#ifndef DISABLE_VISIBLE_PROPERTIES
properties.append(visibleProperties(parentNode));
+#endif
foreach (const PropertyName &propertyName, properties) {
AbstractProperty property(parentNode.property(propertyName));
@@ -201,7 +207,9 @@ static bool computeTarget(const QModelIndex &rowModelIndex,
ModelNode targetNode = navigatorTreeModel->nodeForIndex(targetItemIndex);
if (!targetNode.metaInfo().hasDefaultProperty())
return false;
+#ifndef DISABLE_VISIBLE_PROPERTIES
*targetRowNumber -= visibleProperties(targetNode).count();
+#endif
targetPropertyName = targetNode.metaInfo().defaultPropertyName();
} else {
targetItemIndex = rowModelIndex.parent();
@@ -280,6 +288,7 @@ ItemRow NavigatorTreeModel::createItemRow(const ModelNode &node)
visibilityItem->setCheckable(false);
QMap<QString, QStandardItem *> propertyItems;
+#ifndef DISABLE_VISIBLE_PROPERTIES
foreach (const QString &propertyName, visibleProperties(node)) {
QStandardItem *propertyItem = new QStandardItem;
propertyItem->setSelectable(false);
@@ -290,6 +299,7 @@ ItemRow NavigatorTreeModel::createItemRow(const ModelNode &node)
propertyItems.insert(propertyName, propertyItem);
idItem->appendRow(propertyItem);
}
+#endif
# ifdef _LOCK_ITEMS_
ItemRow newRow = ItemRow(idItem, lockItem, visibilityItem, propertyItems);
@@ -334,13 +344,16 @@ static void findTargetItem(const NodeListProperty &listProperty,
int *newRowNumber,
QStandardItem **targetItem)
{
+ Q_UNUSED(newRowNumber);
if (navigatorTreeModel->isInTree(listProperty.parentModelNode())) {
ItemRow parentRow = navigatorTreeModel->itemRowForNode(listProperty.parentModelNode());
if (parentRow.propertyItems.contains(listProperty.name())) {
*targetItem = parentRow.propertyItems.value(listProperty.name());
} else { // default property
*targetItem = parentRow.idItem;
+#ifndef DISABLE_VISIBLE_PROPERTIES
newRowNumber += visibleProperties(listProperty.parentModelNode()).count();
+#endif
}
} else {
*targetItem = currentItemRow.idItem->parent();
diff --git a/src/plugins/qmldesigner/components/navigator/navigatorview.cpp b/src/plugins/qmldesigner/components/navigator/navigatorview.cpp
index 6f39ae2e9f..24809188b5 100644
--- a/src/plugins/qmldesigner/components/navigator/navigatorview.cpp
+++ b/src/plugins/qmldesigner/components/navigator/navigatorview.cpp
@@ -47,9 +47,15 @@ static inline void setScenePos(const QmlDesigner::ModelNode &modelNode,const QPo
{
if (modelNode.hasParentProperty() && QmlDesigner::QmlItemNode::isValidQmlItemNode(modelNode.parentProperty().parentModelNode())) {
QmlDesigner::QmlItemNode parentNode = modelNode.parentProperty().parentQmlObjectNode().toQmlItemNode();
- QPointF localPos = parentNode.instanceSceneTransform().inverted().map(pos);
- modelNode.variantProperty("x").setValue(localPos.toPoint().x());
- modelNode.variantProperty("y").setValue(localPos.toPoint().y());
+
+ if (!parentNode.modelNode().metaInfo().isLayoutable()) {
+ QPointF localPos = parentNode.instanceSceneTransform().inverted().map(pos);
+ modelNode.variantProperty("x").setValue(localPos.toPoint().x());
+ modelNode.variantProperty("y").setValue(localPos.toPoint().y());
+ } else { //Items in Layouts do not have a position
+ modelNode.removeProperty("x");
+ modelNode.removeProperty("y");
+ }
}
}
diff --git a/src/plugins/qmldesigner/components/propertyeditor/qmlanchorbindingproxy.cpp b/src/plugins/qmldesigner/components/propertyeditor/qmlanchorbindingproxy.cpp
index 45e69b5458..eeaa338068 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/qmlanchorbindingproxy.cpp
+++ b/src/plugins/qmldesigner/components/propertyeditor/qmlanchorbindingproxy.cpp
@@ -114,7 +114,13 @@ void QmlAnchorBindingProxy::invalidate(const QmlItemNode &fxItemNode)
m_ignoreQml = true;
- m_verticalTarget = m_horizontalTarget = m_topTarget = m_bottomTarget = m_leftTarget = m_rightTarget = m_qmlItemNode.modelNode().parentProperty().parentModelNode();
+ m_verticalTarget =
+ m_horizontalTarget =
+ m_topTarget =
+ m_bottomTarget =
+ m_leftTarget =
+ m_rightTarget =
+ m_qmlItemNode.modelNode().parentProperty().parentModelNode();
setupAnchorTargets();
@@ -247,6 +253,47 @@ void QmlAnchorBindingProxy::emitAnchorSignals()
emit relativeAnchorTargetRightChanged();
}
+void QmlAnchorBindingProxy::setDefaultRelativeTopTarget()
+{
+ if (m_topTarget.modelNode() == m_qmlItemNode.modelNode().parentProperty().parentModelNode()) {
+ m_relativeTopTarget = SameEdge;
+ } else {
+ m_relativeTopTarget = OppositeEdge;
+ }
+}
+
+void QmlAnchorBindingProxy::setDefaultRelativeBottomTarget()
+{
+ if (m_bottomTarget.modelNode() == m_qmlItemNode.modelNode().parentProperty().parentModelNode()) {
+ m_relativeBottomTarget = SameEdge;
+ } else {
+ m_relativeBottomTarget = OppositeEdge;
+ }
+}
+
+void QmlAnchorBindingProxy::setDefaultRelativeLeftTarget()
+{
+ if (m_leftTarget.modelNode() == m_qmlItemNode.modelNode().parentProperty().parentModelNode()) {
+ m_relativeLeftTarget = SameEdge;
+ } else {
+ m_relativeLeftTarget = OppositeEdge;
+ }
+}
+
+void QmlAnchorBindingProxy::setDefaultRelativeRightTarget()
+{
+ if (m_rightTarget.modelNode() == m_qmlItemNode.modelNode().parentProperty().parentModelNode()) {
+ m_relativeRightTarget = SameEdge;
+ } else {
+ m_relativeRightTarget = OppositeEdge;
+ }
+}
+
+RewriterTransaction QmlAnchorBindingProxy::beginRewriterTransaction(const QByteArray &identifier)
+{
+ return m_qmlItemNode.modelNode().view()->beginRewriterTransaction(identifier);
+}
+
bool QmlAnchorBindingProxy::hasParent()
{
return m_qmlItemNode.isValid() && m_qmlItemNode.hasNodeParent();
@@ -254,7 +301,12 @@ bool QmlAnchorBindingProxy::hasParent()
bool QmlAnchorBindingProxy::isFilled()
{
- return m_qmlItemNode.isValid() && hasAnchors() && topAnchored() && bottomAnchored() && leftAnchored() && rightAnchored()
+ return m_qmlItemNode.isValid()
+ && hasAnchors()
+ && topAnchored()
+ && bottomAnchored()
+ && leftAnchored()
+ && rightAnchored()
&& (m_qmlItemNode.instanceValue("anchors.topMargin").toInt() == 0)
&& (m_qmlItemNode.instanceValue("anchors.bottomMargin").toInt() == 0)
&& (m_qmlItemNode.instanceValue("anchors.leftMargin").toInt() == 0)
@@ -301,9 +353,13 @@ void QmlAnchorBindingProxy::setTopTarget(const QString &target)
if (!newTarget.isValid())
return;
- RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("QmlAnchorBindingProxy::setTopTarget"));
+ RewriterTransaction transaction = beginRewriterTransaction(
+ QByteArrayLiteral("QmlAnchorBindingProxy::setTopTarget"));
m_topTarget = newTarget;
+
+ setDefaultRelativeTopTarget();
+
anchorTop();
emit topTargetChanged();
@@ -323,9 +379,11 @@ void QmlAnchorBindingProxy::setBottomTarget(const QString &target)
if (!newTarget.isValid())
return;
- RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("QmlAnchorBindingProxy::setBottomTarget"));
+ RewriterTransaction transaction = beginRewriterTransaction(
+ QByteArrayLiteral("QmlAnchorBindingProxy::setBottomTarget"));
m_bottomTarget = newTarget;
+ setDefaultRelativeBottomTarget();
anchorBottom();
emit bottomTargetChanged();
@@ -344,9 +402,11 @@ void QmlAnchorBindingProxy::setLeftTarget(const QString &target)
if (!newTarget.isValid())
return;
- RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("QmlAnchorBindingProxy::setLeftTarget"));
+ RewriterTransaction transaction = beginRewriterTransaction(
+ QByteArrayLiteral("QmlAnchorBindingProxy::setLeftTarget"));
m_leftTarget = newTarget;
+ setDefaultRelativeLeftTarget();
anchorLeft();
emit leftTargetChanged();
@@ -365,9 +425,11 @@ void QmlAnchorBindingProxy::setRightTarget(const QString &target)
if (!newTarget.isValid())
return;
- RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("QmlAnchorBindingProxy::setRightTarget"));
+ RewriterTransaction transaction = beginRewriterTransaction(
+ QByteArrayLiteral("QmlAnchorBindingProxy::setRightTarget"));
m_rightTarget = newTarget;
+ setDefaultRelativeRightTarget();
anchorRight();
emit rightTargetChanged();
@@ -386,7 +448,8 @@ void QmlAnchorBindingProxy::setVerticalTarget(const QString &target)
if (!newTarget.isValid())
return;
- RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("QmlAnchorBindingProxy::setVerticalTarget"));
+ RewriterTransaction transaction = beginRewriterTransaction(
+ QByteArrayLiteral("QmlAnchorBindingProxy::setVerticalTarget"));
m_verticalTarget = newTarget;
anchorVertical();
@@ -407,7 +470,8 @@ void QmlAnchorBindingProxy::setHorizontalTarget(const QString &target)
if (!newTarget.isValid())
return;
- RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("QmlAnchorBindingProxy::setHorizontalTarget"));
+ RewriterTransaction transaction = beginRewriterTransaction(
+ QByteArrayLiteral("QmlAnchorBindingProxy::setHorizontalTarget"));
m_horizontalTarget = newTarget;
anchorHorizontal();
@@ -423,7 +487,8 @@ void QmlAnchorBindingProxy::setRelativeAnchorTargetTop(QmlAnchorBindingProxy::Re
if (target == m_relativeTopTarget)
return;
- RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("QmlAnchorBindingProxy::setRelativeAnchorTargetTop"));
+ RewriterTransaction transaction = beginRewriterTransaction(
+ QByteArrayLiteral("QmlAnchorBindingProxy::setRelativeAnchorTargetTop"));
m_relativeTopTarget = target;
@@ -440,7 +505,8 @@ void QmlAnchorBindingProxy::setRelativeAnchorTargetBottom(QmlAnchorBindingProxy:
if (target == m_relativeBottomTarget)
return;
- RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("QmlAnchorBindingProxy::setRelativeAnchorTargetBottom"));
+ RewriterTransaction transaction = beginRewriterTransaction(
+ QByteArrayLiteral("QmlAnchorBindingProxy::setRelativeAnchorTargetBottom"));
m_relativeBottomTarget = target;
@@ -457,7 +523,8 @@ void QmlAnchorBindingProxy::setRelativeAnchorTargetLeft(QmlAnchorBindingProxy::R
if (target == m_relativeLeftTarget)
return;
- RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("QmlAnchorBindingProxy::setRelativeAnchorTargetLeft"));
+ RewriterTransaction transaction = beginRewriterTransaction(
+ QByteArrayLiteral("QmlAnchorBindingProxy::setRelativeAnchorTargetLeft"));
m_relativeLeftTarget = target;
@@ -474,7 +541,8 @@ void QmlAnchorBindingProxy::setRelativeAnchorTargetRight(QmlAnchorBindingProxy::
if (target == m_relativeRightTarget)
return;
- RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("QmlAnchorBindingProxy::setRelativeAnchorTargetRight"));
+ RewriterTransaction transaction = beginRewriterTransaction(
+ QByteArrayLiteral("QmlAnchorBindingProxy::setRelativeAnchorTargetRight"));
m_relativeRightTarget = target;
@@ -492,7 +560,8 @@ void QmlAnchorBindingProxy::setRelativeAnchorTargetVertical(QmlAnchorBindingProx
if (target == m_relativeVerticalTarget)
return;
- RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("QmlAnchorBindingProxy::setRelativeAnchorTargetVertical"));
+ RewriterTransaction transaction = beginRewriterTransaction(
+ QByteArrayLiteral("QmlAnchorBindingProxy::setRelativeAnchorTargetVertical"));
m_relativeVerticalTarget = target;
@@ -509,7 +578,8 @@ void QmlAnchorBindingProxy::setRelativeAnchorTargetHorizontal(QmlAnchorBindingPr
if (target == m_relativeHorizontalTarget)
return;
- RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("QmlAnchorBindingProxy::setRelativeAnchorTargetHorizontal"));
+ RewriterTransaction transaction = beginRewriterTransaction(
+ QByteArrayLiteral("QmlAnchorBindingProxy::setRelativeAnchorTargetHorizontal"));
m_relativeHorizontalTarget = target;
@@ -559,7 +629,8 @@ int QmlAnchorBindingProxy::indexOfPossibleTargetItem(const QString &targetName)
}
void QmlAnchorBindingProxy::resetLayout() {
- RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("QmlAnchorBindingProxy::resetLayout"));
+ RewriterTransaction transaction = beginRewriterTransaction(
+ QByteArrayLiteral("QmlAnchorBindingProxy::resetLayout"));
m_qmlItemNode.anchors().removeAnchors();
m_qmlItemNode.anchors().removeMargins();
@@ -584,18 +655,13 @@ void QmlAnchorBindingProxy::setBottomAnchor(bool anchor)
if (bottomAnchored() == anchor)
return;
- RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("QmlAnchorBindingProxy::setBottomAnchor"));
+ RewriterTransaction transaction = beginRewriterTransaction(
+ QByteArrayLiteral("QmlAnchorBindingProxy::setBottomAnchor"));
if (!anchor) {
removeBottomAnchor();
} else {
-
- if (m_bottomTarget.modelNode() == m_qmlItemNode.modelNode().parentProperty().parentModelNode()) {
- m_relativeBottomTarget = SameEdge;
- } else {
- m_relativeBottomTarget = OppositeEdge;
- }
-
+ setDefaultRelativeBottomTarget();
anchorBottom();
if (topAnchored())
backupPropertyAndRemove(modelNode(), "height");
@@ -616,17 +682,13 @@ void QmlAnchorBindingProxy::setLeftAnchor(bool anchor)
if (leftAnchored() == anchor)
return;
- RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("QmlAnchorBindingProxy::setLeftAnchor"));
+ RewriterTransaction transaction = beginRewriterTransaction(
+ QByteArrayLiteral("QmlAnchorBindingProxy::setLeftAnchor"));
if (!anchor) {
removeLeftAnchor();
} else {
-
- if (m_leftTarget.modelNode() == m_qmlItemNode.modelNode().parentProperty().parentModelNode()) {
- m_relativeLeftTarget = SameEdge;
- } else {
- m_relativeLeftTarget = OppositeEdge;
- }
+ setDefaultRelativeLeftTarget();
anchorLeft();
backupPropertyAndRemove(modelNode(), "x");
@@ -648,17 +710,13 @@ void QmlAnchorBindingProxy::setRightAnchor(bool anchor)
if (rightAnchored() == anchor)
return;
- RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("QmlAnchorBindingProxy::setRightAnchor"));
+ RewriterTransaction transaction = beginRewriterTransaction(
+ QByteArrayLiteral("QmlAnchorBindingProxy::setRightAnchor"));
if (!anchor) {
removeRightAnchor();
} else {
-
- if (m_rightTarget.modelNode() == m_qmlItemNode.modelNode().parentProperty().parentModelNode()) {
- m_relativeRightTarget = SameEdge;
- } else {
- m_relativeRightTarget = OppositeEdge;
- }
+ setDefaultRelativeRightTarget();
anchorRight();
if (leftAnchored())
@@ -842,17 +900,13 @@ void QmlAnchorBindingProxy::setTopAnchor(bool anchor)
if (topAnchored() == anchor)
return;
- RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("QmlAnchorBindingProxy::setTopAnchor"));
+ RewriterTransaction transaction = beginRewriterTransaction(
+ QByteArrayLiteral("QmlAnchorBindingProxy::setTopAnchor"));
if (!anchor) {
removeTopAnchor();
} else {
-
- if (m_topTarget.modelNode() == m_qmlItemNode.modelNode().parentProperty().parentModelNode()) {
- m_relativeTopTarget = SameEdge;
- } else {
- m_relativeTopTarget = OppositeEdge;
- }
+ setDefaultRelativeTopTarget();
anchorTop();
backupPropertyAndRemove(modelNode(), "y");
@@ -867,7 +921,8 @@ void QmlAnchorBindingProxy::setTopAnchor(bool anchor)
}
void QmlAnchorBindingProxy::removeTopAnchor() {
- RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("QmlAnchorBindingProxy::removeTopAnchor"));
+ RewriterTransaction transaction = beginRewriterTransaction(
+ QByteArrayLiteral("QmlAnchorBindingProxy::removeTopAnchor"));
m_qmlItemNode.anchors().removeAnchor(AnchorLineTop);
m_qmlItemNode.anchors().removeMargin(AnchorLineTop);
@@ -878,7 +933,8 @@ void QmlAnchorBindingProxy::removeTopAnchor() {
}
void QmlAnchorBindingProxy::removeBottomAnchor() {
- RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("QmlAnchorBindingProxy::removeBottomAnchor"));
+ RewriterTransaction transaction = beginRewriterTransaction(
+ QByteArrayLiteral("QmlAnchorBindingProxy::removeBottomAnchor"));
m_qmlItemNode.anchors().removeAnchor(AnchorLineBottom);
m_qmlItemNode.anchors().removeMargin(AnchorLineBottom);
@@ -888,7 +944,8 @@ void QmlAnchorBindingProxy::removeBottomAnchor() {
}
void QmlAnchorBindingProxy::removeLeftAnchor() {
- RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("QmlAnchorBindingProxy::removeLeftAnchor"));
+ RewriterTransaction transaction = beginRewriterTransaction(
+ QByteArrayLiteral("QmlAnchorBindingProxy::removeLeftAnchor"));
m_qmlItemNode.anchors().removeAnchor(AnchorLineLeft);
m_qmlItemNode.anchors().removeMargin(AnchorLineLeft);
@@ -898,7 +955,8 @@ void QmlAnchorBindingProxy::removeLeftAnchor() {
}
void QmlAnchorBindingProxy::removeRightAnchor() {
- RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("QmlAnchorBindingProxy::removeRightAnchor"));
+ RewriterTransaction transaction = beginRewriterTransaction(
+ QByteArrayLiteral("QmlAnchorBindingProxy::removeRightAnchor"));
m_qmlItemNode.anchors().removeAnchor(AnchorLineRight);
m_qmlItemNode.anchors().removeMargin(AnchorLineRight);
@@ -916,7 +974,8 @@ void QmlAnchorBindingProxy::setVerticalCentered(bool centered)
m_locked = true;
- RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("QmlAnchorBindingProxy::setVerticalCentered"));
+ RewriterTransaction transaction = beginRewriterTransaction(
+ QByteArrayLiteral("QmlAnchorBindingProxy::setVerticalCentered"));
if (!centered) {
m_qmlItemNode.anchors().removeAnchor(AnchorLineVerticalCenter);
@@ -943,7 +1002,8 @@ void QmlAnchorBindingProxy::setHorizontalCentered(bool centered)
m_locked = true;
- RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("QmlAnchorBindingProxy::setHorizontalCentered"));
+ RewriterTransaction transaction = beginRewriterTransaction(
+ QByteArrayLiteral("QmlAnchorBindingProxy::setHorizontalCentered"));
if (!centered) {
m_qmlItemNode.anchors().removeAnchor(AnchorLineHorizontalCenter);
@@ -1033,7 +1093,8 @@ bool QmlAnchorBindingProxy::horizontalCentered()
void QmlAnchorBindingProxy::fill()
{
- RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("QmlAnchorBindingProxy::fill"));
+ RewriterTransaction transaction = beginRewriterTransaction(
+ QByteArrayLiteral("QmlAnchorBindingProxy::fill"));
backupPropertyAndRemove(modelNode(), "x");
diff --git a/src/plugins/qmldesigner/components/propertyeditor/qmlanchorbindingproxy.h b/src/plugins/qmldesigner/components/propertyeditor/qmlanchorbindingproxy.h
index a30f48e766..936b6a8187 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/qmlanchorbindingproxy.h
+++ b/src/plugins/qmldesigner/components/propertyeditor/qmlanchorbindingproxy.h
@@ -205,6 +205,12 @@ private:
void setupAnchorTargets();
void emitAnchorSignals();
+ void setDefaultRelativeTopTarget();
+ void setDefaultRelativeBottomTarget();
+ void setDefaultRelativeLeftTarget();
+ void setDefaultRelativeRightTarget();
+
+ RewriterTransaction beginRewriterTransaction(const QByteArray &identifier);
QmlItemNode targetIdToNode(const QString &id) const;
QString idForNode(const QmlItemNode &qmlItemNode) const;
diff --git a/src/plugins/qmldesigner/components/propertyeditor/quick2propertyeditorview.cpp b/src/plugins/qmldesigner/components/propertyeditor/quick2propertyeditorview.cpp
index 4aa9efbf5a..2b1251bd72 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/quick2propertyeditorview.cpp
+++ b/src/plugins/qmldesigner/components/propertyeditor/quick2propertyeditorview.cpp
@@ -41,11 +41,8 @@ namespace QmlDesigner {
void Quick2PropertyEditorView::execute()
{
m_view.setSource(m_source);
-
- if (!m_source.isEmpty()) {
- m_view.setSource(m_source);
+ if (!m_source.isEmpty())
connect(&m_view, SIGNAL(statusChanged(QQuickView::Status)), this, SLOT(continueExecute()));
- }
}
Quick2PropertyEditorView::Quick2PropertyEditorView(QWidget *parent) :
diff --git a/src/plugins/qmldesigner/componentsplugin/Controls/ButtonSpecifics.qml b/src/plugins/qmldesigner/componentsplugin/Controls/ButtonSpecifics.qml
index 5f415ff0e4..9a3bbc5d9b 100644
--- a/src/plugins/qmldesigner/componentsplugin/Controls/ButtonSpecifics.qml
+++ b/src/plugins/qmldesigner/componentsplugin/Controls/ButtonSpecifics.qml
@@ -50,10 +50,7 @@ Column {
SecondColumnLayout {
LineEdit {
backendValue: backendValues.text
- implicitWidth: 180
- }
- ExpandingSpacer {
-
+ Layout.fillWidth: true
}
}
@@ -64,6 +61,7 @@ Column {
SecondColumnLayout {
CheckBox {
+ enabled: backendValues.checkable.value
text: backendValues.checked.valueToString
backendValue: backendValues.checked
implicitWidth: 180
@@ -82,6 +80,13 @@ Column {
CheckBox {
text: backendValues.checkable.valueToString
backendValue: backendValues.checkable
+ property bool backEndValueValue: backendValues.checkable.value
+ onTextChanged: {
+ if (!backendValues.checkable.value) {
+ backendValues.checked.resetValue()
+ }
+ }
+
implicitWidth: 180
}
ExpandingSpacer {
@@ -130,10 +135,7 @@ Column {
SecondColumnLayout {
LineEdit {
backendValue: backendValues.tooltip
- implicitWidth: 180
- }
- ExpandingSpacer {
-
+ Layout.fillWidth: true
}
}
@@ -162,10 +164,7 @@ Column {
SecondColumnLayout {
LineEdit {
backendValue: backendValues.iconSource
- implicitWidth: 180
- }
- ExpandingSpacer {
-
+ Layout.fillWidth: true
}
}
diff --git a/src/plugins/qmldesigner/componentsplugin/Controls/CheckBoxSpecifics.qml b/src/plugins/qmldesigner/componentsplugin/Controls/CheckBoxSpecifics.qml
index d578848a03..e9c646d101 100644
--- a/src/plugins/qmldesigner/componentsplugin/Controls/CheckBoxSpecifics.qml
+++ b/src/plugins/qmldesigner/componentsplugin/Controls/CheckBoxSpecifics.qml
@@ -50,10 +50,7 @@ Column {
SecondColumnLayout {
LineEdit {
backendValue: backendValues.text
- implicitWidth: 180
- }
- ExpandingSpacer {
-
+ Layout.fillWidth: true
}
}
diff --git a/src/plugins/qmldesigner/componentsplugin/Controls/RadioButtonSpecifics.qml b/src/plugins/qmldesigner/componentsplugin/Controls/RadioButtonSpecifics.qml
index 785a035eb8..8318c7ddff 100644
--- a/src/plugins/qmldesigner/componentsplugin/Controls/RadioButtonSpecifics.qml
+++ b/src/plugins/qmldesigner/componentsplugin/Controls/RadioButtonSpecifics.qml
@@ -50,10 +50,7 @@ Column {
SecondColumnLayout {
LineEdit {
backendValue: backendValues.text
- implicitWidth: 180
- }
- ExpandingSpacer {
-
+ Layout.fillWidth: true
}
}
diff --git a/src/plugins/qmldesigner/componentsplugin/Controls/TextAreaSpecifics.qml b/src/plugins/qmldesigner/componentsplugin/Controls/TextAreaSpecifics.qml
index 190d31b199..7835bd2842 100644
--- a/src/plugins/qmldesigner/componentsplugin/Controls/TextAreaSpecifics.qml
+++ b/src/plugins/qmldesigner/componentsplugin/Controls/TextAreaSpecifics.qml
@@ -64,11 +64,9 @@ Column {
SecondColumnLayout {
LineEdit {
backendValue: backendValues.text
- implicitWidth: 180
+ Layout.fillWidth: true
}
- ExpandingSpacer {
- }
}
Label {
diff --git a/src/plugins/qmldesigner/componentsplugin/Controls/TextFieldSpecifics.qml b/src/plugins/qmldesigner/componentsplugin/Controls/TextFieldSpecifics.qml
index 317b08f3c1..c379e738b0 100644
--- a/src/plugins/qmldesigner/componentsplugin/Controls/TextFieldSpecifics.qml
+++ b/src/plugins/qmldesigner/componentsplugin/Controls/TextFieldSpecifics.qml
@@ -51,8 +51,7 @@ Column {
LineEdit {
backendValue: backendValues.text
implicitWidth: 180
- }
- ExpandingSpacer {
+ Layout.fillWidth: true
}
}
@@ -65,10 +64,7 @@ Column {
SecondColumnLayout {
LineEdit {
backendValue: backendValues.placeholderText
- implicitWidth: 180
- }
- ExpandingSpacer {
-
+ Layout.fillWidth: true
}
}
@@ -96,10 +92,7 @@ Column {
SecondColumnLayout {
LineEdit {
backendValue: backendValues.inputMask
- implicitWidth: 180
- }
- ExpandingSpacer {
-
+ Layout.fillWidth: true
}
}
diff --git a/src/plugins/qmldesigner/componentsplugin/components.metainfo b/src/plugins/qmldesigner/componentsplugin/components.metainfo
index 93410ed01e..052fe68da3 100644
--- a/src/plugins/qmldesigner/componentsplugin/components.metainfo
+++ b/src/plugins/qmldesigner/componentsplugin/components.metainfo
@@ -214,22 +214,6 @@ MetaInfo {
}
Type {
- name: "QtQuick.Controls.TabView"
- icon: ":/componentsplugin/images/window16.png"
-
- ItemLibraryEntry {
- name: "Tab View"
- category: "Qt Quick - Controls"
- libraryIcon: ":/componentsplugin/images/window.png"
- version: "1.0"
- requiredImport: "QtQuick.Controls"
-
- Property { name: "width"; type: "int"; value: 360; }
- Property { name: "height"; type: "int"; value: 300; }
- }
- }
-
- Type {
name: "QtQuick.Controls.GroupBox"
icon: ":/componentsplugin/images/window16.png"
diff --git a/src/plugins/qmldesigner/designercore/include/modelnode.h b/src/plugins/qmldesigner/designercore/include/modelnode.h
index 3f6792c179..40e8ce4e6d 100644
--- a/src/plugins/qmldesigner/designercore/include/modelnode.h
+++ b/src/plugins/qmldesigner/designercore/include/modelnode.h
@@ -128,7 +128,7 @@ public:
NodeListProperty defaultNodeListProperty() const;
NodeProperty defaultNodeProperty() const;
- void removeProperty(const PropertyName &name); //### also implement in AbstractProperty
+ void removeProperty(const PropertyName &name) const; //### also implement in AbstractProperty
QList<AbstractProperty> properties() const;
QList<VariantProperty> variantProperties() const;
QList<NodeAbstractProperty> nodeAbstractProperties() const;
diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp
index a45fbcd589..cb3e7d80ae 100644
--- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp
+++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp
@@ -379,7 +379,7 @@ void NodeInstanceServerProxy::writeCommand(const QVariant &command)
void NodeInstanceServerProxy::processFinished(int exitCode, QProcess::ExitStatus exitStatus)
{
- qWarning() << "Process finished:" << sender() << exitCode;
+ qWarning() << "Process" << (exitStatus == QProcess::CrashExit ? "crashed:" : "finished:") << sender() << "exitCode:" << exitCode;
if (m_captureFileForTest.isOpen()) {
m_captureFileForTest.close();
diff --git a/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp b/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp
index fa98d5c97b..ff66653875 100644
--- a/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp
+++ b/src/plugins/qmldesigner/designercore/instances/puppetcreator.cpp
@@ -47,12 +47,13 @@
#include <coreplugin/icore.h>
#include <qmldesignerwarning.h>
+#include <qmldesignerplugin.h>
+#include <designersettings.h>
#include "puppetbuildprogressdialog.h"
namespace QmlDesigner {
-bool PuppetCreator::m_useOnlyFallbackPuppet = !qgetenv("USE_ONLY_FALLBACK_PUPPET").isEmpty();
QHash<Core::Id, PuppetCreator::PuppetType> PuppetCreator::m_qml1PuppetForKitPuppetHash;
QHash<Core::Id, PuppetCreator::PuppetType> PuppetCreator::m_qml2PuppetForKitPuppetHash;
@@ -105,6 +106,13 @@ QDateTime PuppetCreator::puppetSourceLastModified() const
return lastModified;
}
+bool PuppetCreator::useOnlyFallbackPuppet() const
+{
+ DesignerSettings settings = QmlDesignerPlugin::instance()->settings();
+ return settings.useOnlyFallbackPuppet
+ || !qgetenv("USE_ONLY_FALLBACK_PUPPET").isEmpty();
+}
+
PuppetCreator::PuppetCreator(ProjectExplorer::Kit *kit, const QString &qtCreatorVersion)
: m_qtCreatorVersion(qtCreatorVersion),
m_kit(kit),
@@ -157,7 +165,7 @@ QProcess *PuppetCreator::puppetProcess(const QString &puppetPath,
puppetProcess->setProcessEnvironment(processEnvironment());
QObject::connect(QCoreApplication::instance(), SIGNAL(aboutToQuit()), puppetProcess, SLOT(kill()));
QObject::connect(puppetProcess, SIGNAL(finished(int,QProcess::ExitStatus)), handlerObject, finishSlot);
- bool fowardQmlpuppetOutput = !qgetenv("FORWARD_QMLPUPPET_OUTPUT").isEmpty();
+ bool fowardQmlpuppetOutput = !qgetenv("FORWARD_QML_PUPPET_OUTPUT").isEmpty();
if (fowardQmlpuppetOutput) {
puppetProcess->setProcessChannelMode(QProcess::MergedChannels);
QObject::connect(puppetProcess, SIGNAL(readyRead()), handlerObject, outputSlot);
@@ -252,7 +260,7 @@ void PuppetCreator::createQml1PuppetExecutableIfMissing()
{
m_availablePuppetType = FallbackPuppet;
- if (!m_useOnlyFallbackPuppet && m_kit) {
+ if (!useOnlyFallbackPuppet() && m_kit) {
if (m_qml1PuppetForKitPuppetHash.contains(m_kit->id())) {
m_availablePuppetType = m_qml1PuppetForKitPuppetHash.value(m_kit->id());
} else if (checkQmlpuppetIsReady()) {
@@ -274,7 +282,7 @@ void PuppetCreator::createQml2PuppetExecutableIfMissing()
{
m_availablePuppetType = FallbackPuppet;
- if (!m_useOnlyFallbackPuppet && m_kit) {
+ if (!useOnlyFallbackPuppet() && m_kit) {
if (m_qml2PuppetForKitPuppetHash.contains(m_kit->id())) {
m_availablePuppetType = m_qml2PuppetForKitPuppetHash.value(m_kit->id());
} else if (checkQml2PuppetIsReady()) {
diff --git a/src/plugins/qmldesigner/designercore/instances/puppetcreator.h b/src/plugins/qmldesigner/designercore/instances/puppetcreator.h
index 4c9b8c337b..8d6612828d 100644
--- a/src/plugins/qmldesigner/designercore/instances/puppetcreator.h
+++ b/src/plugins/qmldesigner/designercore/instances/puppetcreator.h
@@ -110,12 +110,13 @@ protected:
QDateTime qtLastModified() const;
QDateTime puppetSourceLastModified() const;
+ bool useOnlyFallbackPuppet() const;
+
private:
QString m_qtCreatorVersion;
mutable QString m_compileLog;
ProjectExplorer::Kit *m_kit;
PuppetType m_availablePuppetType;
- static bool m_useOnlyFallbackPuppet;
static QHash<Core::Id, PuppetType> m_qml1PuppetForKitPuppetHash;
static QHash<Core::Id, PuppetType> m_qml2PuppetForKitPuppetHash;
};
diff --git a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp
index 303376aea2..aa5d5e387d 100644
--- a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp
+++ b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp
@@ -31,6 +31,7 @@
#include "model.h"
#include "metainfo.h"
+#include <enumeration.h>
#include <rewriterview.h>
#include <propertyparser.h>
@@ -1358,7 +1359,8 @@ QVariant NodeMetaInfo::propertyCastedValue(const PropertyName &propertyName, con
const QVariant variant = value;
QVariant copyVariant = variant;
- if (propertyIsEnumType(propertyName))
+ if (propertyIsEnumType(propertyName)
+ || variant.canConvert<Enumeration>())
return variant;
const QString typeName = propertyTypeName(propertyName);
@@ -1512,7 +1514,9 @@ bool NodeMetaInfo::isLayoutable() const
if (isSubclassOf("<cpp>.QDeclarativeBasePositioner", -1, -1))
return true; //QtQuick 1
- return isSubclassOf("QtQuick.Positioner", -1, -1) || isSubclassOf("QtQuick.Layouts.Layout", -1, -1);
+ return isSubclassOf("QtQuick.Positioner", -1, -1)
+ || isSubclassOf("QtQuick.Layouts.Layout", -1, -1)
+ || isSubclassOf("QtQuick.Controls.SplitView", -1, -1);
}
bool NodeMetaInfo::isView() const
diff --git a/src/plugins/qmldesigner/designercore/model/modelnode.cpp b/src/plugins/qmldesigner/designercore/model/modelnode.cpp
index 88d38d083d..5016bd6ebb 100644
--- a/src/plugins/qmldesigner/designercore/model/modelnode.cpp
+++ b/src/plugins/qmldesigner/designercore/model/modelnode.cpp
@@ -583,7 +583,7 @@ Does nothing if the node state does not set this property.
\see addProperty property properties hasProperties
*/
-void ModelNode::removeProperty(const PropertyName &name)
+void ModelNode::removeProperty(const PropertyName &name) const
{
if (!isValid())
throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
diff --git a/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp b/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp
index a028bd61c7..4242214f1f 100644
--- a/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp
+++ b/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp
@@ -369,6 +369,13 @@ bool itemIsMovable(const ModelNode &modelNode)
if (modelNode.metaInfo().isSubclassOf("QtQuick.Controls.Tab", -1, -1))
return false;
+ if (modelNode.hasParentProperty()) {
+ ModelNode parentModelNode = modelNode.parentProperty().parentModelNode();
+ if (QmlItemNode::isValidQmlItemNode(parentModelNode)
+ && parentModelNode.metaInfo().isLayoutable())
+ return false;
+ }
+
return true;
}
diff --git a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
index 64d91e80fe..7927a4f259 100644
--- a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
+++ b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
@@ -247,6 +247,11 @@ static inline QVariant convertDynamicPropertyValueToVariant(const QString &astVa
}
}
+static bool isListElementType(const QmlDesigner::TypeName &type)
+{
+ return type == "ListElement" || type == "QtQuick.ListElement" || type == "Qt.ListElement";
+}
+
static bool isComponentType(const QmlDesigner::TypeName &type)
{
return type == "Component" || type == "Qt.Component" || type == "QtQuick.Component" || type == "<cpp>.QQmlComponent";
@@ -1225,7 +1230,8 @@ QmlDesigner::PropertyName TextToModelMerger::syncScriptBinding(ModelNode &modelN
if (isLiteralValue(script)) {
if (isPropertyChangesType(modelNode.type())
- || isConnectionsType(modelNode.type())) {
+ || isConnectionsType(modelNode.type())
+ || isListElementType(modelNode.type())) {
AbstractProperty modelProperty = modelNode.property(astPropertyName.toUtf8());
QVariant variantValue = parsePropertyScriptBinding(script);
if (!variantValue.isValid())
diff --git a/src/plugins/qmldesigner/designersettings.cpp b/src/plugins/qmldesigner/designersettings.cpp
index 94d30aca6f..e318ae0bf7 100644
--- a/src/plugins/qmldesigner/designersettings.cpp
+++ b/src/plugins/qmldesigner/designersettings.cpp
@@ -43,7 +43,8 @@ DesignerSettings::DesignerSettings()
designerWarningsInEditor(false),
showDebugView(false),
enableDebugView(false),
- alwaysSaveInCrumbleBar(false)
+ alwaysSaveInCrumbleBar(false),
+ useOnlyFallbackPuppet(false)
{}
void DesignerSettings::fromSettings(QSettings *settings)
@@ -66,6 +67,8 @@ void DesignerSettings::fromSettings(QSettings *settings)
QLatin1String(QmlDesigner::Constants::QML_ENABLE_DEBUGVIEW), QVariant(false)).toBool();
alwaysSaveInCrumbleBar = settings->value(
QLatin1String(QmlDesigner::Constants::QML_ALWAYS_SAFE_IN_CRUMBLEBAR), QVariant(false)).toBool();
+ useOnlyFallbackPuppet = settings->value(
+ QLatin1String(QmlDesigner::Constants::QML_USE_ONLY_FALLBACK_PUPPET), QVariant(false)).toBool();
settings->endGroup();
settings->endGroup();
@@ -84,6 +87,7 @@ void DesignerSettings::toSettings(QSettings *settings) const
settings->setValue(QLatin1String(QmlDesigner::Constants::QML_SHOW_DEBUGVIEW), showDebugView);
settings->setValue(QLatin1String(QmlDesigner::Constants::QML_ENABLE_DEBUGVIEW), enableDebugView);
settings->setValue(QLatin1String(QmlDesigner::Constants::QML_ALWAYS_SAFE_IN_CRUMBLEBAR), alwaysSaveInCrumbleBar);
+ settings->setValue(QLatin1String(QmlDesigner::Constants::QML_USE_ONLY_FALLBACK_PUPPET), useOnlyFallbackPuppet);
settings->endGroup();
settings->endGroup();
@@ -98,5 +102,6 @@ bool DesignerSettings::equals(const DesignerSettings &other) const
&& designerWarningsInEditor == other.designerWarningsInEditor
&& showDebugView == other.showDebugView
&& enableDebugView == other.enableDebugView
- && alwaysSaveInCrumbleBar == other.alwaysSaveInCrumbleBar;
+ && alwaysSaveInCrumbleBar == other.alwaysSaveInCrumbleBar
+ && useOnlyFallbackPuppet == other.useOnlyFallbackPuppet;
}
diff --git a/src/plugins/qmldesigner/designersettings.h b/src/plugins/qmldesigner/designersettings.h
index 829e92dc7c..78e12abc86 100644
--- a/src/plugins/qmldesigner/designersettings.h
+++ b/src/plugins/qmldesigner/designersettings.h
@@ -56,6 +56,7 @@ public:
bool showDebugView;
bool enableDebugView;
bool alwaysSaveInCrumbleBar;
+ bool useOnlyFallbackPuppet;
};
inline bool operator==(const DesignerSettings &s1, const DesignerSettings &s2)
diff --git a/src/plugins/qmldesigner/qmldesignerconstants.h b/src/plugins/qmldesigner/qmldesignerconstants.h
index 7a6c9c1be3..deb20fd44d 100644
--- a/src/plugins/qmldesigner/qmldesignerconstants.h
+++ b/src/plugins/qmldesigner/qmldesignerconstants.h
@@ -65,6 +65,7 @@ const char QML_WARNIN_FOR_DESIGNER_FEATURES_IN_EDITOR_KEY[] = "WarnAboutQtQuickD
const char QML_SHOW_DEBUGVIEW[] = "ShowQtQuickDesignerDebugView";
const char QML_ENABLE_DEBUGVIEW[] = "EnableQtQuickDesignerDebugView";
const char QML_ALWAYS_SAFE_IN_CRUMBLEBAR[] = "AlwaysSafeInCrumbleBar";
+const char QML_USE_ONLY_FALLBACK_PUPPET[] = "AseOnlyFallbackPuppet";
const char QML_DESIGNER_SUBFOLDER[] = "/designer/";
diff --git a/src/plugins/qmlprofiler/qml/SelectionRange.qml b/src/plugins/qmlprofiler/qml/SelectionRange.qml
index c8b55fa892..c1bab1f673 100644
--- a/src/plugins/qmlprofiler/qml/SelectionRange.qml
+++ b/src/plugins/qmlprofiler/qml/SelectionRange.qml
@@ -48,7 +48,7 @@ RangeMover {
target: zoomControl
onRangeChanged: {
var oldTimePerPixel = selectionRange.viewTimePerPixel;
- selectionRange.viewTimePerPixel = Math.abs(zoomControl.endTime() - zoomControl.startTime()) / flick.width;
+ selectionRange.viewTimePerPixel = Math.abs(zoomControl.endTime() - zoomControl.startTime()) / view.intWidth;
if (creationState === 3 && oldTimePerPixel != selectionRange.viewTimePerPixel) {
var newWidth = getWidth() * oldTimePerPixel / viewTimePerPixel;
setLeft(getLeft() * oldTimePerPixel / viewTimePerPixel);
diff --git a/src/plugins/qmlprojectmanager/qmlapplicationwizard.cpp b/src/plugins/qmlprojectmanager/qmlapplicationwizard.cpp
index b5054626e9..ccaaad056e 100644
--- a/src/plugins/qmlprojectmanager/qmlapplicationwizard.cpp
+++ b/src/plugins/qmlprojectmanager/qmlapplicationwizard.cpp
@@ -38,6 +38,7 @@
#include <qmakeprojectmanager/qmakeproject.h>
#include <qmakeprojectmanager/qmakeprojectmanagerconstants.h>
#include <qtsupport/qtkitinformation.h>
+#include <qtsupport/qtsupportconstants.h>
#include "qmlprojectmanager.h"
#include "qmlproject.h"
@@ -79,6 +80,8 @@ QmlApplicationWizard::QmlApplicationWizard()
QLatin1String(ProjectExplorer::Constants::QT_APPLICATION_WIZARD_CATEGORY_DISPLAY));
setDisplayName(tr("Qt Quick UI"));
setDescription(tr("Creates a Qt Quick UI project."));
+ setRequiredFeatures(Core::Feature(QtSupport::Constants::FEATURE_QMLPROJECT)
+ | Core::Feature(QtSupport::Constants::FEATURE_QT_QUICK));
}
Core::BaseFileWizard *QmlApplicationWizard::create(QWidget *parent, const WizardDialogParameters &parameters) const
diff --git a/src/plugins/qtsupport/customexecutablerunconfiguration.cpp b/src/plugins/qtsupport/customexecutablerunconfiguration.cpp
index e134ff83d6..a51a23c128 100644
--- a/src/plugins/qtsupport/customexecutablerunconfiguration.cpp
+++ b/src/plugins/qtsupport/customexecutablerunconfiguration.cpp
@@ -128,13 +128,11 @@ private:
QDialogButtonBox *m_dialogButtonBox;
CustomExecutableConfigurationWidget *m_widget;
- CustomExecutableRunConfiguration *m_runConfiguration;
};
CustomExecutableDialog::CustomExecutableDialog(CustomExecutableRunConfiguration *rc, QWidget *parent)
: QDialog(parent)
, m_dialogButtonBox(new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel))
- , m_runConfiguration(rc)
{
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
QVBoxLayout *layout = new QVBoxLayout(this);
diff --git a/src/plugins/resourceeditor/resourcenode.cpp b/src/plugins/resourceeditor/resourcenode.cpp
index 552a628132..aea6099880 100644
--- a/src/plugins/resourceeditor/resourcenode.cpp
+++ b/src/plugins/resourceeditor/resourcenode.cpp
@@ -256,10 +256,11 @@ ProjectExplorer::FolderNode::AddNewInformation ResourceTopLevelNode::addNewInfor
.arg(QFileInfo(path()).fileName())
.arg(QLatin1String("/"));
- int p = 80;
- if (priority(files)) {
- if (context == 0 || context == this)
- p = 125;
+ int p = -1;
+ if (priority(files)) { // images/* and qml/js mimetypes
+ p = 110;
+ if (context == this)
+ p = 120;
else if (projectNode() == context)
p = 150; // steal from our project node
// The ResourceFolderNode '/' defers to us, as otherwise
@@ -267,7 +268,7 @@ ProjectExplorer::FolderNode::AddNewInformation ResourceTopLevelNode::addNewInfor
// Thus also return a high priority for it
if (ResourceFolderNode *rfn = qobject_cast<ResourceFolderNode *>(context))
if (rfn->prefix() == QLatin1String("/") && rfn->parentFolderNode() == this)
- p = 150;
+ p = 120;
}
return AddNewInformation(name, p);
@@ -389,9 +390,10 @@ ProjectExplorer::FolderNode::AddNewInformation ResourceFolderNode::addNewInforma
.arg(QFileInfo(m_topLevelNode->path()).fileName())
.arg(displayName());
- int p = 80;
- if (priority(files)) {
- if (context == 0 || context == this)
+ int p = -1; // never the default
+ if (priority(files)) { // image/* and qml/js mimetypes
+ p = 105; // prefer against .pro and .pri files
+ if (context == this)
p = 120;
}
diff --git a/src/plugins/texteditor/texteditoroverlay.cpp b/src/plugins/texteditor/texteditoroverlay.cpp
index acda0f70f6..812cd65463 100644
--- a/src/plugins/texteditor/texteditoroverlay.cpp
+++ b/src/plugins/texteditor/texteditoroverlay.cpp
@@ -250,22 +250,15 @@ QPainterPath TextEditorOverlay::createSelectionPath(const QTextCursor &begin, co
points += firstSelection.topRight() + QPointF(margin+1, -margin);
points += firstSelection.bottomRight() + QPointF(margin+1, 0);
-
const int count = selection.count();
- if (count > 2) {
- const QRectF *prev = &selection.at(0);
- const QRectF *current = &selection.at(1);
- const QRectF *next = &selection.at(2);
- for (int i = 0; i < count; ++i) {
- #define MAX3(a,b,c) qMax(a, qMax(b,c))
- qreal x = MAX3(prev->right(), current->right(), next->right()) + margin;
- points += QPointF(x+1, current->top());
- points += QPointF(x+1, current->bottom());
- prev = current;
- current = next;
- if (i < count-1)
- next = &selection.at(i+1);
- }
+ for (int i = 1; i < count-1; ++i) {
+#define MAX3(a,b,c) qMax(a, qMax(b,c))
+ qreal x = MAX3(selection.at(i-1).right(),
+ selection.at(i).right(),
+ selection.at(i+1).right()) + margin;
+
+ points += QPointF(x+1, selection.at(i).top());
+ points += QPointF(x+1, selection.at(i).bottom());
}
const QRectF &lastSelection = selection.at(count-1);
@@ -274,20 +267,14 @@ QPainterPath TextEditorOverlay::createSelectionPath(const QTextCursor &begin, co
points += lastSelection.bottomLeft() + QPointF(-margin, margin+extra);
points += lastSelection.topLeft() + QPointF(-margin, 0);
- if (count > 2) {
- const QRectF *prev = &selection.at(count-3);
- const QRectF *current = &selection.at(count-2);
- const QRectF *next = &selection.at(count-1);
- for (int i = count-1; i >= 0; --i) {
+ for (int i = count-2; i > 0; --i) {
#define MIN3(a,b,c) qMin(a, qMin(b,c))
- qreal x = MIN3(prev->left(), current->left(), next->left()) - margin;
- points += QPointF(x, current->bottom()+extra);
- points += QPointF(x, current->top());
- next = current;
- current = prev;
- if (i > 0)
- prev = &selection.at(i);
- }
+ qreal x = MIN3(selection.at(i-1).left(),
+ selection.at(i).left(),
+ selection.at(i+1).left()) - margin;
+
+ points += QPointF(x, selection.at(i).bottom()+extra);
+ points += QPointF(x, selection.at(i).top());
}
points += firstSelection.bottomLeft() + QPointF(-margin, extra);
diff --git a/src/plugins/winrt/winrtdevicefactory.cpp b/src/plugins/winrt/winrtdevicefactory.cpp
index 56578c2168..b3dcce7ecc 100644
--- a/src/plugins/winrt/winrtdevicefactory.cpp
+++ b/src/plugins/winrt/winrtdevicefactory.cpp
@@ -58,7 +58,7 @@ WinRtDeviceFactory::WinRtDeviceFactory()
} else {
connect(DeviceManager::instance(), &DeviceManager::devicesLoaded,
this, &WinRtDeviceFactory::onPrerequisitesLoaded, Qt::QueuedConnection);
- connect(static_cast<QtVersionManager *>(QtVersionManager::instance()),
+ connect(QtVersionManager::instance(),
&QtVersionManager::qtVersionsLoaded,
this, &WinRtDeviceFactory::onPrerequisitesLoaded, Qt::QueuedConnection);
}
@@ -125,12 +125,10 @@ void WinRtDeviceFactory::onPrerequisitesLoaded()
m_initialized = true;
disconnect(DeviceManager::instance(), &DeviceManager::devicesLoaded,
this, &WinRtDeviceFactory::onPrerequisitesLoaded);
- QtVersionManager *qtVersionManager
- = static_cast<QtVersionManager *>(QtVersionManager::instance());
- disconnect(qtVersionManager, &QtVersionManager::qtVersionsLoaded,
+ disconnect(QtVersionManager::instance(), &QtVersionManager::qtVersionsLoaded,
this, &WinRtDeviceFactory::onPrerequisitesLoaded);
autoDetect();
- connect(qtVersionManager, &QtVersionManager::qtVersionsChanged,
+ connect(QtVersionManager::instance(), &QtVersionManager::qtVersionsChanged,
this, &WinRtDeviceFactory::autoDetect);
}
diff --git a/src/plugins/winrt/winrtpackagedeploymentstep.cpp b/src/plugins/winrt/winrtpackagedeploymentstep.cpp
index f5aa28c2e5..d342d9a752 100644
--- a/src/plugins/winrt/winrtpackagedeploymentstep.cpp
+++ b/src/plugins/winrt/winrtpackagedeploymentstep.cpp
@@ -28,8 +28,10 @@
****************************************************************************/
#include "winrtpackagedeploymentstep.h"
-#include "winrtpackagedeploymentstepwidget.h"
+
#include "winrtconstants.h"
+#include "winrtpackagedeploymentstepwidget.h"
+#include "winrtrunconfiguration.h"
#include <projectexplorer/project.h>
#include <projectexplorer/target.h>
@@ -39,6 +41,7 @@
#include <projectexplorer/deploymentdata.h>
#include <projectexplorer/projectexplorerconstants.h>
#include <qtsupport/qtkitinformation.h>
+#include <utils/qtcassert.h>
#include <utils/qtcprocess.h>
#include <QRegularExpression>
@@ -59,19 +62,38 @@ WinRtPackageDeploymentStep::WinRtPackageDeploymentStep(BuildStepList *bsl)
bool WinRtPackageDeploymentStep::init()
{
- Utils::FileName proFile = project()->projectFilePath();
- const QString targetPath
- = target()->applicationTargets().targetForProject(proFile).toString()
- + QLatin1String(".exe");
- QString targetDir = targetPath.left(targetPath.lastIndexOf(QLatin1Char('/')) + 1);
- // ### Actually, targetForProject is supposed to return the file path including the file
- // extension. Whenever this will eventually work, we have to remove the .exe suffix here.
+ WinRtRunConfiguration *rc = qobject_cast<WinRtRunConfiguration *>(
+ target()->activeRunConfiguration());
+ QTC_ASSERT(rc, return false);
+
+ const Utils::FileName activeProjectFilePath = Utils::FileName::fromString(rc->proFilePath());
+ Utils::FileName appTargetFilePath;
+ foreach (const BuildTargetInfo &buildTarget, target()->applicationTargets().list) {
+ if (buildTarget.projectFilePath == activeProjectFilePath) {
+ appTargetFilePath = buildTarget.targetFilePath;
+ break;
+ }
+ }
+
+ m_targetFilePath = appTargetFilePath.toString();
+ if (m_targetFilePath.isEmpty()) {
+ // ### raise error in 3.3
+ // raiseError(tr("No executable to deploy found in %1.").arg(rc->proFilePath()));
+ return false;
+ }
+
+ // ### Ideally, the file paths in applicationTargets() should already have the .exe suffix.
+ // Whenever this will eventually work, we can drop appending the .exe suffix here.
+ if (!m_targetFilePath.endsWith(QLatin1String(".exe"), Qt::CaseInsensitive))
+ m_targetFilePath.append(QLatin1String(".exe"));
+
+ m_targetDirPath = appTargetFilePath.parentDir().toString();
const QtSupport::BaseQtVersion *qt = QtSupport::QtKitInformation::qtVersion(target()->kit());
if (!qt)
return false;
- QString args = QtcProcess::quoteArg(QDir::toNativeSeparators(targetPath));
+ QString args = QtcProcess::quoteArg(QDir::toNativeSeparators(m_targetFilePath));
args += QLatin1Char(' ') + m_args;
m_manifestFileName = QStringLiteral("AppxManifest");
@@ -84,13 +106,16 @@ bool WinRtPackageDeploymentStep::init()
if (m_createMappingFile) {
args += QLatin1String(" -list mapping");
- m_mappingFileContent = QLatin1String("[Files]\n\"") + QDir::toNativeSeparators(targetDir)
- + m_manifestFileName + QLatin1String(".xml\" \"") + m_manifestFileName + QLatin1String(".xml\"\n");
+ m_mappingFileContent = QLatin1String("[Files]\n\"")
+ + QDir::toNativeSeparators(m_targetDirPath)
+ + m_manifestFileName + QLatin1String(".xml\" \"") + m_manifestFileName
+ + QLatin1String(".xml\"\n");
- QDir assetDirectory(targetDir + QLatin1String("assets"));
+ QDir assetDirectory(m_targetDirPath + QLatin1String("assets"));
if (assetDirectory.exists()) {
QStringList iconsToDeploy;
- const QString fullManifestPath = targetDir + m_manifestFileName + QLatin1String(".xml");
+ const QString fullManifestPath = m_targetDirPath + m_manifestFileName
+ + QLatin1String(".xml");
if (!parseIconsAndExecutableFromManifest(fullManifestPath, &iconsToDeploy,
&m_executablePathInManifest)) {
raiseError(tr("Cannot parse manifest file %1.").arg(fullManifestPath));
@@ -98,7 +123,7 @@ bool WinRtPackageDeploymentStep::init()
}
foreach (const QString &icon, iconsToDeploy) {
m_mappingFileContent += QLatin1Char('"')
- + QDir::toNativeSeparators(targetDir + icon) + QLatin1String("\" \"")
+ + QDir::toNativeSeparators(m_targetDirPath + icon) + QLatin1String("\" \"")
+ QDir::toNativeSeparators(icon) + QLatin1String("\"\n");
}
}
@@ -115,18 +140,14 @@ bool WinRtPackageDeploymentStep::init()
bool WinRtPackageDeploymentStep::processSucceeded(int exitCode, QProcess::ExitStatus status)
{
if (m_createMappingFile) {
- Utils::FileName proFile = project()->projectFilePath();
- QString targetPath
- = target()->applicationTargets().targetForProject(proFile).toString();
- QString targetDir = targetPath.left(targetPath.lastIndexOf(QLatin1Char('/')) + 1);
QString targetInstallationPath;
// The list holds the local file paths and the "remote" file paths
QList<QPair<QString, QString> > installableFilesList;
foreach (DeployableFile file, target()->deploymentData().allFiles()) {
QString remoteFilePath = file.remoteFilePath();
QString localFilePath = file.localFilePath().toString();
- if (localFilePath == targetPath) {
- if (!targetPath.endsWith(QLatin1String(".exe"))) {
+ if (localFilePath == m_targetFilePath) {
+ if (!m_targetFilePath.endsWith(QLatin1String(".exe"))) {
remoteFilePath += QLatin1String(".exe");
localFilePath += QLatin1String(".exe");
}
@@ -139,11 +160,12 @@ bool WinRtPackageDeploymentStep::processSucceeded(int exitCode, QProcess::ExitSt
// and the icons referenced in there and the actual build target
QString baseDir;
if (targetInstallationPath.isEmpty()) {
- targetPath += QLatin1String(".exe");
+ m_targetFilePath += QLatin1String(".exe");
m_mappingFileContent
- += QLatin1Char('"') + QDir::toNativeSeparators(targetPath) + QLatin1String("\" \"")
+ += QLatin1Char('"') + QDir::toNativeSeparators(m_targetFilePath)
+ + QLatin1String("\" \"")
+ QDir::toNativeSeparators(m_executablePathInManifest) + QLatin1String("\"\n");
- baseDir = targetDir;
+ baseDir = m_targetDirPath;
} else {
baseDir = targetInstallationPath.left(targetInstallationPath.lastIndexOf(QLatin1Char('/')) + 1);
}
@@ -161,7 +183,8 @@ bool WinRtPackageDeploymentStep::processSucceeded(int exitCode, QProcess::ExitSt
+ QLatin1String("\"\n");
}
- const QString mappingFilePath = targetDir + m_manifestFileName + QLatin1String(".map");
+ const QString mappingFilePath = m_targetDirPath + m_manifestFileName
+ + QLatin1String(".map");
QFile mappingFile(mappingFilePath);
if (!mappingFile.open(QFile::WriteOnly | QFile::Text)) {
raiseError(tr("Cannot open mapping file %1 for writing.").arg(mappingFilePath));
diff --git a/src/plugins/winrt/winrtpackagedeploymentstep.h b/src/plugins/winrt/winrtpackagedeploymentstep.h
index 224f8b4676..17d597bfdc 100644
--- a/src/plugins/winrt/winrtpackagedeploymentstep.h
+++ b/src/plugins/winrt/winrtpackagedeploymentstep.h
@@ -58,6 +58,8 @@ private:
bool parseIconsAndExecutableFromManifest(QString manifestFileName, QStringList *items, QString *executable);
QString m_args;
+ QString m_targetFilePath;
+ QString m_targetDirPath;
QString m_executablePathInManifest;
QString m_mappingFileContent;
QString m_manifestFileName;