Welcome: Re-organize welcomeplugin.cpp

Introduce a (local) WelcomeModeWidget class, and arrange the
code in 'building up' fashion.

Change-Id: I841a38a292fbcb2aaaa1ee33cda90f4c5f817de2
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
hjk
2024-07-08 13:17:35 +02:00
parent 2bfa16daa1
commit 822e5a30bc

View File

@@ -47,76 +47,12 @@ using namespace ExtensionSystem;
using namespace Utils; using namespace Utils;
using namespace StyleHelper::SpacingTokens; using namespace StyleHelper::SpacingTokens;
namespace Welcome { namespace Welcome::Internal {
namespace Internal {
class TopArea;
class SideArea;
const char currentPageSettingsKeyC[] = "Welcome2Tab"; const char currentPageSettingsKeyC[] = "Welcome2Tab";
class WelcomeMode : public IMode class TopArea final : public QWidget
{ {
Q_OBJECT
public:
WelcomeMode();
~WelcomeMode();
void initPlugins();
private:
void addPage(IWelcomePage *page);
ResizeSignallingWidget *m_modeWidget;
QStackedWidget *m_pageStack;
TopArea *m_topArea;
SideArea *m_sideArea;
QList<IWelcomePage *> m_pluginList;
QList<QAbstractButton *> m_pageButtons;
QButtonGroup *m_buttonGroup;
Id m_activePage;
Id m_defaultPage;
};
class WelcomePlugin final : public ExtensionSystem::IPlugin
{
Q_OBJECT
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QtCreatorPlugin" FILE "Welcome.json")
public:
~WelcomePlugin() final { delete m_welcomeMode; }
bool initialize(const QStringList &arguments, QString *) final
{
m_welcomeMode = new WelcomeMode;
ActionBuilder(this, "Welcome.UITour")
.setText(Tr::tr("UI Tour"))
.addToContainer(Core::Constants::M_HELP, Core::Constants::G_HELP_HELP, true)
.addOnTriggered(&runUiTour);
if (!arguments.contains("-notour")) {
connect(ICore::instance(), &ICore::coreOpened, this, [] { askUserAboutIntroduction(); },
Qt::QueuedConnection);
}
return true;
}
void extensionsInitialized() final
{
m_welcomeMode->initPlugins();
ModeManager::activateMode(m_welcomeMode->id());
}
WelcomeMode *m_welcomeMode = nullptr;
};
class TopArea : public QWidget
{
Q_OBJECT
public: public:
TopArea(QWidget *parent = nullptr) TopArea(QWidget *parent = nullptr)
: QWidget(parent) : QWidget(parent)
@@ -164,10 +100,8 @@ public:
} }
}; };
class SideArea : public QScrollArea class SideArea final : public QScrollArea
{ {
Q_OBJECT
public: public:
SideArea(QWidget *parent = nullptr) SideArea(QWidget *parent = nullptr)
: QScrollArea(parent) : QScrollArea(parent)
@@ -280,27 +214,41 @@ public:
QWidget *m_links = nullptr; QWidget *m_links = nullptr;
}; };
WelcomeMode::WelcomeMode() class WelcomeModeWidget final : public ResizeSignallingWidget
{ {
setDisplayName(Tr::tr("Welcome")); public:
WelcomeModeWidget()
{
setBackgroundColor(this, Theme::Token_Background_Default);
const Icon CLASSIC(":/welcome/images/mode_welcome.png"); m_sideArea = new SideArea(this);
const Icon FLAT({{":/welcome/images/mode_welcome_mask.png", m_sideArea->verticalScrollBar()->setEnabled(false);
Theme::IconsBaseColor}});
const Icon FLAT_ACTIVE({{":/welcome/images/mode_welcome_mask.png",
Theme::IconsModeWelcomeActiveColor}});
setIcon(Icon::modeIcon(CLASSIC, FLAT, FLAT_ACTIVE));
setPriority(Constants::P_MODE_WELCOME); m_buttonGroup = new QButtonGroup(this);
setId(Constants::MODE_WELCOME); m_buttonGroup->setExclusive(true);
setContext(Context(Constants::C_WELCOME_MODE));
m_modeWidget = new ResizeSignallingWidget; m_pageStack = new QStackedWidget(this);
setBackgroundColor(m_modeWidget, Theme::Token_Background_Default); m_pageStack->setObjectName("WelcomeScreenStackedWidget");
connect(m_modeWidget, m_pageStack->setAutoFillBackground(true);
&ResizeSignallingWidget::resized,
this, m_topArea = new TopArea;
[this](const QSize &size, const QSize &) {
using namespace Layouting;
Column {
new StyledBar,
m_topArea,
Row {
m_sideArea,
m_pageStack,
},
noMargin,
spacing(0),
}.attachTo(this);
IContext::attach(this, {}, "Qt Creator Manual");
connect(this, &ResizeSignallingWidget::resized,
this, [this](const QSize &size, const QSize &) {
const QSize sideAreaS = m_sideArea->size(); const QSize sideAreaS = m_sideArea->size();
const QSize topAreaS = m_topArea->size(); const QSize topAreaS = m_topArea->size();
const QSize mainWindowS = ICore::mainWindow()->size(); const QSize mainWindowS = ICore::mainWindow()->size();
@@ -313,46 +261,17 @@ WelcomeMode::WelcomeMode()
m_sideArea->setVisible(showSideArea); m_sideArea->setVisible(showSideArea);
m_topArea->setVisible(showTopArea); m_topArea->setVisible(showTopArea);
}); });
m_sideArea = new SideArea(m_modeWidget);
m_sideArea->verticalScrollBar()->setEnabled(false);
m_buttonGroup = new QButtonGroup(m_modeWidget);
m_buttonGroup->setExclusive(true);
m_pageStack = new QStackedWidget(m_modeWidget);
m_pageStack->setObjectName("WelcomeScreenStackedWidget");
m_pageStack->setAutoFillBackground(true);
m_topArea = new TopArea;
using namespace Layouting;
Column {
new StyledBar,
m_topArea,
Row {
m_sideArea,
m_pageStack,
},
noMargin,
spacing(0),
}.attachTo(m_modeWidget);
IContext::attach(m_modeWidget, {}, "Qt Creator Manual");
setWidget(m_modeWidget);
} }
WelcomeMode::~WelcomeMode() ~WelcomeModeWidget()
{ {
QtcSettings *settings = ICore::settings(); QtcSettings *settings = ICore::settings();
settings->setValueWithDefault(currentPageSettingsKeyC, settings->setValueWithDefault(currentPageSettingsKeyC,
m_activePage.toSetting(), m_activePage.toSetting(),
m_defaultPage.toSetting()); m_defaultPage.toSetting());
delete m_modeWidget;
} }
void WelcomeMode::initPlugins() void initPlugins()
{ {
QtcSettings *settings = ICore::settings(); QtcSettings *settings = ICore::settings();
m_activePage = Id::fromSetting(settings->value(currentPageSettingsKeyC)); m_activePage = Id::fromSetting(settings->value(currentPageSettingsKeyC));
@@ -371,7 +290,7 @@ void WelcomeMode::initPlugins()
} }
} }
void WelcomeMode::addPage(IWelcomePage *page) void addPage(IWelcomePage *page)
{ {
int idx; int idx;
int pagePriority = page->priority(); int pagePriority = page->priority();
@@ -413,7 +332,83 @@ void WelcomeMode::addPage(IWelcomePage *page)
} }
} }
} // namespace Internal QStackedWidget *m_pageStack;
} // namespace Welcome TopArea *m_topArea;
SideArea *m_sideArea;
QList<IWelcomePage *> m_pluginList;
QList<QAbstractButton *> m_pageButtons;
QButtonGroup *m_buttonGroup;
Id m_activePage;
Id m_defaultPage;
};
class WelcomeMode final : public IMode
{
public:
WelcomeMode()
{
setDisplayName(Tr::tr("Welcome"));
const Icon CLASSIC(":/welcome/images/mode_welcome.png");
const Icon FLAT({{":/welcome/images/mode_welcome_mask.png",
Theme::IconsBaseColor}});
const Icon FLAT_ACTIVE({{":/welcome/images/mode_welcome_mask.png",
Theme::IconsModeWelcomeActiveColor}});
setIcon(Icon::modeIcon(CLASSIC, FLAT, FLAT_ACTIVE));
setPriority(Constants::P_MODE_WELCOME);
setId(Constants::MODE_WELCOME);
setContext(Context(Constants::C_WELCOME_MODE));
m_modeWidget = new WelcomeModeWidget;
setWidget(m_modeWidget);
}
~WelcomeMode() { delete m_modeWidget; }
void extensionsInitialized()
{
m_modeWidget->initPlugins();
ModeManager::activateMode(id());
}
private:
WelcomeModeWidget *m_modeWidget;
};
class WelcomePlugin final : public ExtensionSystem::IPlugin
{
Q_OBJECT
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QtCreatorPlugin" FILE "Welcome.json")
~WelcomePlugin() final { delete m_welcomeMode; }
bool initialize(const QStringList &arguments, QString *) final
{
m_welcomeMode = new WelcomeMode;
ActionBuilder(this, "Welcome.UITour")
.setText(Tr::tr("UI Tour"))
.addToContainer(Core::Constants::M_HELP, Core::Constants::G_HELP_HELP, true)
.addOnTriggered(&runUiTour);
if (!arguments.contains("-notour")) {
connect(ICore::instance(), &ICore::coreOpened, this, [] { askUserAboutIntroduction(); },
Qt::QueuedConnection);
}
return true;
}
void extensionsInitialized() final
{
m_welcomeMode->extensionsInitialized();
}
WelcomeMode *m_welcomeMode = nullptr;
};
} // Welcome::Internal
#include "welcomeplugin.moc" #include "welcomeplugin.moc"