diff --git a/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceserverinterface.cpp b/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceserverinterface.cpp index 3e3351e507f..184265951e8 100644 --- a/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceserverinterface.cpp +++ b/share/qtcreator/qml/qmlpuppet/interfaces/nodeinstanceserverinterface.cpp @@ -81,6 +81,15 @@ NodeInstanceServerInterface::NodeInstanceServerInterface(QObject *parent) : registerCommands(); } +template +inline void registerCommand(const char *typeName) +{ + qRegisterMetaType(typeName); +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + qRegisterMetaTypeStreamOperators(typeName); +#endif +} + void NodeInstanceServerInterface::registerCommands() { if (isRegistered) @@ -88,149 +97,54 @@ void NodeInstanceServerInterface::registerCommands() isRegistered = true; - qRegisterMetaType("CreateInstancesCommand"); - qRegisterMetaTypeStreamOperators("CreateInstancesCommand"); - - qRegisterMetaType("ClearSceneCommand"); - qRegisterMetaTypeStreamOperators("ClearSceneCommand"); - - qRegisterMetaType("CreateSceneCommand"); - qRegisterMetaTypeStreamOperators("CreateSceneCommand"); - - qRegisterMetaType("Update3dViewStateCommand"); - qRegisterMetaTypeStreamOperators("Update3dViewStateCommand"); - - qRegisterMetaType("ChangeBindingsCommand"); - qRegisterMetaTypeStreamOperators("ChangeBindingsCommand"); - - qRegisterMetaType("ChangeValuesCommand"); - qRegisterMetaTypeStreamOperators("ChangeValuesCommand"); - - qRegisterMetaType("ChangeFileUrlCommand"); - qRegisterMetaTypeStreamOperators("ChangeFileUrlCommand"); - - qRegisterMetaType("ChangeStateCommand"); - qRegisterMetaTypeStreamOperators("ChangeStateCommand"); - - qRegisterMetaType("RemoveInstancesCommand"); - qRegisterMetaTypeStreamOperators("RemoveInstancesCommand"); - - qRegisterMetaType("ChangeSelectionCommand"); - qRegisterMetaTypeStreamOperators("ChangeSelectionCommand"); - - qRegisterMetaType("RemovePropertiesCommand"); - qRegisterMetaTypeStreamOperators("RemovePropertiesCommand"); - - qRegisterMetaType("ReparentInstancesCommand"); - qRegisterMetaTypeStreamOperators("ReparentInstancesCommand"); - - qRegisterMetaType("ChangeIdsCommand"); - qRegisterMetaTypeStreamOperators("ChangeIdsCommand"); - - qRegisterMetaType("PropertyAbstractContainer"); - qRegisterMetaTypeStreamOperators("PropertyAbstractContainer"); - - qRegisterMetaType("InformationChangedCommand"); - qRegisterMetaTypeStreamOperators("InformationChangedCommand"); - - qRegisterMetaType("ValuesChangedCommand"); - qRegisterMetaTypeStreamOperators("ValuesChangedCommand"); - - qRegisterMetaType("ValuesModifiedCommand"); - qRegisterMetaTypeStreamOperators("ValuesModifiedCommand"); - - qRegisterMetaType("PixmapChangedCommand"); - qRegisterMetaTypeStreamOperators("PixmapChangedCommand"); - - qRegisterMetaType("InformationContainer"); - qRegisterMetaTypeStreamOperators("InformationContainer"); - - qRegisterMetaType("PropertyValueContainer"); - qRegisterMetaTypeStreamOperators("PropertyValueContainer"); - - qRegisterMetaType("PropertyBindingContainer"); - qRegisterMetaTypeStreamOperators("PropertyBindingContainer"); - - qRegisterMetaType("PropertyAbstractContainer"); - qRegisterMetaTypeStreamOperators("PropertyAbstractContainer"); - - qRegisterMetaType("InstanceContainer"); - qRegisterMetaTypeStreamOperators("InstanceContainer"); - - qRegisterMetaType("IdContainer"); - qRegisterMetaTypeStreamOperators("IdContainer"); - - qRegisterMetaType("ChildrenChangedCommand"); - qRegisterMetaTypeStreamOperators("ChildrenChangedCommand"); - - qRegisterMetaType("ImageContainer"); - qRegisterMetaTypeStreamOperators("ImageContainer"); - - qRegisterMetaType("StatePreviewImageChangedCommand"); - qRegisterMetaTypeStreamOperators("StatePreviewImageChangedCommand"); - - qRegisterMetaType("CompleteComponentCommand"); - qRegisterMetaTypeStreamOperators("CompleteComponentCommand"); - - qRegisterMetaType("ComponentCompletedCommand"); - qRegisterMetaTypeStreamOperators("ComponentCompletedCommand"); - - qRegisterMetaType("AddImportContainer"); - qRegisterMetaTypeStreamOperators("AddImportContainer"); - - qRegisterMetaType("SynchronizeCommand"); - qRegisterMetaTypeStreamOperators("SynchronizeCommand"); - - qRegisterMetaType("ChangeNodeSourceCommand"); - qRegisterMetaTypeStreamOperators("ChangeNodeSourceCommand"); - - qRegisterMetaType("ChangeAuxiliaryCommand"); - qRegisterMetaTypeStreamOperators("ChangeAuxiliaryCommand"); - - qRegisterMetaType("TokenCommand"); - qRegisterMetaTypeStreamOperators("TokenCommand"); - - qRegisterMetaType("RemoveSharedMemoryCommand"); - qRegisterMetaTypeStreamOperators("RemoveSharedMemoryCommand"); - - qRegisterMetaType("EndPuppetCommand"); - qRegisterMetaTypeStreamOperators("EndPuppetCommand"); - - qRegisterMetaType("DebugOutputCommand"); - qRegisterMetaTypeStreamOperators("DebugOutputCommand"); - - qRegisterMetaType("Enumeration"); - qRegisterMetaTypeStreamOperators("Enumeration"); - - qRegisterMetaType("PuppetAliveCommand"); - qRegisterMetaTypeStreamOperators("PuppetAliveCommand"); - - qRegisterMetaType("PuppetToCreatorCommand"); - qRegisterMetaTypeStreamOperators("PuppetToCreatorCommand"); - - qRegisterMetaType("InputEventCommand"); - qRegisterMetaTypeStreamOperators("InputEventCommand"); - - qRegisterMetaType("View3DActionCommand"); - qRegisterMetaTypeStreamOperators("View3DActionCommand"); - - qRegisterMetaType("RequestModelNodePreviewImageCommand"); - qRegisterMetaTypeStreamOperators("RequestModelNodePreviewImageCommand"); - - qRegisterMetaType>("QPairIntInt"); - qRegisterMetaTypeStreamOperators>("QPairIntInt"); - - qRegisterMetaType("ChangeLanguageCommand"); - qRegisterMetaTypeStreamOperators("ChangeLanguageCommand"); - - qRegisterMetaType("ChangePreviewImageSizeCommand"); - qRegisterMetaTypeStreamOperators("ChangePreviewImageSizeCommand"); - - qRegisterMetaType("CapturedDataCommand"); - qRegisterMetaTypeStreamOperators("CapturedDataCommand"); - - qRegisterMetaType("SceneCreatedCommand"); - qRegisterMetaTypeStreamOperators("SceneCreatedCommand"); + registerCommand("CreateInstancesCommand"); + registerCommand("ClearSceneCommand"); + registerCommand("CreateSceneCommand"); + registerCommand("Update3dViewStateCommand"); + registerCommand("ChangeBindingsCommand"); + registerCommand("ChangeValuesCommand"); + registerCommand("ChangeFileUrlCommand"); + registerCommand("ChangeStateCommand"); + registerCommand("RemoveInstancesCommand"); + registerCommand("ChangeSelectionCommand"); + registerCommand("RemovePropertiesCommand"); + registerCommand("ReparentInstancesCommand"); + registerCommand("ChangeIdsCommand"); + registerCommand("PropertyAbstractContainer"); + registerCommand("InformationChangedCommand"); + registerCommand("ValuesChangedCommand"); + registerCommand("ValuesModifiedCommand"); + registerCommand("PixmapChangedCommand"); + registerCommand("InformationContainer"); + registerCommand("PropertyValueContainer"); + registerCommand("PropertyBindingContainer"); + registerCommand("PropertyAbstractContainer"); + registerCommand("InstanceContainer"); + registerCommand("IdContainer"); + registerCommand("ChildrenChangedCommand"); + registerCommand("ImageContainer"); + registerCommand("StatePreviewImageChangedCommand"); + registerCommand("CompleteComponentCommand"); + registerCommand("ComponentCompletedCommand"); + registerCommand("AddImportContainer"); + registerCommand("SynchronizeCommand"); + registerCommand("ChangeNodeSourceCommand"); + registerCommand("ChangeAuxiliaryCommand"); + registerCommand("TokenCommand"); + registerCommand("RemoveSharedMemoryCommand"); + registerCommand("EndPuppetCommand"); + registerCommand("DebugOutputCommand"); + registerCommand("Enumeration"); + registerCommand("PuppetAliveCommand"); + registerCommand("PuppetToCreatorCommand"); + registerCommand("InputEventCommand"); + registerCommand("View3DActionCommand"); + registerCommand("RequestModelNodePreviewImageCommand"); + registerCommand>("QPairIntInt"); + registerCommand("ChangeLanguageCommand"); + registerCommand("ChangePreviewImageSizeCommand"); + registerCommand("CapturedDataCommand"); + registerCommand("SceneCreatedCommand"); } } diff --git a/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate_56.cpp b/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate_56.cpp index b1494e5b3bb..d5701d7fc9c 100644 --- a/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate_56.cpp +++ b/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate_56.cpp @@ -230,13 +230,21 @@ void emitComponentComplete(QObject *item) QQmlData *data = QQmlData::get(item); if (data && data->context) { +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) QQmlComponentAttached *componentAttached = data->context->componentAttached; +#else + QQmlComponentAttached *componentAttached = data->context->componentAttacheds(); +#endif while (componentAttached) { if (componentAttached->parent()) if (componentAttached->parent() == item) emit componentAttached->completed(); +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) componentAttached = componentAttached->next; +#else + componentAttached = componentAttached->next(); +#endif } } } diff --git a/src/libs/utils/aspects.cpp b/src/libs/utils/aspects.cpp index 0f4ae1e445c..217a3abfa70 100644 --- a/src/libs/utils/aspects.cpp +++ b/src/libs/utils/aspects.cpp @@ -235,7 +235,11 @@ public: QPixmap m_labelPixmap; FilePath m_baseFileName; StringAspect::ValueAcceptor m_valueAcceptor; + FancyLineEdit::ValidationFunction m_validator; + bool m_readOnly = false; + bool m_undoRedoEnabled = false; + bool m_enabled = true; bool m_showToolTipOnLabel = false; bool m_fileDialogOnly = false; @@ -438,6 +442,19 @@ void StringAspect::setShowToolTipOnLabel(bool show) update(); } +void StringAspect::setEnabled(bool enabled) +{ + d->m_enabled = enabled; + if (d->m_labelDisplay) + d->m_labelDisplay->setEnabled(enabled); + if (d->m_lineEditDisplay) + d->m_lineEditDisplay->setEnabled(enabled); + if (d->m_pathChooserDisplay) + d->m_pathChooserDisplay->setEnabled(enabled); + if (d->m_textEditDisplay) + d->m_textEditDisplay->setEnabled(enabled); +} + /*! Returns the current text for the separate label in the visual representation of this string aspect. @@ -536,11 +553,25 @@ void StringAspect::setReadOnly(bool readOnly) d->m_textEditDisplay->setReadOnly(readOnly); } +void StringAspect::setUndoRedoEnabled(bool undoRedoEnabled) +{ + d->m_undoRedoEnabled = undoRedoEnabled; + if (d->m_textEditDisplay) + d->m_textEditDisplay->setUndoRedoEnabled(undoRedoEnabled); +} + void StringAspect::setMacroExpanderProvider(const MacroExpanderProvider &expanderProvider) { d->m_expanderProvider = expanderProvider; } +void StringAspect::setValidationFunction(const FancyLineEdit::ValidationFunction &validator) +{ + d->m_validator = validator; + if (d->m_lineEditDisplay) + d->m_lineEditDisplay->setValidationFunction(d->m_validator); +} + void StringAspect::validateInput() { if (d->m_pathChooserDisplay) @@ -588,6 +619,7 @@ void StringAspect::addToLayout(LayoutBuilder &builder) d->m_pathChooserDisplay->setHistoryCompleter(d->m_historyCompleterKey); d->m_pathChooserDisplay->setEnvironment(d->m_environment); d->m_pathChooserDisplay->setBaseDirectory(d->m_baseFileName); + d->m_pathChooserDisplay->setEnabled(d->m_enabled); d->m_pathChooserDisplay->setReadOnly(d->m_readOnly); useMacroExpander(d->m_pathChooserDisplay->lineEdit()); connect(d->m_pathChooserDisplay, &PathChooser::pathChanged, @@ -600,7 +632,10 @@ void StringAspect::addToLayout(LayoutBuilder &builder) d->m_lineEditDisplay->setPlaceholderText(d->m_placeHolderText); if (!d->m_historyCompleterKey.isEmpty()) d->m_lineEditDisplay->setHistoryCompleter(d->m_historyCompleterKey); + d->m_lineEditDisplay->setEnabled(d->m_enabled); d->m_lineEditDisplay->setReadOnly(d->m_readOnly); + if (d->m_validator) + d->m_lineEditDisplay->setValidationFunction(d->m_validator); useMacroExpander(d->m_lineEditDisplay); connect(d->m_lineEditDisplay, &FancyLineEdit::textEdited, this, &StringAspect::setValue); @@ -609,7 +644,11 @@ void StringAspect::addToLayout(LayoutBuilder &builder) case TextEditDisplay: d->m_textEditDisplay = new QTextEdit; d->m_textEditDisplay->setPlaceholderText(d->m_placeHolderText); + d->m_textEditDisplay->setEnabled(d->m_enabled); d->m_textEditDisplay->setReadOnly(d->m_readOnly); + d->m_textEditDisplay->setUndoRedoEnabled(d->m_undoRedoEnabled); + d->m_textEditDisplay->setTextInteractionFlags + (Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse); useMacroExpander(d->m_textEditDisplay); connect(d->m_textEditDisplay, &QTextEdit::textChanged, this, [this] { const QString value = d->m_textEditDisplay->document()->toPlainText(); @@ -622,6 +661,7 @@ void StringAspect::addToLayout(LayoutBuilder &builder) break; case LabelDisplay: d->m_labelDisplay = new QLabel; + d->m_labelDisplay->setEnabled(d->m_enabled); d->m_labelDisplay->setTextInteractionFlags(Qt::TextSelectableByMouse); builder.addItem(d->m_labelDisplay.data()); break; diff --git a/src/libs/utils/aspects.h b/src/libs/utils/aspects.h index c4d98962f93..6308a13e8c7 100644 --- a/src/libs/utils/aspects.h +++ b/src/libs/utils/aspects.h @@ -217,6 +217,7 @@ public: void setLabelText(const QString &labelText); void setLabelPixmap(const QPixmap &labelPixmap); void setShowToolTipOnLabel(bool show); + void setEnabled(bool enabled); void setDisplayFilter(const std::function &displayFilter); void setPlaceHolderText(const QString &placeHolderText); @@ -227,7 +228,9 @@ public: void setBaseFileName(const Utils::FilePath &baseFileName); void setToolTip(const QString &tooltip); void setReadOnly(bool readOnly); + void setUndoRedoEnabled(bool readOnly); void setMacroExpanderProvider(const Utils::MacroExpanderProvider &expanderProvider); + void setValidationFunction(const Utils::FancyLineEdit::ValidationFunction &validator); void validateInput(); diff --git a/src/libs/utils/qtcprocess.cpp b/src/libs/utils/qtcprocess.cpp index f70b46b1d83..a65c61d53e6 100644 --- a/src/libs/utils/qtcprocess.cpp +++ b/src/libs/utils/qtcprocess.cpp @@ -663,7 +663,13 @@ bool QtcProcess::prepareCommand(const QString &command, const QString &arguments } else { if (err != QtcProcess::FoundMeta) return false; +#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) *outCmd = qEnvironmentVariable("SHELL", "/bin/sh"); +#else + // for sdktool + *outCmd = qEnvironmentVariableIsSet("SHELL") ? QString::fromLocal8Bit(qgetenv("SHELL")) + : QString("/bin/sh"); +#endif *outArgs = Arguments::createUnixArgs( QStringList({"-c", (quoteArg(command) + ' ' + arguments)})); } diff --git a/src/libs/utils/savedaction.cpp b/src/libs/utils/savedaction.cpp index 292bbb974e1..65f9492a6b0 100644 --- a/src/libs/utils/savedaction.cpp +++ b/src/libs/utils/savedaction.cpp @@ -54,9 +54,9 @@ namespace Utils { */ SavedAction::SavedAction(QObject *parent) - : QAction(parent) { - connect(this, &QAction::triggered, this, &SavedAction::actionTriggered); + setParent(parent); + connect(&m_action, &QAction::triggered, this, &SavedAction::actionTriggered); } @@ -82,8 +82,8 @@ void SavedAction::setValue(const QVariant &value, bool doemit) if (value == m_value) return; m_value = value; - if (this->isCheckable()) - this->setChecked(m_value.toBool()); + if (m_action.isCheckable()) + m_action.setChecked(m_value.toBool()); if (doemit) emit valueChanged(m_value); } @@ -142,37 +142,14 @@ void SavedAction::setSettingsKey(const QString &key) */ void SavedAction::setSettingsKey(const QString &group, const QString &key) { - m_settingsKey = key; - m_settingsGroup = group; -} - - -/*! - Sets the key to be used when accessing the settings. - - \sa settingsKey() -*/ -QString SavedAction::settingsGroup() const -{ - return m_settingsGroup; -} - -/*! - Sets the group to be used when accessing the settings. - - \sa settingsGroup() -*/ -void SavedAction::setSettingsGroup(const QString &group) -{ - m_settingsGroup = group; + m_settingsKey = group + "/" + key; } QString SavedAction::toString() const { return QLatin1String("value: ") + m_value.toString() + QLatin1String(" defaultvalue: ") + m_defaultValue.toString() - + QLatin1String(" settingskey: ") + m_settingsGroup - + QLatin1Char('/') + m_settingsKey; + + QLatin1String(" settingskey: ") + m_settingsKey; } /* @@ -183,11 +160,11 @@ QString SavedAction::toString() const */ void SavedAction::readSettings(const QSettings *settings) { - if (m_settingsGroup.isEmpty() || m_settingsKey.isEmpty()) + if (m_settingsKey.isEmpty()) return; - QVariant var = settings->value(m_settingsGroup + QLatin1Char('/') + m_settingsKey, m_defaultValue); + QVariant var = settings->value(m_settingsKey, m_defaultValue); // work around old ini files containing @Invalid() entries - if (isCheckable() && !var.isValid()) + if (m_action.isCheckable() && !var.isValid()) var = false; setValue(var); } @@ -200,11 +177,9 @@ void SavedAction::readSettings(const QSettings *settings) */ void SavedAction::writeSettings(QSettings *settings) { - if (m_settingsGroup.isEmpty() || m_settingsKey.isEmpty()) + if (m_settingsKey.isEmpty()) return; - settings->beginGroup(m_settingsGroup); settings->setValue(m_settingsKey, m_value); - settings->endGroup(); } /* @@ -274,7 +249,7 @@ void SavedAction::connectWidget(QWidget *widget, ApplyMode applyMode) // Copy tooltip, but only if there's nothing explcitly set on the widget yet. if (widget->toolTip().isEmpty()) - widget->setToolTip(toolTip()); + widget->setToolTip(m_action.toolTip()); } /* @@ -329,21 +304,26 @@ void SavedAction::setDialogText(const QString &dialogText) void SavedAction::actionTriggered(bool) { - if (isCheckable()) - setValue(isChecked()); - if (actionGroup() && actionGroup()->isExclusive()) { + if (m_action.isCheckable()) + setValue(m_action.isChecked()); + if (m_action.actionGroup() && m_action.actionGroup()->isExclusive()) { // FIXME: should be taken care of more directly - const QList actions = actionGroup()->actions(); + const QList actions = m_action.actionGroup()->actions(); for (QAction *act : actions) if (auto dact = qobject_cast(act)) - dact->setValue(bool(act == this)); + dact->setValue(bool(act == &m_action)); } } +QAction *SavedAction::action() +{ + return &m_action; +} + void SavedAction::trigger(const QVariant &data) { - setData(data); - QAction::trigger(); + m_action.setData(data); + m_action.trigger(); } ////////////////////////////////////////////////////////////////////////// diff --git a/src/libs/utils/savedaction.h b/src/libs/utils/savedaction.h index 5f90de65ed4..98403d683be 100644 --- a/src/libs/utils/savedaction.h +++ b/src/libs/utils/savedaction.h @@ -27,6 +27,8 @@ #include "utils_global.h" +#include "aspects.h" + #include QT_BEGIN_NAMESPACE @@ -37,7 +39,7 @@ namespace Utils { enum ApplyMode { ImmediateApply, DeferedApply }; -class QTCREATOR_UTILS_EXPORT SavedAction : public QAction +class QTCREATOR_UTILS_EXPORT SavedAction : public BaseAspect { Q_OBJECT @@ -57,9 +59,6 @@ public: void setSettingsKey(const QString &key); void setSettingsKey(const QString &group, const QString &key); - QString settingsGroup() const; - void setSettingsGroup(const QString &group); - virtual void readSettings(const QSettings *settings); virtual void writeSettings(QSettings *settings); @@ -72,6 +71,15 @@ public: QString dialogText() const; void setDialogText(const QString &dialogText); + QAction *action(); + + void setText(const QString &text) { m_action.setText(text); } + void setToolTip(const QString &toolTip) { m_action.setToolTip(toolTip); } + void setCheckable(bool checkable) { m_action.setCheckable(checkable); } + void setChecked(bool checked) { m_action.setChecked(checked); } + void setEnabled(bool enabled) { m_action.setEnabled(enabled); } + void setIcon(const QIcon &icon) { m_action.setIcon(icon); } + signals: void valueChanged(const QVariant &newValue); @@ -81,9 +89,9 @@ private: QVariant m_value; QVariant m_defaultValue; QString m_settingsKey; - QString m_settingsGroup; QString m_dialogText; QWidget *m_widget = nullptr; + QAction m_action; }; class QTCREATOR_UTILS_EXPORT SavedActionSet diff --git a/src/plugins/android/androidbuildapkstep.cpp b/src/plugins/android/androidbuildapkstep.cpp index ec7e2a4fff1..d3331d5994c 100644 --- a/src/plugins/android/androidbuildapkstep.cpp +++ b/src/plugins/android/androidbuildapkstep.cpp @@ -127,7 +127,7 @@ private: // AndroidBuildApkWidget -class AndroidBuildApkWidget : public BuildStepConfigWidget +class AndroidBuildApkWidget : public QWidget { Q_DECLARE_TR_FUNCTIONS(Android::Internal::AndroidBuildApkStep) @@ -157,7 +157,7 @@ private: }; AndroidBuildApkWidget::AndroidBuildApkWidget(AndroidBuildApkStep *step) - : BuildStepConfigWidget(step), m_step(step) + : m_step(step) { auto vbox = new QVBoxLayout(this); vbox->addWidget(createSignPackageGroup()); @@ -662,7 +662,7 @@ void AndroidBuildApkStep::showInGraphicalShell() Core::FileUtils::showInGraphicalShell(Core::ICore::dialogParent(), m_packagePath); } -ProjectExplorer::BuildStepConfigWidget *AndroidBuildApkStep::createConfigWidget() +QWidget *AndroidBuildApkStep::createConfigWidget() { return new AndroidBuildApkWidget(this); } diff --git a/src/plugins/android/androidbuildapkstep.h b/src/plugins/android/androidbuildapkstep.h index d4f94d4f22d..f17703ab654 100644 --- a/src/plugins/android/androidbuildapkstep.h +++ b/src/plugins/android/androidbuildapkstep.h @@ -83,7 +83,7 @@ private: bool init() override; void setupOutputFormatter(Utils::OutputFormatter *formatter) override; - ProjectExplorer::BuildStepConfigWidget *createConfigWidget() override; + QWidget *createConfigWidget() override; void processStarted() override; void processFinished(int exitCode, QProcess::ExitStatus status) override; bool verifyKeystorePassword(); diff --git a/src/plugins/android/androiddeployqtstep.cpp b/src/plugins/android/androiddeployqtstep.cpp index 25490bb0923..0de5dc0d46b 100644 --- a/src/plugins/android/androiddeployqtstep.cpp +++ b/src/plugins/android/androiddeployqtstep.cpp @@ -473,9 +473,9 @@ void AndroidDeployQtStep::runCommand(const CommandLine &command) } } -BuildStepConfigWidget *AndroidDeployQtStep::createConfigWidget() +QWidget *AndroidDeployQtStep::createConfigWidget() { - auto widget = new BuildStepConfigWidget(this); + auto widget = new QWidget; setDisplayName(QString("%1").arg(displayName())); setSummaryText(displayName()); diff --git a/src/plugins/android/androiddeployqtstep.h b/src/plugins/android/androiddeployqtstep.h index 05aca18da77..450213de5a4 100644 --- a/src/plugins/android/androiddeployqtstep.h +++ b/src/plugins/android/androiddeployqtstep.h @@ -87,7 +87,7 @@ private: bool runImpl(); - ProjectExplorer::BuildStepConfigWidget *createConfigWidget() override; + QWidget *createConfigWidget() override; void processReadyReadStdOutput(DeployErrorCode &errorCode); void stdOutput(const QString &line); diff --git a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp index c29359a531d..7fa8b9302e1 100644 --- a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp +++ b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp @@ -196,6 +196,8 @@ void ClangEditorDocumentProcessor::updateCodeWarnings( uint documentRevision) { if (documentRevision == revision()) { + if (m_invalidationState == InvalidationState::Scheduled) + m_invalidationState = InvalidationState::Canceled; m_diagnosticManager.processNewDiagnostics(diagnostics, m_isProjectFile); const auto codeWarnings = m_diagnosticManager.takeExtraSelections(); const auto fixitAvailableMarkers = m_diagnosticManager.takeFixItAvailableMarkers(); @@ -298,11 +300,14 @@ TextEditor::QuickFixOperations ClangEditorDocumentProcessor::extraRefactoringOpe void ClangEditorDocumentProcessor::editorDocumentTimerRestarted() { m_updateBackendDocumentTimer.stop(); // Wait for the next call to run(). + m_invalidationState = InvalidationState::Scheduled; } void ClangEditorDocumentProcessor::invalidateDiagnostics() { - m_diagnosticManager.invalidateDiagnostics(); + if (m_invalidationState != InvalidationState::Canceled) + m_diagnosticManager.invalidateDiagnostics(); + m_invalidationState = InvalidationState::Off; } TextEditor::TextMarks ClangEditorDocumentProcessor::diagnosticTextMarksAt(uint line, diff --git a/src/plugins/clangcodemodel/clangeditordocumentprocessor.h b/src/plugins/clangcodemodel/clangeditordocumentprocessor.h index 36ef30b8daf..91d98601aab 100644 --- a/src/plugins/clangcodemodel/clangeditordocumentprocessor.h +++ b/src/plugins/clangcodemodel/clangeditordocumentprocessor.h @@ -140,6 +140,7 @@ private: QFutureWatcher m_parserWatcher; QTimer m_updateBackendDocumentTimer; unsigned m_parserRevision; + enum class InvalidationState { Off, Scheduled, Canceled } m_invalidationState; QVector m_tokenInfos; CppTools::SemanticHighlighter m_semanticHighlighter; diff --git a/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp b/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp index ee42a409659..9702c880b44 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp @@ -432,9 +432,9 @@ QString CMakeBuildStep::activeRunConfigTarget() const return rc ? rc->buildKey() : QString(); } -BuildStepConfigWidget *CMakeBuildStep::createConfigWidget() +QWidget *CMakeBuildStep::createConfigWidget() { - auto widget = new BuildStepConfigWidget(this); + auto widget = new QWidget; auto updateDetails = [this] { ProcessParameters param; diff --git a/src/plugins/cmakeprojectmanager/cmakebuildstep.h b/src/plugins/cmakeprojectmanager/cmakebuildstep.h index f203914c088..caaddf7d446 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildstep.h +++ b/src/plugins/cmakeprojectmanager/cmakebuildstep.h @@ -89,7 +89,7 @@ private: bool init() override; void setupOutputFormatter(Utils::OutputFormatter *formatter) override; void doRun() override; - ProjectExplorer::BuildStepConfigWidget *createConfigWidget() override; + QWidget *createConfigWidget() override; QString defaultBuildTarget() const; diff --git a/src/plugins/debugger/breakhandler.cpp b/src/plugins/debugger/breakhandler.cpp index d66de9abf3d..1de7d332697 100644 --- a/src/plugins/debugger/breakhandler.cpp +++ b/src/plugins/debugger/breakhandler.cpp @@ -1671,9 +1671,9 @@ bool BreakHandler::contextMenuEvent(const ItemViewEvent &ev) menu->addSeparator(); - menu->addAction(action(UseToolTipsInBreakpointsView)); + menu->addAction(action(UseToolTipsInBreakpointsView)->action()); Internal::addHideColumnActions(menu, ev.view()); - menu->addAction(action(SettingsDialog)); + menu->addAction(action(SettingsDialog)->action()); menu->popup(ev.globalPos()); @@ -2632,9 +2632,9 @@ bool BreakpointManager::contextMenuEvent(const ItemViewEvent &ev) menu->addSeparator(); - menu->addAction(action(UseToolTipsInBreakpointsView)); + menu->addAction(action(UseToolTipsInBreakpointsView)->action()); Internal::addHideColumnActions(menu, ev.view()); - menu->addAction(action(SettingsDialog)); + menu->addAction(action(SettingsDialog)->action()); menu->popup(ev.globalPos()); diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp index e35179dc015..24428b42e3e 100644 --- a/src/plugins/debugger/cdb/cdbengine.cpp +++ b/src/plugins/debugger/cdb/cdbengine.cpp @@ -204,7 +204,7 @@ CdbEngine::CdbEngine() : wh->addTypeFormats("QImage", imageFormats); wh->addTypeFormats("QImage *", imageFormats); - connect(action(CreateFullBacktrace), &QAction::triggered, + connect(action(CreateFullBacktrace)->action(), &QAction::triggered, this, &CdbEngine::createFullBacktrace); connect(&m_process, QOverload::of(&QProcess::finished), this, &CdbEngine::processFinished); @@ -216,7 +216,7 @@ CdbEngine::CdbEngine() : connect(action(UseDebuggingHelpers), &SavedAction::valueChanged, this, &CdbEngine::updateLocals); - if (action(UseCodeModel)->isChecked()) + if (action(UseCodeModel)->action()->isChecked()) m_codeModelSnapshot = CppTools::CppModelManager::instance()->snapshot(); } diff --git a/src/plugins/debugger/commonoptionspage.cpp b/src/plugins/debugger/commonoptionspage.cpp index 600cf432fbe..5e48526a3d1 100644 --- a/src/plugins/debugger/commonoptionspage.cpp +++ b/src/plugins/debugger/commonoptionspage.cpp @@ -203,7 +203,7 @@ public: if (HostOsInfo::isWindowsHost()) { SavedAction *registerAction = action(RegisterForPostMortem); m_group.insert(registerAction, checkBoxRegisterForPostMortem); - connect(registerAction, &QAction::toggled, + connect(registerAction->action(), &QAction::toggled, checkBoxRegisterForPostMortem, &QAbstractButton::setChecked); } else { checkBoxRegisterForPostMortem->setVisible(false); diff --git a/src/plugins/debugger/console/console.cpp b/src/plugins/debugger/console/console.cpp index bc538c03d0c..1b29f70d61f 100644 --- a/src/plugins/debugger/console/console.cpp +++ b/src/plugins/debugger/console/console.cpp @@ -108,9 +108,9 @@ Console::Console() m_showDebugButtonAction->setCheckable(true); m_showDebugButtonAction->setChecked(true); m_showDebugButtonAction->setIcon(Utils::Icons::INFO_TOOLBAR.icon()); - connect(m_showDebugButtonAction, &Utils::SavedAction::toggled, + connect(m_showDebugButtonAction->action(), &QAction::toggled, proxyModel, &ConsoleProxyModel::setShowLogs); - m_showDebugButton->setDefaultAction(m_showDebugButtonAction); + m_showDebugButton->setDefaultAction(m_showDebugButtonAction->action()); m_showWarningButton = new QToolButton(m_consoleWidget); @@ -121,9 +121,9 @@ Console::Console() m_showWarningButtonAction->setCheckable(true); m_showWarningButtonAction->setChecked(true); m_showWarningButtonAction->setIcon(Utils::Icons::WARNING_TOOLBAR.icon()); - connect(m_showWarningButtonAction, &Utils::SavedAction::toggled, + connect(m_showWarningButtonAction->action(), &QAction::toggled, proxyModel, &ConsoleProxyModel::setShowWarnings); - m_showWarningButton->setDefaultAction(m_showWarningButtonAction); + m_showWarningButton->setDefaultAction(m_showWarningButtonAction->action()); m_showErrorButton = new QToolButton(m_consoleWidget); @@ -134,9 +134,9 @@ Console::Console() m_showErrorButtonAction->setCheckable(true); m_showErrorButtonAction->setChecked(true); m_showErrorButtonAction->setIcon(Utils::Icons::CRITICAL_TOOLBAR.icon()); - connect(m_showErrorButtonAction, &Utils::SavedAction::toggled, + connect(m_showErrorButtonAction->action(), &QAction::toggled, proxyModel, &ConsoleProxyModel::setShowErrors); - m_showErrorButton->setDefaultAction(m_showErrorButtonAction); + m_showErrorButton->setDefaultAction(m_showErrorButtonAction->action()); m_spacer = new QWidget(m_consoleWidget); m_spacer->setMinimumWidth(30); diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp index 3a49da4a20a..c784b2adfbb 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -1197,7 +1197,7 @@ DebuggerPluginPrivate::DebuggerPluginPrivate(const QStringList &arguments) this, &DebuggerPluginPrivate::updateBreakMenuItem); // Application interaction - connect(action(SettingsDialog), &QAction::triggered, + connect(action(SettingsDialog)->action(), &QAction::triggered, [] { ICore::showOptionsDialog(DEBUGGER_COMMON_SETTINGS_ID); }); m_perspective.useSubPerspectiveSwitcher(EngineManager::engineChooser()); @@ -2047,7 +2047,7 @@ SavedAction *DebuggerPluginPrivate::action(int code) QWidget *DebuggerPluginPrivate::addSearch(BaseTreeView *treeView) { - QAction *act = action(UseAlternatingRowColors); + QAction *act = action(UseAlternatingRowColors)->action(); treeView->setAlternatingRowColors(act->isChecked()); treeView->setProperty(PerspectiveState::savesHeaderKey(), true); connect(act, &QAction::toggled, treeView, &BaseTreeView::setAlternatingRowColors); diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index 2c33bb21378..e538aa65056 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -135,7 +135,7 @@ GdbEngine::GdbEngine() connect(action(AutoDerefPointers), &SavedAction::valueChanged, this, &GdbEngine::reloadLocals); - connect(action(CreateFullBacktrace), &QAction::triggered, + connect(action(CreateFullBacktrace)->action(), &QAction::triggered, this, &GdbEngine::createFullBacktrace); connect(action(UseDebuggingHelpers), &SavedAction::valueChanged, this, &GdbEngine::reloadLocals); diff --git a/src/plugins/debugger/lldb/lldbengine.cpp b/src/plugins/debugger/lldb/lldbengine.cpp index f7026b2815f..c6051e045eb 100644 --- a/src/plugins/debugger/lldb/lldbengine.cpp +++ b/src/plugins/debugger/lldb/lldbengine.cpp @@ -89,7 +89,7 @@ LldbEngine::LldbEngine() connect(action(AutoDerefPointers), &SavedAction::valueChanged, this, &LldbEngine::updateLocals); - connect(action(CreateFullBacktrace), &QAction::triggered, + connect(action(CreateFullBacktrace)->action(), &QAction::triggered, this, &LldbEngine::fetchFullBacktrace); connect(action(UseDebuggingHelpers), &SavedAction::valueChanged, this, &LldbEngine::updateLocals); diff --git a/src/plugins/debugger/logwindow.cpp b/src/plugins/debugger/logwindow.cpp index 37b5ed7c934..c30401902f3 100644 --- a/src/plugins/debugger/logwindow.cpp +++ b/src/plugins/debugger/logwindow.cpp @@ -220,10 +220,10 @@ public: QMenu *menu = createStandardContextMenu(); menu->addAction(m_clearContentsAction); menu->addAction(m_saveContentsAction); // X11 clipboard is unreliable for long texts - menu->addAction(action(LogTimeStamps)); + menu->addAction(action(LogTimeStamps)->action()); menu->addAction(m_reloadDebuggingHelpersAction); menu->addSeparator(); - menu->addAction(action(SettingsDialog)); + menu->addAction(action(SettingsDialog)->action()); menu->exec(ev->globalPos()); delete menu; } diff --git a/src/plugins/debugger/moduleshandler.cpp b/src/plugins/debugger/moduleshandler.cpp index 333f792245e..878ae20f57d 100644 --- a/src/plugins/debugger/moduleshandler.cpp +++ b/src/plugins/debugger/moduleshandler.cpp @@ -224,7 +224,7 @@ bool ModulesModel::contextMenuEvent(const ItemViewEvent &ev) [this, modulePath] { engine->requestModuleSections(modulePath); }); Internal::addHideColumnActions(menu, ev.view()); - menu->addAction(action(SettingsDialog)); + menu->addAction(action(SettingsDialog)->action()); menu->popup(ev.globalPos()); return true; diff --git a/src/plugins/debugger/peripheralregisterhandler.cpp b/src/plugins/debugger/peripheralregisterhandler.cpp index 965495cf022..2642f2dc9b2 100644 --- a/src/plugins/debugger/peripheralregisterhandler.cpp +++ b/src/plugins/debugger/peripheralregisterhandler.cpp @@ -787,7 +787,7 @@ bool PeripheralRegisterHandler::contextMenuEvent(const ItemViewEvent &ev) } Internal::addHideColumnActions(menu, ev.view()); - menu->addAction(action(SettingsDialog)); + menu->addAction(action(SettingsDialog)->action()); menu->popup(ev.globalPos()); return true; } diff --git a/src/plugins/debugger/qml/qmlinspectoragent.cpp b/src/plugins/debugger/qml/qmlinspectoragent.cpp index 35656bef0bd..2e8ee545637 100644 --- a/src/plugins/debugger/qml/qmlinspectoragent.cpp +++ b/src/plugins/debugger/qml/qmlinspectoragent.cpp @@ -68,7 +68,7 @@ QmlInspectorAgent::QmlInspectorAgent(QmlEngine *engine, QmlDebugConnection *conn : m_qmlEngine(engine) , m_inspectorToolsContext("Debugger.QmlInspector") , m_selectAction(new QAction(this)) - , m_showAppOnTopAction(action(ShowAppOnTop)) + , m_showAppOnTopAction(action(ShowAppOnTop)->action()) { m_debugIdToIname.insert(WatchItem::InvalidId, "inspect"); connect(action(ShowQmlObjectTree), diff --git a/src/plugins/debugger/registerhandler.cpp b/src/plugins/debugger/registerhandler.cpp index 0553efd82a1..3f5a4b7984f 100644 --- a/src/plugins/debugger/registerhandler.cpp +++ b/src/plugins/debugger/registerhandler.cpp @@ -757,7 +757,7 @@ bool RegisterHandler::contextMenuEvent(const ItemViewEvent &ev) addFormatAction(tr("Binary"), BinaryFormat); Internal::addHideColumnActions(menu, ev.view()); - menu->addAction(action(SettingsDialog)); + menu->addAction(action(SettingsDialog)->action()); menu->popup(ev.globalPos()); return true; } diff --git a/src/plugins/debugger/sourcefileshandler.cpp b/src/plugins/debugger/sourcefileshandler.cpp index c384b8b9e10..badf3701755 100644 --- a/src/plugins/debugger/sourcefileshandler.cpp +++ b/src/plugins/debugger/sourcefileshandler.cpp @@ -138,7 +138,7 @@ bool SourceFilesHandler::setData(const QModelIndex &idx, const QVariant &data, i [this, name] { m_engine->gotoLocation(FilePath::fromString(name)); }); Internal::addHideColumnActions(menu, ev.view()); - menu->addAction(action(SettingsDialog)); + menu->addAction(action(SettingsDialog)->action()); menu->popup(ev.globalPos()); return true; } diff --git a/src/plugins/debugger/stackhandler.cpp b/src/plugins/debugger/stackhandler.cpp index d1af61e2c73..78da176ceff 100644 --- a/src/plugins/debugger/stackhandler.cpp +++ b/src/plugins/debugger/stackhandler.cpp @@ -70,10 +70,10 @@ StackHandler::StackHandler(DebuggerEngine *engine) setObjectName("StackModel"); setHeader({tr("Level"), tr("Function"), tr("File"), tr("Line"), tr("Address") }); - connect(action(ExpandStack), &QAction::triggered, - this, &StackHandler::reloadFullStack); - connect(action(MaximalStackDepth), &QAction::triggered, - this, &StackHandler::reloadFullStack); + connect(action(ExpandStack)->action(), &QAction::triggered, + this, &StackHandler::reloadFullStack); + connect(action(MaximalStackDepth)->action(), &QAction::triggered, + this, &StackHandler::reloadFullStack); // For now there's always only "the" current thread. rootItem()->appendChild(new ThreadDummyItem); @@ -390,13 +390,13 @@ bool StackHandler::contextMenuEvent(const ItemViewEvent &ev) frame = frameAt(row); const quint64 address = frame.address; - menu->addAction(action(ExpandStack)); + menu->addAction(action(ExpandStack)->action()); addAction(menu, tr("Copy Contents to Clipboard"), true, [this] { copyContentsToClipboard(); }); addAction(menu, tr("Save as Task File..."), true, [this] { saveTaskFile(); }); if (m_engine->hasCapability(CreateFullBacktraceCapability)) - menu->addAction(action(CreateFullBacktrace)); + menu->addAction(action(CreateFullBacktrace)->action()); if (m_engine->hasCapability(AdditionalQmlStackCapability)) addAction(menu, tr("Load QML Stack"), true, [this] { m_engine->loadAdditionalQmlStack(); }); @@ -444,9 +444,9 @@ bool StackHandler::contextMenuEvent(const ItemViewEvent &ev) } menu->addSeparator(); - menu->addAction(action(UseToolTipsInStackView)); + menu->addAction(action(UseToolTipsInStackView)->action()); Internal::addHideColumnActions(menu, ev.view()); - menu->addAction(action(SettingsDialog)); + menu->addAction(action(SettingsDialog)->action()); menu->popup(ev.globalPos()); return true; } diff --git a/src/plugins/debugger/threadshandler.cpp b/src/plugins/debugger/threadshandler.cpp index c63a6d5469b..011ceb0d7d6 100644 --- a/src/plugins/debugger/threadshandler.cpp +++ b/src/plugins/debugger/threadshandler.cpp @@ -259,7 +259,7 @@ bool ThreadsHandler::setData(const QModelIndex &idx, const QVariant &data, int r if (ev.as()) { auto menu = new QMenu; Internal::addHideColumnActions(menu, ev.view()); - menu->addAction(action(SettingsDialog)); + menu->addAction(action(SettingsDialog)->action()); menu->popup(ev.globalPos()); return true; } diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp index 193842ed97a..65b8abd69c9 100644 --- a/src/plugins/debugger/watchhandler.cpp +++ b/src/plugins/debugger/watchhandler.cpp @@ -1738,15 +1738,15 @@ bool WatchModel::contextMenuEvent(const ItemViewEvent &ev) menu->addSeparator(); - menu->addAction(action(UseDebuggingHelpers)); - menu->addAction(action(UseToolTipsInLocalsView)); - menu->addAction(action(AutoDerefPointers)); - menu->addAction(action(SortStructMembers)); - menu->addAction(action(UseDynamicType)); - menu->addAction(action(SettingsDialog)); + menu->addAction(action(UseDebuggingHelpers)->action()); + menu->addAction(action(UseToolTipsInLocalsView)->action()); + menu->addAction(action(AutoDerefPointers)->action()); + menu->addAction(action(SortStructMembers)->action()); + menu->addAction(action(UseDynamicType)->action()); + menu->addAction(action(SettingsDialog)->action()); Internal::addHideColumnActions(menu, ev.view()); - menu->addAction(action(SettingsDialog)); + menu->addAction(action(SettingsDialog)->action()); connect(menu, &QMenu::aboutToHide, menu, &QObject::deleteLater); menu->popup(ev.globalPos()); return true; diff --git a/src/plugins/debugger/watchwindow.cpp b/src/plugins/debugger/watchwindow.cpp index 9da95b351e9..d7af82b05b3 100644 --- a/src/plugins/debugger/watchwindow.cpp +++ b/src/plugins/debugger/watchwindow.cpp @@ -54,7 +54,7 @@ WatchTreeView::WatchTreeView(WatchType type) connect(this, &QTreeView::expanded, this, &WatchTreeView::expandNode); connect(this, &QTreeView::collapsed, this, &WatchTreeView::collapseNode); - connect(action(LogTimeStamps), &QAction::triggered, + connect(action(LogTimeStamps)->action(), &QAction::triggered, this, &WatchTreeView::updateTimeColumn); } diff --git a/src/plugins/fakevim/fakevimplugin.cpp b/src/plugins/fakevim/fakevimplugin.cpp index cd3509b45ed..aa0976c5242 100644 --- a/src/plugins/fakevim/fakevimplugin.cpp +++ b/src/plugins/fakevim/fakevimplugin.cpp @@ -1194,7 +1194,7 @@ bool FakeVimPluginPrivate::initialize() readSettings(); Command *cmd = nullptr; - cmd = ActionManager::registerAction(theFakeVimSetting(ConfigUseFakeVim), + cmd = ActionManager::registerAction(theFakeVimSetting(ConfigUseFakeVim)->action(), INSTALL_HANDLER, Context(Core::Constants::C_GLOBAL), true); cmd->setDefaultKeySequence(QKeySequence(useMacShortcuts ? Tr::tr("Meta+Shift+V,Meta+Shift+V") : Tr::tr("Alt+V,Alt+V"))); diff --git a/src/plugins/ios/iosbuildstep.cpp b/src/plugins/ios/iosbuildstep.cpp index dc7c99cf8f7..7a54226e068 100644 --- a/src/plugins/ios/iosbuildstep.cpp +++ b/src/plugins/ios/iosbuildstep.cpp @@ -69,7 +69,7 @@ public: IosBuildStep(BuildStepList *stepList, Utils::Id id); private: - BuildStepConfigWidget *createConfigWidget() final; + QWidget *createConfigWidget() final; void setBaseArguments(const QStringList &args); void setExtraArguments(const QStringList &extraArgs); QStringList baseArguments() const; @@ -88,9 +88,9 @@ private: bool m_useDefaultArguments = true; }; -BuildStepConfigWidget *IosBuildStep::createConfigWidget() +QWidget *IosBuildStep::createConfigWidget() { - auto widget = new BuildStepConfigWidget(this); + auto widget = new QWidget; auto buildArgumentsLabel = new QLabel(tr("Base arguments:"), widget); diff --git a/src/plugins/ios/iosdeploystep.cpp b/src/plugins/ios/iosdeploystep.cpp index 3d0fa542b54..0d24378a5af 100644 --- a/src/plugins/ios/iosdeploystep.cpp +++ b/src/plugins/ios/iosdeploystep.cpp @@ -83,7 +83,7 @@ private: void updateDisplayNames(); bool init() final; - BuildStepConfigWidget *createConfigWidget() final; + QWidget *createConfigWidget() final; IDevice::ConstPtr device() const; IosDevice::ConstPtr iosdevice() const; IosSimulator::ConstPtr iossimulator() const; @@ -230,9 +230,9 @@ void IosDeployStep::handleErrorMsg(IosToolHandler *handler, const QString &msg) emit addOutput(msg, OutputFormat::ErrorMessage); } -BuildStepConfigWidget *IosDeployStep::createConfigWidget() +QWidget *IosDeployStep::createConfigWidget() { - auto widget = new BuildStepConfigWidget(this); + auto widget = new QWidget; widget->setObjectName("IosDeployStepWidget"); setDisplayName(QString("%1").arg(displayName())); diff --git a/src/plugins/ios/iosdsymbuildstep.cpp b/src/plugins/ios/iosdsymbuildstep.cpp index b44388d34b3..25a538665dd 100644 --- a/src/plugins/ios/iosdsymbuildstep.cpp +++ b/src/plugins/ios/iosdsymbuildstep.cpp @@ -203,9 +203,9 @@ QStringList IosDsymBuildStep::arguments() const } -BuildStepConfigWidget *IosDsymBuildStep::createConfigWidget() +QWidget *IosDsymBuildStep::createConfigWidget() { - auto widget = new BuildStepConfigWidget(this); + auto widget = new QWidget; auto commandLabel = new QLabel(tr("Command:"), widget); diff --git a/src/plugins/ios/iosdsymbuildstep.h b/src/plugins/ios/iosdsymbuildstep.h index 17def1eaa5d..2a92a0187cf 100644 --- a/src/plugins/ios/iosdsymbuildstep.h +++ b/src/plugins/ios/iosdsymbuildstep.h @@ -39,7 +39,7 @@ class IosDsymBuildStep : public ProjectExplorer::AbstractProcessStep public: IosDsymBuildStep(ProjectExplorer::BuildStepList *parent, Utils::Id id); - ProjectExplorer::BuildStepConfigWidget *createConfigWidget() override; + QWidget *createConfigWidget() override; void setArguments(const QStringList &args); QStringList arguments() const; QStringList defaultArguments() const; diff --git a/src/plugins/mesonprojectmanager/project/ninjabuildstep.cpp b/src/plugins/mesonprojectmanager/project/ninjabuildstep.cpp index c353b45cfdd..931d7de2797 100644 --- a/src/plugins/mesonprojectmanager/project/ninjabuildstep.cpp +++ b/src/plugins/mesonprojectmanager/project/ninjabuildstep.cpp @@ -70,9 +70,9 @@ NinjaBuildStep::NinjaBuildStep(ProjectExplorer::BuildStepList *bsl, Utils::Id id &NinjaBuildStep::commandChanged); } -BuildStepConfigWidget *NinjaBuildStep::createConfigWidget() +QWidget *NinjaBuildStep::createConfigWidget() { - auto widget = new BuildStepConfigWidget{this}; + auto widget = new QWidget; setDisplayName(tr("Build", "MesonProjectManager::MesonBuildStepConfigWidget display name.")); auto buildTargetsList = new QListWidget(widget); diff --git a/src/plugins/mesonprojectmanager/project/ninjabuildstep.h b/src/plugins/mesonprojectmanager/project/ninjabuildstep.h index a112a6d6bb2..f9a41fcf856 100644 --- a/src/plugins/mesonprojectmanager/project/ninjabuildstep.h +++ b/src/plugins/mesonprojectmanager/project/ninjabuildstep.h @@ -38,7 +38,7 @@ class NinjaBuildStep final : public ProjectExplorer::AbstractProcessStep public: NinjaBuildStep(ProjectExplorer::BuildStepList *bsl, Utils::Id id); - ProjectExplorer::BuildStepConfigWidget *createConfigWidget() final; + QWidget *createConfigWidget() final; Utils::CommandLine command(); QStringList projectTargets(); void setBuildTarget(const QString &targetName); diff --git a/src/plugins/nim/project/nimbletaskstep.cpp b/src/plugins/nim/project/nimbletaskstep.cpp index 9f347bcb716..1cb0505089a 100644 --- a/src/plugins/nim/project/nimbletaskstep.cpp +++ b/src/plugins/nim/project/nimbletaskstep.cpp @@ -60,7 +60,7 @@ public: NimbleTaskStep(BuildStepList *parentList, Id id); private: - BuildStepConfigWidget *createConfigWidget() final; + QWidget *createConfigWidget() final; void setTaskName(const QString &name); @@ -100,9 +100,9 @@ NimbleTaskStep::NimbleTaskStep(BuildStepList *parentList, Id id) m_taskArgs->setLabelText(tr("Task arguments:")); } -BuildStepConfigWidget *NimbleTaskStep::createConfigWidget() +QWidget *NimbleTaskStep::createConfigWidget() { - auto widget = new BuildStepConfigWidget(this); + auto widget = new QWidget; auto taskList = new QListView(widget); taskList->setFrameShape(QFrame::StyledPanel); diff --git a/src/plugins/nim/project/nimcompilerbuildstep.cpp b/src/plugins/nim/project/nimcompilerbuildstep.cpp index 940a1c9cd78..c956186bf29 100644 --- a/src/plugins/nim/project/nimcompilerbuildstep.cpp +++ b/src/plugins/nim/project/nimcompilerbuildstep.cpp @@ -107,9 +107,9 @@ void NimCompilerBuildStep::setupOutputFormatter(OutputFormatter *formatter) AbstractProcessStep::setupOutputFormatter(formatter); } -BuildStepConfigWidget *NimCompilerBuildStep::createConfigWidget() +QWidget *NimCompilerBuildStep::createConfigWidget() { - auto widget = new BuildStepConfigWidget(this); + auto widget = new QWidget; setDisplayName(tr("Nim build step")); setSummaryText(tr("Nim build step")); diff --git a/src/plugins/nim/project/nimcompilerbuildstep.h b/src/plugins/nim/project/nimcompilerbuildstep.h index e548790d804..398792522bc 100644 --- a/src/plugins/nim/project/nimcompilerbuildstep.h +++ b/src/plugins/nim/project/nimcompilerbuildstep.h @@ -46,7 +46,7 @@ public: private: void setupOutputFormatter(Utils::OutputFormatter *formatter) override; - ProjectExplorer::BuildStepConfigWidget *createConfigWidget() override; + QWidget *createConfigWidget() override; bool fromMap(const QVariantMap &map) override; QVariantMap toMap() const override; diff --git a/src/plugins/projectexplorer/buildstep.cpp b/src/plugins/projectexplorer/buildstep.cpp index bac71d4766f..d5aaf6ea783 100644 --- a/src/plugins/projectexplorer/buildstep.cpp +++ b/src/plugins/projectexplorer/buildstep.cpp @@ -157,17 +157,15 @@ void BuildStep::cancel() doCancel(); } -BuildStepConfigWidget *BuildStep::createConfigWidget() +QWidget *BuildStep::createConfigWidget() { - auto widget = new BuildStepConfigWidget(this); + auto widget = new QWidget; - { - LayoutBuilder builder(widget); - for (BaseAspect *aspect : qAsConst(m_aspects)) { - if (aspect->isVisible()) - aspect->addToLayout(builder.finishRow()); - connect(aspect, &BaseAspect::changed, this, &BuildStep::recreateSummary); - } + LayoutBuilder builder(widget); + for (BaseAspect *aspect : qAsConst(m_aspects)) { + if (aspect->isVisible()) + aspect->addToLayout(builder.finishRow()); + connect(aspect, &BaseAspect::changed, this, &BuildStep::recreateSummary); } connect(buildConfiguration(), &BuildConfiguration::buildDirectoryChanged, @@ -483,10 +481,6 @@ BuildStep *BuildStepFactory::restore(BuildStepList *parent, const QVariantMap &m return bs; } -BuildStepConfigWidget::BuildStepConfigWidget(BuildStep *) -{ -} - QString BuildStep::summaryText() const { if (m_summaryText.isEmpty()) diff --git a/src/plugins/projectexplorer/buildstep.h b/src/plugins/projectexplorer/buildstep.h index 4dc5f856001..6fda3e7b035 100644 --- a/src/plugins/projectexplorer/buildstep.h +++ b/src/plugins/projectexplorer/buildstep.h @@ -50,12 +50,10 @@ class OutputFormatter; namespace ProjectExplorer { class BuildConfiguration; -class BuildStepConfigWidget; class BuildStepFactory; class BuildStepList; class BuildSystem; class DeployConfiguration; -class Target; class Task; // Documentation inside. @@ -72,7 +70,7 @@ public: virtual bool init() = 0; void run(); void cancel(); - virtual BuildStepConfigWidget *createConfigWidget(); + virtual QWidget *createConfigWidget(); bool fromMap(const QVariantMap &map) override; QVariantMap toMap() const override; @@ -231,13 +229,6 @@ private: bool m_isRepeatable = true; }; -class PROJECTEXPLORER_EXPORT BuildStepConfigWidget : public QWidget -{ - Q_OBJECT -public: - explicit BuildStepConfigWidget(BuildStep *step); -}; - } // namespace ProjectExplorer Q_DECLARE_METATYPE(ProjectExplorer::BuildStep::OutputFormat) diff --git a/src/plugins/projectexplorer/buildstepspage.h b/src/plugins/projectexplorer/buildstepspage.h index 2a94895176c..0f8ee879ec0 100644 --- a/src/plugins/projectexplorer/buildstepspage.h +++ b/src/plugins/projectexplorer/buildstepspage.h @@ -82,7 +82,7 @@ public: ~BuildStepsWidgetData(); BuildStep *step; - BuildStepConfigWidget *widget; + QWidget *widget; Utils::DetailsWidget *detailsWidget; ToolWidget *toolWidget; }; diff --git a/src/plugins/projectexplorer/makestep.cpp b/src/plugins/projectexplorer/makestep.cpp index 1818b7f3902..86c1fe74a82 100644 --- a/src/plugins/projectexplorer/makestep.cpp +++ b/src/plugins/projectexplorer/makestep.cpp @@ -342,9 +342,9 @@ CommandLine MakeStep::effectiveMakeCommand(MakeCommandType type) const return cmd; } -BuildStepConfigWidget *MakeStep::createConfigWidget() +QWidget *MakeStep::createConfigWidget() { - auto widget = new BuildStepConfigWidget(this); + auto widget = new QWidget; auto targetsLabel = new QLabel(widget); targetsLabel->setText(tr("Targets:")); diff --git a/src/plugins/projectexplorer/makestep.h b/src/plugins/projectexplorer/makestep.h index 9db7b571175..690b3415f58 100644 --- a/src/plugins/projectexplorer/makestep.h +++ b/src/plugins/projectexplorer/makestep.h @@ -34,8 +34,6 @@ namespace Utils { class Environment; } namespace ProjectExplorer { -namespace Internal { class MakeStepConfigWidget; } - class PROJECTEXPLORER_EXPORT MakeStep : public ProjectExplorer::AbstractProcessStep { Q_OBJECT @@ -52,7 +50,7 @@ public: bool init() override; void setupOutputFormatter(Utils::OutputFormatter *formatter) override; - ProjectExplorer::BuildStepConfigWidget *createConfigWidget() override; + QWidget *createConfigWidget() override; bool buildsTarget(const QString &target) const; void setBuildTarget(const QString &target, bool on); QStringList availableTargets() const; @@ -86,8 +84,6 @@ protected: virtual QStringList displayArguments() const; private: - friend class Internal::MakeStepConfigWidget; - static int defaultJobCount(); QStringList jobArguments() const; diff --git a/src/plugins/projectexplorer/processparameters.cpp b/src/plugins/projectexplorer/processparameters.cpp index 58f54c6bffa..9f5047e57e2 100644 --- a/src/plugins/projectexplorer/processparameters.cpp +++ b/src/plugins/projectexplorer/processparameters.cpp @@ -49,11 +49,7 @@ using namespace Utils; namespace ProjectExplorer { -ProcessParameters::ProcessParameters() : - m_macroExpander(nullptr), - m_commandMissing(false) -{ -} +ProcessParameters::ProcessParameters() = default; /*! Sets the command to run. @@ -68,7 +64,6 @@ void ProcessParameters::setCommandLine(const CommandLine &cmdLine) effectiveArguments(); } - /*! Sets the \a workingDirectory for the process for a build configuration. @@ -159,17 +154,17 @@ QString ProcessParameters::prettyCommand() const QString cmd = m_command.executable().toString(); if (m_macroExpander) cmd = m_macroExpander->expand(cmd); - return Utils::FilePath::fromString(cmd).fileName(); + return FilePath::fromString(cmd).fileName(); } QString ProcessParameters::prettyArguments() const { QString margs = effectiveArguments(); QString workDir = effectiveWorkingDirectory().toString(); - Utils::QtcProcess::SplitError err; - Utils::QtcProcess::Arguments args = - Utils::QtcProcess::prepareArgs(margs, &err, Utils::HostOsInfo::hostOs(), &m_environment, &workDir); - if (err != Utils::QtcProcess::SplitOk) + QtcProcess::SplitError err; + QtcProcess::Arguments args = + QtcProcess::prepareArgs(margs, &err, HostOsInfo::hostOs(), &m_environment, &workDir); + if (err != QtcProcess::SplitOk) return margs; // Sorry, too complex - just fall back. return args.toString(); } @@ -189,7 +184,7 @@ QString ProcessParameters::summary(const QString &displayName) const return QString::fromLatin1("%1: %2 %3") .arg(displayName, - Utils::QtcProcess::quoteArg(prettyCommand()), + QtcProcess::quoteArg(prettyCommand()), prettyArguments()); } @@ -200,7 +195,7 @@ QString ProcessParameters::summaryInWorkdir(const QString &displayName) const return QString::fromLatin1("%1: %2 %3 in %4") .arg(displayName, - Utils::QtcProcess::quoteArg(prettyCommand()), + QtcProcess::quoteArg(prettyCommand()), prettyArguments(), QDir::toNativeSeparators(effectiveWorkingDirectory().toString())); } diff --git a/src/plugins/projectexplorer/processparameters.h b/src/plugins/projectexplorer/processparameters.h index e574566617a..94d1bd88839 100644 --- a/src/plugins/projectexplorer/processparameters.h +++ b/src/plugins/projectexplorer/processparameters.h @@ -73,12 +73,12 @@ private: Utils::FilePath m_workingDirectory; Utils::CommandLine m_command; Utils::Environment m_environment; - Utils::MacroExpander *m_macroExpander; + Utils::MacroExpander *m_macroExpander = nullptr; mutable Utils::FilePath m_effectiveWorkingDirectory; mutable Utils::FilePath m_effectiveCommand; mutable QString m_effectiveArguments; - mutable bool m_commandMissing; + mutable bool m_commandMissing = false; }; } // namespace ProjectExplorer diff --git a/src/plugins/qbsprojectmanager/qbsbuildstep.cpp b/src/plugins/qbsprojectmanager/qbsbuildstep.cpp index 70e9c420bfa..b5830a362c2 100644 --- a/src/plugins/qbsprojectmanager/qbsbuildstep.cpp +++ b/src/plugins/qbsprojectmanager/qbsbuildstep.cpp @@ -72,7 +72,7 @@ using namespace Utils; namespace QbsProjectManager { namespace Internal { -class QbsBuildStepConfigWidget : public ProjectExplorer::BuildStepConfigWidget +class QbsBuildStepConfigWidget : public QWidget { Q_OBJECT public: @@ -191,7 +191,7 @@ void QbsBuildStep::doRun() parseProject(); } -ProjectExplorer::BuildStepConfigWidget *QbsBuildStep::createConfigWidget() +QWidget *QbsBuildStep::createConfigWidget() { return new QbsBuildStepConfigWidget(this); } @@ -544,7 +544,6 @@ void QbsBuildStep::dropSession() // -------------------------------------------------------------------- QbsBuildStepConfigWidget::QbsBuildStepConfigWidget(QbsBuildStep *step) : - BuildStepConfigWidget(step), m_qbsStep(step), m_ignoreChange(false) { diff --git a/src/plugins/qbsprojectmanager/qbsbuildstep.h b/src/plugins/qbsprojectmanager/qbsbuildstep.h index cdb0f94b1dc..b70af720b69 100644 --- a/src/plugins/qbsprojectmanager/qbsbuildstep.h +++ b/src/plugins/qbsprojectmanager/qbsbuildstep.h @@ -83,7 +83,7 @@ private: void setupOutputFormatter(Utils::OutputFormatter *formatter) override; void doRun() override; void doCancel() override; - ProjectExplorer::BuildStepConfigWidget *createConfigWidget() override; + QWidget *createConfigWidget() override; bool fromMap(const QVariantMap &map) override; QVariantMap toMap() const override; diff --git a/src/plugins/qbsprojectmanager/qbsinstallstep.cpp b/src/plugins/qbsprojectmanager/qbsinstallstep.cpp index 925b6edea4b..19cf5c76f49 100644 --- a/src/plugins/qbsprojectmanager/qbsinstallstep.cpp +++ b/src/plugins/qbsprojectmanager/qbsinstallstep.cpp @@ -179,9 +179,9 @@ QbsBuildStepData QbsInstallStep::stepData() const return data; } -BuildStepConfigWidget *QbsInstallStep::createConfigWidget() +QWidget *QbsInstallStep::createConfigWidget() { - auto widget = new BuildStepConfigWidget(this); + auto widget = new QWidget; auto installRootValueLabel = new QLabel(installRoot()); diff --git a/src/plugins/qbsprojectmanager/qbsinstallstep.h b/src/plugins/qbsprojectmanager/qbsinstallstep.h index 5ef48876e3a..537b7053e63 100644 --- a/src/plugins/qbsprojectmanager/qbsinstallstep.h +++ b/src/plugins/qbsprojectmanager/qbsinstallstep.h @@ -54,7 +54,7 @@ private: bool init() override; void doRun() override; void doCancel() override; - ProjectExplorer::BuildStepConfigWidget *createConfigWidget() override; + QWidget *createConfigWidget() override; const QbsBuildConfiguration *buildConfig() const; void installDone(const ErrorInfo &error); diff --git a/src/plugins/qmakeprojectmanager/profilecompletionassist.cpp b/src/plugins/qmakeprojectmanager/profilecompletionassist.cpp index ec405f67f7c..c070f2aea6e 100644 --- a/src/plugins/qmakeprojectmanager/profilecompletionassist.cpp +++ b/src/plugins/qmakeprojectmanager/profilecompletionassist.cpp @@ -31,6 +31,23 @@ const TextEditor::Keywords &QmakeProjectManager::Internal::qmakeKeywords() { static TextEditor::Keywords keywords( QStringList{ // variables + "ANDROID_ABIS", + "ANDROID_API_VERSION", + "ANDROID_APPLICATION_ARGUMENTS", + "ANDROID_BUNDLED_JAR_DEPENDENCIES", + "ANDROID_DEPLOYMENT_DEPENDENCIES", + "ANDROID_DEPLOYMENT_SETTINGS_FILE", + "ANDROID_EXTRA_LIBS", + "ANDROID_EXTRA_PLUGINS", + "ANDROID_FEATURES", + "ANDROID_LIB_DEPENDENCIES", + "ANDROID_MIN_SDK_VERSION", + "ANDROID_PACKAGE_SOURCE_DIR", + "ANDROID_PERMISSIONS", + "ANDROID_TARGET_SDK_VERSION", + "ANDROID_TARGET_ARCH", + "ANDROID_VERSION_CODE", + "ANDROID_VERSION_NAME", "ARGC", "ARGS", "BUILDS", diff --git a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp index f8d2151ea28..3a564fd20ba 100644 --- a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp @@ -233,6 +233,7 @@ QmakePriFile::~QmakePriFile() void QmakePriFile::scheduleUpdate() { + QTC_ASSERT(m_buildSystem, return); QtSupport::ProFileCacheManager::instance()->discardFile( filePath().toString(), m_buildSystem->qmakeVfs()); m_qmakeProFile->scheduleUpdate(QmakeProFile::ParseLater); diff --git a/src/plugins/qmakeprojectmanager/qmakestep.cpp b/src/plugins/qmakeprojectmanager/qmakestep.cpp index 62c3dffc119..e352d68b564 100644 --- a/src/plugins/qmakeprojectmanager/qmakestep.cpp +++ b/src/plugins/qmakeprojectmanager/qmakestep.cpp @@ -502,9 +502,9 @@ bool QMakeStep::fromMap(const QVariantMap &map) return BuildStep::fromMap(map); } -BuildStepConfigWidget *QMakeStep::createConfigWidget() +QWidget *QMakeStep::createConfigWidget() { - auto widget = new BuildStepConfigWidget(this); + auto widget = new QWidget; auto label_0 = new QLabel(tr("qmake build configuration:"), widget); diff --git a/src/plugins/qmakeprojectmanager/qmakestep.h b/src/plugins/qmakeprojectmanager/qmakestep.h index 711cde4309b..319d035b056 100644 --- a/src/plugins/qmakeprojectmanager/qmakestep.h +++ b/src/plugins/qmakeprojectmanager/qmakestep.h @@ -122,7 +122,7 @@ public: bool init() override; void setupOutputFormatter(Utils::OutputFormatter *formatter) override; void doRun() override; - ProjectExplorer::BuildStepConfigWidget *createConfigWidget() override; + QWidget *createConfigWidget() override; void setForced(bool b); enum class ArgumentFlag { diff --git a/src/plugins/qmldesigner/components/connectioneditor/bindingmodel.cpp b/src/plugins/qmldesigner/components/connectioneditor/bindingmodel.cpp index 55220d123b1..0470798aeca 100644 --- a/src/plugins/qmldesigner/components/connectioneditor/bindingmodel.cpp +++ b/src/plugins/qmldesigner/components/connectioneditor/bindingmodel.cpp @@ -53,11 +53,13 @@ void BindingModel::resetModel() { beginResetModel(); clear(); - setHorizontalHeaderLabels(QStringList({ tr("Item"), tr("Property"), tr("Source Item"), - tr("Source Property") })); + setHorizontalHeaderLabels( + QStringList({tr("Item"), tr("Property"), tr("Source Item"), tr("Source Property")})); - foreach (const ModelNode modelNode, m_selectedModelNodes) - addModelNode(modelNode); + if (connectionView()->isAttached()) { + for (const ModelNode modelNode : connectionView()->selectedModelNodes()) + addModelNode(modelNode); + } endResetModel(); } @@ -100,7 +102,6 @@ void BindingModel::bindingRemoved(const BindingProperty &bindingProperty) void BindingModel::selectionChanged(const QList &selectedNodes) { m_handleDataChanged = false; - m_selectedModelNodes = selectedNodes; resetModel(); m_handleDataChanged = true; } diff --git a/src/plugins/qmldesigner/components/connectioneditor/bindingmodel.h b/src/plugins/qmldesigner/components/connectioneditor/bindingmodel.h index 480ba254ad6..79e46a9a431 100644 --- a/src/plugins/qmldesigner/components/connectioneditor/bindingmodel.h +++ b/src/plugins/qmldesigner/components/connectioneditor/bindingmodel.h @@ -80,7 +80,6 @@ private: void handleException(); private: - QList m_selectedModelNodes; ConnectionView *m_connectionView; bool m_lock = false; bool m_handleDataChanged = false; diff --git a/src/plugins/qmldesigner/components/connectioneditor/dynamicpropertiesmodel.cpp b/src/plugins/qmldesigner/components/connectioneditor/dynamicpropertiesmodel.cpp index 5af183e6b11..51f5722df28 100644 --- a/src/plugins/qmldesigner/components/connectioneditor/dynamicpropertiesmodel.cpp +++ b/src/plugins/qmldesigner/components/connectioneditor/dynamicpropertiesmodel.cpp @@ -128,11 +128,13 @@ void DynamicPropertiesModel::resetModel() { beginResetModel(); clear(); - setHorizontalHeaderLabels(QStringList({ tr("Item"), tr("Property"), tr("Property Type"), - tr("Property Value") })); + setHorizontalHeaderLabels( + QStringList({tr("Item"), tr("Property"), tr("Property Type"), tr("Property Value")})); - foreach (const ModelNode modelNode, m_selectedModelNodes) - addModelNode(modelNode); + if (connectionView()->isAttached()) { + for (const ModelNode modelNode : connectionView()->selectedModelNodes()) + addModelNode(modelNode); + } endResetModel(); } @@ -279,7 +281,6 @@ void DynamicPropertiesModel::bindingRemoved(const BindingProperty &bindingProper void DynamicPropertiesModel::selectionChanged(const QList &selectedNodes) { m_handleDataChanged = false; - m_selectedModelNodes = selectedNodes; resetModel(); m_handleDataChanged = true; } diff --git a/src/plugins/qmldesigner/components/connectioneditor/dynamicpropertiesmodel.h b/src/plugins/qmldesigner/components/connectioneditor/dynamicpropertiesmodel.h index 1d71c1230e0..3b7d0cf4231 100644 --- a/src/plugins/qmldesigner/components/connectioneditor/dynamicpropertiesmodel.h +++ b/src/plugins/qmldesigner/components/connectioneditor/dynamicpropertiesmodel.h @@ -96,7 +96,6 @@ private: void handleException(); private: - QList m_selectedModelNodes; ConnectionView *m_connectionView; bool m_lock = false; bool m_handleDataChanged = false; diff --git a/src/plugins/qmldesigner/components/debugview/debugview.cpp b/src/plugins/qmldesigner/components/debugview/debugview.cpp index 61c6830b11c..159bdfaebb2 100644 --- a/src/plugins/qmldesigner/components/debugview/debugview.cpp +++ b/src/plugins/qmldesigner/components/debugview/debugview.cpp @@ -242,6 +242,18 @@ void DebugView::selectedNodesChanged(const QList &selectedNodes /*sel message << lineBreak; message << selectedNode.metaInfo().typeName(); message << lineBreak; + + message << "Node Source" << selectedNode.nodeSource(); + message << lineBreak; + + message << "Is Component" << selectedNode.isComponent(); + message << lineBreak; + + message << "Node Source Type" << selectedNode.nodeSourceType(); + message << lineBreak; + + message << lineBreak; + for (const PropertyName &name : selectedNode.metaInfo().slotNames()) message << name << " "; diff --git a/src/plugins/qmldesigner/designercore/include/abstractview.h b/src/plugins/qmldesigner/designercore/include/abstractview.h index 8ad5a3ba9ec..12cb4575717 100644 --- a/src/plugins/qmldesigner/designercore/include/abstractview.h +++ b/src/plugins/qmldesigner/designercore/include/abstractview.h @@ -154,7 +154,7 @@ public: bool hasSingleSelectedModelNode() const; bool isSelectedModelNode(const ModelNode &modelNode) const; - QList selectedModelNodes() const; + const QList selectedModelNodes() const; ModelNode firstSelectedModelNode() const; ModelNode singleSelectedModelNode() const; diff --git a/src/plugins/qmldesigner/designercore/model/abstractview.cpp b/src/plugins/qmldesigner/designercore/model/abstractview.cpp index 85e50b3c8cd..d7d512334d9 100644 --- a/src/plugins/qmldesigner/designercore/model/abstractview.cpp +++ b/src/plugins/qmldesigner/designercore/model/abstractview.cpp @@ -453,7 +453,7 @@ bool AbstractView::isSelectedModelNode(const ModelNode &modelNode) const Sets the list of nodes to the actual selected nodes. Returns a list of the selected nodes. */ -QList AbstractView::selectedModelNodes() const +const QList AbstractView::selectedModelNodes() const { return toModelNodeList(model()->d->selectedNodes()); } diff --git a/src/plugins/qmldesigner/designercore/model/qmlvisualnode.cpp b/src/plugins/qmldesigner/designercore/model/qmlvisualnode.cpp index 9a376bab64a..29fd0785b48 100644 --- a/src/plugins/qmldesigner/designercore/model/qmlvisualnode.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmlvisualnode.cpp @@ -213,11 +213,20 @@ QmlObjectNode QmlVisualNode::createQmlObjectNode(AbstractView *view, NodeHints hints = NodeHints::fromItemLibraryEntry(itemLibraryEntry); const PropertyName forceNonDefaultProperty = hints.forceNonDefaultProperty().toUtf8(); - QmlObjectNode newNode = QmlItemNode::createQmlObjectNode(view, itemLibraryEntry, position, parentProperty); + QmlObjectNode newNode = QmlItemNode::createQmlObjectNode(view, + itemLibraryEntry, + position, + parentProperty); if (!forceNonDefaultProperty.isEmpty()) { - if (parentQmlItemNode.modelNode().metaInfo().hasProperty(forceNonDefaultProperty)) + const NodeMetaInfo metaInfo = parentQmlItemNode.modelNode().metaInfo(); + if (metaInfo.hasProperty(forceNonDefaultProperty)) { + if (!metaInfo.propertyIsListProperty(forceNonDefaultProperty) + && parentQmlItemNode.modelNode().hasNodeProperty(forceNonDefaultProperty)) { + parentQmlItemNode.removeProperty(forceNonDefaultProperty); + } parentQmlItemNode.nodeListProperty(forceNonDefaultProperty).reparentHere(newNode); + } } return newNode; @@ -288,8 +297,18 @@ QmlObjectNode QmlVisualNode::createQmlObjectNode(AbstractView *view, newQmlObjectNode = createQmlObjectNodeFromSource(view, itemLibraryEntry.qmlSource(), position); } - if (parentProperty.isValid()) - parentProperty.reparentHere(newQmlObjectNode); + if (parentProperty.isValid()) { + const PropertyName propertyName = parentProperty.name(); + const ModelNode parentNode = parentProperty.parentModelNode(); + const NodeMetaInfo metaInfo = parentNode.metaInfo(); + + if (metaInfo.isValid() && !metaInfo.propertyIsListProperty(propertyName) + && parentProperty.isNodeProperty()) { + parentNode.removeProperty(propertyName); + } + + parentNode.nodeAbstractProperty(propertyName).reparentHere(newQmlObjectNode); + } if (!newQmlObjectNode.isValid()) return; diff --git a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp index 661af4781aa..61f8d5e0c3e 100644 --- a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp +++ b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp @@ -288,11 +288,8 @@ bool isListElementType(const QmlDesigner::TypeName &type) bool isComponentType(const QmlDesigner::TypeName &type) { - return type == "Component" - || type == "Qt.Component" - || type == "QtQuick.Component" - || type == ".QQmlComponent" - || type == "QQmlComponent"; + return type == "Component" || type == "Qt.Component" || type == "QtQuick.Component" + || type == "QtQml.Component" || type == ".QQmlComponent" || type == "QQmlComponent"; } bool isCustomParserType(const QmlDesigner::TypeName &type) diff --git a/src/plugins/remotelinux/makeinstallstep.cpp b/src/plugins/remotelinux/makeinstallstep.cpp index 4a93bd63780..91a2d5e8d89 100644 --- a/src/plugins/remotelinux/makeinstallstep.cpp +++ b/src/plugins/remotelinux/makeinstallstep.cpp @@ -120,8 +120,9 @@ QString MakeInstallStep::displayName() return tr("Install into temporary host directory"); } -BuildStepConfigWidget *MakeInstallStep::createConfigWidget() +QWidget *MakeInstallStep::createConfigWidget() { + // Note: this intentionally skips the MakeStep::createConfigWidget() level. return BuildStep::createConfigWidget(); } diff --git a/src/plugins/remotelinux/makeinstallstep.h b/src/plugins/remotelinux/makeinstallstep.h index e0685b8dca8..fd41291de8c 100644 --- a/src/plugins/remotelinux/makeinstallstep.h +++ b/src/plugins/remotelinux/makeinstallstep.h @@ -48,7 +48,7 @@ public: private: bool fromMap(const QVariantMap &map) override; - ProjectExplorer::BuildStepConfigWidget * createConfigWidget() override; + QWidget *createConfigWidget() override; bool init() override; void finish(bool success) override; void stdError(const QString &line) override; diff --git a/src/plugins/texteditor/codeassist/codeassistant.cpp b/src/plugins/texteditor/codeassist/codeassistant.cpp index 117ba67717c..815be89bbaa 100644 --- a/src/plugins/texteditor/codeassist/codeassistant.cpp +++ b/src/plugins/texteditor/codeassist/codeassistant.cpp @@ -88,6 +88,7 @@ public: bool eventFilter(QObject *o, QEvent *e) override; private: + bool requestActivationCharProposal(); void processProposalItem(AssistProposalItemInterface *proposalItem); void handlePrefixExpansion(const QString &newPrefix); void finalizeProposal(); @@ -161,6 +162,19 @@ void CodeAssistantPrivate::invoke(AssistKind kind, IAssistProvider *provider) } } +bool CodeAssistantPrivate::requestActivationCharProposal() +{ + if (m_assistKind == Completion && m_settings.m_completionTrigger != ManualCompletion) { + if (CompletionAssistProvider *provider = identifyActivationSequence()) { + if (isWaitingForProposal()) + cancelCurrentRequest(); + requestProposal(ActivationCharacter, Completion, provider); + return true; + } + } + return false; +} + void CodeAssistantPrivate::process() { if (!isConfigured()) @@ -169,16 +183,8 @@ void CodeAssistantPrivate::process() stopAutomaticProposalTimer(); if (m_assistKind == TextEditor::Completion) { - if (m_settings.m_completionTrigger != ManualCompletion) { - if (CompletionAssistProvider *provider = identifyActivationSequence()) { - if (isWaitingForProposal()) - cancelCurrentRequest(); - requestProposal(ActivationCharacter, Completion, provider); - return; - } - } - - startAutomaticProposalTimer(); + if (!requestActivationCharProposal()) + startAutomaticProposalTimer(); } else if (m_assistKind != FunctionHint){ m_assistKind = TextEditor::Completion; } @@ -365,6 +371,8 @@ void CodeAssistantPrivate::processProposalItem(AssistProposalItemInterface *prop proposalItem->apply(manipulator, m_proposal->basePosition()); destroyContext(); m_editorWidget->encourageApply(); + if (!proposalItem->isSnippet()) + requestActivationCharProposal(); } void CodeAssistantPrivate::handlePrefixExpansion(const QString &newPrefix) @@ -404,7 +412,7 @@ void CodeAssistantPrivate::finalizeProposal() bool CodeAssistantPrivate::isDisplayingProposal() const { - return m_proposalWidget != nullptr; + return m_proposalWidget != nullptr && m_proposalWidget->isVisible(); } bool CodeAssistantPrivate::isWaitingForProposal() const @@ -457,6 +465,8 @@ void CodeAssistantPrivate::notifyChange() m_proposalWidget->updateProposal( m_editorWidget->textAt(m_proposal->basePosition(), m_editorWidget->position() - m_proposal->basePosition())); + if (!isDisplayingProposal()) + requestActivationCharProposal(); } else { destroyContext(); requestProposal(ExplicitlyInvoked, m_assistKind, m_requestProvider); diff --git a/tests/auto/debugger/tst_dumpers.cpp b/tests/auto/debugger/tst_dumpers.cpp index 5d7ff9a5b52..9fb89cf807e 100644 --- a/tests/auto/debugger/tst_dumpers.cpp +++ b/tests/auto/debugger/tst_dumpers.cpp @@ -696,6 +696,7 @@ struct BoostProfile : public Profile const QByteArray &boostLibPath = qgetenv("QTC_BOOST_LIBRARY_PATH_FOR_TEST"); if (!boostLibPath.isEmpty()) contents += QByteArray("\nLIBS += \"-L") + boostLibPath.constData() + QByteArray("\""); + contents += '\n'; // ensure newline at end no matter what has been added before includes = "#include \n"; } }; @@ -7502,8 +7503,8 @@ void tst_Dumpers::dumper_data() ; - const QtVersion jsonv1{0, 0x50e00}; - const QtVersion jsonv2{0x50e00}; + const QtVersion jsonv1{0, 0x50f00}; + const QtVersion jsonv2{0x50f00}; QTest::newRow("QJson") << Data("#include \n"