diff options
author | Renato Filho <renato.filho@openbossa.org> | 2011-10-03 18:48:23 -0300 |
---|---|---|
committer | Hugo Parente Lima <hugo.pl@gmail.com> | 2012-03-08 16:54:53 -0300 |
commit | a2cb6fe0254a122f0ad9d2ee991d9a249903ee12 (patch) | |
tree | a5cd213850cb434668d2580d081d45e3d533625f /libpyside | |
parent | 2e69baa4f5e211d171d243a538f7c587e31b4efa (diff) |
Created pyside QFlags compat class.
Diffstat (limited to 'libpyside')
-rw-r--r-- | libpyside/pysideqflags.cpp | 105 | ||||
-rw-r--r-- | libpyside/pysideqflags.h | 52 |
2 files changed, 157 insertions, 0 deletions
diff --git a/libpyside/pysideqflags.cpp b/libpyside/pysideqflags.cpp new file mode 100644 index 000000000..2794520f6 --- /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 000000000..4f30c0316 --- /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 + |