summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2019-08-07 12:44:40 +0200
committerEike Ziller <eike.ziller@qt.io>2019-08-12 07:15:27 +0000
commitc67ed4d35b4ff50a05f92a858096372e2a8eb259 (patch)
treec78f921fcf91de1e410af78d446d10f088196690
parenteb2f49c39826cb32a00d17c9d37824d54001a3d8 (diff)
downloadqt-creator-c67ed4d35b4ff50a05f92a858096372e2a8eb259.tar.gz
Add global notification area and use for UI Tour info
Adds a global info bar display above the main window's status bar that can be accessed via ICore::infoBar(). Replace the blocking "Take UI Tour" dialog by a notification there. Fixes: QTCREATORBUG-22819 Change-Id: I733f1bfd2d1db0295754ed2e28bb202f927d0edb Reviewed-by: hjk <hjk@qt.io> Reviewed-by: André Hartmann <aha_1980@gmx.de>
-rw-r--r--src/plugins/coreplugin/coreplugin.cpp2
-rw-r--r--src/plugins/coreplugin/fancytabwidget.cpp10
-rw-r--r--src/plugins/coreplugin/fancytabwidget.h5
-rw-r--r--src/plugins/coreplugin/icore.cpp5
-rw-r--r--src/plugins/coreplugin/icore.h5
-rw-r--r--src/plugins/coreplugin/infobar.cpp14
-rw-r--r--src/plugins/coreplugin/infobar.h5
-rw-r--r--src/plugins/coreplugin/mainwindow.cpp5
-rw-r--r--src/plugins/coreplugin/mainwindow.h2
-rw-r--r--src/plugins/welcome/introductionwidget.cpp39
10 files changed, 67 insertions, 25 deletions
diff --git a/src/plugins/coreplugin/coreplugin.cpp b/src/plugins/coreplugin/coreplugin.cpp
index 9145fabf37..98bab9d216 100644
--- a/src/plugins/coreplugin/coreplugin.cpp
+++ b/src/plugins/coreplugin/coreplugin.cpp
@@ -149,6 +149,7 @@ bool CorePlugin::initialize(const QStringList &arguments, QString *errorMessage)
Theme *themeFromArg = ThemeEntry::createTheme(args.themeId);
setCreatorTheme(themeFromArg ? themeFromArg
: ThemeEntry::createTheme(ThemeEntry::themeSetting()));
+ InfoBar::initialize(ICore::settings(), creatorTheme());
new ActionManager(this);
ActionManager::setPresentationModeEnabled(args.presentationMode);
m_mainWindow = new MainWindow;
@@ -159,7 +160,6 @@ bool CorePlugin::initialize(const QStringList &arguments, QString *errorMessage)
m_mainWindow->init();
m_editMode = new EditMode;
ModeManager::activateMode(m_editMode->id());
- InfoBar::initialize(ICore::settings(), creatorTheme());
IWizardFactory::initialize();
diff --git a/src/plugins/coreplugin/fancytabwidget.cpp b/src/plugins/coreplugin/fancytabwidget.cpp
index 684b47bd15..9bde8cdf3b 100644
--- a/src/plugins/coreplugin/fancytabwidget.cpp
+++ b/src/plugins/coreplugin/fancytabwidget.cpp
@@ -517,6 +517,9 @@ FancyTabWidget::FancyTabWidget(QWidget *parent)
vlayout->addLayout(m_modesStack);
vlayout->addWidget(m_statusBar);
+ m_infoBarDisplay.setTarget(vlayout, 1);
+ m_infoBarDisplay.setStyle(QFrame::Sunken);
+
auto mainLayout = new QHBoxLayout;
mainLayout->setMargin(0);
mainLayout->setSpacing(1);
@@ -611,6 +614,13 @@ QStatusBar *FancyTabWidget::statusBar() const
return m_statusBar;
}
+InfoBar *FancyTabWidget::infoBar()
+{
+ if (!m_infoBarDisplay.infoBar())
+ m_infoBarDisplay.setInfoBar(&m_infoBar);
+ return &m_infoBar;
+}
+
void FancyTabWidget::setCurrentIndex(int index)
{
m_tabBar->setCurrentIndex(index);
diff --git a/src/plugins/coreplugin/fancytabwidget.h b/src/plugins/coreplugin/fancytabwidget.h
index c9a7264d80..00d04f376b 100644
--- a/src/plugins/coreplugin/fancytabwidget.h
+++ b/src/plugins/coreplugin/fancytabwidget.h
@@ -25,6 +25,8 @@
#pragma once
+#include "infobar.h"
+
#include <QIcon>
#include <QWidget>
@@ -157,6 +159,7 @@ public:
int currentIndex() const;
QStatusBar *statusBar() const;
+ InfoBar *infoBar();
void setTabEnabled(int index, bool enable);
bool isTabEnabled(int index) const;
@@ -183,6 +186,8 @@ private:
QStackedLayout *m_modesStack;
QWidget *m_selectionWidget;
QStatusBar *m_statusBar;
+ InfoBarDisplay m_infoBarDisplay;
+ InfoBar m_infoBar;
};
} // namespace Internal
diff --git a/src/plugins/coreplugin/icore.cpp b/src/plugins/coreplugin/icore.cpp
index 63eba664cc..4341a0d20f 100644
--- a/src/plugins/coreplugin/icore.cpp
+++ b/src/plugins/coreplugin/icore.cpp
@@ -561,6 +561,11 @@ QStatusBar *ICore::statusBar()
return m_mainwindow->statusBar();
}
+InfoBar *ICore::infoBar()
+{
+ return m_mainwindow->infoBar();
+}
+
void ICore::raiseWindow(QWidget *widget)
{
if (!widget)
diff --git a/src/plugins/coreplugin/icore.h b/src/plugins/coreplugin/icore.h
index 04d501e134..ca07a7844d 100644
--- a/src/plugins/coreplugin/icore.h
+++ b/src/plugins/coreplugin/icore.h
@@ -43,9 +43,10 @@ template <typename T> class QList;
QT_END_NAMESPACE
namespace Core {
-class IWizardFactory;
class Context;
class IContext;
+class InfoBar;
+class IWizardFactory;
class SettingsDatabase;
namespace Internal { class MainWindow; }
@@ -107,6 +108,8 @@ public:
static QMainWindow *mainWindow();
static QWidget *dialogParent();
static QStatusBar *statusBar();
+ static InfoBar *infoBar();
+
/* Raises and activates the window for the widget. This contains workarounds for X11. */
static void raiseWindow(QWidget *widget);
diff --git a/src/plugins/coreplugin/infobar.cpp b/src/plugins/coreplugin/infobar.cpp
index a81a8834d5..eb6496e36a 100644
--- a/src/plugins/coreplugin/infobar.cpp
+++ b/src/plugins/coreplugin/infobar.cpp
@@ -30,7 +30,6 @@
#include <utils/theme/theme.h>
#include <utils/utilsicons.h>
-#include <QFrame>
#include <QHBoxLayout>
#include <QSettings>
#include <QVBoxLayout>
@@ -207,6 +206,17 @@ void InfoBarDisplay::setInfoBar(InfoBar *infoBar)
update();
}
+void InfoBarDisplay::setStyle(QFrame::Shadow style)
+{
+ m_style = style;
+ update();
+}
+
+InfoBar *InfoBarDisplay::infoBar() const
+{
+ return m_infoBar;
+}
+
void InfoBarDisplay::infoBarDestroyed()
{
m_infoBar = nullptr;
@@ -236,7 +246,7 @@ void InfoBarDisplay::update()
}
infoWidget->setPalette(pal);
- infoWidget->setFrameStyle(QFrame::Panel | QFrame::Raised);
+ infoWidget->setFrameStyle(QFrame::Panel | m_style);
infoWidget->setLineWidth(1);
infoWidget->setAutoFillBackground(true);
diff --git a/src/plugins/coreplugin/infobar.h b/src/plugins/coreplugin/infobar.h
index 74a0f8136f..fd8f476c1d 100644
--- a/src/plugins/coreplugin/infobar.h
+++ b/src/plugins/coreplugin/infobar.h
@@ -28,6 +28,7 @@
#include "core_global.h"
#include <coreplugin/id.h>
+#include <QFrame>
#include <QObject>
#include <QSet>
@@ -127,6 +128,9 @@ public:
InfoBarDisplay(QObject *parent = nullptr);
void setTarget(QBoxLayout *layout, int index);
void setInfoBar(InfoBar *infoBar);
+ void setStyle(QFrame::Shadow style);
+
+ InfoBar *infoBar() const;
private:
void update();
@@ -136,6 +140,7 @@ private:
QList<QWidget *> m_infoWidgets;
InfoBar *m_infoBar = nullptr;
QBoxLayout *m_boxLayout = nullptr;
+ QFrame::Shadow m_style = QFrame::Raised;
int m_boxIndex = 0;
bool m_isShowingDetailsWidget = false;
};
diff --git a/src/plugins/coreplugin/mainwindow.cpp b/src/plugins/coreplugin/mainwindow.cpp
index dd724d9f9c..c55411d5ec 100644
--- a/src/plugins/coreplugin/mainwindow.cpp
+++ b/src/plugins/coreplugin/mainwindow.cpp
@@ -365,6 +365,11 @@ QStatusBar *MainWindow::statusBar() const
return m_modeStack->statusBar();
}
+InfoBar *MainWindow::infoBar() const
+{
+ return m_modeStack->infoBar();
+}
+
void MainWindow::registerDefaultContainers()
{
ActionContainer *menubar = ActionManager::createMenuBar(Constants::MENU_BAR);
diff --git a/src/plugins/coreplugin/mainwindow.h b/src/plugins/coreplugin/mainwindow.h
index 8f9939ee8f..26dc607cbe 100644
--- a/src/plugins/coreplugin/mainwindow.h
+++ b/src/plugins/coreplugin/mainwindow.h
@@ -46,6 +46,7 @@ namespace Core {
class EditorManager;
class ExternalToolManager;
class IDocument;
+class InfoBar;
class JsExpander;
class MessageManager;
class ModeManager;
@@ -93,6 +94,7 @@ public:
virtual QPrinter *printer() const;
IContext * currentContextObject() const;
QStatusBar *statusBar() const;
+ InfoBar *infoBar() const;
void updateAdditionalContexts(const Context &remove, const Context &add,
ICore::ContextPriority priority);
diff --git a/src/plugins/welcome/introductionwidget.cpp b/src/plugins/welcome/introductionwidget.cpp
index 82539fd996..8eb3a268d0 100644
--- a/src/plugins/welcome/introductionwidget.cpp
+++ b/src/plugins/welcome/introductionwidget.cpp
@@ -25,6 +25,8 @@
#include "introductionwidget.h"
+#include <coreplugin/icore.h>
+#include <coreplugin/infobar.h>
#include <utils/algorithm.h>
#include <utils/checkablemessagebox.h>
#include <utils/qtcassert.h>
@@ -47,29 +49,24 @@ namespace Internal {
void IntroductionWidget::askUserAboutIntroduction(QWidget *parent, QSettings *settings)
{
- if (!CheckableMessageBox::shouldAskAgain(settings, kTakeTourSetting))
+ // CheckableMessageBox for compatibility with Qt Creator < 4.11
+ if (!CheckableMessageBox::shouldAskAgain(settings, kTakeTourSetting)
+ || !Core::ICore::infoBar()->canInfoBeAdded(kTakeTourSetting))
return;
- auto messageBox = new CheckableMessageBox(parent);
- messageBox->setWindowTitle(tr("Take a UI Tour"));
- messageBox->setText(
- tr("Would you like to take a quick UI tour? This tour highlights important user "
- "interface elements and shows how they are used. To take the tour later, "
- "select Help > UI Tour."));
- messageBox->setCheckBoxVisible(true);
- messageBox->setCheckBoxText(CheckableMessageBox::msgDoNotAskAgain());
- messageBox->setChecked(true);
- messageBox->setStandardButtons(QDialogButtonBox::Cancel);
- QPushButton *tourButton = messageBox->addButton(tr("Take UI Tour"), QDialogButtonBox::AcceptRole);
- connect(messageBox, &QDialog::finished, parent, [parent, settings, messageBox, tourButton]() {
- if (messageBox->isChecked())
- CheckableMessageBox::doNotAskAgain(settings, kTakeTourSetting);
- if (messageBox->clickedButton() == tourButton) {
- auto intro = new IntroductionWidget(parent);
- intro->show();
- }
- messageBox->deleteLater();
+
+ Core::InfoBarEntry
+ info(kTakeTourSetting,
+ tr("Would you like to take a quick UI tour? This tour highlights important user "
+ "interface elements and shows how they are used. To take the tour later, "
+ "select Help > UI Tour."),
+ Core::InfoBarEntry::GlobalSuppressionEnabled);
+ info.setCustomButtonInfo(tr("Take UI Tour"), [parent] {
+ Core::ICore::infoBar()->removeInfo(kTakeTourSetting);
+ Core::ICore::infoBar()->globallySuppressInfo(kTakeTourSetting);
+ auto intro = new IntroductionWidget(parent);
+ intro->show();
});
- messageBox->show();
+ Core::ICore::infoBar()->addInfo(info);
}
IntroductionWidget::IntroductionWidget(QWidget *parent)