-
- /// internal structure that contains the updating iteration information:
- /// which object and subobject is iterated, t ocontinue iteration
- class IterationItem {
- /// The main object, subs of it are iterated
- std::shared_ptr<ModelAPI_CompositeFeature> myMain;
- /// The currently iterated sub-object of root document
- std::shared_ptr<ModelAPI_Feature> mySub;
- /// If this is true, this iteration must be breaked immideately
- bool myBreaked;
- /// If this flag is true, the virtual iteration is performed, unbreackable
- bool myIsVirtual;
- /// For composite main contains the current index
- int myIndex;
- /// For root object constains the reference to objects
- Model_Objects* myObjects;
- /// If it is true, the next "next" will be ignored
- bool mySkipNext;
-
- public:
- /// Constructs the iterator of subs
- IterationItem(std::shared_ptr<ModelAPI_CompositeFeature> theFeature);
- /// Increments the iteration if not-breaked
- void next();
- /// Returns true if current is not null
- bool more();
- /// Returns the current iterated sub-element
- std::shared_ptr<ModelAPI_Feature> current();
- /// Returns true if theFeature is in all iterated objects
- bool isIterated(std::shared_ptr<ModelAPI_Feature> theFeature);
- /// Returns true if theFeature is earlier than the current value
- bool isEarlierThanCurrent(std::shared_ptr<ModelAPI_Feature> theFeature);
- /// Make iteration breaked
- void setBreaked();
- /// Makes the iteration before the currently breaked (next "next" will be ignored)
- void setCurrentBefore(std::shared_ptr<ModelAPI_Feature> theFeature);
- /// Initializes iteration: virtual or real
- void startIteration(const bool theVirtual);
- /// Returns true if iteration was breaked
- bool isBreaked() {return myBreaked;}
- };
- /// List of iterated features: composite feature to the currently iterated sub.
- /// The first element in the list has no "main": the root document is not feature.
- std::list<IterationItem> myProcessIterator;
+ /// try if processing is currently performed
+ bool myIsProcessed;
+ /// map that contains features that must be executed only on finish of the operation
+ /// the value in map is the set of reasons
+ std::map<std::shared_ptr<ModelAPI_Feature>, std::set<std::shared_ptr<ModelAPI_Feature> > >
+ myProcessOnFinish;
+ /// to avoid infinitive cycling: feature -> count of the processing periods during this update
+ std::map<std::shared_ptr<ModelAPI_Feature>, int > myProcessed;
+ /// if preview in the property panel is blocked any update is postponed until end of operation
+ bool myIsPreviewBlocked;
+ /// disables any update if it is true, even on start/finish operation, undo, etc.
+ bool myUpdateBlocked;