diff --git a/app/SysTray-X/preferences.cpp b/app/SysTray-X/preferences.cpp index de4373c..8666285 100644 --- a/app/SysTray-X/preferences.cpp +++ b/app/SysTray-X/preferences.cpp @@ -49,6 +49,8 @@ Preferences::Preferences( QObject *parent ) : QObject( parent ) m_number_color = "#000000"; m_number_size = 10; m_count_type = PREF_COUNT_UNREAD; + m_number_alignment = 4; + m_number_margins = QMargins(); m_minimize_type = PREF_DEFAULT_MINIMIZE; m_start_minimized = false; @@ -400,6 +402,58 @@ void Preferences::setNumberSize( int size ) } +/* + * Get the count type. + */ +int Preferences::getNumberAlignment() const +{ + return m_number_alignment; +} + + +/* + * Set the count type. + */ +void Preferences::setNumberAlignment( int alignment ) +{ + if( m_number_alignment != alignment) + { + m_number_alignment = alignment; + + /* + * Tell the world the new preference + */ + emit signalNumberAlignmentChange(); + } +} + + +/* + * Get the count type. + */ +QMargins Preferences::getNumberMargins() const +{ + return m_number_margins; +} + + +/* + * Set the count type. + */ +void Preferences::setNumberMargins( QMargins margins ) +{ + if( m_number_margins != margins) + { + m_number_margins = margins; + + /* + * Tell the world the new preference + */ + emit signalNumberMarginsChange(); + } +} + + /* * Get the count type. */ diff --git a/app/SysTray-X/preferences.h b/app/SysTray-X/preferences.h index b2dbc72..c8c7f1f 100644 --- a/app/SysTray-X/preferences.h +++ b/app/SysTray-X/preferences.h @@ -11,6 +11,7 @@ #include #include #include +#include /** * @brief The Preferences class. Class to hold the preferences. @@ -300,6 +301,34 @@ class Preferences : public QObject */ void setNumberSize( int size ); + /** + * @brief getNumberAlignment. Get the number alignment. + * + * @return The alignment. + */ + int getNumberAlignment() const; + + /** + * @brief setumberAlignment. Set the number alignment. + * + * @param The alignment. + */ + void setNumberAlignment( int alignment ); + + /** + * @brief getNumberMargins. Get the number margins. + * + * @return The margins. + */ + QMargins getNumberMargins() const; + + /** + * @brief setNumberMargins. Set the number margins. + * + * @param The margins. + */ + void setNumberMargins( QMargins margins ); + /** * @brief getCountType. Get the count type. * @@ -475,6 +504,16 @@ class Preferences : public QObject */ void signalNumberSizeChange(); + /** + * @brief signalNumberAlignmmentChange. Signal a number alignment change. + */ + void signalNumberAlignmentChange(); + + /** + * @brief signalNumberMarginsChange. Signal a number margins change. + */ + void signalNumberMarginsChange(); + /** * @brief signalCountTypeChange. Signal a count type change. */ @@ -582,6 +621,16 @@ class Preferences : public QObject */ int m_number_size; + /** + * @brief m_number_alignment. Number alignment within the icon. + */ + int m_number_alignment; + + /** + * @brief m_number_margins. Margins for the number. + */ + QMargins m_number_margins; + /** * @brief m_count_type. Selected count type. */ diff --git a/app/SysTray-X/preferences.ui b/app/SysTray-X/preferences.ui index 13ab07b..5cabaa3 100644 --- a/app/SysTray-X/preferences.ui +++ b/app/SysTray-X/preferences.ui @@ -7,7 +7,7 @@ 0 0 541 - 648 + 768 @@ -491,6 +491,78 @@ + + + + 4 + + + + Top left + + + + + Top centre + + + + + Top right + + + + + Middle left + + + + + Middle centre + + + + + Middle right + + + + + Bottom left + + + + + Bottom centre + + + + + Bottom right + + + + + + + + Margins (left, top, right, bottom): + + + + + + + + + + 0,0,0,0 + + + 16 + + + @@ -592,11 +664,11 @@ - - + + diff --git a/app/SysTray-X/preferencesdialog.cpp b/app/SysTray-X/preferencesdialog.cpp index 42849fa..49ce412 100644 --- a/app/SysTray-X/preferencesdialog.cpp +++ b/app/SysTray-X/preferencesdialog.cpp @@ -16,6 +16,8 @@ #include #include #include +#include +#include /* * Constructor @@ -124,6 +126,19 @@ PreferencesDialog::PreferencesDialog( SysTrayXLink *link, Preferences *pref, QWi */ 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 + */ + setNumberAlignment( m_pref->getNumberAlignment() ); + + /* + * Set number margins + */ + QRegExpValidator *number_margins_validator = new QRegExpValidator( QRegExp("[0-9]*,[0-9]*,[0-9]*,[0-9]*") ); + m_ui->numberMarginsLineEdit->setValidator(number_margins_validator); + + setNumberMargins( m_pref->getNumberMargins() ); } @@ -326,6 +341,42 @@ void PreferencesDialog::setCountType( Preferences::CountType count_type ) } +/* + * Set the number alignment + */ +void PreferencesDialog::setNumberAlignment( int alignment ) +{ + ( m_ui->numberAlignmentComboBox->setCurrentIndex( alignment ) ); +} + + +/* + * Set the number alignment + */ +void PreferencesDialog::setNumberMargins( QMargins margins ) +{ + ( m_ui->numberMarginsLineEdit->setText( QString("%1,%2,%3,%4").arg(margins.left() ).arg(margins.top() ).arg(margins.right() ).arg(margins.bottom() ) ) ); +} + + +/* + * Set the number alignment + */ +QMargins PreferencesDialog::getNumberMargins() const +{ + QString margins_text = m_ui->numberMarginsLineEdit->text(); + margins_text.replace( ",", " " ); + + int left; + int top; + int right; + int bottom; + QTextStream( &margins_text ) >> left >> top >> right >> bottom; + + return QMargins( left, top, right, bottom ); +} + + /* * Set the theme */ @@ -366,6 +417,9 @@ void PreferencesDialog::slotAccept() m_pref->setNumberSize( m_ui->numberSizeSpinBox->value() ); m_pref->setCountType( static_cast< Preferences::CountType >( m_ui->countTypeGroup->checkedId() ) ); + m_pref->setNumberAlignment( m_ui->numberAlignmentComboBox->currentIndex() ); + m_pref->setNumberMargins( getNumberMargins() ); + Preferences::Theme theme = static_cast< Preferences::Theme >( m_ui->themeGroup->checkedId() ); m_pref->setTheme( theme ); @@ -428,7 +482,8 @@ void PreferencesDialog::slotReject() setNumberColor( m_pref->getNumberColor() ); setNumberSize( m_pref->getNumberSize()); setCountType( m_pref->getCountType() ); - + setNumberAlignment( m_pref->getNumberAlignment() ); + setNumberMargins( m_pref->getNumberMargins() ); setTheme( m_pref->getTheme() ); setDebug( m_pref->getDebug()); @@ -636,6 +691,24 @@ void PreferencesDialog::slotCountTypeChange() } +/* + * Handle the number size change + */ +void PreferencesDialog::slotNumberAlignmentChange() +{ + setNumberAlignment( m_pref->getNumberAlignment() ); +} + + +/* + * Handle the number size change + */ +void PreferencesDialog::slotNumberMarginsChange() +{ + setNumberMargins( m_pref->getNumberMargins() ); +} + + /* * Handle the theme change signal */ diff --git a/app/SysTray-X/preferencesdialog.h b/app/SysTray-X/preferencesdialog.h index 6277169..e928e8b 100644 --- a/app/SysTray-X/preferencesdialog.h +++ b/app/SysTray-X/preferencesdialog.h @@ -151,6 +151,27 @@ class PreferencesDialog : public QDialog */ void setNumberSize( int size ); + /** + * @brief setNumberAlignment. Set the number alignment. + * + * @param alignment The alignment. + */ + void setNumberAlignment( int alignment ); + + /** + * @brief setNumberMargins. Set the number margins. + * + * @param margins The margins. + */ + void setNumberMargins( QMargins margins ); + + /** + * @brief getNumberMargins. Get the number margins. + * + * @return The margins. + */ + QMargins getNumberMargins() const; + /** * @brief setCountType. Set the count type. * @@ -246,6 +267,16 @@ class PreferencesDialog : public QDialog */ void slotNumberSizeChange(); + /** + * @brief slotNumberAlignmentChange. Slot for handling number alignment change. + */ + void slotNumberAlignmentChange(); + + /** + * @brief slotNumberMarginsChange. Slot for handling number margins change. + */ + void slotNumberMarginsChange(); + /** * @brief slotCountTypeChange. Slot for handling count type change. */ diff --git a/app/SysTray-X/systrayx.cpp b/app/SysTray-X/systrayx.cpp index 4fff755..ffe5a6b 100644 --- a/app/SysTray-X/systrayx.cpp +++ b/app/SysTray-X/systrayx.cpp @@ -118,6 +118,8 @@ SysTrayX::SysTrayX( QObject *parent ) : QObject( parent ) 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::signalMinimizeTypeChange, m_pref_dialog, &PreferencesDialog::slotMinimizeTypeChange ); connect( m_preferences, &Preferences::signalStartMinimizedChange, m_pref_dialog, &PreferencesDialog::slotStartMinimizedChange ); @@ -134,6 +136,8 @@ SysTrayX::SysTrayX( QObject *parent ) : QObject( parent ) 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::signalStartMinimizedChange, m_link, &SysTrayXLink::slotStartMinimizedChange ); @@ -174,14 +178,16 @@ SysTrayX::SysTrayX( QObject *parent ) : QObject( parent ) */ getPreferences(); -/* - //slotLoadLanguage( "en-US" ); +///* + slotLoadLanguage( "en-US" ); //slotLoadLanguage( "it" ); - slotLoadLanguage( "nl" ); + //slotLoadLanguage( "nl" ); //slotLoadLanguage( "pt-BR" ); //slotLoadLanguage( "ru" ); slotSelectIconObject( false ); -*/ + + slotSetUnreadMail( 10 ); +//*/ } @@ -290,6 +296,8 @@ void SysTrayX::showTrayIcon() connect( m_preferences, &Preferences::signalShowNumberChange, m_tray_icon, &SysTrayXIcon::slotShowNumberChange ); 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_link, &SysTrayXLink::signalUnreadMail, m_tray_icon, &SysTrayXIcon::slotSetUnreadMail ); @@ -325,6 +333,8 @@ void SysTrayX::hideTrayIcon() disconnect( m_preferences, &Preferences::signalShowNumberChange, m_tray_icon, &SysTrayXIcon::slotShowNumberChange ); 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_link, &SysTrayXLink::signalUnreadMail, m_tray_icon, &SysTrayXIcon::slotSetUnreadMail ); @@ -398,6 +408,8 @@ void SysTrayX::showKdeTrayIcon() connect( m_preferences, &Preferences::signalShowNumberChange, m_kde_tray_icon, &SysTrayXStatusNotifier::slotShowNumberChange ); 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_link, &SysTrayXLink::signalUnreadMail, m_kde_tray_icon, &SysTrayXStatusNotifier::slotSetUnreadMail ); @@ -432,6 +444,8 @@ void SysTrayX::hideKdeTrayIcon() disconnect( m_preferences, &Preferences::signalShowNumberChange, m_kde_tray_icon, &SysTrayXStatusNotifier::slotShowNumberChange ); 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_link, &SysTrayXLink::signalUnreadMail, m_kde_tray_icon, &SysTrayXStatusNotifier::slotSetUnreadMail ); diff --git a/app/SysTray-X/systrayxicon.cpp b/app/SysTray-X/systrayxicon.cpp index 6e71a0f..db03fa6 100644 --- a/app/SysTray-X/systrayxicon.cpp +++ b/app/SysTray-X/systrayxicon.cpp @@ -33,6 +33,9 @@ SysTrayXIcon::SysTrayXIcon( SysTrayXLink* link, Preferences* pref, QObject* pare m_show_number = m_pref->getShowNumber(); 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(); connect( this, &QSystemTrayIcon::activated, this, &SysTrayXIcon::slotIconActivated ); } @@ -207,6 +210,69 @@ void SysTrayXIcon::setNumberSize( int size ) } } + +/* + * Set number alignment + */ +void SysTrayXIcon::setNumberAlignment( int alignment ) +{ + int alignment_qt; + switch( alignment ) + { + case 0: alignment_qt = Qt::AlignTop | Qt::AlignLeft; break; + case 1: alignment_qt = Qt::AlignTop | Qt::AlignHCenter; break; + case 2: alignment_qt = Qt::AlignTop | Qt::AlignRight; break; + + case 3: alignment_qt = Qt::AlignVCenter | Qt::AlignLeft; break; + case 4: alignment_qt = Qt::AlignVCenter | Qt::AlignHCenter; break; + case 5: alignment_qt = Qt::AlignVCenter | Qt::AlignRight; break; + + case 6: alignment_qt = Qt::AlignBottom | Qt::AlignLeft; break; + case 7: alignment_qt = Qt::AlignBottom | Qt::AlignHCenter; break; + case 8: alignment_qt = Qt::AlignBottom | Qt::AlignRight; break; + + default: + { + alignment_qt = Qt::AlignHCenter | Qt::AlignVCenter; + break; + } + } + + if( m_number_alignment != alignment_qt ) + { + /* + * Store the new value + */ + m_number_alignment = alignment_qt; + + /* + * Render and set a new icon in the tray + */ + renderIcon(); + } +} + + +/* + * Set number alignment + */ +void SysTrayXIcon::setNumberMargins( QMargins margins ) +{ + if( m_number_margins != margins ) + { + /* + * Store the new value + */ + m_number_margins = margins; + + /* + * Render and set a new icon in the tray + */ + renderIcon(); + } +} + + /* * Set the number of unread mails */ @@ -318,10 +384,12 @@ void SysTrayXIcon::renderIcon() font.setPointSizeF( font.pointSizeF() * ( factor * m_number_size / 10 ) ); font.setBold( true ); painter.setFont( font ); - painter.setPen( QColor( m_number_color ) ); - painter.drawText( pixmap.rect(), Qt::AlignCenter, QString::number( m_unread_mail ) ); + QRect bounding = pixmap.rect().adjusted( m_number_margins.left(), m_number_margins.top(), + -m_number_margins.right(), -m_number_margins.bottom()); + + painter.drawText( bounding, m_number_alignment, QString::number( m_unread_mail ) ); } /* @@ -405,6 +473,24 @@ void SysTrayXIcon::slotNumberSizeChange() } +/* + * Handle the number alignment change signal + */ +void SysTrayXIcon::slotNumberAlignmentChange() +{ + setNumberAlignment( m_pref->getNumberAlignment() ); +} + + +/* + * Handle the number margins change signal + */ +void SysTrayXIcon::slotNumberMarginsChange() +{ + setNumberMargins( m_pref->getNumberMargins() ); +} + + /* * Handle the theme change signal */ diff --git a/app/SysTray-X/systrayxicon.h b/app/SysTray-X/systrayxicon.h index cbb41b5..87e3477 100644 --- a/app/SysTray-X/systrayxicon.h +++ b/app/SysTray-X/systrayxicon.h @@ -96,6 +96,20 @@ class SysTrayXIcon : public QSystemTrayIcon */ void setNumberSize( int size ); + /** + * @brief setNumberAlignment. Set the number alignment. + * + * @param alignment The alignment. + */ + void setNumberAlignment( int alignment ); + + /** + * @brief setNumberMargins. Set the number margins. + * + * @param margins The margins. + */ + void setNumberMargins( QMargins margins ); + /** * @brief setUnreadMail. Set the number of unread mails. * @@ -161,6 +175,16 @@ class SysTrayXIcon : public QSystemTrayIcon */ void slotNumberSizeChange(); + /** + * @brief slotNumberAlignmentChange. Slot for handling number alignment change signals. + */ + void slotNumberAlignmentChange(); + + /** + * @brief slotNumberMarginsChange. Slot for handling number margins change signals. + */ + void slotNumberMarginsChange(); + /** * @brief slotThemeChange. Slot for handling theme change signals. */ @@ -232,6 +256,16 @@ class SysTrayXIcon : public QSystemTrayIcon */ int m_number_size; + /** + * @brief m_number_alignment. The number alignment. + */ + int m_number_alignment; + + /** + * @brief m_margins. The number margins. + */ + QMargins m_number_margins; + /** * @brief m_unread_mail. Storage for the number of unread mails. */ diff --git a/app/SysTray-X/systrayxlink.cpp b/app/SysTray-X/systrayxlink.cpp index 9213e5f..f8a355b 100644 --- a/app/SysTray-X/systrayxlink.cpp +++ b/app/SysTray-X/systrayxlink.cpp @@ -662,6 +662,26 @@ void SysTrayXLink::DecodePreferences( const QJsonObject& pref ) m_pref->setNumberSize( number_size ); } + if( pref.contains( "numberAlignment" ) && pref[ "numberAlignment" ].isString() ) + { + int number_size = pref[ "numberAlignment" ].toString().toInt(); + + /* + * Store the new number size + */ + m_pref->setNumberAlignment( number_size ); + } + + if( pref.contains( "numberMargins" ) && pref[ "numberMargins" ].isObject() ) + { + QMargins margins = DecodeMargins( pref[ "numberMargins" ].toObject() ); + + /* + * Store the new number size + */ + m_pref->setNumberMargins( margins ); + } + if( pref.contains( "countType" ) && pref[ "countType" ].isString() ) { Preferences::CountType count_type = static_cast< Preferences::CountType >( pref[ "countType" ].toString().toInt() ); @@ -734,6 +754,36 @@ void SysTrayXLink::DecodePreferences( const QJsonObject& pref ) } +/* + * Decode preferences from JSON message + */ +QMargins SysTrayXLink::DecodeMargins( const QJsonObject& marginsJson ) +{ + QMargins margins; + if( marginsJson.contains( "left" ) && marginsJson[ "left" ].isString() ) + { + margins.setLeft( marginsJson[ "left" ].toString().toInt() ); + } + + if( marginsJson.contains( "top" ) && marginsJson[ "top" ].isString() ) + { + margins.setTop( marginsJson[ "top" ].toString().toInt() ); + } + + if( marginsJson.contains( "right" ) && marginsJson[ "right" ].isString() ) + { + margins.setRight( marginsJson[ "right" ].toString().toInt() ); + } + + if( marginsJson.contains( "bottom" ) && marginsJson[ "bottom" ].isString() ) + { + margins.setBottom( marginsJson[ "bottom" ].toString().toInt() ); + } + + return margins; +} + + /* * Encode preferences to JSON message */ @@ -758,6 +808,15 @@ void SysTrayXLink::EncodePreferences( const Preferences& pref ) prefObject.insert("showNumber", QJsonValue::fromVariant( QString( pref.getShowNumber() ? "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() ) ) ); + + QJsonObject marginsObject; + marginsObject.insert("left", QJsonValue::fromVariant( QString::number( pref.getNumberMargins().left() ) ) ); + marginsObject.insert("top", QJsonValue::fromVariant( QString::number( pref.getNumberMargins().top() ) ) ); + marginsObject.insert("right", QJsonValue::fromVariant( QString::number( pref.getNumberMargins().right() ) ) ); + marginsObject.insert("bottom", QJsonValue::fromVariant( QString::number( pref.getNumberMargins().bottom() ) ) ); + + prefObject.insert("numberMargins", marginsObject ); prefObject.insert("countType", QJsonValue::fromVariant( QString::number( pref.getCountType() ) ) ); prefObject.insert("theme", QJsonValue::fromVariant( QString::number( pref.getTheme() ) ) ); @@ -948,6 +1007,30 @@ void SysTrayXLink::slotNumberSizeChange() } +/* + * Handle a number alignment change signal + */ +void SysTrayXLink::slotNumberAlignmentChange() +{ + if( m_pref->getAppPrefChanged() ) + { + sendPreferences(); + } +} + + +/* + * Handle a number margins change signal + */ +void SysTrayXLink::slotNumberMarginsChange() +{ + if( m_pref->getAppPrefChanged() ) + { + sendPreferences(); + } +} + + /* * Handle the count type change signal */ diff --git a/app/SysTray-X/systrayxlink.h b/app/SysTray-X/systrayxlink.h index df2b5c2..8b07c24 100644 --- a/app/SysTray-X/systrayxlink.h +++ b/app/SysTray-X/systrayxlink.h @@ -158,6 +158,15 @@ class SysTrayXLink : public QObject */ void DecodePreferences( const QJsonObject& pref ); + /** + * @brief DecodeMargins. Decode the margins object. + * + * @param margins The JSON margins. + * + * @return The margins. + */ + QMargins DecodeMargins( const QJsonObject& margins ); + /** * @brief DecodePositions * @@ -299,6 +308,16 @@ class SysTrayXLink : public QObject */ void slotNumberSizeChange(); + /** + * @brief slotNumberAlignmentChange. Handle a change in number alignment. + */ + void slotNumberAlignmentChange(); + + /** + * @brief slotNumberMarginsChange. Handle a change in number margins. + */ + void slotNumberMarginsChange(); + /** * @brief slotCountTypeChange. Slot for handling count type change signals. */ diff --git a/app/SysTray-X/systrayxstatusnotifier.cpp b/app/SysTray-X/systrayxstatusnotifier.cpp index 8447ba1..5195eb4 100644 --- a/app/SysTray-X/systrayxstatusnotifier.cpp +++ b/app/SysTray-X/systrayxstatusnotifier.cpp @@ -38,6 +38,9 @@ SysTrayXStatusNotifier::SysTrayXStatusNotifier( SysTrayXLink* link, Preferences* m_show_number = m_pref->getShowNumber(); 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(); /* * Setup notifier @@ -242,6 +245,69 @@ void SysTrayXStatusNotifier::setNumberSize( int size ) } } + +/* + * Set number alignment + */ +void SysTrayXStatusNotifier::setNumberAlignment( int alignment ) +{ + int alignment_qt; + switch( alignment ) + { + case 0: alignment_qt = Qt::AlignTop | Qt::AlignLeft; break; + case 1: alignment_qt = Qt::AlignTop | Qt::AlignHCenter; break; + case 2: alignment_qt = Qt::AlignTop | Qt::AlignRight; break; + + case 3: alignment_qt = Qt::AlignVCenter | Qt::AlignLeft; break; + case 4: alignment_qt = Qt::AlignVCenter | Qt::AlignHCenter; break; + case 5: alignment_qt = Qt::AlignVCenter | Qt::AlignRight; break; + + case 6: alignment_qt = Qt::AlignBottom | Qt::AlignLeft; break; + case 7: alignment_qt = Qt::AlignBottom | Qt::AlignHCenter; break; + case 8: alignment_qt = Qt::AlignBottom | Qt::AlignRight; break; + + default: + { + alignment_qt = Qt::AlignHCenter | Qt::AlignVCenter; + break; + } + } + + if( m_number_alignment != alignment_qt ) + { + /* + * Store the new value + */ + m_number_alignment = alignment_qt; + + /* + * Render and set a new icon in the tray + */ + renderIcon(); + } +} + + +/* + * Set number alignment + */ +void SysTrayXStatusNotifier::setNumberMargins( QMargins margins ) +{ + if( m_number_margins != margins ) + { + /* + * Store the new value + */ + m_number_margins = margins; + + /* + * Render and set a new icon in the tray + */ + renderIcon(); + } +} + + /* * Set the number of unread mails */ @@ -352,10 +418,12 @@ void SysTrayXStatusNotifier::renderIcon() font.setPointSizeF( font.pointSizeF() * ( factor * m_number_size / 10 ) ); font.setBold( true ); painter.setFont( font ); - painter.setPen( QColor( m_number_color ) ); - painter.drawText( pixmap.rect(), Qt::AlignCenter, QString::number( m_unread_mail ) ); + QRect bounding = pixmap.rect().adjusted( m_number_margins.left(), m_number_margins.top(), + -m_number_margins.right(), -m_number_margins.bottom()); + + painter.drawText( bounding, m_number_alignment, QString::number( m_unread_mail ) ); } /* @@ -469,6 +537,24 @@ void SysTrayXStatusNotifier::slotNumberSizeChange() } +/* + * Handle the number alignment change signal + */ +void SysTrayXStatusNotifier::slotNumberAlignmentChange() +{ + setNumberAlignment( m_pref->getNumberAlignment() ); +} + + +/* + * Handle the number margins change signal + */ +void SysTrayXStatusNotifier::slotNumberMarginsChange() +{ + setNumberMargins( m_pref->getNumberMargins() ); +} + + /* * Handle the theme change signal */ diff --git a/app/SysTray-X/systrayxstatusnotifier.h b/app/SysTray-X/systrayxstatusnotifier.h index 1804639..bcadccd 100644 --- a/app/SysTray-X/systrayxstatusnotifier.h +++ b/app/SysTray-X/systrayxstatusnotifier.h @@ -107,6 +107,20 @@ class SysTrayXStatusNotifier : public KStatusNotifierItem */ void setNumberSize( int size ); + /** + * @brief setNumberAlignment. Set the number alignment. + * + * @param alignment The alignment. + */ + void setNumberAlignment( int alignment ); + + /** + * @brief setNumberMargins. Set the number margins. + * + * @param margins The margins. + */ + void setNumberMargins( QMargins margins ); + /** * @brief setUnreadMail. Set the number of unread mails. * @@ -182,6 +196,16 @@ class SysTrayXStatusNotifier : public KStatusNotifierItem */ void slotNumberSizeChange(); + /** + * @brief slotNumberAlignmentChange. Slot for handling number alignment change signals. + */ + void slotNumberAlignmentChange(); + + /** + * @brief slotNumberMarginsChange. Slot for handling number margins change signals. + */ + void slotNumberMarginsChange(); + /** * @brief slotThemeChange. Slot for handling theme change signals. */ @@ -266,6 +290,16 @@ class SysTrayXStatusNotifier : public KStatusNotifierItem */ int m_number_size; + /** + * @brief m_number_alignment. The number alignment. + */ + int m_number_alignment; + + /** + * @brief m_margins. The number margins. + */ + QMargins m_number_margins; + /** * @brief m_unread_mail. Storage for the number of unread mails. */