1 // Copyright (C) 2014-20xx CEA/DEN, EDF R&D
3 // File: ModuleBase_WidgetConcealedObjects.cpp
4 // Created: 29 Jul 2016
5 // Author: Natalia ERMOLAEVA
7 #include <ModuleBase_WidgetConcealedObjects.h>
8 #include <ModuleBase_Tools.h>
10 #include <ModelAPI_Result.h>
11 #include <ModelAPI_AttributeReference.h>
12 #include <ModelAPI_AttributeRefList.h>
14 #include <Config_WidgetAPI.h>
16 #include <QGridLayout>
20 #include <QTableWidget>
21 #include <QHeaderView>
23 ModuleBase_WidgetConcealedObjects::ModuleBase_WidgetConcealedObjects(QWidget* theParent,
24 const Config_WidgetAPI* theData)
25 : ModuleBase_ModelWidget(theParent, theData)
27 myBaseShapeAttribute = theData->getProperty("base_shape_attribute");
28 QGridLayout* aMainLay = new QGridLayout(this);
29 ModuleBase_Tools::adjustMargins(aMainLay);
31 myView = new QTableWidget(this);
32 aMainLay->addWidget(myView);
34 myView->setColumnCount(2);
35 myView->horizontalHeader()->setVisible(false);
36 myView->verticalHeader()->setVisible(false);
39 ModuleBase_WidgetConcealedObjects::~ModuleBase_WidgetConcealedObjects()
43 bool ModuleBase_WidgetConcealedObjects::storeValueCustom()
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]);
56 int aSize = anAttributeList->size(false);
60 bool ModuleBase_WidgetConcealedObjects::restoreValueCustom()
62 FeaturePtr aBaseFeature;
65 anObject = ModuleBase_Tools::getObject(myFeature->attribute(myBaseShapeAttribute));
66 if (anObject.get() != NULL)
67 aBaseFeature = ModelAPI_Feature::feature(anObject);
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();
86 myConcealedResults[aRowId] = aResult;
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);
101 bool aBlocked = aButton->blockSignals(true);
102 aButton->setChecked(isChecked);
103 aButton->blockSignals(aBlocked);
108 QList<QWidget*> ModuleBase_WidgetConcealedObjects::getControls() const
110 QList<QWidget*> result;
115 void ModuleBase_WidgetConcealedObjects::addViewRow(const std::shared_ptr<ModelAPI_Result>& theResult)
117 int anId = myView->rowCount();
118 myView->setRowCount(anId+1);
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()));
127 void ModuleBase_WidgetConcealedObjects::onItemToggled(bool theState)
129 emit valuesChanged();
130 updateObject(myFeature);