RPCWrappers.hh 6.01 KB
Newer Older
Jan Möbius's avatar
Jan Möbius committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165
//=============================================================================
//
//                               OpenFlipper
//        Copyright (C) 2008 by Computer Graphics Group, RWTH Aachen
//                           www.openflipper.org
//
//-----------------------------------------------------------------------------
//
//                                License
//
//  OpenFlipper 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 3 of the License, or
//  (at your option) any later version.
//
//  OpenFlipper 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 OpenFlipper.  If not, see <http://www.gnu.org/licenses/>.
//
//-----------------------------------------------------------------------------
//
//   $Revision: 4737 $
//   $Author: kremer $
//   $Date: 2009-02-10 11:46:02 +0100 (Di, 10. Feb 2009) $
//
//=============================================================================

//
// C++ Interface: RPCInterface
//
// Description:
//
//
// Author: Jan Moebius <jan_moebius@web.de>, (C) 2007
//

/**
 * \file RPCWrappers.hh
 * This file contains functions to call functions and procedures across plugins.
 * The Qt Scripting system is used to pass the calls between different plugins.
 */

#ifndef RPCWRAPPERS_HH
#define RPCWRAPPERS_HH

#include <QtScript>
#include <vector>

/** Namespace containing RPC helper functions used to call functions across plugins
 */

/**
 * Example code :
 * QString version = RPC::callFunctionValue< QString >("backup","version");
 * int count       = RPC::callFunctionValue< int >("info","vertexCount",2);
 *
 */
namespace RPC {

/** \brief get a pointer to the scripting engine
 *
 */
QScriptEngine* getScriptEngine();

/** \brief call a function provided by a plugin
 *
 * @param _plugin Plugin name ( Scripting name )
 * @param _functionName Name of the remote function
 */
QScriptValue callFunction( QString _plugin, QString _functionName );

/** \brief call a function provided by a plugin getting multiple parameters
 *
 * @param _plugin Plugin name ( Scripting name )
 * @param _functionName Name of the remote function
 * @param _parameters vector of scriptvalues containing the functions parameters in the right order
 */
QScriptValue callFunction( QString _plugin, QString _functionName , std::vector< QScriptValue > _parameters );


template <typename T0>
void callFunction( QString _plugin, QString _functionName, T0 _t0) {
  QScriptEngine* engine = getScriptEngine();
  std::vector< QScriptValue > parameters;
  parameters.push_back( QScriptValue( engine,_t0 ) );
  callFunction(_plugin,_functionName,parameters);
}

template <typename T0, typename T1>
void callFunction( QString _plugin, QString _functionName, T0 _t0 , T1 _t1) {
  QScriptEngine* engine = getScriptEngine();
  std::vector< QScriptValue > parameters;
  parameters.push_back( QScriptValue( engine,_t0 ) );
  parameters.push_back( QScriptValue( engine,_t1 ) );
  callFunction(_plugin,_functionName,parameters);
}

template <typename T0, typename T1 , typename T2>
void callFunction( QString _plugin, QString _functionName, T0 _t0 , T1 _t1 , T2 _t2 ) {
  QScriptEngine* engine = getScriptEngine();
  std::vector< QScriptValue > parameters;
  parameters.push_back( QScriptValue( engine,_t0 ) );
  parameters.push_back( QScriptValue( engine,_t1 ) );
  parameters.push_back( QScriptValue( engine,_t2 ) );
  callFunction(_plugin,_functionName,parameters);
}

template <typename T0, typename T1 , typename T2,  typename T3>
void callFunction( QString _plugin, QString _functionName, T0 _t0 , T1 _t1 , T2 _t2 , T3 _t3 ) {
  QScriptEngine* engine = getScriptEngine();
  std::vector< QScriptValue > parameters;
  parameters.push_back( QScriptValue( engine,_t0 ) );
  parameters.push_back( QScriptValue( engine,_t1 ) );
  parameters.push_back( QScriptValue( engine,_t2 ) );
  parameters.push_back( QScriptValue( engine,_t3 ) );
  callFunction(_plugin,_functionName,parameters);
}

template <typename ReturnValue >
ReturnValue callFunctionValue( QString _plugin, QString _functionName) {
  return qscriptvalue_cast< ReturnValue >( callFunction(_plugin,_functionName) );
}

template <typename ReturnValue , typename T0>
ReturnValue callFunctionValue( QString _plugin, QString _functionName, T0 _t0) {
  QScriptEngine* engine = getScriptEngine();
  std::vector< QScriptValue > parameters;
  parameters.push_back( QScriptValue( engine,_t0 ) );
  return qscriptvalue_cast<ReturnValue>( callFunction(_plugin,_functionName,parameters) );
}

template <typename ReturnValue , typename T0, typename T1>
ReturnValue callFunctionValue( QString _plugin, QString _functionName, T0 _t0 , T1 _t1) {
  QScriptEngine* engine = getScriptEngine();
  std::vector< QScriptValue > parameters;
  parameters.push_back( QScriptValue( engine,_t0 ) );
  parameters.push_back( QScriptValue( engine,_t1 ) );
  return qscriptvalue_cast<ReturnValue>( callFunction(_plugin,_functionName,parameters) );
}

template <typename ReturnValue , typename T0, typename T1 , typename T2, typename T3>
ReturnValue callFunctionValue( QString _plugin, QString _functionName, T0 _t0 , T1 _t1 , T2 _t2 , T3 _t3 ) {
  QScriptEngine* engine = getScriptEngine();
  std::vector< QScriptValue > parameters;
  parameters.push_back( QScriptValue( engine,_t0 ) );
  parameters.push_back( QScriptValue( engine,_t1 ) );
  parameters.push_back( QScriptValue( engine,_t2 ) );
  parameters.push_back( QScriptValue( engine,_t3 ) );
  return qscriptvalue_cast<ReturnValue>( callFunction(_plugin,_functionName,parameters) );
}


/** \brief DONT USE! (Function to set the internal reference to the script Engine)
 *
 * Function to set the internal reference to the script engine from the core
 */
void setScriptEngine( QScriptEngine* _engine );

}

#endif // RPCWRAPPERS_HH