From 504e0140bb99ea80ad06b797d4567c54e9ad26fe Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 11 Jun 2019 09:37:23 +0200 Subject: [PATCH 1/3] ProjectExplorer: Let the KitChooser optionally show icons There are cases in the debugger where it's more convenient or with the current state of Abi matching even needed to use non-matching kits. Still, visual hints are helpful. Change-Id: I66ca89cbd1664f43864873e3b4d81a9c8e1b36fa Reviewed-by: David Schulz --- src/plugins/projectexplorer/kit.cpp | 15 +++++++++++++ src/plugins/projectexplorer/kit.h | 3 ++- src/plugins/projectexplorer/kitchooser.cpp | 12 +++++++++-- src/plugins/projectexplorer/kitchooser.h | 2 ++ .../kitmanagerconfigwidget.cpp | 21 ++++++++----------- .../projectexplorer/kitmanagerconfigwidget.h | 4 +--- src/plugins/projectexplorer/kitmodel.cpp | 10 +-------- 7 files changed, 40 insertions(+), 27 deletions(-) diff --git a/src/plugins/projectexplorer/kit.cpp b/src/plugins/projectexplorer/kit.cpp index 7f58bf4a13f..88e2e65adaa 100644 --- a/src/plugins/projectexplorer/kit.cpp +++ b/src/plugins/projectexplorer/kit.cpp @@ -39,6 +39,7 @@ #include #include #include +#include #include #include @@ -400,6 +401,20 @@ QIcon Kit::icon() const return d->m_cachedIcon; } +QIcon Kit::displayIcon() const +{ + QIcon result = icon(); + if (hasWarning()) { + static const QIcon warningIcon(Utils::Icons::WARNING.icon()); + result = warningIcon; + } + if (!isValid()) { + static const QIcon errorIcon(Utils::Icons::CRITICAL.icon()); + result = errorIcon; + } + return result; +} + FilePath Kit::iconPath() const { return d->m_iconPath; diff --git a/src/plugins/projectexplorer/kit.h b/src/plugins/projectexplorer/kit.h index 9f0fc91623b..8e45911d175 100644 --- a/src/plugins/projectexplorer/kit.h +++ b/src/plugins/projectexplorer/kit.h @@ -96,7 +96,8 @@ public: // all other aspects are equal. int weight() const; - QIcon icon() const; + QIcon icon() const; // Raw device icon, independent of warning or error. + QIcon displayIcon() const; // Error or warning or device icon. Utils::FilePath iconPath() const; void setIconPath(const Utils::FilePath &path); void setDeviceTypeForIcon(Core::Id deviceType); diff --git a/src/plugins/projectexplorer/kitchooser.cpp b/src/plugins/projectexplorer/kitchooser.cpp index b0b779122e8..c3a0204fba1 100644 --- a/src/plugins/projectexplorer/kitchooser.cpp +++ b/src/plugins/projectexplorer/kitchooser.cpp @@ -72,6 +72,11 @@ void KitChooser::onManageButtonClicked() Core::ICore::showOptionsDialog(Constants::KITS_SETTINGS_PAGE_ID, this); } +void KitChooser::setShowIcons(bool showIcons) +{ + m_showIcons = showIcons; +} + void KitChooser::onCurrentIndexChanged() { const Id id = Id::fromSetting(m_chooser->currentData()); @@ -127,9 +132,12 @@ void KitChooser::populate() foreach (Kit *kit, KitManager::sortKits(KitManager::kits())) { if (m_kitPredicate(kit)) { m_chooser->addItem(kitText(kit), kit->id().toSetting()); - m_chooser->setItemData(m_chooser->count() - 1, kitToolTip(kit), Qt::ToolTipRole); + const int pos = m_chooser->count() - 1; + m_chooser->setItemData(pos, kitToolTip(kit), Qt::ToolTipRole); + if (m_showIcons) + m_chooser->setItemData(pos, kit->displayIcon(), Qt::DecorationRole); if (!didActivate && kit->id() == lastKit) { - m_chooser->setCurrentIndex(m_chooser->count() - 1); + m_chooser->setCurrentIndex(pos); didActivate = true; } } diff --git a/src/plugins/projectexplorer/kitchooser.h b/src/plugins/projectexplorer/kitchooser.h index 0f23baa5378..046c18f571f 100644 --- a/src/plugins/projectexplorer/kitchooser.h +++ b/src/plugins/projectexplorer/kitchooser.h @@ -54,6 +54,7 @@ public: Core::Id currentKitId() const; void setKitPredicate(const Kit::Predicate &predicate); + void setShowIcons(bool showIcons); Kit *currentKit() const; bool hasStartupKit() const { return m_hasStartupKit; } @@ -78,6 +79,7 @@ private: QComboBox *m_chooser; QPushButton *m_manageButton; bool m_hasStartupKit = false; + bool m_showIcons = false; }; } // namespace ProjectExplorer diff --git a/src/plugins/projectexplorer/kitmanagerconfigwidget.cpp b/src/plugins/projectexplorer/kitmanagerconfigwidget.cpp index bcf5c472b89..cdd508b0785 100644 --- a/src/plugins/projectexplorer/kitmanagerconfigwidget.cpp +++ b/src/plugins/projectexplorer/kitmanagerconfigwidget.cpp @@ -39,6 +39,7 @@ #include #include #include +#include #include #include @@ -155,9 +156,15 @@ QString KitManagerConfigWidget::displayName() const return m_cachedDisplayName; } -QIcon KitManagerConfigWidget::icon() const +QIcon KitManagerConfigWidget::displayIcon() const { - return m_modifiedKit->icon(); + // Special case: Extra warning if there are no errors but name is not unique. + if (m_modifiedKit->isValid() && !m_hasUniqueName) { + static const QIcon warningIcon(Utils::Icons::WARNING.icon()); + return warningIcon; + } + + return m_modifiedKit->displayIcon(); } void KitManagerConfigWidget::apply() @@ -199,16 +206,6 @@ bool KitManagerConfigWidget::isDirty() const || m_isDefaultKit != (KitManager::defaultKit() == m_kit); } -bool KitManagerConfigWidget::isValid() const -{ - return m_modifiedKit->isValid(); -} - -bool KitManagerConfigWidget::hasWarning() const -{ - return m_modifiedKit->hasWarning() || !m_hasUniqueName; -} - QString KitManagerConfigWidget::validityMessage() const { Tasks tmp; diff --git a/src/plugins/projectexplorer/kitmanagerconfigwidget.h b/src/plugins/projectexplorer/kitmanagerconfigwidget.h index 9eda98582d9..cf1b6b44d6e 100644 --- a/src/plugins/projectexplorer/kitmanagerconfigwidget.h +++ b/src/plugins/projectexplorer/kitmanagerconfigwidget.h @@ -52,13 +52,11 @@ public: ~KitManagerConfigWidget() override; QString displayName() const; - QIcon icon() const; + QIcon displayIcon() const; void apply(); void discard(); bool isDirty() const; - bool isValid() const; - bool hasWarning() const; QString validityMessage() const; void addAspectToWorkingCopy(KitAspect *aspect); void makeStickySubWidgetsReadOnly(); diff --git a/src/plugins/projectexplorer/kitmodel.cpp b/src/plugins/projectexplorer/kitmodel.cpp index 937615154f2..5f157dcbb37 100644 --- a/src/plugins/projectexplorer/kitmodel.cpp +++ b/src/plugins/projectexplorer/kitmodel.cpp @@ -85,15 +85,7 @@ public: return baseName; } if (role == Qt::DecorationRole) { - if (!widget->isValid()) { - static const QIcon errorIcon(Utils::Icons::CRITICAL.icon()); - return errorIcon; - } - if (widget->hasWarning()) { - static const QIcon warningIcon(Utils::Icons::WARNING.icon()); - return warningIcon; - } - return widget->icon(); + return widget->displayIcon(); } if (role == Qt::ToolTipRole) { return widget->validityMessage(); From e2f7380708cc580e73b91794ef12677a3acbe141 Mon Sep 17 00:00:00 2001 From: Andre Hartmann Date: Fri, 26 Apr 2019 20:47:23 +0200 Subject: [PATCH 2/3] ProjectExplorer: Add "Open Terminal Here" as default entry Most often, a terminal with system environment is needed. Provide it as direct context menu entry, and leave the additional entries for build and run environment (which are probably more seldom used) as sub-menu as before, but rename it to "Open Terminal with >". Change-Id: I148395ca1e62eafff8844ba91db269a12b053de9 Reviewed-by: Eike Ziller --- src/plugins/coreplugin/coreplugin.cpp | 2 +- .../editormanager/editormanager.cpp | 2 +- src/plugins/coreplugin/fileutils.cpp | 9 ++++++++- src/plugins/coreplugin/fileutils.h | 3 ++- src/plugins/coreplugin/systemsettings.cpp | 2 +- .../projectexplorer/projectexplorer.cpp | 19 +++++-------------- 6 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/plugins/coreplugin/coreplugin.cpp b/src/plugins/coreplugin/coreplugin.cpp index 7f367331312..95398acc295 100644 --- a/src/plugins/coreplugin/coreplugin.cpp +++ b/src/plugins/coreplugin/coreplugin.cpp @@ -276,7 +276,7 @@ void CorePlugin::addToPathChooserContextMenu(Utils::PathChooser *pathChooser, QM }); menu->insertAction(firstAction, showInGraphicalShell); - auto *showInTerminal = new QAction(Core::FileUtils::msgTerminalAction(), menu); + auto *showInTerminal = new QAction(Core::FileUtils::msgTerminalHereAction(), menu); connect(showInTerminal, &QAction::triggered, pathChooser, [pathChooser]() { Core::FileUtils::openTerminal(pathChooser->path()); }); diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp index 4d5bf55bb80..813d12739d0 100644 --- a/src/plugins/coreplugin/editormanager/editormanager.cpp +++ b/src/plugins/coreplugin/editormanager/editormanager.cpp @@ -214,7 +214,7 @@ EditorManagerPrivate::EditorManagerPrivate(QObject *parent) : m_closeOtherDocumentsContextAction(new QAction(EditorManager::tr("Close Others"), this)), m_closeAllEditorsExceptVisibleContextAction(new QAction(EditorManager::tr("Close All Except Visible"), this)), m_openGraphicalShellAction(new QAction(FileUtils::msgGraphicalShellAction(), this)), - m_openTerminalAction(new QAction(FileUtils::msgTerminalAction(), this)), + m_openTerminalAction(new QAction(FileUtils::msgTerminalHereAction(), this)), m_findInDirectoryAction(new QAction(FileUtils::msgFindInDirectory(), this)), m_filePropertiesAction(new QAction(tr("Properties..."), this)), m_pinAction(new QAction(tr("Pin"), this)) diff --git a/src/plugins/coreplugin/fileutils.cpp b/src/plugins/coreplugin/fileutils.cpp index 02392cb8887..223cc70cf65 100644 --- a/src/plugins/coreplugin/fileutils.cpp +++ b/src/plugins/coreplugin/fileutils.cpp @@ -135,13 +135,20 @@ QString FileUtils::msgGraphicalShellAction() return QApplication::translate("Core::Internal", "Show Containing Folder"); } -QString FileUtils::msgTerminalAction() +QString FileUtils::msgTerminalHereAction() { if (HostOsInfo::isWindowsHost()) return QApplication::translate("Core::Internal", "Open Command Prompt Here"); return QApplication::translate("Core::Internal", "Open Terminal Here"); } +QString FileUtils::msgTerminalWithAction() +{ + if (HostOsInfo::isWindowsHost()) + return QApplication::translate("Core::Internal", "Open Command Prompt With"); + return QApplication::translate("Core::Internal", "Open Terminal With"); +} + void FileUtils::removeFile(const QString &filePath, bool deleteFromFS) { // remove from version control diff --git a/src/plugins/coreplugin/fileutils.h b/src/plugins/coreplugin/fileutils.h index c7746251c1e..0067d1d7285 100644 --- a/src/plugins/coreplugin/fileutils.h +++ b/src/plugins/coreplugin/fileutils.h @@ -44,7 +44,8 @@ struct CORE_EXPORT FileUtils static QString msgFindInDirectory(); // Platform-dependent action descriptions static QString msgGraphicalShellAction(); - static QString msgTerminalAction(); + static QString msgTerminalHereAction(); + static QString msgTerminalWithAction(); // File operations aware of version control and file system case-insensitiveness static void removeFile(const QString &filePath, bool deleteFromFS); static bool renameFile(const QString &from, const QString &to); diff --git a/src/plugins/coreplugin/systemsettings.cpp b/src/plugins/coreplugin/systemsettings.cpp index 7d072588a76..b6a435d36ab 100644 --- a/src/plugins/coreplugin/systemsettings.cpp +++ b/src/plugins/coreplugin/systemsettings.cpp @@ -68,7 +68,7 @@ QWidget *SystemSettings::widget() m_widget = new QWidget; m_page->setupUi(m_widget); m_page->terminalOpenArgs->setToolTip( - tr("Command line arguments used for \"%1\".").arg(FileUtils::msgTerminalAction())); + tr("Command line arguments used for \"%1\".").arg(FileUtils::msgTerminalHereAction())); m_page->reloadBehavior->setCurrentIndex(EditorManager::reloadSetting()); if (HostOsInfo::isAnyUnixHost()) { diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index 8169fab0a0c..12eed68bd7c 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -835,13 +835,11 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er mfileContextMenu->appendGroup(Constants::G_PROJECT_TREE); // Open Terminal submenu -#if !defined(Q_OS_UNIX) || QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) ActionContainer * const openTerminal = ActionManager::createMenu(ProjectExplorer::Constants::M_OPENTERMINALCONTEXT); openTerminal->setOnAllDisabledBehavior(ActionContainer::Show); dd->m_openTerminalMenu = openTerminal->menu(); - dd->m_openTerminalMenu->setTitle(FileUtils::msgTerminalAction()); -#endif + dd->m_openTerminalMenu->setTitle(FileUtils::msgTerminalWithAction()); // "open with" submenu ActionContainer * const openWith = @@ -909,23 +907,16 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er mfileContextMenu->addAction(cmd, Constants::G_FILE_OPEN); mfolderContextMenu->addAction(cmd, Constants::G_FOLDER_FILES); -#if !defined(Q_OS_UNIX) || QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) // Open Terminal Here menu - mfileContextMenu->addMenu(openTerminal, Constants::G_FILE_OPEN); - mfolderContextMenu->addMenu(openTerminal, Constants::G_FOLDER_FILES); - - dd->m_openTerminalHere = new QAction(tr("System Environment"), this); - cmd = ActionManager::registerAction(dd->m_openTerminalHere, Constants::OPENTERMINALHERE, - projecTreeContext); - dd->m_openTerminalMenu->addAction(dd->m_openTerminalHere); -#else - dd->m_openTerminalHere = new QAction(FileUtils::msgTerminalAction(), this); + dd->m_openTerminalHere = new QAction(FileUtils::msgTerminalHereAction(), this); cmd = ActionManager::registerAction(dd->m_openTerminalHere, Constants::OPENTERMINALHERE, projecTreeContext); mfileContextMenu->addAction(cmd, Constants::G_FILE_OPEN); mfolderContextMenu->addAction(cmd, Constants::G_FOLDER_FILES); -#endif + + mfileContextMenu->addMenu(openTerminal, Constants::G_FILE_OPEN); + mfolderContextMenu->addMenu(openTerminal, Constants::G_FOLDER_FILES); dd->m_openTerminalHereBuildEnv = new QAction(tr("Build Environment"), this); dd->m_openTerminalHereRunEnv = new QAction(tr("Run Environment"), this); From fe7e2530fdaefde7863c3cd88e2947d11a3df04f Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 11 Jun 2019 09:41:03 +0200 Subject: [PATCH 3/3] Debugger: Allow all debuggers when attaching to running servers ... but mark those that are considered non-matching. They actually might in some cases (e.g. MinGW on Linux currently), and not allowing them at all does more harm. Change-Id: I1736373782db7f54c0f7a496f8e6a8deb02e6b45 Reviewed-by: David Schulz --- src/plugins/debugger/debuggerdialogs.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/plugins/debugger/debuggerdialogs.cpp b/src/plugins/debugger/debuggerdialogs.cpp index 450cb575f7e..5fc852cf2c9 100644 --- a/src/plugins/debugger/debuggerdialogs.cpp +++ b/src/plugins/debugger/debuggerdialogs.cpp @@ -229,9 +229,7 @@ StartApplicationDialog::StartApplicationDialog(QWidget *parent) setWindowTitle(tr("Start Debugger")); d->kitChooser = new KitChooser(this); - d->kitChooser->setKitPredicate([](const Kit *k) { - return !DebuggerKitAspect::configurationErrors(k); - }); + d->kitChooser->setShowIcons(true); d->kitChooser->populate(); d->serverPortLabel = new QLabel(tr("Server port:"), this);