Author: derek Date: Wed Nov 8 22:51:30 2006 New Revision: 161 Modified: sofaswitch/trunk/callflow/src/canvas.cpp sofaswitch/trunk/callflow/src/loadnewgraph.cpp sofaswitch/trunk/callflow/src/shapelist.cpp sofaswitch/trunk/callflow/tests/amplaywavfile.src sofaswitch/trunk/callflow/tests/dtmf_from_sound.src sofaswitch/trunk/callflow/tests/forloop.src sofaswitch/trunk/callflow/tests/loadgraph.src sofaswitch/trunk/callflow/tests/makevoipcall.src sofaswitch/trunk/callflow/tests/requestnode.src sofaswitch/trunk/callflow/tests/simpleeventer.src sofaswitch/trunk/callflow/tests/timetest.src Log: Make sure all the tests work. Loadgraph works correctly - the spawned thread now closes down at the right time. Modified: sofaswitch/trunk/callflow/src/canvas.cpp ============================================================================== --- sofaswitch/trunk/callflow/src/canvas.cpp (original) +++ sofaswitch/trunk/callflow/src/canvas.cpp Wed Nov 8 22:51:30 2006 @@ -18,7 +18,7 @@ #error Clipboard must be enabled for copy and paste to work. #endif -#include <wx/textfile.h> +#include <wx/textfile.h> #include <wx/tokenzr.h> #include <wx/tipwin.h> #include <wx/timer.h> @@ -27,536 +27,610 @@ #include "canvas.h" #include "callflow.h" -BEGIN_EVENT_TABLE(MyCanvas, wxScrolledWindow) - - EVT_LEFT_DOWN (MyCanvas::OnLeftDown) - EVT_LEFT_UP (MyCanvas::OnLeftUp) - EVT_RIGHT_DOWN (MyCanvas::OnRightDown) - EVT_MOTION (MyCanvas::OnMouseMove) - EVT_PAINT (MyCanvas::OnPaint) - EVT_ENTER_WINDOW(MyCanvas::OnMouseEnter) - EVT_LEAVE_WINDOW(MyCanvas::OnMouseLeave) - EVT_CHAR (MyCanvas::OnChar) - EVT_TIMER (TimerId, MyCanvas::OnProgressTimer) - -END_EVENT_TABLE() - -MyCanvas::MyCanvas(MyFrame* parent): - wxScrolledWindow((wxWindow*)parent, -1) +BEGIN_EVENT_TABLE (MyCanvas, wxScrolledWindow) EVT_LEFT_DOWN (MyCanvas::OnLeftDown) EVT_LEFT_UP (MyCanvas::OnLeftUp) EVT_RIGHT_DOWN (MyCanvas::OnRightDown) EVT_MOTION (MyCanvas::OnMouseMove) EVT_PAINT (MyCanvas::OnPaint) EVT_ENTER_WINDOW (MyCanvas::OnMouseEnter) EVT_LEAVE_WINDOW (MyCanvas::OnMouseLeave) EVT_CHAR (MyCanvas::OnChar) EVT_TIMER (TimerId, MyCanvas::OnProgressTimer) END_EVENT_TABLE ()MyCanvas::MyCanvas (MyFrame * parent): +wxScrolledWindow ((wxWindow *) parent, -1) { - pFrame = parent ; - SetVirtualSize (1000, 1000); // width, height - SetScrollRate(20,20); // scroll x and y - SetBackgroundColour (wxColour (255, 255, 240)); - editingMode = WaitDownEvent; + pFrame = parent; + SetVirtualSize (1000, 1000); // width, height + SetScrollRate (20, 20); // scroll x and y + SetBackgroundColour (wxColour (255, 255, 240)); + editingMode = WaitDownEvent; - timerActivity = new wxTimer(this, TimerId); - timerActivity->Start(500); + timerActivity = new wxTimer (this, TimerId); + timerActivity->Start (500); } MyCanvas::~MyCanvas () { - delete timerActivity; + delete timerActivity; } // Called when window needs to be repainted. -void MyCanvas::OnPaint(wxPaintEvent& event) -{ - activeShapes.ClearConnectionPoints(); - activeShapes.MarkConnectionPoints(); - - wxPaintDC dc(this); - PrepareDC(dc); - - // Find Out where the window is scrolled to - int vbX,vbY; // Top left corner of client - GetViewStart(&vbX,&vbY); - wxRegionIterator upd(GetUpdateRegion()); // get the update rect list - - wxRect nrect; - while (upd) { - wxRect rect(upd.GetRect()); - wxPoint tl(rect.x, rect.y); - wxPoint ntl; - CalcUnscrolledPosition(tl.x, tl.y, &ntl.x, &ntl.y); - wxSize updateSize(upd.GetWidth(), upd.GetHeight()); - nrect= wxRect(ntl, updateSize); - - MyListShapes::iterator it = activeShapes.begin(); - while (it != activeShapes.end()) { - DndShape *oneShape = it->second; - if (oneShape != NULL) { - if (oneShape->Intersects(nrect)) - oneShape->Draw(dc); - } - it++; - } - upd ++ ; - } - - if (selectingRegion.IsSelected()) { - selectingRegion.Draw(dc); - } - - if (GetEditingMode() == PlaceJoinBlocks) { - wxPoint last; - if (joinBlocks.GetLastPoint(last)) { - dc.DrawLine(last, lastMousePoint); - joinBlocks.Draw(dc); +void +MyCanvas::OnPaint (wxPaintEvent & event) +{ + activeShapes.ClearConnectionPoints (); + activeShapes.MarkConnectionPoints (); + + wxPaintDC dc (this); + PrepareDC (dc); + + // Find Out where the window is scrolled to + int vbX, vbY; // Top left corner of client + GetViewStart (&vbX, &vbY); + wxRegionIterator upd (GetUpdateRegion ()); // get the update rect list + + wxRect nrect; + while (upd) + { + wxRect rect (upd.GetRect ()); + wxPoint tl (rect.x, rect.y); + wxPoint ntl; + CalcUnscrolledPosition (tl.x, tl.y, &ntl.x, &ntl.y); + wxSize updateSize (upd.GetWidth (), upd.GetHeight ()); + nrect = wxRect (ntl, updateSize); + + MyListShapes::iterator it = activeShapes.begin (); + while (it != activeShapes.end ()) + { + DndShape *oneShape = it->second; + if (oneShape != NULL) + { + if (oneShape->Intersects (nrect)) + oneShape->Draw (dc); + } + it++; + } + upd++; } - } + + if (selectingRegion.IsSelected ()) + { + selectingRegion.Draw (dc); + } + + if (GetEditingMode () == PlaceJoinBlocks) + { + wxPoint last; + if (joinBlocks.GetLastPoint (last)) + { + dc.DrawLine (last, lastMousePoint); + joinBlocks.Draw (dc); + } + } } -wxPoint MyCanvas::GetUnscrolledPosition(wxMouseEvent & event) +wxPoint MyCanvas::GetUnscrolledPosition (wxMouseEvent & event) { - wxPoint pt(event.GetX(), event.GetY()); - wxPoint disp; - CalcUnscrolledPosition(pt.x, pt.y, &disp.x, &disp.y); + wxPoint + pt (event.GetX (), event.GetY ()); + wxPoint + disp; + CalcUnscrolledPosition (pt.x, pt.y, &disp.x, &disp.y); // printf(" %d,%d ===> %d,%d\n", pt.x, pt.y, disp.x, disp.y); - return disp; + return disp; } -void MyCanvas::OnLeftDown (wxMouseEvent & event) +void +MyCanvas::OnLeftDown (wxMouseEvent & event) { - wxPoint pt = GetUnscrolledPosition(event); - lastMousePoint = pt; - lastMouseDownPoint = pt; + wxPoint pt = GetUnscrolledPosition (event); + lastMousePoint = pt; + lastMouseDownPoint = pt; - if (GetEditingMode() == PlaceJoinBlocks) { - joinBlocks.AddNewPoint(pt); - Refresh(); - return; - } + if (GetEditingMode () == PlaceJoinBlocks) + { + joinBlocks.AddNewPoint (pt); + Refresh (); + return; + } - if (GetEditingMode() == PlaceOneShape) { - DndShape::Kind kind = pFrame->GetImageTypeForPlacing(); - DndShape *newShape = DndShape::Construct(kind); - if (newShape != NULL) { - pFrame->SetImageTypeForPlacing(DndShape::None); - newShape->CenterOnThisPosition(pt); - activeShapes.Append(newShape); - Refresh(); - SetEditingMode(WaitDownEvent); - } - return; - } + if (GetEditingMode () == PlaceOneShape) + { + DndShape::Kind kind = pFrame->GetImageTypeForPlacing (); + DndShape *newShape = DndShape::Construct (kind); + if (newShape != NULL) + { + pFrame->SetImageTypeForPlacing (DndShape::None); + newShape->CenterOnThisPosition (pt); + activeShapes.Append (newShape); + Refresh (); + SetEditingMode (WaitDownEvent); + } + return; + } - /* Left button down, no current "Kind" selected. we are therefore going to - move an object from the cureent position, or mark additional buttons.. */ - if (!event.ShiftDown()) { - selectingRegion.SetSelected(false); - selectingRegion.SetPosition(lastMousePoint); - activeShapes.UnselectAllShapes(); - } - SetEditingMode(DownEventNew); + /* Left button down, no current "Kind" selected. we are therefore going to + * move an object from the cureent position, or mark additional buttons.. */ + if (!event.ShiftDown ()) + { + selectingRegion.SetSelected (false); + selectingRegion.SetPosition (lastMousePoint); + activeShapes.UnselectAllShapes (); + } + SetEditingMode (DownEventNew); - MyListShapes::iterator it = activeShapes.begin(); - while (it != activeShapes.end()) { - DndShape *oneShape = it->second; - if (oneShape != NULL) { - if (oneShape->Intersects(pt)) { - oneShape->SetSelected(); - Refresh(); - return; + MyListShapes::iterator it = activeShapes.begin (); + while (it != activeShapes.end ()) + { + DndShape *oneShape = it->second; + if (oneShape != NULL) + { + if (oneShape->Intersects (pt)) + { + oneShape->SetSelected (); + Refresh (); + return; + } + } + it++; } - } - it++; - } - - if (!event.ShiftDown()) - SetEditingMode(SelectRectangle); + + if (!event.ShiftDown ()) + SetEditingMode (SelectRectangle); } -void MyCanvas::OnProgressTimer(wxTimerEvent & event) +void +MyCanvas::OnProgressTimer (wxTimerEvent & event) { - static int count = 0; - count++; - bool mouseHasStopped = (lastMouseMovePoint == oldMousePoint); - oldMousePoint = lastMouseMovePoint; + static int count = 0; + count++; + bool mouseHasStopped = (lastMouseMovePoint == oldMousePoint); + oldMousePoint = lastMouseMovePoint; - if (mouseHasStopped) { - MyListShapes::iterator it = activeShapes.begin(); - // printf(" Found a no movment at %3d %3d for %d\n", - // oldMousePoint.x, oldMousePoint.y, count++); - - while (it != activeShapes.end()) { - DndShape *oneShape = it->second; - if (oneShape != NULL) { - if (oneShape->Intersects(oldMousePoint)) { - wxPaintDC dc(this); - PrepareDC(dc); - wxCoord w, h; - wxString toolTip = oneShape->GetToolTip(); - GetTextExtent(toolTip, &w, &h); - wxPoint thisPoint; - thisPoint.x = oldMousePoint.x - (w/2); - thisPoint.y = oldMousePoint.y - h; - dc.SetPen(*wxWHITE); - dc.SetBrush(wxBrush(*wxWHITE, wxSOLID)); - dc.DrawRoundedRectangle(thisPoint.x, thisPoint.y, w, h, 5); - dc.SetPen(*wxBLACK); - dc.DrawText(toolTip, thisPoint); - } - } - it++; - } - } else - Refresh(); + if (mouseHasStopped) + { + MyListShapes::iterator it = activeShapes.begin (); + // printf(" Found a no movment at %3d %3d for %d\n", + // oldMousePoint.x, oldMousePoint.y, count++); + + while (it != activeShapes.end ()) + { + DndShape *oneShape = it->second; + if (oneShape != NULL) + { + if (oneShape->Intersects (oldMousePoint)) + { + wxPaintDC dc (this); + PrepareDC (dc); + wxCoord w, h; + wxString toolTip = + oneShape->GetToolTip (); + GetTextExtent (toolTip, &w, &h); + wxPoint thisPoint; + thisPoint.x = + oldMousePoint.x - (w / 2); + thisPoint.y = oldMousePoint.y - h; + dc.SetPen (*wxWHITE); + dc.SetBrush (wxBrush + (*wxWHITE, wxSOLID)); + dc.DrawRoundedRectangle (thisPoint.x, + thisPoint.y, + w, h, 5); + dc.SetPen (*wxBLACK); + dc.DrawText (toolTip, thisPoint); + } + } + it++; + } + } + else + Refresh (); } -void MyCanvas::OnMouseMove (wxMouseEvent & event) -{ - wxPoint currentMousePoint = GetUnscrolledPosition(event); - lastMouseMovePoint = currentMousePoint; +void +MyCanvas::OnMouseMove (wxMouseEvent & event) +{ + wxPoint currentMousePoint = GetUnscrolledPosition (event); + lastMouseMovePoint = currentMousePoint; - EditingMode em = GetEditingMode(); + EditingMode em = GetEditingMode (); - if (em == PlaceOneShape) { - lastMousePoint = currentMousePoint; - return; - } + if (em == PlaceOneShape) + { + lastMousePoint = currentMousePoint; + return; + } - if (em == DownEventNew) { - if (selectingRegion.IsSelected()) { - SetEditingMode(MovingShapesRectangle); - } else { - SetEditingMode(MovingShapes); - } - } + if (em == DownEventNew) + { + if (selectingRegion.IsSelected ()) + { + SetEditingMode (MovingShapesRectangle); + } + else + { + SetEditingMode (MovingShapes); + } + } - if (em == PlaceJoinBlocks) { - lastMousePoint = currentMousePoint; - Refresh(); - return; - } + if (em == PlaceJoinBlocks) + { + lastMousePoint = currentMousePoint; + Refresh (); + return; + } - if (event.LeftIsDown()) { - if ((em == MovingShapes) || (em == MovingShapesRectangle)) { - wxPoint delta; - - delta.x = currentMousePoint.x - lastMousePoint.x; - delta.y = currentMousePoint.y - lastMousePoint.y; - - MyListShapes::iterator it = activeShapes.begin(); - while (it != activeShapes.end()) { - DndShape *oneShape = it->second; - if (oneShape != NULL) { - if (oneShape->IsSelected()) { - oneShape->AdjustPosition(delta); - } - } - it++; + if (event.LeftIsDown ()) + { + if ((em == MovingShapes) || (em == MovingShapesRectangle)) + { + wxPoint delta; + + delta.x = currentMousePoint.x - lastMousePoint.x; + delta.y = currentMousePoint.y - lastMousePoint.y; + + MyListShapes::iterator it = activeShapes.begin (); + while (it != activeShapes.end ()) + { + DndShape *oneShape = it->second; + if (oneShape != NULL) + { + if (oneShape->IsSelected ()) + { + oneShape-> + AdjustPosition + (delta); + } + } + it++; + } + + if (em == MovingShapesRectangle) + selectingRegion.AdjustPosition (delta); + lastMousePoint = currentMousePoint; + Refresh (); + return; + } } - - if (em == MovingShapesRectangle) - selectingRegion.AdjustPosition(delta); + lastMousePoint = currentMousePoint; - Refresh(); - return; - } - } + if (em == SelectRectangle) + { + //Calculate the region that we draw a box around. + selectingRegion.SetOtherCorner (currentMousePoint); - lastMousePoint = currentMousePoint; - if (em == SelectRectangle) { - //Calculate the region that we draw a box around. - selectingRegion.SetOtherCorner(currentMousePoint); + MyListShapes::iterator it = activeShapes.begin (); + while (it != activeShapes.end ()) + { + DndShape *oneShape = it->second; + if (oneShape != NULL) + { + bool isSelected = + oneShape->Intersects (selectingRegion. + GetRect ()); + oneShape->SetSelected (isSelected); + } + it++; + } + Refresh (); + return; + } - MyListShapes::iterator it = activeShapes.begin(); - while (it != activeShapes.end()) { - DndShape *oneShape = it->second; - if (oneShape != NULL) { - bool isSelected = oneShape->Intersects(selectingRegion.GetRect()); - oneShape->SetSelected(isSelected); - } - it++; - } - Refresh(); - return; - } - // printf("On mouse move at %d, %d %s\n", -// event.GetX(), event.GetY(), -// (event.LeftIsDown() ? "is down" : "is up")); +// event.GetX(), event.GetY(), +// (event.LeftIsDown() ? "is down" : "is up")); } - -void MyCanvas::OnLeftUp (wxMouseEvent & event) + +void +MyCanvas::OnLeftUp (wxMouseEvent & event) { - if (GetEditingMode() != PlaceJoinBlocks) - SetEditingMode(WaitDownEvent); - Refresh(); - // printf("On mouse left up at %d, %d \n", - // event.GetX(), event.GetY()); + if (GetEditingMode () != PlaceJoinBlocks) + SetEditingMode (WaitDownEvent); + Refresh (); + // printf("On mouse left up at %d, %d \n", + // event.GetX(), event.GetY()); } -void MyCanvas::OnMouseEnter (wxMouseEvent & event) +void +MyCanvas::OnMouseEnter (wxMouseEvent & event) { - if (GetEditingMode() == PlaceOneShape) { - Refresh(); - return; - } - - // SetEditingMode(WaitDownEvent); - Refresh(); + if (GetEditingMode () == PlaceOneShape) + { + Refresh (); + return; + } + + // SetEditingMode(WaitDownEvent); + Refresh (); } -void MyCanvas::OnMouseLeave (wxMouseEvent & event) +void +MyCanvas::OnMouseLeave (wxMouseEvent & event) { - // SetEditingMode(WaitDownEvent); - Refresh(); + // SetEditingMode(WaitDownEvent); + Refresh (); } - -void MyCanvas::OnRightDown (wxMouseEvent & event) + +void +MyCanvas::OnRightDown (wxMouseEvent & event) { - wxPoint pt = GetUnscrolledPosition(event); - if (editingMode == PlaceJoinBlocks) { - joinBlocks.AddNewPoint(pt); - - DndShape *nJoin = DndShape::Construct(DndShape::JoinBlocks); - wxString points = joinBlocks.GetShapeInfoSpecial(); - joinBlocks.RemoveCurrentPoints(); - nJoin->SetShapeInfoSpecial(points); - activeShapes.Append(nJoin); - - SetEditingMode(WaitDownEvent); - Refresh(); - return; - } + wxPoint pt = GetUnscrolledPosition (event); + if (editingMode == PlaceJoinBlocks) + { + joinBlocks.AddNewPoint (pt); - MyListShapes::iterator it = activeShapes.begin(); - while (it != activeShapes.end()) { - DndShape *oneShape = it->second; - if (oneShape != NULL) { - if (oneShape->Intersects(pt)) - oneShape->ProcessRightMouseButton(pFrame); - } - it++; - } + DndShape *nJoin = DndShape::Construct (DndShape::JoinBlocks); + wxString points = joinBlocks.GetShapeInfoSpecial (); + joinBlocks.RemoveCurrentPoints (); + nJoin->SetShapeInfoSpecial (points); + activeShapes.Append (nJoin); + + SetEditingMode (WaitDownEvent); + Refresh (); + return; + } + + MyListShapes::iterator it = activeShapes.begin (); + while (it != activeShapes.end ()) + { + DndShape *oneShape = it->second; + if (oneShape != NULL) + { + if (oneShape->Intersects (pt)) + oneShape->ProcessRightMouseButton (pFrame); + } + it++; + } } -void MyCanvas::ScreenToClipboard() +void +MyCanvas::ScreenToClipboard () { - wxString toCopy; - - MyListShapes::iterator it = activeShapes.begin(); - while (it != activeShapes.end()) { - DndShape *oneShape = it->second; - if (oneShape != NULL) { - if (oneShape->IsSelected()) - toCopy += oneShape->GetShapeInfo(); - } - it++; - } - - //printf("shape %s\n", (const char *)toCopy); - wxTheClipboard->UsePrimarySelection(); - if (wxTheClipboard->Open()) { - wxTheClipboard->SetData( new wxTextDataObject(toCopy) ); - wxTheClipboard->Close(); - } + wxString toCopy; + + MyListShapes::iterator it = activeShapes.begin (); + while (it != activeShapes.end ()) + { + DndShape *oneShape = it->second; + if (oneShape != NULL) + { + if (oneShape->IsSelected ()) + toCopy += oneShape->GetShapeInfo (); + } + it++; + } + + //printf("shape %s\n", (const char *)toCopy); + wxTheClipboard->UsePrimarySelection (); + if (wxTheClipboard->Open ()) + { + wxTheClipboard->SetData (new wxTextDataObject (toCopy)); + wxTheClipboard->Close (); + } } -void MyCanvas::ClipboardToScreen() +void +MyCanvas::ClipboardToScreen () { - if (!wxTheClipboard->Open()) - return; + if (!wxTheClipboard->Open ()) + return; - activeShapes.UnselectAllShapes(); + activeShapes.UnselectAllShapes (); - if (wxTheClipboard->IsSupported( wxDF_TEXT )) { - wxTextDataObject data; - wxTheClipboard->GetData(data); - activeShapes.AddNewShapes(data.GetText(), true); - Refresh(); - } - wxTheClipboard->Close(); -} + if (wxTheClipboard->IsSupported (wxDF_TEXT)) + { + wxTextDataObject data; + wxTheClipboard->GetData (data); + activeShapes.AddNewShapes (data.GetText (), true); + } + wxTheClipboard->Close (); +} - void MyCanvas::OnChar(wxKeyEvent& event) +void +MyCanvas::OnChar (wxKeyEvent & event) { - wxString key; - bool changedScreen = false; - long keycode = event.GetKeyCode(); + wxString key; + bool changedScreen = false; + long keycode = event.GetKeyCode (); - if (keycode == WXK_DELETE) { - RemoveSelectedShapes(); - changedScreen = true; - } - - // printf ("keyocde is %d\n", keycode); - if (event.ControlDown()) { - // printf("Control is down\n"); - if (keycode == 99) { /* Process Ctrl - c */ - ScreenToClipboard(); - changedScreen = true; - } + if (keycode == WXK_DELETE) + { + RemoveSelectedShapes (); + changedScreen = true; + } - if ((keycode == WXK_INSERT) || (keycode == 118)) { /* Process Ctrl - v */ - ClipboardToScreen(); - changedScreen = true; - } + // printf ("keyocde is %d\n", keycode); + if (event.ControlDown ()) + { + // printf("Control is down\n"); + if (keycode == 99) + { /* Process Ctrl - c */ + ScreenToClipboard (); + changedScreen = true; + } - } + if ((keycode == WXK_INSERT) || (keycode == 118)) + { /* Process Ctrl - v */ + ClipboardToScreen (); + changedScreen = true; + } - if (changedScreen) { - Refresh(); - event.Skip(); - return; - } + } + + if (changedScreen) + { + Refresh (); + event.Skip (); + return; + } } -void MyCanvas::ShapeInformationToFile(wxString & fileName) +void +MyCanvas::ShapeInformationToFile (wxString & fileName) { - wxString data; + wxString data; - MyListShapes::iterator it = activeShapes.begin(); - while (it != activeShapes.end()) { - DndShape *oneShape = it->second; - if (oneShape != NULL) { - data += oneShape->GetShapeInfo(); - } - it++; - } - - wxTextFile file(fileName); - - if (!file.Exists()) - file.Create(); - file.Open(); - if (!file.IsOpened()) { - return; - } + MyListShapes::iterator it = activeShapes.begin (); + while (it != activeShapes.end ()) + { + DndShape *oneShape = it->second; + if (oneShape != NULL) + { + data += oneShape->GetShapeInfo (); + } + it++; + } - file.Clear(); - file.AddLine(data); - file.Write(); - file.Close(); + wxTextFile file (fileName); + + if (!file.Exists ()) + file.Create (); + file.Open (); + if (!file.IsOpened ()) + { + return; + } + + file.Clear (); + file.AddLine (data); + file.Write (); + file.Close (); } -void MyCanvas::ReadShapeInformationFromFile(wxString & fileName) +void +MyCanvas::ReadShapeInformationFromFile (wxString & fileName) { - wxTextFile file(fileName); - file.Open(); + wxTextFile file (fileName); + file.Open (); - if (!file.IsOpened()) { - return; - } + if (!file.IsOpened ()) + { + return; + } - wxString data; - for (data = file.GetFirstLine(); !file.Eof();) - data += wxString(file.GetEOL()) + file.GetNextLine(); + wxString data; + for (data = file.GetFirstLine (); !file.Eof ();) + data += wxString (file.GetEOL ()) + file.GetNextLine (); - file.Close(); + file.Close (); - RemoveCurrentShapes(); - activeShapes.AddNewShapes(data); - Refresh(); + RemoveCurrentShapes (); + activeShapes.AddNewShapes (data); + Refresh (); } -void MyCanvas::RemoveCurrentShapes() -{ - selectingRegion.SetSelected(false); - activeShapes.RemoveCurrentShapes(); +void +MyCanvas::RemoveCurrentShapes () +{ + selectingRegion.SetSelected (false); + activeShapes.RemoveCurrentShapes (); } -void MyCanvas::DisplayTextPopup(const wxString& text) //, const wxPoint& WXUNUSED(pos)) +void +MyCanvas::DisplayTextPopup (const wxString & text) //, const wxPoint& WXUNUSED(pos)) { #if wxUSE_TIPWINDOW - // #warning "tip windows on " - static wxString oldMessage; - if (text == oldMessage) - return; - oldMessage = text; + // #warning "tip windows on " + static wxString oldMessage; + if (text == oldMessage) + return; + oldMessage = text; - static wxTipWindow* s_tipWindow = NULL; - - if (s_tipWindow){ - // Prevent s_tipWindow being nulled in OnIdle, - // thereby removing the chance for the window to be closed by ShowHelp - s_tipWindow->SetTipWindowPtr(NULL); - s_tipWindow->Close(); - } - s_tipWindow = NULL; - - if ( !text.empty() ) { - s_tipWindow = new wxTipWindow(wxTheApp->GetTopWindow(), text, 100, & s_tipWindow); - - return; - } + static wxTipWindow *s_tipWindow = NULL; + + if (s_tipWindow) + { + // Prevent s_tipWindow being nulled in OnIdle, + // thereby removing the chance for the window to be closed by ShowHelp + s_tipWindow->SetTipWindowPtr (NULL); + s_tipWindow->Close (); + } + s_tipWindow = NULL; + + if (!text.empty ()) + { + s_tipWindow = + new wxTipWindow (wxTheApp->GetTopWindow (), text, 100, + &s_tipWindow); + + return; + } #else - wxUnusedVar(text); + wxUnusedVar (text); #endif // wxUSE_TIPWINDOW - } +} -void MyCanvas::SetEditingMode(EditingMode newMode) +void +MyCanvas::SetEditingMode (EditingMode newMode) { - if (newMode == editingMode) - return; + if (newMode == editingMode) + return; - editingMode = newMode; - // printf("YES. set editing mode to %d\n\n", newMode); - switch (newMode) - { - case WaitDownEvent:; - { - CloseJoinBlocks(); - pFrame->SetStatusText("Waiting for a mouse click event"); - } - break; - case DownEventNew:; - { - CloseJoinBlocks(); - pFrame->SetStatusText("Waiting for a mouse click event"); - } - break; - case PlaceOneShape:; - { - CloseJoinBlocks(); - wxString kindName = DndShape::GetKindName(pFrame->GetImageTypeForPlacing()); - wxString mess= wxString("Set the mouse at desired position to place a ") + kindName; - pFrame->SetStatusText(mess); - selectingRegion.SetSelected(false); - activeShapes.UnselectAllShapes(); - } - break; - case SelectRectangle:; - { - CloseJoinBlocks(); - pFrame->SetStatusText("Mark a rectangle on screen, and select objects within"); - selectingRegion.SetOtherCorner(lastMouseDownPoint); - selectingRegion.SetSelected(true); - } - break; - case MovingShapes:; - { - CloseJoinBlocks(); - pFrame->SetStatusText("Moving one or more shapes on the screen"); - } - break; - case MovingShapesRectangle:; - { - CloseJoinBlocks(); - pFrame->SetStatusText("Moving one or more shapes, and a selecting rectangle, on the screen"); - } - break; - case PlaceJoinBlocks:; - { - pFrame->SetStatusText("Draw interconnecting logic flow between blocks on the screen"); - } - break; - default: - { - pFrame->SetStatusText("Should not be selected"); - } - break; - } + editingMode = newMode; + // printf("YES. set editing mode to %d\n\n", newMode); + switch (newMode) + { + case WaitDownEvent:; + { + CloseJoinBlocks (); + pFrame->SetStatusText + ("Waiting for a mouse click event"); + } + break; + case DownEventNew:; + { + CloseJoinBlocks (); + pFrame->SetStatusText + ("Waiting for a mouse click event"); + } + break; + case PlaceOneShape:; + { + CloseJoinBlocks (); + wxString kindName = + DndShape::GetKindName (pFrame-> + GetImageTypeForPlacing + ()); + wxString mess = + wxString + ("Set the mouse at desired position to place a ") + + kindName; + pFrame->SetStatusText (mess); + selectingRegion.SetSelected (false); + activeShapes.UnselectAllShapes (); + } + break; + case SelectRectangle:; + { + CloseJoinBlocks (); + pFrame->SetStatusText + ("Mark a rectangle on screen, and select objects within"); + selectingRegion.SetOtherCorner (lastMouseDownPoint); + selectingRegion.SetSelected (true); + } + break; + case MovingShapes:; + { + CloseJoinBlocks (); + pFrame->SetStatusText + ("Moving one or more shapes on the screen"); + } + break; + case MovingShapesRectangle:; + { + CloseJoinBlocks (); + pFrame->SetStatusText + ("Moving one or more shapes, and a selecting rectangle, on the screen"); + } + break; + case PlaceJoinBlocks:; + { + pFrame->SetStatusText + ("Draw interconnecting logic flow between blocks on the screen"); + } + break; + default: + { + pFrame->SetStatusText ("Should not be selected"); + } + break; + } } - - - Modified: sofaswitch/trunk/callflow/src/loadnewgraph.cpp ============================================================================== --- sofaswitch/trunk/callflow/src/loadnewgraph.cpp (original) +++ sofaswitch/trunk/callflow/src/loadnewgraph.cpp Wed Nov 8 22:51:30 2006 @@ -72,6 +72,7 @@ file.AddLine(" f = MyFactory() "); file.AddLine(" f.isMaster = False "); file.AddLine(" f.setGraph(fname) "); + file.AddLine(" f.setMaster(False) "); file.AddLine(" reactor.connectTCP(sofaServer, 5000, f) "); file.AddLine(" return self.data[a][\"Output\"] "); file.AddLine(""); Modified: sofaswitch/trunk/callflow/src/shapelist.cpp ============================================================================== --- sofaswitch/trunk/callflow/src/shapelist.cpp (original) +++ sofaswitch/trunk/callflow/src/shapelist.cpp Wed Nov 8 22:51:30 2006 @@ -316,6 +316,13 @@ file.AddLine(tString.c_str()); file.AddLine(" "); + file.AddLine(" def setMaster(self, newIsMaster): "); + file.AddLine(" \"\"\"Set the flag to indicate if we have been spawned "); + file.AddLine(" as a child process, or if we are key launching "); + file.AddLine(" process that was invoked from the command line. "); + file.AddLine(" \"\"\" "); + file.AddLine(" self.isMaster = newIsMaster "); + file.AddLine(" "); file.AddLine(" def setGraphData(self, graphFile): "); file.AddLine(" \"\"\"Read in the file which describes where the flow "); file.AddLine(" of execution goes, and variables associated with "); @@ -540,13 +547,19 @@ file.AddLine(" p.factory = self "); file.AddLine(" self.myController = p "); file.AddLine(" self.myController.setGraphData(self.myGraphName) "); + file.AddLine(" self.myController.setMaster(self.isMaster) "); file.AddLine(" return p "); file.AddLine(" "); file.AddLine(" def setGraph(self, newName): "); file.AddLine(" self.myGraphName = newName "); file.AddLine(" "); + file.AddLine(" def setMaster(self, newMaster): "); + file.AddLine(" self.isMaster = newMaster "); + file.AddLine(" "); + file.AddLine(" "); file.AddLine("f = MyFactory() "); file.AddLine(wxString::Format("f.setGraph(\"%s\") ", graphFileName.c_str())); + file.AddLine("f.setMaster(True) "); file.AddLine("reactor.connectTCP(sofaServer, 5000, f) "); file.AddLine("reactor.run() "); file.AddLine(" "); Modified: sofaswitch/trunk/callflow/tests/amplaywavfile.src ============================================================================== --- sofaswitch/trunk/callflow/tests/amplaywavfile.src (original) +++ sofaswitch/trunk/callflow/tests/amplaywavfile.src Wed Nov 8 22:51:30 2006 @@ -1,3 +1,3 @@ -9<B>632<B>318<B>632,366,638,319,685,318,685,330<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>9<B>821<B>356<B>821,357,977,357,1018,356<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>1<B>190<B>19<B> extra <special>Tool Tip<ms>Start Processing<ms><special> <B><Shape>9<B>544<B>394<B>606,394,602,560,544,561<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>5<B>241<B>359<B> extra <special>Tool Tip<ms>Conditional<ms><special>Test (Python code)<ms>(self.amNode != None) and (self.soundNode != None)<ms><special> <B><Shape>17<B>516<B>509<B> extra <special>Tool Tip<ms>Write To File<ms><special>Filename to contain new audio (Python code)<ms>"recorded_audio.wav"<ms><special>answering machine node<ms>self.amNode<ms><special> <B><Shape>15<B>989<B>451<B> extra <special>Tool Tip<ms>Transfer Media<ms><special>First SofaSwitch worker (python)<ms>"sound"<ms><special>Second SofaSwitch worker (python)<ms>"sound"<ms><special> <B><Shape>14<B>202<B>162<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>amREQ<ms><special>Python variable to hold event data<ms>self.amNode<ms><special> <B><Shape>2<B>307<B>394<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>14<B>295<B>185<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>soundREQU<ms><special>Python variable to hold event data<ms>self.soundNode<ms><special> <B><Shape>9<B>559<B>339<B>559,339,604,342<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>16<B>516<B>561<B> extra <special>Tool Tip<ms>initial wav file<ms><special>Filename to read audio from (Python code)<ms>"../prompts/instructions.wav"<ms><special>answering machine node<ms>self.amNode<ms><special> <B><Shape>20<B>529<B>662<B> extra <special>Tool Tip<ms>Death<ms><special> <B><Shape>9<B>712<B>318<B>712,358,755,361,750,320,793,318,798,333<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>16<B>505<B>364<B> extra <special>Tool Tip<ms>Read From File<ms><special>Filename to read audio from (Python code)<ms>"../prompts/sample_message.wav"<ms><special>answering machine node<ms>self.amNode<ms><special> <B><Shape>5<B>991<B>358<B> extra <special>Tool Tip<ms>Conditional<ms><special>Test (Python code)<ms>self.dtmfData=="9"<ms><special> <B><Shape>10<B>990<B>405<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "hangup, as dtmf 9 has been received"<ms><special> <B><Shape>9<B>266<B>329<B>308,329,266,359<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>2<B>505<B>398<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>9<B>264<B>199<B>264,513,264,635,426,639,428,199,532,202,532,262<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>13<B>190<B>210<B> extra <special>Tool Tip<ms>Stop Timer<ms><special>Timer to stop<ms>request voip<ms><special> <B><Shape>10<B>190<B>254<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "Have a new am node on ", self.amNode<ms><special> <B><Shape>13<B>284<B>231<B> extra <special>Tool Tip<ms>Stop Timer<ms><special>Timer to stop<ms>request sound<ms><special> <B><Shape>15<B>240<B>412<B> extra <special>Tool Tip<ms>Transfer Media<ms><special>First SofaSwitch worker (python)<ms>self.amNode<ms><special>Second SofaSwitch worker (python)<ms>self.soundNode<ms><special> <B><Shape>9<B>302<B>485<B>302,485,544,492,542,506<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>5<B>770<B>331<B> extra <special>Tool Tip<ms>play leaving sound<ms><special>Test (Python code)<ms>self.dtmfData=="3"<ms><special> <B><Shape>5<B>660<B>332<B> extra <special>Tool Tip<ms>play entering sound<ms><special>Test (Python code)<ms>self.dtmfData=="2"<ms><special> <B><Shape>5<B>507<B>312<B> extra <special>Tool Tip<ms>Test Roger voice<ms><special>Test (Python code)<ms>self.dtmfData=="1"<ms><special> <B><Shape>2<B>659<B>427<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>2<B>1058<B>385<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>5<B>581<B>341<B> extra <special>Tool Tip<ms>Repeat instructions<ms><special>Test (Python code)<ms>self.dtmfData=="4"<ms><special> <B><Shape>11<B>190<B>68<B> extra <special>Tool Tip<ms>Request Node<ms><special>Request node from<ms>am<ms><special>Timer period (seconds)<ms>1<ms><special>Timer label<ms>requestam<ms><special> <B><Shape>10<B>507<B>259<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "dtmf received of ", self.dtmfData<ms><special> <B><Shape>14<B>529<B>614<B> extra <special>Tool Tip<ms>Catch the timer which, when fired, -indicates the end of this call<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>hanguptime<ms><special>Python variable to hold event data<ms>self.hanguptime<ms><special> <B><Shape>16<B>659<B>379<B> extra <special>Tool Tip<ms>play entering sound<ms><special>Filename to read audio from (Python code)<ms>"../prompts/entering.wav"<ms><special>answering machine node (Python code)<ms>self.amNode<ms><special> <B><Shape>9<B>291<B>382<B>291,386,334,382,332,395<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>2<B>769<B>426<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>14<B>251<B>461<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>DTMF<ms><special>Python variable to hold event data<ms>self.dtmfData<ms><special> <B><Shape>7<B>989<B>497<B> extra <special>Tool Tip<ms>End Call<ms><special>Worker node to activate (python code)<ms>self.amNode<ms><special> <B><Shape>10<B>282<B>279<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print " have a sound node of ", self.soundNode<ms><special> <B><Shape>12<B>990<B>549<B> extra <special>Tool Tip<ms>Initiate a timer, which causes this to -end.<ms><special>Timer period (seconds)<ms>0.1<ms><special>Timer label (string literal)<ms>hanguptime<ms><special> <B><Shape>9<B>1039<B>386<B>1039,386,1082,387<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>9<B>248<B>182<B>248,183,308,182<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>9<B>214<B>304<B>214,304,262,356<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>16<B>770<B>378<B> extra <special>Tool Tip<ms>play leaving sound<ms><special>Filename to read audio from (Python code)<ms>"../prompts/leaving.wav"<ms><special>answering machine node (Python code)<ms>self.amNode<ms><special> <B><Shape>11<B>189<B>117<B> extra <special>Tool Tip<ms>Request Node<ms><special>Request node from<ms>sound<ms><special>Timer period (seconds)<ms>2<ms><special>Timer label<ms>request sound<ms><special> <B><Shape>2<B>991<B>588<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape> +12<B>990<B>549<B> extra <special>Tool Tip<ms>Initiate a timer, which causes this to +end.<ms><special>Timer period (seconds)<ms>0.1<ms><special>Timer label (string literal)<ms>hanguptime<ms><special> <B><Shape>14<B>251<B>461<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>DTMF<ms><special>Python variable to hold event data<ms>self.dtmfData<ms><special> <B><Shape>16<B>505<B>364<B> extra <special>Tool Tip<ms>Play Rogers voice<ms><special>Filename to read audio from (Python code)<ms>"../prompts/sample_message.wav"<ms><special>answering machine node<ms>self.amNode<ms><special> <B><Shape>16<B>516<B>561<B> extra <special>Tool Tip<ms>initial wav file<ms><special>Filename to read audio from (Python code)<ms>"../prompts/instructions.wav"<ms><special>answering machine node<ms>self.amNode<ms><special> <B><Shape>2<B>769<B>426<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>9<B>559<B>339<B>559,339,604,342<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>11<B>191<B>67<B> extra <special>Tool Tip<ms>Request Node from AM module<ms><special>Request node from (Python code)<ms>"am"<ms><special>Timer period (seconds)<ms>1<ms><special>Timer label<ms>requestam<ms><special>Additional information (Python code)<ms><ms><special> <B><Shape>5<B>660<B>332<B> extra <special>Tool Tip<ms>play entering sound<ms><special>Test (Python code)<ms>self.dtmfData=="2"<ms><special> <B><Shape>5<B>241<B>359<B> extra <special>Tool Tip<ms>Conditional<ms><special>Test (Python code)<ms>(self.amNode != None) and (self.soundNode != None)<ms><special> <B><Shape>10<B>507<B>259<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "dtmf received of ", self.dtmfData<ms><special> <B><Shape>20<B>529<B>662<B> extra <special>Tool Tip<ms>Death<ms><special> <B><Shape>13<B>190<B>210<B> extra <special>Tool Tip<ms>Stop Timer<ms><special>Timer to stop<ms>request voip<ms><special> <B><Shape>7<B>989<B>497<B> extra <special>Tool Tip<ms>End Call<ms><special>Worker node to activate (python code)<ms>self.amNode<ms><special> <B><Shape>9<B>1039<B>386<B>1039,386,1082,387<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>5<B>507<B>312<B> extra <special>Tool Tip<ms>Test Roger voice<ms><special>Test (Python code)<ms>self.dtmfData=="1"<ms><special> <B><Shape>9<B>266<B>329<B>308,329,266,359<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>13<B>284<B>231<B> extra <special>Tool Tip<ms>Stop Timer<ms><special>Timer to stop<ms>request sound<ms><special> <B><Shape>9<B>712<B>318<B>712,358,755,361,750,320,793,318,798,333<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>9<B>291<B>382<B>291,386,334,382,332,395<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>5<B>581<B>341<B> extra <special>Tool Tip<ms>Repeat instructions<ms><special>Test (Python code)<ms>self.dtmfData=="4"<ms><special> <B><Shape>10<B>990<B>405<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "hangup, as dtmf 9 has been received"<ms><special> <B><Shape>9<B>632<B>318<B>632,366,638,319,685,318,685,330<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>14<B>202<B>162<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>amREQ<ms><special>Python variable to hold event data<ms>self.amNode<ms><special> <B><Shape>9<B>214<B>304<B>214,304,262,356<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>15<B>240<B>412<B> extra <special>Tool Tip<ms>Transfer Media<ms><special>First SofaSwitch worker (python)<ms>self.amNode<ms><special>Second SofaSwitch worker (python)<ms>self.soundNode<ms><special> <B><Shape>2<B>659<B>427<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>15<B>989<B>451<B> extra <special>Tool Tip<ms>Transfer Media<ms><special>First SofaSwitch worker (python)<ms>"sound"<ms><special>Second SofaSwitch worker (python)<ms>"sound"<ms><special> <B><Shape>14<B>295<B>185<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>soundREQU<ms><special>Python variable to hold event data<ms>self.soundNode<ms><special> <B><Shape>9<B>302<B>485<B>302,485,544,492,542,506<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>9<B>821<B>356<B>821,357,977,357,1018,356<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>5<B>770<B>331<B> extra <special>Tool Tip<ms>play leaving sound<ms><special>Test (Python code)<ms>self.dtmfData=="3"<ms><special> <B><Shape>14<B>529<B>614<B> extra <special>Tool Tip<ms>Catch the timer which, when fired, +indicates the end of this call<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>hanguptime<ms><special>Python variable to hold event data<ms>self.hanguptime<ms><special> <B><Shape>9<B>248<B>182<B>248,183,308,182<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>17<B>516<B>509<B> extra <special>Tool Tip<ms>Write To File<ms><special>Filename to contain new audio (Python code)<ms>"recorded_audio.wav"<ms><special>answering machine node<ms>self.amNode<ms><special> <B><Shape>16<B>659<B>379<B> extra <special>Tool Tip<ms>play entering sound<ms><special>Filename to read audio from (Python code)<ms>"../prompts/entering.wav"<ms><special>answering machine node (Python code)<ms>self.amNode<ms><special> <B><Shape>5<B>991<B>358<B> extra <special>Tool Tip<ms>Conditional<ms><special>Test (Python code)<ms>self.dtmfData=="9"<ms><special> <B><Shape>10<B>190<B>254<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "Have a new am node on ", self.amNode<ms><special> <B><Shape>9<B>544<B>394<B>606,394,602,560,544,561<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>2<B>505<B>398<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>2<B>1058<B>385<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>10<B>282<B>279<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print " have a sound node of ", self.soundNode<ms><special> <B><Shape>2<B>307<B>394<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>16<B>770<B>378<B> extra <special>Tool Tip<ms>play leaving sound<ms><special>Filename to read audio from (Python code)<ms>"../prompts/leaving.wav"<ms><special>answering machine node (Python code)<ms>self.amNode<ms><special> <B><Shape>2<B>991<B>588<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>9<B>264<B>199<B>264,513,264,635,426,639,428,199,532,202,532,262<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>1<B>190<B>19<B> extra <special>Tool Tip<ms>Start Processing<ms><special> <B><Shape>11<B>191<B>109<B> extra <special>Tool Tip<ms>Request Node from sound module<ms><special>Request node from (Python code)<ms>"sound"<ms><special>Timer period (seconds)<ms>1<ms><special>Timer label<ms>requestsound<ms><special>Additional information (Python code)<ms><ms><special> <B><Shape> Modified: sofaswitch/trunk/callflow/tests/dtmf_from_sound.src ============================================================================== --- sofaswitch/trunk/callflow/tests/dtmf_from_sound.src (original) +++ sofaswitch/trunk/callflow/tests/dtmf_from_sound.src Wed Nov 8 22:51:30 2006 @@ -1 +1 @@ -2<B>320<B>493<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>5<B>108<B>450<B> extra <special>Tool Tip<ms>Conditional<ms><special>Test (Python code)<ms>self.dtmfData=="*"<ms><special> <B><Shape>10<B>108<B>407<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "DTMF detected is ", self.dtmfData<ms><special> <B><Shape>20<B>120<B>491<B> extra <special>Tool Tip<ms>Death<ms><special> <B><Shape>9<B>130<B>361<B>258,390,131,361,130,363<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>14<B>246<B>251<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>REQ<ms><special>Python variable to hold event data<ms>self.newNode<ms><special> <B><Shape>11<B>232<B>159<B> extra <special>Tool Tip<ms>Request Node<ms><special>Request node from<ms>sound<ms><special>Timer period (seconds)<ms>1<ms><special>Timer label<ms>requestnode<ms><special> <B><Shape>14<B>334<B>283<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>requestnode<ms><special>Python variable to hold event data<ms>self.timerData<ms><special> <B><Shape>1<B>231<B>108<B> extra <special>Tool Tip<ms>Start Processing<ms><special> <B><Shape>9<B>157<B>475<B>157,475,347,493<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>13<B>231<B>340<B> extra <special>Tool Tip<ms>Stop Timer<ms><special>Timer to stop<ms>requestnode<ms><special> <B><Shape>9<B>345<B>370<B>348,370,345,494<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>10<B>323<B>322<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "timer has expired at ", time.asctime(), " ", self.timerData<ms><special> <B><Shape>10<B>231<B>295<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "have a new node on ", self.newNode<ms><special> <B><Shape>9<B>295<B>275<B>295,275,348,279<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>14<B>120<B>365<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>DTMF<ms><special>Python variable to hold event data<ms>self.dtmfData<ms><special> <B><Shape>10<B>232<B>204<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "Have requested a node from sound at ", time.asctime()<ms><special> <B><Shape> +9<B>335<B>274<B>338,274,335,398<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>1<B>221<B>12<B> extra <special>Tool Tip<ms>Start Processing<ms><special> <B><Shape>11<B>222<B>64<B> extra <special>Tool Tip<ms>Request Node<ms><special>Request node from (Python code)<ms>"sound"<ms><special>Timer period (seconds)<ms>1<ms><special>Timer label<ms>requestnode<ms><special>Additional information (Python code)<ms><ms><special> <B><Shape>9<B>120<B>265<B>248,294,121,265,120,267<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>9<B>147<B>379<B>147,379,337,397<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>9<B>285<B>179<B>285,179,338,183<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>10<B>221<B>199<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "have a new node on ", self.newNode<ms><special> <B><Shape>14<B>324<B>187<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>requestnode<ms><special>Python variable to hold event data<ms>self.timerData<ms><special> <B><Shape>20<B>110<B>395<B> extra <special>Tool Tip<ms>Death<ms><special> <B><Shape>5<B>98<B>354<B> extra <special>Tool Tip<ms>Conditional<ms><special>Test (Python code)<ms>self.dtmfData=="*"<ms><special> <B><Shape>14<B>236<B>155<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>REQ<ms><special>Python variable to hold event data<ms>self.newNode<ms><special> <B><Shape>10<B>313<B>226<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "timer has expired at ", time.asctime(), " ", self.timerData<ms><special> <B><Shape>10<B>222<B>108<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "Have requested a node from sound at ", time.asctime()<ms><special> <B><Shape>10<B>98<B>311<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "DTMF detected is ", self.dtmfData<ms><special> <B><Shape>14<B>110<B>269<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>DTMF<ms><special>Python variable to hold event data<ms>self.dtmfData<ms><special> <B><Shape>2<B>310<B>397<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>13<B>221<B>244<B> extra <special>Tool Tip<ms>Stop Timer<ms><special>Timer to stop<ms>requestnode<ms><special> <B><Shape> Modified: sofaswitch/trunk/callflow/tests/forloop.src ============================================================================== --- sofaswitch/trunk/callflow/tests/forloop.src (original) +++ sofaswitch/trunk/callflow/tests/forloop.src Wed Nov 8 22:51:30 2006 @@ -1 +1 @@ -10<B>307<B>108<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "loop index is ", self.i<ms><special> <B><Shape>3<B>299<B>62<B> extra <special>Tool Tip<ms>Start For<ms><special>Initialise (Python code)<ms>self.i = 0<ms><special>Test for Termination (Python code)<ms>self.i < 10<ms><special>Increment (Python code)<ms>self.i+=1<ms><special> <B><Shape>1<B>306<B>11<B> extra <special>Tool Tip<ms>Start Processing<ms><special> <B><Shape>20<B>322<B>199<B> extra <special>Tool Tip<ms>Death<ms><special> <B><Shape>4<B>301<B>152<B> extra <special>Tool Tip<ms>End For Loop<ms><special> <B><Shape>9<B>258<B>84<B>296,87,258,84,259,174,299,178<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape> +4<B>301<B>152<B> extra <special>Tool Tip<ms>End For Loop<ms><special> <B><Shape>1<B>306<B>11<B> extra <special>Tool Tip<ms>Start Processing<ms><special> <B><Shape>3<B>299<B>62<B> extra <special>Tool Tip<ms>Start For<ms><special>Initialise (Python code)<ms>self.i = 0<ms><special>Test for Termination (Python code)<ms>self.i < 10<ms><special>Increment (Python code)<ms>self.i+=1<ms><special> <B><Shape>20<B>322<B>199<B> extra <special>Tool Tip<ms>Death<ms><special> <B><Shape>10<B>307<B>108<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "loop index is ", self.i<ms><special> <B><Shape>9<B>258<B>84<B>296,87,258,84,259,174,299,178<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape> Modified: sofaswitch/trunk/callflow/tests/loadgraph.src ============================================================================== --- sofaswitch/trunk/callflow/tests/loadgraph.src (original) +++ sofaswitch/trunk/callflow/tests/loadgraph.src Wed Nov 8 22:51:30 2006 @@ -1 +1 @@ -12<B>378<B>172<B> extra <special>Tool Tip<ms>Timer<ms><special>Timer period (seconds)<ms>2<ms><special>Timer label (string literal)<ms>endloadgraph<ms><special> <B><Shape>1<B>379<B>35<B> extra <special>Tool Tip<ms>Start Processing<ms><special> <B><Shape>20<B>391<B>305<B> extra <special>Tool Tip<ms>Death<ms><special> <B><Shape>18<B>378<B>79<B> extra <special>Tool Tip<ms>Load New Graph<ms><special>new graph file (Python code)<ms>"am_test.graph"<ms><special> <B><Shape>10<B>378<B>126<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "have generated the new graph"<ms><special> <B><Shape>14<B>389<B>221<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>endloadgraph<ms><special>Python variable to hold event data<ms>self.eventData<ms><special> <B><Shape>10<B>377<B>262<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "end the master now"<ms><special> <B><Shape> +10<B>378<B>126<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "have generated the new graph"<ms><special> <B><Shape>20<B>391<B>305<B> extra <special>Tool Tip<ms>Death<ms><special> <B><Shape>1<B>379<B>35<B> extra <special>Tool Tip<ms>Start Processing<ms><special> <B><Shape>18<B>378<B>79<B> extra <special>Tool Tip<ms>Load New Graph<ms><special>new graph file (Python code)<ms>"am_test.graph"<ms><special> <B><Shape>14<B>389<B>221<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>endloadgraph<ms><special>Python variable to hold event data<ms>self.eventData<ms><special> <B><Shape>12<B>378<B>172<B> extra <special>Tool Tip<ms>Timer<ms><special>Timer period (seconds)<ms>20<ms><special>Timer label (string literal)<ms>endloadgraph<ms><special> <B><Shape>10<B>377<B>262<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "end the master now"<ms><special> <B><Shape> Modified: sofaswitch/trunk/callflow/tests/makevoipcall.src ============================================================================== --- sofaswitch/trunk/callflow/tests/makevoipcall.src (original) +++ sofaswitch/trunk/callflow/tests/makevoipcall.src Wed Nov 8 22:51:30 2006 @@ -1,3 +1,3 @@ -9<B>248<B>182<B>248,183,308,182<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>2<B>44<B>394<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>12<B>43<B>349<B> extra <special>Tool Tip<ms>Initiate a timer, which causes this to -end.<ms><special>Timer period (seconds)<ms>0.1<ms><special>Timer label (string literal)<ms>hanguptime<ms><special> <B><Shape>7<B>42<B>303<B> extra <special>Tool Tip<ms>End Call<ms><special>Worker node to activate (python code)<ms>self.voipNode<ms><special> <B><Shape>2<B>307<B>394<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>13<B>284<B>231<B> extra <special>Tool Tip<ms>Stop Timer<ms><special>Timer to stop<ms>request sound<ms><special> <B><Shape>1<B>190<B>19<B> extra <special>Tool Tip<ms>Start Processing<ms><special> <B><Shape>15<B>42<B>257<B> extra <special>Tool Tip<ms>Transfer Media<ms><special>First SofaSwitch worker (python)<ms>"sound"<ms><special>Second SofaSwitch worker (python)<ms>"sound"<ms><special> <B><Shape>5<B>241<B>359<B> extra <special>Tool Tip<ms>Conditional<ms><special>Test (Python code)<ms>(self.voipNode != None) and (self.soundNode != None)<ms><special> <B><Shape>11<B>189<B>117<B> extra <special>Tool Tip<ms>Request Node<ms><special>Request node from<ms>sound<ms><special>Timer period (seconds)<ms>2<ms><special>Timer label<ms>request sound<ms><special> <B><Shape>10<B>239<B>508<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "dtmf received of ", self.dtmfData<ms><special> <B><Shape>11<B>190<B>68<B> extra <special>Tool Tip<ms>Request Node<ms><special>Request node from<ms>voip<ms><special>Timer period (seconds)<ms>1<ms><special>Timer label<ms>request voip<ms><special> <B><Shape>13<B>190<B>260<B> extra <special>Tool Tip<ms>Stop Timer<ms><special>Timer to stop<ms>request voip<ms><special> <B><Shape>9<B>266<B>329<B>308,329,266,359<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>6<B>191<B>209<B> extra <special>Tool Tip<ms>Make Call<ms><special>Worker node to activate (python code)<ms>self.voipNode<ms><special>Call destination (python code)<ms>"h323:h323.voxgratia.org"<ms><special> <B><Shape>9<B>217<B>357<B>217,357,265,359<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>9<B>291<B>382<B>291,386,334,382,332,395<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>10<B>43<B>211<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "hangup, as dtmf 9 has been received"<ms><special> <B><Shape>20<B>368<B>626<B> extra <special>Tool Tip<ms>Death<ms><special> <B><Shape>9<B>302<B>486<B>302,486,376,486,380,579<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>5<B>240<B>549<B> extra <special>Tool Tip<ms>Conditional<ms><special>Test (Python code)<ms>self.dtmfData=="9"<ms><special> <B><Shape>15<B>240<B>412<B> extra <special>Tool Tip<ms>Transfer Media<ms><special>First SofaSwitch worker (python)<ms>self.voipNode<ms><special>Second SofaSwitch worker (python)<ms>self.soundNode<ms><special> <B><Shape>14<B>295<B>185<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>soundREQU<ms><special>Python variable to hold event data<ms>self.soundNode<ms><special> <B><Shape>14<B>202<B>162<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>voipREQ<ms><special>Python variable to hold event data<ms>self.voipNode<ms><special> <B><Shape>2<B>266<B>623<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>9<B>63<B>173<B>262,598,139,599,141,173,63,174,67,213<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>10<B>190<B>308<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "Have a new voip node on ", self.voipNode<ms><special> <B><Shape>14<B>367<B>581<B> extra <special>Tool Tip<ms>Catch the timer which, when fired, -indicates the end of this call<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>hanguptime<ms><special>Python variable to hold event data<ms>self.hanguptime<ms><special> <B><Shape>19<B>267<B>578<B> extra <special>Tool Tip<ms>Send Dtmf<ms><special>Worker node to activate (python code)<ms>self.voipNode<ms><special>DTMF to send to worker node (python code)<ms>self.dtmfData<ms><special> <B><Shape>10<B>282<B>279<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print " have a sound node of ", self.soundNode<ms><special> <B><Shape>14<B>251<B>463<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>DTMF<ms><special>Python variable to hold event data<ms>self.dtmfData<ms><special> <B><Shape> +13<B>190<B>260<B> extra <special>Tool Tip<ms>Stop Timer<ms><special>Timer to stop<ms>requestvoip<ms><special> <B><Shape>13<B>284<B>231<B> extra <special>Tool Tip<ms>Stop Timer<ms><special>Timer to stop<ms>requestsound<ms><special> <B><Shape>9<B>302<B>486<B>302,486,376,486,380,579<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>11<B>191<B>109<B> extra <special>Tool Tip<ms>Request Node<ms><special>Request node from (Python code)<ms>"sound"<ms><special>Timer period (seconds)<ms>1<ms><special>Timer label<ms>requestsound<ms><special>Additional information (Python code)<ms><ms><special> <B><Shape>14<B>251<B>463<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>DTMF<ms><special>Python variable to hold event data<ms>self.dtmfData<ms><special> <B><Shape>2<B>44<B>394<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>9<B>217<B>357<B>217,357,265,359<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>12<B>43<B>349<B> extra <special>Tool Tip<ms>Initiate a timer, which causes this to +end.<ms><special>Timer period (seconds)<ms>0.1<ms><special>Timer label (string literal)<ms>hanguptime<ms><special> <B><Shape>10<B>190<B>308<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "Have a new voip node on ", self.voipNode<ms><special> <B><Shape>9<B>266<B>329<B>308,329,266,359<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>14<B>295<B>185<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>soundREQU<ms><special>Python variable to hold event data<ms>self.soundNode<ms><special> <B><Shape>2<B>307<B>394<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>10<B>43<B>211<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "hangup, as dtmf 9 has been received"<ms><special> <B><Shape>1<B>190<B>19<B> extra <special>Tool Tip<ms>Start Processing<ms><special> <B><Shape>10<B>239<B>508<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "dtmf received of ", self.dtmfData<ms><special> <B><Shape>9<B>63<B>173<B>262,598,139,599,141,173,63,174,67,213<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>14<B>202<B>162<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>voipREQ<ms><special>Python variable to hold event data<ms>self.voipNode<ms><special> <B><Shape>11<B>191<B>71<B> extra <special>Tool Tip<ms>Request Node<ms><special>Request node from (Python code)<ms>"voip"<ms><special>Timer period (seconds)<ms>1<ms><special>Timer label<ms>requestvoip<ms><special>Additional information (Python code)<ms><ms><special> <B><Shape>20<B>368<B>626<B> extra <special>Tool Tip<ms>Death<ms><special> <B><Shape>19<B>267<B>578<B> extra <special>Tool Tip<ms>Send Dtmf<ms><special>Worker node to activate (python code)<ms>self.voipNode<ms><special>DTMF to send to worker node (python code)<ms>self.dtmfData<ms><special> <B><Shape>6<B>191<B>209<B> extra <special>Tool Tip<ms>Make Call<ms><special>Worker node to activate (python code)<ms>self.voipNode<ms><special>Call destination (python code)<ms>"h323:h323.voxgratia.org"<ms><special> <B><Shape>9<B>291<B>382<B>291,386,334,382,332,395<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>15<B>240<B>412<B> extra <special>Tool Tip<ms>Transfer Media<ms><special>First SofaSwitch worker (python)<ms>self.voipNode<ms><special>Second SofaSwitch worker (python)<ms>self.soundNode<ms><special> <B><Shape>15<B>42<B>257<B> extra <special>Tool Tip<ms>Transfer Media<ms><special>First SofaSwitch worker (python)<ms>"sound"<ms><special>Second SofaSwitch worker (python)<ms>"sound"<ms><special> <B><Shape>7<B>42<B>303<B> extra <special>Tool Tip<ms>End Call<ms><special>Worker node to activate (python code)<ms>self.voipNode<ms><special> <B><Shape>2<B>266<B>623<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>9<B>248<B>182<B>248,183,308,182<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>14<B>367<B>581<B> extra <special>Tool Tip<ms>Catch the timer which, when fired, +indicates the end of this call<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>hanguptime<ms><special>Python variable to hold event data<ms>self.hanguptime<ms><special> <B><Shape>5<B>241<B>359<B> extra <special>Tool Tip<ms>Conditional<ms><special>Test (Python code)<ms>(self.voipNode != None) and (self.soundNode != None)<ms><special> <B><Shape>10<B>282<B>279<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print " have a sound node of ", self.soundNode<ms><special> <B><Shape>5<B>240<B>549<B> extra <special>Tool Tip<ms>Conditional<ms><special>Test (Python code)<ms>self.dtmfData=="9"<ms><special> <B><Shape> Modified: sofaswitch/trunk/callflow/tests/requestnode.src ============================================================================== --- sofaswitch/trunk/callflow/tests/requestnode.src (original) +++ sofaswitch/trunk/callflow/tests/requestnode.src Wed Nov 8 22:51:30 2006 @@ -1 +1 @@ -14<B>336<B>282<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>requestnode<ms><special>Python variable to hold event data<ms>self.timerData<ms><special> <B><Shape>1<B>231<B>157<B> extra <special>Tool Tip<ms>Start Processing<ms><special> <B><Shape>2<B>323<B>370<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>13<B>231<B>340<B> extra <special>Tool Tip<ms>Stop Timer<ms><special>Timer to stop<ms>requestnode<ms><special> <B><Shape>10<B>231<B>295<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "have a new node on ", self.eventData<ms><special> <B><Shape>20<B>245<B>386<B> extra <special>Tool Tip<ms>Death<ms><special> <B><Shape>11<B>231<B>208<B> extra <special>Tool Tip<ms>Request Node<ms><special>Request node from<ms>voip<ms><special>Timer period (seconds)<ms>1<ms><special>Timer label<ms>requestnode<ms><special> <B><Shape>14<B>244<B>255<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>NEWID<ms><special>Python variable to hold event data<ms>self.eventData<ms><special> <B><Shape>9<B>290<B>279<B>290,280,350,279<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>10<B>323<B>322<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "timer has expired at ", time.asctime(), " from ", self.timerData<ms><special> <B><Shape> +14<B>244<B>255<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>NEWID<ms><special>Python variable to hold event data<ms>self.eventData<ms><special> <B><Shape>13<B>231<B>340<B> extra <special>Tool Tip<ms>Stop Timer<ms><special>Timer to stop<ms>requestnode<ms><special> <B><Shape>2<B>323<B>370<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>20<B>245<B>386<B> extra <special>Tool Tip<ms>Death<ms><special> <B><Shape>10<B>323<B>322<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "timer has expired at ", time.asctime(), " from ", self.timerData<ms><special> <B><Shape>10<B>231<B>295<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "have a new node on ", self.eventData<ms><special> <B><Shape>9<B>290<B>279<B>290,280,350,279<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>1<B>231<B>157<B> extra <special>Tool Tip<ms>Start Processing<ms><special> <B><Shape>11<B>232<B>206<B> extra <special>Tool Tip<ms>Request Node<ms><special>Request node from (Python code)<ms>"voip"<ms><special>Timer period (seconds)<ms>1<ms><special>Timer label<ms>request node<ms><special>Additional information (Python code)<ms><ms><special> <B><Shape>14<B>336<B>282<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>request node<ms><special>Python variable to hold event data<ms>self.timerData<ms><special> <B><Shape> Modified: sofaswitch/trunk/callflow/tests/simpleeventer.src ============================================================================== --- sofaswitch/trunk/callflow/tests/simpleeventer.src (original) +++ sofaswitch/trunk/callflow/tests/simpleeventer.src Wed Nov 8 22:51:30 2006 @@ -1 +1 @@ -10<B>287<B>172<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "have received a new node ", self.newNode<ms><special> <B><Shape>20<B>300<B>324<B> extra <special>Tool Tip<ms>Death<ms><special> <B><Shape>2<B>327<B>251<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>10<B>326<B>202<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print " Finished main stream of execution "<ms><special> <B><Shape>9<B>349<B>148<B>349,148,351,201<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>1<B>285<B>27<B> extra <special>Tool Tip<ms>Start Processing<ms><special> <B><Shape>11<B>286<B>78<B> extra <special>Tool Tip<ms>Request Node<ms><special>Request node from<ms>voip<ms><special>Timer period (seconds)<ms>1<ms><special>Timer label<ms>requestnode<ms><special> <B><Shape>14<B>301<B>125<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>REQ<ms><special>Python variable to hold event data<ms>self.newNode<ms><special> <B><Shape>9<B>312<B>219<B>312,219,312,326<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape> +1<B>285<B>27<B> extra <special>Tool Tip<ms>Start Processing<ms><special> <B><Shape>9<B>312<B>219<B>312,219,312,326<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>10<B>326<B>202<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print " Finished main stream of execution "<ms><special> <B><Shape>11<B>287<B>76<B> extra <special>Tool Tip<ms>Request Node<ms><special>Request node from (Python code)<ms>"voip"<ms><special>Timer period (seconds)<ms>1<ms><special>Timer label<ms>requestnode<ms><special>Additional information (Python code)<ms><ms><special> <B><Shape>10<B>287<B>172<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "have received a new node ", self.newNode<ms><special> <B><Shape>2<B>327<B>251<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>14<B>301<B>125<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>REQ<ms><special>Python variable to hold event data<ms>self.newNode<ms><special> <B><Shape>20<B>300<B>324<B> extra <special>Tool Tip<ms>Death<ms><special> <B><Shape>9<B>349<B>148<B>349,148,351,201<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape> Modified: sofaswitch/trunk/callflow/tests/timetest.src ============================================================================== --- sofaswitch/trunk/callflow/tests/timetest.src (original) +++ sofaswitch/trunk/callflow/tests/timetest.src Wed Nov 8 22:51:30 2006 @@ -1 +1 @@ -14<B>220<B>256<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>timer2<ms><special>Python variable to hold event data<ms>self.timer2<ms><special> <B><Shape>14<B>347<B>327<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>10<ms><special>Python variable to hold event data<ms>self.timer3<ms><special> <B><Shape>20<B>346<B>417<B> extra <special>Tool Tip<ms>Death<ms><special> <B><Shape>12<B>127<B>125<B> extra <special>Tool Tip<ms>Timer<ms><special>Timer period (seconds)<ms>1<ms><special>Timer label<ms>timer1<ms><special> <B><Shape>10<B>123<B>74<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "Start ", time.asctime()<ms><special> <B><Shape>10<B>334<B>370<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "t10 ", time.asctime(), " data is ", self.timer3<ms><special> <B><Shape>10<B>126<B>221<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "t1 ", time.asctime(), " data is ", self.timer1Data<ms><special> <B><Shape>12<B>207<B>202<B> extra <special>Tool Tip<ms>Timer<ms><special>Timer period (seconds)<ms>2<ms><special>Timer label<ms>timer2<ms><special> <B><Shape>10<B>207<B>305<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "t2 ", time.asctime(), " data is ", self.timer2<ms><special> <B><Shape>9<B>270<B>278<B>270,280,359,278<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>12<B>335<B>275<B> extra <special>Tool Tip<ms>Timer<ms><special>Timer period (seconds)<ms>10<ms><special>Timer label (string literal)<ms>t10<ms><special> <B><Shape>9<B>231<B>351<B>232,351,231,422<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>2<B>204<B>419<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>1<B>123<B>26<B> extra <special>Tool Tip<ms>Start Processing<ms><special> <B><Shape>14<B>139<B>179<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>timer1<ms><special>Python variable to hold event data<ms>self.timer1Data<ms><special> <B><Shape>9<B>150<B>271<B>150,271,152,406,223,407,229,423<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>9<B>188<B>201<B>188,201,231,202<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape> +12<B>335<B>275<B> extra <special>Tool Tip<ms>Timer<ms><special>Timer period (seconds)<ms>10<ms><special>Timer label (string literal)<ms>t10<ms><special> <B><Shape>10<B>334<B>370<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "t10 ", time.asctime(), " data is ", self.timer3<ms><special> <B><Shape>2<B>204<B>419<B> extra <special>Tool Tip<ms>End Processing<ms><special> <B><Shape>10<B>126<B>221<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "t1 ", time.asctime(), " data is ", self.timer1Data<ms><special> <B><Shape>9<B>231<B>351<B>232,351,231,422<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>12<B>207<B>202<B> extra <special>Tool Tip<ms>Timer<ms><special>Timer period (seconds)<ms>2<ms><special>Timer label<ms>timer2<ms><special> <B><Shape>14<B>139<B>179<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>timer1<ms><special>Python variable to hold event data<ms>self.timer1Data<ms><special> <B><Shape>9<B>188<B>201<B>188,201,231,202<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>20<B>346<B>417<B> extra <special>Tool Tip<ms>Death<ms><special> <B><Shape>12<B>127<B>125<B> extra <special>Tool Tip<ms>Timer<ms><special>Timer period (seconds)<ms>1<ms><special>Timer label<ms>timer1<ms><special> <B><Shape>10<B>207<B>305<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "t2 ", time.asctime(), " data is ", self.timer2<ms><special> <B><Shape>10<B>123<B>74<B> extra <special>Tool Tip<ms>Python<ms><special>Python Code<ms>print "Start ", time.asctime()<ms><special> <B><Shape>1<B>123<B>26<B> extra <special>Tool Tip<ms>Start Processing<ms><special> <B><Shape>9<B>150<B>271<B>150,271,152,406,223,407,229,423<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>14<B>347<B>327<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>10<ms><special>Python variable to hold event data<ms>self.timer3<ms><special> <B><Shape>9<B>270<B>278<B>270,280,359,278<special>Tool Tip<ms>Join blocks shape<ms><special> <B><Shape>14<B>220<B>256<B> extra <special>Tool Tip<ms>Eventer<ms><special>Event sought (Python code)<ms><ms><special>Event sought (Regular Exp)<ms>timer2<ms><special>Python variable to hold event data<ms>self.timer2<ms><special> <B><Shape>