QPy
Python-Qt dynamic bindings
|
00001 #pragma once 00002 // QPy - Copyright (c) 2012,2013 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 author and copyright holder nor the 00013 // names of contributors to the project 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 00033 #include <Python.h> 00034 #include "../PyQArgConstructor.h" 00035 #include "../PyArgConstructor.h" 00036 00037 namespace qpy { 00048 class QArgWrapper { 00049 public: 00051 QArgWrapper( QArgConstructor* ac = 0 ) : ac_( ac ) { 00052 00053 } 00055 QArgWrapper( const QArgWrapper& other ) : ac_( 0 ) { 00056 if( other.ac_ ) ac_ = other.ac_->Clone(); 00057 } 00062 QGenericArgument Arg( PyObject* pobj ) const { 00063 return ac_ ? ac_->Create( pobj ) : QGenericArgument(); 00064 } 00066 ~QArgWrapper() { delete ac_; } 00067 private: 00070 QArgConstructor* ac_; 00071 }; 00072 00073 00081 class PyArgWrapper { 00082 public: 00084 PyArgWrapper( PyArgConstructor* pac = 0 ) : ac_( pac ) {} 00086 PyArgWrapper( const PyArgWrapper& other ) : ac_( 0 ) { 00087 if( other.ac_ ) ac_ = other.ac_->Clone(); 00088 } 00092 PyObject* Create() const { 00093 return ac_->Create(); 00094 } 00099 PyObject* Create( void* p ) const { 00100 return ac_->Create( p ); 00101 } 00103 QGenericReturnArgument Arg() const { return ac_->Argument(); } 00105 QString Type() const { 00106 if( ac_ != 0 ) return QMetaType::typeName( ac_->Type() ); 00107 else return QString(); 00108 } 00110 QMetaType::Type MetaType() const { return ac_->Type(); } 00116 bool IsQObjectPtr() const { return ac_->IsQObjectPtr(); } 00118 ~PyArgWrapper() { delete ac_; } 00119 private: 00121 PyArgConstructor* ac_; 00122 }; 00123 }