From b67a8e31dd2a187286ac12a5fbb4ab813edaa988 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Fri, 17 Jul 2015 14:26:52 +0200 Subject: [PATCH 001/116] qbs build: Remove outdated property. Change-Id: I67e995793d1a818e6b0f2536c2410925f2edffa6 Reviewed-by: Jake Petroules --- qtcreator.qbs | 1 - src/src.qbs | 1 - 2 files changed, 2 deletions(-) diff --git a/qtcreator.qbs b/qtcreator.qbs index d8b3e05e93f..dd4d37a5cf8 100644 --- a/qtcreator.qbs +++ b/qtcreator.qbs @@ -57,7 +57,6 @@ Project { "QT_NO_CAST_FROM_ASCII" ].concat(testsEnabled ? ["WITH_TESTS"] : []) qbsSearchPaths: "qbs" - property bool enableQbsJavaSupport: false references: [ "src/src.qbs", diff --git a/src/src.qbs b/src/src.qbs index bcb6f2a8651..5b8c62e332e 100644 --- a/src/src.qbs +++ b/src/src.qbs @@ -38,7 +38,6 @@ Project { property string relativePluginsPath: FileInfo.relativePath(appInstallDir, pluginsInstallDir) property string relativeSearchPath: FileInfo.relativePath(appInstallDir, resourcesInstallDir) - property bool enableJava: project.enableQbsJavaSupport references: [ qbsBaseDir + "/src/lib/libs.qbs", From 0926d63d56a792f26bbcbe156da61a45953cf1df Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Mon, 13 Jul 2015 17:12:45 +0300 Subject: [PATCH 002/116] Sdktool: Only execute tests with -test argument + add an autotest that executes it Change-Id: I7a9e1cd409bccd77776eefb0e832c92c51bc2bd5 Reviewed-by: Tobias Hunger --- src/tools/sdktool/main.cpp | 16 +++++--- tests/auto/auto.pro | 1 + tests/auto/auto.qbs | 1 + tests/auto/sdktool/sdktool.pro | 3 ++ tests/auto/sdktool/sdktool.qbs | 10 +++++ tests/auto/sdktool/tst_sdktool.cpp | 61 ++++++++++++++++++++++++++++++ 6 files changed, 87 insertions(+), 5 deletions(-) create mode 100644 tests/auto/sdktool/sdktool.pro create mode 100644 tests/auto/sdktool/sdktool.qbs create mode 100644 tests/auto/sdktool/tst_sdktool.cpp diff --git a/src/tools/sdktool/main.cpp b/src/tools/sdktool/main.cpp index 51cc49ac864..97bc41941bf 100644 --- a/src/tools/sdktool/main.cpp +++ b/src/tools/sdktool/main.cpp @@ -193,11 +193,17 @@ int main(int argc, char *argv[]) << new FindValueOperation; #ifdef WITH_TESTS - std::cerr << std::endl << std::endl << "Starting tests..." << std::endl; - foreach (Operation *o, operations) - if (!o->test()) - std::cerr << "!!!! Test failed for: " << qPrintable(o->name()) << " !!!!" << std::endl; - std::cerr << "Tests done." << std::endl << std::endl; + if (argc == 2 && !strcmp(argv[1], "-test")) { + std::cerr << std::endl << std::endl << "Starting tests..." << std::endl; + int res = 0; + foreach (Operation *o, operations) + if (!o->test()) { + std::cerr << "!!!! Test failed for: " << qPrintable(o->name()) << " !!!!" << std::endl; + ++res; + } + std::cerr << "Tests done." << std::endl << std::endl; + return res; + } #endif int result = parseArguments(a.arguments(), &settings, operations); diff --git a/tests/auto/auto.pro b/tests/auto/auto.pro index c84f446c0cd..20f4e69fc57 100644 --- a/tests/auto/auto.pro +++ b/tests/auto/auto.pro @@ -16,6 +16,7 @@ SUBDIRS += \ qtcprocess \ utils \ filesearch \ + sdktool \ valgrind qtHaveModule(declarative) { diff --git a/tests/auto/auto.qbs b/tests/auto/auto.qbs index 5bd5acaff49..84c6867cbba 100644 --- a/tests/auto/auto.qbs +++ b/tests/auto/auto.qbs @@ -18,6 +18,7 @@ Project { "profilewriter/profilewriter.qbs", "qml/qml.qbs", "qtcprocess/qtcprocess.qbs", + "sdktool/sdktool.qbs", "timeline/timeline.qbs", "treeviewfind/treeviewfind.qbs", "utils/utils.qbs", diff --git a/tests/auto/sdktool/sdktool.pro b/tests/auto/sdktool/sdktool.pro new file mode 100644 index 00000000000..cc5fb2d28cc --- /dev/null +++ b/tests/auto/sdktool/sdktool.pro @@ -0,0 +1,3 @@ +include(../qttest.pri) + +SOURCES += tst_sdktool.cpp diff --git a/tests/auto/sdktool/sdktool.qbs b/tests/auto/sdktool/sdktool.qbs new file mode 100644 index 00000000000..1fd08fc2586 --- /dev/null +++ b/tests/auto/sdktool/sdktool.qbs @@ -0,0 +1,10 @@ +import qbs + +QtcAutotest { + name: "sdktool autotest" + + Group { + name: "Test sources" + files: "tst_sdktool.cpp" + } +} diff --git a/tests/auto/sdktool/tst_sdktool.cpp b/tests/auto/sdktool/tst_sdktool.cpp new file mode 100644 index 00000000000..8cc01357d4c --- /dev/null +++ b/tests/auto/sdktool/tst_sdktool.cpp @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing +** +** 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 The Qt Company. For licensing terms and +** conditions see http://www.qt.io/terms-conditions. For further information +** use the contact form at http://www.qt.io/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 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +****************************************************************************/ + +#include +#include +#include +#include + +class SdktoolTest : public QObject +{ + Q_OBJECT + +private slots: + void testSdktool(); +}; + +void SdktoolTest::testSdktool() +{ + QDir rootDir = QCoreApplication::applicationDirPath(); + rootDir.cdUp(); + rootDir.cdUp(); + rootDir.cdUp(); + rootDir.cd(QLatin1String("bin")); + QProcess process; + process.start(rootDir.absoluteFilePath(QLatin1String("sdktool")), + QStringList() << QLatin1String("-test")); + process.waitForFinished(); + qDebug() << process.readAllStandardError(); + QCOMPARE(process.exitCode(), 0); +} + +QTEST_MAIN(SdktoolTest) + +#include "tst_sdktool.moc" From 95c90dcd424b04827c05d84e142fca11c48262ca Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Fri, 17 Jul 2015 11:18:42 +0200 Subject: [PATCH 003/116] Clang: Tests: Use global temporary dir to remove test file later Change-Id: Ic31428db15ebbc3a4fc5d5a24723d3a557b77b58 Reviewed-by: Marco Bubke --- .../clangcodemodel/test/clangcodecompletion_test.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/plugins/clangcodemodel/test/clangcodecompletion_test.cpp b/src/plugins/clangcodemodel/test/clangcodecompletion_test.cpp index 584b47b3c21..e227a2bd5f6 100644 --- a/src/plugins/clangcodemodel/test/clangcodecompletion_test.cpp +++ b/src/plugins/clangcodemodel/test/clangcodecompletion_test.cpp @@ -80,6 +80,13 @@ QString qrcPath(const QByteArray relativeFilePath) QString fileName(const QString &filePath) { return QFileInfo(filePath).fileName(); } +CppTools::Tests::TemporaryDir *globalTemporaryDir() +{ + static CppTools::Tests::TemporaryDir dir; + QTC_CHECK(dir.isValid()); + return &dir; +} + struct LogOutput { LogOutput(const QString &text) : text(text.toUtf8()) {} @@ -576,7 +583,7 @@ class ProjectLessCompletionTest CppTools::Tests::TestCase garbageCollectionGlobalSnapshot; QVERIFY(garbageCollectionGlobalSnapshot.succeededSoFar()); - const TestDocument testDocument(testFileName); + const TestDocument testDocument(testFileName, globalTemporaryDir()); QVERIFY(testDocument.isCreatedAndHasValidCursorPosition()); OpenEditorAtCursorPosition openEditor(testDocument); From 420bc6973973c5f75798645bfbbbc783972b121f Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Tue, 14 Jul 2015 17:30:17 +0200 Subject: [PATCH 004/116] CppTools: Use project part ids instead of file paths File paths are not unique since e.g. each qbs group in a file is mapped to a project part. Change-Id: I7df3f224dd23046b869f2588b8a34eb26cfc0b1a Reviewed-by: Marco Bubke --- .../clangbackendipcintegration.cpp | 11 +++--- .../clangbackendipcintegration.h | 2 +- .../clangcompletionassistprocessor.cpp | 12 +++---- .../clangcompletionassistprocessor.h | 2 +- .../clangeditordocumentprocessor.cpp | 6 ++-- .../clangmodelmanagersupport.cpp | 8 ++--- .../clangcodemodel/clangmodelmanagersupport.h | 2 +- src/plugins/clangcodemodel/clangutils.cpp | 6 ++-- src/plugins/clangcodemodel/clangutils.h | 2 +- .../test/clangcodecompletion_test.cpp | 4 +-- src/plugins/cppeditor/cppeditordocument.cpp | 6 ++-- .../cppeditor/cpppreprocessordialog.cpp | 8 ++--- .../cpptools/cppcodemodelinspectordumper.cpp | 2 +- src/plugins/cpptools/cppmodelmanager.cpp | 36 +++++++++---------- src/plugins/cpptools/cppmodelmanager.h | 6 ++-- 15 files changed, 56 insertions(+), 57 deletions(-) diff --git a/src/plugins/clangcodemodel/clangbackendipcintegration.cpp b/src/plugins/clangcodemodel/clangbackendipcintegration.cpp index d03b56b89a6..e46d3d5774e 100644 --- a/src/plugins/clangcodemodel/clangbackendipcintegration.cpp +++ b/src/plugins/clangcodemodel/clangbackendipcintegration.cpp @@ -310,8 +310,7 @@ static ClangBackEnd::ProjectPartContainer toProjectPartContainer( const CppTools::ProjectPart::Ptr &projectPart) { const QStringList arguments = projectPartCommandLine(projectPart); - return ClangBackEnd::ProjectPartContainer(projectPart->projectFile, - Utf8StringVector(arguments)); + return ClangBackEnd::ProjectPartContainer(projectPart->id(), Utf8StringVector(arguments)); } static QVector toProjectPartContainers( @@ -339,13 +338,13 @@ void IpcCommunicator::updateUnsavedFileFromCppEditorDocument(const QString &file void IpcCommunicator::updateUnsavedFile(const QString &filePath, const QByteArray &contents) { - const QString projectFilePath = Utils::projectFilePathForFile(filePath); + const QString projectPartId = Utils::projectPartIdForFile(filePath); const bool hasUnsavedContent = true; // TODO: Send new only if changed registerFilesForCodeCompletion({ ClangBackEnd::FileContainer(filePath, - projectFilePath, + projectPartId, Utf8String::fromByteArray(contents), hasUnsavedContent) }); @@ -432,12 +431,12 @@ void IpcCommunicator::registerProjectPartsForCodeCompletion( m_ipcSender->registerProjectPartsForCodeCompletion(command); } -void IpcCommunicator::unregisterProjectPartsForCodeCompletion(const QStringList &filePaths) +void IpcCommunicator::unregisterProjectPartsForCodeCompletion(const QStringList &projectPartIds) { if (m_sendMode == IgnoreSendRequests) return; - const UnregisterProjectPartsForCodeCompletionCommand command((Utf8StringVector(filePaths))); + const UnregisterProjectPartsForCodeCompletionCommand command((Utf8StringVector(projectPartIds))); qCDebug(log) << ">>>" << command; m_ipcSender->unregisterProjectPartsForCodeCompletion(command); } diff --git a/src/plugins/clangcodemodel/clangbackendipcintegration.h b/src/plugins/clangcodemodel/clangbackendipcintegration.h index 4a4ca40ab0f..70aaf7c88d0 100644 --- a/src/plugins/clangcodemodel/clangbackendipcintegration.h +++ b/src/plugins/clangcodemodel/clangbackendipcintegration.h @@ -112,7 +112,7 @@ class IpcCommunicator : public QObject void registerFilesForCodeCompletion(const FileContainers &fileContainers); void unregisterFilesForCodeCompletion(const FileContainers &fileContainers); void registerProjectPartsForCodeCompletion(const ProjectPartContainers &projectPartContainers); - void unregisterProjectPartsForCodeCompletion(const QStringList &filePaths); + void unregisterProjectPartsForCodeCompletion(const QStringList &projectPartIds); void completeCode(ClangCompletionAssistProcessor *assistProcessor, const QString &filePath, quint32 line, quint32 column, diff --git a/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp b/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp index 505b5fcc223..1e42b13f54c 100644 --- a/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp +++ b/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp @@ -302,7 +302,7 @@ static QByteArray modifyInput(QTextDocument *doc, int endOfExpression) { IAssistProposal *ClangCompletionAssistProcessor::startCompletionHelper() { - sendFileContent(Utils::projectFilePathForFile(m_interface->fileName()), QByteArray()); // TODO: Remoe + sendFileContent(Utils::projectPartIdForFile(m_interface->fileName()), QByteArray()); // TODO: Remove ClangCompletionContextAnalyzer analyzer(m_interface.data(), m_interface->languageFeatures()); analyzer.analyze(); @@ -648,7 +648,7 @@ void ClangCompletionAssistProcessor::addCompletionItem(const QString &text, m_completions.append(item); } -void ClangCompletionAssistProcessor::sendFileContent(const QString &projectFilePath, +void ClangCompletionAssistProcessor::sendFileContent(const QString &projectPartId, const QByteArray &modifiedFileContent) { const QString filePath = m_interface->fileName(); @@ -660,7 +660,7 @@ void ClangCompletionAssistProcessor::sendFileContent(const QString &projectFileP IpcCommunicator &ipcCommunicator = m_interface->ipcCommunicator(); ipcCommunicator.registerFilesForCodeCompletion( {ClangBackEnd::FileContainer(filePath, - projectFilePath, + projectPartId, Utf8String::fromByteArray(unsavedContent), hasUnsavedContent)}); } @@ -673,9 +673,9 @@ void ClangCompletionAssistProcessor::sendCompletionRequest(int position, ++column; const QString filePath = m_interface->fileName(); - const QString projectFilePath = Utils::projectFilePathForFile(filePath); - sendFileContent(projectFilePath, modifiedFileContent); - m_interface->ipcCommunicator().completeCode(this, filePath, line, column, projectFilePath); + const QString projectPartId = Utils::projectPartIdForFile(filePath); + sendFileContent(projectPartId, modifiedFileContent); + m_interface->ipcCommunicator().completeCode(this, filePath, line, column, projectPartId); } TextEditor::IAssistProposal *ClangCompletionAssistProcessor::createProposal() const diff --git a/src/plugins/clangcodemodel/clangcompletionassistprocessor.h b/src/plugins/clangcodemodel/clangcompletionassistprocessor.h index f712246406f..b25cb5f77be 100644 --- a/src/plugins/clangcodemodel/clangcompletionassistprocessor.h +++ b/src/plugins/clangcodemodel/clangcompletionassistprocessor.h @@ -81,7 +81,7 @@ class ClangCompletionAssistProcessor : public CppTools::CppCompletionAssistProce int order = 0, const QVariant &data = QVariant()); - void sendFileContent(const QString &projectFilePath, const QByteArray &modifiedFileContent); + void sendFileContent(const QString &projectPartId, const QByteArray &modifiedFileContent); void sendCompletionRequest(int position, const QByteArray &modifiedFileContent); void onCompletionsAvailable(const CodeCompletions &completions); diff --git a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp index 5ca055b0a14..3148cefe8e6 100644 --- a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp +++ b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp @@ -132,13 +132,13 @@ ClangEditorDocumentProcessor::~ClangEditorDocumentProcessor() const CppTools::ProjectPart::Ptr projectPart = m_parser.projectPart(); QTC_ASSERT(projectPart, return); - QString projectFilePath; + QString projectPartId; if (Utils::isProjectPartValid(projectPart)) - projectFilePath = projectPart->projectFile; // OK, Project Part is still loaded + projectPartId = projectPart->id(); // OK, Project Part is still loaded QTC_ASSERT(m_modelManagerSupport, return); m_modelManagerSupport->ipcCommunicator().unregisterFilesForCodeCompletion( - {ClangBackEnd::FileContainer(filePath(), projectFilePath)}); + {ClangBackEnd::FileContainer(filePath(), projectPartId)}); } void ClangEditorDocumentProcessor::run() diff --git a/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp b/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp index 8115b52577d..0a80d18fc10 100644 --- a/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp +++ b/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp @@ -159,9 +159,9 @@ void ModelManagerSupportClang::onAbstractEditorSupportRemoved(const QString &fil { QTC_ASSERT(!filePath.isEmpty(), return); if (!cppModelManager()->cppEditorDocument(filePath)) { - const QString projectFilePath = Utils::projectFilePathForFile(filePath); + const QString projectPartId = Utils::projectPartIdForFile(filePath); m_ipcCommunicator.unregisterFilesForCodeCompletion( - {ClangBackEnd::FileContainer(filePath, projectFilePath)}); + {ClangBackEnd::FileContainer(filePath, projectPartId)}); } } @@ -173,9 +173,9 @@ void ModelManagerSupportClang::onProjectPartsUpdated(ProjectExplorer::Project *p m_ipcCommunicator.registerProjectsParts(projectInfo.projectParts()); } -void ModelManagerSupportClang::onProjectPartsRemoved(const QStringList &projectFiles) +void ModelManagerSupportClang::onProjectPartsRemoved(const QStringList &projectPartIds) { - m_ipcCommunicator.unregisterProjectPartsForCodeCompletion(projectFiles); + m_ipcCommunicator.unregisterProjectPartsForCodeCompletion(projectPartIds); } #ifdef QT_TESTLIB_LIB diff --git a/src/plugins/clangcodemodel/clangmodelmanagersupport.h b/src/plugins/clangcodemodel/clangmodelmanagersupport.h index 7269e925dc3..c3f04576603 100644 --- a/src/plugins/clangcodemodel/clangmodelmanagersupport.h +++ b/src/plugins/clangcodemodel/clangmodelmanagersupport.h @@ -73,7 +73,7 @@ class ModelManagerSupportClang: void onAbstractEditorSupportRemoved(const QString &filePath); void onProjectPartsUpdated(ProjectExplorer::Project *project); - void onProjectPartsRemoved(const QStringList &projectFiles); + void onProjectPartsRemoved(const QStringList &projectPartIds); IpcCommunicator m_ipcCommunicator; ClangCompletionAssistProvider m_completionAssistProvider; diff --git a/src/plugins/clangcodemodel/clangutils.cpp b/src/plugins/clangcodemodel/clangutils.cpp index 257d3c966e5..06bd961c7bd 100644 --- a/src/plugins/clangcodemodel/clangutils.cpp +++ b/src/plugins/clangcodemodel/clangutils.cpp @@ -218,16 +218,16 @@ ProjectPart::Ptr projectPartForFile(const QString &filePath) bool isProjectPartValid(const ProjectPart::Ptr projectPart) { if (projectPart) - return CppModelManager::instance()->projectPartForProjectFile(projectPart->projectFile); + return CppModelManager::instance()->projectPartForId(projectPart->id()); return false; } -QString projectFilePathForFile(const QString &filePath) +QString projectPartIdForFile(const QString &filePath) { const ProjectPart::Ptr projectPart = projectPartForFile(filePath); if (isProjectPartValid(projectPart)) - return projectPart->projectFile; // OK, Project Part is still loaded + return projectPart->id(); // OK, Project Part is still loaded return QString(); } diff --git a/src/plugins/clangcodemodel/clangutils.h b/src/plugins/clangcodemodel/clangutils.h index d3a78cc45b7..fdee8af6f8b 100644 --- a/src/plugins/clangcodemodel/clangutils.h +++ b/src/plugins/clangcodemodel/clangutils.h @@ -55,7 +55,7 @@ QStringList createPCHInclusionOptions(const QString &pchFile); CppTools::ProjectPart::Ptr projectPartForFile(const QString &filePath); bool isProjectPartValid(const CppTools::ProjectPart::Ptr projectPart); -QString projectFilePathForFile(const QString &filePath); +QString projectPartIdForFile(const QString &filePath); } // namespace Utils } // namespace Clang diff --git a/src/plugins/clangcodemodel/test/clangcodecompletion_test.cpp b/src/plugins/clangcodemodel/test/clangcodecompletion_test.cpp index e227a2bd5f6..757ebe54b5b 100644 --- a/src/plugins/clangcodemodel/test/clangcodecompletion_test.cpp +++ b/src/plugins/clangcodemodel/test/clangcodecompletion_test.cpp @@ -1048,7 +1048,7 @@ void ClangCodeCompletionTest::testUpdateBackendAfterRestart() QVERIFY(compare(LogOutput(spy.senderLog), LogOutput( "RegisterProjectPartsForCodeCompletionCommand\n" - " ProjectPartContainer id: qt-widgets-app.pro\n" + " ProjectPartContainer id: qt-widgets-app.pro qt-widgets-app\n" "RegisterTranslationUnitForCodeCompletionCommand\n" " Path: myheader.h ProjectPart: \n" "RegisterTranslationUnitForCodeCompletionCommand\n" @@ -1069,7 +1069,7 @@ void ClangCodeCompletionTest::testUpdateBackendAfterRestart() "RegisterProjectPartsForCodeCompletionCommand\n" " ProjectPartContainer id: \n" "RegisterProjectPartsForCodeCompletionCommand\n" - " ProjectPartContainer id: qt-widgets-app.pro\n" + " ProjectPartContainer id: qt-widgets-app.pro qt-widgets-app\n" "RegisterTranslationUnitForCodeCompletionCommand\n" " Path: myheader.h ProjectPart: \n" "RegisterTranslationUnitForCodeCompletionCommand\n" diff --git a/src/plugins/cppeditor/cppeditordocument.cpp b/src/plugins/cppeditor/cppeditordocument.cpp index 2746303cf0e..e64e4fe6462 100644 --- a/src/plugins/cppeditor/cppeditordocument.cpp +++ b/src/plugins/cppeditor/cppeditordocument.cpp @@ -254,13 +254,13 @@ void CppEditorDocument::updatePreprocessorSettings() return; const QString prefix = QLatin1String(Constants::CPP_PREPROCESSOR_PROJECT_PREFIX); - const QString &projectFile = ProjectExplorer::SessionManager::value( + const QString &projectPartId = ProjectExplorer::SessionManager::value( prefix + filePath().toString()).toString(); - const QString directivesKey = projectFile + QLatin1Char(',') + filePath().toString(); + const QString directivesKey = projectPartId + QLatin1Char(',') + filePath().toString(); const QByteArray additionalDirectives = ProjectExplorer::SessionManager::value( directivesKey).toString().toUtf8(); - setPreprocessorSettings(mm()->projectPartForProjectFile(projectFile), additionalDirectives); + setPreprocessorSettings(mm()->projectPartForId(projectPartId), additionalDirectives); } void CppEditorDocument::setPreprocessorSettings(const CppTools::ProjectPart::Ptr &projectPart, diff --git a/src/plugins/cppeditor/cpppreprocessordialog.cpp b/src/plugins/cppeditor/cpppreprocessordialog.cpp index 2b9210f04b3..fcc9f69c6dd 100644 --- a/src/plugins/cppeditor/cpppreprocessordialog.cpp +++ b/src/plugins/cppeditor/cpppreprocessordialog.cpp @@ -70,7 +70,7 @@ CppPreProcessorDialog::CppPreProcessorDialog(QWidget *parent, const QString &fil ProjectPartAddition addition; addition.projectPart = projectPart; addition.additionalDirectives = ProjectExplorer::SessionManager::value( - projectPart->projectFile + QLatin1Char(',') + m_filePath).toString(); + projectPart->id() + QLatin1Char(',') + m_filePath).toString(); if (projectPart->id() == projectPartIdToUse) currentIndex = m_ui->projectComboBox->count() - 1; m_partAdditions << addition; @@ -96,16 +96,16 @@ int CppPreProcessorDialog::exec() ProjectExplorer::SessionManager::setValue( QLatin1String(Constants::CPP_PREPROCESSOR_PROJECT_PREFIX) + m_filePath, - m_partAdditions[m_ui->projectComboBox->currentIndex()].projectPart->projectFile); + m_partAdditions[m_ui->projectComboBox->currentIndex()].projectPart->id()); foreach (ProjectPartAddition partAddition, m_partAdditions) { const QString &previousDirectives = ProjectExplorer::SessionManager::value( - partAddition.projectPart->projectFile + partAddition.projectPart->id() + QLatin1Char(',') + m_filePath).toString(); if (previousDirectives != partAddition.additionalDirectives) { ProjectExplorer::SessionManager::setValue( - partAddition.projectPart->projectFile + QLatin1Char(',') + m_filePath, + partAddition.projectPart->id() + QLatin1Char(',') + m_filePath, partAddition.additionalDirectives); } } diff --git a/src/plugins/cpptools/cppcodemodelinspectordumper.cpp b/src/plugins/cpptools/cppcodemodelinspectordumper.cpp index 11ecab7b3ba..1285c40da32 100644 --- a/src/plugins/cpptools/cppcodemodelinspectordumper.cpp +++ b/src/plugins/cpptools/cppcodemodelinspectordumper.cpp @@ -491,7 +491,7 @@ void Dumper::dumpProjectInfos( const QList &projectInfos) } if (!part->projectConfigFile.isEmpty()) m_out << i3 << "Project Config File: " << part->projectConfigFile << "\n"; - m_out << i2 << "Project Part \"" << part->projectFile << "\"{{{3\n"; + m_out << i2 << "Project Part \"" << part->id() << "\"{{{3\n"; m_out << i3 << "Project Part Name : " << part->displayName << "\n"; m_out << i3 << "Project Name : " << projectName << "\n"; m_out << i3 << "Project File : " << projectFilePath << "\n"; diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp index 0d1b13621d6..ca3283ece27 100644 --- a/src/plugins/cpptools/cppmodelmanager.cpp +++ b/src/plugins/cpptools/cppmodelmanager.cpp @@ -137,7 +137,7 @@ class CppModelManagerPrivate mutable QMutex m_projectMutex; QMap m_projectToProjectsInfo; QMap > m_fileToProjectParts; - QMap m_projectFileToProjectPart; + QMap m_projectPartIdToProjectProjectPart; // The members below are cached/(re)calculated from the projects and/or their project parts bool m_dirty; QStringList m_projectFiles; @@ -710,12 +710,12 @@ void CppModelManager::removeFilesFromSnapshot(const QSet &filesToRemove d->m_snapshot.remove(i.next()); } -static QStringList projectFilePaths(const QSet &projectParts) +static QStringList projectPartIds(const QSet &projectParts) { QStringList result; QSetIterator it(projectParts); while (it.hasNext()) - result << it.next()->projectFile; + result << it.next()->id(); return result; } @@ -752,7 +752,7 @@ class ProjectInfoComparer { QSet removed = m_old.projectParts().toSet(); removed.subtract(m_new.projectParts().toSet()); - return projectFilePaths(removed); + return projectPartIds(removed); } /// Returns a list of common files that have a changed timestamp. @@ -781,13 +781,13 @@ class ProjectInfoComparer }; /// Make sure that m_projectMutex is locked when calling this. -void CppModelManager::recalculateFileToProjectParts() +void CppModelManager::recalculateProjectPartMappings() { - d->m_projectFileToProjectPart.clear(); + d->m_projectPartIdToProjectProjectPart.clear(); d->m_fileToProjectParts.clear(); foreach (const ProjectInfo &projectInfo, d->m_projectToProjectsInfo) { foreach (const ProjectPart::Ptr &projectPart, projectInfo.projectParts()) { - d->m_projectFileToProjectPart[projectPart->projectFile] = projectPart; + d->m_projectPartIdToProjectProjectPart[projectPart->id()] = projectPart; foreach (const ProjectFile &cxxFile, projectPart->files) d->m_fileToProjectParts[Utils::FileName::fromString(cxxFile.path)].append( projectPart); @@ -883,7 +883,7 @@ QFuture CppModelManager::updateProjectInfo(const ProjectInfo &newProjectIn // Update Project/ProjectInfo and File/ProjectPart table d->m_projectToProjectsInfo.insert(project, newProjectInfo); - recalculateFileToProjectParts(); + recalculateProjectPartMappings(); } // Mutex scope @@ -908,9 +908,9 @@ QFuture CppModelManager::updateProjectInfo(const ProjectInfo &newProjectIn return updateSourceFiles(filesToReindex, ForcedProgressNotification); } -ProjectPart::Ptr CppModelManager::projectPartForProjectFile(const QString &projectFile) const +ProjectPart::Ptr CppModelManager::projectPartForId(const QString &projectPartId) const { - return d->m_projectFileToProjectPart.value(projectFile); + return d->m_projectPartIdToProjectProjectPart.value(projectPartId); } QList CppModelManager::projectPart(const Utils::FileName &fileName) const @@ -981,17 +981,17 @@ void CppModelManager::delayedGC() d->m_delayedGcTimer.start(500); } -static QStringList pathsOfAllProjectParts(const ProjectInfo &projectInfo) +static QStringList idsOfAllProjectParts(const ProjectInfo &projectInfo) { QStringList projectPaths; foreach (const ProjectPart::Ptr &part, projectInfo.projectParts()) - projectPaths << part->projectFile; + projectPaths << part->id(); return projectPaths; } void CppModelManager::onAboutToRemoveProject(ProjectExplorer::Project *project) { - QStringList projectFilePaths; + QStringList projectPartIds; { QMutexLocker locker(&d->m_projectMutex); @@ -999,14 +999,14 @@ void CppModelManager::onAboutToRemoveProject(ProjectExplorer::Project *project) // Save paths const ProjectInfo projectInfo = d->m_projectToProjectsInfo.value(project, ProjectInfo()); - projectFilePaths = pathsOfAllProjectParts(projectInfo); + projectPartIds = idsOfAllProjectParts(projectInfo); d->m_projectToProjectsInfo.remove(project); - recalculateFileToProjectParts(); + recalculateProjectPartMappings(); } - if (!projectFilePaths.isEmpty()) - emit projectPartsRemoved(projectFilePaths); + if (!projectPartIds.isEmpty()) + emit projectPartsRemoved(projectPartIds); delayedGC(); } @@ -1085,7 +1085,7 @@ void CppModelManager::onAboutToUnloadSession() do { QMutexLocker locker(&d->m_projectMutex); d->m_projectToProjectsInfo.clear(); - recalculateFileToProjectParts(); + recalculateProjectPartMappings(); d->m_dirty = true; } while (0); } diff --git a/src/plugins/cpptools/cppmodelmanager.h b/src/plugins/cpptools/cppmodelmanager.h index 24b2d2d6ee7..b9ac4a9b0c6 100644 --- a/src/plugins/cpptools/cppmodelmanager.h +++ b/src/plugins/cpptools/cppmodelmanager.h @@ -94,7 +94,7 @@ class CPPTOOLS_EXPORT CppModelManager : public CPlusPlus::CppModelManagerBase QFuture updateProjectInfo(const ProjectInfo &newProjectInfo); /// \return The project part with the given project file - ProjectPart::Ptr projectPartForProjectFile(const QString &projectFile) const; + ProjectPart::Ptr projectPartForId(const QString &projectPartId) const; /// \return All project parts that mention the given file name as one of the sources/headers. QList projectPart(const Utils::FileName &fileName) const; QList projectPart(const QString &fileName) const @@ -170,7 +170,7 @@ class CPPTOOLS_EXPORT CppModelManager : public CPlusPlus::CppModelManagerBase void sourceFilesRefreshed(const QSet &files); void projectPartsUpdated(ProjectExplorer::Project *project); - void projectPartsRemoved(const QStringList &projectFiles); + void projectPartsRemoved(const QStringList &projectPartIds); void globalSnapshotChanged(); @@ -198,7 +198,7 @@ private slots: private: void delayedGC(); - void recalculateFileToProjectParts(); + void recalculateProjectPartMappings(); void updateCppEditorDocuments() const; void replaceSnapshot(const CPlusPlus::Snapshot &newSnapshot); From a3056e8922a96a3461b9c59ff7d70a034174a197 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Wed, 15 Jul 2015 17:15:57 +0200 Subject: [PATCH 005/116] CppTools: Fix removedProjectParts() It compared pointers, not ids. Change-Id: Ic77c64e452f8abfe9a35b74591f0f3baeebcf7f0 Reviewed-by: Marco Bubke --- src/plugins/cpptools/cppmodelmanager.cpp | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp index ca3283ece27..be1fc9e2585 100644 --- a/src/plugins/cpptools/cppmodelmanager.cpp +++ b/src/plugins/cpptools/cppmodelmanager.cpp @@ -54,6 +54,7 @@ #include #include #include +#include #include #include @@ -710,13 +711,11 @@ void CppModelManager::removeFilesFromSnapshot(const QSet &filesToRemove d->m_snapshot.remove(i.next()); } -static QStringList projectPartIds(const QSet &projectParts) +static QSet projectPartIds(const QSet &projectParts) { - QStringList result; - QSetIterator it(projectParts); - while (it.hasNext()) - result << it.next()->id(); - return result; + return Utils::transform(projectParts, [](const ProjectPart::Ptr &projectPart) { + return projectPart->id(); + }); } class ProjectInfoComparer @@ -750,9 +749,9 @@ class ProjectInfoComparer QStringList removedProjectParts() { - QSet removed = m_old.projectParts().toSet(); - removed.subtract(m_new.projectParts().toSet()); - return projectPartIds(removed); + QSet removed = projectPartIds(m_old.projectParts().toSet()); + removed.subtract(projectPartIds(m_new.projectParts().toSet())); + return removed.toList(); } /// Returns a list of common files that have a changed timestamp. From b4464d8f4bb6eb3e38a13474b3095bb2790144ec Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Tue, 14 Jul 2015 14:54:01 +0200 Subject: [PATCH 006/116] Clang: Shorten debug output ...by writing unsaved file content and project part arguments to temporary dirs. Change-Id: Ic411700cb3da756788bbb315851ff38b0100fe71 Reviewed-by: Marco Bubke --- .../clangbackendipc/clangbackendipc-lib.pri | 6 +- .../clangbackendipcdebugutils.cpp | 99 +++++++++++++++++++ .../clangbackendipcdebugutils.h | 44 +++++++++ src/libs/clangbackendipc/filecontainer.cpp | 10 +- .../clangbackendipc/projectpartcontainer.cpp | 10 +- 5 files changed, 163 insertions(+), 6 deletions(-) create mode 100644 src/libs/clangbackendipc/clangbackendipcdebugutils.cpp create mode 100644 src/libs/clangbackendipc/clangbackendipcdebugutils.h diff --git a/src/libs/clangbackendipc/clangbackendipc-lib.pri b/src/libs/clangbackendipc/clangbackendipc-lib.pri index 50c5974d4e8..8dda2d1f591 100644 --- a/src/libs/clangbackendipc/clangbackendipc-lib.pri +++ b/src/libs/clangbackendipc/clangbackendipc-lib.pri @@ -36,7 +36,8 @@ SOURCES += $$PWD/ipcserverinterface.cpp \ $$PWD/codecompletionchunk.cpp \ $$PWD/projectpartcontainer.cpp \ $$PWD/projectpartsdonotexistcommand.cpp \ - $$PWD/lineprefixer.cpp + $$PWD/lineprefixer.cpp \ + $$PWD/clangbackendipcdebugutils.cpp HEADERS += \ $$PWD/ipcserverinterface.h \ @@ -67,6 +68,7 @@ HEADERS += \ $$PWD/projectpartsdonotexistcommand.h \ $$PWD/container_common.h \ $$PWD/clangbackendipc_global.h \ - $$PWD/lineprefixer.h + $$PWD/lineprefixer.h \ + $$PWD/clangbackendipcdebugutils.h contains(QT_CONFIG, reduce_exports):CONFIG += hide_symbols diff --git a/src/libs/clangbackendipc/clangbackendipcdebugutils.cpp b/src/libs/clangbackendipc/clangbackendipcdebugutils.cpp new file mode 100644 index 00000000000..840beafe351 --- /dev/null +++ b/src/libs/clangbackendipc/clangbackendipcdebugutils.cpp @@ -0,0 +1,99 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing +** +** 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 The Qt Company. For licensing terms and +** conditions see http://www.qt.io/terms-conditions. For further information +** use the contact form at http://www.qt.io/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 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +****************************************************************************/ + +#include "clangbackendipcdebugutils.h" + +#include "filecontainer.h" + +#include + +#include +#include +#include +#include + +namespace { + +class DebugInspectionDir : public QTemporaryDir +{ +public: + DebugInspectionDir() + : QTemporaryDir(QDir::tempPath() + QLatin1String("/qtc-clangbackendipc-XXXXXX")) + { + setAutoRemove(false); // Keep around for later inspection. + } +}; + +class DebugInspectionFile : public QTemporaryFile +{ +public: + DebugInspectionFile(const QString &directoryPath, + const Utf8String &id, + const Utf8String &fileContent) + : QTemporaryFile(directoryPath + QString::fromUtf8("/%1-XXXXXX").arg(id.toString())) + { + setAutoRemove(false); // Keep around for later inspection. + m_isValid = open() && write(fileContent.constData(), fileContent.byteSize()); + } + + bool isValid() const + { + return m_isValid; + } + +private: + bool m_isValid = false; +}; + +} + +namespace ClangBackEnd { + +Utf8String debugWriteFileForInspection(const Utf8String &fileContent, const Utf8String &id) +{ + static DebugInspectionDir debugInspectionDir; + if (!debugInspectionDir.isValid()) + return Utf8String(); + + DebugInspectionFile file(debugInspectionDir.path(), id, fileContent); + if (file.isValid()) + return Utf8String::fromString(file.fileName()); + return Utf8String(); +} + +Utf8String debugId(const FileContainer &fileContainer) +{ + const Utf8String filePath = fileContainer.filePath(); + Utf8String id(Utf8StringLiteral("unsavedfilecontent-")); + id.append(QFileInfo(filePath).fileName()); + return id; +} + +} // namespace ClangBackEnd diff --git a/src/libs/clangbackendipc/clangbackendipcdebugutils.h b/src/libs/clangbackendipc/clangbackendipcdebugutils.h new file mode 100644 index 00000000000..6eb57ca8285 --- /dev/null +++ b/src/libs/clangbackendipc/clangbackendipcdebugutils.h @@ -0,0 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing +** +** 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 The Qt Company. For licensing terms and +** conditions see http://www.qt.io/terms-conditions. For further information +** use the contact form at http://www.qt.io/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 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +****************************************************************************/ + +#ifndef CLANGBACKENDIPCDEBUGUTILS_H +#define CLANGBACKENDIPCDEBUGUTILS_H + +class FileContainer; +class Utf8String; + +namespace ClangBackEnd { + +Utf8String debugWriteFileForInspection(const Utf8String &fileContent, const Utf8String &id); +Utf8String debugId(const FileContainer &fileContainer); + +} // namespace ClangBackEnd + +#endif // CLANGBACKENDIPCDEBUGUTILS_H diff --git a/src/libs/clangbackendipc/filecontainer.cpp b/src/libs/clangbackendipc/filecontainer.cpp index 65f81a1ea04..a158a6721e2 100644 --- a/src/libs/clangbackendipc/filecontainer.cpp +++ b/src/libs/clangbackendipc/filecontainer.cpp @@ -30,6 +30,8 @@ #include "filecontainer.h" +#include "clangbackendipcdebugutils.h" + #include #include @@ -108,9 +110,13 @@ QDebug operator<<(QDebug debug, const FileContainer &container) << ", " << container.projectPartId(); - if (container.hasUnsavedFileContent()) + if (container.hasUnsavedFileContent()) { + const Utf8String fileWithContent = debugWriteFileForInspection( + container.unsavedFileContent(), + debugId(container)); debug.nospace() << ", " - << container.unsavedFileContent(); + << "<" << fileWithContent << ">"; + } debug.nospace() << ")"; diff --git a/src/libs/clangbackendipc/projectpartcontainer.cpp b/src/libs/clangbackendipc/projectpartcontainer.cpp index 50b4bcc6a40..85bb60a8e21 100644 --- a/src/libs/clangbackendipc/projectpartcontainer.cpp +++ b/src/libs/clangbackendipc/projectpartcontainer.cpp @@ -30,9 +30,10 @@ #include "projectpartcontainer.h" -#include +#include "clangbackendipcdebugutils.h" #include +#include #include @@ -91,10 +92,15 @@ static Utf8String quotedArguments(const Utf8StringVector &arguments) QDebug operator<<(QDebug debug, const ProjectPartContainer &container) { + const Utf8String arguments = quotedArguments(container.arguments()); + const Utf8String fileWithArguments = debugWriteFileForInspection( + arguments, + Utf8StringLiteral("projectpartargs-")); + debug.nospace() << "ProjectPartContainer(" << container.projectPartId() << "," - << quotedArguments(container.arguments()) + << "<" << fileWithArguments << ">" << ")"; return debug; From 2203565cadbb6d755486c6ebe9800b498223affd Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Wed, 15 Jul 2015 15:40:27 +0200 Subject: [PATCH 007/116] CppTools: Ensure that ProjectPart::id() != " " Change-Id: Ic928380f711e58008ed66691137c238598a5c26a Reviewed-by: Marco Bubke --- src/plugins/cpptools/cppprojects.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/plugins/cpptools/cppprojects.cpp b/src/plugins/cpptools/cppprojects.cpp index 17e197c1cfe..baaed3fc84f 100644 --- a/src/plugins/cpptools/cppprojects.cpp +++ b/src/plugins/cpptools/cppprojects.cpp @@ -146,7 +146,10 @@ ProjectPart::Ptr ProjectPart::copy() const QString ProjectPart::id() const { - return QDir::fromNativeSeparators(projectFile) + QLatin1Char(' ') + displayName; + QString projectPartId = QDir::fromNativeSeparators(projectFile); + if (!displayName.isEmpty()) + projectPartId.append(QLatin1Char(' ') + displayName); + return projectPartId; } QByteArray ProjectPart::readProjectConfigFile(const ProjectPart::Ptr &part) From f51a403518c23933947bdd84de941ef19f0f1387 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Wed, 15 Jul 2015 17:14:57 +0200 Subject: [PATCH 008/116] Clang: Send unregisterProjectParts only with non-empty list Change-Id: Id11d420c481758ccd58921dddc92c6036c9204e1 Reviewed-by: Marco Bubke --- src/plugins/clangcodemodel/clangmodelmanagersupport.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp b/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp index 0a80d18fc10..f28c0d215dd 100644 --- a/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp +++ b/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp @@ -175,7 +175,8 @@ void ModelManagerSupportClang::onProjectPartsUpdated(ProjectExplorer::Project *p void ModelManagerSupportClang::onProjectPartsRemoved(const QStringList &projectPartIds) { - m_ipcCommunicator.unregisterProjectPartsForCodeCompletion(projectPartIds); + if (!projectPartIds.isEmpty()) + m_ipcCommunicator.unregisterProjectPartsForCodeCompletion(projectPartIds); } #ifdef QT_TESTLIB_LIB From cf4ee59cf0f557bcd4fd265d1e2a8cae0300246c Mon Sep 17 00:00:00 2001 From: BogDan Vatra Date: Mon, 20 Jul 2015 12:40:28 +0300 Subject: [PATCH 009/116] Make it easy to set a kit matcher. Using a function to set a kit matcher is much easier that crating a new class. It also enables an easy way to reuse classes that are using it. E.g. DeviceProcessesDialog processDialog; processDialog.kitChooser()->setKitMatcher([](const Kit* kit) { return kit->isValid() && other_checks_with(kit); }); Change-Id: I4e2fc7c52038902412cec5331504230bb8160ceb Reviewed-by: Tobias Hunger --- .../analyzerbase/startremotedialog.cpp | 22 ++------ src/plugins/debugger/debuggerdialogs.cpp | 22 ++++---- src/plugins/debugger/debuggerdialogs.h | 1 - .../devicesupport/devicetypekitchooser.cpp | 49 ---------------- .../devicesupport/devicetypekitchooser.h | 56 ------------------- src/plugins/projectexplorer/kitchooser.cpp | 18 +++--- src/plugins/projectexplorer/kitchooser.h | 7 ++- .../projectexplorer/projectexplorer.pro | 2 - .../projectexplorer/projectexplorer.qbs | 1 - src/plugins/qnx/qnxattachdebugsupport.cpp | 8 ++- 10 files changed, 39 insertions(+), 147 deletions(-) delete mode 100644 src/plugins/projectexplorer/devicesupport/devicetypekitchooser.cpp delete mode 100644 src/plugins/projectexplorer/devicesupport/devicetypekitchooser.h diff --git a/src/plugins/analyzerbase/startremotedialog.cpp b/src/plugins/analyzerbase/startremotedialog.cpp index e971e6a7ee2..6f18fa8d0f9 100644 --- a/src/plugins/analyzerbase/startremotedialog.cpp +++ b/src/plugins/analyzerbase/startremotedialog.cpp @@ -46,24 +46,10 @@ using namespace Utils; namespace Analyzer { namespace Internal { -class SshKitChooser : public KitChooser -{ -public: - SshKitChooser(QWidget *parent = 0) : KitChooser(parent) { } - -private: - bool kitMatches(const Kit *kit) const { - if (!KitChooser::kitMatches(kit)) - return false; - const IDevice::ConstPtr device = DeviceKitInformation::device(kit); - return device && !device->sshParameters().host.isEmpty(); - } -}; - class StartRemoteDialogPrivate { public: - SshKitChooser *kitChooser; + KitChooser *kitChooser; QLineEdit *executable; QLineEdit *arguments; QLineEdit *workingDirectory; @@ -79,7 +65,11 @@ StartRemoteDialog::StartRemoteDialog(QWidget *parent) setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); setWindowTitle(tr("Start Remote Analysis")); - d->kitChooser = new Internal::SshKitChooser(this); + d->kitChooser = new KitChooser(this); + d->kitChooser->setKitMatcher([](const Kit *kit) { + const IDevice::ConstPtr device = DeviceKitInformation::device(kit); + return kit->isValid() && device && !device->sshParameters().host.isEmpty(); + }); d->executable = new QLineEdit(this); d->arguments = new QLineEdit(this); d->workingDirectory = new QLineEdit(this); diff --git a/src/plugins/debugger/debuggerdialogs.cpp b/src/plugins/debugger/debuggerdialogs.cpp index 9e6417e0ed5..1971367ce4b 100644 --- a/src/plugins/debugger/debuggerdialogs.cpp +++ b/src/plugins/debugger/debuggerdialogs.cpp @@ -110,18 +110,16 @@ DebuggerKitChooser::DebuggerKitChooser(Mode mode, QWidget *parent) , m_hostAbi(Abi::hostAbi()) , m_mode(mode) { -} - -// Match valid debuggers and restrict local debugging to compatible toolchains. -bool DebuggerKitChooser::kitMatches(const Kit *k) const -{ - if (!DebuggerKitInformation::isValidDebugger(k)) - return false; - if (m_mode == LocalDebugging) { - const ToolChain *tc = ToolChainKitInformation::toolChain(k); - return tc && tc->targetAbi().os() == m_hostAbi.os(); - } - return true; + setKitMatcher([this](const Kit *k) { + // Match valid debuggers and restrict local debugging to compatible toolchains. + if (!DebuggerKitInformation::isValidDebugger(k)) + return false; + if (m_mode == LocalDebugging) { + const ToolChain *tc = ToolChainKitInformation::toolChain(k); + return tc && tc->targetAbi().os() == m_hostAbi.os(); + } + return true; + }); } QString DebuggerKitChooser::kitToolTip(Kit *k) const diff --git a/src/plugins/debugger/debuggerdialogs.h b/src/plugins/debugger/debuggerdialogs.h index ac262c962af..2b5c982bd60 100644 --- a/src/plugins/debugger/debuggerdialogs.h +++ b/src/plugins/debugger/debuggerdialogs.h @@ -69,7 +69,6 @@ class DebuggerKitChooser : public ProjectExplorer::KitChooser explicit DebuggerKitChooser(Mode mode = AnyDebugging, QWidget *parent = 0); protected: - bool kitMatches(const ProjectExplorer::Kit *k) const; QString kitToolTip(ProjectExplorer::Kit *k) const; private: diff --git a/src/plugins/projectexplorer/devicesupport/devicetypekitchooser.cpp b/src/plugins/projectexplorer/devicesupport/devicetypekitchooser.cpp deleted file mode 100644 index fe7fcbed3b0..00000000000 --- a/src/plugins/projectexplorer/devicesupport/devicetypekitchooser.cpp +++ /dev/null @@ -1,49 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2015 Klarälvdalens Datakonsult AB, a KDAB Group company -** Contact: info@kdab.com -** -** 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 The Qt Company. For licensing terms and -** conditions see http://www.qt.io/terms-conditions. For further information -** use the contact form at http://www.qt.io/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 or version 3 as published by the Free -** Software Foundation and appearing in the file LICENSE.LGPLv21 and -** LICENSE.LGPLv3 included in the packaging of this file. Please review the -** following information to ensure the GNU Lesser General Public License -** requirements will be met: https://www.gnu.org/licenses/lgpl.html and -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, The Qt Company gives you certain additional -** rights. These rights are described in The Qt Company LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -****************************************************************************/ - -#include "devicetypekitchooser.h" - -#include "../kitinformation.h" - -using namespace ProjectExplorer; - -DeviceTypeKitChooser::DeviceTypeKitChooser(Core::Id deviceType, QWidget *parent) - : KitChooser(parent) - , m_deviceType(deviceType) -{ -} - -bool DeviceTypeKitChooser::kitMatches(const Kit *k) const -{ - if (!KitChooser::kitMatches(k)) - return false; - - return DeviceTypeKitInformation::deviceTypeId(k) == m_deviceType; -} diff --git a/src/plugins/projectexplorer/devicesupport/devicetypekitchooser.h b/src/plugins/projectexplorer/devicesupport/devicetypekitchooser.h deleted file mode 100644 index 98a45f9cb8e..00000000000 --- a/src/plugins/projectexplorer/devicesupport/devicetypekitchooser.h +++ /dev/null @@ -1,56 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2015 Klarälvdalens Datakonsult AB, a KDAB Group company -** Contact: info@kdab.com -** -** 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 The Qt Company. For licensing terms and -** conditions see http://www.qt.io/terms-conditions. For further information -** use the contact form at http://www.qt.io/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 or version 3 as published by the Free -** Software Foundation and appearing in the file LICENSE.LGPLv21 and -** LICENSE.LGPLv3 included in the packaging of this file. Please review the -** following information to ensure the GNU Lesser General Public License -** requirements will be met: https://www.gnu.org/licenses/lgpl.html and -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, The Qt Company gives you certain additional -** rights. These rights are described in The Qt Company LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -****************************************************************************/ - -#ifndef PROJECTEXPLORER_DEVICETYPEKITCHOOSER_H -#define PROJECTEXPLORER_DEVICETYPEKITCHOOSER_H - -#include "../kitchooser.h" -#include "../projectexplorer_export.h" - -#include - -namespace ProjectExplorer { - -class PROJECTEXPLORER_EXPORT DeviceTypeKitChooser : public KitChooser -{ - Q_OBJECT -public: - explicit DeviceTypeKitChooser(Core::Id deviceType, QWidget *parent = 0); - -protected: - bool kitMatches(const Kit *k) const; - -private: - Core::Id m_deviceType; -}; - -} // namespace ProjectExplorer - -#endif // PROJECTEXPLORER_DEVICETYPEKITCHOOSER_H diff --git a/src/plugins/projectexplorer/kitchooser.cpp b/src/plugins/projectexplorer/kitchooser.cpp index b0ad5dc62e1..6dfc1eb427c 100644 --- a/src/plugins/projectexplorer/kitchooser.cpp +++ b/src/plugins/projectexplorer/kitchooser.cpp @@ -47,7 +47,10 @@ namespace ProjectExplorer { const char lastKitKey[] = "LastSelectedKit"; KitChooser::KitChooser(QWidget *parent) : - QWidget(parent) + QWidget(parent), + m_kitMatcher([](const Kit *k) { + return k->isValid(); + }) { m_chooser = new QComboBox(this); m_chooser->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed); @@ -79,11 +82,6 @@ void KitChooser::onCurrentIndexChanged(int index) emit currentIndexChanged(index); } -bool KitChooser::kitMatches(const Kit *k) const -{ - return k->isValid(); -} - QString KitChooser::kitText(const Kit *k) const { return k->displayName(); @@ -98,7 +96,7 @@ void KitChooser::populate() { m_chooser->clear(); foreach (Kit *kit, KitManager::sortKits(KitManager::kits())) { - if (kitMatches(kit)) { + if (m_kitMatcher(kit)) { m_chooser->addItem(kitText(kit), qVariantFromValue(kit->id())); m_chooser->setItemData(m_chooser->count() - 1, kitToolTip(kit), Qt::ToolTipRole); } @@ -140,6 +138,12 @@ Core::Id KitChooser::currentKitId() const return kit ? kit->id() : Core::Id(); } +void KitChooser::setKitMatcher(const KitChooser::KitMatcher &matcher) +{ + m_kitMatcher = matcher; + populate(); +} + Kit *KitChooser::kitAt(int index) const { Core::Id id = qvariant_cast(m_chooser->itemData(index)); diff --git a/src/plugins/projectexplorer/kitchooser.h b/src/plugins/projectexplorer/kitchooser.h index 571864efb77..c10e29a9a41 100644 --- a/src/plugins/projectexplorer/kitchooser.h +++ b/src/plugins/projectexplorer/kitchooser.h @@ -35,6 +35,8 @@ #include +#include + QT_BEGIN_NAMESPACE class QComboBox; class QPushButton; @@ -57,6 +59,9 @@ class PROJECTEXPLORER_EXPORT KitChooser : public QWidget void setCurrentKitId(Core::Id id); Core::Id currentKitId() const; + typedef std::function KitMatcher; + void setKitMatcher(const KitMatcher &matcher); + Kit *currentKit() const; signals: @@ -71,11 +76,11 @@ private slots: void onManageButtonClicked(); protected: - virtual bool kitMatches(const Kit *k) const; virtual QString kitText(const Kit *k) const; virtual QString kitToolTip(Kit *k) const; private: + KitMatcher m_kitMatcher; Kit *kitAt(int index) const; QComboBox *m_chooser; QPushButton *m_manageButton; diff --git a/src/plugins/projectexplorer/projectexplorer.pro b/src/plugins/projectexplorer/projectexplorer.pro index 3629c43ff93..d80732f7d5d 100644 --- a/src/plugins/projectexplorer/projectexplorer.pro +++ b/src/plugins/projectexplorer/projectexplorer.pro @@ -130,7 +130,6 @@ HEADERS += projectexplorer.h \ devicesupport/devicesettingswidget.h \ devicesupport/devicesettingspage.h \ devicesupport/devicetestdialog.h \ - devicesupport/devicetypekitchooser.h \ devicesupport/deviceusedportsgatherer.h \ devicesupport/deviceapplicationrunner.h \ devicesupport/localprocesslist.h \ @@ -272,7 +271,6 @@ SOURCES += projectexplorer.cpp \ devicesupport/devicesettingswidget.cpp \ devicesupport/devicesettingspage.cpp \ devicesupport/devicetestdialog.cpp \ - devicesupport/devicetypekitchooser.cpp \ devicesupport/deviceusedportsgatherer.cpp \ devicesupport/deviceapplicationrunner.cpp \ devicesupport/localprocesslist.cpp \ diff --git a/src/plugins/projectexplorer/projectexplorer.qbs b/src/plugins/projectexplorer/projectexplorer.qbs index f74ffdd9ed1..154a0d7280e 100644 --- a/src/plugins/projectexplorer/projectexplorer.qbs +++ b/src/plugins/projectexplorer/projectexplorer.qbs @@ -213,7 +213,6 @@ QtcPlugin { "devicesettingspage.cpp", "devicesettingspage.h", "devicesettingswidget.cpp", "devicesettingswidget.h", "devicesettingswidget.ui", "devicetestdialog.cpp", "devicetestdialog.h", "devicetestdialog.ui", - "devicetypekitchooser.cpp", "devicetypekitchooser.h", "deviceusedportsgatherer.cpp", "deviceusedportsgatherer.h", "idevice.cpp", "idevice.h", "idevicefactory.cpp", "idevicefactory.h", diff --git a/src/plugins/qnx/qnxattachdebugsupport.cpp b/src/plugins/qnx/qnxattachdebugsupport.cpp index 3bb3f271a98..4c9eb69b744 100644 --- a/src/plugins/qnx/qnxattachdebugsupport.cpp +++ b/src/plugins/qnx/qnxattachdebugsupport.cpp @@ -40,10 +40,10 @@ #include #include #include -#include #include #include #include +#include #include #include #include @@ -74,7 +74,11 @@ QnxAttachDebugSupport::QnxAttachDebugSupport(QObject *parent) void QnxAttachDebugSupport::showProcessesDialog() { - ProjectExplorer::DeviceTypeKitChooser *kitChooser = new ProjectExplorer::DeviceTypeKitChooser(Core::Id(Constants::QNX_QNX_OS_TYPE)); + auto kitChooser = new ProjectExplorer::KitChooser; + kitChooser->setKitMatcher([](const ProjectExplorer::Kit *k){ + return k->isValid() && ProjectExplorer::DeviceTypeKitInformation::deviceTypeId(k) == Core::Id(Constants::QNX_QNX_OS_TYPE); + }); + QnxAttachDebugDialog dlg(kitChooser, 0); dlg.addAcceptButton(ProjectExplorer::DeviceProcessesDialog::tr("&Attach to Process")); dlg.showAllDevices(); From b419ff48fd77db68c99bfef20a9385010cf41aea Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Mon, 20 Jul 2015 13:19:03 +0200 Subject: [PATCH 010/116] QmlDesigner: take version into account when looking up specifics Change-Id: I074a2930b5d0cfee6444ee4df6f032e06a8ecc55 Reviewed-by: Tim Jenssen --- .../qmldesigner/designercore/metainfo/nodemetainfo.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp index bc92db2ab47..5aa80b398ca 100644 --- a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp +++ b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp @@ -1121,6 +1121,11 @@ QString NodeMetaInfoPrivate::importDirectoryPath() const const QString targetPath = QDir(importPath).filePath(importInfo.path()); if (QDir(targetPath).exists()) return targetPath; + const QString targetPathVersion = QDir(importPath).filePath(importInfo.path() + + QLatin1Char('.') + + QString::number(importInfo.version().majorVersion())); + if (QDir(targetPathVersion).exists()) + return targetPathVersion; } } } From 91ad4e17bab16c3fbe26ca5207bf91c4f23994bc Mon Sep 17 00:00:00 2001 From: Daniel Teske Date: Thu, 16 Jul 2015 16:06:20 +0200 Subject: [PATCH 011/116] Android: Make library projects building skip apk packaging There are use cases for building libraries, and this makes them buildable by default. Task-number: QTCREATORBUG-14734 Task-number: QTCREATORBUG-14710 Change-Id: I36a29a8c5aa23fa21213a05e512a7bd126f00c81 Reviewed-by: BogDan Vatra --- .../qmakeandroidsupport/qmakeandroidbuildapkstep.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.cpp b/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.cpp index 8ab8089981b..27601e45bcf 100644 --- a/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.cpp +++ b/src/plugins/qmakeandroidsupport/qmakeandroidbuildapkstep.cpp @@ -207,9 +207,9 @@ bool QmakeAndroidBuildApkStep::init() return true; QString inputFile = node->singleVariableValue(QmakeProjectManager::AndroidDeploySettingsFile); - if (inputFile.isEmpty()) { // should never happen - emit addOutput(tr("Internal Error: Unknown Android deployment JSON file location."), BuildStep::ErrorMessageOutput); - return false; + if (inputFile.isEmpty()) { + m_skipBuilding = true; + return true; } QStringList arguments; From 7e7e79dedc3f0ed3a404b0dbaf5dd2643e80de88 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Tue, 14 Jul 2015 16:40:17 +0200 Subject: [PATCH 012/116] Clang: Send modified file content only once This introduces some SOFT ASSERT: "!"Got TranslationUnitDoesNotExistCommand"" in file clangbackendipcintegration.cpp, line 154 e.g. for include path completion. This will be addressed by a follow-up change. Change-Id: I97a50f5b8a44744e1379d77fc042d5e65cb191c9 Reviewed-by: Marco Bubke --- .../clangcompletionassistprocessor.cpp | 27 ++++++++++--------- .../clangcompletionassistprocessor.h | 4 +-- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp b/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp index 1e42b13f54c..2f8076802d3 100644 --- a/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp +++ b/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp @@ -302,8 +302,6 @@ static QByteArray modifyInput(QTextDocument *doc, int endOfExpression) { IAssistProposal *ClangCompletionAssistProcessor::startCompletionHelper() { - sendFileContent(Utils::projectPartIdForFile(m_interface->fileName()), QByteArray()); // TODO: Remove - ClangCompletionContextAnalyzer analyzer(m_interface.data(), m_interface->languageFeatures()); analyzer.analyze(); m_completionOperator = analyzer.completionOperator(); @@ -649,24 +647,29 @@ void ClangCompletionAssistProcessor::addCompletionItem(const QString &text, } void ClangCompletionAssistProcessor::sendFileContent(const QString &projectPartId, - const QByteArray &modifiedFileContent) + const QByteArray &customFileContent) { - const QString filePath = m_interface->fileName(); - const QByteArray unsavedContent = modifiedFileContent.isEmpty() - ? m_interface->textDocument()->toPlainText().toUtf8() - : modifiedFileContent; - const bool hasUnsavedContent = true; // TODO + const QTextDocument *textDocument = m_interface->textDocument(); + const bool hasCustomModification = !customFileContent.isEmpty(); + const bool documentIsModified = hasCustomModification || textDocument->isModified(); + // TODO: Revert custom modification after the completions + QByteArray unsavedContent; + if (documentIsModified) { + unsavedContent = hasCustomModification + ? customFileContent + : m_interface->textDocument()->toPlainText().toUtf8(); + } IpcCommunicator &ipcCommunicator = m_interface->ipcCommunicator(); ipcCommunicator.registerFilesForCodeCompletion( - {ClangBackEnd::FileContainer(filePath, + {ClangBackEnd::FileContainer(m_interface->fileName(), projectPartId, Utf8String::fromByteArray(unsavedContent), - hasUnsavedContent)}); + documentIsModified)}); } void ClangCompletionAssistProcessor::sendCompletionRequest(int position, - const QByteArray &modifiedFileContent) + const QByteArray &customFileContent) { int line, column; TextEditor::Convenience::convertPosition(m_interface->textDocument(), position, &line, &column); @@ -674,7 +677,7 @@ void ClangCompletionAssistProcessor::sendCompletionRequest(int position, const QString filePath = m_interface->fileName(); const QString projectPartId = Utils::projectPartIdForFile(filePath); - sendFileContent(projectPartId, modifiedFileContent); + sendFileContent(projectPartId, customFileContent); m_interface->ipcCommunicator().completeCode(this, filePath, line, column, projectPartId); } diff --git a/src/plugins/clangcodemodel/clangcompletionassistprocessor.h b/src/plugins/clangcodemodel/clangcompletionassistprocessor.h index b25cb5f77be..3ecbe128de6 100644 --- a/src/plugins/clangcodemodel/clangcompletionassistprocessor.h +++ b/src/plugins/clangcodemodel/clangcompletionassistprocessor.h @@ -81,8 +81,8 @@ class ClangCompletionAssistProcessor : public CppTools::CppCompletionAssistProce int order = 0, const QVariant &data = QVariant()); - void sendFileContent(const QString &projectPartId, const QByteArray &modifiedFileContent); - void sendCompletionRequest(int position, const QByteArray &modifiedFileContent); + void sendFileContent(const QString &projectPartId, const QByteArray &customFileContent); + void sendCompletionRequest(int position, const QByteArray &customFileContent); void onCompletionsAvailable(const CodeCompletions &completions); void onFunctionHintCompletionsAvailable(const CodeCompletions &completions); From c6b52267f4a7cc9b9e415dd63da4726b9403f87e Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Tue, 14 Jul 2015 19:01:32 +0200 Subject: [PATCH 013/116] Clang: Fix sending (un)register translation unit Handle the following use cases: 1. Editor is opened --> Register file at backend. 2. Close editor for which a project part exists --> Unregister file with project part. 3. Close editor for which no project part exists (anymore) --> Unregister file with empty/default project part. Change-Id: I2b253004a920cccef989876538ab552eacf6b45c Reviewed-by: Marco Bubke --- .../clangeditordocumentparser.cpp | 3 + .../clangeditordocumentprocessor.cpp | 65 ++++++++++++++++--- .../clangeditordocumentprocessor.h | 10 +++ .../test/clangcodecompletion_test.cpp | 39 ++++++++++- .../cpptools/baseeditordocumentparser.cpp | 2 +- .../cpptools/baseeditordocumentparser.h | 1 + 6 files changed, 106 insertions(+), 14 deletions(-) diff --git a/src/plugins/clangcodemodel/clangeditordocumentparser.cpp b/src/plugins/clangcodemodel/clangeditordocumentparser.cpp index c4897befbcb..694de45f206 100644 --- a/src/plugins/clangcodemodel/clangeditordocumentparser.cpp +++ b/src/plugins/clangcodemodel/clangeditordocumentparser.cpp @@ -86,6 +86,9 @@ ClangEditorDocumentParser::ClangEditorDocumentParser(const QString &filePath) : BaseEditorDocumentParser(filePath) , m_marker(new ClangCodeModel::SemanticMarker) { + BaseEditorDocumentParser::Configuration config = configuration(); + config.stickToPreviousProjectPart = false; + setConfiguration(config); } void ClangEditorDocumentParser::updateHelper(const BaseEditorDocumentParser::InMemoryInfo &info) diff --git a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp index 3148cefe8e6..7cb736f08ed 100644 --- a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp +++ b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp @@ -112,6 +112,9 @@ ClangEditorDocumentProcessor::ClangEditorDocumentProcessor( connect(&m_builtinProcessor, &CppTools::BuiltinEditorDocumentProcessor::semanticInfoUpdated, this, &ClangEditorDocumentProcessor::semanticInfoUpdated); + connect(CppTools::CppModelManager::instance(), &CppTools::CppModelManager::projectPartsRemoved, + this, &ClangEditorDocumentProcessor::onProjectPartsRemoved); + m_semanticHighlighter.setHighlightingRunner( [this]() -> QFuture { const int firstLine = 1; @@ -129,16 +132,11 @@ ClangEditorDocumentProcessor::~ClangEditorDocumentProcessor() m_parserWatcher.cancel(); m_parserWatcher.waitForFinished(); - const CppTools::ProjectPart::Ptr projectPart = m_parser.projectPart(); - QTC_ASSERT(projectPart, return); - - QString projectPartId; - if (Utils::isProjectPartValid(projectPart)) - projectPartId = projectPart->id(); // OK, Project Part is still loaded - - QTC_ASSERT(m_modelManagerSupport, return); - m_modelManagerSupport->ipcCommunicator().unregisterFilesForCodeCompletion( - {ClangBackEnd::FileContainer(filePath(), projectPartId)}); + if (m_projectPart) { + QTC_ASSERT(m_modelManagerSupport, return); + m_modelManagerSupport->ipcCommunicator().unregisterFilesForCodeCompletion( + {ClangBackEnd::FileContainer(filePath(), m_projectPart->id())}); + } } void ClangEditorDocumentProcessor::run() @@ -192,6 +190,25 @@ bool ClangEditorDocumentProcessor::isParserRunning() const return m_parserWatcher.isRunning(); } +CppTools::ProjectPart::Ptr ClangEditorDocumentProcessor::projectPart() const +{ + return m_projectPart; +} + +ClangEditorDocumentProcessor *ClangEditorDocumentProcessor::get(const QString &filePath) +{ + return qobject_cast(BaseEditorDocumentProcessor::get(filePath)); +} + +void ClangEditorDocumentProcessor::updateProjectPartAndTranslationUnitForCompletion() +{ + const CppTools::ProjectPart::Ptr projectPart = m_parser.projectPart(); + QTC_ASSERT(projectPart, return); + + updateTranslationUnitForCompletion(*projectPart.data()); + m_projectPart = projectPart; +} + void ClangEditorDocumentProcessor::onParserFinished() { if (revision() != m_parserRevision) @@ -208,6 +225,34 @@ void ClangEditorDocumentProcessor::onParserFinished() // Run semantic highlighter m_semanticHighlighter.run(); + + updateProjectPartAndTranslationUnitForCompletion(); +} + +void ClangEditorDocumentProcessor::onProjectPartsRemoved(const QStringList &projectPartIds) +{ + if (m_projectPart && projectPartIds.contains(m_projectPart->id())) + m_projectPart.clear(); +} + +void ClangEditorDocumentProcessor::updateTranslationUnitForCompletion( + CppTools::ProjectPart &projectPart) +{ + QTC_ASSERT(m_modelManagerSupport, return); + IpcCommunicator &ipcCommunicator = m_modelManagerSupport->ipcCommunicator(); + + if (m_projectPart) { + if (projectPart.id() != m_projectPart->id()) { + auto container1 = {ClangBackEnd::FileContainer(filePath(), m_projectPart->id())}; + ipcCommunicator.unregisterFilesForCodeCompletion(container1); + + auto container2 = {ClangBackEnd::FileContainer(filePath(), projectPart.id())}; + ipcCommunicator.registerFilesForCodeCompletion(container2); + } + } else { + auto container = {ClangBackEnd::FileContainer(filePath(), projectPart.id())}; + ipcCommunicator.registerFilesForCodeCompletion(container); + } } } // namespace Internal diff --git a/src/plugins/clangcodemodel/clangeditordocumentprocessor.h b/src/plugins/clangcodemodel/clangeditordocumentprocessor.h index d62ff455d12..4d8564685ca 100644 --- a/src/plugins/clangcodemodel/clangeditordocumentprocessor.h +++ b/src/plugins/clangcodemodel/clangeditordocumentprocessor.h @@ -63,13 +63,23 @@ class ClangEditorDocumentProcessor : public CppTools::BaseEditorDocumentProcesso CPlusPlus::Snapshot snapshot() override; bool isParserRunning() const override; + CppTools::ProjectPart::Ptr projectPart() const; + +public: + static ClangEditorDocumentProcessor *get(const QString &filePath); + private slots: void onParserFinished(); + void onProjectPartsRemoved(const QStringList &projectPartIds); private: + void updateProjectPartAndTranslationUnitForCompletion(); + void updateTranslationUnitForCompletion(CppTools::ProjectPart &projectPart); + QPointer m_modelManagerSupport; ClangEditorDocumentParser m_parser; + CppTools::ProjectPart::Ptr m_projectPart; QFutureWatcher m_parserWatcher; unsigned m_parserRevision; diff --git a/src/plugins/clangcodemodel/test/clangcodecompletion_test.cpp b/src/plugins/clangcodemodel/test/clangcodecompletion_test.cpp index 757ebe54b5b..6d42978eb20 100644 --- a/src/plugins/clangcodemodel/test/clangcodecompletion_test.cpp +++ b/src/plugins/clangcodemodel/test/clangcodecompletion_test.cpp @@ -34,6 +34,7 @@ #include "../clangcompletionassistinterface.h" #include "../clangmodelmanagersupport.h" +#include #include #include @@ -476,11 +477,13 @@ class OpenEditorAtCursorPosition OpenEditorAtCursorPosition(const TestDocument &testDocument); ~OpenEditorAtCursorPosition(); // Close editor - bool succeeded() const { return m_editor; } + bool succeeded() const { return m_editor && m_backendIsNotified; } + bool waitUntilBackendIsNotified(int timeout = 10000); TextEditor::BaseTextEditor *editor() const { return m_editor; } private: TextEditor::BaseTextEditor *m_editor; + bool m_backendIsNotified = false; }; OpenEditorAtCursorPosition::OpenEditorAtCursorPosition(const TestDocument &testDocument) @@ -490,6 +493,8 @@ OpenEditorAtCursorPosition::OpenEditorAtCursorPosition(const TestDocument &testD QTC_CHECK(m_editor); if (m_editor && testDocument.hasValidCursorPosition()) m_editor->setCursorPosition(testDocument.cursorPosition); + m_backendIsNotified = waitUntilBackendIsNotified(); + QTC_CHECK(m_backendIsNotified); } OpenEditorAtCursorPosition::~OpenEditorAtCursorPosition() @@ -498,6 +503,30 @@ OpenEditorAtCursorPosition::~OpenEditorAtCursorPosition() Core::EditorManager::closeEditor(m_editor, /* askAboutModifiedEditors= */ false); } +bool OpenEditorAtCursorPosition::waitUntilBackendIsNotified(int timeout) +{ + QTC_ASSERT(m_editor, return false); + + const QString filePath = m_editor->document()->filePath().toString(); + + QTime time; + time.start(); + + forever { + if (time.elapsed() > timeout) + return false; + + const auto *processor = ClangEditorDocumentProcessor::get(filePath); + if (processor && processor->projectPart()) + return true; + + QCoreApplication::processEvents(); + QThread::msleep(20); + } + + return false; +} + CppTools::ProjectPart::Ptr createProjectPart(const QStringList &files, const QString &defines) { @@ -1036,23 +1065,27 @@ void ClangCodeCompletionTest::testUpdateBackendAfterRestart() CppTools::Tests::ProjectOpenerAndCloser projectManager; const CppTools::ProjectInfo projectInfo = projectManager.open(projectFilePath, true); QVERIFY(projectInfo.isValid()); + QVERIFY(monitorGeneratedUiFile.waitUntilGenerated()); // ...and a file of the project const QString completionFile = testDir.absolutePath("mainwindow.cpp"); const TestDocument testDocument = TestDocument::fromExistingFile(completionFile); QVERIFY(testDocument.isCreatedAndHasValidCursorPosition()); OpenEditorAtCursorPosition openSource(testDocument); QVERIFY(openSource.succeeded()); - QVERIFY(monitorGeneratedUiFile.waitUntilGenerated()); // Check commands that would have been sent QVERIFY(compare(LogOutput(spy.senderLog), LogOutput( + "RegisterTranslationUnitForCodeCompletionCommand\n" + " Path: myheader.h ProjectPart: \n" "RegisterProjectPartsForCodeCompletionCommand\n" " ProjectPartContainer id: qt-widgets-app.pro qt-widgets-app\n" "RegisterTranslationUnitForCodeCompletionCommand\n" + " Path: ui_mainwindow.h ProjectPart: \n" + "RegisterTranslationUnitForCodeCompletionCommand\n" " Path: myheader.h ProjectPart: \n" "RegisterTranslationUnitForCodeCompletionCommand\n" - " Path: ui_mainwindow.h ProjectPart: \n" + " Path: mainwindow.cpp ProjectPart: qt-widgets-app.pro qt-widgets-app\n" ))); spy.senderLog.clear(); diff --git a/src/plugins/cpptools/baseeditordocumentparser.cpp b/src/plugins/cpptools/baseeditordocumentparser.cpp index 52fd64e1135..314b7f98abe 100644 --- a/src/plugins/cpptools/baseeditordocumentparser.cpp +++ b/src/plugins/cpptools/baseeditordocumentparser.cpp @@ -126,7 +126,7 @@ ProjectPart::Ptr BaseEditorDocumentParser::determineProjectPart(const QString &f CppModelManager *cmm = CppModelManager::instance(); QList projectParts = cmm->projectPart(filePath); if (projectParts.isEmpty()) { - if (projectPart) + if (projectPart && config.stickToPreviousProjectPart) // File is not directly part of any project, but we got one before. We will re-use it, // because re-calculating this can be expensive when the dependency table is big. return projectPart; diff --git a/src/plugins/cpptools/baseeditordocumentparser.h b/src/plugins/cpptools/baseeditordocumentparser.h index b9c8ecaadcd..05f210716d9 100644 --- a/src/plugins/cpptools/baseeditordocumentparser.h +++ b/src/plugins/cpptools/baseeditordocumentparser.h @@ -47,6 +47,7 @@ class CPPTOOLS_EXPORT BaseEditorDocumentParser : public QObject static BaseEditorDocumentParser *get(const QString &filePath); struct Configuration { + bool stickToPreviousProjectPart = true; bool usePrecompiledHeaders = false; QByteArray editorDefines; ProjectPart::Ptr manuallySetProjectPart; From bf6ce59fd3b4800e603460bf23626d753b4d91f2 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Mon, 20 Jul 2015 14:44:20 +0200 Subject: [PATCH 014/116] Clang: Fix occasional hang in ~SemanticHighlighter A code path existed for which QFutureInterface::reportFinished() was not called. Change-Id: I968c6b8cc92b9bfd49570405502da94bda8c7b56 Reviewed-by: Marco Bubke --- src/plugins/clangcodemodel/cppcreatemarkers.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/plugins/clangcodemodel/cppcreatemarkers.cpp b/src/plugins/clangcodemodel/cppcreatemarkers.cpp index 5a56b1e2fb2..a7518b355c3 100644 --- a/src/plugins/clangcodemodel/cppcreatemarkers.cpp +++ b/src/plugins/clangcodemodel/cppcreatemarkers.cpp @@ -32,6 +32,7 @@ #include "cppcreatemarkers.h" #include +#include #include #include @@ -77,6 +78,9 @@ CreateMarkers::~CreateMarkers() void CreateMarkers::run() { QMutexLocker lock(m_marker->mutex()); + + ::Utils::ExecuteOnDestruction reportFinishedOnDestruction([this]() { reportFinished(); }); + if (isCanceled()) return; @@ -86,23 +90,18 @@ void CreateMarkers::run() m_usages.clear(); - if (isCanceled()) { - reportFinished(); + if (isCanceled()) return; - } const QList markers = m_marker->sourceMarkersInRange(m_firstLine, m_lastLine); foreach (const ClangCodeModel::SourceMarker &m, markers) addUse(SourceMarker(m.location().line(), m.location().column(), m.length(), m.kind())); - if (isCanceled()) { - reportFinished(); + if (isCanceled()) return; - } flush(); - reportFinished(); qCDebug(log) << "Creating markers took" << t.elapsed() << "ms in total."; } From 7b8f5d98153b7e8562106376ffe3600d96ceb583 Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Wed, 15 Jul 2015 16:25:04 +0200 Subject: [PATCH 015/116] Clang: Improve conversion of QHash to QList Change-Id: I5bea89d9a432240a131311b5fed537a46b3be967 Reviewed-by: Nikolai Kosjar --- .../clangcodemodel/clangcompletionassistprocessor.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp b/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp index 2f8076802d3..cc8b9d4ed1d 100644 --- a/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp +++ b/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp @@ -72,8 +72,6 @@ QList toAssistProposalItems(const CodeCompletions &complet { static CPlusPlus::Icons m_icons; // de-deduplicate - QList result; - bool signalCompletion = false; // TODO bool slotCompletion = false; // TODO @@ -179,10 +177,11 @@ QList toAssistProposalItems(const CodeCompletions &complet } } - foreach (ClangAssistProposalItem *item, items.values()) - result.append(item); + QList results; + results.reserve(items.size()); + std::copy(items.cbegin(), items.cend(), std::back_inserter(results)); - return result; + return results; } bool isFunctionHintLikeCompletion(CodeCompletion::Kind kind) From 91ee695c713c8235a09bc91df80709fb476e3ee6 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Mon, 20 Jul 2015 13:24:06 +0200 Subject: [PATCH 016/116] Clang: Extract a function Change-Id: I3041e019c2c65d9d988d31c47823e29955cd1c51 Reviewed-by: Marco Bubke --- .../clangcompletionassistprocessor.cpp | 27 +++++++++++-------- .../clangcompletionassistprocessor.h | 6 +++++ 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp b/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp index cc8b9d4ed1d..9e206a0abef 100644 --- a/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp +++ b/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp @@ -645,26 +645,31 @@ void ClangCompletionAssistProcessor::addCompletionItem(const QString &text, m_completions.append(item); } +ClangCompletionAssistProcessor::UnsavedFileContentInfo +ClangCompletionAssistProcessor::unsavedFileContent(const QByteArray &customFileContent) const +{ + const bool hasCustomModification = !customFileContent.isEmpty(); + + UnsavedFileContentInfo info; + info.isDocumentModified = hasCustomModification || m_interface->textDocument()->isModified(); + info.unsavedContent = hasCustomModification + ? customFileContent + : m_interface->textDocument()->toPlainText().toUtf8(); + return info; +} + void ClangCompletionAssistProcessor::sendFileContent(const QString &projectPartId, const QByteArray &customFileContent) { - const QTextDocument *textDocument = m_interface->textDocument(); - const bool hasCustomModification = !customFileContent.isEmpty(); - const bool documentIsModified = hasCustomModification || textDocument->isModified(); // TODO: Revert custom modification after the completions - QByteArray unsavedContent; - if (documentIsModified) { - unsavedContent = hasCustomModification - ? customFileContent - : m_interface->textDocument()->toPlainText().toUtf8(); - } + const UnsavedFileContentInfo info = unsavedFileContent(customFileContent); IpcCommunicator &ipcCommunicator = m_interface->ipcCommunicator(); ipcCommunicator.registerFilesForCodeCompletion( {ClangBackEnd::FileContainer(m_interface->fileName(), projectPartId, - Utf8String::fromByteArray(unsavedContent), - documentIsModified)}); + Utf8String::fromByteArray(info.unsavedContent), + info.isDocumentModified)}); } void ClangCompletionAssistProcessor::sendCompletionRequest(int position, diff --git a/src/plugins/clangcodemodel/clangcompletionassistprocessor.h b/src/plugins/clangcodemodel/clangcompletionassistprocessor.h index 3ecbe128de6..89c54efe673 100644 --- a/src/plugins/clangcodemodel/clangcompletionassistprocessor.h +++ b/src/plugins/clangcodemodel/clangcompletionassistprocessor.h @@ -81,6 +81,12 @@ class ClangCompletionAssistProcessor : public CppTools::CppCompletionAssistProce int order = 0, const QVariant &data = QVariant()); + struct UnsavedFileContentInfo { + QByteArray unsavedContent; + bool isDocumentModified = false; + }; + UnsavedFileContentInfo unsavedFileContent(const QByteArray &customFileContent) const; + void sendFileContent(const QString &projectPartId, const QByteArray &customFileContent); void sendCompletionRequest(int position, const QByteArray &customFileContent); From 8938addc5ca6b74e602fcb2496275cb8554376ee Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Mon, 20 Jul 2015 12:09:32 +0200 Subject: [PATCH 017/116] Clang: Remove QTC_ASSERT If an editor is opened, the semantic highlighter is triggered twice: 1) From ClangEditorDocumentProcessor::onParserFinished 2) From CppEditorDocument::applyFontSettings Caller 1) is expected, it creates an m_unit. However, if threads are scheduled differently, the semantic highlighter triggered from 2) will encounter an invalid m_unit. I'm not sure whether the call to 2) is correct at all. Change-Id: Ia6ff2852e7d38418ebb01edc3eca3680fac1820a Reviewed-by: Marco Bubke --- src/plugins/clangcodemodel/semanticmarker.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/plugins/clangcodemodel/semanticmarker.cpp b/src/plugins/clangcodemodel/semanticmarker.cpp index 71a5abc03d6..cb5d0b71f43 100644 --- a/src/plugins/clangcodemodel/semanticmarker.cpp +++ b/src/plugins/clangcodemodel/semanticmarker.cpp @@ -333,9 +333,8 @@ QList SemanticMarker::sourceMarkersInRange(unsigned firstLine, unsigned lastLine) { QList result; - QTC_ASSERT(m_unit, return result); - if (!m_unit->isLoaded()) + if (!m_unit || !m_unit->isLoaded()) return result; // Highlighting called asynchronously, and a few lines at the end can be deleted for this time. From c267a34b09352854d210d92d8feb122e6162aed2 Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Wed, 15 Jul 2015 17:01:50 +0200 Subject: [PATCH 018/116] Clang: Use the CodeCompletion getter directly Casting from a Qvariant is expensive and it happens here very often. Change-Id: If524412f314bb8ac9e9e5e4335c7e32ff7a9ce40 Reviewed-by: Nikolai Kosjar --- .../clangcodemodel/clangassistproposalitem.cpp | 14 ++++---------- .../clangcodemodel/clangassistproposalitem.h | 7 ++++--- .../clangcompletionassistprocessor.cpp | 2 +- 3 files changed, 9 insertions(+), 14 deletions(-) diff --git a/src/plugins/clangcodemodel/clangassistproposalitem.cpp b/src/plugins/clangcodemodel/clangassistproposalitem.cpp index 41cb7702075..474d2d2b6ef 100644 --- a/src/plugins/clangcodemodel/clangassistproposalitem.cpp +++ b/src/plugins/clangcodemodel/clangassistproposalitem.cpp @@ -54,8 +54,6 @@ bool ClangAssistProposalItem::prematurelyApplies(const QChar &typedChar) const applies = QString::fromLatin1("(,").contains(typedChar); else if (m_completionOperator == T_STRING_LITERAL || m_completionOperator == T_ANGLE_STRING_LITERAL) applies = (typedChar == QLatin1Char('/')) && text().endsWith(QLatin1Char('/')); - else if (!isCodeCompletion()) - applies = (typedChar == QLatin1Char('(')); /* && data().canConvert()*/ //### else if (codeCompletion().completionKind() == CodeCompletion::ObjCMessageCompletionKind) applies = QString::fromLatin1(";.,").contains(typedChar); else @@ -247,18 +245,14 @@ void ClangAssistProposalItem::addOverload(const CodeCompletion &ccr) m_overloads.append(ccr); } -CodeCompletion ClangAssistProposalItem::codeCompletion() const +void ClangAssistProposalItem::setCodeCompletion(const CodeCompletion &codeCompletion) { - const QVariant &value = data(); - if (value.canConvert()) - return value.value(); - else - return CodeCompletion(); + m_codeCompletion = codeCompletion; } -bool ClangAssistProposalItem::isCodeCompletion() const +const ClangBackEnd::CodeCompletion &ClangAssistProposalItem::codeCompletion() const { - return data().canConvert(); + return m_codeCompletion; } } // namespace Internal diff --git a/src/plugins/clangcodemodel/clangassistproposalitem.h b/src/plugins/clangcodemodel/clangassistproposalitem.h index b636f6d81b0..3aedd8c0b7a 100644 --- a/src/plugins/clangcodemodel/clangassistproposalitem.h +++ b/src/plugins/clangcodemodel/clangassistproposalitem.h @@ -52,13 +52,14 @@ class ClangAssistProposalItem : public TextEditor::AssistProposalItem bool isOverloaded() const; void addOverload(const ClangBackEnd::CodeCompletion &ccr); - ClangBackEnd::CodeCompletion codeCompletion() const; + void setCodeCompletion(const ClangBackEnd::CodeCompletion &codeCompletion); + const ClangBackEnd::CodeCompletion &codeCompletion() const; - bool isCodeCompletion() const; private: + ClangBackEnd::CodeCompletion m_codeCompletion; + QList m_overloads; unsigned m_completionOperator; mutable QChar m_typedChar; - QList m_overloads; }; } // namespace Internal diff --git a/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp b/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp index 9e206a0abef..38510d5d601 100644 --- a/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp +++ b/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp @@ -103,7 +103,7 @@ QList toAssistProposalItems(const CodeCompletions &complet if (ccr.completionKind() == CodeCompletion::KeywordCompletionKind) item->setDetail(CompletionChunksToTextConverter::convertToToolTip(ccr.chunks())); - item->setData(QVariant::fromValue(ccr)); + item->setCodeCompletion(ccr); } // FIXME: show the effective accessebility instead of availability From ff63fd113a4ff6bc91a2fbb985fbd99254a6cdef Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 14 Jul 2015 16:52:28 +0200 Subject: [PATCH 019/116] Debugger: Quote strings in QmlEngine Task-number: QTCREATORBUG-5670 Change-Id: I1cfad65042369d9e34c19dc4a7f00a37dbe6fed4 Reviewed-by: Niels Weber Reviewed-by: Christian Stenger --- src/plugins/debugger/qml/qmlengine.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/plugins/debugger/qml/qmlengine.cpp b/src/plugins/debugger/qml/qmlengine.cpp index 735840fee12..98a11f5419c 100644 --- a/src/plugins/debugger/qml/qmlengine.cpp +++ b/src/plugins/debugger/qml/qmlengine.cpp @@ -1677,8 +1677,9 @@ QmlV8ObjectData QmlEnginePrivate::extractData(const QVariant &data) const objectData.value = dataMap.value(_(VALUE)); } else if (type == _("string")) { + QLatin1Char quote('"'); objectData.type = QByteArray("string"); - objectData.value = dataMap.value(_(VALUE)); + objectData.value = QString(quote + dataMap.value(_(VALUE)).toString() + quote); } else if (type == _("object")) { objectData.type = QByteArray("object"); From db80d20f30a6fa4973c849fca10b4e6040ecc646 Mon Sep 17 00:00:00 2001 From: hjk Date: Fri, 17 Jul 2015 16:33:25 +0200 Subject: [PATCH 020/116] Debugger: Restrict LocationMark dragging ... to engines that actually support JumpToLine and make it work in disassembler views. Change-Id: I10368ea719587caa7c4f33665eff57c2bf300d84 Reviewed-by: Christian Stenger --- src/plugins/debugger/debuggerengine.cpp | 39 ++++++++++------------ src/plugins/debugger/debuggerengine.h | 13 ++++++++ src/plugins/debugger/debuggerplugin.cpp | 31 ++++------------- src/plugins/debugger/disassembleragent.cpp | 20 +++++------ src/plugins/debugger/sourceutils.cpp | 17 ++++++++++ src/plugins/debugger/sourceutils.h | 10 +++++- 6 files changed, 70 insertions(+), 60 deletions(-) diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp index 96638cef077..6c22b15b103 100644 --- a/src/plugins/debugger/debuggerengine.cpp +++ b/src/plugins/debugger/debuggerengine.cpp @@ -46,6 +46,7 @@ #include "gdb/gdbengine.h" // REMOVE #include "registerhandler.h" #include "sourcefileshandler.h" +#include "sourceutils.h" #include "stackhandler.h" #include "terminal.h" #include "threadshandler.h" @@ -134,28 +135,25 @@ Location::Location(const StackFrame &frame, bool marker) } -class LocationMark : public TextMark +LocationMark::LocationMark(DebuggerEngine *engine, const QString &file, int line) + : TextMark(file, line, Constants::TEXT_MARK_CATEGORY_LOCATION), m_engine(engine) { -public: - LocationMark(DebuggerEngine *engine, const QString &file, int line) - : TextMark(file, line, Constants::TEXT_MARK_CATEGORY_LOCATION), m_engine(engine) - {} + setIcon(Internal::locationMarkIcon()); + setPriority(TextMark::HighPriority); +} -private: - bool isDraggable() const { return true; } +bool LocationMark::isDraggable() const +{ + return m_engine->hasCapability(JumpToLineCapability); +} - void dragToLine(int line) - { - if (m_engine) { - ContextData data; - data.fileName = fileName(); - data.lineNumber = line; - m_engine->executeJumpToLine(data); - } +void LocationMark::dragToLine(int line) +{ + if (m_engine) { + if (BaseTextEditor *textEditor = BaseTextEditor::currentTextEditor()) + m_engine->executeJumpToLine(getLocationContext(textEditor->textDocument(), line)); } - - QPointer m_engine; -}; +} ////////////////////////////////////////////////////////////////////// // @@ -632,11 +630,8 @@ void DebuggerEngine::gotoLocation(const Location &loc) if (newEditor) editor->document()->setProperty(Constants::OPENED_BY_DEBUGGER, true); - if (loc.needsMarker()) { + if (loc.needsMarker()) d->m_locationMark.reset(new LocationMark(this, file, line)); - d->m_locationMark->setIcon(Internal::locationMarkIcon()); - d->m_locationMark->setPriority(TextMark::HighPriority); - } //qDebug() << "MEMORY: " << d->m_memoryAgent.hasVisibleEditor(); } diff --git a/src/plugins/debugger/debuggerengine.h b/src/plugins/debugger/debuggerengine.h index c830a0ded35..e6625fc1dc3 100644 --- a/src/plugins/debugger/debuggerengine.h +++ b/src/plugins/debugger/debuggerengine.h @@ -36,6 +36,7 @@ #include "debuggerstartparameters.h" #include +#include #include #include @@ -446,6 +447,18 @@ class DebuggerEngine : public QObject DebuggerEnginePrivate *d; }; +class LocationMark : public TextEditor::TextMark +{ +public: + LocationMark(DebuggerEngine *engine, const QString &file, int line); + +private: + bool isDraggable() const; + void dragToLine(int line); + + QPointer m_engine; +}; + DebuggerEngine *createEngine(DebuggerEngineType et, const DebuggerRunParameters &rp, QStringList *errors); DebuggerRunControl *createAndScheduleRun(const DebuggerRunParameters &rp, const ProjectExplorer::Kit *kit); diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp index a79bef2e8c5..95049cb16f8 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -552,25 +552,6 @@ static Kit *findUniversalCdbKit() return KitManager::find(cdbMatcher()); } -static bool currentTextEditorPosition(ContextData *data) -{ - BaseTextEditor *textEditor = BaseTextEditor::currentTextEditor(); - if (!textEditor) - return false; - const TextDocument *document = textEditor->textDocument(); - QTC_ASSERT(document, return false); - data->fileName = document->filePath().toString(); - if (document->property(Constants::OPENED_WITH_DISASSEMBLY).toBool()) { - int lineNumber = textEditor->currentLine(); - QString line = textEditor->textDocument()->plainText() - .section(QLatin1Char('\n'), lineNumber - 1, lineNumber - 1); - data->address = DisassemblerLine::addressFromDisassemblyLine(line); - } else { - data->lineNumber = textEditor->currentLine(); - } - return true; -} - /////////////////////////////////////////////////////////////////////// // // DebuggerPluginPrivate @@ -848,17 +829,17 @@ public slots: void handleExecJumpToLine() { currentEngine()->resetLocation(); - ContextData data; - if (currentTextEditorPosition(&data)) - currentEngine()->executeJumpToLine(data); + if (BaseTextEditor *textEditor = BaseTextEditor::currentTextEditor()) + currentEngine()->executeJumpToLine(getLocationContext(textEditor->textDocument(), + textEditor->currentLine())); } void handleExecRunToLine() { currentEngine()->resetLocation(); - ContextData data; - if (currentTextEditorPosition(&data)) - currentEngine()->executeRunToLine(data); + if (BaseTextEditor *textEditor = BaseTextEditor::currentTextEditor()) + currentEngine()->executeRunToLine(getLocationContext(textEditor->textDocument(), + textEditor->currentLine())); } void handleExecRunToSelectedFunction() diff --git a/src/plugins/debugger/disassembleragent.cpp b/src/plugins/debugger/disassembleragent.cpp index a7df1f215ec..e6f5632ff7c 100644 --- a/src/plugins/debugger/disassembleragent.cpp +++ b/src/plugins/debugger/disassembleragent.cpp @@ -98,7 +98,7 @@ typedef QPair CacheEntry; class DisassemblerAgentPrivate { public: - DisassemblerAgentPrivate(); + DisassemblerAgentPrivate(DebuggerEngine *engine); ~DisassemblerAgentPrivate(); void configureMimeType(); DisassemblerLines contentsAtCurrentLocation() const; @@ -107,22 +107,20 @@ class DisassemblerAgentPrivate QPointer document; Location location; QPointer engine; - TextMark locationMark; + LocationMark locationMark; QList breakpointMarks; QList cache; QString mimeType; bool resetLocationScheduled; }; -DisassemblerAgentPrivate::DisassemblerAgentPrivate() +DisassemblerAgentPrivate::DisassemblerAgentPrivate(DebuggerEngine *engine) : document(0), - locationMark(QString(), 0, Constants::TEXT_MARK_CATEGORY_LOCATION), + engine(engine), + locationMark(engine, QString(), 0), mimeType(_("text/x-qtcreator-generic-asm")), resetLocationScheduled(false) -{ - locationMark.setIcon(Internal::locationMarkIcon()); - locationMark.setPriority(TextMark::HighPriority); -} +{} DisassemblerAgentPrivate::~DisassemblerAgentPrivate() { @@ -157,10 +155,8 @@ DisassemblerLines DisassemblerAgentPrivate::contentsAtCurrentLocation() const */ DisassemblerAgent::DisassemblerAgent(DebuggerEngine *engine) - : QObject(0), d(new DisassemblerAgentPrivate) -{ - d->engine = engine; -} + : d(new DisassemblerAgentPrivate(engine)) +{} DisassemblerAgent::~DisassemblerAgent() { diff --git a/src/plugins/debugger/sourceutils.cpp b/src/plugins/debugger/sourceutils.cpp index e70696ccc55..5da06340b40 100644 --- a/src/plugins/debugger/sourceutils.cpp +++ b/src/plugins/debugger/sourceutils.cpp @@ -30,6 +30,9 @@ #include "sourceutils.h" +#include "debuggerinternalconstants.h" +#include "debuggerengine.h" +#include "disassemblerlines.h" #include "watchdata.h" #include "watchutils.h" @@ -333,5 +336,19 @@ QString fixCppExpression(const QString &expIn) return removeObviousSideEffects(exp); } +ContextData getLocationContext(TextDocument *document, int lineNumber) +{ + ContextData data; + QTC_ASSERT(document, return data); + data.fileName = document->filePath().toString(); + if (document->property(Constants::OPENED_WITH_DISASSEMBLY).toBool()) { + QString line = document->plainText().section(QLatin1Char('\n'), lineNumber - 1, lineNumber - 1); + data.address = DisassemblerLine::addressFromDisassemblyLine(line); + } else { + data.lineNumber = lineNumber; + } + return data; +} + } // namespace Internal } // namespace Debugger diff --git a/src/plugins/debugger/sourceutils.h b/src/plugins/debugger/sourceutils.h index 9d3d50be97e..862ecfc9eb2 100644 --- a/src/plugins/debugger/sourceutils.h +++ b/src/plugins/debugger/sourceutils.h @@ -33,12 +33,18 @@ #include -namespace TextEditor { class TextEditorWidget; } +namespace TextEditor { +class TextDocument; +class TextEditorWidget; +} + namespace CPlusPlus { class Snapshot; } namespace Debugger { namespace Internal { +class ContextData; + // Editor tooltip support QString cppExpressionAt(TextEditor::TextEditorWidget *editorWidget, int pos, int *line, int *column, QString *function = 0, @@ -53,6 +59,8 @@ bool getUninitializedVariables(const CPlusPlus::Snapshot &snapshot, const QString &function, const QString &file, int line, QStringList *uninitializedVariables); +ContextData getLocationContext(TextEditor::TextDocument *document, int lineNumber); + } // namespace Internal } // namespace Debugger From 6736331421824b3995dc188c14238d45ecee89c1 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Fri, 17 Jul 2015 14:33:18 +0200 Subject: [PATCH 021/116] String fixes Change-Id: If4fa56d283669561f61323b3ee620f6d9a7ca1b1 Reviewed-by: hjk Reviewed-by: Friedemann Kleint --- src/plugins/clangcodemodel/test/qt-widgets-app/mainwindow.ui | 4 ---- src/plugins/debugger/commonoptionspage.cpp | 2 +- src/plugins/texteditor/basefilefind.cpp | 2 +- 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/plugins/clangcodemodel/test/qt-widgets-app/mainwindow.ui b/src/plugins/clangcodemodel/test/qt-widgets-app/mainwindow.ui index 6050363fa71..f6ca1871f3f 100644 --- a/src/plugins/clangcodemodel/test/qt-widgets-app/mainwindow.ui +++ b/src/plugins/clangcodemodel/test/qt-widgets-app/mainwindow.ui @@ -9,16 +9,12 @@ 300 - - MainWindow - - diff --git a/src/plugins/debugger/commonoptionspage.cpp b/src/plugins/debugger/commonoptionspage.cpp index 7b1c8275fc3..2e7e17ea196 100644 --- a/src/plugins/debugger/commonoptionspage.cpp +++ b/src/plugins/debugger/commonoptionspage.cpp @@ -125,7 +125,7 @@ CommonOptionsPageWidget::CommonOptionsPageWidget checkBoxBringToForegroundOnInterrrupt->setText(tr("Bring Qt Creator to foreground when application interrupts")); checkBoxShowQmlObjectTree = new QCheckBox(behaviorBox); - checkBoxShowQmlObjectTree->setToolTip(tr("Shows QML object tree in Locals & Expressions when connected and not stepping.")); + checkBoxShowQmlObjectTree->setToolTip(tr("Shows QML object tree in Locals and Expressions when connected and not stepping.")); checkBoxShowQmlObjectTree->setText(tr("Show QML object tree")); checkBoxBreakpointsFullPath = new QCheckBox(behaviorBox); diff --git a/src/plugins/texteditor/basefilefind.cpp b/src/plugins/texteditor/basefilefind.cpp index 49bf4f4b913..0bbdf16d9d5 100644 --- a/src/plugins/texteditor/basefilefind.cpp +++ b/src/plugins/texteditor/basefilefind.cpp @@ -210,7 +210,7 @@ void BaseFileFind::doReplace(const QString &text, QStringList files = replaceAll(text, items, preserveCase); if (!files.isEmpty()) { Utils::FadingIndicator::showText(ICore::mainWindow(), - tr("%1 occurrences replaced.").arg(items.size()), + tr("%n occurrences replaced.", nullptr, items.size()), Utils::FadingIndicator::SmallText); DocumentManager::notifyFilesChangedInternally(files); SearchResultWindow::instance()->hide(); From e5f76153b910fe5e6a1eb9f2f4e98f39afa80500 Mon Sep 17 00:00:00 2001 From: hjk Date: Fri, 17 Jul 2015 13:56:37 +0200 Subject: [PATCH 022/116] Debugger: Fix use of server start script ... when using Debug->Start->Attach to Running Debug Server Task-number: QTCREATORBUG-14747 Task-number: QTCREATORBUG-7459 Change-Id: I98c3d4f2d565d972369f2716ff2b72b4d3d04b2b Reviewed-by: Christian Stenger --- src/plugins/debugger/debuggerplugin.cpp | 1 - .../debugger/gdb/remotegdbserveradapter.cpp | 16 ++++++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp index 95049cb16f8..97746ea22f0 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -1364,7 +1364,6 @@ void DebuggerPluginPrivate::attachToRemoteServer() rp.startMode = AttachToRemoteServer; if (StartApplicationDialog::run(ICore::dialogParent(), &rp, &kit)) { rp.closeMode = KillAtClose; - rp.serverStartScript.clear(); createAndScheduleRun(rp, kit); } } diff --git a/src/plugins/debugger/gdb/remotegdbserveradapter.cpp b/src/plugins/debugger/gdb/remotegdbserveradapter.cpp index 95f99d136a1..0f3f4f234a2 100644 --- a/src/plugins/debugger/gdb/remotegdbserveradapter.cpp +++ b/src/plugins/debugger/gdb/remotegdbserveradapter.cpp @@ -78,24 +78,27 @@ void GdbRemoteServerEngine::setupEngine() { QTC_ASSERT(state() == EngineSetupRequested, qDebug() << state()); showMessage(_("TRYING TO START ADAPTER")); - if (!runParameters().serverStartScript.isEmpty()) { + QString serverStartScript = runParameters().serverStartScript; + if (!serverStartScript.isEmpty()) { // Provide script information about the environment QString arglist; - QtcProcess::addArg(&arglist, runParameters().serverStartScript); + QtcProcess::addArg(&arglist, serverStartScript); QtcProcess::addArg(&arglist, runParameters().executable); QtcProcess::addArg(&arglist, runParameters().remoteChannel); - m_uploadProc.start(_("/bin/sh ") + arglist); + m_uploadProc.start(arglist); m_uploadProc.waitForStarted(); } if (!runParameters().workingDirectory.isEmpty()) m_gdbProc.setWorkingDirectory(runParameters().workingDirectory); - if (runParameters().remoteSetupNeeded) + if (runParameters().remoteSetupNeeded) { notifyEngineRequestRemoteSetup(); - else + } else { + m_startAttempted = true; startGdb(); + } } void GdbRemoteServerEngine::uploadProcError(QProcess::ProcessError error) @@ -151,7 +154,8 @@ void GdbRemoteServerEngine::readUploadStandardError() void GdbRemoteServerEngine::uploadProcFinished() { if (m_uploadProc.exitStatus() == QProcess::NormalExit && m_uploadProc.exitCode() == 0) { - startGdb(); + if (!m_startAttempted) + startGdb(); } else { RemoteSetupResult result; result.success = false; From 902db4fa289b8ce46485aecfaa059992f15f9973 Mon Sep 17 00:00:00 2001 From: Daniel Teske Date: Wed, 15 Jul 2015 14:21:45 +0200 Subject: [PATCH 023/116] Cmake: Fix autodetection of cmake on Windows By using some of the infrastructure in Utils::Environment. Due to wanting to find all cmake executables in PATH and not just the first one, we need some custom code. (cherry picked from commit ca8b43f6c864ca18ca7da78f1dff810afa697119) Change-Id: If3161d712b9f6e659450a3d0647f83344e68ba5d Task-number: QTCREATORBUG-14740 Reviewed-by: Robert Loehning Reviewed-by: Daniel Teske --- src/libs/utils/environment.cpp | 42 ++++++++++--------- src/libs/utils/environment.h | 1 + .../cmakeprojectmanager/cmaketoolmanager.cpp | 31 +++++++++----- 3 files changed, 44 insertions(+), 30 deletions(-) diff --git a/src/libs/utils/environment.cpp b/src/libs/utils/environment.cpp index 9ff5b4be87d..d26d16ce54c 100644 --- a/src/libs/utils/environment.cpp +++ b/src/libs/utils/environment.cpp @@ -233,36 +233,40 @@ FileName Environment::searchInDirectory(const QStringList &execs, QString direct return FileName(); } -FileName Environment::searchInPath(const QString &executable, - const QStringList &additionalDirs) const +QStringList Environment::appendExeExtensions(const QString &executable) const { - if (executable.isEmpty()) - return FileName(); - - QString exec = QDir::cleanPath(expandVariables(executable)); - QFileInfo fi(exec); - - QStringList execs(exec); + QFileInfo fi(executable); + QStringList execs(executable); if (m_osType == OsTypeWindows) { // Check all the executable extensions on windows: // PATHEXT is only used if the executable has no extension if (fi.suffix().isEmpty()) { QStringList extensions = value(QLatin1String("PATHEXT")).split(QLatin1Char(';')); - foreach (const QString &ext, extensions) { - QString tmp = executable + ext.toLower(); - if (fi.isAbsolute()) { - if (QFile::exists(tmp)) - return FileName::fromString(tmp); - } else { - execs << tmp; - } - } + foreach (const QString &ext, extensions) + execs << executable + ext.toLower(); } } + return execs; +} - if (fi.isAbsolute()) +FileName Environment::searchInPath(const QString &executable, + const QStringList &additionalDirs) const +{ + if (executable.isEmpty()) + return FileName(); + + QString exec = QDir::cleanPath(expandVariables(executable)); + QFileInfo fi(exec); + + QStringList execs = appendExeExtensions(exec); + + if (fi.isAbsolute()) { + foreach (const QString &path, execs) + if (QFile::exists(path)) + return FileName::fromString(path); return FileName::fromString(exec); + } QSet alreadyChecked; foreach (const QString &dir, additionalDirs) { diff --git a/src/libs/utils/environment.h b/src/libs/utils/environment.h index ec00d4c03d1..b9a79c73248 100644 --- a/src/libs/utils/environment.h +++ b/src/libs/utils/environment.h @@ -105,6 +105,7 @@ class QTCREATOR_UTILS_EXPORT Environment FileName searchInPath(const QString &executable, const QStringList &additionalDirs = QStringList()) const; QStringList path() const; + QStringList appendExeExtensions(const QString &executable) const; QString expandVariables(const QString &input) const; QStringList expandVariables(const QStringList &input) const; diff --git a/src/plugins/cmakeprojectmanager/cmaketoolmanager.cpp b/src/plugins/cmakeprojectmanager/cmaketoolmanager.cpp index f157fccc5e9..7dcf869a33f 100644 --- a/src/plugins/cmakeprojectmanager/cmaketoolmanager.cpp +++ b/src/plugins/cmakeprojectmanager/cmaketoolmanager.cpp @@ -163,20 +163,29 @@ static void readAndDeleteLegacyCMakeSettings () static QList autoDetectCMakeTools() { - QStringList filters; - filters.append(QStringLiteral("cmake")); - QList suspects; - QStringList path = Environment::systemEnvironment().path(); + Utils::Environment env = Environment::systemEnvironment(); + + QStringList path = env.path(); path.removeDuplicates(); - QDir dir; - dir.setNameFilters(filters); - dir.setFilter(QDir::Files | QDir::Executable); - foreach (const QString &base, path) { - dir.setPath(base); - foreach (const QString &entry, dir.entryList()) - suspects.append(FileName::fromString(dir.absoluteFilePath(entry))); + + QStringList execs = env.appendExeExtensions(QLatin1String("cmake")); + + foreach (QString base, path) { + const QChar slash = QLatin1Char('/'); + if (base.isEmpty()) + continue; + // Avoid turning '/' into '//' on Windows which triggers Windows to check + // for network drives! + if (!base.endsWith(slash)) + base += slash; + + foreach (const QString &exec, execs) { + QFileInfo fi(base + exec); + if (fi.exists() && fi.isFile() && fi.isExecutable()) + suspects << FileName::fromString(fi.absoluteFilePath()); + } } QList found; From 9130cdfc05d52ba7924de8d32e2857287c75fee0 Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 20 Jul 2015 14:23:54 +0200 Subject: [PATCH 024/116] Debugger: Use special values for translatable strings ... when passing data from the dumpers to the GUI. This reduces the need to guess whether a value contains a translatable string. Change-Id: I5e2210b8d028bd71f0087a2ba5c7c5b04331b882 Reviewed-by: Christian Stenger --- share/qtcreator/debugger/boosttypes.py | 2 +- share/qtcreator/debugger/dumper.py | 27 ++++++++++++++----- share/qtcreator/debugger/gdbbridge.py | 17 ++++++------ share/qtcreator/debugger/lldbbridge.py | 5 ++-- share/qtcreator/debugger/qttypes.py | 2 +- src/plugins/debugger/debuggerprotocol.cpp | 30 +++++++++++++++++++++ src/plugins/debugger/debuggerprotocol.h | 12 ++++++++- src/plugins/debugger/watchhandler.cpp | 33 ++--------------------- 8 files changed, 77 insertions(+), 51 deletions(-) diff --git a/share/qtcreator/debugger/boosttypes.py b/share/qtcreator/debugger/boosttypes.py index 4f12d8c2173..9c0c29158d9 100644 --- a/share/qtcreator/debugger/boosttypes.py +++ b/share/qtcreator/debugger/boosttypes.py @@ -41,7 +41,7 @@ def qdump__boost__bimaps__bimap(d, value): def qdump__boost__optional(d, value): if int(value["m_initialized"]) == 0: - d.putValue("") + d.putSpecialValue(SpecialUninitializedValue) d.putNumChild(0) else: type = d.templateArgument(value.type, 0) diff --git a/share/qtcreator/debugger/dumper.py b/share/qtcreator/debugger/dumper.py index 16682a47c78..66a56e2a903 100644 --- a/share/qtcreator/debugger/dumper.py +++ b/share/qtcreator/debugger/dumper.py @@ -129,8 +129,18 @@ Hex2EncodedFloat8, \ IPv6AddressAndHexScopeId, \ Hex2EncodedUtf8WithoutQuotes, \ -DateTimeInternal \ - = range(30) +DateTimeInternal, \ +SpecialEmptyValue, \ +SpecialUninitializedValue, \ +SpecialInvalidValue, \ +SpecialNotAccessibleValue, \ +SpecialItemCountValue, \ +SpecialMinimumItemCountValue, \ +SpecialNotCallableValue, \ +SpecialNullReferenceValue, \ +SpecialOptimizedOutValue, \ +SpecialEmptyStructureValue, \ + = range(40) # Display modes. Keep that synchronized with DebuggerDisplay in watchutils.h StopDisplay, \ @@ -292,7 +302,7 @@ def __exit__(self, exType, exValue, exTraceBack): if self.d.passExceptions: showException("CHILDREN", exType, exValue, exTraceBack) self.d.putNumChild(0) - self.d.putValue("") + self.d.putSpecialValue(SpecialNotAccessibleValue) if not self.d.currentMaxNumChild is None: if self.d.currentMaxNumChild < self.d.currentNumChild: self.d.put('{name="",value="",type="",numchild="0"},') @@ -692,7 +702,7 @@ def putCallItem(self, name, value, func, *args): self.putItem(result) except: with SubItem(self, name): - self.putValue("") + self.putSpecialValue(SpecialNotCallableValue); self.putNumChild(0) def call(self, value, func, *args): @@ -816,9 +826,9 @@ def encodeCArray(self, p, tsize, limit): def putItemCount(self, count, maximum = 1000000000): # This needs to override the default value, so don't use 'put' directly. if count > maximum: - self.putValue('<>%s items>' % maximum) + self.putSpeciaValue(SpecialMinimumItemCountValue, maximum) else: - self.putValue('<%s items>' % count) + self.putSpecialValue(SpecialItemCountValue, count) self.putNumChild(count) def putField(self, name, value): @@ -837,6 +847,9 @@ def putValue(self, value, encoding = None, priority = 0, elided = None): if priority >= self.currentValue.priority: self.currentValue = ReportItem(value, encoding, priority, elided) + def putSpecialValue(self, encoding, value = ""): + self.putValue(value, encoding) + def putEmptyValue(self, priority = -10): if priority >= self.currentValue.priority: self.currentValue = ReportItem("", None, priority, None) @@ -1413,7 +1426,7 @@ def putQObjectConnections(self, qobject): else: connections = connections.dereference() connections = connections.cast(self.directBaseClass(connections.type)) - self.putValue('<>0 items>') + self.putSpecialValue(SpecialMinimumItemCountValue, 0) self.putNumChild(1) if self.isExpanded(): pp = 0 diff --git a/share/qtcreator/debugger/gdbbridge.py b/share/qtcreator/debugger/gdbbridge.py index 088a618b0ca..1e002314394 100644 --- a/share/qtcreator/debugger/gdbbridge.py +++ b/share/qtcreator/debugger/gdbbridge.py @@ -465,7 +465,7 @@ def exitSubItem(self, item, exType, exValue, exTraceBack): if self.passExceptions: showException("SUBITEM", exType, exValue, exTraceBack) self.putNumChild(0) - self.putValue("") + self.putSpecialValue(SpecialNotAccessibleValue) try: if self.currentType.value: typeName = self.stripClassTag(self.currentType.value) @@ -473,7 +473,8 @@ def exitSubItem(self, item, exType, exValue, exTraceBack): self.put('type="%s",' % typeName) # str(type.unqualified()) ? if self.currentValue.value is None: - self.put('value="",numchild="0",') + self.put('value="",encoding="%d","numchild="0",' + % SpecialNotAccessibleValue) else: if not self.currentValue.encoding is None: self.put('valueencoded="%d",' % self.currentValue.encoding) @@ -930,7 +931,7 @@ def putItem(self, value, tryDynamic=True): if value is None: # Happens for non-available watchers in gdb versions that # need to use gdb.execute instead of gdb.parse_and_eval - self.putValue("") + self.putSpecialValue(SpecialNotAvailableValue) self.putType("") self.putNumChild(0) return @@ -939,7 +940,7 @@ def putItem(self, value, tryDynamic=True): typeName = str(typeobj) if value.is_optimized_out: - self.putValue("") + self.putSpecialValue(SpecialOptimizedOutValue) self.putType(typeName) self.putNumChild(0) return @@ -960,7 +961,7 @@ def putItem(self, value, tryDynamic=True): try: # Try to recognize null references explicitly. if toInteger(value.address) == 0: - self.putValue("") + self.putSpecialValue(SpecialNullReferenceValue) self.putType(typeName) self.putNumChild(0) return @@ -988,7 +989,7 @@ def putItem(self, value, tryDynamic=True): self.putBetterType("%s &" % self.currentType.value) return except RuntimeError: - self.putValue("") + self.putSpecialValue(SpecialOptimizedOutValue) self.putType(typeName) self.putNumChild(0) return @@ -1069,7 +1070,7 @@ def putItem(self, value, tryDynamic=True): # Anonymous union. We need a dummy name to distinguish # multiple anonymous unions in the struct. self.putType(typeobj) - self.putValue("{...}") + self.putSpecialValue(SpecialEmptyStructureValue) self.anonNumber += 1 with Children(self, 1): self.listAnonymous(value, "#%d" % self.anonNumber, typeobj) @@ -1706,7 +1707,7 @@ def exitSubItem(self, item, exType, exValue, exTraceBack): if self.passExceptions: showException("SUBITEM", exType, exValue, exTraceBack) self.putNumChild(0) - self.putValue("") + self.putSpecialValue(SpecialNotAccessibleValue) try: if self.currentType.value: typeName = self.stripClassTag(self.currentType.value) diff --git a/share/qtcreator/debugger/lldbbridge.py b/share/qtcreator/debugger/lldbbridge.py index 2ea011f7340..f9befc4c3c9 100644 --- a/share/qtcreator/debugger/lldbbridge.py +++ b/share/qtcreator/debugger/lldbbridge.py @@ -266,14 +266,15 @@ def exitSubItem(self, item, exType, exValue, exTraceBack): if self.passExceptions: showException("SUBITEM", exType, exValue, exTraceBack) self.putNumChild(0) - self.putValue("") + self.putSpecialValue(SpecialNotAccessibleValue) try: if self.currentType.value: typeName = self.currentType.value if len(typeName) > 0 and typeName != self.currentChildType: self.put('type="%s",' % typeName) # str(type.unqualified()) ? if self.currentValue.value is None: - self.put('value="",numchild="0",') + self.put('value="",encoding="%d",numchild="0",' + % SpecialNotAccessibleValue) else: if not self.currentValue.encoding is None: self.put('valueencoded="%s",' % self.currentValue.encoding) diff --git a/share/qtcreator/debugger/qttypes.py b/share/qtcreator/debugger/qttypes.py index 90a256f4842..bed13cdb483 100644 --- a/share/qtcreator/debugger/qttypes.py +++ b/share/qtcreator/debugger/qttypes.py @@ -1552,7 +1552,7 @@ def qdump__QRegExp(d, value): def qdump__QRegion(d, value): p = value["d"].dereference()["qt_rgn"] if d.isNull(p): - d.putValue("") + d.putSpecialValue(SpecialEmptyValue) d.putNumChild(0) else: # struct QRegionPrivate: diff --git a/src/plugins/debugger/debuggerprotocol.cpp b/src/plugins/debugger/debuggerprotocol.cpp index 5be634c83f8..824edc6473f 100644 --- a/src/plugins/debugger/debuggerprotocol.cpp +++ b/src/plugins/debugger/debuggerprotocol.cpp @@ -728,6 +728,36 @@ QString decodeData(const QByteArray &ba, int encoding) union { char c[8]; double d; } u = { { s[7], s[6], s[5], s[4], s[3], s[2], s[1], s[0] } }; return QString::number(u.d); } + case SpecialEmptyValue: { + return QCoreApplication::translate("Debugger::Internal::WatchHandler", ""); + } + case SpecialUninitializedValue: { + return QCoreApplication::translate("Debugger::Internal::WatchHandler", ""); + } + case SpecialInvalidValue: { + return QCoreApplication::translate("Debugger::Internal::WatchHandler", ""); + } + case SpecialNotAccessibleValue: { + return QCoreApplication::translate("Debugger::Internal::WatchHandler", ""); + } + case SpecialItemCountValue: { + return QCoreApplication::translate("Debugger::Internal::WatchHandler", "<%n items>", nullptr, ba.toInt()); + } + case SpecialMinimumItemCountValue: { + return QCoreApplication::translate("Debugger::Internal::WatchHandler", "", nullptr, ba.toInt()); + } + case SpecialNotCallableValue: { + return QCoreApplication::translate("Debugger::Internal::WatchHandler", ""); + } + case SpecialNullReferenceValue: { + return QCoreApplication::translate("Debugger::Internal::WatchHandler", ""); + } + case SpecialOptimizedOutValue: { + return QCoreApplication::translate("Debugger::Internal::WatchHandler", ""); + } + case SpecialEmptyStructureValue: { + return QLatin1String("{...}"); + } } qDebug() << "ENCODING ERROR: " << encoding; return QCoreApplication::translate("Debugger", ""); diff --git a/src/plugins/debugger/debuggerprotocol.h b/src/plugins/debugger/debuggerprotocol.h index eac5c03da28..24644610b9f 100644 --- a/src/plugins/debugger/debuggerprotocol.h +++ b/src/plugins/debugger/debuggerprotocol.h @@ -240,7 +240,17 @@ enum DebuggerEncoding Hex2EncodedFloat8 = 26, IPv6AddressAndHexScopeId = 27, Hex2EncodedUtf8WithoutQuotes = 28, - DateTimeInternal = 29 + DateTimeInternal = 29, + SpecialEmptyValue = 30, + SpecialUninitializedValue = 31, + SpecialInvalidValue = 32, + SpecialNotAccessibleValue = 33, + SpecialItemCountValue = 34, + SpecialMinimumItemCountValue = 35, + SpecialNotCallableValue = 36, + SpecialNullReferenceValue = 37, + SpecialOptimizedOutValue = 38, + SpecialEmptyStructureValue = 39 }; // Keep in sync with dumper.py, symbolgroupvalue.cpp of CDB diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp index b8fbacb202f..80d59291fa2 100644 --- a/src/plugins/debugger/watchhandler.cpp +++ b/src/plugins/debugger/watchhandler.cpp @@ -511,34 +511,6 @@ static QString quoteUnprintable(const QString &str) return encoded; } -static QString translate(const QString &str) -{ - if (str.startsWith(QLatin1Char('<'))) { - if (str == QLatin1String("")) - return WatchHandler::tr(""); - if (str == QLatin1String("")) - return WatchHandler::tr(""); - if (str == QLatin1String("")) - return WatchHandler::tr(""); - if (str == QLatin1String("")) - return WatchHandler::tr(""); - if (str.endsWith(QLatin1String(" items>"))) { - // '<10 items>' or '<>10 items>' (more than) - bool ok; - const bool moreThan = str.at(1) == QLatin1Char('>'); - const int numberPos = moreThan ? 2 : 1; - const int len = str.indexOf(QLatin1Char(' ')) - numberPos; - const int size = str.mid(numberPos, len).toInt(&ok); - QTC_ASSERT(ok, qWarning("WatchHandler: Invalid item count '%s'", - qPrintable(str))); - return moreThan ? - WatchHandler::tr("", 0, size) : - WatchHandler::tr("<%n items>", 0, size); - } - } - return quoteUnprintable(str); -} - QString WatchItem::formattedValue() const { if (type == "bool") { @@ -594,12 +566,11 @@ QString WatchItem::formattedValue() const if (elided) { QString v = value; v.chop(1); - v = translate(v); QString len = elided > 0 ? QString::number(elided) : QLatin1String("unknown length"); return v + QLatin1String("\"... (") + len + QLatin1Char(')'); } - return translate(value); + return quoteUnprintable(value); } // Get a pointer address from pointer values reported by the debugger. @@ -657,7 +628,7 @@ QVariant WatchItem::editValue() const stringValue.replace(QLatin1String("\n"), QLatin1String("\\n")); } } - return QVariant(translate(stringValue)); + return QVariant(quoteUnprintable(stringValue)); } bool WatchItem::canFetchMore() const From e500844bda4ec592db33c5e5c4683b276030ae57 Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 20 Jul 2015 18:26:08 +0200 Subject: [PATCH 025/116] Debugger: Show better tooltip for integral values Include hexadecimal, octal, and binary values as well Task-number: QTCREATORBUG-7528 Change-Id: I73989414352c455fbad8aa210fc762c8cfc06c76 Reviewed-by: Christian Stenger --- src/plugins/debugger/watchdata.cpp | 39 ++++++++++++++++-------------- 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/src/plugins/debugger/watchdata.cpp b/src/plugins/debugger/watchdata.cpp index 265d0bbc1be..98e382d9f26 100644 --- a/src/plugins/debugger/watchdata.cpp +++ b/src/plugins/debugger/watchdata.cpp @@ -300,14 +300,15 @@ QString WatchData::toString() const return res + QLatin1Char('}'); } -// Format a tooltip fow with aligned colon. -static void formatToolTipRow(QTextStream &str, - const QString &category, const QString &value) +// Format a tooltip row with aligned colon. +static void formatToolTipRow(QTextStream &str, const QString &category, const QString &value) { QString val = value.toHtmlEscaped(); val.replace(QLatin1Char('\n'), QLatin1String("
")); - str << "" << category << " : " - << val << ""; + str << "" << category << ""; + if (!category.isEmpty()) + str << ':'; + str << "" << val << ""; } QString WatchData::toToolTip() const @@ -320,20 +321,22 @@ QString WatchData::toToolTip() const formatToolTipRow(str, tr("Internal Type"), QLatin1String(type)); if (!displayedType.isEmpty()) formatToolTipRow(str, tr("Displayed Type"), displayedType); - QString val = value; - // Automatically display hex value for unsigned integers. - if (!val.isEmpty() && val.at(0).isDigit() && isIntType(type)) { - bool ok; - const quint64 intValue = val.toULongLong(&ok); - if (ok && intValue) - val += QLatin1String(" (hex) ") + QString::number(intValue, 16); - } - if (val.size() > 1000) { - val.truncate(1000); - val += QLatin1Char(' '); - val += tr("... "); + bool ok; + const quint64 intValue = value.toULongLong(&ok); + if (ok && intValue) { + formatToolTipRow(str, tr("Value"), QLatin1String("(dec) ") + value); + formatToolTipRow(str, QString(), QLatin1String("(hex) ") + QString::number(intValue, 16)); + formatToolTipRow(str, QString(), QLatin1String("(oct) ") + QString::number(intValue, 8)); + formatToolTipRow(str, QString(), QLatin1String("(bin) ") + QString::number(intValue, 2)); + } else { + QString val = value; + if (val.size() > 1000) { + val.truncate(1000); + val += QLatin1Char(' '); + val += tr("... "); + } + formatToolTipRow(str, tr("Value"), val); } - formatToolTipRow(str, tr("Value"), val); if (address) formatToolTipRow(str, tr("Object Address"), formatToolTipAddress(address)); if (origaddr) From ffd3cecc322bb5f789543ead82fdb1364f319200 Mon Sep 17 00:00:00 2001 From: Daniel Teske Date: Tue, 21 Jul 2015 13:16:17 +0200 Subject: [PATCH 026/116] Kit Options dialog: Remove scrollarea The settings page has now its own scrollarea if a settings page gets to big, so the kits page doesn't need its own scroll area. This behaves a bit differently. Change-Id: I3c78abf332cec07d34350112fd66cc4d6e81dd15 Task-number: QTCREATORBUG-14750 Reviewed-by: Tobias Hunger --- src/plugins/projectexplorer/kitmanagerconfigwidget.cpp | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/plugins/projectexplorer/kitmanagerconfigwidget.cpp b/src/plugins/projectexplorer/kitmanagerconfigwidget.cpp index 7812b291b4f..947c907d594 100644 --- a/src/plugins/projectexplorer/kitmanagerconfigwidget.cpp +++ b/src/plugins/projectexplorer/kitmanagerconfigwidget.cpp @@ -93,15 +93,9 @@ KitManagerConfigWidget::KitManagerConfigWidget(Kit *k) : QWidget *inner = new QWidget; inner->setLayout(m_layout); - QScrollArea *scroll = new QScrollArea; - scroll->setWidget(inner); - scroll->setFrameShape(QFrame::NoFrame); - scroll->setWidgetResizable(true); - scroll->setFocusPolicy(Qt::NoFocus); - QGridLayout *mainLayout = new QGridLayout(this); mainLayout->setMargin(1); - mainLayout->addWidget(scroll, 0, 0); + mainLayout->addWidget(inner, 0, 0); toolTip = tr("Kit name and icon."); label = createLabel(tr("Name:"), toolTip); From a373698b10b78918d0604530f3c735e1f9e35aa4 Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 21 Jul 2015 15:28:31 +0200 Subject: [PATCH 027/116] Debugger: Remove breakpoint mark from assembler view ... after deletion. The breakpoint itself was actually removed from the breakpoint view but the red blob stayed until the next update (e.g. after the next 'step') Change-Id: I120059a6e643df7c104a8f6d96e09b9c707d14d8 Reviewed-by: Niels Weber --- src/plugins/debugger/breakhandler.cpp | 2 ++ src/plugins/debugger/debuggerengine.cpp | 5 +++++ src/plugins/debugger/debuggerengine.h | 1 + 3 files changed, 8 insertions(+) diff --git a/src/plugins/debugger/breakhandler.cpp b/src/plugins/debugger/breakhandler.cpp index baaef60d340..1731f527fad 100644 --- a/src/plugins/debugger/breakhandler.cpp +++ b/src/plugins/debugger/breakhandler.cpp @@ -1331,6 +1331,8 @@ BreakpointItem::~BreakpointItem() void BreakpointItem::destroyMarker() { + if (m_engine) + m_engine->updateBreakpointMarkers(); if (m_marker) { BreakpointMarker *m = m_marker; m->m_bp = 0; diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp index 6c22b15b103..ef0b4427c7c 100644 --- a/src/plugins/debugger/debuggerengine.cpp +++ b/src/plugins/debugger/debuggerengine.cpp @@ -1336,6 +1336,11 @@ QString DebuggerEngine::toFileInProject(const QUrl &fileUrl) return d->m_fileFinder.findFile(fileUrl); } +void DebuggerEngine::updateBreakpointMarkers() +{ + d->m_disassemblerAgent.updateBreakpointMarkers(); +} + bool DebuggerEngine::debuggerActionsEnabled() const { return debuggerActionsEnabled(d->m_state); diff --git a/src/plugins/debugger/debuggerengine.h b/src/plugins/debugger/debuggerengine.h index e6625fc1dc3..86a2abfb42d 100644 --- a/src/plugins/debugger/debuggerengine.h +++ b/src/plugins/debugger/debuggerengine.h @@ -313,6 +313,7 @@ class DebuggerEngine : public QObject virtual void notifyInferiorIll(); QString toFileInProject(const QUrl &fileUrl); + void updateBreakpointMarkers(); signals: void stateChanged(Debugger::DebuggerState state); From d327a110300d5498fbadba3f363d117cd3a35184 Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 21 Jul 2015 16:00:30 +0200 Subject: [PATCH 028/116] Debugger: Sort vtable before data members ... when listing members of a struct in the Locals and Expressions view. Task-number: QTCREATORBUG-14767 Change-Id: I5089dd3bcba40ab335be164c5de2f2d70c3ed4f4 Reviewed-by: Orgad Shaneh --- share/qtcreator/debugger/gdbbridge.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/share/qtcreator/debugger/gdbbridge.py b/share/qtcreator/debugger/gdbbridge.py index 1e002314394..dd980aed489 100644 --- a/share/qtcreator/debugger/gdbbridge.py +++ b/share/qtcreator/debugger/gdbbridge.py @@ -1156,7 +1156,13 @@ def readCString(self, base): def putFields(self, value, dumpBase = True): fields = value.type.fields() if self.sortStructMembers: - fields.sort(key = lambda field: "%d%s" % (not field.is_base_class, field.name)) + def sortOrder(field): + if field.is_base_class: + return 0 + if field.name.startswith("_vptr."): + return 1 + return 2 + fields.sort(key = lambda field: "%d%s" % (sortOrder(field), field.name)) #warn("TYPE: %s" % value.type) #warn("FIELDS: %s" % fields) From d12bbe2178ac530cf63188e9e189928b2fa964c7 Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 21 Jul 2015 10:26:39 +0200 Subject: [PATCH 029/116] Debugger: Also display register values as negative decimals Task-number: QTCREATORBUG-10726 Change-Id: I5c4ee72a36462a779e79cb4be798433e398fd25a Reviewed-by: Christian Stenger --- src/plugins/debugger/registerhandler.cpp | 32 +++++++++++++++++++++--- src/plugins/debugger/registerhandler.h | 1 + src/plugins/debugger/registerwindow.cpp | 2 +- 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/src/plugins/debugger/registerhandler.cpp b/src/plugins/debugger/registerhandler.cpp index da667a2e07d..a3e689e3105 100644 --- a/src/plugins/debugger/registerhandler.cpp +++ b/src/plugins/debugger/registerhandler.cpp @@ -267,7 +267,8 @@ static QString subTypeName(RegisterKind kind, int size, RegisterFormat format) switch (format) { case BinaryFormat: name += QLatin1Char('b'); break; case OctalFormat: name += QLatin1Char('o'); break; - case DecimalFormat: name += QLatin1Char('d'); break; + case DecimalFormat: name += QLatin1Char('u'); break; + case SignedDecimalFormat: name += QLatin1Char('s'); break; case HexadecimalFormat: name += QLatin1Char('x'); break; case CharacterFormat: name += QLatin1Char('c'); break; } @@ -329,6 +330,18 @@ static QByteArray formatRegister(quint64 v, int size, RegisterFormat format) } else if (format == DecimalFormat) { result = QByteArray::number(v, 10); result.prepend(QByteArray(2*size - result.size(), ' ')); + } else if (format == SignedDecimalFormat) { + qint64 sv; + if (size >= 8) + sv = qint64(v); + else if (size >= 4) + sv = qint32(v); + else if (size >= 2) + sv = qint16(v); + else + sv = qint8(v); + result = QByteArray::number(sv, 10); + result.prepend(QByteArray(2*size - result.size(), ' ')); } else if (format == CharacterFormat) { if (v >= 32 && v < 127) { result += '\''; @@ -436,8 +449,13 @@ RegisterItem::RegisterItem(const Register ®) : m_reg.guessMissingData(); if (m_reg.kind == IntegerRegister || m_reg.kind == VectorRegister) { + if (m_reg.size <= 8) { + appendChild(new RegisterSubItem(IntegerRegister, m_reg.size, 1, SignedDecimalFormat)); + appendChild(new RegisterSubItem(IntegerRegister, m_reg.size, 1, DecimalFormat)); + } for (int s = m_reg.size / 2; s; s = s / 2) { appendChild(new RegisterSubItem(IntegerRegister, s, m_reg.size / s, HexadecimalFormat)); + appendChild(new RegisterSubItem(IntegerRegister, s, m_reg.size / s, SignedDecimalFormat)); appendChild(new RegisterSubItem(IntegerRegister, s, m_reg.size / s, DecimalFormat)); if (s == 1) appendChild(new RegisterSubItem(IntegerRegister, s, m_reg.size / s, CharacterFormat)); @@ -548,8 +566,16 @@ QVariant RegisterSubItem::data(int column, int role) const if (m_subKind == IntegerRegister) { if (m_subFormat == CharacterFormat) return RegisterHandler::tr("Content as ASCII Characters"); - else - return RegisterHandler::tr("Content as %1-bit Integer Values").arg(8 * m_subSize); + if (m_subFormat == SignedDecimalFormat) + return RegisterHandler::tr("Content as %1-bit Signed Decimal Values").arg(8 * m_subSize); + if (m_subFormat == DecimalFormat) + return RegisterHandler::tr("Content as %1-bit Unsigned Decimal Values").arg(8 * m_subSize); + if (m_subFormat == HexadecimalFormat) + return RegisterHandler::tr("Content as %1-bit Hexadecimal Values").arg(8 * m_subSize); + if (m_subFormat == OctalFormat) + return RegisterHandler::tr("Content as %1-bit Octal Values").arg(8 * m_subSize); + if (m_subFormat == BinaryFormat) + return RegisterHandler::tr("Content as %1-bit Binary Values").arg(8 * m_subSize); } if (m_subKind == FloatRegister) return RegisterHandler::tr("Contents as %1-bit Floating Point Values").arg(8 * m_subSize); diff --git a/src/plugins/debugger/registerhandler.h b/src/plugins/debugger/registerhandler.h index 1d42a85edfe..3afe40bd4ca 100644 --- a/src/plugins/debugger/registerhandler.h +++ b/src/plugins/debugger/registerhandler.h @@ -71,6 +71,7 @@ enum RegisterFormat CharacterFormat, HexadecimalFormat, DecimalFormat, + SignedDecimalFormat, OctalFormat, BinaryFormat }; diff --git a/src/plugins/debugger/registerwindow.cpp b/src/plugins/debugger/registerwindow.cpp index 3862bd46e64..1cdc690f5e4 100644 --- a/src/plugins/debugger/registerwindow.cpp +++ b/src/plugins/debugger/registerwindow.cpp @@ -71,7 +71,7 @@ class RegisterDelegate : public QItemDelegate // Big integers are assumed to be hexadecimal. int base = 16; if (!big) { - if (format == DecimalFormat) + if (format == DecimalFormat || format == SignedDecimalFormat) base = 10; else if (format == OctalFormat) base = 8; From 631d33de39fa24b489f41281b43269190a366f5c Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Wed, 22 Jul 2015 08:41:10 +0200 Subject: [PATCH 030/116] Remove "console" from CONFIG in qtcdebugger.pro Change 7309e8bb643642b37d414be802b0530b70168d0d caused "console" to be added to the CONFIG variable, which resulted in qtcdebugger launching an additional command prompt window. Change-Id: I05c74c4ba7a4441ba2a7d3a1ad96fe3b11c74663 Task-number: QTCREATORBUG-14759 Reviewed-by: hjk Reviewed-by: Christian Kandeler --- src/tools/qtcdebugger/qtcdebugger.pro | 1 + 1 file changed, 1 insertion(+) diff --git a/src/tools/qtcdebugger/qtcdebugger.pro b/src/tools/qtcdebugger/qtcdebugger.pro index 41c0d4af616..e4106a176ce 100644 --- a/src/tools/qtcdebugger/qtcdebugger.pro +++ b/src/tools/qtcdebugger/qtcdebugger.pro @@ -1,5 +1,6 @@ include(../../shared/registryaccess/registryaccess.pri) include(../../qtcreatortool.pri) +CONFIG -= console QT += widgets TARGET = qtcdebugger SOURCES += main.cpp From ec2b006d29c243729aa8ce85d5717669c8613b53 Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Mon, 13 Jul 2015 17:01:50 +0300 Subject: [PATCH 031/116] Sdktool: Avoid setting invalid debugger entry in kit Change-Id: Ia8f8e7a5bdc8ab4e9d50fd5f7bca379ec3e3e4f0 Reviewed-by: Tobias Hunger Reviewed-by: Orgad Shaneh Reviewed-by: hjk --- src/tools/sdktool/addkitoperation.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/tools/sdktool/addkitoperation.cpp b/src/tools/sdktool/addkitoperation.cpp index 70c3f7acc53..2f02c098db4 100644 --- a/src/tools/sdktool/addkitoperation.cpp +++ b/src/tools/sdktool/addkitoperation.cpp @@ -245,9 +245,6 @@ bool AddKitOperation::setArguments(const QStringList &args) return false; } - if (m_debuggerId.isEmpty() && m_debugger.isEmpty()) - m_debugger = QLatin1String("auto"); - return !m_id.isEmpty() && !m_displayName.isEmpty() && !m_deviceType.isEmpty(); } @@ -622,7 +619,7 @@ QVariantMap AddKitOperation::addKit(const QVariantMap &map, const QVariantMap &t data << KeyValuePair(QStringList() << kit << QLatin1String(AUTODETECTED), QVariant(true)); data << KeyValuePair(QStringList() << kit << QLatin1String(SDK), QVariant(true)); - if (!debuggerId.isNull() || !debugger.isNull()) { + if (!debuggerId.isEmpty() || !debugger.isEmpty()) { if (debuggerId.isEmpty()) { data << KeyValuePair(QStringList() << kit << QLatin1String(DATA) << QLatin1String(DEBUGGER) << QLatin1String(DEBUGGER_ENGINE), QVariant(debuggerType)); From 2ad602bbe5a119ecb361f4b7de04f39c28881188 Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 22 Jul 2015 11:31:49 +0200 Subject: [PATCH 032/116] Debugger: Put some restrictions on byte array dumper This makes 100M a hard limit, reducing the likelihood that an uninitialized byte array will look valid. Change-Id: I51dc5f39e0c7327faa8c1d0640934a6074d8c559 Reviewed-by: Christian Stenger --- share/qtcreator/debugger/qttypes.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/share/qtcreator/debugger/qttypes.py b/share/qtcreator/debugger/qttypes.py index bed13cdb483..62c188c736b 100644 --- a/share/qtcreator/debugger/qttypes.py +++ b/share/qtcreator/debugger/qttypes.py @@ -58,6 +58,7 @@ def qform__QByteArray(): def qdump__QByteArray(d, value): data, size, alloc = d.byteArrayData(value) + d.check(0 <= size and size <= alloc and alloc <= 1000 * 1000 * 100) d.putNumChild(size) elided, p = d.encodeByteArrayHelper(d.extractPointer(value), d.displayStringLimit) displayFormat = d.currentItemFormat() @@ -78,6 +79,7 @@ def qdump__QByteArray(d, value): def qdump__QByteArrayData(d, value): data, size, alloc = d.byteArrayDataHelper(d.addressOf(value)) + d.check(0 <= size and size <= alloc and alloc <= 1000 * 1000 * 100) d.putValue(d.readMemory(data, size), Hex2EncodedLatin1) d.putNumChild(1) if d.isExpanded(): From e3c2236c266da0020bac8b1904a72d9ffc879700 Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 21 Jul 2015 12:52:18 +0200 Subject: [PATCH 033/116] Debugger: Remove guessing of register size GDB does not report register sizes using the MI protocol, so sizes were infered from the register name. This is fragile, better use "maintenance print raw-registers" which reports the sizes and even if not part of the official interface, is unlikely to change. Change-Id: If7c7182751a496084a351aaef3a97dcdac6c500b Reviewed-by: Christian Stenger --- src/plugins/debugger/gdb/gdbengine.cpp | 45 ++++- src/plugins/debugger/gdb/gdbengine.h | 4 +- src/plugins/debugger/registerhandler.cpp | 208 +---------------------- 3 files changed, 50 insertions(+), 207 deletions(-) diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index 5eac84b1169..2fa00476c4b 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -3557,7 +3557,9 @@ void GdbEngine::reloadRegisters() if (true) { if (!m_registerNamesListed) { - postCommand("-data-list-register-names", NoFlags, CB(handleRegisterListNames)); + // The MI version does not give register size. + // postCommand("-data-list-register-names", NoFlags, CB(handleRegisterListNames)); + postCommand("maintenance print raw-registers", NoFlags, CB(handleRegisterListing)); m_registerNamesListed = true; } // Can cause i386-linux-nat.c:571: internal-error: Got request @@ -3638,15 +3640,47 @@ void GdbEngine::handleRegisterListNames(const DebuggerResponse &response) } GdbMi names = response.data["register-names"]; - m_registerNames.clear(); + m_registers.clear(); int gdbRegisterNumber = 0; foreach (const GdbMi &item, names.children()) { - if (!item.data().isEmpty()) - m_registerNames[gdbRegisterNumber] = item.data(); + if (!item.data().isEmpty()) { + Register reg; + reg.name = item.data(); + m_registers[gdbRegisterNumber] = reg; + } ++gdbRegisterNumber; } } +void GdbEngine::handleRegisterListing(const DebuggerResponse &response) +{ + if (response.resultClass != ResultDone) { + m_registerNamesListed = false; + return; + } + + // &"maintenance print raw-registers\n" + // >~" Name Nr Rel Offset Size Type Raw value\n" + // >~" rax 0 0 0 8 int64_t 0x0000000000000005\n" + // >~" rip 16 16 128 8 *1 0x000000000040232a\n" + // >~" '' 145 145 536 0 int0_t \n" + + m_registers.clear(); + QList lines = response.consoleStreamOutput.split('\n'); + for (int i = 1; i < lines.size(); ++i) { + QStringList parts = QString::fromLatin1(lines.at(i)) + .split(QLatin1Char(' '), QString::SkipEmptyParts); + if (parts.size() < 7) + continue; + int gdbRegisterNumber = parts.at(1).toInt(); + Register reg; + reg.name = parts.at(0).toLatin1(); + reg.size = parts.at(4).toInt(); + reg.reportedType = parts.at(5).toLatin1(); + m_registers[gdbRegisterNumber] = reg; + } +} + void GdbEngine::handleRegisterListValues(const DebuggerResponse &response) { if (response.resultClass != ResultDone) @@ -3656,9 +3690,8 @@ void GdbEngine::handleRegisterListValues(const DebuggerResponse &response) // 24^done,register-values=[{number="0",value="0xf423f"},...] const GdbMi values = response.data["register-values"]; foreach (const GdbMi &item, values.children()) { - Register reg; const int number = item["number"].toInt(); - reg.name = m_registerNames[number]; + Register reg = m_registers[number]; QByteArray data = item["value"].data(); if (data.startsWith("0x")) { reg.value = data; diff --git a/src/plugins/debugger/gdb/gdbengine.h b/src/plugins/debugger/gdb/gdbengine.h index d994a1cbbdd..6e5474f0a2d 100644 --- a/src/plugins/debugger/gdb/gdbengine.h +++ b/src/plugins/debugger/gdb/gdbengine.h @@ -34,6 +34,7 @@ #include #include +#include #include #include #include @@ -327,9 +328,10 @@ private slots: Q_SLOT void reloadRegisters(); void setRegisterValue(const QByteArray &name, const QString &value); void handleRegisterListNames(const DebuggerResponse &response); + void handleRegisterListing(const DebuggerResponse &response); void handleRegisterListValues(const DebuggerResponse &response); void handleMaintPrintRegisters(const DebuggerResponse &response); - QHash m_registerNames; // Map GDB register numbers to indices + QHash m_registers; // Map GDB register numbers to indices // // Disassembler specific stuff diff --git a/src/plugins/debugger/registerhandler.cpp b/src/plugins/debugger/registerhandler.cpp index a3e689e3105..ca2dd95706c 100644 --- a/src/plugins/debugger/registerhandler.cpp +++ b/src/plugins/debugger/registerhandler.cpp @@ -42,214 +42,22 @@ namespace Internal { // ////////////////////////////////////////////////////////////////// -static struct RegisterNameAndType -{ - const char *name; - RegisterKind kind; - int size; -} theNameAndType[] = { - // ARM - { "r0", IntegerRegister, 4 }, - { "r1", IntegerRegister, 4 }, - { "r2", IntegerRegister, 4 }, - { "r3", IntegerRegister, 4 }, - { "r4", IntegerRegister, 4 }, - { "r5", IntegerRegister, 4 }, - { "r6", IntegerRegister, 4 }, - { "r7", IntegerRegister, 4 }, - { "r8", IntegerRegister, 4 }, - { "r9", IntegerRegister, 4 }, - { "r10", IntegerRegister, 4 }, - { "r11", IntegerRegister, 4 }, - { "r12", IntegerRegister, 4 }, - { "sp", IntegerRegister, 4 }, - { "lr", IntegerRegister, 4 }, - { "pc", IntegerRegister, 4 }, - { "cpsr", FlagRegister, 4 }, - { "d0", IntegerRegister, 8 }, - { "d1", IntegerRegister, 8 }, - { "d2", IntegerRegister, 8 }, - { "d3", IntegerRegister, 8 }, - { "d4", IntegerRegister, 8 }, - { "d5", IntegerRegister, 8 }, - { "d6", IntegerRegister, 8 }, - { "d7", IntegerRegister, 8 }, - { "d8", IntegerRegister, 8 }, - { "d9", IntegerRegister, 8 }, - { "d10", IntegerRegister, 8 }, - { "d11", IntegerRegister, 8 }, - { "d12", IntegerRegister, 8 }, - { "d13", IntegerRegister, 8 }, - { "d14", IntegerRegister, 8 }, - { "d15", IntegerRegister, 8 }, - { "d16", IntegerRegister, 8 }, - { "d17", IntegerRegister, 8 }, - { "d18", IntegerRegister, 8 }, - { "d19", IntegerRegister, 8 }, - { "d20", IntegerRegister, 8 }, - { "d21", IntegerRegister, 8 }, - { "d22", IntegerRegister, 8 }, - { "d23", IntegerRegister, 8 }, - { "d24", IntegerRegister, 8 }, - { "d25", IntegerRegister, 8 }, - { "d26", IntegerRegister, 8 }, - { "d27", IntegerRegister, 8 }, - { "d28", IntegerRegister, 8 }, - { "d29", IntegerRegister, 8 }, - { "d30", IntegerRegister, 8 }, - { "d31", IntegerRegister, 8 }, - { "fpscr", FlagRegister, 4 }, - { "s0", IntegerRegister, 4 }, - { "s1", IntegerRegister, 4 }, - { "s2", IntegerRegister, 4 }, - { "s3", IntegerRegister, 4 }, - { "s4", IntegerRegister, 4 }, - { "s5", IntegerRegister, 4 }, - { "s6", IntegerRegister, 4 }, - { "s7", IntegerRegister, 4 }, - { "s8", IntegerRegister, 4 }, - { "s9", IntegerRegister, 4 }, - { "s10", IntegerRegister, 4 }, - { "s11", IntegerRegister, 4 }, - { "s12", IntegerRegister, 4 }, - { "s13", IntegerRegister, 4 }, - { "s14", IntegerRegister, 4 }, - { "s15", IntegerRegister, 4 }, - { "s16", IntegerRegister, 4 }, - { "s17", IntegerRegister, 4 }, - { "s18", IntegerRegister, 4 }, - { "s19", IntegerRegister, 4 }, - { "s20", IntegerRegister, 4 }, - { "s21", IntegerRegister, 4 }, - { "s22", IntegerRegister, 4 }, - { "s23", IntegerRegister, 4 }, - { "s24", IntegerRegister, 4 }, - { "s25", IntegerRegister, 4 }, - { "s26", IntegerRegister, 4 }, - { "s27", IntegerRegister, 4 }, - { "s28", IntegerRegister, 4 }, - { "s29", IntegerRegister, 4 }, - { "s30", IntegerRegister, 4 }, - { "s31", IntegerRegister, 4 }, - { "q0", IntegerRegister, 16 }, - { "q1", IntegerRegister, 16 }, - { "q2", IntegerRegister, 16 }, - { "q3", IntegerRegister, 16 }, - { "q4", IntegerRegister, 16 }, - { "q5", IntegerRegister, 16 }, - { "q6", IntegerRegister, 16 }, - { "q7", IntegerRegister, 16 }, - { "q8", IntegerRegister, 16 }, - { "q9", IntegerRegister, 16 }, - { "q10", IntegerRegister, 16 }, - { "q11", IntegerRegister, 16 }, - { "q12", IntegerRegister, 16 }, - { "q13", IntegerRegister, 16 }, - { "q14", IntegerRegister, 16 }, - { "q15", IntegerRegister, 16 }, - - // Intel - { "eax", IntegerRegister, 4 }, - { "ecx", IntegerRegister, 4 }, - { "edx", IntegerRegister, 4 }, - { "ebx", IntegerRegister, 4 }, - { "esp", IntegerRegister, 4 }, - { "ebp", IntegerRegister, 4 }, - { "esi", IntegerRegister, 4 }, - { "edi", IntegerRegister, 4 }, - { "eip", IntegerRegister, 4 }, - { "rax", IntegerRegister, 8 }, - { "rcx", IntegerRegister, 8 }, - { "rdx", IntegerRegister, 8 }, - { "rbx", IntegerRegister, 8 }, - { "rsp", IntegerRegister, 8 }, - { "rbp", IntegerRegister, 8 }, - { "rsi", IntegerRegister, 8 }, - { "rdi", IntegerRegister, 8 }, - { "rip", IntegerRegister, 8 }, - { "eflags", FlagRegister, 4 }, - { "cs", IntegerRegister, 2 }, - { "ss", IntegerRegister, 2 }, - { "ds", IntegerRegister, 2 }, - { "es", IntegerRegister, 2 }, - { "fs", IntegerRegister, 2 }, - { "gs", IntegerRegister, 2 }, - { "st0", FloatRegister, 10 }, - { "st1", FloatRegister, 10 }, - { "st2", FloatRegister, 10 }, - { "st3", FloatRegister, 10 }, - { "st4", FloatRegister, 10 }, - { "st5", FloatRegister, 10 }, - { "st6", FloatRegister, 10 }, - { "st7", FloatRegister, 10 }, - { "fctrl", FlagRegister, 4 }, - { "fstat", FlagRegister, 4 }, - { "ftag", FlagRegister, 4 }, - { "fiseg", FlagRegister, 4 }, - { "fioff", FlagRegister, 4 }, - { "foseg", FlagRegister, 4 }, - { "fooff", FlagRegister, 4 }, - { "fop", FlagRegister, 4 }, - { "mxcsr", FlagRegister, 4 }, - { "orig_eax", IntegerRegister, 4 }, - { "al", IntegerRegister, 1 }, - { "cl", IntegerRegister, 1 }, - { "dl", IntegerRegister, 1 }, - { "bl", IntegerRegister, 1 }, - { "ah", IntegerRegister, 1 }, - { "ch", IntegerRegister, 1 }, - { "dh", IntegerRegister, 1 }, - { "bh", IntegerRegister, 1 }, - { "ax", IntegerRegister, 2 }, - { "cx", IntegerRegister, 2 }, - { "dx", IntegerRegister, 2 }, - { "bx", IntegerRegister, 2 }, - { "bp", IntegerRegister, 2 }, - { "si", IntegerRegister, 2 }, - { "di", IntegerRegister, 2 } - }; - -////////////////////////////////////////////////////////////////// -// -// RegisterValue -// -////////////////////////////////////////////////////////////////// - -// FIXME: This should not really be needed. Instead the guessing, if any, -// should done by the engines. -static void fixup(Register *reg, RegisterKind kind, int size) -{ - reg->kind = kind; - if (!reg->size) - reg->size = size; -} - void Register::guessMissingData() { - if (name.startsWith("xmm")) { - fixup(this, VectorRegister, 16); - return; - } - - for (int i = 0; i != sizeof(theNameAndType) / sizeof(theNameAndType[0]); ++i) { - if (theNameAndType[i].name == name) { - fixup(this, theNameAndType[i].kind, theNameAndType[i].size); - return; - } - } - if (reportedType == "int") - fixup(this, IntegerRegister, 4); + kind = IntegerRegister; else if (reportedType == "float") - fixup(this, IntegerRegister, 8); + kind = FloatRegister; else if (reportedType == "_i387_ext") - fixup(this, IntegerRegister, 10); + kind = FloatRegister; else if (reportedType == "*1" || reportedType == "long") - fixup(this, IntegerRegister, 0); + kind = IntegerRegister; else if (reportedType.contains("vec")) - fixup(this, VectorRegister, 0); + kind = VectorRegister; else if (reportedType.startsWith("int")) - fixup(this, IntegerRegister, 0); + kind = IntegerRegister; + else if (name.startsWith("xmm") || name.startsWith("ymm")) + kind = VectorRegister; } static QString subTypeName(RegisterKind kind, int size, RegisterFormat format) From d765cd73a2292ccad36837aca696808b5d2cdacd Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 20 Jul 2015 09:37:54 +0200 Subject: [PATCH 034/116] Debugger: Recognize source data within disassembler view ... and use it to toggle breakpoints by file and line, and for jumping to file and line. Task-number: QTCREATORBUG-14278 Change-Id: I799d085eb53339905ea3608022aeae5a9aef1fda Reviewed-by: Niels Weber Reviewed-by: Christian Stenger --- src/plugins/debugger/debuggerengine.cpp | 7 +- src/plugins/debugger/debuggerengine.h | 9 +- .../debugger/debuggerinternalconstants.h | 1 + src/plugins/debugger/debuggerplugin.cpp | 146 ++++++++---------- src/plugins/debugger/disassembleragent.cpp | 16 +- src/plugins/debugger/disassemblerlines.cpp | 9 +- src/plugins/debugger/disassemblerlines.h | 3 - src/plugins/debugger/sourceutils.cpp | 26 +++- 8 files changed, 114 insertions(+), 103 deletions(-) diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp index ef0b4427c7c..950ffb1e86d 100644 --- a/src/plugins/debugger/debuggerengine.cpp +++ b/src/plugins/debugger/debuggerengine.cpp @@ -150,8 +150,11 @@ bool LocationMark::isDraggable() const void LocationMark::dragToLine(int line) { if (m_engine) { - if (BaseTextEditor *textEditor = BaseTextEditor::currentTextEditor()) - m_engine->executeJumpToLine(getLocationContext(textEditor->textDocument(), line)); + if (BaseTextEditor *textEditor = BaseTextEditor::currentTextEditor()) { + ContextData location = getLocationContext(textEditor->textDocument(), line); + if (location.isValid()) + m_engine->executeJumpToLine(location); + } } } diff --git a/src/plugins/debugger/debuggerengine.h b/src/plugins/debugger/debuggerengine.h index 86a2abfb42d..f62a7e381bc 100644 --- a/src/plugins/debugger/debuggerengine.h +++ b/src/plugins/debugger/debuggerengine.h @@ -170,15 +170,18 @@ class Location quint64 m_address; }; +enum LocationType { UnknownLocation, LocationByFile, LocationByAddress }; + class ContextData { public: - ContextData() : lineNumber(0), address(0) {} + bool isValid() const { return type != UnknownLocation; } public: + LocationType type = UnknownLocation; QString fileName; - int lineNumber; - quint64 address; + int lineNumber = 0; + quint64 address = 0; }; class DebuggerEngine : public QObject diff --git a/src/plugins/debugger/debuggerinternalconstants.h b/src/plugins/debugger/debuggerinternalconstants.h index 576ed7a82aa..290edbde3f7 100644 --- a/src/plugins/debugger/debuggerinternalconstants.h +++ b/src/plugins/debugger/debuggerinternalconstants.h @@ -47,6 +47,7 @@ namespace Internal { const char OPENED_BY_DEBUGGER[] = "OpenedByDebugger"; const char OPENED_WITH_DISASSEMBLY[] = "DisassemblerView"; +const char DISASSEMBLER_SOURCE_FILE[] = "DisassemblerSourceFile"; // Debug action const char DEBUG[] = "Debugger.Debug"; diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp index 97746ea22f0..bf2b4f98fc3 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -618,7 +618,7 @@ class DebuggerPluginPrivate : public QObject { QString message; if (isMessageOnly) { - if (data.address) { + if (data.type == LocationByAddress) { //: Message tracepoint: Address hit. message = tr("0x%1 hit").arg(data.address, 0, 16); } else { @@ -638,10 +638,7 @@ class DebuggerPluginPrivate : public QObject return; message = dialog.textValue(); } - if (data.address) - toggleBreakpointByAddress(data.address, message); - else - toggleBreakpointByFileAndLine(data.fileName, data.lineNumber, message); + toggleBreakpoint(data, message); } void updateWatchersHeader(int section, int, int newSize) @@ -687,11 +684,8 @@ class DebuggerPluginPrivate : public QObject void activatePreviousMode(); void activateDebugMode(); - void toggleBreakpoint(); - void toggleBreakpointByFileAndLine(const QString &fileName, int lineNumber, - const QString &tracePointMessage = QString()); - void toggleBreakpointByAddress(quint64 address, - const QString &tracePointMessage = QString()); + void toggleBreakpointHelper(); + void toggleBreakpoint(const ContextData &location, const QString &tracePointMessage = QString()); void onModeChanged(IMode *mode); void onCoreAboutToOpen(); void updateDebugWithoutDeployMenu(); @@ -829,17 +823,23 @@ public slots: void handleExecJumpToLine() { currentEngine()->resetLocation(); - if (BaseTextEditor *textEditor = BaseTextEditor::currentTextEditor()) - currentEngine()->executeJumpToLine(getLocationContext(textEditor->textDocument(), - textEditor->currentLine())); + if (BaseTextEditor *textEditor = BaseTextEditor::currentTextEditor()) { + ContextData location = getLocationContext(textEditor->textDocument(), + textEditor->currentLine()); + if (location.isValid()) + currentEngine()->executeJumpToLine(location); + } } void handleExecRunToLine() { currentEngine()->resetLocation(); - if (BaseTextEditor *textEditor = BaseTextEditor::currentTextEditor()) - currentEngine()->executeRunToLine(getLocationContext(textEditor->textDocument(), - textEditor->currentLine())); + if (BaseTextEditor *textEditor = BaseTextEditor::currentTextEditor()) { + ContextData location = getLocationContext(textEditor->textDocument(), + textEditor->currentLine()); + if (location.isValid()) + currentEngine()->executeRunToLine(location); + } } void handleExecRunToSelectedFunction() @@ -1573,26 +1573,18 @@ void DebuggerPluginPrivate::updateBreakMenuItem(IEditor *editor) void DebuggerPluginPrivate::requestContextMenu(TextEditorWidget *widget, int lineNumber, QMenu *menu) { - ContextData args; - args.lineNumber = lineNumber; - bool contextUsable = true; - Breakpoint bp; TextDocument *document = widget->textDocument(); - args.fileName = document->filePath().toString(); - if (document->property(Constants::OPENED_WITH_DISASSEMBLY).toBool()) { - QString line = document->plainText() - .section(QLatin1Char('\n'), lineNumber - 1, lineNumber - 1); + + ContextData args = getLocationContext(document, lineNumber); + if (args.type == LocationByAddress) { BreakpointResponse needle; needle.type = BreakpointByAddress; - needle.address = DisassemblerLine::addressFromDisassemblyLine(line); - args.address = needle.address; + needle.address = args.address; needle.lineNumber = -1; bp = breakHandler()->findSimilarBreakpoint(needle); - contextUsable = args.address != 0; - } else { - bp = breakHandler() - ->findBreakpointByFileAndLine(args.fileName, lineNumber); + } else if (args.type == LocationByFile) { + bp = breakHandler()->findBreakpointByFileAndLine(args.fileName, lineNumber); if (!bp) bp = breakHandler()->findBreakpointByFileAndLine(args.fileName, lineNumber, false); } @@ -1625,7 +1617,7 @@ void DebuggerPluginPrivate::requestContextMenu(TextEditorWidget *widget, ? tr("Set Breakpoint at 0x%1").arg(args.address, 0, 16) : tr("Set Breakpoint at Line %1").arg(lineNumber); auto act = menu->addAction(text); - act->setEnabled(contextUsable); + act->setEnabled(args.isValid()); connect(act, &QAction::triggered, [this, args] { breakpointSetMarginActionTriggered(false, args); }); @@ -1635,14 +1627,14 @@ void DebuggerPluginPrivate::requestContextMenu(TextEditorWidget *widget, ? tr("Set Message Tracepoint at 0x%1...").arg(args.address, 0, 16) : tr("Set Message Tracepoint at Line %1...").arg(lineNumber); act = menu->addAction(tracePointText); - act->setEnabled(contextUsable); + act->setEnabled(args.isValid()); connect(act, &QAction::triggered, [this, args] { breakpointSetMarginActionTriggered(true, args); }); } // Run to, jump to line below in stopped state. - if (currentEngine()->state() == InferiorStopOk && contextUsable) { + if (currentEngine()->state() == InferiorStopOk && args.isValid()) { menu->addSeparator(); if (currentEngine()->hasCapability(RunToLineCapability)) { auto act = menu->addAction(args.address @@ -1678,72 +1670,58 @@ void DebuggerPluginPrivate::requestContextMenu(TextEditorWidget *widget, } } -void DebuggerPluginPrivate::toggleBreakpoint() -{ - BaseTextEditor *textEditor = BaseTextEditor::currentTextEditor(); - QTC_ASSERT(textEditor, return); - const int lineNumber = textEditor->currentLine(); - if (textEditor->property(Constants::OPENED_WITH_DISASSEMBLY).toBool()) { - QString line = textEditor->textDocument()->plainText() - .section(QLatin1Char('\n'), lineNumber - 1, lineNumber - 1); - quint64 address = DisassemblerLine::addressFromDisassemblyLine(line); - toggleBreakpointByAddress(address); - } else if (lineNumber >= 0) { - toggleBreakpointByFileAndLine(textEditor->document()->filePath().toString(), lineNumber); - } -} - -void DebuggerPluginPrivate::toggleBreakpointByFileAndLine(const QString &fileName, - int lineNumber, const QString &tracePointMessage) +void DebuggerPluginPrivate::toggleBreakpoint(const ContextData &location, const QString &tracePointMessage) { + QTC_ASSERT(location.isValid(), return); BreakHandler *handler = m_breakHandler; - Breakpoint bp = handler->findBreakpointByFileAndLine(fileName, lineNumber, true); - if (!bp) - bp = handler->findBreakpointByFileAndLine(fileName, lineNumber, false); + Breakpoint bp; + if (location.type == LocationByFile) { + bp = handler->findBreakpointByFileAndLine(location.fileName, location.lineNumber, true); + if (!bp) + bp = handler->findBreakpointByFileAndLine(location.fileName, location.lineNumber, false); + } else if (location.type == LocationByAddress) { + bp = handler->findBreakpointByAddress(location.address); + } if (bp) { bp.removeBreakpoint(); } else { - BreakpointParameters data(BreakpointByFileAndLine); - if (boolSetting(BreakpointsFullPathByDefault)) - data.pathUsage = BreakpointUseFullPath; - data.tracepoint = !tracePointMessage.isEmpty(); - data.message = tracePointMessage; - data.fileName = fileName; - data.lineNumber = lineNumber; + BreakpointParameters data; + if (location.type == LocationByFile) { + data.type = BreakpointByFileAndLine; + if (boolSetting(BreakpointsFullPathByDefault)) + data.pathUsage = BreakpointUseFullPath; + data.tracepoint = !tracePointMessage.isEmpty(); + data.message = tracePointMessage; + data.fileName = location.fileName; + data.lineNumber = location.lineNumber; + } else if (location.type == LocationByAddress) { + data.type = BreakpointByAddress; + data.tracepoint = !tracePointMessage.isEmpty(); + data.message = tracePointMessage; + data.address = location.address; + } handler->appendBreakpoint(data); } } -void DebuggerPluginPrivate::toggleBreakpointByAddress(quint64 address, - const QString &tracePointMessage) +void DebuggerPluginPrivate::toggleBreakpointHelper() { - BreakHandler *handler = m_breakHandler; - if (Breakpoint bp = handler->findBreakpointByAddress(address)) { - bp.removeBreakpoint(); - } else { - BreakpointParameters data(BreakpointByAddress); - data.tracepoint = !tracePointMessage.isEmpty(); - data.message = tracePointMessage; - data.address = address; - handler->appendBreakpoint(data); - } + BaseTextEditor *textEditor = BaseTextEditor::currentTextEditor(); + QTC_ASSERT(textEditor, return); + const int lineNumber = textEditor->currentLine(); + ContextData location = getLocationContext(textEditor->textDocument(), lineNumber); + if (location.isValid()) + toggleBreakpoint(location); } void DebuggerPluginPrivate::requestMark(TextEditorWidget *widget, int lineNumber, TextMarkRequestKind kind) { - if (kind != BreakpointRequest) - return; - - TextDocument *document = widget->textDocument(); - if (document->property(Constants::OPENED_WITH_DISASSEMBLY).toBool()) { - QString line = document->plainText() - .section(QLatin1Char('\n'), lineNumber - 1, lineNumber - 1); - quint64 address = DisassemblerLine::addressFromDisassemblyLine(line); - toggleBreakpointByAddress(address); - } else { - toggleBreakpointByFileAndLine(document->filePath().toString(), lineNumber); + if (kind == BreakpointRequest) { + ContextData location = getLocationContext(widget->textDocument(), lineNumber); + if (location.isValid()) + toggleBreakpoint(location); } } @@ -2801,7 +2779,7 @@ void DebuggerPluginPrivate::extensionsInitialized() cmd->setDefaultKeySequence(QKeySequence(UseMacShortcuts ? tr("F8") : tr("F9"))); debugMenu->addAction(cmd); connect(m_breakAction, &QAction::triggered, - this, &DebuggerPluginPrivate::toggleBreakpoint); + this, &DebuggerPluginPrivate::toggleBreakpointHelper); debugMenu->addSeparator(); diff --git a/src/plugins/debugger/disassembleragent.cpp b/src/plugins/debugger/disassembleragent.cpp index e6f5632ff7c..77128756936 100644 --- a/src/plugins/debugger/disassembleragent.cpp +++ b/src/plugins/debugger/disassembleragent.cpp @@ -38,6 +38,7 @@ #include "debuggerstartparameters.h" #include "debuggerstringutils.h" #include "disassemblerlines.h" +#include "sourceutils.h" #include #include @@ -292,10 +293,13 @@ void DisassemblerAgent::setContentsToDocument(const DisassemblerLines &contents) widget->setReadOnly(true); widget->setRequestMarkEnabled(true); } + // FIXME: This is accumulating quite a bit out-of-band data. + // Make that a proper TextDocument reimplementation. d->document = qobject_cast(editor->document()); QTC_ASSERT(d->document, return); d->document->setProperty(Debugger::Constants::OPENED_BY_DEBUGGER, true); d->document->setProperty(Debugger::Constants::OPENED_WITH_DISASSEMBLY, true); + d->document->setProperty(Debugger::Constants::DISASSEMBLER_SOURCE_FILE, d->location.fileName()); d->configureMimeType(); } else { EditorManager::activateEditorForDocument(d->document); @@ -345,9 +349,19 @@ void DisassemblerAgent::updateBreakpointMarkers() const quint64 address = bp.response().address; if (!address) continue; - const int lineNumber = contents.lineForAddress(address); + int lineNumber = contents.lineForAddress(address); if (!lineNumber) continue; + + // HACK: If it's a FileAndLine breakpoint, and there's a source line + // above, move the marker up there. That allows setting and removing + // normal breakpoints from within the disassembler view. + if (bp.type() == BreakpointByFileAndLine) { + ContextData context = getLocationContext(d->document, lineNumber - 1); + if (context.type == LocationByFile) + --lineNumber; + } + TextMark *marker = new TextMark(QString(), lineNumber, Constants::TEXT_MARK_CATEGORY_BREAKPOINT); marker->setIcon(bp.icon()); diff --git a/src/plugins/debugger/disassemblerlines.cpp b/src/plugins/debugger/disassemblerlines.cpp index f769f827b3d..83d078447d6 100644 --- a/src/plugins/debugger/disassemblerlines.cpp +++ b/src/plugins/debugger/disassemblerlines.cpp @@ -29,7 +29,9 @@ ****************************************************************************/ #include "disassemblerlines.h" +#include "debuggerengine.h" #include "debuggerstringutils.h" +#include "sourceutils.h" #include #include @@ -72,13 +74,6 @@ void DisassemblerLine::fromString(const QString &unparsed) data = unparsed; } -quint64 DisassemblerLine::addressFromDisassemblyLine(const QString &line) -{ - DisassemblerLine l; - l.fromString(line); - return l.address; -} - quint64 DisassemblerLines::startAddress() const { for (int i = 0; i < m_data.size(); ++i) diff --git a/src/plugins/debugger/disassemblerlines.h b/src/plugins/debugger/disassemblerlines.h index c968546c1c9..ee91e58aaeb 100644 --- a/src/plugins/debugger/disassemblerlines.h +++ b/src/plugins/debugger/disassemblerlines.h @@ -53,9 +53,6 @@ class DisassemblerLine QString toString(int maxOp = 0) const; void fromString(const QString &unparsed); - // Return address of an assembly line "0x0dfd bla". - static quint64 addressFromDisassemblyLine(const QString &line); - public: quint64 address; // (ass) Address of instruction in memory/in binary. QString function; // (ass) Function to which current instruction belongs. diff --git a/src/plugins/debugger/sourceutils.cpp b/src/plugins/debugger/sourceutils.cpp index 5da06340b40..2e55dc8cbdc 100644 --- a/src/plugins/debugger/sourceutils.cpp +++ b/src/plugins/debugger/sourceutils.cpp @@ -48,6 +48,8 @@ #include #include +#include +#include #include #include @@ -340,11 +342,29 @@ ContextData getLocationContext(TextDocument *document, int lineNumber) { ContextData data; QTC_ASSERT(document, return data); - data.fileName = document->filePath().toString(); if (document->property(Constants::OPENED_WITH_DISASSEMBLY).toBool()) { - QString line = document->plainText().section(QLatin1Char('\n'), lineNumber - 1, lineNumber - 1); - data.address = DisassemblerLine::addressFromDisassemblyLine(line); + QString line = document->document()->findBlockByNumber(lineNumber - 1).text(); + DisassemblerLine l; + l.fromString(line); + if (l.address) { + data.type = LocationByAddress; + data.address = l.address; + } else { + QString fileName = document->property(Constants::DISASSEMBLER_SOURCE_FILE).toString(); + if (!fileName.isEmpty()) { + // Possibly one of the "27 [1] foo = x" lines + int pos = line.indexOf(QLatin1Char('[')); + int ln = line.left(pos - 1).toInt(); + if (ln > 0) { + data.type = LocationByFile; + data.fileName = fileName; + data.lineNumber = ln; + } + } + } } else { + data.type = LocationByFile; + data.fileName = document->filePath().toString(); data.lineNumber = lineNumber; } return data; From 518720e06e06a77d1309f9e6da962fc9608c1f38 Mon Sep 17 00:00:00 2001 From: Daniel Teske Date: Wed, 22 Jul 2015 12:28:46 +0200 Subject: [PATCH 035/116] Speed up opening .pro files on windows for some users If the build directory is empty, which can happen if we are parsing a completely unconfigured project, then UIDIR might end up being '/'. The uiHeaderFile function appeneded /ui_XXX.h to that, leading to a network path. Fix that by ensuring in various places that we handle this case. Task-number: QTCREATORBUG-10733 Change-Id: Ib848ed4efbeacc6ee7ff862bef861a58f6d3ea34 Reviewed-by: Robert Loehning Reviewed-by: Orgad Shaneh Reviewed-by: Daniel Teske --- .../qmakeprojectmanager/qmakenodes.cpp | 28 +++++++++++-------- src/plugins/qmakeprojectmanager/qmakenodes.h | 4 +-- .../qmakeprojectmanager/qmakeproject.cpp | 4 ++- 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/src/plugins/qmakeprojectmanager/qmakenodes.cpp b/src/plugins/qmakeprojectmanager/qmakenodes.cpp index 3a0511c73e1..1340797eafd 100644 --- a/src/plugins/qmakeprojectmanager/qmakenodes.cpp +++ b/src/plugins/qmakeprojectmanager/qmakenodes.cpp @@ -2483,21 +2483,24 @@ QString QmakeProFileNode::buildDir(QmakeBuildConfiguration *bc) const return QDir::cleanPath(QDir(bc->buildDirectory().toString()).absoluteFilePath(relativeDir)); } -QString QmakeProFileNode::uiDirectory(const QString &buildDir) const +Utils::FileName QmakeProFileNode::uiDirectory(const Utils::FileName &buildDir) const { + if (buildDir.isEmpty()) + return buildDir; const QmakeVariablesHash::const_iterator it = m_varValues.constFind(UiDirVar); if (it != m_varValues.constEnd() && !it.value().isEmpty()) - return it.value().front(); + return Utils::FileName::fromString(it.value().front()); return buildDir; } -QString QmakeProFileNode::uiHeaderFile(const QString &uiDir, const FileName &formFile) +QString QmakeProFileNode::uiHeaderFile(const Utils::FileName &uiDir, const FileName &formFile) { - QString uiHeaderFilePath = uiDir; - uiHeaderFilePath += QLatin1String("/ui_"); - uiHeaderFilePath += formFile.toFileInfo().completeBaseName(); - uiHeaderFilePath += QLatin1String(".h"); - return QDir::cleanPath(uiHeaderFilePath); + if (uiDir.isEmpty()) + return QString(); + + Utils::FileName uiHeaderFilePath = uiDir; + uiHeaderFilePath.appendPath(QLatin1String("ui_") + formFile.toFileInfo().completeBaseName() + QLatin1String(".h")); + return QDir::cleanPath(uiHeaderFilePath.toString()); } void QmakeProFileNode::updateUiFiles(const QString &buildDir) @@ -2514,8 +2517,11 @@ void QmakeProFileNode::updateUiFiles(const QString &buildDir) const QList uiFiles = uiFilesVisitor.uiFileNodes; // Find the UiDir, there can only ever be one - const QString uiDir = uiDirectory(buildDir); - foreach (const FileNode *uiFile, uiFiles) - m_uiFiles.insert(uiFile->path().toString(), uiHeaderFile(uiDir, uiFile->path())); + const Utils::FileName uiDir = uiDirectory(Utils::FileName::fromString(buildDir)); + foreach (const FileNode *uiFile, uiFiles) { + QString headerFile = uiHeaderFile(uiDir, uiFile->path()); + if (!headerFile.isEmpty()) + m_uiFiles.insert(uiFile->path().toString(), headerFile); + } } } diff --git a/src/plugins/qmakeprojectmanager/qmakenodes.h b/src/plugins/qmakeprojectmanager/qmakenodes.h index e6a6a02b279..1a9692f607d 100644 --- a/src/plugins/qmakeprojectmanager/qmakenodes.h +++ b/src/plugins/qmakeprojectmanager/qmakenodes.h @@ -337,8 +337,8 @@ class QMAKEPROJECTMANAGER_EXPORT QmakeProFileNode : public QmakePriFileNode QString sourceDir() const; QString buildDir(QmakeBuildConfiguration *bc = 0) const; - QString uiDirectory(const QString &buildDir) const; - static QString uiHeaderFile(const QString &uiDir, const Utils::FileName &formFile); + Utils::FileName uiDirectory(const Utils::FileName &buildDir) const; + static QString uiHeaderFile(const Utils::FileName &uiDir, const Utils::FileName &formFile); QHash uiFiles() const; QmakeProFileNode *findProFileFor(const Utils::FileName &string) const; diff --git a/src/plugins/qmakeprojectmanager/qmakeproject.cpp b/src/plugins/qmakeprojectmanager/qmakeproject.cpp index 9d54d2eafdd..7e7bcea8456 100644 --- a/src/plugins/qmakeprojectmanager/qmakeproject.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeproject.cpp @@ -896,7 +896,9 @@ QString QmakeProject::generatedUiHeader(const FileName &formFile) const // the top-level project only. if (m_rootProjectNode) if (const QmakeProFileNode *pro = proFileNodeOf(m_rootProjectNode, FormType, formFile)) - return QmakeProFileNode::uiHeaderFile(pro->uiDirectory(pro->buildDir()), formFile); + return QmakeProFileNode::uiHeaderFile( + pro->uiDirectory(Utils::FileName::fromString(pro->buildDir())), + formFile); return QString(); } From dedcd25924743e494055c1e0195aeef0f3983a1d Mon Sep 17 00:00:00 2001 From: Daniel Teske Date: Thu, 16 Jul 2015 17:42:08 +0200 Subject: [PATCH 036/116] QmakeProject: Fix crash on updating sources ProFileCacheManager::discardFile(s) may remove an entry from the ProfileCache only when it is unused (which is the case iff ent->locker is zero). Change-Id: I9df2079087af6bd0d35dd121db6222e8a6ec9389 Task-number: QTCREATORBUG-14730 Reviewed-by: Oswald Buddenhagen --- src/shared/proparser/qmakeparser.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/shared/proparser/qmakeparser.cpp b/src/shared/proparser/qmakeparser.cpp index 070d8fe6a11..28810b7ecaa 100644 --- a/src/shared/proparser/qmakeparser.cpp +++ b/src/shared/proparser/qmakeparser.cpp @@ -61,6 +61,15 @@ void ProFileCache::discardFile(const QString &fileName) #endif QHash::Iterator it = parsed_files.find(fileName); if (it != parsed_files.end()) { + if (it->locker) { + if (!it->locker->done) + it->locker->cond.wait(&mutex); + do { + lck.unlock(); + QThread::sleep(100); + lck.relock(); + } while (it->locker); + } if (it->pro) it->pro->deref(); parsed_files.erase(it); @@ -77,6 +86,15 @@ void ProFileCache::discardFiles(const QString &prefix) end = parsed_files.end(); while (it != end) if (it.key().startsWith(prefix)) { + if (it->locker) { + if (!it->locker->done) + it->locker->cond.wait(&mutex); + do { + lck.unlock(); + QThread::sleep(100); + lck.relock(); + } while (it->locker); + } if (it->pro) it->pro->deref(); it = parsed_files.erase(it); From 5f9f95a4516db9d915fa7858ed89adaa2b9781d6 Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 22 Jul 2015 11:16:20 +0200 Subject: [PATCH 037/116] Debugger: Work around wrongly reported array size GCC 4.9.1 + GDB 7.8 (and likely more combinations) produce sizeof(QProcess[3]) == 0, making the dumpers report no child entries for the array. To work around, try to parse the array size from the type name itself. Task-number: QTCREATORBUG-14755 Change-Id: I1f17d5d6fde6bc5fe66d2ad4a73f77185503f9ab Reviewed-by: Christian Stenger --- share/qtcreator/debugger/dumper.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/share/qtcreator/debugger/dumper.py b/share/qtcreator/debugger/dumper.py index 66a56e2a903..ec8d7a39eff 100644 --- a/share/qtcreator/debugger/dumper.py +++ b/share/qtcreator/debugger/dumper.py @@ -909,21 +909,28 @@ def putCStyleArray(self, value): p = None displayFormat = self.currentItemFormat() - n = int(arrayType.sizeof / ts) - + arrayByteSize = arrayType.sizeof + if arrayByteSize == 0: + # This should not happen. But it does, see QTCREATORBUG-14755. + # GDB/GCC produce sizeof == 0 for QProcess arr[3] + s = str(value.type) + arrayByteSize = int(s[s.find('[')+1:s.find(']')]) * ts; + + n = int(arrayByteSize / ts) if displayFormat != RawFormat: if innerTypeName == "char": # Use Latin1 as default for char []. - blob = self.readMemory(self.addressOf(value), arrayType.sizeof) + blob = self.readMemory(self.addressOf(value), arrayByteSize) self.putValue(blob, Hex2EncodedLatin1) elif innerTypeName == "wchar_t": - blob = self.readMemory(self.addressOf(value), arrayType.sizeof) + blob = self.readMemory(self.addressOf(value), arrayByteSize) if innerType.sizeof == 2: self.putValue(blob, Hex4EncodedLittleEndian) else: self.putValue(blob, Hex8EncodedLittleEndian) elif p: - self.tryPutSimpleFormattedPointer(p, arrayType, innerTypeName, displayFormat, arrayType.sizeof) + self.tryPutSimpleFormattedPointer(p, arrayType, innerTypeName, + displayFormat, arrayByteSize) self.putNumChild(n) if self.isExpanded(): From e86339335574f145ceb46e7f2cc3fb4ce0c6d18f Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 20 Jul 2015 17:07:28 +0200 Subject: [PATCH 038/116] Debugger: Suggest a non-empty name when saving scratch buffers The user needs some clue what buffer is about to be saved, even if this is not a real file name. Task-number: QTCREATORBUG-14602 Change-Id: I7d81a50079d8aa1a3b2ba63130d54515667a6663 Reviewed-by: Niels Weber Reviewed-by: Robert Loehning --- src/plugins/debugger/debuggerplugin.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp index bf2b4f98fc3..d072df0c3bd 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -3088,6 +3088,12 @@ void openTextEditor(const QString &titlePattern0, const QString &contents) IEditor *editor = EditorManager::openEditorWithContents( CC::K_DEFAULT_TEXT_EDITOR_ID, &titlePattern, contents.toUtf8(), QString(), EditorManager::IgnoreNavigationHistory); + if (auto textEditor = qobject_cast(editor)) { + QString suggestion = titlePattern; + if (!suggestion.contains(QLatin1Char('.'))) + suggestion.append(QLatin1String(".txt")); + textEditor->textDocument()->setSuggestedFileName(suggestion); + } QTC_ASSERT(editor, return); } From b5d964e62b7e9c391719e2502f630de8a9ee0070 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Mon, 20 Jul 2015 13:14:11 -0700 Subject: [PATCH 039/116] Sqlite: Stop using QtCore private macros in Qt Creator Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER is entirely private and may change at any time. More importantly, this macro is not necessary at all. QByteArrayLiteral solves the problem neatly. Change-Id: Ib306f8f647014b399b87ffff13f2c0f38c459ab1 Reviewed-by: Adam Majer Reviewed-by: Orgad Shaneh Reviewed-by: Marco Bubke --- src/libs/sqlite/utf8string.h | 22 +--------------------- 1 file changed, 1 insertion(+), 21 deletions(-) diff --git a/src/libs/sqlite/utf8string.h b/src/libs/sqlite/utf8string.h index 4a7c8512ccb..70531db218f 100644 --- a/src/libs/sqlite/utf8string.h +++ b/src/libs/sqlite/utf8string.h @@ -115,27 +115,7 @@ SQLITE_EXPORT QDataStream &operator>>(QDataStream &datastream, Utf8String &text) SQLITE_EXPORT QDebug operator<<(QDebug debug, const Utf8String &text); SQLITE_EXPORT void PrintTo(const Utf8String &text, ::std::ostream* os); -#if defined(Q_COMPILER_LAMBDA) - -# define Utf8StringLiteral(str) \ - ([]() -> Utf8String { \ - enum { Size = sizeof(str) - 1 }; \ - static const QStaticByteArrayData qbytearray_literal = { \ - Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER(Size), \ - str }; \ - QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; \ - const QByteArray byteArray(holder); \ - return Utf8String::fromByteArray(byteArray); \ - }()) \ - /**/ - -#endif - -#ifndef Utf8StringLiteral -// no lambdas, not GCC, just return a temporary QByteArray - -# define Utf8StringLiteral(str) Utf8String(str, sizeof(str) - 1) -#endif +#define Utf8StringLiteral(str) Utf8String::fromByteArray(QByteArrayLiteral(str)) Q_DECLARE_METATYPE(Utf8String) From 52278b8fd0a7ef0ec3d02cbfd5a6ad292c5addc2 Mon Sep 17 00:00:00 2001 From: Takumi ASAKI Date: Wed, 22 Jul 2015 14:47:50 +0900 Subject: [PATCH 040/116] ProParser: Support older Qt (4.6 and before) built with MSVC Task-number: QTCREATORBUG-14649 Change-Id: I078ff1a035468a6d7f845652a17ca88b01f42988 Reviewed-by: Oswald Buddenhagen Reviewed-by: Daniel Teske --- src/shared/proparser/spec_post.prf | 1 + 1 file changed, 1 insertion(+) diff --git a/src/shared/proparser/spec_post.prf b/src/shared/proparser/spec_post.prf index fcc7314ce55..d4d01857ca1 100644 --- a/src/shared/proparser/spec_post.prf +++ b/src/shared/proparser/spec_post.prf @@ -7,6 +7,7 @@ isEmpty(QMAKE_PLATFORM) { else: \ TARGET_PLATFORM = unix } else:if(equals(MAKEFILE_GENERATOR, MSVC.NET) \ + |equals(MAKEFILE_GENERATOR, MSVC) \ |equals(MAKEFILE_GENERATOR, BMAKE) \ |equals(MAKEFILE_GENERATOR, MSBUILD) \ |equals(MAKEFILE_GENERATOR, MINGW)) { From f11d5791a45325958994e31a74b7951d2d42aa5e Mon Sep 17 00:00:00 2001 From: Robert Loehning Date: Wed, 22 Jul 2015 16:47:20 +0200 Subject: [PATCH 041/116] Squish: Timing issues in tst_openqt_creator - speed up the test by not waiting for C++ parsing - measure the time for parsing qtcreator.pro and fail if too long Task-number: QTCREATORBUG-10733 Change-Id: I1d00812a3e8e56a5ee6e1828bc60aa6eb3d2da41 Reviewed-by: Christian Stenger --- .../suite_general/tst_openqt_creator/test.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/tests/system/suite_general/tst_openqt_creator/test.py b/tests/system/suite_general/tst_openqt_creator/test.py index 35697d2416f..4b734767e91 100644 --- a/tests/system/suite_general/tst_openqt_creator/test.py +++ b/tests/system/suite_general/tst_openqt_creator/test.py @@ -40,12 +40,24 @@ def main(): if not startedWithoutPluginError(): return + runButton = findObject(':*Qt Creator.Run_Core::Internal::FancyToolButton') openQmakeProject(pathSpeedcrunch, Targets.DESKTOP_480_DEFAULT) # Wait for parsing to complete - progressBarWait(30000) + waitFor("runButton.enabled", 30000) + # Starting before opening, because this is where Creator froze (QTCREATORBUG-10733) + startopening = datetime.utcnow() openQmakeProject(pathCreator, Targets.DESKTOP_531_DEFAULT) # Wait for parsing to complete - progressBarWait(300000) + startreading = datetime.utcnow() + waitFor("runButton.enabled", 300000) + secondsOpening = (datetime.utcnow() - startopening).seconds + secondsReading = (datetime.utcnow() - startreading).seconds + timeoutOpen = 45 + timeoutRead = 22 + test.verify(secondsOpening <= timeoutOpen, "Opening and reading qtcreator.pro took %d seconds. " + "It should not take longer than %d seconds" % (secondsOpening, timeoutOpen)) + test.verify(secondsReading <= timeoutRead, "Just reading qtcreator.pro took %d seconds. " + "It should not take longer than %d seconds" % (secondsReading, timeoutRead)) naviTreeView = "{column='0' container=':Qt Creator_Utils::NavigationTreeView' text~='%s' type='QModelIndex'}" compareProjectTree(naviTreeView % "speedcrunch( \[\S+\])?", "projecttree_speedcrunch.tsv") From 568d7e7c7db4ec229a66dbb616821c71044afd50 Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Mon, 20 Jul 2015 17:28:55 +0000 Subject: [PATCH 042/116] Revert "Clang: Reparse the translation unit for unsaved file changes" We reparse before every code completion so this code can be removed. We will reuse some of it later. This reverts commit 2443f18b852ee92ab4ef804f43dedb1e4fc9d44a. Change-Id: Ifcadfaa09b87ce5b58bfe5fe3cbaa2a86a59c5a6 Reviewed-by: Nikolai Kosjar --- .../ipcsource/translationunit.cpp | 53 ++++----------- .../clangbackend/ipcsource/translationunit.h | 13 +--- tests/unit/unittest/translationunittest.cpp | 66 +------------------ 3 files changed, 18 insertions(+), 114 deletions(-) diff --git a/src/tools/clangbackend/ipcsource/translationunit.cpp b/src/tools/clangbackend/ipcsource/translationunit.cpp index 17871176fae..f74b555f383 100644 --- a/src/tools/clangbackend/ipcsource/translationunit.cpp +++ b/src/tools/clangbackend/ipcsource/translationunit.cpp @@ -52,8 +52,7 @@ class TranslationUnitData ~TranslationUnitData(); public: - time_point lastProjectPartChangeTimePoint; - time_point lastUnsavedFilesChangeTimePoint; + time_point lastChangeTimePoint; ProjectPart projectPart; Utf8String filePath; CXTranslationUnit translationUnit = nullptr; @@ -64,8 +63,7 @@ class TranslationUnitData TranslationUnitData::TranslationUnitData(const Utf8String &filePath, const UnsavedFiles &unsavedFiles, const ProjectPart &projectPart) - : lastProjectPartChangeTimePoint(std::chrono::steady_clock::now()), - lastUnsavedFilesChangeTimePoint(lastProjectPartChangeTimePoint), + : lastChangeTimePoint(std::chrono::steady_clock::now()), projectPart(projectPart), filePath(filePath), unsavedFiles(unsavedFiles) @@ -111,9 +109,10 @@ CXIndex TranslationUnit::index() const CXTranslationUnit TranslationUnit::cxTranslationUnit() const { checkIfNull(); - removeTranslationUnitIfProjectPartWasChanged(); + + removeOutdatedTranslationUnit(); + createTranslationUnitIfNeeded(); - reparseTranslationUnitIfUnsavedFilesAreChanged(); return d->translationUnit; } @@ -132,19 +131,9 @@ const Utf8String &TranslationUnit::projectPartId() const return d->projectPart.projectPartId(); } -const time_point &TranslationUnit::lastProjectPartChangeTimePoint() const -{ - return d->lastProjectPartChangeTimePoint; -} - -const time_point &TranslationUnit::lastUnsavedFilesChangeTimePoint() const +const time_point &TranslationUnit::lastChangeTimePoint() const { - return d->lastUnsavedFilesChangeTimePoint; -} - -bool TranslationUnit::isNeedingReparse() const -{ - return d->lastUnsavedFilesChangeTimePoint < d->unsavedFiles.lastChangeTimePoint(); + return d->lastChangeTimePoint; } void TranslationUnit::checkIfNull() const @@ -159,29 +148,19 @@ void TranslationUnit::checkIfFileExists() const throw TranslationUnitFileNotExitsException(d->filePath); } -void TranslationUnit::updateLastProjectPartChangeTimePoint() const +void TranslationUnit::updateLastChangeTimePoint() const { - d->lastProjectPartChangeTimePoint = std::chrono::steady_clock::now(); + d->lastChangeTimePoint = std::chrono::steady_clock::now(); } -void TranslationUnit::updateLastUnsavedFilesChangeTimePoint() const +void TranslationUnit::removeOutdatedTranslationUnit() const { - d->lastUnsavedFilesChangeTimePoint = std::chrono::steady_clock::now(); -} - -void TranslationUnit::removeTranslationUnitIfProjectPartWasChanged() const -{ - if (projectPartIsOutdated()) { + if (d->projectPart.lastChangeTimePoint() >= d->lastChangeTimePoint) { clang_disposeTranslationUnit(d->translationUnit); d->translationUnit = nullptr; } } -bool TranslationUnit::projectPartIsOutdated() const -{ - return d->projectPart.lastChangeTimePoint() >= d->lastProjectPartChangeTimePoint; -} - void TranslationUnit::createTranslationUnitIfNeeded() const { if (!d->translationUnit) { @@ -201,7 +180,7 @@ void TranslationUnit::createTranslationUnitIfNeeded() const // e.g. clang_codeCompleteAt() dramatically. reparseTranslationUnit(); - updateLastProjectPartChangeTimePoint(); + updateLastChangeTimePoint(); } } @@ -219,14 +198,6 @@ void TranslationUnit::reparseTranslationUnit() const d->unsavedFiles.count(), d->unsavedFiles.cxUnsavedFiles(), clang_defaultReparseOptions(d->translationUnit)); - - updateLastUnsavedFilesChangeTimePoint(); -} - -void TranslationUnit::reparseTranslationUnitIfUnsavedFilesAreChanged() const -{ - if (isNeedingReparse()) - reparseTranslationUnit(); } int TranslationUnit::defaultOptions() diff --git a/src/tools/clangbackend/ipcsource/translationunit.h b/src/tools/clangbackend/ipcsource/translationunit.h index 5491f0acec8..75dd39e8614 100644 --- a/src/tools/clangbackend/ipcsource/translationunit.h +++ b/src/tools/clangbackend/ipcsource/translationunit.h @@ -82,23 +82,16 @@ class TranslationUnit const Utf8String &filePath() const; const Utf8String &projectPartId() const; - const time_point &lastProjectPartChangeTimePoint() const; - const time_point &lastUnsavedFilesChangeTimePoint() const; - - bool isNeedingReparse() const; + const time_point &lastChangeTimePoint() const; private: void checkIfNull() const; void checkIfFileExists() const; - void updateLastProjectPartChangeTimePoint() const; - void updateLastUnsavedFilesChangeTimePoint() const; - void removeTranslationUnitIfProjectPartWasChanged() const; - bool projectPartIsOutdated() const; + void updateLastChangeTimePoint() const; + void removeOutdatedTranslationUnit() const; void createTranslationUnitIfNeeded() const; void checkTranslationUnitErrorCode(CXErrorCode errorCode) const; void reparseTranslationUnit() const; - void reparseTranslationUnitIfUnsavedFilesAreChanged() const; - void printIncludes() const; static int defaultOptions(); private: diff --git a/tests/unit/unittest/translationunittest.cpp b/tests/unit/unittest/translationunittest.cpp index 29ae9cd4686..25235940bf0 100644 --- a/tests/unit/unittest/translationunittest.cpp +++ b/tests/unit/unittest/translationunittest.cpp @@ -132,75 +132,15 @@ TEST(TranslationUnit, ResetedTranslationUnitIsNull) ASSERT_TRUE(translationUnit.isNull()); } -TEST(TranslationUnit, TimeStampForProjectPartChangeIsUpdatedAsNewCxTranslationUnitIsGenerated) +TEST(TranslationUnit, TimeStampIsUpdatedAsNewCxTranslationUnitIsGenerated) { TranslationUnit translationUnit(Utf8StringLiteral(TESTDATA_DIR"/complete_testfile_1.cpp"), UnsavedFiles(), ProjectPart(Utf8StringLiteral("/path/to/projectfile"))); - auto lastChangeTimePoint = translationUnit.lastProjectPartChangeTimePoint(); + auto lastChangeTimePoint = translationUnit.lastChangeTimePoint(); std::this_thread::sleep_for(std::chrono::steady_clock::duration(1)); translationUnit.cxTranslationUnit(); - ASSERT_THAT(translationUnit.lastProjectPartChangeTimePoint(), Gt(lastChangeTimePoint)); -} - -TEST(TranslationUnit, TimeStampForProjectPartChangeIsUpdatedAsProjectPartIsCleared) -{ - ProjectPart projectPart(Utf8StringLiteral("/path/to/projectfile")); - TranslationUnit translationUnit(Utf8StringLiteral(TESTDATA_DIR"/complete_testfile_1.cpp"), UnsavedFiles(), projectPart); - translationUnit.cxTranslationUnit(); - auto lastChangeTimePoint = translationUnit.lastProjectPartChangeTimePoint(); - std::this_thread::sleep_for(std::chrono::steady_clock::duration(1)); - - projectPart.clear(); - translationUnit.cxTranslationUnit(); - - ASSERT_THAT(translationUnit.lastProjectPartChangeTimePoint(), Gt(lastChangeTimePoint)); -} - -TEST(TranslationUnit, ReparseIsNeededAfterUnsavedFilesAreChanged) -{ - UnsavedFiles unsavedFiles; - TranslationUnit translationUnit(Utf8StringLiteral(TESTDATA_DIR"/complete_testfile_1.cpp"), - unsavedFiles, - ProjectPart(Utf8StringLiteral("/path/to/projectfile"))); - translationUnit.cxTranslationUnit(); - unsavedFiles.clear(); - translationUnit.cxTranslationUnit(); - - unsavedFiles.clear(); - - ASSERT_TRUE(translationUnit.isNeedingReparse()); -} - -TEST(TranslationUnit, NeedsNoReparseAfterUnsavedFilesAreNotChanged) -{ - UnsavedFiles unsavedFiles; - TranslationUnit translationUnit(Utf8StringLiteral(TESTDATA_DIR"/complete_testfile_1.cpp"), - unsavedFiles, - ProjectPart(Utf8StringLiteral("/path/to/projectfile"))); - translationUnit.cxTranslationUnit(); - unsavedFiles.clear(); - translationUnit.cxTranslationUnit(); - - ASSERT_FALSE(translationUnit.isNeedingReparse()); -} - -TEST(TranslationUnit, TimeStampForUnsavedFilesChange) -{ - UnsavedFiles unsavedFiles; - TranslationUnit translationUnit(Utf8StringLiteral(TESTDATA_DIR"/complete_testfile_1.cpp"), - unsavedFiles, - ProjectPart(Utf8StringLiteral("/path/to/projectfile"))); - translationUnit.cxTranslationUnit(); - unsavedFiles.clear(); - translationUnit.cxTranslationUnit(); - auto lastChangeTimePoint = translationUnit.lastUnsavedFilesChangeTimePoint(); - std::this_thread::sleep_for(std::chrono::steady_clock::duration(1)); - - unsavedFiles.clear(); - translationUnit.cxTranslationUnit(); - - ASSERT_THAT(translationUnit.lastUnsavedFilesChangeTimePoint(), Gt(lastChangeTimePoint)); + ASSERT_THAT(translationUnit.lastChangeTimePoint(), Gt(lastChangeTimePoint)); } From b3113bbbc6610da1ece71fb235414ac316edc639 Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Tue, 21 Jul 2015 19:44:08 +0200 Subject: [PATCH 043/116] Clang: Reparse always before you complete the code There are two ways to hot fix the dependency problem. First version is to disable the caching(not the preamble) but it is triggering bugs. Second version is to enable caching and reparse before every complete. I opted for the second version because it is the commonly used path for most implementations. Later we have to minimize the reparse calls but for that we need the cooperation of editor. Change-Id: I878afb896cbf2338cbeb13d9e596a7776dd49854 Reviewed-by: Nikolai Kosjar --- src/tools/clangbackend/ipcsource/codecompleter.cpp | 2 ++ src/tools/clangbackend/ipcsource/translationunit.cpp | 7 +++++++ src/tools/clangbackend/ipcsource/translationunit.h | 1 + 3 files changed, 10 insertions(+) diff --git a/src/tools/clangbackend/ipcsource/codecompleter.cpp b/src/tools/clangbackend/ipcsource/codecompleter.cpp index e8f88b4c1d0..149277c53d3 100644 --- a/src/tools/clangbackend/ipcsource/codecompleter.cpp +++ b/src/tools/clangbackend/ipcsource/codecompleter.cpp @@ -49,6 +49,8 @@ CodeCompleter::CodeCompleter(TranslationUnit translationUnit) QVector CodeCompleter::complete(uint line, uint column) { + translationUnit.reparse(); + ClangCodeCompleteResults completeResults(clang_codeCompleteAt(translationUnit.cxTranslationUnit(), translationUnit.filePath().constData(), line, diff --git a/src/tools/clangbackend/ipcsource/translationunit.cpp b/src/tools/clangbackend/ipcsource/translationunit.cpp index f74b555f383..bfbfb9ec744 100644 --- a/src/tools/clangbackend/ipcsource/translationunit.cpp +++ b/src/tools/clangbackend/ipcsource/translationunit.cpp @@ -96,6 +96,13 @@ void TranslationUnit::reset() d.reset(); } +void TranslationUnit::reparse() +{ + cxTranslationUnit(); + + reparseTranslationUnit(); +} + CXIndex TranslationUnit::index() const { checkIfNull(); diff --git a/src/tools/clangbackend/ipcsource/translationunit.h b/src/tools/clangbackend/ipcsource/translationunit.h index 75dd39e8614..803e5e9c27b 100644 --- a/src/tools/clangbackend/ipcsource/translationunit.h +++ b/src/tools/clangbackend/ipcsource/translationunit.h @@ -73,6 +73,7 @@ class TranslationUnit bool isNull() const; void reset(); + void reparse(); CXIndex index() const; CXTranslationUnit cxTranslationUnit() const; From b335b2a083e456e2b44b1e9454a0f4cd41e2a397 Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Wed, 22 Jul 2015 20:48:53 +0300 Subject: [PATCH 044/116] QmakeParser: Fix tests compilation locker only exists with PROPARSER_THREAD_SAFE defined. Broken by dedcd25924743e494055c1e0195aeef0f3983a1d Change-Id: Ieee60dc6f567ab1c3a59697a1760afb2990496f6 Reviewed-by: Oswald Buddenhagen --- src/shared/proparser/qmakeparser.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/shared/proparser/qmakeparser.cpp b/src/shared/proparser/qmakeparser.cpp index 28810b7ecaa..856b703e96e 100644 --- a/src/shared/proparser/qmakeparser.cpp +++ b/src/shared/proparser/qmakeparser.cpp @@ -61,6 +61,7 @@ void ProFileCache::discardFile(const QString &fileName) #endif QHash::Iterator it = parsed_files.find(fileName); if (it != parsed_files.end()) { +#ifdef PROPARSER_THREAD_SAFE if (it->locker) { if (!it->locker->done) it->locker->cond.wait(&mutex); @@ -70,6 +71,7 @@ void ProFileCache::discardFile(const QString &fileName) lck.relock(); } while (it->locker); } +#endif if (it->pro) it->pro->deref(); parsed_files.erase(it); @@ -86,6 +88,7 @@ void ProFileCache::discardFiles(const QString &prefix) end = parsed_files.end(); while (it != end) if (it.key().startsWith(prefix)) { +#ifdef PROPARSER_THREAD_SAFE if (it->locker) { if (!it->locker->done) it->locker->cond.wait(&mutex); @@ -95,6 +98,7 @@ void ProFileCache::discardFiles(const QString &prefix) lck.relock(); } while (it->locker); } +#endif if (it->pro) it->pro->deref(); it = parsed_files.erase(it); From 68409fb982517c3b8025042ac12637c6cf98357a Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Thu, 23 Jul 2015 12:00:03 +0300 Subject: [PATCH 045/116] Debugger: Fix tests compilation Broken by d765cd73a2292ccad36837aca696808b5d2cdacd QWidget is included in runconfiguration.h, so QT = widgets is required. Change-Id: I254ae5dca8f537b5d8e3f8977be50cadcaa053b4 Reviewed-by: Kevin Funk Reviewed-by: hjk --- tests/auto/debugger/disassembler.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/auto/debugger/disassembler.pro b/tests/auto/debugger/disassembler.pro index 8f85fba5c32..c42b8e047dd 100644 --- a/tests/auto/debugger/disassembler.pro +++ b/tests/auto/debugger/disassembler.pro @@ -1,5 +1,5 @@ QTC_LIB_DEPENDS += utils -QT = core network +QT = core network widgets include(../qttest.pri) DEBUGGERDIR = $$IDE_SOURCE_TREE/src/plugins/debugger From 5a791e88394513a7fd632263f95b632dd84e1cfd Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 23 Jul 2015 11:23:58 +0200 Subject: [PATCH 046/116] Debugger: Don't search for an attachable process without valid pid We won't find one. Change-Id: I65babeea22045ae5a74f346558c7297cb65945c5 Reviewed-by: Christian Stenger --- src/plugins/debugger/debuggerruncontrol.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/debugger/debuggerruncontrol.cpp b/src/plugins/debugger/debuggerruncontrol.cpp index b02ddb7291c..2fb3fc12973 100644 --- a/src/plugins/debugger/debuggerruncontrol.cpp +++ b/src/plugins/debugger/debuggerruncontrol.cpp @@ -350,8 +350,8 @@ void DebuggerRunControlCreator::enrich(const RunConfiguration *runConfig, const m_kit = m_target->kit(); } - // We might have get an executable from a local PID. - if (m_rp.executable.isEmpty()) { + // We might get an executable from a local PID. + if (m_rp.executable.isEmpty() && m_rp.attachPID != InvalidPid) { foreach (const DeviceProcessItem &p, DeviceProcessList::localProcesses()) if (p.pid == m_rp.attachPID) m_rp.executable = p.exe; From ae5d92d6182ecdf64b3d5453ebcff9fc0c589016 Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Thu, 23 Jul 2015 13:01:02 +0200 Subject: [PATCH 047/116] Clang: Refactor ClangCompletionContextAnalyzer Change-Id: Ib42ddc672da8b068591129e2e0b9652d3e07ad58 Reviewed-by: Nikolai Kosjar --- .../activationsequencecontextprocessor.cpp | 249 ++++++++++ .../activationsequencecontextprocessor.h | 92 ++++ .../activationsequenceprocessor.cpp | 4 +- src/plugins/clangcodemodel/clangcodemodel.pro | 9 +- src/plugins/clangcodemodel/clangcodemodel.qbs | 4 +- .../clangcodemodel/clangcodemodelplugin.cpp | 2 - .../clangcodemodelunittestfiles.pri | 8 +- .../clangcompletioncontextanalyzer.cpp | 301 +++--------- .../clangcompletioncontextanalyzer.h | 15 +- .../clangcompletioncontextanalyzertest.cpp | 234 ---------- .../clangcompletionassistinterface.h | 32 +- tests/unit/mockup/texteditor/assistenums.h | 52 +++ .../texteditor/codeassist/assistinterface.h | 119 +++++ ...activationsequencecontextprocessortest.cpp | 220 +++++++++ .../activationsequenceprocessortest.cpp | 6 +- .../clangcompletioncontextanalyzertest.cpp | 435 ++++++++++++++++++ tests/unit/unittest/cplusplus.pri | 6 +- tests/unit/unittest/unittest.pro | 7 +- 18 files changed, 1292 insertions(+), 503 deletions(-) create mode 100644 src/plugins/clangcodemodel/activationsequencecontextprocessor.cpp create mode 100644 src/plugins/clangcodemodel/activationsequencecontextprocessor.h delete mode 100644 src/plugins/clangcodemodel/test/clangcompletioncontextanalyzertest.cpp rename src/plugins/clangcodemodel/test/clangcompletioncontextanalyzertest.h => tests/unit/mockup/clangcodemodel/clangcompletionassistinterface.h (68%) create mode 100644 tests/unit/mockup/texteditor/assistenums.h create mode 100644 tests/unit/mockup/texteditor/codeassist/assistinterface.h create mode 100644 tests/unit/unittest/activationsequencecontextprocessortest.cpp create mode 100644 tests/unit/unittest/clangcompletioncontextanalyzertest.cpp diff --git a/src/plugins/clangcodemodel/activationsequencecontextprocessor.cpp b/src/plugins/clangcodemodel/activationsequencecontextprocessor.cpp new file mode 100644 index 00000000000..6edb842613d --- /dev/null +++ b/src/plugins/clangcodemodel/activationsequencecontextprocessor.cpp @@ -0,0 +1,249 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing +** +** 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 The Qt Company. For licensing terms and +** conditions see http://www.qt.io/terms-conditions. For further information +** use the contact form at http://www.qt.io/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 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +****************************************************************************/ + +#include "activationsequencecontextprocessor.h" + +#include "activationsequenceprocessor.h" + +#include +#include +#include + +#include +#include + +namespace ClangCodeModel { +namespace Internal { + +ActivationSequenceContextProcessor::ActivationSequenceContextProcessor(const ClangCompletionAssistInterface *assistInterface) + : m_textCursor(assistInterface->textDocument()), + m_assistInterface(assistInterface), + m_positionInDocument(assistInterface->position()), + m_positionAfterOperator(m_positionInDocument), + m_positionBeforeOperator(m_positionAfterOperator) + +{ + m_textCursor.setPosition(m_positionInDocument); + + process(); +} + +CPlusPlus::Kind ActivationSequenceContextProcessor::completionKind() const +{ + return m_completionKind; +} + +const QTextCursor &ActivationSequenceContextProcessor::textCursor_forTestOnly() const +{ + return m_textCursor; +} + +int ActivationSequenceContextProcessor::positionAfterOperator() const +{ + return m_positionAfterOperator; +} + +int ActivationSequenceContextProcessor::positionBeforeOperator() const +{ + return m_positionBeforeOperator; +} + +void ActivationSequenceContextProcessor::process() +{ + skipeWhiteSpacesAndIdentifierBeforeCursor(); + processActivationSequence(); + + if (m_completionKind != CPlusPlus::T_EOF_SYMBOL) { + processStringLiteral(); + processComma(); + generateTokens(); + processDoxygenComment(); + processComment(); + processInclude(); + processSlashOutsideOfAString(); + processLeftParen(); + processPreprocessorInclude(); + resetPositionForEOFCompletionKind(); + } +} + +void ActivationSequenceContextProcessor::processActivationSequence() +{ + const auto activationSequence = m_assistInterface->textAt(m_positionInDocument - 3, 3); + ActivationSequenceProcessor activationSequenceProcessor(activationSequence, + m_positionInDocument, + true); + + m_completionKind = activationSequenceProcessor.completionKind(); + m_positionBeforeOperator = activationSequenceProcessor.position(); + +} + +void ActivationSequenceContextProcessor::processStringLiteral() +{ + if (m_completionKind == CPlusPlus::T_STRING_LITERAL) { + QTextCursor selectionTextCursor = m_textCursor; + selectionTextCursor.movePosition(QTextCursor::StartOfLine, QTextCursor::KeepAnchor); + QString selection = selectionTextCursor.selectedText(); + if (selection.indexOf(QLatin1Char('"')) < selection.length() - 1) + m_completionKind = CPlusPlus::T_EOF_SYMBOL; + } +} + +void ActivationSequenceContextProcessor::processComma() +{ + if (m_completionKind == CPlusPlus::T_COMMA) { + CPlusPlus::ExpressionUnderCursor expressionUnderCursor(m_assistInterface->languageFeatures()); + if (expressionUnderCursor.startOfFunctionCall(m_textCursor) == -1) + m_completionKind = CPlusPlus::T_EOF_SYMBOL; + } +} + +void ActivationSequenceContextProcessor::generateTokens() +{ + CPlusPlus::SimpleLexer tokenize; + tokenize.setLanguageFeatures(m_assistInterface->languageFeatures()); + tokenize.setSkipComments(false); + auto state = CPlusPlus::BackwardsScanner::previousBlockState(m_textCursor.block()); + m_tokens = tokenize(m_textCursor.block().text(), state); + int leftOfCursorTokenIndex = std::max(0, m_textCursor.positionInBlock() - 1); + m_tokenIndex= CPlusPlus::SimpleLexer::tokenBefore(m_tokens, leftOfCursorTokenIndex); // get the token at the left of the cursor + if (m_tokenIndex > -1) + m_token = m_tokens.at(m_tokenIndex); +} + +void ActivationSequenceContextProcessor::processDoxygenComment() +{ + if (m_completionKind == CPlusPlus::T_DOXY_COMMENT + && !(m_token.is(CPlusPlus::T_DOXY_COMMENT) + || m_token.is(CPlusPlus::T_CPP_DOXY_COMMENT))) + m_completionKind = CPlusPlus::T_EOF_SYMBOL; +} + +void ActivationSequenceContextProcessor::processComment() +{ + if (m_token.is(CPlusPlus::T_COMMENT) || m_token.is(CPlusPlus::T_CPP_COMMENT)) + m_completionKind = CPlusPlus::T_EOF_SYMBOL; +} + +void ActivationSequenceContextProcessor::processInclude() +{ + if (m_token.isLiteral() && !isCompletionKindStringLiteralOrSlash()) + m_completionKind = CPlusPlus::T_EOF_SYMBOL; +} + +void ActivationSequenceContextProcessor::processSlashOutsideOfAString() +{ + if (m_completionKind ==CPlusPlus::T_SLASH + && (m_token.isNot(CPlusPlus::T_STRING_LITERAL) + && m_token.isNot(CPlusPlus::T_ANGLE_STRING_LITERAL))) + m_completionKind = CPlusPlus::T_EOF_SYMBOL; +} + +void ActivationSequenceContextProcessor::processLeftParen() +{ + if (m_completionKind == CPlusPlus::T_LPAREN) { + if (m_tokenIndex > 0) { + // look at the token at the left of T_LPAREN + const CPlusPlus::Token &previousToken = m_tokens.at(m_tokenIndex - 1); + switch (previousToken.kind()) { + case CPlusPlus::T_IDENTIFIER: + case CPlusPlus::T_GREATER: + case CPlusPlus::T_SIGNAL: + case CPlusPlus::T_SLOT: + break; // good + + default: + // that's a bad token :) + m_completionKind = CPlusPlus::T_EOF_SYMBOL; + } + } + } +} + +bool ActivationSequenceContextProcessor::isCompletionKindStringLiteralOrSlash() const +{ + return m_completionKind == CPlusPlus::T_STRING_LITERAL + || m_completionKind == CPlusPlus::T_ANGLE_STRING_LITERAL + || m_completionKind == CPlusPlus::T_SLASH; +} + +bool ActivationSequenceContextProcessor::isProbablyPreprocessorIncludeDirective() const +{ + return m_tokens.size() >= 3 + && m_tokens.at(0).is(CPlusPlus::T_POUND) + && m_tokens.at(1).is(CPlusPlus::T_IDENTIFIER) + && (m_tokens.at(2).is(CPlusPlus::T_STRING_LITERAL) + || m_tokens.at(2).is(CPlusPlus::T_ANGLE_STRING_LITERAL)); +} + +void ActivationSequenceContextProcessor::processPreprocessorInclude() +{ + if (isCompletionKindStringLiteralOrSlash()) { + if (isProbablyPreprocessorIncludeDirective()) { + const CPlusPlus::Token &directiveToken = m_tokens.at(1); + QString directive = m_textCursor.block().text().mid(directiveToken.bytesBegin(), + directiveToken.bytes()); + if (directive != QStringLiteral("include") + && directive != QStringLiteral("include_next") + && directive != QStringLiteral("import")) + m_completionKind = CPlusPlus::T_EOF_SYMBOL; + } else { + m_completionKind = CPlusPlus::T_EOF_SYMBOL; + } + } +} + +void ActivationSequenceContextProcessor::resetPositionForEOFCompletionKind() +{ + if (m_completionKind == CPlusPlus::T_EOF_SYMBOL) + m_positionBeforeOperator = m_positionInDocument; +} + +void ActivationSequenceContextProcessor::skipeWhiteSpacesAndIdentifierBeforeCursor() +{ + QTextDocument *document = m_assistInterface->textDocument(); + + const QRegExp findNonWhiteSpaceRegularExpression(QStringLiteral("[^\\s\\w]")); + + auto nonWhiteSpaceTextCursor = document->find(findNonWhiteSpaceRegularExpression, + m_positionInDocument, + QTextDocument::FindBackward); + + if (!nonWhiteSpaceTextCursor.isNull()) { + m_positionInDocument = nonWhiteSpaceTextCursor.position(); + m_positionAfterOperator = m_positionInDocument; + m_textCursor.setPosition(m_positionInDocument); + } +} + +} // namespace Internal +} // namespace ClangCodeModel + diff --git a/src/plugins/clangcodemodel/activationsequencecontextprocessor.h b/src/plugins/clangcodemodel/activationsequencecontextprocessor.h new file mode 100644 index 00000000000..268c8112d7a --- /dev/null +++ b/src/plugins/clangcodemodel/activationsequencecontextprocessor.h @@ -0,0 +1,92 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing +** +** 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 The Qt Company. For licensing terms and +** conditions see http://www.qt.io/terms-conditions. For further information +** use the contact form at http://www.qt.io/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 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +****************************************************************************/ + +#ifndef CLANGCODEMODEL_INTERNAL_ACTIVATIONSEQUENCECONTEXTPROCESSOR_H +#define CLANGCODEMODEL_INTERNAL_ACTIVATIONSEQUENCECONTEXTPROCESSOR_H + +#include + +#include + +#include + +QT_BEGIN_NAMESPACE +class QTextDocument; +QT_END_NAMESPACE + +namespace ClangCodeModel { +namespace Internal { + +class ActivationSequenceContextProcessor +{ +public: + ActivationSequenceContextProcessor(const ClangCompletionAssistInterface *assistInterface); + + CPlusPlus::Kind completionKind() const; + + const QTextCursor &textCursor_forTestOnly() const; + + int positionAfterOperator() const; + int positionBeforeOperator() const; + +protected: + void process(); + void skipeWhiteSpacesAndIdentifierBeforeCursor(); + void processActivationSequence(); + void processStringLiteral(); + void processComma(); + void generateTokens(); + void processDoxygenComment(); + void processComment(); + void processInclude(); + void processSlashOutsideOfAString(); + void processLeftParen(); + void processPreprocessorInclude(); + void resetPositionForEOFCompletionKind(); + + bool isCompletionKindStringLiteralOrSlash() const; + bool isProbablyPreprocessorIncludeDirective() const; + +private: + QVector m_tokens; + QTextCursor m_textCursor; + CPlusPlus::Token m_token; + const ClangCompletionAssistInterface *m_assistInterface; + int m_tokenIndex; + int m_positionInDocument; + int m_positionAfterOperator; + int m_positionBeforeOperator; + CPlusPlus::Kind m_completionKind; +}; + +} // namespace Internal +} // namespace ClangCodeModel + +#endif // CLANGCODEMODEL_INTERNAL_ACTIVATIONSEQUENCECONTEXTPROCESSOR_H diff --git a/src/plugins/clangcodemodel/activationsequenceprocessor.cpp b/src/plugins/clangcodemodel/activationsequenceprocessor.cpp index fac5a58c28b..a6a5076a31c 100644 --- a/src/plugins/clangcodemodel/activationsequenceprocessor.cpp +++ b/src/plugins/clangcodemodel/activationsequenceprocessor.cpp @@ -164,8 +164,8 @@ void ActivationSequenceProcessor::processArrowStar() void ActivationSequenceProcessor::processDoxyGenComment() { - if ((m_char2 == QLatin1Char('\\') || m_char2 == QLatin1Char('@')) - && (m_char3.isNull() || m_char3.isSpace())) { + if ((m_char2.isNull() || m_char2.isSpace()) + && (m_char3 == QLatin1Char('\\') || m_char3 == QLatin1Char('@'))) { m_completionKind = CPlusPlus::T_DOXY_COMMENT; m_offset = 1; } diff --git a/src/plugins/clangcodemodel/clangcodemodel.pro b/src/plugins/clangcodemodel/clangcodemodel.pro index 9ad3b7a989a..b4758730d88 100644 --- a/src/plugins/clangcodemodel/clangcodemodel.pro +++ b/src/plugins/clangcodemodel/clangcodemodel.pro @@ -12,6 +12,7 @@ DEFINES += "\"CLANG_RESOURCE_DIR=\\\"$${LLVM_LIBDIR}/clang/$${LLVM_VERSION}/incl unix:QMAKE_LFLAGS += -Wl,-rpath,\'$$LLVM_LIBDIR\' SOURCES += \ + activationsequencecontextprocessor.cpp \ activationsequenceprocessor.cpp \ clangassistproposal.cpp \ clangassistproposalitem.cpp \ @@ -48,6 +49,7 @@ SOURCES += \ HEADERS += \ + activationsequencecontextprocessor.h \ activationsequenceprocessor.h \ clangassistproposal.h \ clangassistproposalitem.h \ @@ -107,13 +109,10 @@ equals(TEST, 1) { test/clang_tests_database.qrc HEADERS += \ - test/clangcodecompletion_test.h \ - test/clangcompletioncontextanalyzertest.h + test/clangcodecompletion_test.h SOURCES += \ - test/clangcodecompletion_test.cpp \ - test/clangcompletioncontextanalyzertest.cpp - + test/clangcodecompletion_test.cpp DISTFILES += \ test/mysource.cpp \ diff --git a/src/plugins/clangcodemodel/clangcodemodel.qbs b/src/plugins/clangcodemodel/clangcodemodel.qbs index e0ba967fb76..ad6d25dda0f 100644 --- a/src/plugins/clangcodemodel/clangcodemodel.qbs +++ b/src/plugins/clangcodemodel/clangcodemodel.qbs @@ -53,6 +53,8 @@ QtcPlugin { name: "Completion support" condition: product.clangCompletion files: [ + "activationsequencecontextprocessor.cpp", + "activationsequencecontextprocessor.h", "activationsequenceprocessor.cpp", "activationsequenceprocessor.h", "clangassistproposal.cpp", @@ -104,8 +106,6 @@ QtcPlugin { "clang_tests_database.qrc", "clangcodecompletion_test.cpp", "clangcodecompletion_test.h", - "clangcompletioncontextanalyzertest.cpp", - "clangcompletioncontextanalyzertest.h", ] } diff --git a/src/plugins/clangcodemodel/clangcodemodelplugin.cpp b/src/plugins/clangcodemodel/clangcodemodelplugin.cpp index 8f68803eb0c..c6c42855a93 100644 --- a/src/plugins/clangcodemodel/clangcodemodelplugin.cpp +++ b/src/plugins/clangcodemodel/clangcodemodelplugin.cpp @@ -36,7 +36,6 @@ #ifdef WITH_TESTS # include "test/clangcodecompletion_test.h" -# include "test/clangcompletioncontextanalyzertest.h" #endif #include @@ -93,7 +92,6 @@ QList ClangCodeModelPlugin::createTestObjects() const { return { new Tests::ClangCodeCompletionTest, - new Tests::ClangCompletionContextAnalyzerTest }; } #endif diff --git a/src/plugins/clangcodemodel/clangcodemodelunittestfiles.pri b/src/plugins/clangcodemodel/clangcodemodelunittestfiles.pri index e40a4c8fa4b..71055941787 100644 --- a/src/plugins/clangcodemodel/clangcodemodelunittestfiles.pri +++ b/src/plugins/clangcodemodel/clangcodemodelunittestfiles.pri @@ -1,7 +1,11 @@ INCLUDEPATH += $$PWD SOURCES += $$PWD/completionchunkstotextconverter.cpp \ - $$PWD/activationsequenceprocessor.cpp + $$PWD/activationsequenceprocessor.cpp \ + $$PWD/activationsequencecontextprocessor.cpp \ + $$PWD/clangcompletioncontextanalyzer.cpp HEADERS += $$PWD/completionchunkstotextconverter.h \ - $$PWD/activationsequenceprocessor.h + $$PWD/activationsequenceprocessor.h \ + $$PWD/activationsequencecontextprocessor.h \ + $$PWD/clangcompletioncontextanalyzer.h diff --git a/src/plugins/clangcodemodel/clangcompletioncontextanalyzer.cpp b/src/plugins/clangcodemodel/clangcompletioncontextanalyzer.cpp index 568eb9e1e8f..f8d63a4a3e4 100644 --- a/src/plugins/clangcodemodel/clangcompletioncontextanalyzer.cpp +++ b/src/plugins/clangcodemodel/clangcompletioncontextanalyzer.cpp @@ -31,6 +31,9 @@ #include "clangcompletioncontextanalyzer.h" +#include "activationsequenceprocessor.h" +#include "activationsequencecontextprocessor.h" + #include #include @@ -47,80 +50,6 @@ using namespace CPlusPlus; namespace { -int activationSequenceChar(const QChar &ch, const QChar &ch2, const QChar &ch3, - unsigned *kind, bool wantFunctionCall) -{ - int referencePosition = 0; - int completionKind = T_EOF_SYMBOL; - switch (ch.toLatin1()) { - case '.': - if (ch2 != QLatin1Char('.')) { - completionKind = T_DOT; - referencePosition = 1; - } - break; - case ',': - completionKind = T_COMMA; - referencePosition = 1; - break; - case '(': - if (wantFunctionCall) { - completionKind = T_LPAREN; - referencePosition = 1; - } - break; - case ':': - if (ch3 != QLatin1Char(':') && ch2 == QLatin1Char(':')) { - completionKind = T_COLON_COLON; - referencePosition = 2; - } - break; - case '>': - if (ch2 == QLatin1Char('-')) { - completionKind = T_ARROW; - referencePosition = 2; - } - break; - case '*': - if (ch2 == QLatin1Char('.')) { - completionKind = T_DOT_STAR; - referencePosition = 2; - } else if (ch3 == QLatin1Char('-') && ch2 == QLatin1Char('>')) { - completionKind = T_ARROW_STAR; - referencePosition = 3; - } - break; - case '\\': - case '@': - if (ch2.isNull() || ch2.isSpace()) { - completionKind = T_DOXY_COMMENT; - referencePosition = 1; - } - break; - case '<': - completionKind = T_ANGLE_STRING_LITERAL; - referencePosition = 1; - break; - case '"': - completionKind = T_STRING_LITERAL; - referencePosition = 1; - break; - case '/': - completionKind = T_SLASH; - referencePosition = 1; - break; - case '#': - completionKind = T_POUND; - referencePosition = 1; - break; - } - - if (kind) - *kind = completionKind; - - return referencePosition; -} - bool isTokenForIncludePathCompletion(unsigned tokenKind) { return tokenKind == T_STRING_LITERAL @@ -143,7 +72,7 @@ namespace ClangCodeModel { namespace Internal { ClangCompletionContextAnalyzer::ClangCompletionContextAnalyzer( - const TextEditor::AssistInterface *assistInterface, + const ClangCompletionAssistInterface *assistInterface, CPlusPlus::LanguageFeatures languageFeatures) : m_interface(assistInterface) , m_languageFeatures(languageFeatures) @@ -153,67 +82,20 @@ ClangCompletionContextAnalyzer::ClangCompletionContextAnalyzer( void ClangCompletionContextAnalyzer::analyze() { QTC_ASSERT(m_interface, return); - const int startOfName = findStartOfName(); - m_positionForProposal = startOfName; setActionAndClangPosition(PassThroughToLibClang, -1); - const int endOfOperator = skipPrecedingWhitespace(startOfName); - m_completionOperator = T_EOF_SYMBOL; - m_positionEndOfExpression = startOfOperator(endOfOperator, &m_completionOperator, - /*want function call =*/ true); + ActivationSequenceContextProcessor activationSequenceContextProcessor(m_interface); + m_completionOperator = activationSequenceContextProcessor.completionKind(); + int afterOperatorPosition = activationSequenceContextProcessor.positionAfterOperator(); + m_positionEndOfExpression = activationSequenceContextProcessor.positionBeforeOperator(); + m_positionForProposal = activationSequenceContextProcessor.positionAfterOperator(); - if (isTokenForPassThrough(m_completionOperator)) { - setActionAndClangPosition(PassThroughToLibClang, endOfOperator); - return; - } else if (m_completionOperator == T_DOXY_COMMENT) { - setActionAndClangPosition(CompleteDoxygenKeyword, -1); - return; - } else if (m_completionOperator == T_POUND) { - // TODO: Check if libclang can complete preprocessor directives - setActionAndClangPosition(CompletePreprocessorDirective, -1); - return; - } else if (isTokenForIncludePathCompletion(m_completionOperator)) { - setActionAndClangPosition(CompleteIncludePath, -1); - return; - } - - ExpressionUnderCursor expressionUnderCursor(m_languageFeatures); - QTextCursor textCursor(m_interface->textDocument()); + const bool actionIsSet = handleNonFunctionCall(afterOperatorPosition); - if (m_completionOperator == T_COMMA) { // For function hints - textCursor.setPosition(m_positionEndOfExpression); - const int start = expressionUnderCursor.startOfFunctionCall(textCursor); - QTC_ASSERT(start != -1, setActionAndClangPosition(PassThroughToLibClang, startOfName); return); - m_positionEndOfExpression = start; - m_positionForProposal = start + 1; // After '(' of function call - m_completionOperator = T_LPAREN; - } - - if (m_completionOperator == T_LPAREN) { - textCursor.setPosition(m_positionEndOfExpression); - const QString expression = expressionUnderCursor(textCursor); - - if (expression.endsWith(QLatin1String("SIGNAL"))) { - setActionAndClangPosition(CompleteSignal, endOfOperator); - } else if (expression.endsWith(QLatin1String("SLOT"))) { - setActionAndClangPosition(CompleteSlot, endOfOperator); - } else if (m_interface->position() != endOfOperator) { - // No function completion if cursor is not after '(' or ',' - m_positionForProposal = startOfName; - setActionAndClangPosition(PassThroughToLibClang, endOfOperator); - } else { - const FunctionInfo functionInfo = analyzeFunctionCall(endOfOperator); - m_functionName = functionInfo.functionName; - setActionAndClangPosition(PassThroughToLibClangAfterLeftParen, - functionInfo.functionNamePosition); - } - - return; + if (!actionIsSet) { + handleCommaInFunctionCall(); + handleFunctionCall(afterOperatorPosition); } - - QTC_CHECK(!"Unexpected completion context"); - setActionAndClangPosition(PassThroughToLibClang, startOfName); - return; } ClangCompletionContextAnalyzer::FunctionInfo ClangCompletionContextAnalyzer::analyzeFunctionCall( @@ -260,110 +142,75 @@ int ClangCompletionContextAnalyzer::skipPrecedingWhitespace(int position) const return position; } -int ClangCompletionContextAnalyzer::startOfOperator(int pos, - unsigned *kind, - bool wantFunctionCall) const +void ClangCompletionContextAnalyzer::setActionAndClangPosition(CompletionAction action, + int position) { - const QChar ch = pos > -1 ? m_interface->characterAt(pos - 1) : QChar(); - const QChar ch2 = pos > 0 ? m_interface->characterAt(pos - 2) : QChar(); - const QChar ch3 = pos > 1 ? m_interface->characterAt(pos - 3) : QChar(); - - int start = pos - activationSequenceChar(ch, ch2, ch3, kind, wantFunctionCall); - if (start != pos) { - QTextCursor tc(m_interface->textDocument()); - tc.setPosition(pos); - - // Include completion: make sure the quote character is the first one on the line - if (*kind == T_STRING_LITERAL) { - QTextCursor s = tc; - s.movePosition(QTextCursor::StartOfLine, QTextCursor::KeepAnchor); - QString sel = s.selectedText(); - if (sel.indexOf(QLatin1Char('"')) < sel.length() - 1) { - *kind = T_EOF_SYMBOL; - start = pos; - } - } else if (*kind == T_COMMA) { - ExpressionUnderCursor expressionUnderCursor(m_languageFeatures); - if (expressionUnderCursor.startOfFunctionCall(tc) == -1) { - *kind = T_EOF_SYMBOL; - start = pos; - } - } + QTC_CHECK(position >= -1); + m_completionAction = action; + m_positionForClang = position; +} - SimpleLexer tokenize; - tokenize.setLanguageFeatures(m_languageFeatures); - tokenize.setSkipComments(false); - const Tokens &tokens = tokenize(tc.block().text(), BackwardsScanner::previousBlockState(tc.block())); - const int tokenIdx = SimpleLexer::tokenBefore(tokens, qMax(0, tc.positionInBlock() - 1)); // get the token at the left of the cursor - const Token tk = (tokenIdx == -1) ? Token() : tokens.at(tokenIdx); +void ClangCompletionContextAnalyzer::setAction(ClangCompletionContextAnalyzer::CompletionAction action) +{ + setActionAndClangPosition(action, -1); +} - if (*kind == T_DOXY_COMMENT && !(tk.is(T_DOXY_COMMENT) || tk.is(T_CPP_DOXY_COMMENT))) { - *kind = T_EOF_SYMBOL; - start = pos; - } - // Don't complete in comments or strings, but still check for include completion - else if (tk.is(T_COMMENT) || tk.is(T_CPP_COMMENT) || - (tk.isLiteral() && (*kind != T_STRING_LITERAL - && *kind != T_ANGLE_STRING_LITERAL - && *kind != T_SLASH))) { - *kind = T_EOF_SYMBOL; - start = pos; - } - // Include completion: can be triggered by slash, but only in a string - else if (*kind == T_SLASH && (tk.isNot(T_STRING_LITERAL) && tk.isNot(T_ANGLE_STRING_LITERAL))) { - *kind = T_EOF_SYMBOL; - start = pos; - } - else if (*kind == T_LPAREN) { - if (tokenIdx > 0) { - const Token &previousToken = tokens.at(tokenIdx - 1); // look at the token at the left of T_LPAREN - switch (previousToken.kind()) { - case T_IDENTIFIER: - case T_GREATER: - case T_SIGNAL: - case T_SLOT: - break; // good - - default: - // that's a bad token :) - *kind = T_EOF_SYMBOL; - start = pos; - } - } - } - // Check for include preprocessor directive - else if (*kind == T_STRING_LITERAL || *kind == T_ANGLE_STRING_LITERAL || *kind == T_SLASH) { - bool include = false; - if (tokens.size() >= 3) { - if (tokens.at(0).is(T_POUND) && tokens.at(1).is(T_IDENTIFIER) && (tokens.at(2).is(T_STRING_LITERAL) || - tokens.at(2).is(T_ANGLE_STRING_LITERAL))) { - const Token &directiveToken = tokens.at(1); - QString directive = tc.block().text().mid(directiveToken.bytesBegin(), - directiveToken.bytes()); - if (directive == QLatin1String("include") || - directive == QLatin1String("include_next") || - directive == QLatin1String("import")) { - include = true; - } - } - } - - if (!include) { - *kind = T_EOF_SYMBOL; - start = pos; - } - } +void ClangCompletionContextAnalyzer::handleCommaInFunctionCall() +{ + if (m_completionOperator == T_COMMA) { + ExpressionUnderCursor expressionUnderCursor(m_languageFeatures); + QTextCursor textCursor(m_interface->textDocument()); + textCursor.setPosition(m_positionEndOfExpression); + const int start = expressionUnderCursor.startOfFunctionCall(textCursor); + m_positionEndOfExpression = start; + m_positionForProposal = start + 1; // After '(' of function call + m_completionOperator = T_LPAREN; } +} + +void ClangCompletionContextAnalyzer::handleFunctionCall(int afterOperatorPosition) +{ + if (m_completionOperator == T_LPAREN) { + ExpressionUnderCursor expressionUnderCursor(m_languageFeatures); + QTextCursor textCursor(m_interface->textDocument()); + textCursor.setPosition(m_positionEndOfExpression); + const QString expression = expressionUnderCursor(textCursor); - return start; + if (expression.endsWith(QLatin1String("SIGNAL"))) { + setActionAndClangPosition(CompleteSignal, afterOperatorPosition); + } else if (expression.endsWith(QLatin1String("SLOT"))) { + setActionAndClangPosition(CompleteSlot, afterOperatorPosition); + } else if (m_interface->position() != afterOperatorPosition) { + // No function completion if cursor is not after '(' or ',' + m_positionForProposal = afterOperatorPosition; + setActionAndClangPosition(PassThroughToLibClang, afterOperatorPosition); + } else { + const FunctionInfo functionInfo = analyzeFunctionCall(afterOperatorPosition); + m_functionName = functionInfo.functionName; + setActionAndClangPosition(PassThroughToLibClangAfterLeftParen, + functionInfo.functionNamePosition); + } + } } -void ClangCompletionContextAnalyzer::setActionAndClangPosition(CompletionAction action, - int position) +bool ClangCompletionContextAnalyzer::handleNonFunctionCall(int position) { - QTC_CHECK(position >= -1); - m_completionAction = action; - m_positionForClang = position; + if (isTokenForPassThrough(m_completionOperator)) { + setActionAndClangPosition(PassThroughToLibClang, position); + return true; + } else if (m_completionOperator == T_DOXY_COMMENT) { + setAction(CompleteDoxygenKeyword); + return true; + } else if (m_completionOperator == T_POUND) { + // TODO: Check if libclang can complete preprocessor directives + setAction(CompletePreprocessorDirective); + return true; + } else if (isTokenForIncludePathCompletion(m_completionOperator)) { + setAction(CompleteIncludePath); + return true; + } + + return false; } } // namespace Internal diff --git a/src/plugins/clangcodemodel/clangcompletioncontextanalyzer.h b/src/plugins/clangcodemodel/clangcompletioncontextanalyzer.h index 3a0a8f21ff3..2234adf6048 100644 --- a/src/plugins/clangcodemodel/clangcompletioncontextanalyzer.h +++ b/src/plugins/clangcodemodel/clangcompletioncontextanalyzer.h @@ -40,10 +40,12 @@ namespace TextEditor { class AssistInterface; } namespace ClangCodeModel { namespace Internal { +class ClangCompletionAssistInterface; + class ClangCompletionContextAnalyzer { public: - ClangCompletionContextAnalyzer(const TextEditor::AssistInterface *assistInterface, + ClangCompletionContextAnalyzer(const ClangCompletionAssistInterface *assistInterface, CPlusPlus::LanguageFeatures languageFeatures); void analyze(); @@ -72,16 +74,21 @@ class ClangCompletionContextAnalyzer int findStartOfName(int position = -1) const; int skipPrecedingWhitespace(int position) const; - int startOfOperator(int position, unsigned *kind, bool wantFunctionCall) const; void setActionAndClangPosition(CompletionAction action, int position); + void setAction(CompletionAction action); + + bool handleNonFunctionCall(int position); + void handleCommaInFunctionCall(); + void handleFunctionCall(int endOfOperator); - const TextEditor::AssistInterface * const m_interface; // Not owned +private: + const ClangCompletionAssistInterface *m_interface; // Not owned const CPlusPlus::LanguageFeatures m_languageFeatures; // TODO: Get from assistInterface?! // Results CompletionAction m_completionAction = PassThroughToLibClang; - unsigned m_completionOperator = CPlusPlus::T_EOF_SYMBOL; + CPlusPlus::Kind m_completionOperator = CPlusPlus::T_EOF_SYMBOL; int m_positionForProposal = -1; int m_positionForClang = -1; int m_positionEndOfExpression = -1; diff --git a/src/plugins/clangcodemodel/test/clangcompletioncontextanalyzertest.cpp b/src/plugins/clangcodemodel/test/clangcompletioncontextanalyzertest.cpp deleted file mode 100644 index afa881eb05c..00000000000 --- a/src/plugins/clangcodemodel/test/clangcompletioncontextanalyzertest.cpp +++ /dev/null @@ -1,234 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2015 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing -** -** 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 The Qt Company. For licensing terms and -** conditions see http://www.qt.io/terms-conditions. For further information -** use the contact form at http://www.qt.io/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 or version 3 as published by the Free -** Software Foundation and appearing in the file LICENSE.LGPLv21 and -** LICENSE.LGPLv3 included in the packaging of this file. Please review the -** following information to ensure the GNU Lesser General Public License -** requirements will be met: https://www.gnu.org/licenses/lgpl.html and -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, The Qt Company gives you certain additional -** rights. These rights are described in The Qt Company LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -****************************************************************************/ - -#include "clangcompletioncontextanalyzertest.h" - -#include -#include - -#include - -#include -#include -#include - -using namespace CPlusPlus; -using namespace ClangCodeModel; -using namespace ClangCodeModel::Internal; -using namespace ClangCodeModel::Internal::Tests; - -Q_DECLARE_METATYPE(ClangCodeModel::Internal::ClangCompletionContextAnalyzer::CompletionAction) - -QT_BEGIN_NAMESPACE -namespace QTest { - -template<> char *toString(const ClangCompletionContextAnalyzer::CompletionAction &action) -{ - using CCA = ClangCompletionContextAnalyzer; - - switch (action) { - case CCA::PassThroughToLibClang: - return qstrdup("PassThroughToLibClang"); - case CCA::PassThroughToLibClangAfterLeftParen: - return qstrdup("PassThroughToLibClangAfterLeftParen"); - case CCA::CompleteDoxygenKeyword: - return qstrdup("CompleteDoxygenKeyword"); - case CCA::CompleteIncludePath: - return qstrdup("CompleteIncludePath"); - case CCA::CompletePreprocessorDirective: - return qstrdup("CompletePreprocessorDirective"); - case CCA::CompleteSignal: - return qstrdup("CompleteSignal"); - case CCA::CompleteSlot: - return qstrdup("CompleteSlot"); - } - return qstrdup("Unexpected Value"); -} - -} // namespace QTest -QT_END_NAMESPACE - -namespace { - -typedef QByteArray _; - -class DummyAssistInterface : public TextEditor::AssistInterface -{ -public: - DummyAssistInterface(const QByteArray &text, int position) - : AssistInterface(new QTextDocument(QString::fromUtf8(text)), - position, - QLatin1String(""), - TextEditor::ActivationCharacter) - {} - ~DummyAssistInterface() { delete textDocument(); } -}; - -class TestDocument -{ -public: - TestDocument(const QByteArray &theSource) - : source(theSource) - , position(theSource.lastIndexOf('@')) // Use 'lastIndexOf' due to doxygen: "//! @keyword" - { - QTC_CHECK(position != -1); - source.remove(position, 1); - } - - QByteArray source; - int position; -}; - -bool isAPassThroughToLibClangAction(ClangCompletionContextAnalyzer::CompletionAction action) -{ - return action == ClangCompletionContextAnalyzer::PassThroughToLibClang - || action == ClangCompletionContextAnalyzer::PassThroughToLibClangAfterLeftParen; -} - -ClangCompletionContextAnalyzer runAnalyzer(const TestDocument &testDocument) -{ - DummyAssistInterface assistInterface(testDocument.source, testDocument.position); - ClangCompletionContextAnalyzer analyzer(&assistInterface, LanguageFeatures::defaultFeatures()); - analyzer.analyze(); - return analyzer; -} - -} // anonymous namespace - -void ClangCompletionContextAnalyzerTest::testPassThroughToClangAndSignalSlotRecognition_data() -{ - QTest::addColumn("givenSource"); - QTest::addColumn("expectedCompletionAction"); - QTest::addColumn("expectedDiffBetweenCursorAndCalculatedClangPosition"); - QTest::addColumn("expectedDiffBetweenCursorAndCalculatedProposalPosition"); - - using CCA = ClangCompletionContextAnalyzer; - - QTest::newRow("members - dot 1") << _("o.mem@") << CCA::PassThroughToLibClang << -3 << -3; - QTest::newRow("members - dot 2") << _("o. mem@") << CCA::PassThroughToLibClang << -4 << -3; - QTest::newRow("members - dot 3") << _("o.@mem") << CCA::PassThroughToLibClang << 0 << 0; - QTest::newRow("members - dot 4") << _("o. @ mem") << CCA::PassThroughToLibClang << -1 << 0; - QTest::newRow("members - arrow 1") << _("o->mem@") << CCA::PassThroughToLibClang << -3 << -3; - QTest::newRow("members - arrow 2") << _("o-> mem@") << CCA::PassThroughToLibClang << -4 << -3; - QTest::newRow("members - arrow 3") << _("o->@mem") << CCA::PassThroughToLibClang << 0 << 0; - QTest::newRow("members - arrow 4") << _("o-> @ mem") << CCA::PassThroughToLibClang << -1 << 0; - - QTest::newRow("call 1") << _("f(@") << CCA::PassThroughToLibClangAfterLeftParen << -2 << 0; - QTest::newRow("call 2") << _("f(1,@") << CCA::PassThroughToLibClangAfterLeftParen << -4 << -2; - QTest::newRow("call 3") << _("f(1, @") << CCA::PassThroughToLibClang << -1 << 0; - - QTest::newRow("qt4 signals 1") << _("SIGNAL(@") << CCA::CompleteSignal << 0 << 0; - QTest::newRow("qt4 signals 2") << _("SIGNAL(foo@") << CCA::CompleteSignal << -3 << -3; - QTest::newRow("qt4 slots 1") << _("SLOT(@") << CCA::CompleteSlot << 0 << 0; - QTest::newRow("qt4 slots 2") << _("SLOT(foo@") << CCA::CompleteSlot << -3 << -3; -} - -void ClangCompletionContextAnalyzerTest::testPassThroughToClangAndSignalSlotRecognition() -{ - QFETCH(QByteArray, givenSource); - QFETCH(ClangCompletionContextAnalyzer::CompletionAction, expectedCompletionAction); - QFETCH(int, expectedDiffBetweenCursorAndCalculatedClangPosition); - QFETCH(int, expectedDiffBetweenCursorAndCalculatedProposalPosition); - - const TestDocument testDocument(givenSource); - ClangCompletionContextAnalyzer analyzer = runAnalyzer(testDocument); - - QCOMPARE(analyzer.completionAction(), expectedCompletionAction); - QCOMPARE(analyzer.positionForClang() - testDocument.position, - expectedDiffBetweenCursorAndCalculatedClangPosition); - QCOMPARE(analyzer.positionForProposal() - testDocument.position, - expectedDiffBetweenCursorAndCalculatedProposalPosition); -} - -void ClangCompletionContextAnalyzerTest::testSpecialCompletionRecognition_data() -{ - QTest::addColumn("givenSource"); - QTest::addColumn("expectedCompletionAction"); - QTest::addColumn("expectedDiffBetweenCursorAndCalculatedProposalPosition"); - - using CCA = ClangCompletionContextAnalyzer; - - QTest::newRow("doxygen keywords 1") << _("//! \\@") << CCA::CompleteDoxygenKeyword << 0; - QTest::newRow("doxygen keywords 3") << _("//! @@") << CCA::CompleteDoxygenKeyword << 0; - QTest::newRow("doxygen keywords 2") << _("//! \\par@") << CCA::CompleteDoxygenKeyword << -3; - - QTest::newRow("pp directives 1") << _("#@") << CCA::CompletePreprocessorDirective << 0; - QTest::newRow("pp directives 2") << _("#if@") << CCA::CompletePreprocessorDirective << -2; - - QTest::newRow("pp include path 1") << _("#include \"foo@\"") << CCA::CompleteIncludePath << -3; - QTest::newRow("pp include path 2") << _("#include ") << CCA::CompleteIncludePath << -3; - QTest::newRow("pp include path 3") << _("#include ") << CCA::CompleteIncludePath << 0; -} - -void ClangCompletionContextAnalyzerTest::testSpecialCompletionRecognition() -{ - QFETCH(QByteArray, givenSource); - QFETCH(ClangCompletionContextAnalyzer::CompletionAction, expectedCompletionAction); - QFETCH(int, expectedDiffBetweenCursorAndCalculatedProposalPosition); - - const TestDocument testDocument(givenSource); - ClangCompletionContextAnalyzer analyzer = runAnalyzer(testDocument); - - QCOMPARE(analyzer.completionAction(), expectedCompletionAction); - QCOMPARE(analyzer.positionForClang(), -1); - QCOMPARE(analyzer.positionForProposal() - testDocument.position, - expectedDiffBetweenCursorAndCalculatedProposalPosition); -} - -void ClangCompletionContextAnalyzerTest::testAvoidSpecialCompletionRecognition_data() -{ - QTest::addColumn("givenSource"); - - QTest::newRow("no special completion for literals 1") << _("\"@"); - QTest::newRow("no special completion for literals 2") << _(" \"@"); - QTest::newRow("no special completion for literals 3") << _("\"text\"@"); - QTest::newRow("no special completion for literals 4") << _("\"hello cruel@ world\""); - QTest::newRow("no special completion for literals 5") << _("'@'"); - QTest::newRow("no special completion for literals 6") << _("'a@'"); - QTest::newRow("no special completion for comma operator") << _("a = b,@\""); - QTest::newRow("no special completion for doxygen marker not in doxygen comment 1") << _("@@"); - QTest::newRow("no special completion for doxygen marker not in doxygen comment 2") << _("\\@"); - QTest::newRow("no special completion in comments 1") << _("// text@"); - QTest::newRow("no special completion in comments 2") << _("/* text@ */"); - QTest::newRow("no special completion for slash") << _("5 /@"); - QTest::newRow("no special completion for '(' 1") << _("(@"); - QTest::newRow("no special completion for '(' 2") << _("((@"); - QTest::newRow("no special completion for '(' 3") << _("*(@"); -} - -void ClangCompletionContextAnalyzerTest::testAvoidSpecialCompletionRecognition() -{ - QFETCH(QByteArray, givenSource); - - const TestDocument testDocument(givenSource); - ClangCompletionContextAnalyzer analyzer = runAnalyzer(testDocument); - - QVERIFY(isAPassThroughToLibClangAction(analyzer.completionAction())); -} diff --git a/src/plugins/clangcodemodel/test/clangcompletioncontextanalyzertest.h b/tests/unit/mockup/clangcodemodel/clangcompletionassistinterface.h similarity index 68% rename from src/plugins/clangcodemodel/test/clangcompletioncontextanalyzertest.h rename to tests/unit/mockup/clangcodemodel/clangcompletionassistinterface.h index 4b8dbbc7ef8..c97bd4d5626 100644 --- a/src/plugins/clangcodemodel/test/clangcompletioncontextanalyzertest.h +++ b/tests/unit/mockup/clangcodemodel/clangcompletionassistinterface.h @@ -28,32 +28,32 @@ ** ****************************************************************************/ -#ifndef CLANGCOMPLETIONCONTEXTANALYZERTEST_H -#define CLANGCOMPLETIONCONTEXTANALYZERTEST_H +#ifndef CLANGCODEMODEL_INTERNAL_CLANGCOMPLETIONASSISTINTERFACE_H +#define CLANGCODEMODEL_INTERNAL_CLANGCOMPLETIONASSISTINTERFACE_H -#include +#include + +#include namespace ClangCodeModel { namespace Internal { -namespace Tests { -class ClangCompletionContextAnalyzerTest : public QObject +class ClangCompletionAssistInterface: public TextEditor::AssistInterface { - Q_OBJECT - -private slots: - void testPassThroughToClangAndSignalSlotRecognition(); - void testPassThroughToClangAndSignalSlotRecognition_data(); +public: + ClangCompletionAssistInterface(const QByteArray &text, + int position) + : TextEditor::AssistInterface(text, position), + languageFeatures_(CPlusPlus::LanguageFeatures::defaultFeatures()) + {} - void testSpecialCompletionRecognition(); - void testSpecialCompletionRecognition_data(); + CPlusPlus::LanguageFeatures languageFeatures() const { return languageFeatures_; } - void testAvoidSpecialCompletionRecognition(); - void testAvoidSpecialCompletionRecognition_data(); +private: + CPlusPlus::LanguageFeatures languageFeatures_; }; -} // namespace Tests } // namespace Internal } // namespace ClangCodeModel -#endif // CLANGCOMPLETIONCONTEXTANALYZERTEST_H +#endif // CLANGCODEMODEL_INTERNAL_CLANGCOMPLETIONASSISTINTERFACE_H diff --git a/tests/unit/mockup/texteditor/assistenums.h b/tests/unit/mockup/texteditor/assistenums.h new file mode 100644 index 00000000000..01740e64ef4 --- /dev/null +++ b/tests/unit/mockup/texteditor/assistenums.h @@ -0,0 +1,52 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing +** +** 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 The Qt Company. For licensing terms and +** conditions see http://www.qt.io/terms-conditions. For further information +** use the contact form at http://www.qt.io/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 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +****************************************************************************/ + +#ifndef ASSISTENUMS_H +#define ASSISTENUMS_H + +namespace TextEditor { + +enum AssistKind +{ + Completion, + QuickFix, + FollowSymbol +}; + +enum AssistReason +{ + IdleEditor, + ActivationCharacter, + ExplicitlyInvoked +}; + +} // TextEditor + +#endif // ASSISTENUMS_H diff --git a/tests/unit/mockup/texteditor/codeassist/assistinterface.h b/tests/unit/mockup/texteditor/codeassist/assistinterface.h new file mode 100644 index 00000000000..d177a1ae32a --- /dev/null +++ b/tests/unit/mockup/texteditor/codeassist/assistinterface.h @@ -0,0 +1,119 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing +** +** 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 The Qt Company. For licensing terms and +** conditions see http://www.qt.io/terms-conditions. For further information +** use the contact form at http://www.qt.io/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 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +****************************************************************************/ + +#ifndef ASSISTINTERFACE_H +#define ASSISTINTERFACE_H + +#include + +#include + +#include "../assistenums.h" + +namespace TextEditor { + +class AssistInterface +{ +public: + AssistInterface(const QByteArray &text, + int position) + : textDocument_(QString::fromUtf8(text)), + position_(position) + {} + + AssistInterface(QTextDocument *textDocument, + int position, + const QString &fileName, + AssistReason reason) + : textDocument_(textDocument), + fileName_(fileName), + position_(position), + reason_(reason) + {} + + QTextDocument *textDocument() const; + virtual int position() const; + virtual QChar characterAt(int position) const; + virtual QString textAt(int position, int length) const; + virtual QString fileName() const; + virtual AssistReason reason() const; + + +private: + mutable QTextDocument textDocument_; + QString fileName_; + int position_; + AssistReason reason_ = IdleEditor; +}; + +inline QTextDocument *AssistInterface::textDocument() const +{ + return &textDocument_; +} + +inline int AssistInterface::position() const +{ + return position_; +} + +inline QChar AssistInterface::characterAt(int position) const +{ + return textDocument_.characterAt(position); +} + +inline QString AssistInterface::textAt(int position, int length) const +{ + QTextCursor textCursor(&textDocument_); + if (position < 0) + position = 0; + textCursor.movePosition(QTextCursor::End); + if (position + length > textCursor.position()) + length = textCursor.position() - position; + + textCursor.setPosition(position); + textCursor.setPosition(position + length, QTextCursor::KeepAnchor); + + // selectedText() returns U+2029 (PARAGRAPH SEPARATOR) instead of newline + return textCursor.selectedText().replace(QChar::ParagraphSeparator, QLatin1Char('\n')); +} + +inline AssistReason AssistInterface::reason() const +{ + return reason_; +} + +inline QString AssistInterface::fileName() const +{ + return fileName_; +} +} + +#endif // ASSISTINTERFACE_H + diff --git a/tests/unit/unittest/activationsequencecontextprocessortest.cpp b/tests/unit/unittest/activationsequencecontextprocessortest.cpp new file mode 100644 index 00000000000..443a8aeacb0 --- /dev/null +++ b/tests/unit/unittest/activationsequencecontextprocessortest.cpp @@ -0,0 +1,220 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing +** +** 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 The Qt Company. For licensing terms and +** conditions see http://www.qt.io/terms-conditions. For further information +** use the contact form at http://www.qt.io/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 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +****************************************************************************/ + + +#include + +#include + +#include + +#include +#include + +#include +#include +#include +#include "gtest-qt-printing.h" + +namespace { + +using ContextProcessor = ClangCodeModel::Internal::ActivationSequenceContextProcessor; +using TextEditor::AssistInterface; +using ClangCodeModel::Internal::ClangCompletionAssistInterface; + +TEST(ActivationSequeneContextProcessor, TextCursorPosition) +{ + ClangCompletionAssistInterface interface("foobar", 4); + ContextProcessor processor{&interface}; + + ASSERT_THAT(processor.textCursor_forTestOnly().position(), 4); +} + +TEST(ActivationSequeneContextProcessor, StringLiteral) +{ + ClangCompletionAssistInterface interface("auto foo = \"bar\"", 12); + ContextProcessor processor{&interface}; + + ASSERT_THAT(processor.completionKind(), CPlusPlus::T_EOF_SYMBOL); +} + +TEST(ActivationSequeneContextProcessor, EndOfStringLiteral) +{ + ClangCompletionAssistInterface interface("auto foo = \"bar\"", 16); + ContextProcessor processor{&interface}; + + ASSERT_THAT(processor.completionKind(), CPlusPlus::T_EOF_SYMBOL); +} + +TEST(ActivationSequeneContextProcessor, FunctionCallComma) +{ + ClangCompletionAssistInterface interface("f(x, ", 4); + ContextProcessor processor{&interface}; + + ASSERT_THAT(processor.completionKind(), CPlusPlus::T_COMMA); +} + +TEST(ActivationSequeneContextProcessor, NonFunctionCallComma) +{ + ClangCompletionAssistInterface interface("int x, ", 6); + ContextProcessor processor{&interface}; + + ASSERT_THAT(processor.completionKind(), CPlusPlus::T_EOF_SYMBOL); +} + +TEST(ActivationSequeneContextProcessor, DoxygenComment) +{ + ClangCompletionAssistInterface interface("//! @", 5); + ContextProcessor processor{&interface}; + + ASSERT_THAT(processor.completionKind(), CPlusPlus::T_DOXY_COMMENT); +} + +TEST(ActivationSequeneContextProcessor, NonDoxygenComment) +{ + ClangCompletionAssistInterface interface("// @", 4); + ContextProcessor processor{&interface}; + + ASSERT_THAT(processor.completionKind(), CPlusPlus::T_EOF_SYMBOL); +} + +TEST(ActivationSequeneContextProcessor, Comment) +{ + ClangCompletionAssistInterface interface("//", 2); + ContextProcessor processor{&interface}; + + ASSERT_THAT(processor.completionKind(), CPlusPlus::T_EOF_SYMBOL); +} + +TEST(ActivationSequeneContextProcessor, InsideALiteral) +{ + ClangCompletionAssistInterface interface("\"foo\"", 2); + ContextProcessor processor{&interface}; + + ASSERT_THAT(processor.completionKind(), CPlusPlus::T_EOF_SYMBOL); +} + +TEST(ActivationSequeneContextProcessor, ShlashInsideAString) +{ + ClangCompletionAssistInterface interface("\"foo/bar\"", 5); + ContextProcessor processor{&interface}; + + ASSERT_THAT(processor.completionKind(), CPlusPlus::T_EOF_SYMBOL); +} + +TEST(ActivationSequeneContextProcessor, ShlashOutsideAString) +{ + ClangCompletionAssistInterface interface("foo/bar", 4); + ContextProcessor processor{&interface}; + + ASSERT_THAT(processor.completionKind(), CPlusPlus::T_EOF_SYMBOL); +} + +TEST(ActivationSequeneContextProcessor, FunctionLeftParen) +{ + ClangCompletionAssistInterface interface("foo(", 4); + ContextProcessor processor{&interface}; + + ASSERT_THAT(processor.completionKind(), CPlusPlus::T_LPAREN); +} + +TEST(ActivationSequeneContextProcessor, TemplateFunctionLeftParen) +{ + ClangCompletionAssistInterface interface("foo(", 7); + ContextProcessor processor{&interface}; + + ASSERT_THAT(processor.completionKind(), CPlusPlus::T_LPAREN); +} + +TEST(ActivationSequeneContextProcessor, ExpressionLeftParen) +{ + ClangCompletionAssistInterface interface("x * (", 5); + ContextProcessor processor{&interface}; + + ASSERT_THAT(processor.completionKind(), CPlusPlus::T_EOF_SYMBOL); +} + +TEST(ActivationSequeneContextProcessor, AngleInclude) +{ + ClangCompletionAssistInterface interface("#include ", 10); + ContextProcessor processor{&interface}; + + ASSERT_THAT(processor.completionKind(), CPlusPlus::T_ANGLE_STRING_LITERAL); +} + +TEST(ActivationSequeneContextProcessor, SlashInclude) +{ + ClangCompletionAssistInterface interface("#include ", 14); + ContextProcessor processor{&interface}; + + ASSERT_THAT(processor.completionKind(), CPlusPlus::T_SLASH); +} + +TEST(ActivationSequeneContextProcessor, QuoteInclude) +{ + ClangCompletionAssistInterface interface("#include \"foo/bar\"", 10); + ContextProcessor processor{&interface}; + + ASSERT_THAT(processor.completionKind(), CPlusPlus::T_STRING_LITERAL); +} + +TEST(ActivationSequeneContextProcessor, SlashInExlude) +{ + ClangCompletionAssistInterface interface("#exclude ", 14); + ContextProcessor processor{&interface}; + + ASSERT_THAT(processor.completionKind(), CPlusPlus::T_EOF_SYMBOL); +} + +TEST(ActivationSequeneContextProcessor, QuoteExclude) +{ + ClangCompletionAssistInterface interface("#exclude \"foo/bar\"", 10); + ContextProcessor processor{&interface}; + + ASSERT_THAT(processor.completionKind(), CPlusPlus::T_EOF_SYMBOL); +} + +TEST(ActivationSequeneContextProcessor, SkipeWhiteSpacesBeforeCursor) +{ + ClangCompletionAssistInterface interface("x-> ", 7); + ContextProcessor processor{&interface}; + + ASSERT_THAT(processor.completionKind(), CPlusPlus::T_ARROW); +} + +TEST(ActivationSequeneContextProcessor, SkipIdentifier) +{ + ClangCompletionAssistInterface interface("x->foo_", 7); + ContextProcessor processor{&interface}; + + ASSERT_THAT(processor.completionKind(), CPlusPlus::T_ARROW); +} + +} diff --git a/tests/unit/unittest/activationsequenceprocessortest.cpp b/tests/unit/unittest/activationsequenceprocessortest.cpp index b12f6487037..88736f243ba 100644 --- a/tests/unit/unittest/activationsequenceprocessortest.cpp +++ b/tests/unit/unittest/activationsequenceprocessortest.cpp @@ -133,14 +133,14 @@ TEST(ActivationSequenceProcessor, ArrowStar) TEST(ActivationSequenceProcessor, DoxyGenCommentBackSlash) { - ActivationSequenceProcessor processor(QStringLiteral("\\ "), 3, true); + ActivationSequenceProcessor processor(QStringLiteral(" \\"), 3, true); ASSERT_THAT(processor, HasResult(T_DOXY_COMMENT, 1, 2)); } TEST(ActivationSequenceProcessor, DoxyGenCommentAt) { - ActivationSequenceProcessor processor(QStringLiteral("@ "), 2, true); + ActivationSequenceProcessor processor(QStringLiteral(" @"), 2, true); ASSERT_THAT(processor, HasResult(T_DOXY_COMMENT, 1, 1)); } @@ -182,7 +182,7 @@ TEST(ActivationSequenceProcessor, PositionIsOne) TEST(ActivationSequenceProcessor, PositionIsTwo) { - ActivationSequenceProcessor processor(QStringLiteral("@ x"), 2, true); + ActivationSequenceProcessor processor(QStringLiteral(" @x"), 2, true); ASSERT_THAT(processor, HasResult(T_DOXY_COMMENT, 1, 1)); } diff --git a/tests/unit/unittest/clangcompletioncontextanalyzertest.cpp b/tests/unit/unittest/clangcompletioncontextanalyzertest.cpp new file mode 100644 index 00000000000..69688f6e2fc --- /dev/null +++ b/tests/unit/unittest/clangcompletioncontextanalyzertest.cpp @@ -0,0 +1,435 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing +** +** 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 The Qt Company. For licensing terms and +** conditions see http://www.qt.io/terms-conditions. For further information +** use the contact form at http://www.qt.io/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 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +****************************************************************************/ + + +#include + +#include + +#include + +#include + +#include +#include +#include +#include "gtest-qt-printing.h" + +namespace ClangCodeModel { +namespace Internal { +void PrintTo(const ClangCompletionContextAnalyzer::CompletionAction &completionAction, ::std::ostream* os) +{ + using CCA = ClangCompletionContextAnalyzer; + + switch (completionAction) { + case CCA::PassThroughToLibClang: *os << "PassThroughToLibClang"; break; + case CCA::PassThroughToLibClangAfterLeftParen: *os << "PassThroughToLibClangAfterLeftParen"; break; + case CCA::CompleteDoxygenKeyword: *os << "CompleteDoxygenKeyword"; break; + case CCA::CompleteIncludePath: *os << "CompleteIncludePath"; break; + case CCA::CompletePreprocessorDirective: *os << "CompletePreprocessorDirective"; break; + case CCA::CompleteSignal: *os << "CompleteSignal"; break; + case CCA::CompleteSlot: *os << "CompleteSlot"; break; + } +} +} +} + +namespace { + +using ClangCodeModel::Internal::ClangCompletionAssistInterface; + +class TestDocument +{ +public: + TestDocument(const QByteArray &theSource) + : source(theSource), + position(theSource.lastIndexOf('@')) // Use 'lastIndexOf' due to doxygen: "//! @keyword" + { + source.remove(position, 1); + } + + QByteArray source; + int position; +}; + +using ::testing::PrintToString; + +MATCHER_P4(HasResult, completionAction, positionForClang, positionForProposal, positionInText, + std::string(negation ? "hasn't" : "has") + + " result of completion action " + PrintToString(completionAction) + + " and position for clang " + PrintToString(positionForClang) + + " and position for proprosal " + PrintToString(positionForProposal)) +{ + int positionForClangDifference = arg.positionForClang() - positionInText; + int positionForProposalDifference = arg.positionForProposal() - positionInText; + if (arg.completionAction() != completionAction + || positionForClangDifference != positionForClang + || positionForProposalDifference != positionForProposal) { + *result_listener << "completion action is " << PrintToString(arg.completionAction()) + << " and position for clang is " << PrintToString(positionForClangDifference) + << " and position for proprosal is " << PrintToString(positionForProposalDifference); + return false; + } + + return true; +} + +MATCHER_P4(HasResultWithoutClangDifference, completionAction, positionForClang, positionForProposal, positionInText, + std::string(negation ? "hasn't" : "has") + + " result of completion action " + PrintToString(completionAction) + + " and position for clang " + PrintToString(positionForClang) + + " and position for proprosal " + PrintToString(positionForProposal)) +{ + int positionForProposalDifference = arg.positionForProposal() - positionInText; + if (arg.completionAction() != completionAction + || arg.positionForClang() != positionForClang + || positionForProposalDifference != positionForProposal) { + *result_listener << "completion action is " << PrintToString(arg.completionAction()) + << " and position for clang is " << PrintToString(arg.positionForClang()) + << " and position for proprosal is " << PrintToString(positionForProposalDifference); + return false; + } + + return true; +} + +using CCA = ClangCodeModel::Internal::ClangCompletionContextAnalyzer; + +bool isPassThrough(CCA::CompletionAction completionAction) +{ + return completionAction != CCA::PassThroughToLibClang + && completionAction != CCA::PassThroughToLibClangAfterLeftParen; +} + +MATCHER(IsPassThroughToClang, std::string(negation ? "isn't" : "is") + " passed through to Clang") +{ + auto completionAction = arg.completionAction(); + + if (isPassThrough(completionAction)) { + *result_listener << "completion action is " << PrintToString(completionAction); + + return false; + } + + return true; +} + +class ClangCompletionContextAnalyzer : public ::testing::Test +{ +protected: + ClangCodeModel::Internal::ClangCompletionContextAnalyzer runAnalyzer(const char *text); + +protected: + int positionInText = 0; +}; + +ClangCodeModel::Internal::ClangCompletionContextAnalyzer ClangCompletionContextAnalyzer::runAnalyzer(const char *text) +{ + const TestDocument testDocument(text); + ClangCompletionAssistInterface assistInterface(testDocument.source, testDocument.position); + ClangCodeModel::Internal::ClangCompletionContextAnalyzer analyzer(&assistInterface, + CPlusPlus::LanguageFeatures::defaultFeatures()); + + positionInText = testDocument.position; + + analyzer.analyze(); + + return analyzer; +} + + +TEST_F(ClangCompletionContextAnalyzer, AtEndOfDotMember) +{ + auto analyzer = runAnalyzer("o.mem@"); + + ASSERT_THAT(analyzer, HasResult(CCA::PassThroughToLibClang, -3, -3, positionInText)); +} + +TEST_F(ClangCompletionContextAnalyzer, AtEndOfDotMemberWithSpaceInside) +{ + auto analyzer = runAnalyzer("o. mem@"); + + ASSERT_THAT(analyzer, HasResult(CCA::PassThroughToLibClang, -4, -4, positionInText)); +} + +TEST_F(ClangCompletionContextAnalyzer, AtBeginOfDotMember) +{ + auto analyzer = runAnalyzer("o.@mem"); + + ASSERT_THAT(analyzer, HasResult(CCA::PassThroughToLibClang, 0, 0, positionInText)); +} + +TEST_F(ClangCompletionContextAnalyzer, AtBeginOfDotMemberWithSpaceInside) +{ + auto analyzer = runAnalyzer("o. @mem"); + + ASSERT_THAT(analyzer, HasResult(CCA::PassThroughToLibClang, -1, -1, positionInText)); +} + +TEST_F(ClangCompletionContextAnalyzer, AtEndOfArrow) +{ + auto analyzer = runAnalyzer("o->mem@"); + + ASSERT_THAT(analyzer, HasResult(CCA::PassThroughToLibClang, -3, -3, positionInText)); +} + +TEST_F(ClangCompletionContextAnalyzer, AtEndOfArrowWithSpaceInside) +{ + auto analyzer = runAnalyzer("o-> mem@"); + + ASSERT_THAT(analyzer, HasResult(CCA::PassThroughToLibClang, -4, -4, positionInText)); +} + +TEST_F(ClangCompletionContextAnalyzer, AtBeginOfArrow) +{ + auto analyzer = runAnalyzer("o->@mem"); + + ASSERT_THAT(analyzer, HasResult(CCA::PassThroughToLibClang, 0, 0, positionInText)); +} + +TEST_F(ClangCompletionContextAnalyzer, AtBeginOfArrowWithSpaceInside) +{ + auto analyzer = runAnalyzer("o-> @mem"); + + ASSERT_THAT(analyzer, HasResult(CCA::PassThroughToLibClang, -1, -1, positionInText)); +} + +TEST_F(ClangCompletionContextAnalyzer, ParameteOneAtCall) +{ + auto analyzer = runAnalyzer("f(@"); + + ASSERT_THAT(analyzer, HasResult(CCA::PassThroughToLibClangAfterLeftParen, -2, 0, positionInText)); +} + +TEST_F(ClangCompletionContextAnalyzer, ParameteTwoAtCall) +{ + auto analyzer = runAnalyzer("f(1,@"); + + ASSERT_THAT(analyzer, HasResult(CCA::PassThroughToLibClangAfterLeftParen, -4, -2, positionInText)); +} + +TEST_F(ClangCompletionContextAnalyzer, ParameteTwoWithSpaceAtCall) +{ + auto analyzer = runAnalyzer("f(1, @"); + + ASSERT_THAT(analyzer, HasResult(CCA::PassThroughToLibClang, -1, -1, positionInText)); +} + +TEST_F(ClangCompletionContextAnalyzer, ParameteOneAtSignal) +{ + auto analyzer = runAnalyzer("SIGNAL(@"); + + ASSERT_THAT(analyzer, HasResult(CCA::CompleteSignal, 0, 0, positionInText)); +} + +TEST_F(ClangCompletionContextAnalyzer, ParameteOneWithLettersAtSignal) +{ + auto analyzer = runAnalyzer("SIGNAL(foo@"); + + ASSERT_THAT(analyzer, HasResult(CCA::CompleteSignal, -3, -3, positionInText)); +} + +TEST_F(ClangCompletionContextAnalyzer, ParameteOneAtSlot) +{ + auto analyzer = runAnalyzer("SLOT(@"); + + ASSERT_THAT(analyzer, HasResult(CCA::CompleteSlot, -0, 0, positionInText)); +} + +TEST_F(ClangCompletionContextAnalyzer, ParameteOneWithLettersAtSlot) +{ + auto analyzer = runAnalyzer("SLOT(foo@"); + + ASSERT_THAT(analyzer, HasResult(CCA::CompleteSlot, -3, -3, positionInText)); +} + +TEST_F(ClangCompletionContextAnalyzer, DoxygenWithBackslash) +{ + auto analyzer = runAnalyzer("//! \\@"); + + ASSERT_THAT(analyzer, HasResultWithoutClangDifference(CCA::CompleteDoxygenKeyword, -1, 0, positionInText)); +} + +TEST_F(ClangCompletionContextAnalyzer, DoxygenWithAt) +{ + auto analyzer = runAnalyzer("//! @@"); + + ASSERT_THAT(analyzer, HasResultWithoutClangDifference(CCA::CompleteDoxygenKeyword, -1, 0, positionInText)); +} + +TEST_F(ClangCompletionContextAnalyzer, DoxygenWithParameter) +{ + auto analyzer = runAnalyzer("//! \\par@"); + + ASSERT_THAT(analyzer, HasResultWithoutClangDifference(CCA::CompleteDoxygenKeyword, -1, -3, positionInText)); +} + +TEST_F(ClangCompletionContextAnalyzer, Preprocessor) +{ + auto analyzer = runAnalyzer("#@"); + + ASSERT_THAT(analyzer, HasResultWithoutClangDifference(CCA::CompletePreprocessorDirective, -1, 0, positionInText)); +} + +TEST_F(ClangCompletionContextAnalyzer, PreprocessorIf) +{ + auto analyzer = runAnalyzer("#if@"); + + ASSERT_THAT(analyzer, HasResultWithoutClangDifference(CCA::CompletePreprocessorDirective, -1, -2, positionInText)); +} + +TEST_F(ClangCompletionContextAnalyzer, LocalInclude) +{ + auto analyzer = runAnalyzer("#include \"foo@\""); + + ASSERT_THAT(analyzer, HasResultWithoutClangDifference(CCA::CompleteIncludePath, -1, -3, positionInText)); +} + +TEST_F(ClangCompletionContextAnalyzer, GlobalInclude) +{ + auto analyzer = runAnalyzer("#include "); + + ASSERT_THAT(analyzer, HasResultWithoutClangDifference(CCA::CompleteIncludePath, -1, -3, positionInText)); +} + +TEST_F(ClangCompletionContextAnalyzer, GlocalIncludeWithDirectory) +{ + auto analyzer = runAnalyzer("#include "); + + ASSERT_THAT(analyzer, HasResultWithoutClangDifference(CCA::CompleteIncludePath, -1, 0, positionInText)); +} + +TEST_F(ClangCompletionContextAnalyzer, AfterQuote) +{ + auto analyzer = runAnalyzer("\"@"); + + ASSERT_THAT(analyzer, IsPassThroughToClang()); +} + +TEST_F(ClangCompletionContextAnalyzer, AfterSpaceQuote) +{ + auto analyzer = runAnalyzer(" \"@"); + + ASSERT_THAT(analyzer, IsPassThroughToClang()); +} + +TEST_F(ClangCompletionContextAnalyzer, AfterQuotedText) +{ + auto analyzer = runAnalyzer("\"text\"@"); + + ASSERT_THAT(analyzer, IsPassThroughToClang()); +} + +TEST_F(ClangCompletionContextAnalyzer, InQuotedText) +{ + auto analyzer = runAnalyzer("\"hello cruel@ world\""); + + ASSERT_THAT(analyzer, IsPassThroughToClang()); +} + +TEST_F(ClangCompletionContextAnalyzer, SingleQuote) +{ + auto analyzer = runAnalyzer("'@'"); + + ASSERT_THAT(analyzer, IsPassThroughToClang()); +} + +TEST_F(ClangCompletionContextAnalyzer, AfterLetterInSingleQuoted) +{ + auto analyzer = runAnalyzer("'a@'"); + + ASSERT_THAT(analyzer, IsPassThroughToClang()); +} + +TEST_F(ClangCompletionContextAnalyzer, CommaOperator) +{ + auto analyzer = runAnalyzer("a = b,@\""); + + ASSERT_THAT(analyzer, IsPassThroughToClang()); +} + +TEST_F(ClangCompletionContextAnalyzer, DoxygenMarkerInNonDoxygenComment) +{ + auto analyzer = runAnalyzer("@@"); + + ASSERT_THAT(analyzer, IsPassThroughToClang()); +} + +TEST_F(ClangCompletionContextAnalyzer, DoxygenMarkerInNonDoxygenComment2) +{ + auto analyzer = runAnalyzer("\\@"); + + ASSERT_THAT(analyzer, IsPassThroughToClang()); +} + +TEST_F(ClangCompletionContextAnalyzer, OneLineComment) +{ + auto analyzer = runAnalyzer("// text@"); + + ASSERT_THAT(analyzer, IsPassThroughToClang()); +} + +TEST_F(ClangCompletionContextAnalyzer, BeginEndComment) +{ + auto analyzer = runAnalyzer("/* text@ */"); + + ASSERT_THAT(analyzer, IsPassThroughToClang()); +} + +TEST_F(ClangCompletionContextAnalyzer, Slash) +{ + auto analyzer = runAnalyzer("5 /@"); + + ASSERT_THAT(analyzer, IsPassThroughToClang()); +} + +TEST_F(ClangCompletionContextAnalyzer, LeftParen) +{ + auto analyzer = runAnalyzer("(@"); + + ASSERT_THAT(analyzer, IsPassThroughToClang()); +} + +TEST_F(ClangCompletionContextAnalyzer, TwoLeftParen) +{ + auto analyzer = runAnalyzer("((@"); + + ASSERT_THAT(analyzer, IsPassThroughToClang()); +} + +TEST_F(ClangCompletionContextAnalyzer, AsteriskLeftParen) +{ + auto analyzer = runAnalyzer("*(@"); + + ASSERT_THAT(analyzer, IsPassThroughToClang()); +} +} + + diff --git a/tests/unit/unittest/cplusplus.pri b/tests/unit/unittest/cplusplus.pri index 99a3d7e09c0..abce4336116 100644 --- a/tests/unit/unittest/cplusplus.pri +++ b/tests/unit/unittest/cplusplus.pri @@ -1,5 +1,5 @@ INCLUDEPATH += $$PWD -SOURCES += $$PWD/../../../src/libs/3rdparty/cplusplus/Token.cpp - -HEADERS += $$PWD/../../../src/libs/3rdparty/cplusplus/Token.h +#include($$PWD/../../../src/libs/3rdparty/cplusplus/cplusplus.pri) +include($$PWD/../../../src/libs/utils/utils-lib.pri) +include($$PWD/../../../src/libs/cplusplus/cplusplus-lib.pri) diff --git a/tests/unit/unittest/unittest.pro b/tests/unit/unittest/unittest.pro index 826bf52f8c1..63edc725560 100644 --- a/tests/unit/unittest/unittest.pro +++ b/tests/unit/unittest/unittest.pro @@ -12,6 +12,7 @@ GTEST_DIR = $$GMOCK_DIR/gtest requires(exists($$GMOCK_DIR)) !exists($$GMOCK_DIR):message("No gmock is found! To enabe unit tests set GMOCK_DIR") +INCLUDEPATH += ../mockup INCLUDEPATH += $$GTEST_DIR $$GTEST_DIR/include $$GMOCK_DIR $$GMOCK_DIR/include include(../../../src/libs/sqlite/sqlite-lib.pri) @@ -47,7 +48,6 @@ SOURCES += main.cpp \ clientserverinprocesstest.cpp \ clientserveroutsideprocess.cpp \ codecompletiontest.cpp \ - ../../../src/libs/utils/qtcassert.cpp \ clangstringtest.cpp \ translationunittest.cpp \ clangcodecompleteresultstest.cpp \ @@ -58,12 +58,13 @@ SOURCES += main.cpp \ translationunitstest.cpp \ completionchunkstotextconvertertest.cpp \ lineprefixertest.cpp \ - activationsequenceprocessortest.cpp + activationsequenceprocessortest.cpp \ + clangcompletioncontextanalyzertest.cpp \ + activationsequencecontextprocessortest.cpp HEADERS += \ gtest-qt-printing.h \ spydummy.h \ - ../../../src/libs/utils/qtcassert.h \ mockipclient.h \ mockipcserver.h From 889237f962518112d8336ff5b0d6a7ab71cdb8f3 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Wed, 22 Jul 2015 13:18:08 +0200 Subject: [PATCH 048/116] Clang: Mini refactorings in ClangCompletionAssistProcessor The renames will improve the readability of the follo-up change. Change-Id: If1f5ae2a2798c13ce7268e436dae1b3963f01d5e Reviewed-by: Marco Bubke --- .../clangcodemodel/clangbackendipcintegration.cpp | 2 +- .../clangcompletionassistprocessor.cpp | 15 ++++++++------- .../clangcompletionassistprocessor.h | 6 +++--- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/plugins/clangcodemodel/clangbackendipcintegration.cpp b/src/plugins/clangcodemodel/clangbackendipcintegration.cpp index e46d3d5774e..eedbb244321 100644 --- a/src/plugins/clangcodemodel/clangbackendipcintegration.cpp +++ b/src/plugins/clangcodemodel/clangbackendipcintegration.cpp @@ -146,7 +146,7 @@ void IpcReceiver::codeCompleted(const CodeCompletedCommand &command) const quint64 ticket = command.ticketNumber(); QScopedPointer processor(m_assistProcessorsTable.take(ticket)); if (processor) - processor->asyncCompletionsAvailable(command.codeCompletions()); + processor->handleAvailableAsyncCompletions(command.codeCompletions()); } void IpcReceiver::translationUnitDoesNotExist(const TranslationUnitDoesNotExistCommand &command) diff --git a/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp b/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp index 38510d5d601..a43f31b9725 100644 --- a/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp +++ b/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp @@ -232,14 +232,15 @@ IAssistProposal *ClangCompletionAssistProcessor::perform(const AssistInterface * return startCompletionHelper(); // == 0 if results are calculated asynchronously } -void ClangCompletionAssistProcessor::asyncCompletionsAvailable(const CodeCompletions &completions) +void ClangCompletionAssistProcessor::handleAvailableAsyncCompletions( + const CodeCompletions &completions) { switch (m_sentRequestType) { case CompletionRequestType::NormalCompletion: - onCompletionsAvailable(completions); + handleAvailableCompletions(completions); break; case CompletionRequestType::FunctionHintCompletion: - onFunctionHintCompletionsAvailable(completions); + handleAvailableFunctionHintCompletions(completions); break; default: QTC_CHECK(!"Unhandled ClangCompletionAssistProcessor::CompletionRequestType"); @@ -692,7 +693,7 @@ TextEditor::IAssistProposal *ClangCompletionAssistProcessor::createProposal() co return new ClangAssistProposal(m_positionForProposal, model); } -void ClangCompletionAssistProcessor::onCompletionsAvailable(const CodeCompletions &completions) +void ClangCompletionAssistProcessor::handleAvailableCompletions(const CodeCompletions &completions) { QTC_CHECK(m_completions.isEmpty()); @@ -703,15 +704,15 @@ void ClangCompletionAssistProcessor::onCompletionsAvailable(const CodeCompletion setAsyncProposalAvailable(createProposal()); } -void ClangCompletionAssistProcessor::onFunctionHintCompletionsAvailable( +void ClangCompletionAssistProcessor::handleAvailableFunctionHintCompletions( const CodeCompletions &completions) { QTC_CHECK(!m_functionName.isEmpty()); const auto relevantCompletions = matchingFunctionCompletions(completions, m_functionName); if (!relevantCompletions.isEmpty()) { - TextEditor::IFunctionHintProposalModel *model = new ClangFunctionHintModel(relevantCompletions); - TextEditor::FunctionHintProposal *proposal = new FunctionHintProposal(m_positionForProposal, model); + auto *model = new ClangFunctionHintModel(relevantCompletions); + auto *proposal = new FunctionHintProposal(m_positionForProposal, model); setAsyncProposalAvailable(proposal); } else { diff --git a/src/plugins/clangcodemodel/clangcompletionassistprocessor.h b/src/plugins/clangcodemodel/clangcompletionassistprocessor.h index 89c54efe673..ad6f34bd15b 100644 --- a/src/plugins/clangcodemodel/clangcompletionassistprocessor.h +++ b/src/plugins/clangcodemodel/clangcompletionassistprocessor.h @@ -59,7 +59,7 @@ class ClangCompletionAssistProcessor : public CppTools::CppCompletionAssistProce TextEditor::IAssistProposal *perform(const TextEditor::AssistInterface *interface) override; - void asyncCompletionsAvailable(const CodeCompletions &completions); + void handleAvailableAsyncCompletions(const CodeCompletions &completions); const TextEditor::TextEditorWidget *textEditorWidget() const; @@ -90,8 +90,8 @@ class ClangCompletionAssistProcessor : public CppTools::CppCompletionAssistProce void sendFileContent(const QString &projectPartId, const QByteArray &customFileContent); void sendCompletionRequest(int position, const QByteArray &customFileContent); - void onCompletionsAvailable(const CodeCompletions &completions); - void onFunctionHintCompletionsAvailable(const CodeCompletions &completions); + void handleAvailableCompletions(const CodeCompletions &completions); + void handleAvailableFunctionHintCompletions(const CodeCompletions &completions); private: QScopedPointer m_interface; From 5643a45a83ef47f2f48bb1d077f1abb38ac74a26 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Wed, 22 Jul 2015 13:09:44 +0200 Subject: [PATCH 049/116] Clang: Fallback to global completion if function call completion fails We can not offer proper constructor completion with libclang <= 3.6, so fall back to normal/global completion. Change-Id: I90bb8d981ae20ed4c228f829ad4267221b92f8a1 Reviewed-by: Marco Bubke --- .../clangbackendipcintegration.cpp | 7 +++++-- .../clangcompletionassistprocessor.cpp | 18 +++++++++++++----- .../clangcompletionassistprocessor.h | 4 ++-- .../test/clang_tests_database.qrc | 1 + .../test/clangcodecompletion_test.cpp | 9 +++++++++ .../test/clangcodecompletion_test.h | 1 + .../test/constructorCompletion.cpp | 9 +++++++++ 7 files changed, 40 insertions(+), 9 deletions(-) create mode 100644 src/plugins/clangcodemodel/test/constructorCompletion.cpp diff --git a/src/plugins/clangcodemodel/clangbackendipcintegration.cpp b/src/plugins/clangcodemodel/clangbackendipcintegration.cpp index eedbb244321..37aa888599b 100644 --- a/src/plugins/clangcodemodel/clangbackendipcintegration.cpp +++ b/src/plugins/clangcodemodel/clangbackendipcintegration.cpp @@ -145,8 +145,11 @@ void IpcReceiver::codeCompleted(const CodeCompletedCommand &command) const quint64 ticket = command.ticketNumber(); QScopedPointer processor(m_assistProcessorsTable.take(ticket)); - if (processor) - processor->handleAvailableAsyncCompletions(command.codeCompletions()); + if (processor) { + const bool finished = processor->handleAvailableAsyncCompletions(command.codeCompletions()); + if (!finished) + processor.take(); + } } void IpcReceiver::translationUnitDoesNotExist(const TranslationUnitDoesNotExistCommand &command) diff --git a/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp b/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp index a43f31b9725..f2109f46a04 100644 --- a/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp +++ b/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp @@ -232,20 +232,24 @@ IAssistProposal *ClangCompletionAssistProcessor::perform(const AssistInterface * return startCompletionHelper(); // == 0 if results are calculated asynchronously } -void ClangCompletionAssistProcessor::handleAvailableAsyncCompletions( +bool ClangCompletionAssistProcessor::handleAvailableAsyncCompletions( const CodeCompletions &completions) { + bool handled = true; + switch (m_sentRequestType) { case CompletionRequestType::NormalCompletion: handleAvailableCompletions(completions); break; case CompletionRequestType::FunctionHintCompletion: - handleAvailableFunctionHintCompletions(completions); + handled = handleAvailableFunctionHintCompletions(completions); break; default: QTC_CHECK(!"Unhandled ClangCompletionAssistProcessor::CompletionRequestType"); break; } + + return handled; } const TextEditorWidget *ClangCompletionAssistProcessor::textEditorWidget() const @@ -704,7 +708,7 @@ void ClangCompletionAssistProcessor::handleAvailableCompletions(const CodeComple setAsyncProposalAvailable(createProposal()); } -void ClangCompletionAssistProcessor::handleAvailableFunctionHintCompletions( +bool ClangCompletionAssistProcessor::handleAvailableFunctionHintCompletions( const CodeCompletions &completions) { QTC_CHECK(!m_functionName.isEmpty()); @@ -715,9 +719,13 @@ void ClangCompletionAssistProcessor::handleAvailableFunctionHintCompletions( auto *proposal = new FunctionHintProposal(m_positionForProposal, model); setAsyncProposalAvailable(proposal); + return true; } else { - QTC_CHECK(!"Function completion failed. Would fallback to global completion here..."); - // TODO: If we need this, the processor can't be deleted in IpcClient. + m_addSnippets = false; + m_functionName.clear(); + m_sentRequestType = NormalCompletion; + sendCompletionRequest(m_interface->position(), QByteArray()); + return false; // We are not yet finished. } } diff --git a/src/plugins/clangcodemodel/clangcompletionassistprocessor.h b/src/plugins/clangcodemodel/clangcompletionassistprocessor.h index ad6f34bd15b..77f80a3e3cc 100644 --- a/src/plugins/clangcodemodel/clangcompletionassistprocessor.h +++ b/src/plugins/clangcodemodel/clangcompletionassistprocessor.h @@ -59,7 +59,7 @@ class ClangCompletionAssistProcessor : public CppTools::CppCompletionAssistProce TextEditor::IAssistProposal *perform(const TextEditor::AssistInterface *interface) override; - void handleAvailableAsyncCompletions(const CodeCompletions &completions); + bool handleAvailableAsyncCompletions(const CodeCompletions &completions); const TextEditor::TextEditorWidget *textEditorWidget() const; @@ -91,7 +91,7 @@ class ClangCompletionAssistProcessor : public CppTools::CppCompletionAssistProce void sendCompletionRequest(int position, const QByteArray &customFileContent); void handleAvailableCompletions(const CodeCompletions &completions); - void handleAvailableFunctionHintCompletions(const CodeCompletions &completions); + bool handleAvailableFunctionHintCompletions(const CodeCompletions &completions); private: QScopedPointer m_interface; diff --git a/src/plugins/clangcodemodel/test/clang_tests_database.qrc b/src/plugins/clangcodemodel/test/clang_tests_database.qrc index 7cc0ac8a871..aeda67e4342 100644 --- a/src/plugins/clangcodemodel/test/clang_tests_database.qrc +++ b/src/plugins/clangcodemodel/test/clang_tests_database.qrc @@ -20,5 +20,6 @@ exampleIncludeDir/otherFile.h exampleIncludeDir/mylib/mylib.h globalCompletion.cpp + constructorCompletion.cpp diff --git a/src/plugins/clangcodemodel/test/clangcodecompletion_test.cpp b/src/plugins/clangcodemodel/test/clangcodecompletion_test.cpp index 6d42978eb20..3b5cbef89aa 100644 --- a/src/plugins/clangcodemodel/test/clangcodecompletion_test.cpp +++ b/src/plugins/clangcodemodel/test/clangcodecompletion_test.cpp @@ -874,6 +874,15 @@ void ClangCodeCompletionTest::testCompleteFunctions() QVERIFY(hasItem(t.proposal, "TType f(bool)")); } +void ClangCodeCompletionTest::testCompleteConstructorAndFallbackToGlobalCompletion() +{ + ProjectLessCompletionTest t("constructorCompletion.cpp"); + + QVERIFY(hasItem(t.proposal, "globalVariable")); + QVERIFY(hasItem(t.proposal, "GlobalClassWithCustomConstructor")); + QVERIFY(!hasSnippet(t.proposal, "class")); +} + void ClangCodeCompletionTest::testProjectDependentCompletion() { const TestDocument testDocument("completionWithProject.cpp"); diff --git a/src/plugins/clangcodemodel/test/clangcodecompletion_test.h b/src/plugins/clangcodemodel/test/clangcodecompletion_test.h index 1f1bb4a8f8f..52ff5f172dc 100644 --- a/src/plugins/clangcodemodel/test/clangcodecompletion_test.h +++ b/src/plugins/clangcodemodel/test/clangcodecompletion_test.h @@ -57,6 +57,7 @@ private slots: void testCompleteGlobals(); void testCompleteMembers(); void testCompleteFunctions(); + void testCompleteConstructorAndFallbackToGlobalCompletion(); void testProjectDependentCompletion(); void testChangingProjectDependentCompletion(); diff --git a/src/plugins/clangcodemodel/test/constructorCompletion.cpp b/src/plugins/clangcodemodel/test/constructorCompletion.cpp new file mode 100644 index 00000000000..1b19b68a105 --- /dev/null +++ b/src/plugins/clangcodemodel/test/constructorCompletion.cpp @@ -0,0 +1,9 @@ +int globalVariable; + +struct GlobalClassWithCustomConstructor { + GlobalClassWithCustomConstructor(int) {} +}; + +void f() { + GlobalClassWithCustomConstructor foo( /* COMPLETE HERE */ +} From e4748fe801f6f503f1db19a1b9b1690ac1a02cb5 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Wed, 22 Jul 2015 17:33:27 +0200 Subject: [PATCH 050/116] Clang: Typedef some often used types using CodeCompletions = QVector; using CodeCompletionChunks = QVector; Change-Id: Id729a43566c23dc000e44d79ccf4a49e4f235f51 Reviewed-by: Marco Bubke --- .../cmbcodecompletedcommand.cpp | 4 +- .../clangbackendipc/cmbcodecompletedcommand.h | 6 +-- src/libs/clangbackendipc/codecompletion.cpp | 4 +- src/libs/clangbackendipc/codecompletion.h | 10 +++-- .../clangbackendipc/codecompletionchunk.cpp | 4 +- .../clangbackendipc/codecompletionchunk.h | 9 ++-- .../clangcompletionassistprocessor.cpp | 8 ++-- .../clangcompletionassistprocessor.h | 10 ++--- .../clangcodemodel/clangfunctionhintmodel.cpp | 2 +- .../clangcodemodel/clangfunctionhintmodel.h | 6 +-- .../completionchunkstotextconverter.cpp | 10 ++--- .../completionchunkstotextconverter.h | 12 +++--- .../clangbackend/ipcsource/codecompleter.cpp | 2 +- .../clangbackend/ipcsource/codecompleter.h | 2 +- .../codecompletionchunkconverter.cpp | 4 +- .../ipcsource/codecompletionchunkconverter.h | 6 +-- .../ipcsource/codecompletionsextractor.cpp | 4 +- .../ipcsource/codecompletionsextractor.h | 2 +- .../unittest/clientserverinprocesstest.cpp | 2 +- .../unittest/codecompletionsextractortest.cpp | 43 +++++++++---------- .../completionchunkstotextconvertertest.cpp | 25 +++++------ .../unittest/readandwritecommandblocktest.cpp | 4 +- 22 files changed, 90 insertions(+), 89 deletions(-) diff --git a/src/libs/clangbackendipc/cmbcodecompletedcommand.cpp b/src/libs/clangbackendipc/cmbcodecompletedcommand.cpp index af4fe57e612..c378e88ba2b 100644 --- a/src/libs/clangbackendipc/cmbcodecompletedcommand.cpp +++ b/src/libs/clangbackendipc/cmbcodecompletedcommand.cpp @@ -37,13 +37,13 @@ namespace ClangBackEnd { -CodeCompletedCommand::CodeCompletedCommand(const QVector &codeCompletions, quint64 ticketNumber) +CodeCompletedCommand::CodeCompletedCommand(const CodeCompletions &codeCompletions, quint64 ticketNumber) : codeCompletions_(codeCompletions), ticketNumber_(ticketNumber) { } -const QVector &CodeCompletedCommand::codeCompletions() const +const CodeCompletions &CodeCompletedCommand::codeCompletions() const { return codeCompletions_; } diff --git a/src/libs/clangbackendipc/cmbcodecompletedcommand.h b/src/libs/clangbackendipc/cmbcodecompletedcommand.h index 0550b14af01..f4e8abf2e39 100644 --- a/src/libs/clangbackendipc/cmbcodecompletedcommand.h +++ b/src/libs/clangbackendipc/cmbcodecompletedcommand.h @@ -48,14 +48,14 @@ class CMBIPC_EXPORT CodeCompletedCommand friend void PrintTo(const CodeCompletedCommand &command, ::std::ostream* os); public: CodeCompletedCommand() = default; - CodeCompletedCommand(const QVector &codeCompletions, quint64 ticketNumber); + CodeCompletedCommand(const CodeCompletions &codeCompletions, quint64 ticketNumber); - const QVector &codeCompletions() const; + const CodeCompletions &codeCompletions() const; quint64 ticketNumber() const; private: - QVector codeCompletions_; + CodeCompletions codeCompletions_; quint64 ticketNumber_ = 0; }; diff --git a/src/libs/clangbackendipc/codecompletion.cpp b/src/libs/clangbackendipc/codecompletion.cpp index e9c5ad569f2..3a04192d23b 100644 --- a/src/libs/clangbackendipc/codecompletion.cpp +++ b/src/libs/clangbackendipc/codecompletion.cpp @@ -70,12 +70,12 @@ CodeCompletion::Kind CodeCompletion::completionKind() const return completionKind_; } -void CodeCompletion::setChunks(const QVector &chunks) +void CodeCompletion::setChunks(const CodeCompletionChunks &chunks) { chunks_ = chunks; } -const QVector &CodeCompletion::chunks() const +const CodeCompletionChunks &CodeCompletion::chunks() const { return chunks_; } diff --git a/src/libs/clangbackendipc/codecompletion.h b/src/libs/clangbackendipc/codecompletion.h index 5c7064b5e5b..7bc1e59332f 100644 --- a/src/libs/clangbackendipc/codecompletion.h +++ b/src/libs/clangbackendipc/codecompletion.h @@ -37,9 +37,13 @@ #include #include +#include namespace ClangBackEnd { +class CodeCompletion; +using CodeCompletions = QVector; + class CMBIPC_EXPORT CodeCompletion { friend CMBIPC_EXPORT QDataStream &operator<<(QDataStream &out, const CodeCompletion &command); @@ -91,8 +95,8 @@ class CMBIPC_EXPORT CodeCompletion void setCompletionKind(Kind completionKind); Kind completionKind() const; - void setChunks(const QVector &chunks); - const QVector &chunks() const; + void setChunks(const CodeCompletionChunks &chunks); + const CodeCompletionChunks &chunks() const; void setAvailability(Availability availability); Availability availability() const; @@ -109,7 +113,7 @@ class CMBIPC_EXPORT CodeCompletion private: Utf8String text_; - QVector chunks_; + CodeCompletionChunks chunks_; quint32 priority_ = 0; Kind completionKind_ = Other; Availability availability_ = NotAvailable; diff --git a/src/libs/clangbackendipc/codecompletionchunk.cpp b/src/libs/clangbackendipc/codecompletionchunk.cpp index d6affedfa4a..55869534906 100644 --- a/src/libs/clangbackendipc/codecompletionchunk.cpp +++ b/src/libs/clangbackendipc/codecompletionchunk.cpp @@ -44,7 +44,7 @@ CodeCompletionChunk::CodeCompletionChunk() CodeCompletionChunk::CodeCompletionChunk(CodeCompletionChunk::Kind kind, const Utf8String &text, - const QVector &optionalChunks) + const CodeCompletionChunks &optionalChunks) : text_(text), optionalChunks_(optionalChunks), kind_(kind) @@ -61,7 +61,7 @@ const Utf8String &CodeCompletionChunk::text() const return text_; } -const QVector &CodeCompletionChunk::optionalChunks() const +const CodeCompletionChunks &CodeCompletionChunk::optionalChunks() const { return optionalChunks_; } diff --git a/src/libs/clangbackendipc/codecompletionchunk.h b/src/libs/clangbackendipc/codecompletionchunk.h index fd25880d92b..72df089f289 100644 --- a/src/libs/clangbackendipc/codecompletionchunk.h +++ b/src/libs/clangbackendipc/codecompletionchunk.h @@ -39,6 +39,9 @@ namespace ClangBackEnd { +class CodeCompletionChunk; +using CodeCompletionChunks = QVector; + class CMBIPC_EXPORT CodeCompletionChunk { friend CMBIPC_EXPORT QDataStream &operator<<(QDataStream &out, const CodeCompletionChunk &chunk); @@ -73,18 +76,18 @@ class CMBIPC_EXPORT CodeCompletionChunk CodeCompletionChunk(); CodeCompletionChunk(Kind kind, const Utf8String &text, - const QVector &optionalChunks = QVector()); + const CodeCompletionChunks &optionalChunks = CodeCompletionChunks()); Kind kind() const; const Utf8String &text() const; - const QVector &optionalChunks() const; + const CodeCompletionChunks &optionalChunks() const; private: quint32 &kindAsInt(); private: Utf8String text_; - QVector optionalChunks_; + CodeCompletionChunks optionalChunks_; Kind kind_ = Invalid; }; diff --git a/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp b/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp index f2109f46a04..126c0201afe 100644 --- a/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp +++ b/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp @@ -61,6 +61,7 @@ namespace ClangCodeModel { namespace Internal { +using ClangBackEnd::CodeCompletion; using TextEditor::AssistProposalItem; namespace { @@ -107,7 +108,6 @@ QList toAssistProposalItems(const CodeCompletions &complet } // FIXME: show the effective accessebility instead of availability - using ClangBackEnd::CodeCompletion; using CPlusPlus::Icons; switch (ccr.completionKind()) { @@ -193,10 +193,10 @@ bool isFunctionHintLikeCompletion(CodeCompletion::Kind kind) || kind == CodeCompletion::SlotCompletionKind; } -QVector matchingFunctionCompletions(const QVector completions, - const QString &functionName) +CodeCompletions matchingFunctionCompletions(const CodeCompletions completions, + const QString &functionName) { - QVector matching; + CodeCompletions matching; foreach (const CodeCompletion &completion, completions) { if (isFunctionHintLikeCompletion(completion.completionKind()) diff --git a/src/plugins/clangcodemodel/clangcompletionassistprocessor.h b/src/plugins/clangcodemodel/clangcompletionassistprocessor.h index 77f80a3e3cc..c76987c8f04 100644 --- a/src/plugins/clangcodemodel/clangcompletionassistprocessor.h +++ b/src/plugins/clangcodemodel/clangcompletionassistprocessor.h @@ -34,20 +34,16 @@ #include "clangcompletionassistinterface.h" #include - #include -#include +#include -namespace ClangBackEnd { -class CodeCompletion; -} +#include namespace ClangCodeModel { namespace Internal { -using CodeCompletions = QVector; -using ClangBackEnd::CodeCompletion; +using ClangBackEnd::CodeCompletions; class ClangCompletionAssistProcessor : public CppTools::CppCompletionAssistProcessor { diff --git a/src/plugins/clangcodemodel/clangfunctionhintmodel.cpp b/src/plugins/clangcodemodel/clangfunctionhintmodel.cpp index f950947448e..d037186b995 100644 --- a/src/plugins/clangcodemodel/clangfunctionhintmodel.cpp +++ b/src/plugins/clangcodemodel/clangfunctionhintmodel.cpp @@ -39,7 +39,7 @@ namespace Internal { using namespace CPlusPlus; -ClangFunctionHintModel::ClangFunctionHintModel(const CodeCompletions &functionSymbols) +ClangFunctionHintModel::ClangFunctionHintModel(const ClangBackEnd::CodeCompletions &functionSymbols) : m_functionSymbols(functionSymbols) , m_currentArg(-1) { diff --git a/src/plugins/clangcodemodel/clangfunctionhintmodel.h b/src/plugins/clangcodemodel/clangfunctionhintmodel.h index c1e9f656b35..65a9c0affa2 100644 --- a/src/plugins/clangcodemodel/clangfunctionhintmodel.h +++ b/src/plugins/clangcodemodel/clangfunctionhintmodel.h @@ -38,12 +38,10 @@ namespace ClangCodeModel { namespace Internal { -using CodeCompletions = QVector; - class ClangFunctionHintModel : public TextEditor::IFunctionHintProposalModel { public: - ClangFunctionHintModel(const CodeCompletions &functionSymbols); + ClangFunctionHintModel(const ClangBackEnd::CodeCompletions &functionSymbols); void reset() override; int size() const override; @@ -51,7 +49,7 @@ class ClangFunctionHintModel : public TextEditor::IFunctionHintProposalModel int activeArgument(const QString &prefix) const override; private: - CodeCompletions m_functionSymbols; + ClangBackEnd::CodeCompletions m_functionSymbols; mutable int m_currentArg; }; diff --git a/src/plugins/clangcodemodel/completionchunkstotextconverter.cpp b/src/plugins/clangcodemodel/completionchunkstotextconverter.cpp index 92d9c300744..f8f76989f14 100644 --- a/src/plugins/clangcodemodel/completionchunkstotextconverter.cpp +++ b/src/plugins/clangcodemodel/completionchunkstotextconverter.cpp @@ -36,7 +36,7 @@ namespace ClangCodeModel { namespace Internal { -void CompletionChunksToTextConverter::parseChunks(const QVector &codeCompletionChunks) +void CompletionChunksToTextConverter::parseChunks(const ClangBackEnd::CodeCompletionChunks &codeCompletionChunks) { m_text.clear(); m_placeholderPositions.clear(); @@ -94,7 +94,7 @@ bool CompletionChunksToTextConverter::hasPlaceholderPositions() const return m_placeholderPositions.size() > 0; } -QString CompletionChunksToTextConverter::convertToFunctionSignature(const QVector &codeCompletionChunks) +QString CompletionChunksToTextConverter::convertToFunctionSignature(const ClangBackEnd::CodeCompletionChunks &codeCompletionChunks) { CompletionChunksToTextConverter converter; converter.setAddPlaceHolderText(true); @@ -105,7 +105,7 @@ QString CompletionChunksToTextConverter::convertToFunctionSignature(const QVecto return converter.text(); } -QString CompletionChunksToTextConverter::convertToName(const QVector &codeCompletionChunks) +QString CompletionChunksToTextConverter::convertToName(const ClangBackEnd::CodeCompletionChunks &codeCompletionChunks) { CompletionChunksToTextConverter converter; @@ -114,7 +114,7 @@ QString CompletionChunksToTextConverter::convertToName(const QVector &codeCompletionChunks) +QString CompletionChunksToTextConverter::convertToToolTip(const ClangBackEnd::CodeCompletionChunks &codeCompletionChunks) { CompletionChunksToTextConverter converter; converter.setAddPlaceHolderText(true); @@ -196,7 +196,7 @@ void CompletionChunksToTextConverter::addExtraVerticalSpaceBetweenBraces() addExtraVerticalSpaceBetweenBraces(m_codeCompletionChunks.begin()); } -void CompletionChunksToTextConverter::addExtraVerticalSpaceBetweenBraces(const QVector::iterator &begin) +void CompletionChunksToTextConverter::addExtraVerticalSpaceBetweenBraces(const ClangBackEnd::CodeCompletionChunks::iterator &begin) { using ClangBackEnd::CodeCompletionChunk; diff --git a/src/plugins/clangcodemodel/completionchunkstotextconverter.h b/src/plugins/clangcodemodel/completionchunkstotextconverter.h index 6e1e6b290fb..68c2bbcd149 100644 --- a/src/plugins/clangcodemodel/completionchunkstotextconverter.h +++ b/src/plugins/clangcodemodel/completionchunkstotextconverter.h @@ -45,7 +45,7 @@ namespace Internal { class CompletionChunksToTextConverter { public: - void parseChunks(const QVector &codeCompletionChunks); + void parseChunks(const ClangBackEnd::CodeCompletionChunks &codeCompletionChunks); void setAddPlaceHolderText(bool addPlaceHolderText); void setAddPlaceHolderPositions(bool addPlaceHolderPositions); @@ -57,9 +57,9 @@ class CompletionChunksToTextConverter const std::vector &placeholderPositions() const; bool hasPlaceholderPositions() const; - static QString convertToFunctionSignature(const QVector &codeCompletionChunks); - static QString convertToName(const QVector &codeCompletionChunks); - static QString convertToToolTip(const QVector &codeCompletionChunks); + static QString convertToFunctionSignature(const ClangBackEnd::CodeCompletionChunks &codeCompletionChunks); + static QString convertToName(const ClangBackEnd::CodeCompletionChunks &codeCompletionChunks); + static QString convertToToolTip(const ClangBackEnd::CodeCompletionChunks &codeCompletionChunks); private: void parse(const ClangBackEnd::CodeCompletionChunk & codeCompletionChunk); void parseResultType(const Utf8String &text); @@ -69,13 +69,13 @@ class CompletionChunksToTextConverter void parseLeftParen(const ClangBackEnd::CodeCompletionChunk &codeCompletionChunk); void parseLeftBrace(const ClangBackEnd::CodeCompletionChunk &codeCompletionChunk); void addExtraVerticalSpaceBetweenBraces(); - void addExtraVerticalSpaceBetweenBraces(const QVector::iterator &); + void addExtraVerticalSpaceBetweenBraces(const ClangBackEnd::CodeCompletionChunks::iterator &); bool canAddSpace() const; private: std::vector m_placeholderPositions; - QVector m_codeCompletionChunks; + ClangBackEnd::CodeCompletionChunks m_codeCompletionChunks; ClangBackEnd::CodeCompletionChunk m_previousCodeCompletionChunk; QString m_text; bool m_addPlaceHolderText = false; diff --git a/src/tools/clangbackend/ipcsource/codecompleter.cpp b/src/tools/clangbackend/ipcsource/codecompleter.cpp index 149277c53d3..0f50a1fe863 100644 --- a/src/tools/clangbackend/ipcsource/codecompleter.cpp +++ b/src/tools/clangbackend/ipcsource/codecompleter.cpp @@ -47,7 +47,7 @@ CodeCompleter::CodeCompleter(TranslationUnit translationUnit) { } -QVector CodeCompleter::complete(uint line, uint column) +CodeCompletions CodeCompleter::complete(uint line, uint column) { translationUnit.reparse(); diff --git a/src/tools/clangbackend/ipcsource/codecompleter.h b/src/tools/clangbackend/ipcsource/codecompleter.h index 488abc4987a..2d2dc1abe0f 100644 --- a/src/tools/clangbackend/ipcsource/codecompleter.h +++ b/src/tools/clangbackend/ipcsource/codecompleter.h @@ -47,7 +47,7 @@ class CodeCompleter CodeCompleter() = default; CodeCompleter(TranslationUnit translationUnit); - QVector complete(uint line, uint column); + CodeCompletions complete(uint line, uint column); private: Utf8String filePath() const; diff --git a/src/tools/clangbackend/ipcsource/codecompletionchunkconverter.cpp b/src/tools/clangbackend/ipcsource/codecompletionchunkconverter.cpp index f58f6bda81e..03adf6e13c2 100644 --- a/src/tools/clangbackend/ipcsource/codecompletionchunkconverter.cpp +++ b/src/tools/clangbackend/ipcsource/codecompletionchunkconverter.cpp @@ -71,7 +71,7 @@ CodeCompletionChunk::Kind CodeCompletionChunkConverter::chunkKind(CXCompletionSt return CodeCompletionChunk::Kind(clang_getCompletionChunkKind(completionString, chunkIndex)); } -QVector CodeCompletionChunkConverter::extract(CXCompletionString completionString) +CodeCompletionChunks CodeCompletionChunkConverter::extract(CXCompletionString completionString) { CodeCompletionChunkConverter converter; @@ -85,7 +85,7 @@ Utf8String CodeCompletionChunkConverter::chunkText(CXCompletionString completion return ClangString(clang_getCompletionChunkText(completionString, chunkIndex)); } -QVector CodeCompletionChunkConverter::optionalChunks(CXCompletionString completionString, uint chunkIndex) +CodeCompletionChunks CodeCompletionChunkConverter::optionalChunks(CXCompletionString completionString, uint chunkIndex) { CodeCompletionChunkConverter converter; diff --git a/src/tools/clangbackend/ipcsource/codecompletionchunkconverter.h b/src/tools/clangbackend/ipcsource/codecompletionchunkconverter.h index a3b92de62b3..6907690e81e 100644 --- a/src/tools/clangbackend/ipcsource/codecompletionchunkconverter.h +++ b/src/tools/clangbackend/ipcsource/codecompletionchunkconverter.h @@ -42,18 +42,18 @@ namespace ClangBackEnd { class CodeCompletionChunkConverter { public: - static QVector extract(CXCompletionString completionString); + static CodeCompletionChunks extract(CXCompletionString completionString); static Utf8String chunkText(CXCompletionString completionString, uint chunkIndex); private: - QVector optionalChunks(CXCompletionString completionString, uint chunkIndex); + CodeCompletionChunks optionalChunks(CXCompletionString completionString, uint chunkIndex); static CodeCompletionChunk::Kind chunkKind(CXCompletionString completionString, uint chunkIndex); void extractCompletionChunks(CXCompletionString completionString); void extractOptionalCompletionChunks(CXCompletionString completionString); private: - QVector chunks; + CodeCompletionChunks chunks; }; } // namespace ClangBackEnd diff --git a/src/tools/clangbackend/ipcsource/codecompletionsextractor.cpp b/src/tools/clangbackend/ipcsource/codecompletionsextractor.cpp index 56e826db6fd..1a3e7cb9c39 100644 --- a/src/tools/clangbackend/ipcsource/codecompletionsextractor.cpp +++ b/src/tools/clangbackend/ipcsource/codecompletionsextractor.cpp @@ -88,9 +88,9 @@ bool CodeCompletionsExtractor::peek(const Utf8String &name) return false; } -QVector CodeCompletionsExtractor::extractAll() +CodeCompletions CodeCompletionsExtractor::extractAll() { - QVector codeCompletions; + CodeCompletions codeCompletions; codeCompletions.reserve(cxCodeCompleteResults->NumResults); while (next()) diff --git a/src/tools/clangbackend/ipcsource/codecompletionsextractor.h b/src/tools/clangbackend/ipcsource/codecompletionsextractor.h index f01b12b64cb..dbfbb8af4b7 100644 --- a/src/tools/clangbackend/ipcsource/codecompletionsextractor.h +++ b/src/tools/clangbackend/ipcsource/codecompletionsextractor.h @@ -53,7 +53,7 @@ class CodeCompletionsExtractor bool next(); bool peek(const Utf8String &name); - QVector extractAll(); + CodeCompletions extractAll(); const CodeCompletion ¤tCodeCompletion() const; diff --git a/tests/unit/unittest/clientserverinprocesstest.cpp b/tests/unit/unittest/clientserverinprocesstest.cpp index 9010b4130f0..c654789bca2 100644 --- a/tests/unit/unittest/clientserverinprocesstest.cpp +++ b/tests/unit/unittest/clientserverinprocesstest.cpp @@ -145,7 +145,7 @@ TEST_F(ClientServerInProcess, SendCompleteCodeCommand) TEST_F(ClientServerInProcess, SendCodeCompletedCommand) { - QVector codeCompletions({Utf8StringLiteral("newFunction()")}); + ClangBackEnd::CodeCompletions codeCompletions({Utf8StringLiteral("newFunction()")}); ClangBackEnd::CodeCompletedCommand command(codeCompletions, 1); EXPECT_CALL(mockIpcClient, codeCompleted(command)) diff --git a/tests/unit/unittest/codecompletionsextractortest.cpp b/tests/unit/unittest/codecompletionsextractortest.cpp index 29b62811bc9..38a1190a3d3 100644 --- a/tests/unit/unittest/codecompletionsextractortest.cpp +++ b/tests/unit/unittest/codecompletionsextractortest.cpp @@ -51,8 +51,7 @@ using ClangBackEnd::TranslationUnit; using ClangBackEnd::CodeCompletion; using ClangBackEnd::UnsavedFiles; using ClangBackEnd::CodeCompletionChunk; - - +using ClangBackEnd::CodeCompletionChunks; namespace { @@ -591,10 +590,10 @@ TEST_F(CodeCompletionsExtractor, CompletionChunksFunction) ::CodeCompletionsExtractor extractor(completeResults.data()); ASSERT_THAT(extractor, HasCompletionChunks(Utf8StringLiteral("Function"), - QVector({{CodeCompletionChunk::ResultType, Utf8StringLiteral("void")}, - {CodeCompletionChunk::TypedText, Utf8StringLiteral("Function")}, - {CodeCompletionChunk::LeftParen, Utf8StringLiteral("(")}, - {CodeCompletionChunk::RightParen, Utf8StringLiteral(")")}}))); + CodeCompletionChunks({{CodeCompletionChunk::ResultType, Utf8StringLiteral("void")}, + {CodeCompletionChunk::TypedText, Utf8StringLiteral("Function")}, + {CodeCompletionChunk::LeftParen, Utf8StringLiteral("(")}, + {CodeCompletionChunk::RightParen, Utf8StringLiteral(")")}}))); } TEST_F(CodeCompletionsExtractor, CompletionChunksFunctionWithOptionalChunks) @@ -604,16 +603,16 @@ TEST_F(CodeCompletionsExtractor, CompletionChunksFunctionWithOptionalChunks) ::CodeCompletionsExtractor extractor(completeResults.data()); ASSERT_THAT(extractor, HasCompletionChunks(Utf8StringLiteral("FunctionWithOptional"), - QVector({{CodeCompletionChunk::ResultType, Utf8StringLiteral("void")}, - {CodeCompletionChunk::TypedText, Utf8StringLiteral("FunctionWithOptional")}, - {CodeCompletionChunk::LeftParen, Utf8StringLiteral("(")}, - {CodeCompletionChunk::Placeholder, Utf8StringLiteral("int x")}, - {CodeCompletionChunk::Optional, Utf8String(), QVector({ - {CodeCompletionChunk::Comma, Utf8StringLiteral(", ")}, - {CodeCompletionChunk::Placeholder, Utf8StringLiteral("char y")}, - {CodeCompletionChunk::Comma, Utf8StringLiteral(", ")}, - {CodeCompletionChunk::Placeholder, Utf8StringLiteral("int z")}})}, - {CodeCompletionChunk::RightParen, Utf8StringLiteral(")")}}))); + CodeCompletionChunks({{CodeCompletionChunk::ResultType, Utf8StringLiteral("void")}, + {CodeCompletionChunk::TypedText, Utf8StringLiteral("FunctionWithOptional")}, + {CodeCompletionChunk::LeftParen, Utf8StringLiteral("(")}, + {CodeCompletionChunk::Placeholder, Utf8StringLiteral("int x")}, + {CodeCompletionChunk::Optional, Utf8String(), CodeCompletionChunks({ + {CodeCompletionChunk::Comma, Utf8StringLiteral(", ")}, + {CodeCompletionChunk::Placeholder, Utf8StringLiteral("char y")}, + {CodeCompletionChunk::Comma, Utf8StringLiteral(", ")}, + {CodeCompletionChunk::Placeholder, Utf8StringLiteral("int z")}})}, + {CodeCompletionChunk::RightParen, Utf8StringLiteral(")")}}))); } TEST_F(CodeCompletionsExtractor, CompletionChunksField) @@ -623,8 +622,8 @@ TEST_F(CodeCompletionsExtractor, CompletionChunksField) ::CodeCompletionsExtractor extractor(completeResults.data()); ASSERT_THAT(extractor, HasCompletionChunks(Utf8StringLiteral("Field"), - QVector({{CodeCompletionChunk::ResultType, Utf8StringLiteral("int")}, - {CodeCompletionChunk::TypedText, Utf8StringLiteral("Field")}}))); + CodeCompletionChunks({{CodeCompletionChunk::ResultType, Utf8StringLiteral("int")}, + {CodeCompletionChunk::TypedText, Utf8StringLiteral("Field")}}))); } TEST_F(CodeCompletionsExtractor, CompletionChunksEnumerator) @@ -634,8 +633,8 @@ TEST_F(CodeCompletionsExtractor, CompletionChunksEnumerator) ::CodeCompletionsExtractor extractor(completeResults.data()); ASSERT_THAT(extractor, HasCompletionChunks(Utf8StringLiteral("Enumerator"), - QVector({{CodeCompletionChunk::ResultType, Utf8StringLiteral("Enumeration")}, - {CodeCompletionChunk::TypedText, Utf8StringLiteral("Enumerator")}}))); + CodeCompletionChunks({{CodeCompletionChunk::ResultType, Utf8StringLiteral("Enumeration")}, + {CodeCompletionChunk::TypedText, Utf8StringLiteral("Enumerator")}}))); } TEST_F(CodeCompletionsExtractor, CompletionChunksEnumeration) @@ -645,7 +644,7 @@ TEST_F(CodeCompletionsExtractor, CompletionChunksEnumeration) ::CodeCompletionsExtractor extractor(completeResults.data()); ASSERT_THAT(extractor, HasCompletionChunks(Utf8StringLiteral("Enumeration"), - QVector({{CodeCompletionChunk::TypedText, Utf8StringLiteral("Enumeration")}}))); + CodeCompletionChunks({{CodeCompletionChunk::TypedText, Utf8StringLiteral("Enumeration")}}))); } TEST_F(CodeCompletionsExtractor, CompletionChunksClass) @@ -655,7 +654,7 @@ TEST_F(CodeCompletionsExtractor, CompletionChunksClass) ::CodeCompletionsExtractor extractor(completeResults.data()); ASSERT_THAT(extractor, HasCompletionChunks(Utf8StringLiteral("Class"), - QVector({{CodeCompletionChunk::TypedText, Utf8StringLiteral("Class")}}))); + CodeCompletionChunks({{CodeCompletionChunk::TypedText, Utf8StringLiteral("Class")}}))); } diff --git a/tests/unit/unittest/completionchunkstotextconvertertest.cpp b/tests/unit/unittest/completionchunkstotextconvertertest.cpp index bc2bb4219a3..ff52c90311e 100644 --- a/tests/unit/unittest/completionchunkstotextconvertertest.cpp +++ b/tests/unit/unittest/completionchunkstotextconvertertest.cpp @@ -39,6 +39,7 @@ namespace { using ClangBackEnd::CodeCompletionChunk; +using ClangBackEnd::CodeCompletionChunks; using Converter = ClangCodeModel::Internal::CompletionChunksToTextConverter; class CompletionChunksToTextConverter : public ::testing::Test @@ -84,7 +85,7 @@ class CompletionChunksToTextConverter : public ::testing::Test TEST_F(CompletionChunksToTextConverter, ParseIsClearingText) { - QVector completionChunks({integerResultType, functionName, leftParen, rightParen}); + CodeCompletionChunks completionChunks({integerResultType, functionName, leftParen, rightParen}); converter.setAddResultType(true); converter.parseChunks(completionChunks); @@ -94,7 +95,7 @@ TEST_F(CompletionChunksToTextConverter, ParseIsClearingText) TEST_F(CompletionChunksToTextConverter, ConvertFunction) { - QVector completionChunks({integerResultType, functionName, leftParen, rightParen}); + CodeCompletionChunks completionChunks({integerResultType, functionName, leftParen, rightParen}); converter.setAddResultType(true); converter.parseChunks(completionChunks); @@ -104,7 +105,7 @@ TEST_F(CompletionChunksToTextConverter, ConvertFunction) TEST_F(CompletionChunksToTextConverter, ConvertFunctionWithParameters) { - QVector completionChunks({integerResultType, functionName, leftParen, functionArgumentX,rightParen}); + CodeCompletionChunks completionChunks({integerResultType, functionName, leftParen, functionArgumentX,rightParen}); converter.setAddResultType(true); converter.setAddPlaceHolderText(true); @@ -115,7 +116,7 @@ TEST_F(CompletionChunksToTextConverter, ConvertFunctionWithParameters) TEST_F(CompletionChunksToTextConverter, ConvertFunctionWithOptionalParameter) { - QVector completionChunks({integerResultType, functionName, leftParen, functionArgumentX, optional,rightParen}); + CodeCompletionChunks completionChunks({integerResultType, functionName, leftParen, functionArgumentX, optional,rightParen}); converter.setAddResultType(true); converter.setAddPlaceHolderText(true); @@ -126,7 +127,7 @@ TEST_F(CompletionChunksToTextConverter, ConvertFunctionWithOptionalParameter) TEST_F(CompletionChunksToTextConverter, ConvertVariable) { - QVector completionChunks({integerResultType, variableName}); + CodeCompletionChunks completionChunks({integerResultType, variableName}); converter.setAddResultType(true); converter.parseChunks(completionChunks); @@ -136,7 +137,7 @@ TEST_F(CompletionChunksToTextConverter, ConvertVariable) TEST_F(CompletionChunksToTextConverter, Enumerator) { - QVector completionChunks({enumerationResultType, enumeratorName}); + CodeCompletionChunks completionChunks({enumerationResultType, enumeratorName}); converter.setAddResultType(true); converter.parseChunks(completionChunks); @@ -146,7 +147,7 @@ TEST_F(CompletionChunksToTextConverter, Enumerator) TEST_F(CompletionChunksToTextConverter, Enumeration) { - QVector completionChunks({className}); + CodeCompletionChunks completionChunks({className}); converter.parseChunks(completionChunks); @@ -155,7 +156,7 @@ TEST_F(CompletionChunksToTextConverter, Enumeration) TEST_F(CompletionChunksToTextConverter, Switch) { - QVector completionChunks({switchName, + CodeCompletionChunks completionChunks({switchName, leftParen, condition, rightParen, @@ -172,7 +173,7 @@ TEST_F(CompletionChunksToTextConverter, Switch) TEST_F(CompletionChunksToTextConverter, For) { - QVector completionChunks({forName, + CodeCompletionChunks completionChunks({forName, leftParen, initStatement, semicolon, @@ -194,7 +195,7 @@ TEST_F(CompletionChunksToTextConverter, For) TEST_F(CompletionChunksToTextConverter, const_cast) { - QVector completionChunks({constCastName, + CodeCompletionChunks completionChunks({constCastName, leftAngle, rightAngle, leftParen, @@ -208,7 +209,7 @@ TEST_F(CompletionChunksToTextConverter, const_cast) TEST_F(CompletionChunksToTextConverter, Throw) { - QVector completionChunks({voidResultType, throwName}); + CodeCompletionChunks completionChunks({voidResultType, throwName}); auto completionName = Converter::convertToName(completionChunks); @@ -217,7 +218,7 @@ TEST_F(CompletionChunksToTextConverter, Throw) TEST_F(CompletionChunksToTextConverter, ElseIf) { - QVector completionChunks({elseName, + CodeCompletionChunks completionChunks({elseName, horizontalSpace, ifName, horizontalSpace, diff --git a/tests/unit/unittest/readandwritecommandblocktest.cpp b/tests/unit/unittest/readandwritecommandblocktest.cpp index aab8672b433..c3561c141c6 100644 --- a/tests/unit/unittest/readandwritecommandblocktest.cpp +++ b/tests/unit/unittest/readandwritecommandblocktest.cpp @@ -156,7 +156,7 @@ TEST_F(ReadAndWriteCommandBlockTest, CompareCompleteCodeCommand) TEST_F(ReadAndWriteCommandBlockTest, CompareCodeCompletedCommand) { - QVector codeCompletions({Utf8StringLiteral("newFunction()")}); + ClangBackEnd::CodeCompletions codeCompletions({Utf8StringLiteral("newFunction()")}); CompareCommand(ClangBackEnd::CodeCompletedCommand(codeCompletions, 1)); } @@ -183,7 +183,7 @@ TEST_F(ReadAndWriteCommandBlockTest, ReadCommandAfterInterruption) QVariant ReadAndWriteCommandBlockTest::writeCodeCompletedCommand() { - ClangBackEnd::CodeCompletedCommand command(QVector({Utf8StringLiteral("newFunction()")}), 1); + ClangBackEnd::CodeCompletedCommand command(ClangBackEnd::CodeCompletions({Utf8StringLiteral("newFunction()")}), 1); const QVariant writeCommand = QVariant::fromValue(command); writeCommandBlock.write(writeCommand); From 8a06df62350176d3c5a4d97657ac8ee5e4c6387d Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Wed, 22 Jul 2015 16:56:17 +0200 Subject: [PATCH 051/116] Clang: Clean up unittest.pro Change-Id: Icd3f1ab0b9b9557b0bd4cdfc60130e0c8bd15609 Reviewed-by: Marco Bubke --- tests/unit/unittest/clang_dependency.pri | 5 + tests/unit/unittest/cplusplus.pri | 1 - tests/unit/unittest/creator_dependency.pri | 10 ++ tests/unit/unittest/gmock_dependency.pri | 22 ++++ tests/unit/unittest/unittest.pro | 113 +++++++-------------- 5 files changed, 76 insertions(+), 75 deletions(-) create mode 100644 tests/unit/unittest/clang_dependency.pri create mode 100644 tests/unit/unittest/creator_dependency.pri create mode 100644 tests/unit/unittest/gmock_dependency.pri diff --git a/tests/unit/unittest/clang_dependency.pri b/tests/unit/unittest/clang_dependency.pri new file mode 100644 index 00000000000..f70a839b7e5 --- /dev/null +++ b/tests/unit/unittest/clang_dependency.pri @@ -0,0 +1,5 @@ +include(../../../src/shared/clang/clang_installation.pri) +requires(!isEmpty(LLVM_LIBS)) + +INCLUDEPATH += $$LLVM_INCLUDEPATH +LIBS += $$LLVM_LIBS diff --git a/tests/unit/unittest/cplusplus.pri b/tests/unit/unittest/cplusplus.pri index abce4336116..d0eb17e6fdb 100644 --- a/tests/unit/unittest/cplusplus.pri +++ b/tests/unit/unittest/cplusplus.pri @@ -1,5 +1,4 @@ INCLUDEPATH += $$PWD -#include($$PWD/../../../src/libs/3rdparty/cplusplus/cplusplus.pri) include($$PWD/../../../src/libs/utils/utils-lib.pri) include($$PWD/../../../src/libs/cplusplus/cplusplus-lib.pri) diff --git a/tests/unit/unittest/creator_dependency.pri b/tests/unit/unittest/creator_dependency.pri new file mode 100644 index 00000000000..35e76dbb451 --- /dev/null +++ b/tests/unit/unittest/creator_dependency.pri @@ -0,0 +1,10 @@ +include(../../../src/libs/sqlite/sqlite-lib.pri) +include(../../../src/libs/clangbackendipc/clangbackendipc-lib.pri) +include(../../../src/tools/clangbackend/ipcsource/clangbackendclangipc-source.pri) +include(../../../src/plugins/clangcodemodel/clangcodemodelunittestfiles.pri) +include(cplusplus.pri) + +INCLUDEPATH += \ + $$PWD/../../../src/libs \ + $$PWD/../../../src/libs/3rdparty \ + $$PWD/../../../src/plugins diff --git a/tests/unit/unittest/gmock_dependency.pri b/tests/unit/unittest/gmock_dependency.pri new file mode 100644 index 00000000000..ad92ed88317 --- /dev/null +++ b/tests/unit/unittest/gmock_dependency.pri @@ -0,0 +1,22 @@ +GMOCK_DIR = $$(GMOCK_DIR) +GTEST_DIR = $$GMOCK_DIR/gtest + +requires(exists($$GMOCK_DIR)) +!exists($$GMOCK_DIR):message("No gmock is found! To enabe unit tests set GMOCK_DIR") + +DEFINES += \ + GTEST_HAS_STD_INITIALIZER_LIST_ \ + GTEST_LANG_CXX11 + +INCLUDEPATH += \ + $$GTEST_DIR \ + $$GTEST_DIR/include \ + $$GMOCK_DIR \ + $$GMOCK_DIR/include + +SOURCES += \ + $$GMOCK_DIR/src/gmock-all.cc \ + $$GTEST_DIR/src/gtest-all.cc + +HEADERS += \ + $$PWD/gtest-qt-printing.h diff --git a/tests/unit/unittest/unittest.pro b/tests/unit/unittest/unittest.pro index 63edc725560..42e7287c0ca 100644 --- a/tests/unit/unittest/unittest.pro +++ b/tests/unit/unittest/unittest.pro @@ -1,91 +1,56 @@ -QT += core network testlib widgets - -TARGET = unittest -CONFIG += console c++14 testcase -CONFIG -= app_bundle - -TEMPLATE = app - -GMOCK_DIR = $$(GMOCK_DIR) -GTEST_DIR = $$GMOCK_DIR/gtest - -requires(exists($$GMOCK_DIR)) -!exists($$GMOCK_DIR):message("No gmock is found! To enabe unit tests set GMOCK_DIR") - INCLUDEPATH += ../mockup -INCLUDEPATH += $$GTEST_DIR $$GTEST_DIR/include $$GMOCK_DIR $$GMOCK_DIR/include - -include(../../../src/libs/sqlite/sqlite-lib.pri) -include(../../../src/libs/clangbackendipc/clangbackendipc-lib.pri) -include(../../../src/tools/clangbackend/ipcsource/clangbackendclangipc-source.pri) -include(../../../src/shared/clang/clang_installation.pri) -include(../../../src/plugins/clangcodemodel/clangcodemodelunittestfiles.pri) -include(cplusplus.pri) - -INCLUDEPATH += $$PWD/../../../src/libs $$PWD/../../../src/plugins $$PWD/../../../src/libs/3rdparty -requires(!isEmpty(LLVM_LIBS)) - -LIBS += $$LLVM_LIBS -INCLUDEPATH += $$LLVM_INCLUDEPATH +include(gmock_dependency.pri) +include(clang_dependency.pri) +include(creator_dependency.pri) +QT += core network testlib widgets +CONFIG += console c++14 testcase +CONFIG -= app_bundle osx:QMAKE_CXXFLAGS = -stdlib=libc++ -SOURCES += main.cpp \ - $$GTEST_DIR/src/gtest-all.cc \ - $$GMOCK_DIR/src/gmock-all.cc \ - utf8test.cpp \ - sqlstatementbuildertest.cpp \ +DEFINES += \ + QT_NO_CAST_FROM_ASCII \ + CLANGBACKEND_TESTS \ + DONT_CHECK_COMMAND_COUNTER \ + TESTDATA_DIR=\"R\\\"xxx($$PWD/data)xxx\\\"\" +win32:DEFINES += ECHOSERVER=\"R\\\"xxx($$OUT_PWD/../echo)xxx\\\"\" +unix: DEFINES += ECHOSERVER=\"R\\\"xxx($$OUT_PWD/../echoserver/echo)xxx\\\"\" + +SOURCES += \ + activationsequencecontextprocessortest.cpp \ + activationsequenceprocessortest.cpp \ + clangcodecompleteresultstest.cpp \ + clangcompletioncontextanalyzertest.cpp \ + clangipcservertest.cpp \ + clangstringtest.cpp \ + clientserverinprocesstest.cpp \ + clientserveroutsideprocess.cpp \ + codecompletionsextractortest.cpp \ + codecompletiontest.cpp \ + completionchunkstotextconvertertest.cpp \ createtablesqlstatementbuildertest.cpp \ + lineprefixertest.cpp \ + main.cpp \ + projecttest.cpp \ + readandwritecommandblocktest.cpp \ + spydummy.cpp \ sqlitecolumntest.cpp \ + sqlitedatabasebackendtest.cpp \ + sqlitedatabasetest.cpp \ sqlitestatementtest.cpp \ sqlitetabletest.cpp \ - spydummy.cpp \ - sqlitedatabasetest.cpp \ - sqlitedatabasebackendtest.cpp \ - readandwritecommandblocktest.cpp \ - clientserverinprocesstest.cpp \ - clientserveroutsideprocess.cpp \ - codecompletiontest.cpp \ - clangstringtest.cpp \ + sqlstatementbuildertest.cpp \ + translationunitstest.cpp \ translationunittest.cpp \ - clangcodecompleteresultstest.cpp \ - codecompletionsextractortest.cpp \ unsavedfilestest.cpp \ - projecttest.cpp \ - clangipcservertest.cpp \ - translationunitstest.cpp \ - completionchunkstotextconvertertest.cpp \ - lineprefixertest.cpp \ - activationsequenceprocessortest.cpp \ - clangcompletioncontextanalyzertest.cpp \ - activationsequencecontextprocessortest.cpp + utf8test.cpp HEADERS += \ gtest-qt-printing.h \ - spydummy.h \ mockipclient.h \ - mockipcserver.h + mockipcserver.h \ + spydummy.h -OTHER_FILES += data/complete_testfile_1.cpp \ - data/complete_completer.cpp \ - data/complete_completer_unsaved.cpp \ - data/complete_extractor_function.cpp \ - data/complete_extractor_function_unsaved.cpp \ - data/complete_extractor_function_unsaved_2.cpp \ - data/complete_extractor_variable.cpp \ - data/complete_extractor_class.cpp \ - data/complete_extractor_namespace.cpp \ - data/complete_extractor_enumeration.cpp \ - data/complete_extractor_constructor.cpp \ - data/complete_translationunit_parse_error.cpp - -DEFINES += QT_NO_CAST_FROM_ASCII -DEFINES += CLANGBACKEND_TESTS -DEFINES += DONT_CHECK_COMMAND_COUNTER -DEFINES += GTEST_HAS_STD_INITIALIZER_LIST_ GTEST_LANG_CXX11 - -DEFINES += TESTDATA_DIR=\"R\\\"xxx($$PWD/data)xxx\\\"\" -win32:DEFINES += ECHOSERVER=\"R\\\"xxx($$OUT_PWD/../echo)xxx\\\"\" -unix:DEFINES += ECHOSERVER=\"R\\\"xxx($$OUT_PWD/../echoserver/echo)xxx\\\"\" +OTHER_FILES += $$files(data/*) From ac7f32e4c2d243d60c22329a7fba83747cb1b3b7 Mon Sep 17 00:00:00 2001 From: hjk Date: Fri, 17 Jul 2015 13:30:51 +0200 Subject: [PATCH 052/116] Debugger: Ignore async GDB notifications while extracting variables Recent builds of GDB started to deliver *running and *stopped notifications for expression evaluation, even unpaired at times. Since we know that we are stopped when we start variable extraction and we are stopped when it ends, the intermediate notifications can be ignored. Change-Id: I800082afb7df600ad4e6f97b534f4ea901c02d8a Reviewed-by: Christian Stenger --- src/plugins/debugger/gdb/gdbengine.cpp | 45 +++++++++++++++++--------- src/plugins/debugger/gdb/gdbengine.h | 8 ++++- 2 files changed, 36 insertions(+), 17 deletions(-) diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index 2fa00476c4b..5af199ff156 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -241,6 +241,7 @@ GdbEngine::GdbEngine(const DebuggerRunParameters &startParameters) m_fullStartDone = false; m_systemDumpersLoaded = false; m_rerunPending = false; + m_inUpdateLocals = false; m_debugInfoTaskHandler = new DebugInfoTaskHandler(this); //ExtensionSystem::PluginManager::addObject(m_debugInfoTaskHandler); @@ -442,23 +443,31 @@ void GdbEngine::handleResponse(const QByteArray &buff) } } if (asyncClass == "stopped") { - handleStopResponse(result); - m_pendingLogStreamOutput.clear(); - m_pendingConsoleStreamOutput.clear(); + if (m_inUpdateLocals) { + showMessage(_("UNEXPECTED *stopped NOTIFICATION IGNORED"), LogWarning); + } else { + handleStopResponse(result); + m_pendingLogStreamOutput.clear(); + m_pendingConsoleStreamOutput.clear(); + } } else if (asyncClass == "running") { - GdbMi threads = result["thread-id"]; - threadsHandler()->notifyRunning(threads.data()); - if (state() == InferiorRunOk || state() == InferiorSetupRequested) { - // We get multiple *running after thread creation and in Windows terminals. - showMessage(QString::fromLatin1("NOTE: INFERIOR STILL RUNNING IN STATE %1."). - arg(QLatin1String(DebuggerEngine::stateName(state())))); - } else if (HostOsInfo::isWindowsHost() && (state() == InferiorStopRequested - || state() == InferiorShutdownRequested)) { - // FIXME: Breakpoints on Windows are exceptions which are thrown in newly - // created threads so we have to filter out the running threads messages when - // we request a stop. + if (m_inUpdateLocals) { + showMessage(_("UNEXPECTED *running NOTIFICATION IGNORED"), LogWarning); } else { - notifyInferiorRunOk(); + GdbMi threads = result["thread-id"]; + threadsHandler()->notifyRunning(threads.data()); + if (state() == InferiorRunOk || state() == InferiorSetupRequested) { + // We get multiple *running after thread creation and in Windows terminals. + showMessage(QString::fromLatin1("NOTE: INFERIOR STILL RUNNING IN STATE %1."). + arg(QLatin1String(DebuggerEngine::stateName(state())))); + } else if (HostOsInfo::isWindowsHost() && (state() == InferiorStopRequested + || state() == InferiorShutdownRequested)) { + // FIXME: Breakpoints on Windows are exceptions which are thrown in newly + // created threads so we have to filter out the running threads messages when + // we request a stop. + } else { + notifyInferiorRunOk(); + } } } else if (asyncClass == "library-loaded") { // Archer has 'id="/usr/lib/libdrm.so.2", @@ -1187,6 +1196,8 @@ void GdbEngine::handleResultRecord(DebuggerResponse *response) if (!(cmd.flags & Discardable)) --m_nonDiscardableCount; + m_inUpdateLocals = (cmd.flags & InUpdateLocals); + if (cmd.callback) cmd.callback(*response); @@ -4758,7 +4769,7 @@ void GdbEngine::doUpdateLocals(const UpdateParameters ¶ms) cmd.arg("resultvarname", m_resultVarName); cmd.arg("partialVariable", params.partialVariable); cmd.arg("sortStructMembers", boolSetting(SortStructMembers)); - cmd.flags = Discardable; + cmd.flags = Discardable | InUpdateLocals; cmd.callback = [this](const DebuggerResponse &r) { handleStackFrame(r); }; runCommand(cmd); @@ -4768,6 +4779,8 @@ void GdbEngine::doUpdateLocals(const UpdateParameters ¶ms) void GdbEngine::handleStackFrame(const DebuggerResponse &response) { + m_inUpdateLocals = false; + if (response.resultClass == ResultDone) { QByteArray out = response.consoleStreamOutput; while (out.endsWith(' ') || out.endsWith('\n')) diff --git a/src/plugins/debugger/gdb/gdbengine.h b/src/plugins/debugger/gdb/gdbengine.h index 6e5474f0a2d..e8d46ee4265 100644 --- a/src/plugins/debugger/gdb/gdbengine.h +++ b/src/plugins/debugger/gdb/gdbengine.h @@ -171,7 +171,9 @@ private slots: // This command needs to be send immediately. Immediate = 256, // This is a command that needs to be wrapped into -interpreter-exec console - ConsoleCommand = 512 + ConsoleCommand = 512, + // This is the UpdateLocals commannd during which we ignore notifications + InUpdateLocals = 1024 }; Q_DECLARE_FLAGS(GdbCommandFlags, GdbCommandFlag) @@ -432,6 +434,10 @@ private slots: // For short-circuiting stack and thread list evaluation. bool m_stackNeeded; + // For suppressing processing *stopped and *running responses + // while updating locals. + bool m_inUpdateLocals; + bool isQFatalBreakpoint(const BreakpointResponseId &id) const; bool isHiddenBreakpoint(const BreakpointResponseId &id) const; From 007daabff51b9121a01d21b8d26a94c773586694 Mon Sep 17 00:00:00 2001 From: Sergey Belyashov Date: Thu, 23 Jul 2015 14:31:43 +0300 Subject: [PATCH 053/116] Fix i18n problems In the QmlEngine, a few tr() have been replaced by QCoreApplication::translate(). In other files, Q_OBJECT has been added to the class definitions. Change-Id: Ia0505c19934dc691cd3d67f4946293290c2fec68 Reviewed-by: Oswald Buddenhagen Reviewed-by: Daniel Teske Reviewed-by: hjk --- src/plugins/android/androiddevicedialog.cpp | 4 ++++ src/plugins/cmakeprojectmanager/cmakesettingspage.cpp | 3 +++ src/plugins/debugger/gdb/gdboptionspage.cpp | 6 ++++++ src/plugins/debugger/qml/qmlengine.cpp | 4 ++-- src/plugins/pythoneditor/pythoneditorplugin.cpp | 6 ++++++ 5 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/plugins/android/androiddevicedialog.cpp b/src/plugins/android/androiddevicedialog.cpp index 45bdecdc904..ca0ac7e27ae 100644 --- a/src/plugins/android/androiddevicedialog.cpp +++ b/src/plugins/android/androiddevicedialog.cpp @@ -109,6 +109,7 @@ class AndroidDeviceModelNode class AndroidDeviceModelDelegate : public QStyledItemDelegate { + Q_OBJECT public: AndroidDeviceModelDelegate(QObject * parent = 0) : QStyledItemDelegate(parent) @@ -239,6 +240,7 @@ class AndroidDeviceModelDelegate : public QStyledItemDelegate class AndroidDeviceModel : public QAbstractItemModel { + Q_OBJECT public: AndroidDeviceModel(int apiLevel, const QString &abi, AndroidConfigurations::Options options); QModelIndex index(int row, int column, @@ -663,3 +665,5 @@ void AndroidDeviceDialog::defaultDeviceClear() m_ui->lookingForDeviceCancel->setVisible(false); m_defaultDevice.clear(); } + +#include "androiddevicedialog.moc" diff --git a/src/plugins/cmakeprojectmanager/cmakesettingspage.cpp b/src/plugins/cmakeprojectmanager/cmakesettingspage.cpp index 35808e404cf..44c5624cf18 100644 --- a/src/plugins/cmakeprojectmanager/cmakesettingspage.cpp +++ b/src/plugins/cmakeprojectmanager/cmakesettingspage.cpp @@ -378,6 +378,7 @@ void CMakeToolItemConfigWidget::load(const CMakeToolTreeItem *item) class CMakeToolConfigWidget : public QWidget { + Q_OBJECT public: CMakeToolConfigWidget() : m_currentItem(0) { @@ -572,3 +573,5 @@ void CMakeSettingsPage::finish() } // namespace Internal } // namespace CMakeProjectManager + +#include "cmakesettingspage.moc" diff --git a/src/plugins/debugger/gdb/gdboptionspage.cpp b/src/plugins/debugger/gdb/gdboptionspage.cpp index 69337925941..392ea1a3c8e 100644 --- a/src/plugins/debugger/gdb/gdboptionspage.cpp +++ b/src/plugins/debugger/gdb/gdboptionspage.cpp @@ -63,6 +63,7 @@ namespace Internal { class GdbOptionsPageWidget : public QWidget { + Q_OBJECT public: GdbOptionsPageWidget(); Utils::SavedActionSet group; @@ -70,6 +71,7 @@ class GdbOptionsPageWidget : public QWidget class GdbOptionsPage : public Core::IOptionsPage { + Q_OBJECT public: GdbOptionsPage(); @@ -337,6 +339,7 @@ void GdbOptionsPage::finish() class GdbOptionsPageWidget2 : public QWidget { + Q_OBJECT public: GdbOptionsPageWidget2(); @@ -437,6 +440,7 @@ GdbOptionsPageWidget2::GdbOptionsPageWidget2() // The "Dangerous" options. class GdbOptionsPage2 : public Core::IOptionsPage { + Q_OBJECT public: GdbOptionsPage2(); @@ -488,3 +492,5 @@ void addGdbOptionPages(QList *opts) } // namespace Internal } // namespace Debugger + +#include "gdboptionspage.moc" diff --git a/src/plugins/debugger/qml/qmlengine.cpp b/src/plugins/debugger/qml/qmlengine.cpp index 98a11f5419c..f8dcc2372c6 100644 --- a/src/plugins/debugger/qml/qmlengine.cpp +++ b/src/plugins/debugger/qml/qmlengine.cpp @@ -1214,7 +1214,7 @@ void QmlEnginePrivate::updateScriptSource(const QString &fileName, int lineOffse } //update open editors - QString titlePattern = tr("JS Source for %1").arg(fileName); + QString titlePattern = QCoreApplication::translate("QmlEngine", "JS Source for %1").arg(fileName); //Check if there are open editors with the same title foreach (IDocument *doc, DocumentModel::openedDocuments()) { if (doc->displayName() == titlePattern) { @@ -2135,7 +2135,7 @@ StackFrame QmlEnginePrivate::extractStackFrame(const QVariant &bodyVal) QmlV8ObjectData objectData = extractData(body.value(_("func"))); QString functionName = objectData.value.toString(); if (functionName.isEmpty()) - functionName = tr("Anonymous Function"); + functionName = QCoreApplication::translate("QmlEngine", "Anonymous Function"); stackFrame.function = functionName; objectData = extractData(body.value(_("script"))); diff --git a/src/plugins/pythoneditor/pythoneditorplugin.cpp b/src/plugins/pythoneditor/pythoneditorplugin.cpp index eab59f24f62..d1b5bfaff57 100644 --- a/src/plugins/pythoneditor/pythoneditorplugin.cpp +++ b/src/plugins/pythoneditor/pythoneditorplugin.cpp @@ -228,6 +228,7 @@ static Core::Id idFromScript(const QString &target) class PythonProjectManager : public IProjectManager { + Q_OBJECT public: PythonProjectManager() {} @@ -366,6 +367,7 @@ class PythonProjectNode : public ProjectNode class PythonRunConfigurationWidget : public QWidget { + Q_OBJECT public: PythonRunConfigurationWidget(PythonRunConfiguration *runConfiguration, QWidget *parent = 0); void setInterpreter(const QString &interpreter); @@ -379,6 +381,7 @@ class PythonRunConfigurationWidget : public QWidget class PythonRunConfiguration : public RunConfiguration { + Q_OBJECT public: PythonRunConfiguration(Target *parent, Core::Id id); @@ -405,6 +408,7 @@ class PythonRunConfiguration : public RunConfiguration class PythonRunControl : public RunControl { + Q_OBJECT public: PythonRunControl(PythonRunConfiguration *runConfiguration, Core::Id mode); @@ -1270,3 +1274,5 @@ QSet PythonEditorPlugin::builtins() } // namespace Internal } // namespace PythonEditor + +#include "pythoneditorplugin.moc" From d489f00f64525a54d11f9c90dad943d5ee7336a7 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Fri, 24 Jul 2015 09:48:29 +0200 Subject: [PATCH 054/116] Fix qbs build. Commit d765cd73a2 pulled in more stuff into the diassembler. Change-Id: I83e0907abaef84a9cebb3c63d957182707af012d Reviewed-by: hjk --- tests/auto/debugger/disassembler.qbs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/auto/debugger/disassembler.qbs b/tests/auto/debugger/disassembler.qbs index 5b204826d43..35a5aadd596 100644 --- a/tests/auto/debugger/disassembler.qbs +++ b/tests/auto/debugger/disassembler.qbs @@ -2,7 +2,8 @@ import qbs QtcAutotest { name: "disassembler autotest" - Depends { name: "Qt.network" } // For QHostAddress + Depends { name: "ProjectExplorer" } + Depends { name: "QtcSsh" } Group { name: "Sources from Debugger plugin" prefix: project.debuggerDir From 0bf8768152221c8254df7bc985aa9229ab7f84a2 Mon Sep 17 00:00:00 2001 From: Robert Loehning Date: Fri, 24 Jul 2015 12:34:41 +0200 Subject: [PATCH 055/116] Squish: Avoid float rounding issues in tst_qml_js_console Old value fails with Qt 5.5.0. Changing binary value 0.00110011 to 0.0011. Task-number: QTCREATORBUG-14757 Change-Id: I6de62241089d50256cfef6f7cba61389da58b6ed Reviewed-by: Christian Stenger --- tests/system/suite_debugger/tst_qml_js_console/test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/system/suite_debugger/tst_qml_js_console/test.py b/tests/system/suite_debugger/tst_qml_js_console/test.py index f6729f4c5a7..8075ddd56a3 100644 --- a/tests/system/suite_debugger/tst_qml_js_console/test.py +++ b/tests/system/suite_debugger/tst_qml_js_console/test.py @@ -151,7 +151,7 @@ def main(): checks = [("color", u"#\u200b008000"), ("width", "50"), ("color ='silver'", "silver", "color", u"#\u200bc0c0c0"), ("width=66", "66", "width"), ("anchors.centerIn", ""), - ("opacity", "1"), ("opacity = .2", u"0.\u200b2", "opacity")] + ("opacity", "1"), ("opacity = .1875", u"0.\u200b1875", "opacity")] # check red inner Rectangle runChecks("text='Rectangle' occurrence='2'", rootIndex, checks) From 463566afbed791223d0eab56529d5ef07d5bba9e Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Fri, 24 Jul 2015 16:33:05 +0200 Subject: [PATCH 056/116] CplusPlus: Install run-time resources also with qbs build. Change-Id: I65741f6a74a73925df78b7f35f21f98be35f8270 Reviewed-by: Nikolai Kosjar --- share/share.qbs | 1 + 1 file changed, 1 insertion(+) diff --git a/share/share.qbs b/share/share.qbs index 61876232810..eea8a00aed5 100644 --- a/share/share.qbs +++ b/share/share.qbs @@ -10,6 +10,7 @@ Product { qbs.installSourceBase: "qtcreator" prefix: "qtcreator/" files: [ + "cplusplus/**/*", "debugger/**/*", "designer/**/*", "generic-highlighter/**/*", From fa6753627200223fb03526edbd76a7b6e2cbb745 Mon Sep 17 00:00:00 2001 From: Robert Loehning Date: Fri, 24 Jul 2015 17:56:01 +0200 Subject: [PATCH 057/116] Squish: Fix tst_WELP01 for Qt 5.5 Change-Id: I8589b6b5a4ea9c50a49fc459532f043503786816 Reviewed-by: Christian Stenger --- tests/system/objects.map | 1 + tests/system/shared/qtcreator.py | 2 ++ tests/system/suite_WELP/tst_WELP01/test.py | 37 ++++++++++------------ 3 files changed, 19 insertions(+), 21 deletions(-) diff --git a/tests/system/objects.map b/tests/system/objects.map index 791fe94ae73..8b4ae5f89f3 100644 --- a/tests/system/objects.map +++ b/tests/system/objects.map @@ -142,6 +142,7 @@ :Qt Creator.Stop_QToolButton {text='Stop' type='QToolButton' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'} :Qt Creator.WelcomePageStyledBar_QWindowContainer {aboveWidget=':Qt Creator.WelcomePageStyledBar_Utils::StyledBar' type='QWindowContainer' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'} :Qt Creator.WelcomePageStyledBar_Utils::StyledBar {name='WelcomePageStyledBar' type='Utils::StyledBar' visible='1' window=':Qt Creator_Core::Internal::MainWindow'} +:Qt Creator.WelcomePage_QQuickWidget {name='WelcomePage' type='QQuickWidget' visible='1' window=':Qt Creator_Core::Internal::MainWindow'} :Qt Creator.replaceEdit_Utils::FilterLineEdit {name='replaceEdit' type='Utils::FancyLineEdit' visible='1' window=':Qt Creator_Core::Internal::MainWindow'} :Qt Creator.scrollArea_QScrollArea {type='ProjectExplorer::PanelsWidget' visible='1' window=':Qt Creator_Core::Internal::MainWindow'} :Qt Creator.splitter_QSplitter {name='splitter' type='QSplitter' visible='1' window=':Qt Creator_Core::Internal::MainWindow'} diff --git a/tests/system/shared/qtcreator.py b/tests/system/shared/qtcreator.py index ff3d58afec6..2ab82276aab 100644 --- a/tests/system/shared/qtcreator.py +++ b/tests/system/shared/qtcreator.py @@ -39,6 +39,8 @@ import errno; from datetime import datetime,timedelta; +isQt54Build = os.getenv("SYSTEST_ISQT54BUILD") != "0" + srcPath = '' SettingsPath = '' tmpSettingsDir = '' diff --git a/tests/system/suite_WELP/tst_WELP01/test.py b/tests/system/suite_WELP/tst_WELP01/test.py index 825985d3ba0..863954692dc 100755 --- a/tests/system/suite_WELP/tst_WELP01/test.py +++ b/tests/system/suite_WELP/tst_WELP01/test.py @@ -31,7 +31,11 @@ source("../../shared/qtcreator.py") source("../../shared/suites_qtta.py") -gettingStartedText = getQmlItem("Button", ":WelcomePageStyledBar.WelcomePage_QQuickView", False, +if isQt54Build: + welcomePage = ":WelcomePageStyledBar.WelcomePage_QQuickView" +else: + welcomePage = ":Qt Creator.WelcomePage_QQuickWidget" +gettingStartedText = getQmlItem("Button", welcomePage, False, "text='Get Started Now' id='gettingStartedButton'") def clickItemVerifyHelpCombo(qmlItem, expectedHelpComboRegex, testDetails): @@ -47,12 +51,9 @@ def clickItemVerifyHelpCombo(qmlItem, expectedHelpComboRegex, testDetails): "Verifying: Get Started Now button is being displayed.") def waitForButtonsState(projectsChecked, examplesChecked, tutorialsChecked, timeout=5000): - projButton = waitForObject(getQmlItem("Button", ":WelcomePageStyledBar.WelcomePage_QQuickView", - False, "text='Projects'")) - exmpButton = waitForObject(getQmlItem("Button", ":WelcomePageStyledBar.WelcomePage_QQuickView", - False, "text='Examples'")) - tutoButton = waitForObject(getQmlItem("Button", ":WelcomePageStyledBar.WelcomePage_QQuickView", - False, "text='Tutorials'")) + projButton = waitForObject(getQmlItem("Button", welcomePage, False, "text='Projects'")) + exmpButton = waitForObject(getQmlItem("Button", welcomePage, False, "text='Examples'")) + tutoButton = waitForObject(getQmlItem("Button", welcomePage, False, "text='Tutorials'")) return waitFor('projButton.checked == projectsChecked ' 'and exmpButton.checked == examplesChecked ' 'and tutoButton.checked == tutorialsChecked', timeout) @@ -73,8 +74,7 @@ def main(): buttonsAndState = {'Projects':True, 'Examples':False, 'Tutorials':False, 'New Project':False, 'Open Project':False} for button, state in buttonsAndState.items(): - qmlItem = getQmlItem("Button", ":WelcomePageStyledBar.WelcomePage_QQuickView", False, - "text='%s'" % button) + qmlItem = getQmlItem("Button", welcomePage, False, "text='%s'" % button) if test.verify(checkIfObjectExists(qmlItem), "Verifying whether '%s' button is shown." % button): buttonObj = findObject(qmlItem) @@ -92,8 +92,7 @@ def main(): 'User Guide':'qthelp://org.qt-project.qtcreator/doc/index.html' } for text, url in textUrls.items(): - qmlItem = getQmlItem("LinkedText", ":WelcomePageStyledBar.WelcomePage_QQuickView", False, - "text='%s'" % text) + qmlItem = getQmlItem("LinkedText", welcomePage, False, "text='%s'" % text) if test.verify(checkIfObjectExists(qmlItem), "Verifying: Link to %s exists." % text): itemObj = findObject(qmlItem) @@ -116,8 +115,8 @@ def main(): test.verify(checkIfObjectExists(gettingStartedText), "Verifying: Getting Started topic is being displayed.") # select Examples and roughly check them - mouseClick(waitForObject(getQmlItem("Button", ":WelcomePageStyledBar.WelcomePage_QQuickView", - False, "text='Examples'")), 5, 5, 0, Qt.LeftButton) + mouseClick(waitForObject(getQmlItem("Button", welcomePage, False, "text='Examples'")), + 5, 5, 0, Qt.LeftButton) waitForButtonsState(False, True, False) expect = (("Rectangle", "id='rectangle1' radius='0'", "examples rectangle"), ("TextField", "id='lineEdit' placeholderText='Search in Examples...'", @@ -126,13 +125,11 @@ def main(): ("Delegate", "id='delegate' radius='0' caption~='.*Example'", "at least one example") ) for (qType, prop, info) in expect: - test.verify(checkIfObjectExists(getQmlItem(qType, - ":WelcomePageStyledBar.WelcomePage_QQuickView", - None, prop)), + test.verify(checkIfObjectExists(getQmlItem(qType, welcomePage, None, prop)), "Verifying whether %s is shown" % info) # select Tutorials and roughly check them - mouseClick(waitForObject(getQmlItem("Button", ":WelcomePageStyledBar.WelcomePage_QQuickView", - False, "text='Tutorials'")), 5, 5, 0, Qt.LeftButton) + mouseClick(waitForObject(getQmlItem("Button", welcomePage, False, "text='Tutorials'")), + 5, 5, 0, Qt.LeftButton) waitForButtonsState(False, False, True) expect = (("Rectangle", "id='rectangle1' radius='0'", "tutorials rectangle"), ("TextField", "id='lineEdit' placeholderText='Search in Tutorials...'", @@ -140,9 +137,7 @@ def main(): ("Delegate", "id='delegate' radius='0' caption~='Creating.*'", "at least one tutorial") ) for (qType, prop, info) in expect: - test.verify(checkIfObjectExists(getQmlItem(qType, - ":WelcomePageStyledBar.WelcomePage_QQuickView", - None, prop)), + test.verify(checkIfObjectExists(getQmlItem(qType, welcomePage, None, prop)), "Verifying whether %s is shown" % info) # exit Qt Creator invokeMenuItem("File", "Exit") From 09b405d11e2bd3dd04951ea90c35a8d7dd6cdfdb Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Mon, 27 Jul 2015 10:26:09 +0200 Subject: [PATCH 058/116] Clang: Extract some functions in LibClangOptionsBuilder ...makes the high-level function build() less noisy. Change-Id: Ib09fba315845a604166489fd400d0be14e16fc23 Reviewed-by: Christian Kandeler --- src/plugins/clangcodemodel/clangutils.cpp | 77 ++++++++++++++--------- 1 file changed, 47 insertions(+), 30 deletions(-) diff --git a/src/plugins/clangcodemodel/clangutils.cpp b/src/plugins/clangcodemodel/clangutils.cpp index 06bd961c7bd..22aad3235cd 100644 --- a/src/plugins/clangcodemodel/clangutils.cpp +++ b/src/plugins/clangcodemodel/clangutils.cpp @@ -114,30 +114,54 @@ static bool maybeIncludeBorlandExtensions() class LibClangOptionsBuilder : public CompilerOptionsBuilder { public: - static QStringList build(const ProjectPart::Ptr &pPart, ProjectFile::Kind fileKind) + static QStringList build(const ProjectPart::Ptr &projectPart, ProjectFile::Kind fileKind) { - if (pPart.isNull()) + if (projectPart.isNull()) return QStringList(); - LibClangOptionsBuilder optionsBuilder(pPart); + LibClangOptionsBuilder optionsBuilder(projectPart); if (verboseRunLog().isDebugEnabled()) optionsBuilder.add(QLatin1String("-v")); optionsBuilder.addLanguageOption(fileKind); optionsBuilder.addOptionsForLanguage(maybeIncludeBorlandExtensions()); + optionsBuilder.addToolchainAndProjectDefines(); + optionsBuilder.addResourceDirOptions(); + optionsBuilder.addHeaderPathOptions(); + optionsBuilder.addInjectedHeaderWithCustomQtMacros(); + optionsBuilder.addProjectConfigFileInclude(); + + optionsBuilder.addExtraOptions(); + + return optionsBuilder.options(); + } + +private: + LibClangOptionsBuilder(const CppTools::ProjectPart::Ptr &projectPart) + : CompilerOptionsBuilder(projectPart) + { + } + + bool excludeHeaderPath(const QString &path) const override + { + return path.contains(QLatin1String("lib/gcc/i686-apple-darwin")); + } + + void addResourceDirOptions() + { static const QString resourceDir = getResourceDir(); if (!resourceDir.isEmpty()) { - optionsBuilder.add(QLatin1String("-nostdlibinc")); - optionsBuilder.add(QLatin1String("-I") + resourceDir); - optionsBuilder.add(QLatin1String("-undef")); + add(QLatin1String("-nostdlibinc")); + add(QLatin1String("-I") + resourceDir); + add(QLatin1String("-undef")); } + } - optionsBuilder.addHeaderPathOptions(); - - // Inject header file + void addInjectedHeaderWithCustomQtMacros() + { static const QString injectedHeader = ICore::instance()->resourcePath() + QLatin1String("/cplusplus/qt%1-qobjectdefs-injected.h"); @@ -146,34 +170,27 @@ class LibClangOptionsBuilder : public CompilerOptionsBuilder // builder.addOption(injectedHeader.arg(QLatin1Char('4'))); // } - if (pPart->qtVersion == ProjectPart::Qt5) { - optionsBuilder.add(QLatin1String("-include")); - optionsBuilder.add(injectedHeader.arg(QLatin1Char('5'))); + if (m_projectPart->qtVersion == ProjectPart::Qt5) { + add(QLatin1String("-include")); + add(injectedHeader.arg(QLatin1Char('5'))); } - - if (!pPart->projectConfigFile.isEmpty()) { - optionsBuilder.add(QLatin1String("-include")); - optionsBuilder.add(pPart->projectConfigFile); - } - - optionsBuilder.add(QLatin1String("-fmessage-length=0")); - optionsBuilder.add(QLatin1String("-fdiagnostics-show-note-include-stack")); - optionsBuilder.add(QLatin1String("-fmacro-backtrace-limit=0")); - optionsBuilder.add(QLatin1String("-fretain-comments-from-system-headers")); - // TODO: -Xclang -ferror-limit -Xclang 0 ? - - return optionsBuilder.options(); } -private: - LibClangOptionsBuilder(const CppTools::ProjectPart::Ptr &projectPart) - : CompilerOptionsBuilder(projectPart) + void addProjectConfigFileInclude() { + if (!m_projectPart->projectConfigFile.isEmpty()) { + add(QLatin1String("-include")); + add(m_projectPart->projectConfigFile); + } } - bool excludeHeaderPath(const QString &path) const override + void addExtraOptions() { - return path.contains(QLatin1String("lib/gcc/i686-apple-darwin")); + add(QLatin1String("-fmessage-length=0")); + add(QLatin1String("-fdiagnostics-show-note-include-stack")); + add(QLatin1String("-fmacro-backtrace-limit=0")); + add(QLatin1String("-fretain-comments-from-system-headers")); + // TODO: -Xclang -ferror-limit -Xclang 0 ? } }; From 9be93b6962eab05ba74d992a5c822388398aa511 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Mon, 27 Jul 2015 14:49:17 +0200 Subject: [PATCH 059/116] Still use 0 instead of nullptr in numerous forms of tr(). Looks like lupdate isn't prepared yet for nullptr. Change-Id: I8341d6b11c63871b4d2240dd184228f53dcbf35c Reviewed-by: Friedemann Kleint --- src/plugins/debugger/debuggerprotocol.cpp | 4 ++-- src/plugins/texteditor/basefilefind.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/plugins/debugger/debuggerprotocol.cpp b/src/plugins/debugger/debuggerprotocol.cpp index 824edc6473f..ad0f9e86595 100644 --- a/src/plugins/debugger/debuggerprotocol.cpp +++ b/src/plugins/debugger/debuggerprotocol.cpp @@ -741,10 +741,10 @@ QString decodeData(const QByteArray &ba, int encoding) return QCoreApplication::translate("Debugger::Internal::WatchHandler", ""); } case SpecialItemCountValue: { - return QCoreApplication::translate("Debugger::Internal::WatchHandler", "<%n items>", nullptr, ba.toInt()); + return QCoreApplication::translate("Debugger::Internal::WatchHandler", "<%n items>", 0, ba.toInt()); } case SpecialMinimumItemCountValue: { - return QCoreApplication::translate("Debugger::Internal::WatchHandler", "", nullptr, ba.toInt()); + return QCoreApplication::translate("Debugger::Internal::WatchHandler", "", 0, ba.toInt()); } case SpecialNotCallableValue: { return QCoreApplication::translate("Debugger::Internal::WatchHandler", ""); diff --git a/src/plugins/texteditor/basefilefind.cpp b/src/plugins/texteditor/basefilefind.cpp index 0bbdf16d9d5..ff6b4e3d6b1 100644 --- a/src/plugins/texteditor/basefilefind.cpp +++ b/src/plugins/texteditor/basefilefind.cpp @@ -210,7 +210,7 @@ void BaseFileFind::doReplace(const QString &text, QStringList files = replaceAll(text, items, preserveCase); if (!files.isEmpty()) { Utils::FadingIndicator::showText(ICore::mainWindow(), - tr("%n occurrences replaced.", nullptr, items.size()), + tr("%n occurrences replaced.", 0, items.size()), Utils::FadingIndicator::SmallText); DocumentManager::notifyFilesChangedInternally(files); SearchResultWindow::instance()->hide(); From 4f7649633c7402af08e34f20628e6e827fc3d28e Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Mon, 27 Jul 2015 10:47:08 +0200 Subject: [PATCH 060/116] Clang: Free us from specific Qt versions More precisely, free us from specific Q_MOC_RUN/QT_NO_META_MACROS code paths in QtCore/qobjectdefs.h. In order to track signals and slots we provided custom definitions of e.g. "Q_SIGNAL" by including qt5-qobjectdefs-injected.h with "-include". We also had to ensure that those macros were not overwritten by Qt's qobjectdefs.h, which we did by defining QT_NO_META_MACROS. However, this came with a cost: we needed to replicate all the other macro definitions in the Q_MOC_RUN/QT_NO_META_MACROS code path, e.g. Q_INTERFACES. This bound us to specific versions of qobjectdefs.h and occasionally we had to adapt (see change 4eafa2e02be4e659f8bb5f6ab020844174e82f47). The new approach wraps Qt's qobjectdefs.h with the help of "include_next". In the wrapper header, we only redefine what is necessary. The "include_next" directive is originally a GNU extension. Clang seems to support it unconditionally, as [1] implicitly states. [1] http://clang.llvm.org/docs/LanguageExtensions.html#include-file-checking-macros Change-Id: Ic1a263f94b178349cb32bfdbb074ad5e6e0761ee Reviewed-by: Christian Kandeler Reviewed-by: Erik Verbruggen --- .../QtCore/qobjectdefs.h} | 61 ++++++++----------- src/plugins/clangcodemodel/clangutils.cpp | 19 +++--- 2 files changed, 33 insertions(+), 47 deletions(-) rename share/qtcreator/cplusplus/{qt5-qobjectdefs-injected.h => wrappedQtHeaders/QtCore/qobjectdefs.h} (60%) diff --git a/share/qtcreator/cplusplus/qt5-qobjectdefs-injected.h b/share/qtcreator/cplusplus/wrappedQtHeaders/QtCore/qobjectdefs.h similarity index 60% rename from share/qtcreator/cplusplus/qt5-qobjectdefs-injected.h rename to share/qtcreator/cplusplus/wrappedQtHeaders/QtCore/qobjectdefs.h index cc7ca503bd7..2580ff1b424 100644 --- a/share/qtcreator/cplusplus/qt5-qobjectdefs-injected.h +++ b/share/qtcreator/cplusplus/wrappedQtHeaders/QtCore/qobjectdefs.h @@ -28,44 +28,35 @@ ** ****************************************************************************/ -#define QT_NO_META_MACROS +// Include qobjectdefs.h from Qt ... +#include_next -#if defined(QT_NO_KEYWORDS) -# define QT_NO_EMIT -#else -# ifndef QT_NO_SIGNALS_SLOTS_KEYWORDS -# define signals public __attribute__((annotate("qt_signal"))) -# define slots __attribute__((annotate("qt_slot"))) -# endif +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wmacro-redefined" + +// ...and redefine macros for tagging signals/slots +#ifdef signals +# define signals public __attribute__((annotate("qt_signal"))) +#endif + +#ifdef slots +# define slots __attribute__((annotate("qt_slot"))) +#endif + +#ifdef Q_SIGNALS +# define Q_SIGNALS public __attribute__((annotate("qt_signal"))) +#endif + +#ifdef Q_SLOTS +# define Q_SLOTS slots __attribute__((annotate("qt_slot"))) #endif -#define Q_SIGNALS public __attribute__((annotate("qt_signal"))) -#define Q_SLOTS slots __attribute__((annotate("qt_slot"))) -#define Q_SIGNAL __attribute__((annotate("qt_signal"))) -#define Q_SLOT __attribute__((annotate("qt_slot"))) -#define Q_PRIVATE_SLOT(d, signature) -#define Q_EMIT -#ifndef QT_NO_EMIT -# define emit +#ifdef Q_SIGNAL +# define Q_SIGNAL __attribute__((annotate("qt_signal"))) #endif -#define Q_CLASSINFO(name, value) -#define Q_PLUGIN_METADATA(x) -#define Q_INTERFACES(x) -#define Q_PROPERTY(text) -#define Q_PRIVATE_PROPERTY(d, text) -#define Q_REVISION(v) -#define Q_OVERRIDE(text) -#define Q_ENUMS(x) -#define Q_FLAGS(x) -#define Q_ENUM(x) -#define Q_FLAG(x) -#define Q_SCRIPTABLE -#define Q_INVOKABLE -#define Q_GADGET \ -public: \ - static const QMetaObject staticMetaObject; \ -private: +#ifdef Q_SLOT +# define Q_SLOT __attribute__((annotate("qt_slot"))) +#endif -#define SIGNAL(a) #a -#define SLOT(a) #a +#pragma clang diagnostic pop diff --git a/src/plugins/clangcodemodel/clangutils.cpp b/src/plugins/clangcodemodel/clangutils.cpp index 22aad3235cd..02f448644fe 100644 --- a/src/plugins/clangcodemodel/clangutils.cpp +++ b/src/plugins/clangcodemodel/clangutils.cpp @@ -130,8 +130,8 @@ class LibClangOptionsBuilder : public CompilerOptionsBuilder optionsBuilder.addToolchainAndProjectDefines(); optionsBuilder.addResourceDirOptions(); + optionsBuilder.addWrappedQtHeadersIncludePath(); optionsBuilder.addHeaderPathOptions(); - optionsBuilder.addInjectedHeaderWithCustomQtMacros(); optionsBuilder.addProjectConfigFileInclude(); optionsBuilder.addExtraOptions(); @@ -160,19 +160,14 @@ class LibClangOptionsBuilder : public CompilerOptionsBuilder } } - void addInjectedHeaderWithCustomQtMacros() + void addWrappedQtHeadersIncludePath() { - static const QString injectedHeader = ICore::instance()->resourcePath() - + QLatin1String("/cplusplus/qt%1-qobjectdefs-injected.h"); + static const QString wrappedQtHeaders = ICore::instance()->resourcePath() + + QLatin1String("/cplusplus/wrappedQtHeaders"); -// if (pPart->qtVersion == ProjectPart::Qt4) { -// builder.addOption(QLatin1String("-include")); -// builder.addOption(injectedHeader.arg(QLatin1Char('4'))); -// } - - if (m_projectPart->qtVersion == ProjectPart::Qt5) { - add(QLatin1String("-include")); - add(injectedHeader.arg(QLatin1Char('5'))); + if (m_projectPart->qtVersion != ProjectPart::NoQt) { + add(QLatin1String("-I") + wrappedQtHeaders); + add(QLatin1String("-I") + wrappedQtHeaders + QLatin1String("/QtCore")); } } From 49b1d357789e4920245bf15d7f1d5cc727657000 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Thu, 23 Jul 2015 17:39:50 +0200 Subject: [PATCH 061/116] Clang: Clean up ClangCompletionContextAnalyzer Change-Id: I899cc5cffc389ef023b35825807bde469bb6d31d Reviewed-by: Erik Verbruggen --- .../clangcompletioncontextanalyzer.cpp | 8 +- .../clangcompletioncontextanalyzertest.cpp | 102 +++++++++--------- 2 files changed, 58 insertions(+), 52 deletions(-) diff --git a/src/plugins/clangcodemodel/clangcompletioncontextanalyzer.cpp b/src/plugins/clangcodemodel/clangcompletioncontextanalyzer.cpp index f8d63a4a3e4..99a75f9b84b 100644 --- a/src/plugins/clangcodemodel/clangcompletioncontextanalyzer.cpp +++ b/src/plugins/clangcodemodel/clangcompletioncontextanalyzer.cpp @@ -91,15 +91,14 @@ void ClangCompletionContextAnalyzer::analyze() m_positionForProposal = activationSequenceContextProcessor.positionAfterOperator(); const bool actionIsSet = handleNonFunctionCall(afterOperatorPosition); - if (!actionIsSet) { handleCommaInFunctionCall(); handleFunctionCall(afterOperatorPosition); } } -ClangCompletionContextAnalyzer::FunctionInfo ClangCompletionContextAnalyzer::analyzeFunctionCall( - int endOfOperator) const +ClangCompletionContextAnalyzer::FunctionInfo +ClangCompletionContextAnalyzer::analyzeFunctionCall(int endOfOperator) const { int index = skipPrecedingWhitespace(endOfOperator); QTextCursor textCursor(m_interface->textDocument()); @@ -150,7 +149,8 @@ void ClangCompletionContextAnalyzer::setActionAndClangPosition(CompletionAction m_positionForClang = position; } -void ClangCompletionContextAnalyzer::setAction(ClangCompletionContextAnalyzer::CompletionAction action) +void +ClangCompletionContextAnalyzer::setAction(ClangCompletionContextAnalyzer::CompletionAction action) { setActionAndClangPosition(action, -1); } diff --git a/tests/unit/unittest/clangcompletioncontextanalyzertest.cpp b/tests/unit/unittest/clangcompletioncontextanalyzertest.cpp index 69688f6e2fc..8603b05c5ef 100644 --- a/tests/unit/unittest/clangcompletioncontextanalyzertest.cpp +++ b/tests/unit/unittest/clangcompletioncontextanalyzertest.cpp @@ -28,9 +28,7 @@ ** ****************************************************************************/ - -#include - +#include #include #include @@ -44,7 +42,9 @@ namespace ClangCodeModel { namespace Internal { -void PrintTo(const ClangCompletionContextAnalyzer::CompletionAction &completionAction, ::std::ostream* os) + +void PrintTo(const ClangCompletionContextAnalyzer::CompletionAction &completionAction, + ::std::ostream* os) { using CCA = ClangCompletionContextAnalyzer; @@ -58,12 +58,15 @@ void PrintTo(const ClangCompletionContextAnalyzer::CompletionAction &completionA case CCA::CompleteSlot: *os << "CompleteSlot"; break; } } -} -} + +} // Internal +} // ClangCodeModel namespace { +using ::testing::PrintToString; using ClangCodeModel::Internal::ClangCompletionAssistInterface; +using CCA = ClangCodeModel::Internal::ClangCompletionContextAnalyzer; class TestDocument { @@ -79,62 +82,68 @@ class TestDocument int position; }; -using ::testing::PrintToString; +bool isPassThrough(CCA::CompletionAction completionAction) +{ + return completionAction != CCA::PassThroughToLibClang + && completionAction != CCA::PassThroughToLibClangAfterLeftParen; +} -MATCHER_P4(HasResult, completionAction, positionForClang, positionForProposal, positionInText, - std::string(negation ? "hasn't" : "has") - + " result of completion action " + PrintToString(completionAction) - + " and position for clang " + PrintToString(positionForClang) - + " and position for proprosal " + PrintToString(positionForProposal)) +MATCHER(IsPassThroughToClang, std::string(negation ? "isn't" : "is") + " passed through to Clang") { - int positionForClangDifference = arg.positionForClang() - positionInText; - int positionForProposalDifference = arg.positionForProposal() - positionInText; - if (arg.completionAction() != completionAction - || positionForClangDifference != positionForClang - || positionForProposalDifference != positionForProposal) { - *result_listener << "completion action is " << PrintToString(arg.completionAction()) - << " and position for clang is " << PrintToString(positionForClangDifference) - << " and position for proprosal is " << PrintToString(positionForProposalDifference); + const auto completionAction = arg.completionAction(); + if (isPassThrough(completionAction)) { + *result_listener << "completion action is " << PrintToString(completionAction); return false; } return true; } -MATCHER_P4(HasResultWithoutClangDifference, completionAction, positionForClang, positionForProposal, positionInText, +// Offsets are relative to positionInText +MATCHER_P4(HasResult, + completionAction, + positionForClangOffset, + positionForProposalOffset, + positionInText, std::string(negation ? "hasn't" : "has") + " result of completion action " + PrintToString(completionAction) - + " and position for clang " + PrintToString(positionForClang) - + " and position for proprosal " + PrintToString(positionForProposal)) + + " and offset for clang " + PrintToString(positionForClangOffset) + + " and offset for proprosal " + PrintToString(positionForProposalOffset)) { - int positionForProposalDifference = arg.positionForProposal() - positionInText; + const int actualPositionForClangOffset = arg.positionForClang() - positionInText; + const int actualPositionForProposalOffset = arg.positionForProposal() - positionInText; + if (arg.completionAction() != completionAction - || arg.positionForClang() != positionForClang - || positionForProposalDifference != positionForProposal) { + || actualPositionForClangOffset != positionForClangOffset + || actualPositionForProposalOffset != positionForProposalOffset) { *result_listener << "completion action is " << PrintToString(arg.completionAction()) - << " and position for clang is " << PrintToString(arg.positionForClang()) - << " and position for proprosal is " << PrintToString(positionForProposalDifference); + << " and offset for clang is " << PrintToString(actualPositionForClangOffset) + << " and offset for proprosal is " << PrintToString(actualPositionForProposalOffset); return false; } return true; } -using CCA = ClangCodeModel::Internal::ClangCompletionContextAnalyzer; - -bool isPassThrough(CCA::CompletionAction completionAction) -{ - return completionAction != CCA::PassThroughToLibClang - && completionAction != CCA::PassThroughToLibClangAfterLeftParen; -} - -MATCHER(IsPassThroughToClang, std::string(negation ? "isn't" : "is") + " passed through to Clang") +// Offsets are relative to positionInText +MATCHER_P4(HasResultWithoutClangDifference, + completionAction, + positionForClangOffset, + positionForProposalOffset, + positionInText, + std::string(negation ? "hasn't" : "has") + + " result of completion action " + PrintToString(completionAction) + + " and offset for clang " + PrintToString(positionForClangOffset) + + " and offset for proprosal " + PrintToString(positionForProposalOffset)) { - auto completionAction = arg.completionAction(); - - if (isPassThrough(completionAction)) { - *result_listener << "completion action is " << PrintToString(completionAction); + const int actualPositionForProposalOffset = arg.positionForProposal() - positionInText; + if (arg.completionAction() != completionAction + || arg.positionForClang() != positionForClangOffset + || actualPositionForProposalOffset != positionForProposalOffset) { + *result_listener << "completion action is " << PrintToString(arg.completionAction()) + << " and offset for clang is " << PrintToString(arg.positionForClang()) + << " and offset for proprosal is " << PrintToString(actualPositionForProposalOffset); return false; } @@ -144,18 +153,17 @@ MATCHER(IsPassThroughToClang, std::string(negation ? "isn't" : "is") + " passed class ClangCompletionContextAnalyzer : public ::testing::Test { protected: - ClangCodeModel::Internal::ClangCompletionContextAnalyzer runAnalyzer(const char *text); + CCA runAnalyzer(const char *text); protected: int positionInText = 0; }; -ClangCodeModel::Internal::ClangCompletionContextAnalyzer ClangCompletionContextAnalyzer::runAnalyzer(const char *text) +CCA ClangCompletionContextAnalyzer::runAnalyzer(const char *text) { const TestDocument testDocument(text); ClangCompletionAssistInterface assistInterface(testDocument.source, testDocument.position); - ClangCodeModel::Internal::ClangCompletionContextAnalyzer analyzer(&assistInterface, - CPlusPlus::LanguageFeatures::defaultFeatures()); + CCA analyzer(&assistInterface, CPlusPlus::LanguageFeatures::defaultFeatures()); positionInText = testDocument.position; @@ -164,7 +172,6 @@ ClangCodeModel::Internal::ClangCompletionContextAnalyzer ClangCompletionContextA return analyzer; } - TEST_F(ClangCompletionContextAnalyzer, AtEndOfDotMember) { auto analyzer = runAnalyzer("o.mem@"); @@ -430,6 +437,5 @@ TEST_F(ClangCompletionContextAnalyzer, AsteriskLeftParen) ASSERT_THAT(analyzer, IsPassThroughToClang()); } -} - +} From 91429aa7521dff2006451577514c8954fcc3f793 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Thu, 23 Jul 2015 16:06:48 +0200 Subject: [PATCH 062/116] Clang: Fix completion position for clang and proposal * Rename some members/functions to clarify their meaning. * Ensure that the position for the proposal widget is at start of the identifer, so that the filter prefix will be found correctly in the GenericProposalWidget. For certain cases the completion were calculated but the widget was never shown: Case 1: void f() { } Case 2: void f() { st } Case 3: if (true) Case 4: foo. mem Change-Id: Ie79e01e8a22f8ec306136ec4ccbfffd544edd573 Reviewed-by: Erik Verbruggen --- .../activationsequencecontextprocessor.cpp | 61 +++++++++++-------- .../activationsequencecontextprocessor.h | 17 +++--- .../activationsequenceprocessor.cpp | 2 +- .../activationsequenceprocessor.h | 2 +- .../clangcompletionassistprocessor.cpp | 2 +- .../clangcompletioncontextanalyzer.cpp | 6 +- ...activationsequencecontextprocessortest.cpp | 2 +- .../activationsequenceprocessortest.cpp | 6 +- .../clangcompletioncontextanalyzertest.cpp | 60 +++++++++++++++--- 9 files changed, 108 insertions(+), 50 deletions(-) diff --git a/src/plugins/clangcodemodel/activationsequencecontextprocessor.cpp b/src/plugins/clangcodemodel/activationsequencecontextprocessor.cpp index 6edb842613d..ce9c5f0471e 100644 --- a/src/plugins/clangcodemodel/activationsequencecontextprocessor.cpp +++ b/src/plugins/clangcodemodel/activationsequencecontextprocessor.cpp @@ -46,8 +46,8 @@ ActivationSequenceContextProcessor::ActivationSequenceContextProcessor(const Cla : m_textCursor(assistInterface->textDocument()), m_assistInterface(assistInterface), m_positionInDocument(assistInterface->position()), - m_positionAfterOperator(m_positionInDocument), - m_positionBeforeOperator(m_positionAfterOperator) + m_startOfNamePosition(m_positionInDocument), + m_operatorStartPosition(m_positionInDocument) { m_textCursor.setPosition(m_positionInDocument); @@ -65,19 +65,19 @@ const QTextCursor &ActivationSequenceContextProcessor::textCursor_forTestOnly() return m_textCursor; } -int ActivationSequenceContextProcessor::positionAfterOperator() const +int ActivationSequenceContextProcessor::startOfNamePosition() const { - return m_positionAfterOperator; + return m_startOfNamePosition; } -int ActivationSequenceContextProcessor::positionBeforeOperator() const +int ActivationSequenceContextProcessor::operatorStartPosition() const { - return m_positionBeforeOperator; + return m_operatorStartPosition; } void ActivationSequenceContextProcessor::process() { - skipeWhiteSpacesAndIdentifierBeforeCursor(); + goBackToStartOfName(); processActivationSequence(); if (m_completionKind != CPlusPlus::T_EOF_SYMBOL) { @@ -90,20 +90,21 @@ void ActivationSequenceContextProcessor::process() processSlashOutsideOfAString(); processLeftParen(); processPreprocessorInclude(); - resetPositionForEOFCompletionKind(); } + + resetPositionsForEOFCompletionKind(); } void ActivationSequenceContextProcessor::processActivationSequence() { - const auto activationSequence = m_assistInterface->textAt(m_positionInDocument - 3, 3); + const int nonSpacePosition = findStartOfNonSpaceChar(m_startOfNamePosition); + const auto activationSequence = m_assistInterface->textAt(nonSpacePosition - 3, 3); ActivationSequenceProcessor activationSequenceProcessor(activationSequence, - m_positionInDocument, + nonSpacePosition, true); m_completionKind = activationSequenceProcessor.completionKind(); - m_positionBeforeOperator = activationSequenceProcessor.position(); - + m_operatorStartPosition = activationSequenceProcessor.operatorStartPosition(); } void ActivationSequenceContextProcessor::processStringLiteral() @@ -221,27 +222,37 @@ void ActivationSequenceContextProcessor::processPreprocessorInclude() } } -void ActivationSequenceContextProcessor::resetPositionForEOFCompletionKind() +void ActivationSequenceContextProcessor::resetPositionsForEOFCompletionKind() { if (m_completionKind == CPlusPlus::T_EOF_SYMBOL) - m_positionBeforeOperator = m_positionInDocument; + m_operatorStartPosition = m_positionInDocument; +} + +int ActivationSequenceContextProcessor::findStartOfNonSpaceChar(int startPosition) +{ + int position = startPosition; + while (m_assistInterface->characterAt(position - 1).isSpace()) + --position; + return position; } -void ActivationSequenceContextProcessor::skipeWhiteSpacesAndIdentifierBeforeCursor() +int ActivationSequenceContextProcessor::findStartOfName(int startPosition) { - QTextDocument *document = m_assistInterface->textDocument(); + int position = startPosition; + QChar character; + do { + character = m_assistInterface->characterAt(--position); + } while (character.isLetterOrNumber() || character == QLatin1Char('_')); - const QRegExp findNonWhiteSpaceRegularExpression(QStringLiteral("[^\\s\\w]")); + return position + 1; +} - auto nonWhiteSpaceTextCursor = document->find(findNonWhiteSpaceRegularExpression, - m_positionInDocument, - QTextDocument::FindBackward); +void ActivationSequenceContextProcessor::goBackToStartOfName() +{ + m_startOfNamePosition = findStartOfName(m_positionInDocument); - if (!nonWhiteSpaceTextCursor.isNull()) { - m_positionInDocument = nonWhiteSpaceTextCursor.position(); - m_positionAfterOperator = m_positionInDocument; - m_textCursor.setPosition(m_positionInDocument); - } + if (m_startOfNamePosition != m_positionInDocument) + m_textCursor.setPosition(m_startOfNamePosition); } } // namespace Internal diff --git a/src/plugins/clangcodemodel/activationsequencecontextprocessor.h b/src/plugins/clangcodemodel/activationsequencecontextprocessor.h index 268c8112d7a..d85a44090ea 100644 --- a/src/plugins/clangcodemodel/activationsequencecontextprocessor.h +++ b/src/plugins/clangcodemodel/activationsequencecontextprocessor.h @@ -50,15 +50,16 @@ class ActivationSequenceContextProcessor ActivationSequenceContextProcessor(const ClangCompletionAssistInterface *assistInterface); CPlusPlus::Kind completionKind() const; + int startOfNamePosition() const; // e.g. points to 'b' in "foo.bar" + int operatorStartPosition() const; // e.g. points to '.' for "foo.bar" const QTextCursor &textCursor_forTestOnly() const; - int positionAfterOperator() const; - int positionBeforeOperator() const; - protected: void process(); - void skipeWhiteSpacesAndIdentifierBeforeCursor(); + int findStartOfNonSpaceChar(int startPosition); + int findStartOfName(int startPosition); + void goBackToStartOfName(); void processActivationSequence(); void processStringLiteral(); void processComma(); @@ -69,7 +70,7 @@ class ActivationSequenceContextProcessor void processSlashOutsideOfAString(); void processLeftParen(); void processPreprocessorInclude(); - void resetPositionForEOFCompletionKind(); + void resetPositionsForEOFCompletionKind(); bool isCompletionKindStringLiteralOrSlash() const; bool isProbablyPreprocessorIncludeDirective() const; @@ -80,9 +81,9 @@ class ActivationSequenceContextProcessor CPlusPlus::Token m_token; const ClangCompletionAssistInterface *m_assistInterface; int m_tokenIndex; - int m_positionInDocument; - int m_positionAfterOperator; - int m_positionBeforeOperator; + const int m_positionInDocument; + int m_startOfNamePosition; + int m_operatorStartPosition; CPlusPlus::Kind m_completionKind; }; diff --git a/src/plugins/clangcodemodel/activationsequenceprocessor.cpp b/src/plugins/clangcodemodel/activationsequenceprocessor.cpp index a6a5076a31c..a7f4ea948d0 100644 --- a/src/plugins/clangcodemodel/activationsequenceprocessor.cpp +++ b/src/plugins/clangcodemodel/activationsequenceprocessor.cpp @@ -71,7 +71,7 @@ int ActivationSequenceProcessor::offset() const return m_offset; } -int ActivationSequenceProcessor::position() const +int ActivationSequenceProcessor::operatorStartPosition() const { return m_positionInDocument - m_offset; } diff --git a/src/plugins/clangcodemodel/activationsequenceprocessor.h b/src/plugins/clangcodemodel/activationsequenceprocessor.h index eacc81af203..2c6350dbafc 100644 --- a/src/plugins/clangcodemodel/activationsequenceprocessor.h +++ b/src/plugins/clangcodemodel/activationsequenceprocessor.h @@ -47,7 +47,7 @@ class ActivationSequenceProcessor CPlusPlus::Kind completionKind() const; int offset() const; - int position() const; + int operatorStartPosition() const; // e.g. points to '.' for "foo.bar" private: void extractCharactersBeforePosition(const QString &activationString); diff --git a/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp b/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp index 126c0201afe..4c1304b3512 100644 --- a/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp +++ b/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp @@ -363,7 +363,7 @@ int ClangCompletionAssistProcessor::startOfOperator(int positionInDocument, *kind = activationSequenceProcessor.completionKind(); - int start = activationSequenceProcessor.position(); + int start = activationSequenceProcessor.operatorStartPosition(); if (start != positionInDocument) { QTextCursor tc(m_interface->textDocument()); tc.setPosition(positionInDocument); diff --git a/src/plugins/clangcodemodel/clangcompletioncontextanalyzer.cpp b/src/plugins/clangcodemodel/clangcompletioncontextanalyzer.cpp index 99a75f9b84b..63fd8408780 100644 --- a/src/plugins/clangcodemodel/clangcompletioncontextanalyzer.cpp +++ b/src/plugins/clangcodemodel/clangcompletioncontextanalyzer.cpp @@ -86,9 +86,9 @@ void ClangCompletionContextAnalyzer::analyze() ActivationSequenceContextProcessor activationSequenceContextProcessor(m_interface); m_completionOperator = activationSequenceContextProcessor.completionKind(); - int afterOperatorPosition = activationSequenceContextProcessor.positionAfterOperator(); - m_positionEndOfExpression = activationSequenceContextProcessor.positionBeforeOperator(); - m_positionForProposal = activationSequenceContextProcessor.positionAfterOperator(); + int afterOperatorPosition = activationSequenceContextProcessor.startOfNamePosition(); + m_positionEndOfExpression = activationSequenceContextProcessor.operatorStartPosition(); + m_positionForProposal = activationSequenceContextProcessor.startOfNamePosition(); const bool actionIsSet = handleNonFunctionCall(afterOperatorPosition); if (!actionIsSet) { diff --git a/tests/unit/unittest/activationsequencecontextprocessortest.cpp b/tests/unit/unittest/activationsequencecontextprocessortest.cpp index 443a8aeacb0..e69f8b97f13 100644 --- a/tests/unit/unittest/activationsequencecontextprocessortest.cpp +++ b/tests/unit/unittest/activationsequencecontextprocessortest.cpp @@ -54,7 +54,7 @@ TEST(ActivationSequeneContextProcessor, TextCursorPosition) ClangCompletionAssistInterface interface("foobar", 4); ContextProcessor processor{&interface}; - ASSERT_THAT(processor.textCursor_forTestOnly().position(), 4); + ASSERT_THAT(processor.textCursor_forTestOnly().position(), 0); } TEST(ActivationSequeneContextProcessor, StringLiteral) diff --git a/tests/unit/unittest/activationsequenceprocessortest.cpp b/tests/unit/unittest/activationsequenceprocessortest.cpp index 88736f243ba..d5962cdc5a0 100644 --- a/tests/unit/unittest/activationsequenceprocessortest.cpp +++ b/tests/unit/unittest/activationsequenceprocessortest.cpp @@ -47,14 +47,14 @@ MATCHER_P3(HasResult, completionKind, offset, newPosition, std::string(negation ? "hasn't" : "has") + " result of completion kind " + PrintToString(Token::name(completionKind)) + ", offset " + PrintToString(offset) - + " and new position in document" + PrintToString(newPosition)) + + " and new operator start position" + PrintToString(newPosition)) { if (arg.completionKind() != completionKind || arg.offset() != offset - || arg.position() != newPosition) { + || arg.operatorStartPosition() != newPosition) { *result_listener << "completion kind is " << PrintToString(Token::name(arg.completionKind())) << ", offset is " << PrintToString(arg.offset()) - << " and new position in document is " << PrintToString(arg.position()); + << " and new operator start position is " << PrintToString(arg.operatorStartPosition()); return false; } diff --git a/tests/unit/unittest/clangcompletioncontextanalyzertest.cpp b/tests/unit/unittest/clangcompletioncontextanalyzertest.cpp index 8603b05c5ef..08e92ee2f94 100644 --- a/tests/unit/unittest/clangcompletioncontextanalyzertest.cpp +++ b/tests/unit/unittest/clangcompletioncontextanalyzertest.cpp @@ -172,6 +172,20 @@ CCA ClangCompletionContextAnalyzer::runAnalyzer(const char *text) return analyzer; } +TEST_F(ClangCompletionContextAnalyzer, WordsBeforeCursor) +{ + auto analyzer = runAnalyzer("foo bar@"); + + ASSERT_THAT(analyzer, HasResult(CCA::PassThroughToLibClang, -3, -3, positionInText)); +} + +TEST_F(ClangCompletionContextAnalyzer, AfterSpace) +{ + auto analyzer = runAnalyzer("foo @"); + + ASSERT_THAT(analyzer, HasResult(CCA::PassThroughToLibClang, 0, 0, positionInText)); +} + TEST_F(ClangCompletionContextAnalyzer, AtEndOfDotMember) { auto analyzer = runAnalyzer("o.mem@"); @@ -183,7 +197,7 @@ TEST_F(ClangCompletionContextAnalyzer, AtEndOfDotMemberWithSpaceInside) { auto analyzer = runAnalyzer("o. mem@"); - ASSERT_THAT(analyzer, HasResult(CCA::PassThroughToLibClang, -4, -4, positionInText)); + ASSERT_THAT(analyzer, HasResult(CCA::PassThroughToLibClang, -3, -3, positionInText)); } TEST_F(ClangCompletionContextAnalyzer, AtBeginOfDotMember) @@ -197,7 +211,7 @@ TEST_F(ClangCompletionContextAnalyzer, AtBeginOfDotMemberWithSpaceInside) { auto analyzer = runAnalyzer("o. @mem"); - ASSERT_THAT(analyzer, HasResult(CCA::PassThroughToLibClang, -1, -1, positionInText)); + ASSERT_THAT(analyzer, HasResult(CCA::PassThroughToLibClang, 0, 0, positionInText)); } TEST_F(ClangCompletionContextAnalyzer, AtEndOfArrow) @@ -211,7 +225,7 @@ TEST_F(ClangCompletionContextAnalyzer, AtEndOfArrowWithSpaceInside) { auto analyzer = runAnalyzer("o-> mem@"); - ASSERT_THAT(analyzer, HasResult(CCA::PassThroughToLibClang, -4, -4, positionInText)); + ASSERT_THAT(analyzer, HasResult(CCA::PassThroughToLibClang, -3, -3, positionInText)); } TEST_F(ClangCompletionContextAnalyzer, AtBeginOfArrow) @@ -225,7 +239,7 @@ TEST_F(ClangCompletionContextAnalyzer, AtBeginOfArrowWithSpaceInside) { auto analyzer = runAnalyzer("o-> @mem"); - ASSERT_THAT(analyzer, HasResult(CCA::PassThroughToLibClang, -1, -1, positionInText)); + ASSERT_THAT(analyzer, HasResult(CCA::PassThroughToLibClang, 0, 0, positionInText)); } TEST_F(ClangCompletionContextAnalyzer, ParameteOneAtCall) @@ -246,7 +260,7 @@ TEST_F(ClangCompletionContextAnalyzer, ParameteTwoWithSpaceAtCall) { auto analyzer = runAnalyzer("f(1, @"); - ASSERT_THAT(analyzer, HasResult(CCA::PassThroughToLibClang, -1, -1, positionInText)); + ASSERT_THAT(analyzer, HasResult(CCA::PassThroughToLibClangAfterLeftParen, -5, -3, positionInText)); } TEST_F(ClangCompletionContextAnalyzer, ParameteOneAtSignal) @@ -396,13 +410,45 @@ TEST_F(ClangCompletionContextAnalyzer, DoxygenMarkerInNonDoxygenComment2) ASSERT_THAT(analyzer, IsPassThroughToClang()); } -TEST_F(ClangCompletionContextAnalyzer, OneLineComment) +TEST_F(ClangCompletionContextAnalyzer, AtEndOfOneLineComment) { - auto analyzer = runAnalyzer("// text@"); + auto analyzer = runAnalyzer("// comment@"); ASSERT_THAT(analyzer, IsPassThroughToClang()); } +TEST_F(ClangCompletionContextAnalyzer, AfterOneLineCommentLine) +{ + auto analyzer = runAnalyzer("// comment\n" + "@"); + + ASSERT_THAT(analyzer, HasResult(CCA::PassThroughToLibClang, 0, 0, positionInText)); +} + +TEST_F(ClangCompletionContextAnalyzer, AfterEmptyOneLineComment) +{ + auto analyzer = runAnalyzer("//\n" + "@"); + + ASSERT_THAT(analyzer, HasResult(CCA::PassThroughToLibClang, 0, 0, positionInText)); +} + +TEST_F(ClangCompletionContextAnalyzer, AfterOneLineDoxygenComment1) +{ + auto analyzer = runAnalyzer("/// comment\n" + "@"); + + ASSERT_THAT(analyzer, HasResult(CCA::PassThroughToLibClang, 0, 0, positionInText)); +} + +TEST_F(ClangCompletionContextAnalyzer, AfterOneLineDoxygenComment2) +{ + auto analyzer = runAnalyzer("//! comment \n" + "@"); + + ASSERT_THAT(analyzer, HasResult(CCA::PassThroughToLibClang, 0, 0, positionInText)); +} + TEST_F(ClangCompletionContextAnalyzer, BeginEndComment) { auto analyzer = runAnalyzer("/* text@ */"); From b86600a58798f245c15b112d6669254ba9970dae Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Fri, 24 Jul 2015 15:35:20 +0200 Subject: [PATCH 063/116] Clang: Remove duplicated functions Change-Id: I0758fc06843363d58faa835238a587095c9eb6de Reviewed-by: Erik Verbruggen --- .../activationsequencecontextprocessor.cpp | 26 ++++++++++++----- .../activationsequencecontextprocessor.h | 7 +++-- .../clangcompletioncontextanalyzer.cpp | 29 +++---------------- .../clangcompletioncontextanalyzer.h | 3 -- 4 files changed, 28 insertions(+), 37 deletions(-) diff --git a/src/plugins/clangcodemodel/activationsequencecontextprocessor.cpp b/src/plugins/clangcodemodel/activationsequencecontextprocessor.cpp index ce9c5f0471e..1b03f0e5b75 100644 --- a/src/plugins/clangcodemodel/activationsequencecontextprocessor.cpp +++ b/src/plugins/clangcodemodel/activationsequencecontextprocessor.cpp @@ -97,7 +97,7 @@ void ActivationSequenceContextProcessor::process() void ActivationSequenceContextProcessor::processActivationSequence() { - const int nonSpacePosition = findStartOfNonSpaceChar(m_startOfNamePosition); + const int nonSpacePosition = skipPrecedingWhitespace(m_assistInterface, m_startOfNamePosition); const auto activationSequence = m_assistInterface->textAt(nonSpacePosition - 3, 3); ActivationSequenceProcessor activationSequenceProcessor(activationSequence, nonSpacePosition, @@ -228,28 +228,40 @@ void ActivationSequenceContextProcessor::resetPositionsForEOFCompletionKind() m_operatorStartPosition = m_positionInDocument; } -int ActivationSequenceContextProcessor::findStartOfNonSpaceChar(int startPosition) +int ActivationSequenceContextProcessor::skipPrecedingWhitespace( + const TextEditor::AssistInterface *assistInterface, + int startPosition) { int position = startPosition; - while (m_assistInterface->characterAt(position - 1).isSpace()) + while (assistInterface->characterAt(position - 1).isSpace()) --position; return position; } -int ActivationSequenceContextProcessor::findStartOfName(int startPosition) +static bool isValidIdentifierChar(const QChar &character) +{ + return character.isLetterOrNumber() + || character == QLatin1Char('_') + || character.isHighSurrogate() + || character.isLowSurrogate(); +} + +int ActivationSequenceContextProcessor::findStartOfName( + const TextEditor::AssistInterface *assistInterface, + int startPosition) { int position = startPosition; QChar character; do { - character = m_assistInterface->characterAt(--position); - } while (character.isLetterOrNumber() || character == QLatin1Char('_')); + character = assistInterface->characterAt(--position); + } while (isValidIdentifierChar(character)); return position + 1; } void ActivationSequenceContextProcessor::goBackToStartOfName() { - m_startOfNamePosition = findStartOfName(m_positionInDocument); + m_startOfNamePosition = findStartOfName(m_assistInterface, m_positionInDocument); if (m_startOfNamePosition != m_positionInDocument) m_textCursor.setPosition(m_startOfNamePosition); diff --git a/src/plugins/clangcodemodel/activationsequencecontextprocessor.h b/src/plugins/clangcodemodel/activationsequencecontextprocessor.h index d85a44090ea..f63bfa2c5a7 100644 --- a/src/plugins/clangcodemodel/activationsequencecontextprocessor.h +++ b/src/plugins/clangcodemodel/activationsequencecontextprocessor.h @@ -55,10 +55,13 @@ class ActivationSequenceContextProcessor const QTextCursor &textCursor_forTestOnly() const; + static int findStartOfName(const TextEditor::AssistInterface *assistInterface, + int startPosition); + static int skipPrecedingWhitespace(const TextEditor::AssistInterface *assistInterface, + int startPosition); + protected: void process(); - int findStartOfNonSpaceChar(int startPosition); - int findStartOfName(int startPosition); void goBackToStartOfName(); void processActivationSequence(); void processStringLiteral(); diff --git a/src/plugins/clangcodemodel/clangcompletioncontextanalyzer.cpp b/src/plugins/clangcodemodel/clangcompletioncontextanalyzer.cpp index 63fd8408780..eaa2b3d90a6 100644 --- a/src/plugins/clangcodemodel/clangcompletioncontextanalyzer.cpp +++ b/src/plugins/clangcodemodel/clangcompletioncontextanalyzer.cpp @@ -100,13 +100,15 @@ void ClangCompletionContextAnalyzer::analyze() ClangCompletionContextAnalyzer::FunctionInfo ClangCompletionContextAnalyzer::analyzeFunctionCall(int endOfOperator) const { - int index = skipPrecedingWhitespace(endOfOperator); + int index = ActivationSequenceContextProcessor::skipPrecedingWhitespace(m_interface, + endOfOperator); QTextCursor textCursor(m_interface->textDocument()); textCursor.setPosition(index); ExpressionUnderCursor euc(m_languageFeatures); index = euc.startOfFunctionCall(textCursor); - const int functionNameStart = findStartOfName(index); + const int functionNameStart = ActivationSequenceContextProcessor::findStartOfName(m_interface, + index); QTextCursor textCursor2(m_interface->textDocument()); textCursor2.setPosition(functionNameStart); @@ -118,29 +120,6 @@ ClangCompletionContextAnalyzer::analyzeFunctionCall(int endOfOperator) const return info; } -int ClangCompletionContextAnalyzer::findStartOfName(int position) const -{ - if (position == -1) - position = m_interface->position(); - QChar chr; - - do { - chr = m_interface->characterAt(--position); - // TODO: Check also chr.isHighSurrogate() / ch.isLowSurrogate()? - // See also CppTools::isValidFirstIdentifierChar - } while (chr.isLetterOrNumber() || chr == QLatin1Char('_')); - - return position + 1; -} - -int ClangCompletionContextAnalyzer::skipPrecedingWhitespace(int position) const -{ - QTC_ASSERT(position >= 0, return position); - while (m_interface->characterAt(position - 1).isSpace()) - --position; - return position; -} - void ClangCompletionContextAnalyzer::setActionAndClangPosition(CompletionAction action, int position) { diff --git a/src/plugins/clangcodemodel/clangcompletioncontextanalyzer.h b/src/plugins/clangcodemodel/clangcompletioncontextanalyzer.h index 2234adf6048..3df4041675f 100644 --- a/src/plugins/clangcodemodel/clangcompletioncontextanalyzer.h +++ b/src/plugins/clangcodemodel/clangcompletioncontextanalyzer.h @@ -72,9 +72,6 @@ class ClangCompletionContextAnalyzer struct FunctionInfo { int functionNamePosition; QString functionName; }; FunctionInfo analyzeFunctionCall(int endOfExpression) const; - int findStartOfName(int position = -1) const; - int skipPrecedingWhitespace(int position) const; - void setActionAndClangPosition(CompletionAction action, int position); void setAction(CompletionAction action); From 04a269316e0380b97573c303c3f698ff25513d04 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Fri, 17 Jul 2015 15:33:18 +0200 Subject: [PATCH 064/116] Update Polish translations Change-Id: I68c36b1eb838c984f7b4a5f60ff42386e6bbf1bb Reviewed-by: Jarek Kobus --- share/qtcreator/translations/qtcreator_pl.ts | 21281 ++++++----------- 1 file changed, 6972 insertions(+), 14309 deletions(-) diff --git a/share/qtcreator/translations/qtcreator_pl.ts b/share/qtcreator/translations/qtcreator_pl.ts index c24ba8b197f..5854ec22950 100644 --- a/share/qtcreator/translations/qtcreator_pl.ts +++ b/share/qtcreator/translations/qtcreator_pl.ts @@ -73,6 +73,10 @@ Do not &ask again Nie &pytaj ponownie + + Do not &show again + Nie po&kazuj ponownie + Utils::WizardPage @@ -107,18 +111,6 @@ Invalid form file name: "%1" Niepoprawna nazwa pliku z formularzem: "%1" - - Invalid header file name: '%1' - Niepoprawna nazwa pliku nagłówkowego: "%1" - - - Invalid source file name: '%1' - Niepoprawna nazwa piku źródłowego: "%1" - - - Invalid form file name: '%1' - Niepoprawna nazwa pliku z formularzem: "%1" - Inherits QObject Dziedziczy z QObject @@ -202,6 +194,14 @@ A file with that name already exists. Plik o tej samej nazwie już istnieje. + + Invalid character "%1" found. + Niepoprawny znak "%1". + + + Invalid character ".". + Niepoprawny znak ".". + Use as default project location Ustaw jako domyślne położenie projektów @@ -368,7 +368,7 @@ Re-enable warnings that were suppressed by selecting "Do Not Show Again" (for example, missing highlighter). - Przywraca ostrzeżenia, które zostały wyłączone przy użyciu "Nie pokazuj więcej" (np. brak podświetlania). + Przywraca ostrzeżenia, które zostały wyłączone przy użyciu "Nie pokazuj ponownie" (np. brak podświetlania). Theme: @@ -378,6 +378,14 @@ Patch command: Komenda "patch": + + Warn before opening text files greater than + Ostrzegaj przed otwieraniem plików tekstowych większych niż + + + MB + MB + CodePaster::PasteSelectDialog @@ -448,45 +456,6 @@ Gdy zaznaczone, wszystkie pliki powiązane z wrzuconą zmianą zostaną wyświetlone po kliknięciu na numer poprawki w widoku adnotacji (uzyskane zostaną poprzez identyfikator wrzuconej zmiany). W przeciwnym razie, wyświetlony zostanie tylko określony plik. - - Designer::Internal::CppSettingsPageWidget - - Form - Formularz - - - Embedding of the UI Class - Osadzanie klas UI - - - Aggregation as a pointer member - Agregacja poprzez wskaźnik do składnika - - - Aggregation - Agregacja - - - Code Generation - Generowanie kodu - - - Support for changing languages at runtime - Obsługa zmian języków w trakcie wykonywania programu - - - Use Qt module name in #include-directive - Używaj nazwy modułu Qt w dyrektywach #include - - - Multiple inheritance - Dziedziczenie wielokrotne - - - Add Qt version #ifdef for module names - Generuj odpowiednie dyrektywy #include w zależności od wersji Qt - - Designer::Internal::FormClassWizardPage @@ -520,14 +489,6 @@ Checkout branch? Utworzyć kopię roboczą gałęzi? - - Would you like to delete the tag '%1'? - Czy usunąć tag "%1"? - - - Would you like to delete the <b>unmerged</b> branch '%1'? - Czy usunąć <b>niescaloną</b> gałąź "%1"? - Would you like to delete the tag "%1"? Czy usunąć tag "%1"? @@ -568,10 +529,6 @@ No Fast-Forward - - Would you like to delete the branch '%1'? - Czy usunąć gałąź "%1"? - Re&fresh &Odśwież @@ -629,99 +586,6 @@ Bieżąca gałąź zacznie śledzić zmiany w zaznaczonej gałęzi. - - Gitorious::Internal::GitoriousHostWidget - - ... - ... - - - <New Host> - <Nowy Host> - - - Host - Host - - - Projects - Projekty - - - Description - Opis - - - - Gitorious::Internal::GitoriousProjectWidget - - WizardPage - StronaKreatora - - - ... - ... - - - Keep updating - Odświeżaj - - - Project - Projekt - - - Description - Opis - - - - Gitorious::Internal::GitoriousRepositoryWizardPage - - WizardPage - StronaKreatora - - - Name - Nazwa - - - Owner - Właściciel - - - Description - Opis - - - Repository - Repozytorium - - - Choose a repository of the project '%1'. - Wybierz repozytorium dla projektu "%1". - - - Mainline Repositories - Główne repozytoria - - - Clones - Klony - - - Baseline Repositories - Podstawowe repozytoria - - - Shared Project Repositories - Współdzielone repozytoria - - - Personal Repositories - Osobiste repozytoria - - Git::Internal::GitSubmitPanel @@ -756,10 +620,6 @@ Email: Email: - - By&pass hooks - &Omiń hooki - By&pass hooks: &Omiń hooki: @@ -813,7 +673,7 @@ Log count: - Licznik loga: + Licznik logu: Git needs to find Perl in the environment. @@ -913,7 +773,7 @@ Log count: - Licznik loga: + Licznik logu: P4 command: @@ -1063,10 +923,6 @@ lines linii - - <i>jom</i> is a drop-in replacement for <i>nmake</i> which distributes the compilation process to multiple CPU cores. The latest binary is available at <a href="http://releases.qt-project.org/jom/">http://releases.qt-project.org/jom/</a>. Disable it if you experience problems with your builds. - <i>jom</i> jest zamiennikiem <i>nmake</i>, który dystrybuuje proces kompilacji do wielu rdzeni procesora .Najnowsza wersja jest dostępna tu: <a href="http://releases.qt-project.org/jom/">ftp://ftp.qt.nokia.com/jom/</a>. Zdezaktywuj tę opcję, jeśli zauważysz problemy podczas budowania. - Open Compile Output pane when building Otwieraj "Komunikaty kompilatora" podczas budowania @@ -1092,8 +948,8 @@ Pyta po naciśnięciu przycisku stop w "Komunikatach aplikacji", przed zatrzymaniem aplikacji. - <i>jom</i> is a drop-in replacement for <i>nmake</i> which distributes the compilation process to multiple CPU cores. The latest binary is available at <a href="http://download.qt-project.org/official_releases/jom/">http://download.qt-project.org/official_releases/jom/</a>. Disable it if you experience problems with your builds. - <i>jom</i> jest zamiennikiem <i>nmake</i>, który dystrybuuje proces kompilacji do wielu rdzeni procesora .Najnowsza wersja jest dostępna tu: <a href="http://download.qt-project.org/official_releases/jom/">http://download.qt-project.org/official_releases/jom/</a>. W razie napotkania problemów podczas budowania opcję tę należy wyłączyć. + <i>jom</i> is a drop-in replacement for <i>nmake</i> which distributes the compilation process to multiple CPU cores. The latest binary is available at <a href="http://download.qt.io/official_releases/jom/">http://download.qt.io/official_releases/jom/</a>. Disable it if you experience problems with your builds. + <i>jom</i> jest zamiennikiem <i>nmake</i>, który dystrybuuje proces kompilacji do wielu rdzeni procesora .Najnowsza wersja jest dostępna tu: <a href="http://download.qt.io/official_releases/jom/">http://download.qt.io/official_releases/jom/</a>. W razie napotkania problemów podczas budowania opcję tę należy wyłączyć. @@ -1149,14 +1005,6 @@ &Switch to &Przełącz sesję - - New session name - Nazwa nowej sesji - - - Rename session - Zmień nazwę sesji - <a href="qthelp://org.qt-project.qtcreator/doc/creator-project-managing-sessions.html">What is a Session?</a> <a href="qthelp://org.qt-project.qtcreator/doc/creator-project-managing-sessions.html">Co to jest sesja?</a> @@ -1382,10 +1230,6 @@ building in <b>%1</b> budowanie w <b>%1</b> - - The Qt version %1 does not support shadow builds, building might fail. - Qt w wersji %1 nie obsługuje budowania poza drzewem źródłowym, budowa może się nie powieść. - Warning: Ostrzeżenie: @@ -1448,7 +1292,7 @@ Log count: - Licznik loga: + Licznik logu: Subversion command: @@ -1628,6 +1472,10 @@ Alias: Alias: + + Remove Missing Files + Usuń brakujące pliki + Application @@ -1648,11 +1496,11 @@ Nie można odnaleźć wtyczki "Core" w %1 - Could not find 'Core.pluginspec' in %1 - Nie można odnaleźć "Core.pluginspec" w %1 + Core plugin is disabled. + Wtyczka "Core" wyłączona. - No valid theme '%1' + No valid theme "%1" Brak poprawnego motywu "%1" @@ -1676,14 +1524,6 @@ PluginManager - - The plugin '%1' is specified twice for testing. - Wtyczka "%1" występuje dwukrotnie w testach. - - - The plugin '%1' does not exist. - Wtyczka "%1" nie istnieje. - The plugin "%1" is specified twice for testing. Wtyczka "%1" występuje dwukrotnie w testach. @@ -1795,14 +1635,6 @@ Przyczyna: %3 ExtensionSystem::Internal::PluginSpecPrivate - - Cannot open file %1 for reading: %2 - Nie można otworzyć pliku %1 do odczytu: %2 - - - Error parsing file %1: %2, at line %3, column %4 - Błąd parsowania pliku %1: %2, w linii %3, w kolumnie %4 - Plugin meta data not found Brak danych o wtyczce @@ -1830,30 +1662,6 @@ Przyczyna: %3 PluginSpec - - '%1' misses attribute '%2' - Brak atrybutu "%2" w "%1" - - - '%1' has invalid format - "%1" posiada niepoprawny format - - - Invalid element '%1' - Niepoprawny element "%1" - - - Unexpected closing element '%1' - Nieoczekiwany element domykający "%1" - - - Unexpected token - Nieoczekiwany znak - - - Expected element '%1' as top level element - Oczekiwano elementu "%1" jako elementu głównego - "%1" is missing Brak "%1" @@ -1987,22 +1795,10 @@ Przyczyna: %3 Cannot execute "%1": %2 Nie można uruchomić "%1": %2 - - Cannot create temporary directory '%1': %2 - Nie można utworzyć tymczasowego katalogu "%1": %2 - Unexpected output from helper program (%1). Nieoczekiwany komunikat od programu pomocniczego (%1). - - Cannot change to working directory '%1': %2 - Nie można zmienić katalogu roboczego na '%1': %2 - - - Cannot execute '%1': %2 - Nie można uruchomić "%1": %2 - Quoting error in command. Błąd w cytacie komendy. @@ -2027,18 +1823,6 @@ Przyczyna: %3 Cannot create socket "%1": %2 Nie można utworzyć gniazda "%1": %2 - - Cannot start the terminal emulator '%1', change the setting in the Environment options. - Nie można uruchomić emulatora terminala "%1", zmień ustawienie w opcjach środowiska. - - - Cannot create socket '%1': %2 - Nie można utworzyć gniazda "%1": %2 - - - The process '%1' could not be started: %2 - Proces "%1" nie może zostać rozpoczęty: %2 - The process "%1" could not be started: %2 Nie można uruchomić procesu "%1": %2 @@ -2069,14 +1853,6 @@ Przyczyna: %3 Name contains white space. Nazwa zawiera spację. - - Invalid character '%1'. - Niepoprawny znak: "%1". - - - Invalid characters '%1'. - Niepoprawne znaki: "%1". - Invalid character "%1". Niepoprawny znak: "%1". @@ -2159,22 +1935,6 @@ Przyczyna: %3 Cannot execute "%1". Nie można uruchomić "%1". - - The path '%1' expanded to an empty string. - Ścieżka "%1" rozwinięta do pustej nazwy. - - - The path '%1' is not a directory. - Ścieżka "%1" nie wskazuje na katalog. - - - The directory '%1' does not exist. - Katalog "%1" nie istnieje. - - - Cannot execute '%1'. - Nie można uruchomić "%1". - The path <b>%1</b> is not an executable file. Ścieżka <b>%1</b> nie wskazuje na plik wykonywalny. @@ -2187,10 +1947,6 @@ Przyczyna: %3 The path must not be empty. Ścieżka nie może być pusta. - - The path '%1' does not exist. - Ścieżka "%1" nie istnieje. - The path <b>%1</b> is not a directory. Ścieżka <b>%1</b> nie wskazuje na katalog. @@ -2210,10 +1966,6 @@ Przyczyna: %3 Insert... Wstaw... - - Add... - Dodaj... - Delete Line Usuń linię @@ -2222,25 +1974,6 @@ Przyczyna: %3 Clear Wyczyść - - From "%1" - Z "%1" - - - - Utils::ProjectNameValidatingLineEdit - - Invalid character '%1' found! - Niepoprawny znak: "%1". - - - Invalid character "%1" found. - Niepoprawny znak: "%1". - - - Invalid character '.'. - Niepoprawny znak: "." (kropka). - Utils::reloadPrompt @@ -2257,17 +1990,6 @@ Przyczyna: %3 Plik <i>%1</i> został zmieniony na zewnątrz Qt Creatora. Czy ponownie go załadować? - - BINEditor::Internal::BinEditorPlugin - - &Undo - &Cofnij - - - &Redo - &Przywróć - - Bookmarks::Internal::BookmarkView @@ -2282,10 +2004,6 @@ Przyczyna: %3 Move Down Przenieś na dół - - Edit Note - Zmodyfikuj notatkę - &Edit &Edycja @@ -2361,10 +2079,6 @@ Przyczyna: %3 Edit Bookmark Zmodyfikuj zakładkę - - Edit Bookmark Note - Zmodyfikuj notatkę zakładki - CMakeProjectManager::Internal::CMakeOpenProjectWizard @@ -2450,8 +2164,8 @@ Przyczyna: %3 Nie zaznaczono generatora. - No valid CMake executable specified. - Brak poprawnego pliku wykonywalnego CMake. + Selected Kit has no valid CMake executable specified. + Brak poprawnego pliku wykonywalnego CMake w wybranym zestawie. CMake exited with errors. Please check CMake output. @@ -2472,10 +2186,6 @@ Przyczyna: %3 CMakeProjectManager::Internal::CMakeBuildSettingsWidget - - Run cmake - Uruchom cmake - Run CMake... Uruchom CMake... @@ -2503,37 +2213,21 @@ Przyczyna: %3 CMake CMake - - Executable: - Plik wykonywalny: - - - Prefer Ninja generator (CMake 2.8.9 or higher required) - Preferuj generator Ninja (wymagany CMake 2.8.9 lub nowszy) - CMakeProjectManager::Internal::CMakeRunConfigurationWidget - - Arguments: - Argumenty: - Select Working Directory Wybierz katalog roboczy - Reset to default. - Przywróć domyślny. + Reset to Default + Przywróć domyślny Working directory: Katalog roboczy: - - Run in Terminal - Uruchom w terminalu - CMakeProjectManager::Internal::MakeStepConfigWidget @@ -2563,40 +2257,11 @@ Przyczyna: %3 Core::BaseFileWizard File Generation Failure - Błąd w trakcie generowania pliku + Błąd w trakcie generowania pliku Existing files - Istniejące pliki - - - Failed to open an editor for '%1'. - Nie można otworzyć edytora dla "%1". - - - [read only] - [tylko do odczytu] - - - [folder] - [katalog] - - - [symbolic link] - [dowiązanie symboliczne] - - - The project directory %1 contains files which cannot be overwritten: -%2. - Katalog projektu %1 zawiera pliki, które nie moga być nadpisane: -%2. - - - - Core::StandardFileWizard - - New %1 - Nowy %1 + Istniejące pliki @@ -2652,10 +2317,6 @@ Przyczyna: %3 Core::Internal::OpenWithDialog - - Open file '%1' with: - Otwórz plik "%1" przy pomocy: - Open File With... Otwórz plik przy pomocy... @@ -2717,34 +2378,6 @@ Przyczyna: %3 Keyboard Klawisze - - Keyboard Shortcuts - Skróty klawiszowe - - - Key sequence: - Sekwencja klawiszy: - - - Shortcut - Skrót - - - Type to set shortcut - Naciśnij aby ustawić skrót - - - Import Keyboard Mapping Scheme - Zaimportuj schemat mapowania klawiatury - - - Keyboard Mapping Scheme (*.kms) - Schemat mapowania klawiatury (*.kms) - - - Export Keyboard Mapping Scheme - Wyeksportuj schemat mapowania klawiatury - Core::Internal::EditMode @@ -2788,28 +2421,32 @@ Przyczyna: %3 W przód - Copy Full Path to Clipboard - Skopiuj pełną ścieżkę do schowka + Copy Full Path + Skopiuj pełną ścieżkę - Copy File Name to Clipboard - Skopiuj nazwę pliku do schowka + Copy Path and Line Number + Skopiuj ścieżkę i numer linii - Open With - Otwórz przy pomocy + Copy File Name + Skopiuj nazwę pliku - Revert File to Saved - Odwróć zmiany w pliku + Continue Opening Huge Text File? + Kontynuować otwieranie wielkiego pliku tekstowego? - Ctrl+F4 - Ctrl+F4 + The text file "%1" has the size %2MB and might take more memory to open and process than available. + +Continue? + Plik tekstowy "%1" o rozmiarze %2MB może zająć więcej pamięci niż wynosi ilość wolnej pamięci. + +Kontynuować? - Ctrl+W - Ctrl+W + Open With + Otwórz przy pomocy &Save @@ -2819,126 +2456,10 @@ Przyczyna: %3 Save &As... Zachowaj j&ako... - - Ctrl+Shift+W - Ctrl+Shift+W - - - Alt+Tab - Alt+Tab - - - Ctrl+Tab - Ctrl+Tab - - - Alt+Shift+Tab - Alt+Shift+Tab - - - Ctrl+Shift+Tab - Ctrl+Shift+Tab - - - Ctrl+Alt+Left - Ctrl+Alt+Left - - - Alt+Left - Alt+Left - - - Ctrl+Alt+Right - Ctrl+Alt+Right - - - Alt+Right - Alt+Right - - - Split - Podziel - - - Split Side by Side - Podziel sąsiadująco - - - Open in New Window - Otwórz w nowym oknie - - - Meta+E,4 - Meta+E,4 - - - Ctrl+E,4 - Ctrl+E,4 - - - Remove Current Split - Usuń bieżący podział - - - Remove All Splits - Usuń wszystkie podziały - - - Meta+E,2 - Meta+E,2 - Close All Except Visible Zamknij wszystko z wyjątkiem widocznych - - Ctrl+E,2 - Ctrl+E,2 - - - Meta+E,3 - Meta+E,3 - - - Ctrl+E,3 - Ctrl+E,3 - - - Meta+E,0 - Meta+E,0 - - - Ctrl+E,0 - Ctrl+E,0 - - - Meta+E,1 - Meta+E,1 - - - Ctrl+E,1 - Ctrl+E,1 - - - Meta+E,o - Meta+E,o - - - Ctrl+E,o - Ctrl+E,o - - - Ad&vanced - Zaa&wansowane - - - X-coordinate of the current editor's upper left corner, relative to screen. - Współrzędna X lewego górnego rogu bieżącego edytora, względem ekranu. - - - Y-coordinate of the current editor's upper left corner, relative to screen. - Współrzędna Y lewego górnego rogu bieżącego edytora, względem ekranu. - Close "%1" Zamknij "%1" @@ -2959,82 +2480,10 @@ Przyczyna: %3 File Error Błąd pliku - - Cannot Open File - Nie można otworzyć pliku - - - Cannot open the file for editing with VCS. - Nie można otworzyć pliku do edycji przy pomocy VCS. - - - <b>Warning:</b> This file was not opened in %1 yet. - <b>Ostrzeżenie:</b> Ten plik nie był jeszcze otwarty w %1. - - - Open - Otwórz - - - Make Writable - Uczyń plik zapisywalnym - - - Save %1 &As... - Zachowaj %1 j&ako... - Opening File Otwieranie pliku - - Go to Next Split or Window - Przejdź do kolejnego podzielonego okna - - - Current document - Bieżący dokument - - - Qt Creator - Qt Creator - - - <b>Warning:</b> You are changing a read-only file. - <b>Ostrzeżenie:</b> Zmieniasz plik, który jest tylko do odczytu. - - - &Save %1 - &Zachowaj %1 - - - Revert %1 to Saved - Odwróć zmiany w %1 - - - Reload %1 - Przeładuj %1 - - - Close %1 - Zamknij %1 - - - Close All Except %1 - Zamknij wszystko z wyjątkiem %1 - - - You will lose your current changes if you proceed reverting %1. - Utracisz swoje bieżące zmiany w %1 jeśli potwierdzisz wykonanie tego polecenia. - - - Proceed - Wykonaj - - - Cancel - Anuluj - Core::Internal::OpenEditorsWidget @@ -3056,14 +2505,6 @@ Przyczyna: %3 Qt Creator Qt Creator - - Exit Full Screen - Wyłącz tryb pełnoekranowy - - - Enter Full Screen - Włącz tryb pełnoekranowy - &File &Plik @@ -3092,6 +2533,11 @@ Przyczyna: %3 &New File or Project... &Nowy plik lub projekt... + + New File or Project + Title of dialog + Nowy plik lub projekt + &Open File or Project... &Otwórz plik lub projekt... @@ -3184,10 +2630,6 @@ Przyczyna: %3 &Options... &Opcje... - - Ctrl+, - Ctrl+, - Minimize Zminimalizuj @@ -3200,10 +2642,6 @@ Przyczyna: %3 Zoom Powiększ - - Show Sidebar - Pokazuj boczny pasek - Ctrl+0 Ctrl+0 @@ -3252,11 +2690,6 @@ Przyczyna: %3 About &Plugins... Informacje o w&tyczkach... - - New - Title of dialog - Nowy - Settings... Ustawienia... @@ -3390,7 +2823,11 @@ Przyczyna: %3 Informacje o Qt Creatorze - <h3>%1</h3>%2<br/><br/>Built on %3 at %4<br /><br/>%5<br/>Copyright 2008-%6 %7. All rights reserved.<br/><br/>The program is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.<br/> + Built on %1 %2<br/> + Wersja z %1 %2<br/> + + + <h3>%1</h3>%2<br/><br/>%3<br/>%4<br/>Copyright 2008-%5 %6. All rights reserved.<br/><br/>The program is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.<br/> @@ -3417,10 +2854,6 @@ Przyczyna: %3 Meta+C,Meta+P Meta+C,Meta+P - - Paste Clipboard... - Wklej zawartość schowka... - Fetch Snippet... Pobierz urywek... @@ -3450,35 +2883,6 @@ Przyczyna: %3 Otrzymano pusty urywek dla "%1". - - CppEditor::Internal::ClassNamePage - - Enter Class Name - Wprowadź nazwę klasy - - - The header and source file names will be derived from the class name - Nazwy pliku nagłówkowego i źródłowego będą zaproponowane na podstawie nazwy klasy - - - - CppEditor::Internal::CppClassWizardDialog - - C++ Class Wizard - Kreator klasy C++ - - - Details - Szczegóły - - - - CppEditor::Internal::CppClassWizard - - Error while generating file contents. - Błąd podczas generowania zawartości. - - CppTools::Internal::CompletionSettingsPage @@ -3573,10 +2977,6 @@ Przyczyna: %3 Automatically creates a Doxygen comment upon pressing enter after a '/**', '/*!', '//!' or '///'. Automatycznie wstawia komentarz Doxygen po naciśnięciu entera następującego po "/**", "/*!", "//!" lub "///". - - Adds leading asterisks when continuing Qt '/*!' and Java '/**' style comments on new lines. - Dodaje wiodące gwiazdki, gdy komentarze Qt "/*!" i Java "/**" przechodzą do nowych linii. - Automatically split strings Automatycznie dziel ciągi tekstowe po naciśnięciu klawisza Enter @@ -3585,6 +2985,18 @@ Przyczyna: %3 Adds leading asterisks when continuing C/C++ "/*", Qt "/*!" and Java "/**" style comments on new lines. Dodaje wiodące gwiazdki, gdy komentarze C/C++ "/*", Qt "/*!" i Java "/**" przechodzą do nowych linii. + + Splits a string into two lines by adding an end quote at the cursor position when you press Enter and a start quote to the next line, before the rest of the string. + +In addition, Shift+Enter inserts an escape character at the cursor position and moves the rest of the string to the next line. + Naciśnięcie klawisza "Enter" dzieli ciąg tekstowy na dwa, umieszcza drugi w nowej linii i dodaje znaki końca i początku ciągu w miejscu podziału. + +Ponadto, naciśnięcie kombinacji "Shift+Enter" powoduje wstawienie znaku ucieczki w pozycji kursora i przeniesienie reszty ciągu do następnej linii. + + + Timeout in ms: + Czas oczekiwania w ms: + CppTools::Internal::CppCurrentDocumentFilter @@ -3628,11 +3040,7 @@ Przyczyna: %3 Searching for Usages - Wyszukiwanie użyć - - - Searching - Przeszukiwanie + Wyszukiwanie użyć C++ Macro Usages: @@ -3646,17 +3054,6 @@ Przyczyna: %3 Funkcje C++ - - CppPreprocessor - - %1: No such file or directory - %1: Brak pliku lub katalogu - - - %1: Could not get file contents - %1: Nie można odczytać zawartości pliku - - CppTools @@ -3723,46 +3120,8 @@ Przyczyna: %3 Ścieżka do szablonu z licencją - - Cvs::Internal::CheckoutWizard - - Checks out a CVS repository and tries to load the contained project. - Wyciąga repozytorium CVS i próbuje załadować zawarty projekt. - - - CVS Checkout - Kopia robocza CVS - - - - Cvs::Internal::CheckoutWizardPage - - Location - Położenie - - - Specify repository and path. - Podaj repozytorium i ścieżkę. - - - Repository: - Repozytorium: - - Cvs::Internal::CvsPlugin - - Parsing of the log output failed - Nie można przetworzyć komunikatów loga - - - Checks out a CVS repository and tries to load the contained project. - Wyciąga repozytorium CVS i próbuje załadować zawarty projekt. - - - CVS Checkout - Kopia robocza CVS - &CVS &CVS @@ -3787,10 +3146,6 @@ Przyczyna: %3 Diff Current File Pokaż różnice w bieżącym pliku - - Cannot find repository for "%1" - Nie można odnaleźć repozytorium dla "%1" - Diff "%1" Porównaj "%1" @@ -3807,6 +3162,14 @@ Przyczyna: %3 Commit Current File Wrzuć bieżący plik + + Cannot find repository for "%1". + Nie można odnaleźć repozytorium dla "%1". + + + Parsing of the log output failed. + Nie można przetworzyć komunikatów logu. + Commit "%1" Wrzuć "%1" @@ -3819,10 +3182,6 @@ Przyczyna: %3 Filelog Current File Log bieżącego pliku - - Cannot find repository for '%1' - Nie można odnaleźć repozytorium dla "%1" - Meta+C,Meta+D Meta+C,Meta+D @@ -3919,6 +3278,22 @@ Przyczyna: %3 Commit Project "%1" Wrzuć projekt "%1" + + Update Directory + Uaktualnij katalog + + + Update Directory "%1" + Uaktualnij katalog "%1" + + + Commit Directory + + + + Commit Directory "%1" + + Diff Repository Pokaż różnice w repozytorium @@ -3968,8 +3343,12 @@ Przyczyna: %3 Błąd podczas sprawdzania opisu wrzucanych zmian. Czy wrzucić zmianę? - Revert repository - Odwróć zmiany w repozytorium + Revert Repository + + + + No CVS executable specified. + Revert all pending changes to the repository? @@ -4003,18 +3382,6 @@ Przyczyna: %3 Could not find commits of id "%1" on %2. Nie można odnaleźć wrzuconych zmian o identyfikatorze "%1" dokonanych w dniu %2. - - No cvs executable specified. - Nie podano ścieżki do programu cvs. - - - Would you like to discard your changes to the repository '%1'? - Czy porzucić zmiany w repozytorium "%1"? - - - Would you like to discard your changes to the file '%1'? - Czy porzucić zmiany w pliku "%1"? - Project status Stan projektu @@ -4027,14 +3394,6 @@ Przyczyna: %3 The initial revision %1 cannot be described. Początkowa poprawka %1 nie może być opisana. - - Could not find commits of id '%1' on %2. - Nie można odnaleźć wrzuconych zmian o identyfikatorze "%1" dokonanych w dniu %2. - - - No cvs executable specified! - Nie podano ścieżki do programu cvs! - Cvs::Internal::CvsSubmitEditor @@ -4289,6 +3648,46 @@ Przyczyna: %3 Breakpoint will only be hit after being ignored so many times. Program przerwie działanie w pułapce po tym, jak zostanie ona zignorowana podaną ilość razy. + + Data breakpoint %1 (%2) at %3 triggered. + Osiągnięto pułapkę warunkową %1 (%2) przy %3. + + + Internal data breakpoint %1 at %2 triggered. + Osiągnięto wewnętrzną pułapkę warunkową %1 przy %2. + + + Data breakpoint %1 (%2) at %3 in thread %4 triggered. + Osiągnięto pułapkę warunkową %1 (%2) przy %3 w wątku %4. + + + Internal data breakpoint %1 at %2 in thread %3 triggered. + Osiągnięto wewnętrzna pułapka warunkowa %1 przy %2 w wątku %3. + + + Data breakpoint %1 (%2) at 0x%3 triggered. + Osiągnięto pułapkę warunkową %1 (%2) pod 0x%3. + + + Internal data breakpoint %1 at 0x%2 triggered. + Osiągnięto wewnętrzną pułapkę warunkową %1 pod 0x%2. + + + Data breakpoint %1 (%2) at 0x%3 in thread %4 triggered. + Osiągnięto pułapkę warunkową %1 (%2) pod 0x%3 w wątku %4. + + + Internal data breakpoint %1 at 0x%2 in thread %3 triggered. + Osiągnięto wewnętrzną pułapkę warunkową %1 pod 0x%2 w wątku %3. + + + Stopped at breakpoint %1 (%2) in thread %3. + Zatrzymano w pułapce %1 (%2) w wątku %3. + + + Stopped at internal breakpoint %1 in thread %2. + Zatrzymano w wewnętrznej pułapce %1 w wątku %2. + (all) (wszystko) @@ -4298,13 +3697,6 @@ Przyczyna: %3 Program przerwie działanie w pułapce tylko we wskazanych wątkach. - - Debugger::Internal::BreakWindow - - Breakpoints - Pułapki - - Debugger::Internal::CdbOptionsPageWidget @@ -4352,32 +3744,32 @@ Przyczyna: %3 Debugger::Internal::CdbSymbolPathListEditor - Symbol Server... - Serwer z symbolami... + Insert Symbol Server... + Dodaj serwer z symbolami... - Adds the Microsoft symbol server providing symbols for operating system libraries.Requires specifying a local cache directory. - Dodaje serwer z symbolami Microsoft dostarczający symboli dla bibliotek systemu operacyjnego. Wymaga podania katalogu dla lokalnego cache. + Adds the Microsoft symbol server providing symbols for operating system libraries. Requires specifying a local cache directory. + - Symbol Cache... - Cache z symbolami... + Insert Symbol Cache... + Uses a directory to cache symbols used by the debugger. Używa katalogu do cache'owania symboli użytych przez debuggera. - - - Debugger::Internal::DebuggerSettings - This switches the debugger to instruction-wise operation mode. In this mode, stepping operates on single instructions and the source location view also shows the disassembled instructions. - Przestawia debugger do trybu operowania na instrukcjach. W tym trybie kroczenie działa dla pojedynczych instrukcji i widok źródeł pokazuje również zdezasemblowane instrukcje. + Setup Symbol Paths... + - Always Adjust Column Widths to Contents - Zawsze wyrównuj szerokości kolumn do ich zawartości + Configure Symbol paths that are used to locate debug symbol files. + + + + Debugger::Internal::DebuggerSettings Use Alternating Row Colors Używaj alternatywnych kolorów wierszy @@ -4398,37 +3790,94 @@ Przyczyna: %3 Operate by Instruction Operuj na instrukcjach + + <p>This switches the debugger to instruction-wise operation mode. In this mode, stepping operates on single instructions and the source location view also shows the disassembled instructions. + <p>Przestawia debugger do trybu operowania na instrukcjach. W tym trybie kroczenie działa dla pojedynczych instrukcji i widok źródeł pokazuje również zdezasemblowane instrukcje. + + + Native Mixed Mode + + + + <p>This switches the debugger to native-mixed operation mode. In this mode, stepping and data display will be handled by the native debugger backend (GDB, LLDB or CDB) for C++, QML and JS sources. + + Dereference Pointers Automatically Wyłuskuj wskaźniki automatycznie + + <p>This switches the Locals&&Watchers view to automatically dereference pointers. This saves a level in the tree view, but also loses data for the now-missing intermediate level. + <p>Włącza automatyczne wyłuskiwanie wskaźników w widoku ze zmiennymi lokalnymi i obserwowanymi. Brak jednego poziomu w widoku upraszcza go, ale jednocześnie powoduje utratę danych w brakującym poziomie pośrednim. + Show "std::" Namespace in Types Pokazuj przestrzeń nazw "std::" w widoku typów + + Show "std::" namespace in types + Pokazuj przestrzeń nazw "std::" w widoku typów + + + <p>Shows "std::" prefix for types from the standard library. + <p>Pokazuje przedrostek "std::" dla typów z biblioteki standardowej. + Show Qt's Namespace in Types Pokazuj przestrzeń nazw Qt w widoku typów + + Show Qt's namespace in types + Pokazuj przestrzeń nazw Qt w widoku typów + + + <p>Shows Qt namespace prefix for Qt types. This is only relevant if Qt was configured with "-qtnamespace". + <p>Pokazuje przestrzeń nazw Qt dla typów Qt. To ma zastosowanie jedynie dla Qt skonfigurowanego z "-qtnamespace". + Sort Members of Classes and Structs Alphabetically Sortuj alfabetycznie składniki klas i struktur + + Sort members of classes and structs alphabetically + Sortuj alfabetycznie składniki klas i struktur + Use Debugging Helpers Używaj asystenta debuggera - Use Code Model - Używaj modelu kodu + <p>Not all source code lines generate executable code. Putting a breakpoint on such a line acts as if the breakpoint was set on the next line that generated code. Selecting 'Adjust Breakpoint Locations' shifts the red breakpoint markers in such cases to the location of the true breakpoint. + <p>Nie wszystkie linie kodu źródłowego generują kod wykonywalny. Ustawienie pułapki w takiej linii spowoduje, że zostanie ona ustawiona de facto w najbliższej kolejnej linii generującej kod wykonywalny. +"Poprawiaj położenie pułapek" przesuwa czerwone znaczniki pułapek w miejsca prawdziwych pułapek w takich przypadkach. + + + <p>Checking this will enable tooltips for variable values during debugging. Since this can slow down debugging and does not provide reliable information as it does not use scope information, it is switched off by default. + <p>Zaznaczenie tej opcji uaktywni podpowiedzi dla wartości zmiennych podczas debugowania. Domyślnie jest to wyłączone, ponieważ może to spowalniać debugowanie i ponadto może dostarczać nieprawidłowych informacji, jako że dane o zakresach nie są uwzględniane. + + + <p>Checking this will enable tooltips in the breakpoints view during debugging. + <p>Zaznaczenie tej opcji uaktywni podpowiedzi w widoku z pułapkami podczas debugowania. + + + <p>Checking this will enable tooltips in the stack view during debugging. + <p>Zaznaczenie tej opcji uaktywni podpowiedzi w widoku stosu podczas debugowania. + + + <p>Checking this will show a column with address information in the breakpoint view during debugging. + <p>Zaznaczenie tej opcji spowoduje pokazanie kolumny z adresami w widoku z pułapkami podczas debugowania. + + + <p>Checking this will show a column with address information in the stack view during debugging. + <p>Zaznaczenie tej opcji spowoduje pokazanie kolumny z adresami w widoku stosu podczas debugowania. - Selecting this causes the C++ Code Model being asked for variable scope information. This might result in slightly faster debugger operation but may fail for optimized code. - Wybranie tej opcji spowoduje pobieranie informacji o zakresie zmiennych z modelu kodu C++. Może to przyspieszyć działanie debuggera, lecz również może to spowodować niepoprawne działanie dla zoptymalizowanego kodu. + <p>The maximum length of string entries in the Locals and Expressions pane. Longer than that are cut off and displayed with an ellipsis attached. + <p>Maksymalna długość ciągów znakowych w widoku "Zmienne lokalne i wyrażenia". Dłuższe ciągi będą odcinane i zakańczane wielokropkiem. - This switches the Locals&&Watchers view to automatically dereference pointers. This saves a level in the tree view, but also loses data for the now-missing intermediate level. - Włącza automatyczne wyłuskiwanie wskaźników w widoku ze zmiennymi lokalnymi i obserwowanymi. Brak jednego poziomu w widoku upraszcza go, ale jednocześnie powoduje utratę danych w brakującym poziomie pośrednim. + <p>The maximum length for strings in separated windows. Longer strings are cut off and displayed with an ellipsis attached. + <p>Maksymalna długość ciągów znakowych w oddzielnych oknach. Dłuższe ciągi będą odcinane i zakańczane wielokropkiem. Configure Debugger... @@ -4440,12 +3889,28 @@ Przyczyna: %3 Keep Editor Stationary When Stepping - + Wyłącz centrowanie bieżącej linii podczas kroczenia Debugger Font Size Follows Main Editor Rozmiar czcionki debuggera wzięty z głównego edytora + + Use code model + Używaj modelu kodu + + + <p>Selecting this causes the C++ Code Model being asked for variable scope information. This might result in slightly faster debugger operation but may fail for optimized code. + <p>Wybranie tej opcji spowoduje pobieranie informacji o zakresie zmiennych z modelu kodu C++. Może to przyspieszyć działanie debuggera, lecz również może to spowodować niepoprawne działanie dla zoptymalizowanego kodu. + + + <p>Displays names of QThread based threads. + <p>Wyświetla nazwy wątków dziedziczących z QThread. + + + Display thread names + Wyświetlaj nazwy wątków + Synchronize Breakpoints Zsynchronizuj pułapki @@ -4454,11 +3919,6 @@ Przyczyna: %3 Adjust Breakpoint Locations Poprawiaj położenia pułapek - - Not all source code lines generate executable code. Putting a breakpoint on such a line acts as if the breakpoint was set on the next line that generated code. Selecting 'Adjust Breakpoint Locations' shifts the red breakpoint markers in such cases to the location of the true breakpoint. - Nie wszystkie linie kodu źródłowego generują kod wykonywalny. Ustawienie pułapki w takiej linii spowoduje, że zostanie ona ustawiona de facto w najbliższej kolejnej linii generującej kod wykonywalny. -"Poprawiaj położenie pułapek" przesuwa czerwone znaczniki pułapek w miejsca prawdziwych pułapek w takich przypadkach. - Break on "throw" Przerwij w "throw" @@ -4491,18 +3951,10 @@ Przyczyna: %3 Use tooltips in main editor when debugging Używaj podpowiedzi w głównym edytorze podczas debugowania - - Checking this will enable tooltips for variable values during debugging. Since this can slow down debugging and does not provide reliable information as it does not use scope information, it is switched off by default. - Zaznaczenie tej opcji uaktywni podpowiedzi dla wartości zmiennych podczas debugowania. Domyślnie jest to wyłączone, ponieważ może to spowalniać debugowanie i ponadto może dostarczać nieprawidłowych informacji, jako że dane o zakresach nie są uwzględniane. - Use Tooltips in Stack View when Debugging Używaj podpowiedzi w widoku stosu podczas debugowania - - Checking this will enable tooltips in the stack view during debugging. - Zaznaczenie tej opcji uaktywni podpowiedzi w widoku stosu podczas debugowania. - List Source Files Pokaż listę plików @@ -4519,14 +3971,6 @@ Przyczyna: %3 Register For Post-Mortem Debugging Zarejestruj do pośmiertnego debugowania - - The maximum length of string entries in the Locals and Expressions pane. Longer than that are cut off and displayed with an ellipsis attached. - Maksymalna długość ciągów znakowych w widoku "Zmienne lokalne i wyrażenia". Dłuższe ciągi będą odcinane i zakańczane wielokropkiem. - - - The maximum length for strings in separated windows. Longer strings are cut off and displayed with an ellipsis attached. - Maksymalna długość ciągów znakowych w oddzielnych oknach. Dłuższe ciągi będą odcinane i zakańczane wielokropkiem. - Reload Full Stack Przeładuj cały stos @@ -4535,38 +3979,26 @@ Przyczyna: %3 Create Full Backtrace Utwórz pełny zrzut stosu - - Checking this will enable tooltips in the locals view during debugging. - Zaznaczenie tej opcji uaktywni podpowiedzi w widoku ze zmiennymi lokalnymi podczas debugowania. - Use Tooltips in Locals View when Debugging Używaj podpowiedzi w widoku ze zmiennymi lokalnymi podczas debugowania - Use Tooltips in Breakpoints View when Debugging - Używaj podpowiedzi w widoku z pułapkami podczas debugowania + <p>Checking this will enable tooltips in the locals view during debugging. + <p>Zaznaczenie tej opcji uaktywni podpowiedzi w widoku ze zmiennymi lokalnymi podczas debugowania. - Checking this will enable tooltips in the breakpoints view during debugging. - Zaznaczenie tej opcji uaktywni podpowiedzi w widoku z pułapkami podczas debugowania. + Use Tooltips in Breakpoints View when Debugging + Używaj podpowiedzi w widoku z pułapkami podczas debugowania Show Address Data in Breakpoints View when Debugging Pokazuj adresy w widoku z pułapkami podczas debugowania - - Checking this will show a column with address information in the breakpoint view during debugging. - Zaznaczenie tej opcji spowoduje pokazanie kolumny z adresami w widoku z pułapkami podczas debugowania. - Show Address Data in Stack View when Debugging Pokazuj adresy w widoku stosu podczas debugowania - - Checking this will show a column with address information in the stack view during debugging. - Zaznaczenie tej opcji spowoduje pokazanie kolumny z adresami w widoku stosu podczas debugowania. - Debugger @@ -4598,10 +4030,6 @@ Przyczyna: %3 Load Core File Załaduj plik zrzutu - - Browse... - Przeglądaj... - Use local core file: Użyj lokalnego plik zrzutu: @@ -4714,18 +4142,6 @@ Spróbuj: %2 Cannot jump. Stopped Nie można przeskoczyć. Zatrzymano - - Raw structure - Surowa struktura - - - Normal - Normalny - - - Displayed - Wyświetlony - Cannot continue debugged process: Nie można kontynuować debugowanego procesu: @@ -4828,14 +4244,6 @@ Spróbuj: %2 Finished retrieving data Zakończono pobieranie danych - - The gdb process terminated. - Proces gdb zakończył pracę. - - - The gdb process terminated unexpectedly (code %1) - Proces gdb nieoczekiwanie zakończył pracę (kod %1) - Adapter start failed Nie można uruchomić adaptera @@ -4954,10 +4362,6 @@ Spróbuj: %2 Value changed from %1 to %2. Wartość zmieniona z %1 na %2. - - There is no GDB binary available for binaries in format '%1' - Brak dostępnego pliku binarnego GDB dla plików binarnych w formacie "%1" - Cannot Read Symbols Nie można odczytać symboli @@ -4986,10 +4390,6 @@ Spróbuj: %2 Could not find a widget. Nie można odnaleźć widżetu. - - Unexpected GDB Exit - Nieoczekiwanie zakończenie GDB - Setting up inferior... Ustawianie podprocesu... @@ -4998,10 +4398,6 @@ Spróbuj: %2 Failed to start application Nie można uruchomić aplikacji - - The debugger settings point to a script file at '%1' which is not accessible. If a script file is not needed, consider clearing that entry to avoid this warning. - Ustawienia debuggera pokazują na skrypt "%1", który nie jest dostępny. Jeśli plik ze skryptem nie jest potrzebny, rozważ usunięcie go z ustawień w celu uniknięcia tego ostrzeżenia. - GDB I/O Error Błąd wejścia / wyjścia GDB @@ -5205,13 +4601,6 @@ receives a signal like SIGSEGV during debugging. GDB - - Debugger::Internal::ModulesWindow - - Modules - Moduły - - Debugger::Internal::OutputCollector @@ -5230,26 +4619,40 @@ receives a signal like SIGSEGV during debugging. Debugger::Internal::RegisterHandler - Name - Nazwa + Content as ASCII Characters + Zawartość jako znaki ASCII - Value (Base %1) - Wartość (Baza %1) + Content as %1-bit Signed Decimal Values + Zawartość jako %1-bitowe wartości całkowite ze znakiem - - - Debugger::Internal::RegisterWindow - Registers - Rejestry + Content as %1-bit Unsigned Decimal Values + Zawartość jako %1-bitowe wartości całkowite bez znaku - - - Debugger::Internal::SourceFilesWindow - Source Files - Pliki źródłowe + Content as %1-bit Hexadecimal Values + Zawartość jako %1-bitowe wartości szesnastkowe + + + Content as %1-bit Octal Values + Zawartość jako %1-bitowe wartości ósemkowe + + + Content as %1-bit Binary Values + Zawartość jako %1-bitowe wartości binarne + + + Contents as %1-bit Floating Point Values + Zawartość jako %1-bitowe liczby zmiennoprzecinkowe + + + Name + Nazwa + + + Value + Wartość @@ -5402,20 +4805,6 @@ receives a signal like SIGSEGV during debugging. Nazwa - - Debugger::Internal::StackWindow - - Stack - Stos - - - - Debugger::Internal::ThreadsWindow - - Threads - Wątki - - Debugger::Internal::WatchData @@ -5500,13 +4889,25 @@ receives a signal like SIGSEGV during debugging. <niedostępny> - <more than %n items> - - <więcej niż %n element> - <więcej niż %n elementy> - <więcej niż %n elementów> + <at least %n items> + + + + + + <not callable> + + + + <null reference> + + + + <optimized out> + + <%n items> @@ -5516,24 +4917,16 @@ receives a signal like SIGSEGV during debugging. - %1 Object at %2 - Obiekt %1 pod adresem %2 - - - %1 Object at Unknown Address - Obiekt %1 pod nieznanym adresem + Remove All Expression Evaluators + - <Edit> - <Zmodyfikuj> + Are you sure you want to remove all expression evaluators? + Debugger::Internal::WatchModel - - <Edit> - <Zmodyfikuj> - returned value zwrócona wartość @@ -5546,54 +4939,10 @@ receives a signal like SIGSEGV during debugging. Tablica licząca %n elementów - - Raw pointer - Wskaźnik - - - Latin1 string - Ciąg Latin1 - - - UTF8 string - Ciąg UTF-8 - - - Local 8bit string - Lokalny ciąg 8-bitowy - - - UTF16 string - Ciąg UTF-16 - - - UCS4 string - Ciąg UCS4 - - - Decimal - Dziesiętny - - - Hexadecimal - Szesnastkowy - - - Binary - Binarny - - - Octal - Ósemkowy - Name Nazwa - - Root - Korzeń - Locals Zmienne lokalne @@ -5622,10 +4971,18 @@ receives a signal like SIGSEGV during debugging. Type Typ + + Automatic + Automatyczny + Raw Data Surowe dane + + Enhanced + + Latin1 String Ciąg Latin1 @@ -5654,6 +5011,30 @@ receives a signal like SIGSEGV during debugging. UTF-8 String in Separate Window Ciąg UTF-8 w oddzielnym oknie + + Plot in Separate Window + + + + Display Keys and Values Side by Side + + + + Force Display as Direct Storage Form + + + + Force Display as Indirect Storage Form + + + + Display Boolean Values as True or False + Wyświetla wartości boolowskie jako "Prawda" albo "Fałsz" + + + Display Boolean Values as 1 or 0 + Wyświetla wartości boolowskie jako 1 albo 0 + Decimal Integer Liczba dziesiętna @@ -5678,6 +5059,14 @@ receives a signal like SIGSEGV during debugging. Scientific Float Liczba zmiennoprzecinkowa w postaci wykładniczej + + %1 Object at %2 + Obiekt %1 pod adresem %2 + + + %1 Object at Unknown Address + Obiekt %1 pod nieznanym adresem + QtDumperHelper @@ -5716,27 +5105,12 @@ Więcej szczegółów w /etc/sysctl.d/10-ptrace.conf - - Debugger::Internal::WatchWindow - - Locals and Expressions - Zmienne lokalne i wyrażenia - - Designer::Internal::FormClassWizardDialog Qt Designer Form Class Klasa formularza Qt Designer - - Form Template - Szablon formularza - - - Class Details - Szczegóły klasy - Designer @@ -5744,26 +5118,10 @@ Więcej szczegółów w /etc/sysctl.d/10-ptrace.conf Designer Designer - - Class Generation - Generowanie klasy - Form Editor Edytor formularzy - - The generated header of the form '%1' could not be found. -Rebuilding the project might help. - Nie można odnaleźć wygenerowanego pliku nagłówkowego dla formularza "%1". -Spróbuj ponownie przebudować projekt. - - - The generated header '%1' could not be found in the code model. -Rebuilding the project might help. - Nie można odnaleźć wygenerowanego pliku nagłówkowego "%1" w modelu kodu. -Spróbuj ponownie przebudować projekt. - The generated header of the form "%1" could not be found. Rebuilding the project might help. @@ -5791,14 +5149,6 @@ Spróbuj ponownie przebudować projekt. Shift+F4 Shift+F4 - - Qt Designer Form - Formularz Qt Designer - - - Creates a Qt Designer form that you can add to a Qt Widget Project. This is useful if you already have an existing class for the UI business logic. - Tworzy formularz Qt Designera, który można dodać do projektu Qt Widget. Jest to przydatne, gdy istnieje już klasa implementująca logikę UI. - Creates a Qt Designer form along with a matching class (C++ header and source file) for implementation purposes. You can add the form and class to an existing Qt Widget Project. Tworzy formularz Qt Designera wraz z klasą implementującą (plik nagłówkowy i źródłowy C++). Utworzony formularz i klasę można dodać do istniejącego projektu Qt Widget. @@ -5808,109 +5158,6 @@ Spróbuj ponownie przebudować projekt. Klasa formularza Qt Designer - - Designer::Internal::FormEditorW - - Widget Box - Panel widżetów - - - Object Inspector - Hierarchia obiektów - - - Property Editor - Edytor właściwości - - - Action Editor - Edytor akcji - - - F3 - F3 - - - F4 - F4 - - - Ctrl+H - Ctrl+H - - - Meta+L - Meta+L - - - Ctrl+L - Ctrl+L - - - Ctrl+G - Ctrl+G - - - Meta+J - Meta+J - - - Ctrl+J - Ctrl+J - - - Alt+Shift+R - Alt+Shift+R - - - About Qt Designer Plugins... - Informacje o wtyczkach Qt Designera... - - - Signals && Slots Editor - Edytor sygnałów / slotów - - - Widget box - Panel widżetów - - - Edit Widgets - Modyfikuj widżety - - - Edit Signals/Slots - Modyfikuj sygnały / sloty - - - Edit Buddies - Modyfikuj skojarzone etykiety - - - Edit Tab Order - Modyfikuj kolejność tabulacji - - - Meta+Shift+H - Meta+Shift+H - - - Meta+Shift+G - Meta+Shift+G - - - Preview in - Podgląd w stylu - - - Designer - Designer - - - The image could not be created: %1 - Nie można utworzyć pliku graficznego: %1 - - Designer::Internal::FormTemplateWizardPage @@ -5926,25 +5173,8 @@ Spróbuj ponownie przebudować projekt. %1 - Błąd - - Designer::Internal::FormWizardDialog - - Qt Designer Form - Formularz Qt Designer - - - Form Template - Szablon formularza - - Designer::Internal::QtCreatorIntegration - - The class containing '%1' could not be found in %2. -Please verify the #include-directives. - Nie można odnaleźć klasy zawierającej "%1" w %2. -Sprawdź dyrektywy #include. - The class containing "%1" could not be found in %2. Please verify the #include-directives. @@ -5959,12 +5189,6 @@ Sprawdź dyrektywy #include. No documents matching "%1" could be found. Rebuilding the project might help. Brak dokumentów dołączających "%1". -Przebudowanie projektu może pomóc w ich odnalezieniu. - - - No documents matching '%1' could be found. -Rebuilding the project might help. - Brak dokumentów dołączających "%1". Przebudowanie projektu może pomóc w ich odnalezieniu. @@ -5972,146 +5196,8 @@ Przebudowanie projektu może pomóc w ich odnalezieniu. Nie można dodać definicji metody. - - FakeVim::Internal - - Use Vim-style Editing - Włącz edycję w stylu vim - - - Read .vimrc - Odczytuj .vimrc - - - Path to .vimrc - Ścieżka do .vimrc - - - - FakeVim::Internal::FakeVimHandler - - %1%2% - %1%2% - - - %1All - %1Wszystkie - - - "%1" %2 %3L, %4C written - "%1" %2 zapisano: %3 linii, %4 znaków - - - "%1" %2L, %3C - "%1" %2L, %3C - - - Mark '%1' not set. - Znacznik "%1" nie jest ustawiony. - - - Not implemented in FakeVim. - Nieobsługiwane w FakeVim. - - - %n lines moved. - - %n linia przesunięta. - %n linie przesunięte. - %n linii przesuniętych. - - - - File "%1" exists (add ! to override) - Plik "%1" istnieje (dodaj ! aby go zastąpić) - - - Cannot open file "%1" for writing - Nie można otworzyć pliku "%1" do zapisu - - - "%1" %2 %3L, %4C written. - "%1" %2 zapisano: %3 linii, %4 znaków. - - - Cannot open file "%1" for reading - Nie można otworzyć pliku "%1" do odczytu - - - %n lines filtered. - - Przefiltrowano %n linię. - Przefiltrowano %n linie. - Przefiltrowano %n linii. - - - - Search hit BOTTOM, continuing at TOP. - Przeszukano do KOŃCA, wznowiono od POCZĄTKU. - - - Search hit TOP, continuing at BOTTOM. - Przeszukano do POCZĄTKU, wznowiono od KOŃCA. - - - Search hit BOTTOM without match for: %1 - Przeszukano do KOŃCA, brak wyników pasujących do: %1 - - - Search hit TOP without match for: %1 - Przeszukano do POCZĄTKU, brak wyników pasujących do: %1 - - - %n lines indented. - - Wyrównano %n linię. - Wyrównano %n linie. - Wyrównano %n linii. - - - - Cannot open file %1 - Nie można otworzyć pliku %1 - - - Unknown option: - Nieznana opcja: - - - Invalid argument: - Niepoprawny argument: - - - Trailing characters: - Białe znaki na końcu linii: - - - Pattern not found: %1 - Brak dopasowań do wzorca: %1 - - - Invalid regular expression: %1 - Niepoprawne wyrażenie regularne: %1 - - - Unknown option: %1 - Nieznana opcja: %1 - - - Argument must be positive: %1=%2 - Argument musi być dodatni: %1=%2 - - FakeVim::Internal::FakeVimOptionPage - - General - Ogólne - - - FakeVim - FakeVim - Use FakeVim Używaj FakeVim @@ -6216,10 +5302,6 @@ Przebudowanie projektu może pomóc w ich odnalezieniu. Read .vimrc from location: Wczytuj z położenia: - - Keep empty to use the default path, i.e. %USERPROFILE%\_vimrc on Windows, ~/.vimrc otherwise. - Pozostaw pustym aby użyć domyślnej ścieżki, tzn.%USERPROFILE%\_vimrc na Windows i ~/.vimrc w pozostałych przypadkach. - Passes key sequences like Ctrl-S to Qt Creator core instead of interpreting them in FakeVim. This gives easier access to Qt Creator core functionality at the price of losing some features of FakeVim. Wybranie tej opcji spowoduje przekazywanie do Creatora sekwencji klawiszy takich jak Ctrl-S zamiast interpretowania ich w FakeVimie. Daje to łatwiejszy dostęp do funkcjonalności Creatora w zamian za utratę pewnych cech FakeVima. @@ -6241,49 +5323,6 @@ Przebudowanie projektu może pomóc w ich odnalezieniu. Opcja "tabstop" vima. - - FakeVim::Internal::FakeVimPluginPrivate - - Meta+V,Meta+V - Meta+V,Meta+V - - - Alt+V,Alt+V - Alt+V,Alt+V - - - Execute User Action #%1 - Wykonaj akcję użytkownika #%1 - - - Meta+V,%1 - Meta+V,%1 - - - Alt+V,%1 - Alt+V,%1 - - - File not saved - Plik nie został zachowany - - - Saving succeeded - Zachowywanie poprawnie zakończone - - - %n files not saved - - Nie zachowano %n pliku - Nie zachowano %n plików - Nie zachowano %n plików - - - - FakeVim Information - Informacje o FakeVim - - GenericProjectManager::Internal::GenericMakeStepConfigWidget @@ -6341,14 +5380,6 @@ Przebudowanie projektu może pomóc w ich odnalezieniu. File Selection Wybór pliku - - Location - Położenie - - - Files - Pliki - GenericProjectManager::Internal::GenericProjectWizard @@ -6432,54 +5463,8 @@ Przebudowanie projektu może pomóc w ich odnalezieniu. HEAD - - Git::Internal::CloneWizard - - Cloning - Klonowanie - - - Cloning started... - Rozpoczęto klonowanie... - - - Clones a Git repository and tries to load the contained project. - Klonuje repozytorium Git i próbuje załadować zawarty projekt. - - - Git Repository Clone - Klon repozytorium Git - - - - Git::CloneWizardPage - - Location - Położenie - - - Specify repository URL, checkout directory and path. - Podaj URL repozytorium, nazwę katalogu z kopią roboczą i ścieżkę do niego. - - - Clone URL: - URL klonu: - - - Recursive - Rekurencyjnie - - Git::Internal::GitClient - - Waiting for data... - Oczekiwanie na dane... - - - Git Diff - Git Diff - Would you like to create a local branch? Czy utworzyć lokalną gałąź? @@ -6558,27 +5543,7 @@ Przebudowanie projektu może pomóc w ich odnalezieniu. Cannot obtain log of "%1": %2 - Nie można otrzymać loga "%1": %2 - - - Cannot add %n file(s) to "%1": %2 - - Nie można dodać %n pliku do "%1": %2 - Nie można dodać %n plików do "%1": %2 - Nie można dodać %n plików do "%1": %2 - - - - Cannot remove %n file(s) from "%1": %2 - - Nie można usunąć %n pliku z "%1": %2 - Nie można usunąć %n plików z "%1": %2 - Nie można usunąć %n plików z "%1": %2 - - - - Cannot move from "%1" to "%2": %3 - Nie można przenieść pliku z "%1" do "%2": %3 + Nie można otrzymać logu "%1": %2 Cannot reset %n file(s) in "%1": %2 @@ -6618,6 +5583,14 @@ Przebudowanie projektu może pomóc w ich odnalezieniu. Detached HEAD Odłączony HEAD + + Reset + + + + All changes in working directory will be discarded. Are you sure? + Wszystkie zmiany w katalogu roboczym zostaną utracone. Czy kontynuować? + Cannot describe revision "%1" in "%2": %3 Nie można opisać poprawki "%1" w "%2": %3 @@ -6753,15 +5726,6 @@ Commit now? No changes found. Brak zmian. - - and %n more - Displayed after the untranslated message "Branches: branch1, branch2 'and %n more'" in git show. - - i jeszcze %n gałąź - i jeszcze %n gałęzie - i jeszcze %n gałęzi - - The repository "%1" is not initialized. Repozytorium %1 nie jest zainicjalizowane. @@ -6823,10 +5787,6 @@ Commit now? The file is not modified. Plik nie jest zmodyfikowany. - - Cannot set tracking branch: %1 - - Conflicts detected with commit %1. Wykryto konflikty w zmianie %1. @@ -6878,54 +5838,6 @@ Commit now? Anuluj %1. - - Gitorious::Internal::Gitorious - - Error parsing reply from '%1': %2 - Błąd przetwarzania odpowiedzi z "%1": %2 - - - Request failed for '%1': %2 - Żądanie zostało błędnie zakończone dla "%1": %2 - - - Open source projects that use Git. - Projekty otwartego oprogramowania używające Git. - - - - Gitorious::Internal::GitoriousCloneWizard - - Clones a Gitorious repository and tries to load the contained project. - Klonuje repozytorium Gitorious i próbuje załadować zawarty projekt. - - - Gitorious Repository Clone - Klon repozytorium Gitorious - - - - Gitorious::Internal::GitoriousHostWizardPage - - Host - Host - - - Select a host. - Wybierz host. - - - - Gitorious::Internal::GitoriousProjectWizardPage - - Project - Projekt - - - Choose a project from '%1' - Wybierz projekt z "%1" - - Git::Internal::GitPlugin @@ -7144,14 +6056,6 @@ Commit now? Branches... Gałęzie... - - Clones a Git repository and tries to load the contained project. - Klonuje repozytorium Git i próbuje załadować zawarty projekt. - - - Git Repository Clone - Klon repozytorium Git - Reflog Reflog @@ -7204,6 +6108,14 @@ Commit now? Stashes... Odłożone zmiany... + + Stash Unstaged Files + + + + Saves the current state of your unstaged files and resets the repository to its staged state. + + &Remote Repository Zdalne &repozytorium @@ -7395,22 +6307,11 @@ Commit now? Git::Internal::GitSettings - - The binary '%1' could not be located in the path '%2' - Nie można odnaleźć pliku binarnego "%1" w ścieżce "%2" - The binary "%1" could not be located in the path "%2" Nie można odnaleźć pliku binarnego "%1" w ścieżce "%2" - - Help::Internal::CentralWidget - - Print Document - Wydruk dokumentu - - Help::Internal::DocSettingsPage @@ -7441,6 +6342,10 @@ Commit now? Unable to register documentation. Nie można zarejestrować dokumentacji. + + %1 (auto-detected) + %1 (automatycznie wykryte) + Add and remove compressed help files, .qch. Dodaje i usuwa skompresowane pliki pomocy .qch. @@ -7573,14 +6478,6 @@ Dodaj, zmodyfikuj lub usuń filtry dokumentów, które determinują zestaw dokum Always Show Side-by-Side Zawsze pokazuj z boku - - Always Start Full Help - Zawsze zaczynaj od pełnej pomocy - - - Always Show Help in External Window - Zawsze pokazuj pomoc w zewnętrznym oknie - On help start: Po uruchomieniu pomocy: @@ -7678,46 +6575,10 @@ Dodaj, zmodyfikuj lub usuń filtry dokumentów, które determinują zestaw dokum Bookmarks Zakładki - - Home - Strona startowa - - - Previous Page - Poprzednia strona - - - Next Page - Następna strona - - - Add Bookmark - Dodaj zakładkę - Context Help Pomoc podręczna - - Activate Index in Help mode - Uaktywnij indeks w trybie pomocy - - - Activate Contents in Help mode - Uaktywnij zawartość w trybie pomocy - - - Increase Font Size - Zwiększ rozmiar czcionki - - - Meta+M - Meta+M - - - Ctrl+M - Ctrl+M - Technical Support Wsparcie techniczne @@ -7730,117 +6591,17 @@ Dodaj, zmodyfikuj lub usuń filtry dokumentów, które determinują zestaw dokum <html><head><title>No Documentation</title></head><body><br/><center><font color="%1"><b>%2</b></font><br/><font color="%3">No documentation available.</font></center></body></html> <html><head><title>Brak dokumentacji</title></head><body><br/><center><font color="%1"><b>%2</b></font><br/><font color="%3">Brak dostępnej dokumentacji.</font></center></body></html> - - Decrease Font Size - Zmniejsz rozmiar czcionki - - - Reset Font Size - Przywróć domyślny rozmiar czcionki - - - Meta+I - Meta+I - - - Ctrl+Shift+I - Ctrl+Shift+I - - - Meta+Shift+C - Meta+Shift+C - - - Ctrl+Shift+C - Ctrl+Shift+C - - - Activate Search in Help mode - Uaktywnij przeszukiwanie w trybie pomocy - - - Meta+/ - Meta+/ - - - Ctrl+Shift+/ - Ctrl+Shift+/ - - - Activate Bookmarks in Help mode - Uaktywnij zakładki w trybie pomocy - - - Meta+B - Meta+B - - - Ctrl+Shift+B - Ctrl+Shift+B - Open Pages Otwarte strony - - Activate Open Pages in Help mode - Uaktywnij otwarte strony w trybie pomocy - - - Meta+O - Meta+O - - - Ctrl+Shift+O - Ctrl+Shift+O - - - Show Sidebar - Pokaż boczny pasek - - - Go to Help Mode - Przejdź do trybu pomocy - - - Previous - Poprzedni - - - Close current page - Zamknij bieżącą stronę - - - Hide Sidebar - Ukryj boczny pasek - - - Next - Następny - Unfiltered Nieprzefiltrowane - - <html><head><title>No Documentation</title></head><body><br/><center><b>%1</b><br/>No documentation available.</center></body></html> - <html><head><title>Brak dokumentacji</title></head><body><br/><center><b>%1</b><br/>Brak dostępnej dokumentacji.</center></body></html> - - - Filtered by: - Przefiltrowane przez: - Help::Internal::SearchWidget - - Indexing - Indeksowanie - - - Indexing Documentation... - Indeksowanie dokumentacji... - Indexing Documentation Indeksowanie dokumentacji @@ -8139,17 +6900,21 @@ Dodaj, zmodyfikuj lub usuń filtry dokumentów, które determinują zestaw dokum p4 filelog %1 p4 filelog %1 + + p4 changelists %1 + p4 changelists %1 + Could not start perforce "%1". Please check your settings in the preferences. Nie można uruchomić perforce "%1". Sprawdź stosowne ustawienia. - The process terminated with exit code %1. - Proces zakończył się kodem wyjściowym %1. + Perforce did not respond within timeout limit (%1 s). + Perforce nie odpowiedział w określonym czasie (%1 s). - [Only %1 MB of output shown] - [Pokazano tylko %1 MB danych wyjściowych] + The process terminated with exit code %1. + Proces zakończył się kodem wyjściowym %1. The commit message check failed. Do you want to submit this change list? @@ -8185,14 +6950,6 @@ Dodaj, zmodyfikuj lub usuń filtry dokumentów, które determinują zestaw dokum Diff &Selected Files Pokaż różnice w &zaznaczonych plikach - - Could not start perforce '%1'. Please check your settings in the preferences. - Nie można uruchomić perforce "%1". Sprawdź stosowne ustawienia. - - - Perforce did not respond within timeout limit (%1 ms). - Perforce nie odpowiedział w określonym czasie (%1 ms). - Unable to write input data to process %1: %2 Nie można wpisać danych wejściowych do procesu %1: %2 @@ -8201,6 +6958,15 @@ Dodaj, zmodyfikuj lub usuń filtry dokumentów, które determinują zestaw dokum Perforce is not correctly configured. Perforce nie jest poprawnie skonfigurowany. + + [Only %n MB of output shown] + %n probably doesn't make sense here + + [Pokazano tylko %n MB danych wyjściowych] + [Pokazano tylko %n MB danych wyjściowych] + [Pokazano tylko %n MB danych wyjściowych] + + p4 diff %1 p4 diff %1 @@ -8326,29 +7092,6 @@ Dodaj, zmodyfikuj lub usuń filtry dokumentów, które determinują zestaw dokum Nie można pobrać komunikatów debuggera. - - ProjectExplorer::Internal::LocalApplicationRunControl - - No executable specified. - Nie podano pliku wykonywalnego. - - - Executable %1 does not exist. - Brak pliku wykonywalnego %1. - - - Starting %1... - Uruchamianie %1... - - - %1 crashed - %1 zakończył pracę błędem - - - %1 exited with code %2 - %1 zakończone kodem %2 - - ProjectExplorer::BuildManager @@ -8394,10 +7137,6 @@ Dodaj, zmodyfikuj lub usuń filtry dokumentów, które determinują zestaw dokum Canceled build/deployment. Anulowano budowanie / instalację. - - When executing step '%1' - Podczas wykonywania kroku "%1" - Running steps for project %1... Uruchamianie kroków budowania dla projektu %1... @@ -8514,10 +7253,6 @@ Dodaj, zmodyfikuj lub usuń filtry dokumentów, które determinują zestaw dokum Project "%1": Projekt "%1": - - Project '%1': - Projekt "%1": - ProjectExplorer::DebuggingHelperLibrary @@ -8843,24 +7578,12 @@ Dodaj, zmodyfikuj lub usuń filtry dokumentów, które determinują zestaw dokum Otwórz przełącznik zestawu budowania i uruchamiania... - Full build path of the current project's active build configuration. - Pełna ścieżka do wersji z aktywną konfiguracją budowania bieżącego projektu. - - - The current project's name. - Nazwa bieżącego projektu. - - - The currently active kit's name. - Nazwa aktywnego zestawu narzędzi. - - - The currently active kit's name in a filesystem friendly version. - Nazwa aktywnego zestawu narzędzi w wersji przyjaznej dla systemu plików. + Current project's main file. + Główny plik bieżącego projektu. - The currently active kit's id. - Identyfikator aktywnego zestawu narzędzi. + Full build path of the current project's active build configuration. + Pełna ścieżka do wersji z aktywną konfiguracją budowania bieżącego projektu. The host address of the device in the currently active kit. @@ -8870,10 +7593,6 @@ Dodaj, zmodyfikuj lub usuń filtry dokumentów, które determinują zestaw dokum The SSH port of the device in the currently active kit. Port SSH urządzenia w aktywnym zestawie narzędzi. - - The user name with which to log into the device in the currently active kit. - Nazwa użytkownika użytego do logowania na urządzeniu w aktywnym zestawie narzędzi. - The private key file with which to authenticate when logging into the device in the currently active kit. Klucz prywatny użyty do autoryzacji podczas logowania na urządzeniu w aktywnym zestawie narzędzi. @@ -8918,6 +7637,10 @@ Dodaj, zmodyfikuj lub usuń filtry dokumentów, które determinują zestaw dokum debug debugowy + + The name of the currently active kit in a filesystem-friendly version. + Nazwa aktywnego zestawu narzędzi w wersji przyjaznej dla systemu plików. + release release'owy @@ -8960,10 +7683,6 @@ Do you want to ignore them? Znaleziono błędy podczas budowania. Czy zignorować je? - - <b>Warning:</b> This file is outside the project directory. - <b>Ostrzeżenie:</b> Ten plik leży poza katalogiem projektu. - Build Build step @@ -8971,23 +7690,19 @@ Czy zignorować je? No project loaded. - Nie załadowano projektu. + Nie załadowano projektu. Currently building the active project. - Trwa budowanie aktywnego projektu. + Trwa budowanie aktywnego projektu. The project %1 is not configured. - Projekt %1 nie jest skonfigurowany. + Projekt %1 nie jest skonfigurowany. Project has no build settings. - Brak ustawień budowania w projekcie. - - - Building '%1' is disabled: %2 - Budowanie "%1" jest nieaktywne: %2 + Brak ustawień budowania w projekcie. Cancel Build && Close @@ -9013,13 +7728,9 @@ Czy zignorować je? No active project. Brak aktywnego projektu. - - Cannot run '%1'. - Nie można uruchomić "%1". - Run %1 - Uruchom %1 + Uruchom %1 New Subproject @@ -9042,6 +7753,18 @@ Czy zignorować je? The file %1 was renamed to %2, but the project file %3 could not be automatically changed. Plik %1 został przemianowany na %2, ale nie można było automatycznie zmienić pliku projektu %3. + + Building "%1" is disabled: %2<br> + Budowanie "%1" jest wyłączone: %2<br> + + + A build is in progress. + Trwa budowanie. + + + Building "%1" is disabled: %2 + Budowanie "%1" jest wyłączone: %2 + The project "%1" is not configured. Projekt %1 nie jest skonfigurowany. @@ -9106,10 +7829,6 @@ Czy zignorować je? Ctrl+T Ctrl+T - - Current project's main file - Główny plik bieżącego projektu - The name of the current project. Nazwa bieżącego projektu. @@ -9118,10 +7837,6 @@ Czy zignorować je? The name of the currently active kit. Nazwa aktywnego zestawu narzędzi. - - The name of the currently active kit in a filesystem friendly version. - Nazwa aktywnego zestawu narzędzi w wersji przyjaznej dla systemu plików. - The id of the currently active kit. Identyfikator aktywnego zestawu narzędzi. @@ -9138,10 +7853,6 @@ Czy zignorować je? Failed to open project. Nie można otworzyć projektu. - - Failed to open project - Nie można otworzyć projektu - All Projects Wszystkie projekty @@ -9151,22 +7862,6 @@ Czy zignorować je? Title of dialog Nowy projekt - - Failed opening project '%1': Project already open. - Nie można otworzyć projektu "%1": projekt jest już otwarty. - - - Failed opening project '%1': Settings could not be restored. - Nie można otworzyć projektu "%1": nie można przywrócić ustawień. - - - Failed opening project '%1': No plugin can open project type '%2'. - Nie można otworzyć projektu "%1": brak wtyczki obsługującej projekt typu "%2". - - - Failed opening project '%1': Unknown project type. - Nie można otworzyć projektu "%1": nieznany typ projektu. - Ignore All Errors? Zignorować wszystkie błędy? @@ -9185,31 +7880,7 @@ Czy zignorować je? The project %1 is not configured, skipping it. - Projekt %1 nie jest skonfigurowany, zostaje pominięty. - - - No project loaded - Nie załadowano projektu - - - Project has no build settings - Brak ustawień budowania w projekcie - - - Building '%1' is disabled: %2<br> - Budowanie "%1" jest nieaktywne: %2<br> - - - A build is in progress - Trwa budowanie - - - The project '%1' has no active kit. - Projekt "%1" nie posiada aktywnego zestawu narzędzi. - - - The kit '%1' for the project '%2' has no active run configuration. - Brak aktywnej konfiguracji uruchamiania w zestawie narzędzi "%1" projektu "%2". + Projekt %1 nie jest skonfigurowany, zostaje pominięty. A build is still in progress. @@ -9242,19 +7913,6 @@ Czy zignorować je? ProjectExplorer::Internal::ProjectFileWizardExtension - - <Implicitly Add> - <Niejawnie dodaj> - - - The files are implicitly added to the projects: - Pliki, które zostały niejawnie dodane do projektów: - - - <None> - No project selected - <Brak> - Open project anyway? Czy otworzyć projekt mimo to? @@ -9275,26 +7933,6 @@ do projektu "%2". Nie można dodać jednego lub więcej plików do projektu "%1" (%2). - - Failed to add subproject '%1' -to project '%2'. - Nie można dodać podprojektu "%1" -do projektu "%2". - - - Failed to add one or more files to project -'%1' (%2). - Nie można dodać jednego lub więcej plików do projektu -"%1" (%2). - - - A version control system repository could not be created in '%1'. - Nie można utworzyć repozytorium systemu kontroli wersji w "%1". - - - Failed to add '%1' to the version control system. - Nie można dodać "%1" do systemu kontroli wersji. - ProjectExplorer::Internal::ProjectTreeWidget @@ -9510,10 +8148,6 @@ do projektu "%2". Loading Session Ładowanie sesji - - Session - Sesja - Error while saving session Błąd podczas zachowywania sesji @@ -9566,14 +8200,6 @@ do projektu "%2". This wizard generates a Qt Designer Custom Widget or a Qt Designer Custom Widget Collection project. Ten kreator generuje projekt własnego widżetu Qt Designera lub projekt kolekcji własnych widżetów Qt4 Designera. - - Custom Widgets - Własne widżety - - - Plugin Details - Szczegóły wtyczki - QmakeProjectManager::Internal::PluginGenerator @@ -9611,18 +8237,10 @@ do projektu "%2". Qt MakeStep display name. Make - - Qt Creator needs a compiler set up to build. Configure a compiler in the kit options. - Do budowy Qt Creator wymaga ustawionego kompilatora. Skonfiguruj go w opcjach zestawu narzędzi. - Cannot find Makefile. Check your build settings. Nie można odnaleźć pliku Makefile. Sprawdź swoje ustawienia budowania. - - Configuration is faulty. Check the Issues view for details. - Błędna konfiguracja. Sprawdź szczegóły w widoku "Problemy budowania". - QmakeProjectManager::MakeStepConfigWidget @@ -9661,10 +8279,6 @@ do projektu "%2". QMakeStep default display name qmake - - Configuration is faulty, please check the Issues view for details. - Konfiguracja jest błędna, sprawdź szczegóły w widoku "Problemy budowania". - Configuration unchanged, skipping qmake step. Konfiguracja niezmieniona, krok qmake opuszczony. @@ -9689,8 +8303,8 @@ do projektu "%2". <b>qmake:</b> %1 %2 - Enable QML debugging: - Uaktywnij debugowanie QML: + Enable QML debugging and profiling: + Włącz debugowanie i profilowanie QML: Might make your application vulnerable. Only use in a safe environment. @@ -9700,6 +8314,10 @@ do projektu "%2". Enable Qt Quick Compiler: Włącz kompilator Qt Quick: + + Disables QML debugging. QML profiling will still work. + Wyłącza debugowanie QML, profilowanie QML pozostawia włączone. + <No Qt version> <Brak wersji Qt> @@ -9714,18 +8332,6 @@ do projektu "%2". QmakeProjectManager::QmakeManager - - Update of Generated Files - Uaktualnienie wygenerowanych plików - - - In project<br><br>%1<br><br>The following files are either outdated or have been modified:<br><br>%2<br><br>Do you want Qt Creator to update the files? Any changes will be lost. - W projekcie<br><br>%1<br><br>Następujące pliki są albo nieaktualne albo zostały zmodyfikowane: <br><br>%2<br><br>Czy odświeżyć te pliki? Jakiekolwiek zmiany zostaną utracone. - - - Failed opening project '%1': Project is not a file - Nie można otworzyć projektu "%1": Ścieżka projektu nie wskazuje na plik - Failed opening project "%1": Project is not a file Nie można otworzyć projektu "%1": Ścieżka projektu nie wskazuje na plik @@ -9889,46 +8495,6 @@ do projektu "%2". Klasy do międzyprocesowej komunikacji z użyciem D-Bus - - QmakeProjectManager::Internal::ConsoleAppWizard - - Qt Console Application - Aplikacja konsolowa Qt - - - Creates a project containing a single main.cpp file with a stub implementation. - -Preselects a desktop Qt for building the application if available. - Tworzy projekt zawierający pojedynczy plik main.cpp z substytutem implementacji. - -Wstępnie wybiera wersję desktopową Qt do budowania aplikacji (jeśli jest dostępna). - - - - QmakeProjectManager::Internal::ConsoleAppWizardDialog - - This wizard generates a Qt Console Application project. The application derives from QCoreApplication and does not provide a GUI. - Ten kreator generuje projekt aplikacji konsolowej Qt. Aplikacja dziedziczy z QCoreApplication i nie używa GUI. - - - - QmakeProjectManager::Internal::EmptyProjectWizard - - Empty Qt Project - Pusty projekt Qt - - - Creates a qmake-based project without any files. This allows you to create an application without any default classes. - Tworzy pusty projekt bazujący na qmake, bez żadnych domyślnych klas. - - - - QmakeProjectManager::Internal::EmptyProjectWizardDialog - - This wizard generates an empty Qt project. Add files to it later on by using the other wizards. - Ten kreator generuje pusty projekt Qt. Skorzystanie z innych kreatorów umożliwi dodanie do niego plików. - - QmakeProjectManager::Internal::FilesPage @@ -9965,10 +8531,6 @@ Wstępnie wybiera wersję desktopową Qt do budowania aplikacji (jeśli jest dos This wizard generates a Qt Widgets Application project. The application derives by default from QApplication and includes an empty widget. Ten kreator generuje projekt aplikacji Qt Widgets. Aplikacja domyślnie dziedziczy z QApplication i zawiera pusty widżet. - - Details - Szczegóły - QmakeProjectManager::Internal::LibraryWizard @@ -10032,14 +8594,6 @@ Wstępnie wybiera wersję desktopową Qt do budowania aplikacji (jeśli jest dos ResourceEditor::Internal::ResourceEditorPlugin - - Creates a Qt Resource file (.qrc) that you can add to a Qt Widget Project. - Tworzy plik z zasobami Qt (.qrc), który można dodać do projektu Qt Widget. - - - Qt Resource file - Plik z zasobami Qt - &Undo &Cofnij @@ -10064,6 +8618,10 @@ Wstępnie wybiera wersję desktopową Qt do budowania aplikacji (jeśli jest dos Remove Prefix... Usuń przedrostek... + + Remove Missing Files + Usuń brakujące pliki + Rename... Zmień nazwę... @@ -10077,8 +8635,8 @@ Wstępnie wybiera wersję desktopową Qt do budowania aplikacji (jeśli jest dos Otwórz w edytorze - Open in Text Editor - Otwórz w edytorze tekstowym + Open With + Otwórz przy pomocy Copy path "%1" @@ -10132,36 +8690,6 @@ Wstępnie wybiera wersję desktopową Qt do budowania aplikacji (jeśli jest dos Skopiuj ścieżkę z zasobami do schowka - - Subversion::Internal::CheckoutWizard - - Checks out a Subversion repository and tries to load the contained project. - Wyciąga repozytorium Subversion i próbuje załadować zawarty projekt. - - - Subversion Checkout - Kopia robocza Subversion - - - - Subversion::Internal::CheckoutWizardPage - - Trust Server Certificate - - - - Location - Położenie - - - Specify repository URL, checkout directory and path. - Podaj URL repozytorium, nazwę katalogu z kopią roboczą i ścieżkę do niego. - - - Repository: - Repozytorium: - - Subversion::Internal::SettingsPageWidget @@ -10267,14 +8795,6 @@ Wstępnie wybiera wersję desktopową Qt do budowania aplikacji (jeśli jest dos Project Status Stan projektu - - Checks out a Subversion repository and tries to load the contained project. - Wyciąga repozytorium Subversion i próbuje załadować zawarty projekt. - - - Subversion Checkout - Kopia robocza Subversion - Meta+S,Meta+D Meta+S,Meta+D @@ -10395,10 +8915,6 @@ Wstępnie wybiera wersję desktopową Qt do budowania aplikacji (jeśli jest dos No subversion executable specified. Nie podano komendy programu subversion. - - No subversion executable specified! - Nie podano komendy programu subversion! - Subversion::Internal::SubversionSubmitEditor @@ -10409,14 +8925,18 @@ Wstępnie wybiera wersję desktopową Qt do budowania aplikacji (jeśli jest dos TextEditor::BaseFileFind - - Search - Wyszukiwanie - Searching Przeszukiwanie + + %n occurrences replaced. + + Zastąpiono %n wystąpienie. + Zastąpiono %n wystąpienia. + Zastąpiono %n wystąpień. + + List of comma separated wildcard filters Lista filtrów z dżokerami oddzielona przecinkami @@ -10426,23 +8946,8 @@ Wstępnie wybiera wersję desktopową Qt do budowania aplikacji (jeśli jest dos Przerwano zastępowanie. - - TextEditor::BaseTextDocument - - Opening file - Otwieranie pliku - - TextEditor::BaseTextEditor - - Line: %1, Col: %2 - Linia: %1, kolumna: %2 - - - Line: 9999, Col: 999 - Linia: 9999, kolumna: 999 - A highlight definition was not found for this file. Would you like to try to find one? Definicja podświetleń dla tego pliku nie została znaleziona. Czy chcesz spróbować ją znaleźć? @@ -10492,10 +8997,6 @@ Wstępnie wybiera wersję desktopową Qt do budowania aplikacji (jeśli jest dos File "%1": Plik "%1": - - File '%1': - Plik "%1": - File path: %1 %2 @@ -10574,390 +9075,6 @@ Wstępnie wybiera wersję desktopową Qt do budowania aplikacji (jeśli jest dos TextEditor::TextEditorActionHandler - - &Undo - &Cofnij - - - &Redo - &Przywróć - - - Select Encoding... - Wybierz kodowanie... - - - Auto-&indent Selection - Sformatuj wc&ięcia w zaznaczonym tekście - - - Ctrl+I - Ctrl+I - - - &Rewrap Paragraph - Zawiń &paragraf - - - &Visualize Whitespace - Pokazuj &białe znaki - - - Clean Whitespace - Usuń końcowe białe znaki - - - Enable Text &Wrapping - Za&wijanie tekstu - - - Ctrl+/ - Ctrl+/ - - - Cut &Line - Wytnij &linię - - - Shift+Del - Shift+Del - - - Delete &Line - Usuń &linię - - - Delete Word from Cursor On - Usuń słowo począwszy od kursora - - - Delete Word up to Cursor - Usuń słowo kończąc na kursorze - - - Ctrl+< - Ctrl+< - - - Ctrl+> - Ctrl+> - - - Toggle &Fold All - &Zwiń / rozwiń wszystko - - - Increase Font Size - Zwiększ rozmiar czcionki - - - Ctrl++ - Ctrl++ - - - Decrease Font Size - Zmniejsz rozmiar czcionki - - - Ctrl+- - Ctrl+- - - - Reset Font Size - Przywróć domyślny rozmiar czcionki - - - Ctrl+0 - Ctrl+0 - - - Go to Block Start - Przejdź do początku bloku - - - Go to Block End - Przejdź do końca bloku - - - Ctrl+[ - Ctrl+[ - - - Toggle Comment &Selection - Wykomentuj / odkomentuj zaznaczony tek&st - - - Meta+E, R - Meta+E, R - - - Ctrl+E, R - Ctrl+E, R - - - Meta+E, Meta+V - Meta+E, Meta+V - - - Ctrl+E, Ctrl+V - Ctrl+E, Ctrl+V - - - Meta+E, Meta+W - Meta+E, Meta+W - - - Ctrl+E, Ctrl+W - Ctrl+E, Ctrl+W - - - Copy &Line - Skopiuj &linię - - - Ctrl+Ins - Ctrl+Ins - - - Fold - Zwiń - - - Unfold - Rozwiń - - - Meta+0 - Meta+0 - - - Ctrl+] - Ctrl+] - - - Go to Block Start with Selection - Zaznacz do początku bloku - - - Ctrl+{ - Ctrl+{ - - - Go to Block End with Selection - Zaznacz do końca bloku - - - Ctrl+} - Ctrl+} - - - Select Block Up - Zaznacz zewnętrzny blok - - - Ctrl+U - Ctrl+U - - - Select Block Down - Zaznacz wewnętrzny blok - - - Move Line Up - Przenieś linię w górę - - - Ctrl+Shift+Up - Ctrl+Shift+Up - - - Move Line Down - Przenieś linię w dół - - - Ctrl+Shift+Down - Ctrl+Shift+Down - - - Copy Line Up - Skopiuj linię i wstaw powyżej - - - Ctrl+Alt+Up - Ctrl+Alt+Up - - - Copy Line Down - Skopiuj linię i wstaw poniżej - - - Ctrl+Alt+Down - Ctrl+Alt+Down - - - Join Lines - Złącz linie - - - Ctrl+J - Ctrl+J - - - Insert Line Above Current Line - Wstaw linię ponad bieżącą linią - - - Ctrl+Shift+Return - Ctrl+Shift+Return - - - Insert Line Below Current Line - Wstaw linię pod bieżącą linią - - - Ctrl+Return - Ctrl+Return - - - Uppercase Selection - Zastąp wielkimi literami - - - Alt+Shift+U - Alt+Shift+U - - - Meta+Shift+U - Meta+Shift+U - - - Lowercase Selection - Zastąp małymi literami - - - Alt+U - Alt+U - - - Meta+U - Meta+U - - - Paste from Clipboard History - Wklej z historii schowka - - - Ctrl+Shift+V - Ctrl+Shift+V - - - Indent - Dodaj wcięcie - - - Unindent - Usuń wcięcie - - - Follow Symbol Under Cursor - Podąż za symbolem pod kursorem - - - Follow Symbol Under Cursor in Next Split - Podąż za symbolem pod kursorem w sąsiadującym oknie - - - Meta+E, F2 - Meta+E, F2 - - - Ctrl+E, F2 - Ctrl+E, F2 - - - Jump To File Under Cursor - Skocz do pliku pod kursorem - - - Go to Line Start - Przejdź do początku linii - - - Go to Line End - Przejdź do końca linii - - - Go to Next Line - Przejdź do następnej linii - - - Go to Previous Line - Przejdź do poprzedniej linii - - - Go to Previous Character - Przejdź do poprzedniego znaku - - - Go to Next Character - Przejdź do następnego znaku - - - Go to Previous Word - Przejdź do poprzedniego słowa - - - Go to Next Word - Przejdź do następnego słowa - - - Go to Previous Word Camel Case - Przejdź do poprzedniego słowa w zbitce Camel Case - - - Go to Next Word Camel Case - Przejdź do następnego słowa w zbitce Camel Case - - - Go to Line Start with Selection - Zaznacz do początku linii - - - Go to Line End with Selection - Zaznacz do końca linii - - - Go to Next Line with Selection - Zaznacz do następnej linii - - - Go to Previous Line with Selection - Zaznacz do poprzedniej linii - - - Go to Previous Character with Selection - Zaznacz do poprzedniego znaku - - - Go to Next Character with Selection - Zaznacz do następnego znaku - - - Go to Previous Word with Selection - Zaznacz do poprzedniego słowa - - - Go to Next Word with Selection - Zaznacz do następnego słowa - - - Go to Previous Word Camel Case with Selection - Zaznacz do poprzedniego słowa w zbitce Camel Case - - - Go to Next Word Camel Case with Selection - Zaznacz do następnego słowa w zbitce Camel Case - <line>:<column> <linia>:<kolumna> @@ -10965,30 +9082,6 @@ Wstępnie wybiera wersję desktopową Qt do budowania aplikacji (jeśli jest dos TextEditor::Internal::TextEditorPlugin - - Creates a text file. The default file extension is <tt>.txt</tt>. You can specify a different extension as part of the filename. - Tworzy plik tekstowy. Domyślnym rozszerzeniem pliku jest <tt>.txt</tt>. Istnieje możliwość podania innego rozszerzenia jako część nazwy pliku. - - - Text File - Plik tekstowy - - - General - Ogólne - - - Creates a scratch buffer using a temporary file. - Tworzy brudnopis używając tymczasowego pliku. - - - Scratch Buffer - Brudnopis - - - Triggers a completion in this scope - Przełącza uzupełnianie kodu w tym zakresie - Ctrl+Space Ctrl+Space @@ -10997,10 +9090,6 @@ Wstępnie wybiera wersję desktopową Qt do budowania aplikacji (jeśli jest dos Meta+Space Meta+Space - - Triggers a quick fix in this scope - Uaktywnia w tym zakresie szybką poprawkę - Trigger Completion Rozpocznij uzupełnianie @@ -11088,6 +9177,14 @@ Wstępnie wybiera wersję desktopową Qt do budowania aplikacji (jeśli jest dos Parentheses Nawiasy + + Mismatched Parentheses + Niedopasowane nawiasy + + + Displayed when mismatched parentheses, square brackets, or curly brackets are found. + Wyświetlane, gdy znaleziono niedopasowane nawiasy okrągłe, kwadratowe lub klamrowe. + Current Line Bieżąca linia @@ -11304,10 +9401,6 @@ Użyte do tekstu, jeśli inne reguły nie mają zastosowania. Keyword Słowo kluczowe - - Reserved keywords of the programming language. - Zarezerwowane słowa kluczowe języka programowania. - Operator Operator @@ -11459,58 +9552,20 @@ Nie zostanie zastosowane do białych znaków w komentarzach i ciągach znakowych Stosowane do dodanych znaków (w edytorze różnic wyświetlającym zawartość sąsiadująco). - Behavior - Zachowanie - - - Display - Wyświetlanie - - - - VcsBase::BaseCheckoutWizard - - Cannot Open Project - Nie można otworzyć projektu + Log Change Line + Linia logu zmian - Failed to open project in '%1'. - Nie można otworzyć projektu w "%1". + Applied to lines describing changes in VCS log. + Stosowane do linii opisujących zmiany w logu systemu kontroli wersji. - Could not find any project files matching (%1) in the directory '%2'. - Nie można odnaleźć żadnych plików z projektami, pasujących do (%1) w katalogu "%2". - - - The Project Explorer is not available. - Przeglądarka projektów nie jest dostępna. - - - '%1' does not exist. - "%1" nie istnieje. - - - - VcsBase::Internal::CheckoutProgressWizardPage - - Checkout - Kopia robocza - - - No job running, please abort. - Brak uruchomionych zadań, przerwij. - - - Checkout started... - Rozpoczęto tworzenie kopii roboczej... - - - Failed. - Niepoprawnie zakończone. + Behavior + Zachowanie - Succeeded. - Poprawnie zakończone. + Display + Wyświetlanie @@ -11527,18 +9582,10 @@ Nie zostanie zastosowane do białych znaków w komentarzach i ciągach znakowych Alias email Alias email - - E-mail - Email - Alias Alias - - Alias e-mail - Alias e-mail - Nicknames Przydomki @@ -11566,29 +9613,6 @@ Nie zostanie zastosowane do białych znaków w komentarzach i ciągach znakowych Ogólne - - VcsBase::VcsBaseOutputWindow - - Open "%1" - Otwórz "%1" - - - Clear - Wyczyść - - - Version Control - System kontroli wersji - - - Executing: %1 %2 - Wykonywanie: %1 %2 - - - Executing in %1: %2 %3 - Wykonywanie w %1: %2 %3 - - VcsBase::VcsBaseSubmitEditor @@ -11627,30 +9651,11 @@ Nie zostanie zastosowane do białych znaków w komentarzach i ciągach znakowych The check script "%1" crashed. Skrypt sprawdzający "%1" zakończył pracę błędem. - - The check script '%1' crashed. - Skrypt sprawdzający "%1" zakończył pracę błędem. - - - The check script '%1' could not be started: %2 - Nie można uruchomić skryptu sprawdzającego "%1": %2 - - - The check script '%1' timed out. - Skrypt sprawdzający "%1" bez odpowiedzi. - The check script returned exit code %1. Skrypt sprawdzający zwrócił kod wyjściowy %1. - - Welcome::Internal::CommunityWelcomePage - - News && Support - Nowiny i wsparcie - - BookmarkWidget @@ -11677,14 +9682,6 @@ Nie zostanie zastosowane do białych znaków w komentarzach i ciągach znakowych Rename Bookmark Zmień nazwę zakładki - - Add - Dodaj - - - Remove - Usuń - BookmarkManager @@ -11718,92 +9715,29 @@ Nie zostanie zastosowane do białych znaków w komentarzach i ciągach znakowych HelpViewer - - Error 404... - Błąd 404... - - - The page could not be found! - Nie można odnaleźć strony! - - - <li>Check that you have one or more documentation sets installed.</li> - <li>Sprawdź, czy zainstalowałeś przynajmniej jeden zestaw dokumentacji.</li> - - - <li>Check that you have installed the appropriate browser plug-in to support the file your loading.</li> - <li>Sprawdź, czy zainstalowałeś odpowiednią wtyczkę do przeglądarki, która obsługuje ładowanie tego pliku</li> - - - <li>If you try to access a public URL, make sure to have a network connection.</li> - <li>Dostęp do publicznego URL: upewnij się, że masz dostęp do sieci.</li> - - - <li>If your computer or network is protected by a firewall or proxy, make sure the application is permitted to access the network.</li> - <li>Jeśli twój komputer lub sieć są za zaporą sieciową, upewnij się, że aplikacja ma prawo dostępu do sieci.</li> - Open Link as New Page Otwórz odsyłacz na nowej stronie - - IndexWindow - - &Look for: - Wy&szukaj: - - - Open Link - Otwórz odsyłacz - - - Open Link as New Page - Otwórz odsyłacz na nowej stronie - - MimeType CMake Project file Plik projektu CMake - - C Source file - Plik źródłowy C - - - C Header file - Plik nagłówkowy C - - - C++ Header file - Plik nagłówkowy C++ - C++ header Plik nagłówkowy C++ - - C++ Source file - Plik źródłowy C++ - C++ source code Kod źródłowy C++ - - Objective-C source code - Kod źródłowy Objective-C - CVS submit template Szablon wrzucanych zmian CVS - - Qt Designer file - Plik Qt Designer - Generic Qt Creator Project file Ogólny plik projektu Qt Creator @@ -11820,10 +9754,22 @@ Nie zostanie zastosowane do białych znaków w komentarzach i ciągach znakowych Generic Project Configuration File Ogólny plik z konfiguracją projektu + + WebP Image file + + Perforce submit template Szablon wrzucanych zmian Perforce + + Python source file without console + + + + Qt Creator Python project file + + QML file Plik QML @@ -11837,24 +9783,24 @@ Nie zostanie zastosowane do białych znaków w komentarzach i ciągach znakowych Plik nagłówkowy projektu Qt - message catalog - katalog komunikatów + ClearCase submit template + Szablon wrzucanych zmian ClearCase - Qt Script file - Plik ze skryptem Qt + C source code + Kod źródłowy C - Java Source file - Plik źródłowy Java + NVIDIA CUDA C source code + Kod źródłowy NVIDIA CUDA C - Automake based Makefile - + C header + Plik nagłówkowy C - ClearCase submit template - Szablon wrzucanych zmian ClearCase + Qt MOC file + Plik Qt MOC Objective-C++ source code @@ -11888,62 +9834,6 @@ Nie zostanie zastosowane do białych znaków w komentarzach i ciągach znakowych GLSL/ES Geometry Shader file Plik geometry shadera GLSL/ES - - BMP image - Plik graficzny BMP - - - GIF image - Plik graficzny GIF - - - ICO image - Plik graficzny ICO - - - JPEG image - Plik graficzny JPEG - - - MNG video - Plik wideo MNG - - - PBM image - Plik graficzny PBM - - - PGM image - Plik graficzny PGM - - - PNG image - Plik graficzny PNG - - - PPM image - Plik graficzny PPM - - - SVG image - Plik graficzny SVG - - - TIFF image - Plik graficzny TIFF - - - XBM image - Plik graficzny XBM - - - XPM image - Plik graficzny XPM - - - Python Source File - Plik źródłowy Pythona - Qt Project configuration file Plik z konfiguracją projektu Qt @@ -11980,6 +9870,18 @@ Nie zostanie zastosowane do białych znaków w komentarzach i ciągach znakowych Qt Project feature file + + Android manifest file + + + + Linguist translated messages (machine-readable) + + + + Linguist message catalog + + Qt Resource file Plik z zasobami Qt @@ -11992,14 +9894,6 @@ Nie zostanie zastosowane do białych znaków w komentarzach i ciągach znakowych Qt Creator task list file Plik z listą zadań Qt Creatora - - Plain text document - Dokument tekstowy - - - XML document - Dokument XML - Assembler Asembler @@ -12008,10 +9902,6 @@ Nie zostanie zastosowane do białych znaków w komentarzach i ciągach znakowych Qt Creator Generic Assembler Ogólny asembler Qt Creatora - - Differences between files - Różnice pomiędzy plikami - CppTools::Internal::CppLocatorFilter @@ -12260,7 +10150,7 @@ Możesz odłożyć zmiany lub je porzucić. Log count: - Licznik loga: + Licznik logu: Timeout: @@ -12419,19 +10309,19 @@ Możesz odłożyć zmiany lub je porzucić. Always save when leaving subcomponent in bread crumb - + Zawsze zachowuj przy opuszczaniu podkomponentu QML Emulation Layer - + Emulator QML If you do not select this checkbox, Qt Quick Designer uses the QML emulation layer (QML Puppet) built with the Qt configured in the build and run kit for the project. - + Jeśli ta opcja nie jest wybrana, Qt Quick Designer używa Emulatora QML (QML Puppet) zbudowanego przy pomocy Qt skonfigurowanego dla projektu. Always use the QML emulation layer provided by Qt Creator - + Zawsze używaj emulatora QML dostarczonego z Qt Creatorem @@ -12539,10 +10429,6 @@ Możesz odłożyć zmiany lub je porzucić. Cleaning "%1" Czyszczenie %1 - - Cleaning %1 - Czyszczenie %1 - ExtensionSystem::PluginDetailsView @@ -12590,6 +10476,34 @@ Możesz odłożyć zmiany lub je porzucić. Plugin is not available on this platform. Wtyczka nie jest dostępna na tej platformie. + + Path: %1 +Plugin is not available on this platform. + Ścieżka: %1 +Wtyczka nie jest dostępna dla tej platformy. + + + Path: %1 +Plugin is enabled as dependency of an enabled plugin. + Ścieżka: %1 +Wtyczka jest włączona przez zależność od innej wtyczki. + + + Path: %1 +Plugin is enabled by command line argument. + Ścieżka: %1 +Wtyczka jest włączona przez argument linii komend. + + + Path: %1 +Plugin is disabled by command line argument. + Ścieżka: %1 +Wtyczka jest wyłączona przez argument linii komend. + + + Path: %1 + Ścieżka:: %1 + Plugin is required. Wymagana wtyczka. @@ -12598,6 +10512,38 @@ Możesz odłożyć zmiany lub je porzucić. Load on startup Załadowany przy uruchomieniu + + Enabling Plugins + Włączanie wtyczek + + + Enabling +%1 +will also enable the following plugins: + +%2 + Włączenie +%1 +włączy również następujące wtyczki: + +%2 + + + Disabling Plugins + Wyłączanie wtyczek + + + Disabling +%1 +will also disable the following plugins: + +%2 + Wyłączenie +%1 +wyłączy również następujące wtyczki: + +%2 + QmlJS::Check @@ -12633,13 +10579,6 @@ Użyj właściwości importPaths dla projektów qmlproject aby dodać ścieżki Moduł QML zawiera wtyczki C++, trwa sczytywanie informacji o typach... - - Utils::FileWizardDialog - - Location - Położenie - - Utils::fileDeletedPrompt @@ -12715,14 +10654,6 @@ Użyj właściwości importPaths dla projektów qmlproject aby dodać ścieżki Default display name for the cmake make step. Make - - Qt Creator needs a compiler set up to build. Configure a compiler in the kit options. - Do budowy Qt Creator wymaga ustawionego kompilatora. Skonfiguruj go w opcjach zestawu narzędzi. - - - Configuration is faulty. Check the Issues view for details. - Błędna konfiguracja. Sprawdź szczegóły w widoku "Problemy budowania". - CMakeProjectManager::Internal::MakeStepFactory @@ -12762,22 +10693,6 @@ Użyj właściwości importPaths dla projektów qmlproject aby dodać ścieżki Export... Eksportuj... - - Target Identifier - Identyfikator celu - - - Reset to default. - Przywraca domyślne. - - - Reset - Reset - - - Target: - Cel: - Label Etykieta @@ -12849,14 +10764,6 @@ Użyj właściwości importPaths dla projektów qmlproject aby dodać ścieżki Split Podziel - - Copy Full Path to Clipboard - Skopiuj pełną ścieżkę do schowka - - - Copy File Name to Clipboard - Skopiuj nazwę pliku do schowka - Drag to drag documents between splits "drag to drag" doesn't really explain anything- maybe "drag to move" @@ -12901,11 +10808,11 @@ Użyj właściwości importPaths dla projektów qmlproject aby dodać ścieżki CVS Command Log Editor - Edytor loga komend CVS + Edytor logu komend CVS CVS File Log Editor - Edytor loga plików CVS + Edytor logu plików CVS CVS Annotation Editor @@ -12917,20 +10824,16 @@ Użyj właściwości importPaths dla projektów qmlproject aby dodać ścieżki Git Command Log Editor - Edytor loga komend Git + Edytor logu komend Git Git File Log Editor - Edytor loga plików Git + Edytor logu plików Git Git Annotation Editor Edytor adnotacji Git - - Git Diff Editor - Edytor różnic Git - Git Commit Editor Edytor wrzucanych zmian Git @@ -12945,7 +10848,7 @@ Użyj właściwości importPaths dla projektów qmlproject aby dodać ścieżki Mercurial File Log Editor - Edytor loga plików Mercurial + Edytor logu plików Mercurial Mercurial Annotation Editor @@ -12965,7 +10868,7 @@ Użyj właściwości importPaths dla projektów qmlproject aby dodać ścieżki Perforce Log Editor - Edytor loga plików Perforce + Edytor logu plików Perforce Perforce Diff Editor @@ -12981,19 +10884,15 @@ Użyj właściwości importPaths dla projektów qmlproject aby dodać ścieżki Subversion File Log Editor - Edytor loga plików Subversion + Edytor logu plików Subversion Subversion Annotation Editor Edytor adnotacji Subversion - - Subversion Diff Editor - Edytor różnic Subversion - Bazaar File Log Editor - Edytor loga plików Bazaar + Edytor logu plików Bazaar Bazaar Annotation Editor @@ -13013,7 +10912,7 @@ Użyj właściwości importPaths dla projektów qmlproject aby dodać ścieżki ClearCase File Log Editor - Edytor loga plików ClearCase + Edytor logu plików ClearCase ClearCase Annotation Editor @@ -13024,13 +10923,6 @@ Użyj właściwości importPaths dla projektów qmlproject aby dodać ścieżki Edytor różnic ClearCase - - Cvs::Internal::CvsEditor - - Annotate revision "%1" - Dołącz adnotację do poprawki "%1" - - Debugger::Internal::CdbOptionsPage @@ -13049,64 +10941,12 @@ Użyj właściwości importPaths dla projektów qmlproject aby dodać ścieżki Plik - - Debugger::Internal::SnapshotWindow - - Snapshots - Zrzuty - - - - Designer::Internal::FormEditorFactory - - This file can only be edited in <b>Design</b> mode. - Ten plik może być modyfikowany jedynie w trybie <b>Design</b>. - - - - Designer::Internal::FormFileWizardDialog - - Location - Położenie - - - - FakeVim::Internal::FakeVimExCommandsPage - - Ex Command Mapping - Mapowanie komend Ex - - - FakeVim - FakeVim - - - Ex Trigger Expression - Wyzwalacz Ex - - - Regular expression: - Wyrażenie regularne: - - - Ex Command - Komenda Ex - - GenericProjectManager::Internal::GenericMakeStep Make Make - - Qt Creator needs a compiler set up to build. Configure a compiler in the kit options. - Do budowy Qt Creator wymaga ustawionego kompilatora. Skonfiguruj go w opcjach zestawu narzędzi. - - - Configuration is faulty. Check the Issues view for details. - Błędna konfiguracja. Sprawdź szczegóły w widoku "Problemy budowania". - Override %1: Przesłoń %1: @@ -13120,25 +10960,6 @@ Użyj właściwości importPaths dla projektów qmlproject aby dodać ścieżki Produkty docelowe: - - Git::Internal::GitEditor - - Blame %1 - Blame %1 - - - Reset - Reset - - - All changes in working directory will be discarded. Are you sure? - Wszystkie zmiany w katalogu roboczym zostaną utracone. Czy kontynuować? - - - Revert Change %1 - Odwróć zmianę %1 - - Help @@ -13164,42 +10985,6 @@ Użyj właściwości importPaths dla projektów qmlproject aby dodać ścieżki Help::Internal::HelpViewer - - <title>about:blank</title> - <title>o:pusty</title> - - - <html><head><meta http-equiv="content-type" content="text/html; charset=UTF-8"><title>Error 404...</title></head><body><div align="center"><br/><br/><h1>The page could not be found</h1><br/><h3>'%1'</h3></div></body></html> - <html><head><meta http-equiv="content-type" content="text/html; charset=UTF-8"><title>Błąd 404...</title></head><body><div align="center"><br/><br/><h1>Nie można odnaleźć strony</h1><br/><h3>'%1'</h3></div></body></html> - - - Open Link - Otwórz odsyłacz - - - Open Link as New Page - Otwórz odsyłacz na nowej stronie - - - Copy Link - Skopiuj odsyłacz - - - Copy - Skopiuj - - - Reload - Przeładuj - - - Error loading: %1 - Błąd ładowania: %1 - - - Unknown or unsupported Content! - Nieznana lub nieobsługiwana zawartość! - Unknown or unsupported content. Nieznana lub nieobsługiwana zawartość. @@ -13223,40 +11008,6 @@ Użyj właściwości importPaths dla projektów qmlproject aby dodać ścieżki Zamknij wszystko z wyjątkiem %1 - - Mercurial::Internal::CloneWizard - - Cloning - Klonowanie - - - Cloning started... - Rozpoczęto klonowanie... - - - Clones a Mercurial repository and tries to load the contained project. - Klonuje repozytorium Mercurial i próbuje załadować zawarty projekt. - - - Mercurial Clone - Klon repozytorium Mercurial - - - - Mercurial::Internal::CloneWizardPage - - Location - Położenie - - - Specify repository URL, checkout directory and path. - Podaj URL repozytorium, nazwę katalogu z kopią roboczą i ścieżkę do niego. - - - Clone URL: - URL klonu: - - Mercurial::Internal::CommitEditor @@ -13290,17 +11041,6 @@ Użyj właściwości importPaths dla projektów qmlproject aby dodać ścieżki Mercurial - - Mercurial::Internal::MercurialEditor - - Annotate %1 - Dołącz adnotację do %1 - - - Annotate parent revision %1 - Dołącz adnotację do poprawki macierzystej "%1" - - Mercurial::Internal::MercurialPlugin @@ -13323,10 +11063,6 @@ Użyj właściwości importPaths dla projektów qmlproject aby dodać ścieżki Diff "%1" Pokaż różnice w "%1" - - Alt+H,Alt+D - Alt+H,Alt+D - Meta+H,Meta+D Meta+H,Meta+D @@ -13339,10 +11075,6 @@ Użyj właściwości importPaths dla projektów qmlproject aby dodać ścieżki Log "%1" Log "%1" - - Alt+H,Alt+L - Alt+H,Alt+L - Meta+H,Meta+L Meta+H,Meta+L @@ -13355,18 +11087,6 @@ Użyj właściwości importPaths dla projektów qmlproject aby dodać ścieżki Status "%1" Stan "%1" - - Alt+H,Alt+S - Alt+H,Alt+S - - - Clones a Mercurial repository and tries to load the contained project. - Klonuje repozytorium Mercurial i próbuje załadować zawarty projekt. - - - Mercurial Clone - Klon repozytorium Mercurial - Alt+G,Alt+D Alt+G,Alt+D @@ -13451,10 +11171,6 @@ Użyj właściwości importPaths dla projektów qmlproject aby dodać ścieżki Commit... Wrzuć... - - Alt+H,Alt+C - Alt+H,Alt+C - Meta+H,Meta+C Meta+H,Meta+C @@ -13538,8 +11254,8 @@ Użyj właściwości importPaths dla projektów qmlproject aby dodać ścieżki Nie podano programu do uruchomienia - "%1" timed out after %2ms. - "%1" bez odpowiedzi po %2ms. + "%1" timed out after %2 ms. + "%1" bez odpowiedzi po %2 ms. Unable to launch "%1": %2 @@ -13567,19 +11283,8 @@ Użyj właściwości importPaths dla projektów qmlproject aby dodać ścieżki Repozytorium "%1" nie istnieje. - - Perforce::Internal::PerforceEditor - - Annotate change list "%1" - Dołącz adnotację do listy zmian "%1" - - ProjectExplorer::BaseProjectWizardDialog - - Location - Położenie - untitled File path suggestion for a new project. If you choose to translate it, make sure it is a valid path name without blanks and using only ascii chars. @@ -13626,13 +11331,6 @@ Użyj właściwości importPaths dla projektów qmlproject aby dodać ścieżki Środowisko budowania - - BuildSettingsPanelFactory - - Build Settings - Ustawienia budowania - - BuildSettingsPanel @@ -13642,19 +11340,6 @@ Użyj właściwości importPaths dla projektów qmlproject aby dodać ścieżki ProjectExplorer::CustomWizard - - Details - Default short title for custom wizard page to be shown in the progress pane of the wizard. - Szczegóły - - - Creates a plain C project using qmake, not using the Qt library. - Tworzy zwykły projekt C używający qmake, nieużywający biblioteki Qt. - - - Creates a plain C++ project using qmake, not using the Qt library. - Tworzy zwykły projekt C++ używający qmake, nieużywający biblioteki Qt. - URI: URI: @@ -13671,90 +11356,14 @@ Użyj właściwości importPaths dla projektów qmlproject aby dodać ścieżki URL: URL: - - Creates an application descriptor file. - Tworzy plik deskryptora aplikacji. - - - Application descriptor - Deskryptor aplikacji - - - BlackBerry - BlackBerry - - - Creates an Qt5 application descriptor file. - Tworzy plik deskryptora aplikacji Qt5. - - - Qt5 Application descriptor - Deskryptor aplikacji Qt5 - - - Plain C Project - Zwykły projekt C - - - Non-Qt Project - Projekty nieużywające Qt - Other Project Inne projekty - - Creates a plain C project using CMake, not using the Qt library. - Tworzy zwykły projekt C używający CMake, nieużywający biblioteki Qt. - - - Plain C Project (CMake Build) - Zwykły projekt C (używający CMake) - - - Creates a plain C project using qbs. - Tworzy zwykły projekt C używający qbs. - - - Plain C Project (Qbs Build) - Zwykły projekt C (używający Qbs) - - - Creates a plain (non-Qt) C++ project using qbs. - Tworzy zwykły projekt C++ (bez Qt) używający qbs. - - - Plain C++ Project (Qbs Build) - Zwykły projekt C++ (używający Qbs) - - - Plain C++ Project - Zwykły projekt C++ - - - Creates a plain C++ project using CMake, not using the Qt library. - Tworzy zwykły projekt C++ używający CMake, nieużywający biblioteki Qt. - - - Plain C++ Project (CMake Build) - Zwykły projekt C++ (używający CMake) - - - Libraries - Biblioteki - Qt Creator Plugin Wtyczka Qt Creatora - - Creates a Cascades application for BlackBerry 10. - Tworzy aplikację Cascades dla BlackBerry 10. - - - BlackBerry Cascades Application - Aplikacja Cascades dla BlackBerry - Creates a qmake-based test project for which a code snippet can be entered. Tworzy testowy projekt, bazujący na qmake, w który można wstawić urywek kodu. @@ -13763,10 +11372,6 @@ Użyj właściwości importPaths dla projektów qmlproject aby dodać ścieżki Code Snippet Urywek kodu - - Other Projects - Inne projekty - Snippet Parameters Parametry urywka @@ -13882,13 +11487,6 @@ Użyj właściwości importPaths dla projektów qmlproject aby dodać ścieżki <Brak innych projektów w tej sesji> - - DependenciesPanel - - Dependencies - Zależności - - DependenciesPanelFactory @@ -13903,13 +11501,6 @@ Użyj właściwości importPaths dla projektów qmlproject aby dodać ścieżki Edytor - - EditorSettingsPanel - - Editor - Edytor - - ProjectExplorer::Internal::FolderNavigationWidget @@ -13920,10 +11511,6 @@ Użyj właściwości importPaths dla projektów qmlproject aby dodać ścieżki Open "%1" Otwórz "%1" - - Open with - Otwórz przy pomocy - Open Parent Folder Otwórz katalog wyżej @@ -14061,14 +11648,6 @@ Użyj właściwości importPaths dla projektów qmlproject aby dodać ścieżki Library Biblioteka - - Applications - Aplikacje - - - Libraries - Biblioteki - Import Project Projekty zaimportowane @@ -14212,14 +11791,6 @@ Użyj właściwości importPaths dla projektów qmlproject aby dodać ścieżki Title of navigator view Nawigator - - Become first sibling of parent (CTRL + Left). - Przenieś jako najbliższe rodzeństwo rodzica (CTRL + Left). - - - Become child of first sibling (CTRL + Right). - Przenieś jako dziecko najbliższego rodzeństwa (CTRL + Right). - Become last sibling of parent (CTRL + Left). Przenieś jako rodzeństwo rodzica i umieść przed nim (CTRL + Left). @@ -14338,14 +11909,6 @@ Użyj właściwości importPaths dla projektów qmlproject aby dodać ścieżki QmlJSEditor::Internal::QmlJSEditorPlugin - - Creates a JavaScript file. - Tworzy plik JavaScript. - - - JS File - Plik JS - Rename Symbol Under Cursor Zmień nazwę symbolu pod kursorem @@ -14366,6 +11929,10 @@ Użyj właściwości importPaths dla projektów qmlproject aby dodać ścieżki Reformat File Przeformatuj plik + + Inspect API for Element Under Cursor + + QML QML @@ -14378,22 +11945,6 @@ Użyj właściwości importPaths dla projektów qmlproject aby dodać ścieżki Find Usages Znajdź użycia - - Creates a QML file with boilerplate code, starting with "import QtQuick 1.1". - Tworzy plik QML z wstępnym kodem rozpoczynającym się od "import QtQuick 1.1". - - - QML File (Qt Quick 1) - Plik QML (Qt Quick 1) - - - Creates a QML file with boilerplate code, starting with "import QtQuick 2.0". - Tworzy plik QML z wstępnym kodem rozpoczynającym się od "import QtQuick 2.0". - - - QML File (Qt Quick 2) - Plik QML (Qt Quick 2) - Ctrl+Shift+U Ctrl+Shift+U @@ -14428,10 +11979,6 @@ Użyj właściwości importPaths dla projektów qmlproject aby dodać ścieżki QmlProjectManager::Internal::Manager - - Failed opening project '%1': Project is not a file - Nie można otworzyć projektu "%1": Ścieżka projektu nie wskazuje na plik - Failed opening project "%1": Project is not a file. Nie można otworzyć projektu "%1": Ścieżka projektu nie wskazuje na plik. @@ -14494,21 +12041,13 @@ Użyj właściwości importPaths dla projektów qmlproject aby dodać ścieżki System System - - Qt %1 in PATH (%2) - Qt %1 w PATH (%2) - - - Qt %1 (%2) - Qt %1 (%2) - Qt %{Qt:Version} in PATH (%2) - Qt %{Qt:Wersja} w PATH (%2) + Qt %{Qt:Wersja} w PATH (%2) Qt %{Qt:Version} (%2) - + Qt %{Qt:Version} dla %2 Qt version is not properly installed, please run make install @@ -14546,22 +12085,6 @@ Użyj właściwości importPaths dla projektów qmlproject aby dodać ścieżki qmake "%1" is not an executable. qmake "%1" nie jest plikiem wykonywalnym. - - Cannot start '%1': %2 - Nie można uruchomić "%1": %2 - - - Timeout running '%1' (%2 ms). - Przekroczony czas oczekiwania na odpowiedź od uruchomionego "%1" (%2 ms). - - - '%1' crashed. - "%1" zakończył pracę błędem. - - - qmake '%1' is not an executable. - qmake '%1' nie jest plikiem wykonywalnym. - No qmlviewer installed. Brak zainstalowanego "qmlviewer". @@ -14575,21 +12098,6 @@ Użyj właściwości importPaths dla projektów qmlproject aby dodać ścieżki No qmlscene installed. Brak zainstalowanego "qmlscene". - - Qt Simulator - Qt Version is meant for Qt Simulator - Symulator Qt - - - Cannot determine the installation path for Qt version '%1'. - Nie można określić ścieżki instalacji Qt wersji "%1". - - - Building helper(s) with toolchain '%1'... - - Budowanie asystenta z zestawem narzędzi "%1"... - - Cannot determine the installation path for Qt version "%1". Nie można określić ścieżki instalacji Qt w wersji "%1". @@ -14619,17 +12127,6 @@ Użyj właściwości importPaths dla projektów qmlproject aby dodać ścieżki Wbudowany linux - - QmakeProjectManager::Internal::BaseQmakeProjectWizardDialog - - Modules - Moduły - - - Kits - Zestawy narzędzi - - QmakeProjectManager::Internal::TestWizard @@ -14647,17 +12144,6 @@ Użyj właściwości importPaths dla projektów qmlproject aby dodać ścieżki This wizard generates a Qt Unit Test consisting of a single source file with a test class. Ten kreator generuje test jednostkowy Qt składający się z pojedynczego pliku źródłowego z klasą testową. - - Details - Szczegóły - - - - Subversion::Internal::SubversionEditor - - Annotate revision "%1" - Dołącz adnotację do poprawki "%1" - TextEditor @@ -14672,18 +12158,10 @@ Użyj właściwości importPaths dla projektów qmlproject aby dodać ścieżki Version Control System kontroli wersji - - The file '%1' could not be deleted. - Nie można usunąć pliku "%1". - Choose Repository Directory Wybierz katalog repozytorium - - The directory '%1' is already managed by a version control system (%2). Would you like to specify another directory? - Katalog "%1" jest już zarządzany przez system kontroli wersji (%2). Czy chcesz podać inny katalog? - The file "%1" could not be deleted. Nie można usunąć pliku "%1". @@ -14704,26 +12182,6 @@ Użyj właściwości importPaths dla projektów qmlproject aby dodać ścieżki Repository Creation Failed Błąd podczas tworzenia repozytorium - - There is no patch-command configured in the common 'Version Control' settings. - Brak skonfigurowanej komendy "patch" we wspólnych ustawieniach systemów kontroli wersji. - - - Unable to launch '%1': %2 - Nie można uruchomić "%1": %2 - - - A timeout occurred running '%1' - Przekroczony czas oczekiwania na odpowiedź od uruchomionego "%1" - - - '%1' crashed. - "%1" zakończył pracę błędem. - - - '%1' failed (exit code %2). - '%1' zakończone błędem (kod wyjściowy %2). - A version control repository has been created in %1. Repozytorium systemu kontroli wersji została utworzona w %1. @@ -14819,10 +12277,6 @@ Użyj właściwości importPaths dla projektów qmlproject aby dodać ścieżki TextEditSpecifics - - Format - Format - Text Color Kolor tekstu @@ -14831,17 +12285,9 @@ Użyj właściwości importPaths dla projektów qmlproject aby dodać ścieżki Selection Color Kolor selekcji - - Text Input - Wejście tekstu - Utils::FancyMainWindow - - Locked - Zablokowany - Reset to Default Layout Przywróć domyślne rozmieszczenie @@ -14913,23 +12359,12 @@ które można ustawić poniżej. %1 - Błąd konfiguracji - - CppEditor - - C++ - C++ - - Debugger::Internal::PdbEngine Running requested... Zażądano uruchomienia... - - Unable to start pdb '%1': %2 - Nie można rozpocząć pdb "%1": %2 - Adapter start failed Nie można uruchomić adaptera @@ -14938,38 +12373,14 @@ które można ustawić poniżej. Python Error Błąd Pythona - - '%1' contains no identifier - "%1" nie zawiera identyfikatora - - - String literal %1 - Literał łańcuchowy %1 - - - Cowardly refusing to evaluate expression '%1' with potential side effects - Tchórzliwa odmowa obliczenia wyrażenia '%1' z możliwymi efektami ubocznymi - Pdb I/O Error Błąd wejścia / wyjścia Pdb - - The Pdb process failed to start. Either the invoked program '%1' is missing, or you may have insufficient permissions to invoke the program. - Nie można rozpocząć procesu Pdb. Brak programu "%1" albo brak wymaganych uprawnień aby go uruchomić. - Unable to start pdb "%1": %2 Nie można rozpocząć pdb "%1": %2 - - "%1" contains no identifier - "%1" nie zawiera identyfikatora - - - Cowardly refusing to evaluate expression "%1" with potential side effects - Tchórzliwa odmowa obliczenia wyrażenia "%1" z możliwymi efektami ubocznymi - The Pdb process failed to start. Either the invoked program "%1" is missing, or you may have insufficient permissions to invoke the program. Nie można rozpocząć procesu Pdb. Brak programu "%1" albo brak wymaganych uprawnień aby go uruchomić. @@ -15005,10 +12416,6 @@ które można ustawić poniżej. Switch To Przełącz sesję - - Switch to - Przełącz sesję - ProjectExplorer::Internal::TargetSelector @@ -15047,10 +12454,6 @@ które można ustawić poniżej. QmakeProjectManager::QmakeProject - - Evaluating - Ewaluowanie - Reading Project "%1" Odczyt projektu "%1" @@ -15071,18 +12474,6 @@ które można ustawić poniżej. The .pro file "%1" could not be parsed. Plik .pro "%1" nie może zostać sparsowany. - - The .pro file '%1' does not exist. - Plik projektu "%1" nie istnieje. - - - The .pro file '%1' is not part of the project. - Plik projektu "%1" nie jest częścią projektu. - - - The .pro file '%1' could not be parsed. - Plik projektu "%1" nie może zostać sparsowany. - QmakeProjectManager::QtVersion @@ -15165,14 +12556,6 @@ które można ustawić poniżej. %1 already exists. %1 już istnieje. - - Warning - Ostrzeżenie - - - Reparenting the component %1 here will cause the component %2 to be deleted. Do you want to proceed? - Przeniesienie komponentu %1 tutaj spowoduje usunięcie komponentu %2. Czy kontynuować? - QmlDesigner::InvalidArgumentException @@ -15258,10 +12641,6 @@ Identyfikatory muszą rozpoczynać się małą literą. Convert connect() to Qt 5 Style Skonwertuj "connect()" do stylu Qt 5 - - #include Header File - #include plik nagłówkowy - Add Local Declaration Dodaj lokalną deklarację @@ -15333,10 +12712,6 @@ Identyfikatory muszą rozpoczynać się małą literą. GenericProjectManager::Internal::Manager - - Failed opening project '%1': Project is not a file - Nie można otworzyć projektu "%1": Ścieżka projektu nie wskazuje na plik - Failed opening project "%1": Project is not a file. Nie można otworzyć projektu "%1": Ścieżka projektu nie wskazuje na plik. @@ -15372,25 +12747,6 @@ Identyfikatory muszą rozpoczynać się małą literą. Nieprzefiltrowane - - FakeVim::Internal::FakeVimHandler::Private - - Recursive mapping - Mapowanie rekurencyjne - - - Type Alt-V, Alt-V to quit FakeVim mode. - Naciśnij Alt-V, Alt-V aby wyjść z trybu FakeVim. - - - [New] - [Nowy] - - - Not an editor command: %1 - %1 nie jest komendą edytora - - ContextPaneWidgetBorderImage @@ -15549,10 +12905,6 @@ Identyfikatory muszą rozpoczynać się małą literą. ClassView::Internal::NavigationWidget - - Form - Formularz - Show Subprojects Pokaż podprojekty @@ -15560,15 +12912,6 @@ Identyfikatory muszą rozpoczynać się małą literą. Help::Internal::RemoteFilterOptions - - Prefix: - Przedrostek: - - - Limit to prefix - Ogranicz aktywność filtru: -aktywny tylko po wpisaniu przedrostka - Add Dodaj @@ -15581,10 +12924,6 @@ aktywny tylko po wpisaniu przedrostka Double-click to edit item. Kliknij dwukrotnie aby zmodyfikować element. - - Edit Filter Configuration - Konfiguracja filtra - ImageViewer::Internal::ImageViewerToolbar @@ -15765,26 +13104,6 @@ aktywny tylko po wpisaniu przedrostka Utils::SynchronousProcess - - The command '%1' finished successfully. - Komenda "%1" poprawnie zakończona. - - - The command '%1' terminated with exit code %2. - Komenda "%1" zakończona kodem wyjściowym %2. - - - The command '%1' terminated abnormally. - Komenda "%1" niepoprawnie zakończona. - - - The command '%1' could not be started. - Komenda "%1" nie może zostać uruchomiona. - - - The command '%1' did not respond within the timeout limit (%2 ms). - Komenda "%1" nie odpowiedziała w określonym czasie (%2 ms). - The command "%1" finished successfully. Komenda "%1" poprawnie zakończona. @@ -15802,8 +13121,8 @@ aktywny tylko po wpisaniu przedrostka Komenda "%1" nie może zostać uruchomiona. - The command "%1" did not respond within the timeout limit (%2 ms). - Komenda "%1" nie odpowiedziała w określonym czasie (%2 ms). + The command "%1" did not respond within the timeout limit (%2 s). + Komenda "%1" nie odpowiedziała w określonym czasie (%2 s). Process not Responding @@ -15817,10 +13136,6 @@ aktywny tylko po wpisaniu przedrostka The process "%1" is not responding. Proces "%1" nie odpowiada. - - The process '%1' is not responding. - Proces "%1" nie odpowiada. - Would you like to terminate it? Czy zakończyć go? @@ -15835,10 +13150,6 @@ aktywny tylko po wpisaniu przedrostka Core::Internal::CommandComboBox - - Activate %1 Pane - Uaktywnij panel %1 - Activate %1 View Uaktywnij widok %1 @@ -15846,18 +13157,6 @@ aktywny tylko po wpisaniu przedrostka Core::NavigationWidget - - Activate %1 Pane - Uaktywnij panel %1 - - - Hide Sidebar - Ukryj boczny pasek - - - Show Sidebar - Pokaż boczny pasek - Activate %1 View Uaktywnij widok %1 @@ -15872,6 +13171,11 @@ Server list was %2. Lista klienta: %1. Lista serwera: %2. + + Server requested invalid combination of key exchange and hashing algorithms. Key exchange algorithm list was: %1. +Hashing algorithm list was %2. + + CodePaster::NetworkProtocol @@ -15912,10 +13216,6 @@ Lista serwera: %2. C++ Symbols Symbole C++ - - Searching - Przeszukiwanie - Searching for Symbol Wyszukiwanie symbolu @@ -16046,18 +13346,6 @@ Flagi: %3 Break when JavaScript exception is thrown Przerwij po rzuceniu wyjątku JavaScript - - <html><head/><body><p>Determines how the path is specified when setting breakpoints:</p><ul><li><i>Use Engine Default</i>: Preferred setting of the debugger engine.</li><li><i>Use Full Path</i>: Pass full path, avoiding ambiguities should files of the same name exist in several modules. This is the engine default for CDB and LLDB.</li><li><i>Use File Name</i>: Pass the file name only. This is useful when using a source tree whose location does not match the one used when building the modules. It is the engine default for GDB as using full paths can be slow with this engine.</li></ul></body></html> - <html><head/><body><p>Określa sposób wyznaczania ścieżki podczas ustawiania pułapek:</p><ul><li><i>Używaj domyślnego silnika</i>: preferowane ustawienie silnika debuggera.</li><li><i>Używaj pełnej ścieżki</i>: przekazuj pełną ścieżkę, aby uniknąć niejednoznaczności, gdy istnieją pliki o tej samej nazwie w różnych modułach. Jest to domyślne ustawienie dla silników CDB i LLDB.</li><li><i>Używaj nazwy pliku</i>: przekazuj tylko nazwę pliku. Jest to pomocne w trakcie używania drzewa źródeł, którego położenie jest inne niż użyte podczas budowania modułu. Jest to domyślne ustawienie silnika GDB, ponieważ używanie pełnych ścieżek może go spowolnić.</li></ul></body></html> - - - Specifying the module (base name of the library or executable) -for function or file type breakpoints can significantly speed up -debugger start-up times (CDB, LLDB). - Podanie modułu (nazwy bazowej biblioteki lub pliku wykonywalnego) -dla funkcji bądź pułapek może znacząco przyspieszyć uruchomienie -debuggera (CDB, LLDB). - Edit Breakpoint Properties Zmodyfikuj właściwości pułapki @@ -16102,10 +13390,20 @@ debuggera (CDB, LLDB). &One shot only: Tylko &jeden raz: + + <p>Determines how the path is specified when setting breakpoints:</p><ul><li><i>Use Engine Default</i>: Preferred setting of the debugger engine.</li><li><i>Use Full Path</i>: Pass full path, avoiding ambiguities should files of the same name exist in several modules. This is the engine default for CDB and LLDB.</li><li><i>Use File Name</i>: Pass the file name only. This is useful when using a source tree whose location does not match the one used when building the modules. It is the engine default for GDB as using full paths can be slow with this engine.</li></ul> + <p>Określa sposób wyznaczania ścieżki podczas ustawiania pułapek:</p><ul><li><i>Używaj domyślnego silnika</i>: preferowane ustawienie silnika debuggera.</li><li><i>Używaj pełnej ścieżki</i>: przekazuj pełną ścieżkę, aby uniknąć niejednoznaczności, gdy istnieją pliki o tej samej nazwie w różnych modułach. Jest to domyślne ustawienie dla silników CDB i LLDB.</li><li><i>Używaj nazwy pliku</i>: przekazuj tylko nazwę pliku. Jest to pomocne w trakcie używania drzewa źródeł, którego położenie jest inne niż użyte podczas budowania modułu. Jest to domyślne ustawienie silnika GDB, ponieważ używanie pełnych ścieżek może go spowolnić.</li></ul> + Pat&h: Ś&cieżka: + + <p>Specifying the module (base name of the library or executable) for function or file type breakpoints can significantly speed up debugger start-up times (CDB, LLDB). + <p>Podanie modułu (nazwy bazowej biblioteki lub pliku wykonywalnego) +dla funkcji bądź pułapek może znacząco przyspieszyć uruchomienie +debuggera (CDB, LLDB). + &Module: &Moduł: @@ -16122,12 +13420,6 @@ debuggera (CDB, LLDB). Use File Name Używaj nazwy pliku - - Debugger commands to be executed when the breakpoint is hit. -This feature is only available for GDB. - Komendy debuggera, które będą wykonane, gdy pułapka zostanie osiągnięta. -Ta funkcja jest dostępna jedynie dla GDB. - &Commands: &Komendy: @@ -16148,6 +13440,11 @@ Ta funkcja jest dostępna jedynie dla GDB. &Expression: Wyraż&enie: + + <p>Debugger commands to be executed when the breakpoint is hit. This feature is only available for GDB. + <p>Komendy debuggera, które będą wykonane, gdy pułapka zostanie osiągnięta. +Ta funkcja jest dostępna jedynie dla GDB. + &Message: K&omunikat: @@ -16155,10 +13452,6 @@ Ta funkcja jest dostępna jedynie dla GDB. Debugger::Internal::CdbEngine - - The console process '%1' could not be started. - Nie można uruchomić procesu konsolowego "%1". - The console process "%1" could not be started. Nie można uruchomić procesu konsolowego "%1". @@ -16179,26 +13472,10 @@ Ta funkcja jest dostępna jedynie dla GDB. Separate Window Oddzielne okno - - Image - Obrazek - There is no CDB executable specified. Brak podanego pliku wykonywalnego CDB. - - CDB crashed - CDB zakończone błędem - - - CDB exited (%1) - CDB zakończył pracę (%1) - - - Unable to add expression - Nie można dodać wyrażenia - Interrupting is not possible in remote sessions. Przerywanie nie jest możliwe w zdalnych sesjach. @@ -16216,8 +13493,12 @@ Ta funkcja jest dostępna jedynie dla GDB. "Wybierz widżet do obserwowania": nie obsługiwane w stanie "%1". - Conditional breakpoint %1 (%2) in thread %3 triggered, examining expression '%4'. - Osiągnięto pułapkę warunkową %1 (%2) w wątku %3, sprawdzanie wyrażenia "%4". + Internal error: Invalid start parameters passed for the CDB engine. + Błąd wewnętrzny: niepoprawny parametr startowy przekazany do silnika CDB. + + + Unsupported CDB host system. + Malformed stop response received. @@ -16227,6 +13508,10 @@ Ta funkcja jest dostępna jedynie dla GDB. Switching to main thread... Przełączanie do głównego wątku... + + Module loaded: + Załadowany moduł: + Value %1 obtained from evaluating the condition of breakpoint %2, stopping. Wartość %1 otrzymana po przetworzeniu warunku pułapki %2, zatrzymano. @@ -16239,10 +13524,6 @@ Ta funkcja jest dostępna jedynie dla GDB. "Select Widget to Watch": Please stop the application first. "Wybierz widżet do obserwowania": Najpierw zatrzymaj aplikację. - - "Select Widget to Watch": Not supported in state '%1'. - "Wybierz widżet do obserwowania": Nie obsługiwane w stanie "%1". - Debugger::Internal::CacheDirectoryDialog @@ -16266,215 +13547,10 @@ Ta funkcja jest dostępna jedynie dla GDB. The folder "%1" could not be created. Nie można utworzyć katalogu "%1". - - A file named '%1' already exists. - Plik o nazwie "%1" już istnieje. - Cannot Create Nie można utworzyć - - The folder '%1' could not be created. - Nie można utworzyć katalogu "%1". - - - - Debugger::DebuggerEngine - - Launching - Uruchamianie - - - Setup failed. - Niepoprawna konfiguracja. - - - Loading finished. - Zakończono ładowanie. - - - Run failed. - Nieudane uruchomienie. - - - Running. - Uruchomiono. - - - Run requested... - Zażądano uruchomienia... - - - This debugger cannot handle user input. - Ten debugger nie obsługuje poleceń wejściowych użytkownika. - - - Data breakpoint %1 (%2) at %3 triggered. - Osiągnięto pułapkę warunkową %1 (%2) przy %3. - - - Internal data breakpoint %1 at %2 triggered. - Osiągnięto wewnętrzną pułapkę warunkową %1 przy %2. - - - Data breakpoint %1 (%2) at %3 in thread %4 triggered. - Osiągnięto pułapkę warunkową %1 (%2) przy %3 w wątku %4. - - - Internal data breakpoint %1 at %2 in thread %3 triggered. - Osiągnięto wewnętrzna pułapka warunkowa %1 przy %2 w wątku %3. - - - Data breakpoint %1 (%2) at 0x%3 triggered. - Osiągnięto pułapkę warunkową %1 (%2) pod 0x%3. - - - Internal data breakpoint %1 at 0x%2 triggered. - Osiągnięto wewnętrzną pułapkę warunkową %1 pod 0x%2. - - - Data breakpoint %1 (%2) at 0x%3 in thread %4 triggered. - Osiągnięto pułapkę warunkową %1 (%2) pod 0x%3 w wątku %4. - - - Internal data breakpoint %1 at 0x%2 in thread %3 triggered. - Osiągnięto wewnętrzną pułapkę warunkową %1 pod 0x%2 w wątku %3. - - - Stopped at breakpoint %1 (%2) in thread %3. - Zatrzymano w pułapce %1 (%2) w wątku %3. - - - Stopped at internal breakpoint %1 in thread %2. - Zatrzymano w wewnętrznej pułapce %1 w wątku %2. - - - <Unknown> - name - <nieznana> - - - <Unknown> - meaning - Still not translatable in Polish: unknown meaning of WHAT? - <nieznane> - - - Found. - Znaleziono. - - - Not found. - Nie znaleziono. - - - Section %1: %2 - Sekcja %1: %2 - - - Warning - Ostrzeżenie - - - This does not seem to be a "Debug" build. -Setting breakpoints by file name and line number may fail. - To nie jest wersja debugowa. -Ustawianie pułapek w liniach plików może się nie udać. - - - Stopped. - Zatrzymano. - - - Launching Debugger - Uruchamianie debuggera - - - Stopped: "%1" - Zatrzymano: "%1" - - - Stopped: %1 (Signal %2). - Zatrzymano: %1 (sygnał %2). - - - Stopped in thread %1 by: %2. - Zatrzymano w wątku %1 przez %2. - - - Interrupted. - Przerwano. - - - <p>The inferior stopped because it received a signal from the Operating System.<p><table><tr><td>Signal name : </td><td>%1</td></tr><tr><td>Signal meaning : </td><td>%2</td></tr></table> - <p>Podproces zatrzymany, ponieważ otrzymał on sygnał z systemu operacyjnego.<p><table><tr><td>Nazwa sygnału: </td><td>%1</td></tr><tr><td>Znaczenie sygnału: </td><td>%2</td></tr></table> - - - Signal received - Otrzymano sygnał - - - <p>The inferior stopped because it triggered an exception.<p>%1 - <p>Podproces zatrzymany z powodu rzuconego wyjątku.<p>%1 - - - Exception Triggered - Rzucono wyjątek - - - Taking notice of pid %1 - Zwracanie uwagi na pid %1 - - - Run to Address 0x%1 - Uruchom do adresu 0x%1 - - - Run to Line %1 - Uruchom do linii %1 - - - Jump to Address 0x%1 - Skocz do adresu 0x%1 - - - Jump to Line %1 - Skocz do linii %1 - - - - Debugger::DebuggerPlugin - - Debug - Debug - - - Option '%1' is missing the parameter. - Brak parametru w opcji "%1". - - - Only one executable allowed! - Dozwolony jest tylko jeden plik wykonywalny! - - - The parameter '%1' of option '%2' does not match the pattern <handle>:<pid>. - Parametr "%1" opcji "%2" nie pasuje do wzoru <uchwyt>:<pid>. - - - Invalid debugger option: %1 - Niepoprawna opcja debuggera: %1 - - - Some breakpoints cannot be handled by the debugger languages currently active, and will be ignored. -Affected are breakpoints %1 - Niektóre pułapki nie mogą być obsłużone przez aktywne języki debuggera i zostaną zignorowane. -Dotyczy to następujących pułapek: %1 - - - Not enough free ports for QML debugging. - Niewystarczająca ilość wolnych portów do debugowania QML. - Debugger::DebuggerRunControl @@ -16553,7 +13629,7 @@ Dotyczy to następujących pułapek: %1 Log File - Plik loga + Plik logu @@ -16569,17 +13645,6 @@ Dotyczy to następujących pułapek: %1 Git::Internal::SettingsPageWidget - - Set the environment variable HOME to '%1' -(%2). -This causes msysgit to look for the SSH-keys in that location -instead of its installation directory when run outside git bash. - Ustaw zmienną środowiskową HOME na "%1" -(%2). -Spowoduje to, że msysgit uruchomiony na zewnątrz powłoki git -zacznie poszukiwać kluczy SSH w tym położeniu -zamiast w jego katalogu instalacyjnym. - Set the environment variable HOME to "%1" (%2). @@ -16599,26 +13664,11 @@ zamiast w jego katalogu instalacyjnym. currently set to "%1" aktualnie ustawiona na "%1" - - currently set to '%1' - aktualnie ustawiona na "%1" - Git Repository Browser Command Komenda przeglądarki repozytorium Git - - Help::Internal::ExternalHelpWindow - - Show Sidebar - Pokazuj boczny pasek - - - Qt Creator Offline Help - Pomoc offline Qt Creatora - - EditorManager @@ -16935,10 +13985,6 @@ zamiast w jego katalogu instalacyjnym. Searching for Usages Wyszukiwanie użyć - - Searching - Przeszukiwanie - QmlJSEditor::QuickFix @@ -16953,18 +13999,6 @@ zamiast w jego katalogu instalacyjnym. Add Library Dodaj bibliotekę - - Type - Typ - - - Details - Szczegóły - - - Summary - Podsumowanie - QmakeProjectManager::Internal::LibraryTypePage @@ -17096,39 +14130,6 @@ Adds the library and include paths to the .pro file. %1 Biblioteka - - QmakeProjectManager::AbstractMobileApp - - Could not open template file '%1'. - Nie można otworzyć pliku z szablonem "%1". - - - - QmakeProjectManager::Internal::QtQuickAppWizardDialog - - New Qt Quick Application - Nowa aplikacja Qt Quick - - - This wizard generates a Qt Quick Application project. - Ten kreator generuje projekt aplikacji Qt Quick. - - - Component Set - Zestaw komponentów - - - - QmakeProjectManager::Internal::QtQuickAppWizard - - Qt Quick Application - Aplikacja Qt Quick - - - Creates a Qt Quick application project that can contain both QML and C++ code. - Tworzy projekt aplikacji Qt Quick, zawierający kod QML i C++. - - TaskList::Internal::StopMonitoringHandler @@ -17140,28 +14141,6 @@ Adds the library and include paths to the .pro file. Zatrzymaj monitorowanie plików zadania. - - TaskList::Internal::TaskFileFactory - - Task file reader - Czytnik plików z zadaniami - - - File Error - Błąd pliku - - - - TaskList::TaskListPlugin - - Cannot open task file %1: %2 - Nie można otworzyć pliku z zadaniem %1: %2 - - - My Tasks - Moje zadania - - TextEditor::HighlighterSettingsPage @@ -17244,33 +14223,6 @@ Adds the library and include paths to the .pro file. Pobierz zaznaczone definicje - - TextEditor::Internal::Manager - - Registering definitions - Rejestrowanie definicji - - - Downloading definitions - Pobieranie definicji - - - Error downloading selected definition(s). - Błąd pobierania wybranych definicji. - - - Error downloading one or more definitions. - Błąd pobierania jednej lub wielu definicji. - - - Please check the directory's access rights. - Sprawdź prawa dostępu do katalogu. - - - Download Error - Błąd pobierania - - TextEditor::Internal::OutlineWidgetStack @@ -17293,17 +14245,6 @@ Adds the library and include paths to the .pro file. Konspekt - - TextEditor::Internal::PlainTextEditorFactory - - A highlight definition was not found for this file. Would you like to try to find one? - Definicja podświetleń nie została znaleziona. Czy chcesz spróbować ją znaleźć? - - - Show Highlighter Options... - Pokaż opcje podświetlania... - - ProjectExplorer::BuildableHelperLibrary @@ -17311,8 +14252,8 @@ Adds the library and include paths to the .pro file. Nie można uruchomić procesu: %1 - Timeout after %1s. - Bez odpowiedzi po %1s. + Timeout after %1 s. + Bez odpowiedzi po %1 s. The process crashed. @@ -17332,16 +14273,6 @@ Adds the library and include paths to the .pro file. Building helper "%1" in %2 Budowanie asystenta "%1" w %2 - - - - Error running '%1' in %2: %3 - Błąd uruchamiania "%1" w %2: %3 - - - Building helper '%1' in %2 - - Budowanie asystenta "%1" w %2 @@ -17412,8 +14343,8 @@ Przyczyna: %2 QmakeProjectManager::QmlDumpTool - Only available for Qt for Desktop and Qt for Qt Simulator. - Dostępne jedynie dla wersji Qt Desktop oraz dla Qt Simulator. + Only available for Qt for Desktop. + Dostępne jedynie dla wersji Qt Desktop. Only available for Qt 4.7.1 or newer. @@ -17434,10 +14365,6 @@ Przyczyna: %2 QmlDumpBuildTask - - Building helper - Budowanie asystenta - Building QML Helpers Budowanie asystentów QML @@ -17480,73 +14407,6 @@ Local commits are not pushed to the master branch until a normal commit is perfo Zmiany wrzucone lokalnie nie są wrzucane do głównej gałęzi, dopóki nie dokonano zwykłego wrzucenia. - - Bazaar::Internal::CloneOptionsPanel - - Options - Opcje - - - Use existing directory - Użyj istniejącego katalogu - - - Stacked - - - - Standalone - - - - Bind new branch to source location - Powiąż nową gałąź z położeniem źródeł - - - Switch checkout - Przełącz kopię roboczą - - - Hardlink - - - - No working-tree - Bez kopii roboczej - - - Revision: - Poprawka: - - - By default, branch will fail if the target directory exists, but does not already have a control directory. -This flag will allow branch to proceed. - Who "does not have"? A branch or the target directory? - Domyślnie, utworzenie gałęzi nie powiedzie się, jeśli docelowy katalog istnieje -a gałąź nie ma katalogu kontrolnego. Opcja ta umożliwia utworzenie gałęzi w takim przypadku. - - - Creates a stacked branch referring to the source branch. -The new branch will depend on the availability of the source branch for all operations. - - - - Does not use a shared repository, even if available. - Nie używa dzielonego repozytorium, nawet jeśli jest dostępne. - - - Switches the checkout in the current directory to the new branch. - Przełącza kopię roboczą w bieżącym katalogu do nowej gałęzi. - - - Hard-links working tree files where possible. - - - - Creates a branch without a working-tree. - Tworzy gałąź bez drzewa roboczego. - - Bazaar::Internal::OptionsPage @@ -17587,7 +14447,7 @@ The new branch will depend on the availability of the source branch for all oper Log count: - Licznik loga: + Licznik logu: Timeout: @@ -17817,12 +14677,40 @@ Local pulls are not applied to the master branch. <li>Zastąp selekcję: zastępuje nimi selekcję w bieżącym dokumencie.</li> </ul></body></html> + + Environment: + Środowisko: + + + No changes to apply. + Brak zmian do zastosowania. + + + Change... + Zmień... + Core::VariableChooser - Insert variable - Wstaw zmienną + Insert Variable + Wstaw zmienną + + + Current Value: %1 + Bieżąca wartość: %1 + + + Insert Unexpanded Value + Wstaw zwiniętą wartość + + + Insert "%1" + Wstaw "%1" + + + Insert Expanded Value + Wstaw rozwiniętą wartość Select a variable to insert. @@ -17929,16 +14817,12 @@ Local pulls are not applied to the master branch. Reading only version 1.1 parts. Czytanie fragmentów pochodzących jedynie z wersji 1.1. - - Expected only Property, Method, Signal and Enum object definitions, not '%1'. - Oczekiwano jedynie definicji obiektu Property, Method, Signal lub Enum, a nie "%1". - Expected only Property, Method, Signal and Enum object definitions, not "%1". Oczekiwano jedynie definicji obiektu Property, Method, Signal lub Enum, a nie "%1". - Expected only name, prototype, defaultProperty, attachedType, exports isSingleton, isCreatable, isComposite and exportMetaObjectRevisions script bindings, not "%1". + Expected only name, prototype, defaultProperty, attachedType, exports, isSingleton, isCreatable, isComposite and exportMetaObjectRevisions script bindings, not "%1". @@ -18075,13 +14959,6 @@ Local pulls are not applied to the master branch. <WARTOŚĆ> - - Utils::IpAddressLineEdit - - The IP address is not valid. - Niepoprawny adres IP. - - Utils::QtcProcess @@ -18248,13 +15125,6 @@ Local pulls are not applied to the master branch. Analizator - - Analyzer::Internal::AnalyzerMode - - Analyze - Analiza - - Analyzer::Internal::AnalyzerPlugin @@ -18270,27 +15140,8 @@ Local pulls are not applied to the master branch. Bazaar - - Bazaar::Internal::BazaarEditor - - Annotate %1 - Dołącz adnotację do %1 - - - Annotate parent revision %1 - Dołącz adnotację do poprawki macierzystej "%1" - - Bazaar::Internal::BazaarPlugin - - Clones a Bazaar branch and tries to load the contained project. - Klonuje repozytorium Bazaar i próbuje załadować zawarty projekt. - - - Bazaar Clone (Or Branch) - Klon repozytorium (lub gałęzi) Bazaar - Bazaar Bazaar @@ -18472,40 +15323,6 @@ Local pulls are not applied to the master branch. Błąd sprawdzania opisu. Czy kontynuować? - - Bazaar::Internal::CloneWizard - - Cloning - Klonowanie - - - Cloning started... - Rozpoczęto klonowanie... - - - Clones a Bazaar branch and tries to load the contained project. - Klonuje repozytorium Bazaar i próbuje załadować zawarty projekt. - - - Bazaar Clone (Or Branch) - Klon repozytorium Bazaar (albo gałęzi) - - - - Bazaar::Internal::CloneWizardPage - - Location - Położenie - - - Specify repository URL, clone directory and path. - Podaj URL repozytorium, katalogu klonu i ścieżkę do niego. - - - Clone URL: - URL klonu: - - Bazaar::Internal::CommitEditor @@ -18530,10 +15347,6 @@ Local pulls are not applied to the master branch. Failed opening project "%1": Project is not a file Nie można otworzyć projektu "%1": Ścieżka projektu nie wskazuje na plik - - Failed opening project '%1': Project is not a file - Nie można otworzyć projektu "%1": Ścieżka projektu nie wskazuje na plik - Core::Internal::ExternalToolModel @@ -18565,18 +15378,6 @@ Local pulls are not applied to the master branch. Core::Internal::ExternalToolRunner - - Could not find executable for '%1' (expanded '%2') - Nie można znaleźć pliku wykonywalnego dla "%1" (w rozwinięciu "%2") - - - Starting external tool '%1' %2 - Uruchamianie narzędzia zewnętrznego "%1" %2 - - - '%1' finished - Zakończono "%1" - Could not find executable for "%1" (expanded "%2") Nie można znaleźć pliku wykonywalnego dla "%1" (w rozwinięciu "%2") @@ -18612,8 +15413,8 @@ Local pulls are not applied to the master branch. Błąd - Not a valid byte pattern. - Niepoprawny wzór bajtowy. + Internal error: Type is invalid + Błąd wewnętrzny: niepoprawny typ Dialog @@ -18623,10 +15424,6 @@ Local pulls are not applied to the master branch. Value: Wartość: - - Type - Typ - String Ciąg znakowy @@ -18639,14 +15436,6 @@ Local pulls are not applied to the master branch. Use Recommended Używaj rekomendowanych - - Start range: - Początek zakresu: - - - End range: - Koniec zakresu: - Priority: Priorytet: @@ -18655,59 +15444,79 @@ Local pulls are not applied to the master branch. <i>Note: Wide range values might impact Qt Creator's performance when opening files.</i> <i>Uwaga: Szeroki zakres może wpłynąć na wydajność Qt Creatora podczas otwierania plików.</i> - - - Core::Internal::MimeTypeSettingsModel - MIME Type - Typ MIME + <html><head/><body><p>MIME magic data is interpreted as defined by the Shared MIME-info Database specification from <a href="http://standards.freedesktop.org/shared-mime-info-spec/shared-mime-info-spec-latest.html">freedesktop.org</a>.<hr/></p></body></html> + - Handler - Jednostka obsługująca + Type: + Typ: - Undefined - Niezdefiniowana + RegExp + - Invalid MIME Type - Niepoprawny typ MIME + Host16 + - Conflicting pattern(s) will be discarded. - Kolidujące wzory zostaną usunięte. + Host32 + - - %n pattern(s) already in use. - - %n wzór w użyciu. - %n wzory w użyciu. - %n wzorów w użyciu. - + + Big16 + + + + Big32 + + + + Little16 + + + + Little32 + + + + Mask: + Maska: + + + Range start: + Początek zakresu: + + + Range end: + Koniec zakresu: - Core::Internal::MimeTypeSettingsPrivate + Core::Internal::MimeTypeSettingsModel - Error - Błąd + MIME Type + Typ MIME - No MIME type selected. - Nie zaznaczono żadnego typu MIME. + Handler + Jednostka obsługująca - No magic header selected. - Nie zaznaczono żadnego magicznego nagłówka. + Undefined + Niezdefiniowana + + + Core::Internal::MimeTypeSettingsPrivate - MIME Types - Typy MIME + Reset MIME Types + Zresetuj typy MIME - Changes will take effect in the next time you start Qt Creator. - Zmiany zostaną zastosowana przy ponownym uruchomieniu Qt Creatora. + Changes will take effect after Qt Creator restart. + Zmiany zostaną zastosowane przy ponownym uruchomieniu Qt Creatora. @@ -18767,10 +15576,12 @@ do systemu kontroli wersji (%2)? Could not add the file %1 -to version control (%2) +to version control (%2) + Nie można dodać pliku %1 -do systemu kontroli wersji (%2) +do systemu kontroli wersji (%2) + Could not add the following files to version control (%1) @@ -18779,17 +15590,6 @@ do systemu kontroli wersji (%2) %2 - - CppEditor::Internal::CPPEditorWidget - - Sort Alphabetically - Posortuj alfabetycznie - - - &Refactor - &Refaktoryzacja - - CppEditor::Internal::CppOutlineTreeView @@ -18965,10 +15765,6 @@ do systemu kontroli wersji (%2) Set Message Tracepoint at 0x%1... Ustaw komunikat pod 0x%1... - - Start '%1' and break at function 'main()' - Rozpocznij "%1" i zatrzymaj na funkcji "main()" - Save Debugger Log Zachowaj log debuggera @@ -19041,22 +15837,6 @@ do systemu kontroli wersji (%2) Move to Calling Frame Przenieś do wołającej ramki - - From - Od - - - To - Do - - - Flags - Flagi - - - Sections in "%1" - Sekcje w "%1" - Error evaluating command line arguments: %1 Błąd podczas przetwarzania argumentów komendy: %1 @@ -19069,10 +15849,6 @@ do systemu kontroli wersji (%2) Start and Debug External Application... Uruchom i zdebuguj zewnętrzną aplikację... - - Attach to Remote Debug Server... - Dołącz do zdalnego serwera debugowego... - Attach to QML Port... Dołącz do portu QML... @@ -19131,6 +15907,14 @@ Qt Creator nie może się do niego podłączyć. Add Expression Evaluator + + Attach to Running Debug Server... + + + + Start Debug Server Attached to Process... + + Select Wybierz @@ -19195,10 +15979,6 @@ Qt Creator nie może się do niego podłączyć. Load Core File... Załaduj plik zrzutu... - - Start Remote Debug Server Attached to Process... - Uruchom zdalny serwer debugowy dołączony do procesu... - Attach to Running Application... Dołącz do uruchomionej aplikacji... @@ -19279,10 +16059,6 @@ Qt Creator nie może się do niego podłączyć. F9 F9 - - Apply Changes on Save - Zastosuj zmiany przy zachowywaniu - Show Application on Top Pokazuj aplikację na wierzchu @@ -19291,30 +16067,6 @@ Qt Creator nie może się do niego podłączyć. Threads: Wątki: - - Symbol - Symbol - - - Address - Adres - - - Code - Kod - - - Section - Sekcja - - - Name - Nazwa - - - Symbols in "%1" - Symbole w "%1" - Debugger::Internal::DebuggerSourcePathMappingWidget @@ -19351,29 +16103,25 @@ Qt Creator nie może się do niego podłączyć. Mapowanie ścieżek źródłowych - <html><head/><body><p>Mappings of source file folders to be used in the debugger can be entered here.</p><p>This is useful when using a copy of the source tree at a location different from the one at which the modules where built, for example, while doing remote debugging.</p><p>If source is specified as a regular expression by starting it with an open parenthesis, Qt Creator matches the paths in the ELF with the regular expression to automatically determine the source path.</p><p>Example: <b>(/home/.*/Project)/KnownSubDir -> D:\Project</b> will substitute ELF built by any user to your local project directory.</p></body></html> - <html><head/><body><p>Tu można podać mapowanie katalogów plików źródłowych użytych w debuggerze.</p><p>Jest to przydatne podczas używania kopii drzewa źródeł z innego położenia niż to, w którym moduły były zbudowane, np. podczas zdalnego debugowania.</body></html> + <p>Mappings of source file folders to be used in the debugger can be entered here.</p><p>This is useful when using a copy of the source tree at a location different from the one at which the modules where built, for example, while doing remote debugging.</p><p>If source is specified as a regular expression by starting it with an open parenthesis, Qt Creator matches the paths in the ELF with the regular expression to automatically determine the source path.</p><p>Example: <b>(/home/.*/Project)/KnownSubDir -> D:\Project</b> will substitute ELF built by any user to your local project directory.</p> + <p>Tu można podać mapowanie katalogów plików źródłowych użytych w debuggerze.</p><p>Jest to przydatne podczas używania kopii drzewa źródeł z innego położenia niż to, w którym moduły były zbudowane, np. podczas zdalnego debugowania.</p> - <html><head/><body><p>Mappings of source file folders to be used in the debugger can be entered here.</p><p>This is useful when using a copy of the source tree at a location different from the one at which the modules where built, for example, while doing remote debugging.</body></html> - <html><head/><body><p>Tu można podać mapowanie katalogów plików źródłowych użytych w debuggerze.</p><p>Jest to przydatne podczas używania kopii drzewa źródeł z innego położenia niż to, w którym moduły były zbudowane, np. podczas zdalnego debugowania.</body></html> + <p>Add a mapping for Qt's source folders when using an unpatched version of Qt. + - Add a mapping for Qt's source folders when using an unpatched version of Qt. - Dodaj mapowanie dla katalogów źródeł Qt podczas używania niezałatanej wersji Qt. + <p>The source path contained in the debug information of the executable as reported by the debugger + - The source path contained in the debug information of the executable as reported by the debugger - Ścieżka źródłowa, zawarta w informacji debugowej pliku wykonywalnego, zgłoszona przez debugger + <p>The actual location of the source tree on the local machine + &Source path: Ś&cieżka do źródła: - - The actual location of the source tree on the local machine - Bieżące położenie drzewa źródeł na lokalnej maszynie - &Target path: Ścieżka &docelowa: @@ -19446,10 +16194,6 @@ Ponowić próbę? QML Debugger: Remote host closed connection. Debugger QML: Zdalny host zamknął połączenie. - - QML Debugger: Could not connect to service '%1'. - Debugger QML: Nie można nawiązać połączenia z serwisem "%1". - JS Source for %1 Źródło JS dla %1 @@ -19466,10 +16210,6 @@ Ponowić próbę? Starting %1 %2 Uruchamianie %1 %2 - - QML Debugger: Could not connect to service "%1". - Debugger QML: Nie można nawiązać połączenia z serwisem "%1". - Failed to start application Nie można uruchomić aplikacji @@ -19506,37 +16246,6 @@ Ponowić próbę? Ignoruj białe znaki - - Git::Internal::GitShowArgumentsWidget - - oneline - jedna linia - - - short - krótki - - - medium - średni - - - full - pełny - - - fuller - pełniejszy - - - email - e-mail - - - raw - surowy - - Git::Internal::GitBlameArgumentsWidget @@ -19563,65 +16272,18 @@ Ponowić próbę? GLSL - - GLSLEditor::Internal::GLSLEditorPlugin - - GLSL - GLSL sub-menu in the Tools menu - GLSL - - - Creates a fragment shader in the OpenGL/ES 2.0 Shading Language (GLSL/ES). Fragment shaders generate the final pixel colors for triangles, points and lines rendered with OpenGL. - Tworzy fragment shader OpenGL/ES 2.0 w języku GLSL/ES. Fragment shadery generują końcowe kolory pikseli trójkątów, punktów i linii renderowanych przez OpenGL. - - - Fragment Shader (OpenGL/ES 2.0) - Fragment Shader (OpenGL/ES 2.0) - - - Creates a vertex shader in the OpenGL/ES 2.0 Shading Language (GLSL/ES). Vertex shaders transform the positions, normals and texture co-ordinates of triangles, points and lines rendered with OpenGL. - Tworzy vertex shader OpenGL/ES 2.0 w języku GLSL/ES. Vertex shadery zmieniają transformacje, normalne i współrzędne tekstur trójkątów, punktów i linii renderowanych przez OpenGL. - - - Vertex Shader (OpenGL/ES 2.0) - Vertex Shader (OpenGL/ES 2.0) - - - Creates a fragment shader in the Desktop OpenGL Shading Language (GLSL). Fragment shaders generate the final pixel colors for triangles, points and lines rendered with OpenGL. - Tworzy fragment shader Desktop OpenGL w języku GLSL. Fragment shadery generują końcowe kolory pikseli trójkątów, punktów i linii renderowanych przez OpenGL. - - - Fragment Shader (Desktop OpenGL) - Fragment Shader (Desktop OpenGL) - - - Creates a vertex shader in the Desktop OpenGL Shading Language (GLSL). Vertex shaders transform the positions, normals and texture co-ordinates of triangles, points and lines rendered with OpenGL. - Tworzy vertex shader Desktop OpenGL w języku GLSL. Vertex shadery zmieniają transformacje, normalne i współrzędne tekstur trójkątów, punktów i linii renderowanych przez OpenGL. - - - Vertex Shader (Desktop OpenGL) - Vertex Shader (Desktop OpenGL) - - - - GLSLEditor::GLSLFileWizard - - New %1 - Nowy %1 - - Macros::Internal::MacroLocatorFilter - Macros - Makra + Text Editing Macros + Makra do edycji tekstu Macros::Internal::MacrosPlugin - &Macros - &Makra + Text Editing &Macros + &Makra do edycji tekstu Record Macro @@ -19733,14 +16395,14 @@ Ponowić próbę? - ProjectExplorer::Internal::ToolChainModel + ProjectExplorer::Internal::ToolChainOptionsPage - Auto-detected - Automatycznie wykryte + Compilers + Kompilatory - Manual - Ustawione ręcznie + Add + Dodaj <nobr><b>ABI:</b> %1 @@ -19759,35 +16421,32 @@ Ponowić próbę? Typ - Duplicate Compilers Detected - Wykryto powielone kompilatory + Auto-detected + Automatycznie wykryte - The following compiler was already configured:<br>&nbsp;%1<br>It was not configured again. - Następujący kompilator został już skonfigurowany:<br>&nbsp;%1<br>Nie został on ponownie skonfigurowany. + Manual + Ustawione ręcznie - The following compilers were already configured:<br>&nbsp;%1<br>They were not configured again. - Następujące kompilatory zostały już skonfigurowane:<br>&nbsp;%1<br>Nie zostały one ponownie skonfigurowane. + Clone + Sklonuj - - - ProjectExplorer::Internal::ToolChainOptionsPage - Compilers - Kompilatory + Remove + Usuń - Add - Dodaj + Duplicate Compilers Detected + Wykryto powielone kompilatory - Clone - Sklonuj + The following compiler was already configured:<br>&nbsp;%1<br>It was not configured again. + Następujący kompilator został już skonfigurowany:<br>&nbsp;%1<br>Nie został on ponownie skonfigurowany. - Remove - Usuń + The following compilers were already configured:<br>&nbsp;%1<br>They were not configured again. + Następujące kompilatory zostały już skonfigurowane:<br>&nbsp;%1<br>Nie zostały one ponownie skonfigurowane. @@ -19865,36 +16524,6 @@ Ponowić próbę? Stan bazowy - - JsFileOptionsPage - - Options - Opcje - - - Stateless library - Biblioteka bezstanowa - - - Usually each QML component instance has a unique copy of -imported JavaScript libraries. Indicating that a library is -stateless means that a single instance will be shared among -all components. Stateless libraries will not be able to access -QML component instance objects and properties directly. - Zwykle każda instancja komponentu QML posiada unikalną kopię -zaimportowanych bibliotek JavaScript. Biblioteka bezstanowa oznacza, że -pojedyncza instancja będzie dzielona pomiędzy komponentami. Biblioteki -bezstanowe nie będą miały bezpośredniego dostępu do obiektów i właściwości -komponentów QML. - - - - QmlJSEditor::JsFileWizard - - New %1 - Nowy %1 - - QmlJSEditor::Internal::QmlJSOutlineTreeView @@ -19931,50 +16560,6 @@ komponentów QML. Główny plik QML: - - QmakeProjectManager::AbstractMobileAppWizardDialog - - Kits - Zestawy narzędzi - - - - QmakeProjectManager::Internal::Html5AppWizardDialog - - New HTML5 Application - Nowa aplikacja HTML5 - - - This wizard generates a HTML5 Application project. - Ten kreator generuje projekt aplikacji HTML5. - - - HTML Options - Opcje HTML - - - - QmakeProjectManager::Internal::Html5AppWizard - - HTML5 Application - Aplikacja HTML5 - - - Creates an HTML5 application project that can contain both HTML5 and C++ code and includes a WebKit view. - -You can build the application and deploy it on desktop and mobile target platforms. - Tworzy projekt aplikacji HTML5, który może zawierać zarówno kod HTML5 jak i C++, oraz dołącza widok WebKit. - -Aplikację można zbudować i zainstalować na desktopie oraz na platformach mobilnych. - - - - QmakeProjectManager::Internal::Html5AppWizardOptionsPage - - Select HTML File - Wybierz plik HTML - - QmakeProjectManager::Internal::SubdirsProjectWizard @@ -20006,41 +16591,6 @@ Aplikację można zbudować i zainstalować na desktopie oraz na platformach mob Ten kreator generuje projekt z podkatalogami Qt. Podprojekty mogą być dodane później przy użyciu innych kreatorów. - - TextEditor::BaseTextEditorWidget - - CTRL+D - Ctrl+D - - - Print Document - Wydruk dokumentu - - - File Error - Błąd pliku - - - <b>Error:</b> Could not decode "%1" with "%2"-encoding. Editing not possible. - <b>Błąd:</b> Nie można odkodować "%1" używając kodowania "%2". Edycja nie jest możliwa. - - - Select Encoding - Wybierz kodowanie - - - Delete UTF-8 BOM on Save - Usuwaj UTF-8 BOM przy zachowywaniu - - - Add UTF-8 BOM on Save - Dodawaj UTF-8 BOM przy zachowywaniu - - - The text is too large to be displayed (%1 MB). - Tekst jest zbyt obszerny aby mógł zostać wyświetlony (%1 MB). - - TextEditor::Internal::PlainTextSnippetProvider @@ -20090,25 +16640,6 @@ Aplikację można zbudować i zainstalować na desktopie oraz na platformach mob Nie wybrano urywku. - - VcsBase::VcsBaseClient - - Unable to start process '%1': %2 - Nie można rozpocząć procesu "%1": %2 - - - Unable to start process "%1": %2 - Nie można rozpocząć procesu "%1": %2 - - - Timed out after %1s waiting for the process %2 to finish. - Przekroczono czas oczekiwania %1s na zakończenie procesu %2. - - - Working... - Przetwarzanie... - - VcsBase::VcsBaseEditorWidget @@ -20120,8 +16651,8 @@ Aplikację można zbudować i zainstalować na desktopie oraz na platformach mob Skopiuj "%1" - Describe Change %1 - Opisz zmianę %1 + &Describe Change %1 + &Opisz zmianę %1 Send to CodePaster... @@ -20139,14 +16670,6 @@ Aplikację można zbudować i zainstalować na desktopie oraz na platformach mob Failed to retrieve data. Nie można odebrać danych. - - Unable to Paste - Nie można wkleić - - - Code pasting services are not available. - Usługi wklejania kodu są niedostępne. - Revert Chunk Odwróć zmiany we fragmencie @@ -20569,10 +17092,6 @@ if (a && Remove Usuń - - Clean up - Wyczyść - Add... Dodaj... @@ -20762,10 +17281,24 @@ With cache simulation, further event counters are enabled: Configuration Konfiguracja + + No version control set on "VcsConfiguration" page. + Do not translate "VcsConfiguration", because it is the id of a page. + + + + "vcsId" ("%1") is invalid for "VcsConfiguration" page. Possible values are: %2. + Do not translate "VcsConfiguration", because it is the id of a page. + + Please configure <b>%1</b> now. Skonfiguruj teraz <b>%1</b>. + + No known version control selected. + + FlowSpecifics @@ -21077,22 +17610,10 @@ With cache simulation, further event counters are enabled: Preferred highlight end - must be larger than Preferred begin. Note that the user has to add a highlight component. - - Preferred highlight begin - must be smaller than Preferred end. - Oczekiwany początek podświetlenia - musi być mniejszy od oczekiwanego końca. - Preferred end Oczekiwany koniec - - Preferred highlight end - must be larger than Preferred begin. - Oczekiwany koniec - musi być większy od oczekiwanego początku. - - - Determines whether the highlight is managed by the view. - Określa, czy podświetlenie jest zarządzane przed widok. - Interactive Interaktywny @@ -21127,22 +17648,6 @@ With cache simulation, further event counters are enabled: Refusing to remove your home directory. Odmowa usunięcia katalogu domowego. - - Failed to remove directory '%1'. - Nie można usunąć katalogu "%1". - - - Failed to remove file '%1'. - Nie można usunąć pliku "%1". - - - Failed to create directory '%1'. - Nie można utworzyć katalogu "%1". - - - Could not copy file '%1' to '%2'. - Nie można skopiować pliku "%1" do "%2". - Failed to remove directory "%1". Nie można usunąć katalogu "%1". @@ -21420,26 +17925,11 @@ With cache simulation, further event counters are enabled: Zbuduj teraz - - Core::Internal::PromptOverwriteDialog - - Overwrite Existing Files - Nadpisz istniejące pliki - - - The following files already exist in the folder -%1. -Would you like to overwrite them? - Następujące pliki istnieją już w katalogu -%1. -Czy nadpisać je? - - Core::InfoBarDisplay Do Not Show Again - Nie pokazuj więcej + Nie pokazuj ponownie Close @@ -21484,23 +17974,8 @@ Czy nadpisać je? Ignoruj puste linie - - Debugger::Internal::DebuggerToolTipWidget - - Previous - Poprzedni - - Debugger::Internal::RegisterMemoryView - - Memory at Register '%1' (0x%2) - Pamięć pod adresem "%1" (0x%2) - - - Register '%1' - Rejestr "%1" - Memory at Register "%1" (0x%2) Pamięć pod adresem "%1" (0x%2) @@ -21510,38 +17985,8 @@ Czy nadpisać je? Rejestr "%1" - - FakeVim::Internal::FakeVimUserCommandsModel - - Action - Akcja - - - Command - Komenda - - - User command #%1 - Komenda użytkownika #%1 - - - - FakeVim::Internal::FakeVimUserCommandsPage - - User Command Mapping - Mapa komend użytkownika - - - FakeVim - FakeVim - - ImageViewer::Internal::ImageViewer - - Cannot open image file %1. - Nie można otworzyć pliku graficznego %1. - Play Animation Odtwórz animację @@ -21622,13 +18067,6 @@ Czy nadpisać je? Styl kodu - - CodeStyleSettingsPanel - - Code Style - Styl kodu - - ProjectExplorer::EditorConfiguration @@ -21658,78 +18096,23 @@ Czy nadpisać je? QmlDesigner::NodeInstanceServerProxy - - Cannot Start QML Puppet Executable - Nie można uruchomić QML Puppet - - - The executable of the QML Puppet process (%1) cannot be started. Please check your installation. QML Puppet is a process which runs in the background to render the items. - Nie można uruchomić procesu QML Puppet (%1). Sprawdź swoją instalację. QML Puppet jest procesem uruchamianym w tle w celu renderowania elementów. - - - Wrong QML Puppet Executable Version - Niepoprawna wersja pliku wykonywalnego QML Puppet - - - The QML Puppet version is incompatible with the Qt Creator version. - Wersja QML Puppet nie jest kompatybilna z wersją Qt Creatora. - - - Cannot Find QML Puppet Executable - Nie można odnaleźć QML Puppet - - - The executable of the QML Puppet process (<code>%1</code>) cannot be found. Check your installation. QML Puppet is a process which runs in the background to render the items. - Nie można odnaleźć procesu QML Puppet (<code>%1</code>). Sprawdź swoją instalację. QML Puppet jest procesem uruchamianym w tle w celu renderowania elementów. - - - You can build <code>qml2puppet</code> yourself with Qt 5.2.0 or higher. The source can be found in <code>%1</code>. - <code>qml2puppet</code> można zbudować samodzielnie przy użyciu Qt 5.2.0 lub nowszej wersji. Źródła można znaleźć w <code>%1</code>. - - - <code>qml2puppet</code> will be installed to the <code>bin</code> directory of your Qt version. Qt Quick Designer will check the <code>bin</code> directory of the currently active Qt version of your project. - <code>qml2puppet</code> zostanie zainstalowany w katalogu <code>bin</code> w drzewie Qt. Qt Quick Designer sprawdzi katalog <code>bin</code> aktywnej wersji Qt dla projektu. - - - <code>qmlpuppet</code> will be installed to the <code>bin</code> directory of your Qt version. Qt Quick Designer will check the <code>bin</code> directory of the currently active Qt version of your project. - <code>qmlpuppet</code> zostanie zainstalowany w katalogu <code>bin</code> w drzewie Qt. Qt Quick Designer sprawdzi katalog <code>bin</code> aktywnej wersji Qt dla projektu. - - - QML Puppet Crashed - QML Puppet zakończony błędem - Cannot Start QML Emulation Layer (QML Puppet) Nie można uruchomić emulatora QML (QML Puppet) The executable of the QML emulation layer (QML Puppet) process cannot be started or does not respond. - + Nie można uruchomić emulatora QML (QML Puppet) lub pozostaje on bez odpowiedzi. QML Emulation Layer (QML Puppet) Crashed - + Błąd emulatora QML (QML Puppet) You are recording a puppet stream and the emulations layer crashed. It is recommended to reopen the Qt Quick Designer and start again. - - QmlJSEditor::Internal::HoverHandler - - Library at %1 - Biblioteka w %1 - - - Dumped plugins successfully. - Wtyczki poprawnie zrzucone. - - - Read typeinfo files successfully. - Pliki typeinfo poprawnie odczytane. - - QmlJSTools @@ -21779,6 +18162,10 @@ Czy nadpisać je? Save QML Trace Zachowaj stos QML + + Search timeline event notes. + + %1 s %1 s @@ -21863,31 +18250,8 @@ Czy kontynuować? Release - - QmakeProjectManager::QmakeProFileNode - - Error while parsing file %1. Giving up. - Błąd parsowania pliku %1. Przetwarzanie przerwane. - - - Could not find .pro file for sub dir "%1" in "%2" - Nie można odnaleźć pliku .pro w podkatalogu "%1" w "%2" - - - Could not find .pro file for sub dir '%1' in '%2' - Nie można odnaleźć pliku .pro w podkatalogu "%1" w "%2" - - BaseQtVersion - - The compiler '%1' (%2) cannot produce code for the Qt version '%3' (%4). - Kompilator "%1" (%2) nie może utworzyć kodu dla wersji Qt "%3" (%4). - - - The compiler '%1' (%2) may not produce code compatible with the Qt version '%3' (%4). - Kompilator "%1" (%2) nie może utworzyć kodu kompatybilnego z wersją Qt "%3" (%4). - The compiler "%1" (%2) cannot produce code for the Qt version "%3" (%4). Kompilator "%1" (%2) nie może utworzyć kodu dla wersji Qt "%3" (%4). @@ -21945,12 +18309,12 @@ Czy kontynuować? Wymaga Qt 5.3.0 lub nowszej wersji. - Building Debugging Helpers - Budowanie asystentów debuggera + This Qt Version does not contain Qt Quick Compiler. + Ta wersja Qt nie zawiera kompilatora Qt Quick. - Building helpers - Budowanie asystentów + Building Debugging Helpers + Budowanie asystentów debuggera @@ -21971,14 +18335,6 @@ Czy kontynuować? Do you want to remove all invalid Qt Versions?<br><ul><li>%1</li></ul><br>will be removed. Czy usunąć wszystkie niepoprawne wersje Qt?<br>Usunięte zostaną:<br><ul><li>%1</li></ul>. - - Building helpers - Budowanie asystentów - - - Debugging Helper Build Log for '%1' - Log budowania asystenta debuggera dla "%1" - Select a qmake Executable Wskaż plik wykonywalny qmake @@ -21995,10 +18351,6 @@ Czy kontynuować? The qmake executable %1 could not be added: %2 Nie można dodać pliku wykonywalnego qmake %1: %2 - - Select a qmake executable - Wskaż plik wykonywalny qmake - This Qt version was already registered as "%1". Ta wersja Qt została już zarejestrowana jako "%1". @@ -22036,6 +18388,10 @@ Czy kontynuować? Remove Invalid Qt Versions Usuń niepoprawne wersje Qt + + Display Name is not unique. + Widoczna nazwa nie jest unikatowa. + No compiler can produce code for this Qt version. Please define one or more compilers. Żaden kompilator nie może wygenerować kodu dla tej wersji Qt. Zdefiniuj jeden lub więcej kompilatorów. @@ -22073,13 +18429,6 @@ Czy kontynuować? Uruchom na zdalnym urządzeniu - - Subversion::Internal::SubversionDiffParameterWidget - - Ignore Whitespace - Ignoruj białe znaki - - TextEditor::BehaviorSettingsPage @@ -22122,7 +18471,7 @@ Czy kontynuować? Load External Log File - Załaduj zewnętrzny plik loga + Załaduj zewnętrzny plik logu Go back one step in history. This will select the previously selected item. @@ -22132,10 +18481,6 @@ Czy kontynuować? Reset all event counters. Resetuje wszystkie liczniki zdarzeń. - - Load External XML Log File - Załaduj zewnętrzny plik loga XML - Request the dumping of profile information. This will update the Callgrind visualization. Żąda zrzutu informacji i odświeża widok callgrinda. @@ -22226,19 +18571,15 @@ Czy kontynuować? Open Callgrind Log File - Otwórz plik loga Callgrinda + Otwórz plik logu Callgrinda Callgrind Output (callgrind.out*);;All Files (*) - Internal Error - Błąd wewnętrzny - - - Failed to open file for reading: %1 - Nie można otworzyć pliku do odczytu: %1 + Callgrind: Failed to open file for reading: %1 + Parsing Profile Data... @@ -22265,10 +18606,6 @@ Czy kontynuować? Valgrind::Internal::MemcheckErrorView - - Copy Selection - Skopiuj selekcję - Suppress Error Stłum błąd @@ -22301,12 +18638,12 @@ Czy kontynuować? Niepoprawne wywołania "free()" - Failed to open file for reading: %1 - Nie można otworzyć pliku do odczytu: %1 + Memcheck: Failed to open file for reading: %1 + Memcheck: Nie można otworzyć pliku do odczytu: %1 - Error occurred parsing Valgrind output: %1 - Błąd podczas parsowania komunikatów Valgrind'a: %1 + Memcheck: Error occurred parsing Valgrind output: %1 + Memcheck: Błąd podczas parsowania komunikatów Valgrind'a: %1 Memory Issues @@ -22314,7 +18651,7 @@ Czy kontynuować? Load External XML Log File - Załaduj zewnętrzny plik loga XML + Załaduj zewnętrzny plik logu XML Go to previous leak. @@ -22338,23 +18675,12 @@ Czy kontynuować? Open Memcheck XML Log File - Otwórz plik XML loga Memchecka + Otwórz plik XML logu Memchecka XML Files (*.xml);;All Files (*) Pliki XML (*.xml);;Wszystkie pliki (*) - - Internal Error - Błąd wewnętrzny - - - - VcsBase::Internal::CommonSettingsWidget - - Command used for reverting diff chunks. - Komenda użyta do zastosowywania odwrotnych fragmentów w różnicach. - Welcome::Internal::WelcomeMode @@ -22610,33 +18936,6 @@ Dodatkowo, przetestowane zostanie połączenie z urządzeniem. Nie można debugować: brak ustawionego lokalnego pliku wykonywalnego. - - Analyzer::AnalyzerManagerPrivate - - &Analyze - &Analiza - - - Start - Uruchom - - - Stop - Zatrzymaj - - - Analyzer Toolbar - Pasek narzędzi analizatora - - - An analysis is still in progress. - Nadal trwa analiza. - - - No analyzer tool selected. - Brak wybranego narzędzia analizy. - - RemoteLinux::CreateTarStepWidget @@ -22746,40 +19045,40 @@ Dodatkowo, przetestowane zostanie połączenie z urządzeniem. Gadatliwy - Show files changed in each revision - Pokazuj pliki zmienione w każdej poprawce + Show files changed in each revision. + - Forward - Do przodu + Show from oldest to newest. + - Show from oldest to newest - Pokaż od najstarszych do najnowszych + Include Merges + - Include merges - Włączaj scalenia + Show merged revisions. + - Show merged revisions - Pokaż scalone poprawki + Moderately Short + - Detailed - Szczegółowo + One Line + - Moderately short - Umiarkowanie skrótowo + GNU Change Log + - One line - W jednej linijce + Forward + Do przodu - GNU ChangeLog - GNU ChangeLog + Detailed + Szczegółowo @@ -22799,14 +19098,6 @@ Dodatkowo, przetestowane zostanie połączenie z urządzeniem. %1 - - - '%1' returned the following error: - -%2 - "%1" zwrócił następujący błąd: - -%2 "%1" returned the following error: @@ -22856,6 +19147,18 @@ Dodatkowo, przetestowane zostanie połączenie z urządzeniem. Could not delete file %1. Nie można usunąć pliku %1. + + Click and type the new key sequence. + Kliknij i wpisz nową sekwencję klawiszy. + + + Stop Recording + Zatrzymaj nagrywanie + + + Record + Rozpocznij nagrywanie + BaseFileWizard @@ -22891,55 +19194,8 @@ Dodatkowo, przetestowane zostanie połączenie z urządzeniem. Komunikaty: - - Debugger::Internal::QScriptDebuggerClient - - <p>An uncaught exception occurred:</p><p>%1</p> - <p>Wystąpił nieobsłużony wyjątek:</p><p>%1</p> - - - <p>An uncaught exception occurred in '%1':</p><p>%2</p> - <p>Wystąpił nieobsłużony wyjątek w "%1":</p><p>%2</p> - - - <p>An uncaught exception occurred in "%1":</p><p>%2</p> - <p>Wystąpił nieobsłużony wyjątek w "%1":</p><p>%2</p> - - - Uncaught Exception - Nieobsłużony wyjątek - - - No Local Variables - Brak lokalnych zmiennych - - ProjectExplorer::SettingsAccessor - - No valid .user file found for '%1' - Brak poprawnego pliku .user dla "%1" - - - <p>No valid settings file could be found for this installation of Qt Creator.</p><p>All settings files were either too new or too old to be read.</p> - <p>Brak poprawnego pliku z ustawieniami dla tej instalacji Qt Creatora.</p><p>Napotkane pliki z ustawieniami były albo zbyt nowe, albo zbyt stare, aby je odczytać.</p> - - - Settings File for '%1' from a different Environment? - Plik z ustawieniami dla "%1" z innego środowiska? - - - <p>No .user settings file created by this instance of Qt Creator was found.</p><p>Did you work with this project on another machine or using a different settings path before?</p><p>Do you still want to load the settings file '%1'?</p> - <p>Brak pliku .user z ustawieniami, utworzonego przez tego Qt Creatora.</p><p>Czy pracowałeś z tym projektem na innej maszynie lub używałeś innej ścieżki do ustawień?</p><p>Czy załadować plik "%1" z ustawieniami?</p> - - - Using Old Settings File for '%1' - Użyto starego pliku z ustawieniami dla "%1" - - - <p>The versioned backup '%1' of the .user settings file is used, because the non-versioned file was created by an incompatible version of Qt Creator.</p><p>Project settings changes made since the last time this version of Qt Creator was used with this project are ignored, and changes made now will <b>not</b> be propagated to the newer version.</p> - <p>Użyta zostanie kopia zapasowa "%1" pliku z ustawieniami .user, ponieważ w międzyczasie oryginalny plik z ustawieniami został zachowany przez niekompatybilną wersję Qt Creatora.</p><p>Jeżeli nastąpią teraz zmiany w ustawieniach projektu to <b>nie</b> zostaną one zastosowane w nowszej wersji Qt Creatora.</p> - Unsupported Shared Settings File Nieobsługiwany plik z dzielonymi ustawieniami @@ -22982,26 +19238,6 @@ Dodatkowo, przetestowane zostanie połączenie z urządzeniem. Other files Inne pliki - - Failed - - - - There are unsaved changes for project file %1. - Plik z projektem %1 posiada niezachowane zmiany. - - - Failed! - Niepoprawnie zakończone! - - - Could not write project file %1. - Nie można zapisać pliku projektu %1. - - - File Error - Błąd pliku - RemoteLinux::AbstractRemoteLinuxDeployService @@ -23098,38 +19334,14 @@ Dodatkowo, przetestowane zostanie połączenie z urządzeniem. Uploading file "%1"... Przesyłanie pliku "%1"... - - Upload of file '%1' failed. The server said: '%2'. - Nie można przesłać pliku "%1". Odpowiedź serwera: "%2". - - - If '%1' is currently running on the remote host, you might need to stop it first. - Jeżeli "%1" jest aktualnie uruchomiony na zdalnym hoście, należy go najpierw zatrzymać. - - - Failed to upload file '%1'. - Nie można przesłać pliku "%1". - Failed to set executable flag. Nie można uczynić pliku wykonywalnym. - - Failed to upload file '%1': Could not open for reading. - Nie można przesłać pliku "%1". Nie można otworzyć go do odczytu. - All files successfully deployed. Wszystkie pliki poprawnie zainstalowane. - - Warning: No remote path set for local file '%1'. Skipping upload. - Ostrzeżenie: Brak ustawionej zdalnej ścieżki dla lokalnego pliku "%1". Nie zostanie on przesłany. - - - Uploading file '%1'... - Przesyłanie pliku "%1"... - RemoteLinux::Internal::ConfigWidget @@ -23239,10 +19451,6 @@ Dodatkowo, przetestowane zostanie połączenie z urządzeniem. No command line given. Nie podano linii komendy. - - Starting remote command '%1'... - Uruchamianie zdalnej komendy "%1"... - Starting remote command "%1"... Uruchamianie zdalnej komendy "%1"... @@ -23362,30 +19570,6 @@ Dodatkowo, przetestowane zostanie połączenie z urządzeniem. Error writing tar file "%1": %2 Błąd zapisu pliku tar "%1": %2. - - No remote path specified for file '%1', skipping. - Brak ustawionej zdalnej ścieżki dla pliku "%1", zostanie on pominięty. - - - Error writing tar file '%1': %2. - Błąd zapisu pliku tar "%1": %2. - - - Error reading file '%1': %2. - Błąd odczytu pliku "%1": %2. - - - Adding file '%1' to tarball... - Dodawanie pliku "%1" do tarballa... - - - Cannot add file '%1' to tar-archive: path too long. - Nie można dodać pliku "%1" do archiwum tar: zbyt długa ścieżka. - - - Error writing tar file '%1': %2 - Błąd zapisu pliku tar "%1": %2 - Create tarball Utwórz tarball @@ -23496,10 +19680,6 @@ Dodatkowo, przetestowane zostanie połączenie z urządzeniem. Files on File System Pliki w systemie plików - - Directory '%1': - Katalog "%1": - Directory "%1": Katalog "%1": @@ -23517,10 +19697,6 @@ Filtr: %2 Director&y: &Katalog: - - &Browse... - &Przeglądaj... - Fi&le pattern: &Wzorzec pliku: @@ -23533,39 +19709,24 @@ Filtr: %2 UpdateInfo::Internal::UpdateInfoPlugin - Could not determine location of maintenance tool. Please check your installation if you did not enable this plugin manually. - Nie można określić położenia narzędzia kontrolnego. Sprawdź w instalacji, czy ta wtyczka nie została uaktywniona ręcznie. - - - Could not find maintenance tool at "%1". Check your installation. - Nie można odnaleźć narzędzia kontrolnego w "%1". Sprawdź instalację. + Updater + Aktualizator - Updates Available - Dostępne uaktualnienia + New updates are available. Do you want to start update? + Dostępne są nowe uaktualnienia. Czy chcesz rozpocząć aktualizację? - Could not find maintenance tool at '%1'. Check your installation. - Nie można odnaleźć narzędzia kontrolnego w "%1". Sprawdź instalację. - - - Start Updater - Uruchom uaktualniacza - - - Updates available - Dostępne uaktualnienia + Could not determine location of maintenance tool. Please check your installation if you did not enable this plugin manually. + Nie można określić położenia narzędzia kontrolnego. Sprawdź w instalacji, czy ta wtyczka nie została uaktywniona ręcznie. - - - VcsBase::Command - Unable to start process, binary is empty - Nie można uruchomić procesu, plik binarny jest pusty + The maintenance tool at "%1" is not an executable. Check your installation. + Narzędzie utrzymania "%1" nie jest plikiem wykonywalnym. Sprawdź instalację. - Error: Executable timed out after %1s. - Błąd: plik wykonywalny nie odpowiada po upływie %1s. + Check for Updates + Sprawdź dostępność aktualizacji @@ -23721,10 +19882,6 @@ Filtr: %2 There already is a file of that name. Do you want to overwrite it? Plik o tej nazwie już istnieje. Czy nadpisać go? - - Failed to create directory: '%1'. - Nie można utworzyć katalogu: "%1". - Choose... Wybierz... @@ -23809,125 +19966,6 @@ Filtr: %2 - - AndroidDeployStepWidget - - Form - Formularz - - - Qt Deployment - Instalacja Qt - - - Use Ministro service to install Qt - Użyj usługi Ministro do zainstalowania Qt - - - Deploy local Qt libraries to temporary directory - Zainstaluj lokalne biblioteki Qt do tymczasowego katalogu - - - Creates a standalone APK. - Tworzy samodzielny APK. - - - Bundle Qt libraries in APK - Dołącz biblioteki Qt do APK - - - Advanced Actions - Zaawansowane akcje - - - Clean Temporary Libraries Directory on Device - Wyczyść tymczasowe katalogi z bibliotekami na urządzeniu - - - Install Ministro from APK - Zainstaluj Ministro z APK - - - Reset Default Devices - Przywróć domyślne urządzenia - - - Uses the external Ministro application to download and maintain Qt libraries. - Używa zewnętrznej aplikacji Ministro do pobierania bibliotek Qt i zarządzania nimi. - - - Pushes local Qt libraries to device. You must have Qt libraries compiled for that platform. -The APK will not be usable on any other device. - Przesyła lokalne biblioteki Qt do urządzenia. -Należy przesłać biblioteki skompilowane dla tej platformy. -APK nie będzie przydatne na innych urządzeniach. - - - - AndroidPackageCreationWidget - - <b>Android target SDK:</b> - <b>Docelowy SDK Androida:</b> - - - Application - Aplikacja - - - Libraries - Biblioteki - - - Read information from application (must be compiled) - Odczytaj informację z aplikacji (musi być skompilowana) - - - Required Qt libraries - Wymagane biblioteki Qt - - - <center>Prebundled libraries</center> -<p align="justify">Please be aware that the order is very important: If library <i>A</i> depends on library <i>B</i>, <i>B</i> <b>must</b> go before <i>A</i>.</p> - <center>Spakowane biblioteki</center> -<p align="justify">Kolejność jest bardzo istotna. Jeśli biblioteka <i>A</i> zależy od biblioteki <i>B</i>, <i>B</i> <b>musi</b> pojawić się przed <i>A</i>.</p> - - - Up - Do góry - - - Down - Na dół - - - Sign package - Podpisz pakiet - - - Create - Utwórz - - - Browse - Przeglądaj - - - Open package location after is complete - Po zakończeniu otwórz w położeniu pakietu - - - Certificate alias: - Alias certyfikatu: - - - Signing a debug package - Podpisywanie pakietu debugowego - - - Automatically check required Qt libraries from compiled application. - Automatycznie sprawdzaj wymagane biblioteki Qt na podstawie informacji uzyskanej ze skompilowanej aplikacji. - - AndroidSettingsWidget @@ -23938,10 +19976,6 @@ APK nie będzie przydatne na innych urządzeniach. Android SDK location: Położenie Android SDK: - - Browse - Przeglądaj - Android NDK location: Położenie Android NDK: @@ -24037,10 +20071,6 @@ APK nie będzie przydatne na innych urządzeniach. Patterns: Wzory: - - Magic Header - Magiczny nagłówek - Type Typ @@ -24089,17 +20119,6 @@ APK nie będzie przydatne na innych urządzeniach. &Usuń z systemu kontroli wersji - - Core::Internal::VariableChooser - - Variables - Zmienne - - - Select a variable to insert. - Wybierz zmienną do wstawienia. - - CodePaster::Internal::FileShareProtocolSettingsWidget @@ -24203,10 +20222,6 @@ p, li { white-space: pre-wrap; } Patch 2 Łata 2 - - Days - Dni - &Expires after: Okr&es ważności: @@ -24238,10 +20253,6 @@ p, li { white-space: pre-wrap; } &Expires after: Okr&es ważności: - - Days - Dni - Days Dni @@ -24341,51 +20352,6 @@ Przedrostki te, w dodatku do nazwy bieżącego pliku, używane są do przełącz Zawsze dodawaj pułapkę w funkcji <i>%1()</i>. - - Debugger::Internal::DebuggingHelperOptionPage - - Use Debugging Helper - Używaj asystenta debuggera - - - <html><head/><body> -<p>The debugging helper is only used to produce a nice display of objects of certain types like QString or std::map in the &quot;Locals and Expressions&quot; view. It is not strictly necessary for debugging with Qt Creator. </p></body></html> - <html><head/><body> -<p>Asystent debuggera jest używany do ładnego formatowania danych w widoku &quot;Zmienne lokalne i wyrażenia&quot; dla obiektów niektórych typów takich jak QString lub std::map. Nie jest on niezbędny do debugowania w Qt Creatorze.</p></body></html> - - - Makes use of Qt Creator's code model to find out if a variable has already been assigned a value at the point the debugger interrupts. - Korzysta z modelu kodu Qt Creatora w celu zbadania czy wartość została już przypisana do zmiennej w chwili przerwania debuggera. - - - Use code model - Używaj modelu kodu - - - Displays names of QThread based threads. - Wyświetla nazwy wątków dziedziczących z QThread. - - - Display thread names - Wyświetlaj nazwy wątków - - - Show "std::" namespace for types - Pokazuj przestrzeń nazw "std::" dla typów - - - Show Qt's namespace for types - Pokazuj przestrzeń nazw Qt dla typów - - - Shows 'std::' prefix for types from the standard library. - Pokazuje przedrostek "std::" dla typów z biblioteki standardowej. - - - Shows Qt namespace prefix for Qt types. This is only relevant if Qt was configured with '-qtnamespace'. - Pokazuje przestrzeń nazw Qt dla typów Qt. Ma to zastosowanie jedynie dla Qt skonfigurowanego z "-qtnamespace". - - ProjectExplorer::Internal::CodeStyleSettingsPropertiesPage @@ -24494,185 +20460,6 @@ Przedrostki te, w dodatku do nazwy bieżącego pliku, używane są do przełącz Czas trwania - - Qnx::Internal::BlackBerryDeployConfigurationWidget - - Packages to deploy: - Pakiety do instalacji: - - - - Qnx::Internal::BlackBerryDeviceConfigurationWidget - - &Device name: - Nazwa urzą&dzenia: - - - IP or host name of the device - IP lub nazwa hosta urządzenia - - - Device &password: - &Hasło urządzenia: - - - Show password - Pokaż hasło - - - Debug token: - - - - Private key file: - Plik z kluczem prywatnym: - - - Connection log: - Log połączeń: - - - Request - Żądanie - - - Upload - Prześlij - - - Qt Creator - Qt Creator - - - Debug token successfully uploaded. - - - - No route to host. - Brak połączenia z hostem. - - - Authentication failed. - Brak autoryzacji. - - - Development mode is disabled on the device. - Tryb deweloperski nieaktywny na urządzeniu. - - - Failed to start inferior process. - Nie można uruchomić podprocesu. - - - Inferior processes timed out. - Przekroczony czas oczekiwania na podproces. - - - Inferior process has crashed. - Podproces zakończył pracę błędem. - - - Failed to communicate with the inferior process. - Nie można skomunikować się z podprocesem. - - - An unknwon error has happened. - Wystąpił nieznany błąd. - - - Error - Błąd - - - Select Debug Token - - - - BAR file (*.bar) - Plik BAR (*.bar) - - - Invalid Debug Token - - - - Debug token file %1 cannot be read. - - - - Invalid debug token path. - - - - Failed to upload debug token: - - - - Operation in Progress - Operacja w toku - - - Uploading debug token - - - - Import - Zaimportuj - - - - Qnx::Internal::BlackBerryDeviceConfigurationWizardSetupPage - - WizardPage - StronaKreatora - - - Device password: - Hasło urządzenia: - - - Device host name or IP address: - Nazwa hosta lub adres IP urządzenia: - - - Connection - Połączenie - - - Specify device manually - Określ urządzenie ręcznie - - - Auto-detecting devices - please wait... - Detekcja urządzeń - proszę czekać... - - - No device has been auto-detected. - Brak urządzeń wykrytych automatycznie. - - - Device auto-detection is available in BB NDK 10.2. Make sure that your device is in Development Mode. - Detekcja urządzeń dostępna jest w BB NDK 10.2. Upewnij się, że urządzenie jest w trybie deweloperskim. - - - - Qnx::Internal::BlackBerryRunConfigurationWidget - - Device: - Urządzenie: - - - Package: - Pakiet: - - - - Qnx::Internal::QnxBaseQtConfigWidget - - SDK: - SDK: - - QmakeProjectManager::Internal::MakeStep @@ -24711,51 +20498,12 @@ Przedrostki te, w dodatku do nazwy bieżącego pliku, używane są do przełącz Ostateczna komenda qmake: - Use QML compiler - Użyj kompilatora QML - - - - QmakeProjectManager::Internal::Html5AppWizardSourcesPage - - WizardPage - StronaKreatora - - - Main HTML File - Główny plik HTML - - - Generate an index.html file - Wygeneruj plik index.html - - - Import an existing .html file - Zaimportuj istniejący plik .html - - - Load a URL - Załaduj URL - - - http:// - http:// - - - Note: Unless you chose to load a URL, all files and directories that reside in the same directory as the main HTML file are deployed. You can modify the contents of the directory any time before deploying. - Uwaga: wszystkie pliki i katalogi, które leżą w tym samym katalogu, co główny plik HTML, zostaną zainstalowane, chyba że wybrałeś załadowanie URL. Możesz zmodyfikować zawartość katalogu przed zainstalowaniem. - - - Touch optimized navigation - Nawigacja zoptymalizowana pod kątem urządzeń dotykowych - - - Enable touch optimized navigation - Uaktywnij nawigację zoptymalizowaną pod kątem urządzeń dotykowych + Generate separate debug info: + - Touch optimized navigation will make the HTML page flickable and enlarge the area of touch sensitive elements. If you use a JavaScript framework which optimizes the touch interaction, leave the checkbox unchecked. - Nawigacja zoptymalizowana pod kątem urządzeń dotykowych spowoduje ???miganie??? strony HTML i zwiększy obszar elementów czułych na dotyk. Jeśli używasz JavaScript ze zoptymalizowaną interakcją dotykową, pozostaw tę opcję niezaznaczoną. + Use QML compiler: + Używaj kompilatora QML: @@ -24855,6 +20603,10 @@ Przedrostki te, w dodatku do nazwy bieżącego pliku, używane są do przełącz You can enter lists and ranges like this: '1024,1026-1028,1030'. Można wprowadzać listy i zakresy, np.: "1024,1026-1028,1030". + + &Check host key + + RemoteLinux::Internal::GenericLinuxDeviceConfigurationWizardSetupPage @@ -24870,10 +20622,6 @@ Przedrostki te, w dodatku do nazwy bieżącego pliku, używane są do przełącz The device's host name or IP address: Nazwa hosta lub adres IP urządzenia: - - The user name to log into the device: - Nazwa użytkownika na urządzeniu: - The authentication type: Typ autoryzacji: @@ -24914,17 +20662,6 @@ Przedrostki te, w dodatku do nazwy bieżącego pliku, używane są do przełącz Wymagane miejsce na dysku: - - RemoteLinux::Internal::RemoteLinuxDeployConfigurationWidget - - Form - Formularz - - - Files to deploy: - Pliki do zainstalowania: - - TextEditor::Internal::BehaviorSettingsPage @@ -25227,6 +20964,10 @@ Ustala, jak klawisz "Backspace" reaguje na wcięcia. Shows tabs and spaces. Pokazuje tabulatory i spacje. + + Highlight search results on the scrollbar + Podświetlaj rezultaty wyszukiwań na pasku przewijania + TextEditor::Internal::HighlighterSettingsPage @@ -25471,57 +21212,6 @@ Wpływa na wcięcia przeniesionych linii. Skanuj tylko bieżąco edytowany dokument - - VcsBase::Internal::BaseCheckoutWizardPage - - WizardPage - StronaKreatora - - - Repository - Repozytorium - - - The remote repository to check out. - Zdalne repozytorium dla kopii roboczej. - - - Branch: - Gałąź: - - - The development branch in the remote repository to check out. - Gałąź w zdalnym repozytorium dla kopii roboczej. - - - Retrieve list of branches in repository. - Pozyskaj listę gałęzi z repozytorium. - - - ... - ... - - - Working Copy - Kopia robocza - - - The path in which the directory containing the checkout will be created. - Ścieżka, w której zostanie utworzony katalog zawierający kopię roboczą. - - - The local directory that will contain the code after the checkout. - Lokalny katalog, który będzie zawierał kod po utworzeniu kopii roboczej. - - - Path: - Ścieżka: - - - Directory: - Katalog: - - VcsBase::Internal::CleanDialog @@ -25563,10 +21253,6 @@ Wpływa na wcięcia przeniesionych linii. User &fields configuration file: Plik z konfiguracją &pól użytkownika: - - &Patch command: - Komenda "pa&tch": - &SSH prompt command: Komenda monitu &SSH: @@ -25576,12 +21262,6 @@ Wpływa na wcięcia przeniesionych linii. should a repository require SSH-authentication (see documentation on SSH and the environment variable SSH_ASKPASS). W przypadku, gdy repozytorium wymaga autoryzacji SSH, pole to definiuje komendę, która będzie pytała o hasło. Sprawdź dokumentację SSH i zmienną środowiskową SSH_ASKPASS. - - - A file listing user names and email addresses in a 4-column mailmap format: -'name <email> alias <email>'. - Plik z listą nazw użytkowników i adresami e-mail w 4 kolumnach (format mailmap): -"nazwa <e-mail> alias <e-mail>". A file listing nicknames in a 4-column mailmap format: @@ -25710,22 +21390,6 @@ Sprawdź dokumentację SSH i zmienną środowiskową SSH_ASKPASS. Unknown error. Nieznany błąd. - - Created remote directory '%1'. - Utworzono zdalny katalog "%1". - - - Remote directory '%1' already exists. - Zdalny katalog "%1" już istnieje. - - - Error creating directory '%1': %2 - Błąd tworzenia katalogu "%1": %2 - - - Could not open local file '%1': %2 - Nie można otworzyć lokalnego pliku "%1": %2 - Created remote directory "%1". Utworzono zdalny katalog "%1". @@ -25813,14 +21477,6 @@ Sprawdź dokumentację SSH i zmienną środowiskową SSH_ASKPASS. Error listing contents of directory "%1": %2 Błąd podczas listowania zawartości katalogu "%1": %2 - - Error getting 'stat' info about '%1': %2 - Błąd podczas pobierania informacji "stat" o "%1": %2 - - - Error listing contents of directory '%1': %2 - Błąd podczas listowania zawartości katalogu "%1": %2 - QSsh::Internal::SshChannelManager @@ -25851,14 +21507,6 @@ Sprawdź dokumentację SSH i zmienną środowiskową SSH_ASKPASS. Server identification string contains illegal NUL character. Ciąg identyfikujący serwer zawiera niedozwolony znak NUL. - - Server Identification string '%1' is invalid. - Ciąg identyfikujący serwer "%1" jest niepoprawny. - - - Server protocol version is '%1', but needs to be 2.0 or 1.99. - Wersja protokołu serwera to "%1", wymagana to 2.0 lub 1.99. - Server Identification string "%1" is invalid. Ciąg identyfikujący serwer "%1" jest niepoprawny. @@ -25926,6 +21574,14 @@ Sprawdź dokumentację SSH i zmienną środowiskową SSH_ASKPASS. Please enter the password for your private key. Podaj hasło do prywatnego klucza. + + Failed to open key file "%1" for reading: %2 + Nie można otworzyć pliku z kluczem "%1" do odczytu: %2 + + + Failed to open key file "%1" for writing: %2 + Nie można otworzyć pliku z kluczem "%1" do zapisu: %2 + QSsh::Internal::SshRemoteProcessPrivate @@ -25937,32 +21593,9 @@ Sprawdź dokumentację SSH i zmienną środowiskową SSH_ASKPASS. Server sent invalid signal "%1" Serwer wysłał niepoprawny sygnał "%1" - - Server sent invalid signal '%1' - Serwer wysłał niepoprawny sygnał "%1" - - - - Utils::BaseTreeView - - Adjust Column Widths to Contents - Wyrównaj szerokości kolumn do ich zawartości - Utils::ElfReader - - '%1' is an invalid ELF object (%2) - "%1" nie jest poprawnym obiektem ELF (%2) - - - '%1' is not an ELF object (file too small) - "%1" nie jest obiektem ELF (za mały plik) - - - '%1' is not an ELF object - "%1" nie jest obiektem ELF - "%1" is an invalid ELF object (%2) "%1" nie jest poprawnym obiektem ELF (%2) @@ -26035,98 +21668,6 @@ Sprawdź dokumentację SSH i zmienną środowiskową SSH_ASKPASS. Zmień nazwę... - - ZeroConf::Internal::ZConfLib - - AvahiZConfLib could not load the native library '%1': %2 - AvahiZConfLib nie może załadować natywnej biblioteki "%1": %2 - - - %1 cannot create a client. The daemon is probably not running. - %1 nie może utworzyć klienta. Prawdopodobnie demon nie jest uruchomiony. - - - cAvahiClient, server collision. - cAvahiClient, kolizja serwerów. - - - cAvahiClient, an error occurred on the client side. - cAvahiClient, wystąpił błąd po stronie klienta. - - - cAvahiClient, still connecting, no server available. - cAvahiClient, trwa łączenie, brak dostępnych serwerów. - - - Unexpected state %1 in cAvahiClientReply. - Nieoczekiwany stan %1 w cAvahiClientReply. - - - Unexpected state %1 in cAvahiBrowseReply. - Nieoczekiwany stan %1 w cAvahiBrowseReply. - - - %1 failed to kill other daemons with '%2'. - %1 nie może zamknąć innych demonów przy pomocy "%2". - - - %1 detected a file at /tmp/mdnsd, daemon startup will probably fail. - %1 wykrył plik w /tmp/mdnsd, prawdopodobnie nie uda się uruchomić demona. - - - %1: log of previous daemon run is: '%2'. - %1: log z poprzedniego uruchomienia demona: "%2". - - - %1 failed starting embedded daemon at %2. - %1 nie może uruchomić wbudowanego demona w %2. - - - - ZeroConf - - Zeroconf could not load a valid library, failing. - Zeroconf nie może załadować poprawnej biblioteki i tym samym kończy działanie. - - - Zeroconf has no valid library, aborting connection. - Zeroconf nie ma poprawnej biblioteki, przerwano połączenie. - - - Trying %1... - Próbowanie %1... - - - Succeeded using %1. - Poprawnie zakończone przy pomocy %1. - - - Could not load native library. - Nie można załadować natywnej biblioteki. - - - Warning: Detected an obsolete version of Apple Bonjour. Disable, uninstall, or upgrade it, or zeroconf will fail. - Ostrzeżenie: wykryto przestarzałą wersję Apple Bonjour. Zdezaktywuj, odinstaluj albo uaktualnij ją, w przeciwnym razie zeroconf nie zadziała. - - - - ZeroConf::ServiceBrowser - - Starting Zeroconf Browsing - Uruchamianie zeroconf - - - - Android::Internal::AndroidConfigurations - - Android Debugger for %1 - Debugger Android dla %1 - - - Android for %1 (GCC %2, Qt %3) - Android dla %1 (GCC %2, Qt %3) - - Android @@ -26187,72 +21728,6 @@ Sprawdź dokumentację SSH i zmienną środowiskową SSH_ASKPASS. Zainstaluj na urządzeniu Android - - Android::Internal::AndroidDeployStep - - Deploy to Android device - AndroidDeployStep default display name - Zainstaluj na urządzeniu Android - - - No Android toolchain selected. - Brak wybranego zestawu narzędzi dla Androida. - - - Package deploy: Running command '%1 %2'. - Instalacja pakietu: Uruchamianie komendy "%1 %2". - - - Packaging error: Could not start command '%1 %2'. Reason: %3 - Błąd pakowania: Nie można uruchomić komendy "%1 %2". Przyczyna: %3 - - - Packaging Error: Command '%1 %2' failed. - Błąd pakowania: Komenda "%1 %2" zakończona błędem. - - - Reason: %1 - Przyczyna: %1 - - - Exit code: %1 - Kod wyjściowy: %1 - - - Deploy Qt libraries. This may take some time, please wait. - Instalowanie bibliotek Qt. To może zająć trochę czasu. - - - Package installation failed. - Błąd instalowania pakietu. - - - Installing package onto %1. - Instalowanie pakietów na %1. - - - - Android::Internal::AndroidDeployStepFactory - - Deploy to Android device or emulator - Zainstaluj na urządzeniu lub emulatorze Android - - - - Android::Internal::AndroidDeployStepWidget - - <b>Deploy configurations</b> - <b>Konfiguracje instalacji</b> - - - Qt Android Smart Installer - Qt Android Smart Installer - - - Android package (*.apk) - Pakiet androida (*.apk) - - Android::Internal::AndroidDevice @@ -26271,177 +21746,6 @@ Sprawdź dokumentację SSH i zmienną środowiskową SSH_ASKPASS. Urządzenie Android - - Android::Internal::AndroidManager - - Error creating Android directory '%1'. - Błąd podczas tworzenia androidowego katalogu "%1". - - - No Qt for Android SDKs were found. -Please install at least one SDK. - Brak Qt dla Android SDK. -Zainstaluj przynajmniej jeden SDK. - - - Warning - Ostrzeżenie - - - Android files have been updated automatically. - Pliki Androida zostały automatycznie uaktualnione. - - - Unknown Android version. - Nieznana wersja Androida. - - - Error creating Android templates. - Błąd tworzenia szablonów Androida. - - - Cannot parse '%1'. - Błąd parsowania "%1". - - - Cannot open '%1'. - Nie można otworzyć "%1". - - - Starting Android virtual device failed. - Nie można uruchomić wirtualnego urządzenia Android. - - - - Android::Internal::AndroidPackageCreationFactory - - Create Android (.apk) Package - Utwórz pakiet androidowy (.apk) - - - - Android::Internal::AndroidPackageCreationStep - - Packaging for Android - Pakowanie dla Androida - - - Cannot create Android package: current build configuration is not Qt 4. - Nie można utworzyć pakietu androidowego: bieżąca konfiguracja budowania nie używa Qt 4. - - - Cannot create Android package: No ANDROID_TARGET_ARCH set in make spec. - Nie można utworzyć pakietu androidowego: brak ustawionej zmiennej ANDROID_TARGET_ARCH w make spec. - - - Warning: Signing a debug package. - Ostrzeżenie: podpisywanie pakietu debugowego. - - - Cannot find ELF information - Nie można odnaleźć informacji o ELF - - - Cannot find '%1'. -Please make sure your application is built successfully and is selected in Application tab ('Run option'). - Nie można odnaleźć "%1". -Upewnij się, że aplikacja jest poprawnie zbudowana i jest ona wybrana w zakładce "Aplikacja" ("Opcje uruchamiania"). - - - Error - Błąd - - - Invalid password - Niepoprawne hasło - - - Copy Qt app & libs to Android package ... - Kopiowanie bibliotek i aplikacji Qt do pakietu androidowego... - - - Can't copy gdbserver from '%1' to '%2' - Nie można skopiować gdbserver z "%1" do "%2" - - - Creating package file ... - Tworzenie pliku pakietu... - - - Signing package ... - Podpisywanie pakietu... - - - Failed, try again - Nie udało się, spróbuj ponownie - - - Release signed package created to %1 - Utworzono podpisany releasowy pakiet w %1 - - - Package created. - Utworzono pakiet. - - - Package deploy: Running command '%1 %2'. - Instalacja pakietu: Uruchamianie komendy "%1 %2". - - - Packaging failed. - Błąd pakowania. - - - Packaging error: Could not start command '%1 %2'. Reason: %3 - -Błąd pakowania: Nie można uruchomić komendy "%1 %2". Przyczyna: %3 - - - Packaging Error: Command '%1 %2' failed. - Błąd pakowania: Komenda "%1 %2" zakończona błędem. - - - Reason: %1 - Przyczyna: %1 - - - Exit code: %1 - Kod wyjściowy: %1 - - - Certificate - Certyfikat - - - Certificate password (%1): - Hasło dla certyfikatu (%1): - - - - Android::Internal::AndroidPackageCreationWidget - - <b>Package configurations</b> - <b>Konfiguracje pakietu</b> - - - - Android::Internal::AndroidPackageInstallationFactory - - Deploy to device - Zainstaluj na urządzeniu - - - - Android::Internal::AndroidPackageInstallationStep - - Copy application data - Skopiuj dane aplikacji - - - Removing directory %1 - Usuwanie katalogu %1 - - Android::Internal::AndroidQtVersion @@ -26454,17 +21758,6 @@ Błąd pakowania: Nie można uruchomić komendy "%1 %2". Przyczyna: %3 Android - - Android::Internal::AndroidRunConfiguration - - The .pro file '%1' is currently being parsed. - Trwa parsowanie pliku projektu "%1". - - - Run on Android device - Uruchom na urządzeniu Android - - Android::Internal::AndroidRunControl @@ -26518,10 +21811,6 @@ Błąd pakowania: Nie można uruchomić komendy "%1 %2". Przyczyna: %3 Failed to contact debugging port. - - Unable to start '%1'. - Nie można uruchomić "%1". - "%1" terminated. Zakończono "%1". @@ -26564,6 +21853,12 @@ Błąd pakowania: Nie można uruchomić komendy "%1 %2". Przyczyna: %3 The Android NDK cannot be installed into a path with spaces. Nie można zainstalować Android NDK w ścieżce zawierającej spacje. + + Qt versions for %1 architectures are missing. +To add the Qt versions, select Options > Build & Run > Qt Versions. + Brak wersji Qt dla architektury %1. +Wersje Qt można dodać w Opcje -> Budowanie i uruchamianie -> Wersje Qt. + Found %n toolchains for this NDK. @@ -26580,13 +21875,7 @@ Aby dodać wersję Qt wybierz Opcje | Budowanie i uruchamianie | Wersje Qt. Select JDK Path - - - - Qt versions for architectures %1 are missing. -To add the Qt versions, select Options > Build & Run > Qt Versions. - Brak ustawionych wersji Qt dla architektur %1. -Aby dodać wersje Qt wybierz Opcje | Budowanie i uruchamianie | Wersje Qt. + Wybierz ścieżkę do JDK The Platform tools are missing. Please use the Android SDK Manager to install them. @@ -26598,18 +21887,18 @@ Aby dodać wersje Qt wybierz Opcje | Budowanie i uruchamianie | Wersje Qt. Remove Android Virtual Device - + Usuń wirtualne urządzenie Android Remove device "%1"? This cannot be undone. - + Usunąć urządzenie "%1"? Zmiana ta będzie nieodwracalna. Unsupported GDB - + Nieobsługiwany GDB - 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/">http://download.qt-project.org/official_releases/gdb/</a> + The GDB inside this NDK seems to not support Python. The Qt Project offers fixed GDB builds at: <a href="http://download.qt.io/official_releases/gdb/">http://download.qt.io/official_releases/gdb/</a> @@ -26624,10 +21913,6 @@ Aby dodać wersje Qt wybierz Opcje | Budowanie i uruchamianie | Wersje Qt.Select ant Script Wybierz skrypt "ant" - - Select OpenJDK Path - Wybierz ścieżkę do OpenJDK - Android::Internal::AndroidToolChainFactory @@ -26723,10 +22008,6 @@ Aby dodać wersje Qt wybierz Opcje | Budowanie i uruchamianie | Wersje Qt. AutotoolsProjectManager::Internal::AutotoolsManager - - Failed opening project '%1': Project is not a file - Nie można otworzyć projektu "%1": Ścieżka projektu nie wskazuje na plik - Failed opening project "%1": Project is not a file Nie można otworzyć projektu "%1": Ścieżka projektu nie wskazuje na plik @@ -26810,14 +22091,6 @@ Aby dodać wersje Qt wybierz Opcje | Budowanie i uruchamianie | Wersje Qt.Make Make - - Qt Creator needs a compiler set up to build. Configure a compiler in the kit options. - Do budowy Qt Creator wymaga ustawionego kompilatora. Skonfiguruj go w opcjach zestawu narzędzi. - - - Configuration is faulty. Check the Issues view for details. - Błędna konfiguracja. Sprawdź szczegóły w widoku "Problemy budowania". - AutotoolsProjectManager::Internal::MakeStepConfigWidget @@ -26831,21 +22104,6 @@ Aby dodać wersje Qt wybierz Opcje | Budowanie i uruchamianie | Wersje Qt.Make - - BinEditorDocument - - The Binary Editor cannot open empty files. - Edytor plików binarnych nie może otwierac pustych plików. - - - Cannot open %1: %2 - Nie można otworzyć %1: %2 - - - File Error - Błąd pliku - - Bookmarks::Internal::BookmarkViewFactory @@ -26887,10 +22145,6 @@ Aby dodać wersje Qt wybierz Opcje | Budowanie i uruchamianie | Wersje Qt.An item named "%1" already exists at this location. Do you want to overwrite it? Element o nazwie "%1" istnieje już w tym miejscu. Czy nadpisać go? - - An item named '%1' already exists at this location. Do you want to overwrite it? - Element o nazwie "%1" istnieje już w tym miejscu. Czy nadpisać go? - Save File As Zapisz plik jako @@ -26952,12 +22206,12 @@ Aby dodać wersje Qt wybierz Opcje | Budowanie i uruchamianie | Wersje Qt. - Enter function name - Wprowadź nazwę funkcji + Function name + Nazwa funkcji - Invalid function name - Niepoprawna nazwa funkcji + Access + Dostęp @@ -26969,10 +22223,6 @@ Aby dodać wersje Qt wybierz Opcje | Budowanie i uruchamianie | Wersje Qt. Debugger::Internal::BreakTreeView - - Delete Breakpoint - Usuń pułapkę - Delete All Breakpoints Usuń wszystkie pułapki @@ -26986,8 +22236,8 @@ Aby dodać wersje Qt wybierz Opcje | Budowanie i uruchamianie | Wersje Qt.Usuń pułapki w pliku - Adjust Column Widths to Contents - Wyrównaj szerokości kolumn do ich zawartości + Delete Selected Breakpoints + Usuń zaznaczone pułapki Edit Breakpoint... @@ -27103,50 +22353,8 @@ Aby dodać wersje Qt wybierz Opcje | Budowanie i uruchamianie | Wersje Qt.Inne typy - - Debugger::DebuggerEnginePrivate - - Debugged executable - Debugowany program - - - Attempting to interrupt. - Próba przerwania. - - - - Debugger::Internal::DebuggerRunConfigWidget - - Debugger Settings - Ustawienia debuggera - - - Enable C++ - Uaktywnij C++ - - - Enable QML - Uaktywnij QML - - - Debug port: - Port debugowania: - - - <a href="qthelp://org.qt-project.qtcreator/doc/creator-debugging-qml.html">What are the prerequisites?</a> - <a href="qthelp://org.qt-project.qtcreator/doc/creator-debugging-qml.html">Jakie są wymagania?</a> - - - Enable Debugging of Subprocesses - Uaktywnij debugowanie podprocesów - - DebuggerPlugin - - Unable to create a debugger engine of the type '%1' - Nie można utworzyć silnika debuggera typu "%1" - Install &Debug Information Zainstaluj informację &debugową @@ -27162,6 +22370,18 @@ Aby dodać wersje Qt wybierz Opcje | Budowanie i uruchamianie | Wersje Qt.Attached to process %1. Dołączono do procesu %1. + + Attached to running application + Dołączono do uruchomionej aplikacji + + + Failed to attach to application: %1 + Nie można dołączyć do aplikacji: %1 + + + Debugger Error + Błąd debuggera + Debugger::Internal::GdbCoreEngine @@ -27464,38 +22684,6 @@ Wskakiwanie do wnętrza modułu lub ustawianie pułapek w plikach powinno dział Pokaż zależności dla "%1" - - Debugger::Internal::QmlAdapter - - Connecting to debug server %1:%2 - Łączenie z serwerem debugowym %1: %2 - - - Error: (%1) %2 - %1=error code, %2=error message - Błąd: (%1) %2 - - - Disconnected. - Rozłączony. - - - Connected. - Połączony. - - - Resolving host. - Rozwiązywanie adresu hosta. - - - Connecting to debug server. - Łączenie z serwerem debugowym. - - - Closing. - Zamykanie. - - Debugger::Internal::QmlInspectorAgent @@ -27507,40 +22695,6 @@ Wskakiwanie do wnętrza modułu lub ustawianie pułapek w plikach powinno dział Właściwości - - Debugger::Internal::QmlLiveTextPreview - - The %1 attribute at line %2, column %3 cannot be changed without reloading the QML application. - Atrybut %1 w linii %2, w kolumnie %3, nie może być zmieniony bez przeładowania aplikacji QML. - - - The %1 element at line %2, column %3 cannot be changed without reloading the QML application. - Element %1 w linii %2, w kolumnie %3, nie może być zmieniony bez przeładowania aplikacji QML. - - - The changes in JavaScript cannot be applied without reloading the QML application. - Nie można zastosować zmian w JavaScript bez przeładowania aplikacji QML. - - - The changes made cannot be applied without reloading the QML application. - Nie można zastosować zmian bez przeładowania aplikacji QML. - - - You can continue debugging, but behavior can be unexpected. - Można kontynuować debugowanie, ale zachowanie może być nieoczekiwane. - - - Reload QML - Przeładuj QML - - - - Debugger::Internal::QmlV8DebuggerClient - - Anonymous Function - Anonimowa funkcja - - Debugger::Internal::RegisterTreeView @@ -27757,10 +22911,6 @@ Wskakiwanie do wnętrza modułu lub ustawianie pułapek w plikach powinno dział Add New Expression Evaluator... - - Change Local Display Format... - Zmień format wyświetlania zmiennych lokalnych... - Copy View Contents to Clipboard Skopiuj zawartość widoku do schowka @@ -27813,14 +22963,6 @@ Wskakiwanie do wnętrza modułu lub ustawianie pułapek w plikach powinno dział Automatic Automatyczny - - Change Display for Type or Item... - Zmień wyświetlanie dla typu lub elementu... - - - Add Data Breakpoint... - Dodaj pułapkę warunkową... - Add Data Breakpoint at Object's Address (0x%1) Dodaj pułapkę warunkową pod adresem obiektu (0x%1) @@ -27873,6 +23015,18 @@ Wskakiwanie do wnętrza modułu lub ustawianie pułapek w plikach powinno dział Select Widget to Add into Expression Evaluator + + Remove All Expression Evaluators + + + + Change Local Display Format + + + + Open Memory Editor + Otwórz edytor pamięci + Open Memory Editor... Otwórz edytor pamięci... @@ -27897,26 +23051,14 @@ Wskakiwanie do wnętrza modułu lub ustawianie pułapek w plikach powinno dział Open Memory Editor Showing Stack Layout Otwórz edytor pamięci z układem stosu - - Copy Contents to Clipboard - Skopiuj zawartość do schowka - Copy Value to Clipboard Skopiuj wartość do schowka - - Show View Contents in Editor - Pokaż zawartość widoku w edytorze - Close Editor Tooltips Zamknij podpowiedzi edytora - - Expression: - Wyrażenie: - Locals & Expressions Zmienne lokalne i wyrażenia @@ -27995,10 +23137,6 @@ Wskakiwanie do wnętrza modułu lub ustawianie pułapek w plikach powinno dział &Refresh &Odśwież - - &Show... - &Pokaż... - &Show &Pokaż @@ -28018,10 +23156,6 @@ Wskakiwanie do wnętrza modułu lub ustawianie pułapek w plikach powinno dział Gerrit::Internal::GerritModel - - <html><head/><body><table><tr><td>Subject</td><td>%1</td></tr><tr><td>Number</td><td><a href="%11">%2</a></td></tr><tr><td>Owner</td><td>%3 <a href="mailto:%4">%4</a></td></tr><tr><td>Project</td><td>%5 (%6)</td></tr><tr><td>Status</td><td>%7, %8</td></tr><tr><td>Patch set</td><td>%9</td></tr>%10<tr><td>URL</td><td><a href="%11">%11</a></td></tr></table></body></html> - <html><head/><body><table><tr><td>Temat</td><td>%1</td></tr><tr><td>Numer</td><td><a href="%11">%2</a></td></tr><tr><td>Właściciel</td><td>%3 <a href="mailto:%4">%4</a></td></tr><tr><td>Projekt</td><td>%5 (%6)</td></tr><tr><td>Stan</td><td>%7, %8</td></tr><tr><td>Zestaw łat</td><td>%9</td></tr>%10<tr><td>URL</td><td><a href="%11">%11</a></td></tr></table></body></html> - Subject Temat @@ -28074,25 +23208,9 @@ Wskakiwanie do wnętrza modułu lub ustawianie pułapek w plikach powinno dział Parse error: "%1" Błąd parsowania: "%1" - - Parse error: '%1' -> %2 - Błąd parsowania: "%1" -> %2 - - - Parse error: '%1' - Błąd parsowania: "%1" - - - Parse error in line '%1' - Błąd parsowania w linii "%1" - Gerrit::Internal::QueryContext - - Gerrit - Gerrit - Querying Gerrit @@ -28114,10 +23232,10 @@ Wskakiwanie do wnętrza modułu lub ustawianie pułapek w plikach powinno dział Przekroczony czas oczekiwania - The gerrit process has not responded within %1s. + The gerrit process has not responded within %1 s. Most likely this is caused by problems with SSH authentication. Would you like to terminate it? - Proces gerrit nie odpowiedział po %1s. + Proces gerrit nie odpowiedział po %1 s. Najprawdopodobniej jest to problem autoryzacji SSH. Czy zakończyć proces? @@ -28143,10 +23261,6 @@ Czy zakończyć proces? HTTPS HTTPS - - Always prompt for repository folder - Zawsze pytaj o katalog repozytorium - &Host: &Host: @@ -28159,24 +23273,6 @@ Czy zakończyć proces? &ssh: &ssh: - - &Repository: - &Repozytorium: - - - Default repository where patches will be applied. - Domyślne repozytorium do którego będą aplikowane łaty. - - - Pr&ompt: - Py&taj: - - - If checked, user will always be -asked to confirm the repository path. - Jeśli zaznaczone, użytkownik będzie -zawsze pytany o potwierdzenie ścieżki do repozytorium. - &Port: &Port: @@ -28194,10 +23290,6 @@ zawsze pytany o potwierdzenie ścieżki do repozytorium. Gerrit::Internal::FetchContext - - Gerrit Fetch - Gerrit Fetch - Fetching from Gerrit Pobieranie danych z Gerrita @@ -28260,10 +23352,6 @@ were not verified among remotes in %3. Select different folder? Enter Local Repository for "%1" (%2) Podaj lokalne repozytorium dla "%1" (%2) - - Enter Local Repository for '%1' (%2) - Podaj lokalne repozytorium dla "%1" (%2) - Git::Internal::GitLogArgumentsWidget @@ -28286,6 +23374,10 @@ were not verified among remotes in %3. Select different folder? Git::Internal::GitSubmitEditorWidget + + Provide a valid email to commit. + + Detached HEAD Odłączony HEAD @@ -28650,14 +23742,6 @@ Spróbować ponownie? Failed to connect! Nie można uzyskać połączenia! - - QML Profiler: Connecting to %1:%2 ... - Profiler QML: łączenie z %1:%2... - - - QML Profiler: connected and running - Profiler QML: połączony i uruchomiony - QmlProfiler::Internal::QmlProfilerEventsWidget @@ -28772,26 +23856,6 @@ odniesienia do elementów w innych plikach, pętle, itd.) QmlProfiler::Internal::QmlProfilerTraceView - - Jump to previous event. - Skocz do poprzedniego zdarzenia. - - - Jump to next event. - Skocz do następnego zdarzenia. - - - Show zoom slider. - Pokaż suwak powiększania. - - - Select range. - Wybierz zakres. - - - View event information on mouseover. - Pokazuj informacje o zdarzeniach po najechaniu myszą. - Limit Events Pane to Current Range Ogranicz liczbę zdarzeń panelu do bieżącego zakresu @@ -28811,422 +23875,10 @@ odniesienia do elementów w innych plikach, pętle, itd.) Events Zdarzenia - - V8 - V8 - Timeline Oś czasu - - JavaScript - JavaScript - - - - Qnx::Internal::BlackBerryAbstractDeployStep - - Starting: "%1" %2 - Uruchamianie "%1" %2 - - - - Qnx::Internal::BlackBerryApplicationRunner - - Cannot determine device runtime version. - - - - Cannot determine API level version. - Nie można określić wersji poziomu API. - - - Confirmation - Potwierdzenie - - - The device runtime version (%1) does not match the API level version (%2). -This may cause unexpected behavior when debugging. -Do you want to continue anyway? - - - - API level version does not match Runtime version. - - - - Querying device runtime version... - - - - Launching application failed - Nie można uruchomić aplikacji - - - Checking qmljsdebugger command line argument. - - - - Cannot find Native Packager executable. - - - - Cannot read bar package manifest. - - - - Internal error: Cannot create temporary manifest file "%1" - - - - Cannot set command line arguments. - Nie można ustawić argumentów linii komend. - - - - Qnx::Internal::BlackBerryCreatePackageStep - - Create packages - Utwórz pakiety - - - Could not find packager command '%1' in the build environment. - Nie można odnaleźć komendy pakującej "%1" w środowisku budowania. - - - Could not find packager command "%1" in the build environment. - Nie można odnaleźć komendy pakującej "%1" w środowisku budowania. - - - No packages enabled for deployment. - Brak włączonych pakietów do instalacji. - - - BAR application descriptor file not specified. Check deployment settings. - Nie podano pliku deskryptora aplikacji, sprawdź ustawienia instalacji. - - - No package specified. Check deployment settings. - Nie podano pakietu, sprawdź ustawienia instalacji. - - - Could not create build directory "%1". - Nie można utworzyć katalogu budowania "%1". - - - In order to link to the correct Qt library specified in the deployment settings Qt Creator needs to update the Qt environment variables in the BAR application file as follows: - -<env var="LD_LIBRARY_PATH" value="%1"/> -<env var="QT_PLUGIN_PATH" value="%2"/> -<env var="QML_IMPORT_PATH" value="%3"/> - - - - - -Do you want to update it? - - - - Confirmation - Potwierdzenie - - - Error saving BAR application descriptor file "%1" - %2 - Błąd podczas zachowywania pliku BAR deskryptora aplikacji "%1" %2 - - - Could not create build directory '%1'. - Nie można utworzyć katalogu budowania "%1". - - - Missing passwords for signing packages. - Brak haseł do podpisania pakietów. - - - Error opening BAR application descriptor file "%1" - %2 - Błąd podczas otwierania pliku BAR deskryptora aplikacji "%1" %2 - - - Error preparing BAR application descriptor file. - Błąd przygotowywania pliku BAR deskryptora aplikacji. - - - Error opening BAR application descriptor file '%1' - %2 - Błąd otwierania pliku BAR deskryptora aplikacji "%1" %2 - - - Error saving prepared BAR application descriptor file '%1' - %2 - Błąd podczas zachowywania pliku BAR deskryptora aplikacji "%1" %2 - - - - Qnx::Internal::BlackBerryCreatePackageStepConfigWidget - - Use the Qt libraries shipped with the BlackBerry device. - Używaj bibliotek Qt dostarczonych z urządzeniem BlackBerry. - - - Include Qt libraries in the package. This will increase the package size. - Dołączaj biblioteki Qt do pakietu. Pakiet zwiększy swój rozmiar. - - - Use deployed Qt libraries on the device. - Używaj bibliotek Qt na urządzeniu. - - - Use Pre-installed Qt - Używaj preinstalowanego Qt - - - Bundle Qt in Package - Dowiązuj Qt do pakietu - - - Use Deployed Qt - Używaj zainstalowanego Qt - - - <b>Create packages</b> - <b>Utwórz pakiety</b> - - - Form - Formularz - - - Sign packages - Podpisane pakiety - - - CSK password: - Hasło CSK: - - - Keystore password: - - - - Note: This will store the passwords in a world-readable file. - Uwaga: hasła zostaną zachowane w pliku dostępnym dla wszystkich. - - - Save passwords - Zachowaj hasła - - - Show passwords - Pokaż hasła - - - Package in development mode - Pakiet w trybie deweloperskim - - - /accounts/devuser/ - /accounts/devuser/ - - - Deploy Now - Zainstaluj teraz - - - No device configured, cannot deploy. - Brak skonfigurowanego urządzenia, nie można zainstalować. - - - - Qnx::Internal::BlackBerryCreatePackageStepFactory - - Create BAR Packages - Utwórz pakiety BAR - - - - Qnx::Internal::BlackBerryDeployConfiguration - - Deploy to BlackBerry Device - Zainstaluj na urządzeniu BlackBerry - - - Setup Application Descriptor File - Ustaw plik deskryptora aplikacji - - - You need to set up a BAR descriptor file to enable packaging. -Do you want Qt Creator to generate it for your project (%1)? - Należy ustawić plik deskryptora aplikacji BAR aby umożliwić utorzenie pakietu. -Czy wygenerować plik BAR dla projektu (%1)? - - - Do not ask again for this project - Nie pytaj więcej o ten projekt - - - Reading the BAR descriptor template failed. - Błąd odczytu szablonu deskryptora BAR. - - - Writing the BAR descriptor file failed. - Błąd zapisu pliku deskryptora BAR. - - - Cannot Set up Application Descriptor File - Nie można ustawić pliku deskryptora aplikacji - - - - Qnx::Internal::BlackBerryDeployConfigurationFactory - - Deploy to BlackBerry Device - Zainstaluj na urządzeniu BlackBerry - - - - Qnx::Internal::BlackBerryDeployInformation - - Enabled - Aktywne - - - Application descriptor file - Plik deskryptora aplikacji - - - Package - Pakiet - - - - Qnx::Internal::BlackBerryDeployStep - - Deploy packages - Zainstaluj pakiety - - - Could not find deploy command '%1' in the build environment - Nie można odnaleźć komendy instalującej "%1" w środowisku budowania - - - Could not find deploy command "%1" in the build environment - Nie można odnaleźć komendy instalującej "%1" w środowisku budowania - - - No hostname specified for device - Brak nazwy hosta dla urządzenia - - - No packages enabled for deployment - Brak pakietów do instalacji - - - Package "%1" does not exist. Create the package first. - Pakiet "%1" nie istnieje. Najpierw go utwórz. - - - Package '%1' does not exist. Create the package first. - Pakiet "%1" nie istnieje. Najpierw go utwórz. - - - - Qnx::Internal::BlackBerryDeployStepConfigWidget - - <b>Deploy packages</b> - <b>Zainstaluj pakiety</b> - - - - Qnx::Internal::BlackBerryDeployStepFactory - - Deploy Package - Zainstaluj pakiet - - - - Qnx::Internal::BlackBerryDeviceConfiguration - - BlackBerry - BlackBerry - - - Connect to device - Połącz z urządzeniem - - - Disconnect from device - Rozłącz z urządzeniem - - - Deploy Qt libraries... - Instaluj biblioteki Qt... - - - - Qnx::Internal::BlackBerryDeviceConfigurationFactory - - BlackBerry Device - Urządzenie BlackBerry - - - - Qnx::Internal::BlackBerryDeviceConfigurationWizard - - New BlackBerry Device Configuration Setup - Nowa konfiguracja urządzenia BlackBerry - - - - Qnx::Internal::BlackBerryDeviceConfigurationWizardFinalPage - - Summary - Podsumowanie - - - The new device configuration will be created now. - Zostanie teraz utworzona nowa konfiguracja urządzenia. - - - - Qnx::Internal::BlackBerryQtVersion - - BlackBerry %1 - Qt Version is meant for BlackBerry - BlackBerry %1 - - - BlackBerry - BlackBerry - - - BlackBerry Native SDK: - Natywny SDK BlackBerry: - - - - Qnx::Internal::BlackBerryRunConfiguration - - Run on BlackBerry device - Uruchom na urządzeniu BlackBerry - - - - Qnx::Internal::BlackBerryRunControlFactory - - No active deploy configuration - Brak aktywnej konfiguracji instalacji - - - Target Qt version (%1) might not support QML profiling. Cascades applications are not affected and should work as expected. For more info see http://qt-project.org/wiki/Qt-Creator-with-BlackBerry-10 - - - - - Qnx::Internal::QnxAbstractQtVersion - - No SDK path set - Nie ustawiono ścieżki do SDK - Qnx::Internal::QnxDebugSupport @@ -29246,10 +23898,6 @@ Czy wygenerować plik BAR dla projektu (%1)? Warning: "slog2info" is not found on the device, debug output not available. Ostrzeżenie: brak"slog2info" na urządzeniu, komunikaty debugowe nie będą dostępne. - - Warning: "slog2info" is not found on the device, debug output not available! - Ostrzeżenie: brak"slog2info" na urządzeniu, komunikaty debugowe nie będą dostępne. - Qnx::Internal::QnxDeployConfigurationFactory @@ -29302,8 +23950,8 @@ Czy wygenerować plik BAR dla projektu (%1)? QNX - QNX Software Development Platform: - Platforma dewelopmentowa QNX: + No SDK path was set up. + Nie ustawiono ścieżki do SDK. @@ -29326,18 +23974,10 @@ Czy wygenerować plik BAR dla projektu (%1)? Executable: Plik wykonywalny: - - Arguments: - Argumenty: - Working directory: Katalog roboczy: - - Run in &terminal - Uruchom w &terminalu - QtSupport::CustomExecutableRunConfiguration @@ -29484,10 +24124,6 @@ w ścieżce. Cannot check for free disk space: "%1" is not an absolute path. Nie można sprawdzić wolnego miejsca na dysku: "%1" nie jest ścieżką bezwzględną. - - Unexpected output from remote process: '%1'. - Nieoczekiwany komunikat od zdalnego procesu: "%1". - The remote file system has only %n megabytes of free space, but %1 megabytes are required. @@ -29504,10 +24140,6 @@ w ścieżce. Zdalny system plików ma %n megabajtów wolnego miejsca, wznowiono pracę. - - Cannot check for free disk space: '%1' is not an absolute path. - Nie można sprawdzić wolnego miejsca na dysku: "%1" nie jest ścieżką bezwzględną. - RemoteLinux::Internal::RemoteLinuxCheckForFreeDiskSpaceStepWidget @@ -29794,6 +24426,14 @@ w ścieżce. VOBs list, separated by comma. Indexer will only traverse the specified VOBs. If left blank, all active VOBs will be indexed. + + Check out or check in files with no comment (-nc/omment). + + + + Do &not prompt for comment during check out or check in + + ClearCase::Internal::UndoCheckOut @@ -29864,13 +24504,6 @@ w ścieżce. Zachowaj aktywność elementu - - ClearCase::Internal::ClearCaseEditor - - Annotate version "%1" - Dołącz adnotację do wersji "%1" - - ClearCase::Internal::ClearCasePlugin @@ -30165,10 +24798,6 @@ w ścieżce. Enter activity headline - - CC Indexing - Indeksowanie CC - ClearCase::Internal::ClearCaseSubmitEditor @@ -30199,12 +24828,12 @@ w ścieżce. Komenda ClearCase - In order to use External diff, 'diff' command needs to be accessible. - Aby użyć zewnętrzego edytora różnic, należy udostępnić komendę "diff". + In order to use External diff, "diff" command needs to be accessible. + - DiffUtils is available for free download <a href="http://gnuwin32.sourceforge.net/packages/diffutils.htm">here</a>. Please extract it to a directory in your PATH. - DiffUtils można darmowo pobrać <a href="http://gnuwin32.sourceforge.net/packages/diffutils.htm">tutaj</a>. Rozpakuj pakiet w katalogu dostępnym ze zmiennej PATH. + DiffUtils is available for free download athttp://gnuwin32.sourceforge.net/packages/diffutils.htm.Extract it to a directory in your PATH. + @@ -30303,10 +24932,6 @@ w ścieżce. The <RCC> root element is missing. Brak głównego elementu <RCC>. - - Cannot write file. Disk full? - Nie można zapisać pliku. Pełny dysk? - ClearCase::Internal::ClearCaseControl @@ -30347,14 +24972,6 @@ w ścieżce. No debugger set up. Brak ustawionego debuggera. - - Debugger '%1' not found. - Brak debuggera "%1". - - - Debugger '%1' not executable. - Debugger "%1" nie jest plikiem wykonywalnym. - Debugger "%1" not found. Brak debuggera "%1". @@ -30372,8 +24989,24 @@ w ścieżce. - unknown - nieznany + Unknown debugger version + Nieznana wersja debuggera + + + Unknown debugger ABI + + + + Name of Debugger + Nazwa debuggera + + + Unknown debugger + Nieznany debugger + + + Unknown debugger type + Nieznany typ debuggera No Debugger @@ -30434,7 +25067,7 @@ w ścieżce. Nazwa aktywnego zestawu narzędzi. - The name of the currently active kit in a filesystem friendly version. + The name of the currently active kit in a filesystem-friendly version. Nazwa aktywnego zestawu narzędzi w wersji przyjaznej dla systemu plików. @@ -30493,10 +25126,6 @@ w ścieżce. ProjectExplorer::DeviceKitInformation - - Device does not match device type. - Urządzenie nie odpowiada typowi urządzenia. - No device set. Brak ustawionego urządzenia. @@ -30682,47 +25311,68 @@ w ścieżce. "mkspec" bieżącej wersji Qt. - None - Brak + The installation prefix of the current Qt version. + Przedrostek instalacji bieżącej wersji Qt. - Name of Qt Version - Nazwa wersji Qt + The installation location of the current Qt version's data. + Położenie danych wewnątrz instalacji bieżącej wersji Qt. - unknown - nieznana + The installation location of the current Qt version's header files. + Położenie plików nagłówkowych wewnątrz instalacji bieżącej wersji Qt. + + + The installation location of the current Qt version's library files. + Położenie plików bibliotecznych wewnątrz instalacji bieżącej wersji Qt. + + + The installation location of the current Qt version's documentation files. + Położenie plików z dokumentacją wewnątrz instalacji bieżącej wersji Qt. + + + The installation location of the current Qt version's executable files. + Położenie plików wykonywalnych wewnątrz instalacji bieżącej wersji Qt. + + + The installation location of the current Qt version's plugins. + Położenie wtyczek wewnątrz instalacji bieżącej wersji Qt. + + + The installation location of the current Qt version's imports. + Położenie importów wewnątrz instalacji bieżącej wersji Qt. + + + The installation location of the current Qt version's translation files. + Położenie plików z tłumaczeniami wewnątrz instalacji bieżącej wersji Qt. - - - CMakeProjectManager::Internal::ChooseCMakePage - CMake Executable: - Plik wykonywalny CMake: + The installation location of the current Qt version's examples. + Położenie przykładów wewnątrz instalacji bieżącej wersji Qt. - Choose CMake Executable - Wybierz plik wykonywalny CMake + The installation location of the current Qt version's demos. + Położenie dem wewnątrz instalacji bieżącej wersji Qt. - The CMake executable is valid. - Plik wykonywalny CMake jest poprawny. + The current Qt version's default mkspecs. + Domyślny mkspecs bieżącej wersji Qt. - Specify the path to the CMake executable. No CMake executable was found in the path. - Podaj ścieżkę do pliku wykonywalnego CMake. Nie odnaleziono go w ścieżce. + The current Qt's qmake version. + Wersja qmake bieżącej wersji Qt. - The CMake executable (%1) does not exist. - Plik wykonywalny CMake (%1) nie istnieje. + None + Brak - The path %1 is not an executable. - Ścieżka %1 nie wskazuje na plik wykonywalny. + Name of Qt Version + Nazwa wersji Qt - The path %1 is not a valid CMake executable. - Ścieżka %1 nie wskazuje na poprawny plik wykonywalny CMake. + unknown + nieznana @@ -30773,59 +25423,9 @@ w ścieżce. Select all, if possible: Zaznacz wszystko, jeśli to możliwe: - - Mixed - Mieszane - - - No Version Control System Found - Brak systemu kontroli wersji (VCS) - - - Cannot Set Permissions - Nie można ustawić praw dostępu - - - Cannot Save File - Nie można zachować pliku - - - Cannot open file %1 from version control system. -No version control system found. - Nie można otworzyć pliku %1 z systemu kontroli wersji. -Brak systemu kontroli wersji. - - - Cannot set permissions for %1 to writable. - Nie można uczynić pliku %1 zapisywalnym. - - - Cannot save file %1 - Nie można zachować pliku %1 - - - Canceled Changing Permissions - Anulowano zmianę praw dostępu - - - Could Not Change Permissions on Some Files - Nie można zmienić praw dostępu niektórych plików - - - See details for a complete list of files. - W szczegółach pełna lista plików. - - - Change &Permission - Zmień &prawa dostępu - Debugger::Internal::SymbolPathsDialog - - Dialog - Dialog - <html><head/><body><p>The debugger is not configured to use the public Microsoft Symbol Server.<br/>This is recommended for retrieval of the symbols of the operating system libraries.</p><p><span style=" font-style:italic;">Note:</span> It is recommended, that if you use the Microsoft Symbol Server, to also use a local symbol cache.<br/>A fast internet connection is required for this to work smoothly,<br/>and a delay might occur when connecting for the first time and caching the symbols.</p><p>What would you like to set up?</p></body></html> <html><head/><body><p>Debugger nie jest skonfigurowany do użycia publicznego Microsoft Symbol Servera.<br/>Zalecane jest pobranie symboli dla bibliotek systemu operacyjnego. </p><p><span style=" font-style:italic;"><i>Uwaga:</i> Zalecane jest używanie lokalnego cache'a z symbolami wraz z Microsoft Symbol Serverem.<br/>Wymagane jest szybkie połączenie z internetem do płynnego działania.<br>Może wystąpić opóźnienie przy pierwszym połączeniu i cache'owaniu symboli.</p><p>Czy skonfigurować?</p></body></html> @@ -30839,8 +25439,8 @@ Brak systemu kontroli wersji. Użyj Microsoft Symbol Servera - Do not ask again - Nie pytaj ponownie + Set up Symbol Paths + Ustaw ścieżki z symbolami @@ -30888,18 +25488,6 @@ Brak systemu kontroli wersji. Push to Gerrit Wyślij do Gerrita - - <b>Local repository:</b> - <b>Lokalne repozytorium:</b> - - - Destination: - Przeznaczenie: - - - R&emote: - Zdaln&e repozytorium: - &Topic: &Temat: @@ -30912,10 +25500,6 @@ Brak systemu kontroli wersji. Number of commits Liczba zmian - - &Push up to commit: - - Pushes the selected commit and all dependent commits. @@ -30924,18 +25508,6 @@ Brak systemu kontroli wersji. &Reviewers: &Recenzenci: - - Comma-separated list of reviewers. - -Partial names can be used if they are unambiguous. - Lista recenzentów, oddzielona przecinkami. - -Można używać częściowych nazw, jeśli będą unikatowe. - - - <b>Local repository:</b> %1 - <b>Lokalne repozytorium:</b> %1 - Number of commits between %1 and %2: %3 Liczba zmian pomiędzy %1 a %2: %3 @@ -30944,14 +25516,6 @@ Można używać częściowych nazw, jeśli będą unikatowe. ... Include older branches ... ... Dołącz inne gałęzie ... - - &Local branch: - &Lokalna gałąź: - - - Target &branch: - Docelowa &gałąź: - Comma-separated list of reviewers. @@ -30960,6 +25524,22 @@ Reviewers can be specified by nickname or email address. Spaces not allowed. Partial names can be used if they are unambiguous. + + Push: + + + + Commits: + + + + Local repository + + + + To: + Do: + Mercurial::Internal::AuthenticationDialog @@ -30967,10 +25547,6 @@ Partial names can be used if they are unambiguous. Dialog Dialog - - User name: - Nazwa użytkownika: - Password: Hasło: @@ -31046,8 +25622,12 @@ Partial names can be used if they are unambiguous. Może to sprawić, że aplikacja stanie się podatna na ataki. Używaj tylko w bezpiecznym środowisku. - Parallel Jobs: - Liczba równoległych zadań: + Could not split properties. + Nie można rozdzielić właściwości. + + + No ":" found in property definition. + Brak ":" w definicji właściwości. Flags: @@ -31074,12 +25654,20 @@ Partial names can be used if they are unambiguous. Budowanie będzie kontynuowane, nawet jeśli wystąpią błędy, o ile budowanie w dalszym ciągu będzie możliwe. - Instead of using the file timestamps that are stored in the build graph, retrieve the timestamps from the file system. - Zamiast używania czasów dostępu, zgromadzonych w grafie budowania, pobiera je z systemu plików. + Parallel jobs: + Liczba równoległych zadań: + + + Show command lines + Pokazuj linie komend + + + Install + Zainstaluj - Check timestamps - Spawdzaj czas dostępu + Clean install root + Wyczyść korzeń instalacji @@ -31181,18 +25769,10 @@ Partial names can be used if they are unambiguous. Text Tekst - - The text shown on the button - Tekst pokazany na przycisku - Checked Wciśnięty - - The state of the button - Stan przycisku - Text displayed on the button. Tekst pokazany na przycisku. @@ -31260,14 +25840,6 @@ Partial names can be used if they are unambiguous. Text Tekst - - The text shown on the check box - Tekst etykiety przycisku wyboru - - - The state of the check box - Stan przycisku wyboru - Determines whether the check box gets focus if pressed. Określa, czy przycisk wyboru otrzymuje fokus po naciśnięciu. @@ -31299,14 +25871,6 @@ Partial names can be used if they are unambiguous. Determines whether the combobox gets focus if pressed. Określa, czy pole wyboru otrzymuje fokus po naciśnięciu. - - Tool tip - Podpowiedź - - - The tool tip shown for the combobox. - Podpowiedź ukazująca się dla pola wyboru. - Focus on press Fokus po naciśnięciu @@ -31322,10 +25886,6 @@ Partial names can be used if they are unambiguous. Text Tekst - - The text label for the radio button - Tekst etykiety przycisku opcji - Text label for the radio button. Tekst etykiety przycisku opcji. @@ -31373,26 +25933,14 @@ Partial names can be used if they are unambiguous. Document margins Marginesy dokumentu - - The margins of the text area - Marginesy pola tekstowego - Text Area Obszar tekstowy - - The text shown on the text area - Tekst pokazany w obszarze tekstowym - Frame width Szerokość ramki - - The width of the frame - Szerokość ramki - Margins of the text area. Marginesy pola tekstowego. @@ -31448,18 +25996,10 @@ Partial names can be used if they are unambiguous. Text Tekst - - The text shown on the text field - Tekst pokazany w polu tekstowym - Placeholder text Tekst zastępczy - - The placeholder text - Tekst zastępczy - Read only Tylko do odczytu @@ -31468,14 +26008,6 @@ Partial names can be used if they are unambiguous. Determines whether the text field is read only. Określa, czy pole tekstowe jest edytowalne. - - Password mode - Tryb hasła - - - Determines whether the text field is in password mode. - Określa, czy pole tekstowe jest w trybie hasła. - Text shown on the text field. Tekst pokazany w polu tekstowym. @@ -31538,12767 +26070,10895 @@ Partial names can be used if they are unambiguous. - Qnx::Internal::BarDescriptorEditorAssetsWidget + VcsBase::SubmitEditorWidget - Form - Formularz + Subversion Submit + Wrzuć do Subversion - Add... - Dodaj... + Descriptio&n + &Opis - Remove - Usuń + F&iles + Pl&iki + + + %1 %2/%n File(s) + + %1 %2 z %n pliku + %1 %2 z %n plików + %1 %2 z %n plików + - Path - Ścieżka + &Commit + &Wrzuć - Destination - Przeznaczenie + Select All + Check all for submit + Zaznacz wszystko - Entry-Point - Punkt wejścia + Unselect All + Uncheck all for submit + Odznacz wszystko - Select File to Add - Wybierz plik do dodania + Select a&ll + Zaznacz &wszystko - Qnx::Internal::BarDescriptorEditorAuthorInformationWidget + ExtensionSystem::PluginErrorOverview - Form - Formularz + Continue + Kontynuuj + + + QmlJS::QrcParser - Author: - Autor: + XML error on line %1, col %2: %3 + Błąd XML w linii %1, w kolumnie %2: %3 - Author ID: - Identyfikator autora: + The <RCC> root element is missing. + Brak głównego elementu <RCC>. + + + QmlJS::SimpleAbstractStreamReader - Set from debug token... - + Cannot find file %1. + Brak pliku %1. - Select Debug Token - + Could not parse document. + Błąd parsowania dokumentu. - Debug token: - + Expected document to contain a single object definition. + Oczekiwano dokumentu zawierającego pojedynczą definicję obiektu. - Error Reading Debug Token - + Expected expression statement after colon. + Oczekiwano składnika wyrażenia po dwukropku. - There was a problem reading debug token. - + Expected expression statement to be a literal. + Oczekiwano literału jako składnika wyrażenia. - Qnx::Internal::BarDescriptorEditorEntryPointWidget - - Form - Formularz - - - Name: - Nazwa: - - - Description: - Opis: - + QmlJS::SimpleReader - Icon: - Ikona: + Property is defined twice. + Właściwość jest zdefiniowana dwukrotnie. + + + QmlJS::StaticAnalysisMessages - Clear - Wyczyść + Do not use "%1" as a constructor. + Nie używaj "%1" jako konstruktora. - Splash screens: - + Invalid value for enum. + Niepoprawna wartość dla typu wyliczeniowego. - Add... - Dodaj... + Enum value must be a string or a number. + Wartość typu wyliczeniowego musi być ciągiem znakowym lub liczbą. - Remove - Usuń + Number value expected. + Oczekiwano wartości liczbowej. - Images (*.jpg *.png) - Pliki graficzne (*.jpg *.png) + Boolean value expected. + Oczekiwano wartości boolowskiej. - Select Splash Screen - + String value expected. + Oczekiwano wartości w postaci ciągu tekstowego. - <font color="red">Could not open "%1" for reading.</font> - <font color="red">Nie można otworzyć '%1' do odczytu.</font> + Invalid URL. + Niepoprawny URL. - <font color="red">Could not open '%1' for reading.</font> - <font color="red">Nie można otworzyć '%1' do odczytu.</font> + File or directory does not exist. + Plik lub katalog nie istnieje. - <font color="red">The selected image is too big (%1x%2). The maximum size is %3x%4 pixels.</font> - <font color="red">Wybrany plik graficzny jest za duży (%1x%2). Maksymalny rozmiar to %3x%4 piksli.</font> + Invalid color. + Niepoprawny kolor. - - - Qnx::Internal::BarDescriptorEditorEnvironmentWidget - Form - Formularz + Anchor line expected. + Oczekiwano linii kotwicznej. - Device Environment - Środowisko urządzenia + Duplicate property binding. + Powielone powiązanie właściwości. - - - Qnx::Internal::BarDescriptorEditorGeneralWidget - Form - Formularz + Id expected. + Oczekiwano identyfikatora. - Orientation: - Orientacja: + Invalid id. + Niepoprawny identyfikator. - Chrome: - Chrome: + Duplicate id. + Powielony identyfikator. - Transparent main window - Główne okno przezroczyste + Invalid property name "%1". + Niepoprawna nazwa właściwości "%1". - Application Arguments: - Argumenty aplikacji: + "%1" does not have members. + "%1" nie posiada składników. - Default - Domyślna + "%1" is not a member of "%2". + "%1" nie jest składnikiem "%2". - Auto-orient - Automatyczna + "%1" already is a formal parameter. + "%1" jest już formalnym parametrem. - Landscape - Pejzaż + "%1" already is a function. + "%1" jest już funkcją. - Portrait - Portret + var "%1" is used before its declaration. + Zmienna "%1" jest użyta przed jej deklaracją. - Standard - Standard + "%1" already is a var. + "%1" jest już zmienną. - None - Brak + "%1" is declared more than once. + "%1" jest zadeklarowana więcej niż jeden raz. - - - Qnx::Internal::BarDescriptorEditorPackageInformationWidget - Form - Formularz + Function "%1" is used before its declaration. + Funkcja "%1" jest użyta przed jej deklaracją. - Package ID: - Identyfikator pakietu: + Could not resolve the prototype "%1" of "%2". + Nie można rozwiązać prototypu "%1" klasy "%2". - Package version: - Wersja pakietu: + Could not resolve the prototype "%1". + Nie można rozwiązać prototypu "%1". - Package build ID: - Identyfikator wersji pakietu: + Prototype cycle, the last non-repeated component is "%1". + Cykl w prototypie, ostatni niepowtórzony komponent to "%1". - - - Qnx::Internal::BarDescriptorEditorPermissionsWidget - Form - Formularz + Invalid property type "%1". + Niepoprawna nazwa właściwości "%1". - Select All - Zaznacz wszystko + Missing property "%1". + Brak właściwości "%1". - Deselect All - Odznacz wszystko + This type (%1) is not supported in the Qt Quick Designer. + Ten typ (%1) nie jest obsługiwany przez Qt Quick Designera. - - - Qnx::Internal::BlackBerryCreateCertificateDialog - Create Certificate - Utwórz certyfikat + This type (%1) is not supported as a root element by Qt Quick Designer. + Ten typ (%1) nie jest obsługiwany jako główny element przez Qt Quick Designera. - Author: - Autor: + This type (%1) is not supported as a root element of a Qt Quick UI form. + Ten typ (%1) nie jest obsługiwany jako główny element formularza Qt Quick UI. - Password: - Hasło: + This type (%1) is not supported in a Qt Quick UI form. + Ten typ (%1) nie jest obsługiwany w formularzu Qt Quick UI. - Confirm password: - Potwierdź hasło: + Functions are not supported in a Qt Quick UI form. + Funkcje nie są obsługiwane w formularzach Qt Quick UI. - Show password - Pokaż hasło + JavaScript blocks are not supported in a Qt Quick UI form. + - Status - Stan + Behavior type is not supported in a Qt Quick UI form. + - Base directory does not exist. - Katalog bazowy nie istnieje. + States are only supported in the root item in a Qt Quick UI form. + Stany są obsługiwane jedynie w głównym elemencie formularza Qt Quick UI. - The entered passwords do not match. - Wprowadzone hasła nie zgadzają się. + Referencing the parent of the root item is not supported in a Qt Quick UI form. + Odwołanie do rodzica elementu głównego nie jest obsługiwane w formularzu Qt Quick UI. - Password must be at least 6 characters long. - Hasło musi się składać przynajmniej z sześciu znaków. + Assignment in condition. + Podstawienie w warunku. - Are you sure? - Czy kontynuować? + Unterminated non-empty case block. + Niezakończony niepusty blok "case". - The file '%1' will be overwritten. Do you want to proceed? - Plik "%1" zostanie nadpisany. Kontynuować? + Do not use 'eval'. + Nie używaj "eval". - The file "%1" will be overwritten. Do you want to proceed? - Plik "%1" zostanie nadpisany. Kontynuować? + Unreachable. + Nieosiągalne. - The blackberry-keytool process is already running. - + Do not use 'with'. + Nie używaj "with". - The password entered is invalid. - Wprowadzone hasło jest niepoprawne. + Do not use comma expressions. + Nie używaj wyrażeń przecinkowych. - The password entered is too short. - Wprowadzone hasło jest za krótkie. + Unnecessary message suppression. + Niepotrzebne stłumienie komunikatu. - Invalid output format. - Niepoprawny format wyjściowy. + The 'function' keyword and the opening parenthesis should be separated by a single space. + Słowo kluczowe "function" i nawias otwierający powinny być oddzielone pojedynczą spacją. - An unknown error occurred. - Wystąpił nieznany błąd. + Do not use stand-alone blocks. + Nie używaj samodzielnych bloków. - Error - Błąd + Do not use void expressions. + Nie używaj wyrażeń "void". - Please be patient... - Cierpliwości... + Confusing pluses. + Mylne plusy. - - - Qnx::Internal::BlackBerryDebugTokenRequestDialog - Request Debug Token - + Confusing minuses. + Mylne minusy. - Debug token path: - + Declare all function vars on a single line. + Zadeklaruj wszystkie zmienne funkcji w pojedynczej linii. - Device PIN: - PIN urządzenia: + Unnecessary parentheses. + Nadmiarowe nawiasy. - Status - Stan + == and != may perform type coercion, use === or !== to avoid it. + == i != mogą dokonać konwersji typu, zamiast tego używaj === lub !==. - BAR Files (*.bar) - Pliki BAR (*.bar) + Expression statements should be assignments, calls or delete expressions only. + Składnikami wyrażenia mogą być tylko przypisania, wywołania lub "delete". - Requesting Device PIN... - Oczekiwanie na PIN urządzenia... + Place var declarations at the start of a function. + Deklaracje zmiennych powinny znajdować się na początku funkcji. - Base directory does not exist. - Katalog bazowy nie istnieje. + Use only one statement per line. + Używaj tylko jednego wyrażenia w linii. - Are you sure? - Czy kontynuować? + Unknown component. + Nieznany komponent. - The file '%1' will be overwritten. Do you want to proceed? - Plik "%1" zostanie nadpisany. Kontynuować? + == and != perform type coercion, use === or !== to avoid it. + == i != mogą dokonać konwersji typu, zamiast tego używaj === lub !==. - The file "%1" will be overwritten. Do you want to proceed? - Plik "%1" zostanie nadpisany. Kontynuować? + Calls of functions that start with an uppercase letter should use 'new'. + Wywołania funkcji, które rozpoczynają się wielką literą, powinny używać "new". - Failed to request debug token: - + Use 'new' only with functions that start with an uppercase letter. + "new" powinno być użyte jedynie dla funkcji, które rozpoczynają się wielką literą. - Wrong CSK password. - Złe hasło CSK. + Use spaces around binary operators. + Używaj spacji po obu stronach operatorów binarnych. - Wrong keystore password. - + Unintentional empty block, use ({}) for empty object literal. + Niezamierzony pusty blok, użyj ({}) dla pustego literału obiektowego. - Network unreachable. - Sieć nieosiągalna. + Use %1 instead of 'var' or 'variant' to improve performance. + Używaj %1 zamiast "var" lub "variant" aby poprawić wydajność. - Illegal device PIN. - Niepoprawny PIN urządzenia. + Object value expected. + Oczekiwano wartości w postaci obiektu. - Failed to start inferior process. - Nie można uruchomić podprocesu. + Array value expected. + Oczekiwano wartości w postaci tablicy. - Inferior processes timed out. - Przekroczony czas oczekiwania na podproces. + %1 value expected. + Oczekiwano wartości w postaci %1. - Inferior process has crashed. - Podproces zakończył pracę błędem. + Maximum number value is %1. + Maksymalną wartością liczbową jest %1. - Failed to communicate with the inferior process. - Nie można skomunikować się z podprocesem. + Minimum number value is %1. + Minimalną wartością liczbową jest %1. - Not yet registered to request debug tokens. - + Maximum number value is exclusive. + Maksymalna wartość liczbowa jest wyłączna. - An unknwon error has occurred. - Wystąpił nieznany błąd. + Minimum number value is exclusive. + Minimalna wartość liczbowa jest wyłączna. - Error - Błąd + String value does not match required pattern. + Wartość ciągu tekstowego nie odpowiada wymaganemu wzorcowi. - Requesting debug token... - + Minimum string value length is %1. + Minimalna długość wartości ciągu tekstowego to %1. - - - Qnx::Internal::BlackBerryImportCertificateDialog - Import Certificate - Zaimportuj certyfikat + Maximum string value length is %1. + Maksymalna długość wartości ciągu tekstowego to %1. - Path: - Ścieżka: + %1 elements expected in array value. + Oczekiwano %1 elementów w tablicy wartości. - Password: - Hasło: + Imperative code is not supported in the Qt Quick Designer. + Kod imperatywny nie jest obsługiwany w Qt Quick Designerze. - PKCS 12 Archives (*.p12) - Archiwa PKCS 12 (*.p12) + Reference to parent item cannot be resolved correctly by the Qt Quick Designer. + Qt Quick Designer nie może poprawnie rozwiązać referencji do rodzica elementu. - The keystore password is invalid. - + This visual property binding cannot be evaluated in the local context and might not show up in Qt Quick Designer as expected. + To lokalne powiązanie właściwości nie może zostać obliczone w lokalnym kontekście, ani nie możne zostać prawidłowo pokazane w Qt Quick Designerze. - Error parsing inferior process output. - Błąd parsowania wyjścia podprocesu. + Qt Quick Designer only supports states in the root item. + Qt Quick Designer obsługuje jedynie stany w głównym elemencie. - An unknown error has occurred. - Wystąpił nieznany błąd. + Using Qt Quick 1 code model instead of Qt Quick 2. + Użyto modelu kodu Qt Quick 1 zamiast Qt Quick 2. + + + Android::Internal::AndroidGdbServerKitInformation - Error - Błąd + GDB server + Serwer GDB - Qnx::Internal::BlackBerryKeysWidget + Android::Internal::AndroidGdbServerKitInformationWidget - Form - Formularz + Manage... + Zarządzaj... - BlackBerry Signing Authority - + Auto-detect + Wykryj automatycznie - Developer Certificate - Certyfikat dewelopera + Edit... + Modyfikuj... - Error - Błąd + Android GDB server + Serwer GDB Androida - STATUS - STAN + The GDB server to use for this kit. + Serwer GDB użyty w tym zestawie narzędzi. - Path: - Ścieżka: + &Binary: + Plik &binarny: - PATH - ŚCIEŻKA + GDB Server for "%1" + Serwer GDB dla "%1" + + + Android::Internal::AndroidManifestEditor - Author: - Autor: + General + Ogólne - LABEL - ETYKIETA + XML Source + Źródło XML + + + Android::Internal::AndroidManifestEditorFactory - No developer certificate has been found. - Brak certyfikatu deweloperskiego. + Android Manifest editor + Edytor plików manifest Androida + + + Android::Internal::AndroidManifestEditorWidget - Open Certificate - Otwórz certyfikat + Package + Pakiet - Clear Certificate - Wyczyść certyfikat + <p align="justify">Please choose a valid package name for your application (for example, "org.example.myapplication").</p><p align="justify">Packages are usually defined using a hierarchical naming pattern, with levels in the hierarchy separated by periods (.) (pronounced "dot").</p><p align="justify">In general, a package name begins with the top level domain name of the organization and then the organization's domain and then any subdomains listed in reverse order. The organization can then choose a specific name for their package. Package names should be all lowercase characters whenever possible.</p><p align="justify">Complete conventions for disambiguating package names and rules for naming packages when the Internet domain name cannot be directly used as a package name are described in section 7.7 of the Java Language Specification.</p> + - Path - Ścieżka + Package name: + Nazwa pakietu: + + + The package name is not valid. + Niepoprawna nazwa pakietu. - Author - Autor + Version code: + Kod wersji: - PINs - PINy + Version name: + Nazwa wersji: - Expiry - Ważność + Sets the minimum required version on which this application can be run. + Ustawia minimalną wymaganą wersję, z którą ta aplikacja może zostać uruchomiona. - Qt Creator - Qt Creator + Not set + Nie ustawiona - Invalid certificate password. Try again? - Niepoprawne hasło certyfikatu. Spróbować ponownie? + Minimum required SDK: + Minimalnie wymagane SDK: - Error loading certificate. - Błąd ładowania certyfikatu. + Sets the target SDK. Set this to the highest tested version. This disables compatibility behavior of the system for your application. + - This action cannot be undone. Would you like to continue? - Ta akcja nie będzie mogła zostać cofnięta. Kontynuować? + Target SDK: + Docelowe SDK: - It appears you are using legacy key files. Please refer to the <a href="%1">BlackBerry website</a> to find out how to update your keys. - Użyto starych kluczy. Na <a href="%1">stronie BlackBerry</a> można znaleźć informacje o tym, jak je uaktualnić. + Application + Aplikacja - No keys found. Please refer to the <a href="%1">BlackBerry website</a> to find out how to request your keys. - Brak kluczy. Na <a href="%1">stronie BlackBerry</a> można znaleźć informacje o tym, jak je uzyskać. + Application name: + Nazwa aplikacji: - Select Debug Token + Activity name: - Bar file (*.bar) - Plik BAR (*.bar) + Run: + Uruchom: - Invalid Debug Token - + Select low DPI icon. + Wybierz ikonę o małym DPI. - Debug token file %1 cannot be read. - + Select medium DPI icon. + Wybierz ikonę o średnim DPI. - Confirmation - Potwierdzenie + Select high DPI icon. + Wybierz ikonę o dużym DPI. - Are you sure you want to remove %1? - Czy usunąć %1? + The structure of the Android manifest file is corrupted. Expected a top level 'manifest' node. + Struktura pliku manifest Androida jest uszkodzona. Oczekiwano głównego elementu "manifest". - Failed to request debug token: - + The structure of the Android manifest file is corrupted. Expected an 'application' and 'activity' sub node. + Struktura pliku manifest Androida jest uszkodzona. Oczekiwano podelementów "application" i "activity". - Wrong CSK password. - Złe hasło CSK. + API %1: %2 + API %1: %2 - Wrong keystore password. - + Application icon: + Ikona aplikacji: - Network unreachable. - Sieć nieosiągalna. + Permissions + Prawa dostępu - Illegal device PIN. - Niepoprawny PIN urządzenia. + Include default permissions for Qt modules. + Ustaw domyślne prawa dostępu dla modułów Qt. - Failed to start inferior process. - Nie można uruchomić podprocesu. + Include default features for Qt modules. + Ustaw domyślne cechy dla modułów Qt. - Inferior processes timed out. - Przekroczony czas oczekiwania na podproces. + Remove + Usuń - Inferior process has crashed. - Podproces zakończył pracę błędem. + Add + Dodaj - Failed to communicate with the inferior process. - Nie można skomunikować się z podprocesem. + Could not parse file: "%1". + Błąd parsowania pliku: "%1". - Not yet registered to request debug tokens. - + %2: Could not parse file: "%1". + %2: Błąd parsowania pliku: "%1". - An unknown error has occurred. - Wystąpił nieznany błąd. + Goto error + - Your keys are ready to be used - Klucze są gotowe do użycia + Choose Low DPI Icon + Wybierz ikonę o małym dpi - Create Certificate... - Utwórz certyfikat... + PNG images (*.png) + Pliki graficzne (*.png) - Debug Tokens - + Choose Medium DPI Icon + Wybierz ikonę o średnim dpi - Request... - Żądanie... + Choose High DPI Icon + Wybierz ikonę o dużym dpi + + + Bookmarks::Internal::BookmarkManager - Import... - Importuj... + Edit Bookmark + Zmodyfikuj zakładkę - Edit... - Modyfikuj... + Note text: + Tekst notatki: - Remove - Usuń + Line number: + Numer linii: - Qnx::Internal::BlackBerryNDKSettingsWidget + CMakeProjectManager::Internal::GeneratorInfo - Form - Formularz + Ninja (%1) + Ninja (%1) - Remove - Usuń + NMake Generator (%1) + Generator NMake (%1) - Auto-Detected - Automatycznie wykryte + MinGW Generator (%1) + Generator MinGW (%1) - Manual - Ustawione ręcznie + Unix Generator (%1) + Generator Unix (%1) + + + CMakeProjectManager::Internal::NoKitPage - Configuration - Konfiguracja + Check Kits + Sprawdzenie narzędzi budowania - API Levels - Poziomy API + There are compatible kits. + Istnieją kompatybilne zestawy narzędzi. - Runtimes - + Qt Creator has no kits that are suitable for CMake projects. Please configure a kit. + Brak zestawów narzędzi dla projektów CMake. Skonfiguruj zestaw. + + + Core::ICore - Invalid target %1: - + (%1) + (%1) - - Target no longer installed. - + Qt Creator %1%2 + Qt Creator %1%2 - - No NDK environment file found. - - Brak pliku ze środowiskiem NDK. + Based on Qt %1 (%2, %3 bit) + Bazujący na Qt %1 (%2, %3 bitowy) + + + Core::Internal::ProgressManagerPrivate - - No Qt version found. - - Brak wersji Qt. + Toggle Progress Details + Przełącz szczegóły postępu - - No compiler found. - - Brak kompilatora. + Ctrl+Shift+0 + Ctrl+Shift+0 - - No debugger found for device. - - Brak debuggera dla urządzenia. + Alt+Shift+0 + Alt+Shift+0 + + + CppEditor::Internal::CppEditorPlugin - - No debugger found for simulator. - - Brak debuggera dla symulatora. + Shift+F2 + Shift+F2 - Clean BlackBerry 10 Configuration - Wyczyść konfigurację BlackBerry 10 + Additional Preprocessor Directives... + Dodatkowe dyrektywy preprocesora... - Are you sure you want to remove: - %1? - Czy usunąć: -%1? + Switch Between Function Declaration/Definition + Przełącz między deklaracją a definicją funkcji - Runtime Information - + Open Function Declaration/Definition in Next Split + Otwórz deklarację / definicję metody w nowym, sąsiadującym oknie - API Level Information - Informacja o poziomie API + Meta+E, Shift+F2 + Meta+E, Shift+F2 - Environment file: - Plik ze środowiskiem: + Ctrl+E, Shift+F2 + Ctrl+E, Shift+F2 - Confirmation - Potwierdzenie + Find Usages + Znajdź użycia - Are you sure you want to uninstall %1? - Czy zdezinstalować %1? + Ctrl+Shift+U + Ctrl+Shift+U - Newest Version - Najnowsza wersja + Open Type Hierarchy + Otwórz hierarchię typów - Activate - Uaktywnij + Meta+Shift+T + Meta+Shift+T - Deactivate - Zdezaktywuj + Ctrl+Shift+T + Ctrl+Shift+T - Default API level: - Domyślny poziom API: + Open Include Hierarchy + Otwórz hierarchię dołączeń - Add... - Dodaj... + Meta+Shift+I + Meta+Shift+I - Clean Up - Wyczyść + Ctrl+Shift+I + Ctrl+Shift+I - GroupBox - GroupBox + Rename Symbol Under Cursor + Zmień nazwę symbolu pod kursorem - Path: - Ścieżka: + CTRL+SHIFT+R + CTRL+SHIFT+R - Name: - Nazwa: + Reparse Externally Changed Files + Ponownie przeparsuj pliki zewnętrznie zmodyfikowane - Version: - Wersja: + Inspect C++ Code Model... + Przejrzyj model kodu C++... - Host: - Host: + Meta+Shift+F12 + Meta+Shift+F12 - Target: - Cel: + Ctrl+Shift+F12 + Ctrl+Shift+F12 - Qnx::Internal::BlackBerrySigningPasswordsDialog + CppEditor::QuickFix + + Move Definition Outside Class + Przenieś definicję na zewnątrz klasy + - Package signing passwords - Hasła podpisujące pakiety + Move Definition to %1 + Przenieś definicję do %1 - CSK password: - Hasło CSK: + Move All Function Definitions Outside Class + Przenieś wszystkie definicje funkcji poza klasę - Keystore password: - + Move All Function Definitions to %1 + Przenieś wszystkie definicje funkcji do %1 + + + Move Definition to Class + Przenieś definicję do klasy + + + Insert Virtual Functions of Base Classes + Wstaw wirtualne metody klas bazowych - VcsBase::SubmitEditorWidget + CppEditor::Internal::InsertVirtualMethodsDialog - Subversion Submit - Wrzuć do Subversion + Insert Virtual Functions + Wstaw wirtualne metody - Descriptio&n - &Opis + &Functions to insert: + &Metody do wstawienia: - F&iles - Pl&iki + &Hide reimplemented functions + &Ukryj nadpisane funkcje - Check a&ll - &Zaznacz wszystko + &Insertion options: + Opcje &wstawiania: - - %1 %2/%n File(s) - - %1 %2 z %n pliku - %1 %2 z %n plików - %1 %2 z %n plików - + + Insert only declarations + Wstaw tylko deklaracje - &Commit - &Wrzuć + Insert definitions inside class + Wstaw definicje wewnątrz klasy - Select All - Check all for submit - Zaznacz wszystko + Insert definitions outside class + Wstaw definicje na zewnątrz klasy - Unselect All - Uncheck all for submit - Odznacz wszystko + Insert definitions in implementation file + Wstaw definicje w pliku z implementacjami - Check All - Check all for submit - Zaznacz wszystko + Add "&virtual" to function declaration + Dodaj "&virtual" do deklaracji funkcji - Uncheck All - Uncheck all for submit - Odznacz wszystko + Add "override" equivalent to function declaration: + Dodaj odpowiednik "override" do deklaracji funkcji: - Select a&ll - Zaznacz &wszystko + Clear Added "override" Equivalents + Usuń dodany odpowiednik "override" - ExtensionSystem::PluginErrorOverview + CppTools::Internal::BuiltinIndexingSupport - Continue - Kontynuuj + Parsing C/C++ Files + Parsowanie plików C / C++ - CppQmlTypesLoader + CPlusplus::CheckSymbols - %1 seems not to be encoded in UTF8 or has a BOM. - Wygląda na to, że %1 nie jest zakodowane w UTF-8 lub posiada BOM. + Only virtual functions can be marked 'override' + Jedynie funkcje wirtualne mogą być opatrzone "override" - QmlJS::QrcParser + CPlusPlus::CheckSymbols - XML error on line %1, col %2: %3 - Błąd XML w linii %1, w kolumnie %2: %3 + Only virtual functions can be marked 'final' + Jedynie funkcje wirtualne mogą być opatrzone "final" - The <RCC> root element is missing. - Brak głównego elementu <RCC>. + Expected a namespace-name + Oczekiwano nazwy przestrzeni nazw + + + Too many arguments + Za dużo argumentów - QmlJS::SimpleAbstractStreamReader + CplusPlus::CheckSymbols - Cannot find file %1. - Brak pliku %1. + Too few arguments + Za mało argumentów + + + Cvs::Internal::CvsControl - Could not parse document. - Błąd parsowania dokumentu. + &Edit + &Edycja - Expected document to contain a single object definition. - Oczekiwano dokumentu zawierającego pojedynczą definicję obiektu. + CVS Checkout + Kopia robocza CVS + + + Debugger::Internal::CdbPathsPageWidget - Expected expression statement after colon. - Oczekiwano składnika wyrażenia po dwukropku. + Symbol Paths + Ścieżki z symbolami - Expected expression statement to be a literal. - Oczekiwano literału jako składnika wyrażenia. + Source Paths + Ścieżki ze źródłami - QmlJS::SimpleReader + Debugger::Internal::CdbPathsPage - Property is defined twice. - Właściwość jest zdefiniowana dwukrotnie. + CDB Paths + Ścieżki CDB - QmlJS::StaticAnalysisMessages + Debugger::Internal::CommonOptionsPageWidget - Do not use '%1' as a constructor. - Nie używaj "%1" jako konstruktora. + Behavior + Zachowanie - Do not use "%1" as a constructor. - Nie używaj "%1" jako konstruktora. + Use alternating row colors in debug views + Używaj alternatywnych kolorów wierszy w widokach debugowych - Invalid value for enum. - Niepoprawna wartość dla typu wyliczeniowego. + Debugger font size follows main editor + Rozmiar czcionki debuggera wzięty z głównego edytora - Enum value must be a string or a number. - Wartość typu wyliczeniowego musi być ciągiem znakowym lub liczbą. + Use tooltips in main editor while debugging + Używaj podpowiedzi w głównym edytorze podczas debugowania - Number value expected. - Oczekiwano wartości liczbowej. + Changes the font size in the debugger views when the font size in the main editor changes. + Zmienia rozmiar czcionki w widokach debuggera, gdy zostanie on zmieniony w głównym edytorze. - Boolean value expected. - Oczekiwano wartości boolowskiej. + Populates the source file view automatically. This might slow down debugger startup considerably. + Automatycznie wypełnia widok plików źródłowych. Może to znacznie spowolnić proces uruchamiania debuggera. - String value expected. - Oczekiwano wartości w postaci ciągu tekstowego. + Populate source file view automatically + Wypełniaj automatycznie widok pliku źródłowego - Invalid URL. - Niepoprawny URL. + Switch to previous mode on debugger exit + Przełączaj do poprzedniego trybu po zakończeniu debugowania - File or directory does not exist. - Plik lub katalog nie istnieje. + Bring Qt Creator to foreground when application interrupts + Przywołuj Qt Creatora w przypadku zatrzymania aplikacji - Invalid color. - Niepoprawny kolor. + Enables a full file path in breakpoints by default also for GDB. + Domyślnie uaktywnia pełne ścieżki również dla GDB. - Anchor line expected. - Oczekiwano linii kotwicznej. + Registers Qt Creator for debugging crashed applications. + Rejestruje Qt Creatora do debugowania aplikacji zakończonych błędem. - Duplicate property binding. - Powielone powiązanie właściwości. + Shows a warning when starting the debugger on a binary with insufficient debug information. + Pokazuje ostrzeżenie przy rozpoczęciu debugowania programu, w którym brak wystarczającej informacji debugowej. - Id expected. - Oczekiwano identyfikatora. + Show QML object tree + Pokazuj drzewo obiektów QML - Invalid id. - Niepoprawny identyfikator. + Stopping and stepping in the debugger will automatically open views associated with the current location. + Zatrzymanie i kroczenie w debuggerze automatycznie otworzy widoki związane z bieżącym położeniem. - Duplicate id. - Powielony identyfikator. + Close temporary source views on debugger exit + Zamykaj tymczasowe widoki ze źródłami po zakończeniu debugowania - Invalid property name "%1". - Niepoprawna nazwa właściwości "%1". + Select this option to close automatically opened source views when the debugger exits. + Opcja ta powoduje automatyczne zamykanie widoków ze źródłami otwartych w trakcie debugowania po jego zakończeniu. - "%1" does not have members. - "%1" nie posiada składników. + Close temporary memory views on debugger exit + Zamykaj tymczasowe widoki pamięci po zakończeniu debugowania - "%1" is not a member of "%2". - "%1" nie jest składnikiem "%2". + Select this option to close automatically opened memory views when the debugger exits. + Opcja ta powoduje automatyczne zamykanie widoków pamięci otwartych w trakcie debugowania po jego zakończeniu. - "%1" already is a formal parameter. - "%1" jest już formalnym parametrem. + Shows QML object tree in Locals and Expressions when connected and not stepping. + Pokazuje drzewo obiektów QML w widoku "Zmienne lokalne i wyrażenia" gdy podłączono i zatrzymano. - "%1" already is a function. - "%1" jest już funkcją. + Set breakpoints using a full absolute path + Włącz pełne, bezwzględne ścieżki - var "%1" is used before its declaration. - Zmienna "%1" jest użyta przed jej deklaracją. + Use Qt Creator for post-mortem debugging + Używaj Creatora do pośmiertnego debugowania - "%1" already is a var. - "%1" jest już zmienną. + Warn when debugging "Release" builds + Ostrzegaj przed debugowaniem wersji release'owej - "%1" is declared more than once. - "%1" jest zadeklarowana więcej niż jeden raz. + Keep editor stationary when stepping + Wyłącz centrowanie bieżącej linii podczas kroczenia - Function "%1" is used before its declaration. - Funkcja "%1" jest użyta przed jej deklaracją. + Scrolls the editor only when it is necessary to keep the current line in view, instead of keeping the next statement centered at all times. + Przewija edytor jedynie gdy jest to konieczne do pokazania bieżącej linii w widoku, zamiast centrowania bieżącej linii za każdym razem. - Could not resolve the prototype "%1" of "%2". - Nie można rozwiązać prototypu "%1" klasy "%2". + Maximum stack depth: + Maksymalna głębokość stosu: - Could not resolve the prototype "%1". - Nie można rozwiązać prototypu "%1". + <unlimited> + <nieograniczona> + + + Debugger::DebuggerRunConfigurationAspect - Prototype cycle, the last non-repeated component is "%1". - Cykl w prototypie, ostatni niepowtórzony komponent to "%1". + Debugger settings + Ustawienia debuggera + + + Debugger::Internal::GdbOptionsPage2 - Invalid property type "%1". - Niepoprawna nazwa właściwości "%1". + GDB Extended + Rozszerzony GDB + + + ImageViewer - Missing property "%1". - Brak właściwości "%1". + Color at %1,%2: red: %3 green: %4 blue: %5 alpha: %6 + Kolor na pozycji (%1,%2): czerwień: %3, zieleń: %4, błękit: %5, przeźroczystość: %6 - This type (%1) is not supported in the Qt Quick Designer. - Ten typ (%1) nie jest obsługiwany przez Qt Quick Designera. + Size: %1x%2, %3 byte, format: %4, depth: %5 + Rozmiar: %1x%2, %3 bajtów, format: %4, głębokość: %5 - This type (%1) is not supported as a root element by Qt Quick Designer. - Ten typ (%1) nie jest obsługiwany jako główny element przez Qt Quick Designera. + <Click to display color> + <Naciśnij aby wyświetlić kolor> - This type (%1) is not supported as a root element of a Qt Quick UI form. - Ten typ (%1) nie jest obsługiwany jako główny element formularza Qt Quick UI. + Copy Image + Skopiuj obraz - This type (%1) is not supported in a Qt Quick UI form. - Ten typ (%1) nie jest obsługiwany w formularzu Qt Quick UI. + Open Image Viewer + Otwórz przeglądarkę plików graficznych + + + Debugger::Internal::LldbEngine - Functions are not supported in a Qt Quick UI form. - Funkcje nie są obsługiwane w formularzach Qt Quick UI. + Unable to start LLDB "%1": %2 + Nie można uruchomić LLDB "%1": %2 - Java Script blocks are not supported in a Qt Quick UI form. - Bloki Java Script nie są obsługiwane w formularzy Qt Quick UI. + Adapter start failed. + Nie można uruchomić adaptera. - Behavior type is not supported in a Qt Quick UI form. - + Setting up inferior... + Ustawianie podprocesu... - States are only supported in the root item in a Qt Quick UI form. - Stany są obsługiwane jedynie w głównym elemencie formularza Qt Quick UI. + Running requested... + Zażądano uruchomienia... - Referencing the parent of the root item is not supported in a Qt Quick UI form. - Odwołanie do rodzica elementu głównego nie jest obsługiwane w formularzu Qt Quick UI. + Interrupt requested... + Zażądano przerwy... - Invalid property name '%1'. - Niepoprawna nazwa właściwości "%1". + LLDB I/O Error + Błąd wejścia / wyjścia LLDB - '%1' does not have members. - "%1" nie posiada składników. + The LLDB process failed to start. Either the invoked program "%1" is missing, or you may have insufficient permissions to invoke the program. + Nie można rozpocząć procesu LLDB. Brak programu "%1" albo brak wymaganych uprawnień aby go uruchomić. - '%1' is not a member of '%2'. - "%1" nie jest składnikiem "%2". + The LLDB process crashed some time after starting successfully. + Proces LLDB zakończony błędem po poprawnym uruchomieniu. - Assignment in condition. - Podstawienie w warunku. - + An error occurred when attempting to write to the LLDB process. For example, the process may not be running, or it may have closed its input channel. + Wystąpił błąd podczas próby pisania do procesu LLDB. Być może proces nie jest uruchomiony lub zamknął on swój kanał wejściowy. + - Unterminated non-empty case block. - Niezakończony niepusty blok "case". + An unknown error in the LLDB process occurred. + Wystąpił nieznany błąd w procesie LLDB. - Do not use 'eval'. - Nie używaj "eval". + Adapter start failed + Nie można uruchomić adaptera - Unreachable. - Nieosiągalne. + Debugger Error + Błąd debuggera - Do not use 'with'. - Nie używaj "with". + The last waitFor...() function timed out. The state of QProcess is unchanged, and you can try calling waitFor...() again. + Przekroczono czas oczekiwania na powrót z ostatniego wywołania funkcji waitFor...(). Stan QProcess się nie zmienił, można ponownie spróbować wywołać waitFor...(). - Do not use comma expressions. - Nie używaj wyrażeń przecinkowych. + An error occurred when attempting to read from the Lldb process. For example, the process may not be running. + Wystąpił błąd podczas próby czytania z procesu Lldb. Być może proces nie jest uruchomiony. + + + DiffEditor - '%1' already is a formal parameter. - "%1" jest już formalnym parametrem. + Diff Editor + Edytor różnic + + + DiffEditor::Internal::DiffEditorPlugin - Unnecessary message suppression. - Niepotrzebne stłumienie komunikatu. + Diff... + Porównaj... - '%1' already is a function. - "%1" jest już funkcją. + Select First File for Diff + Wybierz pierwszy plik do porównania - var '%1' is used before its declaration. - Zmienna "%1" jest użyta przed jej deklaracją. + Select Second File for Diff + Wybierz drugi plik do porównania - '%1' already is a var. - "%1" jest już zmienną. + Diff "%1", "%2" + Porównanie "%1" z "%2" + + + Diff - '%1' is declared more than once. - "%1" jest zadeklarowana więcej niż jeden raz. + Delete + Usunięto - Function '%1' is used before its declaration. - Funkcja "%1" jest użyta przed jej deklaracją. + Insert + Wstawiono - The 'function' keyword and the opening parenthesis should be separated by a single space. - Słowo kluczowe "function" i nawias otwierający powinny być oddzielone pojedynczą spacją. + Equal + Brak zmian + + + Git::Internal::LogChangeWidget - Do not use stand-alone blocks. - Nie używaj samodzielnych bloków. + Sha1 + Sha1 - Do not use void expressions. - Nie używaj wyrażeń "void". + Subject + Temat + + + Git::Internal::LogChangeDialog - Confusing pluses. - Mylne plusy. + Reset to: + Zresetuj do: - Confusing minuses. - Mylne minusy. + Select change: + Wybierz zmianę: - Declare all function vars on a single line. - Zadeklaruj wszystkie zmienne funkcji w pojedynczej linii. + Reset type: + Typ resetu: - Unnecessary parentheses. - Nadmiarowe nawiasy. + Mixed + Mixed - == and != may perform type coercion, use === or !== to avoid it. - == i != mogą dokonać konwersji typu, zamiast tego używaj === lub !==. + Hard + Hard - Expression statements should be assignments, calls or delete expressions only. - Składnikami wyrażenia mogą być tylko przypisania, wywołania lub "delete". + Soft + Soft + + + Git::Internal::MergeTool - Place var declarations at the start of a function. - Deklaracje zmiennych powinny znajdować się na początku funkcji. + Error + Błąd - Use only one statement per line. - Używaj tylko jednego wyrażenia w linii. + File input for the merge tool requires Git 1.7.8, or later. + Plik wejściowy narzędzia scalania wymaga wersji Git 1.7.8 lub nowszej. - Unknown component. - Nieznany komponent. + Normal + Normalny - Could not resolve the prototype '%1' of '%2'. - Nie można rozwiązać prototypu "%1" klasy "%2". + Submodule + Podmoduł - Could not resolve the prototype '%1'. - Nie można rozwiązać prototypu "%1". + Deleted + Usunięty - Prototype cycle, the last non-repeated component is '%1'. - Cykl w prototypie, ostatni niepowtórzony komponent to "%1". + Symbolic link + Dowiązanie symboliczne - Invalid property type '%1'. - Niepoprawny typ właściwości "%1". + Modified + Zmodyfikowany - == and != perform type coercion, use === or !== to avoid it. - == i != mogą dokonać konwersji typu, zamiast tego używaj === lub !==. + Created + Utworzony - Calls of functions that start with an uppercase letter should use 'new'. - Wywołania funkcji, które rozpoczynają się wielką literą, powinny używać "new". + Submodule commit %1 + Zmiana w podmodule %1 - Use 'new' only with functions that start with an uppercase letter. - "new" powinno być użyte jedynie dla funkcji, które rozpoczynają się wielką literą. + Symbolic link -> %1 + Link symboliczny -> %1 - Use spaces around binary operators. - Używaj spacji po obu stronach operatorów binarnych. + Merge Conflict + Konflikty podczas scalania - Unintentional empty block, use ({}) for empty object literal. - Niezamierzony pusty blok, użyj ({}) dla pustego literału obiektowego. + %1 merge conflict for "%2" +Local: %3 +Remote: %4 + - Use %1 instead of 'var' or 'variant' to improve performance. - Używaj %1 zamiast "var" lub "variant" aby poprawić wydajność. + &Local + - Missing property '%1'. - Brak właściwości "%1". + &Remote + - Object value expected. - Oczekiwano wartości w postaci obiektu. + &Created + - Array value expected. - Oczekiwano wartości w postaci tablicy. + &Modified + - %1 value expected. - Oczekiwano wartości w postaci %1. + &Deleted + - Maximum number value is %1. - Maksymalną wartością liczbową jest %1. + Continue Merging + Kontynuuj scalanie - Minimum number value is %1. - Minimalną wartością liczbową jest %1. + Continue merging other unresolved paths? + Kontynuować scalanie innych nierozwiązanych ścieżek? - Maximum number value is exclusive. - Maksymalna wartość liczbowa jest wyłączna. + Merge tool process finished successfully. + Proces scalania poprawnie zakończony. - Minimum number value is exclusive. - Minimalna wartość liczbowa jest wyłączna. + Merge tool process terminated with exit code %1 + Proces scalania zakończony kodem wyjściowym %1 + + + ProjectExplorer::Internal::CustomToolChainFactory - String value does not match required pattern. - Wartość ciągu tekstowego nie odpowiada wymaganemu wzorcowi. + Custom + Własny + + + + ProjectExplorer::Internal::TextEditDetailsWidget + + %n entries + + %n element + %n elementy + %n elementów + - Minimum string value length is %1. - Minimalna długość wartości ciągu tekstowego to %1. + Empty + Brak + + + ProjectExplorer::Internal::CustomToolChainConfigWidget - Maximum string value length is %1. - Maksymalna długość wartości ciągu tekstowego to %1. + Custom Parser Settings... + Własne ustawienia parsera... - %1 elements expected in array value. - Oczekiwano %1 elementów w tablicy wartości. + Each line defines a macro. Format is MACRO[=VALUE]. + Każda linia definiuje makro w formacie: MACRO[=WARTOŚĆ]. - Imperative code is not supported in the Qt Quick Designer. - Kod imperatywny nie jest obsługiwany w Qt Quick Designerze. + Each line adds a global header lookup path. + - This type is not supported in the Qt Quick Designer. - Ten typ nie jest obsługiwany przez Qt Quick Designera. + Comma-separated list of flags that turn on C++11 support. + Oddzielona przecinkami lista flag włączających obsługę C++11. - Reference to parent item cannot be resolved correctly by the Qt Quick Designer. - Qt Quick Designer nie może poprawnie rozwiązać referencji do rodzica elementu. + Comma-separated list of mkspecs. + Oddzielona przecinkami lista mkspec'ów. - This visual property binding cannot be evaluated in the local context and might not show up in Qt Quick Designer as expected. - To lokalne powiązanie właściwości nie może zostać obliczone w lokalnym kontekście, ani nie możne zostać prawidłowo pokazane w Qt Quick Designerze. + &Compiler path: + Ścieżka do &kompilatora: - Qt Quick Designer only supports states in the root item. - Qt Quick Designer obsługuje jedynie stany w głównym elemencie. + &Make path: + Ścieżka do "&make": - Using Qt Quick 1 code model instead of Qt Quick 2. - Użyto modelu kodu Qt Quick 1 zamiast Qt Quick 2. + &ABI: + &ABI: - - - Android::Internal::AndroidGdbServerKitInformation - GDB server - Serwer GDB + &Predefined macros: + &Predefiniowane makra: - - - Android::Internal::AndroidGdbServerKitInformationWidget - Manage... - Zarządzaj... + &Header paths: + Ścieżki do &nagłówków: - Auto-detect - Wykryj automatycznie + C++11 &flags: + &Flagi C++11: - Edit... - Modyfikuj... + &Qt mkspecs: + &Qt mkspecs: - Android GDB server - Serwer GDB Androida + &Error parser: + &Błąd parsowania: + + + ProjectExplorer::DeviceCheckBuildStep - The GDB server to use for this kit. - Serwer GDB użyty w tym zestawie narzędzi. + No device configured. + Brak skonfigurowanego urządzenia. - &Binary: - Plik &binarny: + Set Up Device + Ustaw urządzenie - GDB Server for "%1" - Serwer GDB dla "%1" + There is no device set up for this kit. Do you want to add a device? + Brak ustawionego urządzenia w tym zestawie narzędzi. Czy dodać urządzenie? + + + Check for a configured device + Wyszukaj skonfigurowane urządzenie - Android::Internal::AndroidManifestEditor + ProjectExplorer::EnvironmentAspect - General - Ogólne + Run Environment + Środowisko uruchamiania + + + ProjectExplorer::EnvironmentAspectWidget - XML Source - Źródło XML + Base environment for this run configuration: + Podstawowe środowisko dla tej konfiguracji uruchamiania: - Android::Internal::AndroidManifestEditorFactory + ProjectExplorer::GccToolChain - Android Manifest editor - Edytor plików manifest Androida + %1 (%2 %3 in %4) + %1 (%2 %3 w %4) - Android::Internal::AndroidManifestEditorWidget + ProjectExplorer::LocalEnvironmentAspect - Package - Pakiet + Build Environment + Środowisko budowania - <p align="justify">Please choose a valid package name for your application (for example, "org.example.myapplication").</p><p align="justify">Packages are usually defined using a hierarchical naming pattern, with levels in the hierarchy separated by periods (.) (pronounced "dot").</p><p align="justify">In general, a package name begins with the top level domain name of the organization and then the organization's domain and then any subdomains listed in reverse order. The organization can then choose a specific name for their package. Package names should be all lowercase characters whenever possible.</p><p align="justify">Complete conventions for disambiguating package names and rules for naming packages when the Internet domain name cannot be directly used as a package name are described in section 7.7 of the Java Language Specification.</p> - + System Environment + Środowisko systemowe - Package name: - Nazwa pakietu: + Clean Environment + Czyste środowisko + + + ProjectExplorer::Internal::RemoveTaskHandler - The package name is not valid. - Niepoprawna nazwa pakietu. + Remove + Name of the action triggering the removetaskhandler + Usuń - Version code: - Kod wersji: + Remove task from the task list. + Usuwa zadanie z listy zadań. + + + QbsProjectManager::Internal::QbsBuildConfiguration - Version name: - Nazwa wersji: + Parsing the Qbs project. + Parsowanie projektu Qbs. - Sets the minimum required version on which this application can be run. - Ustawia minimalną wymaganą wersję, z którą ta aplikacja może zostać uruchomiona. + Parsing of Qbs project has failed. + Nie można sparsować projektu Qbs. + + + QbsProjectManager::Internal::QbsBuildConfigurationFactory - Not set - Nie ustawiona + Build + Wersja - Minimum required SDK: - Minimalnie wymagane SDK: + Debug + The name of the debug build configuration created by default for a qbs project. + Debug - Sets the target SDK. Set this to the highest tested version. This disables compatibility behavior of the system for your application. - + Debug + Shadow build directory suffix + Non-ASCII characters in directory suffix may cause build issues. + Debug - Target SDK: - Docelowe SDK: + Release + The name of the release build configuration created by default for a qbs project. + Release - Application - Aplikacja + Release + Shadow build directory suffix + Non-ASCII characters in directory suffix may cause build issues. + Release + + + QbsProjectManager::Internal::QbsBuildConfigurationWidget - Application name: - Nazwa aplikacji: + Build directory: + Katalog wersji: + + + QbsProjectManager::Internal::QbsBuildStep - Run: - Uruchom: + Qbs Build + Wersja Qbs + + + QbsProjectManager::Internal::QbsBuildStepFactory - Select low DPI icon. - Wybierz ikonę o małym DPI. + Qbs Build + Wersja Qbs + + + QbsProjectManager::Internal::QbsCleanStep - Select medium DPI icon. - Wybierz ikonę o średnim DPI. + Qbs Clean + Qbs Clean + + + + QbsProjectManager::Internal::QbsCleanStepFactory + + Qbs Clean + Qbs Clean + + + Qbs - Select high DPI icon. - Wybierz ikonę o dużym DPI. + Qbs Install + Qbs Install + + + QbsProjectManager::Internal::QbsInstallStep - The structure of the Android manifest file is corrupted. Expected a top level 'manifest' node. - Struktura pliku manifest Androida jest uszkodzona. Oczekiwano głównego elementu "manifest". + Qbs Install + Qbs Install + + + QbsProjectManager::Internal::QbsInstallStepFactory - The structure of the Android manifest file is corrupted. Expected an 'application' and 'activity' sub node. - Struktura pliku manifest Androida jest uszkodzona. Oczekiwano podelementów "application" i "activity". + Qbs Install + Qbs Install + + + Qbs::QbsProjectNode - API %1: %2 - API %1: %2 + %1 in %2 + %1 w %2 + + + QbsProjectManager::Internal::QbsProject - Could not parse file: '%1'. - Błąd parsowania pliku: "%1". + Failed! + Niepoprawnie zakończone! - %2: Could not parse file: '%1'. - %2: Błąd parsowania pliku: "%1". + Could not write project file %1. + Nie można zapisać pliku projektu %1. - Application icon: - Ikona aplikacji: + Cannot build: Selected products do not exist anymore. + Nie można zbudować: wybrane produkty docelowe już nie istnieją. - Permissions - Prawa dostępu + Reading Project "%1" + Odczyt projektu "%1" + + + QbsProjectManager::Internal::QbsProjectManagerPlugin - Include default permissions for Qt modules. - Ustaw domyślne prawa dostępu dla modułów Qt. + Reparse Qbs + Przeparsuj Qbs - Include default features for Qt modules. - Ustaw domyślne cechy dla modułów Qt. + Build + Zbuduj - Remove - Usuń + Build File + Zbuduj plik - Add - Dodaj + Build File "%1" + Zbuduj plik "%1" - Could not parse file: "%1". - Błąd parsowania pliku: "%1". + Ctrl+Alt+B + Ctrl+Alt+B - %2: Could not parse file: "%1". - %2: Błąd parsowania pliku: "%1". + Build Product + Zbuduj produkt - Goto error - + Build Product "%1" + Zbuduj produkt "%1" - Choose Low DPI Icon - Wybierz ikonę o małym dpi + Ctrl+Alt+Shift+B + Ctrl+Alt+Shift+B - PNG images (*.png) - Pliki graficzne (*.png) + Build Subproject + Zbuduj podprojekt - Choose Medium DPI Icon - Wybierz ikonę o średnim dpi + Build Subproject "%1" + Zbuduj podprojekt "%1" - Choose High DPI Icon - Wybierz ikonę o dużym dpi + Ctrl+Shift+B + Ctrl+Shift+B - Android::AndroidPlugin + QbsProjectManager::Internal::QbsRunConfiguration + + The .qbs files are currently being parsed. + Trwa parsowanie plików .qbs. + - Android Manifest file - Plik manifest Androida + Parsing of .qbs files has failed. + Nie można sparsować plików .qbs. - Could not add mime-type for AndroidManifest.xml editor. - + Qbs Run Configuration + Konfiguracja uruchamiania Qbs - BINEditor::BinEditorWidget + QbsProjectManager::Internal::QbsRunConfigurationWidget - Memory at 0x%1 - Pamięć w 0x%1 + <unknown> + <nieznany> - Decimal&nbsp;unsigned&nbsp;value: - Wartość&nbsp;dziesiętna&nbsp;bez&nbsp;znaku: + Executable: + Plik wykonywalny: + + + QmlDesignerContextMenu - Decimal&nbsp;signed&nbsp;value: - Wartość&nbsp;dziesiętna&nbsp;ze&nbsp;znakiem: + Selection + Selekcja - Previous&nbsp;decimal&nbsp;unsigned&nbsp;value: - Poprzednia&nbsp;wartość&nbsp;dziesiętna&nbsp;bez&nbsp;znaku: + Stack (z) + Stos (z) - Previous&nbsp;decimal&nbsp;signed&nbsp;value: - Poprzednia&nbsp;wartość&nbsp;dziesiętna&nbsp;ze&nbsp;znakiem: + Edit + Edycja - %1-bit&nbsp;Integer&nbsp;Type - %1-bitowy&nbsp;typ&nbsp;całkowity + Anchors + Kotwice - Little Endian - Little Endian + Layout + Rozmieszczenie - Big Endian - Big Endian - - - Binary&nbsp;value: - Wartość&nbsp;binarna: - - - Octal&nbsp;value: - Wartość&nbsp;ósemkowa: - - - Previous&nbsp;binary&nbsp;value: - Poprzednia&nbsp;wartość&nbsp;binarna: + Select Parent: %1 + Zaznacz rodzica: %1 - Previous&nbsp;octal&nbsp;value: - Poprzednia&nbsp;wartość&nbsp;ósemkowa: + Select: %1 + Zaznacz: %1 - <i>double</i>&nbsp;value: - Wartość&nbsp;<i>double</i>: + Deselect: + Odznacz: - Previous <i>double</i>&nbsp;value: - Poprzednia&nbsp;wartość&nbsp;<i>double</i>: + Cut + Wytnij - <i>float</i>&nbsp;value: - Wartość&nbsp;<i>float</i>: + Copy + Skopiuj - Previous <i>float</i>&nbsp;value: - Poprzednia&nbsp;wartość&nbsp;<i>float</i>: + Paste + Wklej - Copying Failed - Błąd kopiowania + Delete Selection + Usuń zaznaczone - You cannot copy more than 4 MB of binary data. - Nie można skopiować więcej niż 4 MB danych binarnych. + To Front + Na wierzch - Copy Selection as ASCII Characters - Skopiuj jako znaki ASCII + To Back + Na spód - Copy Selection as Hex Values - Skopiuj jako wartości szesnastkowe + Raise + Do przodu - Set Data Breakpoint on Selection - Ustaw pułapkę warunkową na selekcji + Lower + Do tyłu - Jump to Address in This Window - Skocz do adresu w tym oknie + Undo + Cofnij - Jump to Address in New Window - Skocz do adresu w nowym oknie + Redo + Przywróć - Jump to Address 0x%1 in This Window - Skocz do adresu 0x%1 w tym oknie + Visibility + Widoczność - Jump to Address 0x%1 in New Window - Skocz do adresu 0x%1 w nowym oknie + Reset Size + Zresetuj rozmiar - - - Bookmarks::Internal::BookmarkManager - Edit Note - Zmodyfikuj notatkę + Reset Position + Zresetuj pozycję - Edit Bookmark - Zmodyfikuj zakładkę + Go into Component + Przejdź do komponentu - Note text: - Tekst notatki: + Set Id + Ustaw identyfikator - Line number: - Numer linii: + Reset z Property + Zresetuj właściwość "z" - - - CMakeProjectManager::Internal::GeneratorInfo - Ninja (%1) - Ninja (%1) + Fill + Wypełnij - NMake Generator (%1) - Generator NMake (%1) + Reset + Zresetuj - MinGW Generator (%1) - Generator MinGW (%1) + Layout in Column (Positioner) + - Unix Generator (%1) - Generator Unix (%1) + Layout in Row (Positioner) + - - - CMakeProjectManager::Internal::NoKitPage - Check Kits - Sprawdzenie narzędzi budowania + Layout in Grid (Positioner) + - There are compatible kits. - Istnieją kompatybilne zestawy narzędzi. + Layout in Flow (Positioner) + - Qt Creator has no kits that are suitable for CMake projects. Please configure a kit. - Brak zestawów narzędzi dla projektów CMake. Skonfiguruj zestaw. + Layout in ColumnLayout + - - - Core::ICore - (%1) - (%1) + Layout in RowLayout + - Qt Creator %1%2 - Qt Creator %1%2 + Layout in GridLayout + - Based on Qt %1 (%2, %3 bit) - Bazujący na Qt %1 (%2, %3 bitowy) + Fill Width + Wypełnij szerokość - - - Core::Internal::ProgressManagerPrivate - Toggle Progress Details - Przełącz szczegóły postępu + Fill Height + Wypełnij wysokość - Ctrl+Shift+0 - Ctrl+Shift+0 + Select parent: %1 + Zaznacz rodzica: %1 - Alt+Shift+0 - Alt+Shift+0 + Step into: %1 + Wskocz do wnętrza: %1 - Core::VariableManager - - %1: Full path including file name. - %1: Pełna ścieżka zawierająca nazwę pliku. - - - %1: Full path excluding file name. - %1: Pełna ścieżka bez nazwy pliku. - + QmlDesigner::Internal::DebugView - %1: File name without path. - %1: Nazwa pliku bez ścieżki. + Model attached + Dołączono model - %1: File base name without path and suffix. - %1: Bazowa nazwa pliku bez ścieżki i rozszerzenia. + FileName %1 + NazwaPliku %1 - Access environment variables. - + DebugView is enabled + DebugView jest aktywny - - - CppEditor::Internal::CppEditorPlugin - C++ Class - Klasa C++ + Model detached + Odłączono model - Creates a C++ header and a source file for a new class that you can add to a C++ project. - Tworzy plik nagłówkowy i źródłowy C++ z nową klasą, którą można dodać do projektu C++. + Added imports: + Dodane importy: - Creates a C++ source file that you can add to a C++ project. - Tworzy plik źródłowy C++, który można dodać do projektu C++. + Removed imports: + Usunięte importy: - C++ Source File - Plik źródłowy C++ + Imports changed: + Zmienione importy: - Creates a C++ header file that you can add to a C++ project. - Tworzy plik nagłówkowy C++, który można dodać do projektu C++. + Node created: + Utworzono węzeł: - C++ Header File - Plik nagłówkowy C++ + Node removed: + Usunięto węzeł: - Shift+F2 - Shift+F2 + New parent property: + Nowa właściwość rodzica: - Additional Preprocessor Directives... - Dodatkowe dyrektywy preprocesora... + Old parent property: + Stara właściwość rodzica: - Switch Between Function Declaration/Definition - Przełącz między deklaracją a definicją funkcji + PropertyChangeFlag + - Open Function Declaration/Definition in Next Split - Otwórz deklarację / definicję metody w nowym, sąsiadującym oknie + Node reparanted: + Zmieniono rodzica węzła: - Meta+E, Shift+F2 - Meta+E, Shift+F2 + New Id: + Nowy identyfikator: - Ctrl+E, Shift+F2 - Ctrl+E, Shift+F2 + Old Id: + Stary identyfikator: - Find Usages - Znajdź użycia + Node id changed: + Zmieniono identyfikator węzła: - Ctrl+Shift+U - Ctrl+Shift+U + VariantProperties changed: + - Open Type Hierarchy - Otwórz hierarchię typów + BindingProperties changed: + - Meta+Shift+T - Meta+Shift+T + SignalHandlerProperties changed: + - Ctrl+Shift+T - Ctrl+Shift+T + Node selected: + Wybrany węzęł: - Open Include Hierarchy - Otwórz hierarchię dołączeń + Properties removed: + Usunięto właściwości: - Meta+Shift+I - Meta+Shift+I + Auxiliary Data Changed: + Zmieniono dane pomocnicze: - Ctrl+Shift+I - Ctrl+Shift+I + Begin rewriter transaction + - Rename Symbol Under Cursor - Zmień nazwę symbolu pod kursorem + End rewriter transaction + - CTRL+SHIFT+R - CTRL+SHIFT+R + Debug View + Widok debugowy - Reparse Externally Changed Files - Ponownie przeparsuj pliki zewnętrznie zmodyfikowane + Instance property change + - Inspect C++ Code Model... - Przejrzyj model kodu C++... + Instance Completed + - Meta+Shift+F12 - Meta+Shift+F12 + Custom Notification: + Własne powiadomienie: - Ctrl+Shift+F12 - Ctrl+Shift+F12 + Node Source Changed: + Zmodyfikowano źródło węzła: - TextEditor::QuickFixFactory - - Create Getter and Setter Member Functions - Dodaj metodę zwracającą (getter) i ustawiającą (setter) - - - Convert to Stack Variable - Przekształć do zmiennej na stosie - - - Convert to Pointer - Przekształć do wskaźnika - + QmlDesigner::FormEditorView - Generate Missing Q_PROPERTY Members... - Wygeneruj brakujące składniki Q_PROPERTY... + Form Editor + Edytor formularzy - CppEditor::QuickFix - - Move Definition Outside Class - Przenieś definicję na zewnątrz klasy - - - Move Definition to %1 - Przenieś definicję do %1 - - - Move Definition to Class - Przenieś definicję do klasy - + QmlDesigner::Internal::MetaInfoPrivate - Insert Virtual Functions of Base Classes - Wstaw wirtualne metody klas bazowych + Invalid meta info + Niepoprawna metainformacja - CppEditor::Internal::InsertVirtualMethodsDialog + QmlDesigner::Internal::MetaInfoReader - Insert Virtual Functions - Wstaw wirtualne metody + Illegal state while parsing + Niepoprawny stan podczas parsowania - &Functions to insert: - &Metody do wstawienia: + No property definition allowed + Definicja właściwości nie jest dozwolona - &Hide reimplemented functions - &Ukryj nadpisane funkcje + Invalid type %1 + Niepoprawny typ %1 - &Insertion options: - Opcje &wstawiania: + Unknown property for Type %1 + Nieznana właściwość dla "Type" %1 - Insert only declarations - Wstaw tylko deklaracje + Unknown property for ItemLibraryEntry %1 + Nieznana właściwość dla "ItemLibraryEntry" %1 - Insert definitions inside class - Wstaw definicje wewnątrz klasy + Unknown property for Property %1 + Nieznana właściwość dla "Property" %1 - Insert definitions outside class - Wstaw definicje na zewnątrz klasy + Unknown property for QmlSource %1 + Nieznana właściwość dla "QmlSource" %1 - Insert definitions in implementation file - Wstaw definicje w pliku z implementacjami + Invalid or duplicate item library entry %1 + + + + SubComponentManager::parseDirectory - &Add keyword 'virtual' to function declaration - &Dodaj słowo kluczowe "virtual" do deklaracji metod + Invalid meta info + Niepoprawna metainformacja - CppTools::Internal::BuiltinIndexingSupport + QmlDesigner::TextToModelMerger - Parsing - Parsowanie + No import statements found + Brak instrukcji importu - Parsing C/C++ Files - Parsowanie plików C / C++ + Unsupported QtQuick version + Nieobsługiwana wersja QtQuick - CPlusplus::CheckSymbols + QmlDesigner::QmlDesignerPlugin - Only virtual functions can be marked 'override' - Jedynie funkcje wirtualne mogą być opatrzone "override" + Switch Text/Design + Przełącz tekst / projekt - CPlusPlus::CheckSymbols - - Only virtual functions can be marked 'final' - Jedynie funkcje wirtualne mogą być opatrzone "final" - + QmlDesigner::ShortCutManager - Expected a namespace-name - Oczekiwano nazwy przestrzeni nazw + &Undo + &Cofnij - Too many arguments - Za dużo argumentów + &Redo + &Przywróć - - - CplusPlus::CheckSymbols - Too few arguments - Za mało argumentów + Delete + Usuń - - - Cvs::Internal::CvsControl - &Edit - &Edycja + Delete "%1" + Usuń "%1" - - - Debugger::Internal::CdbPathsPageWidget - Symbol Paths - Ścieżki z symbolami + Cu&t + Wy&tnij - Source Paths - Ścieżki ze źródłami + Cut "%1" + Wytnij "%1" - - - Debugger::Internal::CdbPathsPage - CDB Paths - Ścieżki CDB + &Copy + S&kopiuj - - - Debugger::Internal::CommonOptionsPageWidget - Behavior - Zachowanie + Copy "%1" + Skopiuj "%1" - Use alternating row colors in debug views - Używaj alternatywnych kolorów wierszy w widokach debugowych + &Paste + Wk&lej - Debugger font size follows main editor - Rozmiar czcionki debuggera wzięty z głównego edytora + Paste "%1" + Wklej "%1" - Use tooltips in main editor while debugging - Używaj podpowiedzi w głównym edytorze podczas debugowania + Select &All + Zaznacz &wszystko - Changes the font size in the debugger views when the font size in the main editor changes. - Zmienia rozmiar czcionki w widokach debuggera, gdy zostanie on zmieniony w głównym edytorze. + Select All "%1" + Zaznacz wszystkie "%1" - Populates the source file view automatically. This might slow down debugger startup considerably. - Automatycznie wypełnia widok plików źródłowych. Może to znacznie spowolnić proces uruchamiania debuggera. + Toggle Sidebars + Przełącz boczny pasek - Populate source file view automatically - Wypełniaj automatycznie widok pliku źródłowego + &Restore Default View + Przywróć &domyślny widok - Close temporary views on debugger exit - Zamykaj widoki tymczasowe po zakończeniu debugowania + Toggle &Left Sidebar + Przełącz l&ewy boczny pasek - Stopping and stepping in the debugger will automatically open source or disassembler views associated with the current location. Select this option to automatically close them when the debugger exits. - Zatrzymanie lub kroczenie w debuggerze automatycznie otwiera widok źródła lub dezasemblacji bieżącego miejsca. Wybranie tej opcji spowoduje automatyczne zamknięcie tych widoków po zakończeniu debugowania. + Toggle &Right Sidebar + Przełącz p&rawy boczny pasek - Switch to previous mode on debugger exit - Przełączaj do poprzedniego trybu po zakończeniu debugowania + &Go into Component + &Przejdź do komponentu - Bring Qt Creator to foreground when application interrupts - Przywołuj Qt Creatora w przypadku zatrzymania aplikacji + Save %1 As... + Zachowaj %1 jako... - Shows QML object tree in Locals & Expressions when connected and not stepping. - + &Save %1 + &Zachowaj %1 - Enables a full file path in breakpoints by default also for GDB. - Domyślnie uaktywnia pełne ścieżki również dla GDB. + Revert %1 to Saved + Odwróć zmiany w %1 - Registers Qt Creator for debugging crashed applications. - Rejestruje Qt Creatora do debugowania aplikacji zakończonych błędem. + Close %1 + Zamknij %1 - Shows a warning when starting the debugger on a binary with insufficient debug information. - Pokazuje ostrzeżenie przy rozpoczęciu debugowania programu, w którym brak wystarczającej informacji debugowej. + Close All Except %1 + Zamknij wszystko z wyjątkiem %1 - Show QML object tree - Pokazuj drzewo obiektów QML + Close Others + Zamknij inne + + + QmlJSTools::Internal::QmlConsoleEdit - Stopping and stepping in the debugger will automatically open views associated with the current location. - + Cu&t + Wy&tnij - Close temporary source views on debugger exit - Zamykaj tymczasowe widoki ze źródłami po zakończeniu debugowania + &Copy + S&kopiuj - Select this option to close automatically opened source views when the debugger exits. - Opcja ta powoduje automatyczne zamykanie widoków ze źródłami otwartych w trakcie debugowania po jego zakończeniu. + &Paste + Wk&lej - Close temporary memory views on debugger exit - Zamykaj tymczasowe widoki pamięci po zakończeniu debugowania + Select &All + Zaznacz &wszystko - Select this option to close automatically opened memory views when the debugger exits. - Opcja ta powoduje automatyczne zamykanie widoków pamięci otwartych w trakcie debugowania po jego zakończeniu. + C&lear + Wy&czyść + + + QmlJSTools::Internal::QmlConsoleModel - Set breakpoints using a full absolute path - Włącz pełne, bezwzględne ścieżki + Can only evaluate during a QML debug session. + Obliczanie możliwe jedynie podczas debugowania QML. + + + QmlJSTools::Internal::QmlConsolePane - Use Qt Creator for post-mortem debugging - Używaj Creatora do pośmiertnego debugowania + Show debug, log, and info messages. + Pokazuj komunikaty debugowe, log i informacje. - Warn when debugging "Release" builds - Ostrzegaj przed debugowaniem wersji release'owej + Show warning messages. + Pokazuj komunikaty z ostrzeżeniami. - Keep editor stationary when stepping - Wyłącz centrowanie bieżącej linii podczas kroczenia + Show error messages. + Pokazuj komunikaty z błędami. - Scrolls the editor only when it is necessary to keep the current line in view, instead of keeping the next statement centered at all times. - Przewija edytor jedynie gdy jest to konieczne do pokazania bieżącej linii w widoku, zamiast centrowania bieżącej linii za każdym razem. + QML/JS Console + Konsola QML / JS + + + QmlJSTools::Internal::QmlConsoleView - Maximum stack depth: - Maksymalna głębokość stosu: + &Copy + S&kopiuj - <unlimited> - <nieograniczona> + &Show in Editor + &Pokaż w edytorze - Maximum string length: - Maksymalna długość ciągu tekstowego: + C&lear + Wy&czyść - Debugger::DebuggerRunConfigurationAspect + QmlProjectManager::QmlProjectEnvironmentAspect - Debugger settings - Ustawienia debuggera + System Environment + Środowisko systemowe - Debugger::Internal::GdbOptionsPage2 + Qnx::Internal::QnxAbstractRunSupport - GDB Extended - Rozszerzony GDB + Not enough free ports on device for debugging. + Niewystarczająca ilość wolnych portów w urządzeniu do debugowania. - ImageViewer - - Color at %1,%2: red: %3 green: %4 blue: %5 alpha: %6 - Kolor na pozycji (%1,%2): czerwień: %3, zieleń: %4, błękit: %5, przeźroczystość: %6 - + Qnx::Internal::QnxAnalyzeSupport - Size: %1x%2, %3 byte, format: %4, depth: %5 - Rozmiar: %1x%2, %3 bajtów, format: %4, głębokość: %5 + Preparing remote side... + Przygotowywanie zdalnej strony... - <Click to display color> - <Naciśnij aby wyświetlić kolor> + The %1 process closed unexpectedly. + Proces %1 nieoczekiwanie zakończył pracę. - Copy Image - Skopiuj obraz + Initial setup failed: %1 + Błąd wstępnej konfiguracji: %1 - Open Image Viewer - Otwórz przeglądarkę plików graficznych + Warning: "slog2info" is not found on the device, debug output not available. + Ostrzeżenie: brak"slog2info" na urządzeniu, komunikaty debugowe nie będą dostępne. - Debugger::Internal::LldbEngine - - Unable to start LLDB "%1": %2 - Nie można uruchomić LLDB "%1": %2 - - - Adapter start failed. - Nie można uruchomić adaptera. - - - Running requested... - Zażądano uruchomienia... - - - Interrupt requested... - Zażądano przerwy... - + Qnx::Internal::QnxDeviceTester - LLDB I/O Error - Błąd wejścia / wyjścia LLDB + %1 found. + Znaleziono %1. - The LLDB process failed to start. Either the invoked program "%1" is missing, or you may have insufficient permissions to invoke the program. - Nie można rozpocząć procesu LLDB. Brak programu "%1" albo brak wymaganych uprawnień aby go uruchomić. + %1 not found. + Nie znaleziono %1. - The LLDB process crashed some time after starting successfully. - Proces LLDB zakończony błędem po poprawnym uruchomieniu. + An error occurred checking for %1. + Błąd podczas sprawdzania %1. - An error occurred when attempting to write to the LLDB process. For example, the process may not be running, or it may have closed its input channel. - Wystąpił błąd podczas próby pisania do procesu LLDB. Być może proces nie jest uruchomiony lub zamknął on swój kanał wejściowy. + SSH connection error: %1 + Błąd połączenia SSH: %1 - An unknown error in the LLDB process occurred. - Wystąpił nieznany błąd w procesie LLDB. + Checking for %1... + Sprawdzanie %1... + + + QtSupport::Internal::QtSupportPlugin - Adapter start failed - Nie można uruchomić adaptera + Full path to the host bin directory of the current project's Qt version. + Pełna ścieżka do źródłowego podkatalogu "bin" w katalogu instalacji bieżącej wersji Qt. - Debugger Error - Błąd debuggera + Full path to the target bin directory of the current project's Qt version. You probably want %1 instead. + Pełna ścieżka docelowego podkatalogu "bin" w katalogu instalacji bieżącej wersji Qt. Prawdopodobnie powinno być: %1. + + + QtSupport::QtVersionFactory - The last waitFor...() function timed out. The state of QProcess is unchanged, and you can try calling waitFor...() again. - Przekroczono czas oczekiwania na powrót z ostatniego wywołania funkcji waitFor...(). Stan QProcess się nie zmienił, można ponownie spróbować wywołać waitFor...(). + No factory found for qmake: "%1" + Brak fabryki dla qmake: "%1" + + + RemoteLinux::AbstractRemoteLinuxRunSupport - An error occurred when attempting to read from the Lldb process. For example, the process may not be running. - Wystąpił błąd podczas próby czytania z procesu Lldb. Być może proces nie jest uruchomiony. + Not enough free ports on device for debugging. + Niewystarczająca ilość wolnych portów w urządzeniu do debugowania. - DiffEditor::DiffEditor + RemoteLinux::RemoteLinuxAnalyzeSupport - Ignore Whitespace - Ignoruj białe znaki + Checking available ports... + Sprawdzanie dostępnych portów... - Context Lines: - Linie z kontekstem: + Failure running remote process. + Błąd uruchamiania zdalnego procesu. - Reload Editor - Przeładuj edytor + Initial setup failed: %1 + Błąd wstępnej konfiguracji: %1 + + + RemoteLinux::RemoteLinuxEnvironmentAspect - Synchronize Horizontal Scroll Bars - Synchronizuj poziome paski przesuwania + Clean Environment + Czyste środowisko - [%1] vs. [%2] %3 - [%1] vs [%2] %3 + System Environment + Środowisko systemowe + + + RemoteLinux::RemoteLinuxEnvironmentAspectWidget - %1 vs. %2 - %1 vs %2 + Fetch Device Environment + Pobierz środowisko urządzenia - [%1] %2 vs. [%3] %4 - [%1] %2 vs [%3] %4 + Cancel Fetch Operation + Anuluj pobieranie - Hide Change Description - Ukryj opis zmiany + Device Error + Błąd urządzenia - Show Change Description - Pokaż opis zmiany + Fetching environment failed: %1 + Błąd podczas pobierania środowiska: %1 + + + TextEditor::BehaviorSettingsWidget - Switch to Side By Side Diff Editor - Przełącz do edytora różnic wyświetlającego zawartość sąsiadująco + Displays context-sensitive help or type information on mouseover. + Pokazuje pomoc kontekstową lub informację o typie po najechaniu kursorem myszy. - Switch to Unified Diff Editor - Przełącz do edytora różnic wyświetlającego zawartość w formacie ujednoliconym + Displays context-sensitive help or type information on Shift+Mouseover. + Pokazuje pomoc kontekstową lub informację o typie po naciśnięciu klawisza Shift i najechaniu kursorem myszy. - DiffEditor + RefactoringFile::apply - Diff Editor - Edytor różnic + Refactoring cannot be applied. + Nie można zrefaktoryzować. - DiffEditor::Internal::DiffEditorPlugin - - Diff... - Porównaj... - + Android::Internal::AddNewAVDDialog - Select First File for Diff - Wybierz pierwszy plik do porównania + Create new AVD + Utwórz nowe AVD - Select Second File for Diff - Wybierz drugi plik do porównania + Target API: + - Diff "%1", "%2" - Porównanie "%1" z "%2" + Name: + Nazwa: - - - Diff - Delete - Usunięto + SD card size: + Rozmiar karty SD: - Insert - Wstawiono + MiB + MiB - Equal - Brak zmian + ABI: + ABI: - Git::Internal::GitDiffHandler + AndroidDeployQtWidget - Working tree - Drzewo robocze + Form + Formularz - Index - Indeks + Clean Temporary Libraries Directory on Device + Wyczyść tymczasowe katalogi z bibliotekami na urządzeniu - Waiting for data... - Oczekiwanie na dane... + Install Ministro from APK + Zainstaluj Ministro z APK - - - Git::Internal::LogChangeWidget - Sha1 - Sha1 + Reset Default Devices + Przywróc domyślne urządzenia - Subject - Temat + Deploy options + Opcje instalacji + + + Uninstall previous package + Odinstaluj poprzedni pakiet - Git::Internal::LogChangeDialog + Android::Internal::AndroidDeviceDialog - Reset to: - Zresetuj do: + Select Android Device + Wybierz urządzenie z Androidem - Select change: - Wybierz zmianę: + Refresh Device List + Odśwież listę urządzeń - Reset type: - Typ resetu: + Create Android Virtual Device + Utwórz wirtualne urządzenie Android - Mixed - Mixed + Always use this device for architecture %1 + Używaj zawsze tego urządzenia do architektury %1 - Hard - Hard + ABI: + ABI: - Soft - Soft + Compatible devices + Kompatybilne urządzenia - - - Git::Internal::MergeTool - Error - Błąd + Unauthorized. Please check the confirmation dialog on your device %1. + Urządzenie nieautoryzowane. Sprawdź dialog potwierdzenia w urządzeniu %1. - File input for the merge tool requires Git 1.7.8, or later. - Plik wejściowy narzędzia scalania wymaga wersji Git 1.7.8 lub nowszej. + Offline. Please check the state of your device %1. + Rozłączony. Sprawdź stan urządzenia %1. - Normal - Normalny + ABI is incompatible, device supports ABIs: %1. + Niekompatybilne ABI, urządzenie obsługuje następujące ABI: %1. - Submodule - Podmoduł + API Level of device is: %1. + Poziom API urządzenia: %1. - Deleted - Usunięty + Android 5 devices are incompatible with deploying Qt to a temporary directory. + Urządzenia Android 5 nie obsługują instalowania Qt do tymczasowego katalogu. - Symbolic link - Dowiązanie symboliczne + Incompatible devices + Niekompatybilne urządzenia - Modified - Zmodyfikowany + <p>Connect an Android device via USB and activate developer mode on it. Some devices require the installation of a USB driver.</p> + <p>Podłącz urządzenie Android przez USB i włącz w nim tryb deweloperski. Niektóre urządzenia wymagają instalacji sterownika USB.</p> - Created - Utworzony + <p>The adb tool in the Android SDK lists all connected devices if run via &quot;adb devices&quot;.</p> + <p>Narzędzie adb w Android SDK pokazuje wszystkie podłączone urządzenia uruchomione przez &quot;urządzenia adb&quot;.</p> - Submodule commit %1 - Zmiana w podmodule %1 + No Device Found + Brak urządzeń - Symbolic link -> %1 - Link symboliczny -> %1 + Looking for default device <b>%1</b>. + Poszukiwanie domyślnego urządzenia <b>%1</b>. - Merge Conflict - Konflikty podczas scalania + <html><head/><body><p><a href="aaa"><span style=" text-decoration: underline; color:#0057ae;">My device is missing</span></a></p></body></html> + <html><head/><body><p><a href="aaa"><span style=" text-decoration: underline; color:#0057ae;">Brak mojego urządzenia</span></a></p></body></html> - %1 merge conflict for "%2" -Local: %3 -Remote: %4 - + Cancel + Anuluj + + + BareMetal::Internal::BareMetalDeviceConfigurationWizardSetupPage - &Local - + Set up GDB Server or Hardware Debugger + Ustaw serwer GDB lub debugger sprzętowy - &Remote - + Name: + Nazwa: - &Created + GDB server provider: - &Modified - + Bare Metal Device + Urządzenie Bare Metal + + + Core::Internal::AddToVcsDialog - &Deleted - + Dialog + Dialog - Continue Merging - Kontynuuj scalanie + Add the file to version control (%1) + Dodaj plik do systemu kontroli wersji (%1) - Continue merging other unresolved paths? - Kontynuować scalanie innych nierozwiązanych ścieżek? + Add the files to version control (%1) + Dodaj pliki do systemu kontroli wersji (%1) + + + CppEditor::Internal::CppPreProcessorDialog - Merge tool process finished successfully. - Proces scalania poprawnie zakończony. + Additional C++ Preprocessor Directives + Dodatkowe dyrektywy preprocesora C++ - Merge tool process terminated with exit code %1 - Proces scalania zakończony kodem wyjściowym %1 + Project: + Projekt: - - - ProjectExplorer::Internal::CustomToolChainFactory - Custom - Własny + Additional C++ Preprocessor Directives for %1: + Dodatkowe dyrektywy preprocesora C++ dla %1: - ProjectExplorer::Internal::TextEditDetailsWidget - - %n entries - - %n element - %n elementy - %n elementów - - + CppTools::Internal::CppCodeModelSettingsPage - Empty - Brak + Form + Formularz - - - ProjectExplorer::Internal::CustomToolChainConfigWidget - Custom Parser Settings... - Własne ustawienia parsera... + Code Completion and Semantic Highlighting + Uzupełnianie kodu i podświetlanie semantyczne - Each line defines a macro. Format is MACRO[=VALUE]. - Każda linia definiuje makro w formacie: MACRO[=WARTOŚĆ]. + C + C - Each line adds a global header lookup path. - + C++ + C++ - Comma-separated list of flags that turn on C++11 support. - Oddzielona przecinkami lista flag włączających obsługę C++11. + Objective C + Objective C - Comma-separated list of mkspecs. - Oddzielona przecinkami lista mkspec'ów. + Objective C++ + Objective C++ - &Compiler path: - Ścieżka do &kompilatora: + Pre-compiled Headers + Nagłówki prekompilowane - &Make path: - Ścieżka do "&make": + <html><head/><body><p>When pre-compiled headers are not ignored, the parsing for code completion and semantic highlighting will process the pre-compiled header before processing any file.</p></body></html> + <html><head/><body><p>Gdy nagłówki prekompilowane nie są ignorowane, parsowanie ich nastąpi przed wszystkimi innymi plikami podczas uzupełniania kodu i podświetlania semantyki.</p></body></html> - &ABI: - &ABI: + Ignore pre-compiled headers + Ignoruj nagłówki prekompilowane - &Predefined macros: - &Predefiniowane makra: + Headers + Nagłówki + + + Ios::Internal::IosBuildStep - &Header paths: - Ścieżki do &nagłówków: + Base arguments: + Podstawowe argumenty: - C++11 &flags: - &Flagi C++11: + Reset Defaults + Przywróć domyślne - &Qt mkspecs: - &Qt mkspecs: + Extra arguments: + Dodatkowe argumenty: - &Error parser: - &Błąd parsowania: + xcodebuild + xcodebuild - ProjectExplorer::DeviceCheckBuildStep - - No device configured. - Brak skonfigurowanego urządzenia. - + IosDeployStepWidget - Set Up Device - Ustaw urządzenie + Form + Formularz + + + IosRunConfiguration - There is no device set up for this kit. Do you want to add a device? - Brak ustawionego urządzenia w tym zestawie narzędzi. Czy dodać urządzenie? + Form + Formularz - Check for a configured device - Wyszukaj skonfigurowane urządzenie + Arguments: + Argumenty: - - - ProjectExplorer::EnvironmentAspect - Run Environment - Środowisko uruchamiania + Executable: + Plik wykonywalny: - - - ProjectExplorer::EnvironmentAspectWidget - Base environment for this run configuration: - Podstawowe środowisko dla tej konfiguracji uruchamiania: + iPhone 3.5-inch Retina Display + Wyświetłacz 3.5-calowy Retina iPhone - - - ProjectExplorer::GccToolChain - %1 (%2 %3 in %4) - %1 (%2 %3 w %4) + iPhone 4-inch Retina Display + Wyświetłacz 4-calowy Retina iPhone - - - ProjectExplorer::LocalEnvironmentAspect - Build Environment - Środowisko budowania + iPad + iPad - System Environment - Środowisko systemowe + iPad Retina Display + Wyświetłacz Retina iPad - Clean Environment - Czyste środowisko + Device type: + Typ urządzenia: - ProjectExplorer::Internal::RemoveTaskHandler + IosSettingsWidget - Remove - Name of the action triggering the removetaskhandler - Usuń + iOS Configuration + Konfiguracja iOS - Remove task from the task list. - Usuwa zadanie z listy zadań. + Ask about devices not in developer mode + Pytaj o urządzenia nie będące w trybie deweloperskim - PythonEditor::FileWizard + ProjectExplorer::Internal::CustomParserConfigDialog - Python source file - Plik źródłowy Pythona + Custom Parser + Własny parser - Creates an empty Python script with UTF-8 charset - Tworzy pusty skrypt Python z kodowaniem UTF-8 + &Error message capture pattern: + Wzorzec do wychwytywania komunikatów z &błędami: - New %1 - Nowy %1 + #error (.*):(\d+): (.*)$ + #error (.*):(\d+): (.*)$ - - - PythonEditor::ClassWizard - Python class - Klasa Pythona + Capture Positions + Wychwytane pozycje - Creates new Python class - Tworzy nową klasę Pythona + &File name: + Nazwa &pliku: - C++ module for Python - Moduł C++ dla Pythona + &Line number: + Numer &linii: - Creates C++/Boost file with bindings for Python - Tworzy plik C++ / Boost z powiązaniem dla Pythona + &Message: + K&omunikat: - - - QbsProjectManager::Internal::QbsBuildConfiguration - Parsing the Qbs project. - Parsowanie projektu Qbs. + Test + Test - Parsing of Qbs project has failed. - Nie można sparsować projektu Qbs. + E&rror message: + Komunikat z błę&dem: - - - QbsProjectManager::Internal::QbsBuildConfigurationFactory - Build - Wersja + #error /home/user/src/test.c:891: Unknown identifier `test` + #error /home/user/src/test.c:891: Nieznany identyfikator `test` - Debug - The name of the debug build configuration created by default for a qbs project. - Debug + File name: + Nazwa pliku: - Release - The name of the release build configuration created by default for a qbs project. - Release + TextLabel + Etykietka - - - QbsProjectManager::Internal::QbsBuildConfigurationWidget - Build directory: - Katalog wersji: + Line number: + Numer linii: - - - QbsProjectManager::Internal::QbsBuildStep - Qbs Build - Wersja Qbs + Message: + Komunikat: - - - QbsProjectManager::Internal::QbsBuildStepFactory - Qbs Build - Wersja Qbs + Not applicable: + Nieodpowiedni: - - - QbsProjectManager::Internal::QbsCleanStep - Qbs Clean - Qbs Clean + Pattern is empty. + Wzorzec jest pusty. - - - QbsProjectManager::Internal::QbsCleanStepFactory - Qbs Clean - Qbs Clean + Pattern does not match the error message. + Wzorzec nie wychwycił komunikatu z błędem. - Qbs + ProjectExplorer::Internal::DeviceTestDialog - Qbs Install - Qbs Install + Device Test + Test urządzenia - - - QbsProjectManager::Internal::QbsInstallStep - Qbs Install - Qbs Install + Close + Zamknij - - - QbsProjectManager::Internal::QbsInstallStepFactory - Qbs Install - Qbs Install + Device test finished successfully. + Test urządzenia poprawnie zakończony. + + + Device test failed. + Błąd testowania urządzenia. - Qbs::QbsProjectNode + QmlDesigner::AddTabToTabViewDialog - %1 in %2 - %1 w %2 + Dialog + Dialog + + + Add tab: + Dodaj zakładkę: - QbsProjectManager::Internal::QbsProject + UpdateInfo::Internal::SettingsWidget - Evaluating - Ewaluowanie + Configure Filters + Konfiguracja filtrów - Failed! - Niepoprawnie zakończone! + Automatic Check for Updates + Automatyczne sprawdzanie dostępnych aktualizacji - Could not write project file %1. - Nie można zapisać pliku projektu %1. + Check interval basis: + Częstość sprawdzania: - Reading Project "%1" - Odczyt projektu "%1" + Qt Creator automatically runs a scheduled check for updates on a time interval basis. If Qt Creator is not in use on the scheduled date, the automatic check for updates will be performed next time Qt Creator starts. + Qt Creator automatycznie sprawdza dostępność aktualizacji co określony czas. Jeśli Qt Creator nie jest używany w dniu, w którym powinno nastąpić sprawdzenie dostępnych aktualizacji, nastąpi ono przy najbliższym uruchomieniu Qt Creatora. - - - QbsProjectManager::QbsManager - Failed opening project '%1': Project is not a file. - Nie można otworzyć projektu "%1": Ścieżka projektu nie wskazuje na plik. + Next check date: + Data najbiższego sprawdzenia: - Failed opening project "%1": Project is not a file. - Nie można otworzyć projektu "%1": Ścieżka projektu nie wskazuje na plik. + Last check date: + Data ostatniego sprawdzenia: - Failed to set up kit for Qbs: %1 - Nie można ustawić zestawu narzędzi dla Qbs: %1 + Not checked yet + Jeszcze nie sprawdzano - - - QbsProjectManager::Internal::QbsProjectManagerPlugin - Reparse Qbs - Przeparsuj Qbs + Check Now + Sprawdź teraz + + + FlickableSection - Build - Zbuduj + Flickable + Element przerzucalny - Build File - Zbuduj plik + Content size + Rozmiar zawartości - Build File "%1" - Zbuduj plik "%1" + Flick direction + Kierunek przerzucania - Ctrl+Alt+B - Ctrl+Alt+B + Behavior + Zachowanie - Build Product - Zbuduj produkt + Bounds behavior + Zachowanie przy brzegach - Build Product "%1" - Zbuduj produkt "%1" + Interactive + Interaktywny - Ctrl+Alt+Shift+B - Ctrl+Alt+Shift+B + Max. velocity + Prędkość maks. - Build Subproject - Zbuduj podprojekt + Maximum flick velocity + Maksymalna prędkość przerzucania - Build Subproject "%1" - Zbuduj podprojekt "%1" + Deceleration + Opóźnienie - Ctrl+Shift+B - Ctrl+Shift+B + Flick deceleration + Opóźnienie przerzucania - QbsProjectManager::Internal::QbsPropertyLineEdit + FontSection - Could not split properties. - Nie można rozdzielić właściwości. + Font + Czcionka - No ':' found in property definition. - Brak ":" w definicji właściwości. + Size + Rozmiar + + + Font style + Styl czcionki + + + Style + Styl - QbsProjectManager::Internal::QbsRunConfiguration + StandardTextSection - The .qbs files are currently being parsed. - Trwa parsowanie plików .qbs. + Text + Tekst - Parsing of .qbs files has failed. - Nie można sparsować plików .qbs. + Wrap mode + Tryb zawijania - Qbs Run Configuration - Konfiguracja uruchamiania Qbs + Alignment + Wyrównanie + + + Format + Format - QbsProjectManager::Internal::QbsRunConfigurationWidget + AdvancedSection - <unknown> - <nieznany> + Advanced + Zaawansowane - Executable: - Plik wykonywalny: + Origin + Początek - Arguments: - Argumenty: + Scale + Skala - Select Working Directory - Wybierz katalog roboczy + Rotation + Rotacja - Reset to default - Przywróć domyślne + Enabled + Aktywny - Working directory: - Katalog roboczy: + Accept mouse and keyboard events + Akceptuj zdarzenia myszy i klawiatury - Run in terminal - Uruchom w terminalu + Smooth + Gładki + + + Smooth sampling active + Włącz gładkie próbkowanie + + + Antialiasing + Antyaliasing + + + Anti-aliasing active + Włącz antyaliasing - QmlDesignerContextMenu + ColumnSpecifics - Selection - Selekcja + Column + Kolumna - Stack (z) - Stos (z) + Spacing + Odstępy + + + FlipableSpecifics - Edit - Edycja + Flipable + + + + GeometrySection - Anchors - Kotwice + Geometry + Geometria - Layout - Rozmieszczenie + Position + Pozycja - Select Parent: %1 - Zaznacz rodzica: %1 + Size + Rozmiar + + + ItemPane - Select: %1 - Zaznacz: %1 + Type + Typ - Deselect: - Odznacz: + id + identyfikator - Cut - Wytnij + Visibility + Widoczność - Copy - Skopiuj + Is Visible + Jest widoczny - Paste - Wklej + Clip + Klip - Delete Selection - Usuń zaznaczone + Opacity + Nieprzezroczystość - To Front - Na wierzch + Layout + Rozmieszczenie - To Back - Na spód + Advanced + Zaawansowane + + + LayoutSection - Raise - Do przodu + Layout + Rozmieszczenie - Lower - Do tyłu + Anchors + Kotwice + + + QtObjectPane - Undo - Cofnij + Type + Typ - Redo - Przywróć + id + identyfikator + + + TextInputSection - Visibility - Widoczność + Text Input + Wejście tekstu - Reset Size - Zresetuj rozmiar + Input mask + Maska wejściowa - Reset Position - Zresetuj pozycję + Echo mode + Tryb echo - Go into Component - Przejdź do komponentu + Pass. char + Znak hasła - Set Id - Ustaw identyfikator + Character displayed when users enter passwords. + Znak wyświetlany podczas wpisywania hasła przez użytkownika. - Reset z Property - Zresetuj właściwość "z" + Flags + Flagi - Fill - Wypełnij + Read only + Tylko do odczytu - Reset - Zresetuj + Cursor visible + Kursor widoczny - Layout in Column (Positioner) - + Active focus on press + Uaktywnij fokus po naciśnięciu - Layout in Row (Positioner) - + Auto scroll + Automatyczne przewijanie + + + TextInputSpecifics - Layout in Grid (Positioner) - + Text Color + Kolor tekstu - Layout in Flow (Positioner) - + Selection Color + Kolor selekcji + + + TextSpecifics - Layout in ColumnLayout - + Text Color + Kolor tekstu - Layout in RowLayout - + Style Color + Kolor stylu + + + WindowSpecifics - Layout in GridLayout - + Window + Okno - Fill Width - Wypełnij szerokość + Title + Tytuł - Fill Height - Wypełnij wysokość + Size + Rozmiar - Select parent: %1 - Zaznacz rodzica: %1 + Color + Kolor - Step into: %1 - Wskocz do wnętrza: %1 + Visible + Widoczny + + + Opacity + Nieprzezroczystość - QmlDesigner::Internal::DebugView + SideBar - Model attached - Dołączono model + New to Qt? + Nowicjusz? - FileName %1 - NazwaPliku %1 + Learn how to develop your own applications and explore Qt Creator. + Poznaj Qt Creatora i dowiedz się, jak przy jego pomocy tworzyć aplikacje. - DebugView is enabled - DebugView jest aktywny + Get Started Now + Rozpocznij teraz - Model detached - Odłączono model + Qt Account + Konto Qt - Added imports: - Dodane importy: + Qt Cloud Services + Chmura z usługami Qt - Removed imports: - Usunięte importy: + Online Community + Społeczność online - Imports changed: - Zmienione importy: + Blogs + Blogi - Node created: - Utworzono węzeł: + User Guide + Przewodnik użytkownika + + + Analyzer::AnalyzerRunConfigWidget - Node removed: - Usunięto węzeł: + Use Customized Settings + Użyj własnych ustawień - New parent property: - Nowa właściwość rodzica: + Use Global Settings + Użyj globalnych ustawień + + + Android::Internal::AndroidDeployQtStepFactory - Old parent property: - Stara właściwość rodzica: + Deploy to Android device or emulator + Zainstaluj na urządzeniu lub emulatorze Android + + + Android::Internal::AndroidDeployQtStep - PropertyChangeFlag - + Deploy to Android device + AndroidDeployQtStep default display name + Zainstaluj na urządzeniu Android - Node reparanted: - Zmieniono rodzica węzła: + Found old folder "android" in source directory. Qt 5.2 does not use that folder by default. + Odnaleziono folder "android" w katalogu źródłowym. Qt 5.2 domyślnie nie używa tego katalogu. - New Id: - Nowy identyfikator: + No Android arch set by the .pro file. + Brak ustawionego arch dla Androida w pliku .pro. - Old Id: - Stary identyfikator: + Cannot find the android build step. + Nie można odnaleźć kroku budowania androida. - Node id changed: - Zmieniono identyfikator węzła: + Cannot find the androiddeployqt tool. + Nie można odnaleźć narzędzia androiddeployqt. - VariantProperties changed: - + Cannot find the androiddeploy Json file. + Nie można odnaleźć pliku androiddeploy Json. - BindingProperties changed: - + Cannot find the package name. + Nie można odnaleźć nazwy pakietu. - SignalHandlerProperties changed: - + Uninstall previous package %1. + Odinstaluj poprzedni pakiet %1. - Node selected: - Wybrany węzęł: + Starting: "%1" %2 + Uruchamianie "%1" %2 - Properties removed: - Usunięto właściwości: + The process "%1" exited normally. + Proces "%1" zakończył pracę normalnie. - Auxiliary Data Changed: - Zmieniono dane pomocnicze: + The process "%1" exited with code %2. + Proces "%1" zakończył pracę kodem wyjściowym %2. - Begin rewriter transaction - + The process "%1" crashed. + Proces "%1" zakończył pracę błędem. - End rewriter transaction - + Another application with the same package id but signed with different certificate already exists. +Do you want to uninstall the existing package? + Istnieje już inna aplikacja o tym samym identyfikatorze pakietu, lecz z innym certyfikatem. +Czy odinstalować istniejący pakiet? - Debug View - Widok debugowy + Package deploy: Failed to pull "%1" to "%2". + - Instance property change - + Package deploy: Running command "%1 %2". + Instalacja pakietu: uruchomiono komendę "%1 %2". - Instance Completed - + Packaging error: Could not start command "%1 %2". Reason: %3 + Błąd pakowania: nie można uruchomić komendy "%1 %2". Przyczyna: %3 - Custom Notification: - Własne powiadomienie: + Packaging error: Command "%1 %2" failed. + Błąd pakowania: Komenda "%1 %2" zakończona błędem. - Node Source Changed: - Zmodyfikowano źródło węzła: + Install failed + Instalacja niepoprawnie zakończona - - - QmlDesigner::FormEditorView - Form Editor - Edytor formularzy + Pulling files necessary for debugging. + + + + Reason: %1 + Przyczyna: %1 + + + Exit code: %1 + Kod wyjściowy: %1 - QmlDesigner::Internal::MetaInfoPrivate + Android::Internal::AndroidDeployQtWidget - Invalid meta info - Niepoprawna metainformacja + <b>Deploy configurations</b> + <b>Konfiguracje instalacji</b> + + + Qt Android Smart Installer + Qt Android Smart Installer + + + Android package (*.apk) + Pakiet androida (*.apk) - QmlDesigner::Internal::MetaInfoReader + Android::Internal::AndroidErrorMessage - Illegal state while parsing - Niepoprawny stan podczas parsowania + Android: SDK installation error 0x%1 + Android: błąd instalacji SDK 0x%1 - No property definition allowed - Definicja właściwości nie jest dozwolona + Android: NDK installation error 0x%1 + Android: błąd instalacji NDK 0x%1 - Invalid type %1 - Niepoprawny typ %1 + Android: Java installation error 0x%1 + Android: błąd instalacji Java 0x%1 - Unknown property for Type %1 - Nieznana właściwość dla "Type" %1 + Android: ant installation error 0x%1 + Android: błąd instalacji ant 0x%1 - Unknown property for ItemLibraryEntry %1 - Nieznana właściwość dla "ItemLibraryEntry" %1 + Android: adb installation error 0x%1 + Android: błąd instalacji adb 0x%1 - Unknown property for Property %1 - Nieznana właściwość dla "Property" %1 + Android: Device connection error 0x%1 + Android: błąd łączności z urządzeniem 0x%1 - Unknown property for QmlSource %1 - Nieznana właściwość dla "QmlSource" %1 + Android: Device permission error 0x%1 + Android: błąd uprawnień urządzenia 0x%1 - Invalid or duplicate item library entry %1 - + Android: Device authorization error 0x%1 + Android: błąd autoryzacji urządzenia 0x%1 - - - SubComponentManager::parseDirectory - Invalid meta info - Niepoprawna metainformacja + Android: Device API level not supported: error 0x%1 + Android: Poziom API urządzenia nieobsługiwany 0x%1 - - - QmlDesigner::TextToModelMerger - No import statements found - Brak instrukcji importu + Android: Unknown error 0x%1 + Android: nieznany błąd 0x%1 + + + Android::Internal::AndroidPotentialKitWidget - Unsupported QtQuick version - Nieobsługiwana wersja QtQuick + Qt Creator needs additional settings to enable Android support. You can configure those settings in the Options dialog. + Qt Creator wymaga dodatkowych ustawień do obsługi Androida. Można je skonfigurować w dialogu z opcjami. + + + BareMetal::Internal::BareMetalDevice - This .qml file contains features which are not supported by Qt Quick Designer - Ten plik .qml zawiera cechy nieobsługiwane przez Qt Quick Designera + Bare Metal + Bare Metal - QmlDesigner::QmlDesignerPlugin + BareMetal::Internal::BareMetalGdbCommandsDeployStepWidget - Switch Text/Design - Przełącz tekst / projekt + GDB commands: + Komendy GDB: - QmlDesigner::ShortCutManager + BareMetal::Internal::BareMetalRunConfigurationFactory - &Undo - &Cofnij + %1 (on GDB server or hardware debugger) + %1 (na serwerze GDB lub debuggerze sprzętowym) + + + BareMetal::Internal::BareMetalRunControlFactory - &Redo - &Przywróć + Cannot debug: Local executable is not set. + Nie można debugować: brak ustawionego lokalnego pliku wykonywalnego. - Delete - Usuń + Cannot debug: Could not find executable for "%1". + Nie można debugować: nie można odnaleźć pliku wykonywalnego dla "%1". - Delete "%1" - Usuń "%1" + Cannot debug: Kit has no device. + Nie można debugować: brak urządzenia w zestawie narzędzi. - Cu&t - Wy&tnij + Cannot debug: Device has no GDB server provider configuration. + + + + CppEditor::Internal::CppIncludeHierarchyWidget - Cut "%1" - Wytnij "%1" + No include hierarchy available + Brak dostępnej hierarchii dołączeń + + + CppEditor::Internal::CppIncludeHierarchyFactory - &Copy - S&kopiuj + Include Hierarchy + Hierarchia dołączeń + + + CppEditor::Internal::CppIncludeHierarchyModel - Copy "%1" - Skopiuj "%1" + Includes + Dołączenia - &Paste - Wk&lej + Included by + Dołączone przez - Paste "%1" - Wklej "%1" + (none) + (brak) - Select &All - Zaznacz &wszystko + (cyclic) + (cykl) + + + VirtualFunctionsAssistProcessor - Select All "%1" - Zaznacz wszystkie "%1" + ...searching overrides + ...wyszukiwanie implementacji + + + ModelManagerSupportInternal::displayName - Toggle Sidebars - Przełącz boczny pasek + Qt Creator Built-in + Wbudowany w Qt Creatora + + + Debugger::DebuggerItemManager - Toggle Full Screen - Przełącz pełny ekran + Auto-detected CDB at %1 + Automatycznie wykryty CDB w %1 - &Restore Default View - Przywróć &domyślny widok + System %1 at %2 + %1: Debugger engine type (GDB, LLDB, CDB...), %2: Path + System %1 w %2 - Toggle &Left Sidebar - Przełącz l&ewy boczny pasek + Extracted from Kit %1 + Znaleziony w zestawie narzędzi %1 + + + Debugger::Internal::GdbPlainEngine - Toggle &Right Sidebar - Przełącz p&rawy boczny pasek + Starting executable failed: + Nie można uruchomić programu: - &Go into Component - &Przejdź do komponentu + Cannot set up communication with child process: %1 + Nie można ustanowić połączenia z podprocesem: %1 + + + Ios::Internal::IosBuildStepConfigWidget - Save %1 As... - Zachowaj %1 jako... + iOS build + iOS BuildStep display name. + Wersja iOS + + + Ios::Internal::IosConfigurations - &Save %1 - &Zachowaj %1 + %1 %2 + %1 %2 + + + Ios - Revert %1 to Saved - Odwróć zmiany w %1 + iOS + iOS + + + Ios::Internal::IosDebugSupport - Close %1 - Zamknij %1 + Could not find device specific debug symbols at %1. Debugging initialization will be slow until you open the Organizer window of Xcode with the device connected to have the symbols generated. + - Close All Except %1 - Zamknij wszystko z wyjątkiem %1 + Debugging with Xcode 5.0.x can be unreliable without a dSYM. To create one, add a dsymutil deploystep. + - Close Others - Zamknij inne + The dSYM %1 seems to be outdated, it might confuse the debugger. + dSYM %1 może być nieaktualny i może spowodować nieprawidłową pracę debuggera. - - - QmlJSTools::Internal::QmlConsoleEdit - Cu&t - Wy&tnij + Could not get debug server file descriptor. + - &Copy - S&kopiuj + Got an invalid process id. + Otrzymano niepoprawny identyfikator procesu. - &Paste - Wk&lej + Run ended with error. + Praca zakończona błędem. - Select &All - Zaznacz &wszystko + Run ended. + Praca zakończona. + + + Ios::Internal::IosDeployConfiguration - C&lear - Wy&czyść + Deploy to iOS + Zainstaluj na iOS - QmlJSTools::Internal::QmlConsoleModel + Ios::Internal::IosDeployConfigurationFactory - Can only evaluate during a QML debug session. - Obliczanie możliwe jedynie podczas debugowania QML. + Deploy on iOS + Zainstaluj na iOS - QmlJSTools::Internal::QmlConsolePane + Ios::Internal::IosDeployStep - Show debug, log, and info messages. - Pokazuj komunikaty debugowe, log i informacje. + Deploy to %1 + Zainstaluj na %1 - Show warning messages. - Pokazuj komunikaty z ostrzeżeniami. + Error: no device available, deploy failed. + Błąd: urządzenie nie jest dostępne, instalacja nieudana. - Show error messages. - Pokazuj komunikaty z błędami. + Deployment failed. No iOS device found. + Nieudana instalacja. Brak urządzenia iOS. - QML/JS Console - Konsola QML / JS + Deployment failed. The settings in the Organizer window of Xcode might be incorrect. + Nieudana instalacja. Ustawienia w oknie "Organizer" w Xcode mogą być niepoprawne. - - - QmlJSTools::Internal::QmlConsoleView - &Copy - S&kopiuj + Deployment failed. + Nieudana instalacja. - &Show in Editor - &Pokaż w edytorze + The Info.plist might be incorrect. + Info.plist może być niepoprawne. - C&lear - Wy&czyść + The provisioning profile "%1" (%2) used to sign the application does not cover the device %3 (%4). Deployment to it will fail. + - QmlApplicationWizard - - Failed to read %1 template. - Nie można odczytać szablonu %1. - + Ios::Internal::IosDeployStepFactory - Failed to read file %1. - Nie można odczytać pliku %1. + Deploy to iOS device or emulator + Zainstaluj na urządzeniu iOS lub emulatorze - QmlProjectManager::Internal::QmlApplicationWizardDialog - - New Qt Quick UI Project - Nowy Qt Quick UI projekt - + Ios::Internal::IosDevice - This wizard generates a Qt Quick UI project. - Ten kreator generuje Qt Quick UI projekt. + iOS + iOS - Component Set - Zestaw komponentów + iOS Device + Urządzenie iOS - QmlProjectManager::Internal::QmlApplicationWizard - - Qt Quick UI - Qt Quick UI - + Ios::Internal::IosDeviceManager - Creates a Qt Quick UI project. - Tworzy projekt Qt Quick UI. + Device name + Nazwa urządzenia - - - QmlProjectManager::QmlProjectEnvironmentAspect - System Environment - Środowisko systemowe + Developer status + Whether the device is in developer mode. + Stan trybu deweloperskiego - - - Qnx::Internal::BarDescriptorDocument - %1 does not appear to be a valid application descriptor file - %1 nie jest poprawnym plikiem deskryptora aplikacji + Connected + Połączony - - - Qnx::Internal::BarDescriptorEditor - General - Ogólne + yes + tak - Application - Aplikacja + no + nie - Assets - Zasoby + unknown + nieznany - XML Source - Źródło XML + OS version + Wersja OS - Line: %1, Col: %2 - Linia: %1, kolumna: %2 + An iOS device in user mode has been detected. + Wykryto urządzenie iOS w trybie użytkownika. - Line: 9999, Col: 999 - Linia: 9999, kolumna: 999 + Do you want to see how to set it up for development? + Czy chcesz zobaczyć jak przełączyć je do trybu deweloperskiego? - Qnx::Internal::BarDescriptorEditorFactory + Ios::Internal::IosQtVersion + + Failed to detect the ABIs used by the Qt version. + Nie można wykryć ABI użytych przez wersję Qt. + - Bar descriptor editor - Edytor deskryptorów Bar + iOS + Qt Version is meant for Ios + iOS - Qnx::Internal::BarDescriptorEditorWidget + Ios::Internal::IosRunConfiguration - Entry-Point Text and Images - + Run on %1 + Uruchom na %1 - Package Information - Informacje o pakiecie + Run %1 on %2 + Uruchom %1 na %2 - Author Information - Informacje o autorze + The .pro file "%1" is currently being parsed. + Trwa parsowanie pliku .pro "%1". - General - Ogólne + Kit has incorrect device type for running on iOS devices. + Niewłaściwy typ urządzenia, ustawiony w zestawie narzędzi, do uruchamiania na urządzeniach iOS. - Permissions - Prawa dostępu + No device chosen. Select %1. + Brak wybranego urządzenia. Wybierz %1. - Environment - Środowisko + No device chosen. Enable developer mode on a device. + Brak wybranego urządzenia. Włącz tryb deweloperski na urządzeniu. - Assets - Zasoby + No device available. + Brak dostępnych urządzeń. - - - Qnx::Internal::BarDescriptorPermissionsModel - Permission - Prawa dostępu + To use this device you need to enable developer mode on it. + Włącz tryb deweloperski na tym urządzeniu. - BlackBerry Messenger - Komunikator BlackBerry + %1 is not connected. Select %2? + %1 nie jest podłączony. Wybrać %2? - <html><head/><body><p>Allows this app to connect to the BBM Social Platform to access BBM contact lists and user profiles, invite BBM contacts to download your app, initiate BBM chats and share content from within your app, or stream data between apps in real time.</p></body></html> - + %1 is not connected. Enable developer mode on a device? + %1 nie jest podłączony. Włączyć deweloperski na urządzeniu? - Calendar - Kalendarz + %1 is not connected. + %1 nie jest podłączony. + + + Ios::Internal::IosRunConfigurationWidget - <html><head/><body><p>Allows this app to access the calendar on the device. This access includes viewing, adding, and deleting calendar appointments.</p></body></html> - <html><head/><body><p>Udostępnia tej aplikacji kalendarz w urządzeniu, włącznie z przeglądaniem, dodawaniem i usuwaniem terminów w kalendarzu.</p></body></html> + iOS run settings + Ustawienia uruchamiania iOS + + + Ios::Internal::IosRunControl - Camera - Kamera + Starting remote process. + Uruchamianie zdalnego procesu. - <html><head/><body><p>Allows this app to take pictures, record video, and use the flash.</p></body></html> - <html><head/><body><p>Pozwala tej aplikacji robić zdjęcia, nagrywać wideo i używać lampy błyskowej.</p></body></html> + Run ended with error. + Praca zakończona błędem. - Contacts - Kontakty + Run ended. + Praca zakończona. + + + Ios::Internal::IosRunner - <html><head/><body><p>Allows this app to access the contacts stored on the device. This access includes viewing, creating, and deleting the contacts.</p></body></html> - <html><head/><body><p>Udostępnia tej aplikacji kontakty przechowywane w urządzeniu, włącznie z przeglądaniem, dodawaniem i usuwaniem kontaktów.</p></body></html> + Could not find %1. + Nie można odnaleźć %1. - Device Identifying Information - Informacja identyfikująca urządzenie + Run failed. The settings in the Organizer window of Xcode might be incorrect. + Nieudane uruchomienie. Ustawienia w oknie "Organizer" w Xcode mogą być niepoprawne. - <html><head/><body><p>Allows this app to access device identifiers such as serial number and PIN.</p></body></html> - <html><head/><body><p>Udostępnia tej aplikacji dane służące do identyfikacji urządzenia, włącznie z numerem seryjnym i kodem PIN.</p></body></html> + The device is locked, please unlock. + Urządzenie jest zablokowane, odblokuj je. + + + Ios::Internal::IosSettingsPage - Email and PIN Messages - + iOS Configurations + Konfiguracje iOS + + + Ios::Internal::IosSimulator - <html><head/><body><p>Allows this app to access the email and PIN messages stored on the device. This access includes viewing, creating, sending, and deleting the messages.</p></body></html> - + iOS Simulator + Symulator iOS + + + Ios::Internal::IosSimulatorFactory - GPS Location - Pozycja GPS + iOS Simulator + iOS Simulator + + + Ios::IosToolHandler - <html><head/><body><p>Allows this app to access the current GPS location of the device.</p></body></html> - <html><head/><body><p>Udostępnia tej aplikacji bieżącą pozycję GPS urządzenia.</p></body></html> + iOS tool Error %1 + Błąd narzędzia iOS %1 + + + Macros::Internal::MacroManager - Internet - Internet + Playing Macro + Odtwarzanie makra - <html><head/><body><p>Allows this app to use Wi-fi, wired, or other connections to a destination that is not local on the user's device.</p></body></html> - + An error occurred while replaying the macro, execution stopped. + Wystąpił błąd podczas ponownego odtwarzania makra, zatrzymano wykonywanie. - Location - Położenie + Macro mode. Type "%1" to stop recording and "%2" to play the macro. + Tryb makro. Wpisz "%1" aby zatrzymać nagrywanie albo "%2" aby je odtworzyć. - <html><head/><body><p>Allows this app to access the device's current or saved locations.</p></body></html> - <html><head/><body><p>Udostępnia tej aplikacji bieżącą lub zapisane pozycje urządzenia.</p></body></html> + Stop Recording Macro + Zatrzymaj nagrywanie makra + + + CustomToolChain - Microphone - Mikrofon + GCC + GCC - <html><head/><body><p>Allows this app to record sound using the microphone.</p></body></html> - <html><head/><body><p>Pozwala tej aplikacji rejestrować dźwięk przy użyciu mikrofonu.</p></body></html> + Clang + Clang - Notebooks - Notatniki + ICC + ICC - <html><head/><body><p>Allows this app to access the content stored in the notebooks on the device. This access includes adding and deleting entries and content.</p></body></html> - <html><head/><body><p>Udostępnia tej aplikacji zawartość notatników przechowywanych na urządzeniu, włącznie z dodawaniem i usuwaniem treści.</p></body></html> + MSVC + MSVC - Post Notifications - Wysłanie powiadomienia + Custom + Własny + + + ProjectExplorer::DesktopProcessSignalOperation - <html><head/><body><p>Post a notification to the notifications area of the screen.</p></body></html> - <html><head/><body><p>Wysyła powiadomienie do obszaru z powiadomieniami na ekranie.</p></body></html> + Cannot kill process with pid %1: %2 + Nie można zakończyć procesu z pid %1: %2 - Push - Push + Cannot interrupt process with pid %1: %2 + Nie można przerwać procesu z pid %1: %2 - <html><head/><body><p>Allows this app to use the Push Service with the BlackBerry Internet Service. This access allows the app to receive and request push messages. To use the Push Service with the BlackBerry Internet Service, you must register with BlackBerry. When you register, you receive a confirmation email message that contains information that your application needs to receive and request push messages. For more information about registering, visit https://developer.blackberry.com/services/push/. If you're using the Push Service with the BlackBerry Enterprise Server or the BlackBerry Device Service, you don't need to register with BlackBerry.</p></body></html> - + Cannot open process. + Nie można otworzyć procesu. - Run When Backgrounded - + Invalid process id. + Niepoprawny identyfikator procesu. - <html><head/><body><p>Allows background processing. Without this permission, the app is stopped when the user switches focus to another app. Apps that use this permission are rigorously reviewed for acceptance to BlackBerry App World storefront for their use of power.</p></body></html> - + Cannot open process: %1 + Nie można otworzyć procesu: %1 - Shared Files - Pliki dzielone + DebugBreakProcess failed: + Błąd DebugBreakProcess: - <html><head/><body><p>Allows this app to access pictures, music, documents, and other files stored on the user's device, at a remote storage provider, on a media card, or in the cloud.</p></body></html> - <html><head/><body><p>Udostępnia tej aplikacji zdjęcia, muzykę, dokumenty i inne pliki przechowywane na urządzeniu, karcie pamięci, bądź w chmurze użytkownika.</p></body></html> + %1 does not exist. If you built Qt Creator yourself, check out https://code.qt.io/cgit/qt-creator/binary-artifacts.git/. + %1 nie istnieje. Jeśli zbudowałeś Qt Creatora samodzielnie, sprawdź http://code.qt.io/cgit/qt-creator/binary-artifacts.git/. - Text Messages - Komunikaty tekstowe + Cannot start %1. Check src\tools\win64interrupt\win64interrupt.c for more information. + Nie można uruchomić %1. Więcej informacji sprawdź w src\tools\win64interrupt\win64interrupt. - <html><head/><body><p>Allows this app to access the text messages stored on the device. The access includes viewing, creating, sending, and deleting text messages.</p></body></html> - <html><head/><body><p>Udostępnia tej aplikacji komunikaty tekstowe, przechowywane na urządzeniu, włącznie z przeglądaniem, tworzeniem, wysyłaniem i usuwaniem komunikatów tekstowych.</p></body></html> + could not break the process. + nie można przerwać procesu. - Qnx::Internal::BlackBerryDeviceConnection + ProjectExplorer::SshDeviceProcess - Error connecting to device: java could not be found in the environment. - Błąd połączenia z urządzeniem: brak "java" w środowisku. + Failed to kill remote process: %1 + Nie można zakończyć zdalnego procesu: %1 - - - Qnx::Internal::BlackBerryKeysPage - Keys - Klucze + Timeout waiting for remote process to finish. + Przekroczono czas oczekiwania na zakończenie zdalnego procesu. - - - Qnx::Internal::BlackBerryNDKSettingsPage - API Levels and Runtimes - + Terminated by request. + Zakończono na żądanie. - Qnx::Internal::BlackBerryProcessParser + ProjectExplorer::Internal::ImportWidget - Authentication failed. Please make sure the password for the device is correct. - Błąd autoryzacji. Upewnij się, że hasło dla urządzenia jest poprawne. + Import Build From... + Zaimportuj wersję z... - - - Qnx::Internal::QnxAbstractRunSupport - Not enough free ports on device for debugging. - Niewystarczająca ilość wolnych portów w urządzeniu do debugowania. + Import + Zaimportuj - Qnx::Internal::QnxAnalyzeSupport + ProjectExplorer::OsParser - Preparing remote side... - Przygotowywanie zdalnej strony... - - - The %1 process closed unexpectedly. - Proces %1 nieoczekiwanie zakończył pracę. + The process can not access the file because it is being used by another process. +Please close all running instances of your application before starting a build. + Proces nie ma dostępu do pliku, ponieważ plik jest używany przez inny proces. +Proszę zamknąć wszystkie instancje tej aplikacji przed uruchomieniem budowania. + + + ProjectExplorer::ProjectImporter - Initial setup failed: %1 - Błąd wstępnej konfiguracji: %1 + %1 - temporary + %1 - tymczasowy + + + QmakeProjectManager::Internal::Qt4Target - Warning: "slog2info" is not found on the device, debug output not available. - Ostrzeżenie: brak"slog2info" na urządzeniu, komunikaty debugowe nie będą dostępne. + Desktop + Qt4 Desktop target display name + Desktop - Warning: "slog2info" is not found on the device, debug output not available! - Ostrzeżenie: brak"slog2info" na urządzeniu, komunikaty debugowe nie będą dostępne. + Maemo Emulator + Qt4 Maemo Emulator target display name + Emulator Maemo - - - BlackBerry - BlackBerry - BlackBerry + Maemo Device + Qt4 Maemo Device target display name + Urządzenie Maemo - Qnx::Internal::QnxDeviceTester + ProjectExplorer::TargetSetupPage - %1 found. - Znaleziono %1. + <span style=" font-weight:600;">No valid kits found.</span> + <span style=" font-weight:600;">Brak poprawnych zestawów narzędzi.</span> - %1 not found. - Nie znaleziono %1. + Please add a kit in the <a href="buildandrun">options</a> or via the maintenance tool of the SDK. + Dodaj zestaw w <a href="buildandrun">opcjach</a> lub poprzez narzędzie kontrolne SDK. - An error occurred checking for %1. - Błąd podczas sprawdzania %1. + Select all kits + Zaznacz wszystkie zestawy narzędzi - SSH connection error: %1 - Błąd połączenia SSH: %1 + Select Kits for Your Project + Wybierz zestawy narzędzi dla projektu - Checking for %1... - Sprawdzanie %1... + Kit Selection + Wybór zestawu narzędzi - - - QtSupport::Internal::QtSupportPlugin - Full path to the host bin directory of the current project's Qt version. - Pełna ścieżka do źródłowego podkatalogu "bin" w katalogu instalacji bieżącej wersji Qt. + Kits + Zestawy narzędzi - Full path to the target bin directory of the current project's Qt version. You probably want %1 instead. - Pełna ścieżka docelowego podkatalogu "bin" w katalogu instalacji bieżącej wersji Qt. Prawdopodobnie powinno być: %1. + Qt Creator can use the following kits for project <b>%1</b>: + %1: Project name + Qt Creator może ustawić następujące zestawy narzędzi dla projektu <b>%1</b>: - QtSupport::QtVersionFactory + ProjectExplorer::Internal::TargetSetupWidget - No factory found for qmake: '%1' - Brak fabryki dla qmake: "%1" + <b>Error:</b> + Severity is Task::Error + <b>Błąd:</b> - No factory found for qmake: "%1" - Brak fabryki dla qmake: "%1" + <b>Warning:</b> + Severity is Task::Warning + <b>Ostrzeżenie:</b> - RemoteLinux::AbstractRemoteLinuxRunSupport + ProjectExplorer::Internal::TargetSetupPageWrapper - Not enough free ports on device for debugging. - Niewystarczająca ilość wolnych portów w urządzeniu do debugowania. + Configure Project + Skonfiguruj projekt - - - RemoteLinux::RemoteLinuxAnalyzeSupport - Checking available ports... - Sprawdzanie dostępnych portów... + Cancel + Anuluj - Failure running remote process. - Błąd uruchamiania zdalnego procesu. + The project <b>%1</b> is not yet configured.<br/>Qt Creator cannot parse the project, because no kit has been set up. + Project <b>%1</b> nie jest jeszcze skonfigurowany.<br/>Qt Creator nie może sparsować projektu, ponieważ nie ustawiono żadnych zestawów narzędzi. - Initial setup failed: %1 - Błąd wstępnej konfiguracji: %1 + The project <b>%1</b> is not yet configured.<br/>Qt Creator uses the kit <b>%2</b> to parse the project. + Project <b>%1</b> nie jest jeszcze skonfigurowany.<br/>Qt Creator użyje zestawu narzędzi <b>%2</b> do parsowania projektu. + + + The project <b>%1</b> is not yet configured.<br/>Qt Creator uses the <b>invalid</b> kit <b>%2</b> to parse the project. + Project <b>%1</b> nie jest jeszcze skonfigurowany.<br/>Qt Creator użyje <b>niepoprawnego</b> zestawu narzędzi <b>%2</b> do parsowania projektu. - RemoteLinux::RemoteLinuxDeploymentDataModel + QmakeProjectManager::Internal::DesktopQmakeRunConfiguration - Local File Path - Ścieżka do lokalnego pliku + The .pro file "%1" is currently being parsed. + Trwa parsowanie pliku .pro "%1". - Remote Directory - Zdalny katalog + Qt Run Configuration + Konfiguracja uruchamiania Qt - RemoteLinux::RemoteLinuxEnvironmentAspect + QmakeProjectManager::Internal::DesktopQmakeRunConfigurationWidget - Clean Environment - Czyste środowisko + Executable: + Plik wykonywalny: - System Environment - Środowisko systemowe + Arguments: + Argumenty: - - - RemoteLinux::RemoteLinuxEnvironmentAspectWidget - Fetch Device Environment - Pobierz środowisko urządzenia + Select Working Directory + Wybierz katalog roboczy - Cancel Fetch Operation - Anuluj pobieranie + Reset to Default + Przywróć domyślny - Device Error - Błąd urządzenia + Working directory: + Katalog roboczy: - Fetching environment failed: %1 - Błąd podczas pobierania środowiska: %1 + Run in terminal + Uruchom w terminalu - - - TextEditor::BehaviorSettingsWidget - Displays context-sensitive help or type information on mouseover. - Pokazuje pomoc kontekstową lub informację o typie po najechaniu kursorem myszy. + Run on QVFb + Uruchom na QVFb - Displays context-sensitive help or type information on Shift+Mouseover. - Pokazuje pomoc kontekstową lub informację o typie po naciśnięciu klawisza Shift i najechaniu kursorem myszy. + Check this option to run the application on a Qt Virtual Framebuffer. + Zaznacz tę opcję aby uruchomić aplikację na Qt Virtual Framebuffer. - - - RefactoringFile::apply - Refactoring cannot be applied. - Nie można zrefaktoryzować. + Use debug version of frameworks (DYLD_IMAGE_SUFFIX=_debug) + Użyj pakietów w wersji do debugowania (DYLD_IMAGE_SUFFIX=_debug) - QmlProjectManager::QmlApplicationWizard + QmakeProjectManager::Internal::QmakeProjectImporter - Creates a Qt Quick 1 UI project with a single QML file that contains the main view. You can review Qt Quick 1 UI projects in the QML Viewer 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 project. Requires Qt 4.8 or newer. - Tworzy projekt UI Qt Quick 1 z pojedynczym plikiem QML, zawierającym główny widok. Projekty można przeglądać przy pomocy QML Viewera, bez ich uprzedniego budowania. Do tworzenia i uruchamiania tego typu projektów nie jest wymagana instalacja środowiska deweloperskiego. Wymagana jest zaś wersja Qt 4.8 lub nowsza. + Debug + Debug - Qt Quick 1.1 - Qt Quick 1.1 + Release + Release - Creates a Qt Quick 2 UI project with a single QML file that contains the main view. 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 project. Requires Qt 5.1 or newer. - Tworzy projekt UI Qt Quick 2 z pojedynczym plikiem QML, zawierającym główny widok. Projekty można przeglądać przy pomocy QML Scene, bez ich uprzedniego budowania. Do tworzenia i uruchamiania tego typu projektów nie jest wymagana instalacja środowiska deweloperskiego. Wymagana jest zaś wersja Qt 5.1 lub nowsza. + No Build Found + Brak zbudowanej wersji - Qt Quick 2.1 - Qt Quick 2.1 + No build found in %1 matching project %2. + Brak zbudowanej wersji w %1 dla projektu %2. + + + TabViewToolAction - Creates a Qt Quick 2 UI project with a single QML file that contains the main view. 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 project. Requires Qt 5.2 or newer. - Tworzy projekt UI Qt Quick 2 z pojedynczym plikiem QML, zawierającym główny widok. Projekty można przeglądać przy pomocy QML Scene, bez ich uprzedniego budowania. Do tworzenia i uruchamiania tego typu projektów nie jest wymagana instalacja środowiska deweloperskiego. Wymagana jest zaś wersja Qt 5.2 lub nowsza. + Add Tab... + Dodaj zakładkę... - Qt Quick 2.2 - Qt Quick 2.2 + Step into Tab + Przejdź do zakładki + + + QmlDesigner::ImportLabel - Creates a Qt Quick 2 UI project with a single QML file that contains the main view. 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 project. Requires Qt 5.3 or newer. - Tworzy projekt UI Qt Quick 2 z pojedynczym plikiem QML, zawierającym główny widok. Projekty można przeglądać przy pomocy QML Scene, bez ich uprzedniego budowania. Do tworzenia i uruchamiania tego typu projektów nie jest wymagana instalacja środowiska deweloperskiego. Wymagana jest zaś wersja Qt 5.3 lub nowsza. + Remove Import + Usuń import + + + ImportManagerComboBox - Qt Quick 2.3 - Qt Quick 2.3 + Add new import + Dodaj nowy import - Creates a Qt Quick 2 UI project that contains a .ui.qml file. You can review Qt Quick 2 UI projects in the QML Scene and you need not build them. Requires Qt 5.4 or newer. - Tworzy projekt UI Qt Quick 2 zawierający plik .ui.qml. Projekty można przeglądać przy pomocy QML Scene, bez ich uprzedniego budowania. Wymagana jest wersja Qt 5.4 lub nowsza. + <Add Import> + <Dodaj Import> + + + QmlDesigner::ImportsWidget - Qt Quick 2.4 - Qt Quick 2.4 + Import Manager + Zarządzanie importami + + + FileResourcesModel - Creates a Qt Quick 2 UI project with a single QML file that contains the main view and uses Qt Quick Controls. 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. Requires Qt 5.2 or newer. - Tworzy projekt UI Qt Quick 2 z pojedynczym plikiem QML, zawierającym główny widok i używającym Qt Quick Controls. Projekty można przeglądać przy pomocy QML Scene, bez ich uprzedniego budowania. Takie projekty wymagają instalacji Qt Quick Controls. Wymagana jest również wersja Qt 5.2 lub nowsza. + Open File + Otwórz plik + + + QmlDesigner::PropertyEditorView - Qt Quick Controls 1.1 - Qt Quick Controls 1.1 + Properties + Właściwości - Creates a Qt Quick 2 UI project with a single QML file that contains the main view and uses Qt Quick Controls. 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. Requires Qt 5.3 or newer. - Tworzy projekt UI Qt Quick 2 z pojedynczym plikiem QML, zawierającym główny widok i używającym Qt Quick Controls. Projekty można przeglądać przy pomocy QML Scene, bez ich uprzedniego budowania. Takie projekty wymagają instalacji Qt Quick Controls. Wymagana jest również wersja Qt 5.3 lub nowsza. + Invalid Id + Niepoprawny identyfikator - Qt Quick Controls 1.2 - Qt Quick Controls 1.2 + %1 is an invalid id. + %1 nie jest poprawnym identyfikatorem. - Creates a Qt Quick 2 UI project that contains a .ui.qml file and uses Qt Quick Controls. 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. Requires Qt 5.4 or newer. - Tworzy projekt UI Qt Quick 2 zawierający plik .ui.qml i używający Qt Quick Controls. Projekty można przeglądać przy pomocy QML Scene, bez ich uprzedniego budowania. Takie projekty wymagają instalacji Qt Quick Controls. Wymagana jest również wersja Qt 5.4 lub nowsza. + %1 already exists. + %1 już istnieje. + + + QmlProfiler::Internal::QmlProfilerEventRelativesView - Qt Quick Controls 1.3 - Qt Quick Controls 1.3 + <bytecode> + <kod bajtowy> - Creates a Qt Quick 2 UI project with a single QML file that contains the main view and uses Qt Quick Controls. 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. Requires Qt 5.1 or newer. - Tworzy projekt UI Qt Quick 2 z pojedynczym plikiem QML, zawierającym główny widok i używającym Qt Quick Controls. Projekty można przeglądać przy pomocy QML Scene, bez ich uprzedniego budowania. Takie projekty wymagają instalacji Qt Quick Controls. Wymagana jest również wersja Qt 5.1 lub nowsza. + Source code not available + Kod źródłowy nie jest dostępny. - Qt Quick Controls 1.0 - Qt Quick Controls 1.0 + Part of binding loop. + Część powiązanej pętli. - Android::Internal::AddNewAVDDialog + QmlProfiler::Internal::QmlProfilerDataState - Create new AVD - Utwórz nowe AVD + Trying to set unknown state in events list. + Próba ustawienia nieznanego stanu na liście zdarzeń. + + + QmlProfiler::QmlProfilerModelManager - Target API: + Unexpected complete signal in data model. - Name: - Nazwa: + Could not open %1 for writing. + Nie można otworzyć "%1" do zapisu. - SD card size: - Rozmiar karty SD: + Saving Trace Data + - MiB - MiB + Could not open %1 for reading. + Nie można otworzyć "%1" do odczytu. - ABI: - ABI: + Loading Trace Data + - AndroidDeployQtWidget - - Form - Formularz - + QmlProfiler::Internal::QmlProfilerPlugin - Sign package - Podpis pakietu + QML Profiler + Profiler QML - Signing a debug package - Podpisanie pakietu debugowego + QML Profiler (External) + Profiler QML (zewnętrzny) + + + QmlProfiler::Internal::QmlProfilerFileReader - Certificate alias: - Alias certyfikatu: + Error while parsing trace data file: %1 + Błąd parsowania pliku z danymi stosu: %1 + + + QmlProjectManager::QmlProjectFileFormat - Advanced Actions - Zaawansowane akcje + Invalid root element: %1 + Niepoprawny główny element: %1 + + + Qnx::Internal::QnxRunControl - Clean Temporary Libraries Directory on Device - Wyczyść tymczasowe katalogi z bibliotekami na urządzeniu + Warning: "slog2info" is not found on the device, debug output not available. + Ostrzeżenie: brak"slog2info" na urządzeniu, komunikaty debugowe nie będą dostępne. + + + Qnx::Internal::QnxToolChainFactory - Install Ministro from APK - Zainstaluj Ministro z APK + QCC + QCC + + + Qnx::Internal::QnxToolChainConfigWidget - Reset Default Devices - Przywróc domyślne urządzenia + &Compiler path: + Ścieżka do &kompilatora: - Open package location after build - Po zakończeniu budowania otwórz w położeniu pakietu + NDK/SDP path: + SDP refers to 'Software Development Platform'. + Ścieżka NDK/SDP: - Verbose output - Gadatliwe komunikaty + &ABI: + &ABI: + + + Qnx::Internal::Slog2InfoRunner - Create AndroidManifest.xml - Utwórz AndroidManifest.xml + Cannot show slog2info output. Error: %1 + Nie można pokazać komunikatów slog2info. Błąd: %1 + + + RemoteLinux::RemoteLinuxSignalOperation - Application - Aplikacja + Exit code is %1. stderr: + Kod wyjściowy: %1. stderr: + + + Update - Input file for androiddeployqt: - Plik wejściowy dla androiddeployqt: + Update + Uaktualnij + + + Valgrind::Internal::CallgrindRunControl - Qt no longer uses the folder "android" in the project's source directory. - Qt nie używa już katalogu "android" w katalogu źródłowym projektu. + Profiling + Profilowanie - Qt Deployment - Instalacja Qt + Profiling %1 + Profilowanie %1 + + + Valgrind::Memcheck::MemcheckRunner - Use Ministro service to install Qt - Użyj usługi Ministro do zainstalowania Qt + XmlServer on %1: + XmlServer na %1: - Deploy local Qt libraries to temporary directory - Zainstaluj lokalne biblioteki Qt do tymczasowego katalogu + LogServer on %1: + LogServer na %1: + + + Valgrind::Internal::MemcheckRunControl - Creates a standalone APK. - Tworzy samodzielny APK. + Analyzing Memory + Analiza pamięci - Bundle Qt libraries in APK - Dołącz biblioteki Qt do APK + Analyzing memory of %1 + Analiza pamięci w %1 - - Additional Libraries - Dodatkowe biblioteki + + + AnalyzerManager + + Memory Analyzer Tool finished, %n issues were found. + + Zakończono analizę pamięci, znaleziono %n problem. + Zakończono analizę pamięci, znaleziono %n problemy. + Zakończono analizę pamięci, znaleziono %n problemów. + - List of extra libraries to include in Android package and load on startup. - Lista dodatkowych bibliotek dołączanych do pakietu Android i ładowanych przy uruchamianiu. + Memory Analyzer Tool finished, no issues were found. + Zakończono analizę pamięci, nie znaleziono żadnych problemów. - - Select library to include in package. - Wybierz bibliotekę, którą dołączyć do pakietu. + + Log file processed, %n issues were found. + + Przetworzono plik logu, znaleziono %n problem. + Przetworzono plik logu, znaleziono %n problemy. + Przetworzono plik logu, znaleziono %n problemów. + - Remove currently selected library from list. - Usuń zaznaczoną bibliotekę z listy. + Log file processed, no issues were found. + Przetworzono plik logu, nie znaleziono żadnych problemów. + + + Valgrind::Internal::ValgrindRunControl - Remove - Usuń + Valgrind options: %1 + Opcje valgrinda: %1 - Create... - Utwórz... + Working directory: %1 + Katalog roboczy: %1 - Add... - Dodaj... + Command line arguments: %1 + Argumenty linii komend: %1 - Uses the external Ministro application to download and maintain Qt libraries. - Używa zewnętrznej aplikacji Ministro do pobierania bibliotek Qt i zarządzania nimi. + Analyzing finished. + Zakończono analizę. - Pushes local Qt libraries to device. You must have Qt libraries compiled for that platform. -The APK will not be usable on any other device. - Przesyła lokalne biblioteki Qt do urządzenia. -Należy przesłać biblioteki skompilowane dla tej platformy. -APK nie będzie przydatne na innych urządzeniach. + Error: "%1" could not be started: %2 + Błąd: nie można uruchomić "%1": %2 - Deploy options - Opcje instalacji + Error: no Valgrind executable set. + Błąd: nie ustawiono pliku wykonywalnego valgrind. - Uninstall previous package - Odinstaluj poprzedni pakiet + Process terminated. + Zakończono proces. - Android::Internal::AndroidDeviceDialog + Valgrind::Internal::ValgrindOptionsPage - Select Android Device - Wybierz urządzenie z Androidem + Valgrind + Valgrind + + + Valgrind::Internal::ValgrindPlugin - Refresh Device List - Odśwież listę urządzeń + Valgrind Function Profile uses the Callgrind tool to record function calls when a program runs. + - Create Android Virtual Device - Utwórz wirtualne urządzenie Android + Valgrind Analyze Memory uses the Memcheck tool to find memory leaks. + - Always use this device for architecture %1 - Używaj zawsze tego urządzenia do architektury %1 + Valgrind Memory Analyzer + Analizator pamięci Valgrind - ABI: - ABI: + Valgrind Memory Analyzer with GDB + - Compatible devices - Kompatybilne urządzenia + Valgrind Analyze Memory with GDB uses the Memcheck tool to find memory leaks. +When a problem is detected, the application is interrupted and can be debugged. + - Unauthorized. Please check the confirmation dialog on your device %1. - Urządzenie nieautoryzowane. Sprawdź dialog potwierdzenia w urządzeniu %1. + Valgrind Function Profiler + Profiler funkcji Valgrind - Offline. Please check the state of your device %1. - Rozłączony. Sprawdź stan urządzenia %1. + Valgrind Memory Analyzer (External Remote Application) + Analizator pamięci Valgrind (zewnętrza zdalna aplikacja) - ABI is incompatible, device supports ABIs: %1. - Niekompatybilne ABI, urządzenie obsługuje następujące ABI: %1. + Valgrind Function Profiler (External Remote Application) + Profiler funkcji Valgrind (zewnętrzna zdalna aplikacja) - API Level of device is: %1. - Poziom API urządzenia: %1. + Profile Costs of This Function and Its Callees + + + + Valgrind::ValgrindProcess - Android 5 devices are incompatible with deploying Qt to a temporary directory. - Urządzenia Android 5 nie obsługują instalowania Qt do tymczasowego katalogu. + Could not determine remote PID. + Nie można określić zdalnego PID. + + + Valgrind::Internal::ValgrindRunConfigurationAspect - Incompatible devices - Niekompatybilne urządzenia + Valgrind Settings + Ustawienia Valgrinda + + + Bazaar::Internal::UnCommitDialog - <p>Connect an Android device via USB and activate developer mode on it. Some devices require the installation of a USB driver.</p> - <p>Podłącz urządzenie Android przez USB i włącz w nim tryb deweloperski. Niektóre urządzenia wymagają instalacji sterownika USB.</p> + Uncommit + - <p>The adb tool in the Android SDK lists all connected devices if run via &quot;adb devices&quot;.</p> - <p>Narzędzie adb w Android SDK pokazuje wszystkie podłączone urządzenia uruchomione przez &quot;urządzenia adb&quot;.</p> + Keep tags that point to removed revisions + - No Device Found - Brak urządzeń + Only remove the commits from the local branch when in a checkout + - <html><head/><body><p><a href="aaa"><span style=" text-decoration: underline; color:#0057ae;">My device is missing</span></a></p></body></html> - <html><head/><body><p><a href="aaa"><span style=" text-decoration: underline; color:#0057ae;">Brak mojego urządzenia</span></a></p></body></html> + Revision: + Poprawka: - - - BareMetal::BareMetalDeviceConfigurationWidget - Form - Formularz + If a revision is specified, uncommits revisions to leave the branch at the specified revision. +For example, "Revision: 15" will leave the branch at revision 15. + - GDB host: - Host GDB: + Last committed + Ostatnia zmiana - GDB port: - Port GDB: + Dry Run + Na sucho - GDB commands: - Komendy GDB: + Test the outcome of removing the last committed revision, without actually removing anything. + Testuje rezultat usunięcia ostatniej poprawki bez faktycznego usunięcia czegokolwiek. - BareMetal::Internal::BareMetalDeviceConfigurationWizardSetupPage + Beautifier::Internal::ArtisticStyle::ArtisticStyleOptionsPage Form - Formularz + Formularz - Set up GDB Server or Hardware Debugger - Ustaw serwer GDB lub debugger sprzętowy + Configuration + Konfiguracja - Name: - Nazwa: + Artistic Style command: + Komendy stylu Artistic: - Init commands: - Komendy inicjalizujące: + Options + Opcje - Reset commands: - Komendy resetujące: + Use file *.astylerc defined in project files + Używaj plików *.astylerc zdefiniowanych w plikach projektów - Bare Metal Device - Urządzenie Bare Metal + Artistic Style + Styl Artistic - localhost - localhost + Use file .astylerc or astylerc in HOME + HOME is replaced by the user's home directory + Używaj plików .astylerc lub astylerc zdefiniowanych w HOME - GDB port: - Port GDB: + Use customized style: + Używaj własnego stylu: + + + Beautifier::Internal::ClangFormat::ClangFormatOptionsPage - GDB host: - Host GDB: + Form + Formularz - GDB commands: - Komendy GDB: + Configuration + Konfiguracja - load -monitor reset - load -monitor reset + Clang Format command: + Komenda formatowania Clang: - - - Core::Internal::AddToVcsDialog - Dialog - Dialog - - - Add the file to version control (%1) - Dodaj plik do systemu kontroli wersji (%1) + Options + Opcje - Add the files to version control (%1) - Dodaj pliki do systemu kontroli wersji (%1) + Format entire file if no text was selected. (For action Format Selected Text) + Formatuj cały plik w przypadku braku zaznaczonego tekstu. (Dla akcji "Sformatuj zaznaczony tekst") - - - CppEditor::Internal::CppPreProcessorDialog - Additional C++ Preprocessor Directives - Dodatkowe dyrektywy preprocesora C++ + Clang Format + Formatowanie Clang - Project: - Projekt: + Use predefined style: + Używaj predefiniowanego stylu: - Additional C++ Preprocessor Directives for %1: - Dodatkowe dyrektywy preprocesora C++ dla %1: + Use customized style: + Używaj własnego stylu: - CppTools::Internal::CppCodeModelSettingsPage + Beautifier::Internal::ConfigurationDialog - Form - Formularz + Name + Nazwa - Code Completion and Semantic Highlighting - Uzupełnianie kodu i podświetlanie semantyczne + Value + Wartość - C - C + Documentation + Dokumentacja - C++ - C++ + Documentation for "%1" + Dokumentacja dla "%1" + + + Beautifier::Internal::ConfigurationPanel - Objective C - Objective C + Form + Formularz - Objective C++ - Objective C++ + Edit + Zmodyfikuj - Pre-compiled Headers - Nagłówki prekompilowane + Remove + Usuń - <html><head/><body><p>When pre-compiled headers are not ignored, the parsing for code completion and semantic highlighting will process the pre-compiled header before processing any file.</p></body></html> - <html><head/><body><p>Gdy nagłówki prekompilowane nie są ignorowane, parsowanie ich nastąpi przed wszystkimi innymi plikami podczas uzupełniania kodu i podświetlania semantyki.</p></body></html> + Add + Dodaj - Ignore pre-compiled headers - Ignoruj nagłówki prekompilowane + Add Configuration + Dodaj konfigurację - Headers - Nagłówki + Edit Configuration + Zmodyfikuj konfigurację - Ios::Internal::IosBuildStep - - Base arguments: - Podstawowe argumenty: - + Beautifier::Internal::Uncrustify::UncrustifyOptionsPage - Reset Defaults - Przywróć domyślne + Form + Formularz - Extra arguments: - Dodatkowe argumenty: + Configuration + Konfiguracja - xcodebuild - xcodebuild + Uncrustify command: + - Qt Creator needs a compiler set up to build. Configure a compiler in the kit preferences. - Do budowy Qt Creator wymaga ustawionego kompilatora. Skonfiguruj go w opcjach zestawu narzędzi. + Options + Opcje - Configuration is faulty. Check the Issues output pane for details. - Konfiguracja jest błędna, sprawdź szczegóły w widoku "Problemy budowania". + Use file uncrustify.cfg defined in project files + Używaj plików uncrustify.cfg zdefiniowanych w plikach projektów - - - IosDeployStepWidget - Form - Formularz + Uncrustify + - - - IosRunConfiguration - Form - Formularz + Use file uncrustify.cfg in HOME + HOME is replaced by the user's home directory + - Arguments: - Argumenty: + Use customized style: + Używaj własnego stylu: + + + ClangCodeModel::Internal::ClangProjectSettingsPropertiesPage - Executable: - Plik wykonywalny: + Pre-compiled headers: + Nagłówki prekompilowane: - iPhone 3.5-inch Retina Display - Wyświetłacz 3.5-calowy Retina iPhone + None + Brak - iPhone 4-inch Retina Display - Wyświetłacz 4-calowy Retina iPhone + Build system (exact) + - iPad - iPad + Build system (fuzzy) + - iPad Retina Display - Wyświetłacz Retina iPad + Custom + Własne - Device type: - Typ urządzenia: + Choose... + Wybierz... - IosSettingsWidget + Core::Internal::FindDialog - iOS Configuration - Konfiguracja iOS + &Search + Wy&szukaj - Ask about devices not in developer mode - Pytaj o urządzenia nie będące w trybie deweloperskim + Search && &Replace + Wyszukaj i &zastąp - - - ProjectExplorer::Internal::CustomParserConfigDialog - Custom Parser - Własny parser + Sear&ch for: + Wysz&ukaj: - &Error message capture pattern: - Wzorzec do wychwytywania komunikatów z &błędami: + Case sensiti&ve + Uwzględniaj wielkość &liter - #error (.*):(\d+): (.*)$ - #error (.*):(\d+): (.*)$ + Whole words o&nly + Tylko &całe słowa - Capture Positions - Wychwytane pozycje + Use re&gular expressions + Używaj wyrażeń &regularnych - &File name: - Nazwa &pliku: + Sco&pe: + Z&akres: + + + Core::Internal::FindWidget - &Line number: - Numer &linii: + Find + Znajdź - &Message: - K&omunikat: + Find: + Znajdź: - Test - Test + ... + ... - E&rror message: - Komunikat z błę&dem: + Replace with: + Zastąp: - #error /home/user/src/test.c:891: Unknown identifier `test` - #error /home/user/src/test.c:891: Nieznany identyfikator `test` + Replace + Zastąp - File name: - Nazwa pliku: + Replace && Find + Zastąp i znajdź - TextLabel - Etykietka + Replace All + Zastąp wszystkie - Line number: - Numer linii: + Advanced... + Zaawansowane... + + + Core::Internal::DirectoryFilterOptions - Message: - Komunikat: + Name: + Nazwa: - Not applicable: - Nieodpowiedni: + File types: + Typy plików: - Pattern is empty. - Wzorzec jest pusty. + Specify file name filters, separated by comma. Filters may contain wildcards. + Podaj filtry nazw plików. oddzielone przecinkiem. Filtry mogą zawierać dżokery. - Pattern does not match the error message. - Wzorzec nie wychwycił komunikatu z błędem. + Specify a short word/abbreviation that can be used to restrict completions to files from this directory tree. +To do this, you type this shortcut and a space in the Locator entry field, and then the word to search for. + Podaj krótkie słowo lub skrót, który zostanie użyty do odfiltrowania plików w podanych katalogach. +Aby uaktywnić ten filtr, wpisz w lokalizatorze powyższy skrót i po spacji podaj szukane słowo. - - - ProjectExplorer::Internal::DeviceTestDialog - Device Test - Test urządzenia + Add... + Dodaj... - Close - Zamknij + Edit... + Modyfikuj... - Device test finished successfully. - Test urządzenia poprawnie zakończony. + Remove + Usuń - Device test failed. - Błąd testowania urządzenia. + Directories: + Katalogi: - QmlDesigner::AddTabToTabViewDialog + Core::Internal::FileSystemFilterOptions - Dialog - Dialog + Include hidden files + Włącz ukryte pliki - Add tab: - Dodaj zakładkę: + Filter: + Filtr: - Qnx::Internal::BlackBerryDeviceConfigurationWizardConfigPage - - Form - Formularz - - - Debug Token - - + Core::Internal::LocatorSettingsWidget - Location: - Położenie: + Configure Filters + Konfiguracja filtrów - Generate - Wygeneruj + Add... + Dodaj... - Debug token is needed for deploying applications to BlackBerry devices. - + Remove + Usuń - Type: - Typ: + Edit... + Modyfikuj... - Host name or IP address: - Nazwa hosta lub adres IP: + Locator filters that do not update their cached data immediately, such as the custom directory filters, update it after this time interval. + Jest to czas, po którym zostaną odświeżone filtry lokalizatora. Dotyczy to filtów, które nie odświeżają swoich danych natychmiast, takich jak własne filtry katalogów. - Configuration name: - Nazwa konfiguracji: + Refresh interval: + Odświeżanie co: - Configuration - Konfiguracja + min + min + + + WinRt::Internal::WinRtRunConfigurationWidget - Select Debug Token - + Arguments: + Argumenty: - BAR file (*.bar) - Plik BAR (*.bar) + Uninstall package after stop + Zdezinstaluj pakiet po zatrzymaniu - Invalid Debug Token - + Launch App + Uruchom Aplikację + + + QmlJS::ModelManagerInterface - Debug token file %1 cannot be read. - + Parsing QML Files + Parsowanie plików QML - Import - Zaimportuj + Scanning QML Imports + Skanowanie importów QML - Qnx::Internal::BlackBerryDeviceConfigurationWizardQueryPage + QmlJS::PluginDumper - Form - Formularz + QML module does not contain information about components contained in plugins. + +Module path: %1 +See "Using QML Modules with Plugins" in the documentation. + Moduł QML nie zawiera informacji o komponentach we wtyczkach. + +Ścieżka do modułu: %1 +Zobacz "Using QML Modules with Plugins" w dokumentacji. + + + Automatic type dump of QML module failed. +Errors: +%1 + Automatyczne zrzucenie typów modułu QML niepoprawnie zakończone. +Błędy: +%1 - Device Information - Informacja o urządzeniu + Automatic type dump of QML module failed. +First 10 lines or errors: + +%1 +Check 'General Messages' output pane for details. + Automatyczny zrzut typów modułu QML niepoprawnie zakończony. +Pierwsze 10 linii błędów: + +%1 +Sprawdź szczegóły w panelu "Komunikaty ogólne". - Querying device information. Please wait... - Oczekiwanie na informacje o urządzeniu... + Warnings while parsing QML type information of %1: +%2 + Ostrzeżenia podczas parsowania informacji o typach QML w %1: +%2 - Cannot connect to the device. Check that the device is in development mode and has matching host name and password. - Nie można nawiązać połączenia z urządzeniem. Sprawdź, czy urządzenie jest w trybie deweloperskim i czy nazwa hosta i hasło są zgodne. + "%1" failed to start: %2 + Nie można uruchomić "%1": %2 - Generating SSH keys. Please wait... - Generowanie kluczy SSH... + "%1" crashed. + "%1" zakończył pracę błędem. - Failed generating SSH key needed for securing connection to a device. Error: - Błąd podczas generowania kluczy SSH niezbędnych do bezpiecznej komunikacji z urządzeniem: + "%1" timed out. + Przekroczony czas oczekiwania na "%1". - Failed saving SSH key needed for securing connection to a device. Error: - Błąd podczas zachowywania kluczy SSH niezbędnych do bezpiecznej komunikacji z urządzeniem: + I/O error running "%1". + Błąd wejścia / wyjścia przy uruchamianiu "%1". - Device information retrieved successfully. - Otrzymano informacje o urządzeniu. + "%1" returned exit code %2. + "%1" zwrócił kod wyjściowy %2. - - - Qnx::Internal::BlackBerryInstallWizardNdkPage - Form - Formularz + Arguments: %1 + Argumenty: %1 - Select Native SDK path: - Wybierz rdzenną ścieżkę SDK: + Failed to parse "%1". +Error: %2 + Nie można sparsować "%1". +Błąd: %2 - Native SDK - Rdzenny SDK + Errors while reading typeinfo files: + Błędy podczas czytania plików typeinfo: - Specify 10.2 NDK path manually - Podaj ręcznie ścieżkę do NDK 10.2 + Could not locate the helper application for dumping type information from C++ plugins. +Please build the qmldump application on the Qt version options page. + Nie można ustalić położenia aplikacji pomocniczej zrzucającej informacje o typach z wtyczek C++. +Zbuduj aplikację qmldump na stronie z opcjami wersji Qt. - Qnx::Internal::BlackBerryInstallWizardProcessPage - - Form - Formularz - + Utils::FancyLineEdit - Please wait... - Oczekiwanie... + Filter + Filtr - Uninstalling - Dezinstalowanie + Clear text + Wyczyść tekst + + + AndroidConfiguration - Installing - Instalowanie + Could not run: %1 + Nie można uruchomić: %1 - API level - Poziom API + No devices found in output of: %1 + Brak urządzeń na wyjściu %1 + + + AndroidConfig - simulator - symulator + Error Creating AVD + Błąd w trakcie tworzenia AVD - runtime - + Could not start process "%1 %2" + Nie można uruchomić procesu "%1 %2" + + + Android::Internal::AndroidPotentialKit - Uninstalling %1 version: %2 - Dezinstalowanie %1 wersja: %2 + Configure Android... + Konfiguruj Androida... + + + Android::Internal::JavaEditorFactory - Installing %1 version: %2 - Instalowanie %1 wersja: %2 + Java Editor + Edytor Java - Qnx::Internal::BlackBerryInstallWizardTargetPage + AbstractSettings - Form - Formularz + Cannot save styles. %1 does not exist. + Nie można zachować stylów. %1 nie istnieje. - Version - Wersja + Cannot open file "%1": %2. + Nie można otworzyć pliku "%1": %2. - Name - Nazwa + Cannot save file "%1": %2. + Nie można zachować pliku "%1": %2. - Querying available versions. Please wait... - Oczekiwanie na informacje o dostępnych wersjach... + No documentation file specified. + Nie podano pliku z dokumentacją. - Please select version: - Wybierz wersję: + Cannot open documentation file "%1". + Nie można otworzeć pliku z dokumentacją "%1". - - - Qnx::Internal::SrcProjectWizardPage - Choose the Location - Wybierz położenie + The file "%1" is not a valid documentation file. + Plik "%1" nie jest poprawnym plikiem z dokumentacją. - Project path: - Ścieżka do projektu: + Cannot read documentation file "%1": %2. + Nie można odczytać pliku z dokumentacją "%1": %2. + + + Beautifier - Momentics - Momentics + Beautifier + Upiększarka - UpdateInfo::Internal::SettingsWidget + Beautifier::Internal::BeautifierPlugin - Configure Filters - Konfiguracja filtrów + Cannot create temporary file "%1": %2. + Nie można utworzyć tymczasowego pliku "%1": %2. - Qt Creator Update Settings - Ustawienia uaktualniania Qt Creatora + Cannot call %1 or some other error occurred. + Nie można wywołać %1 lub wystąpił inny błąd. - Qt Creator automatically runs a scheduled update check on a daily basis. If Qt Creator is not in use on the scheduled time or maintenance is behind schedule, the automatic update check will be run next time Qt Creator starts. - Qt Creator automatycznie uruchamia zaplanowane sprawdzenie uaktualnień każdego dnia. Jeśli Qt Creator nie jest uruchomiony w zaplanowanym czasie, automatycznie sprawdzenie zostanie rozpoczęte przy najbliższym uruchomieniu Qt Creatora. + Cannot read file "%1": %2. + Nie można odczytać pliku "%1": %2. - Run update check daily at: - Uruchamiaj codzienne sprawdzanie uaktualnień o: + File was modified. + Zmodyfikowano plik. - - - FlickableSection - Flickable - Element przerzucalny + Time out reached while formatting file %1. + Przekroczono czas oczekiwania na sformatowanie pliku %1. - Content size - Rozmiar zawartości + Could not format file %1. + Nie można sformatować pliku %1. - Flick direction - Kierunek przerzucania + File %1 was closed. + Zamknięto plik %1. - Behavior - Zachowanie + Error in Beautifier: %1 + Błąd upiększarki: %1 - Bounds behavior - Zachowanie przy brzegach + Cannot get configuration file for %1. + Brak pliku z konfiguracją dla %1. - Interactive - Interaktywny + Format Current File + Menu entry + Sformatuj bieżący plik - Max. velocity - Prędkość maks. + Format Selected Text + Menu entry + Sformatuj zaznaczony tekst - Maximum flick velocity - Maksymalna prędkość przerzucania + %1 Command + File dialog title for path chooser when choosing binary + Komenda %1 + + + ClangFormatSettings - Deceleration - Opóźnienie + No description available. + Brak opisu. + + + ClangCodeModel::Internal::ClangCompletionAssistProcessor - Flick deceleration - Opóźnienie przerzucania + Location: %1 + Parent folder for proposed #include completion + Położenie: %1 - FontSection + ClangCodeModel::Internal::ClangIndexer - Font - Czcionka + Parsing C/C++/ObjC Files + Parsowanie plików C / C++ / ObjC + + + ClangCodeModel::Internal::ModelManagerSupport - Size - Rozmiar + Clang + Display name + Clang + + + ClangCodeModel::Internal::ClangProjectSettingsWidget - Font style - Styl czcionki + Clang Settings + Ustawienia Clang - Style - Styl + Header Files (*.h) + Pliki nagłówkowe (*.h) + + + All Files (*) + Wszystkie pliki (*) - StandardTextSection + ClangCodeModel::Diagnostic - Text - Tekst + ignored + - Wrap mode - Tryb zawijania + note + - Alignment - Wyrównanie + warning + - Format - Format + error + + + + fatal + - AdvancedSection + ClangCodeModel::Internal::PchManager - Advanced - Zaawansowane + Successfully generated PCH file "%1". + Wygenerowano poprawnie plik PCH "%1". - Origin - Początek + Failed to generate PCH file "%1". + Nie można wygenerować pliku PCH "%1". - Scale - Skala + Precompiling + Prekompilacja + + + Core::FindPlugin - Rotation - Rotacja + &Find/Replace + Z&najdź / zastąp - Enabled - Aktywny + Advanced Find + Zaawansowane przeszukiwanie - Accept mouse and keyboard events - Akceptuj zdarzenia myszy i klawiatury + Open Advanced Find... + Otwórz zaawansowane przeszukiwanie... - Smooth - Gładki + Advanced... + Zaawansowane... - Smooth sampling active - Włącz gładkie próbkowanie + Ctrl+Shift+F + Ctrl+Shift+F + + + Core::Internal::FindToolBar - Antialiasing - Antyaliasing + Shift+Enter + Shift+Enter - Anti-aliasing active - Włącz antyaliasing + Shift+Return + Shift+Return - - - ColumnSpecifics - Column - Kolumna + Find/Replace + Znajdź / zastąp - Spacing - Odstępy + Enter Find String + Podaj ciąg do znalezienia - - - FlipableSpecifics - Flipable - + Ctrl+E + Ctrl+E - - - GeometrySection - Geometry - Geometria + Find Next + Znajdź następne - Position - Pozycja + Find Previous + Znajdź poprzednie - Size - Rozmiar + Find Next (Selected) + Znajdź następny (zaznaczony) - - - ItemPane - Type - Typ + Ctrl+F3 + Ctrl+F3 - id - identyfikator + Find Previous (Selected) + Znajdź poprzedni (zaznaczony) - Visibility - Widoczność + Ctrl+Shift+F3 + Ctrl+Shift+F3 - Is Visible - Jest widoczny + Replace + Zastąp - Clip - Klip + Replace && Find + Zastąp i znajdź - Opacity - Nieprzezroczystość + Ctrl+= + Ctrl+= - Layout - Rozmieszczenie + Replace && Find Previous + Zastąp i znajdź poprzednie - Advanced - Zaawansowane + Replace All + Zastąp wszystkie - - - LayoutSection - Layout - Rozmieszczenie + Case Sensitive + Uwzględniaj wielkość liter - Anchors - Kotwice + Whole Words Only + Tylko całe słowa - Target - Cel + Use Regular Expressions + Używaj wyrażeń regularnych - Margin - Margines + Preserve Case when Replacing + Zachowuj wielkość liter przy zastępowaniu - - - QtObjectPane - Type - Typ + Search for... + Wyszukiwanie... - id - identyfikator + Replace with... + Zastępowanie... - TextInputSection + Core::IFindFilter - Text Input - Wejście tekstu + Case sensitive + Uwzględniaj wielkość liter - Input mask - Maska wejściowa + Whole words + Całe słowa - Echo mode - Tryb echo + Regular expressions + Wyrażenia regularne - Pass. char - Znak hasła + Preserve case + Zachowuj wielkość liter - Character displayed when users enter passwords. - Znak wyświetlany podczas wpisywania hasła przez użytkownika. + Flags: %1 + Flagi: %1 - Flags - Flagi + None + Brak - Read only - Tylko do odczytu + , + , + + + Core::Internal::SearchResultWidget - Cursor visible - Kursor widoczny + Search was canceled. + Anulowano przeszukiwanie. - Active focus on press - Uaktywnij fokus po naciśnięciu + Cancel + Anuluj - Auto scroll - Automatyczne przewijanie + Repeat the search with same parameters. + Powtórz przeszukiwanie z tymi samymi parametrami. - - - TextInputSpecifics - Text Color - Kolor tekstu + Search again + Przeszukaj ponownie - Selection Color - Kolor selekcji + Replace with: + Zastąp: - - - TextSpecifics - Text Color - Kolor tekstu + Replace all occurrences. + Zastąp wszystkie wystąpienia. - Style Color - Kolor stylu + Replace + Zastąp - - - WindowSpecifics - Window - Okno + Preserve case + Zachowuj wielkość liter - Title - Tytuł + This change cannot be undone. + Ta zmiana nie może być cofnięta. - - Size - Rozmiar + + The search resulted in more than %n items, do you still want to continue? + + Odnaleziono wiecej niż %n element, kontynuować? + Odnaleziono wiecej niż %n elementy, kontynuować? + Odnaleziono wiecej niż %n elementów, kontynuować? + - Color - Kolor + Continue + Kontynuuj - Visible - Widoczny + No matches found. + Brak pasujących wyników. - - Opacity - Nieprzezroczystość + + %n matches found. + + Znaleziono %n pasujący wynik. + Znaleziono %n pasujące wyniki. + Znaleziono %n pasujących wyników. + - SideBar - - New to Qt? - Nowicjusz? - - - Learn how to develop your own applications and explore Qt Creator. - Poznaj Qt Creatora i dowiedz się, jak przy jego pomocy tworzyć aplikacje. - + Core::SearchResultWindow - Get Started Now - Rozpocznij teraz + History: + Historia: - Qt Account - Konto Qt + New Search + Nowe wyszukiwanie - Qt Cloud Services - Chmura z usługami Qt + Expand All + Rozwiń wszystko - Online Community - Społeczność online + %1 %2 + %1 %2 - Blogs - Blogi + Collapse All + Zwiń wszystko - User Guide - Przewodnik użytkownika + Search Results + Wyniki wyszukiwań - Analyzer::AnalyzerRunConfigWidget + Core::Internal::DirectoryFilter - Use Customized Settings - Użyj własnych ustawień + Generic Directory Filter + Ogólny filtr katalogów - Use Global Settings - Użyj globalnych ustawień + Select Directory + Wybierz katalog - - - Android::Internal::AndroidDeployQtStepFactory - Deploy to Android device or emulator - Zainstaluj na urządzeniu lub emulatorze Android + %1 filter update: 0 files + Uaktualnienie filtra %1: 0 plików - - - Android::Internal::AndroidDeployQtStep - - Deploy to Android device - AndroidDeployQtStep default display name - Zainstaluj na urządzeniu Android + + %1 filter update: %n files + + Uaktualnienie filtra %1: %n plik + Uaktualnienie filtra %1: %n pliki + Uaktualnienie filtra %1: %n plików + - Found old folder "android" in source directory. Qt 5.2 does not use that folder by default. - Odnaleziono folder "android" w katalogu źródłowym. Qt 5.2 domyślnie nie używa tego katalogu. + %1 filter update: canceled + Uaktualnienie filtra %1: anulowano + + + Core::Internal::ExecuteFilter - No Android arch set by the .pro file. - Brak ustawionego arch dla Androida w pliku .pro. + Execute Custom Commands + Wykonanie własnej komendy - Cannot find the android build step. - Nie można odnaleźć kroku budowania androida. + Previous command is still running ("%1"). +Do you want to kill it? + Poprzednia komenda jest wciąż uruchomiona ("%1"). +Czy przerwać ją? - Cannot find the androiddeployqt tool. - Nie można odnaleźć narzędzia androiddeployqt. + Command "%1" finished. + Komenda "%1" zakończona. - Cannot find the androiddeploy Json file. - Nie można odnaleźć pliku androiddeploy Json. + Command "%1" failed. + Komenda "%1" zakończona błędem. - Cannot find the package name. - Nie można odnaleźć nazwy pakietu. + Starting command "%1". + Uruchamianie komendy "%1". - Uninstall previous package %1. - Odinstaluj poprzedni pakiet %1. + Kill Previous Process? + Czy przerwać poprzedni proces? - Package deploy: Running command "%1 %2". - Instalacja pakietu: uruchomiono komendę "%1 %2". + Could not start process: %1. + Nie można uruchomić procesu %1. - Packaging error: Could not start command "%1 %2". Reason: %3 - Błąd pakowania: nie można uruchomić komendy "%1 %2". Przyczyna: %3 + Could not find executable for "%1". + Nie można odnaleźć pliku wykonywalnego dla "%1". + + + Core::Internal::FileSystemFilter - Packaging Error: Command "%1 %2" failed. - Błąd pakowania: Komenda "%1 %2" niepoprawnie zakończona. + Files in File System + Pliki w systemie plików - Install failed - Instalacja niepoprawnie zakończona + Create and Open "%1" + Utwórz i otwórz "%1" + + + Core::ILocatorFilter - Another application with the same package id but signed with different ceritificate already exists. -Do you want to uninstall the existing package next time? - Istnieje już inna aplikacja o tym samym identyfikatorze pakietu, lecz z innym certyfikatem. -Czy odinstalować istniejący pakiet następnym razem? + Filter Configuration + Konfiguracja filtra - Warning: Signing a debug package. - Ostrzeżenie: podpisywanie pakietu debugowego. + Type the prefix followed by a space and search term to restrict search to the filter. + - Internal Error: Could not find .pro file. - Błąd wewnętrzny: brak pliku .pro. + Include by default + - Pulling files necessary for debugging. + Include the filter when not using a prefix for searches. - Package deploy: Running command '%1 %2'. - Instalacja pakietu: Uruchamianie komendy "%1 %2". + Prefix: + Przedrostek: + + + Core::Internal::Locator - Packaging error: Could not start command '%1 %2'. Reason: %3 - Błąd pakowania: Nie można uruchomić komendy "%1 %2". Przyczyna: %3 + Ctrl+K + Ctrl+K - Packaging Error: Command '%1 %2' failed. - Błąd pakowania: Komenda "%1 %2" zakończona błędem. + Type to locate + Wpisz aby znaleźć - Reason: %1 - Przyczyna: %1 + Type to locate (%1) + Wpisz aby znaleźć (%1) - Exit code: %1 - Kod wyjściowy: %1 + <html><body style="color:#909090; font-size:14px"><div align='center'><div style="font-size:20px">Open a document</div><table><tr><td><hr/><div style="margin-top: 5px">&bull; File > Open File or Project (%1)</div><div style="margin-top: 5px">&bull; File > Recent Files</div><div style="margin-top: 5px">&bull; Tools > Locate (%2) and</div><div style="margin-left: 1em">- type to open file from any open project</div>%4%5<div style="margin-left: 1em">- type <code>%3&lt;space&gt;&lt;filename&gt;</code> to open file from file system</div><div style="margin-left: 1em">- select one of the other filters for jumping to a location</div><div style="margin-top: 5px">&bull; Drag and drop files here</div></td></tr></table></div></body></html> + - Error - Błąd + <div style="margin-left: 1em">- type <code>%1&lt;space&gt;&lt;pattern&gt;</code> to jump to a class definition</div> + - Invalid password. - Niepoprawne hasło. + <div style="margin-left: 1em">- type <code>%1&lt;space&gt;&lt;pattern&gt;</code> to jump to a function definition</div> + - Certificate - Certyfikat + Updating Locator Caches + + + + Core::Internal::LocatorFiltersFilter - Certificate password (%1): - Hasło dla certyfikatu (%1): + Available filters + Dostępne filtry - Android::Internal::AndroidDeployQtWidget + Core::Internal::LocatorWidget - <b>Deploy configurations</b> - <b>Konfiguracje instalacji</b> + Refresh + Odśwież - Qt Android Smart Installer - Qt Android Smart Installer + Locate... + Znajdź... - Android package (*.apk) - Pakiet androida (*.apk) + Options + Opcje - Select additional libraries - Wybierz dodatkowe biblioteki + <type here> + <wpisz tutaj> + + + Core::Internal::OpenDocumentsFilter - Libraries (*.so) - Biblioteki (*.so) + Open Documents + Otwarte dokumenty - Android::Internal::AndroidErrorMessage + Debugger::Internal::UnstartedAppWatcherDialog - Android: SDK installation error 0x%1 - Android: błąd instalacji SDK 0x%1 + Attach to Process Not Yet Started + Dołącz do nieuruchomionego procesu - Android: NDK installation error 0x%1 - Android: błąd instalacji NDK 0x%1 + Reopen dialog when application finishes + Ponownie otwórz dialog po zakończeniu aplikacji - Android: Java installation error 0x%1 - Android: błąd instalacji Java 0x%1 + Reopens this dialog when application finishes. + Ponownie otwórz ten dialog po zakończeniu aplikacji. - Android: ant installation error 0x%1 - Android: błąd instalacji ant 0x%1 + Continue on attach + Kontynuuj po dołączeniu - Android: adb installation error 0x%1 - Android: błąd instalacji adb 0x%1 + Debugger does not stop the application after attach. + Debugger nie zatrzyma aplikacji po dołączeniu. - Android: Device connection error 0x%1 - Android: błąd łączności z urządzeniem 0x%1 + Start Watching + Rozpocznij obserwację - Android: Device permission error 0x%1 - Android: błąd uprawnień urządzenia 0x%1 + Close + Zamknij - Android: Device authorization error 0x%1 - Android: błąd autoryzacji urządzenia 0x%1 + Kit: + Zestaw narzędzi: - Android: Device API level not supported: error 0x%1 - Android: Poziom API urządzenia nieobsługiwany 0x%1 + Executable: + Plik wykonywalny: - Android: Unknown error 0x%1 - Android: nieznany błąd 0x%1 + Select valid executable. + Wybierz poprawny plik wykonywalny. - - - Android::Internal::AndroidPotentialKitWidget - Qt Creator needs additional settings to enable Android support. You can configure those settings in the Options dialog. - Qt Creator wymaga dodatkowych ustawień do obsługi Androida. Można je skonfigurować w dialogu z opcjami. + Not watching. + Brak obserwacji. - - - Android::Internal::NoApplicationProFilePage - No application .pro file found in this project. - Brak pliku .pro aplikacji w tym projekcie. + Waiting for process to start... + Oczekiwanie na uruchomienie procesu... - No Application .pro File - Brak pliku .pro aplikacji + Attach + Dołącz - Android::Internal::ChooseProFilePage - - Select the .pro file for which you want to create an AndroidManifest.xml file. - Wybierz plik .pro dla którego utworzyć plik AndroidManifest.xml. - - - .pro file: - Plik .pro: + DiffEditor::DiffEditorController + + and %n more + Displayed after the untranslated message "Branches: branch1, branch2 'and %n more'" + + i jeszcze %n gałąź + i jeszcze %n gałęzie + i jeszcze %n gałęzi + - Select a .pro File - Wybierz plik .pro + <None> + <Brak> - Android::Internal::ChooseDirectoryPage - - Android package source directory: - Katalog źródłowy pakietu Android: - + ProjectExplorer::KitConfigWidget - The Android manifest file will be created in the ANDROID_PACKAGE_SOURCE_DIR set in the .pro file. - Plik manifest Androida zostanie utworzony w katalogu, na który wskazuje zmienna ANDROID_PACKAGE_SOURCE_DIR ustawiona w pliku .pro. + Manage... + Zarządzaj... - Android::Internal::CreateAndroidManifestWizard + ProjectExplorer::SelectableFilesDialogEditFiles - Create Android Manifest Wizard - Kreator pliku manifest Androida + Edit Files + Zmodyfikuj pliki - Overwrite AndroidManifest.xml - Nadpisanie AndroidManifest.xml + Hide files matching: + Ukryj pliki pasujące do: - Overwrite existing AndroidManifest.xml? - Nadpisać istniejący plik AndroidManifest.xml? + Show files matching: + Pokaż pliki pasujące do: - File Removal Error - Błąd usuwania pliku + Apply Filter + Zastosuj filtr - Could not remove file %1. - Nie można usunąć pliku %1. + Generating file list... + +%1 + Generowanie listy plików... + +%1 - - File Creation Error - Błąd tworzenia pliku + + Not showing %n files that are outside of the base directory. +These files are preserved. + + Ukryto %n plik który jest na zewnątrz katalogu bazowego. +Ten plik jest zabezpieczony. + Ukryto %n pliki które są na zewnątrz katalogu bazowego. +Te pliki są zabezpieczone. + Ukryto %n plików które są na zewnątrz katalogu bazowego. +Te pliki są zabezpieczone. + + + + ProjectExplorer::SelectableFilesDialogAddDirectory - Could not create file %1. - Nie można utworzyć pliku %1. + Add Existing Directory + Dodaj istniejący katalog - Project File not Updated - Nieaktualny plik projektu + Source directory: + Katalog źródłowy: - Could not update the .pro file %1. - Nie można uaktualnić pliku .pro %1. + Start Parsing + Rozpocznij parsowanie - BareMetal::Internal::BareMetalDevice + QmlDesigner - Bare Metal - Bare Metal + Error + Błąd - BareMetal::BareMetalDeviceConfigurationFactory + QmlProfiler::QmlProfilerBaseModel - Bare Metal Device - Urządzenie Bare Metal + µs + µs - - - BareMetal::BareMetalDeviceConfigurationWizard - New Bare Metal Device Configuration Setup - Nowa konfiguracja urządzenia Bare Metal + ms + ms + + + s + s - BareMetal::BareMetalDeviceConfigurationWizardSetupPage + QmlProfiler::QmlProfilerDataModel - Set up GDB Server or Hardware Debugger - Ustaw serwer GDB lub debugger sprzętowy + <bytecode> + <kod bajtowy> - Bare Metal Device - Urządzenie Bare Metal + GUI Thread + Wątek GUI - - - BareMetal::Internal::BareMetalGdbCommandsDeployStepWidget - GDB commands: - Komendy GDB: + anonymous function + anonimowa funkcja - BareMetal::BareMetalGdbCommandsDeployStep + Qnx::Internal::QnxAttachDebugDialog - GDB commands - Komendy GDB: + Project source directory: + Katalog ze źródłami projektu: + + + Local executable: + Lokalny plik wykonywalny: - BareMetal::BareMetalRunConfiguration + Qnx::Internal::QnxAttachDebugSupport - %1 (via GDB server or hardware debugger) - %1 (poprzez serwer GDB lub debugger sprzętowy) + No free ports for debugging. + Brak wolnych portów do debugowania. - Run on GDB server or hardware debugger - Bare Metal run configuration default run name - Uruchom na serwerze GDB lub debuggerze sprzętowym + Remote: "%1:%2" - Process %3 + - BareMetal::Internal::BareMetalRunConfigurationFactory + FontSettings_C_OCCURRENCES_UNUSED - %1 (on GDB server or hardware debugger) - %1 (na serwerze GDB lub debuggerze sprzętowym) + Unused variable + Nieużywana zmienna - BareMetal::BareMetalRunConfigurationWidget - - Executable: - Plik wykonywalny: - + VcsBase::Internal::VcsPlugin - Arguments: - Argumenty: + Name of the version control system in use by the current project. + Nazwa systemu kontroli wersji używana w bieżącym projekcie. - <default> - <domyślny> + The current version control topic (branch or tag) identification of the current project. + - Working directory: - Katalog roboczy: + The top level path to the repository the current project is in. + Ścieżka do repozytorium do którego przynależy bieżący projekt. - BareMetal::Internal::BareMetalRunControlFactory + WinRt::Internal::WinRtDeployConfiguration - Cannot debug: Kit has no device. - Nie można debugować: brak urządzenia w zestawie narzędzi. + Run windeployqt + Uruchom windeployqt - - - Core::DocumentModel - <no document> - <brak dokumentu> + Deploy to Windows Phone + Zainstaluj na Windows Phone - No document is selected. - Brak zaznaczonego dokumenty. + Deploy to Windows Phone Emulator + Zainstaluj na emulatorze Windows Phone - CppEditor::Internal::CppIncludeHierarchyWidget + WinRt::Internal::WinRtDeployStepFactory - No include hierarchy available - Brak dostępnej hierarchii dołączeń + Run windeployqt + Uruchom windeployqt - CppEditor::Internal::CppIncludeHierarchyFactory + WinRt::Internal::WinRtDevice - Include Hierarchy - Hierarchia dołączeń + Windows Runtime (Local) + + + + Windows Phone + Windows Phone + + + Windows Phone Emulator + Emulator Windows Phone - CppEditor::Internal::CppIncludeHierarchyModel + WinRt::Internal::WinRtDeviceFactory - Includes - Dołączenia + Running Windows Runtime device detection. + - Included by - Dołączone przez + No winrtrunner.exe found. + Brak winrtrunner.exe. - (none) - (brak) + Error while executing winrtrunner: %1 + Błąd uruchamiania winrtrunner: %1 - (cyclic) - (cykl) + winrtrunner returned with exit code %1. + winrtrunner zakończył pracę kodem wyjściowym %1. - - - VirtualFunctionsAssistProcessor - ...searching overrides - ...wyszukiwanie implementacji + Windows Runtime local UI + + + + Found %n Windows Runtime devices. + + + + + + + + %n of them are new. + + %n z nich jest nowe. + %n z nich są nowe. + %n z nich jest nowych. + - ModelManagerSupportInternal::displayName + WinRt::Internal::WinRtPackageDeploymentStep - Qt Creator Built-in - Wbudowany w Qt Creatora + Run windeployqt + Uruchom windeployqt - - - Debugger::Internal::DebuggerOptionsPage - Not recognized - Nierozpoznany + No executable to deploy found in %1. + Brak pliku wykonawczego w %1 do zainstalowania. - Debuggers - Debuggery + Cannot parse manifest file %1. + Nie można sparsować pliku manifest %1. - Add - Dodaj + File %1 is outside of the executable's directory. These files cannot be installed. + "These files cannot be installed." - this should be singular, like the first sentence: "This file". + Plik %1 leży poza katalogiem pliku wykonywalnego. Plik ten nie zostanie zainstalowany. - Clone - Sklonuj + Cannot open mapping file %1 for writing. + Nie można otworzyć pliku z mapowaniem %1 do zapisu. + + + WinRt::Internal::WinRtQtVersion - Remove - Usuń + Windows Phone + Windows Phone - Clone of %1 - Klon %1 + Windows Runtime + Windows Runtime + + + WinRt::Internal::WinRtRunConfiguration - New Debugger - Nowy debugger + Run App Package + Uruchom pakiet App - Debugger::DebuggerItemManager + WinRt::Internal::WinRtRunConfigurationFactory - Auto-detected CDB at %1 - Automatycznie wykryty CDB w %1 + Run App Package + Uruchom pakiet App + + + WinRt::Internal::WinRtRunControlFactory - System %1 at %2 - %1: Debugger engine type (GDB, LLDB, CDB...), %2: Path - System %1 w %2 + Unsupported run mode %1. + Nieobsługiwany tryb uruchamiania %1. - Extracted from Kit %1 - Znaleziony w zestawie narzędzi %1 + WinRT Run Control Factory + - Debugger::Internal::DebuggerItemModel + WinRt::Internal::WinRtPackageDeploymentStepWidget - Auto-detected - Automatycznie wykryte + Arguments: + Argumenty: - Manual - Ustawione ręcznie + Restore Default Arguments + Przywróć domyślne argumenty + + + Utils::ProxyCredentialsDialog - Name - Nazwa + Proxy Credentials + Pośrednie listy uwierzytelniające - Path - Ścieżka + The proxy %1 requires a username and password. + Pośrednik %1 wymaga nazwy użytkownika i hasła. - Type - Typ + Username: + Nazwa użytkownika: - - - Debugger::Internal::DebuggerItemConfigWidget - Unknown - + Username + Nazwa użytkownika - Name: - Nazwa: + Password: + Hasło: - Path: - Ścieżka: + Password + Hasło + + + AndroidBuildApkWidget - ABIs: - ABIs: + Form + Formularz - Version: - Wersja: + Sign package + Podpisz pakiet - 64-bit version - w wersji 64 bitowej + Keystore: + - 32-bit version - w wersji 32 bitowej + Create... + Utwórz... - <html><body><p>Specify the path to the <a href="%1">Windows Console Debugger executable</a> (%2) here.</p></body></html> - Label text for path configuration. %2 is "x-bit version". - <html><body><p>Podaj ścieżkę do <a href="%1">pliku wykonywalnego Windows Console Debugger</a> (%2).</p></body></html> + Signing a debug package + extra space on the end + Podpisywanie pakietu debugowego - - - Debugger::Internal::GdbPlainEngine - Starting executable failed: - Nie można uruchomić programu: + Certificate alias: + Alias certyfikatu: - Cannot set up communication with child process: %1 - Nie można ustanowić połączenia z podprocesem: %1 + Application + Aplikacja - - - Git::Internal::GitDiffSwitcher - Switch to Text Diff Editor - Przełącz do tekstowego edytora różnic + Android build SDK: + - Switch to Side By Side Diff Editor - Przełącz do edytora różnic wyświetlającego zawartość sąsiadująco + Advanced Actions + Zaawansowane akcje - - - Ios::Internal::IosBuildStepConfigWidget - iOS build - iOS BuildStep display name. - Wersja iOS + Verbose output + Gadatliwe komunikaty - - - Ios::Internal::IosConfigurations - %1 %2 - %1 %2 + Open package location after build + Po zakończeniu budowania otwórz w położeniu pakietu - - - Ios - iOS - iOS + Use Gradle + Używaj Gradle - - - Ios::Internal::IosDebugSupport - Could not find device specific debug symbols at %1. Debugging initialization will be slow until you open the Organizer window of Xcode with the device connected to have the symbols generated. - + Qt Deployment + Instalacja Qt - Debugging with Xcode 5.0.x can be unreliable without a dSYM. To create one, add a dsymutil deploystep. - + Uses the external Ministro application to download and maintain Qt libraries. + Używa zewnętrznej aplikacji Ministro do pobierania bibliotek Qt i zarządzania nimi. - The dSYM %1 seems to be outdated, it might confuse the debugger. - dSYM %1 może być nieaktualny i może spowodować nieprawidłową pracę debuggera. + Use Ministro service to install Qt + Użyj usługi Ministro do zainstalowania Qt - Could not get debug server file descriptor. - + Creates a standalone APK. + Tworzy samodzielny APK. - Got an invalid process id. - Otrzymano niepoprawny identyfikator procesu. + Bundle Qt libraries in APK + Dołącz biblioteki Qt do APK - Run ended with error. - Praca zakończona błędem. + Pushes local Qt libraries to device. You must have Qt libraries compiled for that platform. +The APK will not be usable on any other device. + Przesyła lokalne biblioteki Qt do urządzenia. +Należy przesłać biblioteki skompilowane dla tej platformy. +APK nie będzie przydatne na innych urządzeniach. - Run ended. - Praca zakończona. + Deploy local Qt libraries to temporary directory + Zainstaluj lokalne biblioteki Qt do tymczasowego katalogu - Run failed unexpectedly. - Praca nieoczekiwanie zakończona. + Signing an APK that uses "Deploy local Qt libraries" is not allowed. +Deploying local Qt libraries is incompatible with Android 5. + Podpisywanie APK, które używa "Zainstaluj lokalne biblioteki Qt" jest niedozwolone. +Instalowanie lokalnych bibliotek Qt nie jest kompatybilne z Androidem 5. - Ios::Internal::IosDeployConfiguration + Core::Internal::ThemeEditor::ThemeEditorWidget - Deploy to iOS - Zainstaluj na iOS + Theme Editor + Edytor motywów - - - Ios::Internal::IosDeployConfigurationFactory - Deploy on iOS - Zainstaluj na iOS + Filter: + Filtr: - Ios::Internal::IosDeployStep + Core::Internal::ThemeSettings - Deploy to %1 - Zainstaluj na %1 + Rename... + Zmień nazwę... - Error: no device available, deploy failed. - Błąd: urządzenie nie jest dostępne, instalacja nieudana. + Copy... + Kopiuj... - Deployment failed. No iOS device found. - Nieudana instalacja. Brak urządzenia iOS. + Delete + Usuń - Deployment failed. The settings in the Organizer window of Xcode might be incorrect. - Nieudana instalacja. Ustawienia w oknie "Organizer" w Xcode mogą być niepoprawne. + Theme + Motyw + + + Ios::Internal::IosPresetBuildStep - Deployment failed. - Nieudana instalacja. + Reset to Default + Przywróć domyślny - The Info.plist might be incorrect. - Info.plist może być niepoprawne. + Command: + Komenda: - The provisioning profile "%1" (%2) used to sign the application does not cover the device %3 (%4). Deployment to it will fail. - + Arguments: + Argumenty: - Ios::Internal::IosDeployStepFactory + ProjectExplorer::DeploymentDataView - Deploy to iOS device or emulator - Zainstaluj na urządzeniu iOS lub emulatorze + Form + Formularz - - - Ios::Internal::IosDeployStepWidget - <b>Deploy to %1</b> - <b>Zainstaluj na %1</b> + Files to deploy: + Pliki do zainstalowania: - Ios::Internal::IosDevice + QmakeAndroidSupport::Internal::QmakeAndroidBuildApkWidget - iOS - iOS + Form + Formularz - iOS Device - Urządzenie iOS + Android + Android - - - Ios::Internal::IosDeviceManager - Device name - Nazwa urządzenia + Create Templates + Utwórz szablony - Developer status - Whether the device is in developer mode. - Stan trybu deweloperskiego + Additional Libraries + Dodatkowe biblioteki - Connected - Połączony + List of extra libraries to include in Android package and load on startup. + Lista dodatkowych bibliotek dołączanych do pakietu Android i ładowanych przy uruchamianiu. - yes - tak + Select library to include in package. + Wybierz bibliotekę, którą dołączyć do pakietu. - no - nie + Add... + Dodaj... - unknown - nieznany + Remove currently selected library from list. + Usuń zaznaczoną bibliotekę z listy. - OS version - Wersja OS + Remove + Usuń - An iOS device in user mode has been detected. - Wykryto urządzenie iOS w trybie użytkownika. + Select additional libraries + Wybierz dodatkowe biblioteki - Do you want to see how to set it up for development? - Czy chcesz zobaczyć jak przełączyć je do trybu deweloperskiego? - - - - Ios::Internal::IosQtVersion - - Failed to detect the ABIs used by the Qt version. - Nie można wykryć ABI użytych przez wersję Qt. + Libraries (*.so) + Biblioteki (*.so) - iOS - Qt Version is meant for Ios - iOS + <b>Build Android APK</b> + - Ios::Internal::IosRunConfiguration - - Run on %1 - Uruchom na %1 - + SliderSpecifics - The .pro file '%1' is currently being parsed. - Trwa parsowanie pliku projektu "%1". + Value + Wartość - Run %1 on %2 - Uruchom %1 na %2 + Current value of the Slider. The default value is 0.0. + Bieżąca wartość suwaka. Domyślną wartością jest 0.0. - The .pro file "%1" is currently being parsed. - Trwa parsowanie pliku .pro "%1". + Maximum value + Maksymalna wartość - Kit has incorrect device type for running on iOS devices. - Niewłaściwy typ urządzenia, ustawiony w zestawie narzędzi, do uruchamiania na urządzeniach iOS. + Maximum value of the slider. The default value is 1.0. + Maksymalna wartość suwaka. Domyślną wartością jest 1.0. - No device chosen. Select %1. - Brak wybranego urządzenia. Wybierz %1. + Minimum value + Minimalna wartość - No device chosen. Enable developer mode on a device. - Brak wybranego urządzenia. Włącz tryb deweloperski na urządzeniu. + Minimum value of the slider. The default value is 0.0. + Minimalna wartość suwaka. Domyślną wartością jest 0.0. - No device available. - Brak dostępnych urządzeń. + Orientation + Orientacja - To use this device you need to enable developer mode on it. - Włącz tryb deweloperski na tym urządzeniu. + Layout orientation of the slider. + Orientacja pozioma / pionowa suwaka. - %1 is not connected. Select %2? - %1 nie jest podłączony. Wybrać %2? + Step size + Rozmiar kroku - %1 is not connected. Enable developer mode on a device? - %1 nie jest podłączony. Włączyć deweloperski na urządzeniu? + Indicates the slider step size. + Określa rozmiar kroku suwaka. - %1 is not connected. - %1 nie jest podłączony. + Active focus on press + Uaktywnij fokus po naciśnięciu - - - Ios::Internal::IosRunConfigurationWidget - iOS run settings - Ustawienia uruchamiania iOS + Indicates whether the slider should receive active focus when pressed. + Określa, czy suwak powinien otrzymać fokus po naciśnięciu. - - - Ios::Internal::IosRunControl - Starting remote process. - Uruchamianie zdalnego procesu. + Tick marks enabled + Skala włączona - Run ended with error. - Praca zakończona błędem. + Indicates whether the slider should display tick marks at step intervals. + Określa, czy suwak powinien wyświetlać skalę z naniesionymi znacznikami kroków. - Run ended. - Praca zakończona. + Update value while dragging + Odświeżaj wartość podczaś przeciągania - Run ended unexpectedly. - Praca nieoczekiwanie zakończona. + Determines whether the current value should be updated while the user is moving the slider handle, or only when the button has been released. + Określa, czy bieżąca wartość powinna być odświeżana w trakcie przesuwania uchwytu suwaka, czy jedynie po zwolnieniu uchwytu. - Ios::Internal::IosRunner + SplitViewSpecifics - Could not find %1. - Nie można odnaleźć %1. + Split View + - Run failed. The settings in the Organizer window of Xcode might be incorrect. - Nieudane uruchomienie. Ustawienia w oknie "Organizer" w Xcode mogą być niepoprawne. + Orientation + Orientacja - The device is locked, please unlock. - Urządzenie jest zablokowane, odblokuj je. + Orientation of the split view. + - Ios::Internal::IosSettingsPage + TabViewSpecifics - iOS Configurations - Konfiguracje iOS + Tab View + Widok z zakładkami - - - Ios::Internal::IosSimulator - iOS Simulator - Symulator iOS + Current index + Bieżący indeks - - - Ios::Internal::IosSimulatorFactory - iOS Simulator - iOS Simulator + Frame visible + Ramka widoczna - - - Ios::IosToolHandler - iOS tool Error %1 - Błąd narzędzia iOS %1 + Determines the visibility of the tab frame around contents. + Określa, czy widoczna jest ramka zakładki wokół zawartości. - - - Macros::Internal::MacroManager - Playing Macro - Odtwarzanie makra + Tabs visible + Zakładki widoczne - An error occurred while replaying the macro, execution stopped. - Wystąpił błąd podczas ponownego odtwarzania makra, zatrzymano wykonywanie. + Determines the visibility of the tab bar. + Określa, czy widoczny jest pasek z zakładkami. - Macro mode. Type "%1" to stop recording and "%2" to play the macro. - Tryb makro. Wpisz "%1" aby zatrzymać nagrywanie albo "%2" aby je odtworzyć. + Tab position + Pozycja zakładek - Stop Recording Macro - Zatrzymaj nagrywanie makra + Determines the position of the tabs. + Określa pozycję zakładek. - CustomToolChain - - GCC - GCC - - - Clang - Clang - + PuppetBuildProgressDialog - ICC - ICC + Build Progress + Postęp budowania - MSVC - MSVC + Build Adapter for the current Qt. Happens only once for every Qt installation. + Budowanie adaptera dla bieżącego Qt. Wymane tylko raz dla każdej instalacji Qt. - Custom - Własny + Use Fallback QML Emulation Layer + - ProjectExplorer::DesktopProcessSignalOperation + PuppetDialog - Cannot kill process with pid %1: %2 - Nie można zakończyć procesu z pid %1: %2 + Dialog + Dialog + + + ButtonsBar - Cannot interrupt process with pid %1: %2 - Nie można przerwać procesu z pid %1: %2 + Jump to previous event. + Skocz do poprzedniego zdarzenia. - Cannot open process. - Nie można otworzyć procesu. + Jump to next event. + Skocz do następnego zdarzenia. - Invalid process id. - Niepoprawny identyfikator procesu. + Show zoom slider. + Pokaż suwak powiększania. - Cannot open process: %1 - Nie można otworzyć procesu: %1 + Filter Categories + Przefiltruj kategorie - DebugBreakProcess failed: - Błąd DebugBreakProcess: + Select range. + Wybierz zakres. - %1 does not exist. If you built Qt Creator yourself, check out http://qt.gitorious.org/qt-creator/binary-artifacts. - %1 nie istnieje. Jeśli zbudowałeś Qt Creatora samodzielnie, sprawdź http://qt.gitorious.org/qt-creator/binary-artifacts. + View event information on mouseover. + Pokazuj informacje o zdarzeniach po najechaniu myszą. + + + CategoryLabel - Cannot start %1. Check src\tools\win64interrupt\win64interrupt.c for more information. - Nie można uruchomić %1. Więcej informacji sprawdź w src\tools\win64interrupt\win64interrupt. + Collapse category + Zwiń kategorię - could not break the process. - nie można przerwać procesu. + Expand category + Rozwiń kategorię - ProjectExplorer::SshDeviceProcess + Qnx::Internal::QnxDeployQtLibrariesDialog - Failed to kill remote process: %1 - Nie można zakończyć zdalnego procesu: %1 + Deploy Qt to BlackBerry Device + Instalacja Qt na urządzeniu BlackBerry - Timeout waiting for remote process to finish. - Przekroczono czas oczekiwania na zakończenie zdalnego procesu. + Qt library to deploy: + Biblioteka Qt do zainstalowania: - Terminated by request. - Zakończono na żądanie. + Deploy + Zainstaluj - - - ProjectExplorer::Internal::ImportWidget - Import Build From... - Zaimportuj wersję z... + Remote directory: + Zdalny katalog: - Import - Zaimportuj + Close + Zamknij - - - ProjectExplorer::OsParser - The process can not access the file because it is being used by another process. -Please close all running instances of your application before starting a build. - Proces nie ma dostępu do pliku, ponieważ plik jest używany przez inny proces. -Proszę zamknąć wszystkie instancje tej aplikacji przed uruchomieniem budowania. + Closing the dialog will stop the deployment. Are you sure you want to do this? + Zamknięcie dialogu spowoduje zatrzymanie instalacji. Czy zamknąć dialog? - - - ProjectExplorer::ProjectImporter - %1 - temporary - %1 - tymczasowy + Please input a remote directory to deploy to. + Wprowadź zdalny katalog w którym ma zostać dokonana instalacja. - - - QmakeProjectManager::Internal::Qt4Target - Desktop - Qt4 Desktop target display name - Desktop + Connection failed: %1 + Błąd połączenia: %1 - Maemo Emulator - Qt4 Maemo Emulator target display name - Emulator Maemo + The remote directory "%1" already exists. Deploying to that directory will remove any files already present. + +Are you sure you want to continue? + Zdalny katalog "%1" już istnieje. Instalacja do tego katalogu spowoduje usunięcie całej jego zawartości. + +Czy kontynuować instalację? - Maemo Device - Qt4 Maemo Device target display name - Urządzenie Maemo + Checking existence of "%1" + Sprawdzanie obecności "%1" - - - ProjectExplorer::TargetSetupPage - <span style=" font-weight:600;">No valid kits found.</span> - <span style=" font-weight:600;">Brak poprawnych zestawów narzędzi.</span> + Removing "%1" + Usuwanie "%1" + + + Qnx::Internal::QnxSettingsWidget - Please add a kit in the <a href="buildandrun">options</a> or via the maintenance tool of the SDK. - Dodaj zestaw w <a href="buildandrun">opcjach</a> lub poprzez narzędzie kontrolne SDK. + Form + Formularz - Select all kits - Zaznacz wszystkie zestawy narzędzi + Generate kits + Wygeneruj zestawy narzędzi - Select Kits for Your Project - Wybierz zestawy narzędzi dla projektu + Configuration Information: + Informacje o konfiguracji: - Kit Selection - Wybór zestawu narzędzi + Name: + Nazwa: - Kits - Zestawy narzędzi + Version: + Wersja: - Qt Creator can use the following kits for project <b>%1</b>: - %1: Project name - Qt Creator może ustawić następujące zestawy narzędzi dla projektu <b>%1</b>: + Host: + Host: - - - ProjectExplorer::Internal::TargetSetupWidget - <b>Error:</b> - Severity is Task::Error - <b>Błąd:</b> + Target: + Cel: - <b>Warning:</b> - Severity is Task::Warning - <b>Ostrzeżenie:</b> + Remove + Usuń - - - ProjectExplorer::Internal::UnconfiguredProjectPanel - Configure Project - Skonfiguruj projekt + Select QNX Environment File + Wybierz plik ze środowiskiem QNX - - - ProjectExplorer::Internal::TargetSetupPageWrapper - Configure Project - Skonfiguruj projekt + Warning + Ostrzeżenie - Cancel - Anuluj + Configuration already exists or is invalid. + Konfiguracja już istnieje lub jest niepoprawna. - The project <b>%1</b> is not yet configured.<br/>Qt Creator cannot parse the project, because no kit has been set up. - Project <b>%1</b> nie jest jeszcze skonfigurowany.<br/>Qt Creator nie może sparsować projektu, ponieważ nie ustawiono żadnych zestawów narzędzi. + Remove QNX Configuration + Usuń konfigurację QNX - The project <b>%1</b> is not yet configured.<br/>Qt Creator uses the kit <b>%2</b> to parse the project. - Project <b>%1</b> nie jest jeszcze skonfigurowany.<br/>Qt Creator użyje zestawu narzędzi <b>%2</b> do parsowania projektu. + Are you sure you want to remove: + %1? + Czy usunąć: +%1? - The project <b>%1</b> is not yet configured.<br/>Qt Creator uses the <b>invalid</b> kit <b>%2</b> to parse the project. - Project <b>%1</b> nie jest jeszcze skonfigurowany.<br/>Qt Creator użyje <b>niepoprawnego</b> zestawu narzędzi <b>%2</b> do parsowania projektu. + Add... + Dodaj... - PythonEditor::Internal::ClassNamePage + QtSupport::Internal::CodeGenSettingsPageWidget - Enter Class Name - Wprowadź nazwę klasy + Form + Formularz - The source file name will be derived from the class name - Nazwa pliku źródłowego zostanie zaproponowana na podstawie nazwy klasy + Embedding of the UI Class + Osadzanie klas UI - - - PythonEditor::Internal::ClassWizardDialog - Python Class Wizard - Kreator klasy Pythona + Aggregation as a pointer member + Agregacja poprzez wskaźnik do składnika - Details - Szczegóły + Aggregation + Agregacja - - - QmakeProjectManager::Internal::DesktopQmakeRunConfiguration - The .pro file '%1' is currently being parsed. - Trwa parsowanie pliku .pro "%1". + Multiple inheritance + Dziedziczenie wielokrotne - The .pro file "%1" is currently being parsed. - Trwa parsowanie pliku .pro "%1". + Code Generation + Generowanie kodu - Qt Run Configuration - Konfiguracja uruchamiania Qt + Support for changing languages at runtime + Obsługa zmian języków w trakcie wykonywania programu + + + Use Qt module name in #include-directive + Używaj nazwy modułu Qt w dyrektywach #include + + + Add Qt version #ifdef for module names + Generuj odpowiednie dyrektywy #include w zależności od wersji Qt - QmakeProjectManager::Internal::DesktopQmakeRunConfigurationWidget + RemoteLinux::Internal::RemoteLinuxCustomRunConfigurationWidget - Executable: - Plik wykonywalny: + Form + Formularz - Arguments: - Argumenty: + Local executable: + Lokalny plik wykonywalny: - Select Working Directory - Wybierz katalog roboczy + Remote executable: + Zdalny plik wykonywalny: - Reset to default - Przywróć domyślne + Arguments: + Argumenty: Working directory: Katalog roboczy: + + + ColorEditor - Run in terminal - Uruchom w terminalu - - - Run on QVFb - Uruchom na QVFb + Solid Color + Kolor jednolity - Check this option to run the application on a Qt Virtual Framebuffer. - Zaznacz tę opcję aby uruchomić aplikację na Qt Virtual Framebuffer. + Gradient + Gradient - Use debug version of frameworks (DYLD_IMAGE_SUFFIX=_debug) - Użyj pakietów w wersji do debugowania (DYLD_IMAGE_SUFFIX=_debug) + Transparent + Przezroczystość - QmakeProjectManager::Internal::QmakeProjectImporter + AnchorRow - Debug - Debug + Target + Cel + + + StatesList - Release - Release + Collapse + Zwiń - No Build Found - Brak zbudowanej wersji + Expand + Rozwiń - No build found in %1 matching project %2. - Brak zbudowanej wersji w %1 dla projektu %2. + Add a new state. + Dodaje nowy stan. - QmakeProjectManager::Internal::QtQuickComponentSetPage + QmlDebug::QmlDebugConnectionPrivate - Select Qt Quick Component Set - Wybierz zestaw komponentów Qt Quick + Error: (%1) %2 + %1=error code, %2=error message + Błąd: (%1) %2 - Qt Quick component set: - Zestaw komponentów Qt Quick: + <device is gone> + <brak urządzenia> - Component Set - Zestaw komponentów + Network connection dropped + Utracono połączenie sieciowe - - - TabViewToolAction - Add Tab... - Dodaj zakładkę... + Resolving host + Rozwiązywanie adresu hosta. - Step into Tab - Przejdź do zakładki + Establishing network connection ... + Ustanawianie połączenia sieciowego... - - - QmlDesigner::TabViewDesignerAction - Naming Error - Błąd nazwy + Network connection established + Ustanowiono połączenie sieciowe - Component already exists. - Komponent już istnieje. + Network connection closing + Zamykanie połączenia sieciowego + + + Socket state changed to BoundState. This should not happen! + + + + Socket state changed to ListeningState. This should not happen! + - QmlDesigner::ImportLabel + QmlDebug::QmlDebugConnection - Remove Import - Usuń import + Connecting to debug server at %1:%2 ... + Łączenie z serwerem debugowym %1: %2 ... - ImportManagerComboBox + QDockWidget - Add new import - Dodaj nowy import + Float + - <Add Import> - <Dodaj Import> + Undocks and re-attaches the dock widget + - - - QmlDesigner::ImportsWidget - Import Manager - Zarządzanie importami + Close + Zamknij + + + Closes the dock widget + Zamyka okno dokowalne - FileResourcesModel + Utils::FileWizardPage - Open File - Otwórz plik + Location + Położenie - QmlDesigner::PropertyEditorView + Utils::MacroExpander - Properties - Właściwości + Infinite recursion error + Błąd: nieskończona pętla - Invalid Id - Niepoprawny identyfikator + %1: Full path including file name. + %1: Pełna ścieżka zawierająca nazwę pliku. - %1 is an invalid id. - %1 nie jest poprawnym identyfikatorem. + %1: Full path excluding file name. + %1: Pełna ścieżka bez nazwy pliku. - %1 already exists. - %1 już istnieje. + %1: Full path including file name, with native path separator (backslash on Windows). + - - - QmlProfiler::Internal::LocalQmlProfilerRunner - No executable file to launch. - Brak pliku do uruchomienia. + %1: Full path excluding file name, with native path separator (backslash on Windows). + - - - QmlProfiler::Internal::QmlProfilerRunControl - Qt Creator - Qt Creator + %1: File name without path. + %1: Nazwa pliku bez ścieżki. - Could not connect to the in-process QML debugger: -%1 - %1 is detailed error message - Nie można podłączyć się do wewnątrzprocesowego debuggera QML: -%1 + %1: File base name without path and suffix. + %1: Bazowa nazwa pliku bez ścieżki i rozszerzenia. - QML Profiler - Profiler QML + Global variables + Zmienne globalne + + + Access environment variables. + Dostęp do zmiennych środowiskowych. - QmlProfiler::Internal::QmlProfilerEventsModelProxy + Android::AndroidBuildApkStep - <program> - <program> + Build Android APK + AndroidBuildApkStep default display name + Zbuduj Android APK - Main Program - Główny program + Warning: Signing a debug package. + Ostrzeżenie: podpisywanie pakietu debugowego. - - - QmlProfiler::Internal::QmlProfilerEventParentsModelProxy - <program> - <program> + Error + Błąd - Main Program - Główny program + Failed to run keytool. + - - - QmlProfiler::Internal::QmlProfilerEventChildrenModelProxy - <program> - <program> + Invalid password. + Niepoprawne hasło. - - - QmlProfiler::Internal::QmlProfilerEventRelativesView - <bytecode> - <kod bajtowy> + Keystore + - Source code not available - Kod źródłowy nie jest dostępny. + Keystore password: + - Part of binding loop. - Część powiązanej pętli. + Certificate + Certyfikat - - - QmlProfiler::Internal::QmlProfilerDataState - Trying to set unknown state in events list. - Próba ustawienia nieznanego stanu na liście zdarzeń. + Certificate password (%1): + Hasło dla certyfikatu (%1): - QmlProfiler::QmlProfilerModelManager + Android::AndroidBuildApkWidget - Unexpected complete signal in data model. + Keystore files (*.keystore *.jks) - Could not open %1 for writing. - Nie można otworzyć "%1" do zapisu. + Select Keystore File + - Could not open %1 for reading. - Nie można otworzyć "%1" do odczytu. + <b>Build Android APK</b> + - QmlProfiler::Internal::PaintEventsModelProxy - - Painting - Rysowanie - + Android::AndroidConfigurations - Animations - Animacje + Android Debugger for %1 + Debugger Androida dla %1 - GUI Thread - Wątek GUI + Android for %1 (GCC %2, Qt %3) + Android dla %1 (GCC %2, Qt %3) + + + Android::AndroidManager - Render Thread - Wątek renderingu + Unknown Android version. API Level: %1 + Nieznana wersja Androida. Poziom API: %1 - Duration - Czas trwania + Error creating Android templates. + Błąd tworzenia szablonów Androida. - Framerate - Klatki na sekundę + Cannot parse "%1". + Nie można sparsować "%1". - Context - Kontekst + Starting Android virtual device failed. + Nie można uruchomić wirtualnego urządzenia Android. - QmlProfiler::Internal::QmlProfilerPlugin - - QML Profiler - Profiler QML - + Android::Internal::AvdDialog - QML Profiler (External) - Profiler QML (zewnętrzny) + Cannot create a new AVD. No sufficiently recent Android SDK available. +Install an SDK of at least API version %1. + Nie można utworzyć AVD. Brak wystarczająco nowego Android SDK. +Zainstaluj SDK o wersji %1 lub wyższej. - - - QmlProfiler::Internal::QmlProfilerFileReader - Error while parsing trace data file: %1 - Błąd parsowania pliku z danymi stosu: %1 + Cannot create a AVD for ABI %1. Install an image for it. + - - - QmlProjectManager::QmlProjectFileFormat - Invalid root element: %1 - Niepoprawny główny element: %1 + Allowed characters are: a-z A-Z 0-9 and . _ - + Dozwolone znaki to: a-z A-Z 0-9 i . _ - - QmlProjectManager::Internal::QmlComponentSetPage + BareMetal - Select Qt Quick Component Set - Wybierz zestaw komponentów Qt Quick + BareMetal + - Qt Quick component set: - Zestaw komponentów Qt Quick: + Enter GDB commands to reset the board and to write the nonvolatile memory. + - Component Set - Zestaw komponentów + Enter GDB commands to reset the hardware. The MCU should be halted after these commands. + - Qnx::Internal::BlackBerryConfigurationManager - - NDK Already Known - NDK już znane - + BareMetal::Internal::BareMetalDeviceConfigurationFactory - The NDK already has a configuration. - NDK już jest skonfigurowane. + Bare Metal Device + Urządzenie Bare Metal - Qnx::Internal::BlackBerryInstallWizard + BareMetal::Internal::BareMetalDeviceConfigurationWidget - BlackBerry NDK Installation Wizard - Kreator instalacji NDK BlackBerry + GDB server provider: + + + + BareMetal::Internal::BareMetalDeviceConfigurationWizard - Confirmation - Potwierdzenie + New Bare Metal Device Configuration Setup + Nowa konfiguracja urządzenia Bare Metal + + + BareMetal::Internal::BareMetalGdbCommandsDeployStep - Are you sure you want to cancel? - Czy anulować? + GDB commands + Komendy GDB: - Qnx::Internal::BlackBerryInstallWizardOptionPage + BareMetal::Internal::BareMetalRunConfiguration - Options - Opcje + %1 (via GDB server or hardware debugger) + %1 (poprzez serwer GDB lub debugger sprzętowy) - Form - Formularz + Run on GDB server or hardware debugger + Bare Metal run configuration default run name + Uruchom na serwerze GDB lub debuggerze sprzętowym + + + BareMetal::Internal::BareMetalRunConfigurationWidget - Install API level - + Executable: + Plik wykonywalny: - Install new target - + Arguments: + Argumenty: - Add existing target - + <default> + <domyślny> - Install simulator - Zainstaluj symulator + Working directory: + Katalog roboczy: - Install runtime + Unknown - Qnx::Internal::BlackBerryInstallWizardFinalPage + Bazaar::Internal::BazaarEditorWidget - Summary - Podsumowanie + &Annotate %1 + Dołącz &adnotację do %1 - An error has occurred while adding target from: - %1 - + Annotate &parent revision %1 + Dołącz adnotację do &poprawki macierzystej "%1" + + + BinEditor::BinEditorWidget - Target %1 is being added. - + Memory at 0x%1 + Pamięć w 0x%1 - Target %1 is already added. - + Decimal&nbsp;unsigned&nbsp;value: + Wartość&nbsp;dziesiętna&nbsp;bez&nbsp;znaku: - Finished uninstalling %1 version: - %2 - Zakończono dezinstalowanie %1 wersja: - %2 + Decimal&nbsp;signed&nbsp;value: + Wartość&nbsp;dziesiętna&nbsp;ze&nbsp;znakiem: - Finished installing %1 version: - %2 - Zakończono instalowanie %1 wersja: - %2 + Previous&nbsp;decimal&nbsp;unsigned&nbsp;value: + Poprzednia&nbsp;wartość&nbsp;dziesiętna&nbsp;bez&nbsp;znaku: - An error has occurred while uninstalling %1 version: - %2 - Wystąpił błąd podczas dezinstalowania %1 wersja: - %2 + Previous&nbsp;decimal&nbsp;signed&nbsp;value: + Poprzednia&nbsp;wartość&nbsp;dziesiętna&nbsp;ze&nbsp;znakiem: - An error has occurred while installing %1 version: - %2 - Wystąpił błąd podczas instalowania %1 wersja: - %2 + %1-bit&nbsp;Integer&nbsp;Type + %1-bitowy&nbsp;typ&nbsp;całkowity - - - Qnx::Internal::BlackBerryLogProcessRunner - Cannot show debug output. Error: %1 - Nie można pokazać komunikatów debugowych. Błąd: %1 + Little Endian + Little Endian - - - Qnx::Internal::BlackBerrySigningUtils - Please provide your BlackBerry ID Token PIN. - Podaj BlackBerry ID Token PIN. + Big Endian + Big Endian - Please enter your certificate password. - Podaj hasło do certyfikatu. + Binary&nbsp;value: + Wartość&nbsp;binarna: - Qt Creator - Qt Creator + Octal&nbsp;value: + Wartość&nbsp;ósemkowa: - - - BarDescriptorConverter - Setting asset path: %1 to %2 type: %3 entry point: %4 - + Previous&nbsp;binary&nbsp;value: + Poprzednia&nbsp;wartość&nbsp;binarna: - Removing asset path: %1 - + Previous&nbsp;octal&nbsp;value: + Poprzednia&nbsp;wartość&nbsp;ósemkowa: - Replacing asset source path: %1 -> %2 - + <i>double</i>&nbsp;value: + Wartość&nbsp;<i>double</i>: - Cannot find image asset definition: <%1> - + Previous <i>double</i>&nbsp;value: + Poprzednia&nbsp;wartość&nbsp;<i>double</i>: - Error parsing XML file "%1": %2 - Błąd parsowania pliku XML "%1": %2 + <i>float</i>&nbsp;value: + Wartość&nbsp;<i>float</i>: - Error parsing XML file '%1': %2 - Błąd parsowania pliku XML "%1": %2 + Previous <i>float</i>&nbsp;value: + Poprzednia&nbsp;wartość&nbsp;<i>float</i>: - - - Qnx::Internal::CascadesImportWizardDialog - Import Existing Momentics Cascades Project - Import istniejącego projektu Momentics Cascades + Copying Failed + Błąd kopiowania - Momentics Cascades Project Name and Location - Nazwa projektu Momentics Cascades i położenie + You cannot copy more than 4 MB of binary data. + Nie można skopiować więcej niż 4 MB danych binarnych. - Project Name and Location - Nazwa projektu i położenie + Copy Selection as ASCII Characters + Skopiuj jako znaki ASCII - Momentics - Momentics + Copy Selection as Hex Values + Skopiuj jako wartości szesnastkowe - Qt Creator - Qt Creator + Set Data Breakpoint on Selection + Ustaw pułapkę warunkową na selekcji - - - Qnx::Internal::CascadesImportWizard - Momentics Cascades Project - Projekt Momentics Cascades + Jump to Address in This Window + Skocz do adresu w tym oknie - Imports existing Cascades projects created within QNX Momentics IDE. This allows you to use the project in Qt Creator. - Importuje istniejące projekty Cascades utworzone przy pomocy QNX Momentics IDE. + Jump to Address in New Window + Skocz do adresu w nowym oknie - Error generating file "%1": %2 - Błąd generowania pliku "%1": %2 + Jump to Address 0x%1 in This Window + Skocz do adresu 0x%1 w tym oknie - Error generating file '%1': %2 - Błąd podczas generowania pliku "%1": %2 + Jump to Address 0x%1 in New Window + Skocz do adresu 0x%1 w nowym oknie - FileConverter + BinEditor::Internal::BinEditorDocument - ===== Converting file: %1 - ===== Konwersja pliku: %1 + The Binary Editor cannot open empty files. + Edytor plików binarnych nie może otwierac pustych plików. - - - ImportLogConverter - Generated by cascades importer ver: %1, %2 - Wygenerowany przez importer cascades w wersji: %1, %2 + File Error + Błąd pliku - - - ProjectFileConverter - File '%1' not listed in '%2' file, should it be? - Plik "%1" nie występuje w pliku "%2", czy powinien? + The file is too big for the Binary Editor (max. 2GB). + Plik jest zbyt wielki dla edytora binarnego (maks. 2GB). - File "%1" not listed in "%2" file, should it be? - Plik "%1" nie wymieniony wewnątrz pliku "%2", czy powinien zostać wymieniony? + Cannot open %1: %2 + Nie można otworzyć %1: %2 - Qnx::Internal::QnxRunControl + BinEditor::Internal::BinEditorPlugin - Warning: "slog2info" is not found on the device, debug output not available! - Ostrzeżenie: brak"slog2info" na urządzeniu, komunikaty debugowe nie będą dostępne. + &Undo + &Cofnij - Warning: "slog2info" is not found on the device, debug output not available. - Ostrzeżenie: brak"slog2info" na urządzeniu, komunikaty debugowe nie będą dostępne. + &Redo + &Przywróć - Qnx::Internal::QnxToolChainFactory + ClearCase::Internal::ClearCaseEditorWidget - QCC - QCC + Annotate version "%1" + Dołącz adnotację do wersji "%1" - Qnx::Internal::QnxToolChainConfigWidget - - &Compiler path: - Ścieżka do &kompilatora: - - - NDK/SDP path: - SDP refers to 'Software Development Platform'. - Ścieżka NDK/SDP: - + Core::BaseFileWizardFactory - &ABI: - &ABI: + Failed to open an editor for "%1". + Nie można otworzyć edytora dla "%1". - - - Qnx::Internal::Slog2InfoRunner - Cannot show slog2info output. Error: %1 - Nie można pokazać komunikatów slog2info. Błąd: %1 + [read only] + [tylko do odczytu] - - - Qt4ProjectManager - Qt Versions - Wersje Qt + [folder] + [katalog] - - - RemoteLinux::RemoteLinuxSignalOperation - Exit code is %1. stderr: - Kod wyjściowy: %1. stderr: + [symbolic link] + [dowiązanie symboliczne] - - - Update - Update - Uaktualnij + The project directory %1 contains files which cannot be overwritten: +%2. + Katalog projektu %1 zawiera pliki, które nie moga być nadpisane: +%2. - Valgrind::Internal::CallgrindRunControl + Core::Internal::CorePlugin - Profiling - Profilowanie + The current date (ISO). + Bieżąca data (ISO). - Profiling %1 - Profilowanie %1 + The current time (ISO). + Bieżący czas (ISO). - - - Valgrind::Memcheck::MemcheckRunner - No network interface found for remote analysis. - Brak interfejsu sieciowego do zdalnej analizy. + The current date (RFC2822). + Bieżąca data (RFC2822). - Select Network Interface - Wybierz interfejs sieciowy + The current time (RFC2822). + Bieżący czas (RFC2822). - More than one network interface was found on your machine. Please select the one you want to use for remote analysis. - Znaleziono kilka interfejsów sieciowych. Wybierz ten, który ma zostać użyty do zdalnej analizy. + The current date (Locale). + Bieżąca data (Ustawienia lokalne). - No network interface was chosen for remote analysis. - Nie wybrano interfejsu sieciowego do zdalnej analizy. + The current time (Locale). + Bieżący czas (Ustawienia lokalne). - XmlServer on %1: - XmlServer na %1: + The configured default directory for projects. + Skonfigurowany domyślny katalog projektów. - LogServer on %1: - LogServer na %1: + The directory last visited in a file dialog. + Katalog ostatnio widoczny w przeglądarce plików. - - - Valgrind::Internal::MemcheckRunControl - Analyzing Memory - Analiza pamięci + Is Qt Creator running on Windows? + Czy Qt Creator jest uruchomiony na Windows? - Analyzing memory of %1 - Analiza pamięci w %1 - - - - AnalyzerManager - - Memory Analyzer Tool finished, %n issues were found. - - Zakończono analizę pamięci, znaleziono %n problem. - Zakończono analizę pamięci, znaleziono %n problemy. - Zakończono analizę pamięci, znaleziono %n problemów. - + Is Qt Creator running on OS X? + Czy Qt Creator jest uruchomiony na OS X? - Memory Analyzer Tool finished, no issues were found. - Zakończono analizę pamięci, nie znaleziono żadnych problemów. - - - Log file processed, %n issues were found. - - Przetworzono plik loga, znaleziono %n problem. - Przetworzono plik loga, znaleziono %n problemy. - Przetworzono plik loga, znaleziono %n problemów. - + Is Qt Creator running on Linux? + Czy Qt Creator jest uruchomiony na Linux'ie? - Log file processed, no issues were found. - Przetworzono plik loga, nie znaleziono żadnych problemów. + Is Qt Creator running on any unix-based platform? + Czy Qt Creator jest uruchomiony na platformnie unix'owej? - Debug - Debug + The current date (QDate formatstring). + Bieżący dzień (QDate fromatstring). - Release - Release + The current time (QTime formatstring). + Bieżący czas (QTime formatstring). - Tool - Narzędzie + A comment. + Komentarz. + + + Core::PromptOverwriteDialog - Run %1 in %2 Mode? - Uruchomić %1 w trybie %2? + Overwrite Existing Files + Nadpisz istniejące pliki - <html><head/><body><p>You are trying to run the tool "%1" on an application in %2 mode. The tool is designed to be used in %3 mode.</p><p>Debug and Release mode run-time characteristics differ significantly, analytical findings for one mode may or may not be relevant for the other.</p><p>Do you want to continue and run the tool in %2 mode?</p></body></html> - <html><head/><body><p>Próba uruchomienia narzędzia "%1" na aplikacji w trybie %2. Narzędzie nie jest zaprojektowane do użycia w trybie %3.</p><p>Charakterystyki uruchamiania w trybach Debug i Release znacznie się różnią, analityczne dane z jednego trybu nie będą odpowiadały drugiemu trybowi.</p><p>Czy kontynuować i uruchomić je w trybie %2?</p></body></html> + The following files already exist in the folder +%1. +Would you like to overwrite them? + Następujące pliki istnieją już w katalogu +%1. +Czy nadpisać je? - Valgrind::Internal::ValgrindRunControl + Core::ReadOnlyFilesDialog - Valgrind options: %1 - Opcje valgrinda: %1 + Mixed + Mieszane - Working directory: %1 - Katalog roboczy: %1 + Make Writable + Uczyń plik zapisywalnym - Command line arguments: %1 - Argumenty linii komend: %1 + Open with VCS + Otwórz przy pomocy VCS - Analyzing finished. - Zakończono analizę. + Save As + Zachowaj jako - Error: "%1" could not be started: %2 - Błąd: nie można uruchomić "%1": %2 + Failed to %1 File + Horror!!! + Nie można %1 pliku - Error: no Valgrind executable set. - Błąd: nie ustawiono pliku wykonywalnego valgrind. + %1 file %2 from version control system %3 failed. + Horror!!! + - Process terminated. - Zakończono proces. + No Version Control System Found + Brak systemu kontroli wersji (VCS) - - - Valgrind::Internal::ValgrindOptionsPage - Valgrind - Valgrind + Cannot open file %1 from version control system. +No version control system found. + Nie można otworzyć pliku %1 z systemu kontroli wersji. +Brak systemu kontroli wersji. - - - Valgrind::Internal::ValgrindPlugin - Valgrind Function Profile uses the "callgrind" tool to record function calls when a program runs. - Profiler funkcji Valgrinda używa narzędzia "callgrind" do rejestrowania wywołań funkcji w trakcie działania programu. + Cannot Set Permissions + Nie można ustawić praw dostępu - Valgrind Analyze Memory uses the "memcheck" tool to find memory leaks. - Analiza pamięci Valgrinda używa narzędzia "memcheck" do znajdywania wycieków pamięci. + Cannot set permissions for %1 to writable. + Nie można uczynić pliku %1 zapisywalnym. - Valgrind Memory Analyzer - Analizator pamięci Valgrind + Cannot Save File + Nie można zachować pliku - Valgrind Function Profiler - Profiler funkcji Valgrind + Cannot save file %1 + Nie można zachować pliku %1 - Valgrind Memory Analyzer (External Remote Application) - Analizator pamięci Valgrind (zewnętrza zdalna aplikacja) + Canceled Changing Permissions + Anulowano zmianę praw dostępu - Valgrind Function Profiler (External Remote Application) - Profiler funkcji Valgrind (zewnętrzna zdalna aplikacja) + Could Not Change Permissions on Some Files + Nie można zmienić praw dostępu niektórych plików - Valgrind Memory Analyzer (Remote) - Analizator pamięci Valgrind (zdalny) + See details for a complete list of files. + W szczegółach pełna lista plików. - Valgrind Function Profiler (Remote) - Profiler funkcji Valgrind (zdalny) + Change &Permission + Zmień &prawa dostępu - Profile Costs of This Function and Its Callees + The following files are not checked out yet. +Do you want to check them out now? - Valgrind::ValgrindProcess + Core::DocumentModelPrivate - Could not determine remote PID. - Nie można określić zdalnego PID. + <no document> + <brak dokumentu> - - - Valgrind::Internal::ValgrindRunConfigurationAspect - Valgrind Settings - Ustawienia Valgrinda + No document is selected. + Brak zaznaczonego dokumenty. - QmakeProjectManager::QtQuickAppWizard + Core::Internal::EditorManagerPrivate - Creates a deployable Qt Quick 1 application using the QtQuick 1.1 import. Requires Qt 4.8 or newer. - Tworzy aplikację Qt Quick 1, która importuje QtQuick 1.1. Wymaga Qt 4.8 lub nowszej wersji. + Revert File to Saved + Odwróć zmiany w pliku - Qt Quick 1.1 - Qt Quick 1.1 + Ctrl+W + Ctrl+W - Creates a deployable Qt Quick 2 application using the QtQuick 2.1 import. Requires Qt 5.1 or newer. - Tworzy aplikację Qt Quick 2, która importuje QtQuick 2.1. Wymaga Qt 5.1 lub nowszej wersji. + Alternative Close + - Qt Quick 2.1 - Qt Quick 2.1 + Ctrl+F4 + Ctrl+F4 - Creates a deployable Qt Quick 2 application using the QtQuick 2.2 import. Requires Qt 5.2 or newer. - Tworzy aplikację Qt Quick 2, która importuje QtQuick 2.2. Wymaga Qt 5.2 lub nowszej wersji. + Ctrl+Shift+W + Ctrl+Shift+W - Qt Quick 2.2 - Qt Quick 2.2 + Alt+Tab + Alt+Tab - Creates a deployable Qt Quick 2 application using the QtQuick 2.3 import. Requires Qt 5.3 or newer. - Tworzy aplikację Qt Quick 2, która importuje QtQuick 2.3. Wymaga Qt 5.3 lub nowszej wersji. + Ctrl+Tab + Ctrl+Tab - Qt Quick 2.3 - Qt Quick 2.3 + Alt+Shift+Tab + Alt+Shift+Tab - Creates a deployable Qt Quick 2 application that contains a .ui.qml file using the QtQuick 2.4 import. Requires Qt 5.4 or newer. - Tworzy aplikację Qt Quick 2, zawierającą plik .ui.qml i importuje QtQuick 2.4. Wymaga Qt 5.4 lub nowszej wersji. + Ctrl+Shift+Tab + Ctrl+Shift+Tab - Qt Quick 2.4 - Qt Quick 2.4 + Ctrl+Alt+Left + Ctrl+Alt+Left - Creates a deployable Qt Quick 2 application using Qt Quick Controls. Requires Qt 5.2 or newer. - Tworzy aplikację Qt Quick 2, która używa Qt Quick Controls. Wymaga Qt 5.2 lub nowszej wersji. + Alt+Left + Alt+Left - Qt Quick Controls 1.1 - Qt Quick Controls 1.1 + Ctrl+Alt+Right + Ctrl+Alt+Right - Creates a deployable Qt Quick 2 application using Qt Quick Controls. Requires Qt 5.3 or newer. - Tworzy aplikację Qt Quick 2, która używa Qt Quick Controls. Wymaga Qt 5.3 lub nowszej wersji. + Alt+Right + Alt+Right - Qt Quick Controls 1.2 - Qt Quick Controls 1.2 + Split + Podziel - Creates a deployable Qt Quick 2 application that contains a .ui.qml file and uses Qt Quick Controls. 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. Requires Qt 5.4 or newer. - Tworzy aplikację Qt Quick 2 zawierającą plik .ui.qml i używającą Qt Quick Controls. Projekty Qt Quick 2 można przeglądać przy pomocy QML Scene, bez ich uprzedniego budowania. Takie projekty wymagają instalacji Qt Quick Controls. Wymagana jest również wersja Qt 5.4 lub nowsza. + Meta+E,2 + Meta+E,2 - Qt Quick Controls 1.3 - Qt Quick Controls 1.3 + Ctrl+E,2 + Ctrl+E,2 - Creates a deployable Qt Quick 2 application using Qt Quick Controls. Requires Qt 5.1 or newer. - Tworzy aplikację Qt Quick 2, która używa Qt Quick Controls. Wymaga Qt 5.1 lub nowszej wersji. + Split Side by Side + Podziel sąsiadująco - Qt Quick Controls 1.0 - Qt Quick Controls 1.0 + Meta+E,3 + Meta+E,3 - - - Bazaar::Internal::UnCommitDialog - Uncommit - + Ctrl+E,3 + Ctrl+E,3 - Keep tags that point to removed revisions - + Open in New Window + Otwórz w nowym oknie - Only remove the commits from the local branch when in a checkout - + Meta+E,4 + Meta+E,4 - Revision: - Poprawka: + Ctrl+E,4 + Ctrl+E,4 - If a revision is specified, uncommits revisions to leave the branch at the specified revision. -For example, "Revision: 15" will leave the branch at revision 15. - + Remove Current Split + Usuń bieżący podział - Last committed - Ostatnia zmiana + Meta+E,0 + Meta+E,0 - Dry Run - Na sucho + Ctrl+E,0 + Ctrl+E,0 - Test the outcome of removing the last committed revision, without actually removing anything. - Testuje rezultat usunięcia ostatniej poprawki bez faktycznego usunięcia czegokolwiek. + Remove All Splits + Usuń wszystkie podziały - - - Beautifier::Internal::ArtisticStyle::ArtisticStyleOptionsPage - Form - Formularz + Meta+E,1 + Meta+E,1 - Configuration - Konfiguracja + Ctrl+E,1 + Ctrl+E,1 - Artistic Style command: - Komendy stylu Artistic: + Go to Next Split or Window + Przejdź do kolejnego podzielonego okna - Options - Opcje + Meta+E,o + Meta+E,o - Use file *.astylerc defined in project files - Używaj plików *.astylerc zdefiniowanych w plikach projektów + Ctrl+E,o + Ctrl+E,o - Use self-defined style: - Używaj własnego stylu: + Ad&vanced + Zaa&wansowane - Artistic Style - Styl Artistic + Current document + Bieżący dokument - Use file .astylerc or astylerc in HOME - HOME is replaced by the user's home directory - + X-coordinate of the current editor's upper left corner, relative to screen. + Współrzędna X lewego górnego rogu bieżącego edytora względem ekranu. - Use customized style: - Używaj własnego stylu: + Y-coordinate of the current editor's upper left corner, relative to screen. + Współrzędna Y lewego górnego rogu bieżącego edytora względem ekranu. - - - Beautifier::Internal::ClangFormat::ClangFormatOptionsPage - Form - Formularz + Could not open "%1": Cannot open files of type "%2". + Nie można otworzyć "%1". Nie można otwierać plików typu "%2". - Configuration - Konfiguracja + Could not open "%1" for reading. Either the file does not exist or you do not have the permissions to open it. + Nie można otworzyć "%1" do odczytu. Albo plik nie istnieje, albo brak praw dostępu do niego. - Clang Format command: - Komenda formatowania Clang: + Could not open "%1": Unknown error. + Nie można otworzyć "%1": nieznany błąd. - Options - Opcje + <b>Warning:</b> This file was not opened in %1 yet. + <b>Ostrzeżenie:</b> Ten plik nie był jeszcze otwarty w %1. - Use Predefined Style: - Używaj stylu predefiniowanego: + Open + Otwórz - Use Customized Style: - Używaj własnego stylu: + <b>Warning:</b> You are changing a read-only file. + <b>Ostrzeżenie:</b> Zmieniasz plik, który jest tylko do odczytu. - Format entire file if no text was selected. (For action Format Selected Text) - Formatuj cały plik w przypadku braku zaznaczonego tekstu. (Dla akcji "Sformatuj zaznaczony tekst") + Make Writable + Uczyń plik zapisywalnym - Clang Format - Formatowanie Clang + &Save %1 + &Zachowaj %1 - Use predefined style: - Używaj predefiniowanego stylu: + Save %1 &As... + Zachowaj %1 j&ako... - Use customized style: - Używaj własnego stylu: + Revert %1 to Saved + Przywróc stan ostatnio zapisany w %1 - - - Beautifier::Internal::ConfigurationDialog - Name - Nazwa + Reload %1 + Przeładuj %1 - Value - Wartość + Close %1 + Zamknij %1 - Documentation - Dokumentacja + Close All Except %1 + Zamknij wszystko z wyjątkiem %1 - Documentation for '%1' - Dokumentacja dla "%1" + Close Others + Zamknij inne - Documentation for "%1" - Dokumentacja dla "%1" + Qt Creator + Qt Creator - - - Beautifier::Internal::ConfigurationPanel - Form - Formularz + Cannot Open File + Nie można otworzyć pliku - Edit - Zmodyfikuj + Cannot open the file for editing with VCS. + Nie można otworzyć pliku do edycji przy pomocy VCS. - Remove - Usuń + File Error + Błąd pliku - Add - Dodaj + Revert to Saved + Odwróć zmiany - Add Configuration - Dodaj konfigurację + You will lose your current changes if you proceed reverting %1. + Utracisz swoje bieżące zmiany w %1 jeśli potwierdzisz wykonanie tego polecenia. - Edit Configuration - Zmodyfikuj konfigurację + Proceed + Wykonaj + + + Cancel + Anuluj - Beautifier::Internal::Uncrustify::UncrustifyOptionsPage + Core::JsExpander - Form - Formularz + Error in "%1": %2 + Błąd w "%1": %2 - Configuration - Konfiguracja + Cannot convert result of "%1" to string. + Nie można skonwertować rezultatu "%1" do ciągu znakowego. - Uncrustify command: - + Evaluate simple Javascript statements. +The statements may not contain '{' nor '}' characters. + Wykonaj proste wyrażenia Javascript. +Wyrażenia nie mogą zawierać znaków "{" i "}". + + + Core::PatchTool - Options - Opcje + There is no patch-command configured in the general "Environment" settings. + Brak skonfigurowanej komendy "patch" w głównych ustawieniach środowiska. - Use file uncrustify.cfg defined in project files - Używaj plików uncrustify.cfg zdefiniowanych w plikach projektów + Executing in %1: %2 %3 + Wykonywanie w %1: %2 %3 - Use self-defined style: - Używaj własnego stylu: + Unable to launch "%1": %2 + Nie można uruchomić "%1": %2 - Uncrustify - + A timeout occurred running "%1" + Przekroczony czas oczekiwania na odpowiedź od uruchomionego "%1" - Use file uncrustify.cfg in HOME - HOME is replaced by the user's home directory - + "%1" crashed. + "%1" zakończył pracę błędem. - Use customized style: - Używaj własnego stylu: + "%1" failed (exit code %2). + '%1' zakończone błędem (kod wyjściowy %2). - ClangCodeModel::Internal::ClangProjectSettingsPropertiesPage + Core::Internal::ThemeEditor::ThemeSettingsItemDelegate - Pre-compiled headers: - Nagłówki prekompilowane: + <Unnamed> (Current) + <Nienazwany> (bieżący) - None - Brak + (Current) + (bieżący) - Build system (exact) - + Remove Variable Name + Usuń nazwę zmiennej - Build system (fuzzy) - + Add Variable Name... + Dodaj nazwę zmiennej... - Custom - Własne + Add Variable Name + Dodaj nazwę zmiennej - Choose... - Wybierz... + Variable name: + Nazwa zmiennej: - Core::Internal::FindDialog - - &Search - Wy&szukaj - - - Search && &Replace - Wyszukaj i &zastąp - + Core::Internal::ThemeEditor::ThemeSettingsTableModel - Sear&ch for: - Wysz&ukaj: + Widget Style + Styl widżetów - Case sensiti&ve - Uwzględniaj wielkość &liter + Colors + Kolory - Whole words o&nly - Tylko &całe słowa + Flags + Flagi - Use re&gular expressions - Używaj wyrażeń &regularnych + Role + Rola - Sco&pe: - Z&akres: + Value + Wartość - Core::Internal::FindWidget - - Find - Znajdź - + QCoreApplication - Find: - Znajdź: + unnamed + nienazwany - ... - ... + %1 (built-in) + %1 (wbudowany) + + + Core::Internal::ThemeSettingsWidget - Replace with: - Zastąp: + Delete Theme + Usuń motyw - Replace - Zastąp + Are you sure you want to delete the theme "%1" permanently? + Czy na pewno usunąć motyw "%1" na stałe? - Replace && Find - Zastąp i znajdź + Delete + Usuń - Replace All - Zastąp wszystkie + Copy Theme + Skopiuj motyw - Advanced... - Zaawansowane... + Theme name: + Nazwa motywu: - - - Core::Internal::DirectoryFilterOptions - Name: - Nazwa: + Theme Changed + Motyw został zmieniony - File types: - Typy plików: + The theme "%1" was modified, do you want to save the changes? + Motyw "%1" został zmodyfikowany, czy zachować zmiany? - Specify file name filters, separated by comma. Filters may contain wildcards. - Podaj filtry nazw plików. oddzielone przecinkiem. Filtry mogą zawierać dżokery. + Discard + Porzuć - Prefix: - Przedrostek: + Rename Theme + Zmień nazwę motywu + + + Core::Internal::WindowSupport - Specify a short word/abbreviation that can be used to restrict completions to files from this directory tree. -To do this, you type this shortcut and a space in the Locator entry field, and then the word to search for. - Podaj krótkie słowo lub skrót, który zostanie użyty do odfiltrowania plików w podanych katalogach. -Aby uaktywnić ten filtr, wpisz w lokalizatorze powyższy skrót i po spacji podaj szukane słowo. + Exit Full Screen + Wyłącz tryb pełnoekranowy - Limit to prefix - Ogranicz aktywność filtru: -aktywny tylko po wpisaniu przedrostka + Enter Full Screen + Włącz tryb pełnoekranowy + + + CppEditor::Internal::CppEditorWidget - Add... - Dodaj... + &Refactor + &Refaktoryzacja + + + CppSourceProcessor - Edit... - Modyfikuj... + %1: No such file or directory + %1: Brak pliku lub katalogu - Remove - Usuń + %1: Could not get file contents + %1: Nie można odczytać zawartości pliku + + + Cvs::Internal::CvsEditorWidget - Directories: - Katalogi: + Annotate revision "%1" + Dołącz adnotację do poprawki "%1" - Core::Internal::FileSystemFilterOptions + Debugger::Internal::LocalsAndExpressionsOptionsPage - Add Filter Configuration - Dodaj konfigurację filtra + Use Debugging Helper + Używaj asystenta debuggera - Prefix: - Przedrostek: + The debugging helpers are used to produce a nice display of objects of certain types like QString or std::map in the &quot;Locals and Expressions&quot; view. + Asystenci debuggera pomagają lepiej wizualizować obiekty pewnych typów, jak np. QString lib std::map w widoku &quot;Zmienne lokalne i wyrażenia&quot;. - Limit to prefix - Ogranicz aktywność filtru: -aktywny tylko po wpisaniu przedrostka + <unlimited> + <nieograniczona> - Include hidden files - Włącz ukryte pliki + Maximum string length: + Maksymalna długość ciągu tekstowego: - Filter: - Filtr: + Display string length: + Wyświetlaj długości ciągów tekstowych: - Core::Internal::LocatorSettingsWidget + Debugger::Internal::DebuggerPlugin - Configure Filters - Konfiguracja filtrów + Debug + Debug - Add... - Dodaj... + Option "%1" is missing the parameter. + Brak parametru w opcji "%1". - Remove - Usuń + Only one executable allowed. + Dozwolony jest tylko jeden plik wykonywalny. - Edit... - Modyfikuj... + The parameter "%1" of option "%2" does not match the pattern <handle>:<pid>. + Parametr "%1" opcji "%2" nie pasuje do wzoru <uchwyt>:<pid>. - Locator filters that do not update their cached data immediately, such as the custom directory filters, update it after this time interval. - Jest to czas, po którym zostaną odświeżone filtry lokalizatora. Dotyczy to filtów, które nie odświeżają swoich danych natychmiast, takich jak własne filtry katalogów. + Invalid debugger option: %1 + Niepoprawna opcja debuggera: %1 - Refresh interval: - Odświeżanie co: + Process %1 + Proces %1 - min - min + Symbol + Symbol - - - Qnx::Internal::BlackBerryCheckDeviceStatusStepConfigWidget - Form - Formularz + Address + Adres - Check device runtime - + Code + Kod - Check debug token - + Section + Sekcja - <b>Check device status</b> - <b>Sprawdź stan urządzenia</b> + Name + Nazwa - - - Qnx::Internal::BlackBerryDebugTokenPinsDialog - Dialog - Dialog + Symbols in "%1" + Symbole w "%1" - <html><head/><body><p><span style=" font-weight:600;">Debug token: </span></p></body></html> - + From + Od - Add - Dodaj + To + Do - Edit - Zmodyfikuj + Flags + Flagi - Remove - Usuń + Sections in "%1" + Sekcje w "%1" - Debug Token PINs - + Some breakpoints cannot be handled by the debugger languages currently active, and will be ignored. +Affected are breakpoints %1 + Niektóre pułapki nie mogą być obsłużone przez aktywne języki debuggera i zostaną zignorowane. +Dotyczy to następujących pułapek: %1 - Confirmation - Potwierdzenie + Not enough free ports for QML debugging. + Niewystarczająca ilość wolnych portów do debugowania QML. - Are you sure you want to remove PIN: %1? - Czy usunąć PIN: %1? + Unknown debugger type "%1" + Nieznany typ debuggera "%1" - Debug Token PIN - + Unable to create a debugger engine of the type "%1" + Nie można utworzyć silnika debuggera typu "%1" - Qnx::Internal::BlackBerryDeployQtLibrariesDialog + Debugger::Internal::DebuggerToolTipManager - Deploy Qt to BlackBerry Device - Instalacja Qt na urządzeniu BlackBerry + %1 (Previous) + %1 (poprzedni) - Qt library to deploy: - Biblioteka Qt do zainstalowania: + Name + Nazwa - Deploy - Zainstaluj + Value + Wartość - Remote directory: - Zdalny katalog: + Type + Typ - /accounts/devuser/ - /accounts/devuser/ + Copy Contents to Clipboard + Skopiuj zawartość do schowka - qt - qt + Expression %1 in function %2 from line %3 to %4 + Wyrażenie %1 w funkcji %2 od linii %3 do %4 - Close - Zamknij + No valid expression + Brak poprawnego wyrażenia - Closing the dialog will stop the deployment. Are you sure you want to do this? - Zamknięcie dialogu spowoduje zatrzymanie instalacji. Czy zamknąć dialog? + %1 (Restored) + %1 (przywrócony) - Please input a remote directory to deploy to. - Wprowadź zdalny katalog instalacji. + Expression too complex + Wyrażenie zbyt skomplikowane + + + FormEditorW - Connection failed: %1 - Błąd połączenia: %1 + Widget box + Panel widżetów - The remote directory '%1' already exists. Deploying to that directory will remove any files already present. - -Are you sure you want to continue? - Zdalny katalog "%1" już istnieje. Instalacja do tego katalogu spowoduje usunięcie całej jego zawartości. - -Czy kontynuować instalację? + Object Inspector + Hierarchia obiektów - Checking existence of '%1' - Sprawdzanie obecności "%1" + Property Editor + Edytor właściwości - Removing '%1' - Usuwanie "%1" + Signals && Slots Editor + Edytor sygnałów / slotów - - - WinRt::Internal::WinRtRunConfigurationWidget - Arguments: - Argumenty: + Action Editor + Edytor akcji - Uninstall package after stop - Zdezinstaluj pakiet po zatrzymaniu + Widget Box + Panel widżetów - Launch App - Uruchom Aplikację + Edit Widgets + Modyfikuj widżety - - - QmlJS::ModelManagerInterface - Indexing - Indeksowanie + F3 + F3 - QML import scan - Skanowanie importów QML + Edit Signals/Slots + Modyfikuj sygnały / sloty - Parsing QML Files - Parsowanie plików QML + F4 + F4 - Scanning QML Imports - Skanowanie importów QML - - - - QmlJS::PluginDumper - - QML module does not contain information about components contained in plugins. - -Module path: %1 -See "Using QML Modules with Plugins" in the documentation. - Moduł QML nie zawiera informacji o komponentach we wtyczkach. - -Ścieżka do modułu: %1 -Zobacz "Using QML Modules with Plugins" w dokumentacji. - - - Automatic type dump of QML module failed. -Errors: -%1 - Automatyczne zrzucenie typów modułu QML niepoprawnie zakończone. -Błędy: -%1 - - - Automatic type dump of QML module failed. -First 10 lines or errors: - -%1 -Check 'General Messages' output pane for details. - Automatyczny zrzut typów modułu QML niepoprawnie zakończony. -Pierwsze 10 linii błędów: - -%1 -Sprawdź szczegóły w panelu "Komunikaty ogólne". - - - Warnings while parsing QML type information of %1: -%2 - Ostrzeżenia podczas parsowania informacji o typach QML w %1: -%2 - - - "%1" failed to start: %2 - Nie można uruchomić "%1": %2 - - - "%1" crashed. - "%1" zakończył pracę błędem. - - - "%1" timed out. - Przekroczony czas oczekiwania na "%1". - - - I/O error running "%1". - Błąd wejścia / wyjścia przy uruchamianiu "%1". - - - "%1" returned exit code %2. - "%1" zwrócił kod wyjściowy %2. - - - Arguments: %1 - Argumenty: %1 - - - Failed to parse "%1". -Error: %2 - Nie można sparsować "%1". -Błąd: %2 - - - Failed to parse '%1'. -Error: %2 - Nie można sparsować "%1". -Błąd: %2 - - - Errors while reading typeinfo files: - Błędy podczas czytania plików typeinfo: - - - Could not locate the helper application for dumping type information from C++ plugins. -Please build the qmldump application on the Qt version options page. - Nie można ustalić położenia aplikacji pomocniczej zrzucającej informacje o typach z wtyczek C++. -Zbuduj aplikację qmldump na stronie z opcjami wersji Qt. - - - - Utils::FancyLineEdit - - Filter - Filtr - - - Clear text - Wyczyść tekst - - - - AndroidConfiguration - - Could not run: %1 - Nie można uruchomić: %1 - - - No devices found in output of: %1 - Brak urządzeń na wyjściu %1 - - - - AndroidConfig - - Error Creating AVD - Błąd w trakcie tworzenia AVD - - - Cannot create a new AVD. No sufficiently recent Android SDK available. -Please install an SDK of at least API version %1. - Nie można utworzyć nowego AVD. Brak aktualnego Android SDK. -Zainstaluj SDK z wersją API %1 lub nowszą. - - - Could not start process "%1 %2" - Nie można uruchomić procesu "%1 %2" - - - - Android::Internal::AndroidPotentialKit - - Configure Android... - Konfiguruj Androida... - - - - Android::Internal::JavaEditorFactory - - Java Editor - Edytor Java - - - - Android::Internal::JavaFileWizard - - Creates a Java file with boilerplate code. - Tworzy plik Java ze wstępnym kodem. - - - Java File - Plik Java - - - - AbstractSettings - - Cannot save styles. %1 does not exist. - Nie można zachować stylów. %1 nie istnieje. - - - Cannot open file "%1": %2. - Nie można otworzyć pliku "%1": %2. - - - Cannot save file "%1": %2. - Nie można zachować pliku "%1": %2. - - - No documentation file specified. - Nie podano pliku z dokumentacją. - - - Cannot open documentation file "%1". - Nie można otworzeć pliku z dokumentacją "%1". - - - The file "%1" is not a valid documentation file. - Plik "%1" nie jest poprawnym plikiem z dokumentacją. - - - Cannot read documentation file "%1": %2. - Nie można odczytać pliku z dokumentacją "%1": %2. - - - - Beautifier - - Beautifier - Upiększarka - - - - Beautifier::Internal::BeautifierPlugin - - Cannot create temporary file "%1": %2. - Nie można utworzyć tymczasowego pliku "%1": %2. - - - Cannot call %1 or some other error occurred. - Nie można wywołać %1 lub wystąpił inny błąd. - - - Cannot read file "%1": %2. - Nie można odczytać pliku "%1": %2. - - - File was modified. - Zmodyfikowano plik. - - - Time out reached while formatting file %1. - Przekroczono czas oczekiwania na sformatowanie pliku %1. - - - File %1 was closed. - Zamknięto plik %1. - - - Error in Beautifier: %1 - Błąd upiększarki: %1 - - - Cannot get configuration file for %1. - Brak pliku z konfiguracją dla %1. - - - Format Current File - Menu entry - Sformatuj bieżący plik - - - Format Selected Text - Menu entry - Sformatuj zaznaczony tekst - - - %1 Command - File dialog title for path chooser when choosing binary - Komenda %1 - - - - ClangFormatSettings - - No description available. - Brak opisu. - - - - ClangCodeModel::Internal::ClangCompletionAssistProcessor - - Location: %1 - Parent folder for proposed #include completion - Położenie: %1 - - - - ClangCodeModel::Internal::ClangIndexer - - C++ Indexing - Indeksowanie C++ - - - Parsing C/C++/ObjC Files - Parsowanie plików C / C++ / ObjC - - - - ClangCodeModel::Internal::ModelManagerSupport - - Clang - Display name - Clang - - - - ClangCodeModel::Internal::ClangProjectSettingsWidget - - Clang Settings - Ustawienia Clang - - - Header Files (*.h) - Pliki nagłówkowe (*.h) - - - All Files (*) - Wszystkie pliki (*) - - - - ClangCodeModel::CompletionProposalsBuilder - - Is deprecated - deprecated C++ symbol - Jest przestarzały - - - Slot of %1, returns %2 - Slot w %1, zwraca %2 - - - Signal of %1, returns %2 - Sygnał w %1, zwraca %2 - - - - ClangCodeModel::Diagnostic - - ignored - - - - note - - - - warning - - - - error - - - - fatal - - - - - ClangCodeModel::Internal::PchManager - - Successfully generated PCH file "%1". - Wygenerowano poprawnie plik PCH "%1". - - - Failed to generate PCH file "%1". - Nie można wygenerować pliku PCH "%1". - - - Precompiling - Prekompilacja - - - Precompiling... - Prekompilacja... - - - - Core::FindPlugin - - &Find/Replace - Z&najdź / zastąp - - - Advanced Find - Zaawansowane przeszukiwanie - - - Open Advanced Find... - Otwórz zaawansowane przeszukiwanie... - - - Advanced... - Zaawansowane... - - - Ctrl+Shift+F - Ctrl+Shift+F - - - - Core::Internal::FindToolBar - - Shift+Enter - Shift+Enter - - - Shift+Return - Shift+Return - - - Find/Replace - Znajdź / zastąp - - - Enter Find String - Podaj ciąg do znalezienia - - - Ctrl+E - Ctrl+E - - - Find Next - Znajdź następne - - - Find Previous - Znajdź poprzednie - - - Find Next (Selected) - Znajdź następny (zaznaczony) - - - Ctrl+F3 - Ctrl+F3 - - - Find Previous (Selected) - Znajdź poprzedni (zaznaczony) - - - Ctrl+Shift+F3 - Ctrl+Shift+F3 - - - Replace - Zastąp - - - Replace && Find - Zastąp i znajdź - - - Ctrl+= - Ctrl+= - - - Replace && Find Previous - Zastąp i znajdź poprzednie - - - Replace All - Zastąp wszystkie - - - Case Sensitive - Uwzględniaj wielkość liter - - - Whole Words Only - Tylko całe słowa - - - Use Regular Expressions - Używaj wyrażeń regularnych - - - Preserve Case when Replacing - Zachowuj wielkość liter przy zastępowaniu - - - Search for... - Wyszukiwanie... - - - Replace with... - Zastępowanie... - - - - Core::IFindFilter - - Case sensitive - Uwzględniaj wielkość liter - - - Whole words - Całe słowa - - - Regular expressions - Wyrażenia regularne - - - Preserve case - Zachowuj wielkość liter - - - Flags: %1 - Flagi: %1 - - - None - Brak - - - , - , - - - - Core::Internal::SearchResultWidget - - Search was canceled. - Anulowano przeszukiwanie. - - - Cancel - Anuluj - - - Repeat the search with same parameters. - Powtórz przeszukiwanie z tymi samymi parametrami. - - - Search again - Przeszukaj ponownie - - - Replace with: - Zastąp: - - - Replace all occurrences. - Zastąp wszystkie wystąpienia. - - - Replace - Zastąp - - - Preserve case - Zachowuj wielkość liter - - - This change cannot be undone. - Ta zmiana nie może być cofnięta. - - - The search resulted in more than %n items, do you still want to continue? - - Odnaleziono wiecej niż %n element, czy kontynuować? - Odnaleziono wiecej niż %n elementy, czy kontynuować? - Odnaleziono wiecej niż %n elementów, czy kontynuować? - - - - Continue - Kontynuuj - - - No matches found. - Brak pasujących wyników. - - - %n matches found. - - Znaleziono %n pasujący wynik. - Znaleziono %n pasujące wyniki. - Znaleziono %n pasujących wyników. - - - - - Core::SearchResultWindow - - History: - Historia: - - - New Search - Nowe wyszukiwanie - - - Expand All - Rozwiń wszystko - - - %1 %2 - %1 %2 - - - Collapse All - Zwiń wszystko - - - Search Results - Wyniki wyszukiwań - - - - Core::Internal::DirectoryFilter - - Generic Directory Filter - Ogólny filtr katalogów - - - Filter Configuration - Konfiguracja filtra - - - Select Directory - Wybierz katalog - - - %1 filter update: 0 files - Uaktualnienie filtra %1: 0 plików - - - %1 filter update: %n files - - Uaktualnienie filtra %1: %n plik - Uaktualnienie filtra %1: %n pliki - Uaktualnienie filtra %1: %n plików - - - - %1 filter update: canceled - Uaktualnienie filtra %1: anulowano - - - - Core::Internal::ExecuteFilter - - Execute Custom Commands - Wykonanie własnej komendy - - - Previous command is still running ("%1"). -Do you want to kill it? - Poprzednia komenda jest wciąż uruchomiona ("%1"). -Czy przerwać ją? - - - Command "%1" finished. - Komenda "%1" zakończona. - - - Command "%1" failed. - Komenda "%1" zakończona błędem. - - - Starting command "%1". - Uruchamianie komendy "%1". - - - Previous command is still running ('%1'). -Do you want to kill it? - Poprzednia komenda jest wciąż uruchomiona ("%1"). -Czy przerwać ją? - - - Kill Previous Process? - Czy przerwać poprzedni proces? - - - Command '%1' finished. - Komenda "%1" zakończona. - - - Command '%1' failed. - Komenda "%1" zakończona błędem. - - - Could not find executable for '%1'. - Nie można odnaleźć pliku wykonywalnego dla "%1". - - - Starting command '%1'. - Uruchamianie komendy "%1". - - - Could not start process: %1. - Nie można uruchomić procesu %1. - - - Could not find executable for "%1". - Nie można odnaleźć pliku wykonywalnego dla "%1". - - - - Core::Internal::FileSystemFilter - - Files in File System - Pliki w systemie plików - - - Create and Open "%1" - Utwórz i otwórz "%1" - - - - Core::ILocatorFilter - - Filter Configuration - Konfiguracja filtra - - - Limit to prefix - Ogranicz aktywność filtru: -aktywny tylko po wpisaniu przedrostka - - - Prefix: - Przedrostek: - - - - Core::Internal::Locator - - Ctrl+K - Ctrl+K - - - Type to locate - Wpisz aby znaleźć - - - Type to locate (%1) - Wpisz aby znaleźć (%1) - - - Updating Locator Caches - - - - Indexing - Indeksowanie - - - - Core::Internal::LocatorFiltersFilter - - Available filters - Dostępne filtry - - - - Core::Internal::LocatorWidget - - Refresh - Odśwież - - - Locate... - Znajdź... - - - Options - Opcje - - - <type here> - <wpisz tutaj> - - - - Core::Internal::OpenDocumentsFilter - - Open Documents - Otwarte dokumenty - - - - Core::Internal::SettingsPage - - %1 (prefix: %2) - %1 (przedrostek: %2) - - - - Debugger::Internal::UnstartedAppWatcherDialog - - Attach to Process Not Yet Started - Dołącz do nieuruchomionego procesu - - - Reopen dialog when application finishes - Ponownie otwórz dialog po zakończeniu aplikacji - - - Reopens this dialog when application finishes. - Ponownie otwórz ten dialog po zakończeniu aplikacji. - - - Continue on attach - Kontynuuj po dołączeniu - - - Debugger does not stop the application after attach. - Debugger nie zatrzyma aplikacji po dołączeniu. - - - Start Watching - Rozpocznij obserwację - - - Close - Zamknij - - - Kit: - Zestaw narzędzi: - - - Executable: - Plik wykonywalny: - - - Select valid executable. - Wybierz poprawny plik wykonywalny. - - - Not watching. - Brak obserwacji. - - - Waiting for process to start... - Oczekiwanie na uruchomienie procesu... - - - Attach - Dołącz - - - - DiffEditor::DiffEditorController - - No difference - Brak różnic - - - and %n more - Displayed after the untranslated message "Branches: branch1, branch2 'and %n more'" - - i jeszcze %n gałąź - i jeszcze %n gałęzie - i jeszcze %n gałęzi - - - - - DiffEditor::DiffEditorManager - - Waiting for data... - Oczekiwanie na dane... - - - - DiffEditor::SideDiffEditorWidget - - Skipped %n lines... - - Opuszczono %n linię... - Opuszczono %n linie... - Opuszczono %n linii... - - - - [%1] %2 - [%1] %2 - - - - DiffEditor::SideBySideDiffEditorWidget - - Skipped %n lines... - - Opuszczono %n linię... - Opuszczono %n linie... - Opuszczono %n linii... - - - - Binary files differ - Pliki binarne różnią się - - - Skipped unknown number of lines... - Pominięto nieznaną ilość linii... - - - No controller - Brak kontrolera - - - No difference - Brak różnic - - - Send Chunk to CodePaster... - Wyślij fragment do Codepaster... - - - Apply Chunk... - Zastosuj fragment... - - - Revert Chunk... - Zastosuj odwrotny fragment... - - - Unable to Paste - Nie można wkleić - - - Code pasting services are not available. - Usługi wklejania kodu są niedostępne. - - - Revert Chunk - Odwróć zmiany we fragmencie - - - Apply Chunk - Zastosuj fragment - - - Would you like to revert the chunk? - Czy zastosować odwrotny fragment? - - - Would you like to apply the chunk? - Czy zastosować fragment? - - - - ProjectExplorer::KitConfigWidget - - Manage... - Zarządzaj... - - - - ProjectExplorer::SelectableFilesDialogEditFiles - - Edit Files - Zmodyfikuj pliki - - - Hide files matching: - Ukryj pliki pasujące do: - - - Show files matching: - Pokaż pliki pasujące do: - - - Apply Filter - Zastosuj filtr - - - Generating file list... - -%1 - Generowanie listy plików... - -%1 - - - Not showing %n files that are outside of the base directory. -These files are preserved. - - Ukryto %n plik który jest na zewnątrz katalogu bazowego. -Ten plik jest zabezpieczony. - Ukryto %n pliki które są na zewnątrz katalogu bazowego. -Te pliki są zabezpieczone. - Ukryto %n plików które są na zewnątrz katalogu bazowego. -Te pliki są zabezpieczone. - - - - - ProjectExplorer::SelectableFilesDialogAddDirectory - - Add Existing Directory - Dodaj istniejący katalog - - - Source directory: - Katalog źródłowy: - - - Start Parsing - Rozpocznij parsowanie - - - - QmlDesigner - - Error - Błąd - - - - QmlJSEditor::Internal::QmlJSTextEditorWidget - - Show Qt Quick ToolBar - Pokaż pasek narzędzi Qt Quick - - - Refactoring - Refaktoryzacja - - - - QmlProfiler::QmlProfilerBaseModel - - µs - µs - - - ms - ms - - - s - s - - - - QmlProfiler::QmlProfilerDataModel - - <bytecode> - <kod bajtowy> - - - GUI Thread - Wątek GUI - - - Source code not available. - Kod źródłowy nie jest dostępny. - - - anonymous function - anonimowa funkcja - - - Animations - Animacje - - - - QmlProfiler::QV8ProfilerDataModel - - <program> - <program> - - - Main Program - Główny program - - - - Qnx::Internal::BlackBerryApiLevelConfiguration - - Qt %1 for %2 - Qt %1 dla %2 - - - QCC for %1 - QCC dla %1 - - - Debugger for %1 - Debugger dla %1 - - - - No Qt version found. - - Brak wersji Qt. - - - - No GCC compiler found. - - Brak kompilatora GCC. - - - - No GDB debugger found for BB10 Device. - - Brak debuggera GDB dla urządzenia BB10. - - - - No GDB debugger found for BB10 Simulator. - - Brak debuggera GDB dla symulatora BB10. - - - Qt %{Qt:Version} for %2 - Qt %{Qt:Version} dla %2 - - - - No auto detection source found. - - - - - No sysroot found. - - - - The following errors occurred while activating target "%1": - - - - - Cannot Set up BB10 Configuration - Nie można skonfigurować BB10 - - - BlackBerry %1 Device - Urządzenie BlackBerry %1 - - - BlackBerry %1 Simulator - Symulator BlackBerry %1 - - - - Qnx::Internal::BlackBerryCheckDeviceStatusStep - - Check Device Status - Kontrola stanu urządzenia - - - Authentication failed. - Brak autoryzacji. - - - Cannot connect to device. - Nie można połączyć się z urządzeniem - - - Device is not in the development mode. - Urządzenie nie jest w trybie deweloperskim. - - - Timeout querying device information. - Przekroczony czas oczekiwania na informacje o urządzeniu. - - - Failed to query device information. - Nie można uzyskać informacji o urządzeniu. - - - Process to query device information has crashed. - Proces uzyskujący informacje o urządzeniu zakończył pracę błędem. - - - Cannot query device information. - Nie można uzyskać informacji o urządzeniu. - - - %1. Upload a valid debug token into the device. - %1: Error message from BlackBerryDeviceInformation - - - - Cannot determine device runtime version. - - - - Cannot determine API level version. - Nie można określić wersji poziomu API. - - - The device runtime version (%1) is inferior to the API level version (%2) - - - - Checking device status... - Kontrola stanu urządzenia... - - - Confirmation - Potwierdzenie - - - The device runtime version (%1) does not match the API level version (%2). -Do you want to continue anyway? - - - - No hostname specified for the device - - - - - Qnx::Internal::BlackBerryCheckDeviceStatusStepFactory - - Check Device Status - Kontrola stanu urządzenia - - - - BlackBerryPotentialKit - - Configure BlackBerry... - Konfiguracja BlackBerry... - - - - BlackBerryPotentialKitWidget - - <b>BlackBerry has not been configured. Create BlackBerry kits.</b> - <b>BlackBerry nie został skonfigurowany. Utwórz zestawy narzędzi BlackBerry.</b> - - - Qt Creator needs additional settings to enable BlackBerry support. You can configure those settings in the Options dialog. - Wymagane są dodatkowe ustawienia do obsługi BlackBerry. Można je skonfigurować w dialogu z opcjami. - - - - Qnx::Internal::BlackBerryRuntimeConfiguration - - Runtime %1 - - - - - Qnx::Internal::BlackBerrySetupPage - - Setup - Ustawienia - - - - Qnx::Internal::APILevelSetupItem - - API Level defines kits, Qt versions, compilers, debuggers needed for building BlackBerry applications. - - - - No API Level is installed. - - - - Install - Zainstaluj - - - No valid API Level is installed. - - - - Valid API Level is not activated. - - - - Activate - Uaktywnij - - - Valid API Level 10.2 or newer is not installed. - - - - Valid API Level 10.2 or newer is not set as default. - - - - Set - Ustaw - - - API Level is configured. - - - - - Qnx::Internal::SigningKeysSetupItem - - Signing keys are needed for signing BlackBerry applications and managing debug tokens. - - - - Found legacy BlackBerry signing keys. - Znaleziono stare klucze podpisujące BlackBerry. - - - Update - Uaktualnij - - - Cannot find BlackBerry signing keys. - Brak kluczy podpisujących BlackBerry. - - - Request - Zażądaj - - - Cannot find developer certificate. - Brak certyfikatu deweloperskiego. - - - Create - Utwórz - - - Developer certificate is not opened. - Certyfikat deweloperski nie jest otwarty. - - - Open - Otwórz - - - Signing keys are ready to use. - Klucze podpisujące gotowe do użycia. - - - Opening certificate... - Otwieranie certyfikatu... - - - Qt Creator - Qt Creator - - - Invalid certificate password. - Niepoprawne hasło certyfikatu. - - - Error loading certificate. - Błąd ładowania certyfikatu. - - - - Qnx::Internal::DeviceSetupItem - - BlackBerry 10 device or simulator is needed for running BlackBerry applications. - Aby uruchamiać aplikacje BlackBerry wymagane jest urządzenie BlackBerry 10 lub symulator. - - - No BlackBerry 10 device or simulator is registered. - Brak zarejestrowanego urządzenia BlackBerry 10 lub symulatora. - - - Add - Dodaj - - - BlackBerry 10 device or simulator is registered. - Istnieje zarejestrowane urządzenie BlackBerry 10 lub symulator. - - - - Qnx::Internal::BlackBerrySetupWidget - - <a href="%1">How to Setup Qt Creator for BlackBerry 10 development</a> - <a href="%1">Jak skonfigurować Qt Creatora do tworzenia oprogramowania dla BlackBerry</a> - - - - BlackBerrySetupWizardWelcomePage - - Welcome to the BlackBerry Development Environment Setup Wizard. -This wizard will guide you through the essential steps to deploy a ready-to-go development environment for BlackBerry 10 devices. - Kreator konfiguracji środowiska deweloperskiego BlackBerry. -Kreator ten składa się z etapów prowadzących do instalacji gotowego środowiska deweloperskiego dla urządzeń BlackBerry 10. - - - BlackBerry Development Environment Setup - Konfiguracja środowiska deweloperskiego BlackBerry - - - - BlackBerrySetupWizardNdkPage - - Configure the NDK Path - Skonfiguruj ścieżkę NDK - - - - BlackBerrySetupWizardKeysPage - - Setup Signing Keys - Ustawienia kluczy - - - Qt Creator - Qt Creator - - - This wizard will be closed and you will be taken to the BlackBerry key request web page. Do you want to continue? - Ten kreator zostanie zamknięty i otwarta zostanie strona webowa BlackBerry, na której można zamówić klucze. Kontynuować? - - - - BlackBerrySetupWizardCertificatePage - - Create Developer Certificate - Utwórz certyfikat deweloperski - - - The entered passwords do not match. - Wprowadzone hasła nie zgadzają się. - - - - BlackBerrySetupWizardDevicePage - - Configure BlackBerry Device Connection - Skonfiguruj połączenie z urządzeniem BlackBerry - - - BlackBerry Device - Urządzenie BlackBerry - - - - BlackBerrySetupWizardFinishPage - - Your environment is ready to be configured. - Środowisko gotowe do konfiguracji. - - - - Qnx::Internal::SrcProjectPathChooser - - Choose imported Cascades project directory - - - - Directory does not seem to be a valid Cascades project. - - - - - Qnx::Internal::QnxAttachDebugDialog - - Project source directory: - Katalog ze źródłami projektu: - - - Local executable: - Lokalny plik wykonywalny: - - - - Qnx::Internal::QnxAttachDebugSupport - - No free ports for debugging. - Brak wolnych portów do debugowania. - - - Remote: "%1:%2" - Process %3 - - - - - Qnx::Internal::QNXPlugin - - BAR descriptor file (BlackBerry) - Plik deskryptora BAR (BlackBerry) - - - BAR Descriptor - Deskryptor BAR - - - Attach to remote QNX application... - Dołącz do zdalnej aplikacji QNX... - - - - PrefixLangDialog - - Prefix: - Przedrostek: - - - Language: - Język: - - - - ResourceEditor::ResourceTopLevelNode - - %1 Prefix: %2 - %1 Przedrostek: %2 - - - - ResourceEditor::Internal::ResourceFolderNode - - %1 Prefix: %2 - %1 Przedrostek: %2 - - - - FontSettings_C_OCCURRENCES_UNUSED - - Unused variable - Nieużywana zmienna - - - - VcsBase::Internal::VcsPlugin - - Name of the version control system in use by the current project. - Nazwa systemu kontroli wersji używana w bieżącym projekcie. - - - The current version control topic (branch or tag) identification of the current project. - - - - The top level path to the repository the current project is in. - Ścieżka do repozytorium do którego przynależy bieżący projekt. - - - - WinRt::Internal::WinRtDeployConfiguration - - Run windeployqt - Uruchom windeployqt - - - Deploy to Windows Phone - Zainstaluj na Windows Phone - - - Deploy to Windows Phone Emulator - Zainstaluj na emulatorze Windows Phone - - - - WinRt::Internal::WinRtDeployStepFactory - - Run windeployqt - Uruchom windeployqt - - - - WinRt::Internal::WinRtDevice - - Windows Runtime (Local) - - - - Windows Phone - Windows Phone - - - Windows Phone Emulator - Emulator Windows Phone - - - - WinRt::Internal::WinRtDeviceFactory - - Running Windows Runtime device detection. - - - - No winrtrunner.exe found. - Brak winrtrunner.exe. - - - Error while executing winrtrunner: %1 - Błąd uruchamiania winrtrunner: %1 - - - winrtrunner returned with exit code %1. - winrtrunner zakończył pracę kodem wyjściowym %1. - - - Windows Runtime local UI - - - - Found %n Windows Runtime devices. - - - - - - - - %n of them are new. - - %n z nich jest nowe. - %n z nich są nowe. - %n z nich jest nowych. - - - - - WinRt::Internal::WinRtPackageDeploymentStep - - Run windeployqt - Uruchom windeployqt - - - No executable to deploy found in %1. - Brak pliku wykonawczego w %1 do zainstalowania. - - - Cannot parse manifest file %1. - Nie można sparsować pliku manifest %1. - - - File %1 is outside of the executable's directory. These files cannot be installed. - "These files cannot be installed." - this should be singular, like the first sentence: "This file". - Plik %1 leży poza katalogiem pliku wykonywalnego. Plik ten nie zostanie zainstalowany. - - - Cannot open mapping file %1 for writing. - Nie można otworzyć pliku z mapowaniem %1 do zapisu. - - - - WinRt::Internal::WinRtQtVersion - - Windows Phone - Windows Phone - - - Windows Runtime - Windows Runtime - - - - WinRt::Internal::WinRtRunConfiguration - - Run App Package - Uruchom pakiet App - - - - WinRt::Internal::WinRtRunControl - - The current kit has no Qt version. - Brak wersji Qt w bieżącym zestawie narzędzi. - - - Cannot find winrtrunner.exe in "%1". - Brak winrtrunner.exe w "%1". - - - winrtrunner crashed. - winrtrunner zakończony błędem. - - - winrtrunner returned with exit code %1. - winrtrunner zakończył pracę kodem wyjściowym %1. - - - winrtrunner finished successfully. - winrtrunner poprawnie zakończony. - - - Error while executing winrtrunner: %1 - - Błąd podczas uruchamiania winrtrunner: %1 - - - - - WinRt::Internal::WinRtRunConfigurationFactory - - Run App Package - Uruchom pakiet App - - - - WinRt::Internal::WinRtRunControlFactory - - Unsupported run mode %1. - Nieobsługiwany tryb uruchamiania %1. - - - WinRT Run Control Factory - - - - - WinRt::Internal::WinRtPackageDeploymentStepWidget - - Arguments: - Argumenty: - - - Restore Default Arguments - Przywróć domyślne argumenty - - - - Utils::ProxyCredentialsDialog - - Proxy Credentials - Pośrednie listy uwierzytelniające - - - The proxy %1 requires a username and password. - Pośrednik %1 wymaga nazwy użytkownika i hasła. - - - Username: - Nazwa użytkownika: - - - Username - Nazwa użytkownika - - - Password: - Hasło: - - - Password - Hasło - - - - AndroidBuildApkWidget - - Form - Formularz - - - Sign package - Podpisz pakiet - - - Keystore: - - - - Create... - Utwórz... - - - Signing a debug package - extra space on the end - Podpisywanie pakietu debugowego - - - Certificate alias: - Alias certyfikatu: - - - Signing an APK that uses "Deploy local Qt libraries" is not allowed. -Deploying local Qt libraries is incompatible with Android 5 - Podpisywanie APK, które używa "Zainstaluj lokalne biblioteki Qt" jest niedozwolone. -Instalowanie lokalnych bibliotek Qt nie jest kompatybilne z Androidem 5 - - - Application - Aplikacja - - - Android build SDK: - - - - Advanced Actions - Zaawansowane akcje - - - Verbose output - Gadatliwe komunikaty - - - Open package location after build - Po zakończeniu budowania otwórz w położeniu pakietu - - - Use Gradle - Używaj Gradle - - - Qt Deployment - Instalacja Qt - - - Uses the external Ministro application to download and maintain Qt libraries. - Używa zewnętrznej aplikacji Ministro do pobierania bibliotek Qt i zarządzania nimi. - - - Use Ministro service to install Qt - Użyj usługi Ministro do zainstalowania Qt - - - Creates a standalone APK. - Tworzy samodzielny APK. - - - Bundle Qt libraries in APK - Dołącz biblioteki Qt do APK - - - Pushes local Qt libraries to device. You must have Qt libraries compiled for that platform. -The APK will not be usable on any other device. - Przesyła lokalne biblioteki Qt do urządzenia. -Należy przesłać biblioteki skompilowane dla tej platformy. -APK nie będzie przydatne na innych urządzeniach. - - - Deploy local Qt libraries to temporary directory - Zainstaluj lokalne biblioteki Qt do tymczasowego katalogu - - - - Core::Internal::ThemeEditor::ThemeEditorWidget - - Theme Editor - Edytor motywów - - - Filter: - Filtr: - - - - Core::Internal::ThemeSettings - - Rename... - Zmień nazwę... - - - Copy... - Kopiuj... - - - Delete - Usuń - - - Theme - Motyw - - - - Ios::Internal::IosPresetBuildStep - - Reset to Default - Przywróć domyślny - - - Command: - Komenda: - - - Arguments: - Argumenty: - - - - ProjectExplorer::DeploymentDataView - - Form - Formularz - - - Files to deploy: - Pliki do zainstalowania: - - - - QmakeAndroidSupport::Internal::QmakeAndroidBuildApkWidget - - Form - Formularz - - - Android - Android - - - Create Templates - Utwórz szablony - - - Input file for androiddeployqt: - Plik wejściowy dla androiddeployqt: - - - Additional Libraries - Dodatkowe biblioteki - - - List of extra libraries to include in Android package and load on startup. - Lista dodatkowych bibliotek dołączanych do pakietu Android i ładowanych przy uruchamianiu. - - - Select library to include in package. - Wybierz bibliotekę, którą dołączyć do pakietu. - - - Add... - Dodaj... - - - Remove currently selected library from list. - Usuń zaznaczoną bibliotekę z listy. - - - Remove - Usuń - - - Select additional libraries - Wybierz dodatkowe biblioteki - - - Libraries (*.so) - Biblioteki (*.so) - - - <b>Build Android APK</b> - + Edit Buddies + Modyfikuj skojarzone etykiety - - - SliderSpecifics - Value - Wartość + Edit Tab Order + Modyfikuj kolejność tabulacji - Current value of the Slider. The default value is 0.0. - Bieżąca wartość suwaka. Domyślną wartością jest 0.0. + Meta+Shift+H + Meta+Shift+H - Maximum value - Maksymalna wartość + Ctrl+H + Ctrl+H - Maximum value of the slider. The default value is 1.0. - Maksymalna wartość suwaka. Domyślną wartością jest 1.0. + Meta+L + Meta+L - Minimum value - Minimalna wartość + Ctrl+L + Ctrl+L - Minimum value of the slider. The default value is 0.0. - Minimalna wartość suwaka. Domyślną wartością jest 0.0. + Meta+Shift+G + Meta+Shift+G - Orientation - Orientacja + Ctrl+G + Ctrl+G - Layout orientation of the slider. - Orientacja pozioma / pionowa suwaka. + Meta+J + Meta+J - Step size - Rozmiar kroku + Ctrl+J + Ctrl+J - Indicates the slider step size. - Określa rozmiar kroku suwaka. + Alt+Shift+R + Alt+Shift+R - Active focus on press - Uaktywnij fokus po naciśnięciu + About Qt Designer Plugins... + Informacje o wtyczkach Qt Designera... - Indicates whether the slider should receive active focus when pressed. - Określa, czy suwak powinien otrzymać fokus po naciśnięciu. + Preview in + Podgląd w stylu - Tick marks enabled - Skala włączona + Designer + Designer - Indicates whether the slider should display tick marks at step intervals. - Określa, czy suwak powinien wyświetlać skalę z naniesionymi znacznikami kroków. + This file can only be edited in <b>Design</b> mode. + Ten plik może być modyfikowany jedynie w trybie <b>Design</b>. - Update value while dragging - Odświeżaj wartość podczaś przeciągania + Switch Mode + Przełącz tryb - Determines whether the current value should be updated while the user is moving the slider handle, or only when the button has been released. - Określa, czy bieżąca wartość powinna być odświeżana w trakcie przesuwania uchwytu suwaka, czy jedynie po zwolnieniu uchwytu. + The image could not be created: %1 + Nie można utworzyć pliku graficznego: %1 - SplitViewSpecifics + ProjectExplorer::JsonWizard - Split View - + "data" for a "Form" page needs to be unset or an empty object. + "data" na stronie "Form" powinna pozostać nieustawiona lub być pustym obiektem. - Orientation - Orientacja + Check whether a variable exists. Returns "true" if it does and an empty string if not. + Sprawdź, czy zmienna istnieje. Zwraca "prawdę" jeśli istnieje lub pusty ciąg tekstowy w przeciwnym razie. - Orientation of the split view. + Could not determine target path. "TargetPath" was not set on any page. - - - TabViewSpecifics - - Tab View - Widok z zakładkami - - Current index - Bieżący indeks - - - Frame visible - Ramka widoczna - - - Determines the visibility of the tab frame around contents. - Określa, czy widoczna jest ramka zakładki wokół zawartości. - - - Tabs visible - Zakładki widoczne + File Generation Failed + Błąd generowania pliku - Determines the visibility of the the tab bar. - Określa, czy widoczny jest pasek z zakładkami. + The wizard failed to generate files.<br>The error message was: "%1". + Kreator nie wygenerował plików.<br>Komunikat z błędem: "%1". - Tab position - Pozycja zakładek + Failed to Overwrite Files + Nie można nadpisać plików - Determines the position of the tabs. - Określa pozycję zakładek. + Failed to Format Files + Nie można sformatować plików - - - PuppetBuildProgressDialog - Build Progress - Postęp budowania + Failed to Write Files + Nie można zapisać plików - Build Adapter for the current Qt. Happens only once for every Qt installation. - Budowanie adaptera dla bieżącego Qt. Wymane tylko raz dla każdej instalacji Qt. + Failed to Post-Process Files + Nie można przetworzyć wygenerowanych plików - Use Fallback QML Emulation Layer + Failed to Polish Files - - - PuppetDialog - - Dialog - Dialog - - - - ButtonsBar - - Jump to previous event. - Skocz do poprzedniego zdarzenia. - - - Jump to next event. - Skocz do następnego zdarzenia. - - - Show zoom slider. - Pokaż suwak powiększania. - - - Filter Categories - Przefiltruj kategorie - - - Select range. - Wybierz zakres. - - - View event information on mouseover. - Pokazuj informacje o zdarzeniach po najechaniu myszą. - - - - CategoryLabel - - <bytecode> - <kod bajtowy> - - Collapse category - Zwiń kategorię - - - Expand category. - Rozwiń kategorię - - - - Qnx::Internal::QnxDeployQtLibrariesDialog - - Deploy Qt to BlackBerry Device - Instalacja Qt na urządzeniu BlackBerry + Failed to Open Files + Nie można otworzyć plików - Qt library to deploy: - Biblioteka Qt do zainstalowania: + "%1" does not exist in the file system. + Brak "%1" w systemie plików. - Deploy - Zainstaluj + No file to open found in "%1". + Brak plików do otwarcia w "%1". - Remote directory: - Zdalny katalog: + Failed to open project. + Nie można otworzyć projektu. - Close - Zamknij + Failed to open project in "%1". + Nie można otworzyć projektu w "%1". - Closing the dialog will stop the deployment. Are you sure you want to do this? - Zamknięcie dialogu spowoduje zatrzymanie instalacji. Czy zamknąć dialog? + Cannot Open Project + Nie można otworzyć projektu - Please input a remote directory to deploy to. - Wprowadź zdalny katalog w którym ma zostać dokonana instalacja. + When processing "%1":<br>%2 + W trakcie przetwarzania "%1":<br>%2 - Connection failed: %1 - Błąd połączenia: %1 + Failed to open "%1" as a project. + Nie można otworzyć "%1" jako projekt. - The remote directory "%1" already exists. Deploying to that directory will remove any files already present. - -Are you sure you want to continue? - Zdalny katalog "%1" już istnieje. Instalacja do tego katalogu spowoduje usunięcie całej jego zawartości. - -Czy kontynuować instalację? + Failed to open an editor for "%1". + Nie można otworzyć edytora dla "%1". - Checking existence of "%1" - Sprawdzanie obecności "%1" + When parsing fields of page '%1': %2 + W trakcie parsowania pól strony "%1": %2 - Removing "%1" - Usuwanie "%1" + "data" for a "File" page needs to be unset or an empty object. + "data" na stronie "File" powinna pozostać nieustawiona lub być pustym obiektem. - - - Qnx::Internal::QnxSettingsWidget - Form - Formularz + Error parsing "%1" in "Kits" page: %2 + Błąd parsowania "%1" na stronie "Zestawy narzędzi": %2 - Generate kits - Wygeneruj zestawy narzędzi + "data" must be a JSON object for "Kits" pages. + "data" musi być obiektem JSON dla stron "Kits". - Configuration Information: - Informacje o konfiguracji: + "Kits" page requires a "%1" set. + Strona "Zestawy narzędzi" wymaga ustawionego "%1". - Name: - Nazwa: + "data" must be empty or a JSON object for "Project" pages. + "data" na stronach "Project" powinna pozostać nieustawiona lub być obiektem JSON. - Version: - Wersja: + "data" for a "Summary" page needs to be unset or an empty object. + "data" na stronie "Summary" powinna pozostać nieustawiona lub być pustym obiektem. - Host: - Host: + "data" must be a JSON object for "VcsConfiguration" pages. + Do not translate "VcsConfiguration", because it is the id of a page. + "data" na stronach "VcsConfiguration" powinna być obiektem JSON. - Target: - Cel: + "VcsConfiguration" page requires a "vcsId" set. + Do not translate "VcsConfiguration", because it is the id of a page. + Strona "VcsConfiguration" wymaga ustawienia "vcsId". + + + EmacsKeys::Internal::EmacsKeysPlugin - Add - Dodaj + Delete Character + Usuń znak - Remove - Usuń + Kill Word + Skasuj słowo - Select QNX Environment File - Wybierz plik ze środowiskiem QNX + Kill Line + Skasuj linię - Warning - Ostrzeżenie + Insert New Line and Indent + Wstaw nową linię i dopasuj wcięcie - Configuration already exists or is invalid. - Konfiguracja już istnieje lub jest niepoprawna. + Go to File Start + Przejdź do początku pliku - Remove QNX Configuration - Usuń konfigurację QNX + Go to File End + Przejdź do końca pliku - Are you sure you want to remove: - %1? - Czy usunąć: -%1? + Go to Line Start + Przejdź do początku linii - - - QtSupport::Internal::CodeGenSettingsPageWidget - Form - Formularz + Go to Line End + Przejdź do końca linii - Embedding of the UI Class - Osadzanie klas UI + Go to Next Line + Przejdź do następnej linii - Aggregation as a pointer member - Agregacja poprzez wskaźnik do składnika + Go to Previous Line + Przejdź do poprzedniej linii - Aggregation - Agregacja + Go to Next Character + Przejdź do następnego znaku - Multiple inheritance - Dziedziczenie wielokrotne + Go to Previous Character + Przejdź do poprzedniego znaku - Code Generation - Generowanie kodu + Go to Next Word + Przejdź do następnego słowa - Support for changing languages at runtime - Obsługa zmian języków w trakcie wykonywania programu + Go to Previous Word + Przejdź do poprzedniego słowa - Use Qt module name in #include-directive - Używaj nazwy modułu Qt w dyrektywach #include + Mark + Wstaw znacznik - Add Qt version #ifdef for module names - Generuj odpowiednie dyrektywy #include w zależności od wersji Qt + Exchange Cursor and Mark + Wymień kursor i wstaw znacznik - - - RemoteLinux::Internal::RemoteLinuxCustomRunConfigurationWidget - Form - Formularz + Copy + Skopiuj - Local executable: - Lokalny plik wykonywalny: + Cut + Wytnij - Remote executable: - Zdalny plik wykonywalny: + Yank + - Arguments: - Argumenty: + Scroll Half Screen Down + Przewiń o pół ekranu w dół - Working directory: - Katalog roboczy: + Scroll Half Screen Up + Przewiń o pół ekranu w górę - ColorEditor + FakeVim - Solid Color - Kolor jednolity + Unknown option: %1 + Nieznana opcja: %1 - Gradient - Gradient + Argument must be positive: %1=%2 + Argument musi być dodatni: %1=%2 - Transparent - Przezroczystość + Use Vim-style Editing + Włącz edycję w stylu vim - - - AnchorRow - Target - Cel + Read .vimrc + Odczytuj .vimrc - - - StatesList - Collapse - Zwiń + Path to .vimrc + Ścieżka do .vimrc - Expand - Rozwiń + Mark "%1" not set. + Nie ustawiono znacznika "%1". - - - QmlDebug::QmlDebugConnectionPrivate - Error: (%1) %2 - %1=error code, %2=error message - Błąd: (%1) %2 + Recursive mapping + Mapowanie rekurencyjne - <device is gone> - <brak urządzenia> + %1%2% + %1%2% - Network connection dropped - Utracono połączenie sieciowe + %1All + %1Wszystkie - Resolving host - Rozwiązywanie adresu hosta. + Not implemented in FakeVim. + Nieobsługiwane w FakeVim. - Establishing network connection ... - Ustanawianie połączenia sieciowego... + Type Alt-V, Alt-V to quit FakeVim mode. + Naciśnij Alt-V, Alt-V aby wyjść z trybu FakeVim. - Network connection established - Ustanowiono połączenie sieciowe + Unknown option: + Nieznana opcja: - Network connection closing - Zamykanie połączenia sieciowego + Invalid argument: + Niepoprawny argument: - Socket state changed to BoundState. This should not happen! - + Trailing characters: + Białe znaki na końcu linii: - Socket state changed to ListeningState. This should not happen! + Move lines into themselves. - - - QmlDebug::QmlDebugConnection + + %n lines moved. + + %n linia przesunięta. + %n linie przesunięte. + %n linii przesuniętych. + + - Connecting to debug server at %1:%2 ... - Łączenie z serwerem debugowym %1: %2 ... + File "%1" exists (add ! to override) + Plik "%1" istnieje (dodaj ! aby go nadpisać) - - - QDockWidget - Float - + Cannot open file "%1" for writing + Nie można otworzyć pliku "%1" do zapisu - Undocks and re-attaches the dock widget - + "%1" %2 %3L, %4C written. + "%1" %2 zapisano: %3 linii, %4 znaków. - Close - Zamknij + [New] + [Nowy] - Closes the dock widget - Zamyka okno dokowalne + Cannot open file "%1" for reading + Nie można otworzyć pliku "%1" do odczytu - - - Utils::FileWizardPage - Location - Położenie + "%1" %2L, %3C + "%1" %2L, %3C + + + %n lines filtered. + + Przefiltrowano %n linię. + Przefiltrowano %n linie. + Przefiltrowano %n linii. + - - - Utils::MacroExpander - Infinite recursion error - Błąd: nieskończona pętla + Cannot open file %1 + Nie można otworzyć pliku %1 - %1: Full path including file name. - %1: Pełna ścieżka zawierająca nazwę pliku. + Not an editor command: %1 + %1 nie jest komendą edytora - %1: Full path excluding file name. - %1: Pełna ścieżka bez nazwy pliku. + Invalid regular expression: %1 + Niepoprawne wyrażenie regularne: %1 - %1: File name without path. - %1: Nazwa pliku bez ścieżki. + Pattern not found: %1 + Brak dopasowań do wzorca: %1 - %1: File base name without path and suffix. - %1: Bazowa nazwa pliku bez ścieżki i rozszerzenia. + Search hit BOTTOM, continuing at TOP. + Przeszukano do KOŃCA, wznowiono od POCZĄTKU. - Global variables - Zmienne globalne + Search hit TOP, continuing at BOTTOM. + Przeszukano do POCZĄTKU, wznowiono od KOŃCA. - - - Utils::GlobalMacroExpander - Access environment variables. - Dostęp do zmiennych środowiskowych. + Search hit BOTTOM without match for: %1 + Przeszukano do KOŃCA, brak wyników pasujących do: %1 - - - Android::AndroidBuildApkStep - Build Android APK - AndroidBuildApkStep default display name - + Search hit TOP without match for: %1 + Przeszukano do POCZĄTKU, brak wyników pasujących do: %1 + + + %n lines indented. + + Wyrównano %n linię. + Wyrównano %n linie. + Wyrównano %n linii. + + + + %n lines %1ed %2 time. + %1ed - crazy!!! + + + + + + + + %n lines yanked. + + + + + - Warning: Signing a debug package. - Ostrzeżenie: podpisywanie pakietu debugowego. + Already at oldest change. + Osiągnięto najstarszą zmianę. - Error - Błąd + Already at newest change. + Osiągnięto najnowszą zmianę. - Failed to run keytool. - + General + Ogólne - Invalid password. - Niepoprawne hasło. + FakeVim + FakeVim - Keystore - + Keep empty to use the default path, i.e. %USERPROFILE%\_vimrc on Windows, ~/.vimrc otherwise. + Pozostaw pustym aby użyć domyślnej ścieżki, tzn.%USERPROFILE%\_vimrc na Windows i ~/.vimrc w pozostałych przypadkach. - Keystore password: - + Default: %1 + Domyślnie: %1 - Certificate - Certyfikat + Ex Command Mapping + Mapowanie komend Ex - Certificate password (%1): - Hasło dla certyfikatu (%1): + Ex Trigger Expression + Wyzwalacz Ex - - - Android::AndroidBuildApkWidget - Keystore files (*.keystore *.jks) + Reset - Select Keystore File + Reset to default. - <b>Build Android APK</b> - + Regular expression: + Wyrażenie regularne: - - - Android::AndroidConfigurations - Android Debugger for %1 - Debugger Androida dla %1 + Ex Command + Komenda Ex - Android for %1 (GCC %2, Qt %3) - Android dla %1 (GCC %2, Qt %3) + Action + Akcja - - - Android::AndroidManager - Unknown Android version. API Level: %1 - + Command + Komenda - Error creating Android templates. - Błąd tworzenia szablonów Androida. + User Command Mapping + Mapa komend użytkownika - Cannot parse "%1". - Nie można sparsować "%1". + User command #%1 + Komenda użytkownika #%1 - Starting Android virtual device failed. - Nie można uruchomić wirtualnego urządzenia Android. + Alt+V,Alt+V + Alt+V,Alt+V - - - Android::Internal::AvdDialog - Cannot create a new AVD. No sufficiently recent Android SDK available. -Install an SDK of at least API version %1. - + Meta+Shift+V,Meta+Shift+V + Meta+Shift+V,Meta+Shift+V - Cannot create a AVD for ABI %1. Install an image for it. - + Execute User Action #%1 + Wykonaj akcję użytkownika #%1 - - - BareMetal - Example: - Przykład: + Alt+V,%1 + Alt+V,%1 - Enter your hostname like "localhost" or "192.0.2.1" or a command which must support GDB pipelining starting with a pipe symbol. - Wprowadź nazwę swojego hosta, np. "localhost", "192.0.2.1" lub komendę, która obsługuje potoki GDB, rozpoczynając symbolem potoku. + Meta+Shift+V,%1 + Meta+Shift+V,%1 - Enter the hardware reset command here.<br>The CPU should be halted after this command. - Wprowadź tutaj komendę resetującą sprzęt.<br>Procesor powinien się zatrzymać. + "%1" %2 %3L, %4C written + "%1" %2 zapisano: %3 linii, %4 znaków - Enter commands to reset the board, and write the nonvolatile memory. - + File not saved + Plik nie został zachowany - - - BareMetal::Internal::BareMetalDeviceConfigurationFactory - Bare Metal Device - Urządzenie Bare Metal + Saving succeeded + Zachowywanie poprawnie zakończone + + + %n files not saved + + Nie zachowano %n pliku + Nie zachowano %n plików + Nie zachowano %n plików + - BareMetal::Internal::BareMetalDeviceConfigurationWidget + Git::Internal::GitEditorWidget - GDB host: - Host GDB: + &Blame %1 + - GDB port: - Port GDB: + Blame &Parent Revision %1 + - Init commands: - Komendy inicjalizujące: + Chunk successfully staged + - Reset commands: - Komendy resetujące: + Stage Chunk... + - - - BareMetal::Internal::BareMetalDeviceConfigurationWizard - New Bare Metal Device Configuration Setup - Nowa konfiguracja urządzenia Bare Metal + Unstage Chunk... + - - - BareMetal::Internal::BareMetalGdbCommandsDeployStep - GDB commands - Komendy GDB: + Cherr&y-Pick Change %1 + - - - BareMetal::Internal::BareMetalRunConfiguration - %1 (via GDB server or hardware debugger) - %1 (poprzez serwer GDB lub debugger sprzętowy) + Re&vert Change %1 + - Run on GDB server or hardware debugger - Bare Metal run configuration default run name - Uruchom na serwerze GDB lub debuggerze sprzętowym + C&heckout Change %1 + - - - BareMetal::Internal::BareMetalRunConfigurationWidget - Executable: - Plik wykonywalny: + &Log for Change %1 + - Arguments: - Argumenty: + &Reset to Change %1 + - <default> - <domyślny> + &Hard + - Working directory: - Katalog roboczy: + &Mixed + - Unknown + &Soft - Bazaar::Internal::BazaarEditorWidget - - Annotate %1 - Dołącz adnotację do %1 - + Git::Internal::GitSubmitEditor - Annotate parent revision %1 - Dołącz adnotację do poprawki macierzystej "%1" + Refreshing Commit Data + - BinEditor::BinEditorWidget + Git::Internal::RemoteModel - Memory at 0x%1 - Pamięć w 0x%1 + Name + Nazwa - Decimal&nbsp;unsigned&nbsp;value: - Wartość&nbsp;dziesiętna&nbsp;bez&nbsp;znaku: + URL + URL + + + GlslEditor::Internal::GlslEditorPlugin - Decimal&nbsp;signed&nbsp;value: - Wartość&nbsp;dziesiętna&nbsp;ze&nbsp;znakiem: + GLSL + GLSL sub-menu in the Tools menu + GLSL + + + + Help::Internal::HelpWidget + + Go to Help Mode + Przejdź do trybu pomocy - Previous&nbsp;decimal&nbsp;unsigned&nbsp;value: - Poprzednia&nbsp;wartość&nbsp;dziesiętna&nbsp;bez&nbsp;znaku: + Home + Strona startowa - Previous&nbsp;decimal&nbsp;signed&nbsp;value: - Poprzednia&nbsp;wartość&nbsp;dziesiętna&nbsp;ze&nbsp;znakiem: + Back + Wstecz - %1-bit&nbsp;Integer&nbsp;Type - %1-bitowy&nbsp;typ&nbsp;całkowity + Forward + Do przodu - Little Endian - Little Endian + Add Bookmark + Dodaj zakładkę - Big Endian - Big Endian + Meta+M + Meta+M - Binary&nbsp;value: - Wartość&nbsp;binarna: + Ctrl+M + Ctrl+M - Octal&nbsp;value: - Wartość&nbsp;ósemkowa: + Increase Font Size + Zwiększ rozmiar czcionki - Previous&nbsp;binary&nbsp;value: - Poprzednia&nbsp;wartość&nbsp;binarna: + Decrease Font Size + Zmniejsz rozmiar czcionki - Previous&nbsp;octal&nbsp;value: - Poprzednia&nbsp;wartość&nbsp;ósemkowa: + Reset Font Size + Zresetuj rozmiar czcionki - <i>double</i>&nbsp;value: - Wartość&nbsp;<i>double</i>: + Meta+Shift+C + Meta+Shift+C - Previous <i>double</i>&nbsp;value: - Poprzednia&nbsp;wartość&nbsp;<i>double</i>: + Ctrl+Shift+C + Ctrl+Shift+C - <i>float</i>&nbsp;value: - Wartość&nbsp;<i>float</i>: + Meta+I + Meta+I - Previous <i>float</i>&nbsp;value: - Poprzednia&nbsp;wartość&nbsp;<i>float</i>: + Ctrl+Shift+I + Ctrl+Shift+I - Copying Failed - Błąd kopiowania + Activate Help Bookmarks View + Uaktywnij widok z zakładkami pomocy - You cannot copy more than 4 MB of binary data. - Nie można skopiować więcej niż 4 MB danych binarnych. + Alt+Meta+M + Alt+Meta+M - Copy Selection as ASCII Characters - Skopiuj jako znaki ASCII + Ctrl+Shift+B + Ctrl+Shift+B - Copy Selection as Hex Values - Skopiuj jako wartości szesnastkowe + Activate Help Search View + Uaktywnij widok z przeszukiwaniem pomocy - Set Data Breakpoint on Selection - Ustaw pułapkę warunkową na selekcji + Meta+/ + Meta+/ - Jump to Address in This Window - Skocz do adresu w tym oknie + Ctrl+Shift+/ + Ctrl+Shift+/ - Jump to Address in New Window - Skocz do adresu w nowym oknie + Activate Open Help Pages View + Uaktywnij widok ze stronami otwartej pomocy - Jump to Address 0x%1 in This Window - Skocz do adresu 0x%1 w tym oknie + Meta+O + Meta+O - Jump to Address 0x%1 in New Window - Skocz do adresu 0x%1 w nowym oknie + Ctrl+Shift+O + Ctrl+Shift+O - - - BinEditor::Internal::BinEditorDocument - The Binary Editor cannot open empty files. - Edytor plików binarnych nie może otwierac pustych plików. + Help + Pomoc - File Error - Błąd pliku + Help - %1 + Pomoc - %1 - Cannot open %1: %2 - Nie można otworzyć %1: %2 + Print Documentation + Wydruk dokumentacji - BinEditor::Internal::BinEditorPlugin - - &Undo - &Cofnij - + Help::Internal::QtWebKitHelpWidget - &Redo - &Przywróć + Open Link as New Page + Otwórz odsyłacz na nowej stronie - ClearCase::Internal::ClearCaseEditorWidget + Help::Internal::SearchTaskHandler - Annotate version "%1" - Dołącz adnotację do wersji "%1" + Get Help Online + Sięgnij po pomoc online - Core::BaseFileWizardFactory - - File Generation Failure - Błąd w trakcie generowania pliku - - - Existing files - Istniejące pliki - + Help::Internal::SearchSideBarItem - Failed to open an editor for "%1". - Nie można otworzyć edytora dla "%1". + Regenerate Index + Ponownie wygeneruj indeks + + + Help::Internal::TextBrowserHelpWidget - [read only] - [tylko do odczytu] + Open Link + Otwórz odsyłacz - [folder] - [katalog] + Copy Link + Skopiuj odsyłacz - [symbolic link] - [dowiązanie symboliczne] + Copy + Skopiuj - The project directory %1 contains files which cannot be overwritten: -%2. - Katalog projektu %1 zawiera pliki, które nie moga być nadpisane: -%2. + Reload + Przeładuj - Core::Internal::CorePlugin - - The current date (ISO). - Bieżąca data (ISO). - - - The current time (ISO). - Bieżący czas (ISO). - - - The current date (RFC2822). - Bieżąca data (RFC2822). - + Ios::Internal::IosAnalyzeSupport - The current time (RFC2822). - Bieżący czas (RFC2822). + Run ended with error. + Praca zakończona błędem. - The current date (Locale). - Bieżąca data (Ustawienia lokalne). + Run ended. + Praca zakończona. + + + Mercurial::Internal::MercurialEditorWidget - The current time (Locale). - Bieżący czas (Ustawienia lokalne). + &Annotate %1 + Dołącz &adnotację do %1 - The current date (QDate formatstring) - Bieżąca data (QDate formatstring). + Annotate &parent revision %1 + Dołącz adnotację do &poprawki macierzystej "%1" + + + Perforce::Internal::PerforceEditorWidget - The current time (QTime formatstring) - Bieżący czas (QTime formatstring). + Annotate change list "%1" + Dołącz adnotację do listy zmian "%1" - Core::PromptOverwriteDialog + ProjectExplorer::DeploymentDataModel - Overwrite Existing Files - Nadpisz istniejące pliki + Local File Path + Ścieżka do lokalnego pliku - The following files already exist in the folder -%1. -Would you like to overwrite them? - Następujące pliki istnieją już w katalogu -%1. -Czy nadpisać je? + Remote Directory + Zdalny katalog - Core::ReadOnlyFilesDialog + ProjectExplorer::JsonFieldPage - Mixed - Mieszane + Field is not an object. + Pole nie jest obiektem. - Make Writable - Uczyń plik zapisywalnym + Field has no name. + Pole nie posiada nazwy. - Open with VCS - Otwórz przy pomocy VCS + Label data is not an object. + Dane etykiety nie są obiektem. - Save As - Zachowaj jako + No text given for Label. + Brak tekstu na etykiecie. - Failed to %1 File - Horror!!! - Nie można %1 pliku + Spacer data is not an object. + Dane dystansu nie są obiektem. - %1 file %2 from version control system %3 failed. - Horror!!! + Line Edit Validator Expander - No Version Control System Found - Brak systemu kontroli wersji (VCS) - - - Cannot open file %1 from version control system. -No version control system found. - Nie można otworzyć pliku %1 z systemu kontroli wersji. -Brak systemu kontroli wersji. + The text edit input to fix up. + - Cannot Set Permissions - Nie można ustawić praw dostępu + Field "%1" has no type. + Pole "%1" nie posiada typu. - Cannot set permissions for %1 to writable. - Nie można uczynić pliku %1 zapisywalnym. + Field "%1" has unsupported type "%2". + Pole "%1" posiada nieobsługiwany type "%2". - Cannot Save File - Nie można zachować pliku + When parsing Field "%1": %2 + Podczas parsowania pola "%1": %2 - Cannot save file %1 - Nie można zachować pliku %1 + "factor" is no integer value. + "factor" nie jest liczbą całkowitą. - Canceled Changing Permissions - Anulowano zmianę praw dostępu + LineEdit data is not an object. + Dane LineEdit nie są obiektem. - Could Not Change Permissions on Some Files - Nie można zmienić praw dostępu niektórych plików + Invalid regular expression "%1" in "validator". + Niepoprawne wyrażenie regularne "%1" w polu "validator". - See details for a complete list of files. - W szczegółach pełna lista plików. + TextEdit data is not an object. + Dane TextEdit nie są obiektem. - Change &Permission - Zmień &prawa dostępu + PathChooser data is not an object. + Dane PatchChooser nie są obiektem. - The following files are not checked out yet. -Do you want to check them out now? + kind "%1" is not one of the supported "existingDirectory", "directory", "file", "saveFile", "existingCommand", "command", "any". - - - Core::DocumentModelPrivate - - <no document> - <brak dokumentu> - - No document is selected. - Brak zaznaczonego dokumenty. - - - - Core::Internal::EditorManagerPrivate - - Revert File to Saved - Odwróć zmiany w pliku + No "key" found in ComboBox items. + - Ctrl+W - Ctrl+W + ComboBox "index" is not an integer value. + - Alternative Close + ComboBox "disabledIndex" is not an integer value. - Ctrl+F4 - Ctrl+F4 + ComboBox "items" missing. + - Ctrl+Shift+W - Ctrl+Shift+W + ComboBox "items" is not a list. + - Alt+Tab - Alt+Tab + Internal Error: ComboBox items lists got mixed up. + - Ctrl+Tab - Ctrl+Tab + CheckBox data is not an object. + Dane CheckBox nie są obiektem. - Alt+Shift+Tab - Alt+Shift+Tab + CheckBox values for checked and unchecked state are identical. + Jednakowe wartości CheckBox dla stanów: zaznaczony i niezaznaczony. - Ctrl+Shift+Tab - Ctrl+Shift+Tab + No lists allowed inside ComboBox items list. + Listy są niedozwolone wewnątrz listy elementów ComboBox. - Ctrl+Alt+Left - Ctrl+Alt+Left + ComboBox data is not an object. + Dane ComboBox nie są obiektem. - Alt+Left - Alt+Left + Files data list entry is not an object. + - Ctrl+Alt+Right - Ctrl+Alt+Right + Source and target are both empty. + + + + ProjectExplorer::JsonProjectPage - Alt+Right - Alt+Right + untitled + File path suggestion for a new project. If you choose to translate it, make sure it is a valid path name without blanks and using only ascii chars. + nienazwany + + + ProjectExplorer::JsonSummaryPage - Split - Podziel + Failed to Commit to Version Control + - Meta+E,2 - Meta+E,2 + Error message from Version Control System: "%1". + Komunikat o błędzie z systemu kontroli wersji: "%1". - Ctrl+E,2 - Ctrl+E,2 + Failed to Add to Project + Nie można dodać do projektu - Split Side by Side - Podziel sąsiadująco + Failed to add subproject "%1" +to project "%2". + Nie można dodać podprojektu "%1" +do projektu "%2". - Meta+E,3 - Meta+E,3 + Failed to add one or more files to project +"%1" (%2). + Nie można dodać jednego lub więcej plików do projektu +"%1" (%2). + + + ProjectExplorer::JsonWizardFactory - Ctrl+E,3 - Ctrl+E,3 + Generator is not a object. + Generator nie jest obiektem. - Open in New Window - Otwórz w nowym oknie + Generator has no typeId set. + Brak ustawionego typeId w generatorze. - Meta+E,4 - Meta+E,4 + TypeId "%1" of generator is unknown. Supported typeIds are: "%2". + Nieznany typeid "%1" generatora. Obsługiwane typy: "%2". - Ctrl+E,4 - Ctrl+E,4 + Page is not an object. + Strona nie jest obiektem. - Remove Current Split - Usuń bieżący podział + Page has no typeId set. + Brak ustawionego typeId w stronie. - Meta+E,0 - Meta+E,0 + TypeId "%1" of page is unknown. Supported typeIds are: "%2". + Nieznany typeid "%1" strony. Obsługiwane typy: "%2". - Ctrl+E,0 - Ctrl+E,0 + Page with typeId "%1" has invalid "index". + Strona z typeid "%1" posiada niepoprawny "index". - Remove All Splits - Usuń wszystkie podziały + Path "%1" does not exist when checking Json wizard search paths. + + - Meta+E,1 - Meta+E,1 + Checking "%1" for %2. + + Sprawdzanie "%1" dla "%2". + - Ctrl+E,1 - Ctrl+E,1 + * Failed to parse "%1":%2:%3: %4 + + * Nie można sparsować "%1":%2:%3: %4 + - Go to Next Split or Window - Przejdź do kolejnego podzielonego okna + * Did not find a JSON object in "%1". + + * Nie odnaleziono obiektu JSON w "%1". + - Meta+E,o - Meta+E,o + * Configuration found and parsed. + + * Konfiguracja odnaleziona i przeparsowana. + - Ctrl+E,o - Ctrl+E,o + * Version %1 not supported. + + * Wersja %1 nieobsługiwana. + - Ad&vanced - Zaa&wansowane + The platform selected for the wizard. + Wybrana platforma dla kreatora. - Current document - Bieżący dokument + The features available to this wizard. + Funkcje dostępne w tym kreatorze. - X-coordinate of the current editor's upper left corner, relative to screen. - Współrzędna X lewego górnego rogu bieżącego edytora względem ekranu. + The plugins loaded. + Załadowane wtyczki. - Y-coordinate of the current editor's upper left corner, relative to screen. - Współrzędna Y lewego górnego rogu bieżącego edytora względem ekranu. + "kind" value "%1" is not "class" (deprecated), "file" or "project". + - <b>Warning:</b> This file was not opened in %1 yet. - <b>Ostrzeżenie:</b> Ten plik nie był jeszcze otwarty w %1. + Icon file "%1" not found. + Brak ikony "%1". - Open - Otwórz + Image file "%1" not found. + Brak pliku graficznego "%1". - <b>Warning:</b> You are changing a read-only file. - <b>Ostrzeżenie:</b> Zmieniasz plik, który jest tylko do odczytu. + Value for "options" is not a list. + Wartością "options" nie jest lista.. - Make Writable - Uczyń plik zapisywalnym + * Failed to create: %1 + + * Nie można utworzyć: %1 + - &Save %1 - &Zachowaj %1 + JsonWizard: "%1" not found + + JsonWizard: Nie znaleziono "%1" + - Save %1 &As... - Zachowaj %1 j&ako... + key not found. + brak klucza. - Revert %1 to Saved - Przywróc stan ostatnio zapisany w %1 + Expected an object or a list. + Oczekiwano obiektu lub listy. - Reload %1 - Przeładuj %1 + No id set. + Brak ustawionego identyfikatora. - Close %1 - Zamknij %1 + No category is set. + Brak ustawionej kategorii. - Close All Except %1 - Zamknij wszystko z wyjątkiem %1 + No displayName set. + Brak ustawionego pola displayName. - Close Others - Zamknij inne + No displayCategory set. + Brak ustawionego pola displayCategory. - Qt Creator - Qt Creator + No description set. + Brak ustawionego opisu. - Cannot Open File - Nie można otworzyć pliku + When parsing "generators": %1 + W trakcie parsowania "generators": %1 - Cannot open the file for editing with VCS. - Nie można otworzyć pliku do edycji przy pomocy VCS. + When parsing "pages": %1 + W trakcie parsowania "pages": %1 - File Error - Błąd pliku + List element of "options" is not an object. + Element lista w "options" nie jest obiektem. - Revert to Saved - Odwróć zmiany + No "key" given for entry in "options". + - You will lose your current changes if you proceed reverting %1. - Utracisz swoje bieżące zmiany w %1 jeśli potwierdzisz wykonanie tego polecenia. + When parsing "options": Key "%1" set more than once. + W trakcie parsowania "options": klucz "%1" ustawiony wielokrotnie. + + + ProjectExplorer::JsonWizardGenerator - Proceed - Wykonaj + %1 [folder] + %1 [katalog] - Cancel - Anuluj + %1 [symbolic link] + %1 [dowiązanie symboliczne] - - - Core::JsExpander - Error in "%1": %2 - Błąd w "%1": %2 + %1 [read only] + %1 [tylko do odczytu] - Cannot convert result of "%1" to string. - Nie można skonwertować rezultatu "%1" do ciągu znakowego. + The directory %1 contains files which cannot be overwritten: +%2. + Katalog %1 zawiera pliki które nie mogą być nadpisane: +%2. + + + ProjectExplorer::EnvironmentKitInformation - Evaluate simple Javascript statements. -The statements may not contain '{' nor '}' characters. + The environment setting value is invalid. - Core::PatchTool - - There is no patch-command configured in the general "Environment" settings. - Brak skonfigurowanej komendy "patch" w głównych ustawieniach środowiska. - + ProjectExplorer::Internal::KitEnvironmentConfigWidget - Executing in %1: %2 %3 - Wykonywanie w %1: %2 %3 + Change... + Zmień... - Unable to launch "%1": %2 - Nie można uruchomić "%1": %2 + Environment: + Środowisko: - A timeout occurred running "%1" - Przekroczony czas oczekiwania na odpowiedź od uruchomionego "%1" + Additional environment settings when using this kit. + Dodatkowe ustawienia środowiska w czasie używania tego zestawu narzędzi. - "%1" crashed. - "%1" zakończył pracę błędem. + No changes to apply. + Brak zmian do zastosowania. - "%1" failed (exit code %2). - '%1' zakończone błędem (kod wyjściowy %2). + Edit Environment Changes + - Core::Internal::ThemeEditor::ThemeSettingsItemDelegate - - <Unnamed> (Current) - - + ProjectExplorer::Project - (Current) - + Project + Projekt - Remove Variable Name - Usuń nazwę zmiennej + Project Name + Nazwa projektu + + + ProjectWizard - Add Variable Name... - Dodaj nazwę zmiennej... + The files are implicitly added to the projects: + Pliki, które zostały niejawnie dodane do projektów: - Add Variable Name - Dodaj nazwę zmiennej + <None> + <Brak> - Variable name: - Nazwa zmiennej: + <Implicitly Add> + <Niejawnie dodaj> - Core::Internal::ThemeEditor::ThemeSettingsTableModel + Utils::SettingsAccessor - Widget Style - Styl widżetów + No Valid Settings Found + Brak poprawnych ustawień - Colors - Kolory + <p>No valid settings file could be found.</p><p>All settings files found in directory "%1" were either too new or too old to be read.</p> + <p>Brak poprawnego pliku z ustawieniami.</p><p>Napotkane pliki z ustawieniami w katalogu "%1" były albo zbyt nowe, albo zbyt stare, aby je odczytać.</p> - Flags - Flagi + Using Old Settings + Użycie starych ustawień - Image Files - Pliki graficzne + <p>The versioned backup "%1" of the settings file is used, because the non-versioned file was created by an incompatible version of Qt Creator.</p><p>Settings changes made since the last time this version of Qt Creator was used are ignored, and changes made now will <b>not</b> be propagated to the newer version.</p> + <p>Użyta zostanie kopia zapasowa "%1" pliku z ustawieniami .user, ponieważ w międzyczasie oryginalny plik z ustawieniami został zachowany przez niekompatybilną wersję Qt Creatora.</p><p>Jeżeli nastąpią teraz zmiany w ustawieniach projektu to <b>nie</b> zostaną one zastosowane w nowszej wersji Qt Creatora.</p> + + + ProjectExplorer::EnvironmentIdAccessor - Role - + <p>No .user settings file created by this instance of Qt Creator was found.</p><p>Did you work with this project on another machine or using a different settings path before?</p><p>Do you still want to load the settings file "%1"?</p> + <p>Brak pliku .user z ustawieniami, utworzonego przez tego Qt Creatora.</p><p>Czy pracowałeś z tym projektem na innej maszynie lub używałeś innej ścieżki do ustawień?</p><p>Czy załadować plik "%1" z ustawieniami?</p> - Value - Wartość + Settings File for "%1" from a different Environment? + Plik z ustawieniami dla "%1" z innego środowiska? - QCoreApplication + ProjectExplorer::Target - unnamed - nienazwany + Target Settings + Katalog docelowy - %1 (built-in) - %1 (wbudowany) + Source directory + Katalog źródłowy - Core::Internal::ThemeSettingsWidget + ProjectExplorer::Task - Delete Theme - Usuń motyw + Qt Creator needs a compiler set up to build. Configure a compiler in the kit options. + Do budowy Qt Creator wymaga ustawionego kompilatora. Skonfiguruj go w opcjach zestawu narzędzi. - Are you sure you want to delete the theme '%1' permanently? - Czy na pewno usunąć motyw "%1" na stałe? + Qt Creator needs a build configuration set up to build. Configure a build configuration in the project settings. + Do budowy Qt Creator wymaga konfiguracji budowania. Dodaj konfigurację w opcjach zestawu narzędzi. + + + ProjectExplorer::XcodebuildParser - Delete - Usuń + Replacing signature + - Copy Theme - Skopiuj motyw + Xcodebuild failed. + + + + QmakeAndroidSupport::Internal::AndroidPackageInstallationFactory - Theme name: - Nazwa motywu: + Deploy to device + Zainstaluj na urządzeniu + + + QmakeAndroidSupport::Internal::AndroidPackageInstallationStep - Theme Changed - Motyw został zmieniony + Copy application data + Skopiuj dane aplikacji - The theme "%1" was modified, do you want to save the changes? - Motyw "%1" został zmodyfikowany, czy zachować zmiany? + Removing directory %1 + Usuwanie katalogu %1 + + + QmakeAndroidSupport::Internal::AndroidPackageInstallationStepWidget - Discard - Porzuć + <b>Make install</b> + - Rename Theme - Zmień nazwę motywu + Make install + - Core::Internal::VariableChooserPrivate + QmakeAndroidSupport::Internal::NoApplicationProFilePage - Insert variable - Wstaw zmienną + No application .pro file found in this project. + Brak pliku .pro aplikacji w tym projekcie. + + + No Application .pro File + Brak pliku .pro aplikacji - Core::Internal::VariableTreeView + QmakeAndroidSupport::Internal::ChooseProFilePage - Insert unexpanded value - Wstaw zwiniętą wartość + Select the .pro file for which you want to create the Android template files. + Wybierz plik .pro dla którego utworzyć pliki szablonu Android. - Insert "%1" - Wstaw "%1" + .pro file: + Plik .pro: - Insert expanded value - Wstaw rozwiniętą wartość + Select a .pro File + Wybierz plik .pro - Core::Internal::WindowSupport + QmakeAndroidSupport::Internal::ChooseDirectoryPage - Exit Full Screen - Wyłącz tryb pełnoekranowy + The Android package source directory cannot be the same as the project directory. + Katalog ze źródłami pakietu Android nie może być taki sam jak katalog projetku. - Enter Full Screen - Włącz tryb pełnoekranowy + Android package source directory: + Katalog źródłowy pakietu Android: - - - CppEditor::Internal::CppEditorWidget - &Refactor - &Refaktoryzacja + It is highly recommended if you are planning to extend the Java part of your Qt application. + Jest to rekomendowane w przypadku rozszerzania kodu Java w aplikacji Qt. - - - CppEditor::Internal::CppEditorOutline - Sort Alphabetically - Posortuj alfabetycznie + Select the Android package source directory. + +The files in the Android package source directory are copied to the build directory's Android directory and the default files are overwritten. + Wybierz katalog źródłowy pakietu Android. + +Pliki z katalogu źródłowego pakietu Android są kopiowane do katalogu budowania i domyślne pliki są nadpisywane. - - - CppSourceProcessor - %1: No such file or directory - %1: Brak pliku lub katalogu + The Android template files will be created in the ANDROID_PACKAGE_SOURCE_DIR set in the .pro file. + Pliki z szablonami Android będą utworzone w ANDROID_PACKAGE_SOURCE_DIR, który jest ustawiony w pliku .pro. - %1: Could not get file contents - %1: Nie można odczytać zawartości pliku + Copy the Gradle files to Android directory + Skopiuj pliki Gradle do katalogu Android - Cvs::Internal::CvsEditorWidget + QmakeAndroidSupport::Internal::CreateAndroidManifestWizard - Annotate revision "%1" - Dołącz adnotację do poprawki "%1" + Create Android Template Files Wizard + - - - Debugger::Internal::LocalsAndExpressionsOptionsPage - Use Debugging Helper - Używaj asystenta debuggera + Overwrite %1 file + Nadpisz plik %1 - The debugging helpers are used to produce a nice display of objects of certain types like QString or std::map in the &quot;Locals and Expressions&quot; view. - Asystenci debuggera pomagają lepiej wizualizować obiekty pewnych typów, jak np. QString lib std::map w widoku &quot;Zmienne lokalne i wyrażenia&quot;. + Overwrite existing "%1"? + Nadpisać istniejący "%1"? - Use code model - Używaj modelu kodu + File Creation Error + Błąd tworzenia pliku - Makes use of Qt Creator's code model to find out if a variable has already been assigned a value at the point the debugger interrupts. - Korzysta z modelu kodu Qt Creatora w celu zbadania czy wartość została już przypisana do zmiennej w chwili przerwania debuggera. + Could not copy file "%1" to "%2". + Nie można skopiować pliku "%1" do "%2". - Displays names of QThread based threads. - Wyświetla nazwy wątków dziedziczących z QThread. + Project File not Updated + Nieaktualny plik projektu - Display thread names - Wyświetlaj nazwy wątków + Could not update the .pro file %1. + Nie można uaktualnić pliku .pro %1. + + + QmakeAndroidSupport::Internal::QmakeAndroidBuildApkStepFactory - Shows "std::" prefix for types from the standard library. - Pokazuje przedrostek "std::" dla typów z biblioteki standardowej. + Build Android APK + Zbuduj Android APK + + + QmakeAndroidSupport::Internal::QmakeAndroidBuildApkStep - Show "std::" namespace for types - Pokazuj przestrzeń nazw "std::" dla typów + Found old folder "android" in source directory. Qt 5.2 does not use that folder by default. + Odnaleziono folder "android" w katalogu źródłowym. Qt 5.2 domyślnie nie używa tego katalogu. - Shows Qt namespace prefix for Qt types. This is only relevant if Qt was configured with '-qtnamespace'. - Pokazuje przestrzeń nazw Qt dla typów Qt. Ma to zastosowanie jedynie dla Qt skonfigurowanego z "-qtnamespace". + No application .pro file found, not building an APK. + Brak pliku .pro aplikacji, budowanie APK wstrzymane. - Qt's namespace for types - Pokazuj przestrzeń nazw Qt dla typów + Starting: "%1" %2 + Uruchamianie "%1" %2 + + + QmakeAndroidSupport::Internal::QmakeAndroidRunConfiguration - <unlimited> - <nieograniczona> + The .pro file "%1" is currently being parsed. + Trwa parsowanie pliku .pro "%1". + + + QmlDesigner::CrumbleBar - Maximum string length: - Maksymalna długość ciągu tekstowego: + Save the changes to preview them correctly. + Zachowaj zmiany aby utworzyć poprawny podgląd. - Display string length: - Wyświetlaj długości ciągów tekstowych: + Always save when leaving subcomponent + Zawsze zachowuj przy opuszczaniu podkomponentu - Debugger::Internal::DebuggerPlugin + NavigatorTreeModel - Debug - Debug + Warning + Ostrzeżenie - Option "%1" is missing the parameter. - Brak parametru w opcji "%1". + Reparenting the component %1 here will cause the component %2 to be deleted. Do you want to proceed? + Przeniesienie komponentu %1 tutaj spowoduje usunięcie komponentu %2. Czy kontynuować? + + + QmlDesigner::AddTabDesignerAction - Only one executable allowed. - Dozwolony jest tylko jeden plik wykonywalny. + Naming Error + Błąd nazwy - The parameter "%1" of option "%2" does not match the pattern <handle>:<pid>. - Parametr "%1" opcji "%2" nie pasuje do wzoru <uchwyt>:<pid>. + Component already exists. + Komponent już istnieje. + + + NodeInstanceServerProxy - Invalid debugger option: %1 - Niepoprawna opcja debuggera: %1 + Cannot Connect to QML Emulation Layer (QML Puppet) + Nie można podłączyć emulatora QML (QML Puppet) - Process %1 - Proces %1 + The executable of the QML emulation layer (QML Puppet) may not be responding. Switching to another kit might help. + Emulator QML (QML Puppet) pozostaje bez odpowiedzi. Pomocne może być przełączenie się na inny zestaw narzędzi. + + + PuppetCreator - Symbol - Symbol + QML Emulation Layer (QML Puppet) Building was Unsuccessful + Nie można zbudować emulatora QML (QML Puppet) - Address - Adres + The QML emulation layer (QML Puppet) cannot be built. The fallback emulation layer, which does not support all features, will be used. + - Code - Kod + Qt Version is not supported + Wersja Qt nie jest obsługiwana - Section - Sekcja + The QML emulation layer (QML Puppet) cannot be built because the Qt version is too old or it cannot run natively on your computer. The fallback emulation layer, which does not support all features, will be used. + - Name - Nazwa + Kit is invalid + Niepoprawny zestaw narzędzi - Symbols in "%1" - Symbole w "%1" + The QML emulation layer (QML Puppet) cannot be built because the kit is not configured correctly. For example the compiler can be misconfigured. Fix the kit configuration and restart Qt Creator. Otherwise, the fallback emulation layer, which does not support all features, will be used. + + + + QmlJSEditor::Internal::QmlJSEditorWidget - From - Od + Show Qt Quick ToolBar + Pokaż pasek narzędzi Qt Quick - To - Do + Code Model Not Available + Model kodu niedostępny - Flags - Flagi + Code model not available. + Model kodu niedostępny - Sections in "%1" - Sekcje w "%1" + Code Model of %1 + Model kodu "%1" - Some breakpoints cannot be handled by the debugger languages currently active, and will be ignored. -Affected are breakpoints %1 - Niektóre pułapki nie mogą być obsłużone przez aktywne języki debuggera i zostaną zignorowane. -Dotyczy to następujących pułapek: %1 + Refactoring + Refaktoryzacja - Not enough free ports for QML debugging. - Niewystarczająca ilość wolnych portów do debugowania QML. + This file should only be edited in <b>Design</b> mode. + Ten plik powinien być modyfikowany jedynie w trybie <b>Design</b>. - Unable to create a debugger engine of the type "%1" - Nie można utworzyć silnika debuggera typu "%1" + Switch Mode + Przełącz tryb - Debugger::Internal::DebuggerToolTipManager - - %1 (Previous) - %1 (poprzedni) - + QmlJSEditor::Internal::QmlJSHoverHandler - %1 (Restored - %1 (Przywrócony) + Library at %1 + Biblioteka w %1 - No valid expression - Brak poprawnego wyrażenia + Dumped plugins successfully. + Wtyczki poprawnie zrzucone. - Expression too complex - Wyrażenie zbyt skomplikowane + Read typeinfo files successfully. + Pliki typeinfo poprawnie odczytane. - FormEditorW - - Widget box - Panel widżetów - - - Object Inspector - Hierarchia obiektów - + Qnx::Internal::QnxConfiguration - Property Editor - Edytor właściwości + The following errors occurred while activating the QNX configuration: + Wystąpiły następujące błędy podczas aktywowania konfiguracji QNX: - Signals && Slots Editor - Edytor sygnałów / slotów + Cannot Set Up QNX Configuration + Nie można ustawić konfiguracji QNX - Action Editor - Edytor akcji + QCC for %1 (armv7) + QCC dla %1 (armv7) - Widget Box - Panel widżetów + QCC for %1 (x86) + QCC dla %1 (x86) - Edit Widgets - Modyfikuj widżety + Debugger for %1 (armv7) + Debugger dla %1 (armv7) - F3 - F3 + Debugger for %1 (x86) + Debugger dla %1 (x86) - Edit Signals/Slots - Modyfikuj sygnały / sloty + Kit for %1 (armv7) + Zestaw narzędzi dla %1 (armv7) - F4 - F4 + Kit for %1 (x86) + Zestaw narzędzi dla %1 (x86) - Edit Buddies - Modyfikuj skojarzone etykiety + - No GCC compiler found. + - Brak kompilatora GCC. - Edit Tab Order - Modyfikuj kolejność tabulacji + - No GDB debugger found for armvle7. + - Brak debuggera GDB dla urządzenia armvle7. - Meta+Shift+H - Meta+Shift+H + - No GDB debugger found for x86. + - Brak debuggera dla urządzenia x86. + + + QNX - Ctrl+H - Ctrl+H + QNX + QNX + + + Qnx::Internal::QnxPlugin - Meta+L - Meta+L + Attach to remote QNX application... + Dołącz do zdalnej aplikacji QNX... + + + Qnx::Internal::QnxSettingsPage - Ctrl+L - Ctrl+L + QNX + QNX + + + RemoteLinux::Internal::RemoteLinuxCustomRunConfiguration - Meta+Shift+G - Meta+Shift+G + The remote executable must be set in order to run a custom remote run configuration. + W celu uruchomienia własnej, zdalnej konfiguracji uruchamiania, należy ustawić zdalny plik wykonywalny. - Ctrl+G - Ctrl+G + Run "%1" on Linux Device + Uruchom "%1" na urządzeniu linuksowym - Meta+J - Meta+J + Custom Executable (on Remote Generic Linux Host) + Własny plik wykonywalny (na zdalnym ogólnym hoście linuksowym) + + + ResourceEditor::Internal::PrefixLangDialog - Ctrl+J - Ctrl+J + Prefix: + Przedrostek: - Alt+Shift+R - Alt+Shift+R + Language: + Język: + + + Subversion::Internal::SubversionEditorWidget - About Qt Designer Plugins... - Informacje o wtyczkach Qt Designera... + Annotate revision "%1" + Dołącz adnotację do poprawki "%1" + + + TaskList::Internal::TaskListPlugin - Preview in - Podgląd w stylu + Cannot open task file %1: %2 + Nie można otworzyć pliku z zadaniem %1: %2 - Designer - Designer + File Error + Błąd pliku - This file can only be edited in <b>Design</b> mode. - Ten plik może być modyfikowany jedynie w trybie <b>Design</b>. + My Tasks + Moje zadania + + + TextEditor::Internal::MultiDefinitionDownloader - Switch Mode - Przełącz tryb + Downloading Highlighting Definitions + Pobieranie definicji podświetleń - The image could not be created: %1 - Nie można utworzyć pliku graficznego: %1 + Error downloading selected definition(s). + Błąd pobierania wybranych definicji. - - - ProjectExplorer::JsonWizard - "data" for a "Form" page needs to be unset or an empty object. - "data" na stronie "Form" powinna pozostać nieustawiona lub być pustym obiektem. + Error downloading one or more definitions. + Błąd pobierania jednej lub wielu definicji. - Check whether a variable exists. Returns "true" if it does and an empty string if not. - Sprawdź, czy zmienna istnieje. Zwraca "prawdę" jeśli istnieje lub pusty ciąg tekstowy w przeciwnym razie. + Please check the directory's access rights. + Sprawdź prawa dostępu do katalogu. - Could not determine target path. "TargetPath" was not set on any page. - + Download Error + Błąd pobierania + + + TextEditor::TextDocument - File Generation Failed - Błąd generowania pliku + Opening File + Otwieranie pliku + + + TextEditor::TextEditorWidget - The wizard failed to generate files.<br>The error message was: "%1". - Kreator nie wygenerował plików.<br>Komunikat z błędem: "%1". + CTRL+D + Ctrl+D - Failed to Overwrite Files - Nie można nadpisać plików + Print Document + Wydruk dokumentu - Failed to Format Files - Nie można sformatować plików + File Error + Błąd pliku - Failed to Write Files - Nie można zapisać plików + The text is too large to be displayed (%1 MB). + Tekst jest zbyt obszerny aby mógł zostać wyświetlony (%1 MB). - Failed to Post-Process Files - Nie można przetworzyć wygenerowanych plików + <b>Error:</b> Could not decode "%1" with "%2"-encoding. Editing not possible. + <b>Błąd:</b> Nie można odkodować "%1" używając kodowania "%2". Edycja nie jest możliwa. - Failed to Open Files - Nie można otworzyć plików + Select Encoding + Wybierz kodowanie - When processing "%1":<br>%2 - W trakcie przetwarzania "%1":<br>%2 + Delete UTF-8 BOM on Save + Usuwaj UTF-8 BOM przy zachowywaniu - Failed to open "%1" as a project. - Nie można otworzyć "%1" jako projekt. + Add UTF-8 BOM on Save + Dodawaj UTF-8 BOM przy zachowywaniu - Failed to open an editor for "%1". - Nie można otworzyć edytora dla "%1". + Line: %1, Col: %2 + Linia: %1, kolumna: %2 - When parsing fields of page '%1': %2 - W trakcie parsowania pól strony "%1": %2 + Line: 9999, Col: 999 + Linia: 9999, kolumna: 999 + + + VcsBase::VcsOutputWindow - "data" for a "File" page needs to be unset or an empty object. - "data" na stronie "File" powinna pozostać nieustawiona lub być pustym obiektem. + Open "%1" + Otwórz "%1" - "data" must be a JSON object for "Kits" pages. - "data" musi być obiektem JSON dla stron "Kits". + Clear + Wyczyść - "Kits" page requires a "projectFilePath" set. - Strona "Kits" wymaga ustawienia "projectFilePath". + Version Control + System kontroli wersji - "data" for a "Project" page needs to be unset or an empty object. - "data" na stronie "Project" powinna pozostać nieustawiona lub być pustym obiektem. + Executing: %1 %2 + Wykonywanie: %1 %2 - "data" for a "Summary" page needs to be unset or an empty object. - "data" na stronie "Summary" powinna pozostać nieustawiona lub być pustym obiektem. + Executing in %1: %2 %3 + Wykonywanie w %1: %2 %3 - DiffEditor::DiffEditorDocument + WinRt::Internal::WinRtDebugSupport - Could not parse patch file "%1". The content is not of unified diff format. - Nie można sparsować pliku z łatami "%1". Zawartość nie jest w formacie ujednoliconym (unified diff). + The WinRT debugging helper is missing from your Qt Creator installation. It was assumed to be located at %1 + - - - DiffEditor::UnifiedDiffEditorWidget - No controller - Brak kontrolera + Cannot start the WinRT Runner Tool. + - Send Chunk to CodePaster... - Wyślij fragment do Codepaster... + Cannot establish connection to the WinRT debugging helper. + - Apply Chunk... - Zastosuj fragment... + Cannot extract the PID from the WinRT debugging helper. (output: %1) + - Revert Chunk... - Zastosuj odwrotny fragment... + Cannot create an appropriate run control for the current run configuration. + + + + WinRt::Internal::WinRtRunnerHelper - Unable to Paste - Nie można wkleić + The current kit has no Qt version. + Brak wersji Qt w bieżącym zestawie narzędzi. - Code pasting services are not available. - Usługi wklejania kodu są niedostępne. + Cannot find winrtrunner.exe in "%1". + Brak winrtrunner.exe w "%1". - Revert Chunk - Odwróć zmiany we fragmencie + Cannot determine the executable file path for "%1". + Nie można określić ścieżki do pliku wykonywalnego dla "%1". - Apply Chunk - Zastosuj fragment + Error while executing the WinRT Runner Tool: %1 + + + + + Help::Internal::IndexWindow - Would you like to revert the chunk? - Czy zastosować odwrotny fragment? + &Look for: + Wy&szukaj: - Would you like to apply the chunk? - Czy zastosować fragment? + Open Link + Otwórz odsyłacz - No difference - Brak różnic + Open Link as New Page + Otwórz odsyłacz na nowej stronie - EmacsKeys::Internal::EmacsKeysPlugin - - Delete Character - Usuń znak - + RowLabel - Kill Word - Skasuj słowo + [unknown] + [nieznany] + + + QbsProjectManager::Internal::CustomQbsPropertiesDialog - Kill Line - Skasuj linię + Custom Properties + Własne właściwości - Insert New Line and Indent - Wstaw nową linię i dopasuj wcięcie + &Add + &Dodaj - Go to File Start - Przejdź do początku pliku + &Remove + &Usuń - Go to File End - Przejdź do końca pliku + Key + Klucz - Go to Line Start - Przejdź do początku linii + Value + Wartość + + + QbsProjectManager::Internal::QbsProfilesSettingsWidget - Go to Line End - Przejdź do końca linii + Form + Formularz - Go to Next Line - Przejdź do następnej linii + Kit: + Zestaw narzędzi: - Go to Previous Line - Przejdź do poprzedniej linii + Associated profile: + Skojarzony profil: - Go to Next Character - Przejdź do następnego znaku + Profile properties: + Właściwości profilu: - Go to Previous Character - Przejdź do poprzedniego znaku + E&xpand All + &Rozwiń wszystko - Go to Next Word - Przejdź do następnego słowa + &Collapse All + &Zwiń wszystko - Go to Previous Word - Przejdź do poprzedniego słowa + &Edit... + &Modyfikuj... + + + Todo::Internal::TodoProjectSettingsWidget - Mark - Wstaw znacznik + Excluded Files + Wyłączone pliki - Exchange Cursor and Mark - Wymień kursor i wstaw znacznik + Regular expressions for file paths to be excluded from scanning. + Wyrażenie regularne dla plików, które mają być wyłączone ze skanowania. - Copy - Skopiuj + Add + Dodaj - Cut - Wytnij + Remove + Usuń - Yank + To-Do Settings - - Scroll Half Screen Down - Przewiń o pół ekranu w dół - - - Scroll Half Screen Up - Przewiń o pół ekranu w górę - - FakeVim + LayoutPoperties - Unknown option: %1 - Nieznana opcja: %1 + Alignment + Wyrównanie - Argument must be positive: %1=%2 - Argument musi być dodatni: %1=%2 + Alignment of an item within the cells it occupies. + - Use Vim-style Editing - Włącz edycję w stylu vim + Fill layout + - Read .vimrc - Odczytuj .vimrc + The item will expand as much as possible while respecting the given constraints if true. + - Path to .vimrc - Ścieżka do .vimrc + Fill width + - Mark "%1" not set. - Nie ustawiono znacznika "%1". + Fill height + - Recursive mapping - Mapowanie rekurencyjne + Preferred size + Preferowany rozmiar - %1%2% - %1%2% + Preferred height of an item in a layout. If the preferred height is -1, it will be ignored. + - %1All - %1Wszystkie + Minimum size + Minimalny rozmiar - Not implemented in FakeVim. - Nieobsługiwane w FakeVim. + Minimum size of an item in a layout. + Minimalny rozmiar elementu w rozmieszczeniu. - Type Alt-V, Alt-V to quit FakeVim mode. - Naciśnij Alt-V, Alt-V aby wyjść z trybu FakeVim. + Maximum size + Maksymalny rozmiar - Unknown option: - Nieznana opcja: + Maximum size of an item in a layout. + Maksymalny rozmiar elementu w rozmieszczeniu. - Invalid argument: - Niepoprawny argument: + Row span + - Trailing characters: - Białe znaki na końcu linii: + Row span of an item in a GridLayout. + - Move lines into themselves. + Column span - - %n lines moved. - - %n linia przesunięta. - %n linie przesunięte. - %n linii przesuniętych. - - - File "%1" exists (add ! to override) - Plik "%1" istnieje (dodaj ! aby go nadpisać) + Column span of an item in a GridLayout. + + + + Utils::ShellCommand - Cannot open file "%1" for writing - Nie można otworzyć pliku "%1" do zapisu + UNKNOWN + NIEZNANY - "%1" %2 %3L, %4C written. - "%1" %2 zapisano: %3 linii, %4 znaków. + Unknown + Nieznany - [New] - [Nowy] + Error: Executable timed out after %1 s. + Błąd: plik wykonywalny nie odpowiada po upływie %1 s. + + + Utils::ShellCommandPage - Cannot open file "%1" for reading - Nie można otworzyć pliku "%1" do odczytu + Command started... + Komenda uruchomiona... - "%1" %2L, %3C - "%1" %2L, %3C - - - %n lines filtered. - - Przefiltrowano %n linię. - Przefiltrowano %n linie. - Przefiltrowano %n linii. - + Run Command + Uruchom komendę - Cannot open file %1 - Nie można otworzyć pliku %1 + No job running, please abort. + Brak uruchomionych zadań, przerwij. - Not an editor command: %1 - %1 nie jest komendą edytora + Succeeded. + Poprawnie zakończone. - Invalid regular expression: %1 - Niepoprawne wyrażenie regularne: %1 + Failed. + Niepoprawnie zakończone. + + + Analyzer::AnalyzerManager - Pattern not found: %1 - Brak dopasowań do wzorca: %1 + Analyze + Analiza - Search hit BOTTOM, continuing at TOP. - Przeszukano do KOŃCA, wznowiono od POCZĄTKU. + &Analyze + &Analiza - Search hit TOP, continuing at BOTTOM. - Przeszukano do POCZĄTKU, wznowiono od KOŃCA. + Start + Uruchom - Search hit BOTTOM without match for: %1 - Przeszukano do KOŃCA, brak wyników pasujących do: %1 + Stop + Zatrzymaj - Search hit TOP without match for: %1 - Przeszukano do POCZĄTKU, brak wyników pasujących do: %1 - - - %n lines indented. - - Wyrównano %n linię. - Wyrównano %n linie. - Wyrównano %n linii. - - - - %n lines %1ed %2 time. - %1ed - crazy!!! - - - - - - - - %n lines yanked. - - - - - + Analyzer Toolbar + Pasek narzędzi analizatora - Already at oldest change. - Osiągnięto najstarszą zmianę. + An analysis is still in progress. + Nadal trwa analiza. - Already at newest change. - Osiągnięto najnowszą zmianę. + No analyzer tool selected. + Brak wybranego narzędzia analizy. - General - Ogólne + Debug + Debug - FakeVim - FakeVim + Release + Release - Keep empty to use the default path, i.e. %USERPROFILE%\_vimrc on Windows, ~/.vimrc otherwise. - Pozostaw pustym aby użyć domyślnej ścieżki, tzn.%USERPROFILE%\_vimrc na Windows i ~/.vimrc w pozostałych przypadkach. + Tool + Narzędzie - Default: %1 - Domyślnie: %1 + Run %1 in %2 Mode? + Uruchomić %1 w trybie %2? - Ex Command Mapping - Mapowanie komend Ex + <html><head/><body><p>You are trying to run the tool "%1" on an application in %2 mode. The tool is designed to be used in %3 mode.</p><p>Debug and Release mode run-time characteristics differ significantly, analytical findings for one mode may or may not be relevant for the other.</p><p>Do you want to continue and run the tool in %2 mode?</p></body></html> + <html><head/><body><p>Próba uruchomienia narzędzia "%1" dla aplikacji w trybie %2. Narzędzie nie jest zaprojektowane do użycia w trybie %3.</p><p>Charakterystyki uruchamiania w trybach Debug i Release znacznie się różnią, analityczne dane z jednego trybu nie będą odpowiadały drugiemu trybowi.</p><p>Czy kontynuować i uruchomić je w trybie %2?</p></body></html> + + + Analyzer::DetailedErrorView - Ex Trigger Expression - Wyzwalacz Ex + Copy + Skopiuj + + + Android::Internal::AndroidDeviceModelDelegate - Regular expression: - Wyrażenie regularne: + OpenGL enabled + OpenGL aktywny - Ex Command - Komenda Ex + OpenGL disabled + OpenGL nieaktywny + + + BareMetal::Internal::BareMetalCustomRunConfigWidget - Action - Akcja + Executable: + Plik wykonywalny: - Command - Komenda + Arguments: + Argumenty: - User Command Mapping - Mapa komend użytkownika + Work directory: + Katalog roboczy: + + + BareMetal::Internal::BareMetalCustomRunConfiguration - User command #%1 - Komenda użytkownika #%1 + The remote executable must be set in order to run a custom remote run configuration. + W celu uruchomienia własnej, zdalnej konfiguracji uruchamiania, należy ustawić zdalny plik wykonywalny. - Meta+V,Meta+V - Meta+V,Meta+V + Custom Executable (on GDB server or hardware debugger) + Własny plik wykonywalny (na serwerze GDB lub debuggerze sprzętowym) + + + BareMetal::Internal::BareMetalDebugSupport - Alt+V,Alt+V - Alt+V,Alt+V + Debugging failed. + Błąd debugowania. - Execute User Action #%1 - Wykonaj akcję użytkownika #%1 + Initial setup failed: %1 + Błąd wstępnej konfiguracji: %1 - Meta+V,%1 - Meta+V,%1 + Starting GDB server... + Uruchamianie serwera GDB... + + + BareMetal::Internal::DefaultGdbServerProviderFactory - Alt+V,%1 - Alt+V,%1 + Default + Domyślny + + + BareMetal::Internal::DefaultGdbServerProviderConfigWidget - "%1" %2 %3L, %4C written - "%1" %2 zapisano: %3 linii, %4 znaków + Host: + Host: - File not saved - Plik nie został zachowany + Init commands: + Komendy inicjalizujące: - Saving succeeded - Zachowywanie poprawnie zakończone - - - %n files not saved - - Nie zachowano %n pliku - Nie zachowano %n plików - Nie zachowano %n plików - + Reset commands: + Komendy resetujące: - Git::Internal::GitEditorWidget + BareMetal::GdbServerProvider - Blame %1 - Blame %1 + Clone of %1 + Klon %1 + + + BareMetal::Internal::GdbServerProviderConfigWidget - Blame Parent Revision %1 + Enter the name of the GDB server provider. - Reset - Zresetuj - - - All changes in working directory will be discarded. Are you sure? - Wszystkie zmiany w katalogu roboczym zostaną utracone. Czy kontynuować? + Name: + Nazwa: - Chunk successfully staged + Choose the desired startup mode of the GDB server provider. - Stage Chunk... - + Startup mode: + Tryb startowy: - Unstage Chunk... + No Startup - Cherry-Pick Change %1 + Startup in TCP/IP Mode - Revert Change %1 - Odwróć zmianę %1 + Startup in Pipe Mode + + + + BareMetal::Internal::HostWidget - Checkout Change %1 + Enter TCP/IP hostname of the GDB server provider, like "localhost" or "192.0.2.1". - Hard Reset to Change %1 + Enter TCP/IP port which will be listened by the GDB server provider. - Git::Internal::GitSubmitEditor + BareMetal::Internal::GdbServerProviderChooser - Refreshing Commit Data - + Manage... + Zarządzaj... + + + None + Brak - Git::Internal::RemoteModel + BareMetal::Internal::GdbServerProviderModel Name Nazwa - URL - URL + Type + Typ + + + Duplicate Providers Detected + + + + The following providers were already configured:<br>&nbsp;%1<br>They were not configured again. + - GlslEditor::Internal::GlslEditorPlugin + BareMetal::Internal::GdbServerProvidersSettingsPage - GLSL - GLSL sub-menu in the Tools menu - GLSL + Add + Dodaj + + + Clone + Sklonuj + + + Remove + Usuń + + + GDB Server Providers + - Help::Internal::HelpWidget + BareMetal::Internal::OpenOcdGdbServerProviderFactory - Go to Help Mode - Przejdź do trybu pomocy + OpenOCD + OpenOCD + + + BareMetal::Internal::OpenOcdGdbServerProviderConfigWidget - Home - Strona startowa + Host: + Host: - Back - Wstecz + Executable file: + Plik wykonywalny: - Forward - Do przodu + Root scripts directory: + Korzeń katalogu ze skryptami: - Add Bookmark - Dodaj zakładkę + Configuration file: + Plik z konfiguracją: - Meta+M - Meta+M + Additional arguments: + Dodatkowe argumenty: - Ctrl+M - Ctrl+M + Init commands: + Komendy inicjalizujące: - Increase Font Size - Zwiększ rozmiar czcionki + Reset commands: + Komendy resetujące: + + + BareMetal::Internal::StLinkUtilGdbServerProviderFactory - Decrease Font Size - Zmniejsz rozmiar czcionki + ST-LINK Utility + Narzędzie ST-LINK + + + BareMetal::Internal::StLinkUtilGdbServerProviderConfigWidget - Reset Font Size - Zresetuj rozmiar czcionki + Host: + Host: - Meta+Shift+C - Meta+Shift+C + Executable file: + Plik wykonywalny: - Ctrl+Shift+C - Ctrl+Shift+C + Specify the verbosity level (0..99). + Poziom gadatliwości (0..99). - Meta+I - Meta+I + Verbosity level: + Poziom gadatliwości: - Ctrl+Shift+I - Ctrl+Shift+I + Continue listening for connections after disconnect. + Kontynuuj nasłuchiwanie nowych połączeń po rozłączeniu. - Activate Help Bookmarks View - Uaktywnij widok z zakładkami pomocy + Extended mode: + Tryb rozszerzony: - Meta+B - Meta+B + Reset board on connection. + - Ctrl+Shift+B - Ctrl+Shift+B + Reset on connection: + Zresetuj po połączeniu: - Activate Help Search View - Uaktywnij widok z przeszukiwaniem pomocy + Transport layer type. + - Meta+/ - Meta+/ + Version: + Wersja: - Ctrl+Shift+/ - Ctrl+Shift+/ + Init commands: + Komendy inicjalizujące: - Activate Open Help Pages View - Uaktywnij widok ze stronami otwartej pomocy + Reset commands: + Komendy resetujące: - Meta+O - Meta+O + ST-LINK/V1 + ST-LINK/V1 - Ctrl+Shift+O - Ctrl+Shift+O + ST-LINK/V2 + ST-LINK/V2 + + + CMakeProjectManager::Internal::CMakeKitConfigWidget - Help - Pomoc + CMake Tool: + Narzędzie CMake: - Help - %1 - Pomoc - %1 + The CMake Tool to use when building a project with CMake.<br>This setting is ignored when using other build systems. + Narzędzie CMake używane podczas budowania projektu CMake.<br>Ustawienie to jest ignorowane podczas budowania za pomocą innych systemów budowania. - Print Documentation - Wydruk dokumentacji + <No CMake Tool available> + <Brak narzędzia CMake> - Help::Internal::QtWebKitHelpWidget + CMakeProjectManager::CMakeKitInformation - Open Link as New Page - Otwórz odsyłacz na nowej stronie + CMake + CMake - - - Help::Internal::SearchTaskHandler - Get Help Online - Sięgnij po pomoc online + Unconfigured + Nieskonfigurowane - Help::Internal::SearchSideBarItem + CMakeProjectManager::Internal::NoCMakePage - Regenerate Index - Ponownie wygeneruj indeks + Check CMake Tools + Sprawdź narzędzia CMake - - - Help::Internal::TextBrowserHelpWidget - Open Link - Otwórz odsyłacz + There are CMake Tools registered. + Istnieją zarejestrowane narzędzia CMake. - Copy Link - Skopiuj odsyłacz + Qt Creator has no CMake Tools that are required for CMake projects. Please configure at least one. + Qt Creator nie posiada skonfigurowanych narzędzi CMake. Skonfiguruj przynajmniej jedno. + + + CMakeProjectManager::CMakeSettingsPage - Copy - Skopiuj + (Default) + what default??? + (domyślny) - Reload - Przeładuj + Name + Nazwa - - - Ios::Internal::IosAnalyzeSupport - Run ended with error. - Praca zakończona błędem. + Location + Położenie - Run ended. - Praca zakończona. + Auto-detected + Automatycznie wykryte - - - Mercurial::Internal::MercurialEditorWidget - Annotate %1 - Dołącz adnotację do %1 + Manual + Ustawione ręcznie - Annotate parent revision %1 - Dołącz adnotację do poprawki macierzystej "%1" + Name: + Nazwa: - - - Perforce::Internal::PerforceEditorWidget - Annotate change list "%1" - Dołącz adnotację do listy zmian "%1" + Path: + Ścieżka: - ProjectExplorer::DeploymentDataModel + CMakeProjectManager::Internal::CMakeToolConfigWidget - Local File Path - Ścieżka do lokalnego pliku + Add + Dodaj - Remote Directory - Zdalny katalog + Clone + Sklonuj - - - ProjectExplorer::LineEditValidator - Line Edit Validator Expander - + Remove + Usuń - The text edit input to fix up. + Make Default + Ustaw jako domyślny + + + Set as the default CMake Tool to use when creating a new Kit, or no value is set. - - - ProjectExplorer::JsonFieldPage - Field is not an object. - Pole nie jest obiektem. + Prefer Ninja generator (CMake 2.8.9 or higher required) + Preferuj generator Ninja (wymagany CMake 2.8.9 lub nowszy) - Field has no name. - Pole nie posiada nazwy. + Clone of %1 + Klon %1 - Field '%1' has no type. - Pole "%1" nie posiada typu. + New CMake + Nowy CMake + + + + CMakeProjectManager::CMakeToolManager + + CMake at %1 + CMake w %1 - Field '%1' has unsupported type '%2'. - Pole "%1" posiada nieobsługiwany typ "%2". + System CMake at %1 + Systemowy CMake w %1 + + + Core::Internal::EnvironmentChangesDialog - When parsing Field '%1': %2 - W trakcie parsowania pola "%1": %2 + Edit Environment Changes + - Label data is not an object. - Dane etykiety nie są obiektem. + Change system environment by assigning one environment variable per line: + - No text given for Label. - Brak tekstu na etykiecie. + PATH=C:\dev\bin;${PATH} + PATH=C:\dev\bin;${PATH} - Spacer data is not an object. - Dane dystansu nie są obiektem. + PATH=/opt/bin:${PATH} + PATH=/opt/bin:${PATH} + + + Core::Internal::ShortcutSettingsWidget - 'factor' is no integer value. - "factor" nie jest liczbą całkowitą. + Keyboard Shortcuts + Skróty klawiszowe - LineEdit data is not an object. - Dane LineEdit nie są obiektem. + Shortcut + Skrót - Invalid regular expression "%1" in "validator". - Niepoprawne wyrażenie regularne "%1" w polu "validator". + Enter key sequence as text + Wprowadź sekwencję klawiszy jako tekst - TextEdit data is not an object. - Dane TextEdit nie są obiektem. + Key sequence: + Sekwencja klawiszy: - PathChooser data is not an object. - Dane PatchChooser nie są obiektem. + Use "Cmd", "Opt", "Ctrl", and "Shift" for modifier keys. Use "Escape", "Backspace", "Delete", "Insert", "Home", and so on, for special keys. Combine individual keys with "+", and combine multiple shortcuts to a shortcut sequence with ",". For example, if the user must hold the Ctrl and Shift modifier keys while pressing Escape, and then release and press A, enter "Ctrl+Shift+Escape,A". + - kind '%1' is not one of the supported 'existingDirectory', 'directory', 'file', 'saveFile', 'existingCommand', 'command', 'any'. + Use "Ctrl", "Alt", "Meta", and "Shift" for modifier keys. Use "Escape", "Backspace", "Delete", "Insert", "Home", and so on, for special keys. Combine individual keys with "+", and combine multiple shortcuts to a shortcut sequence with ",". For example, if the user must hold the Ctrl and Shift modifier keys while pressing Escape, and then release and press A, enter "Ctrl+Shift+Escape,A". - CheckBox data is not an object. - Dane CheckBox nie są obiektem. + Reset + Reset - CheckBox values for checked and unchecked state are identical. - Jednakowe wartości CheckBox dla stanów: zaznaczony i niezaznaczony. + Reset to default. + Przywróć domyślny. - No lists allowed inside ComboBox items list. - Listy są niedozwolone wewnątrz listy elementów ComboBox. + Key sequence has potential conflicts. <a href="#conflicts">Show.</a> + Sekwencja klawiszy potencjalnie w konflikcie. <a href="#conflicts">Pokaż.</a> - No 'key' found in ComboBox items. - Brak pola "key" w elementach ComboBox. + Invalid key sequence. + Niepoprawna sekwencja klawiszy. - ComboBox data is not an object. - Dane ComboBox nie są obiektem. + Import Keyboard Mapping Scheme + Zaimportuj schemat mapowania klawiatury - ComboBox 'index' is not a integer value. - "index" w ComboBox nie jest liczbą całkowitą. + Keyboard Mapping Scheme (*.kms) + Schemat mapowania klawiatury (*.kms) - ComboBox 'disabledIndex' is not a integer value. - "disabledIndex" w ComboBox nie jest liczbą całkowitą. + Export Keyboard Mapping Scheme + Wyeksportuj schemat mapowania klawiatury + + + Core::Internal::CurrentDocumentFind - ComboBox 'items' missing. - Brak "items" w ComboBox. + %1 occurrences replaced. + Zastąpiono %1 wystąpień. + + + Core::IWizardFactory - ComboBox 'items' is not a list. - "items" w ComboBox nie jest listą. + Factory with id="%1" already registered. Deleting. + Fabryka o identyfikatorze "%1" już zarejestrowana. Nowa fabryka zostanie usunięta. - Files data list entry is not an object. - + Reload All Wizards + Przeładuj wszystkie kreatory - No source given for file in file list. - Brak źródła pliku w liście plików. + Inspect Wizard State + - ProjectExplorer::JsonProjectPage + Core::Internal::ExternalToolsFilter - untitled - File path suggestion for a new project. If you choose to translate it, make sure it is a valid path name without blanks and using only ascii chars. - nienazwany + Run External Tool + Uruchom zewnętrzne narzędzie - ProjectExplorer::JsonSummaryPage + Core::Internal::LocatorSettingsPage - Failed to Commit to Version Control - + Name + Nazwa - Error message from Version Control System: '%1'. - Komunikat o błędzie z systemu kontroli wersji: "%1". + Prefix + Przedrostek - Failed to Add to Project - Nie można dodać do projektu + Default + Domyślny - Failed to add subproject "%1" -to project "%2". - Nie można dodać podprojektu "%1" -do projektu "%2". + Built-in + Wbudowany - Failed to add one or more files to project -"%1" (%2). - Nie można dodać jednego lub więcej plików do projektu -"%1" (%2). + Custom + Własny - ProjectExplorer::JsonWizardFactory + QuickFixFactory - Generator is not a object. - Generator nie jest obiektem. + Create Getter and Setter Member Functions + Dodaj metodę zwracającą (getter) i ustawiającą (setter) - Generator has no typeId set. - Brak ustawionego typeId w generatorze. + Create Getter Member Function + Dodaj metodę zwracającą (getter) - TypeId "%1" of generator is unknown. Supported typeIds are: "%2". - Nieznany typeid "%1" generatora. Obsługiwane typy: "%2". + Create Setter Member Function + Dodaj metodę ustawiającą (setter) - Page is not a object. - Strona nie jest obiektem. + Convert to Stack Variable + Przekształć do zmiennej na stosie - Page has no typeId set. - Brak ustawionego typeId w stronie. + Convert to Pointer + Przekształć do wskaźnika - TypeId "%1" of page is unknown. Supported typeIds are: "%2". - Nieznany typeid "%1" strony. Obsługiwane typy: "%2". + Generate Missing Q_PROPERTY Members... + Wygeneruj brakujące składniki Q_PROPERTY... + + + CppTools::CppEditorOutline - Page with typeId "%1" has invalid "index". - Strona z typeid "%1" posiada niepoprawny "index". + Sort Alphabetically + Posortuj alfabetycznie + + + CppTools::Internal::CppIncludesFilter - Path "%1" does not exist when checking Json wizard search paths. - - + All Included C/C++ Files + Wszystkie dołączone pliki C/C++ + + + Debugger::Internal::DebuggerEnginePrivate - Checking "%1" for %2. - - + Debugged executable + Debugowany program - * Failed to parse "%1":%2:%3: %4 - - * Nie można sparsować "%1":%2:%3: %4 - + Attempting to interrupt. + Próba przerwania. + + + Debugger::Internal::DebuggerEngine - * Did not find a JSON object in "%1". - - * Nie odnaleziono obiektu JSON w "%1". - + Launching Debugger + Uruchamianie debuggera - * Configuration found and parsed. - - * Konfiguracja odnaleziona i przeparsowana. - + Setup failed. + Niepoprawna konfiguracja. - * Version %1 not supported. - - * Wersja %1 nieobsługiwana. - + Loading finished. + Zakończono ładowanie. - * Wizard is disabled. - - * Kreator jest niedostępny. - + Run failed. + Nieudane uruchomienie. - * Failed to create: %1 - - * Nie można utworzyć: %1 - + Running. + Uruchomiono. - JsonWizard: "%1" not found - - JsonWizard: Nie znaleziono "%1" - + Stopped. + Zatrzymano. - Expected an object or a list. - Oczekiwano obiektu lub listy. + Run requested... + Zażądano uruchomienia... - "kind" value "%1" is not "class", "file" or "project". - + The %1 process terminated. + Proces %1 zakończył pracę. - No id set. - Brak ustawionego identyfikatora. + The %2 process terminated unexpectedly (exit code %1). + Proces %2 nieoczekiwanie zakończył pracę (kod %1). - No category is set. - Brak ustawionej kategorii. + Unexpected %1 Exit + Nieoczekiwane zakończenie %1 - Icon "%1" not found. - Brak ikony "%1". + Taking notice of pid %1 + Zwracanie uwagi na pid %1 - No displayName set. - Brak ustawionego pola displayName. + This debugger cannot handle user input. + Ten debugger nie obsługuje poleceń wejściowych użytkownika. - No displayCategory set. - Brak ustawionego pola displayCategory. + Stopped: "%1". + Zatrzymano: "%1". - No description set. - Brak ustawionego opisu. + Stopped: %1 (Signal %2). + Zatrzymano: %1 (sygnał %2). - When parsing "generators": %1 - W trakcie parsowania "generators": %1 + Stopped in thread %1 by: %2. + Zatrzymano w wątku %1 przez %2. - When parsing "pages": %1 - W trakcie parsowania "pages": %1 + Interrupted. + Przerwano. - List element of "options" is not an object. - Element lista w "options" nie jest obiektem. + <Unknown> + name + <Nieznana> - No "key" given for entry in "options". - + <Unknown> + meaning + <Nieznane> - When parsing "options": Key "%1" set more than once. - W trakcie parsowania "options": klucz "%1" ustawiony wielokrotnie. + <p>The inferior stopped because it received a signal from the operating system.<p><table><tr><td>Signal name : </td><td>%1</td></tr><tr><td>Signal meaning : </td><td>%2</td></tr></table> + <p>Podproces zatrzymany, ponieważ otrzymał on sygnał z systemu operacyjnego.<p><table><tr><td>Nazwa sygnału: </td><td>%1</td></tr><tr><td>Znaczenie sygnału: </td><td>%2</td></tr></table> - Value for "options" is not a list - Wartością "options" nie jest lista + Signal Received + Otrzymano sygnał - - - ProjectExplorer::JsonWizardGenerator - %1 [folder] - %1 [katalog] + <p>The inferior stopped because it triggered an exception.<p>%1 + <p>Podproces zatrzymany z powodu rzuconego wyjątku.<p>%1 - %1 [symbolic link] - %1 [dowiązanie symboliczne] + Exception Triggered + Rzucono wyjątek - %1 [read only] - %1 [tylko do odczytu] + Found. + Znaleziono. - The directory %1 contains files which cannot be overwritten: -%2. - Katalog %1 zawiera pliki które nie mogą być nadpisane: -%2. + Not found. + Nie znaleziono. - - - ProjectExplorer::EnvironmentKitInformation - The environment setting value is invalid. - + Section %1: %2 + Sekcja %1: %2 - - - ProjectExplorer::Internal::KitEnvironmentConfigWidget - Change ... - Zmień ... + Warning + Ostrzeżenie - Environment: - Środowisko: + This does not seem to be a "Debug" build. +Setting breakpoints by file name and line number may fail. + To nie jest wersja debugowa. +Ustawianie pułapek w liniach plików może się nie udać. - Additional environment settings when using this kit. - Dodatkowe ustawienia środowiska w czasie używania tego zestawu narzędzi. + Run to Address 0x%1 + Uruchom do adresu 0x%1 - No Changes to apply - Brak zmian do zastosowania + Run to Line %1 + Uruchom do linii %1 - Edit Environment Changes - + Jump to Address 0x%1 + Skocz do adresu 0x%1 + + + Jump to Line %1 + Skocz do linii %1 - ProjectExplorer::Project + Debugger::DebuggerOptionsPage - Project - Projekt + Not recognized + Nierozpoznany - Project Name - Nazwa projektu + Name + Nazwa - - - ProjectExplorer::ProjectExplorerPluginPrivate - Build Without Dependencies - Zbuduj bez zależności + Location + Położenie - Rebuild Without Dependencies - Przebuduj bez zależności + Type + Typ - Clean Without Dependencies - Wyczyść bez zależności + Auto-detected + Automatycznie wykryte - Build - Zbuduj + Manual + Ustawione ręcznie - Rebuild - Przebuduj + Unknown + Nieznany - Clean - Wyczyść + Name: + Nazwa: - The project %1 is not configured, skipping it. - Projekt %1 nie jest skonfigurowany, zostaje pominięty. + Path: + Ścieżka: - No project loaded. - Nie załadowano projektu. + Type: + Typ: - Currently building the active project. - Trwa budowanie aktywnego projektu. + ABIs: + ABIs: - The project %1 is not configured. - Projekt %1 nie jest skonfigurowany. + Version: + Wersja: - Project has no build settings. - Brak ustawień budowania w projekcie. + 64-bit version + w wersji 64 bitowej - Building "%1" is disabled: %2<br> - Budowanie "%1" jest wyłączone: %2<br> + 32-bit version + w wersji 32 bitowej - No project loaded - Nie załadowano projektu + <html><body><p>Specify the path to the <a href="%1">Windows Console Debugger executable</a> (%2) here.</p></body></html> + Label text for path configuration. %2 is "x-bit version". + <html><body><p>Podaj ścieżkę do <a href="%1">pliku wykonywalnego Windows Console Debugger</a> (%2).</p></body></html> - A build is in progress - Trwa budowanie + Add + Dodaj - Project has no build settings - Brak ustawień budowania w projekcie + Clone + Sklonuj - Building "%1" is disabled: %2 - Budowanie "%1" jest wyłączone: %2 + Remove + Usuń - Run %1 - Uruchom %1 + Clone of %1 + Klon %1 - - - ProjectWizard - The files are implicitly added to the projects: - Pliki, które zostały niejawnie dodane do projektów: + New Debugger + Nowy debugger - <None> - <Brak> + Debuggers + Debuggery + + + DeviceProcessesDialog - <Implicitly Add> - <Niejawnie dodaj> + &Attach to Process + &Dołącz do procesu - Utils::SettingsAccessor + Debugger::Internal::RunConfigWidget - No Valid Settings Found - Brak poprawnych ustawień + Debugger Settings + Ustawienia debuggera - <p>No valid settings file could be found.</p><p>All settings files found in directory "%1" were either too new or too old to be read.</p> - <p>Brak poprawnego pliku z ustawieniami.</p><p>Napotkane pliki z ustawieniami w katalogu "%1" były albo zbyt nowe, albo zbyt stare, aby je odczytać.</p> + Enable C++ + Uaktywnij C++ - Using Old Settings - Użycie starych ustawień + Enable QML + Uaktywnij QML - <p>The versioned backup "%1" of the settings file is used, because the non-versioned file was created by an incompatible version of Qt Creator.</p><p>Settings changes made since the last time this version of Qt Creator was used are ignored, and changes made now will <b>not</b> be propagated to the newer version.</p> - <p>Użyta zostanie kopia zapasowa "%1" pliku z ustawieniami .user, ponieważ w międzyczasie oryginalny plik z ustawieniami został zachowany przez niekompatybilną wersję Qt Creatora.</p><p>Jeżeli nastąpią teraz zmiany w ustawieniach projektu to <b>nie</b> zostaną one zastosowane w nowszej wersji Qt Creatora.</p> + Debug port: + Port debugowania: - - - ProjectExplorer::EnvironmentIdAccessor - <p>No .user settings file created by this instance of Qt Creator was found.</p><p>Did you work with this project on another machine or using a different settings path before?</p><p>Do you still want to load the settings file "%1"?</p> - <p>Brak pliku .user z ustawieniami, utworzonego przez tego Qt Creatora.</p><p>Czy pracowałeś z tym projektem na innej maszynie lub używałeś innej ścieżki do ustawień?</p><p>Czy załadować plik "%1" z ustawieniami?</p> + <a href="qthelp://org.qt-project.qtcreator/doc/creator-debugging-qml.html">What are the prerequisites?</a> + <a href="qthelp://org.qt-project.qtcreator/doc/creator-debugging-qml.html">Jakie są wymagania?</a> - Settings File for "%1" from a different Environment? - Plik z ustawieniami dla "%1" z innego środowiska? + Enable Debugging of Subprocesses + Uaktywnij debugowanie podprocesów - ProjectExplorer::Target - - Target Settings - Katalog docelowy - + Debugger::Internal::Terminal - Source directory - Katalog źródłowy + Terminal: Cannot open /dev/ptmx: %1 + Terminal: Nie można otworzyć /dev/ptmx: %1 - - - ProjectExplorer::Task - Qt Creator needs a compiler set up to build. Configure a compiler in the kit options. - Do budowy Qt Creator wymaga ustawionego kompilatora. Skonfiguruj go w opcjach zestawu narzędzi. + Terminal: ptsname failed: %1 + Terminal: ptsname zakończył pracę błędem: %1 - Qt Creator needs a build configuration set up to build. Configure a build configuration in the project settings. - Do budowy Qt Creator wymaga konfiguracji budowania. Dodaj konfigurację w opcjach zestawu narzędzi. + Terminal: Error: %1 + Terminal: Błąd: %1 - - - ProjectExplorer::XcodebuildParser - Replacing signature + Terminal: Slave is no character device. - Xcodebuild failed. - + Terminal: grantpt failed: %1 + Terminal: grantpt zakończył pracę błędem: %1 - - - QbsProjectManager::Internal::QbsRootProjectNode - Qbs files - Pliki qbs + Terminal: unlock failed: %1 + Terminal: unlock zakończył pracę błędem: %1 - - - QmakeAndroidSupport::Internal::AndroidPackageInstallationFactory - Deploy to device - Zainstaluj na urządzeniu + Terminal: Read failed: %1 + Terminal: błąd odczytu: %1 - QmakeAndroidSupport::Internal::AndroidPackageInstallationStep + DiffEditor::Internal::DiffEditor - Copy application data - Skopiuj dane aplikacji + Context lines: + Linie z kontekstem: - Removing directory %1 - Usuwanie katalogu %1 + Ignore Whitespace + Ignoruj białe znaki - - - QmakeAndroidSupport::Internal::AndroidPackageInstallationStepWidget - <b>Make install</b> - + Reload Diff + Przeładuj różnice - Make install - + [%1] vs. [%2] %3 + [%1] vs [%2] %3 - - - QmakeAndroidSupport::Internal::NoApplicationProFilePage - No application .pro file found in this project. - Brak pliku .pro aplikacji w tym projekcie. + %1 vs. %2 + %1 vs %2 - No Application .pro File - Brak pliku .pro aplikacji + [%1] %2 vs. [%3] %4 + [%1] %2 vs [%3] %4 + + + Hide Change Description + Ukryj opis zmiany + + + Show Change Description + Pokaż opis zmiany - QmakeAndroidSupport::Internal::ChooseProFilePage + DiffEditor::Internal::DiffEditorDocument - Select the .pro file for which you want to create the Android template files. - Wybierz plik .pro dla którego utworzyć pliki szablonu Android. + Could not parse patch file "%1". The content is not of unified diff format. + Nie można sparsować pliku z łatami "%1". Zawartość nie jest w formacie ujednoliconym (unified diff). + + + DiffEditor::UnifiedView - .pro file: - Plik .pro: + Switch to Unified Diff Editor + Przełącz do edytora różnic wyświetlającego zawartość w formacie ujednoliconym (unified diff) + + + DiffEditor::Internal::UnifiedView - Select a .pro File - Wybierz plik .pro + Waiting for data... + Oczekiwanie na dane... - QmakeAndroidSupport::Internal::ChooseDirectoryPage + DiffEditor::SideBySideView - The Android package source directory cannot be the same as the project directory. - Katalog ze źródłami pakietu Android nie może być taki sam jak katalog projetku. + Switch to Side By Side Diff Editor + Przełącz do edytora różnic wyświetlającego zawartość sąsiadująco + + + DiffEditor::Internal::SideBySideView - Android package source directory: - Katalog źródłowy pakietu Android: + Synchronize Horizontal Scroll Bars + Synchronizuj poziome paski przesuwania - Select the Android package source directory. - -The files in the Android package source directory are copied to the build directory's Android directory and the default files are overwritten. - Wybierz katalog źródłowy pakietu Android. - -Pliki z katalogu źródłowego pakietu Android są kopiowane do katalogu budowania i domyślne pliki są nadpisywane. + Waiting for data... + Oczekiwanie na dane... + + + + DiffEditor::Internal::SideBySideDiffEditorWidget + + Skipped %n lines... + + Opuszczono %n linię... + Opuszczono %n linie... + Opuszczono %n linii... + - The Android template files will be created in the ANDROID_PACKAGE_SOURCE_DIR set in the .pro file. - Pliki z szablonami Android będą utworzone w ANDROID_PACKAGE_SOURCE_DIR, który jest ustawiony w pliku .pro. + Binary files differ + Pliki binarne różnią się - Copy the Gradle files to Android directory - Skopiuj pliki Gradle do katalogu Android + Skipped unknown number of lines... + Pominięto nieznaną ilość linii... - It is highly recommended if you are plannig to extend the Java part of your Qt application. - Jest to rekomendowane w przypadku planowania rozszerzania częsci Java aplikacji Qt. + No difference + Brak różnic - - - QmakeAndroidSupport::Internal::CreateAndroidManifestWizard - Create Android Template Files Wizard - + Send Chunk to CodePaster... + Wyślij fragment do Codepaster... - Overwrite %1 file - Nadpisz plik %1 + Apply Chunk... + Zastosuj fragment... - Overwrite existing "%1"? - Nadpisać istniejący "%1"? + Revert Chunk... + Zastosuj odwrotny fragment... - File Creation Error - Błąd tworzenia pliku + Revert Chunk + Odwróć zmiany we fragmencie - Could not copy file "%1" to "%2". - Nie można skopiować pliku "%1" do "%2". + Apply Chunk + Zastosuj fragment - Project File not Updated - Nieaktualny plik projektu + Would you like to revert the chunk? + Czy zastosować odwrotny fragment? - Could not update the .pro file %1. - Nie można uaktualnić pliku .pro %1. + Would you like to apply the chunk? + Czy zastosować fragment? - QmakeAndroidSupport::Internal::QmakeAndroidBuildApkStepFactory + DiffEditor::Internal::SideDiffEditorWidget - Build Android APK - + [%1] %2 + [%1] %2 - QmakeAndroidSupport::Internal::QmakeAndroidBuildApkStep + DiffEditor::Internal::UnifiedDiffEditorWidget - Found old folder "android" in source directory. Qt 5.2 does not use that folder by default. - Odnaleziono folder "android" w katalogu źródłowym. Qt 5.2 domyślnie nie używa tego katalogu. + No document + Brak dokumentu - Internal Error: Could not find .pro file. - Błąd wewnętrzny: brak pliku .pro. + Send Chunk to CodePaster... + Wyślij fragment do Codepaster... - Internal Error: Unknown Android deployment JSON file location. - + Apply Chunk... + Zastosuj fragment... - Starting: "%1" %2 - Uruchamianie "%1" %2 + Revert Chunk... + Zastosuj odwrotny fragment... - - - QmakeAndroidSupport::Internal::QmakeAndroidRunConfiguration - The .pro file "%1" is currently being parsed. - Trwa parsowanie pliku .pro "%1". + Revert Chunk + Odwróć zmiany we fragmencie - - - QmlDesigner::CrumbleBar - Save the changes to preview them correctly. - Zachowaj zmiany aby utworzyć poprawny podgląd. + Apply Chunk + Zastosuj fragment - Always save when leaving subcomponent - Zawsze zachowuj przy opuszczaniu podkomponentu + Would you like to revert the chunk? + Czy zastosować odwrotny fragment? - - - NavigatorTreeModel - Warning - Ostrzeżenie + Would you like to apply the chunk? + Czy zastosować fragment? - Reparenting the component %1 here will cause the component %2 to be deleted. Do you want to proceed? - Przeniesienie komponentu %1 tutaj spowoduje usunięcie komponentu %2. Czy kontynuować? + No difference. + Brak różnic. - QmlDesigner::AddTabDesignerAction + ImageViewer::Internal::ImageViewerFile - Naming Error - Błąd nazwy - - - Component already exists. - Komponent już istnieje. + Image format not supported. + Nieobsługiwany format pliku graficznego. - - - NodeInstanceServerProxy - Cannot Connect to QML Emulation Layer (QML Puppet) - + Failed to read SVG image. + Błąd odczytu pliku graficznego SVG. - The executable of the QML emulation layer (QML Puppet) may not be responding. Switching to another kit might help. - + Failed to read image. + Błąd odczytu pliku graficznego. - PuppetCreator + ProjectExplorer::JsonKitsPage - QML Emulation Layer (QML Puppet) Building was Unsuccessful + Feature list is set and not of type list. - The QML emulation layer (QML Puppet) cannot be built. The fallback emulation layer, which does not support all features, will be used. + No "%1" key found in feature list object. - Qt Version is not supported - Wersja Qt nie jest obsługiwana + Feature list element is not a string or object. + + + + ProjectExplorer::Internal::JsonWizard - The QML emulation layer (QML Puppet) cannot be built because the Qt version is too old or it cannot run natively on your computer. The fallback emulation layer, which does not support all features, will be used. - + Key is not an object. + Klucz nie jest obiektem. - Kit is invalid - Niepoprawny zestaw narzędzi + Pattern "%1" is no valid regular expression. + Wzorzec "%1" jest niepoprawnym wyrażeniem regularnym. - The QML emulation layer (QML Puppet) cannot be built because the kit is not configured correctly. For example the compiler can be misconfigured. Fix the kit configuration and restart Qt Creator. Otherwise, the fallback emulation layer, which does not support all features, will be used. + ScannerGenerator: Binary pattern "%1" not valid. - QmlJSEditor::Internal::QmlJSEditorWidget - - Show Qt Quick ToolBar - Pokaż pasek narzędzi Qt Quick - - - Refactoring - Refaktoryzacja - + ProjectExplorer::LocalApplicationRunControl - This file should only be edited in <b>Design</b> mode. - Ten plik powinien być modyfikowany jedynie w trybie <b>Design</b>. + No executable specified. + Nie podano pliku wykonywalnego. - Switch Mode - Przełącz tryb + Executable %1 does not exist. + Brak pliku wykonywalnego %1. - - - QmlJSEditor::Internal::QmlJSHoverHandler - Library at %1 - Biblioteka w %1 + Starting %1... + Uruchamianie %1... - Dumped plugins successfully. - Wtyczki poprawnie zrzucone. + %1 crashed + %1 zakończył pracę błędem - Read typeinfo files successfully. - Pliki typeinfo poprawnie odczytane. + %1 exited with code %2 + %1 zakończone kodem %2 - QmlProfiler::Internal::RangeTimelineModel + ProjectExplorer::ProjectTree - Duration - Czas trwania + <b>Warning:</b> This file is outside the project directory. + <b>Ostrzeżenie:</b> Ten plik leży poza katalogiem projektu. + + + ProjectExplorer::TerminalAspect - Details - Szczegóły + Terminal + Terminal - Location - Położenie + Run in terminal + Uruchom w terminalu - Qnx::Internal::BarDescriptorFileNodeManager + ProjectExplorer::WorkingDirectoryAspect - Cannot save bar descriptor file: %1 - Nie można zachować pliku deskryptora "bar": %1 + Working Directory + Katalog roboczy - Cannot reload bar descriptor file: %1 - Nie można przeładować pliku deskryptora "bar": %1 + Select Working Directory + Wybierz katalog roboczy - Setup Application Descriptor File - Ustaw plik deskryptora aplikacji + Reset to Default + Przywróć domyślny - You need to set up a bar descriptor file to enable packaging. -Do you want Qt Creator to generate it for your project (%1)? - Należy ustawić plik deskryptora aplikacji "bar" aby umożliwić utorzenie pakietu. -Czy wygenerować plik "bar" dla projektu (%1)? + Working directory: + Katalog roboczy: + + + ProjectExplorer::ArgumentsAspect - Don't ask again for this project - Nie pytaj więcej o ten projekt + Arguments + Argumenty - Cannot set up application descriptor file: Reading the bar descriptor template failed. - Nie można ustawić pliku deskryptora "bar": odczyt szablonu deskryptora "bar" zakończony błędem. + Command line arguments: + Argumenty linii komend: + + + PythonEditor::Internal::PythonRunConfiguration - Cannot set up application descriptor file: Writing the bar descriptor file failed. - Nie można ustawić pliku deskryptora "bar": zapis deskryptora "bar" zakończony błędem. + Run %1 + Uruchom %1 - Error - Błąd + (disabled) + (nieaktywny) - Cannot open BAR application descriptor file - Nie można otworzyć pliku deskryptora BAR aplikacji + The script is currently disabled. + Skrypt jest aktualnie wyłączony. - Qnx::Internal::QnxBaseConfiguration - - - No GCC compiler found. - - Brak kompilatora GCC. - + PythonEditor::Internal::PythonRunConfigurationWidget - - No GDB debugger found for armvle7. - - Brak debuggera GDB dla urządzenia armvle7. + Interpreter: + Interpreter: - - No GDB debugger found for x86. - - Brak debuggera dla urządzenia x86. + Script: + Skrypt: - Qnx::Internal::QnxConfiguration + PythonEditor::Internal::PythonProjectManager - The following errors occurred while activating the QNX configuration: - Wystąpiły następujące błędy podczas aktywowania konfiguracji QNX: + Failed opening project "%1": Project is not a file. + Nie można otworzyć projektu "%1": Ścieżka projektu nie wskazuje na plik. + + + PythonEditor::Internal::PythonRunControl - Cannot Set Up QNX Configuration - Nie można ustawić konfiguracji QNX + No Python interpreter specified. + Brak interpretera Pythona - QCC for %1 (armv7) - QCC dla %1 (armv7) + Python interpreter %1 does not exist. + Interpreter Pythona %1 nie istnieje. - QCC for %1 (x86) - QCC dla %1 (x86) + Starting %1... + Uruchamianie %1... - Debugger for %1 (armv7) - Debugger dla %1 (armv7) + %1 crashed + %1 zakończył pracę błędem - Debugger for %1 (x86) - Debugger dla %1 (x86) + %1 exited with code %2 + %1 zakończone kodem %2 + + + QbsProjectManager - Kit for %1 (armv7) - Zestaw narzędzi dla %1 (armv7) + Qbs + Qbs - Kit for %1 (x86) - Zestaw narzędzi dla %1 (x86) + Profiles + Profile - QNX + QbsRootProjectNode - QNX - QNX + Qbs files + Pliki qbs - Qnx::Internal::QnxPlugin - - BAR descriptor file (BlackBerry) - Plik deskryptora BAR (BlackBerry) - - - Could not add MIME type for bar-descriptor.xml editor. - Nie można dodać typu MIME dla edytora bar-descriptor.xml. - - - BAR Descriptor - Deskryptor BAR - + QbsProjectManager::Internal::QbsManager - Attach to remote QNX application... - Dołącz do zdalnej aplikacji QNX... + Failed opening project "%1": Project is not a file. + Nie można otworzyć projektu "%1": Ścieżka projektu nie wskazuje na plik. - - - Qnx::Internal::QnxSettingsPage - QNX - QNX + Failed to set up kit for Qbs: %1 + Nie można ustawić zestawu narzędzi dla Qbs: %1 - RemoteLinux::Internal::RemoteLinuxCustomRunConfiguration + QmakePriFileNode - The remote executable must be set in order to run a custom remote run configuration. - W celu uruchomienia własnej, zdalnej konfiguracji uruchamiania, należy ustawić zdalny plik wykonywalny. + Failed + Niepoprawnie zakończone - Run "%1" on Linux Device - Uruchom "%1" na urządzeniu linuksowym + Could not write project file %1. + Nie można zapisać pliku projektu %1. - Custom Executable (on Remote Generic Linux Host) - Własny plik wykonywalny (na zdalnym ogólnym hoście linuksowym) + File Error + Błąd pliku - ResourceEditor::Internal::PrefixLangDialog + QmakeProFileNode - Prefix: - Przedrostek: + Error while parsing file %1. Giving up. + Błąd parsowania pliku %1. Przetwarzanie przerwane. - Language: - Język: + Could not find .pro file for subdirectory "%1" in "%2". + Nie można odnaleźć pliku .pro w podkatalogu "%1" w "%2". - Subversion::Internal::SubversionEditorWidget + QmlProfiler::LocalQmlProfilerRunner - Annotate revision "%1" - Dołącz adnotację do poprawki "%1" + No executable file to launch. + Brak pliku do uruchomienia. - TaskList::Internal::TaskListPlugin + QmlProfiler::Internal::QmlProfilerAnimationsModel - Cannot open task file %1: %2 - Nie można otworzyć pliku z zadaniem %1: %2 + Animations + Animacje - File Error - Błąd pliku + GUI Thread + Wątek GUI - My Tasks - Moje zadania + Render Thread + Wątek renderingu - - - TextEditor::Internal::MultiDefinitionDownloader - Downloading Highlighting Definitions - Pobieranie definicji podświetleń + Duration + Czas trwania - Error downloading selected definition(s). - Błąd pobierania wybranych definicji. + Framerate + Klatki na sekundę - Error downloading one or more definitions. - Błąd pobierania jednej lub wielu definicji. + Context + Kontekst + + + + QmlProfiler::QmlProfilerRunControl + + Qt Creator + Qt Creator - Please check the directory's access rights. - Sprawdź prawa dostępu do katalogu. + Could not connect to the in-process QML debugger: +%1 + %1 is detailed error message + Nie można podłączyć się do wewnątrzprocesowego debuggera QML: +%1 - Download Error - Błąd pobierania + QML Profiler + Profiler QML - TextEditor::TextDocument + QmlProfiler::Internal::QmlProfilerRangeModel - Opening File - Otwieranie pliku + Duration + Czas trwania - - - TextEditor::Internal::TextEditorWidgetPrivate - CTRL+D - Ctrl+D + Details + Szczegóły - Line: %1, Col: %2 - Linia: %1, kolumna: %2 + Location + Położenie + + + ResourceTopLevelNode - Line: 9999, Col: 999 - Linia: 9999, kolumna: 999 + %1 Prefix: %2 + %1 Przedrostek: %2 - TextEditor::TextEditorWidget + Subversion::Internal::SubversionLogParameterWidget - Print Document - Wydruk dokumentu + Verbose + Gadatliwy - File Error - Błąd pliku + Show files changed in each revision + Pokazuj pliki zmienione w każdej poprawce + + + GenericHighlighter - The text is too large to be displayed (%1 MB). - Tekst jest zbyt obszerny aby mógł zostać wyświetlony (%1 MB). + Element name is empty. + Nazwa elementu jest pusta. - <b>Error:</b> Could not decode "%1" with "%2"-encoding. Editing not possible. - <b>Błąd:</b> Nie można odkodować "%1" używając kodowania "%2". Edycja nie jest możliwa. + Duplicate element name "%1". + Powielona nazwa elementu "%1". - Select Encoding - Wybierz kodowanie + Name "%1" not found. + Brak nazwy "%1". - Delete UTF-8 BOM on Save - Usuwaj UTF-8 BOM przy zachowywaniu + Generic highlighter error: + Błąd ogólnego podświetlacza: - Add UTF-8 BOM on Save - Dodawaj UTF-8 BOM przy zachowywaniu + Reached empty context. + - TextEditor::Internal::TextEditorActionHandlerPrivate + TextEditor::Internal::TextEditorActionHandler &Undo &Cofnij @@ -44433,7 +37093,7 @@ Czy wygenerować plik "bar" dla projektu (%1)? Move the View a Page Up and Keep the Cursor Position - + Przesuń widok o cały ekran do góry i zachowaj pozycję kursora Ctrl+PgUp @@ -44441,7 +37101,7 @@ Czy wygenerować plik "bar" dla projektu (%1)? Move the View a Page Down and Keep the Cursor Position - + Przesuń widok o cały ekran na dół i zachowaj pozycję kursora Ctrl+PgDown @@ -44449,7 +37109,7 @@ Czy wygenerować plik "bar" dla projektu (%1)? Move the View a Line Up and Keep the Cursor Position - + Przesuń widok o jedną linię do góry i zachowaj pozycję kursora Ctrl+Up @@ -44457,7 +37117,7 @@ Czy wygenerować plik "bar" dla projektu (%1)? Move the View a Line Down and Keep the Cursor Position - + Przesuń widok o jedną linię na dół i zachowaj pozycję kursora Ctrl+Down @@ -44729,114 +37389,117 @@ Czy wygenerować plik "bar" dla projektu (%1)? - VcsBase::BaseCheckoutWizardFactory + QObject - Cannot Open Project - Nie można otworzyć projektu + <Enter regular expression to exclude> + + + + UpdateInfo::Internal::SettingsPage - Failed to open project in "%1". - Nie można otworzyć projektu w "%1". + Daily + Codziennie - Could not find any project files matching (%1) in the directory "%2". - Nie można odnaleźć żadnych plików z projektami, pasujących do (%1) w katalogu "%2". + Weekly + Cotygodniowo - "%1" does not exist. - "%1" nie istnieje. + Monthly + Comiesięcznie - - - VcsBase::VcsCommand - Unable to start process, binary is empty - Nie można uruchomić procesu, plik binarny jest pusty + New updates are available. + Dostępne są nowe aktualizacje. - Error: Executable timed out after %1s. - Błąd: plik wykonywalny nie odpowiada po upływie %1s. + No new updates are available. + Brak nowych aktualizacji. - - - VcsBase::VcsOutputWindow - Open "%1" - Otwórz "%1" + Checking for updates... + Sprawdzanie dostępności aktualizacji... - Clear - Wyczyść + Not checked yet + Jeszcze nie sprawdzano + + + VcsBase::VcsBaseClientImpl - Version Control - System kontroli wersji + Working... + Przetwarzanie... + + + VcsBase::Internal::VcsCommandPage - Executing: %1 %2 - Wykonywanie: %1 %2 + "data" is no JSON object in "VcsCommand" page. + - Executing in %1: %2 %3 - Wykonywanie w %1: %2 %3 + "%1" not set in "data" section of "VcsCommand" page. + - - - WinRt::Internal::WinRtDebugSupport - The WinRT debugging helper is missing from your Qt Creator installation. It was assumed to be located at %1 + "%1" in "data" section of "VcsCommand" page has unexpected type (unset, String or List). - Cannot start the WinRT Runner Tool. + "%1" in "data" section of "VcsCommand" page has unexpected type (unset or List). - Cannot establish connection to the WinRT debugging helper. + Job in "VcsCommand" page is empty. - Cannot extract the PID from the WinRT debugging helper. (output: %1) + Job in "VcsCommand" page is not an object. - Cannot create an appropriate run control for the current run configuration. + Job in "VcsCommand" page has no "%1" set. + + Checkout + Kopia robocza + - WinRt::Internal::WinRtRunnerHelper + VcsBase::VcsCommandPage - The current kit has no Qt version. - Brak wersji Qt w bieżącym zestawie narzędzi. + "%1" (%2) not found. + "%1" brak (%2). - Cannot find winrtrunner.exe in "%1". - Brak winrtrunner.exe w "%1". + Version control "%1" is not configured. + System kontroli wersji "%1" nie jest skonfigurowany. - Cannot determine the executable file path for "%1". - Nie można określić ścieżki do pliku wykonywalnego dla "%1". + Version control "%1" does not support initial checkouts. + - Error while executing the WinRT Runner Tool: %1 - + "%1" is empty when trying to run checkout. - - - Help::Internal::IndexWindow - &Look for: - Wy&szukaj: + "%1" (%2) does not exist. + "%1" (%2) nie istnieje. + + + QmlEngine - Open Link - Otwórz odsyłacz + JS Source for %1 + Źródło JS dla %1 - Open Link as New Page - Otwórz odsyłacz na nowej stronie + Anonymous Function + Anonimowa funkcja From abaff86d409ab349b6cc6e9f31f0e57e14fcc467 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Fri, 24 Jul 2015 15:51:44 +0200 Subject: [PATCH 065/116] Update qbs submodule. To HEAD of 1.4 branch. Change-Id: I2aeff5561e25eccf323be4106d913cc9619f5338 Reviewed-by: Joerg Bornemann --- src/shared/qbs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shared/qbs b/src/shared/qbs index d69b32061f2..b24c37c89f7 160000 --- a/src/shared/qbs +++ b/src/shared/qbs @@ -1 +1 @@ -Subproject commit d69b32061f2cc97892ba1a2f7d851e21f0787a8d +Subproject commit b24c37c89f7db5363f4860ba269dba482b19a5f1 From 221ab36025b39e82db57910d228c16965a9de4bb Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Tue, 28 Jul 2015 00:09:33 +0300 Subject: [PATCH 066/116] Debugger: Fix expansion of anon nested types AttributeError: 'NoneType' object has no attribute 'startswith' Change-Id: Ieb08c33cce06ad484de856b249ab4723b01d520e Reviewed-by: Christian Stenger --- share/qtcreator/debugger/gdbbridge.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/share/qtcreator/debugger/gdbbridge.py b/share/qtcreator/debugger/gdbbridge.py index dd980aed489..b2047d867bf 100644 --- a/share/qtcreator/debugger/gdbbridge.py +++ b/share/qtcreator/debugger/gdbbridge.py @@ -1159,7 +1159,7 @@ def putFields(self, value, dumpBase = True): def sortOrder(field): if field.is_base_class: return 0 - if field.name.startswith("_vptr."): + if field.name and field.name.startswith("_vptr."): return 1 return 2 fields.sort(key = lambda field: "%d%s" % (sortOrder(field), field.name)) From bbb260093a8442a7b6db9d915fbad67fbc2ba66a Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Mon, 27 Jul 2015 11:45:00 +0200 Subject: [PATCH 067/116] Doc: supporting multiple Perforce workspaces using conf files Change-Id: Ic75eeb597b860cc4e85b9e786bd3276c991aa7a5 Reviewed-by: Cristian Adam Reviewed-by: Leena Miettinen --- doc/src/howto/creator-vcs.qdoc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/doc/src/howto/creator-vcs.qdoc b/doc/src/howto/creator-vcs.qdoc index 1111319b900..a630b9ad6aa 100644 --- a/doc/src/howto/creator-vcs.qdoc +++ b/doc/src/howto/creator-vcs.qdoc @@ -722,6 +722,12 @@ deselect the \uicontrol Load check box for the \uicontrol Perforce plugin in the \uicontrol {Version Control} group. + In the Perforce options, you can specify workspace details: + \uicontrol {P4 user}, \uicontrol {P4 client}, and \uicontrol {P4 port}. To + specify the details individually for several projects, use configuration + files instead. Create a \c {p4config.txt} configuration file for each + project in the top level project directory. + The \uicontrol Perforce submenu contains the following additional items: \table From c70502d691970dc4f2353e0ea8b4e23a94800a09 Mon Sep 17 00:00:00 2001 From: Robert Loehning Date: Mon, 27 Jul 2015 16:14:08 +0200 Subject: [PATCH 068/116] Squish: Fix remaining WELP tests for Qt 5.5 Change-Id: Ibe0df94d833ac2a10d43884ada3c1fe3d5de0b98 Reviewed-by: Christian Stenger --- tests/system/objects.map | 2 -- tests/system/shared/project.py | 16 ++++++++++-- tests/system/suite_WELP/tst_WELP02/test.py | 18 +++++++------- tests/system/suite_WELP/tst_WELP03/test.py | 29 ++++++++++++---------- tests/system/suite_WELP/tst_WELP04/test.py | 27 +++++++++++--------- 5 files changed, 54 insertions(+), 38 deletions(-) diff --git a/tests/system/objects.map b/tests/system/objects.map index 8b4ae5f89f3..9cb1ce01976 100644 --- a/tests/system/objects.map +++ b/tests/system/objects.map @@ -60,7 +60,6 @@ :Compiler:_QLabel {container=':qt_tabwidget_stackedwidget_QWidget' text='Compiler:' type='QLabel' unnamed='1' visible='1'} :Core__Internal__GeneralSettings.User Interface_QGroupBox {container=':qt_tabwidget_stackedwidget.Core__Internal__GeneralSettings_QWidget' name='interfaceBox' title='User Interface' type='QGroupBox' visible='1'} :CppTools__Internal__CompletionSettingsPage.Behavior_QGroupBox {container=':qt_tabwidget_stackedwidget.CppTools__Internal__CompletionSettingsPage_QWidget' name='groupBox' title='Behavior' type='QGroupBox' visible='1'} -:CreateProject_QStyleItem {clip='false' container=':WelcomePageStyledBar.WelcomePage_QQuickView' enabled='true' text='New Project' type='Button' unnamed='1' visible='true'} :DebugModeWidget.Breakpoints_QDockWidget {container=':Qt Creator.DebugModeWidget_QSplitter' name='Debugger.Docks.Break' type='QDockWidget' visible='1' windowTitle='Breakpoints'} :DebugModeWidget.Debugger Log_QDockWidget {container=':Qt Creator.DebugModeWidget_QSplitter' name='Debugger.Docks.Output' type='QDockWidget' visible='1' windowTitle='Debugger Log'} :DebugModeWidget.Debugger Toolbar_QDockWidget {container=':Qt Creator.DebugModeWidget_QSplitter' name='Debugger Toolbar' type='QDockWidget' visible='1' windowTitle='Debugger Toolbar'} @@ -116,7 +115,6 @@ :New_Core::Internal::NewDialog {name='Core__Internal__NewDialog' type='Core::Internal::NewDialog' visible='1' windowTitle?='New*'} :Next_QPushButton {text~='(Next.*|Continue)' type='QPushButton' visible='1'} :OpenDocuments_Widget {type='Core::Internal::OpenEditorsWidget' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow' windowTitle='Open Documents'} -:OpenProject_QStyleItem {clip='false' container=':WelcomePageStyledBar.WelcomePage_QQuickView' enabled='true' text='Open Project' type='Button' unnamed='1' visible='true'} :Options.Cancel_QPushButton {text='Cancel' type='QPushButton' unnamed='1' visible='1' window=':Options_Core::Internal::SettingsDialog'} :Options.OK_QPushButton {text='OK' type='QPushButton' unnamed='1' visible='1' window=':Options_Core::Internal::SettingsDialog'} :Options.qt_tabwidget_stackedwidget_QStackedWidget {name='qt_tabwidget_stackedwidget' type='QStackedWidget' visible='1' window=':Options_Core::Internal::SettingsDialog'} diff --git a/tests/system/shared/project.py b/tests/system/shared/project.py index 951ed4645bd..93c04fae369 100644 --- a/tests/system/shared/project.py +++ b/tests/system/shared/project.py @@ -39,7 +39,13 @@ def openQbsProject(projectPath): def openQmakeProject(projectPath, targets=Targets.desktopTargetClasses(), fromWelcome=False): cleanUpUserFiles(projectPath) if fromWelcome: - mouseClick(waitForObject(":OpenProject_QStyleItem"), 5, 5, 0, Qt.LeftButton) + if isQt54Build: + welcomePage = ":WelcomePageStyledBar.WelcomePage_QQuickView" + else: + welcomePage = ":Qt Creator.WelcomePage_QQuickWidget" + mouseClick(waitForObject("{clip='false' container='%s' enabled='true' text='Open Project' " + "type='Button' unnamed='1' visible='true'}" % welcomePage), + 5, 5, 0, Qt.LeftButton) else: invokeMenuItem("File", "Open File or Project...") selectFromFileDialog(projectPath) @@ -94,7 +100,13 @@ def __handleCmakeWizardPage__(): # this list can be used in __chooseTargets__() def __createProjectOrFileSelectType__(category, template, fromWelcome = False, isProject=True): if fromWelcome: - mouseClick(waitForObject(":CreateProject_QStyleItem"), 5, 5, 0, Qt.LeftButton) + if isQt54Build: + welcomePage = ":WelcomePageStyledBar.WelcomePage_QQuickView" + else: + welcomePage = ":Qt Creator.WelcomePage_QQuickWidget" + mouseClick(waitForObject("{clip='false' container='%s' enabled='true' text='New Project' " + "type='Button' unnamed='1' visible='true'}" % welcomePage), + 5, 5, 0, Qt.LeftButton) else: invokeMenuItem("File", "New File or Project...") categoriesView = waitForObject(":New.templateCategoryView_QTreeView") diff --git a/tests/system/suite_WELP/tst_WELP02/test.py b/tests/system/suite_WELP/tst_WELP02/test.py index 896637ffbd9..9a5c775b720 100644 --- a/tests/system/suite_WELP/tst_WELP02/test.py +++ b/tests/system/suite_WELP/tst_WELP02/test.py @@ -31,11 +31,14 @@ source("../../shared/qtcreator.py") source("../../shared/suites_qtta.py") +if isQt54Build: + welcomePage = ":WelcomePageStyledBar.WelcomePage_QQuickView" +else: + welcomePage = ":Qt Creator.WelcomePage_QQuickWidget" + def checkTypeAndProperties(typePropertiesDetails): for (qType, props, detail) in typePropertiesDetails: - test.verify(checkIfObjectExists(getQmlItem(qType, - ":WelcomePageStyledBar.WelcomePage_QQuickView", - False, props)), + test.verify(checkIfObjectExists(getQmlItem(qType, welcomePage, False, props)), "Verifying: Qt Creator displays %s." % detail) def main(): @@ -85,13 +88,10 @@ def main(): "Verifying: The project is opened in 'Edit' mode after configuring.") # go to "Welcome page" again and check if there is an information about recent projects switchViewTo(ViewConstants.WELCOME) - test.verify(checkIfObjectExists(getQmlItem("LinkedText", - ":WelcomePageStyledBar.WelcomePage_QQuickView", - False, + test.verify(checkIfObjectExists(getQmlItem("LinkedText", welcomePage, False, "text='propertyanimation' id='projectNameText'")) and - checkIfObjectExists(getQmlItem("LinkedText", - ":WelcomePageStyledBar.WelcomePage_QQuickView", - False, "text='SampleApp' id='projectNameText'")), + checkIfObjectExists(getQmlItem("LinkedText", welcomePage, False, + "text='SampleApp' id='projectNameText'")), "Verifying: 'Welcome page' displays information about recently created and " "opened projects.") # exit Qt Creator diff --git a/tests/system/suite_WELP/tst_WELP03/test.py b/tests/system/suite_WELP/tst_WELP03/test.py index 286be802dcd..ee28d29afc2 100644 --- a/tests/system/suite_WELP/tst_WELP03/test.py +++ b/tests/system/suite_WELP/tst_WELP03/test.py @@ -50,6 +50,10 @@ def main(): test.log("Welcome mode is not scriptable with this Squish version") return global sdkPath + if isQt54Build: + welcomePage = ":WelcomePageStyledBar.WelcomePage_QQuickView" + else: + welcomePage = ":Qt Creator.WelcomePage_QQuickWidget" # open Qt Creator startApplication("qtcreator" + SettingsPath) if not startedWithoutPluginError(): @@ -59,7 +63,7 @@ def main(): qchs.extend([os.path.join(p, "qtopengl.qch"), os.path.join(p, "qtwidgets.qch")]) addHelpDocumentation(qchs) setAlwaysStartFullHelp() - getStartedNow = getQmlItem("Button", ":WelcomePageStyledBar.WelcomePage_QQuickView", False, + getStartedNow = getQmlItem("Button", welcomePage, False, "text='Get Started Now' id='gettingStartedButton'") if not test.verify(checkIfObjectExists(getStartedNow), "Verifying: Qt Creator displays Welcome Page with Getting Started."): @@ -67,11 +71,9 @@ def main(): invokeMenuItem("File", "Exit") return # select "Examples" topic - mouseClick(waitForObject(getQmlItem("Button", ":WelcomePageStyledBar.WelcomePage_QQuickView", - False, "text='Examples'")), 5, 5, 0, Qt.LeftButton) - test.verify(checkIfObjectExists(getQmlItem("Text", - ":WelcomePageStyledBar.WelcomePage_QQuickView", - False, "text='Examples'")), + mouseClick(waitForObject(getQmlItem("Button", welcomePage, False, "text='Examples'")), + 5, 5, 0, Qt.LeftButton) + test.verify(checkIfObjectExists(getQmlItem("Text", welcomePage, False, "text='Examples'")), "Verifying: 'Examples' topic is opened and the examples are shown.") basePath = "opengl/2dpainting/2dpainting.pro" qt4Exmpl = os.path.join(sdkPath, "Examples", "4.7", basePath) @@ -83,19 +85,18 @@ def main(): cleanUpUserFiles(proFiles) for p in proFiles: removePackagingDirectory(os.path.dirname(p)) - examplesLineEdit = getQmlItem("TextField", ":WelcomePageStyledBar.WelcomePage_QQuickView", + examplesLineEdit = getQmlItem("TextField", welcomePage, False, "id='lineEdit' placeholderText='Search in Examples...'") mouseClick(waitForObject(examplesLineEdit), 5, 5, 0, Qt.LeftButton) test.log("Using examples from Kit %s." - % (waitForObject(getQmlItem("ComboBox", ":WelcomePageStyledBar.WelcomePage_QQuickView", + % (waitForObject(getQmlItem("ComboBox", welcomePage, False, "id='comboBox'")).currentText)) replaceEditorContent(waitForObject(examplesLineEdit), "qwerty") - test.verify(checkIfObjectExists(getQmlItem("Delegate", - ":WelcomePageStyledBar.WelcomePage_QQuickView", + test.verify(checkIfObjectExists(getQmlItem("Delegate", welcomePage, False, "id='delegate' radius='0' caption~='.*'"), False), "Verifying: No example is shown.") replaceEditorContent(waitForObject(examplesLineEdit), "2d painting") - twoDPainting = getQmlItem("Delegate", ":WelcomePageStyledBar.WelcomePage_QQuickView", + twoDPainting = getQmlItem("Delegate", welcomePage, False, "id='delegate' radius='0' caption~='2D Painting.*'") test.verify(checkIfObjectExists(twoDPainting), "Verifying: Example (2D Painting) is shown.") @@ -132,8 +133,10 @@ def main(): cleanUpUserFiles(proFiles) for p in proFiles: removePackagingDirectory(os.path.dirname(p)) - replaceEditorContent(waitForObject(examplesLineEdit), "address book") - addressBook = getQmlItem("Delegate", ":WelcomePageStyledBar.WelcomePage_QQuickView", + examplesLineEditWidget = waitForObject(examplesLineEdit) + mouseClick(examplesLineEditWidget) + replaceEditorContent(examplesLineEditWidget, "address book") + addressBook = getQmlItem("Delegate", welcomePage, False, "id='delegate' radius='0' caption~='Address Book.*'") test.verify(checkIfObjectExists(addressBook), "Verifying: Example (address book) is shown.") mouseClick(waitForObject(addressBook), 5, 5, 0, Qt.LeftButton) diff --git a/tests/system/suite_WELP/tst_WELP04/test.py b/tests/system/suite_WELP/tst_WELP04/test.py index 5422d78c25d..9cc23275d00 100644 --- a/tests/system/suite_WELP/tst_WELP04/test.py +++ b/tests/system/suite_WELP/tst_WELP04/test.py @@ -35,11 +35,15 @@ def main(): if not canTestEmbeddedQtQuick(): test.log("Welcome mode is not scriptable with this Squish version") return + if isQt54Build: + welcomePage = ":WelcomePageStyledBar.WelcomePage_QQuickView" + else: + welcomePage = ":Qt Creator.WelcomePage_QQuickWidget" # open Qt Creator startApplication("qtcreator" + SettingsPath) if not startedWithoutPluginError(): return - getStarted = getQmlItem("Button", ":WelcomePageStyledBar.WelcomePage_QQuickView", False, + getStarted = getQmlItem("Button", welcomePage, False, "text='Get Started Now' id='gettingStartedButton'") if not test.verify(checkIfObjectExists(getStarted), "Verifying: Qt Creator displays Welcome Page with Get Started Now button."): @@ -47,22 +51,20 @@ def main(): invokeMenuItem("File", "Exit") return # select "Tutorials" - mouseClick(waitForObject(getQmlItem("Button", ":WelcomePageStyledBar.WelcomePage_QQuickView", - False, "text='Tutorials'")), 5, 5, 0, Qt.LeftButton) - searchTut = getQmlItem("TextField", ":WelcomePageStyledBar.WelcomePage_QQuickView", False, + mouseClick(waitForObject(getQmlItem("Button", welcomePage, False, "text='Tutorials'")), + 5, 5, 0, Qt.LeftButton) + searchTut = getQmlItem("TextField", welcomePage, False, "placeholderText='Search in Tutorials...' id='lineEdit'") mouseClick(waitForObject(searchTut), 5, 5, 0, Qt.LeftButton) replaceEditorContent(waitForObject(searchTut), "qwerty") - test.verify(checkIfObjectExists(getQmlItem("Text", - ":WelcomePageStyledBar.WelcomePage_QQuickView", + test.verify(checkIfObjectExists(getQmlItem("Text", welcomePage, False, "text='Tutorials'")) and - checkIfObjectExists(getQmlItem("Delegate", - ":WelcomePageStyledBar.WelcomePage_QQuickView", + checkIfObjectExists(getQmlItem("Delegate", welcomePage, False, "id='delegate' radius='0' caption~='.*'"), False), "Verifying: 'Tutorials' topic is opened and nothing is shown.") replaceEditorContent(waitForObject(searchTut), "building and running an example application") - bldRunExmpl = getQmlItem("Delegate", ":WelcomePageStyledBar.WelcomePage_QQuickView", False, + bldRunExmpl = getQmlItem("Delegate", welcomePage, False, "caption='Building and Running an Example Application' " "id='delegate' radius='0'") test.verify(checkIfObjectExists(bldRunExmpl), "Verifying: Expected Text tutorial is shown.") @@ -74,9 +76,10 @@ def main(): # close help widget again to avoid focus issues sendEvent("QCloseEvent", waitForObject(":Help Widget_Help::Internal::HelpWidget")) # check a demonstration video link - replaceEditorContent(waitForObject(searchTut), "embedded device") - test.verify(checkIfObjectExists(getQmlItem("Delegate", - ":WelcomePageStyledBar.WelcomePage_QQuickView", + searchTutWidget = waitForObject(searchTut) + mouseClick(searchTutWidget) + replaceEditorContent(searchTutWidget, "embedded device") + test.verify(checkIfObjectExists(getQmlItem("Delegate", welcomePage, False, "id='delegate' radius='0' caption=" "'Device Creation with Qt'")), "Verifying: Link to the expected demonstration video exists.") From 129918d8ee8639fc3372b3d36304c1b2faaaec83 Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Thu, 11 Jun 2015 22:26:53 +0300 Subject: [PATCH 069/116] Clang Tests: Autodetect gtest/gmock on linux Should work at least on Arch Linux and Debian family. Requires packages: * Debian: google-mock, libgtest-dev * Arch Linux: gtest, gmock (AUR) Centos provides gmock source in gmock-devel package, but it doesn't provide gtest source (in gtest-devel), so it must be downloaded and configured. Change-Id: Ia507e8209848cb05743bb6f5956ce052f5558010 Reviewed-by: Nikolai Kosjar --- tests/unit/unittest/gmock_dependency.pri | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/tests/unit/unittest/gmock_dependency.pri b/tests/unit/unittest/gmock_dependency.pri index ad92ed88317..20d5f773349 100644 --- a/tests/unit/unittest/gmock_dependency.pri +++ b/tests/unit/unittest/gmock_dependency.pri @@ -1,22 +1,35 @@ GMOCK_DIR = $$(GMOCK_DIR) -GTEST_DIR = $$GMOCK_DIR/gtest +!isEmpty(GMOCK_DIR):GTEST_DIR = $$GMOCK_DIR/gtest +linux-* { + isEmpty(GMOCK_DIR):GMOCK_DIR = /usr/include/gmock + !exists($$GTEST_DIR):GTEST_DIR = /usr/include/gtest +} requires(exists($$GMOCK_DIR)) !exists($$GMOCK_DIR):message("No gmock is found! To enabe unit tests set GMOCK_DIR") +GTEST_SRC_DIR = $$GTEST_DIR +GMOCK_SRC_DIR = $$GMOCK_DIR +linux-* { + !exists($$GTEST_SRC_DIR/src/gtest-all.cc):GTEST_SRC_DIR = /usr/src/gtest + !exists($$GMOCK_SRC_DIR/src/gmock-all.cc):GMOCK_SRC_DIR = /usr/src/gmock +} + DEFINES += \ GTEST_HAS_STD_INITIALIZER_LIST_ \ GTEST_LANG_CXX11 -INCLUDEPATH += \ +INCLUDEPATH *= \ $$GTEST_DIR \ $$GTEST_DIR/include \ $$GMOCK_DIR \ - $$GMOCK_DIR/include + $$GMOCK_DIR/include \ + $$GTEST_SRC_DIR \ + $$GMOCK_SRC_DIR SOURCES += \ - $$GMOCK_DIR/src/gmock-all.cc \ - $$GTEST_DIR/src/gtest-all.cc + $$GMOCK_SRC_DIR/src/gmock-all.cc \ + $$GTEST_SRC_DIR/src/gtest-all.cc HEADERS += \ $$PWD/gtest-qt-printing.h From 84952c5a9609e72f32dd1e291a442d1c68c9569f Mon Sep 17 00:00:00 2001 From: Robert Loehning Date: Tue, 28 Jul 2015 14:28:57 +0200 Subject: [PATCH 070/116] Squish: Fix tst_session_handling for Qt 5.5 Change-Id: I9347656c659055472cdda42fe07348c07bc3037e Reviewed-by: Christian Stenger --- .../suite_general/tst_session_handling/test.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/tests/system/suite_general/tst_session_handling/test.py b/tests/system/suite_general/tst_session_handling/test.py index 44a062b00dd..e80f2b878ad 100644 --- a/tests/system/suite_general/tst_session_handling/test.py +++ b/tests/system/suite_general/tst_session_handling/test.py @@ -111,19 +111,22 @@ def createAndSwitchToSession(toSession): "window=%s}" % sessionInputDialog)) def checkWelcomePage(sessionName, isCurrent=False): + if isQt54Build: + welcomePage = ":WelcomePageStyledBar.WelcomePage_QQuickView" + else: + welcomePage = ":Qt Creator.WelcomePage_QQuickWidget" switchViewTo(ViewConstants.WELCOME) - mouseClick(waitForObject("{container=':WelcomePageStyledBar.WelcomePage_QQuickView' text='Projects' " - "type='Button' unnamed='1' visible='true'}"), 5, 5, Qt.LeftButton) - waitForObject("{container=':WelcomePageStyledBar.WelcomePage_QQuickView' id='sessionsTitle' " - "text='Sessions' type='Text' unnamed='1' visible='true'}") + mouseClick(waitForObject("{container='%s' text='Projects' type='Button' " + "unnamed='1' visible='true'}" % welcomePage)) + waitForObject("{container='%s' id='sessionsTitle' text='Sessions' type='Text' " + "unnamed='1' visible='true'}" % welcomePage) if isCurrent: sessions = ["default", "%s (current session)" % sessionName] else: sessions = ["default (current session)", sessionName] for sessionName in sessions: - test.verify(object.exists("{container=':WelcomePageStyledBar.WelcomePage_QQuickView' " - "enabled='true' type='LinkedText' " - "unnamed='1' visible='true' text='%s'}" % sessionName), + test.verify(object.exists("{container='%s' enabled='true' type='LinkedText' unnamed='1' " + "visible='true' text='%s'}" % (welcomePage, sessionName)), "Verifying session '%s' exists." % sessionName) def checkNavigator(expectedRows, message): From dae0265d43084d949a6f4080750da11c60780291 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Tue, 28 Jul 2015 16:59:06 +0200 Subject: [PATCH 071/116] QbsProjectManager: Fix cases of missing "rename" and "remove" actions. If source files were located in a separate folder from their product (e.g. the rather common case of a subdirectory), then the "Rename" and "Remove" actions would not be available for them in the project tree's context menu. Change-Id: Ieecf5372619ab3fcf275a55d7850445e3aa44a0d Reviewed-by: Joerg Bornemann --- src/plugins/qbsprojectmanager/qbsnodes.cpp | 40 +++++++++++----------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/src/plugins/qbsprojectmanager/qbsnodes.cpp b/src/plugins/qbsprojectmanager/qbsnodes.cpp index 8b6defe2f07..5ba2661fa84 100644 --- a/src/plugins/qbsprojectmanager/qbsnodes.cpp +++ b/src/plugins/qbsprojectmanager/qbsnodes.cpp @@ -245,6 +245,23 @@ class FileTreeNode { bool m_isFile; }; + +static QList supportedNodeActions(ProjectExplorer::Node *node, + bool managesFiles) +{ + QList actions; + const QbsProject * const project = parentQbsProjectNode(node)->project(); + if (!project->isProjectEditable()) + return actions; + if (managesFiles) + actions << ProjectExplorer::AddNewFile << ProjectExplorer::AddExistingFile; + if (node->nodeType() == ProjectExplorer::FileNodeType + && !project->qbsProject().buildSystemFiles().contains(node->path().toString())) { + actions << ProjectExplorer::RemoveFile << ProjectExplorer::Rename; + } + return actions; +} + // ---------------------------------------------------------------------- // QbsFileNode: // ---------------------------------------------------------------------- @@ -273,8 +290,7 @@ QbsFolderNode::QbsFolderNode(const Utils::FileName &folderPath, ProjectExplorer: QList QbsFolderNode::supportedActions(ProjectExplorer::Node *node) const { - Q_UNUSED(node); - return QList(); + return supportedNodeActions(node, false); } // --------------------------------------------------------------------------- @@ -341,22 +357,6 @@ bool QbsBaseProjectNode::renameFile(const QString &filePath, const QString &newF return false; } - -static QList supportedNodeActions(ProjectExplorer::Node *node) -{ - QList actions; - const QbsProject * const project = parentQbsProjectNode(node)->project(); - if (!project->isProjectEditable()) - return actions; - actions << ProjectExplorer::AddNewFile << ProjectExplorer::AddExistingFile; - if (node->nodeType() == ProjectExplorer::FileNodeType - && !project->qbsProject().buildSystemFiles().contains(node->path().toString())) { - actions << ProjectExplorer::RemoveFile; - actions << ProjectExplorer::Rename; - } - return actions; -} - // -------------------------------------------------------------------- // QbsGroupNode: // -------------------------------------------------------------------- @@ -387,7 +387,7 @@ bool QbsGroupNode::isEnabled() const QList QbsGroupNode::supportedActions(ProjectExplorer::Node *node) const { - return supportedNodeActions(node); + return supportedNodeActions(node, true); } bool QbsGroupNode::addFiles(const QStringList &filePaths, QStringList *notAdded) @@ -634,7 +634,7 @@ bool QbsProductNode::showInSimpleTree() const QList QbsProductNode::supportedActions(ProjectExplorer::Node *node) const { - return supportedNodeActions(node); + return supportedNodeActions(node, true); } bool QbsProductNode::addFiles(const QStringList &filePaths, QStringList *notAdded) From b1e0731d5513eda1d0cbd18c0a806d3af6e21bdf Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Tue, 28 Jul 2015 00:22:48 +0300 Subject: [PATCH 072/116] CppEditor: Add a failing test for ConvertToPointer with macro Task-number: QTCREATORBUG-14801 Change-Id: Ie34b131de4e6f701aeac29567a09be54e2e63bd8 Reviewed-by: Nikolai Kosjar --- src/plugins/cppeditor/cppquickfix_test.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/plugins/cppeditor/cppquickfix_test.cpp b/src/plugins/cppeditor/cppquickfix_test.cpp index 4945fd8ae7f..b6f3033bfa2 100644 --- a/src/plugins/cppeditor/cppquickfix_test.cpp +++ b/src/plugins/cppeditor/cppquickfix_test.cpp @@ -256,6 +256,7 @@ QuickFixOperationTest::QuickFixOperationTest(const QListm_expectedSource); // Undo the change @@ -1720,6 +1721,23 @@ void CppEditorPlugin::test_quickfix_data() " f2(str);\n" "}\n"); + QTest::newRow("ConvertToPointerWithMacro") + << CppQuickFixFactoryPtr(new ConvertFromAndToPointer) + << _("#define BAR bar\n" + "void func()\n" + "{\n" + " int @foo = 42;\n" + " int bar;\n" + " BAR = foo;\n" + "}\n") + << _("#define BAR bar\n" + "void func()\n" + "{\n" + " int *foo = 42;\n" + " int bar;\n" + " BAR = *foo;\n" + "}\n"); + QTest::newRow("InsertQtPropertyMembers_noTriggerInvalidCode") << CppQuickFixFactoryPtr(new InsertQtPropertyMembers) << _("class C { @Q_PROPERTY(typeid foo READ foo) };\n") From 96278326d85fe567c560a3d30da3ab1f05ca008d Mon Sep 17 00:00:00 2001 From: Jake Petroules Date: Tue, 28 Jul 2015 13:12:45 -0700 Subject: [PATCH 073/116] Qbs: Remove unnecessary header dependency. Change-Id: I9eb64d089c5b4f1f8c3560c87c053c80668fddc0 Reviewed-by: Orgad Shaneh --- src/plugins/qbsprojectmanager/defaultpropertyprovider.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/plugins/qbsprojectmanager/defaultpropertyprovider.cpp b/src/plugins/qbsprojectmanager/defaultpropertyprovider.cpp index b2b544db28f..3cd18a6a73c 100644 --- a/src/plugins/qbsprojectmanager/defaultpropertyprovider.cpp +++ b/src/plugins/qbsprojectmanager/defaultpropertyprovider.cpp @@ -31,11 +31,12 @@ #include "defaultpropertyprovider.h" #include "qbsconstants.h" +#include #include #include #include #include -#include + #include #include From bca0167f3705eeb1b4e730e04a4fb888b8e219d4 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Tue, 28 Jul 2015 17:01:38 +0200 Subject: [PATCH 074/116] Doc: add limitation for Android SDK support Android Studio is currently not supported. Change-Id: I92857da61fd1b7ade2972d62b1dc236a6ac33aed Reviewed-by: Daniel Teske --- doc/src/android/androiddev.qdoc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/src/android/androiddev.qdoc b/doc/src/android/androiddev.qdoc index 6cf6cc12c36..ae60b312e6a 100644 --- a/doc/src/android/androiddev.qdoc +++ b/doc/src/android/androiddev.qdoc @@ -67,6 +67,8 @@ \l{http://developer.android.com/tools/sdk/ndk/index.html} {Android NDK} from Google. + \note Android Studio is currently not supported by \QC. + \li On Windows, you also need the following: \list From 399c9d0f9b3375ae91109bce47444cb3e835af40 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Tue, 28 Jul 2015 17:10:50 +0200 Subject: [PATCH 075/116] Doc: new options in Android Manifest Editor - Activity name - Run Change-Id: I606a741f79d586ff1b2931f656f3e84a435710b3 Reviewed-by: Daniel Teske --- .../qtcreator-android-manifest-editor.png | Bin 24272 -> 16610 bytes doc/src/android/deploying-android.qdoc | 1 + 2 files changed, 1 insertion(+) diff --git a/doc/images/qtcreator-android-manifest-editor.png b/doc/images/qtcreator-android-manifest-editor.png index 1f9e581de1dec561a9b26ebd251fd76400fcfe7a..42477a6d1c6017bc6789a195a36cf2f1036245ae 100644 GIT binary patch literal 16610 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 diff --git a/doc/src/android/deploying-android.qdoc b/doc/src/android/deploying-android.qdoc index eba54183984..35e3beda58c 100644 --- a/doc/src/android/deploying-android.qdoc +++ b/doc/src/android/deploying-android.qdoc @@ -291,6 +291,7 @@ \li In the \uicontrol Application group, you can give the application a name and select an icon for it. The three icon fields can contain different versions of the icon with low, medium, and high DPI values, from left to right. + You can also give an activity a name and select the activity to run. \li In the \uicontrol Permissions field, you can specify the permissions that your application needs. Users are asked to grant the permissions when they From b554fe47267b5985fb3400e07f1cd4594bc1d4b6 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Tue, 28 Jul 2015 14:26:41 +0200 Subject: [PATCH 076/116] Clang: Fix function name in qWarning() Change-Id: I64618eb06c8834fba0ed186ce0413d6ffc283a85 Reviewed-by: Erik Verbruggen --- src/tools/clangbackend/ipcsource/clangipcserver.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tools/clangbackend/ipcsource/clangipcserver.cpp b/src/tools/clangbackend/ipcsource/clangipcserver.cpp index e8b860520be..a92ba43052e 100644 --- a/src/tools/clangbackend/ipcsource/clangipcserver.cpp +++ b/src/tools/clangbackend/ipcsource/clangipcserver.cpp @@ -120,7 +120,7 @@ void ClangIpcServer::completeCode(const ClangBackEnd::CompleteCodeCommand &comma } catch (const ProjectPartDoNotExistException &exception) { client()->projectPartsDoNotExist(ProjectPartsDoNotExistCommand(exception.projectPartIds())); } catch (const std::exception &exception) { - qWarning() << "Error in ClangIpcServer::unregisterProjectPartsForCodeCompletion:" << exception.what(); + qWarning() << "Error in ClangIpcServer::completeCode:" << exception.what(); } } From 92ff2678453ee88dade133f0568ae6ace1fa4e57 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Tue, 28 Jul 2015 15:04:02 +0200 Subject: [PATCH 077/116] Clang: Remove logging category qtc.clangcodemodel.clangeditordocumentprocessor It did not provide much value. Change-Id: If6d3c65102eef1bba72c8da4870ddb11a47d4dba Reviewed-by: Erik Verbruggen --- src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp index 7cb736f08ed..f8a4191513b 100644 --- a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp +++ b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp @@ -44,10 +44,6 @@ #include #include -#include - -static Q_LOGGING_CATEGORY(log, "qtc.clangcodemodel.clangeditordocumentprocessor") - namespace { typedef CPlusPlus::Document::DiagnosticMessage CppToolsDiagnostic; @@ -59,8 +55,6 @@ QList toCppToolsDiagnostics( QList converted; foreach (const ClangCodeModel::Diagnostic &d, diagnostics) { - qCDebug(log) << "diagnostic" << d.severityAsString() << d.location() << d.spelling(); - if (d.location().fileName() != filePath) continue; From 3b314e50c8009e1140da255fadc50eb9cb8d295e Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Tue, 28 Jul 2015 16:44:39 +0200 Subject: [PATCH 078/116] Clang: Suppress printing diagnostics by default Triggering completion happens often on invalid code, which leads to diagnostics from libclang. Suppress those by default, but allow to inspect them with the logging category: qtc.clangbackend.verboselib=true Change-Id: I802ae58fe1b5244f3228ee73a181ea362de20608 Reviewed-by: Erik Verbruggen --- src/tools/clangbackend/ipcsource/translationunit.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/tools/clangbackend/ipcsource/translationunit.cpp b/src/tools/clangbackend/ipcsource/translationunit.cpp index bfbfb9ec744..9581cb57508 100644 --- a/src/tools/clangbackend/ipcsource/translationunit.cpp +++ b/src/tools/clangbackend/ipcsource/translationunit.cpp @@ -40,6 +40,9 @@ #include #include +#include + +static Q_LOGGING_CATEGORY(verboseLibLog, "qtc.clangbackend.verboselib"); namespace ClangBackEnd { @@ -107,8 +110,10 @@ CXIndex TranslationUnit::index() const { checkIfNull(); - if (!d->index) - d->index = clang_createIndex(1, 1); + if (!d->index) { + const bool displayDiagnostics = verboseLibLog().isDebugEnabled(); + d->index = clang_createIndex(1, displayDiagnostics); + } return d->index; } From b783bcea600d590824c0431f6afb9aa28856db06 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Tue, 28 Jul 2015 16:04:49 +0200 Subject: [PATCH 079/116] Clang: Allow to time high-level functions ...by enabling the logging rule: qtc.clangbackend.timers=true Change-Id: I085c6bbebc0343b74bcb90119d1ebb80ad49518d Reviewed-by: Erik Verbruggen --- .../clangbackendipcdebugutils.cpp | 15 +++++++++++++++ .../clangbackendipc/clangbackendipcdebugutils.h | 17 +++++++++++++++++ src/libs/clangbackendipc/connectionclient.cpp | 7 +++++++ .../clangbackendipcintegration.cpp | 10 ++-------- .../clangbackend/ipcsource/clangipcserver.cpp | 11 +++++++++++ 5 files changed, 52 insertions(+), 8 deletions(-) diff --git a/src/libs/clangbackendipc/clangbackendipcdebugutils.cpp b/src/libs/clangbackendipc/clangbackendipcdebugutils.cpp index 840beafe351..09bd066d187 100644 --- a/src/libs/clangbackendipc/clangbackendipcdebugutils.cpp +++ b/src/libs/clangbackendipc/clangbackendipcdebugutils.cpp @@ -35,12 +35,15 @@ #include #include +#include #include #include #include namespace { +Q_LOGGING_CATEGORY(timersLog, "qtc.clangbackend.timers"); + class DebugInspectionDir : public QTemporaryDir { public: @@ -96,4 +99,16 @@ Utf8String debugId(const FileContainer &fileContainer) return id; } +VerboseScopeDurationTimer::VerboseScopeDurationTimer(const char *id) + : id(id) +{ + if (timersLog().isDebugEnabled()) + timer.start(); +} + +VerboseScopeDurationTimer::~VerboseScopeDurationTimer() +{ + qCDebug(timersLog) << id << "needed" << timer.elapsed() << "ms"; +} + } // namespace ClangBackEnd diff --git a/src/libs/clangbackendipc/clangbackendipcdebugutils.h b/src/libs/clangbackendipc/clangbackendipcdebugutils.h index 6eb57ca8285..a086ae5c129 100644 --- a/src/libs/clangbackendipc/clangbackendipcdebugutils.h +++ b/src/libs/clangbackendipc/clangbackendipcdebugutils.h @@ -31,6 +31,10 @@ #ifndef CLANGBACKENDIPCDEBUGUTILS_H #define CLANGBACKENDIPCDEBUGUTILS_H +#include "clangbackendipc_global.h" + +#include + class FileContainer; class Utf8String; @@ -39,6 +43,19 @@ namespace ClangBackEnd { Utf8String debugWriteFileForInspection(const Utf8String &fileContent, const Utf8String &id); Utf8String debugId(const FileContainer &fileContainer); +class CMBIPC_EXPORT VerboseScopeDurationTimer +{ +public: + VerboseScopeDurationTimer(const char *id = 0); + ~VerboseScopeDurationTimer(); + +private: + const char * const id; + QElapsedTimer timer; +}; + } // namespace ClangBackEnd +#define TIME_SCOPE_DURATION(id) ClangBackEnd::VerboseScopeDurationTimer scopeDurationTimer(id) + #endif // CLANGBACKENDIPCDEBUGUTILS_H diff --git a/src/libs/clangbackendipc/connectionclient.cpp b/src/libs/clangbackendipc/connectionclient.cpp index 83b01fc4a23..6a7c4b34259 100644 --- a/src/libs/clangbackendipc/connectionclient.cpp +++ b/src/libs/clangbackendipc/connectionclient.cpp @@ -30,6 +30,7 @@ #include "connectionclient.h" +#include "clangbackendipcdebugutils.h" #include "cmbcompletecodecommand.h" #include "cmbregistertranslationunitsforcodecompletioncommand.h" #include "cmbunregistertranslationunitsforcodecompletioncommand.h" @@ -76,6 +77,8 @@ ConnectionClient::~ConnectionClient() bool ConnectionClient::connectToServer() { + TIME_SCOPE_DURATION("ConnectionClient::connectToServer"); + startProcess(); resetProcessAliveTimer(); const bool isConnected = connectToLocalSocket(); @@ -123,6 +126,8 @@ void ConnectionClient::setProcessAliveTimerInterval(int processTimerInterval) void ConnectionClient::startProcess() { + TIME_SCOPE_DURATION("ConnectionClient::startProcess"); + if (!isProcessIsRunning()) { connectProcessFinished(); connectStandardOutputAndError(); @@ -216,6 +221,8 @@ void ConnectionClient::printStandardError() void ConnectionClient::finishProcess() { + TIME_SCOPE_DURATION("ConnectionClient::finishProcess"); + processAliveTimer.stop(); disconnectProcessFinished(); diff --git a/src/plugins/clangcodemodel/clangbackendipcintegration.cpp b/src/plugins/clangcodemodel/clangbackendipcintegration.cpp index 37aa888599b..3d44710072c 100644 --- a/src/plugins/clangcodemodel/clangbackendipcintegration.cpp +++ b/src/plugins/clangcodemodel/clangbackendipcintegration.cpp @@ -236,13 +236,10 @@ static bool areCommandsRegistered = false; void IpcCommunicator::initializeBackend() { - // TODO: Add a asynchron API to ConnectionClient, otherwise we might hang here - if (!areCommandsRegistered) { areCommandsRegistered = true; Commands::registerCommands(); } - QElapsedTimer timer; timer.start(); const QString clangBackEndProcessPath = backendProcessPath(); qCDebug(log) << "Starting" << clangBackEndProcessPath; @@ -254,12 +251,9 @@ void IpcCommunicator::initializeBackend() connect(&m_connection, &ConnectionClient::processRestarted, this, &IpcCommunicator::onBackendRestarted); - if (m_connection.connectToServer()) { - qCDebug(log) << "...started and connected in" << timer.elapsed() << "ms."; + // TODO: Add a asynchron API to ConnectionClient, otherwise we might hang here + if (m_connection.connectToServer()) initializeBackendWithCurrentData(); - } else { - qCDebug(log) << "...failed."; - } } void IpcCommunicator::registerEmptyProjectForProjectLessFiles() diff --git a/src/tools/clangbackend/ipcsource/clangipcserver.cpp b/src/tools/clangbackend/ipcsource/clangipcserver.cpp index a92ba43052e..6ba3b0af5dc 100644 --- a/src/tools/clangbackend/ipcsource/clangipcserver.cpp +++ b/src/tools/clangbackend/ipcsource/clangipcserver.cpp @@ -30,6 +30,7 @@ #include "clangipcserver.h" +#include #include #include #include @@ -64,6 +65,8 @@ void ClangIpcServer::end() void ClangIpcServer::registerTranslationUnitsForCodeCompletion(const ClangBackEnd::RegisterTranslationUnitForCodeCompletionCommand &command) { + TIME_SCOPE_DURATION("ClangIpcServer::registerTranslationUnitsForCodeCompletion"); + try { translationUnits.createOrUpdate(command.fileContainers()); unsavedFiles.createOrUpdate(command.fileContainers()); @@ -76,6 +79,8 @@ void ClangIpcServer::registerTranslationUnitsForCodeCompletion(const ClangBackEn void ClangIpcServer::unregisterTranslationUnitsForCodeCompletion(const ClangBackEnd::UnregisterTranslationUnitsForCodeCompletionCommand &command) { + TIME_SCOPE_DURATION("ClangIpcServer::unregisterTranslationUnitsForCodeCompletion"); + try { translationUnits.remove(command.fileContainers()); } catch (const TranslationUnitDoesNotExistException &exception) { @@ -89,6 +94,8 @@ void ClangIpcServer::unregisterTranslationUnitsForCodeCompletion(const ClangBack void ClangIpcServer::registerProjectPartsForCodeCompletion(const RegisterProjectPartsForCodeCompletionCommand &command) { + TIME_SCOPE_DURATION("ClangIpcServer::registerProjectPartsForCodeCompletion"); + try { projects.createOrUpdate(command.projectContainers()); } catch (const std::exception &exception) { @@ -98,6 +105,8 @@ void ClangIpcServer::registerProjectPartsForCodeCompletion(const RegisterProject void ClangIpcServer::unregisterProjectPartsForCodeCompletion(const UnregisterProjectPartsForCodeCompletionCommand &command) { + TIME_SCOPE_DURATION("ClangIpcServer::unregisterProjectPartsForCodeCompletion"); + try { projects.remove(command.projectPartIds()); } catch (const ProjectPartDoNotExistException &exception) { @@ -109,6 +118,8 @@ void ClangIpcServer::unregisterProjectPartsForCodeCompletion(const UnregisterPro void ClangIpcServer::completeCode(const ClangBackEnd::CompleteCodeCommand &command) { + TIME_SCOPE_DURATION("ClangIpcServer::completeCode"); + try { CodeCompleter codeCompleter(translationUnits.translationUnit(command.filePath(), command.projectPartId())); From db3dc92202bfb580d23045bd880bc3c18a43ffa3 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Tue, 28 Jul 2015 16:51:36 +0200 Subject: [PATCH 080/116] Clang: Clarify stdout/stderr prefix of backend Change-Id: I936e75ddc26b812c4570859e6a61c2a09590ed98 Reviewed-by: Erik Verbruggen --- src/libs/clangbackendipc/connectionclient.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libs/clangbackendipc/connectionclient.cpp b/src/libs/clangbackendipc/connectionclient.cpp index 6a7c4b34259..f13e889f8f2 100644 --- a/src/libs/clangbackendipc/connectionclient.cpp +++ b/src/libs/clangbackendipc/connectionclient.cpp @@ -56,8 +56,8 @@ QString connectionName() ConnectionClient::ConnectionClient(IpcClientInterface *client) : serverProxy_(client, &localSocket), isAliveTimerResetted(false), - stdErrPrefixer("ClangBackEnd-StdErr: "), - stdOutPrefixer("ClangBackEnd: ") + stdErrPrefixer("clangbackend.stderr: "), + stdOutPrefixer("clangbackend.stdout: ") { processAliveTimer.setInterval(10000); From 953be3d3b25baf7e04d11f04284975843fc6c59b Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Tue, 28 Jul 2015 12:29:24 +0200 Subject: [PATCH 081/116] CppEditor: Tests: Revive tests depending on loaded projects The tests were broken since the qmake project manager switched to an asynchronous loading. We can't simply check if there are loaded projects because at time the tests are executed there are not any. The user has to set some environment variable in order to make these tests run. Change-Id: I94778578dea5562ee5dad2c565c7b877c18996a7 Reviewed-by: Erik Verbruggen --- src/plugins/cppeditor/cppeditorplugin.h | 13 ++++- .../cppeditor/fileandtokenactions_test.cpp | 49 ++++++++----------- 2 files changed, 32 insertions(+), 30 deletions(-) diff --git a/src/plugins/cppeditor/cppeditorplugin.h b/src/plugins/cppeditor/cppeditorplugin.h index 8745dc9bb4c..a4f4304b0cf 100644 --- a/src/plugins/cppeditor/cppeditorplugin.h +++ b/src/plugins/cppeditor/cppeditorplugin.h @@ -213,8 +213,17 @@ private slots: void test_includehierarchy_data(); void test_includehierarchy(); - // The following tests depend on the projects that are loaded on startup - // and will be skipped in case no projects are loaded. + // The following tests operate on a project and require special invocation: + // + // Ensure that the project is properly configured for a given settings path: + // $ ./qtcreator -settingspath /your/settings/path /path/to/project + // + // ...and that it builds, which might prevent blocking dialogs for not + // existing files (e.g. ui_*.h). + // + // Run a test: + // $ export QTC_TEST_WAIT_FOR_LOADED_PROJECT=1 + // $ ./qtcreator -settingspath /your/settings/path -test CppEditor,test_openEachFile /path/to/project void test_openEachFile(); void test_switchHeaderSourceOnEachFile(); void test_moveTokenWiseThroughEveryFile(); diff --git a/src/plugins/cppeditor/fileandtokenactions_test.cpp b/src/plugins/cppeditor/fileandtokenactions_test.cpp index 7e3e463589c..63ab5cc6882 100644 --- a/src/plugins/cppeditor/fileandtokenactions_test.cpp +++ b/src/plugins/cppeditor/fileandtokenactions_test.cpp @@ -118,17 +118,8 @@ class TestActionsTestCase : public Tests::TestCase CppEditor *editor, const Actions &tokenActions); static void undoAllChangesAndCloseAllEditors(); - - /// This function expects: - /// (1) Only Qt4 projects are loaded (qmake in PATH should point to Qt4/bin). - /// (2) No *.pro.user file exists for the projects. - static void configureAllProjects(const QList > &projects); - - static bool allProjectsConfigured; }; -bool TestActionsTestCase::allProjectsConfigured = false; - typedef TestActionsTestCase::Actions Actions; typedef TestActionsTestCase::ActionPointer ActionPointer; @@ -137,18 +128,35 @@ Actions singleAction(const ActionPointer &action) return Actions() << action; } +static bool waitUntilAProjectIsLoaded(int timeOutInMs = 30000) +{ + QElapsedTimer timer; + timer.start(); + + while (timer.elapsed() < timeOutInMs) { + if (!CppModelManager::instance()->projectInfos().isEmpty()) + return true; + + QCoreApplication::processEvents(); + QThread::msleep(20); + } + + return false; +} + TestActionsTestCase::TestActionsTestCase(const Actions &tokenActions, const Actions &fileActions) : Tests::TestCase(/*runGarbageCollector=*/false) { QVERIFY(succeededSoFar()); + if (qgetenv("QTC_TEST_WAIT_FOR_LOADED_PROJECT") != "1") + QSKIP("Environment variable QTC_TEST_WAIT_FOR_LOADED_PROJECT=1 not set."); + QVERIFY(waitUntilAProjectIsLoaded()); + // Collect files to process QStringList filesToOpen; QList > projects; - const QList projectInfos - = m_modelManager->projectInfos(); - if (projectInfos.isEmpty()) - QSKIP("No project(s) loaded. Test operates only on loaded projects."); + const QList projectInfos = m_modelManager->projectInfos(); foreach (const ProjectInfo &info, projectInfos) { QPointer project = info.project(); @@ -160,12 +168,6 @@ TestActionsTestCase::TestActionsTestCase(const Actions &tokenActions, const Acti filesToOpen << sourceFile; } - // Configure all projects on first execution of this function (= very first test) - if (!TestActionsTestCase::allProjectsConfigured) { - configureAllProjects(projects); - TestActionsTestCase::allProjectsConfigured = true; - } - Utils::sort(filesToOpen); // Process all files from the projects @@ -311,15 +313,6 @@ void TestActionsTestCase::undoAllChangesAndCloseAllEditors() QCOMPARE(DocumentModel::openedDocuments().size(), 0); } -void TestActionsTestCase::configureAllProjects(const QList > - &projects) -{ - foreach (const QPointer &project, projects) { - qDebug() << "*** Configuring project" << project->displayName(); - project->configureAsExampleProject(QStringList()); - } -} - class NoOpTokenAction : public TestActionsTestCase::AbstractAction { public: From 8e5221fcab61132c9acbb431f0f54a744e681a19 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Wed, 29 Jul 2015 12:51:16 +0200 Subject: [PATCH 082/116] QmlDesigner: Crash fix When checking for anchors cycles anchors might be invalid. Change-Id: I94778578dea5562ee5dad3c565c7b877c18996aa Reviewed-by: Tim Jenssen --- .../qmldesigner/designercore/model/qmlanchors.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/plugins/qmldesigner/designercore/model/qmlanchors.cpp b/src/plugins/qmldesigner/designercore/model/qmlanchors.cpp index b5e9eec8c62..a08f92b89c2 100644 --- a/src/plugins/qmldesigner/designercore/model/qmlanchors.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmlanchors.cpp @@ -366,6 +366,9 @@ void QmlAnchors::removeAnchors() bool QmlAnchors::instanceHasAnchor(AnchorLineType sourceAnchorLine) const { + if (!qmlItemNode().isValid()) + return false; + const PropertyName propertyName = anchorPropertyName(sourceAnchorLine); if (sourceAnchorLine & AnchorLineFill) @@ -453,6 +456,9 @@ bool QmlAnchors::instanceHasMargin(AnchorLineType sourceAnchorLineType) const static bool checkForHorizontalCycleRecusive(const QmlAnchors &anchors, QList &visitedItems) { + if (!anchors.isValid()) + return false; + visitedItems.append(anchors.qmlItemNode()); if (anchors.instanceHasAnchor(AnchorLineLeft)) { AnchorLine leftAnchorLine = anchors.instanceAnchor(AnchorLineLeft); @@ -477,6 +483,9 @@ static bool checkForHorizontalCycleRecusive(const QmlAnchors &anchors, QList &visitedItems) { + if (!anchors.isValid()) + return false; + visitedItems.append(anchors.qmlItemNode()); if (anchors.instanceHasAnchor(AnchorLineTop)) { From c41565de03c81d984f528f2313828e17653d35f0 Mon Sep 17 00:00:00 2001 From: Robert Loehning Date: Tue, 28 Jul 2015 16:37:11 +0200 Subject: [PATCH 083/116] QmlDesigner: Fix typo Change-Id: I0c82f7f1083ed7282a0d246d7f131a17013b4245 Reviewed-by: Thomas Hartmann --- .../designercore/instances/nodeinstanceserverproxy.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp index 88d96cd40f8..d0aa4259a57 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp @@ -354,7 +354,7 @@ void NodeInstanceServerProxy::writeCommand(const QVariant &command) writeCommandToIODecive(command, m_thirdSocket.data(), m_writeCommandCounter); if (m_captureFileForTest.isWritable()) { - qDebug() << "Write strean to file: " << m_captureFileForTest.fileName(); + qDebug() << "Write stream to file: " << m_captureFileForTest.fileName(); writeCommandToIODecive(command, &m_captureFileForTest, m_writeCommandCounter); qDebug() << "\twrite file: " << m_captureFileForTest.pos(); } From f4796d00327a6a7a781b52599da57a3e1aa98c55 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Wed, 29 Jul 2015 12:16:14 +0200 Subject: [PATCH 084/116] Doc: modifying key values in Qbs profiles Update the screenshot to show the format in which the key names must be entered. Change-Id: I54187e6d456462ffd7b74f7ff424e28779b60b73 Reviewed-by: Christian Kandeler --- doc/images/qtcreator-options-qbs.png | Bin 21989 -> 17346 bytes doc/src/projects/creator-projects-qbs.qdoc | 19 ++++++++++++++----- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/doc/images/qtcreator-options-qbs.png b/doc/images/qtcreator-options-qbs.png index 48065a1ae8c91e4bdbd8aaace567aff8d1eac722..e1d758035f5c63f263643aaf65113565300ddc06 100644 GIT binary patch literal 17346 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 literal 21989 zcmV)MK)An&P)lr7 z|Nrgn?e6aG;Nalw?Cj^~=jP_-(9qEP`}^eNgwwK{rvLs^2^K1FMd%*x1t2((&=};^N|{sHnBIwcOm?^Yrun|Niy$_21v$t*x!v+S+96i)VR2~nwpxfuC8}?cgV=dv$M0_-rmH-#Ldmk&(F`o!os_|y!!h3qN1Xz zs;bP)%%!EJ*4EbO=;)rFo_&3NgM)*BfPiyzbHKpBdU|?hW@h>M`FwnQu&}Vby}i1+ zx|Wuf+uPgl@bHU^i^A#sIXF1i*VnhVx4F5x$;!%+k&=&&jw>rQ|NZnzMMEVYB!6d5 zn#%Ttg@y3_|5!LVh=_<|Og8xc|ECcMK{Dz8|EkR7OD!_N-1O|> z%s^RG!*Pyx4=i0{5 z@c-iX{>Iwo*Uwx&#O{yiB?^7b7*Yq_x-+QPs)=iivDjaXt{gOG-?@t1 z?)u^9>3EZ^x2~tHo{n{bjO+08^YH80;pfKD+1}H{mx+GIrggTOf;bo$O@h0qvbw>r zo~Mv}dbi{?L3`ry^Y+@cOM0K+*UzA-wo+-Sai-6Zu*Z#NU$%lusGpgbQ$$o>Os(35 z=kDIx;?VkbZflKG_E}JfqHm4EXuN1&(CVo4my)2nea$>HJ-i~P002^;NklJq041XC9@h-*|DHEtvx)Tp>Y-6}3< ztSbV>EeLWDjd6`ZMRALo7{QR}!Mm?50xdm2f=Q?Sekrf-4ZXDer?1ION|2x{q}KEV zPlB!>Ee}vgXxf-5-8OmviAdlI(((j_gk4?M6EUMn;0Dt2L_Iw9YKGpE#uUdRs8MGNty1wA?^io@jKb1_3jcZMc7J?pKq+fV0AbaOhG-*?Z1)(9(&$r`+9x)nz}XpN zqQZfTG#MgDG&5S)4|Fne1WwDYtnomNUMS8NDhh0diu!T27UOw)S`$v4=@)C;@t|>Y z4QD6Bqy_Z@9fD$~=oAFW2aSvz*avhVru<9mmd(Ji#TKFLd*!&ti`YYLX|ab&YlNh@ z8f*1yXIc}72loLTf`bRA5jd?;0|=S`9TaI9oHMOyHjZPPsyJca64{y8oV7~$@}9L? zYHmJGq;E9QvMR1EtpV@~c1F{(el$U%(0Bs4rj^XGc3g&lN4Lfz2_nMm=Z9 zVL81?Z%9een^*@9(sDOsNDI>H2D)#!!1aJ2427~Ft!}mzI<)(Av9KLNTHQq_hV+D#0FV~& z2+{�cimzNDGJsqy?NHEg%+<7WhwaT5x(A`~#<_fe65c2%I1-AQq4oaDueDO&X%` zJ6?5`+*i}0`;HGE;df>Q$h_y`9$!t17&;^#`JMjJv4q#~)wCkxc!?jPU0E5I)#(m*73;Rm7f_qAs`g;~eYeT_u%omMW-Woze=#Bzuql z{PR2OP{D`kczvgS^;y%ta%CW%F8W+_3Qr>Tu9)*o5-4^N^s;0IKOIP`H`BTjwWbv{ z-)y?RYW0byHi|QNt+pg8Wq*dGxmG zs{ZKl=M*9-5~o#7iCqX66O(`_O5;swiG4$?%iXm7bDpKpx_3@Pya$xnp}5S|0gzU&3bB|@-}O@jXAS6Xp$9F9`>7bIUnzt67(8_tdKpK^tr+5b8IjqR011MEFh)Y5jMD5)e;1Af&2}zeXbG!e@UEm`8X}4-4xyEIm$zf& z{(&DF*O%}XzM2*tIyuS@#SMpxYW}~$qk{ZSz#zhV_-cfB%Z918IdTX~;19JMg~u3?_Uz&4%!Y8a9RYEi`9 z<2-ejU{=mug^NBvMqvk@ks<#Kk7mp1J1>u-(%Zh$Ti3)1bSsF-4-!JX?0KLrnk_|A zkO$?^<#bjHk9PL*$X%cp2NQqER6|`C;&(a6ro~WybD^))NB?7{!!}Kv%|qV~24_F{ zq&}9~q5Int$s+FW+zMig1;xEIjx2Mb1=?@o2IHx^<7GA{bSsV3B3&crV>mCBQwS}W zU zJiK(vFkT{;66B<39>G8esC;;`LQuPA zQq)mq_KBj(p4#$Jc18;Bj-Xv^i4NR3C{qX|9o3>6+-?u;zntH}FODAZ5sRZAE|9c$ zHs9m#i2FP9SK~^Bt%F$1zZxeuM_(LW;4RhUJS?h+G>cdUSmRR56CpC7nyV~yJP8DA8TdKR8eGVK*ASpKnmb%!j`!KUUiqH;$|rIqP9yJ0$(o zqRooB0rjU1>Z=KFQD~uOV%ib3T$@mZi5}&&PxjOaZHd<~HUFz>Rd;@}T>qV=Dh|{N zgd9qR{)ROi)NROJnz|pR9bO$!YfRU8X5?h_o-wg416gILVR}7KgPIk3R3;{-kORkD z27RE068l;|E>)b2i%qklX}P#f)QsFxi}z~RA_}0^h{D|)4V33=R6hR;mo<7N8?v}p zE~=eW`pmmaL;gFph=97g$h~sZr0Gud7b)zumC|US5@ZQ_PB|UxFZ@kYl~haJ+FG@I zKKywgsg~u!+_0wZMksF7uFM;?Q%ay#5m0MEt7>hvlLv_{J)EdnP;1_-iV-xD%32s@ zW_^L0q10=OxgS(vT&OsF2qu;JkB@ul*Zi7D0SrTuTV zYin+tchEEfNk6rEhS}>6JRY#VF{V_vJ?pnrn$>MC&B_nzrp*QAbYh_KmbS!LQPtDH zwnbkVSJ*FK60=t0*n}zu)QSdL#+uo%Ii;2_(vt8$Zv4eVr?S>eU&ZwLwS;K_ZB>-xYVHE1#`#@0Gmk)DHxt*s#5v6I#_^FsgC=N|(6pVdNC>kw{ zrYeq&S1^p7nqZia58PdMnXQil_dp|8SY`wEwbF9t0|tJ14A08KaM?3)48ij9FdU(C z@`R80oGd&`hUMkpSWcDUbb&YEDEI4bm8

}x^(hX2R#H01xy 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 IM6N<$f_qRoX8-^I diff --git a/doc/src/projects/creator-projects-qbs.qdoc b/doc/src/projects/creator-projects-qbs.qdoc index fa03e92064a..26fbac4160d 100644 --- a/doc/src/projects/creator-projects-qbs.qdoc +++ b/doc/src/projects/creator-projects-qbs.qdoc @@ -155,8 +155,8 @@ \image qtcreator-options-qbs.png - To add keys and values to a build profile that is associated with a build - and run kit: + You can modify a build profile that is associated with a build and run kit + by editing the values of the keys generated by \QC and by adding new values: \list 1 @@ -166,12 +166,21 @@ \li Select \uicontrol Edit to edit the profile associated with the kit. - \li Select \uicontrol Add to add keys and values to the profile. - Spefify keys as: \c .. Specify the - values as JSON literals. + \li Select \uicontrol Add to add keys and values to the profile or to + modify existing values. + + \li In the \uicontrol Key column, spefify the key to add or modify as: + \c .. + + \li In the \uicontrol Value column, specify a value as a JSON literal. + + \li Click \uicontrol OK. \endlist + The values that you have modified are displayed in red in the + \uicontrol {Profile properties} field. + For a list of available keys and values, see the \l{http://doc.qt.io/qbs/list-of-modules.html}{List of Modules} in the Qbs Manual. From 5145fc8509111c22185cbbed3d997429c5da1433 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Wed, 29 Jul 2015 12:28:19 +0200 Subject: [PATCH 085/116] TextEditor: Fix potential memory leak in code assist Manually managing the ownership of the code assist objets gets messy. We should use smart pointers. Change-Id: I29fe665e52438a79c3268b74898c583bb302f1fc Reviewed-by: Erik Verbruggen --- src/plugins/texteditor/codeassist/codeassistant.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/plugins/texteditor/codeassist/codeassistant.cpp b/src/plugins/texteditor/codeassist/codeassistant.cpp index e7a4d181ae3..19c117565dc 100644 --- a/src/plugins/texteditor/codeassist/codeassistant.cpp +++ b/src/plugins/texteditor/codeassist/codeassistant.cpp @@ -229,8 +229,10 @@ void CodeAssistantPrivate::requestProposal(AssistReason reason, m_assistKind = kind; IAssistProcessor *processor = provider->createProcessor(); AssistInterface *assistInterface = m_editorWidget->createAssistInterface(kind, reason); - if (!assistInterface) + if (!assistInterface) { + delete processor; return; + } switch (provider->runType()) { case IAssistProvider::Synchronous: { From 6bb2aa6ba15519e1593d82d93ac818ff95e9d443 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Wed, 29 Jul 2015 10:58:34 +0200 Subject: [PATCH 086/116] Clang: Fix memory leak on completion Leak happened if the user triggered the completion again, before the results for the first completion arrived. Side note: This is one more reason for using smart pointers to manage code assist objects. Change-Id: I582d364286ca47f8622383f3365ad4e5933eb2df Reviewed-by: Erik Verbruggen --- src/plugins/texteditor/codeassist/codeassistant.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/plugins/texteditor/codeassist/codeassistant.cpp b/src/plugins/texteditor/codeassist/codeassistant.cpp index 19c117565dc..65a899a384b 100644 --- a/src/plugins/texteditor/codeassist/codeassistant.cpp +++ b/src/plugins/texteditor/codeassist/codeassistant.cpp @@ -34,6 +34,7 @@ #include "iassistprocessor.h" #include "textdocument.h" #include "iassistproposal.h" +#include "iassistproposalmodel.h" #include "iassistproposalwidget.h" #include "assistinterface.h" #include "assistproposalitem.h" @@ -263,8 +264,11 @@ void CodeAssistantPrivate::requestProposal(AssistReason reason, case IAssistProvider::Asynchronous: { processor->setAsyncCompletionAvailableHandler( [this, processor, reason](IAssistProposal *newProposal){ - if (m_asyncProcessor != processor) + if (m_asyncProcessor != processor) { + delete newProposal->model(); + delete newProposal; return; + } invalidateCurrentRequestData(); QTC_CHECK(newProposal); From a1da7182f91a8d3a197f6356eafbba46e52cd2a3 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Wed, 29 Jul 2015 12:15:15 +0200 Subject: [PATCH 087/116] Clang: Fix memory leak on completion II ...for the following case: void fun1(); void fun2(); void g() { fu // Type 'n', wait for the widget, hit return to choose the item } Once e.g. "fun1" is chosen, the completion is triggered again but the processor (and as result the assist interface) is not freed. The assumption was that for the AsynchronousWithThread case IAssistProcessor::perform() would either return 0 (async completion was started) or != 0 for an immediate proposal. It turns out there is a third case: no proposal if the completion is not applicable, e.g. choosing an item in the example above will retrigger completion, however no completion makes sense for "fun1()" for an idle editor. Workaround the case with a getter/setter in IAssistProcessor. Proper solution should (slightly?) rework the IAssistProcessor API. Change-Id: I44dde8287998d54ded1ea07e7c39a5157cf62029 Reviewed-by: Erik Verbruggen --- src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp | 4 +++- src/plugins/texteditor/codeassist/codeassistant.cpp | 2 ++ src/plugins/texteditor/codeassist/iassistprocessor.h | 4 ++++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp b/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp index 4c1304b3512..bff0c4577e7 100644 --- a/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp +++ b/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp @@ -226,8 +226,10 @@ IAssistProposal *ClangCompletionAssistProcessor::perform(const AssistInterface * { m_interface.reset(static_cast(interface)); - if (interface->reason() != ExplicitlyInvoked && !accepts()) + if (interface->reason() != ExplicitlyInvoked && !accepts()) { + setPerformWasApplicable(false); return 0; + } return startCompletionHelper(); // == 0 if results are calculated asynchronously } diff --git a/src/plugins/texteditor/codeassist/codeassistant.cpp b/src/plugins/texteditor/codeassist/codeassistant.cpp index 65a899a384b..8b4c5600dec 100644 --- a/src/plugins/texteditor/codeassist/codeassistant.cpp +++ b/src/plugins/texteditor/codeassist/codeassistant.cpp @@ -281,6 +281,8 @@ void CodeAssistantPrivate::requestProposal(AssistReason reason, if (IAssistProposal *newProposal = processor->perform(assistInterface)) { displayProposal(newProposal, reason); delete processor; + } else if (!processor->performWasApplicable()) { + delete processor; } // ...otherwise the async request was triggered diff --git a/src/plugins/texteditor/codeassist/iassistprocessor.h b/src/plugins/texteditor/codeassist/iassistprocessor.h index 0d4fd31e9df..3456434c86b 100644 --- a/src/plugins/texteditor/codeassist/iassistprocessor.h +++ b/src/plugins/texteditor/codeassist/iassistprocessor.h @@ -56,8 +56,12 @@ class TEXTEDITOR_EXPORT IAssistProcessor using AsyncCompletionsAvailableHandler = std::function; void setAsyncCompletionAvailableHandler(const AsyncCompletionsAvailableHandler &finalizer); + bool performWasApplicable() { return m_performWasApplicable; } + void setPerformWasApplicable(bool applicable) { m_performWasApplicable = applicable; } + private: AsyncCompletionsAvailableHandler m_asyncCompletionsAvailableHandler; + bool m_performWasApplicable = true; }; } // TextEditor From fb64ca4e87a921fff2309a5522feea480573866e Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Wed, 29 Jul 2015 14:33:38 +0200 Subject: [PATCH 088/116] Doc: improve docs on managing sessions Change-Id: I6133ab51c62fc21d3fe07e4b7b3a9143a7a2d071 Task-number: QTCREATORBUG-14553 Reviewed-by: Daniel Teske --- doc/src/howto/creator-sessions.qdoc | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/doc/src/howto/creator-sessions.qdoc b/doc/src/howto/creator-sessions.qdoc index 694843ea9cc..76b035a358a 100644 --- a/doc/src/howto/creator-sessions.qdoc +++ b/doc/src/howto/creator-sessions.qdoc @@ -55,20 +55,22 @@ developers working on the same projects. For example, if you work on a project and need to switch to another project - for a while, you can save your workspace as a session and then close the - project and all the files in it. Everything that you open after saving the - session becomes a part of a new session. When you want to return to working - on the first project, open the saved session. \QC opens the projects and - files that belong to the session. + for a while, you can clone the current session to save it under a name and + create a new session for the other project. Everything that you open after + switching to the new session becomes a part of it. When you want to return + to working on the first project, switch to the saved session. \QC opens the + projects and files that belong to the session. - To create a new session or remove existing sessions, select \uicontrol File > - \uicontrol{Session Manager}. + To save a session under a new name, select \uicontrol File > + \uicontrol {Session Manager} > \uicontrol Clone. + + To create a new session, select \uicontrol File > + \uicontrol {Session Manager} > \uicontrol New. \image qtcreator-session-manager.png - To switch between sessions, choose \uicontrol {File > Session Manager}. If you do - not create or select a session, \QC always uses the default session, which - was created the last time you exited \QC. + To switch between sessions, choose \uicontrol {File > Session Manager} > + \uicontrol {Switch to}. When you launch \QC, a list of existing sessions is displayed in the \uicontrol Welcome mode. From 0aee8158c21985435189a96cc14bab74f11ed948 Mon Sep 17 00:00:00 2001 From: Daniel Teske Date: Wed, 29 Jul 2015 16:22:11 +0200 Subject: [PATCH 089/116] Fix crash on closing Creator Removing a target setup widget might lead to removing a kit, due to some kits being temporary for importers. A kit removal then would lead to a target removal and this would make the code recurse into the widget cache. Fix that by ensuring that we disconnect from the project first in ProjectWindow::deregisterProject. And also remove the clearing of the project window, instead simply clear the widget cache as each project is closed. Change-Id: I278c43ef4ba77217428c5c36f0a07d0d96cb3022 Task-number: QTCREATORBUG-14694 Reviewed-by: Nikolai Kosjar Reviewed-by: Daniel Teske --- src/plugins/projectexplorer/projectwindow.cpp | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/src/plugins/projectexplorer/projectwindow.cpp b/src/plugins/projectexplorer/projectwindow.cpp index 9bd96946f71..dfa43f239e9 100644 --- a/src/plugins/projectexplorer/projectwindow.cpp +++ b/src/plugins/projectexplorer/projectwindow.cpp @@ -96,11 +96,7 @@ ProjectWindow::~ProjectWindow() void ProjectWindow::aboutToShutdown() { - showProperties(-1, -1); // that's a bit stupid, but otherwise stuff is still - // connected to the session - m_cache.clear(); - disconnect(KitManager::instance(), 0, this, 0); - disconnect(SessionManager::instance(), 0, this, 0); + showProperties(-1, -1); } void ProjectWindow::removedTarget(Target *) @@ -179,13 +175,14 @@ bool ProjectWindow::deregisterProject(Project *project) if (index == -1) return false; + disconnect(project, SIGNAL(removedTarget(ProjectExplorer::Target*)), + this, SLOT(removedTarget(ProjectExplorer::Target*))); + QVector deletedWidgets = m_cache.deregisterProject(project); if (deletedWidgets.contains(m_currentWidget)) m_currentWidget = 0; m_tabWidget->removeTab(index); - disconnect(project, SIGNAL(removedTarget(ProjectExplorer::Target*)), - this, SLOT(removedTarget(ProjectExplorer::Target*))); return true; } @@ -383,8 +380,3 @@ int WidgetCache::recheckFactories(Project *project, int oldSupportsIndex) return newIndex; } -void WidgetCache::clear() -{ - while (!m_projects.isEmpty()) - deregisterProject(m_projects.first().project); -} From 50e9ef61c551ced6aea9505ee27ec66a27b55c33 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Wed, 29 Jul 2015 15:47:23 +0200 Subject: [PATCH 090/116] QmlDesigner: Enforce ScrollView to be non interactive On some platforms the style reports touch support and ScrollViews become flickable. This is not what user expect from a "normal desktop" application. Task-number: QTCREATORBUG-14818 Task-number: QTCREATORBUG-14822 Change-Id: Ie15fd66667dca1c0863a29e87ff76583d9aa3eee Reviewed-by: Tim Jenssen --- .../qtcreator/qmldesigner/common/DesignerScrollViewStyle.qml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/share/qtcreator/qmldesigner/common/DesignerScrollViewStyle.qml b/share/qtcreator/qmldesigner/common/DesignerScrollViewStyle.qml index 5bfd2c61831..634bd005abb 100644 --- a/share/qtcreator/qmldesigner/common/DesignerScrollViewStyle.qml +++ b/share/qtcreator/qmldesigner/common/DesignerScrollViewStyle.qml @@ -60,4 +60,8 @@ ScrollViewStyle { decrementControl: Item {} incrementControl: Item {} corner: Item {} + + //Even if the platform style reports touch support a scrollview should not be flickable. + Component.onCompleted: control.flickableItem.interactive = true + transientScrollBars: false } From 7d81d2a00da9368ef653bf8d0770b788150cade6 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Thu, 30 Jul 2015 10:05:09 +0200 Subject: [PATCH 091/116] Clang: Disable debug logging categories ...apparently they are enabled by default. Change-Id: I6bda380655050c62e124de451a8aefd440cf4b91 Reviewed-by: Christian Stenger --- src/tools/clangbackend/clangbackendmain.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/tools/clangbackend/clangbackendmain.cpp b/src/tools/clangbackend/clangbackendmain.cpp index 500515f51f2..914d8827cac 100644 --- a/src/tools/clangbackend/clangbackendmain.cpp +++ b/src/tools/clangbackend/clangbackendmain.cpp @@ -29,6 +29,7 @@ ****************************************************************************/ #include +#include #include #include @@ -36,6 +37,8 @@ int main(int argc, char *argv[]) { + QLoggingCategory::setFilterRules(QStringLiteral("*.debug=false")); + QCoreApplication::setOrganizationName(QStringLiteral("QtProject")); QCoreApplication::setOrganizationDomain(QStringLiteral("qt-project.org")); QCoreApplication::setApplicationName(QStringLiteral("ClangBackend")); From ffcb2e654e89f7f3e0d2e745a277af1cad28a42f Mon Sep 17 00:00:00 2001 From: Jake Petroules Date: Wed, 29 Jul 2015 14:42:52 -0700 Subject: [PATCH 092/116] Qbs: generate correct architecture name for iOS armv7. Task-number: QBS-839 Change-Id: I535992feb2dd4db9f30dc1458b4c6a156a26849f Reviewed-by: Christian Kandeler --- src/plugins/qbsprojectmanager/defaultpropertyprovider.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/plugins/qbsprojectmanager/defaultpropertyprovider.cpp b/src/plugins/qbsprojectmanager/defaultpropertyprovider.cpp index 3cd18a6a73c..11e25e309f1 100644 --- a/src/plugins/qbsprojectmanager/defaultpropertyprovider.cpp +++ b/src/plugins/qbsprojectmanager/defaultpropertyprovider.cpp @@ -190,6 +190,9 @@ QVariantMap DefaultPropertyProvider::autoGeneratedProperties(const ProjectExplor default: break; } + } else if (targetAbi.architecture() == ProjectExplorer::Abi::ArmArchitecture && + targetAbi.os() == ProjectExplorer::Abi::MacOS) { + architecture.append(QLatin1String("v7")); } data.insert(QLatin1String(QBS_ARCHITECTURE), qbs::canonicalArchitecture(architecture)); From 370f0229776558a2f1753fa84233e8779c364200 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Thu, 30 Jul 2015 11:15:31 +0200 Subject: [PATCH 093/116] Doc: managing Clang Static Analyzer suppression list Change-Id: I5318d1e6fdcf21f1057b9faf2578c03a307c3855 Reviewed-by: Christian Kandeler Reviewed-by: Nikolai Kosjar --- doc/src/analyze/creator-clang-static-analyzer.qdoc | 4 +++- doc/src/projects/creator-projects-settings-overview.qdoc | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/doc/src/analyze/creator-clang-static-analyzer.qdoc b/doc/src/analyze/creator-clang-static-analyzer.qdoc index beb3e03463a..69ec1abc77b 100644 --- a/doc/src/analyze/creator-clang-static-analyzer.qdoc +++ b/doc/src/analyze/creator-clang-static-analyzer.qdoc @@ -44,7 +44,9 @@ \l{http://clang-analyzer.llvm.org/available_checks.html}{Available Checkers}. To suppress diagnostics, select \uicontrol {Suppress This Diagnostic} in the - context menu. + context menu. To view the suppression list for a project and to remove + diagnostics from it, select \uicontrol {Clang Static Analyzer Settings} in + the \uicontrol Projects mode. \section1 Setting Up Clang Static Analyzer diff --git a/doc/src/projects/creator-projects-settings-overview.qdoc b/doc/src/projects/creator-projects-settings-overview.qdoc index 2e76e974e5b..b965ddbd6d5 100644 --- a/doc/src/projects/creator-projects-settings-overview.qdoc +++ b/doc/src/projects/creator-projects-settings-overview.qdoc @@ -88,6 +88,9 @@ \li \l{Specifying Dependencies}{Dependencies} + \li \l{Using Clang Static Analyzer}{Clang Static Analyzer Settings} + (commercial only) + \endlist Use the \uicontrol Build and \uicontrol Run buttons to switch between the build and From bb3b64995703105708c46bfb0b3eb58464feb00c Mon Sep 17 00:00:00 2001 From: Robert Loehning Date: Thu, 30 Jul 2015 15:32:36 +0200 Subject: [PATCH 094/116] Squish: Skipping tst_opencreator_qbs qtcreator.qbs contains a syntax error which Creator does not ignore anymore. Change-Id: Ifddeea5b81080c1388b35f2c2378f0f2eabbd318 Task-number: QTCREATORBUG-14828 Reviewed-by: Christian Stenger --- tests/system/suite_general/tst_opencreator_qbs/test.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/system/suite_general/tst_opencreator_qbs/test.py b/tests/system/suite_general/tst_opencreator_qbs/test.py index 012187a969a..eb431996bf9 100644 --- a/tests/system/suite_general/tst_opencreator_qbs/test.py +++ b/tests/system/suite_general/tst_opencreator_qbs/test.py @@ -31,6 +31,8 @@ source("../../shared/qtcreator.py") def main(): + test.warning("This test is known to fail, see QTCREATORBUG-14828. Skipping it.") + return pathCreator = os.path.join(srcPath, "creator", "qtcreator.qbs") if not neededFilePresent(pathCreator): return From aad5ca12c4c672ff9a73bb92db671e9f7fdec9cd Mon Sep 17 00:00:00 2001 From: Jake Petroules Date: Wed, 22 Jul 2015 08:04:58 -0700 Subject: [PATCH 095/116] Update qbs submodule and adapt QbsProjectManager accordingly. Change-Id: I29dc48b991fc04b599e60ae63a7f4b7978dc9f3d Reviewed-by: Jake Petroules Reviewed-by: Christian Kandeler --- .../defaultpropertyprovider.cpp | 30 +------------------ src/plugins/qbsprojectmanager/qbsconstants.h | 6 +--- src/shared/qbs | 2 +- 3 files changed, 3 insertions(+), 35 deletions(-) diff --git a/src/plugins/qbsprojectmanager/defaultpropertyprovider.cpp b/src/plugins/qbsprojectmanager/defaultpropertyprovider.cpp index 11e25e309f1..336ee55b6af 100644 --- a/src/plugins/qbsprojectmanager/defaultpropertyprovider.cpp +++ b/src/plugins/qbsprojectmanager/defaultpropertyprovider.cpp @@ -230,41 +230,13 @@ QVariantMap DefaultPropertyProvider::autoGeneratedProperties(const ProjectExplor const QString toolchainPrefix = extractToolchainPrefix(&compilerName); if (!toolchainPrefix.isEmpty()) data.insert(QLatin1String(CPP_TOOLCHAINPREFIX), toolchainPrefix); - data.insert(QLatin1String(CPP_COMPILERNAME), compilerName); + data.insert(QLatin1String(CPP_CXXCOMPILERNAME), 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()); - QVariantMap m; - if (toolchain.contains(QLatin1String("clang"))) { - m[QLatin1String("c")] = m[QLatin1String("objc")] = QLatin1String("clang"); - m[QLatin1String("cpp")] = m[QLatin1String("objcpp")] = QLatin1String("clang++"); - } else if (toolchain.contains(QLatin1String("gcc"))) { - m[QLatin1String("c")] = m[QLatin1String("objc")] = QLatin1String("gcc"); - m[QLatin1String("cpp")] = m[QLatin1String("objcpp")] = QLatin1String("g++"); - } - const QString fullPrefix = cxxFileInfo.absolutePath() + QLatin1Char('/') + toolchainPrefix; - for (auto it = m.begin(); it != m.end();) { - const QString filePath = Utils::HostOsInfo::withExecutableSuffix(fullPrefix - + it.value().toString()); - if (QFile::exists(filePath)) { - it.value() = filePath; - ++it; - } else { - it = m.erase(it); - } - } - if (!m.isEmpty()) - data.insert(QLatin1String(CPP_COMPILERPATHBYLANGUAGE), m); - - if (targetAbi.osFlavor() == ProjectExplorer::Abi::WindowsMsvc2013Flavor - || targetAbi.osFlavor() == ProjectExplorer::Abi::WindowsMsvc2015Flavor) { - const QLatin1String flags("/FS"); - data.insert(QLatin1String(CPP_PLATFORMCFLAGS), flags); - data.insert(QLatin1String(CPP_PLATFORMCXXFLAGS), flags); - } return data; } diff --git a/src/plugins/qbsprojectmanager/qbsconstants.h b/src/plugins/qbsprojectmanager/qbsconstants.h index 0f76d4963df..666a7dc5773 100644 --- a/src/plugins/qbsprojectmanager/qbsconstants.h +++ b/src/plugins/qbsprojectmanager/qbsconstants.h @@ -38,15 +38,11 @@ namespace Constants { const char QBS_TARGETOS[] = "qbs.targetOS"; const char QBS_SYSROOT[] = "qbs.sysroot"; const char QBS_ARCHITECTURE[] = "qbs.architecture"; -const char QBS_ENDIANNESS[] = "qbs.endianness"; const char QBS_TOOLCHAIN[] = "qbs.toolchain"; const char CPP_TOOLCHAINPATH[] = "cpp.toolchainInstallPath"; -const char CPP_COMPILERPATHBYLANGUAGE[] = "cpp.compilerPathByLanguage"; const char CPP_TOOLCHAINPREFIX[] = "cpp.toolchainPrefix"; -const char CPP_COMPILERNAME[] = "cpp.compilerName"; +const char CPP_CXXCOMPILERNAME[] = "cpp.cxxCompilerName"; const char CPP_LINKERNAME[] = "cpp.linkerName"; -const char CPP_PLATFORMCFLAGS[] = "cpp.platformCFlags"; -const char CPP_PLATFORMCXXFLAGS[] = "cpp.platformCxxFlags"; const char CPP_PLATFORMPATH[] = "cpp.platformPath"; const char CPP_XCODESDKNAME[] = "cpp.xcodeSdkName"; const char CPP_XCODESDKVERSION[] = "cpp.xcodeSdkVersion"; diff --git a/src/shared/qbs b/src/shared/qbs index b24c37c89f7..2867e2712e4 160000 --- a/src/shared/qbs +++ b/src/shared/qbs @@ -1 +1 @@ -Subproject commit b24c37c89f7db5363f4860ba269dba482b19a5f1 +Subproject commit 2867e2712e4c03308e4be76821d788c06bac565e From d667a23c46a8b1a35c70221e406864b1f00e76f9 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Fri, 31 Jul 2015 11:37:36 +0200 Subject: [PATCH 096/116] qbs build: Add missing import. Change-Id: I69b38900dc7b27f1e63b699172000c3d5a208005 Reviewed-by: Jake Petroules --- qbs/imports/QtcClangInstallation/functions.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/qbs/imports/QtcClangInstallation/functions.js b/qbs/imports/QtcClangInstallation/functions.js index 682211a06f2..d2b9736f3b1 100644 --- a/qbs/imports/QtcClangInstallation/functions.js +++ b/qbs/imports/QtcClangInstallation/functions.js @@ -1,3 +1,5 @@ +var File = loadExtension("qbs.File") + function llvmConfig(qbs) { var llvmInstallDirFromEnv = qbs.getEnv("LLVM_INSTALL_DIR") From e3fbe7e93a2ac7926b41ea0963ad12aaab0c0f00 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Fri, 31 Jul 2015 12:04:29 +0200 Subject: [PATCH 097/116] Doc: Generate separate debug info field in Build steps Link to the description of the new checkbox and update the screenshot. Change-Id: Ic7eebc3434749766ca56e43b26ff0bb9dc9a58d3 Reviewed-by: Ulf Hermann --- doc/images/qtcreator-build-steps.png | Bin 22739 -> 19561 bytes .../creator-projects-settings-build.qdoc | 4 ++++ 2 files changed, 4 insertions(+) diff --git a/doc/images/qtcreator-build-steps.png b/doc/images/qtcreator-build-steps.png index 5a44ac1d015902f17058a39d3ab73b213f70662e..74822377d4a0b0deb7bbb4a4482e745325086cb9 100644 GIT binary patch literal 19561 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 RTh9Oh002ovPDHLkV1l`*m)8IQ literal 22739 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

5geDV3Edm3nzzv{t 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 diff --git a/doc/src/projects/creator-projects-settings-build.qdoc b/doc/src/projects/creator-projects-settings-build.qdoc index 4c84c2c7f9b..7d0612f05ac 100644 --- a/doc/src/projects/creator-projects-settings-build.qdoc +++ b/doc/src/projects/creator-projects-settings-build.qdoc @@ -114,6 +114,10 @@ the build step and add a custom build step that specifies another shell command. + To generate debug symbols also for applications compiled in release mode, + select the \uicontrol {Generate separate debug info} check box. For more + information, see \l{Using the CPU Usage Analyzer}. + \QC is integrated to \l{http://doc.qt.io/QtQuickCompiler/} {Qt Quick Compiler} (commercial only) that enables you to compile QML source code into the final binary. This From 892cb154b2a781e9056d6754f3d24a3912d9ca17 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Thu, 30 Jul 2015 18:15:07 +0200 Subject: [PATCH 098/116] C++: Do not let ASTPath calculate line/column for generated tokens ASTPath uses TranslationUnit::getPosition(), which returns reasonable results for: 1. non-expanded tokens 2. expanded but not generated tokens The expanded *and* generated tokens case is not handled since there is no reasonable mapping from generated tokens to a continuous line/column information. Consider: #define DECLARE_FOO int foo; // Multiple generated tokens DECLARE_FOO // ...can be mapped to this line, but to which columns? Since the result where not valid for the expanded and generated case, ASTPath took the wrong branches. Avoid this by skipping generated tokens. Change-Id: I33a2e0f62917f87d691b19feaeef67b09ea8d563 Task-number: QTCREATORBUG-13386 Task-number: QTCREATORBUG-13390 Reviewed-by: Joerg Bornemann Reviewed-by: Orgad Shaneh --- src/libs/cplusplus/ASTPath.cpp | 25 +++++++++++-- src/libs/cplusplus/ASTPath.h | 6 +++- src/plugins/cppeditor/cppquickfix_test.cpp | 1 - tests/auto/cplusplus/misc/tst_misc.cpp | 42 ++++++++++++++++++++++ 4 files changed, 70 insertions(+), 4 deletions(-) diff --git a/src/libs/cplusplus/ASTPath.cpp b/src/libs/cplusplus/ASTPath.cpp index a38c5eadc1a..9a4ef293a7f 100644 --- a/src/libs/cplusplus/ASTPath.cpp +++ b/src/libs/cplusplus/ASTPath.cpp @@ -65,8 +65,8 @@ void ASTPath::dump(const QList nodes) bool ASTPath::preVisit(AST *ast) { - unsigned firstToken = ast->firstToken(); - unsigned lastToken = ast->lastToken(); + const unsigned firstToken = firstNonGeneratedToken(ast); + const unsigned lastToken = lastNonGeneratedToken(ast); if (firstToken > 0) { if (lastToken <= firstToken) @@ -89,3 +89,24 @@ bool ASTPath::preVisit(AST *ast) return false; } + +unsigned ASTPath::firstNonGeneratedToken(AST *ast) const +{ + const unsigned lastTokenIndex = ast->lastToken(); + unsigned tokenIndex = ast->firstToken(); + while (tokenIndex <= lastTokenIndex && tokenAt(tokenIndex).generated()) + ++tokenIndex; + return tokenIndex; +} + +unsigned ASTPath::lastNonGeneratedToken(AST *ast) const +{ + const unsigned firstTokenIndex = ast->firstToken(); + const unsigned lastTokenIndex = ast->lastToken(); + unsigned tokenIndex = lastTokenIndex; + while (firstTokenIndex <= tokenIndex && tokenAt(tokenIndex).generated()) + --tokenIndex; + return tokenIndex != lastTokenIndex + ? tokenIndex + 1 + : tokenIndex; +} diff --git a/src/libs/cplusplus/ASTPath.h b/src/libs/cplusplus/ASTPath.h index 8a3eb43a5e2..49bc6a8d7ac 100644 --- a/src/libs/cplusplus/ASTPath.h +++ b/src/libs/cplusplus/ASTPath.h @@ -62,7 +62,11 @@ class CPLUSPLUS_EXPORT ASTPath: public ASTVisitor #endif protected: - virtual bool preVisit(AST *ast); + bool preVisit(AST *ast) override; + +private: + unsigned firstNonGeneratedToken(AST *ast) const; + unsigned lastNonGeneratedToken(AST *ast) const; private: Document::Ptr _doc; diff --git a/src/plugins/cppeditor/cppquickfix_test.cpp b/src/plugins/cppeditor/cppquickfix_test.cpp index b6f3033bfa2..cbc04f6a673 100644 --- a/src/plugins/cppeditor/cppquickfix_test.cpp +++ b/src/plugins/cppeditor/cppquickfix_test.cpp @@ -256,7 +256,6 @@ QuickFixOperationTest::QuickFixOperationTest(const QListm_expectedSource); // Undo the change diff --git a/tests/auto/cplusplus/misc/tst_misc.cpp b/tests/auto/cplusplus/misc/tst_misc.cpp index 70914ca42d2..c3497613968 100644 --- a/tests/auto/cplusplus/misc/tst_misc.cpp +++ b/tests/auto/cplusplus/misc/tst_misc.cpp @@ -28,6 +28,7 @@ ** ****************************************************************************/ +#include #include #include @@ -48,6 +49,8 @@ private slots: void findBreakpoints(); void findBreakpoints2(); void findBreakpoints3(); + + void astPathOnGeneratedTokens(); }; void tst_Misc::diagnosticClient_error() @@ -202,5 +205,44 @@ void tst_Misc::findBreakpoints3() QCOMPARE(findBreakpoint(7), 7U); } +static Document::Ptr documentCreatedWithFastPreprocessor(const QByteArray source) +{ + Snapshot snapshot; + auto document = snapshot.preprocessedDocument(source, QLatin1String("test.cpp")); + document->check(); + return document; +} + +void tst_Misc::astPathOnGeneratedTokens() +{ + const QByteArray source = + "#define INT int\n" + "#define S ;\n" + "INT x S\n"; + const auto document = documentCreatedWithFastPreprocessor(source); + ASTPath astPath(document); + + // Check start + auto paths = astPath(3, 1); + QCOMPARE(paths.size(), 0); + + // Check middle + paths = astPath(3, 5); + QCOMPARE(paths.size(), 5); + QVERIFY(paths.at(0)->asTranslationUnit()); + QVERIFY(paths.at(1)->asSimpleDeclaration()); + QVERIFY(paths.at(2)->asDeclarator()); + QVERIFY(paths.at(3)->asDeclaratorId()); + QVERIFY(paths.at(4)->asSimpleName()); + + // Check end + for (auto i : { 7, 8, 9 }) { + paths = astPath(3, i); + QCOMPARE(paths.size(), 2); + QVERIFY(paths.at(0)->asTranslationUnit()); + QVERIFY(paths.at(1)->asSimpleDeclaration()); + } +} + QTEST_MAIN(tst_Misc) #include "tst_misc.moc" From 42335de928eb7eb85551dada0568034008ad6b9b Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Thu, 30 Jul 2015 16:56:36 +0200 Subject: [PATCH 099/116] Doc: adding paths to CMake excutables ...and selecting them in kits. Change-Id: I5093ec17593c6cdd67ab64abcbc5fca06b1c64ff Reviewed-by: Benjamin Zeller Reviewed-by: Daniel Teske --- doc/images/qtcreator-cmakeexecutable.png | Bin 6549 -> 10327 bytes doc/images/qtcreator-kits.png | Bin 27905 -> 18015 bytes doc/src/projects/creator-projects-cmake.qdoc | 18 +++++++++++++----- .../projects/creator-projects-targets.qdoc | 5 +++++ 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/doc/images/qtcreator-cmakeexecutable.png b/doc/images/qtcreator-cmakeexecutable.png index b63fd2aeda0642fcf747bbbfe0944fcf33a11538..711c2f708ce766a147f2943b810cb93da8e5ce35 100644 GIT binary patch literal 10327 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 diff --git a/doc/images/qtcreator-kits.png b/doc/images/qtcreator-kits.png index 15243c74a4f1b681eb74eab263f9d1ad1798be9b..13bc784a763926a981092727356e1a0c9d17f563 100644 GIT binary patch literal 18015 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 A9smFU literal 27905 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

4%g!Gx+ZB7% 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 - \uicontrol Options > \uicontrol {Build & Run} > \uicontrol CMake. + \section1 Adding CMake Tools + + To specify paths to CMake executables, select \uicontrol Tools > + \uicontrol Options > \uicontrol {Build & Run} > \uicontrol CMake > + \uicontrol Add. \image qtcreator-cmakeexecutable.png + \section1 Opening CMake Projects + \note Before you open a CMake project, you must modify the \c {PATH} environment variable to include the bin folders of \c mingw and Qt. @@ -60,8 +67,6 @@ C:\Qt\Tools\QtCreator\qtcreator.exe \endcode - \section1 Opening CMake Projects - To open a CMake project: \list 1 @@ -103,6 +108,9 @@ \QC supports multiple build configurations. You can change the build directory after the initial import. + The build and run kit that you select determines which CMake tool is used + for building. For more information, see \l {Adding Kits}. + \section1 Running CMake Projects \QC automatically adds \uicontrol {Run Configurations} for all targets diff --git a/doc/src/projects/creator-projects-targets.qdoc b/doc/src/projects/creator-projects-targets.qdoc index 4d0aec00c56..a9379ba6b9a 100644 --- a/doc/src/projects/creator-projects-targets.qdoc +++ b/doc/src/projects/creator-projects-targets.qdoc @@ -114,6 +114,11 @@ configuration that should be used by qmake. If you leave this field empty, the default mkspec of the selected Qt version is used. + \li In the \uicontrol {CMake Tool} field, select the CMake tool to use + for building the project. Select \uicontrol Manage to add installed + CMake tools to the list. For more information, see + \l{Adding CMake Tools}. + \endlist */ From a6d5e9440511c5ff3a60649d8e3a84dfbe4dfc67 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Fri, 31 Jul 2015 13:22:47 +0200 Subject: [PATCH 100/116] QmlDesigner: Fix Scrollview regression Change-Id: I3bacf3def3f75cc26ffea0fc753e6b7994a426cb Reviewed-by: Tim Jenssen --- share/qtcreator/qmldesigner/common/DesignerScrollViewStyle.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/share/qtcreator/qmldesigner/common/DesignerScrollViewStyle.qml b/share/qtcreator/qmldesigner/common/DesignerScrollViewStyle.qml index 634bd005abb..31d2542bd5e 100644 --- a/share/qtcreator/qmldesigner/common/DesignerScrollViewStyle.qml +++ b/share/qtcreator/qmldesigner/common/DesignerScrollViewStyle.qml @@ -62,6 +62,6 @@ ScrollViewStyle { corner: Item {} //Even if the platform style reports touch support a scrollview should not be flickable. - Component.onCompleted: control.flickableItem.interactive = true + Component.onCompleted: control.flickableItem.interactive = false transientScrollBars: false } From d1c181b52f2fff26b26830b0d18002d9d08185d1 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Fri, 31 Jul 2015 15:38:05 +0200 Subject: [PATCH 101/116] Doc: update Editor Settings screenshot Change-Id: I5ee95c90c5d7a601cb8738a7288bfbea8930141e Reviewed-by: Leena Miettinen --- doc/images/qtcreator-editor-settings.png | Bin 68360 -> 24023 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/doc/images/qtcreator-editor-settings.png b/doc/images/qtcreator-editor-settings.png index db551f77e6735ebe3ed77084ca8ff89c2397b958..9766b153f3fb5ba2a5f1e91881fd745780b41fac 100644 GIT binary patch literal 24023 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 literal 68360 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 From 4c2ab742f146dd92b5c16211e0a4a96bc1f5fbba Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Fri, 31 Jul 2015 15:38:36 +0200 Subject: [PATCH 102/116] Doc: fix typo component > components Change-Id: I1976eda603688f48c95f7e88d108700b07379265 Reviewed-by: Leena Miettinen --- doc/src/qtquick/qtquick-designer.qdoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/qtquick/qtquick-designer.qdoc b/doc/src/qtquick/qtquick-designer.qdoc index 52db1901c8f..ca7289e775c 100644 --- a/doc/src/qtquick/qtquick-designer.qdoc +++ b/doc/src/qtquick/qtquick-designer.qdoc @@ -469,7 +469,7 @@ \section2 Previewing Component Size The width and height of the root item in a QML file determine the size of - the component. You can reuse component, such as buttons, in different + the component. You can reuse components, such as buttons, in different sizes in other QML files and design screens for use with different device profiles, screen resolution, or screen orientation. The component size might also be zero (0,0) if its final size is determined by property From 6c7ab912a6dc980dfc42a72a654f9e2f97a5ec02 Mon Sep 17 00:00:00 2001 From: Daniel Teske Date: Tue, 21 Jul 2015 12:52:51 +0200 Subject: [PATCH 103/116] Android: Fix opening of package location on Windows Utils::FileName::append appends a slash, so appending a string which starts with a slash leads to a double slash. And explorer.exe doesn't like this double slash. Change-Id: I2549aca9ec51fad092f006a16f092a02c3a83149 Task-number: QTCREATORBUG-14568 Reviewed-by: BogDan Vatra --- src/plugins/android/androidqtsupport.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/android/androidqtsupport.cpp b/src/plugins/android/androidqtsupport.cpp index 8527ca8b6b2..2f4c2dafe50 100644 --- a/src/plugins/android/androidqtsupport.cpp +++ b/src/plugins/android/androidqtsupport.cpp @@ -48,9 +48,9 @@ Utils::FileName Android::AndroidQtSupport::apkPath(ProjectExplorer::Target *targ QString apkPath; if (buildApkStep->useGradle()) - apkPath = QLatin1String("/build/outputs/apk/android-build-"); + apkPath = QLatin1String("build/outputs/apk/android-build-"); else - apkPath = QLatin1String("/bin/QtApp-"); + apkPath = QLatin1String("bin/QtApp-"); if (buildApkStep->signPackage()) apkPath += QLatin1String("release.apk"); else From fff0a27103af706d4d24e73fc0c31e5ccf4e3523 Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Sun, 2 Aug 2015 22:20:47 +0300 Subject: [PATCH 104/116] Dumper: Display "void" for VoidType Useful for void template arguments Change-Id: Ifa85f36477dbe664525233668915a1f872042438 Reviewed-by: Nikolai Kosjar --- share/qtcreator/debugger/creatortypes.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/share/qtcreator/debugger/creatortypes.py b/share/qtcreator/debugger/creatortypes.py index 9c008d5ca9e..b1f9a834e6e 100644 --- a/share/qtcreator/debugger/creatortypes.py +++ b/share/qtcreator/debugger/creatortypes.py @@ -46,8 +46,11 @@ def extractPointerType(d, value): try: return readLiteral(d, value["_name"]) + postfix except: - if str(value.type.unqualified().target()) == "CPlusPlus::IntegerType": + typeName = str(value.type.unqualified().target()) + if typeName == "CPlusPlus::IntegerType": return "int" + postfix + elif typeName == "CPlusPlus::VoidType": + return "void" + postfix return "" def readTemplateName(d, value): From 99dea548e034524d49820a2c10b3b03adddc9ec3 Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Sun, 2 Aug 2015 19:59:13 +0300 Subject: [PATCH 105/116] C++: Fix crash in template argument resolving Occurs in boost/phoenix.hpp Task-number: QTCREATORBUG-14748 Change-Id: If89b0db48346aac72e0d8aaa8d165b2bf43bd784 Reviewed-by: Nikolai Kosjar --- src/libs/3rdparty/cplusplus/Scope.cpp | 2 +- src/libs/cplusplus/LookupContext.cpp | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/libs/3rdparty/cplusplus/Scope.cpp b/src/libs/3rdparty/cplusplus/Scope.cpp index 107df10dffd..f04e72e2a6d 100644 --- a/src/libs/3rdparty/cplusplus/Scope.cpp +++ b/src/libs/3rdparty/cplusplus/Scope.cpp @@ -214,7 +214,7 @@ unsigned SymbolTable::symbolCount() const Symbol *SymbolTable::symbolAt(unsigned index) const { - if (! _symbols) + if (! _symbols || index >= symbolCount()) return 0; return _symbols[index]; } diff --git a/src/libs/cplusplus/LookupContext.cpp b/src/libs/cplusplus/LookupContext.cpp index f9660ac26bb..b04d639961f 100644 --- a/src/libs/cplusplus/LookupContext.cpp +++ b/src/libs/cplusplus/LookupContext.cpp @@ -1971,8 +1971,9 @@ FullySpecifiedType CreateBindings::resolveTemplateArgument(Clone &cloner, { FullySpecifiedType ty; - const TypenameArgument *tParam - = specialization->templateParameterAt(index)->asTypenameArgument(); + const TypenameArgument *tParam = 0; + if (Symbol *tArgument = specialization->templateParameterAt(index)) + tParam = tArgument->asTypenameArgument(); if (!tParam) return ty; From 1b90b80f85d92744bd2e4cc5ac1a7f847de2ce17 Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Sun, 2 Aug 2015 19:14:25 +0300 Subject: [PATCH 106/116] C++: Fix potential crash If no template is found, findSpecialization will crash Task-number: QTCREATORBUG-14748 Change-Id: I94b970e6eb994f0a8d85a4b996e52fcff0affef3 Reviewed-by: Nikolai Kosjar --- src/libs/cplusplus/LookupContext.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/libs/cplusplus/LookupContext.cpp b/src/libs/cplusplus/LookupContext.cpp index b04d639961f..a034e169db5 100644 --- a/src/libs/cplusplus/LookupContext.cpp +++ b/src/libs/cplusplus/LookupContext.cpp @@ -41,6 +41,7 @@ #include #include #include +#include #include #include @@ -1255,12 +1256,14 @@ LookupScopePrivate *LookupScopePrivate::nestedType(const Name *name, LookupScope if (baseTemplate) break; } - if (LookupScopePrivate *specialization = - findSpecialization(baseTemplate, templId, specializations, origin)) { - reference = specialization; - if (Q_UNLIKELY(debug)) { - Overview oo; - qDebug() << "picked specialization" << oo(specialization->_name); + if (baseTemplate) { + if (LookupScopePrivate *specialization = + findSpecialization(baseTemplate, templId, specializations, origin)) { + reference = specialization; + if (Q_UNLIKELY(debug)) { + Overview oo; + qDebug() << "picked specialization" << oo(specialization->_name); + } } } } @@ -1970,6 +1973,7 @@ FullySpecifiedType CreateBindings::resolveTemplateArgument(Clone &cloner, unsigned index) { FullySpecifiedType ty; + CPP_ASSERT(specialization && instantiation, return ty); const TypenameArgument *tParam = 0; if (Symbol *tArgument = specialization->templateParameterAt(index)) From 866310d56f6c0e62de685558bf99e9e6191ebab8 Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Sun, 2 Aug 2015 20:21:21 +0300 Subject: [PATCH 107/116] CMake: Initialize kit priority Detected by memcheck Change-Id: I27bb03ce4b4b63ae596bd3a788b6a95cd0944454 Reviewed-by: Daniel Teske --- src/plugins/cmakeprojectmanager/cmakekitinformation.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/cmakeprojectmanager/cmakekitinformation.cpp b/src/plugins/cmakeprojectmanager/cmakekitinformation.cpp index b0ce2c96f58..7b621b5a8cd 100644 --- a/src/plugins/cmakeprojectmanager/cmakekitinformation.cpp +++ b/src/plugins/cmakeprojectmanager/cmakekitinformation.cpp @@ -47,6 +47,7 @@ CMakeKitInformation::CMakeKitInformation() { setObjectName(QLatin1String("CMakeKitInformation")); setId(CMakeKitInformation::id()); + setPriority(20000); //make sure the default value is set if a selected CMake is removed connect(CMakeToolManager::instance(), &CMakeToolManager::cmakeRemoved, From 9ec331d6e66baaad1dff2f5fc5af84b4193cd401 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Mon, 3 Aug 2015 14:10:24 +0200 Subject: [PATCH 108/116] Doc: excluding files from scanning in To-Do Settings Change-Id: I05923ab532fdfd7bf00f1b277116edba38bf7334 Reviewed-by: Leena Miettinen --- doc/src/howto/creator-ui.qdoc | 5 +++++ doc/src/projects/creator-projects-settings-overview.qdoc | 2 ++ 2 files changed, 7 insertions(+) diff --git a/doc/src/howto/creator-ui.qdoc b/doc/src/howto/creator-ui.qdoc index f9abf918a08..c0c5c1ecb02 100644 --- a/doc/src/howto/creator-ui.qdoc +++ b/doc/src/howto/creator-ui.qdoc @@ -486,6 +486,11 @@ To determine whether the keywords in the whole project or in the current file are displayed by default, select \uicontrol {Scanning scope}. + To exclude files from scanning, select \uicontrol {To-Do Settings} in the + \uicontrol Projects mode. Select \uicontrol Add and enter a regular + expression that matches the path to files to exclude. Use a forward slash + (/) as a separator in the path also on Windows. + The Todo plugin is disabled by default. To enable the plugin, select \uicontrol Help > \uicontrol {About Plugins} > \uicontrol Utilities > \uicontrol Todo and restart diff --git a/doc/src/projects/creator-projects-settings-overview.qdoc b/doc/src/projects/creator-projects-settings-overview.qdoc index b965ddbd6d5..529a8f0a343 100644 --- a/doc/src/projects/creator-projects-settings-overview.qdoc +++ b/doc/src/projects/creator-projects-settings-overview.qdoc @@ -91,6 +91,8 @@ \li \l{Using Clang Static Analyzer}{Clang Static Analyzer Settings} (commercial only) + \li \l{To-Do List}{To-Do Settings} (experimental) + \endlist Use the \uicontrol Build and \uicontrol Run buttons to switch between the build and From fb6baf9188e90a4c03d5d00e4eaf021a996333ef Mon Sep 17 00:00:00 2001 From: Robert Loehning Date: Thu, 30 Jul 2015 13:12:16 +0200 Subject: [PATCH 109/116] Squish: Run tst_CSUP02 on Clang code model, too Task-number: QTCREATORBUG-11591 Change-Id: I8b4a77d6a1184e225bcf3a9a496e1bdb7cb0d81c Reviewed-by: Christian Stenger --- tests/system/suite_CSUP/tst_CSUP02/test.py | 88 ++++++++++++---------- 1 file changed, 50 insertions(+), 38 deletions(-) diff --git a/tests/system/suite_CSUP/tst_CSUP02/test.py b/tests/system/suite_CSUP/tst_CSUP02/test.py index a177470d94c..b856f167aff 100644 --- a/tests/system/suite_CSUP/tst_CSUP02/test.py +++ b/tests/system/suite_CSUP/tst_CSUP02/test.py @@ -32,52 +32,64 @@ # entry of test def main(): - startApplication("qtcreator" + SettingsPath) + clangLoaded = startCreatorTryingClang() if not startedWithoutPluginError(): return # create qt quick application # Step 1: Open test .pro project. createNewQtQuickApplication(tempDir(), "SampleApp") + models = iterateAvailableCodeModels() + for current in models: + if current != models[0]: + selectCodeModel(current) + test.log("Testing code model: %s" % current) # Step 2: Open .cpp file in Edit mode. - if not openDocument("SampleApp.Sources.main\\.cpp"): - test.fatal("Could not open main.cpp") - invokeMenuItem("File", "Exit") - return - test.verify(checkIfObjectExists(":Qt Creator_CppEditor::Internal::CPPEditorWidget"), - "Step 2: Verifying if: .cpp file is opened in Edit mode.") + if not openDocument("SampleApp.Sources.main\\.cpp"): + test.fatal("Could not open main.cpp") + invokeMenuItem("File", "Exit") + return + test.verify(checkIfObjectExists(":Qt Creator_CppEditor::Internal::CPPEditorWidget"), + "Step 2: Verifying if: .cpp file is opened in Edit mode.") # Steps 3&4: Insert text "class" to new line in Editor mode and press Ctrl+Space. # Focus "class derived from QObject" in the list and press Tab or Enter to complete the code. - editorWidget = findObject(":Qt Creator_CppEditor::Internal::CPPEditorWidget") - mouseClick(editorWidget, 5, 5, 0, Qt.LeftButton) - type(editorWidget, "") - type(editorWidget, "") - type(editorWidget, "class") - if platform.system() == "Darwin": - type(editorWidget, "") - else: - type(editorWidget, "") - type(waitForObject(":popupFrame_Proposal_QListView"), "") - listView = waitForObject(":popupFrame_Proposal_QListView") - test.compare("class derived from QObject", str(listView.model().data(listView.currentIndex())), - "Verifying selecting the correct entry.") - type(waitForObject(":popupFrame_Proposal_QListView"), "") - test.verify(str(editorWidget.plainText).startswith("class name : public QObject"), - "Steps 3&4: Verifying if: The list of suggestions is opened. It is " - "possible to select one of the suggestions. Code with several " - "variables is inserted.") + editorWidget = findObject(":Qt Creator_CppEditor::Internal::CPPEditorWidget") + mouseClick(editorWidget, 5, 5, 0, Qt.LeftButton) + type(editorWidget, "") + type(editorWidget, "") + type(editorWidget, "class") + if platform.system() == "Darwin": + type(editorWidget, "") + else: + type(editorWidget, "") + type(waitForObject(":popupFrame_Proposal_QListView"), "") + if current == "Clang": + # different order with Clang code model + type(waitForObject(":popupFrame_Proposal_QListView"), "") + listView = waitForObject(":popupFrame_Proposal_QListView") + test.compare("class derived from QObject", str(listView.model().data(listView.currentIndex())), + "Verifying selecting the correct entry.") + type(waitForObject(":popupFrame_Proposal_QListView"), "") + test.verify(str(editorWidget.plainText).startswith("class name : public QObject"), + "Steps 3&4: Verifying if: The list of suggestions is opened. It is " + "possible to select one of the suggestions. Code with several " + "variables is inserted.") # Step 5: Press Tab to move between the variables and specify values for them. For example write "Myname" for variable "name". - type(editorWidget, "") - type(editorWidget, "") - type(editorWidget, "") - type(editorWidget, "Myname") - pattern = "(?<=class)\s+Myname\s*:\s*public\s+QObject\s*\{\s*Q_OBJECT\s+public:\s+Myname\(\)\s*\{\}\s+virtual\s+~Myname\(\)\s*\{\}\s+\};" - result = re.search(pattern, str(editorWidget.plainText)) - if result: - test.passes("Step 5: Verifying if: A value for a variable is inserted and all " - "instances of the variable within the snippet are renamed.") - else: - test.fail("Step 5: Seems that not all instances of variable had been renamed " - "- Content of editor:\n%s" % editorWidget.plainText) + type(editorWidget, "") + type(editorWidget, "") + type(editorWidget, "") + type(editorWidget, "Myname") + pattern = "(?<=class)\s+Myname\s*:\s*public\s+QObject\s*\{\s*Q_OBJECT\s+public:\s+Myname\(\)\s*\{\}\s+virtual\s+~Myname\(\)\s*\{\}\s+\};" + result = re.search(pattern, str(editorWidget.plainText)) + if result: + test.passes("Step 5: Verifying if: A value for a variable is inserted and all " + "instances of the variable within the snippet are renamed.") + else: + test.fail("Step 5: Seems that not all instances of variable had been renamed " + "- Content of editor:\n%s" % editorWidget.plainText) + invokeMenuItem('File', 'Revert "main.cpp" to Saved') + clickButton(waitForObject(":Revert to Saved.Proceed_QPushButton")) + snooze(1) # 'Close "main.cpp"' might still be disabled + # editor must be closed to get the second code model applied on re-opening the file + invokeMenuItem('File', 'Close "main.cpp"') # exit qt creator - invokeMenuItem("File", "Save All") invokeMenuItem("File", "Exit") From 9f2b5eac2db1f1df192c7c5dc56a01169a097c0a Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Fri, 31 Jul 2015 12:28:02 +0200 Subject: [PATCH 110/116] CppTools: Update language standard option for clang Tested with clang 3.6. Change-Id: Icd2383bd03b91837b3129045e9ab78a1620efd02 Reviewed-by: Christian Kandeler Reviewed-by: Marco Bubke --- src/plugins/cpptools/cppprojects.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/plugins/cpptools/cppprojects.cpp b/src/plugins/cpptools/cppprojects.cpp index baaed3fc84f..819780f7a3c 100644 --- a/src/plugins/cpptools/cppprojects.cpp +++ b/src/plugins/cpptools/cppprojects.cpp @@ -672,13 +672,15 @@ void CompilerOptionsBuilder::addOptionsForLanguage(bool checkForBorlandExtension opts << (gnuExtensions ? QLatin1String("-std=gnu++98") : QLatin1String("-std=c++98")); break; case ProjectPart::CXX03: + // Clang 3.6 does not know -std=gnu++03. opts << QLatin1String("-std=c++03"); break; case ProjectPart::CXX14: - opts << QLatin1String("-std=c++1y"); // TODO: change to c++14 after 3.5 + opts << (gnuExtensions ? QLatin1String("-std=gnu++14") : QLatin1String("-std=c++14")); break; case ProjectPart::CXX17: - opts << QLatin1String("-std=c++1z"); // TODO: change to c++17 at some point in the future + // TODO: Change to (probably) "gnu++17"/"c++17" at some point in the future. + opts << (gnuExtensions ? QLatin1String("-std=gnu++1z") : QLatin1String("-std=c++1z")); break; } From 8ac76922d20b5aa698b02fda6231aceb2434a500 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Wed, 29 Jul 2015 15:06:24 +0200 Subject: [PATCH 111/116] Clang: Filter out "#pragma once in main file" warning for headers This is a libclang bug and unfortunately there is no option to disable this warning. Change-Id: I12cdaa0155e7d94a70b8fccd8c9290835704e06b Task-number: QTCREATORBUG-12067 Reviewed-by: Marco Bubke --- src/plugins/clangcodemodel/semanticmarker.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/plugins/clangcodemodel/semanticmarker.cpp b/src/plugins/clangcodemodel/semanticmarker.cpp index cb5d0b71f43..cb17346d109 100644 --- a/src/plugins/clangcodemodel/semanticmarker.cpp +++ b/src/plugins/clangcodemodel/semanticmarker.cpp @@ -33,6 +33,7 @@ #include "utils_p.h" #include "cxraii.h" +#include #include using namespace ClangCodeModel; @@ -131,12 +132,23 @@ static void appendDiagnostic(const CXDiagnostic &diag, } } +static bool isBlackListedDiagnostic(const Utils::MimeType &mimeType, const QString &diagnostic) +{ + static QString pragmaOnceInMainFile = QLatin1String("#pragma once in main file"); + + return diagnostic == pragmaOnceInMainFile + && mimeType.inherits(QLatin1String("text/x-chdr")); +} + QList SemanticMarker::diagnostics() const { QList diagnostics; if (!m_unit || !m_unit->isLoaded()) return diagnostics; + Utils::MimeDatabase mimeDatabase; + const Utils::MimeType mimeType = mimeDatabase.mimeTypeForFile(fileName()); + const unsigned diagCount = m_unit->getNumDiagnostics(); for (unsigned i = 0; i < diagCount; ++i) { ScopedCXDiagnostic diag(m_unit->getDiagnostic(i)); @@ -148,6 +160,9 @@ QList SemanticMarker::diagnostics() const CXSourceLocation cxLocation = clang_getDiagnosticLocation(diag); QString spelling = Internal::getQString(clang_getDiagnosticSpelling(diag)); + if (isBlackListedDiagnostic(mimeType, spelling)) + continue; + // Attach messages with Diagnostic::Note severity ScopedCXDiagnosticSet cxChildren(clang_getChildDiagnostics(diag)); const unsigned numChildren = clang_getNumDiagnosticsInSet(cxChildren); From ad332762df8f7695888fb39afbbd8cb0fd60b6b8 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Mon, 3 Aug 2015 14:44:44 +0200 Subject: [PATCH 112/116] Doc: update info about QML export scripts - Switch the download links to Gerrit - Describe how to edit the scripts to create files that are compatible with Qt Quick Designer - Remove notes about adding Python support for Windows, because that now seems to work out of the box Change-Id: I88f822e1d72658818b140208c264af24ab671b28 Reviewed-by: Thomas Hartmann --- doc/src/qtquick/qtquick-exporting-qml.qdoc | 45 ++++++++++++++-------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/doc/src/qtquick/qtquick-exporting-qml.qdoc b/doc/src/qtquick/qtquick-exporting-qml.qdoc index 5172e2a9502..8a7957713bf 100644 --- a/doc/src/qtquick/qtquick-exporting-qml.qdoc +++ b/doc/src/qtquick/qtquick-exporting-qml.qdoc @@ -39,7 +39,12 @@ \note GIMP does not support grouping, and therefore, each layer is exported as an item in GIMP. - You can open the QML file in \QC for editing. If you edit the file in Adobe + You can open the QML file in \QC for editing. By default, the export scripts + generate Qt Quick 1 files. To edit the files in \QMLD, change the import + statements in the export scripts to import Qt Quick 2. Or, you can change + the import statement in each file after generating the files. + + If you edit the file in Adobe Photoshop and export it to the same directory again, any changes you made in \QC are overwritten. However, you can re-export graphical assets without recreating the QML code. @@ -114,13 +119,21 @@ \list 1 - \li Download the export script, \e{Export QML.jx}, from - \l{https://code.qt.io/cgit/qt-labs/photoshop-qmlexporter.git/} - {code.qt.io}. + \li Clone the repository that contains the export script, + \e{Export QML.jx}, from + \l{https://codereview.qt-project.org/#/admin/projects/qt-labs/photoshop-qmlexporter} + {Qt Code Review}. \note Read the README.txt file in the repository for latest information about the script. + \li To generate QML files that you can edit in \QMLD, edit the import + statement in \e {Export QML.jx}. For example: + + \code + qmlfile.write("import QtQuick 2.5\n"); + \endcode + \li Double-click the export script to add the export command to the \uicontrol Scripts menu. You can also copy the script file to the Adobe Photoshop scripts directory (typically, \c{\Presets\Scripts} in the @@ -160,21 +173,12 @@ The script has been tested to work on GIMP 2. You can download GIMP 2 from \l{http://www.gimp.org/downloads/}{GIMP Downloads}. - To use the export script on Microsoft Windows, you also need to install the - GIMP Python extension (Python, PyCairo, PyGobject, PyGTK). However, GIMP is - not officially supported on Windows, so we cannot guarantee that this will - work. - \list 1 - \li On Microsoft Windows, you must first add Python support to your GIMP - installation, as instructed in - \l {http://www.gimpusers.com/tutorials/install-python-for-gimp-2-6-windows} - {Tutorial: Installing Python for GIMP 2.6 (Windows)}. - - \li Download the export script, \e qmlexporter.py, from - \l{https://code.qt.io/cgit/qt-labs/gimp-qmlexporter.git/} - {code.qt.io}. + \li Clone the repository that contains the export script, + \e qmlexporter.py, from + \l{https://codereview.qt-project.org/#/admin/projects/qt-labs/gimp-qmlexporter} + {Qt Code Review}. \note Read the INSTALL.txt in the repository for latest information about the script. @@ -186,6 +190,13 @@ On Linux, run the following command: \c {chmod u+rx} + \li To generate QML files that you can edit in \QMLD, edit the import + statement in \e qmlexporter.py. For example: + + \code + f.write('import QtQuick 2.5\n') + \endcode + \li Restart GIMP to have the export command added to the \uicontrol File menu. \li Choose \uicontrol {File > Export to QML} to export the design to a QML From 5abfef609a1c9a337af2d888d5e5022ae24dbf68 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Mon, 3 Aug 2015 14:08:58 +0200 Subject: [PATCH 113/116] Clang: Check for required mininum LLVM/Clang version ...otherwise, if the compilation fails, the user is left without any hint. Change-Id: I753aefac0c9fbd24b148235e792fe3b3a2aea21b Reviewed-by: Marco Bubke Reviewed-by: Christian Kandeler --- qbs/imports/QtcClangInstallation/functions.js | 17 +++++++++--- src/plugins/clangcodemodel/clangcodemodel.qbs | 3 ++- src/shared/clang/clang_installation.pri | 27 +++++++++++++++++-- src/tools/clangbackend/clangbackend.qbs | 3 ++- 4 files changed, 43 insertions(+), 7 deletions(-) diff --git a/qbs/imports/QtcClangInstallation/functions.js b/qbs/imports/QtcClangInstallation/functions.js index d2b9736f3b1..f00b109a63c 100644 --- a/qbs/imports/QtcClangInstallation/functions.js +++ b/qbs/imports/QtcClangInstallation/functions.js @@ -1,6 +1,17 @@ var File = loadExtension("qbs.File") +var MinimumLLVMVersion = "3.6.0" -function llvmConfig(qbs) +function isSuitableLLVMConfig(llvmConfigCandidate, qtcFunctions, processOutputReader) +{ + if (File.exists(llvmConfigCandidate)) { + var candidateVersion = version(llvmConfigCandidate, processOutputReader); + if (candidateVersion && candidateVersion.length) + return qtcFunctions.versionIsAtLeast(candidateVersion, MinimumLLVMVersion) + } + return false; +} + +function llvmConfig(qbs, qtcFunctions, processOutputReader) { var llvmInstallDirFromEnv = qbs.getEnv("LLVM_INSTALL_DIR") var llvmConfigVariants = [ @@ -12,7 +23,7 @@ function llvmConfig(qbs) if (llvmInstallDirFromEnv) { for (var i = 0; i < llvmConfigVariants.length; ++i) { var variant = llvmInstallDirFromEnv + "/bin/" + llvmConfigVariants[i]; - if (File.exists(variant)) + if (isSuitableLLVMConfig(variant, qtcFunctions, processOutputReader)) return variant; } } @@ -24,7 +35,7 @@ function llvmConfig(qbs) for (var i = 0; i < llvmConfigVariants.length; ++i) { for (var j = 0; j < pathList.length; ++j) { var variant = pathList[j] + "/" + llvmConfigVariants[i]; - if (File.exists(variant)) + if (isSuitableLLVMConfig(variant, qtcFunctions, processOutputReader)) return variant; } } diff --git a/src/plugins/clangcodemodel/clangcodemodel.qbs b/src/plugins/clangcodemodel/clangcodemodel.qbs index ad6d25dda0f..cc41d8ebd2d 100644 --- a/src/plugins/clangcodemodel/clangcodemodel.qbs +++ b/src/plugins/clangcodemodel/clangcodemodel.qbs @@ -1,6 +1,7 @@ import qbs import qbs.File import QtcClangInstallation as Clang +import QtcFunctions import QtcProcessOutputReader QtcPlugin { @@ -23,7 +24,7 @@ QtcPlugin { property bool clangHighlighting: true property bool clangIndexing: false - property string llvmConfig: Clang.llvmConfig(qbs) + property string llvmConfig: Clang.llvmConfig(qbs, QtcFunctions, QtcProcessOutputReader) property string llvmIncludeDir: Clang.includeDir(llvmConfig, QtcProcessOutputReader) property string llvmLibDir: Clang.libDir(llvmConfig, QtcProcessOutputReader) property string llvmLibs: Clang.libraries(qbs.targetOS) diff --git a/src/shared/clang/clang_installation.pri b/src/shared/clang/clang_installation.pri index 8a3df51e3d2..7ce74635ee5 100644 --- a/src/shared/clang/clang_installation.pri +++ b/src/shared/clang/clang_installation.pri @@ -3,6 +3,25 @@ LLVM_INSTALL_DIR = $$clean_path($$LLVM_INSTALL_DIR) isEmpty(LLVM_INSTALL_DIR): error("No LLVM_INSTALL_DIR provided") !exists($$LLVM_INSTALL_DIR): error("LLVM_INSTALL_DIR does not exist: $$LLVM_INSTALL_DIR") +defineReplace(extractVersion) { return($$replace(1, ^(\\d+\\.\\d+\\.\\d+)$, \\1)) } +defineReplace(extractMajorVersion) { return($$replace(1, ^(\\d+)\\.\\d+\\.\\d+$, \\1)) } +defineReplace(extractMinorVersion) { return($$replace(1, ^\\d+\\.(\\d+)\\.\\d+$, \\1)) } + +defineTest(versionIsAtLeast) { + actual_major_version = $$extractMajorVersion($$1) + actual_minor_version = $$extractMinorVersion($$1) + required_min_major_version = $$2 + required_min_minor_version = $$3 + + isEqual(actual_major_version, $$required_min_major_version) { + isEqual(actual_minor_version, $$required_min_minor_version): return(true) + greaterThan(actual_minor_version, $$required_min_minor_version): return(true) + } + greaterThan(actual_major_version, $$required_min_major_version): return(true) + + return(false) +} + defineReplace(findLLVMVersionFromLibDir) { libdir = $$1 version_dirs = $$files($$libdir/clang/*) @@ -60,7 +79,7 @@ unix { LLVM_LIBDIR = $$system($$llvm_config --libdir 2>/dev/null) LLVM_INCLUDEPATH = $$system($$llvm_config --includedir 2>/dev/null) output = $$system($$llvm_config --version 2>/dev/null) - LLVM_VERSION = $$replace(output, ^(\\d+\\.\\d+\\.\\d+)$, \\1) + LLVM_VERSION = $$extractVersion($$output) } else { #message("llvm-config not found, concluding paths and version from LLVM_INSTALL_DIR") LLVM_INCLUDEPATH = $$LLVM_INSTALL_DIR/include @@ -70,9 +89,13 @@ unix { !exists($$LLVM_INCLUDEPATH): error("Cannot detect include dir for clang, candidate: $$LLVM_INCLUDEPATH") !exists($$LLVM_LIBDIR): error("Cannot detect lib dir for clang, candidate: $$LLVM_LIBDIR") - isEmpty(LLVM_VERSION): error("Cannot determine clang version at $$LLVM_INSTALL_DIR") clang_lib = $$findClangLibInLibDir($$LLVM_LIBDIR) isEmpty(clang_lib): error("Cannot find Clang shared library in $$LLVM_LIBDIR") LLVM_LIBS = -L$${LLVM_LIBDIR} -l$${clang_lib} } + +isEmpty(LLVM_VERSION): error("Cannot determine clang version at $$LLVM_INSTALL_DIR") +!versionIsAtLeast($$LLVM_VERSION, 3, 6): { + error("LLVM/Clang version >= 3.6.0 required, version provided: $$LLVM_VERSION") +} diff --git a/src/tools/clangbackend/clangbackend.qbs b/src/tools/clangbackend/clangbackend.qbs index 04499e75d04..c46534240d8 100644 --- a/src/tools/clangbackend/clangbackend.qbs +++ b/src/tools/clangbackend/clangbackend.qbs @@ -1,5 +1,6 @@ import qbs 1.0 import QtcClangInstallation as Clang +import QtcFunctions import QtcProcessOutputReader QtcTool { @@ -17,7 +18,7 @@ QtcTool { files: [ "clangbackendmain.cpp" ] - property string llvmConfig: Clang.llvmConfig(qbs) + property string llvmConfig: Clang.llvmConfig(qbs, QtcFunctions, QtcProcessOutputReader) property string llvmIncludeDir: Clang.includeDir(llvmConfig, QtcProcessOutputReader) property string llvmLibDir: Clang.libDir(llvmConfig, QtcProcessOutputReader) property string llvmLibs: Clang.libraries(qbs.targetOS) From ba9787a009dcd1095ea9adab6a2185fe1b6b374d Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Mon, 3 Aug 2015 22:11:28 +0300 Subject: [PATCH 114/116] C++: Initialize memory after allocating symbol pointers Change-Id: Ife1d3f963ef6781f96031f41ae3858b2c278145e Reviewed-by: Nikolai Kosjar --- src/libs/3rdparty/cplusplus/Scope.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libs/3rdparty/cplusplus/Scope.cpp b/src/libs/3rdparty/cplusplus/Scope.cpp index f04e72e2a6d..783eff77ae3 100644 --- a/src/libs/3rdparty/cplusplus/Scope.cpp +++ b/src/libs/3rdparty/cplusplus/Scope.cpp @@ -117,6 +117,7 @@ void SymbolTable::enterSymbol(Symbol *symbol) _allocatedSymbols = DefaultInitialSize; _symbols = reinterpret_cast(realloc(_symbols, sizeof(Symbol *) * _allocatedSymbols)); + memset(_symbols + _symbolCount, 0, sizeof(Symbol *) * (_allocatedSymbols - _symbolCount)); } symbol->_index = _symbolCount; From dcab956dc83dc77e7170cefeaf0a163b55779e6d Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Tue, 4 Aug 2015 10:53:34 +0200 Subject: [PATCH 115/116] iOS: Do not drag unused QSettings objects around. Change-Id: I5f641ba713e11c7a5376f94babf745f35ccbdba2 Reviewed-by: Daniel Teske --- src/plugins/ios/iosprobe.cpp | 33 ++++++++++++--------------------- src/plugins/ios/iosprobe.h | 4 ---- 2 files changed, 12 insertions(+), 25 deletions(-) diff --git a/src/plugins/ios/iosprobe.cpp b/src/plugins/ios/iosprobe.cpp index cdf0c8157ad..25e7d981324 100644 --- a/src/plugins/ios/iosprobe.cpp +++ b/src/plugins/ios/iosprobe.cpp @@ -131,15 +131,14 @@ void IosProbe::setupDefaultToolchains(const QString &devPath, const QString &xco foreach (const QFileInfo &fInfo, platforms) { if (fInfo.isDir() && fInfo.suffix() == QLatin1String("platform")) { qCDebug(probeLog) << indent << QString::fromLatin1("Setting up %1").arg(fInfo.fileName()); - QSettingsPtr infoSettings(new QSettings( - fInfo.absoluteFilePath() + QLatin1String("/Info.plist"), - QSettings::NativeFormat)); - if (!infoSettings->contains(QLatin1String("Name"))) { + QSettings infoSettings(fInfo.absoluteFilePath() + QLatin1String("/Info.plist"), + QSettings::NativeFormat); + if (!infoSettings.contains(QLatin1String("Name"))) { qCWarning(probeLog) << indent << QString::fromLatin1("Missing platform name in Info.plist of %1") .arg(fInfo.absoluteFilePath()); continue; } - QString name = infoSettings->value(QLatin1String("Name")).toString(); + QString name = infoSettings.value(QLatin1String("Name")).toString(); if (name != QLatin1String("macosx") && name != QLatin1String("iphoneos") && name != QLatin1String("iphonesimulator")) { @@ -148,9 +147,9 @@ void IosProbe::setupDefaultToolchains(const QString &devPath, const QString &xco } // prepare default platform properties - QVariantMap defaultProp = infoSettings->value(QLatin1String("DefaultProperties")) + QVariantMap defaultProp = infoSettings.value(QLatin1String("DefaultProperties")) .toMap(); - QVariantMap overrideProp = infoSettings->value(QLatin1String("OverrideProperties")) + QVariantMap overrideProp = infoSettings.value(QLatin1String("OverrideProperties")) .toMap(); QMapIterator i(overrideProp); while (i.hasNext()) { @@ -184,7 +183,6 @@ void IosProbe::setupDefaultToolchains(const QString &devPath, const QString &xco clangProfile.platformKind = 0; clangProfile.name = clangFullName; clangProfile.platformPath = Utils::FileName(fInfo); - clangProfile.platformInfo = infoSettings; clangProfile.compilerPath = Utils::FileName(clangFileInfo); QStringList flags = extraFlags; flags << QLatin1String("-dumpmachine"); @@ -208,7 +206,6 @@ void IosProbe::setupDefaultToolchains(const QString &devPath, const QString &xco gccProfile.platformKind = 0; // use the arm-apple-darwin10-llvm-* variant and avoid the extraFlags if available??? gccProfile.platformPath = Utils::FileName(fInfo); - gccProfile.platformInfo = infoSettings; gccProfile.compilerPath = Utils::FileName(gccFileInfo); QStringList flags = extraFlags; flags << QLatin1String("-dumpmachine"); @@ -223,7 +220,6 @@ void IosProbe::setupDefaultToolchains(const QString &devPath, const QString &xco // set SDKs/sysroot QString sysRoot; - QSettingsPtr sdkSettings; { QString sdkName; if (defaultProp.contains(QLatin1String("SDKROOT"))) @@ -234,12 +230,12 @@ void IosProbe::setupDefaultToolchains(const QString &devPath, const QString &xco foreach (const QFileInfo &sdkDirInfo, sdks.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot)) { indent = QLatin1String(" "); - QSettingsPtr sdkInfo(new QSettings(sdkDirInfo.absoluteFilePath() - + QLatin1String("/SDKSettings.plist"), - QSettings::NativeFormat)); - QString versionStr = sdkInfo->value(QLatin1String("Version")).toString(); - QVariant currentSdkName = sdkInfo->value(QLatin1String("CanonicalName")); - bool isBaseSdk = sdkInfo->value((QLatin1String("isBaseSDK"))).toString() + QSettings sdkInfo(sdkDirInfo.absoluteFilePath() + + QLatin1String("/SDKSettings.plist"), + QSettings::NativeFormat); + QString versionStr = sdkInfo.value(QLatin1String("Version")).toString(); + QVariant currentSdkName = sdkInfo.value(QLatin1String("CanonicalName")); + bool isBaseSdk = sdkInfo.value((QLatin1String("isBaseSDK"))).toString() .toLower() != QLatin1String("no"); if (!isBaseSdk) { qCDebug(probeLog) << indent << QString::fromLatin1("Skipping non base Sdk %1") @@ -250,11 +246,9 @@ void IosProbe::setupDefaultToolchains(const QString &devPath, const QString &xco if (maxVersion.isEmpty() || compareVersions(maxVersion, versionStr) > 0) { maxVersion = versionStr; sdkPath = sdkDirInfo.canonicalFilePath(); - sdkSettings = sdkInfo; } } else if (currentSdkName == sdkName) { sdkPath = sdkDirInfo.canonicalFilePath(); - sdkSettings = sdkInfo; } } if (!sdkPath.isEmpty()) @@ -265,15 +259,12 @@ void IosProbe::setupDefaultToolchains(const QString &devPath, const QString &xco if (hasClang && !sysRoot.isEmpty()) { m_platforms[clangFullName].platformKind |= Platform::BasePlatform; m_platforms[clangFullName].sdkPath = Utils::FileName::fromString(sysRoot); - m_platforms[clangFullName].sdkSettings = sdkSettings; m_platforms[clang11FullName].platformKind |= Platform::BasePlatform; m_platforms[clang11FullName].sdkPath = Utils::FileName::fromString(sysRoot); - m_platforms[clang11FullName].sdkSettings = sdkSettings; } if (hasGcc && !sysRoot.isEmpty()) { m_platforms[gccFullName].platformKind |= Platform::BasePlatform; m_platforms[gccFullName].sdkPath = Utils::FileName::fromString(sysRoot); - m_platforms[gccFullName].sdkSettings = sdkSettings; } } indent = QLatin1String(" "); diff --git a/src/plugins/ios/iosprobe.h b/src/plugins/ios/iosprobe.h index 4e1bd0aff2e..8f70f1fa8ee 100644 --- a/src/plugins/ios/iosprobe.h +++ b/src/plugins/ios/iosprobe.h @@ -37,8 +37,6 @@ namespace Ios { -typedef QSharedPointer QSettingsPtr; - class Platform { public: @@ -56,8 +54,6 @@ class Platform Utils::FileName compilerPath; QString architecture; QStringList backendFlags; - QSettingsPtr platformInfo; - QSettingsPtr sdkSettings; }; class IosProbe From aa8998cfb38f6227891ce104de23b1e62bd7bbcf Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Tue, 4 Aug 2015 12:07:46 +0200 Subject: [PATCH 116/116] iOS: Fix kit creation with Xcode 7 Xcode 7's platform plist does not specify a concrete version for the SDK in the SDK name anymore. So, if we do not find an SDK with the same name, look for an SDK with a version that matches the platform's 'Version' setting. Trying to figure out from the settings looks inherently fragile to me though, and we might be better off just using xcrun -sdk --show-sdk-path Change-Id: Ief45f03aa7cd5193f6c24b087eb635d3f5ba5298 Reviewed-by: Daniel Teske --- src/plugins/ios/iosprobe.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/plugins/ios/iosprobe.cpp b/src/plugins/ios/iosprobe.cpp index 25e7d981324..49634dcfbc6 100644 --- a/src/plugins/ios/iosprobe.cpp +++ b/src/plugins/ios/iosprobe.cpp @@ -146,6 +146,8 @@ void IosProbe::setupDefaultToolchains(const QString &devPath, const QString &xco continue; } + const QString platformSdkVersion = infoSettings.value(QLatin1String("Version")).toString(); + // prepare default platform properties QVariantMap defaultProp = infoSettings.value(QLatin1String("DefaultProperties")) .toMap(); @@ -225,6 +227,7 @@ void IosProbe::setupDefaultToolchains(const QString &devPath, const QString &xco if (defaultProp.contains(QLatin1String("SDKROOT"))) sdkName = defaultProp.value(QLatin1String("SDKROOT")).toString(); QString sdkPath; + QString sdkPathWithSameVersion; QDir sdks(fInfo.absoluteFilePath() + QLatin1String("/Developer/SDKs")); QString maxVersion; foreach (const QFileInfo &sdkDirInfo, sdks.entryInfoList(QDir::Dirs @@ -249,11 +252,15 @@ void IosProbe::setupDefaultToolchains(const QString &devPath, const QString &xco } } else if (currentSdkName == sdkName) { sdkPath = sdkDirInfo.canonicalFilePath(); - } + } else if (currentSdkName.toString().startsWith(sdkName) /*if sdkName doesn't contain version*/ + && compareVersions(platformSdkVersion, versionStr) == 0) + sdkPathWithSameVersion = sdkDirInfo.canonicalFilePath(); } - if (!sdkPath.isEmpty()) + if (sdkPath.isEmpty()) + sysRoot = sdkPathWithSameVersion; + else sysRoot = sdkPath; - else if (!sdkName.isEmpty()) + if (sysRoot.isEmpty() && !sdkName.isEmpty()) qCDebug(probeLog) << indent << QString::fromLatin1("Failed to find sysroot %1").arg(sdkName); } if (hasClang && !sysRoot.isEmpty()) {