0025748: Parallel version of progress indicator
[occt.git] / src / XmlMNaming / XmlMNaming_NamedShapeDriver.cxx
index 79c371c..813bf7b 100644 (file)
@@ -16,7 +16,8 @@
 //AGV 150202: Changed prototype LDOM_Node::getOwnerDocument()
 
 #include <BRepTools.hxx>
-#include <CDM_MessageDriver.hxx>
+#include <Message_Messenger.hxx>
+#include <Message_ProgressScope.hxx>
 #include <LDOM_OSStream.hxx>
 #include <LDOM_Text.hxx>
 #include <Standard_SStream.hxx>
@@ -64,7 +65,7 @@ IMPLEMENT_DOMSTRING (EvolReplaceString,   "replace")
 //=======================================================================
 
 XmlMNaming_NamedShapeDriver::XmlMNaming_NamedShapeDriver
-                        (const Handle(CDM_MessageDriver)& theMessageDriver)
+                        (const Handle(Message_Messenger)& theMessageDriver)
      : XmlMDF_ADriver (theMessageDriver, NULL),
   myShapeSet (Standard_False) // triangles mode
 {}
@@ -121,7 +122,7 @@ Standard_Boolean XmlMNaming_NamedShapeDriver::Paste
   Standard_Integer upper = NewPShapes.Upper();
   if (OldPShapes.Upper() > upper) upper = OldPShapes.Upper();
 
-  for (Standard_Integer i = lower; i <= upper; i++)
+  for (Standard_Integer i = upper; i >= lower; --i)
   {
     const XmlMNaming_Shape1 aNewPShape  = NewPShapes.Value(i);
     const XmlMNaming_Shape1 anOldPShape = OldPShapes.Value(i);
@@ -129,7 +130,7 @@ Standard_Boolean XmlMNaming_NamedShapeDriver::Paste
     if ( evol != TNaming_PRIMITIVE && anOldPShape.Element() != NULL )
     {
       if (::doTranslate (anOldPShape, anOldShape, aShapeSet)) {
-        WriteMessage ("NamedShapeDriver: Error reading a shape from array");
+        myMessageDriver->Send ("NamedShapeDriver: Error reading a shape from array", Message_Fail);
         return Standard_False;
       }
     }
@@ -137,7 +138,7 @@ Standard_Boolean XmlMNaming_NamedShapeDriver::Paste
     if (evol != TNaming_DELETE && aNewPShape.Element() != NULL )
     {
       if (::doTranslate (aNewPShape, aNewShape, aShapeSet)) {
-        WriteMessage ("NamedShapeDriver: Error reading a shape from array");
+        myMessageDriver->Send ("NamedShapeDriver: Error reading a shape from array", Message_Fail);
         return Standard_False;
       }
     }
@@ -166,7 +167,7 @@ Standard_Boolean XmlMNaming_NamedShapeDriver::Paste
       //      aBld.Replace(anOldShape,aNewShape);
       //      break;
     default:
-      Standard_DomainError::Raise("TNaming_Evolution; enum term unknown");
+      throw Standard_DomainError("TNaming_Evolution; enum term unknown");
     }
     anOldShape.Nullify();
     aNewShape.Nullify();
@@ -252,10 +253,8 @@ static const XmlObjMgt_DOMString& EvolutionString(const TNaming_Evolution i)
     case TNaming_SELECTED     : return ::EvolSelectedString();
     case TNaming_REPLACE      : return ::EvolModifyString();  //    case TNaming_REPLACE      : return ::EvolReplaceString(); for compatibility
   default:
-    Standard_DomainError::Raise("TNaming_Evolution; enum term unknown");
+    throw Standard_DomainError("TNaming_Evolution; enum term unknown");
   }
-  static XmlObjMgt_DOMString aNullString;
-  return aNullString; // To avoid compilation error message.
 }
 
 //=======================================================================
@@ -278,8 +277,7 @@ static TNaming_Evolution EvolutionEnum (const XmlObjMgt_DOMString& theString)
     else if (theString.equals (::EvolReplaceString()))
       aResult = TNaming_MODIFY; // for compatibility //TNaming_REPLACE;
     else
-      Standard_DomainError::Raise
-        ("TNaming_Evolution; string value without enum term equivalence");
+      throw Standard_DomainError("TNaming_Evolution; string value without enum term equivalence");
   }
   return aResult;
 }
@@ -336,8 +334,8 @@ static int doTranslate  (const XmlMNaming_Shape1&       thePShape,
 //purpose  : 
 //=======================================================================
 
-void XmlMNaming_NamedShapeDriver::ReadShapeSection
-                                        (const XmlObjMgt_Element& theElement)
+void XmlMNaming_NamedShapeDriver::ReadShapeSection (const XmlObjMgt_Element& theElement, 
+                                                    const Message_ProgressRange& theRange)
 {
   XmlObjMgt_Element anElement =
     XmlObjMgt::FindChildByName (theElement, ::ShapesString());
@@ -350,7 +348,7 @@ void XmlMNaming_NamedShapeDriver::ReadShapeSection
         LDOMString aData = aNode.getNodeValue();
         std::stringstream aStream (std::string(aData.GetString()));
         myShapeSet.Clear();
-        myShapeSet.Read (aStream);
+        myShapeSet.Read (aStream, theRange);
         break;
       }
     }
@@ -362,8 +360,8 @@ void XmlMNaming_NamedShapeDriver::ReadShapeSection
 //purpose  : 
 //=======================================================================
 
-void XmlMNaming_NamedShapeDriver::WriteShapeSection
-                                        (XmlObjMgt_Element& theElement)
+void XmlMNaming_NamedShapeDriver::WriteShapeSection (XmlObjMgt_Element& theElement,
+                                                     const Message_ProgressRange& theRange)
 {
   //  Create "shapes" element and append it as child
   XmlObjMgt_Document aDoc     = theElement.getOwnerDocument();
@@ -376,8 +374,12 @@ void XmlMNaming_NamedShapeDriver::WriteShapeSection
     LDOM_OSStream aStream (16 * 1024);
 //    ostrstream aStream;
 //    aStream.rdbuf() -> setbuf (0, 16380);
-    myShapeSet.Write (aStream);
-    aStream << ends;
+    Message_ProgressScope aPS(theRange, "Writing shape section", 2);
+    myShapeSet.Write (aStream, aPS.Next());
+    if (!aPS.More())
+      return;
+
+    aStream << std::ends;
     char * aStr = (char *)aStream.str();
     LDOM_Text aText = aDoc.createTextNode (aStr);
     delete [] aStr;
@@ -387,6 +389,9 @@ void XmlMNaming_NamedShapeDriver::WriteShapeSection
   // Clear the shape set to avoid appending to it on the next write
     BRepTools_ShapeSet& aShapeSet = (BRepTools_ShapeSet&) myShapeSet;
     aShapeSet.Clear();
+    if (!aPS.More())
+      return;
+    aPS.Next();
   }
 }