Salome HOME
Recover Eye button
[modules/shaper.git] / src / ModuleBase / ModuleBase_WidgetConcealedObjects.cpp
1 // Copyright (C) 2014-20xx CEA/DEN, EDF R&D\r
2 \r
3 // File:        ModuleBase_WidgetConcealedObjects.cpp\r
4 // Created:     29 Jul 2016\r
5 // Author:      Natalia ERMOLAEVA\r
6 \r
7 #include <ModuleBase_WidgetConcealedObjects.h>\r
8 #include <ModuleBase_Tools.h>\r
9 \r
10 #include <ModelAPI_Result.h>\r
11 #include <ModelAPI_AttributeReference.h>\r
12 #include <ModelAPI_AttributeRefList.h>\r
13 \r
14 #include <Config_WidgetAPI.h>\r
15 \r
16 #include <QGridLayout>\r
17 \r
18 #include <QWidget>\r
19 #include <QTableWidget>\r
20 #include <QHeaderView>\r
21 #include <QToolButton>\r
22 \r
23 ModuleBase_WidgetConcealedObjects::ModuleBase_WidgetConcealedObjects(QWidget* theParent,\r
24                                                      const Config_WidgetAPI* theData)\r
25 : ModuleBase_ModelWidget(theParent, theData)\r
26 {\r
27   myBaseShapeAttribute = theData->getProperty("base_shape_attribute");\r
28   QGridLayout* aMainLay = new QGridLayout(this);\r
29   ModuleBase_Tools::adjustMargins(aMainLay);\r
30 \r
31   myView = new QTableWidget(this);\r
32   aMainLay->addWidget(myView);\r
33 \r
34   myView->setColumnCount(2);\r
35   myView->horizontalHeader()->setVisible(false);\r
36   myView->verticalHeader()->setVisible(false);\r
37 }\r
38 \r
39 ModuleBase_WidgetConcealedObjects::~ModuleBase_WidgetConcealedObjects()\r
40 {\r
41 }\r
42 \r
43 bool ModuleBase_WidgetConcealedObjects::storeValueCustom()\r
44 {\r
45   if(!myFeature)\r
46     return false;\r
47   DataPtr aData = myFeature->data();\r
48   AttributeRefListPtr anAttributeList = aData->reflist(attributeID());\r
49   anAttributeList->clear();\r
50   int aSize1 = anAttributeList->size(false);\r
51   for (int i = 0, aSize = myView->rowCount(); i < aSize; i++) {\r
52     QToolButton* aButton = dynamic_cast<QToolButton*>(myView->cellWidget(i, 0));;\r
53     if (aButton->isChecked())\r
54       anAttributeList->append(myConcealedResults[i]);\r
55   }\r
56   int aSize = anAttributeList->size(false);\r
57   return true;\r
58 }\r
59 \r
60 bool ModuleBase_WidgetConcealedObjects::restoreValueCustom()\r
61 {\r
62   FeaturePtr aBaseFeature;\r
63   ObjectPtr anObject;\r
64   if (myFeature) {\r
65     anObject = ModuleBase_Tools::getObject(myFeature->attribute(myBaseShapeAttribute));\r
66     if (anObject.get() != NULL)\r
67       aBaseFeature = ModelAPI_Feature::feature(anObject);\r
68   }\r
69   if (myBaseFeature != aBaseFeature) {\r
70     myView->setRowCount(0);\r
71     myConcealedResults.clear();\r
72     myBaseFeature = aBaseFeature;\r
73     if (myBaseFeature.get()) {\r
74       std::list<std::pair<std::string, std::list<std::shared_ptr<ModelAPI_Object> > > > aRefs;\r
75       myBaseFeature->data()->referencesToObjects(aRefs);\r
76       std::list<std::pair<std::string, std::list<ObjectPtr> > >::const_iterator\r
77                                                       anIt = aRefs.begin(), aLast = aRefs.end();\r
78       for (; anIt != aLast; anIt++) {\r
79         std::list<ObjectPtr> anObjects = (*anIt).second;\r
80         std::list<ObjectPtr>::const_iterator anOIt = anObjects.begin(), anOLast = anObjects.end();\r
81         for (; anOIt != anOLast; anOIt++) {\r
82           ResultPtr aResult = std::dynamic_pointer_cast<ModelAPI_Result>(*anOIt);\r
83           if (aResult && aResult->isConcealed()) {\r
84             int aRowId = myView->rowCount();\r
85             addViewRow(aResult);\r
86             myConcealedResults[aRowId] = aResult;\r
87           }\r
88         }\r
89       }\r
90     }\r
91   }\r
92   \r
93   DataPtr aData = myFeature->data();\r
94   AttributeRefListPtr anAttributeList = aData->reflist(attributeID());\r
95   int aSize = anAttributeList->size();\r
96   for (int i = 0, aSize = myView->rowCount(); i < aSize; i++) {\r
97     ResultPtr aResult = myConcealedResults[i];\r
98     QToolButton* aButton = dynamic_cast<QToolButton*>(myView->cellWidget(i, 0));\r
99     bool isChecked = anAttributeList->isInList(aResult);\r
100 \r
101     bool aBlocked = aButton->blockSignals(true);\r
102     aButton->setChecked(isChecked);\r
103     this->updateItemIcon(aButton);\r
104     aButton->blockSignals(aBlocked);\r
105   }\r
106   return true;\r
107 }\r
108 \r
109 QList<QWidget*> ModuleBase_WidgetConcealedObjects::getControls() const\r
110 {\r
111   QList<QWidget*> result;\r
112   result << myView;\r
113   return result;\r
114 }\r
115 \r
116 void ModuleBase_WidgetConcealedObjects::addViewRow(const std::shared_ptr<ModelAPI_Result>& theResult)\r
117 {\r
118   int anId = myView->rowCount();\r
119   myView->setRowCount(anId+1);\r
120 \r
121   QToolButton* aVisibilityBtn = new QToolButton(this);\r
122   connect(aVisibilityBtn, SIGNAL(toggled(bool)), this, SLOT(onItemToggled(bool)));\r
123   aVisibilityBtn->setCheckable(true);\r
124   aVisibilityBtn->setChecked(false);\r
125   updateItemIcon(aVisibilityBtn);\r
126 \r
127   myView->setCellWidget(anId, 0, aVisibilityBtn);\r
128   myView->setItem(anId, 1, new QTableWidgetItem(theResult->data()->name().c_str()));\r
129 }\r
130 \r
131 void ModuleBase_WidgetConcealedObjects::onItemToggled(bool theState)\r
132 {\r
133   emit valuesChanged();\r
134   updateObject(myFeature);\r
135 }\r
136 \r
137 void ModuleBase_WidgetConcealedObjects::updateItemIcon(QToolButton* theButton)\r
138 {\r
139   bool isChecked = theButton->isChecked();\r
140   theButton->setIcon(isChecked ? QIcon(":icons/concealed_on.png")\r
141                                : QIcon(":icons/concealed_off.png"));\r
142   theButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);\r
143 }\r