diff --git a/global.cpp b/global.cpp index 5d03fef..89a9dee 100644 --- a/global.cpp +++ b/global.cpp @@ -1,5 +1,8 @@ #include "global.h" #include +#include +#include +#include Shared::Message::Message(Shared::Message::Type p_type): jFrom(), @@ -252,3 +255,15 @@ void Shared::Message::setCurrentTime() time = QDateTime::currentDateTime(); } +QIcon Shared::availabilityIcon(Shared::Availability av, bool big) +{ + const std::deque& fallback = QApplication::palette().window().color().lightnessF() > 0.5 ? + big ? + Shared::fallbackAvailabilityThemeIconsDarkBig: + Shared::fallbackAvailabilityThemeIconsDarkSmall: + big ? + Shared::fallbackAvailabilityThemeIconsLightBig: + Shared::fallbackAvailabilityThemeIconsLightSmall; + + return QIcon::fromTheme(availabilityThemeIcons[av], QIcon(fallback[av])); +} diff --git a/global.h b/global.h index 77306f9..7af9849 100644 --- a/global.h +++ b/global.h @@ -47,7 +47,7 @@ static const std::deque availabilityThemeIcons = { "user-away", "user-away-extended", "user-busy", - "user-online", + "chatty", "user-invisible", "user-offline" }; @@ -120,6 +120,48 @@ private: bool forwarded; }; +static const std::deque fallbackAvailabilityThemeIconsLightBig = { + ":images/fallback/light/big/online.svg", + ":images/fallback/light/big/away.svg", + ":images/fallback/light/big/absent.svg", + ":images/fallback/light/big/busy.svg", + ":images/fallback/light/big/chatty.svg", + ":images/fallback/light/big/invisible.svg", + ":images/fallback/light/big/offline.svg" +}; + +static const std::deque fallbackAvailabilityThemeIconsLightSmall = { + ":images/fallback/light/small/online.svg", + ":images/fallback/light/small/away.svg", + ":images/fallback/light/small/absent.svg", + ":images/fallback/light/small/busy.svg", + ":images/fallback/light/small/chatty.svg", + ":images/fallback/light/small/invisible.svg", + ":images/fallback/light/small/offline.svg" +}; + +static const std::deque fallbackAvailabilityThemeIconsDarkBig = { + ":images/fallback/dark/big/online.svg", + ":images/fallback/dark/big/away.svg", + ":images/fallback/dark/big/absent.svg", + ":images/fallback/dark/big/busy.svg", + ":images/fallback/dark/big/chatty.svg", + ":images/fallback/dark/big/invisible.svg", + ":images/fallback/dark/big/offline.svg" +}; + +static const std::deque fallbackAvailabilityThemeIconsDarkSmall = { + ":images/fallback/dark/small/online.svg", + ":images/fallback/dark/small/away.svg", + ":images/fallback/dark/small/absent.svg", + ":images/fallback/dark/small/busy.svg", + ":images/fallback/dark/small/chatty.svg", + ":images/fallback/dark/small/invisible.svg", + ":images/fallback/dark/small/offline.svg" +}; + +QIcon availabilityIcon(Availability av, bool big = false); + }; #endif // GLOBAL_H diff --git a/resources/images/fallback/dark/big/chatty.svg b/resources/images/fallback/dark/big/chatty.svg new file mode 100644 index 0000000..5a985cb --- /dev/null +++ b/resources/images/fallback/dark/big/chatty.svg @@ -0,0 +1,84 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + diff --git a/resources/images/fallback/dark/small/chatty.svg b/resources/images/fallback/dark/small/chatty.svg new file mode 100644 index 0000000..e2b2ed5 --- /dev/null +++ b/resources/images/fallback/dark/small/chatty.svg @@ -0,0 +1,87 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/resources/images/fallback/light/big/chatty.svg b/resources/images/fallback/light/big/chatty.svg new file mode 100644 index 0000000..63dc35b --- /dev/null +++ b/resources/images/fallback/light/big/chatty.svg @@ -0,0 +1,58 @@ + + + + + + image/svg+xml + + + + + + + + + + diff --git a/resources/images/fallback/light/small/chatty.svg b/resources/images/fallback/light/small/chatty.svg new file mode 100644 index 0000000..e2b2ed5 --- /dev/null +++ b/resources/images/fallback/light/small/chatty.svg @@ -0,0 +1,87 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/resources/images/logo.svg~ b/resources/images/logo.svg~ deleted file mode 100644 index 9254e49..0000000 --- a/resources/images/logo.svg~ +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/resources/resources.qrc b/resources/resources.qrc index a275128..e6f8ec1 100644 --- a/resources/resources.qrc +++ b/resources/resources.qrc @@ -9,6 +9,7 @@ images/fallback/dark/big/offline.svg images/fallback/dark/big/online.svg images/fallback/dark/big/user.svg + images/fallback/dark/big/chatty.svg images/fallback/dark/small/absent.svg images/fallback/dark/small/away.svg @@ -17,6 +18,7 @@ images/fallback/dark/small/offline.svg images/fallback/dark/small/online.svg images/fallback/dark/small/user.svg + images/fallback/dark/small/chatty.svg images/fallback/light/big/absent.svg images/fallback/light/big/away.svg @@ -25,6 +27,7 @@ images/fallback/light/big/offline.svg images/fallback/light/big/online.svg images/fallback/light/big/user.svg + images/fallback/light/big/chatty.svg images/fallback/light/small/absent.svg images/fallback/light/small/away.svg @@ -33,5 +36,6 @@ images/fallback/light/small/offline.svg images/fallback/light/small/online.svg images/fallback/light/small/user.svg + images/fallback/light/small/chatty.svg diff --git a/ui/conversation.cpp b/ui/conversation.cpp index 2923c48..5eb5440 100644 --- a/ui/conversation.cpp +++ b/ui/conversation.cpp @@ -42,7 +42,7 @@ Conversation::Conversation(Models::Contact* p_contact, QWidget* parent): m_ui->splitter->setStretchFactor(1, 0); setName(p_contact->getContactName()); - setState(p_contact->getAvailability()); + updateState(); setStatus(p_contact->getStatus()); connect(contact, SIGNAL(childChanged(Models::Item*, int, int)), this, SLOT(onContactChanged(Models::Item*, int, int))); @@ -106,10 +106,10 @@ void Conversation::setName(const QString& name) line->setPalName(getJid(), name); } -void Conversation::setState(Shared::Availability state) +void Conversation::updateState() { - m_ui->statusIcon->setPixmap(QIcon::fromTheme(Shared::availabilityThemeIcons[state]).pixmap(50)); - m_ui->statusIcon->setToolTip(Shared::availabilityNames[state]); + m_ui->statusIcon->setPixmap(contact->getStatusIcon(true).pixmap(40)); + m_ui->statusIcon->setToolTip(Shared::availabilityNames[contact->getAvailability()]); } void Conversation::setStatus(const QString& status) @@ -135,7 +135,7 @@ void Conversation::onContactChanged(Models::Item* item, int row, int col) setName(contact->getContactName()); break; case 3: - setState(contact->getAvailability()); + updateState(); break; case 5: setStatus(contact->getStatus()); diff --git a/ui/conversation.h b/ui/conversation.h index 0a5928f..b5f2730 100644 --- a/ui/conversation.h +++ b/ui/conversation.h @@ -65,7 +65,7 @@ signals: void shown(); protected: - void setState(Shared::Availability state); + void updateState(); void setStatus(const QString& status); void setName(const QString& name); void applyVisualEffects(); diff --git a/ui/models/account.cpp b/ui/models/account.cpp index 352b79d..383ee1c 100644 --- a/ui/models/account.cpp +++ b/ui/models/account.cpp @@ -69,12 +69,12 @@ void Models::Account::setAvailability(Shared::Availability p_avail) } } -QIcon Models::Account::getStatusIcon() const +QIcon Models::Account::getStatusIcon(bool big) const { if (state == Shared::connected) { - return QIcon::fromTheme(Shared::availabilityThemeIcons[availability]); + return Shared::availabilityIcon(availability, big); } else if (state == Shared::disconnected) { - return QIcon::fromTheme(Shared::availabilityThemeIcons[Shared::offline]); + return Shared::availabilityIcon(Shared::offline, big); } else { return QIcon::fromTheme(Shared::connectionStateThemeIcons[state]); } diff --git a/ui/models/account.h b/ui/models/account.h index 43a72c2..8474fab 100644 --- a/ui/models/account.h +++ b/ui/models/account.h @@ -36,7 +36,7 @@ namespace Models { void setAvailability(unsigned int p_avail); Shared::Availability getAvailability() const; - QIcon getStatusIcon() const; + QIcon getStatusIcon(bool big = false) const; QVariant data(int column) const override; int columnCount() const override; diff --git a/ui/models/contact.cpp b/ui/models/contact.cpp index 643659b..1b211cc 100644 --- a/ui/models/contact.cpp +++ b/ui/models/contact.cpp @@ -216,12 +216,12 @@ void Models::Contact::setState(Shared::SubscriptionState p_state) } } -QIcon Models::Contact::getStatusIcon() const +QIcon Models::Contact::getStatusIcon(bool big) const { if (getMessagesCount() > 0) { return QIcon::fromTheme("mail-message"); } else if (state == Shared::both) { - return QIcon::fromTheme(Shared::availabilityThemeIcons[availability]); + return Shared::availabilityIcon(availability, big);; } else { return QIcon::fromTheme(Shared::subscriptionStateThemeIcons[state]); } diff --git a/ui/models/contact.h b/ui/models/contact.h index 7914a88..49d4b35 100644 --- a/ui/models/contact.h +++ b/ui/models/contact.h @@ -22,7 +22,7 @@ public: QString getJid() const; Shared::Availability getAvailability() const; Shared::SubscriptionState getState() const; - QIcon getStatusIcon() const; + QIcon getStatusIcon(bool big = false) const; int columnCount() const override; QVariant data(int column) const override; diff --git a/ui/models/presence.cpp b/ui/models/presence.cpp index 2caae08..623df61 100644 --- a/ui/models/presence.cpp +++ b/ui/models/presence.cpp @@ -140,12 +140,12 @@ void Models::Presence::dropMessages() } } -QIcon Models::Presence::getStatusIcon() const +QIcon Models::Presence::getStatusIcon(bool big) const { if (getMessagesCount() > 0) { return QIcon::fromTheme("mail-message"); } else { - return QIcon::fromTheme(Shared::availabilityThemeIcons[availability]); + return Shared::availabilityIcon(availability, big); } } diff --git a/ui/models/presence.h b/ui/models/presence.h index 4734528..b44f066 100644 --- a/ui/models/presence.h +++ b/ui/models/presence.h @@ -46,7 +46,7 @@ public: QString getStatus() const; void setStatus(const QString& p_state); - QIcon getStatusIcon() const; + QIcon getStatusIcon(bool big = false) const; void update(const QString& key, const QVariant& value); unsigned int getMessagesCount() const; diff --git a/ui/models/roster.cpp b/ui/models/roster.cpp index bc8d827..c997219 100644 --- a/ui/models/roster.cpp +++ b/ui/models/roster.cpp @@ -76,17 +76,17 @@ QVariant Models::Roster::data (const QModelIndex& index, int role) const switch (item->type) { case Item::account:{ Account* acc = static_cast(item); - result = acc->getStatusIcon(); + result = acc->getStatusIcon(false); } break; case Item::contact:{ Contact* contact = static_cast(item); - result = contact->getStatusIcon(); + result = contact->getStatusIcon(false); } break; case Item::presence:{ Presence* presence = static_cast(item); - result = presence->getStatusIcon(); + result = presence->getStatusIcon(false); } break; default: diff --git a/ui/squawk.cpp b/ui/squawk.cpp index 5cc28f6..c5bff2c 100644 --- a/ui/squawk.cpp +++ b/ui/squawk.cpp @@ -16,8 +16,9 @@ Squawk::Squawk(QWidget *parent) : m_ui->roster->setModel(&rosterModel); m_ui->roster->setContextMenuPolicy(Qt::CustomContextMenu); + const std::deque& fallback = palette().window().color().lightnessF() > 0.5 ? Shared::fallbackAvailabilityThemeIconsDarkSmall : Shared::fallbackAvailabilityThemeIconsLightSmall; for (int i = 0; i < Shared::availabilityNames.size(); ++i) { - m_ui->comboBox->addItem(QIcon::fromTheme(Shared::availabilityThemeIcons[i]), Shared::availabilityNames[i]); + m_ui->comboBox->addItem(QIcon::fromTheme(Shared::availabilityThemeIcons[i], QIcon(fallback[i])), Shared::availabilityNames[i]); } m_ui->comboBox->setCurrentIndex(Shared::offline);