X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FEvents%2FEvents_Loop.cpp;h=ca8fb331cfb59a58606d39ce50321bdadf2fd050;hb=77ce6d35ac8d2f0fdaecb4f23e0870bf74e36103;hp=013e0a02d6e9e0952e76a42db5da0c165b2046f9;hpb=b6fa9176e339040f8af1c03579f829ca898e963a;p=modules%2Fshaper.git diff --git a/src/Events/Events_Loop.cpp b/src/Events/Events_Loop.cpp index 013e0a02d..ca8fb331c 100644 --- a/src/Events/Events_Loop.cpp +++ b/src/Events/Events_Loop.cpp @@ -1,8 +1,21 @@ -// Copyright (C) 2014-20xx CEA/DEN, EDF R&D - -// File: Events_Loop.hxx -// Created: Thu Mar 13 2014 -// Author: Mikhail PONIKAROV +// Copyright (C) 2014-2024 CEA, EDF +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// #include #include @@ -111,7 +124,7 @@ void Events_Loop::registerListener(Events_Listener* theListener, const Events_ID aFindID->second[theSender] = std::list(); aFindSender = aFindID->second.find(theSender); } - // check that listener was not registered wit hsuch parameters before + // check that listener was not registered with such parameters before std::list& aListeners = aFindSender->second; for (std::list::iterator aL = aListeners.begin(); aL != aListeners.end(); aL++) if (*aL == theListener) @@ -143,14 +156,14 @@ void Events_Loop::removeListener(Events_Listener* theListener) aLMap.erase(aLIt->first); myListeners[anIt->first] = aLMap; if (aLMap.empty()) - break; // avoid incrementation of the iterator if the the container is empty + break; // avoid incrementation of the iterator if the container is empty } aLIt++; } if (anIt->second.empty()) { myListeners.erase(anIt->first); if (myListeners.empty()) - break; // avoid incrementation of the iterator if the the container is empty + break; // avoid incrementation of the iterator if the container is empty } anIt++; } @@ -161,7 +174,7 @@ void Events_Loop::removeListener(Events_Listener* theListener) if (anImIt->second == theListener) { myImmediateListeners.erase(anImIt->first); if (myImmediateListeners.empty()) - break; // avoid incrementation of the iterator if the the container is empty + break; // avoid incrementation of the iterator if the container is empty } anImIt++; } @@ -171,6 +184,7 @@ void Events_Loop::flush(const Events_ID& theID) { if (!myFlushActive) return; + bool hasEventsToFlush = !myGroups.empty(); std::map >::iterator aMyGroup; for(aMyGroup = myGroups.find(theID.eventText()); aMyGroup != myGroups.end(); aMyGroup = myGroups.find(theID.eventText())) @@ -186,9 +200,12 @@ void Events_Loop::flush(const Events_ID& theID) // TODO: Stabilization fix. Check later. if(myFlushed.find(theID.myID) != myFlushed.end()) { myFlushed.erase(myFlushed.find(theID.myID)); - } else { + } +#ifdef _DEBUG + else { bool aProblem = true; } +#endif } // send accumulated messages to "groupListeners" std::map > >::iterator aFindID = @@ -206,6 +223,12 @@ void Events_Loop::flush(const Events_ID& theID) } } } + if (hasEventsToFlush && myGroups.empty() && myFlushed.empty()) { + // no more messages left in the queue, so, finalize the sketch processing + static Events_ID anID = Events_Loop::eventByName("SketchPrepared"); + std::shared_ptr aMsg(new Events_Message(anID, this)); + Events_Loop::loop()->send(aMsg, false); + } } void Events_Loop::eraseMessages(const Events_ID& theID) @@ -234,14 +257,6 @@ void Events_Loop::clear(const Events_ID& theID) } } -void Events_Loop::autoFlush(const Events_ID& theID, const bool theAuto) -{ - if (theAuto) - myFlushed.insert(theID.myID); - else - myFlushed.erase(myFlushed.find(theID.myID)); -} - bool Events_Loop::isFlushed(const Events_ID& theID) { return myFlushed.find(theID.myID) != myFlushed.end(); @@ -254,3 +269,8 @@ void Events_Loop::setFlushed(const Events_ID& theID, const bool theValue) else myFlushed.erase(myFlushed.find(theID.myID)); } + +bool Events_Loop::hasGrouppedEvent(const Events_ID& theID) +{ + return myGroups.find(theID.myID) != myGroups.end(); +} \ No newline at end of file