Update of /cvsroot/audacity/audacity-src/src/commands
In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv31971/src/commands

Modified Files:
        CommandBuilder.cpp ScriptCommandRelay.cpp ScriptCommandRelay.h 
Log Message:
Update scripting on the Audacity side to use ResponseQueue to get command
responses back to the script.



Index: ScriptCommandRelay.cpp
===================================================================
RCS file: /cvsroot/audacity/audacity-src/src/commands/ScriptCommandRelay.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- ScriptCommandRelay.cpp      30 May 2009 04:30:33 -0000      1.1
+++ ScriptCommandRelay.cpp      7 Jun 2009 15:35:49 -0000       1.2
@@ -2,7 +2,7 @@
 
    Audacity - A Digital Audio Editor
    Copyright 1999-2009 Audacity Team
-   License: GPL v2 - see LICENSE.txt
+   File License: wxWidgets
 
    Dan Horgan
 
@@ -26,21 +26,19 @@
 #include "CommandBuilder.h"
 #include "AppCommandEvent.h"
 #include "CommandHandler.h"
+#include "ResponseQueue.h"
 #include <wx/wx.h>
 
-
 #include "../Project.h"
+
 // Declare static class members
 CommandHandler *ScriptCommandRelay::sCmdHandler;
 tpRegScriptServerFunc ScriptCommandRelay::sScriptFn;
-tpScriptServerResponseFunc ScriptCommandRelay::sScriptOutFn;
+ResponseQueue ScriptCommandRelay::sResponseQueue;
 
 void ScriptCommandRelay::SetRegScriptServerFunc(tpRegScriptServerFunc scriptFn)
 { sScriptFn = scriptFn; }
 
-void 
ScriptCommandRelay::SetScriptServerResponseFunc(tpScriptServerResponseFunc 
scriptOutFn)
-{ sScriptOutFn = scriptOutFn; }
-
 void ScriptCommandRelay::SetCommandHandler(CommandHandler &ch)
 { sCmdHandler = &ch; }
 
@@ -48,14 +46,14 @@
 {
    wxASSERT( sScriptFn != NULL );
    while( true )
-      sScriptFn(&ScriptCommandRelay::ExecCommand);
+      sScriptFn(&ExecCommand);
 }
 
 /// This is the function which actually obeys one command.  Rather than 
applying
 /// the command directly, an event containing a reference to the command is 
sent
 /// to the main (GUI) thread. This is because having more than one thread 
access
 /// the GUI at a time causes problems with wxwidgets.
-int ScriptCommandRelay::ExecCommand(wxString *pIn)
+int ExecCommand(wxString *pIn, wxString *pOut)
 {
    CommandBuilder builder(*pIn);
    if (builder.WasValid())
@@ -64,18 +62,25 @@
       AppCommandEvent ev;
       ev.SetCommand(cmd);
       GetActiveProject()->AddPendingEvent(ev);
+      Response r = ScriptCommandRelay::ReceiveResponse();
+      *pOut      = r.GetMessage();
    } else
    {
-      wxMessageOutputDebug().Printf(wxT("Syntax error!\n"));
-      // TODO: Send message back to script
+      *pOut = wxT("Syntax error!\n");
+      *pOut += builder.GetErrorMessage();
    }
 
    return 0;
 }
 
-void ScriptCommandRelay::SendResponse(wxString &pOut)
+void ScriptCommandRelay::SendResponse(const wxString &response)
 {
-   sScriptOutFn(&pOut);
+   sResponseQueue.AddResponse(response);
+}
+
+Response ScriptCommandRelay::ReceiveResponse()
+{
+   return ScriptCommandRelay::sResponseQueue.WaitAndGetResponse();
 }
 
 // Indentation settings for Vim and Emacs and unique identifier for Arch, a

Index: ScriptCommandRelay.h
===================================================================
RCS file: /cvsroot/audacity/audacity-src/src/commands/ScriptCommandRelay.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- ScriptCommandRelay.h        30 May 2009 04:30:33 -0000      1.1
+++ ScriptCommandRelay.h        7 Jun 2009 15:35:49 -0000       1.2
@@ -2,7 +2,7 @@
 
    Audacity - A Digital Audio Editor
    Copyright 1999-2009 Audacity Team
-   License: GPL v2 - see LICENSE.txt
+   File License: wxWidgets
 
    Dan Horgan
 
@@ -20,33 +20,37 @@
 #include <wx/string.h>
 
 class CommandHandler;
+class ResponseQueue;
+class Response;
 
-extern "C" {
 
-typedef int (*tpExecScriptServerFunc)( wxString * pIn);
+
+typedef int (*tpExecScriptServerFunc)( wxString * pIn, wxString * pOut);
 typedef int (*tpRegScriptServerFunc)(tpExecScriptServerFunc pFn);
-typedef int (*tpScriptServerResponseFunc)( wxString * pOut);
+
+extern "C" {
+      AUDACITY_DLL_API int ExecCommand(wxString *pIn, wxString *pOut);
+} // End 'extern C'
 
 class ScriptCommandRelay
 {
    private:
+      // N.B. Static class members also have to be declared in the .cpp file
       static CommandHandler *sCmdHandler;
       static tpRegScriptServerFunc sScriptFn;
-      static tpScriptServerResponseFunc sScriptOutFn;
+      static ResponseQueue sResponseQueue;
 
    public:
 
       static void SetRegScriptServerFunc(tpRegScriptServerFunc scriptFn);
-      static void SetScriptServerResponseFunc(tpScriptServerResponseFunc 
scriptOutFn);
       static void SetCommandHandler(CommandHandler &ch);
 
       static void Run();
 
-      AUDACITY_DLL_API static int ExecCommand( wxString * pIn );
-
-      static void SendResponse(wxString &pOut);
+      static void SendResponse(const wxString &response);
+      static Response ReceiveResponse();
 };
-} // End 'extern C'
+
 #endif /* End of include guard: __SCRIPTCOMMANDRELAY__ */
 
 // Indentation settings for Vim and Emacs and unique identifier for Arch, a

Index: CommandBuilder.cpp
===================================================================
RCS file: /cvsroot/audacity/audacity-src/src/commands/CommandBuilder.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- CommandBuilder.cpp  30 May 2009 04:30:33 -0000      1.1
+++ CommandBuilder.cpp  7 Jun 2009 15:35:49 -0000       1.2
@@ -2,7 +2,7 @@
 
    Audacity - A Digital Audio Editor
    Copyright 1999-2009 Audacity Team
-   License: GPL v2 - see LICENSE.txt
+   File License: wxWidgets
 
    Dan Horgan
 
@@ -58,11 +58,6 @@
 {
 
    /*
-   wxMessageOutputDebug().Printf(cmdName);
-   // Temp
-   mValid = true;
-
-
    // Split up parameters and add them to the map
 
    // The checking below should be replaced by a lookup + polymorphism
@@ -78,9 +73,9 @@
    //   // TODO store command somewhere else...
    //   mCommand = new EffectCommand(f);
    //}
-   */
-
+   //
    // See if the name refers to a menu command
+   */
 
    mCommand = new BatchEvalCommand(cmdName, cmdParams);
    mValid   = true;
@@ -89,19 +84,18 @@
 void CommandBuilder::BuildCommand(const wxString &cmdString)
 {
 
-   // Find the command name terminator... ignore line if not found
+   // Find the command name terminator...  If there is more than one word and
+   // no terminator, the command is badly formed
    int splitAt = cmdString.Find(wxT(':'));
-   if (splitAt < 0) {
+   if (splitAt < 0 && cmdString.Strip(wxString::both).Find(wxT(' ')) >= 0) {
       mError = wxT("BAD - Missing ':'?");
-      // TODO
+      mValid = false;
+      return;
    }
 
    wxString cmdName = cmdString.Left(splitAt).Strip(wxString::both);
    wxString cmdParams = cmdString.Mid(splitAt+1).Strip(wxString::both);
    BuildCommand(cmdName, cmdParams);
-
-   // Temp
-   //mCommand = new DebugPrintCommand(cmdString);
 }
 
 // Indentation settings for Vim and Emacs and unique identifier for Arch, a


------------------------------------------------------------------------------
OpenSolaris 2009.06 is a cutting edge operating system for enterprises 
looking to deploy the next generation of Solaris that includes the latest 
innovations from Sun and the OpenSource community. Download a copy and 
enjoy capabilities such as Networking, Storage and Virtualization. 
Go to: http://p.sf.net/sfu/opensolaris-get
_______________________________________________
Audacity-cvs mailing list
Audacity-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/audacity-cvs

Reply via email to