X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FEvents%2FEvents_LongOp.cpp;h=da2fbfd93021b53977f7ed37899202d76a171804;hb=b928c27cd38f150c23d182df53c23ab266aa6b49;hp=04fc6734e2d0e19df013377db89ee509ed4f87a4;hpb=a0247c36615e233b68bc5ed98c1b87a999a4a51e;p=modules%2Fshaper.git diff --git a/src/Events/Events_LongOp.cpp b/src/Events/Events_LongOp.cpp index 04fc6734e..da2fbfd93 100644 --- a/src/Events/Events_LongOp.cpp +++ b/src/Events/Events_LongOp.cpp @@ -1,6 +1,21 @@ -// File: Events_LongOp.cpp -// Created: 29 Jul 2014 -// Author: Mikhail PONIKAROV +// Copyright (C) 2014-2022 CEA/DEN, EDF R&D +// +// 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 @@ -10,7 +25,7 @@ std::map MY_SENDERS; Events_LongOp::Events_LongOp(void* theSender) - : Events_Message(Events_LongOp::errorID(), theSender) + : Events_Message(Events_LongOp::eventID(), theSender) { } @@ -18,7 +33,7 @@ Events_LongOp::~Events_LongOp() { } -Events_ID Events_LongOp::errorID() +Events_ID Events_LongOp::eventID() { Events_Loop* aLoop = Events_Loop::loop(); return aLoop->eventByName("LongOperation"); @@ -26,25 +41,36 @@ Events_ID Events_LongOp::errorID() void Events_LongOp::start(void* theSender) { - if (MY_SENDERS.empty()) { - Events_LongOp anError(theSender); - Events_Loop::loop()->send(anError); - } + bool toSend = MY_SENDERS.empty(); if (MY_SENDERS.find(theSender) == MY_SENDERS.end()) MY_SENDERS[theSender] = 1; - else + else MY_SENDERS[theSender]++; + + if (toSend) { + std::shared_ptr aNewOne = + std::shared_ptr(new Events_LongOp(theSender)); + Events_Loop::loop()->send(aNewOne); + } } void Events_LongOp::end(void* theSender) { if (MY_SENDERS.find(theSender) != MY_SENDERS.end()) { int aCount = MY_SENDERS[theSender]; - if (aCount <= 1) MY_SENDERS.erase(theSender); - else MY_SENDERS[theSender] = aCount - 1; + if (aCount <= 1) + MY_SENDERS.erase(theSender); + else + MY_SENDERS[theSender] = aCount - 1; } if (MY_SENDERS.empty()) { - Events_LongOp anError(theSender); - Events_Loop::loop()->send(anError); + std::shared_ptr aNewOne = + std::shared_ptr(new Events_LongOp(theSender)); + Events_Loop::loop()->send(aNewOne); } } + +bool Events_LongOp::isPerformed() +{ + return !MY_SENDERS.empty(); +}