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