From 4facab0936e6998620d91fe54092342756d2ec87 Mon Sep 17 00:00:00 2001 From: Abdullah Tahiri Date: Sun, 3 Jan 2021 05:25:25 +0100 Subject: [PATCH] Gui: Colorful/Greyable overlay status in icons =============================================== Before this implementation, specific status via former mergeOverlayIcon() was greyed out with the visibility. With this commit, the developer has two options: a) override mergeGreyableOverlayIcons, in which case the overlay will be greyed out when the item is greyed out as per former mergeOverlayIcon() b) override mergeColorfulOverlayIcons, in which case the overlay will be superimposed after the icon is greyed out as it is the case for stardard error and recompute flags. --- src/Gui/Tree.cpp | 2 ++ src/Gui/ViewProvider.cpp | 20 ++++++++++++++++--- src/Gui/ViewProvider.h | 17 +++++++++++----- src/Gui/ViewProviderDocumentObjectGroup.cpp | 2 +- src/Gui/ViewProviderExtension.h | 3 ++- src/Gui/ViewProviderPythonFeature.h | 2 +- .../Part/Gui/ViewProviderAttachExtension.cpp | 2 +- .../Part/Gui/ViewProviderAttachExtension.h | 2 +- src/Mod/PartDesign/Gui/ViewProvider.cpp | 4 ++-- src/Mod/PartDesign/Gui/ViewProvider.h | 4 ++-- src/Mod/PartDesign/Gui/ViewProviderLoft.cpp | 2 +- src/Mod/PartDesign/Gui/ViewProviderPipe.cpp | 2 +- .../PartDesign/Gui/ViewProviderPrimitive.cpp | 2 +- .../Gui/ViewProviderCosmeticExtension.cpp | 2 +- .../Gui/ViewProviderCosmeticExtension.h | 2 +- 15 files changed, 46 insertions(+), 22 deletions(-) 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;