forked from qt-creator/qt-creator
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:
@@ -47,76 +47,12 @@ using namespace ExtensionSystem;
|
||||
using namespace Utils;
|
||||
using namespace StyleHelper::SpacingTokens;
|
||||
|
||||
namespace Welcome {
|
||||
namespace Internal {
|
||||
|
||||
class TopArea;
|
||||
class SideArea;
|
||||
namespace Welcome::Internal {
|
||||
|
||||
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:
|
||||
TopArea(QWidget *parent = nullptr)
|
||||
: QWidget(parent)
|
||||
@@ -164,10 +100,8 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
class SideArea : public QScrollArea
|
||||
class SideArea final : public QScrollArea
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
SideArea(QWidget *parent = nullptr)
|
||||
: QScrollArea(parent)
|
||||
@@ -280,27 +214,41 @@ public:
|
||||
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");
|
||||
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));
|
||||
m_sideArea = new SideArea(this);
|
||||
m_sideArea->verticalScrollBar()->setEnabled(false);
|
||||
|
||||
setPriority(Constants::P_MODE_WELCOME);
|
||||
setId(Constants::MODE_WELCOME);
|
||||
setContext(Context(Constants::C_WELCOME_MODE));
|
||||
m_buttonGroup = new QButtonGroup(this);
|
||||
m_buttonGroup->setExclusive(true);
|
||||
|
||||
m_modeWidget = new ResizeSignallingWidget;
|
||||
setBackgroundColor(m_modeWidget, Theme::Token_Background_Default);
|
||||
connect(m_modeWidget,
|
||||
&ResizeSignallingWidget::resized,
|
||||
this,
|
||||
[this](const QSize &size, const QSize &) {
|
||||
m_pageStack = new QStackedWidget(this);
|
||||
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(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 topAreaS = m_topArea->size();
|
||||
const QSize mainWindowS = ICore::mainWindow()->size();
|
||||
@@ -313,46 +261,17 @@ WelcomeMode::WelcomeMode()
|
||||
m_sideArea->setVisible(showSideArea);
|
||||
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();
|
||||
settings->setValueWithDefault(currentPageSettingsKeyC,
|
||||
m_activePage.toSetting(),
|
||||
m_defaultPage.toSetting());
|
||||
delete m_modeWidget;
|
||||
}
|
||||
|
||||
void WelcomeMode::initPlugins()
|
||||
void initPlugins()
|
||||
{
|
||||
QtcSettings *settings = ICore::settings();
|
||||
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 pagePriority = page->priority();
|
||||
@@ -413,7 +332,83 @@ void WelcomeMode::addPage(IWelcomePage *page)
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace Internal
|
||||
} // namespace Welcome
|
||||
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 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"
|
||||
|
||||
Reference in New Issue
Block a user