From cd0b369425c46de3f0f21993a86fef01640ea442 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sun, 28 Jun 2015 23:30:42 +0200 Subject: [PATCH] + issue #0002053: Support of themes --- src/Gui/BitmapFactory.cpp | 13 +++++++++++++ src/Gui/BitmapFactory.h | 5 +++++ src/Gui/Command.cpp | 10 +++++----- src/Gui/CommandDoc.cpp | 4 ++-- src/Gui/CommandStd.cpp | 2 +- src/Gui/CommandView.cpp | 12 ++++++------ 6 files changed, 32 insertions(+), 14 deletions(-) diff --git a/src/Gui/BitmapFactory.cpp b/src/Gui/BitmapFactory.cpp index e3d930023..b46243753 100644 --- a/src/Gui/BitmapFactory.cpp +++ b/src/Gui/BitmapFactory.cpp @@ -188,6 +188,19 @@ bool BitmapFactoryInst::findPixmapInCache(const char* name, QPixmap& px) const return false; } +QIcon BitmapFactoryInst::iconFromTheme(const char* name, const QIcon& fallback) +{ + QString iconName = QString::fromLatin1(name); + QIcon icon = QIcon::fromTheme(iconName, fallback); + if (icon.isNull()) { + QPixmap px = pixmap(name); + if (!px.isNull()) + icon.addPixmap(px); + } + + return icon; +} + bool BitmapFactoryInst::loadPixmap(const QString& filename, QPixmap& icon) const { QFileInfo fi(filename); diff --git a/src/Gui/BitmapFactory.h b/src/Gui/BitmapFactory.h index 478585d30..f506e07c0 100644 --- a/src/Gui/BitmapFactory.h +++ b/src/Gui/BitmapFactory.h @@ -26,6 +26,7 @@ #include #include +#include // forward declaration class SoSFImage; @@ -68,6 +69,10 @@ public: void addPixmapToCache(const char* name, const QPixmap& icon); /// Checks whether the pixmap is already registered. bool findPixmapInCache(const char* name, QPixmap& icon) const; + /** Returns the QIcon corresponding to name in the current icon theme. + * If no such icon is found in the current theme fallback is returned instead. + */ + QIcon iconFromTheme(const char* name, const QIcon& fallback = QIcon()); /// Retrieves a pixmap by name QPixmap pixmap(const char* name) const; /** Retrieves a pixmap by name and size created by an diff --git a/src/Gui/Command.cpp b/src/Gui/Command.cpp index d3717e638..384af52ec 100644 --- a/src/Gui/Command.cpp +++ b/src/Gui/Command.cpp @@ -660,7 +660,7 @@ Action * Command::createAction(void) pcAction->setShortcut(QString::fromAscii(sAccel)); applyCommandData(this->className(), pcAction); if (sPixmap) - pcAction->setIcon(Gui::BitmapFactory().pixmap(sPixmap)); + pcAction->setIcon(Gui::BitmapFactory().iconFromTheme(sPixmap)); return pcAction; } @@ -907,7 +907,7 @@ Action * PythonCommand::createAction(void) pcAction->setShortcut(QString::fromAscii(getAccel())); applyCommandData(this->getName(), pcAction); if (strcmp(getResource("Pixmap"),"") != 0) - pcAction->setIcon(Gui::BitmapFactory().pixmap(getResource("Pixmap"))); + pcAction->setIcon(Gui::BitmapFactory().iconFromTheme(getResource("Pixmap"))); return pcAction; } @@ -1083,7 +1083,7 @@ Action * PythonGroupCommand::createAction(void) languageChange(); if (strcmp(getResource("Pixmap"),"") != 0) { - pcAction->setIcon(Gui::BitmapFactory().pixmap(getResource("Pixmap"))); + pcAction->setIcon(Gui::BitmapFactory().iconFromTheme(getResource("Pixmap"))); } else { QList a = pcAction->actions(); @@ -1113,13 +1113,13 @@ void PythonGroupCommand::languageChange() Gui::Command* cmd = rcCmdMgr.getCommandByName((*it)->property("CommandName").toByteArray()); // Python command use getName as context if (dynamic_cast(cmd)) { - (*it)->setIcon(Gui::BitmapFactory().pixmap(cmd->getPixmap())); + (*it)->setIcon(Gui::BitmapFactory().iconFromTheme(cmd->getPixmap())); (*it)->setText(QApplication::translate(cmd->getName(), cmd->getMenuText())); (*it)->setToolTip(QApplication::translate(cmd->getName(), cmd->getToolTipText())); (*it)->setStatusTip(QApplication::translate(cmd->getName(), cmd->getStatusTip())); } else if (cmd) { - (*it)->setIcon(Gui::BitmapFactory().pixmap(cmd->getPixmap())); + (*it)->setIcon(Gui::BitmapFactory().iconFromTheme(cmd->getPixmap())); (*it)->setText(QApplication::translate(cmd->className(), cmd->getMenuText())); (*it)->setToolTip(QApplication::translate(cmd->className(), cmd->getToolTipText())); (*it)->setStatusTip(QApplication::translate(cmd->className(), cmd->getStatusTip())); diff --git a/src/Gui/CommandDoc.cpp b/src/Gui/CommandDoc.cpp index 0bc3d085a..5aa1e6368 100644 --- a/src/Gui/CommandDoc.cpp +++ b/src/Gui/CommandDoc.cpp @@ -717,7 +717,7 @@ Action * StdCmdUndo::createAction(void) pcAction->setShortcut(QString::fromAscii(sAccel)); applyCommandData(this->className(), pcAction); if (sPixmap) - pcAction->setIcon(Gui::BitmapFactory().pixmap(sPixmap)); + pcAction->setIcon(Gui::BitmapFactory().iconFromTheme(sPixmap)); return pcAction; } @@ -760,7 +760,7 @@ Action * StdCmdRedo::createAction(void) pcAction->setShortcut(QString::fromAscii(sAccel)); applyCommandData(this->className(), pcAction); if (sPixmap) - pcAction->setIcon(Gui::BitmapFactory().pixmap(sPixmap)); + pcAction->setIcon(Gui::BitmapFactory().iconFromTheme(sPixmap)); return pcAction; } diff --git a/src/Gui/CommandStd.cpp b/src/Gui/CommandStd.cpp index 06a19a463..11473373f 100644 --- a/src/Gui/CommandStd.cpp +++ b/src/Gui/CommandStd.cpp @@ -127,7 +127,7 @@ Action * StdCmdWorkbench::createAction(void) pcAction->setShortcut(QString::fromAscii(sAccel)); applyCommandData(this->className(), pcAction); if (sPixmap) - pcAction->setIcon(Gui::BitmapFactory().pixmap(sPixmap)); + pcAction->setIcon(Gui::BitmapFactory().iconFromTheme(sPixmap)); return pcAction; } diff --git a/src/Gui/CommandView.cpp b/src/Gui/CommandView.cpp index 254261028..a72bebd9f 100644 --- a/src/Gui/CommandView.cpp +++ b/src/Gui/CommandView.cpp @@ -563,20 +563,20 @@ Gui::Action * StdCmdDrawStyle::createAction(void) QAction* a0 = pcAction->addAction(QString()); a0->setCheckable(true); - a0->setIcon(BitmapFactory().pixmap("DrawStyleAsIs")); + a0->setIcon(BitmapFactory().iconFromTheme("DrawStyleAsIs")); a0->setChecked(true); QAction* a1 = pcAction->addAction(QString()); a1->setCheckable(true); - a1->setIcon(BitmapFactory().pixmap("DrawStyleFlatLines")); + a1->setIcon(BitmapFactory().iconFromTheme("DrawStyleFlatLines")); QAction* a2 = pcAction->addAction(QString()); a2->setCheckable(true); - a2->setIcon(BitmapFactory().pixmap("DrawStyleShaded")); + a2->setIcon(BitmapFactory().iconFromTheme("DrawStyleShaded")); QAction* a3 = pcAction->addAction(QString()); a3->setCheckable(true); - a3->setIcon(BitmapFactory().pixmap("DrawStyleWireFrame")); + a3->setIcon(BitmapFactory().iconFromTheme("DrawStyleWireFrame")); QAction* a4 = pcAction->addAction(QString()); a4->setCheckable(true); - a4->setIcon(BitmapFactory().pixmap("DrawStylePoints")); + a4->setIcon(BitmapFactory().iconFromTheme("DrawStylePoints")); pcAction->setIcon(a0->icon()); _pcAction = pcAction; @@ -1364,7 +1364,7 @@ Action * StdViewDockUndockFullscreen::createAction(void) QCoreApplication::CodecForTr)); fullscr->setShortcut(Qt::Key_F11); fullscr->setCheckable(true); - fullscr->setIcon(Gui::BitmapFactory().pixmap("view-fullscreen")); + fullscr->setIcon(Gui::BitmapFactory().iconFromTheme("view-fullscreen")); return pcAction; }