//
#include "PartSet_IconFactory.h"
+#include "PartSet_Tools.h"
+#include "PartSet_Module.h"
+#include "XGUI_DataModel.h"
+
+#include <XGUI_Workshop.h>
+#include <XGUI_ObjectsBrowser.h>
+
#include <ModuleBase_ActionInfo.h>
#include <ModuleBase_Tools.h>
QMap<QString, QString> PartSet_IconFactory::myIcons;
-PartSet_IconFactory::PartSet_IconFactory():ModuleBase_IconFactory()
+PartSet_IconFactory::PartSet_IconFactory(PartSet_Module* theModule)
+ : ModuleBase_IconFactory(), myModule(theModule)
{
Events_Loop::loop()->registerListener(this,
Events_Loop::eventByName(Config_FeatureMessage::GUI_EVENT()));
QIcon PartSet_IconFactory::getIcon(ObjectPtr theObj)
{
- QIcon anIcon;
-
if (!theObj.get())
- return anIcon;
+ return QIcon();
+ std::string aGroup = theObj->groupName();
FeaturePtr aFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(theObj);
if (aFeature.get()) {
std::string aKind = aFeature->getKind();
QString aId(aKind.c_str());
if (!myIcons.contains(aId))
- return anIcon;
+ return QIcon();
QString anIconString = myIcons[aId];
ModelAPI_ExecState aState = aFeature->data()->execState();
- switch(aState) {
- case ModelAPI_StateDone:
- case ModelAPI_StateNothing: {
- anIcon = loadIcon(anIconString);
- }
+ switch (aState) {
+ case ModelAPI_StateMustBeUpdated:
+ return ModuleBase_Tools::composite(":icons/toWork.png", anIconString);
+ //anIcon = ModuleBase_Tools::lighter(anIconString);
break;
- case ModelAPI_StateMustBeUpdated: {
- anIcon = ModuleBase_Tools::composite(":icons/toWork.png", anIconString);
- //anIcon = ModuleBase_Tools::lighter(anIconString);
- }
+ case ModelAPI_StateExecFailed:
+ return ModuleBase_Tools::composite(":icons/isFailed.png", anIconString);
break;
- case ModelAPI_StateExecFailed: {
- anIcon = ModuleBase_Tools::composite(":icons/isFailed.png", anIconString);
- }
+ case ModelAPI_StateInvalidArgument:
+ return ModuleBase_Tools::composite(":icons/exec_state_invalid_parameters.png",
+ anIconString);
break;
- case ModelAPI_StateInvalidArgument: {
- anIcon = ModuleBase_Tools::composite(":icons/exec_state_invalid_parameters.png",
- anIconString);
- }
+ default:
+ return loadIcon(anIconString);
break;
- default: break;
}
}
//if (theObj->data() && theObj->data()->execState() == ModelAPI_StateMustBeUpdated)
// return QIcon(":pictures/constr_object_modified.png");
- std::string aGroup = theObj->groupName();
if (aGroup == ModelAPI_ResultPart::group())
return QIcon(":pictures/part_ico.png");
if (aGroup == ModelAPI_ResultConstruction::group())
return QIcon(":pictures/constr_object.png");
+ if (aGroup == ModelAPI_Folder::group()) {
+ static QString anIconString(":pictures/features_folder.png");
+ int aFirst = -1, aLast = -1;
+ PartSet_Tools::getFirstAndLastIndexInFolder(theObj, aFirst, aLast);
+ if ((aFirst != -1) && (aLast != -1)) {
+ int aNbItems = aLast - aFirst + 1;
+ if (aNbItems) {
+ XGUI_ObjectsBrowser* aObBrowser = myModule->getWorkshop()->objectBrowser();
+ XGUI_DataTree* aTree = aObBrowser->treeView();
+ QModelIndex aIndex = aTree->dataModel()->objectIndex(theObj, 0);
+ if (!aTree->isExpanded(aIndex)) {
+ DocumentPtr aDoc = theObj->document();
+ ObjectPtr aSubObj;
+ ModelAPI_ExecState aState;
+ bool aHasWarning = false;
+ for (int i = aFirst; i < aLast + 1; i++) {
+ aSubObj = aDoc->object(ModelAPI_Feature::group(), i);
+ aState = aSubObj->data()->execState();
+ if ((aState == ModelAPI_StateExecFailed) || (aState == ModelAPI_StateMustBeUpdated)) {
+ aHasWarning = true;
+ break;
+ }
+ }
+ if (aHasWarning) {
+ return QIcon(ModuleBase_Tools::composite(":icons/hasWarning.png", anIconString));
+ }
+ }
+ }
+ }
+ return loadIcon(anIconString);
+ }
+
ResultPtr aResult = std::dynamic_pointer_cast<ModelAPI_Result>(theObj);
if (aResult.get()) {
GeomShapePtr aShape = aResult->shape();
}
}
}
- return anIcon;
+ return QIcon();
}
void PartSet_IconFactory::processEvent(const std::shared_ptr<Events_Message>& theMessage)
#include <QMap>
+class PartSet_Module;
+
/**\class PartSet_IconFactory
* \ingroup GUI
* \brief This is a class is redefined in order to provide
{
public:
/// Constructor
- PartSet_IconFactory();
+ PartSet_IconFactory(PartSet_Module* theModule);
/// Returns Icon for the given object
/// \param theObj an object
private:
static QMap<QString, QString> myIcons;
+ PartSet_Module* myModule;
};
#endif
\ No newline at end of file
myRoot(0),
myIsOperationIsLaunched(false)
{
- new PartSet_IconFactory();
+ new PartSet_IconFactory(this);
mySketchMgr = new PartSet_SketcherMgr(this);
mySketchReentrantMgr = new PartSet_SketcherReentrantMgr(theWshop);
return ResultPtr();
}
+
+void PartSet_Tools::getFirstAndLastIndexInFolder(const ObjectPtr& theFolder,
+ int& theFirst, int& theLast)
+{
+ DocumentPtr aDoc = theFolder->document();
+ FolderPtr aFolder = std::dynamic_pointer_cast<ModelAPI_Folder>(theFolder);
+ if (!aFolder.get())
+ return;
+
+ AttributeReferencePtr aFirstFeatAttr = aFolder->data()->reference(ModelAPI_Folder::FIRST_FEATURE_ID());
+ FeaturePtr aFirstFeatureInFolder = ModelAPI_Feature::feature(aFirstFeatAttr->value());
+ if (!aFirstFeatureInFolder.get()) {
+ theFirst = -1;
+ return;
+ }
+ AttributeReferencePtr aLastFeatAttr =
+ aFolder->data()->reference(ModelAPI_Folder::LAST_FEATURE_ID());
+ FeaturePtr aLastFeatureInFolder = ModelAPI_Feature::feature(aLastFeatAttr->value());
+ if (!aLastFeatureInFolder.get()) {
+ theLast = -1;
+ return;
+ }
+
+ theFirst = aDoc->index(aFirstFeatureInFolder);
+ theLast = aDoc->index(aLastFeatureInFolder);
+}
\ No newline at end of file
bool theTemporary,
FeaturePtr& theCreatedFeature);
+
+ static void getFirstAndLastIndexInFolder(const ObjectPtr& theFolder, int& theFirst, int& theLast);
};
#endif
//
#include "PartSet_TreeNodes.h"
+#include "PartSet_Tools.h"
#include <ModuleBase_IconFactory.h>
#include <ModuleBase_IWorkshop.h>
return QIcon(":pictures/eyeclosed.png");
}
case 1:
- if (myObject->groupName() == ModelAPI_Folder::group())
- return QIcon(":pictures/features_folder.png");
- else
- return ModuleBase_IconFactory::get()->getIcon(myObject);
+ return ModuleBase_IconFactory::get()->getIcon(myObject);
case 2:
if (isCurrentFeature(myObject))
return QIcon(":pictures/arrow.png");
//////////////////////////////////////////////////////////////////////////////////
void PartSet_ObjectFolderNode::update()
{
- int aFirst, aLast;
- getFirstAndLastIndex(aFirst, aLast);
+ int aFirst = -1, aLast = -1;
+ PartSet_Tools::getFirstAndLastIndexInFolder(myObject, aFirst, aLast);
if ((aFirst == -1) || (aLast == -1)) {
deleteChildren();
return;
QTreeNodesList PartSet_ObjectFolderNode::objectCreated(const QObjectPtrList& theObjects)
{
QTreeNodesList aResult;
- int aFirst, aLast;
- getFirstAndLastIndex(aFirst, aLast);
+ int aFirst = -1, aLast = -1;
+ PartSet_Tools::getFirstAndLastIndexInFolder(myObject, aFirst, aLast);
if ((aFirst == -1) || (aLast == -1)) {
return aResult;
}
const QString& theGroup)
{
QTreeNodesList aResult;
- int aFirst, aLast;
- getFirstAndLastIndex(aFirst, aLast);
+ int aFirst = -1, aLast = -1;
+ PartSet_Tools::getFirstAndLastIndexInFolder(myObject, aFirst, aLast);
if ((aFirst == -1) || (aLast == -1)) {
return aResult;
}
return aResult;
}
-FeaturePtr PartSet_ObjectFolderNode::getFeature(const std::string& theId) const
-{
- FolderPtr aFolder = std::dynamic_pointer_cast<ModelAPI_Folder>(myObject);
- AttributeReferencePtr aFeatAttr = aFolder->data()->reference(theId);
- if (aFeatAttr)
- return ModelAPI_Feature::feature(aFeatAttr->value());
- return FeaturePtr();
-}
-
-void PartSet_ObjectFolderNode::getFirstAndLastIndex(int& theFirst, int& theLast) const
-{
- DocumentPtr aDoc = myObject->document();
- FolderPtr aFolder = std::dynamic_pointer_cast<ModelAPI_Folder>(myObject);
-
- FeaturePtr aFirstFeatureInFolder = getFeature(ModelAPI_Folder::FIRST_FEATURE_ID());
- if (!aFirstFeatureInFolder.get()) {
- theFirst = -1;
- return;
- }
- FeaturePtr aLastFeatureInFolder = getFeature(ModelAPI_Folder::LAST_FEATURE_ID());
- if (!aLastFeatureInFolder.get()) {
- theLast = -1;
- return;
- }
-
- theFirst = aDoc->index(aFirstFeatureInFolder);
- theLast = aDoc->index(aLastFeatureInFolder);
-}
-
-
-QVariant PartSet_ObjectFolderNode::data(int theColumn, int theRole) const
-{
- const QImage anAditional(":icons/hasWarning.png");
-
- if ((theRole == Qt::DecorationRole) && (theColumn == 1)) {
- ObjectPtr aObject;
- bool aHasWarning = false;
- foreach(ModuleBase_ITreeNode* aNode, myChildren) {
- aObject = aNode->object();
- if (aObject.get()) {
- ModelAPI_ExecState aState = aObject->data()->execState();
- if ((aState == ModelAPI_StateExecFailed) || (aState == ModelAPI_StateMustBeUpdated)) {
- aHasWarning = true;
- break;
- }
- }
- }
- if (aHasWarning) {
- return QIcon(ModuleBase_Tools::composite(":icons/hasWarning.png",
- ":pictures/features_folder.png"));
- }
- }
- return PartSet_ObjectNode::data(theColumn, theRole);
-}
//////////////////////////////////////////////////////////////////////////////////
/// \param theDoc a document where objects were deleted
/// \param theGroup a name of group where objects were deleted
virtual QTreeNodesList objectsDeleted(const DocumentPtr& theDoc, const QString& theGroup);
-
- /// Returns the node representation according to theRole.
- virtual QVariant data(int theColumn, int theRole) const;
-
-private:
- FeaturePtr getFeature(const std::string& theId) const;
-
- void getFirstAndLastIndex(int& theFirst, int& theLast) const;
};
* \ingroup GUI
* Implementation of Data Tree object for Object Browser
*/
-class XGUI_DataTree : public QTreeView
+class XGUI_EXPORT XGUI_DataTree : public QTreeView
{
Q_OBJECT
public: