Commit ef5d3796 authored by Eike Ziller's avatar Eike Ziller
Browse files

Merge remote-tracking branch 'origin/2.7' into 2.8

parents 24ee6415 35b96f2f
......@@ -262,7 +262,7 @@ def main():
QT_INSTALL_QML = readQmakeVar(qmake_bin, 'QT_INSTALL_QML')
QT_INSTALL_TRANSLATIONS = readQmakeVar(qmake_bin, 'QT_INSTALL_TRANSLATIONS')
plugins = ['accessible', 'codecs', 'designer', 'iconengines', 'imageformats', 'platforms', 'printsupport', 'sqldrivers']
plugins = ['accessible', 'codecs', 'designer', 'iconengines', 'imageformats', 'platforminputcontexts', 'platforms', 'printsupport', 'sqldrivers']
imports = ['Qt', 'QtWebKit']
if sys.platform.startswith('win'):
......
......@@ -696,8 +696,12 @@ Please choose a valid package name for your application (e.g. "org.example.
<translation>Не удалось запустить «%1».</translation>
</message>
<message>
<source>Cannot find %1 process.</source>
<translation>Не удалось найти процесс %1.</translation>
<source>
&apos;%1&apos; terminated.</source>
<translation>
«%1» завершён.</translation>
</message>
</context>
<context>
......@@ -3691,14 +3695,6 @@ p, li { white-space: pre-wrap; }
</context>
<context>
<name>ComboBoxSpecifics</name>
<message>
<source>Text</source>
<translation>Текст</translation>
</message>
<message>
<source>The text shown on the combobox</source>
<translation>Текст, отображаемый на поле с выпадающим списком</translation>
</message>
<message>
<source>The tool tip shown for the combobox.</source>
<translation>Подсказка, отображаемая для поля с выпадающим списком.</translation>
......@@ -6847,6 +6843,33 @@ Flags: %3</source>
<translation>Команда CVS</translation>
</message>
</context>
<context>
<name>DebugViewWidget</name>
<message>
<source>Debug</source>
<translation>Отладка</translation>
</message>
<message>
<source>Model Log</source>
<translation>Журнал модели</translation>
</message>
<message>
<source>Clear</source>
<translation>Очистить</translation>
</message>
<message>
<source>Instance Notifications</source>
<translation>Уведомления</translation>
</message>
<message>
<source>Instance Errors</source>
<translation>Ошибки</translation>
</message>
<message>
<source>Enabled</source>
<translation>Включено</translation>
</message>
</context>
<context>
<name>Debugger</name>
<message>
......@@ -11376,6 +11399,10 @@ Rebuilding the project might help.</source>
<source>Alt+Shift+R</source>
<translation></translation>
</message>
<message>
<source>About Qt Designer plugins...</source>
<translation>О модулях Qt Designer...</translation>
</message>
<message>
<source>Signals &amp;&amp; Slots Editor</source>
<translation>Редактор сигналов и слотов</translation>
......@@ -11412,10 +11439,6 @@ Rebuilding the project might help.</source>
<source>Shift+F4</source>
<translation></translation>
</message>
<message>
<source>About Qt Designer plugins....</source>
<translation>О модулях Qt Designer...</translation>
</message>
<message>
<source>Preview in</source>
<translation>Предпросмотр в</translation>
......@@ -19263,10 +19286,6 @@ Preselects Qt for Simulator and mobile targets if available.</source>
<source>Creates a plain C++ project using qmake, not using the Qt library.</source>
<translation>Создание простого проекта под управлением qmake на языке C++, но без использования библиотеки Qt.</translation>
</message>
<message>
<source>Creates a C++ plugin that makes it possible to offer extensions that can be loaded dynamically into applications using the QDeclarativeEngine class.</source>
<translation>Создание подключаемого модуля на C++, являющегося расширением, которое может быть динамически загружено в приложения через класс QDeclarativeEngine.</translation>
</message>
<message>
<source>Custom QML Extension Plugin Parameters</source>
<translation>Параметры особого модуля расширяющего QML</translation>
......@@ -19355,10 +19374,6 @@ Preselects Qt for Simulator and mobile targets if available.</source>
<source>Qt Quick 1 Extension Plugin</source>
<translation>Модуль, расширяющий Qt Quick 1</translation>
</message>
<message>
<source>Creates a C++ plugin that makes it possible to offer extensions that can be loaded dynamically into applications using the QQmlEngine class.</source>
<translation>Создание подключаемого модуля на C++, являющегося расширением, которое может быть динамически загружено в приложения через класс QQmlEngine.</translation>
</message>
<message>
<source>Qt Quick 2 Extension Plugin</source>
<translation>Модуль, расширяющий Qt Quick 2</translation>
......@@ -22527,6 +22542,13 @@ Remote stderr was: %1</source>
<translation>Ошибка</translation>
</message>
</context>
<context>
<name>QmlDesigner::FormEditorView</name>
<message>
<source>Form Editor</source>
<translation>Редактор форм</translation>
</message>
</context>
<context>
<name>QmlDesigner::FormEditorWidget</name>
<message>
......@@ -22621,6 +22643,117 @@ Remote stderr was: %1</source>
<translation>Затухание:</translation>
</message>
</context>
<context>
<name>QmlDesigner::Internal::DebugView</name>
<message>
<source>Model attached</source>
<translation>Модель подключена</translation>
</message>
<message>
<source>FileName %1</source>
<translation>Файл %1</translation>
</message>
<message>
<source>Model detached</source>
<translation>Модель отключена</translation>
</message>
<message>
<source>Added imports:</source>
<translation>Добавленные импорты:</translation>
</message>
<message>
<source>Removed imports:</source>
<translation>Убранные импорты:</translation>
</message>
<message>
<source>Imports changed:</source>
<translation>Изменения в импортах:</translation>
</message>
<message>
<source>Node created:</source>
<translation>Элемент создан:</translation>
</message>
<message>
<source>Node removed:</source>
<translation>Элемент удалён:</translation>
</message>
<message>
<source>New parent property:</source>
<translation>Новое родительское свойство:</translation>
</message>
<message>
<source>Old parent property:</source>
<translation>Старое родительское свойство:</translation>
</message>
<message>
<source>PropertyChangeFlag</source>
<translation>PropertyChangeFlag</translation>
</message>
<message>
<source>Node reparanted:</source>
<translation>Элемент сменил родителя:</translation>
</message>
<message>
<source>New Id: </source>
<translation>Новый Id: </translation>
</message>
<message>
<source>Old Id: </source>
<translation>Старый Id: </translation>
</message>
<message>
<source>Node id changed:</source>
<translation>Изменён id элемента:</translation>
</message>
<message>
<source>VariantProperties changed:</source>
<translation>Изменены VariantProperties:</translation>
</message>
<message>
<source>BindingProperties changed:</source>
<translation>Изменены BindingProperties:</translation>
</message>
<message>
<source>SignalHandlerProperties changed:</source>
<translation>Изменены SignalHandlerProperties:</translation>
</message>
<message>
<source>Properties removed:</source>
<translation>Удалённые свойства:</translation>
</message>
<message>
<source>Auxiliary Data Changed:</source>
<translation>Изменённые дополнительные данные:</translation>
</message>
<message>
<source>Begin rewriter transaction</source>
<translation>Начало транзакционного рефакторинга</translation>
</message>
<message>
<source>End rewriter transaction</source>
<translation>Конец транзакционного рефакторинга</translation>
</message>
<message>
<source>Debug View</source>
<translation>Интерфейс отладчика</translation>
</message>
<message>
<source>Instance property change</source>
<translation>Изменение свойства экземпляра</translation>
</message>
<message>
<source>Instance Completed</source>
<translation>Экземпляр готов</translation>
</message>
<message>
<source>Custom Notification:</source>
<translation>Особое оповещение:</translation>
</message>
<message>
<source>Node Source Changed:</source>
<translation>Изменены исходники элемента:</translation>
</message>
</context>
<context>
<name>QmlDesigner::Internal::DesignModeWidget</name>
<message>
......@@ -22762,6 +22895,18 @@ Remote stderr was: %1</source>
<source>Warn about unsupported features of Qt Quick Designer in the code editor</source>
<translation>Предупреждать о неподдерживаемых особенностях Qt Designer в редакторе кода</translation>
</message>
<message>
<source>Debugging</source>
<translation>Отладка</translation>
</message>
<message>
<source>Show the debugging view</source>
<translation>Показывать интерфейс отладки</translation>
</message>
<message>
<source>Enable the debugging view</source>
<translation>Включить интерфейс отладки</translation>
</message>
</context>
<context>
<name>QmlDesigner::InvalidArgumentException</name>
......@@ -23074,6 +23219,10 @@ Remote stderr was: %1</source>
</context>
<context>
<name>QmlDesigner::StatesEditorView</name>
<message>
<source>States Editor</source>
<translation>Редактор состояний</translation>
</message>
<message>
<source>base state</source>
<translation>исходное состояние</translation>
......@@ -24829,6 +24978,10 @@ Please use the stop button instead.</source>
<source>Creates a Qt Quick 2 UI project with a single QML file that contains the main view.&amp;lt;br/&amp;gt;You can review Qt Quick 2 UI projects in the QML Scene and you need not build them. You do not need to have the development environment installed on your computer to create and run this type of projects.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;Requires &amp;lt;b&amp;gt;Qt 5.0&amp;lt;/b&amp;gt; or newer.</source>
<translation>Создание проекта Qt Quick 2 с одним файлом QML, содержащим главный интерфейс.&amp;lt;br/&amp;gt; Проверять проекты Qt Quick 2 можно без пересборки в QML Scene. Для создания и запуска этого типа проектов не требуется интегрированная среда разработки. &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;Требуется &amp;lt;b&amp;gt;Qt 5.0&amp;lt;/b&amp;gt; или выше.</translation>
</message>
<message>
<source>Creates a Qt Quick 2 UI project with a single QML file that contains the main view and uses Qt Quick Controls.&amp;lt;br/&amp;gt;You can review Qt Quick 2 UI projects in the QML Scene and you need not build them. This project requires that you have installed Qt Quick Controls for your Qt version.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;Requires &amp;lt;b&amp;gt;Qt 5.1&amp;lt;/b&amp;gt; or newer.</source>
<translation>Создание проекта Qt Quick 2 с одним файлом QML, содержащим главный интерфейс и использующим Qt Quick Controls.&amp;lt;br/&amp;gt; Проверять проекты Qt Quick 2 можно без пересборки в QML Scene. Проекту необходимо, чтобы для вашего профиля Qt были установлены Qt Quick Controls. &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;Требуется &amp;lt;b&amp;gt;Qt 5.1&amp;lt;/b&amp;gt; или выше.</translation>
</message>
</context>
<context>
<name>QmlProjectManager::QmlProject</name>
......@@ -33068,6 +33221,10 @@ Will not be applied to whitespace in comments and strings.</source>
<source>The path &apos;%1&apos; is not a directory.</source>
<translation>Путь «%1» не является каталогом.</translation>
</message>
<message>
<source>The directory &apos;%1&apos; does not exist.</source>
<translation>Каталог «%1» отсутствует.</translation>
</message>
<message>
<source>The path &lt;b&gt;%1&lt;/b&gt; is not an executable file.</source>
<translation>Путь &lt;b&gt;%1&lt;/b&gt; не является программой.</translation>
......@@ -81,6 +81,7 @@ namespace {
const QLatin1String OpenJDKLocationKey("OpenJDKLocation");
const QLatin1String KeystoreLocationKey("KeystoreLocation");
const QLatin1String AutomaticKitCreationKey("AutomatiKitCreation");
const QLatin1String MakeExtraSearchDirectory("MakeExtraSearchDirectory");
const QLatin1String PartitionSizeKey("PartitionSize");
const QLatin1String ToolchainHostKey("ToolchainHost");
const QLatin1String ArmToolchainPrefix("arm-linux-androideabi");
......@@ -156,6 +157,11 @@ AndroidConfig::AndroidConfig(const QSettings &settings)
keystoreLocation = FileName::fromString(settings.value(KeystoreLocationKey).toString());
toolchainHost = settings.value(ToolchainHostKey).toString();
automaticKitCreation = settings.value(AutomaticKitCreationKey, true).toBool();
QString extraDirectory = settings.value(MakeExtraSearchDirectory).toString();
if (extraDirectory.isEmpty())
makeExtraSearchDirectories = QStringList();
else
makeExtraSearchDirectories << extraDirectory;
PersistentSettingsReader reader;
if (reader.load(FileName::fromString(sdkSettingsFileName()))
......@@ -170,6 +176,11 @@ AndroidConfig::AndroidConfig(const QSettings &settings)
QVariant v = reader.restoreValue(AutomaticKitCreationKey);
if (v.isValid())
automaticKitCreation = v.toBool();
QString extraDirectory = reader.restoreValue(MakeExtraSearchDirectory).toString();
if (extraDirectory.isEmpty())
makeExtraSearchDirectories = QStringList();
else
makeExtraSearchDirectories << extraDirectory;
// persistent settings
}
......@@ -628,6 +639,11 @@ QString AndroidConfigurations::bestMatch(const QString &targetAPI) const
return QLatin1String("android-8");
}
QStringList AndroidConfigurations::makeExtraSearchDirectories() const
{
return m_config.makeExtraSearchDirectories;
}
bool equalKits(Kit *a, Kit *b)
{
return ToolChainKitInformation::toolChain(a) == ToolChainKitInformation::toolChain(b)
......
......@@ -57,6 +57,7 @@ public:
Utils::FileName openJDKLocation;
Utils::FileName keystoreLocation;
QString toolchainHost;
QStringList makeExtraSearchDirectories;
unsigned partitionSize;
bool automaticKitCreation;
};
......@@ -99,6 +100,8 @@ public:
QString startAVD(int *apiLevel, const QString &name = QString()) const;
QString bestMatch(const QString &targetAPI) const;
QStringList makeExtraSearchDirectories() const;
static ProjectExplorer::Abi::Architecture architectureForToolChainPrefix(const QString &toolchainprefix);
static QLatin1String toolchainPrefix(ProjectExplorer::Abi::Architecture architecture);
static QLatin1String toolsPrefix(ProjectExplorer::Abi::Architecture architecture);
......
......@@ -838,8 +838,14 @@ QString AndroidManager::loadLocal(ProjectExplorer::Target *target, int apiLevel,
if (libElement.attribute(QLatin1String("bundling")).toInt() == (item == BundledJar ? 1 : 0)) {
if (libElement.hasAttribute(attribute)) {
QString dependencyLib = libElement.attribute(attribute).arg(apiLevel);
if (!dependencyLibs.contains(dependencyLib))
if (libElement.hasAttribute(QLatin1String("extends"))) {
const QString extends = libElement.attribute(QLatin1String("extends"));
if (libs.contains(extends)) {
dependencyLibs << dependencyLib;
}
} else if (!dependencyLibs.contains(dependencyLib)) {
dependencyLibs << dependencyLib;
}
}
if (libElement.hasAttribute(QLatin1String("replaces"))) {
......
......@@ -520,12 +520,20 @@ void AndroidPackageCreationStep::collectFiles(QList<DeployItem> *deployList,
QSet<QString> alreadyListed;
foreach (QString bundledFile, m_otherBundledFiles) {
if (!bundledFile.endsWith(QLatin1Char('/')))
bundledFile.append(QLatin1Char('/'));
QStringList allFiles;
if (QFileInfo(qtVersionSourcePath + QLatin1Char('/') + bundledFile).isDir()) {
if (!bundledFile.endsWith(QLatin1Char('/')))
bundledFile.append(QLatin1Char('/'));
allFiles = collectRelativeFilePaths(qtVersionSourcePath + QLatin1Char('/') + bundledFile);
} else {
// If we need to bundle a specific file, we just add an empty string and the file
// names and data will be prepared correctly in the loop below.
allFiles = QStringList(QString());
}
QStringList allFiles = collectRelativeFilePaths(qtVersionSourcePath + QLatin1Char('/') + bundledFile);
foreach (QString file, allFiles) {
QString fullPath = qtVersionSourcePath + QLatin1Char('/') + bundledFile + QLatin1Char('/') + file;
QString fullPath = qtVersionSourcePath + QLatin1Char('/') + bundledFile + file;
if (alreadyListed.contains(fullPath))
continue;
......@@ -534,22 +542,31 @@ void AndroidPackageCreationStep::collectFiles(QList<DeployItem> *deployList,
QString garbledFileName;
QString destinationPath;
bool shouldStrip = false;
if (file.endsWith(QLatin1String(".so"))) {
garbledFileName = QLatin1String("lib")
+ AndroidManager::libraryPrefix()
+ QString(bundledFile).replace(QLatin1Char('/'), QLatin1Char('_'))
+ QString(file).replace(QLatin1Char('/'), QLatin1Char('_'));
QString fullFileName = bundledFile + file;
if (fullFileName.endsWith(QLatin1String(".so"))) {
if (fullFileName.startsWith(QLatin1String("lib/"))) {
// Special case when the destination folder is lib/
// Since this is also the source folder, there is no need to garble the file
// name and copy it. We also won't have write access to this folder, so we
// couldn't if we wanted to.
garbledFileName = fullFileName.mid(sizeof("lib/") - 1);
} else {
garbledFileName = QLatin1String("lib")
+ AndroidManager::libraryPrefix()
+ QString(fullFileName).replace(QLatin1Char('/'), QLatin1Char('_'));
}
destinationPath = androidLibPath + QLatin1Char('/') + garbledFileName;
shouldStrip = true;
} else {
garbledFileName = AndroidManager::libraryPrefix() + bundledFile + file;
garbledFileName = AndroidManager::libraryPrefix() + QLatin1Char('/') + fullFileName;
destinationPath = androidAssetsPath + garbledFileName;
}
deployList->append(DeployItem(fullPath, 0, destinationPath, shouldStrip));
pluginsAndImportsList->append(DeployItem(garbledFileName,
0,
bundledFile + file,
fullFileName,
shouldStrip));
}
}
......@@ -574,6 +591,8 @@ void AndroidPackageCreationStep::removeManagedFilesFromPackage()
}
}
}
removeDirectory(m_androidDir.toString() + QLatin1String("/assets/") + AndroidManager::libraryPrefix());
}
void AndroidPackageCreationStep::copyFilesIntoPackage(const QList<DeployItem> &deployList)
......
......@@ -200,9 +200,17 @@ QList<FileName> AndroidToolChain::suggestedMkspecList() const
QString AndroidToolChain::makeCommand(const Utils::Environment &env) const
{
QString make = HostOsInfo::isWindowsHost()
? QLatin1String("ma-make.exe") : QLatin1String("make");
QString tmp = env.searchInPath(make);
QStringList extraDirectories = AndroidConfigurations::instance().makeExtraSearchDirectories();
if (HostOsInfo::isWindowsHost()) {
QString tmp = env.searchInPath(QLatin1String("ma-make.exe"), extraDirectories);
if (!tmp.isEmpty())
return tmp;
tmp = env.searchInPath(QLatin1String("mingw32-make"), extraDirectories);
return tmp.isEmpty() ? QLatin1String("mingw32-make") : tmp;
}
QString make = QLatin1String("make");
QString tmp = env.searchInPath(make, extraDirectories);
return tmp.isEmpty() ? make : tmp;
}
......
......@@ -922,7 +922,8 @@ void PropertyEditor::instanceInformationsChange(const QMultiHash<ModelNode, Info
m_locked = true;
QList<InformationName> informationNameList = informationChangeHash.values(m_selectedNode);
if (informationNameList.contains(Anchor))
if (informationNameList.contains(Anchor)
|| informationNameList.contains(HasAnchor))
m_currentType->m_backendAnchorBinding.setup(QmlItemNode(m_selectedNode));
m_locked = false;
}
......
......@@ -132,7 +132,8 @@ void StatesEditorView::addState()
if ((rootStateGroup().allStates().count() < 1) && //QtQuick import might be missing
(!model()->hasImport(Import::createLibraryImport("QtQuick", "1.0"), true)
&& !model()->hasImport(Import::createLibraryImport("QtQuick", "1.1"), true)
&& !model()->hasImport(Import::createLibraryImport("QtQuick", "2.0"), true)))
&& !model()->hasImport(Import::createLibraryImport("QtQuick", "2.0"), true)
&& !model()->hasImport(Import::createLibraryImport("QtQuick", "2.1"), true)))
model()->changeImports(QList<Import>() << Import::createLibraryImport("QtQuick", "1.0"), QList<Import>());
ModelNode newState = rootStateGroup().addState(newStateName);
setCurrentState(newState);
......
......@@ -82,7 +82,7 @@ int AddKeysOperation::execute() const
QVariantMap map = load(m_file);
QVariantMap result = addKeys(map, m_data);
if (map.isEmpty() || map == result)
if (result.isEmpty() || map == result)
return -4;
// Write data again:
......
......@@ -218,7 +218,7 @@ int AddKitOperation::execute() const
QVariantMap result = addKit(map, m_id, m_displayName, m_icon, m_debuggerEngine, m_debugger,
m_deviceType.toUtf8(), m_sysRoot, m_tc, m_qt, m_mkspec, m_extra);
if (map.isEmpty() || map == result)
if (result.isEmpty() || map == result)
return -2;
return save(result, QLatin1String("profiles")) ? 0 : -3;
......
......@@ -154,7 +154,7 @@ int AddQtOperation::execute() const
QVariantMap result = addQt(map, m_id, m_displayName, m_type, m_qmake, m_extra);
if (map.isEmpty() || result == map)
if (result.isEmpty() || result == map)
return -2;
return save(result, QLatin1String("qtversions")) ? 0 : -3;
......
......@@ -150,7 +150,7 @@ int AddToolChainOperation::execute() const
map = initializeToolChains();
QVariantMap result = addToolChain(map, m_id, m_displayName, m_path, m_targetAbi, m_supportedAbis, m_extra);
if (map.isEmpty() || map == result)
if (result.isEmpty() || map == result)
return -2;
return save(result, QLatin1String("toolchains")) ? 0 : -3;
......
......@@ -89,7 +89,7 @@ int RmKitOperation::execute() const
QVariantMap result = rmKit(map, m_id);
if (result.isEmpty() || result == map)
if (result == map)
return -2;
return save(result, QLatin1String("profiles")) ? 0 : -3;
......
#############################################################################
##
## Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
## Contact: http://www.qt-project.org/legal
##
## This file is part of Qt Creator.
##
## Commercial License Usage
## Licensees holding valid commercial Qt licenses may use this file in
## accordance with the commercial license agreement provided with the
## Software or, alternatively, in accordance with the terms contained in
## a written agreement between you and Digia. For licensing terms and
## conditions see http://qt.digia.com/licensing. For further information
## use the contact form at http://qt.digia.com/contact-us.
##
## GNU Lesser General Public License Usage
## Alternatively, this file may be used under the terms of the GNU Lesser
## General Public License version 2.1 as published by the Free Software
## Foundation and appearing in the file LICENSE.LGPL included in the
## packaging of this file. Please review the following information to
## ensure the GNU Lesser General Public License version 2.1 requirements
## will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
##
## In addition, as a special exception, Digia gives you certain additional
## rights. These rights are described in the Digia Qt LGPL Exception
## version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
##
#############################################################################
import re;
# dictionary to hold a list of all installed handler functions for all object-signalSignature pairs
......
#############################################################################
##
## Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
## Contact: http://www.qt-project.org/legal
##
## This file is part of Qt Creator.
##
## Commercial License Usage
## Licensees holding valid commercial Qt licenses may use this file in
## accordance with the commercial license agreement provided with the
## Software or, alternatively, in accordance with the terms contained in
## a written agreement between you and Digia. For licensing terms and
## conditions see http://qt.digia.com/licensing. For further information
## use the contact form at http://qt.digia.com/contact-us.
##
## GNU Lesser General Public License Usage
## Alternatively, this file may be used under the terms of the GNU Lesser
## General Public License version 2.1 as published by the Free Software
## Foundation and appearing in the file LICENSE.LGPL included in the
## packaging of this file. Please review the following information to
## ensure the GNU Lesser General Public License version 2.1 requirements
## will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
##
## In addition, as a special exception, Digia gives you certain additional
## rights. These rights are described in the Digia Qt LGPL Exception
## version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
##