summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2019-11-06 12:23:58 +0100
committerEike Ziller <eike.ziller@qt.io>2019-11-25 14:49:25 +0000
commitcc60efdbf60eea690478ab8244e863c70fc7957a (patch)
treeaf4bf35416c8534880e3d0b8617cdad7c35ad95c
parent5bac8114320dc06b64ce3843741fc96f1b641c35 (diff)
downloadqt-creator-cc60efdbf60eea690478ab8244e863c70fc7957a.tar.gz
Help: Add tool button to change target for context help
Adds a button in the tool bar for the help widget. If the help widget is currently the target for context help, the button is "checked", and pressing it opens a menu with all the options. If the help widget is currently not the target for context help, the button is "unchecked" and pressing it makes the help widget the target for context help. The menu can in all cases be opened with a long button press. Fixes: QTCREATORBUG-17667 Change-Id: I748e18f36ebde03eaa779557dd09f7a2bc0bcb2d Reviewed-by: David Schulz <david.schulz@qt.io>
-rw-r--r--src/plugins/help/helpwidget.cpp108
-rw-r--r--src/plugins/help/localhelpmanager.cpp3
-rw-r--r--src/plugins/help/localhelpmanager.h1
3 files changed, 111 insertions, 1 deletions
diff --git a/src/plugins/help/helpwidget.cpp b/src/plugins/help/helpwidget.cpp
index 695524a149..9df84970bb 100644
--- a/src/plugins/help/helpwidget.cpp
+++ b/src/plugins/help/helpwidget.cpp
@@ -105,6 +105,82 @@ static bool isBookmarkable(const QUrl &url)
return !url.isEmpty() && url != QUrl(Help::Constants::AboutBlank);
}
+static bool isTargetOfContextHelp(HelpWidget::WidgetStyle style)
+{
+ const Core::HelpManager::HelpViewerLocation option = LocalHelpManager::contextHelpOption();
+ switch (style) {
+ case HelpWidget::ModeWidget:
+ return option == Core::HelpManager::HelpModeAlways;
+ case HelpWidget::ExternalWindow:
+ return option == Core::HelpManager::ExternalHelpAlways;
+ case HelpWidget::SideBarWidget:
+ return option == Core::HelpManager::SideBySideAlways
+ || option == Core::HelpManager::SideBySideIfPossible;
+ }
+ QTC_CHECK(false);
+ return false;
+}
+
+static QString helpTargetActionText(Core::HelpManager::HelpViewerLocation option)
+{
+ switch (option) {
+ case Core::HelpManager::SideBySideIfPossible:
+ return HelpWidget::tr("Show Context Help Side-by-Side if Possible");
+ case Core::HelpManager::SideBySideAlways:
+ return HelpWidget::tr("Always Show Context Help Side-by-Side");
+ case Core::HelpManager::HelpModeAlways:
+ return HelpWidget::tr("Always Show Context Help in Help Mode");
+ case Core::HelpManager::ExternalHelpAlways:
+ return HelpWidget::tr("Always Show Context Help in External Window");
+ }
+ QTC_CHECK(false);
+ return {};
+}
+
+static Core::HelpManager::HelpViewerLocation optionForStyle(HelpWidget::WidgetStyle style)
+{
+ switch (style) {
+ case HelpWidget::ModeWidget:
+ return Core::HelpManager::HelpModeAlways;
+ case HelpWidget::ExternalWindow:
+ return Core::HelpManager::ExternalHelpAlways;
+ case HelpWidget::SideBarWidget:
+ return Core::HelpManager::SideBySideIfPossible;
+ }
+ QTC_CHECK(false);
+ return Core::HelpManager::SideBySideIfPossible;
+}
+
+static QString helpTargetActionToolTip(HelpWidget::WidgetStyle style)
+{
+ return helpTargetActionText(optionForStyle(style));
+}
+
+static QMenu *createHelpTargetMenu(QWidget *parent)
+{
+ auto menu = new QMenu(parent);
+
+ const auto addAction = [menu](Core::HelpManager::HelpViewerLocation option) {
+ QAction *action = menu->addAction(helpTargetActionText(option));
+ action->setCheckable(true);
+ action->setChecked(LocalHelpManager::contextHelpOption() == option);
+ QObject::connect(action, &QAction::triggered, menu, [option] {
+ LocalHelpManager::setContextHelpOption(option);
+ });
+ QObject::connect(LocalHelpManager::instance(),
+ &LocalHelpManager::contextHelpOptionChanged,
+ menu,
+ [action, option](Core::HelpManager::HelpViewerLocation newOption) {
+ action->setChecked(newOption == option);
+ });
+ };
+ addAction(Core::HelpManager::SideBySideIfPossible);
+ addAction(Core::HelpManager::SideBySideAlways);
+ addAction(Core::HelpManager::HelpModeAlways);
+ addAction(Core::HelpManager::ExternalHelpAlways);
+ return menu;
+}
+
HelpWidget::HelpWidget(const Core::Context &context, WidgetStyle style, QWidget *parent)
: QWidget(parent)
, m_model(this)
@@ -245,7 +321,37 @@ HelpWidget::HelpWidget(const Core::Context &context, WidgetStyle style, QWidget
m_openOnlineDocumentationAction = new QAction(Utils::Icons::ONLINE_TOOLBAR.icon(), tr("Open Online Documentation..."), this);
cmd = Core::ActionManager::registerAction(m_openOnlineDocumentationAction, Constants::HELP_OPENONLINE, context);
connect(m_openOnlineDocumentationAction, &QAction::triggered, this, &HelpWidget::openOnlineDocumentation);
- layout->addWidget(Core::Command::toolButtonWithAppendedShortcut(m_openOnlineDocumentationAction, cmd));
+ layout->addWidget(
+ Core::Command::toolButtonWithAppendedShortcut(m_openOnlineDocumentationAction, cmd));
+
+ auto helpTargetAction = new QAction(Utils::Icons::LINK_TOOLBAR.icon(),
+ helpTargetActionToolTip(style),
+ this);
+ helpTargetAction->setCheckable(true);
+ helpTargetAction->setChecked(isTargetOfContextHelp(style));
+ cmd = Core::ActionManager::registerAction(helpTargetAction, "Help.OpenContextHelpHere", context);
+ QToolButton *helpTargetButton = Core::Command::toolButtonWithAppendedShortcut(helpTargetAction,
+ cmd);
+ helpTargetButton->setProperty("noArrow", true);
+ helpTargetButton->setPopupMode(QToolButton::DelayedPopup);
+ helpTargetButton->setMenu(createHelpTargetMenu(helpTargetButton));
+ connect(LocalHelpManager::instance(),
+ &LocalHelpManager::contextHelpOptionChanged,
+ [this, helpTargetAction] {
+ helpTargetAction->setChecked(isTargetOfContextHelp(m_style));
+ });
+ connect(helpTargetAction,
+ &QAction::triggered,
+ this,
+ [this, helpTargetAction, helpTargetButton](bool checked) {
+ if (checked) {
+ LocalHelpManager::setContextHelpOption(optionForStyle(m_style));
+ } else {
+ helpTargetAction->setChecked(true);
+ helpTargetButton->showMenu();
+ }
+ });
+ layout->addWidget(helpTargetButton);
if (supportsPages()) {
layout->addWidget(new Utils::StyledSeparator(toolBar));
diff --git a/src/plugins/help/localhelpmanager.cpp b/src/plugins/help/localhelpmanager.cpp
index 8af763f426..ae9fe6cd51 100644
--- a/src/plugins/help/localhelpmanager.cpp
+++ b/src/plugins/help/localhelpmanager.cpp
@@ -231,7 +231,10 @@ Core::HelpManager::HelpViewerLocation LocalHelpManager::contextHelpOption()
void LocalHelpManager::setContextHelpOption(Core::HelpManager::HelpViewerLocation location)
{
+ if (location == contextHelpOption())
+ return;
Core::ICore::settings()->setValue(kContextHelpOptionKey, location);
+ emit m_instance->contextHelpOptionChanged(location);
}
bool LocalHelpManager::returnOnClose()
diff --git a/src/plugins/help/localhelpmanager.h b/src/plugins/help/localhelpmanager.h
index f75de12fca..c2f5284f59 100644
--- a/src/plugins/help/localhelpmanager.h
+++ b/src/plugins/help/localhelpmanager.h
@@ -130,6 +130,7 @@ signals:
void fallbackFontChanged(const QFont &font);
void returnOnCloseChanged();
void scrollWheelZoomingEnabledChanged(bool enabled);
+ void contextHelpOptionChanged(Core::HelpManager::HelpViewerLocation option);
private:
static bool m_guiNeedsSetup;