diff --git a/src/Gui/Tree.cpp b/src/Gui/Tree.cpp index e76c7b8a8e..222625d279 100644 --- a/src/Gui/Tree.cpp +++ b/src/Gui/Tree.cpp @@ -4670,6 +4670,8 @@ void DocumentObjectItem::testStatus(bool resetStatus, QIcon &icon1, QIcon &icon2 icon.addPixmap(pxOn, QIcon::Normal, QIcon::On); icon.addPixmap(pxOff, QIcon::Normal, QIcon::Off); + + icon = object()->mergeColorfulOverlayIcons(icon); } diff --git a/src/Gui/ViewProvider.cpp b/src/Gui/ViewProvider.cpp index ba98ea4d16..e8e39ffe7e 100644 --- a/src/Gui/ViewProvider.cpp +++ b/src/Gui/ViewProvider.cpp @@ -302,10 +302,10 @@ void ViewProvider::update(const App::Property* prop) QIcon ViewProvider::getIcon(void) const { - return mergeOverlayIcons (Gui::BitmapFactory().pixmap(sPixmap)); + return mergeGreyableOverlayIcons (Gui::BitmapFactory().pixmap(sPixmap)); } -QIcon ViewProvider::mergeOverlayIcons (const QIcon & orig) const +QIcon ViewProvider::mergeGreyableOverlayIcons (const QIcon & orig) const { auto vector = getExtensionsDerivedFromType(); @@ -313,7 +313,21 @@ QIcon ViewProvider::mergeOverlayIcons (const QIcon & orig) const for (Gui::ViewProviderExtension* ext : vector) { if (!ext->ignoreOverlayIcon()) - overlayedIcon = ext->extensionMergeOverlayIcons(overlayedIcon); + overlayedIcon = ext->extensionMergeGreyableOverlayIcons(overlayedIcon); + } + + return overlayedIcon; +} + +QIcon ViewProvider::mergeColorfulOverlayIcons (const QIcon & orig) const +{ + auto vector = getExtensionsDerivedFromType(); + + QIcon overlayedIcon = orig; + + for (Gui::ViewProviderExtension* ext : vector) { + if (!ext->ignoreOverlayIcon()) + overlayedIcon = ext->extensionMergeColorfullOverlayIcons(overlayedIcon); } return overlayedIcon; diff --git a/src/Gui/ViewProvider.h b/src/Gui/ViewProvider.h index 9c489e55eb..257f5a6167 100644 --- a/src/Gui/ViewProvider.h +++ b/src/Gui/ViewProvider.h @@ -237,12 +237,20 @@ public: /** @name Methods used by the Tree * If you want to take control over the * appearance of your object in the tree you - * can reimplemnt these methods. + * can reimplement these methods. */ //@{ /// deliver the icon shown in the tree view virtual QIcon getIcon(void) const; + /** @name Methods used by the Tree + * If you want to take control over the + * viewprovider specific overlay icons that will be drawn with color + * regardless of whether the icon is greyed out or not, such as status, you + * can reimplement this method. + */ + virtual QIcon mergeColorfulOverlayIcons (const QIcon & orig) const; + /** deliver the children belonging to this object * this method is used to deliver the objects to * the tree framework which should be grouped under its @@ -530,13 +538,12 @@ protected: /// Reimplemented from subclass void onChanged(const App::Property* prop); - /** @name Methods used by the Tree * If you want to take control over the - * viewprovider specific overlay icons, such as status, you - * can reimplement this method. + * viewprovider specific overlay icons, that will be grayed out together + * with the base icon, you can reimplement this method. */ - virtual QIcon mergeOverlayIcons (const QIcon & orig) const; + virtual QIcon mergeGreyableOverlayIcons (const QIcon & orig) const; /// Turn on mode switch virtual void setModeSwitch(); diff --git a/src/Gui/ViewProviderDocumentObjectGroup.cpp b/src/Gui/ViewProviderDocumentObjectGroup.cpp index 711ec667a9..635d9ee495 100644 --- a/src/Gui/ViewProviderDocumentObjectGroup.cpp +++ b/src/Gui/ViewProviderDocumentObjectGroup.cpp @@ -80,7 +80,7 @@ bool ViewProviderDocumentObjectGroup::isShow(void) const QIcon ViewProviderDocumentObjectGroup::getIcon(void) const { - return mergeOverlayIcons (Gui::BitmapFactory().iconFromTheme(sPixmap)); + return mergeGreyableOverlayIcons (Gui::BitmapFactory().iconFromTheme(sPixmap)); } /** diff --git a/src/Gui/ViewProviderExtension.h b/src/Gui/ViewProviderExtension.h index 49549a00fb..dd6ce09bfd 100644 --- a/src/Gui/ViewProviderExtension.h +++ b/src/Gui/ViewProviderExtension.h @@ -101,7 +101,8 @@ public: bool ignoreOverlayIcon() const { return m_ignoreOverlayIcon; } - virtual QIcon extensionMergeOverlayIcons(const QIcon & orig) const {return orig;} + virtual QIcon extensionMergeGreyableOverlayIcons(const QIcon & orig) const {return orig;} + virtual QIcon extensionMergeColorfullOverlayIcons(const QIcon & orig) const {return orig;} virtual void extensionStartRestoring() {} virtual void extensionFinishRestoring() {} diff --git a/src/Gui/ViewProviderPythonFeature.h b/src/Gui/ViewProviderPythonFeature.h index 74e7fd8d54..bd522ed5c2 100644 --- a/src/Gui/ViewProviderPythonFeature.h +++ b/src/Gui/ViewProviderPythonFeature.h @@ -212,7 +212,7 @@ public: if (icon.isNull()) icon = ViewProviderT::getIcon(); else - icon = ViewProviderT::mergeOverlayIcons(icon); + icon = ViewProviderT::mergeGreyableOverlayIcons(icon); return icon; } diff --git a/src/Mod/Part/Gui/ViewProviderAttachExtension.cpp b/src/Mod/Part/Gui/ViewProviderAttachExtension.cpp index 2b789892ca..81af5e036d 100644 --- a/src/Mod/Part/Gui/ViewProviderAttachExtension.cpp +++ b/src/Mod/Part/Gui/ViewProviderAttachExtension.cpp @@ -50,7 +50,7 @@ ViewProviderAttachExtension::ViewProviderAttachExtension() initExtensionType(ViewProviderAttachExtension::getExtensionClassTypeId()); } -QIcon ViewProviderAttachExtension::extensionMergeOverlayIcons(const QIcon & orig) const +QIcon ViewProviderAttachExtension::extensionMergeColorfullOverlayIcons (const QIcon & orig) const { QIcon mergedicon = orig; diff --git a/src/Mod/Part/Gui/ViewProviderAttachExtension.h b/src/Mod/Part/Gui/ViewProviderAttachExtension.h index 0df1ec2b1d..281f9109db 100644 --- a/src/Mod/Part/Gui/ViewProviderAttachExtension.h +++ b/src/Mod/Part/Gui/ViewProviderAttachExtension.h @@ -39,7 +39,7 @@ public: ViewProviderAttachExtension(void); virtual ~ViewProviderAttachExtension() = default; - virtual QIcon extensionMergeOverlayIcons(const QIcon & orig) const override; + virtual QIcon extensionMergeColorfullOverlayIcons (const QIcon & orig) const override; virtual void extensionUpdateData(const App::Property*) override; virtual void extensionSetupContextMenu(QMenu*, QObject*, const char*) override; diff --git a/src/Mod/PartDesign/Gui/ViewProvider.cpp b/src/Mod/PartDesign/Gui/ViewProvider.cpp index 45aff0b35d..dff2defa82 100644 --- a/src/Mod/PartDesign/Gui/ViewProvider.cpp +++ b/src/Mod/PartDesign/Gui/ViewProvider.cpp @@ -221,7 +221,7 @@ void ViewProvider::setTipIcon(bool onoff) { signalChangeIcon(); } -QIcon ViewProvider::mergeOverlayIcons (const QIcon & orig) const +QIcon ViewProvider::mergeColorfulOverlayIcons (const QIcon & orig) const { QIcon mergedicon = orig; @@ -248,7 +248,7 @@ QIcon ViewProvider::mergeOverlayIcons (const QIcon & orig) const } - return Gui::ViewProvider::mergeOverlayIcons(mergedicon); + return Gui::ViewProvider::mergeColorfulOverlayIcons (mergedicon); } bool ViewProvider::onDelete(const std::vector &) diff --git a/src/Mod/PartDesign/Gui/ViewProvider.h b/src/Mod/PartDesign/Gui/ViewProvider.h index bd01da596a..1506f5eef2 100644 --- a/src/Mod/PartDesign/Gui/ViewProvider.h +++ b/src/Mod/PartDesign/Gui/ViewProvider.h @@ -70,6 +70,8 @@ public: virtual PyObject* getPyObject(void) override; + virtual QIcon mergeColorfulOverlayIcons (const QIcon & orig) const override; + protected: virtual void setupContextMenu(QMenu* menu, QObject* receiver, const char* member) override; virtual bool setEdit(int ModNum) override; @@ -77,8 +79,6 @@ protected: virtual bool onDelete(const std::vector &) override; - virtual QIcon mergeOverlayIcons (const QIcon & orig) const override; - /** * Returns a newly create dialog for the part to be placed in the task view * Must be reimplemented in subclasses. diff --git a/src/Mod/PartDesign/Gui/ViewProviderLoft.cpp b/src/Mod/PartDesign/Gui/ViewProviderLoft.cpp index 0add8ea7f9..74ac82d685 100644 --- a/src/Mod/PartDesign/Gui/ViewProviderLoft.cpp +++ b/src/Mod/PartDesign/Gui/ViewProviderLoft.cpp @@ -174,6 +174,6 @@ QIcon ViewProviderLoft::getIcon(void) const { str += QString::fromLatin1("Subtractive_"); str += QString::fromLatin1("Loft.svg"); - return PartDesignGui::ViewProvider::mergeOverlayIcons(Gui::BitmapFactory().pixmap(str.toStdString().c_str())); + return PartDesignGui::ViewProvider::mergeGreyableOverlayIcons(Gui::BitmapFactory().pixmap(str.toStdString().c_str())); } diff --git a/src/Mod/PartDesign/Gui/ViewProviderPipe.cpp b/src/Mod/PartDesign/Gui/ViewProviderPipe.cpp index 810060f395..129c19116f 100644 --- a/src/Mod/PartDesign/Gui/ViewProviderPipe.cpp +++ b/src/Mod/PartDesign/Gui/ViewProviderPipe.cpp @@ -207,6 +207,6 @@ QIcon ViewProviderPipe::getIcon(void) const { str += QString::fromLatin1("Subtractive_"); str += QString::fromLatin1("Pipe.svg"); - return PartDesignGui::ViewProvider::mergeOverlayIcons(Gui::BitmapFactory().pixmap(str.toStdString().c_str())); + return PartDesignGui::ViewProvider::mergeGreyableOverlayIcons(Gui::BitmapFactory().pixmap(str.toStdString().c_str())); } diff --git a/src/Mod/PartDesign/Gui/ViewProviderPrimitive.cpp b/src/Mod/PartDesign/Gui/ViewProviderPrimitive.cpp index b11fcc7203..531dcec642 100644 --- a/src/Mod/PartDesign/Gui/ViewProviderPrimitive.cpp +++ b/src/Mod/PartDesign/Gui/ViewProviderPrimitive.cpp @@ -172,5 +172,5 @@ QIcon ViewProviderPrimitive::getIcon(void) const { } str += QString::fromLatin1(".svg"); - return PartDesignGui::ViewProvider::mergeOverlayIcons(Gui::BitmapFactory().pixmap(str.toStdString().c_str())); + return PartDesignGui::ViewProvider::mergeGreyableOverlayIcons(Gui::BitmapFactory().pixmap(str.toStdString().c_str())); } diff --git a/src/Mod/TechDraw/Gui/ViewProviderCosmeticExtension.cpp b/src/Mod/TechDraw/Gui/ViewProviderCosmeticExtension.cpp index ee9a727986..6c875997f7 100644 --- a/src/Mod/TechDraw/Gui/ViewProviderCosmeticExtension.cpp +++ b/src/Mod/TechDraw/Gui/ViewProviderCosmeticExtension.cpp @@ -47,7 +47,7 @@ ViewProviderCosmeticExtension::ViewProviderCosmeticExtension() initExtensionType(ViewProviderCosmeticExtension::getExtensionClassTypeId()); } -QIcon ViewProviderCosmeticExtension::extensionMergeOverlayIcons(const QIcon & orig) const +QIcon ViewProviderCosmeticExtension::extensionMergeGreyableOverlayIcons(const QIcon & orig) const { QIcon mergedicon = orig; diff --git a/src/Mod/TechDraw/Gui/ViewProviderCosmeticExtension.h b/src/Mod/TechDraw/Gui/ViewProviderCosmeticExtension.h index fe9bb30947..c1a1168e9e 100644 --- a/src/Mod/TechDraw/Gui/ViewProviderCosmeticExtension.h +++ b/src/Mod/TechDraw/Gui/ViewProviderCosmeticExtension.h @@ -39,7 +39,7 @@ public: ViewProviderCosmeticExtension(void); virtual ~ViewProviderCosmeticExtension() = default; - virtual QIcon extensionMergeOverlayIcons(const QIcon & orig) const override; + virtual QIcon extensionMergeGreyableOverlayIcons(const QIcon & orig) const override; virtual void extensionUpdateData(const App::Property*) override;