some settings refactorings

This commit is contained in:
fourtf 2020-02-21 01:17:22 +01:00
parent fbbf34878f
commit 39d40d6db6
4 changed files with 52 additions and 17 deletions

View file

@ -4,7 +4,6 @@
#include "singletons/Resources.hpp" #include "singletons/Resources.hpp"
#include "util/LayoutCreator.hpp" #include "util/LayoutCreator.hpp"
#include "widgets/helper/Button.hpp" #include "widgets/helper/Button.hpp"
#include "widgets/helper/SettingsDialogTab.hpp"
#include "widgets/settingspages/AboutPage.hpp" #include "widgets/settingspages/AboutPage.hpp"
#include "widgets/settingspages/AccountsPage.hpp" #include "widgets/settingspages/AccountsPage.hpp"
#include "widgets/settingspages/CommandPage.hpp" #include "widgets/settingspages/CommandPage.hpp"
@ -21,7 +20,7 @@
namespace chatterino { namespace chatterino {
SettingsDialog *SettingsDialog::handle = nullptr; SettingsDialog *SettingsDialog::instance_ = nullptr;
SettingsDialog::SettingsDialog() SettingsDialog::SettingsDialog()
: BaseWindow(BaseWindow::DisableCustomScaling) : BaseWindow(BaseWindow::DisableCustomScaling)
@ -105,10 +104,10 @@ void SettingsDialog::initUi()
void SettingsDialog::filterElements(const QString &text) void SettingsDialog::filterElements(const QString &text)
{ {
// filter elements and hide pages // filter elements and hide pages
for (auto &&page : this->pages_) for (auto &&tab : this->tabs_)
{ {
// filterElements returns true if anything on the page matches the search query // filterElements returns true if anything on the page matches the search query
page->tab()->setVisible(page->filterElements(text)); tab->setVisible(tab->page()->filterElements(text));
} }
// find next visible page // find next visible page
@ -146,9 +145,9 @@ void SettingsDialog::filterElements(const QString &text)
} }
} }
SettingsDialog *SettingsDialog::getHandle() SettingsDialog *SettingsDialog::instance()
{ {
return SettingsDialog::handle; return SettingsDialog::instance_;
} }
void SettingsDialog::addTabs() void SettingsDialog::addTabs()
@ -173,7 +172,7 @@ void SettingsDialog::addTabs()
this->ui_.tabContainer->addSpacing(16); this->ui_.tabContainer->addSpacing(16);
this->addTab(new KeyboardSettingsPage); this->addTab(new KeyboardSettingsPage);
this->addTab(this->ui_.moderationPage = new ModerationPage); this->addTab(new ModerationPage);
this->addTab(new NotificationPage); this->addTab(new NotificationPage);
this->addTab(new ExternalToolsPage); this->addTab(new ExternalToolsPage);
@ -189,7 +188,6 @@ void SettingsDialog::addTab(SettingsPage *page, Qt::Alignment alignment)
this->ui_.pageStack->addWidget(page); this->ui_.pageStack->addWidget(page);
this->ui_.tabContainer->addWidget(tab, 0, alignment); this->ui_.tabContainer->addWidget(tab, 0, alignment);
this->tabs_.push_back(tab); this->tabs_.push_back(tab);
this->pages_.push_back(page);
if (this->tabs_.size() == 1) if (this->tabs_.size() == 1)
{ {
@ -217,6 +215,21 @@ void SettingsDialog::selectTab(SettingsDialogTab *tab, bool byUser)
} }
} }
void SettingsDialog::selectTab(SettingsTabId id)
{
this->selectTab(this->tab(id));
}
SettingsDialogTab *SettingsDialog::tab(SettingsTabId id)
{
for (auto &&tab : this->tabs_)
if (tab->id() == id)
return tab;
assert(false);
return nullptr;
}
void SettingsDialog::selectPage(SettingsPage *page) void SettingsDialog::selectPage(SettingsPage *page)
{ {
assert(page); assert(page);
@ -233,12 +246,18 @@ void SettingsDialog::showDialog(SettingsDialogPreference preferredTab)
switch (preferredTab) switch (preferredTab)
{ {
case SettingsDialogPreference::Accounts: case SettingsDialogPreference::Accounts:
instance->selectTab(instance->tabs_.at(1)); instance->selectTab(SettingsTabId::Accounts);
break; break;
case SettingsDialogPreference::ModerationActions: case SettingsDialogPreference::ModerationActions:
instance->selectPage(instance->ui_.moderationPage); if (auto tab = instance->tab(SettingsTabId::Moderation))
instance->ui_.moderationPage->selectModerationActions(); {
instance->selectTab(tab);
if (auto page = dynamic_cast<ModerationPage *>(tab->page()))
{
page->selectModerationActions();
}
}
break; break;
default:; default:;

View file

@ -7,6 +7,7 @@
#include <QVBoxLayout> #include <QVBoxLayout>
#include <QWidget> #include <QWidget>
#include <pajlada/settings/setting.hpp> #include <pajlada/settings/setting.hpp>
#include "widgets/helper/SettingsDialogTab.hpp"
class QLineEdit; class QLineEdit;
@ -32,7 +33,7 @@ class SettingsDialog : public BaseWindow
public: public:
SettingsDialog(); SettingsDialog();
static SettingsDialog *getHandle(); // may be NULL static SettingsDialog *instance(); // may be NULL
static void showDialog(SettingsDialogPreference preferredTab = static void showDialog(SettingsDialogPreference preferredTab =
SettingsDialogPreference::NoPreference); SettingsDialogPreference::NoPreference);
@ -42,7 +43,7 @@ protected:
virtual void showEvent(QShowEvent *) override; virtual void showEvent(QShowEvent *) override;
private: private:
static SettingsDialog *handle; static SettingsDialog *instance_;
void refresh(); void refresh();
@ -51,6 +52,8 @@ private:
void addTab(SettingsPage *page, Qt::Alignment alignment = Qt::AlignTop); void addTab(SettingsPage *page, Qt::Alignment alignment = Qt::AlignTop);
void selectTab(SettingsDialogTab *tab, bool byUser = true); void selectTab(SettingsDialogTab *tab, bool byUser = true);
void selectPage(SettingsPage *page); void selectPage(SettingsPage *page);
void selectTab(SettingsTabId id);
SettingsDialogTab *tab(SettingsTabId id);
void filterElements(const QString &query); void filterElements(const QString &query);
void onOkClicked(); void onOkClicked();
@ -62,11 +65,9 @@ private:
QStackedLayout *pageStack{}; QStackedLayout *pageStack{};
QPushButton *okButton{}; QPushButton *okButton{};
QPushButton *cancelButton{}; QPushButton *cancelButton{};
ModerationPage *moderationPage{};
QLineEdit *search{}; QLineEdit *search{};
} ui_; } ui_;
std::vector<SettingsDialogTab *> tabs_; std::vector<SettingsDialogTab *> tabs_;
std::vector<SettingsPage *> pages_;
SettingsDialogTab *selectedTab_{}; SettingsDialogTab *selectedTab_{};
SettingsDialogTab *lastSelectedByUser_{}; SettingsDialogTab *lastSelectedByUser_{};

View file

@ -8,10 +8,12 @@
namespace chatterino { namespace chatterino {
SettingsDialogTab::SettingsDialogTab(SettingsDialog *_dialog, SettingsDialogTab::SettingsDialogTab(SettingsDialog *_dialog,
SettingsPage *_page, QString imageFileName) SettingsPage *_page, QString imageFileName,
SettingsTabId id)
: BaseWidget(_dialog) : BaseWidget(_dialog)
, dialog_(_dialog) , dialog_(_dialog)
, page_(_page) , page_(_page)
, id_(id)
{ {
this->ui_.labelText = page_->getName(); this->ui_.labelText = page_->getName();
this->ui_.icon.addFile(imageFileName); this->ui_.icon.addFile(imageFileName);
@ -72,4 +74,9 @@ void SettingsDialogTab::mousePressEvent(QMouseEvent *event)
this->setFocus(); this->setFocus();
} }
SettingsTabId SettingsDialogTab::id() const
{
return id_;
}
} // namespace chatterino } // namespace chatterino

View file

@ -11,16 +11,23 @@ namespace chatterino {
class SettingsPage; class SettingsPage;
class SettingsDialog; class SettingsDialog;
enum SettingsTabId {
None,
Accounts,
Moderation,
};
class SettingsDialogTab : public BaseWidget class SettingsDialogTab : public BaseWidget
{ {
Q_OBJECT Q_OBJECT
public: public:
SettingsDialogTab(SettingsDialog *dialog_, SettingsPage *page_, SettingsDialogTab(SettingsDialog *dialog_, SettingsPage *page_,
QString imageFileName); QString imageFileName, SettingsTabId id = {});
void setSelected(bool selected_); void setSelected(bool selected_);
SettingsPage *page(); SettingsPage *page();
SettingsTabId id() const;
signals: signals:
void selectedChanged(bool); void selectedChanged(bool);
@ -37,6 +44,7 @@ private:
// Parent settings dialog // Parent settings dialog
SettingsDialog *dialog_; SettingsDialog *dialog_;
SettingsPage *page_; SettingsPage *page_;
SettingsTabId id_;
bool selected_ = false; bool selected_ = false;
}; };