]> git.mxchange.org Git - flightgear.git/blobdiff - src/Scripting/NasalClipboard.cxx
Remove debug console output in FGApproachController
[flightgear.git] / src / Scripting / NasalClipboard.cxx
index db148dce0a9875d24d61a91eba3d4b6a5d4d078a..b677dfc928a44159e5cdf4deeee7d6abceee16c6 100644 (file)
@@ -22,6 +22,7 @@
 
 #include "NasalClipboard.hxx"
 #include "NasalSys.hxx"
+#include <simgear/nasal/cppbind/NasalCallContext.hxx>
 
 #include <boost/algorithm/string/case_conv.hpp>
 #include <cstddef>
  *  Nasal wrappers for setting/getting clipboard text
  */
 //------------------------------------------------------------------------------
-static NasalClipboard::Type parseType(naContext c, int argc, naRef* args, int i)
+static NasalClipboard::Type parseType(const nasal::CallContext& ctx, size_t i)
 {
-  if( argc > i )
+  if( ctx.argc > i )
   {
-    if( !naIsString(args[i]) )
-      naRuntimeError(c, "clipboard: invalid arg (not a string)");
-
-    std::string type_str( naStr_data(args[i]) );
-    boost::to_upper(type_str);
-
-    if( type_str == "CLIPBOARD" )
-      return NasalClipboard::CLIPBOARD;
-    else if( type_str == "PRIMARY" || type_str == "SELECTION" )
-      return NasalClipboard::PRIMARY;
-    else
-      naRuntimeError(c, "clipboard: unknown clipboard type");
+    if( ctx.isNumeric(i) )
+    {
+      if( ctx.requireArg<int>(i) == NasalClipboard::CLIPBOARD )
+        return NasalClipboard::CLIPBOARD;
+      if( ctx.requireArg<int>(i) == NasalClipboard::PRIMARY )
+        return NasalClipboard::PRIMARY;
+    }
+
+    naRuntimeError
+    (
+      ctx.c,
+      "clipboard: invalid arg "
+      "(expected clipboard.CLIPBOARD or clipboard.SELECTION)"
+    );
   }
 
   return NasalClipboard::CLIPBOARD;
 }
 
 //------------------------------------------------------------------------------
-static naRef f_setClipboardText(naContext c, naRef me, int argc, naRef* args)
+static naRef f_setClipboardText(const nasal::CallContext& ctx)
 {
-  if( argc < 1 || argc > 2 )
-    naRuntimeError( c, "clipboard.setText() expects 1 or 2 arguments: "
-                       "text, [, type = \"CLIPBOARD\"]" );
-
-  if( !naIsString(args[0]) )
-    naRuntimeError(c, "clipboard.setText() invalid arg (arg 0 not a string)");
+  if( ctx.argc < 1 || ctx.argc > 2 )
+    naRuntimeError( ctx.c, "clipboard.setText() expects 1 or 2 arguments: "
+                           "text, [, type = clipboard.CLIPBOARD]" );
 
   return
     naNum
     (
-      NasalClipboard::getInstance()->setText( naStr_data(args[0]),
-                                              parseType(c, argc, args, 1) )
+      NasalClipboard::getInstance()->setText( ctx.requireArg<std::string>(0),
+                                              parseType(ctx, 1) )
     );
 }
 
 //------------------------------------------------------------------------------
-static naRef f_getClipboardText(naContext c, naRef me, int argc, naRef* args)
+static naRef f_getClipboardText(const nasal::CallContext& ctx)
 {
-  if( argc > 1 )
-    naRuntimeError(c, "clipboard.getText() accepts max 1 arg: "
-                      "[type = \"CLIPBOARD\"]" );
-
-  const std::string& text =
-    NasalClipboard::getInstance()->getText(parseType(c, argc, args, 0));
-
-  // TODO create some nasal helper functions (eg. stringToNasal)
-  //      some functions are available spread over different files (eg.
-  //      NasalPositioned.cxx)
-  return naStr_fromdata(naNewString(c), text.c_str(), text.length());
+  if( ctx.argc > 1 )
+    naRuntimeError(ctx.c, "clipboard.getText() accepts max 1 arg: "
+                          "[type = clipboard.CLIPBOARD]");
+
+  return ctx.to_nasal
+  (
+    NasalClipboard::getInstance()->getText(parseType(ctx, 0))
+  );
 }
 
-//------------------------------------------------------------------------------
-// Table of extension functions, terminate with 0,0
-static struct {const char* name; naCFunction func; } funcs[] = {
-  { "setText", f_setClipboardText },
-  { "getText", f_getClipboardText },
-  { 0,0 } // TERMINATION
-};
-
 //------------------------------------------------------------------------------
 NasalClipboard::Ptr NasalClipboard::_clipboard;
-naRef NasalClipboard::_clipboard_hash;
 
 //------------------------------------------------------------------------------
 NasalClipboard::~NasalClipboard()
@@ -107,21 +95,13 @@ NasalClipboard::~NasalClipboard()
 void NasalClipboard::init(FGNasalSys *nasal)
 {
   _clipboard = create();
-  _clipboard_hash = naNewHash(nasal->context());
-
-  nasal->globalsSet("clipboard", _clipboard_hash);
 
-  for(size_t i=0;funcs[i].name;i++)
-  {
-    nasal->hashset
-    (
-      _clipboard_hash,
-      funcs[i].name,
-      naNewFunc(nasal->context(), naNewCCode(nasal->context(), funcs[i].func))
-    );
+  nasal::Hash clipboard = nasal->getGlobals().createHash("clipboard");
 
-    SG_LOG(SG_NASAL, SG_DEBUG, "Adding clipboard function: " << funcs[i].name );
-  }
+  clipboard.set("setText", f_setClipboardText);
+  clipboard.set("getText", f_getClipboardText);
+  clipboard.set("CLIPBOARD", NasalClipboard::CLIPBOARD);
+  clipboard.set("SELECTION", NasalClipboard::PRIMARY);
 }
 
 //------------------------------------------------------------------------------