diff options
-rw-r--r-- | CMakeLists.txt | 2 | ||||
-rw-r--r-- | libpyside/pysideqflags.cpp | 105 | ||||
-rw-r--r-- | libpyside/pysideqflags.h | 52 |
3 files changed, 158 insertions, 1 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index ec62692..3d57157 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -142,7 +142,7 @@ add_custom_target(dist if (NOT SITE_PACKAGE) execute_process( COMMAND ${SHIBOKEN_PYTHON_INTERPRETER} -c "from distutils import sysconfig; \\ - print sysconfig.get_python_lib(1,0,prefix='${CMAKE_INSTALL_PREFIX}')" + print(sysconfig.get_python_lib(1,0,prefix='${CMAKE_INSTALL_PREFIX}'))" OUTPUT_VARIABLE SITE_PACKAGE OUTPUT_STRIP_TRAILING_WHITESPACE) if (NOT SITE_PACKAGE) diff --git a/libpyside/pysideqflags.cpp b/libpyside/pysideqflags.cpp new file mode 100644 index 0000000..2794520 --- /dev/null +++ b/libpyside/pysideqflags.cpp @@ -0,0 +1,105 @@ +/* +* This file is part of the PySide project. +* +* Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +* +* Contact: PySide team <contact@pyside.org> +* +* This library 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 2.1 of the License, or (at your option) any later version. +* +* This library 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 this library; if not, write to the Free Software +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include "pysideqflags.h" + +extern "C" { + #define PYSIDE_QFLAGS(X) reinterpret_cast<PySideQFlagsObject*>(X) + + PyObject* PySideQFlagsNew(PyTypeObject *type, PyObject *args, PyObject *kwds) + { + PySideQFlagsObject* self = PyObject_New(PySideQFlagsObject, type); + self->ob_value = 0; + return reinterpret_cast<PyObject*>(self); + } + + static long getNumberValue(PyObject* v) + { + PyObject* number = PyNumber_Long(v); + long result = PyLong_AsLong(number); + Py_XDECREF(number); + return result; + } + + PyObject* PySideQFlagsRichCompare(PyObject *self, PyObject *other, int op) + { + int result = 0; + if (!PyNumber_Check(other)) { + PyErr_BadArgument(); + return NULL; + } + + long valA = PYSIDE_QFLAGS(self)->ob_value; + long valB = getNumberValue(other); + + if (self == other) { + result = 1; + } else { + switch (op) { + case Py_EQ: + result = (valA == valB); + break; + case Py_NE: + result = (valA != valB); + break; + case Py_LE: + result = (valA <= valB); + break; + case Py_GE: + result = (valA >= valB); + break; + case Py_LT: + result = (valA < valB); + break; + case Py_GT: + result = (valA > valB); + break; + default: + PyErr_BadArgument(); + return NULL; + } + } + if (result) + Py_RETURN_TRUE; + else + Py_RETURN_FALSE; + } +} + +namespace PySide +{ +namespace QFlags +{ + PySideQFlagsObject* newObject(long value, PyTypeObject* type) + { + PySideQFlagsObject* qflags = PyObject_New(PySideQFlagsObject, type); + qflags->ob_value = value; + return qflags; + } + + long getValue(PySideQFlagsObject* self) + { + return self->ob_value; + } +} +} + diff --git a/libpyside/pysideqflags.h b/libpyside/pysideqflags.h new file mode 100644 index 0000000..4f30c03 --- /dev/null +++ b/libpyside/pysideqflags.h @@ -0,0 +1,52 @@ +/* + * This file is part of the PySide project. + * + * Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). + * + * Contact: PySide team <contact@pyside.org> + * + * This library 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 2.1 of the License, or (at your option) any later version. + * + * This library 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 this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef PYSIDE_QFLAGS_H +#define PYSIDE_QFLAGS_H + +#include <Python.h> +#include <pysidemacros.h> + + +extern "C" +{ + struct PYSIDE_API PySideQFlagsObject { + PyObject_HEAD + long ob_value; + }; + + PYSIDE_API PyObject* PySideQFlagsNew(PyTypeObject *type, PyObject *args, PyObject *kwds); + PYSIDE_API PyObject* PySideQFlagsRichCompare(PyObject *self, PyObject *other, int op); +} + + +namespace PySide +{ +namespace QFlags +{ + PYSIDE_API PySideQFlagsObject* newObject(long value, PyTypeObject* type); + PYSIDE_API long getValue(PySideQFlagsObject* self); +} +} + +#endif + |