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 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"
|
||||||
|
|||||||
Reference in New Issue
Block a user