Salome HOME
35d8fca626d4928de85d619eb04d27c3c4e3d398
[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
5 #include <ModuleBase_ModelWidget.h>
6 #include <ModuleBase_ViewerPrs.h>
7 #include <ModuleBase_IViewer.h>
8 #include <ModuleBase_IWorkshop.h>
9
10 ModuleBase_WidgetValidator::ModuleBase_WidgetValidator(ModuleBase_ModelWidget* theModelWidget,
11                                                        ModuleBase_IWorkshop* theWorkshop)
12 : myModelWidget(theModelWidget), myWorkshop(theWorkshop)
13 {
14 }
15
16 ModuleBase_WidgetValidator::~ModuleBase_WidgetValidator()
17 {
18 }
19
20 //********************************************************************
21 bool ModuleBase_WidgetValidator::isValidSelection(const ModuleBase_ViewerPrsPtr& theValue)
22 {
23   bool aValid = false;
24   if (getValidState(theValue, aValid))
25     return aValid;
26
27   aValid = myModelWidget->isValidSelectionCustom(theValue);
28
29   storeValidState(theValue, aValid);
30   return aValid;
31 }
32
33 bool ModuleBase_WidgetValidator::activateFilters(const bool toActivate)
34 {
35   ModuleBase_IViewer* aViewer = myWorkshop->viewer();
36
37   Handle(SelectMgr_Filter) aSelFilter = myWorkshop->validatorFilter();
38   bool aHasSelectionFilter = aViewer->hasSelectionFilter(aSelFilter);
39
40   if (toActivate)
41     aViewer->addSelectionFilter(aSelFilter);
42   else {
43     aViewer->removeSelectionFilter(aSelFilter);
44     clearValidatedCash();
45   }
46
47   return aHasSelectionFilter;
48 }
49
50 bool ModuleBase_WidgetValidator::isFilterActivated() const
51 {
52   bool isActivated = false;
53
54   Handle(SelectMgr_Filter) aSelFilter = myWorkshop->validatorFilter();
55   ModuleBase_IViewer* aViewer = myWorkshop->viewer();
56
57   return aViewer->hasSelectionFilter(aSelFilter);
58 }
59
60 void ModuleBase_WidgetValidator::clearValidatedCash()
61 {
62   myValidPrs.clear();
63   myInvalidPrs.clear();
64 }
65
66 bool ModuleBase_WidgetValidator::getValidState(const ModuleBase_ViewerPrsPtr& theValue,
67                                                bool& theValid)
68 {
69   bool aValidPrs = myValidPrs.contains(theValue);
70   bool anInvalidPrs = myInvalidPrs.contains(theValue);
71
72   if (aValidPrs)
73     theValid = true;
74   else if (anInvalidPrs)
75     theValid = false;
76
77   return aValidPrs || anInvalidPrs;
78 }
79
80 //********************************************************************
81 void ModuleBase_WidgetValidator::storeValidState(const ModuleBase_ViewerPrsPtr& theValue,
82                                                  const bool theValid)
83 {
84   bool aValidPrs = myInvalidPrs.contains(theValue);
85   bool anInvalidPrs = myInvalidPrs.contains(theValue);
86
87   if (theValid) {
88     if (!aValidPrs)
89       myValidPrs.append(theValue);
90     // the commented code will be useful when the valid state of the presentation
91     // will be changable between activate/deactivate. Currently it does not happen.
92     //if (anInvalidPrs)
93     //  myInvalidPrs.removeOne(theValue);
94   }
95   else { // !theValid
96     if (!anInvalidPrs)
97       myInvalidPrs.append(theValue);
98     //if (!aValidPrs)
99     //  myValidPrs.removeOne(theValue);
100   }
101 #ifdef DEBUG_VALID_STATE
102   qDebug(QString("storeValidState: myValidPrs.size() = %1, myInvalidPrs.size() = %2")
103                  .arg(myValidPrs.count())
104                  .arg(myInvalidPrs.count()).toStdString().c_str());
105 #endif
106 }