You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
koffice/lib/kross/python/pythonextension.h

222 lines
7.7 KiB

/***************************************************************************
* pythonextension.h
* This file is part of the KDE project
* copyright (C)2004-2005 by Sebastian Sauer (mail@dipe.org)
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
* This program 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
* Library General Public License for more details.
* You should have received a copy of the GNU Library General Public License
* along with this program; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
***************************************************************************/
#ifndef KROSS_PYTHON_EXTENSION_H
#define KROSS_PYTHON_EXTENSION_H
#include "pythonconfig.h"
#include "../api/object.h"
#include "../api/list.h"
#include "../api/dict.h"
#include "../api/class.h"
#include <tqstring.h>
#include <tqstringlist.h>
#include <tqvaluelist.h>
#include <tqvaluevector.h>
#include <tqmap.h>
#include <tqvariant.h>
namespace Kross { namespace Python {
// Forward declaration.
class PythonScript;
/**
* The PythonExtension is a wrapper-object to let C++ and
* Python interact together.
* Instances of this class are used everytime if we send
* or got something to/from python.
*/
class PythonExtension : public Py::PythonExtension<PythonExtension>
{
friend class PythonScript;
friend class PythonObject;
friend class PythonModule;
public:
/**
* Constructor.
*
* \param object The \a Kross::Api::Object object
* this instance is the wrapper for.
*/
explicit PythonExtension(Kross::Api::Object::Ptr object);
/**
* Destructor.
*/
virtual ~PythonExtension();
#if 0
/**
* Overloaded method to return the string-representation
* of this object.
*
* \return The string representation.
*/
virtual Py::Object str();
/**
* Overloaded method to return the string-representation
* of the value this object has.
*
* \return A string representation of the value.
*/
virtual Py::Object repr();
#endif
/**
* Overloaded method to handle attribute calls
* from within python.
*
* \param name The name of the attribute that
* should be handled.
* \return An \a Py::Object that could be
* a value or a callable object. Python
* will decide what to do with the
* returnvalue.
*/
virtual Py::Object getattr(const char* name);
//virtual Py::Object getattr_methods(const char* name);
//virtual int setattr(const char* name, const Py::Object& value);
private:
/**
* Converts a \a Py::Tuple into a \a Kross::Api::List .
*
* \param tuple The Py::Tuple to convert.
* \return The to a Kross::Api::List converted Py::Tuple .
*/
static Kross::Api::List::Ptr toObject(const Py::Tuple& tuple);
/**
* Converts a \a Py::List into a \a Kross::Api::List .
*
* \param list The Py::List to convert.
* \return The to a Kross::Api::List converted Py::List .
*/
static Kross::Api::List::Ptr toObject(const Py::List& list);
/**
* Converts a \a Py::Dict into a \a Kross::Api::Dict .
*
* \param dict The Py::Dict to convert.
* \return The to a Kross::Api::Dict converted Py::Dict .
*/
static Kross::Api::Dict::Ptr toObject(const Py::Dict& dict);
/**
* Converts a \a Py::Object into a \a Kross::Api::Object.
*
* \param object The Py::Object to convert.
* \return The to a Kross::Api::Object converted Py::Object.
*/
static Kross::Api::Object::Ptr toObject(const Py::Object& object);
/**
* Converts a TQString to a Py::Object. If
* the TQString isNull() then Py::None() will
* be returned.
*
* \param s The TQString to convert.
* \return The to a Py::String converted TQString.
*/
static const Py::Object toPyObject(const TQString& s);
/**
* Converts a TQStringList to a Py::List.
*
* \param list The TQStringList to convert.
* \return The to a Py::List converted TQStringList.
*/
static const Py::List toPyObject(const TQStringList& list);
/**
* Converts a TQMap to a Py::Dict.
*
* \param map The TQMap to convert.
* \return The to a Py::Dict converted TQMap.
*/
static const Py::Dict toPyObject(const TQStringVariantMap& map);
/**
* Converts a TQValueList to a Py::List.
*
* \param list The TQValueList to convert.
* \return The to a Py::List converted TQValueList.
*/
static const Py::List toPyObject(const TQValueList<TQVariant>& list);
/**
* Converts a TQVariant to a Py::Object.
*
* \param variant The TQVariant to convert.
* \return The to a Py::Object converted TQVariant.
*/
static const Py::Object toPyObject(const TQVariant& variant);
/**
* Converts a \a Kross::Api::Object to a Py::Object.
*
* \param object The Kross::Api::Object to convert.
* \return The to a Py::Object converted Kross::Api::Object.
*/
static const Py::Object toPyObject(Kross::Api::Object::Ptr object);
/**
* Converts a \a Kross::Api::List into a Py::Tuple.
*
* \param list The Kross::Api::List to convert.
* \return The to a Py::Tuple converted Kross::Api::List.
*/
static const Py::Tuple toPyTuple(Kross::Api::List::Ptr list);
/// The \a Kross::Api::Object this PythonExtension wraps.
Kross::Api::Object::Ptr m_object;
/**
* The proxymethod which will handle all calls to our
* \a PythonExtension instance.
*/
Py::MethodDefExt<PythonExtension>* m_proxymethod;
/**
* The static proxy-handler which will be used to dispatch
* a call to our \a PythonExtension instance and redirect
* the call to the matching method.
*
* \param _self_and_name_tuple A tuple containing as first
* argument a reference to our \a PythonExtension
* instance.
* \param _args The optional passed arguments for the method
* which should be called.
* \return The returnvalue of the methodcall.
*/
static PyObject* proxyhandler(PyObject* _self_and_name_tuple, PyObject* _args);
};
}}
#endif