Added newly sized pictures, Systemtrayicon now draws numbers. Some refactorings.

This commit is contained in:
Martin Rotter 2013-06-18 19:03:55 +02:00
parent cc18e95701
commit 9a2b2ba591
15 changed files with 92 additions and 12 deletions

View File

@ -276,8 +276,12 @@ if(WIN32)
RUNTIME DESTINATION ./) RUNTIME DESTINATION ./)
install(DIRECTORY resources/graphics/themes/mini-oxygen install(DIRECTORY resources/graphics/themes/mini-oxygen
DESTINATION ./themes) DESTINATION ./themes)
install(FILES resources/graphics/${APP_LOW_NAME}.png install(FILES resources/graphics/${APP_LOW_NAME}_128.png
DESTINATION ./) DESTINATION ./
RENAME ${APP_LOW_NAME}.png)
install(FILES resources/graphics/${APP_LOW_NAME}_plain_128.png
DESTINATION ./
RENAME ${APP_LOW_NAME}_plain.png)
install(FILES ${APP_QM} install(FILES ${APP_QM}
DESTINATION ./l10n) DESTINATION ./l10n)
install(FILES ${APP_MISC} install(FILES ${APP_MISC}
@ -290,8 +294,12 @@ elseif(UNIX)
DESTINATION share/${APP_LOW_NAME}/themes) DESTINATION share/${APP_LOW_NAME}/themes)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/resources/desktop/${APP_LOW_NAME}.desktop install(FILES ${CMAKE_CURRENT_BINARY_DIR}/resources/desktop/${APP_LOW_NAME}.desktop
DESTINATION share/applications) DESTINATION share/applications)
install(FILES resources/graphics/${APP_LOW_NAME}.png install(FILES resources/graphics/${APP_LOW_NAME}_128.png
DESTINATION share/icons/hicolor/256x256/apps/) DESTINATION share/icons/hicolor/128x128/apps/
RENAME ${APP_LOW_NAME}.png)
install(FILES resources/graphics/${APP_LOW_NAME}_plain_128.png
DESTINATION share/icons/hicolor/128x128/apps/
RENAME ${APP_LOW_NAME}_plain.png)
install(FILES ${APP_QM} install(FILES ${APP_QM}
DESTINATION share/${APP_LOW_NAME}/l10n) DESTINATION share/${APP_LOW_NAME}/l10n)
install(FILES ${APP_MISC} install(FILES ${APP_MISC}

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

Before

Width:  |  Height:  |  Size: 66 KiB

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@ -29,13 +29,15 @@
#define APP_SKIN_PATH APP_PREFIX + QString("/share/rssguard/skins") #define APP_SKIN_PATH APP_PREFIX + QString("/share/rssguard/skins")
#define APP_INFO_PATH APP_PREFIX + QString("/share/rssguard/information") #define APP_INFO_PATH APP_PREFIX + QString("/share/rssguard/information")
#define APP_THEME_PATH APP_PREFIX + QString("/share/rssguard/themes") #define APP_THEME_PATH APP_PREFIX + QString("/share/rssguard/themes")
#define APP_ICON_PATH APP_PREFIX + QString("/share/icons/hicolor/256x256/apps/rssguard.png") #define APP_ICON_PATH APP_PREFIX + QString("/share/icons/hicolor/128x128/apps/@APP_LOW_NAME@.png")
#define APP_ICON_PLAIN_PATH APP_PREFIX + QString("/share/icons/hicolor/128x128/apps/@APP_LOW_NAME@_plain.png")
#elif defined(Q_OS_WIN) #elif defined(Q_OS_WIN)
#define APP_LANG_PATH QApplication::applicationDirPath() + QString("/l10n") #define APP_LANG_PATH QApplication::applicationDirPath() + QString("/l10n")
#define APP_SKIN_PATH QApplication::applicationDirPath() + QString("/skins") #define APP_SKIN_PATH QApplication::applicationDirPath() + QString("/skins")
#define APP_INFO_PATH QApplication::applicationDirPath() #define APP_INFO_PATH QApplication::applicationDirPath()
#define APP_THEME_PATH QApplication::applicationDirPath() + QString("/themes") #define APP_THEME_PATH QApplication::applicationDirPath() + QString("/themes")
#define APP_ICON_PATH QApplication::applicationDirPath() + QString("/rssguard.png") #define APP_ICON_PATH QApplication::applicationDirPath() + QString("/@APP_LOW_NAME@.png")
#define APP_ICON_PLAIN_PATH QApplication::applicationDirPath() + QString("/@APP_LOW_NAME@_plain.png")
#endif #endif
#endif // DEFS_H #endif // DEFS_H

View File

@ -24,7 +24,6 @@ FormMain::FormMain(QWidget *parent) : QMainWindow(parent), m_ui(new Ui::FormMain
// testing purposes // testing purposes
SystemTrayIcon *icon = SystemTrayIcon::getInstance(); SystemTrayIcon *icon = SystemTrayIcon::getInstance();
icon->setIcon(QIcon(APP_ICON_PATH));
icon->show(); icon->show();
} }

View File

@ -1,3 +1,5 @@
#include <QPainter>
#include "gui/systemtrayicon.h" #include "gui/systemtrayicon.h"
#include "gui/formmain.h" #include "gui/formmain.h"
#include "core/settings.h" #include "core/settings.h"
@ -6,8 +8,14 @@
QPointer<SystemTrayIcon> SystemTrayIcon::m_trayIcon; QPointer<SystemTrayIcon> SystemTrayIcon::m_trayIcon;
SystemTrayIcon::SystemTrayIcon(QObject *parent) : QSystemTrayIcon(parent) { SystemTrayIcon::SystemTrayIcon(const QString &normal_icon,
const QString &plain_icon,
QObject *parent)
: QSystemTrayIcon(parent), m_normalIcon(normal_icon), m_plainIcon(plain_icon) {
qDebug("Creating SystemTrayIcon instance."); qDebug("Creating SystemTrayIcon instance.");
// Initialize icon.
setNumber();
} }
SystemTrayIcon::~SystemTrayIcon() { SystemTrayIcon::~SystemTrayIcon() {
@ -26,9 +34,54 @@ bool SystemTrayIcon::isSystemTrayActivated() {
SystemTrayIcon *SystemTrayIcon::getInstance() { SystemTrayIcon *SystemTrayIcon::getInstance() {
if (m_trayIcon.isNull()) { if (m_trayIcon.isNull()) {
m_trayIcon = new SystemTrayIcon(FormMain::getInstance()); m_trayIcon = new SystemTrayIcon(APP_ICON_PATH,
APP_ICON_PLAIN_PATH,
FormMain::getInstance());
} }
return m_trayIcon; return m_trayIcon;
} }
void SystemTrayIcon::setNumber(int number) {
if (number < 0) {
QSystemTrayIcon::setIcon(QIcon(m_normalIcon));
}
else {
QPixmap background = QPixmap(APP_ICON_PLAIN_PATH);
QPainter trayPainter;
QFont font = QFont();
font.setBold(true);
trayPainter.begin(&background);
trayPainter.setPen(Qt::black);
// Numbers with more than 2 digits won't be readable, display
// infinity symbol in that case.
if (number > 99) {
font.setPixelSize(90);
trayPainter.setFont(font);
trayPainter.drawText(QRect(0, 0, 128, 128),
Qt::AlignVCenter | Qt::AlignCenter ,
"");
}
else {
// Smaller number if it has 2 digits.
if (number > 9) {
font.setPixelSize(70);
}
// Bigger number if it has just one digit.
else {
font.setPixelSize(90);
}
trayPainter.setFont(font);
trayPainter.drawText(QRect(0, 0, 128, 128),
Qt::AlignVCenter | Qt::AlignCenter ,
QString::number(number));
}
trayPainter.end();
QSystemTrayIcon::setIcon(QIcon(background));
}
}

View File

@ -8,7 +8,9 @@
class SystemTrayIcon : public QSystemTrayIcon { class SystemTrayIcon : public QSystemTrayIcon {
Q_OBJECT Q_OBJECT
public: public:
explicit SystemTrayIcon(QObject *parent = 0); explicit SystemTrayIcon(const QString &normal_icon,
const QString &plain_icon,
QObject *parent = 0);
~SystemTrayIcon(); ~SystemTrayIcon();
// Returns true if tray icon CAN be constructed on this machine. // Returns true if tray icon CAN be constructed on this machine.
@ -22,6 +24,9 @@ class SystemTrayIcon : public QSystemTrayIcon {
// WARNING: Use this in cooperation with SystemTrayIcon::isSystemTrayActivated(). // WARNING: Use this in cooperation with SystemTrayIcon::isSystemTrayActivated().
static SystemTrayIcon *getInstance(); static SystemTrayIcon *getInstance();
// Sets the number to be visible in the tray icon, -1 removes it.
void setNumber(int number = -1);
// TODO: Implement method for manual clearing of the tray icon. Creating of tray icon // TODO: Implement method for manual clearing of the tray icon. Creating of tray icon
// handled by getInstance(). // handled by getInstance().
signals: signals:
@ -29,6 +34,9 @@ class SystemTrayIcon : public QSystemTrayIcon {
public slots: public slots:
private: private:
QString m_normalIcon;
QString m_plainIcon;
static QPointer<SystemTrayIcon> m_trayIcon; static QPointer<SystemTrayIcon> m_trayIcon;
}; };

View File

@ -68,6 +68,10 @@ QString ThemeFactory::getCurrentIconTheme() {
return current_theme_name; return current_theme_name;
} }
QIcon ThemeFactory::fromTheme(const QString &name, const QIcon &fallback) {
return QIcon::fromTheme(name, fallback);
}
void ThemeFactory::setCurrentIconTheme(const QString &theme_name) { void ThemeFactory::setCurrentIconTheme(const QString &theme_name) {
Settings::getInstance()->setValue(APP_CFG_GUI, Settings::getInstance()->setValue(APP_CFG_GUI,
"icon_theme", "icon_theme",

View File

@ -3,6 +3,7 @@
#include <QString> #include <QString>
#include <QEvent> #include <QEvent>
#include <QIcon>
class ThemeFactory { class ThemeFactory {
@ -35,6 +36,11 @@ class ThemeFactory {
// Sets icon theme with given name as the active one. // Sets icon theme with given name as the active one.
static void setCurrentIconTheme(const QString &theme_name); static void setCurrentIconTheme(const QString &theme_name);
// Wrapper for QIcon::fromTheme.
// If icon is not found in user-defined icon theme,
// then it is searched in system-default theme (ThemeFactory::getSystemIconTheme()).
static QIcon fromTheme(const QString & name, const QIcon & fallback = QIcon());
}; };
class ThemeFactoryEvent : public QEvent { class ThemeFactoryEvent : public QEvent {

View File

@ -50,7 +50,7 @@ int main(int argc, char *argv[]) {
// This is useful for styles, encoders, ... // This is useful for styles, encoders, ...
// This is probably not needed on Windows or Linux, not sure about Mac OS X. // This is probably not needed on Windows or Linux, not sure about Mac OS X.
#if defined(Q_OS_MAC) #if defined(Q_OS_MAC)
QApplication::addLibraryPath(APP_PLUGIN_PATH); QtSingleApplication::addLibraryPath(APP_PLUGIN_PATH);
#endif #endif
// Add an extra path for non-system icon themes. // Add an extra path for non-system icon themes.
@ -64,7 +64,7 @@ int main(int argc, char *argv[]) {
QtSingleApplication::setApplicationVersion(APP_VERSION); QtSingleApplication::setApplicationVersion(APP_VERSION);
QtSingleApplication::setOrganizationName(APP_AUTHORS); QtSingleApplication::setOrganizationName(APP_AUTHORS);
QtSingleApplication::setOrganizationDomain(APP_URL); QtSingleApplication::setOrganizationDomain(APP_URL);
QtSingleApplication::setWindowIcon(QIcon(APP_INFO_PATH)); QtSingleApplication::setWindowIcon(QIcon(APP_ICON_PATH));
// Instantiate main application window. // Instantiate main application window.
FormMain window; FormMain window;