Salome HOME
1b14529e43d96882fb47f4e02dba508e4b43d8bd
[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 #include <ModelAPI_Session.h>
14 #include <ModelAPI_Validator.h>
15 #include <ModelAPI_Tools.h>
16
17 #include <Config_WidgetAPI.h>
18
19 #include <QGridLayout>
20
21 #include <QWidget>
22 #include <QTableWidget>
23 #include <QHeaderView>
24 #include <QCheckBox>
25 #include <QVBoxLayout>
26
27 const int DEFAULT_NAME_COLUMN_WIDTH = 200;
28
29 ModuleBase_WidgetConcealedObjects::ModuleBase_WidgetConcealedObjects(QWidget* theParent,
30                                                      const Config_WidgetAPI* theData)
31 : ModuleBase_ModelWidget(theParent, theData)
32 {
33   myBaseShapeAttribute = theData->getProperty("base_shape_attribute");
34   QGridLayout* aMainLay = new QGridLayout(this);
35   ModuleBase_Tools::adjustMargins(aMainLay);
36
37   myView = new QTableWidget(this);
38   aMainLay->addWidget(myView);
39
40   myView->setColumnCount(2);
41   myView->horizontalHeader()->setVisible(false);
42   myView->verticalHeader()->setVisible(false);
43 }
44
45 ModuleBase_WidgetConcealedObjects::~ModuleBase_WidgetConcealedObjects()
46 {
47 }
48
49 bool ModuleBase_WidgetConcealedObjects::storeValueCustom()
50 {
51   if(!myFeature)
52     return false;
53   DataPtr aData = myFeature->data();
54   AttributeRefListPtr anAttributeList = aData->reflist(attributeID());
55   anAttributeList->clear();
56   int aSize1 = anAttributeList->size(false);
57   for (int i = 0, aSize = myView->rowCount(); i < aSize; i++) {
58     QCheckBox* aButton = dynamic_cast<QCheckBox*>(myView->cellWidget(i, 0)->findChild<QCheckBox*>());
59     if (aButton->isChecked())
60       anAttributeList->append(myConcealedResults[i]);
61   }
62   int aSize = anAttributeList->size(false);
63   return true;
64 }
65
66 bool ModuleBase_WidgetConcealedObjects::restoreValueCustom()
67 {
68   FeaturePtr aBaseFeature;
69   ObjectPtr anObject;
70   if (myFeature) {
71     anObject = ModuleBase_Tools::getObject(myFeature->attribute(myBaseShapeAttribute));
72     if (anObject.get() != NULL)
73       aBaseFeature = ModelAPI_Feature::feature(anObject);
74   }
75   if (myBaseFeature != aBaseFeature) {
76     myView->setRowCount(0);
77     myConcealedResults.clear();
78     myBaseFeature = aBaseFeature;
79     if (myBaseFeature.get()) {
80       std::list<std::shared_ptr<ModelAPI_Result> > aResults;
81       ModelAPI_Tools::getConcealedResults(myBaseFeature, aResults);
82       std::list<std::shared_ptr<ModelAPI_Result> >::const_iterator anIt = aResults.begin(),
83                                                                    aLast = aResults.end();
84       for (; anIt != aLast; anIt++) {
85         ResultPtr aResult = *anIt;
86
87         int aRowId = myView->rowCount();
88         addViewRow(aResult);
89         myConcealedResults[aRowId] = aResult;
90       }
91     }
92   }
93
94   DataPtr aData = myFeature->data();
95   AttributeRefListPtr anAttributeList = aData->reflist(attributeID());
96   int aSize = anAttributeList->size();
97   for (int i = 0, aSize = myView->rowCount(); i < aSize; i++) {
98     ResultPtr aResult = myConcealedResults[i];
99     QCheckBox* aButton = dynamic_cast<QCheckBox*>(myView->cellWidget(i, 0)->findChild<QCheckBox*>());
100     bool isChecked = anAttributeList->isInList(aResult);
101
102     bool aBlocked = aButton->blockSignals(true);
103     aButton->setChecked(isChecked);
104     aButton->blockSignals(aBlocked);
105   }
106   return true;
107 }
108
109 QList<QWidget*> ModuleBase_WidgetConcealedObjects::getControls() const
110 {
111   QList<QWidget*> result;
112   result << myView;
113   return result;
114 }
115
116 void ModuleBase_WidgetConcealedObjects::addViewRow(
117                                 const std::shared_ptr<ModelAPI_Result>& theResult)
118 {
119   int anId = myView->rowCount();
120   myView->setRowCount(anId+1);
121
122   QWidget* aVisibilityWdg = new QWidget(this);
123   QVBoxLayout* aVisibilityLay = new QVBoxLayout(aVisibilityWdg);
124   aVisibilityLay->setContentsMargins(2, 2, 2, 2);
125   QCheckBox* aVisibilityBtn = new QCheckBox(aVisibilityWdg);
126   aVisibilityLay->addWidget(aVisibilityBtn, 0, Qt::AlignHCenter);
127   connect(aVisibilityBtn, SIGNAL(toggled(bool)), this, SLOT(onItemToggled(bool)));
128   aVisibilityBtn->setChecked(false);
129
130   myView->setCellWidget(anId, 0, aVisibilityWdg);
131   myView->setItem(anId, 1, new QTableWidgetItem(theResult->data()->name().c_str()));
132
133   if (anId == 1) {
134     myView->setColumnWidth(0, myView->verticalHeader()->defaultSectionSize());
135     myView->setColumnWidth(1, DEFAULT_NAME_COLUMN_WIDTH);
136   }
137 }
138
139 void ModuleBase_WidgetConcealedObjects::onItemToggled(bool theState)
140 {
141   emit valuesChanged();
142   updateObject(myFeature);
143 }
144