lazily initialize settings pages

This commit is contained in:
fourtf
2020-02-21 01:59:58 +01:00
parent 78ca0cb84f
commit 70e5bd1bfd
16 changed files with 63 additions and 66 deletions
+15 -3
View File
@@ -8,14 +8,16 @@
namespace chatterino {
SettingsDialogTab::SettingsDialogTab(SettingsDialog *_dialog,
SettingsPage *_page, QString imageFileName,
std::function<SettingsPage *()> _lazyPage,
const QString &name, QString imageFileName,
SettingsTabId id)
: BaseWidget(_dialog)
, dialog_(_dialog)
, page_(_page)
, lazyPage_(std::move(_lazyPage))
, id_(id)
, name_(name)
{
this->ui_.labelText = page_->getName();
this->ui_.labelText = name;
this->ui_.icon.addFile(imageFileName);
this->setCursor(QCursor(Qt::PointingHandCursor));
@@ -38,6 +40,11 @@ void SettingsDialogTab::setSelected(bool _selected)
SettingsPage *SettingsDialogTab::page()
{
if (this->page_)
return this->page_;
this->page_ = this->lazyPage_();
this->page_->setTab(this);
return this->page_;
}
@@ -74,6 +81,11 @@ void SettingsDialogTab::mousePressEvent(QMouseEvent *event)
this->setFocus();
}
const QString &SettingsDialogTab::name() const
{
return name_;
}
SettingsTabId SettingsDialogTab::id() const
{
return id_;
+11 -4
View File
@@ -5,6 +5,7 @@
#include <QIcon>
#include <QPaintEvent>
#include <QWidget>
#include <functional>
namespace chatterino {
@@ -22,13 +23,17 @@ class SettingsDialogTab : public BaseWidget
Q_OBJECT
public:
SettingsDialogTab(SettingsDialog *dialog_, SettingsPage *page_,
QString imageFileName, SettingsTabId id = {});
SettingsDialogTab(SettingsDialog *dialog_,
std::function<SettingsPage *()> page_,
const QString &name, QString imageFileName,
SettingsTabId id = {});
void setSelected(bool selected_);
SettingsPage *page();
SettingsTabId id() const;
const QString &name() const;
signals:
void selectedChanged(bool);
@@ -42,9 +47,11 @@ private:
} ui_;
// Parent settings dialog
SettingsDialog *dialog_;
SettingsPage *page_;
SettingsDialog *dialog_{};
SettingsPage *page_{};
std::function<SettingsPage *()> lazyPage_;
SettingsTabId id_;
QString name_;
bool selected_ = false;
};