mirror of
https://github.com/ProtonMail/proton-bridge.git
synced 2025-12-17 15:46:44 +00:00
79 lines
3.6 KiB
C++
79 lines
3.6 KiB
C++
// Copyright (c) 2023 Proton AG
|
|
//
|
|
// This file is part of Proton Mail Bridge.
|
|
//
|
|
// Proton Mail Bridge is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// Proton Mail Bridge is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with Proton Mail Bridge. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
|
|
#ifndef BRIDGE_GUI_NATIVE_TRAY_ICON_H
|
|
#define BRIDGE_GUI_NATIVE_TRAY_ICON_H
|
|
|
|
|
|
//**********************************************************************************************************************
|
|
/// \brief A native tray icon.
|
|
//**********************************************************************************************************************
|
|
class TrayIcon: public QSystemTrayIcon {
|
|
Q_OBJECT
|
|
public: // typedef enum
|
|
enum class State {
|
|
Normal,
|
|
Error,
|
|
Warn,
|
|
Update,
|
|
}; ///< Enumeration for the state.
|
|
|
|
public: // data members
|
|
TrayIcon(); ///< Default constructor.
|
|
~TrayIcon() override = default; ///< Destructor.
|
|
TrayIcon(TrayIcon const&) = delete; ///< Disabled copy-constructor.
|
|
TrayIcon(TrayIcon&&) = delete; ///< Disabled assignment copy-constructor.
|
|
TrayIcon& operator=(TrayIcon const&) = delete; ///< Disabled assignment operator.
|
|
TrayIcon& operator=(TrayIcon&&) = delete; ///< Disabled move assignment operator.
|
|
void setState(State state, QString const& stateString, QString const &statusIconPath); ///< Set the state of the icon
|
|
void showErrorPopupNotification(QString const& title, QString const &message); ///< Display a pop up notification.
|
|
|
|
signals:
|
|
void selectUser(QString const& userID, bool forceShowWindow); ///< Signal for selecting a user with a given userID
|
|
|
|
private slots:
|
|
void onMenuAboutToShow(); ///< Slot called before the context menu is shown.
|
|
void onUserClicked(); ///< Slot triggered when clicking on a user in the context menu.
|
|
static void onActivated(QSystemTrayIcon::ActivationReason reason); ///< Slot for the activation of the system tray icon.
|
|
void handleDPIChange(); ///< Handles DPI change.
|
|
void setIcon(); ///< set the tray icon.
|
|
void onIconRefreshTimer(); ///< Timer for icon refresh.
|
|
|
|
private: // member functions.
|
|
void generateDotIcons(); ///< generate the colored dot icons used for user status.
|
|
void generateStatusIcon(QString const &svgPath, QColor const& color); ///< Generate the status icon.
|
|
void refreshContextMenu(); ///< Refresh the context menu.
|
|
|
|
private: // data members
|
|
State state_ { State::Normal }; ///< The state of the tray icon.
|
|
QString stateString_; ///< The current state string.
|
|
std::unique_ptr<QMenu> menu_; ///< The context menu for the tray icon. Not owned by the tray icon.
|
|
QIcon statusIcon_; ///< The path of the status icon displayed in the context menu.
|
|
QIcon greenDot_; ///< The green dot icon.
|
|
QIcon greyDot_; ///< The grey dot icon.
|
|
QIcon orangeDot_; ///< The orange dot icon.
|
|
QIcon const notificationErrorIcon_; ///< The error icon used for notifications.
|
|
|
|
QTimer iconRefreshTimer_; ///< The timer used to periodically refresh the icon when DPI changes.
|
|
QDateTime iconRefreshDeadline_; ///< The deadline for refreshing the icon
|
|
};
|
|
|
|
|
|
|
|
#endif //BRIDGE_GUI_NATIVE_TRAY_ICON_H
|