2020-06-13 12:39:34 +00:00
|
|
|
#include <QApplication>
|
|
|
|
#include <QMenu>
|
2020-06-13 15:19:43 +00:00
|
|
|
#include <QPixmap>
|
|
|
|
#include <QPainter>
|
2020-06-13 12:39:34 +00:00
|
|
|
|
|
|
|
#include "trayicon.h"
|
|
|
|
|
|
|
|
TrayIcon::TrayIcon(QObject *parent) : QObject(parent)
|
|
|
|
{
|
|
|
|
mMenu = new QMenu;
|
|
|
|
|
|
|
|
QAction *closeAction = mMenu->addAction(tr("Quit"));
|
|
|
|
connect(closeAction, &QAction::triggered, this, &TrayIcon::onQuit);
|
|
|
|
|
|
|
|
mTrayIcon.setIcon(QIcon(":/logo_large.png"));
|
|
|
|
mTrayIcon.setContextMenu(mMenu);
|
|
|
|
mTrayIcon.show();
|
|
|
|
}
|
|
|
|
|
|
|
|
TrayIcon::~TrayIcon()
|
|
|
|
{
|
|
|
|
mMenu->deleteLater();
|
|
|
|
}
|
|
|
|
|
2020-06-13 12:59:02 +00:00
|
|
|
void TrayIcon::onNewNumber(const NotificationsNumber &number)
|
|
|
|
{
|
|
|
|
if(number.sum() > mOldNumber) {
|
|
|
|
showNotification(number);
|
|
|
|
}
|
|
|
|
|
|
|
|
mOldNumber = number.sum();
|
2020-06-13 15:19:43 +00:00
|
|
|
refreshIcon();
|
2020-06-13 12:59:02 +00:00
|
|
|
}
|
|
|
|
|
2020-06-13 12:39:34 +00:00
|
|
|
void TrayIcon::onQuit()
|
|
|
|
{
|
|
|
|
QApplication::exit();
|
|
|
|
}
|
2020-06-13 12:59:02 +00:00
|
|
|
|
|
|
|
void TrayIcon::showNotification(const NotificationsNumber &n)
|
|
|
|
{
|
|
|
|
QString msg;
|
|
|
|
|
|
|
|
if(n.newNotifs() == 1)
|
|
|
|
msg += tr("1 new notification");
|
|
|
|
else if(n.newNotifs() > 1)
|
|
|
|
msg += tr("%1 new notifications").arg(n.newNotifs());
|
|
|
|
|
|
|
|
|
|
|
|
if(n.unreadConversations() > 0) {
|
|
|
|
if(!msg.isEmpty())
|
|
|
|
msg += tr(" and ");
|
|
|
|
|
|
|
|
if(n.unreadConversations() == 1)
|
|
|
|
msg += tr("1 unread conversation");
|
|
|
|
else if(n.unreadConversations() > 1)
|
|
|
|
msg += tr("%1 unread conversations").arg(n.unreadConversations());
|
|
|
|
}
|
|
|
|
|
|
|
|
msg = tr("You have %1.").arg(msg);
|
|
|
|
|
|
|
|
mTrayIcon.showMessage(tr("Comunic"), msg, QIcon(":/logo_large.png"));
|
|
|
|
}
|
2020-06-13 15:19:43 +00:00
|
|
|
|
|
|
|
void TrayIcon::refreshIcon()
|
|
|
|
{
|
|
|
|
if(mOldNumber == 0) {
|
|
|
|
mTrayIcon.setIcon(QIcon(":/logo_large.png"));
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
QPixmap bm = QPixmap::fromImage(QImage(":/logo_large.png"), Qt::ColorOnly);
|
|
|
|
|
|
|
|
QPainter engine(&bm);
|
|
|
|
QColor red(255, 0, 0, 255);
|
|
|
|
QRect r(QPoint(bm.width()/3, 0), QPoint(bm.width(), bm.height() - bm.height()/3));
|
|
|
|
engine.fillRect(r, red);
|
|
|
|
|
|
|
|
engine.setPen(QColor(255,255,255,255));
|
|
|
|
|
|
|
|
QFont f = engine.font();
|
|
|
|
f.setFamily("Arial");
|
|
|
|
f.setPointSize(bm.width()/1.8);
|
|
|
|
f.setBold(true);
|
|
|
|
engine.setFont(f);
|
|
|
|
|
|
|
|
engine.drawText(r, Qt::AlignCenter, QString::number(mOldNumber));
|
|
|
|
|
|
|
|
mTrayIcon.setIcon(QIcon(bm));
|
|
|
|
}
|