diff --git a/chatterino.pro b/chatterino.pro index bee2ef08..b984da7d 100644 --- a/chatterino.pro +++ b/chatterino.pro @@ -225,7 +225,8 @@ SOURCES += \ src/singletons/Theme.cpp \ src/controllers/moderationactions/ModerationActionModel.cpp \ src/widgets/settingspages/LookPage.cpp \ - src/widgets/settingspages/FeelPage.cpp + src/widgets/settingspages/FeelPage.cpp \ + src/widgets/dialogs/UpdatePromptDialog.cpp HEADERS += \ src/Application.hpp \ @@ -398,7 +399,8 @@ HEADERS += \ src/common/Singleton.hpp \ src/controllers/moderationactions/ModerationActionModel.hpp \ src/widgets/settingspages/LookPage.hpp \ - src/widgets/settingspages/FeelPage.hpp + src/widgets/settingspages/FeelPage.hpp \ + src/widgets/dialogs/UpdatePromptDialog.hpp RESOURCES += \ resources/resources.qrc \ diff --git a/resources/images/download_update.png b/resources/images/download_update.png new file mode 100644 index 00000000..92519418 Binary files /dev/null and b/resources/images/download_update.png differ diff --git a/resources/resources.qrc b/resources/resources.qrc index b930ed4b..146c2c66 100644 --- a/resources/resources.qrc +++ b/resources/resources.qrc @@ -72,6 +72,7 @@ contributors.txt avatars/fourtf.png avatars/pajlada.png + images/download_update.png qt.conf diff --git a/src/widgets/BaseWindow.cpp b/src/widgets/BaseWindow.cpp index af776185..d0c4a8cc 100644 --- a/src/widgets/BaseWindow.cpp +++ b/src/widgets/BaseWindow.cpp @@ -318,8 +318,8 @@ void BaseWindow::mouseMoveEvent(QMouseEvent *event) BaseWidget::mouseMoveEvent(event); } -void BaseWindow::addTitleBarButton(const TitleBarButton::Style &style, - std::function onClicked) +TitleBarButton *BaseWindow::addTitleBarButton(const TitleBarButton::Style &style, + std::function onClicked) { TitleBarButton *button = new TitleBarButton; button->setScaleIndependantSize(30, 30); @@ -329,6 +329,8 @@ void BaseWindow::addTitleBarButton(const TitleBarButton::Style &style, button->setButtonStyle(style); QObject::connect(button, &TitleBarButton::clicked, this, [onClicked] { onClicked(); }); + + return button; } RippleEffectLabel *BaseWindow::addTitleBarLabel(std::function onClicked) diff --git a/src/widgets/BaseWindow.hpp b/src/widgets/BaseWindow.hpp index 883cf0a4..77fcc818 100644 --- a/src/widgets/BaseWindow.hpp +++ b/src/widgets/BaseWindow.hpp @@ -36,7 +36,8 @@ public: QWidget *getLayoutContainer(); bool hasCustomWindowFrame(); - void addTitleBarButton(const TitleBarButton::Style &style, std::function onClicked); + TitleBarButton *addTitleBarButton(const TitleBarButton::Style &style, + std::function onClicked); RippleEffectLabel *addTitleBarLabel(std::function onClicked); void setStayInScreenRect(bool value); diff --git a/src/widgets/Window.cpp b/src/widgets/Window.cpp index 99bc9ce6..28638ef0 100644 --- a/src/widgets/Window.cpp +++ b/src/widgets/Window.cpp @@ -10,6 +10,7 @@ #include "widgets/AccountSwitchPopupWidget.hpp" #include "widgets/Notebook.hpp" #include "widgets/dialogs/SettingsDialog.hpp" +#include "widgets/dialogs/UpdatePromptDialog.hpp" #include "widgets/dialogs/WelcomeDialog.hpp" #include "widgets/helper/Shortcut.hpp" #include "widgets/splits/Split.hpp" @@ -52,10 +53,23 @@ Window::Window(WindowType _type) }); if (this->hasCustomWindowFrame() && _type == Window::Main) { + // settings this->addTitleBarButton(TitleBarButton::Settings, [app] { app->windows->showSettingsDialog(); // }); + // updates + auto update = this->addTitleBarButton(TitleBarButton::None, [] {}); + update->setPixmap(QPixmap(":/images/download_update.png")); + QObject::connect(update, &TitleBarButton::clicked, this, [this, update] { + auto dialog = new UpdatePromptDialog(); + dialog->setAttribute(Qt::WA_DeleteOnClose); + dialog->move(update->mapToGlobal(QPoint(-100 * this->getScale(), update->height()))); + dialog->show(); + dialog->raise(); + }); + + // account this->userLabel = this->addTitleBarLabel([this, app] { app->windows->showAccountSelectPopup( this->userLabel->mapToGlobal(this->userLabel->rect().bottomLeft())); // diff --git a/src/widgets/dialogs/UpdatePromptDialog.cpp b/src/widgets/dialogs/UpdatePromptDialog.cpp new file mode 100644 index 00000000..2cc4df2a --- /dev/null +++ b/src/widgets/dialogs/UpdatePromptDialog.cpp @@ -0,0 +1,30 @@ +#include "UpdatePromptDialog.hpp" + +#include "util/LayoutCreator.hpp" +#include "widgets/Label.hpp" + +#include +#include +#include + +namespace chatterino { + +UpdatePromptDialog::UpdatePromptDialog() + : BaseWindow(nullptr, BaseWindow::Flags(BaseWindow::Frameless | BaseWindow::TopMost | + BaseWindow::EnableCustomFrame)) +{ + auto layout = LayoutCreator(this).setLayoutType(); + + layout.emplace