Salome HOME
Fix for problem: SIGSEGV appears if to select group after opening "Edit Group" dialog...
[modules/smesh.git] / src / SMESHFiltersSelection / SMESH_LogicalFilter.cxx
1 //  File   : SMESH_LogicalFilter.cxx
2 //  Module : SMESH
3
4 #include "SMESH_LogicalFilter.hxx"
5
6 //=======================================================================
7 // name    : SMESH_LogicalFilter::SMESH_LogicalFilter
8 // Purpose : Constructor
9 //=======================================================================
10 SMESH_LogicalFilter::SMESH_LogicalFilter (const QPtrList<SUIT_SelectionFilter>& theFilters,
11                                           const int                             theLogOp)
12 {
13   setFilters(theFilters); 
14   setOperation(theLogOp);
15 }
16
17 //=======================================================================
18 // name    : SMESH_LogicalFilter::~SMESH_LogicalFilter
19 // Purpose : Destructor
20 //=======================================================================
21 SMESH_LogicalFilter::~SMESH_LogicalFilter()
22 {
23 }
24
25 //=======================================================================
26 // name    : SMESH_LogicalFilter::IsOk
27 // Purpose : Verify validity of entry object
28 //=======================================================================
29 bool SMESH_LogicalFilter::isOk (const SUIT_DataOwner* owner) const
30 {
31   bool res = true;
32   QPtrListIterator<SUIT_SelectionFilter> it (myFilters);
33   SUIT_SelectionFilter* filter;
34   for (; ((filter = it.current()) != 0) && res; ++it)
35   {
36     if (myOperation == LO_OR && filter->isOk(owner))
37       return true;
38     if (myOperation == LO_AND && !filter->isOk(owner))
39       return false;
40     if (myOperation == LO_NOT)
41       return !filter->isOk(owner);
42   }
43
44   return (myOperation != LO_OR);
45 }
46
47 //=======================================================================
48 // name    : SMESH_LogicalFilter::setFilters
49 // Purpose : Set new list of filters. Old wilters are removed
50 //=======================================================================
51 void SMESH_LogicalFilter::setFilters (const QPtrList<SUIT_SelectionFilter>& theFilters)
52 {
53   myFilters = theFilters;
54 }
55
56 //=======================================================================
57 // name    : SMESH_LogicalFilter::setOperation
58 // Purpose : Set logical operation
59 //=======================================================================
60 void SMESH_LogicalFilter::setOperation (const int theLogOp)
61 {
62   myOperation = theLogOp;
63 }
64
65 //=======================================================================
66 // name    : SMESH_LogicalFilter::getFilters
67 // Purpose : Get list of filters
68 //=======================================================================
69 const QPtrList<SUIT_SelectionFilter> SMESH_LogicalFilter::getFilters() const
70 {
71   return myFilters;
72 }
73
74 //=======================================================================
75 // name    : SMESH_LogicalFilter::getOperation
76 // Purpose : Get logical operation
77 //=======================================================================
78 int SMESH_LogicalFilter::getOperation() const
79 {
80   return myOperation;
81 }