Salome HOME
Issue #2024: Redesign of circle and arc of circle (validate preselected object)
[modules/shaper.git] / src / ModuleBase / ModuleBase_WidgetValidator.cpp
1 // Copyright (C) 2014-20xx CEA/DEN, EDF R&D
2
3 #include <ModuleBase_WidgetValidator.h>
4 #include <ModuleBase_WidgetSelectorStore.h>
5 #include <ModuleBase_WidgetValidated.h>
6
7 #include <ModuleBase_ModelWidget.h>
8 #include <ModuleBase_ViewerPrs.h>
9 #include <ModuleBase_IViewer.h>
10 #include <ModuleBase_IWorkshop.h>
11
12 ModuleBase_WidgetValidator::ModuleBase_WidgetValidator(ModuleBase_ModelWidget* theModelWidget,
13                                                        ModuleBase_IWorkshop* theWorkshop)
14 : myModelWidget(theModelWidget), myWorkshop(theWorkshop), myIsInValidate(false)
15 {
16   myAttributeStore = new ModuleBase_WidgetSelectorStore();
17 }
18
19 ModuleBase_WidgetValidator::~ModuleBase_WidgetValidator()
20 {
21   delete myAttributeStore;
22 }
23
24 //********************************************************************
25 bool ModuleBase_WidgetValidator::isValidSelection(const ModuleBase_ViewerPrsPtr& theValue)
26 {
27   bool aValid = false;
28   if (getValidState(theValue, aValid))
29     return aValid;
30
31   aValid = myModelWidget->isValidSelectionCustom(theValue);
32
33   storeValidState(theValue, aValid);
34   return aValid;
35 }
36
37 bool ModuleBase_WidgetValidator::activateFilters(const bool toActivate)
38 {
39   ModuleBase_IViewer* aViewer = myWorkshop->viewer();
40
41   Handle(SelectMgr_Filter) aSelFilter = myWorkshop->validatorFilter();
42   bool aHasSelectionFilter = aViewer->hasSelectionFilter(aSelFilter);
43
44   if (toActivate)
45     aViewer->addSelectionFilter(aSelFilter);
46   else {
47     aViewer->removeSelectionFilter(aSelFilter);
48     clearValidatedCash();
49   }
50
51   return aHasSelectionFilter;
52 }
53
54 void ModuleBase_WidgetValidator::storeAttributeValue(const AttributePtr& theAttribute)
55 {
56   myIsInValidate = true;
57   myAttributeStore->storeAttributeValue(theAttribute, myWorkshop);
58 }
59
60 void ModuleBase_WidgetValidator::restoreAttributeValue(const AttributePtr& theAttribute,
61                                                        const bool theValid)
62 {
63   myIsInValidate = false;
64   myAttributeStore->restoreAttributeValue(theAttribute, myWorkshop);
65 }
66
67 bool ModuleBase_WidgetValidator::isValidAttribute(const AttributePtr& theAttribute) const
68 {
69   return ModuleBase_WidgetValidated::isValidAttribute(theAttribute);
70 }
71
72 bool ModuleBase_WidgetValidator::isFilterActivated() const
73 {
74   bool isActivated = false;
75
76   Handle(SelectMgr_Filter) aSelFilter = myWorkshop->validatorFilter();
77   ModuleBase_IViewer* aViewer = myWorkshop->viewer();
78
79   return aViewer->hasSelectionFilter(aSelFilter);
80 }
81
82 void ModuleBase_WidgetValidator::clearValidatedCash()
83 {
84   myValidPrs.clear();
85   myInvalidPrs.clear();
86 }
87
88 bool ModuleBase_WidgetValidator::getValidState(const ModuleBase_ViewerPrsPtr& theValue,
89                                                bool& theValid)
90 {
91   bool aValidPrs = myValidPrs.contains(theValue);
92   bool anInvalidPrs = myInvalidPrs.contains(theValue);
93
94   if (aValidPrs)
95     theValid = true;
96   else if (anInvalidPrs)
97     theValid = false;
98
99   return aValidPrs || anInvalidPrs;
100 }
101
102 //********************************************************************
103 void ModuleBase_WidgetValidator::storeValidState(const ModuleBase_ViewerPrsPtr& theValue,
104                                                  const bool theValid)
105 {
106   bool aValidPrs = myInvalidPrs.contains(theValue);
107   bool anInvalidPrs = myInvalidPrs.contains(theValue);
108
109   if (theValid) {
110     if (!aValidPrs)
111       myValidPrs.append(theValue);
112     // the commented code will be useful when the valid state of the presentation
113     // will be changable between activate/deactivate. Currently it does not happen.
114     //if (anInvalidPrs)
115     //  myInvalidPrs.removeOne(theValue);
116   }
117   else { // !theValid
118     if (!anInvalidPrs)
119       myInvalidPrs.append(theValue);
120     //if (!aValidPrs)
121     //  myValidPrs.removeOne(theValue);
122   }
123 #ifdef DEBUG_VALID_STATE
124   qDebug(QString("storeValidState: myValidPrs.size() = %1, myInvalidPrs.size() = %2")
125                  .arg(myValidPrs.count())
126                  .arg(myInvalidPrs.count()).toStdString().c_str());
127 #endif
128 }