QLua
Lua-Qt bindings
LuaCallbackDispatcher.h
Go to the documentation of this file.
00001 #pragma once
00002 // QLua - Copyright (c) 2012, Ugo Varetto
00003 // All rights reserved.
00004 //
00005 // Redistribution and use in source and binary forms, with or without
00006 // modification, are permitted provided that the following conditions are met:
00007 //     * Redistributions of source code must retain the above copyright
00008 //       notice, this list of conditions and the following disclaimer.
00009 //     * Redistributions in binary form must reproduce the above copyright
00010 //       notice, this list of conditions and the following disclaimer in the
00011 //       documentation and/or other materials provided with the distribution.
00012 //     * Neither the name of the <organization> nor the
00013 //       names of its contributors may be used to endorse or promote products
00014 //       derived from this software without specific prior written permission.
00015 //
00016 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
00017 // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
00018 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
00019 // DISCLAIMED. IN NO EVENT SHALL UGO VARETTO BE LIABLE FOR ANY
00020 // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
00021 // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00022 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
00023 // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00024 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00025 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00026 
00029 
00030 #include <QMap>
00031 #include <QList>
00032 
00033 #include "LuaArguments.h"
00034 
00035 
00036 namespace qlua {
00037 
00038 class LuaContext;
00039 
00040 typedef QList< LArgWrapper > CBackParameterTypes;
00041 
00042 //------------------------------------------------------------------------------
00049 class LuaCBackMethod {
00050 public:
00058     LuaCBackMethod( LuaContext* lc, const CBackParameterTypes& p, int luaCBackRef ) 
00059         : lc_( lc ), paramTypes_( p ), luaCBackRef_( luaCBackRef ) {}
00069     void Invoke( void **arguments );
00071     int CBackRef() const{ return luaCBackRef_; } 
00072 private:
00074     LuaContext* lc_;
00076     CBackParameterTypes paramTypes_;
00078     int luaCBackRef_;
00079 };
00080 
00081 
00082 typedef int LuaCBackRef;
00083 typedef int MethodId;
00084 
00085 //------------------------------------------------------------------------------
00099 class LuaCallbackDispatcher : public QObject {
00100 public:
00102     LuaCallbackDispatcher( QObject* parent = 0 ) : QObject( parent ), lc_( 0 ) {}
00104     LuaCallbackDispatcher( LuaContext* lc ) : lc_( lc ) {}
00107     int qt_metacall( QMetaObject::Call c, int id, void **arguments ); 
00113     bool Connect( QObject *obj, 
00114                   int signalIdx,
00115                   const CBackParameterTypes& paramTypes,
00116                   int luaCBackRef );
00121     bool Disconnect( QObject *obj, 
00122                      int signalIdx,
00123                      int cbackStackIndex );
00125     void SetLuaContext( LuaContext* lc ) { lc_ = lc; };
00127     virtual ~LuaCallbackDispatcher() {
00128         for( QList< LuaCBackMethod* >::iterator i = luaCBackMethods_.begin();
00129              i != luaCBackMethods_.end(); ++i ) {
00130             delete *i;
00131         }
00132     }
00133 private:
00135     LuaContext* lc_;
00137     QList< LuaCBackMethod* > luaCBackMethods_;
00139     QMap< LuaCBackRef, MethodId > cbackToMethodIndex_;
00140    
00141 };
00142 }
 All Classes Namespaces Files Functions Variables Enumerations Enumerator