From 5a426a4af3bd8167dc259397c629da0d73d80f6d Mon Sep 17 00:00:00 2001 From: Ximi1970 Date: Sun, 27 Aug 2023 21:01:48 +0200 Subject: [PATCH] Add new indicator and new shade --- app/SysTray-X/SysTray-X-app/SysTray-X.qrc | 3 + .../files/icons/new-indicator-round.png | Bin 0 -> 6738 bytes .../files/icons/new-indicator-star-close.png | Bin 0 -> 7073 bytes .../files/icons/new-indicator-star-open.png | Bin 0 -> 11510 bytes app/SysTray-X/SysTray-X-app/preferences.cpp | 517 ++++++++------- app/SysTray-X/SysTray-X-app/preferences.h | 484 ++++++++------ app/SysTray-X/SysTray-X-app/preferences.ui | 614 +++++++++++------- .../SysTray-X-app/preferencesdialog.cpp | 195 ++++-- .../SysTray-X-app/preferencesdialog.h | 90 ++- app/SysTray-X/SysTray-X-app/systrayx.cpp | 68 +- app/SysTray-X/SysTray-X-app/systrayxicon.cpp | 367 ++++++++--- app/SysTray-X/SysTray-X-app/systrayxicon.h | 92 ++- app/SysTray-X/SysTray-X-app/systrayxlink.cpp | 127 ++-- app/SysTray-X/SysTray-X-app/systrayxlink.h | 53 +- .../SysTray-X-app/systrayxstatusnotifier.cpp | 366 ++++++++--- .../SysTray-X-app/systrayxstatusnotifier.h | 91 ++- webext/_locales/en-US/messages.json | 59 +- webext/background.js | 10 + webext/options.html | 80 ++- webext/options.js | 45 +- 20 files changed, 2214 insertions(+), 1047 deletions(-) create mode 100644 app/SysTray-X/SysTray-X-app/files/icons/new-indicator-round.png create mode 100644 app/SysTray-X/SysTray-X-app/files/icons/new-indicator-star-close.png create mode 100644 app/SysTray-X/SysTray-X-app/files/icons/new-indicator-star-open.png diff --git a/app/SysTray-X/SysTray-X-app/SysTray-X.qrc b/app/SysTray-X/SysTray-X-app/SysTray-X.qrc index 064c2de..13dffbe 100644 --- a/app/SysTray-X/SysTray-X-app/SysTray-X.qrc +++ b/app/SysTray-X/SysTray-X-app/SysTray-X.qrc @@ -20,5 +20,8 @@ languages/SysTray-X.pt-BR.qm files/icons/blank-icon-dark.png files/icons/Thunderbird115.png + files/icons/new-indicator-round.png + files/icons/new-indicator-star-close.png + files/icons/new-indicator-star-open.png diff --git a/app/SysTray-X/SysTray-X-app/files/icons/new-indicator-round.png b/app/SysTray-X/SysTray-X-app/files/icons/new-indicator-round.png new file mode 100644 index 0000000000000000000000000000000000000000..55bc201d327aacd5495548aa43f0e5ccc23c3c96 GIT binary patch literal 6738 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 literal 0 HcmV?d00001 diff --git a/app/SysTray-X/SysTray-X-app/files/icons/new-indicator-star-open.png b/app/SysTray-X/SysTray-X-app/files/icons/new-indicator-star-open.png new file mode 100644 index 0000000000000000000000000000000000000000..da0ee7d66cd247edca2dcadb93dde8423720e805 GIT binary patch literal 11510 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 BX 0 0 - 555 + 463 531 @@ -23,7 +23,7 @@ :/files/icons/SysTray-X.png:/files/icons/SysTray-X.png - + @@ -348,241 +348,7 @@ - - - - Number properties - - - - - - Display unread message count - - - true - - - - - - - - - - - Number color - - - - - - - Qt::NoFocus - - - - - - - - - - - - - - Number size - - - - - - - 1 - - - 999 - - - 10 - - - - - - - - - - - Alignment - - - - - - - 4 - - - - Top left - - - - - Top centre - - - - - Top right - - - - - Middle left - - - - - Middle centre - - - - - Middle right - - - - - Bottom left - - - - - Bottom centre - - - - - Bottom right - - - - - - - - - - - - - - Margins (left, top, right, bottom): - - - - - - - - - 999 - - - - - - - 999 - - - - - - - 999 - - - - - - - 999 - - - - - - - - - - - - - Startup delay - - - - - - - 0 - - - 99 - - - 5 - - - - - - - - - - - - Count type - - - - - - - - Unread - - - true - - - countTypeGroup - - - - - - - New - - - countTypeGroup - - - - - - - - - + Qt::Vertical @@ -595,7 +361,7 @@ - + Theme @@ -824,6 +590,367 @@ + + + Count + + + + + + + + Show message count + + + true + + + + + + + Show new indicator + + + + + + + + + Startup delay + + + + + + + 0 + + + 99 + + + 5 + + + + + + + + + + + Count type + + + + + + + + Unread + + + true + + + countTypeGroup + + + + + + + New + + + countTypeGroup + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Number properties + + + + + + + + Margins (left, top, right, bottom): + + + + + + + + + 999 + + + + + + + 999 + + + + + + + 999 + + + + + + + 999 + + + + + + + + + + + + + + + Number color + + + + + + + Qt::NoFocus + + + + + + + + + + + + + + Number size + + + + + + + 1 + + + 999 + + + 10 + + + + + + + + + + + Alignment + + + + + + + 4 + + + + Top left + + + + + Top centre + + + + + Top right + + + + + Middle left + + + + + Middle centre + + + + + Middle right + + + + + Bottom left + + + + + Bottom centre + + + + + Bottom right + + + + + + + + + + + + + + + New indicator + + + + + + + + Icon round + + + newIndicatorTypeGroup + + + + + + + Icon star + + + newIndicatorTypeGroup + + + + + + + + + Shade + + + true + + + newIndicatorTypeGroup + + + + + + + + + + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Vertical + + + + 20 + 104 + + + + + + + + Qt::Vertical + + + + 20 + 64 + + + + + + Apps @@ -1059,12 +1186,13 @@ - - - - - + + + + + + diff --git a/app/SysTray-X/SysTray-X-app/preferencesdialog.cpp b/app/SysTray-X/SysTray-X-app/preferencesdialog.cpp index 3a356cc..c7bb8c2 100644 --- a/app/SysTray-X/SysTray-X-app/preferencesdialog.cpp +++ b/app/SysTray-X/SysTray-X-app/preferencesdialog.cpp @@ -108,6 +108,19 @@ PreferencesDialog::PreferencesDialog( SysTrayXLink *link, Preferences *pref, QWi m_tmp_default_icon_data = QByteArray(); m_tmp_default_icon_mime = QString(); + /* + * Set theme button Ids + */ + m_ui->themeGroup->setId( m_ui->lightRadioButton, Preferences::PREF_THEME_LIGHT ); + m_ui->themeGroup->setId( m_ui->darkRadioButton, Preferences::PREF_THEME_DARK ); + + /* + * Set new indicator button Ids + */ + m_ui->newIndicatorTypeGroup->setId( m_ui->newIconRoundRadioButton, Preferences::PREF_NEW_INDICATOR_ROUND ); + m_ui->newIndicatorTypeGroup->setId( m_ui->newIconStarRadioButton, Preferences::PREF_NEW_INDICATOR_STAR ); + m_ui->newIndicatorTypeGroup->setId( m_ui->newShadeRadioButton, Preferences::PREF_NEW_INDICATOR_SHADE); + /* * Signals and slots */ @@ -115,6 +128,8 @@ PreferencesDialog::PreferencesDialog( SysTrayXLink *link, Preferences *pref, QWi connect( m_ui->chooseCustomButton, &QPushButton::clicked, this, &PreferencesDialog::slotFileSelect ); connect( m_ui->numberColorPushButton, &QPushButton::clicked, this, &PreferencesDialog::slotColorSelect ); + connect( m_ui->newShadeColorPushButton, &QPushButton::clicked, this, &PreferencesDialog::slotNewShadeColorSelect ); + connect( m_ui->savePushButton, &QPushButton::clicked, this, &PreferencesDialog::slotAccept); connect( m_ui->cancelPushButton, &QPushButton::clicked, this, &PreferencesDialog::slotReject); @@ -136,12 +151,6 @@ PreferencesDialog::PreferencesDialog( SysTrayXLink *link, Preferences *pref, QWi */ setStartupDelay( m_pref->getStartupDelay() ); - /* - * Set theme button Ids - */ - m_ui->themeGroup->setId( m_ui->lightRadioButton, Preferences::PREF_THEME_LIGHT); - m_ui->themeGroup->setId( m_ui->darkRadioButton, Preferences::PREF_THEME_DARK ); - /* * Set number alignment */ @@ -152,6 +161,11 @@ PreferencesDialog::PreferencesDialog( SysTrayXLink *link, Preferences *pref, QWi */ setNumberMargins( m_pref->getNumberMargins() ); + /* + * Set new shade color + */ + setNewShadeColor( m_pref->getNewShadeColor() ); + /* * Set the start and close application parameters */ @@ -365,7 +379,16 @@ void PreferencesDialog::setHideDefaultIcon( bool hide ) /* - * Set the enable number state + * Set the theme + */ +void PreferencesDialog::setTheme( Preferences::Theme theme ) +{ + ( m_ui->themeGroup->button( theme ) )->setChecked( true ); +} + + +/* + * Set the show number state */ void PreferencesDialog::setShowNumber( bool state ) { @@ -373,6 +396,33 @@ void PreferencesDialog::setShowNumber( bool state ) } +/* + * Set the show new indicator state + */ +void PreferencesDialog::setShowNewIndicator( bool state ) +{ + m_ui->showNewCheckBox->setChecked( state ); +} + + +/* + * Set the startup delay + */ +void PreferencesDialog::setStartupDelay( int delay ) +{ + m_ui->startupDelaySpinBox->setValue( delay ); +} + + +/* + * Set the count type + */ +void PreferencesDialog::setCountType( Preferences::CountType count_type ) +{ + ( m_ui->countTypeGroup->button( count_type ) )->setChecked( true ); +} + + /* * Set the number color */ @@ -418,29 +468,25 @@ void PreferencesDialog::setNumberMargins( QMargins margins ) /* - * Set the count type + * Set the new indicator type */ -void PreferencesDialog::setCountType( Preferences::CountType count_type ) +void PreferencesDialog::setNewIndicatorType( Preferences::NewIndicatorType new_indicator_type ) { - ( m_ui->countTypeGroup->button( count_type ) )->setChecked( true ); + ( m_ui->newIndicatorTypeGroup->button( new_indicator_type ) )->setChecked( true ); } /* - * Set the startup delay + * Set the new shade color */ -void PreferencesDialog::setStartupDelay( int delay ) +void PreferencesDialog::setNewShadeColor( QString color ) { - m_ui->startupDelaySpinBox->setValue( delay ); -} + m_new_shade_color = color; + QPixmap pixmap( 256, 256 ); + pixmap.fill( QColor( color ) ); -/* - * Set the theme - */ -void PreferencesDialog::setTheme( Preferences::Theme theme ) -{ - ( m_ui->themeGroup->button( theme ) )->setChecked( true ); + m_ui->newShadeColorPushButton->setIcon( QIcon( pixmap ) ); } @@ -506,18 +552,20 @@ void PreferencesDialog::slotAccept() m_pref->setStartMinimized( m_ui->startMinimizedCheckBox->isChecked() ); m_pref->setRestoreWindowPositions( m_ui->restorePositionscheckBox->isChecked() ); m_pref->setCloseType( static_cast< Preferences::CloseType >( m_ui->closeTypeGroup->checkedId() ) ); + Preferences::Theme theme = static_cast< Preferences::Theme >( m_ui->themeGroup->checkedId() ); + m_pref->setTheme( theme ); m_pref->setShowNumber( m_ui->showNumberCheckBox->isChecked() ); - m_pref->setNumberSize( m_ui->numberSizeSpinBox->value() ); - m_pref->setCountType( static_cast< Preferences::CountType >( m_ui->countTypeGroup->checkedId() ) ); + m_pref->setShowNewIndicator( m_ui->showNewCheckBox->isChecked() ); m_pref->setStartupDelay( m_ui->startupDelaySpinBox->value() ); + m_pref->setCountType( static_cast< Preferences::CountType >( m_ui->countTypeGroup->checkedId() ) ); + m_pref->setNumberSize( m_ui->numberSizeSpinBox->value() ); m_pref->setNumberAlignment( m_ui->numberAlignmentComboBox->currentIndex() ); m_pref->setNumberMargins( QMargins( m_ui->numberMarginLeftSpinBox->value(), m_ui->numberMarginTopSpinBox->value(), m_ui->numberMarginRightSpinBox->value(), m_ui->numberMarginBottomSpinBox->value() ) ); - - Preferences::Theme theme = static_cast< Preferences::Theme >( m_ui->themeGroup->checkedId() ); - m_pref->setTheme( theme ); + m_pref->setNewIndicatorType( static_cast< Preferences::NewIndicatorType >( m_ui->newIndicatorTypeGroup->checkedId() ) ); + m_pref->setNewShadeColor( m_new_shade_color ); QString startApp = m_ui->startAppLineEdit->text(); m_pref->setStartApp( startApp ); @@ -583,15 +631,19 @@ void PreferencesDialog::slotReject() setStartMinimized( m_pref->getStartMinimized() ); setRestoreWindowPositions( m_pref->getRestoreWindowPositions() ); setCloseType( m_pref->getCloseType() ); + setTheme( m_pref->getTheme() ); setShowNumber( m_pref->getShowNumber() ); + setShowNewIndicator( m_pref->getShowNewIndicator() ); + setStartupDelay( m_pref->getStartupDelay()); + setCountType( m_pref->getCountType() ); setNumberColor( m_pref->getNumberColor() ); setNumberSize( m_pref->getNumberSize()); - setCountType( m_pref->getCountType() ); - setStartupDelay( m_pref->getStartupDelay()); setNumberAlignment( m_pref->getNumberAlignment() ); setNumberMargins( m_pref->getNumberMargins() ); - setTheme( m_pref->getTheme() ); + setNewIndicatorType( m_pref->getNewIndicatorType() ); + setNewShadeColor( m_pref->getNewShadeColor() ); + setStartApp( m_pref->getStartApp() ); setStartAppArgs( m_pref->getStartAppArgs() ); setCloseApp( m_pref->getCloseApp() ); @@ -651,7 +703,7 @@ void PreferencesDialog::slotDefaultFileSelect() /* - * Handle the colro select button + * Handle the color select button */ void PreferencesDialog::slotColorSelect() { @@ -665,6 +717,21 @@ void PreferencesDialog::slotColorSelect() } +/* + * Handle the new shade color select button + */ +void PreferencesDialog::slotNewShadeColorSelect() +{ + QColor color( m_new_shade_color ); + QColorDialog color_dialog( color ); + + if( color_dialog.exec() ) + { + setNewShadeColor( color_dialog.selectedColor().name() ); + } +} + + /* * Handle the start application button */ @@ -719,6 +786,24 @@ void PreferencesDialog::slotBrowserVersion() } +/* + * Handle the start minimized change signal + */ +void PreferencesDialog::slotStartMinimizedChange() +{ + setStartMinimized( m_pref->getStartMinimized() ); +} + + +/* + * Handle the restore window positions change signal + */ +void PreferencesDialog::slotRestoreWindowPositionsChange() +{ + setRestoreWindowPositions( m_pref->getRestoreWindowPositions() ); +} + + /* * Handle the minimize type change signal */ @@ -737,23 +822,6 @@ void PreferencesDialog::slotMinimizeIconTypeChange() } -/* - * Handle the start minimized change signal - */ -void PreferencesDialog::slotStartMinimizedChange() -{ - setStartMinimized( m_pref->getStartMinimized() ); -} - - -/* - * Handle the restore window positions change signal - */ -void PreferencesDialog::slotRestoreWindowPositionsChange() -{ - setRestoreWindowPositions( m_pref->getRestoreWindowPositions() ); -} - /* * Handle the minimize on close change signal */ @@ -821,7 +889,16 @@ void PreferencesDialog::slotHideDefaultIconChange() /* - * Handle the enable number state change + * Handle the theme change signal + */ +void PreferencesDialog::slotThemeChange() +{ + setTheme( m_pref->getTheme() ); +} + + +/* + * Handle the show number state change */ void PreferencesDialog::slotShowNumberChange() { @@ -829,6 +906,15 @@ void PreferencesDialog::slotShowNumberChange() } +/* + * Handle the show new indicator state change + */ +void PreferencesDialog::slotShowNewIndicatorChange() +{ + setShowNewIndicator( m_pref->getShowNewIndicator() ); +} + + /* * Handle the number color change */ @@ -884,11 +970,20 @@ void PreferencesDialog::slotNumberMarginsChange() /* - * Handle the theme change signal + * Handle the new indicator type change */ -void PreferencesDialog::slotThemeChange() +void PreferencesDialog::slotNewIndicatorTypeChange() { - setTheme( m_pref->getTheme() ); + setNewIndicatorType( m_pref->getNewIndicatorType() ); +} + + +/* + * Handle the new shade color change + */ +void PreferencesDialog::slotNewShadeColorChange() +{ + setNewShadeColor( m_pref->getNewShadeColor() ); } diff --git a/app/SysTray-X/SysTray-X-app/preferencesdialog.h b/app/SysTray-X/SysTray-X-app/preferencesdialog.h index ae20b0e..2c452ac 100644 --- a/app/SysTray-X/SysTray-X-app/preferencesdialog.h +++ b/app/SysTray-X/SysTray-X-app/preferencesdialog.h @@ -146,6 +146,13 @@ class PreferencesDialog : public QDialog */ void setHideDefaultIcon( bool hide ); + /** + * @brief setTheme. Set the theme. + * + * @param theme The theme. + */ + void setTheme( Preferences::Theme theme ); + /** * @brief setShowNumber. Set the show number state. * @@ -153,6 +160,27 @@ class PreferencesDialog : public QDialog */ void setShowNumber( bool state ); + /** + * @brief setShowNewIndicator. Set the show new indicator state. + * + * @param state The state. + */ + void setShowNewIndicator( bool state ); + + /** + * @brief setCountType. Set the count type. + * + * @param count_type The count type. + */ + void setCountType( Preferences::CountType count_type ); + + /** + * @brief setStartupDelay. Set the startup delay. + * + * @param delay The delay. + */ + void setStartupDelay( int size ); + /** * @brief setNumberColor. Set the number color. * @@ -189,25 +217,18 @@ class PreferencesDialog : public QDialog QMargins getNumberMargins() const; /** - * @brief setCountType. Set the count type. + * @brief setNewIndicatorType. Set the count type. * - * @param count_type The count type. + * @param new_indicator_type The new indicator type. */ - void setCountType( Preferences::CountType count_type ); + void setNewIndicatorType( Preferences::NewIndicatorType new_indicator_type ); /** - * @brief setStartupDelay. Set the startup delay. + * @brief setNewShadeColor. Set the new shade color. * - * @param delay The delay. + * @param color The color. */ - void setStartupDelay( int size ); - - /** - * @brief setTheme. Set the theme. - * - * @param theme The theme. - */ - void setTheme( Preferences::Theme theme ); + void setNewShadeColor( QString color ); /** * @brief setStartApp. Set the start application. @@ -314,11 +335,31 @@ class PreferencesDialog : public QDialog */ void slotDefaultIconDataChange(); + /** + * @brief slotThemeChange. Slot for handling theme change. + */ + void slotThemeChange(); + + /** + * @brief slotCountTypeChange. Slot for handling count type change. + */ + void slotCountTypeChange(); + + /** + * @brief slotStartupDelayChange. Slot for handling startup delay change. + */ + void slotStartupDelayChange(); + /** * @brief slotShowNumberChange. Slot for handling show number state change. */ void slotShowNumberChange(); + /** + * @brief slotShowNewIndicatorChange. Slot for handling show new indicator state change. + */ + void slotShowNewIndicatorChange(); + /** * @brief slotNumberColorChange. Slot for handling number color change. */ @@ -340,19 +381,14 @@ class PreferencesDialog : public QDialog void slotNumberMarginsChange(); /** - * @brief slotCountTypeChange. Slot for handling count type change. + * @brief slotNewIndicatorTypeChange. Slot for handling new indicator type change. */ - void slotCountTypeChange(); + void slotNewIndicatorTypeChange(); /** - * @brief slotStartupDelayChange. Slot for handling startup delay change. + * @brief slotNewShadeColorChange. Slot for handling new shade color change. */ - void slotStartupDelayChange(); - - /** - * @brief slotThemeChange. Slot for handling theme change. - */ - void slotThemeChange(); + void slotNewShadeColorChange(); /** * @brief slotStartAppChange. Slot for handling start application change. @@ -401,6 +437,11 @@ class PreferencesDialog : public QDialog */ void slotColorSelect(); + /** + * @brief slotNewShadeColorSelect. Handle the choose new shade color button click. + */ + void slotNewShadeColorSelect(); + /** * @brief slotStartAppSelect. Handle the start application button click. */ @@ -452,6 +493,11 @@ class PreferencesDialog : public QDialog * @brief m_number_color. Temporary storage for the number color. */ QString m_number_color; + + /** + * @brief m_new_shade_color. Temporary storage for the new shade color. + */ + QString m_new_shade_color; }; #endif // PREFERENCESDIALOG_H diff --git a/app/SysTray-X/SysTray-X-app/systrayx.cpp b/app/SysTray-X/SysTray-X-app/systrayx.cpp index 2062616..2883d47 100644 --- a/app/SysTray-X/SysTray-X-app/systrayx.cpp +++ b/app/SysTray-X/SysTray-X-app/systrayx.cpp @@ -121,19 +121,22 @@ SysTrayX::SysTrayX( QObject *parent ) : QObject( parent ) connect( m_preferences, &Preferences::signalHideDefaultIconChange, m_pref_dialog, &PreferencesDialog::slotHideDefaultIconChange ); connect( m_preferences, &Preferences::signalIconTypeChange, m_pref_dialog, &PreferencesDialog::slotIconTypeChange ); connect( m_preferences, &Preferences::signalIconDataChange, m_pref_dialog, &PreferencesDialog::slotIconDataChange ); - connect( m_preferences, &Preferences::signalShowNumberChange, m_pref_dialog, &PreferencesDialog::slotShowNumberChange ); - connect( m_preferences, &Preferences::signalNumberColorChange, m_pref_dialog, &PreferencesDialog::slotNumberColorChange ); - connect( m_preferences, &Preferences::signalNumberSizeChange, m_pref_dialog, &PreferencesDialog::slotNumberSizeChange ); - connect( m_preferences, &Preferences::signalNumberAlignmentChange, m_pref_dialog, &PreferencesDialog::slotNumberAlignmentChange ); - connect( m_preferences, &Preferences::signalNumberMarginsChange, m_pref_dialog, &PreferencesDialog::slotNumberMarginsChange ); - connect( m_preferences, &Preferences::signalCountTypeChange, m_pref_dialog, &PreferencesDialog::slotCountTypeChange ); - connect( m_preferences, &Preferences::signalStartupDelayChange, m_pref_dialog, &PreferencesDialog::slotStartupDelayChange ); connect( m_preferences, &Preferences::signalMinimizeTypeChange, m_pref_dialog, &PreferencesDialog::slotMinimizeTypeChange ); connect( m_preferences, &Preferences::signalMinimizeIconTypeChange, m_pref_dialog, &PreferencesDialog::slotMinimizeIconTypeChange ); connect( m_preferences, &Preferences::signalStartMinimizedChange, m_pref_dialog, &PreferencesDialog::slotStartMinimizedChange ); connect( m_preferences, &Preferences::signalRestoreWindowPositionsChange, m_pref_dialog, &PreferencesDialog::slotRestoreWindowPositionsChange ); connect( m_preferences, &Preferences::signalCloseTypeChange, m_pref_dialog, &PreferencesDialog::slotCloseTypeChange ); connect( m_preferences, &Preferences::signalThemeChange, m_pref_dialog, &PreferencesDialog::slotThemeChange ); + connect( m_preferences, &Preferences::signalShowNumberChange, m_pref_dialog, &PreferencesDialog::slotShowNumberChange ); + connect( m_preferences, &Preferences::signalShowNewIndicatorChange, m_pref_dialog, &PreferencesDialog::slotShowNewIndicatorChange ); + connect( m_preferences, &Preferences::signalStartupDelayChange, m_pref_dialog, &PreferencesDialog::slotStartupDelayChange ); + connect( m_preferences, &Preferences::signalCountTypeChange, m_pref_dialog, &PreferencesDialog::slotCountTypeChange ); + connect( m_preferences, &Preferences::signalNumberColorChange, m_pref_dialog, &PreferencesDialog::slotNumberColorChange ); + connect( m_preferences, &Preferences::signalNumberSizeChange, m_pref_dialog, &PreferencesDialog::slotNumberSizeChange ); + connect( m_preferences, &Preferences::signalNumberAlignmentChange, m_pref_dialog, &PreferencesDialog::slotNumberAlignmentChange ); + connect( m_preferences, &Preferences::signalNumberMarginsChange, m_pref_dialog, &PreferencesDialog::slotNumberMarginsChange ); + connect( m_preferences, &Preferences::signalNewIndicatorTypeChange, m_pref_dialog, &PreferencesDialog::slotNewIndicatorTypeChange ); + connect( m_preferences, &Preferences::signalNewShadeColorChange, m_pref_dialog, &PreferencesDialog::slotNewShadeColorChange ); connect( m_preferences, &Preferences::signalStartAppChange, m_pref_dialog, &PreferencesDialog::slotStartAppChange ); connect( m_preferences, &Preferences::signalStartAppArgsChange, m_pref_dialog, &PreferencesDialog::slotStartAppArgsChange ); connect( m_preferences, &Preferences::signalCloseAppChange, m_pref_dialog, &PreferencesDialog::slotCloseAppChange ); @@ -145,19 +148,22 @@ SysTrayX::SysTrayX( QObject *parent ) : QObject( parent ) connect( m_preferences, &Preferences::signalHideDefaultIconChange, m_link, &SysTrayXLink::slotHideDefaultIconChange ); connect( m_preferences, &Preferences::signalIconTypeChange, m_link, &SysTrayXLink::slotIconTypeChange ); connect( m_preferences, &Preferences::signalIconDataChange, m_link, &SysTrayXLink::slotIconDataChange ); - connect( m_preferences, &Preferences::signalShowNumberChange, m_link, &SysTrayXLink::slotShowNumberChange ); - connect( m_preferences, &Preferences::signalNumberColorChange, m_link, &SysTrayXLink::slotNumberColorChange ); - connect( m_preferences, &Preferences::signalNumberSizeChange, m_link, &SysTrayXLink::slotNumberSizeChange ); - connect( m_preferences, &Preferences::signalNumberAlignmentChange, m_link, &SysTrayXLink::slotNumberAlignmentChange ); - connect( m_preferences, &Preferences::signalNumberMarginsChange, m_link, &SysTrayXLink::slotNumberMarginsChange ); - connect( m_preferences, &Preferences::signalCountTypeChange, m_link, &SysTrayXLink::slotCountTypeChange ); connect( m_preferences, &Preferences::signalMinimizeTypeChange, m_link, &SysTrayXLink::slotMinimizeTypeChange ); connect( m_preferences, &Preferences::signalMinimizeIconTypeChange, m_link, &SysTrayXLink::slotMinimizeIconTypeChange ); - connect( m_preferences, &Preferences::signalStartupDelayChange, m_link, &SysTrayXLink::slotStartupDelayChange ); connect( m_preferences, &Preferences::signalStartMinimizedChange, m_link, &SysTrayXLink::slotStartMinimizedChange ); connect( m_preferences, &Preferences::signalRestoreWindowPositionsChange, m_link, &SysTrayXLink::slotRestoreWindowPositionsChange ); connect( m_preferences, &Preferences::signalCloseTypeChange, m_link, &SysTrayXLink::slotCloseTypeChange ); connect( m_preferences, &Preferences::signalThemeChange, m_link, &SysTrayXLink::slotThemeChange ); + connect( m_preferences, &Preferences::signalShowNumberChange, m_link, &SysTrayXLink::slotShowNumberChange ); + connect( m_preferences, &Preferences::signalShowNewIndicatorChange, m_link, &SysTrayXLink::slotShowNewIndicatorChange ); + connect( m_preferences, &Preferences::signalStartupDelayChange, m_link, &SysTrayXLink::slotStartupDelayChange ); + connect( m_preferences, &Preferences::signalCountTypeChange, m_link, &SysTrayXLink::slotCountTypeChange ); + connect( m_preferences, &Preferences::signalNumberColorChange, m_link, &SysTrayXLink::slotNumberColorChange ); + connect( m_preferences, &Preferences::signalNumberSizeChange, m_link, &SysTrayXLink::slotNumberSizeChange ); + connect( m_preferences, &Preferences::signalNumberAlignmentChange, m_link, &SysTrayXLink::slotNumberAlignmentChange ); + connect( m_preferences, &Preferences::signalNumberMarginsChange, m_link, &SysTrayXLink::slotNumberMarginsChange ); + connect( m_preferences, &Preferences::signalNewIndicatorTypeChange, m_link, &SysTrayXLink::slotNewIndicatorTypeChange ); + connect( m_preferences, &Preferences::signalNewShadeColorChange, m_link, &SysTrayXLink::slotNewShadeColorChange ); connect( m_preferences, &Preferences::signalStartAppChange, m_link, &SysTrayXLink::slotStartAppChange ); connect( m_preferences, &Preferences::signalStartAppArgsChange, m_link, &SysTrayXLink::slotStartAppArgsChange ); connect( m_preferences, &Preferences::signalCloseAppChange, m_link, &SysTrayXLink::slotCloseAppChange ); @@ -204,18 +210,14 @@ SysTrayX::SysTrayX( QObject *parent ) : QObject( parent ) //slotLoadLanguage( "nl" ); //slotLoadLanguage( "pt-BR" ); //slotLoadLanguage( "ru" ); - slotSelectIconObject( false ); + slotSelectIconObject( true ); -<<<<<<< HEAD slotMailCount( 10, 1 ); -======= - slotSetUnreadMail( 10 ); - - m_preferences->setStartApp( "/home/maxime/test.sh" ); - m_preferences->setStartAppArgs( "/home/maxime/startup.txt StartupString" ); - slotStartApp(); ->>>>>>> develop */ +// m_preferences->setStartApp( "/home/maxime/test.sh" ); +// m_preferences->setStartAppArgs( "/home/maxime/startup.txt StartupString" ); +// slotStartApp(); + } @@ -321,12 +323,15 @@ void SysTrayX::showTrayIcon() connect( m_preferences, &Preferences::signalDefaultIconDataChange, m_tray_icon, &SysTrayXIcon::slotDefaultIconDataChange ); connect( m_preferences, &Preferences::signalIconTypeChange, m_tray_icon, &SysTrayXIcon::slotIconTypeChange ); connect( m_preferences, &Preferences::signalIconDataChange, m_tray_icon, &SysTrayXIcon::slotIconDataChange ); + connect( m_preferences, &Preferences::signalThemeChange, m_tray_icon, &SysTrayXIcon::slotThemeChange ); connect( m_preferences, &Preferences::signalShowNumberChange, m_tray_icon, &SysTrayXIcon::slotShowNumberChange ); + connect( m_preferences, &Preferences::signalShowNewIndicatorChange, m_tray_icon, &SysTrayXIcon::slotShowNewIndicatorChange ); connect( m_preferences, &Preferences::signalNumberColorChange, m_tray_icon, &SysTrayXIcon::slotNumberColorChange ); connect( m_preferences, &Preferences::signalNumberSizeChange, m_tray_icon, &SysTrayXIcon::slotNumberSizeChange ); connect( m_preferences, &Preferences::signalNumberAlignmentChange, m_tray_icon, &SysTrayXIcon::slotNumberAlignmentChange ); connect( m_preferences, &Preferences::signalNumberMarginsChange, m_tray_icon, &SysTrayXIcon::slotNumberMarginsChange ); - connect( m_preferences, &Preferences::signalThemeChange, m_tray_icon, &SysTrayXIcon::slotThemeChange ); + connect( m_preferences, &Preferences::signalNewIndicatorTypeChange, m_tray_icon, &SysTrayXIcon::slotNewIndicatorTypeChange ); + connect( m_preferences, &Preferences::signalNewShadeColorChange, m_tray_icon, &SysTrayXIcon::slotNewShadeColorChange ); connect( m_link, &SysTrayXLink::signalMailCount, m_tray_icon, &SysTrayXIcon::slotMailCount ); @@ -358,12 +363,15 @@ void SysTrayX::hideTrayIcon() disconnect( m_preferences, &Preferences::signalDefaultIconDataChange, m_tray_icon, &SysTrayXIcon::slotDefaultIconDataChange ); disconnect( m_preferences, &Preferences::signalIconTypeChange, m_tray_icon, &SysTrayXIcon::slotIconTypeChange ); disconnect( m_preferences, &Preferences::signalIconDataChange, m_tray_icon, &SysTrayXIcon::slotIconDataChange ); + disconnect( m_preferences, &Preferences::signalThemeChange, m_tray_icon, &SysTrayXIcon::slotThemeChange ); disconnect( m_preferences, &Preferences::signalShowNumberChange, m_tray_icon, &SysTrayXIcon::slotShowNumberChange ); + disconnect( m_preferences, &Preferences::signalShowNewIndicatorChange, m_tray_icon, &SysTrayXIcon::slotShowNewIndicatorChange ); disconnect( m_preferences, &Preferences::signalNumberColorChange, m_tray_icon, &SysTrayXIcon::slotNumberColorChange ); disconnect( m_preferences, &Preferences::signalNumberSizeChange, m_tray_icon, &SysTrayXIcon::slotNumberSizeChange ); disconnect( m_preferences, &Preferences::signalNumberAlignmentChange, m_tray_icon, &SysTrayXIcon::slotNumberAlignmentChange ); disconnect( m_preferences, &Preferences::signalNumberMarginsChange, m_tray_icon, &SysTrayXIcon::slotNumberMarginsChange ); - disconnect( m_preferences, &Preferences::signalThemeChange, m_tray_icon, &SysTrayXIcon::slotThemeChange ); + disconnect( m_preferences, &Preferences::signalNewIndicatorTypeChange, m_tray_icon, &SysTrayXIcon::slotNewIndicatorTypeChange ); + disconnect( m_preferences, &Preferences::signalNewShadeColorChange, m_tray_icon, &SysTrayXIcon::slotNewShadeColorChange ); disconnect( m_link, &SysTrayXLink::signalMailCount, m_tray_icon, &SysTrayXIcon::slotMailCount ); @@ -433,12 +441,15 @@ void SysTrayX::showKdeTrayIcon() connect( m_preferences, &Preferences::signalHideDefaultIconChange, m_kde_tray_icon, &SysTrayXStatusNotifier::slotHideDefaultIconChange ); connect( m_preferences, &Preferences::signalIconTypeChange, m_kde_tray_icon, &SysTrayXStatusNotifier::slotIconTypeChange ); connect( m_preferences, &Preferences::signalIconDataChange, m_kde_tray_icon, &SysTrayXStatusNotifier::slotIconDataChange ); + connect( m_preferences, &Preferences::signalThemeChange, m_kde_tray_icon, &SysTrayXStatusNotifier::slotThemeChange ); connect( m_preferences, &Preferences::signalShowNumberChange, m_kde_tray_icon, &SysTrayXStatusNotifier::slotShowNumberChange ); + connect( m_preferences, &Preferences::signalShowNewIndicatorChange, m_kde_tray_icon, &SysTrayXStatusNotifier::slotShowNewIndicatorChange ); connect( m_preferences, &Preferences::signalNumberColorChange, m_kde_tray_icon, &SysTrayXStatusNotifier::slotNumberColorChange ); connect( m_preferences, &Preferences::signalNumberSizeChange, m_kde_tray_icon, &SysTrayXStatusNotifier::slotNumberSizeChange ); connect( m_preferences, &Preferences::signalNumberAlignmentChange, m_kde_tray_icon, &SysTrayXStatusNotifier::slotNumberAlignmentChange ); connect( m_preferences, &Preferences::signalNumberMarginsChange, m_kde_tray_icon, &SysTrayXStatusNotifier::slotNumberMarginsChange ); - connect( m_preferences, &Preferences::signalThemeChange, m_kde_tray_icon, &SysTrayXStatusNotifier::slotThemeChange ); + connect( m_preferences, &Preferences::signalNewIndicatorTypeChange, m_kde_tray_icon, &SysTrayXStatusNotifier::slotNewIndicatorTypeChange ); + connect( m_preferences, &Preferences::signalNewShadeColorChange, m_kde_tray_icon, &SysTrayXStatusNotifier::slotNewShadeColorChange ); connect( m_link, &SysTrayXLink::signalMailCount, m_kde_tray_icon, &SysTrayXStatusNotifier::slotMailCount ); @@ -469,12 +480,15 @@ void SysTrayX::hideKdeTrayIcon() disconnect( m_preferences, &Preferences::signalHideDefaultIconChange, m_kde_tray_icon, &SysTrayXStatusNotifier::slotHideDefaultIconChange ); disconnect( m_preferences, &Preferences::signalIconTypeChange, m_kde_tray_icon, &SysTrayXStatusNotifier::slotIconTypeChange ); disconnect( m_preferences, &Preferences::signalIconDataChange, m_kde_tray_icon, &SysTrayXStatusNotifier::slotIconDataChange ); + disconnect( m_preferences, &Preferences::signalThemeChange, m_kde_tray_icon, &SysTrayXStatusNotifier::slotThemeChange ); disconnect( m_preferences, &Preferences::signalShowNumberChange, m_kde_tray_icon, &SysTrayXStatusNotifier::slotShowNumberChange ); + disconnect( m_preferences, &Preferences::signalShowNewIndicatorChange, m_kde_tray_icon, &SysTrayXStatusNotifier::slotShowNewIndicatorChange ); disconnect( m_preferences, &Preferences::signalNumberColorChange, m_kde_tray_icon, &SysTrayXStatusNotifier::slotNumberColorChange ); disconnect( m_preferences, &Preferences::signalNumberSizeChange, m_kde_tray_icon, &SysTrayXStatusNotifier::slotNumberSizeChange ); disconnect( m_preferences, &Preferences::signalNumberAlignmentChange, m_kde_tray_icon, &SysTrayXStatusNotifier::slotNumberAlignmentChange ); disconnect( m_preferences, &Preferences::signalNumberMarginsChange, m_kde_tray_icon, &SysTrayXStatusNotifier::slotNumberMarginsChange ); - disconnect( m_preferences, &Preferences::signalThemeChange, m_kde_tray_icon, &SysTrayXStatusNotifier::slotThemeChange ); + disconnect( m_preferences, &Preferences::signalNewIndicatorTypeChange, m_kde_tray_icon, &SysTrayXStatusNotifier::slotNewIndicatorTypeChange ); + disconnect( m_preferences, &Preferences::signalNewShadeColorChange, m_kde_tray_icon, &SysTrayXStatusNotifier::slotNewShadeColorChange ); disconnect( m_link, &SysTrayXLink::signalMailCount, m_kde_tray_icon, &SysTrayXStatusNotifier::slotMailCount ); diff --git a/app/SysTray-X/SysTray-X-app/systrayxicon.cpp b/app/SysTray-X/SysTray-X-app/systrayxicon.cpp index 22b0a8b..f98ca4b 100644 --- a/app/SysTray-X/SysTray-X-app/systrayxicon.cpp +++ b/app/SysTray-X/SysTray-X-app/systrayxicon.cpp @@ -31,12 +31,18 @@ SysTrayXIcon::SysTrayXIcon( SysTrayXLink* link, Preferences* pref, QObject* pare m_unread_mail = 0; m_new_mail = 0; + m_pixmap_clean = QPixmap(); + m_pixmap_count = QPixmap(); + m_image_indicator = QImage(); + m_show_number = m_pref->getShowNumber(); + m_show_new_indicator = m_pref->getShowNewIndicator(); m_number_color = m_pref->getNumberColor(); m_number_size = m_pref->getNumberSize(); m_number_alignment = Qt::AlignHCenter | Qt::AlignVCenter; setNumberAlignment( m_pref->getNumberAlignment() ); m_number_margins = m_pref->getNumberMargins(); + m_new_shade_color = m_pref->getNewShadeColor(); setToolTip( tr( "SysTray-X: Thunderbird add-on companion app" ) ); @@ -56,6 +62,11 @@ void SysTrayXIcon::setDefaultIconType( Preferences::DefaultIconType icon_type */ m_default_icon_type = icon_type; + /* + * Set base params + */ + renderBase(); + /* * Render and set a new icon in the tray */ @@ -91,6 +102,11 @@ void SysTrayXIcon::setDefaultIconData( const QByteArray& icon_data ) */ m_default_icon_data = icon_data; + /* + * Set base params + */ + renderBase(); + /* * Render and set a new icon in the tray */ @@ -111,6 +127,11 @@ void SysTrayXIcon::setIconType( Preferences::IconType icon_type ) */ m_icon_type = icon_type; + /* + * Set base params + */ + renderBase(); + /* * Render and set a new icon in the tray */ @@ -146,6 +167,11 @@ void SysTrayXIcon::setIconData( const QByteArray& icon_data ) */ m_icon_data = icon_data; + /* + * Set base params + */ + renderBase(); + /* * Render and set a new icon in the tray */ @@ -174,6 +200,26 @@ void SysTrayXIcon::showNumber( bool state ) } +/* + * Enable/disable new indicator + */ +void SysTrayXIcon::showNewIndicator( bool state ) +{ + if( m_show_new_indicator != state ) + { + /* + * Store the new value + */ + m_show_new_indicator = state; + + /* + * Render and set a new icon in the tray + */ + renderIcon(); + } +} + + /* * Set number color */ @@ -276,6 +322,50 @@ void SysTrayXIcon::setNumberMargins( QMargins margins ) } +/* + * Set the new indicator type + */ +void SysTrayXIcon::setNewIndicatorType( Preferences::NewIndicatorType new_indicator_type ) +{ + if( m_new_indicator_type != new_indicator_type ) + { + /* + * Store the new value + */ + m_new_indicator_type = new_indicator_type; + + /* + * Set base params + */ + renderBase(); + + /* + * Render and set a new icon in the tray + */ + renderIcon(); + } +} + +/* + * Set new shade color + */ +void SysTrayXIcon::setNewShadeColor( const QString& color ) +{ + if( m_new_shade_color != color ) + { + /* + * Store the new value + */ + m_new_shade_color = color; + + /* + * Render and set a new icon in the tray + */ + renderIcon(); + } +} + + /* * Set the number of unread/new mails */ @@ -297,6 +387,155 @@ void SysTrayXIcon::setMailCount( int unread_mail, int new_mail ) } +/* + * Set the base for rendering + */ +void SysTrayXIcon::renderBase() +{ + /* + * Set the clean icon + */ + switch( m_default_icon_type ) + { + case Preferences::PREF_DEFAULT_ICON_DEFAULT: + { + QString version = m_pref->getBrowserVersion(); + + if( version.section( '.', 0, 0 ).toInt() < 115 ) + { + m_pixmap_clean = QPixmap( ":/files/icons/Thunderbird.png" ); + } + else + { + m_pixmap_clean = QPixmap( ":/files/icons/Thunderbird115.png" ); + } + break; + } + + case Preferences::PREF_DEFAULT_ICON_HIDE: + { + m_pixmap_clean = QPixmap(); + break; + } + + case Preferences::PREF_DEFAULT_ICON_CUSTOM: + { + m_pixmap_clean.loadFromData( m_default_icon_data ); + break; + } + } + + /* + * Set the count icon + */ + switch( m_icon_type ) + { + case Preferences::PREF_BLANK_ICON: + { + Preferences::Theme theme = m_pref->getTheme(); + + if( theme == Preferences::PREF_THEME_LIGHT ) + { + m_pixmap_count = QPixmap( ":/files/icons/blank-icon.png" ); + } + else + { + m_pixmap_count = QPixmap( ":/files/icons/blank-icon-dark.png" ); + } + + break; + } + + case Preferences::PREF_NEWMAIL_ICON: + { + QIcon new_mail = QIcon::fromTheme("mail-unread", QIcon(":/files/icons/mail-unread.png")); + m_pixmap_count = new_mail.pixmap( 256, 256 ); + break; + } + + case Preferences::PREF_CUSTOM_ICON: + { + m_pixmap_count.loadFromData( m_icon_data ); + break; + } + + case Preferences::PREF_NO_ICON: + { + QPixmap lookthrough( 256, 256 ); + lookthrough.fill( Qt::transparent ); + m_pixmap_count = lookthrough; + break; + } + + case Preferences::PREF_TB_ICON: + { + QString version = m_pref->getBrowserVersion(); + + if( version.section( '.', 0, 0 ).toInt() < 115 ) + { + m_pixmap_count = QPixmap( ":/files/icons/Thunderbird.png" ); + } + else + { + m_pixmap_count = QPixmap( ":/files/icons/Thunderbird115.png" ); + } + break; + } + } + + /* + * Set the new indicator + */ + switch( m_pref->getNewIndicatorType() ) + { + case Preferences::PREF_NEW_INDICATOR_ROUND: + { + m_image_indicator = QImage( ":/files/icons/new-indicator-round.png" ); + break; + } + + case Preferences::PREF_NEW_INDICATOR_STAR: + { + m_image_indicator = QImage( ":/files/icons/new-indicator-star-close.png" ); + break; + } + + default: + { + m_image_indicator = QImage(); + break; + } + } +} + + +/* + * Shade the pixmap + */ +void SysTrayXIcon::shade( QPixmap& pixmap ) +{ + QPainter painter( &pixmap ); + painter.setCompositionMode( painter.CompositionMode_Overlay ); + painter.fillRect( pixmap.rect(), QColor( m_new_shade_color ) ); + painter.end(); +} + + +/* + * Indicator on the pixmap + */ +void SysTrayXIcon::indicator( QPixmap& pixmap ) +{ + int size_x = pixmap.width() / 2; + int size_y = pixmap.width() / 2; + QRect topRight( size_x, 0, size_x, size_y ); + + QPainter painter( &pixmap ); + painter.drawImage( topRight, m_image_indicator ); + painter.end(); +} + + /* * Set and render the icon in the system tray */ @@ -316,91 +555,22 @@ void SysTrayXIcon::renderIcon() if( count > 0 ) { - switch( m_icon_type ) - { - case Preferences::PREF_BLANK_ICON: - { - Preferences::Theme theme = m_pref->getTheme(); - - if( theme == Preferences::PREF_THEME_LIGHT ) - { - pixmap = QPixmap( ":/files/icons/blank-icon.png" ); - } - else - { - pixmap = QPixmap( ":/files/icons/blank-icon-dark.png" ); - } - - break; - } - - case Preferences::PREF_NEWMAIL_ICON: - { - QIcon new_mail = QIcon::fromTheme("mail-unread", QIcon(":/files/icons/mail-unread.png")); - pixmap = new_mail.pixmap( 256, 256 ); - break; - } - - case Preferences::PREF_CUSTOM_ICON: - { - pixmap.loadFromData( m_icon_data ); - break; - } - - case Preferences::PREF_NO_ICON: - { - QPixmap lookthrough( 256, 256 ); - lookthrough.fill( Qt::transparent ); - pixmap = lookthrough; - break; - } - - case Preferences::PREF_TB_ICON: - { - QString version = m_pref->getBrowserVersion(); - - if( version.section( '.', 0, 0 ).toInt() < 115 ) - { - pixmap = QPixmap( ":/files/icons/Thunderbird.png" ); - } - else - { - pixmap = QPixmap( ":/files/icons/Thunderbird115.png" ); - } - break; - } - } + pixmap = m_pixmap_count; } else { - switch( m_default_icon_type ) + pixmap = m_pixmap_clean; + } + + if( m_show_new_indicator && m_new_mail > 0 ) + { + if( m_pref->getNewIndicatorType() == Preferences::PREF_NEW_INDICATOR_SHADE ) { - case Preferences::PREF_DEFAULT_ICON_DEFAULT: - { - QString version = m_pref->getBrowserVersion(); - - if( version.section( '.', 0, 0 ).toInt() < 115 ) - { - pixmap = QPixmap( ":/files/icons/Thunderbird.png" ); - } - else - { - pixmap = QPixmap( ":/files/icons/Thunderbird115.png" ); - } - break; - } - - case Preferences::PREF_DEFAULT_ICON_HIDE: - { - pixmap = QPixmap(); - break; - } - - case Preferences::PREF_DEFAULT_ICON_CUSTOM: - { - pixmap.loadFromData( m_default_icon_data ); - break; - } + shade( pixmap ); + } + else + { + indicator( pixmap ); } } @@ -485,7 +655,16 @@ void SysTrayXIcon::slotIconDataChange() /* - * Handle the enable number state change signal + * Handle the theme change signal + */ +void SysTrayXIcon::slotThemeChange() +{ + renderIcon(); +} + + +/* + * Handle the show number state change signal */ void SysTrayXIcon::slotShowNumberChange() { @@ -493,6 +672,15 @@ void SysTrayXIcon::slotShowNumberChange() } +/* + * Handle the show new indicator state change signal + */ +void SysTrayXIcon::slotShowNewIndicatorChange() +{ + showNewIndicator( m_pref->getShowNewIndicator() ); +} + + /* * Handle the number color change signal */ @@ -530,11 +718,20 @@ void SysTrayXIcon::slotNumberMarginsChange() /* - * Handle the theme change signal + * Handle the new indicator type change signal */ -void SysTrayXIcon::slotThemeChange() +void SysTrayXIcon::slotNewIndicatorTypeChange() { - renderIcon(); + setNewIndicatorType( m_pref->getNewIndicatorType() ); +} + + +/* + * Handle the new shade color change signal + */ +void SysTrayXIcon::slotNewShadeColorChange() +{ + setNewShadeColor( m_pref->getNewShadeColor() ); } diff --git a/app/SysTray-X/SysTray-X-app/systrayxicon.h b/app/SysTray-X/SysTray-X-app/systrayxicon.h index d9924e9..406def6 100644 --- a/app/SysTray-X/SysTray-X-app/systrayxicon.h +++ b/app/SysTray-X/SysTray-X-app/systrayxicon.h @@ -82,6 +82,13 @@ class SysTrayXIcon : public QSystemTrayIcon */ void showNumber( bool state ); + /** + * @brief showNewIndicator. Set the show new indicator state. + * + * @param state Show / hide. + */ + void showNewIndicator( bool state ); + /** * @brief setNumberColor. Set the number color. * @@ -110,6 +117,20 @@ class SysTrayXIcon : public QSystemTrayIcon */ void setNumberMargins( QMargins margins ); + /** + * @brief setNewShadeColor. Set the new shade color. + * + * @param color The color. + */ + void setNewShadeColor( const QString& color ); + + /** + * @brief setNewIndicatorType. Set the new indicator type. + * + * @param new_indicator_type The new indicator type + */ + void setNewIndicatorType( Preferences::NewIndicatorType new_indicator_type ); + /** * @brief setMailCount. Set the number of unread/new mails. * @@ -121,7 +142,26 @@ class SysTrayXIcon : public QSystemTrayIcon private: /** - * @brief setIcon. Set a new rendered icon. + * @brief renderBase. Set the base pixmaps for the icon. + */ + void renderBase(); + + /** + * @brief shade. Shade the icon. + * + * @param pixmap Pixmap to shade. + */ + void shade( QPixmap& pixmap ); + + /** + * @brief indicator. Set the new mail indicator. + * + * @param pixmap Pixmap to put the indicator on. + */ + void indicator( QPixmap& pixmap ); + + /** + * @brief renderIcon. Render the icon. */ void renderIcon(); @@ -162,11 +202,21 @@ class SysTrayXIcon : public QSystemTrayIcon */ void slotIconDataChange(); + /** + * @brief slotThemeChange. Slot for handling theme change signals. + */ + void slotThemeChange(); + /** * @brief slotShowNumberChange. Slot for handling show number change signals. */ void slotShowNumberChange(); + /** + * @brief slotShowNewIndicatorChange. Slot for handling show new indicator change signals. + */ + void slotShowNewIndicatorChange(); + /** * @brief slotNumberColorChange. Slot for handling number color change signals. */ @@ -188,9 +238,14 @@ class SysTrayXIcon : public QSystemTrayIcon void slotNumberMarginsChange(); /** - * @brief slotThemeChange. Slot for handling theme change signals. + * @brief slotNewIndicatorTypeChange. Slot for handling new indicator type change signals. */ - void slotThemeChange(); + void slotNewIndicatorTypeChange(); + + /** + * @brief slotNewShadeColorChange. Slot for handling new shade color change signals. + */ + void slotNewShadeColorChange(); private slots: @@ -213,6 +268,21 @@ class SysTrayXIcon : public QSystemTrayIcon */ Preferences* m_pref; + /** + * @brief m_pixmap_count Pixmap to be used when counting. + */ + QPixmap m_pixmap_count; + + /** + * @brief m_pixmap_clean Pixmap to be used when there is no new mail. + */ + QPixmap m_pixmap_clean; + + /** + * @brief m_image_indicator Image to be used as new mail indicator. + */ + QImage m_image_indicator; + /** * @brief m_default_icon_type. Storage for the default icon type. */ @@ -248,6 +318,11 @@ class SysTrayXIcon : public QSystemTrayIcon */ bool m_show_number; + /** + * @brief m_show_new_indicator. Show the new indicator. + */ + bool m_show_new_indicator; + /** * @brief m_number_color. Color of the unread/new mail number. */ @@ -268,6 +343,17 @@ class SysTrayXIcon : public QSystemTrayIcon */ QMargins m_number_margins; + /** + * @brief m_new_indicator_type. Storage for the new indicator type. + */ + Preferences::NewIndicatorType m_new_indicator_type; + + + /** + * @brief m_new_shade_color. Color of the new shade. + */ + QString m_new_shade_color; + /** * @brief m_unread_mail. Storage for the number of unread mails. */ diff --git a/app/SysTray-X/SysTray-X-app/systrayxlink.cpp b/app/SysTray-X/SysTray-X-app/systrayxlink.cpp index f3af352..7a460c8 100644 --- a/app/SysTray-X/SysTray-X-app/systrayxlink.cpp +++ b/app/SysTray-X/SysTray-X-app/systrayxlink.cpp @@ -691,6 +691,16 @@ void SysTrayXLink::DecodePreferences( const QJsonObject& pref ) m_pref->setShowNumber( show_number ); } + if( pref.contains( "showNewIndicator" ) && pref[ "showNewIndicator" ].isString() ) + { + bool show_new_indicator = pref[ "showNewIndicator" ].toString() == "true"; + + /* + * Store the new show new indicator state + */ + m_pref->setShowNewIndicator( show_new_indicator ); + } + if( pref.contains( "numberColor" ) && pref[ "numberColor" ].isString() ) { QString number_color = pref[ "numberColor" ].toString(); @@ -915,7 +925,9 @@ void SysTrayXLink::EncodePreferences( const Preferences& pref ) prefObject.insert("iconType", QJsonValue::fromVariant( QString::number( pref.getIconType() ) ) ); prefObject.insert("iconMime", QJsonValue::fromVariant( pref.getIconMime() ) ); prefObject.insert("icon", QJsonValue::fromVariant( QString( pref.getIconData().toBase64() ) ) ); + prefObject.insert("theme", QJsonValue::fromVariant( QString::number( pref.getTheme() ) ) ); prefObject.insert("showNumber", QJsonValue::fromVariant( QString( pref.getShowNumber() ? "true" : "false" ) ) ); + prefObject.insert("showNewIndicator", QJsonValue::fromVariant( QString( pref.getShowNewIndicator() ? "true" : "false" ) ) ); prefObject.insert("numberColor", QJsonValue::fromVariant( QString( pref.getNumberColor() ) ) ); prefObject.insert("numberSize", QJsonValue::fromVariant( QString::number( pref.getNumberSize() ) ) ); prefObject.insert("numberAlignment", QJsonValue::fromVariant( QString::number( pref.getNumberAlignment() ) ) ); @@ -929,7 +941,6 @@ void SysTrayXLink::EncodePreferences( const Preferences& pref ) prefObject.insert("numberMargins", marginsObject ); prefObject.insert("countType", QJsonValue::fromVariant( QString::number( pref.getCountType() ) ) ); prefObject.insert("startupDelay", QJsonValue::fromVariant( QString::number( pref.getStartupDelay() ) ) ); - prefObject.insert("theme", QJsonValue::fromVariant( QString::number( pref.getTheme() ) ) ); prefObject.insert("startApp", QJsonValue::fromVariant( pref.getStartApp() ) ); prefObject.insert("startAppArgs", QJsonValue::fromVariant( pref.getStartAppArgs() ) ); @@ -968,9 +979,18 @@ void SysTrayXLink::slotLinkRead( QByteArray message ) /* - * Handle a debug state change signal + * Handle a positions change signal */ -void SysTrayXLink::slotDebugChange() +void SysTrayXLink::slotPositions( QList< QPoint > positions ) +{ + sendPositions( positions ); +} + + +/* + * Handle a restore window positions state change signal + */ +void SysTrayXLink::slotRestoreWindowPositionsChange() { if( m_pref->getAppPrefChanged() ) { @@ -1015,18 +1035,6 @@ void SysTrayXLink::slotStartMinimizedChange() } -/* - * Handle a restore window positions state change signal - */ -void SysTrayXLink::slotRestoreWindowPositionsChange() -{ - if( m_pref->getAppPrefChanged() ) - { - sendPreferences(); - } -} - - /* * Handle a close type change signal */ @@ -1099,6 +1107,18 @@ void SysTrayXLink::slotIconDataChange() } +/* + * Handle a theme change signal + */ +void SysTrayXLink::slotThemeChange() +{ + if( m_pref->getAppPrefChanged() ) + { + sendPreferences(); + } +} + + /* * Handle a show number state change signal */ @@ -1111,6 +1131,42 @@ void SysTrayXLink::slotShowNumberChange() } +/* + * Handle a show new indicator state change signal + */ +void SysTrayXLink::slotShowNewIndicatorChange() +{ + if( m_pref->getAppPrefChanged() ) + { + sendPreferences(); + } +} + + +/* + * Handle the count type change signal + */ +void SysTrayXLink::slotCountTypeChange() +{ + if( m_pref->getAppPrefChanged() ) + { + sendPreferences(); + } +} + + +/* + * Handle a startup delay change signal + */ +void SysTrayXLink::slotStartupDelayChange() +{ + if( m_pref->getAppPrefChanged() ) + { + sendPreferences(); + } +} + + /* * Handle a number color change signal */ @@ -1160,9 +1216,9 @@ void SysTrayXLink::slotNumberMarginsChange() /* - * Handle the count type change signal + * Handle the new indicator type change signal */ -void SysTrayXLink::slotCountTypeChange() +void SysTrayXLink::slotNewIndicatorTypeChange() { if( m_pref->getAppPrefChanged() ) { @@ -1172,30 +1228,9 @@ void SysTrayXLink::slotCountTypeChange() /* - * Handle a startup delay change signal + * Handle the new shade color change signal */ -void SysTrayXLink::slotStartupDelayChange() -{ - if( m_pref->getAppPrefChanged() ) - { - sendPreferences(); - } -} - - -/* - * Handle a positions change signal - */ -void SysTrayXLink::slotPositions( QList< QPoint > positions ) -{ - sendPositions( positions ); -} - - -/* - * Handle a theme change signal - */ -void SysTrayXLink::slotThemeChange() +void SysTrayXLink::slotNewShadeColorChange() { if( m_pref->getAppPrefChanged() ) { @@ -1250,3 +1285,15 @@ void SysTrayXLink::slotCloseAppArgsChange() sendPreferences(); } } + + +/* + * Handle a debug state change signal + */ +void SysTrayXLink::slotDebugChange() +{ + if( m_pref->getAppPrefChanged() ) + { + sendPreferences(); + } +} diff --git a/app/SysTray-X/SysTray-X-app/systrayxlink.h b/app/SysTray-X/SysTray-X-app/systrayxlink.h index bab500e..394f035 100644 --- a/app/SysTray-X/SysTray-X-app/systrayxlink.h +++ b/app/SysTray-X/SysTray-X-app/systrayxlink.h @@ -259,6 +259,16 @@ class SysTrayXLink : public QObject */ void slotDebugChange(); + /** + * @brief slotPositions. Slot for handling a window positions change. + */ + void slotPositions( QList< QPoint > positions ); + + /** + * @brief slotRestoreWindowPositionsChange. Handle a change in restore window positions state. + */ + void slotRestoreWindowPositionsChange(); + /** * @brief slotMinimizeTypeChange. Slot for handling minimize type change signals. */ @@ -274,11 +284,6 @@ class SysTrayXLink : public QObject */ void slotStartMinimizedChange(); - /** - * @brief slotRestoreWindowPositionsChange. Handle a change in restore window positions state. - */ - void slotRestoreWindowPositionsChange(); - /** * @brief slotCloseTypeChange. Slot for handling close type change signals. */ @@ -309,11 +314,31 @@ class SysTrayXLink : public QObject */ void slotIconDataChange(); + /** + * @brief slotThemeChange. Slot for handling theme change signals. + */ + void slotThemeChange(); + /** * @brief slotShowNumberChange. Handle a change in show number state. */ void slotShowNumberChange(); + /** + * @brief slotShowNewIndicatorChange. Handle a change in show new indicator state. + */ + void slotShowNewIndicatorChange(); + + /** + * @brief slotCountTypeChange. Slot for handling count type change signals. + */ + void slotCountTypeChange(); + + /** + * @brief slotStartupDelayChange. Handle a change in startup delay. + */ + void slotStartupDelayChange(); + /** * @brief slotNumberColorChange. Handle a change in number color. */ @@ -335,24 +360,14 @@ class SysTrayXLink : public QObject void slotNumberMarginsChange(); /** - * @brief slotCountTypeChange. Slot for handling count type change signals. + * @brief slotNewIndicatorTypeChange. Slot for handling new indicator type change signals. */ - void slotCountTypeChange(); + void slotNewIndicatorTypeChange(); /** - * @brief slotStartupDelayChange. Handle a change in startup delay. + * @brief slotNewShadeColorChange. Handle a change in new shade color. */ - void slotStartupDelayChange(); - - /** - * @brief slotPositions. Slot for handling a window positions change. - */ - void slotPositions( QList< QPoint > positions ); - - /** - * @brief slotThemeChange. Slot for handling theme change signals. - */ - void slotThemeChange(); + void slotNewShadeColorChange(); /** * @brief slotStartAppChange. Slot for handling start application change signals. diff --git a/app/SysTray-X/SysTray-X-app/systrayxstatusnotifier.cpp b/app/SysTray-X/SysTray-X-app/systrayxstatusnotifier.cpp index 10f67eb..221a409 100644 --- a/app/SysTray-X/SysTray-X-app/systrayxstatusnotifier.cpp +++ b/app/SysTray-X/SysTray-X-app/systrayxstatusnotifier.cpp @@ -36,12 +36,18 @@ SysTrayXStatusNotifier::SysTrayXStatusNotifier( SysTrayXLink* link, Preferences* m_unread_mail = 0; m_new_mail = 0; + m_pixmap_clean = QPixmap(); + m_pixmap_count = QPixmap(); + m_image_indicator = QImage(); + m_show_number = m_pref->getShowNumber(); + m_show_new_indicator = m_pref->getShowNewIndicator(); m_number_color = m_pref->getNumberColor(); m_number_size = m_pref->getNumberSize(); m_number_alignment = Qt::AlignHCenter | Qt::AlignVCenter; setNumberAlignment( m_pref->getNumberAlignment() ); m_number_margins = m_pref->getNumberMargins(); + m_new_shade_color = m_pref->getNewShadeColor(); /* * Setup notifier @@ -87,6 +93,11 @@ void SysTrayXStatusNotifier::setDefaultIconType( Preferences::DefaultIconType */ m_default_icon_type = icon_type; + /* + * Set base params + */ + renderBase(); + /* * Render and set a new icon in the tray */ @@ -122,6 +133,11 @@ void SysTrayXStatusNotifier::setDefaultIconData( const QByteArray& icon_data */ m_default_icon_data = icon_data; + /* + * Set base params + */ + renderBase(); + /* * Render and set a new icon in the tray */ @@ -157,6 +173,11 @@ void SysTrayXStatusNotifier::setIconType( Preferences::IconType icon_type ) */ m_icon_type = icon_type; + /* + * Set base params + */ + renderBase(); + /* * Render and set a new icon in the tray */ @@ -192,6 +213,11 @@ void SysTrayXStatusNotifier::setIconData( const QByteArray& icon_data ) */ m_icon_data = icon_data; + /* + * Set base params + */ + renderBase(); + /* * Render and set a new icon in the tray */ @@ -220,6 +246,26 @@ void SysTrayXStatusNotifier::showNumber( bool state ) } +/* + * Enable/disable new indicator + */ +void SysTrayXStatusNotifier::showNewIndicator( bool state ) +{ + if( m_show_new_indicator != state ) + { + /* + * Store the new value + */ + m_show_new_indicator = state; + + /* + * Render and set a new icon in the tray + */ + renderIcon(); + } +} + + /* * Set number color */ @@ -322,6 +368,51 @@ void SysTrayXStatusNotifier::setNumberMargins( QMargins margins ) } +/* + * Set the new indicator type + */ +void SysTrayXStatusNotifier::setNewIndicatorType( Preferences::NewIndicatorType new_indicator_type ) +{ + if( m_new_indicator_type != new_indicator_type ) + { + /* + * Store the new value + */ + m_new_indicator_type = new_indicator_type; + + /* + * Set base params + */ + renderBase(); + + /* + * Render and set a new icon in the tray + */ + renderIcon(); + } +} + + +/* + * Set new shade color + */ +void SysTrayXStatusNotifier::setNewShadeColor( const QString& color ) +{ + if( m_new_shade_color != color ) + { + /* + * Store the new value + */ + m_new_shade_color = color; + + /* + * Render and set a new icon in the tray + */ + renderIcon(); + } +} + + /* * Set the number of unread/new mails */ @@ -343,6 +434,154 @@ void SysTrayXStatusNotifier::setMailCount( int unread_mail, int new_mail ) } +/* + * Set the base for rendering + */ +void SysTrayXStatusNotifier::renderBase() +{ + /* + * Set the clean icon + */ + switch( m_default_icon_type ) + { + case Preferences::PREF_DEFAULT_ICON_DEFAULT: + { + QString version = m_pref->getBrowserVersion(); + + if( version.section( '.', 0, 0 ).toInt() < 115 ) + { + m_pixmap_clean = QPixmap( ":/files/icons/Thunderbird.png" ); + } + else + { + m_pixmap_clean = QPixmap( ":/files/icons/Thunderbird115.png" ); + } + break; + } + + case Preferences::PREF_DEFAULT_ICON_HIDE: + { + m_pixmap_clean = QPixmap(); + break; + } + + case Preferences::PREF_DEFAULT_ICON_CUSTOM: + { + m_pixmap_clean.loadFromData( m_default_icon_data ); + break; + } + } + + /* + * Set the count icon + */ + switch( m_icon_type ) + { + case Preferences::PREF_BLANK_ICON: + { + Preferences::Theme theme = m_pref->getTheme(); + + if( theme == Preferences::PREF_THEME_LIGHT ) + { + m_pixmap_count = QPixmap( ":/files/icons/blank-icon.png" ); + } + else + { + m_pixmap_count = QPixmap( ":/files/icons/blank-icon-dark.png" ); + } + break; + } + + case Preferences::PREF_NEWMAIL_ICON: + { + QIcon new_mail = QIcon::fromTheme("mail-unread", QIcon(":/files/icons/mail-unread.png")); + m_pixmap_count = new_mail.pixmap( 256, 256 ); + break; + } + + case Preferences::PREF_CUSTOM_ICON: + { + m_pixmap_count.loadFromData( m_icon_data ); + break; + } + + case Preferences::PREF_NO_ICON: + { + QPixmap lookthrough( 256, 256 ); + lookthrough.fill( Qt::transparent ); + m_pixmap_count = lookthrough; + break; + } + + case Preferences::PREF_TB_ICON: + { + QString version = m_pref->getBrowserVersion(); + + if( version.section( '.', 0, 0 ).toInt() < 115 ) + { + m_pixmap_count = QPixmap( ":/files/icons/Thunderbird.png" ); + } + else + { + m_pixmap_count = QPixmap( ":/files/icons/Thunderbird115.png" ); + } + break; + } + } + + /* + * Set the new indicator + */ + switch( m_new_indicator_type ) + { + case Preferences::PREF_NEW_INDICATOR_ROUND: + { + m_image_indicator = QImage( ":/files/icons/new-indicator-round.png" ); + break; + } + + case Preferences::PREF_NEW_INDICATOR_STAR: + { + m_image_indicator = QImage( ":/files/icons/new-indicator-star-close.png" ); + break; + } + + default: + { + m_image_indicator = QImage(); + break; + } + } +} + + +/* + * Shade the pixmap + */ +void SysTrayXStatusNotifier::shade( QPixmap& pixmap ) +{ + QPainter painter( &pixmap ); + painter.setCompositionMode( painter.CompositionMode_Overlay ); + painter.fillRect( pixmap.rect(), QColor( m_new_shade_color ) ); + painter.end(); +} + + +/* + * Indicator on the pixmap + */ +void SysTrayXStatusNotifier::indicator( QPixmap& pixmap ) +{ + int size_x = pixmap.width() / 2; + int size_y = pixmap.width() / 2; + QRect topRight( size_x, 0, size_x, size_y ); + + QPainter painter( &pixmap ); + painter.drawImage( topRight, m_image_indicator ); + painter.end(); +} + + /* * Set and render the icon in the system tray */ @@ -362,90 +601,22 @@ void SysTrayXStatusNotifier::renderIcon() if( count > 0 ) { - switch( m_icon_type ) - { - case Preferences::PREF_BLANK_ICON: - { - Preferences::Theme theme = m_pref->getTheme(); - - if( theme == Preferences::PREF_THEME_LIGHT ) - { - pixmap = QPixmap( ":/files/icons/blank-icon.png" ); - } - else - { - pixmap = QPixmap( ":/files/icons/blank-icon-dark.png" ); - } - break; - } - - case Preferences::PREF_NEWMAIL_ICON: - { - QIcon new_mail = QIcon::fromTheme("mail-unread", QIcon(":/files/icons/mail-unread.png")); - pixmap = new_mail.pixmap( 256, 256 ); - break; - } - - case Preferences::PREF_CUSTOM_ICON: - { - pixmap.loadFromData( m_icon_data ); - break; - } - - case Preferences::PREF_NO_ICON: - { - QPixmap lookthrough( 256, 256 ); - lookthrough.fill( Qt::transparent ); - pixmap = lookthrough; - break; - } - - case Preferences::PREF_TB_ICON: - { - QString version = m_pref->getBrowserVersion(); - - if( version.section( '.', 0, 0 ).toInt() < 115 ) - { - pixmap = QPixmap( ":/files/icons/Thunderbird.png" ); - } - else - { - pixmap = QPixmap( ":/files/icons/Thunderbird115.png" ); - } - break; - } - } + pixmap = m_pixmap_count; } else { - switch( m_default_icon_type ) + pixmap = m_pixmap_clean; + } + + if( m_show_new_indicator && m_new_mail > 0 ) + { + if( m_pref->getNewIndicatorType() == Preferences::PREF_NEW_INDICATOR_SHADE ) { - case Preferences::PREF_DEFAULT_ICON_DEFAULT: - { - QString version = m_pref->getBrowserVersion(); - - if( version.section( '.', 0, 0 ).toInt() < 115 ) - { - pixmap = QPixmap( ":/files/icons/Thunderbird.png" ); - } - else - { - pixmap = QPixmap( ":/files/icons/Thunderbird115.png" ); - } - break; - } - - case Preferences::PREF_DEFAULT_ICON_HIDE: - { - pixmap = QPixmap(); - break; - } - - case Preferences::PREF_DEFAULT_ICON_CUSTOM: - { - pixmap.loadFromData( m_default_icon_data ); - break; - } + shade( pixmap ); + } + else + { + indicator( pixmap ); } } @@ -560,7 +731,16 @@ void SysTrayXStatusNotifier::slotIconDataChange() /* - * Handle the enable number state change signal + * Handle the theme change signal + */ +void SysTrayXStatusNotifier::slotThemeChange() +{ + renderIcon(); +} + + +/* + * Handle the show number state change signal */ void SysTrayXStatusNotifier::slotShowNumberChange() { @@ -568,6 +748,15 @@ void SysTrayXStatusNotifier::slotShowNumberChange() } +/* + * Handle the show new indicator state change signal + */ +void SysTrayXStatusNotifier::slotShowNewIndicatorChange() +{ + showNewIndicator( m_pref->getShowNewIndicator() ); +} + + /* * Handle the number color change signal */ @@ -605,11 +794,20 @@ void SysTrayXStatusNotifier::slotNumberMarginsChange() /* - * Handle the theme change signal + * Handle the new indicator type change signal */ -void SysTrayXStatusNotifier::slotThemeChange() +void SysTrayXStatusNotifier::slotNewIndicatorTypeChange() { - renderIcon(); + setNewIndicatorType( m_pref->getNewIndicatorType() ); +} + + +/* + * Handle the new shade color change signal + */ +void SysTrayXStatusNotifier::slotNewShadeColorChange() +{ + setNewShadeColor( m_pref->getNewShadeColor() ); } diff --git a/app/SysTray-X/SysTray-X-app/systrayxstatusnotifier.h b/app/SysTray-X/SysTray-X-app/systrayxstatusnotifier.h index df6f465..88829f3 100644 --- a/app/SysTray-X/SysTray-X-app/systrayxstatusnotifier.h +++ b/app/SysTray-X/SysTray-X-app/systrayxstatusnotifier.h @@ -14,6 +14,8 @@ * Qt includes */ #include +#include +#include /* * Predefines @@ -93,6 +95,13 @@ class SysTrayXStatusNotifier : public KStatusNotifierItem */ void showNumber( bool state ); + /** + * @brief showNewIndicator. Set the show new indicator state. + * + * @param state Show / hide. + */ + void showNewIndicator( bool state ); + /** * @brief setNumberColor. Set the number color. * @@ -121,6 +130,20 @@ class SysTrayXStatusNotifier : public KStatusNotifierItem */ void setNumberMargins( QMargins margins ); + /** + * @brief setNewIndicatorType. Set the new indicator type. + * + * @param new_indicator_type The new indicator type. + */ + void setNewIndicatorType( Preferences::NewIndicatorType new_indicator_type ); + + /** + * @brief setNewShadeColor. Set the new shade color. + * + * @param color The color. + */ + void setNewShadeColor( const QString& color ); + /** * @brief setMailCount. Set the number of unread/new mails. * @@ -131,6 +154,25 @@ class SysTrayXStatusNotifier : public KStatusNotifierItem private: + /** + * @brief renderBase. Set the base pixmaps for the icon. + */ + void renderBase(); + + /** + * @brief shade. Shade a pixmap + * + * @param pixmap Pixmap to shade. + */ + void shade( QPixmap& pixmap ); + + /** + * @brief indicator. Add a new indicator to the icon. + * + * @param pixmap Pixmap to alter. + */ + void indicator( QPixmap& pixmap ); + /** * @brief setIcon. Set a new rendered icon. */ @@ -183,11 +225,21 @@ class SysTrayXStatusNotifier : public KStatusNotifierItem */ void slotIconDataChange(); + /** + * @brief slotThemeChange. Slot for handling theme change signals. + */ + void slotThemeChange(); + /** * @brief slotShowNumberChange. Slot for handling show number change signals. */ void slotShowNumberChange(); + /** + * @brief slotShowNewIndicatorChange. Slot for handling show new indicator change signals. + */ + void slotShowNewIndicatorChange(); + /** * @brief slotNumberColorChange. Slot for handling number color change signals. */ @@ -209,9 +261,14 @@ class SysTrayXStatusNotifier : public KStatusNotifierItem void slotNumberMarginsChange(); /** - * @brief slotThemeChange. Slot for handling theme change signals. + * @brief slotNewIndicatorTypeChange. Slot for handling new indicator type change signals. */ - void slotThemeChange(); + void slotNewIndicatorTypeChange(); + + /** + * @brief slotNewShadeColorChange. Slot for handling new shade color change signals. + */ + void slotNewShadeColorChange(); private slots: @@ -242,6 +299,21 @@ class SysTrayXStatusNotifier : public KStatusNotifierItem */ Preferences* m_pref; + /** + * @brief m_pixmap_count Pixmap to be used when counting. + */ + QPixmap m_pixmap_count; + + /** + * @brief m_pixmap_clean Pixmap to be used when there is no new mail. + */ + QPixmap m_pixmap_clean; + + /** + * @brief m_image_indicator Image to be used as new mail indicator. + */ + QImage m_image_indicator; + /** * @brief m_default_icon_type. Storage for the default icon type. */ @@ -282,6 +354,11 @@ class SysTrayXStatusNotifier : public KStatusNotifierItem */ bool m_show_number; + /** + * @brief m_show_new_indicator. Show the new indicator. + */ + bool m_show_new_indicator; + /** * @brief m_number_color. Color of the unread/new mail number. */ @@ -302,6 +379,16 @@ class SysTrayXStatusNotifier : public KStatusNotifierItem */ QMargins m_number_margins; + /** + * @brief m_new_indicator_type. The new indicator type. + */ + Preferences::NewIndicatorType m_new_indicator_type; + + /** + * @brief m_new_shade_color. Color of the new shade. + */ + QString m_new_shade_color; + /** * @brief m_unread_mail. Storage for the number of unread mails. */ diff --git a/webext/_locales/en-US/messages.json b/webext/_locales/en-US/messages.json index 48e9fc7..c1d8598 100644 --- a/webext/_locales/en-US/messages.json +++ b/webext/_locales/en-US/messages.json @@ -34,6 +34,11 @@ "description": "Tab for Icon options" }, + "tab_count": { + "message": "Count", + "description": "Tab for Count options" + }, + "tab_apps": { "message": "Apps", "description": "Tab for Apps options" @@ -204,11 +209,6 @@ "description": "Caption for Number options" }, - "icons_number_display": { - "message": "Display unread message count", - "description": "Display the number" - }, - "icons_number_color": { "message": "Number color:", "description": "Color of the number" @@ -274,21 +274,6 @@ "description": "Number margins (left, top, right, bottom)" }, - "icons_number_count_type": { - "message": "Message count type:", - "description": "Count type options" - }, - - "icons_number_count_unread": { - "message": "Unread", - "description": "Count unread mails" - }, - - "icons_number_count_new": { - "message": "New", - "description": "Count new mails" - }, - "icons_startup_delay": { "message": "Startup delay", "description": "Startup delay" @@ -309,6 +294,40 @@ "description": "The dark theme" }, + "count": { + "message": "Count", + "description": "Title for Count options" + }, + + "count_number_display": { + "message": "Show unread message count", + "description": "Show the new message count" + }, + + "count_new_indicator_display": { + "message": "Show new indicator", + "description": "Show the new message indicator" + }, + + + + "count_number_count_type": { + "message": "Message count type:", + "description": "Count type options" + }, + + "count_number_count_unread": { + "message": "Unread", + "description": "Count unread mails" + }, + + "count_number_count_new": { + "message": "New", + "description": "Count new mails" + }, + + + "apps": { "message": "Apps", "description": "Title for Apps options" diff --git a/webext/background.js b/webext/background.js index f3fdbf2..1441523 100644 --- a/webext/background.js +++ b/webext/background.js @@ -561,6 +561,7 @@ SysTrayX.Messaging = { "iconMime", "icon", "showNumber", + "showNewIndicator", "numberColor", "numberSize", "numberAlignment", @@ -594,6 +595,7 @@ SysTrayX.Messaging = { const iconMime = result.iconMime || "image/png"; const icon = result.icon || []; const showNumber = result.showNumber || "true"; + const showNewIndicator = result.showNewIndicator || "true"; let numberColor = result.numberColor || "#000000"; const numberSize = result.numberSize || "10"; const numberAlignment = result.numberAlignment || "4"; @@ -634,6 +636,7 @@ SysTrayX.Messaging = { iconMime, icon, showNumber, + showNewIndicator, numberColor, numberSize, numberAlignment, @@ -773,6 +776,13 @@ SysTrayX.Link = { }); } + const showNewIndicator = response["preferences"].showNewIndicator; + if (showNewIndicator) { + await storage().set({ + showNewIndicator: showNewIndicator, + }); + } + const numberColor = response["preferences"].numberColor; if (numberColor) { await storage().set({ diff --git a/webext/options.html b/webext/options.html index 9139e0f..362e16d 100644 --- a/webext/options.html +++ b/webext/options.html @@ -29,6 +29,7 @@
+ @@ -337,19 +338,6 @@ __MSG_icons_number_options__ - - -
- - -
- - - -   - @@ -443,22 +431,6 @@ /> - - - - - - - - -   @@ -513,6 +485,56 @@
+
+
+

__MSG_count__

+ + + +
+ + +
+ + +
+ + +
+ + + +   + + + + + + + + + + + + + + + + +
+
+

__MSG_apps__

diff --git a/webext/options.js b/webext/options.js index 7f8cedd..7489176 100644 --- a/webext/options.js +++ b/webext/options.js @@ -203,7 +203,7 @@ SysTrayX.SaveOptions = { }); // - // Save enable number state + // Save show number state // const showNumber = document.querySelector( 'input[name="showNumber"]' @@ -212,6 +212,16 @@ SysTrayX.SaveOptions = { showNumber: `${showNumber}`, }); + // + // Save show new indicator state + // + const showNewIndicator = document.querySelector( + 'input[name="showNewIndicator"]' + ).checked; + await storage().set({ + showNewIndicator: `${showNewIndicator}`, + }); + // // Save theme preferences // @@ -454,7 +464,7 @@ SysTrayX.RestoreOptions = { ); // - // Restore enable number state + // Restore show number state // await storage() .get("showNumber") @@ -463,6 +473,16 @@ SysTrayX.RestoreOptions = { SysTrayX.RestoreOptions.onShowNumberError ); + // + // Restore show new indicator state + // + await storage() + .get("showNewIndicator") + .then( + SysTrayX.RestoreOptions.setShowNewIndicator, + SysTrayX.RestoreOptions.onShowNewIndicatorError + ); + // // Restore number color // @@ -830,7 +850,7 @@ SysTrayX.RestoreOptions = { }, // - // Restore enable number state + // Restore show number state // setShowNumber: function (result) { const showNumber = result.showNumber || "true"; @@ -843,6 +863,20 @@ SysTrayX.RestoreOptions = { console.log(`showNumber Error: ${error}`); }, + // + // Restore show new indicator state + // + setShowNewIndicator: function (result) { + const showNewIndicator = result.showNewIndicator || "true"; + + const checkbox = document.querySelector(`input[name="showNewIndicator"]`); + checkbox.checked = showNewIndicator === "true"; + }, + + onShowNewIndicatorError: function (error) { + console.log(`showNewIndicator Error: ${error}`); + }, + // // Restore number color // @@ -1209,6 +1243,11 @@ SysTrayX.StorageChanged = { showNumber: changes[item].newValue, }); } + if (item === "showNewIndicator") { + SysTrayX.RestoreOptions.setShowNewIndicator({ + showNewIndicator: changes[item].newValue, + }); + } if (item === "numberColor") { SysTrayX.RestoreOptions.setNumberColor({ numberColor: changes[item].newValue,