2022-08-19 15:59:36 +02:00
|
|
|
// Copyright (C) 2016 The Qt Company Ltd.
|
|
|
|
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0
|
2008-12-02 14:09:21 +01:00
|
|
|
|
2008-12-02 12:01:29 +01:00
|
|
|
#include "messagemanager.h"
|
2019-03-18 17:58:33 +01:00
|
|
|
|
2008-12-02 12:01:29 +01:00
|
|
|
#include "messageoutputwindow.h"
|
|
|
|
|
|
2008-12-02 14:09:21 +01:00
|
|
|
#include <extensionsystem/pluginmanager.h>
|
2019-03-19 08:18:55 +01:00
|
|
|
#include <utils/qtcassert.h>
|
|
|
|
|
|
2019-03-16 18:21:37 +01:00
|
|
|
#include <QFont>
|
2020-01-30 12:45:10 +01:00
|
|
|
#include <QThread>
|
2020-02-20 13:38:43 +01:00
|
|
|
#include <QTime>
|
2019-03-16 18:21:37 +01:00
|
|
|
|
2020-12-01 12:50:41 +01:00
|
|
|
/*!
|
|
|
|
|
\class Core::MessageManager
|
|
|
|
|
\inheaderfile coreplugin/messagemanager.h
|
|
|
|
|
\ingroup mainclasses
|
|
|
|
|
\inmodule QtCreator
|
|
|
|
|
|
|
|
|
|
\brief The MessageManager class is used to post messages in the
|
|
|
|
|
\uicontrol{General Messages} pane.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
namespace Core {
|
2008-12-02 12:01:29 +01:00
|
|
|
|
2018-07-21 21:11:46 +02:00
|
|
|
static MessageManager *m_instance = nullptr;
|
2019-03-18 17:58:33 +01:00
|
|
|
static Internal::MessageOutputWindow *m_messageOutputWindow = nullptr;
|
2013-09-05 01:52:17 +02:00
|
|
|
|
2020-12-01 12:50:41 +01:00
|
|
|
/*!
|
|
|
|
|
\internal
|
|
|
|
|
*/
|
2016-06-05 22:22:11 +03:00
|
|
|
MessageManager *MessageManager::instance()
|
2013-09-05 01:52:17 +02:00
|
|
|
{
|
|
|
|
|
return m_instance;
|
|
|
|
|
}
|
2008-12-02 12:01:29 +01:00
|
|
|
|
2020-12-01 12:50:41 +01:00
|
|
|
enum class Flag { Silent, Flash, Disrupt };
|
|
|
|
|
|
|
|
|
|
static void showOutputPane(Flag flags)
|
2017-08-29 12:46:53 +02:00
|
|
|
{
|
2019-03-18 17:56:22 +01:00
|
|
|
QTC_ASSERT(m_messageOutputWindow, return);
|
|
|
|
|
|
2020-12-01 12:50:41 +01:00
|
|
|
switch (flags) {
|
|
|
|
|
case Core::Flag::Silent:
|
|
|
|
|
break;
|
|
|
|
|
case Core::Flag::Flash:
|
2017-08-29 12:46:53 +02:00
|
|
|
m_messageOutputWindow->flash();
|
2020-12-01 12:50:41 +01:00
|
|
|
break;
|
|
|
|
|
case Core::Flag::Disrupt:
|
2022-02-11 14:52:54 +01:00
|
|
|
m_messageOutputWindow->popup(IOutputPane::ModeSwitch | IOutputPane::WithFocus);
|
2020-12-01 12:50:41 +01:00
|
|
|
break;
|
2017-08-29 12:46:53 +02:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2020-12-01 12:50:41 +01:00
|
|
|
static void doWrite(const QString &text, Flag flags)
|
|
|
|
|
{
|
|
|
|
|
QTC_ASSERT(m_messageOutputWindow, return);
|
|
|
|
|
|
|
|
|
|
showOutputPane(flags);
|
|
|
|
|
m_messageOutputWindow->append(text + '\n');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void write(const QString &text, Flag flags)
|
|
|
|
|
{
|
|
|
|
|
QTC_ASSERT(m_instance, return);
|
|
|
|
|
if (QThread::currentThread() == m_instance->thread())
|
|
|
|
|
doWrite(text, flags);
|
|
|
|
|
else
|
2021-01-28 11:29:14 +01:00
|
|
|
QMetaObject::invokeMethod(m_instance, [text, flags] {
|
|
|
|
|
doWrite(text, flags);
|
|
|
|
|
}, Qt::QueuedConnection);
|
2020-12-01 12:50:41 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
\internal
|
|
|
|
|
*/
|
2008-12-02 14:09:21 +01:00
|
|
|
MessageManager::MessageManager()
|
2008-12-02 12:01:29 +01:00
|
|
|
{
|
|
|
|
|
m_instance = this;
|
2018-07-21 21:11:46 +02:00
|
|
|
m_messageOutputWindow = nullptr;
|
2008-12-02 12:01:29 +01:00
|
|
|
}
|
|
|
|
|
|
2020-12-01 12:50:41 +01:00
|
|
|
/*!
|
|
|
|
|
\internal
|
|
|
|
|
*/
|
2008-12-02 12:01:29 +01:00
|
|
|
MessageManager::~MessageManager()
|
|
|
|
|
{
|
2012-06-18 11:34:15 +02:00
|
|
|
if (m_messageOutputWindow) {
|
|
|
|
|
ExtensionSystem::PluginManager::removeObject(m_messageOutputWindow);
|
2008-12-02 12:01:29 +01:00
|
|
|
delete m_messageOutputWindow;
|
|
|
|
|
}
|
2018-07-21 21:11:46 +02:00
|
|
|
m_instance = nullptr;
|
2008-12-02 12:01:29 +01:00
|
|
|
}
|
|
|
|
|
|
2020-12-01 12:50:41 +01:00
|
|
|
/*!
|
|
|
|
|
\internal
|
|
|
|
|
*/
|
2009-01-26 14:25:03 +01:00
|
|
|
void MessageManager::init()
|
2008-12-02 12:01:29 +01:00
|
|
|
{
|
|
|
|
|
m_messageOutputWindow = new Internal::MessageOutputWindow;
|
2012-06-18 11:34:15 +02:00
|
|
|
ExtensionSystem::PluginManager::addObject(m_messageOutputWindow);
|
2008-12-02 12:01:29 +01:00
|
|
|
}
|
|
|
|
|
|
2020-12-01 12:50:41 +01:00
|
|
|
/*!
|
|
|
|
|
\internal
|
|
|
|
|
*/
|
2019-03-16 18:21:37 +01:00
|
|
|
void MessageManager::setFont(const QFont &font)
|
|
|
|
|
{
|
|
|
|
|
QTC_ASSERT(m_messageOutputWindow, return);
|
|
|
|
|
|
|
|
|
|
m_messageOutputWindow->setFont(font);
|
|
|
|
|
}
|
|
|
|
|
|
2020-12-01 12:50:41 +01:00
|
|
|
/*!
|
|
|
|
|
\internal
|
|
|
|
|
*/
|
2019-03-16 18:21:37 +01:00
|
|
|
void MessageManager::setWheelZoomEnabled(bool enabled)
|
|
|
|
|
{
|
|
|
|
|
QTC_ASSERT(m_messageOutputWindow, return);
|
|
|
|
|
|
|
|
|
|
m_messageOutputWindow->setWheelZoomEnabled(enabled);
|
|
|
|
|
}
|
|
|
|
|
|
2020-12-01 12:50:41 +01:00
|
|
|
/*!
|
|
|
|
|
Writes the \a message to the \uicontrol{General Messages} pane without
|
|
|
|
|
any further action.
|
|
|
|
|
|
|
|
|
|
This is the preferred method of posting messages, since it does not
|
|
|
|
|
interrupt the user.
|
|
|
|
|
|
|
|
|
|
\sa writeFlashing()
|
|
|
|
|
\sa writeDisrupting()
|
|
|
|
|
*/
|
|
|
|
|
void MessageManager::writeSilently(const QString &message)
|
|
|
|
|
{
|
|
|
|
|
Core::write(message, Flag::Silent);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
Writes the \a message to the \uicontrol{General Messages} pane and flashes
|
|
|
|
|
the output pane button.
|
|
|
|
|
|
|
|
|
|
This notifies the user that something important has happened that might
|
|
|
|
|
require the user's attention. Use sparingly, since continually flashing the
|
|
|
|
|
button is annoying, especially if the condition is something the user might
|
|
|
|
|
not be able to fix.
|
|
|
|
|
|
|
|
|
|
\sa writeSilently()
|
|
|
|
|
\sa writeDisrupting()
|
|
|
|
|
*/
|
|
|
|
|
void MessageManager::writeFlashing(const QString &message)
|
|
|
|
|
{
|
|
|
|
|
Core::write(message, Flag::Flash);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
Writes the \a message to the \uicontrol{General Messages} pane and brings
|
|
|
|
|
the pane to the front.
|
|
|
|
|
|
|
|
|
|
This might interrupt a user's workflow, so only use this as a direct
|
|
|
|
|
response to something a user did, like explicitly running a tool.
|
|
|
|
|
|
|
|
|
|
\sa writeSilently()
|
|
|
|
|
\sa writeFlashing()
|
|
|
|
|
*/
|
|
|
|
|
void MessageManager::writeDisrupting(const QString &message)
|
|
|
|
|
{
|
|
|
|
|
Core::write(message, Flag::Disrupt);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
\overload writeSilently()
|
|
|
|
|
*/
|
|
|
|
|
void MessageManager::writeSilently(const QStringList &messages)
|
|
|
|
|
{
|
|
|
|
|
writeSilently(messages.join('\n'));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
\overload writeFlashing()
|
|
|
|
|
*/
|
|
|
|
|
void MessageManager::writeFlashing(const QStringList &messages)
|
|
|
|
|
{
|
|
|
|
|
writeFlashing(messages.join('\n'));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
\overload writeDisrupting()
|
|
|
|
|
*/
|
|
|
|
|
void MessageManager::writeDisrupting(const QStringList &messages)
|
|
|
|
|
{
|
|
|
|
|
writeDisrupting(messages.join('\n'));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} // namespace Core
|