summaryrefslogtreecommitdiffstats
path: root/PySide/QtScript/typesystem_script.xml
blob: f208ac25827a78dfe9998110a3b0dc35a5743bf7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
<?xml version="1.0"?>
<!--
    This file is part of PySide project.
    Copyright (C) 2009-2010 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
-->
<typesystem package="PySide.QtScript">
    <load-typesystem name="typesystem_core.xml" generate="no" />

    <object-type name="QScriptable"/>
    <object-type name="QScriptClass">
        <enum-type name="Extension"/>
        <enum-type name="QueryFlag"/>
    </object-type>
    <object-type name="QScriptClassPropertyIterator"/>
    <object-type name="QScriptContext">
        <enum-type name="Error"/>
        <enum-type name="ExecutionState"/>
    </object-type>
    <value-type name="QScriptContextInfo">
        <enum-type name="FunctionType"/>
    </value-type>
    <object-type name="QScriptEngineAgent">
        <enum-type name="Extension"/>
    </object-type>
    <object-type name="QScriptEngine">
        <enum-type name="QObjectWrapOption" flags="QObjectWrapOptions"/>
        <enum-type name="ValueOwnership"/>
    </object-type>
    <object-type name="QScriptExtensionInterface"/>
    <object-type name="QScriptExtensionPlugin"/>
    <value-type name="QScriptProgram" since="4.7"/>
    <value-type name="QScriptString">
        <modify-function signature="toArrayIndex(bool*)const">
            <modify-argument index="1">
                <remove-argument/>
            </modify-argument>
            <inject-code class="target" position="beginning">
                <insert-template name="fix_bool*"/>
            </inject-code>
        </modify-function>
    </value-type>
    <value-type name="QScriptValue">
        <enum-type name="PropertyFlag" flags="PropertyFlags"/>
        <enum-type name="ResolveFlag" flags="ResolveFlags"/>
        <enum-type name="SpecialValue"/>
        <add-function signature="__repr__" return-type="PyObject*">
            <inject-code class="target" position="beginning">
                if (%CPPSELF.isVariant() || %CPPSELF.isString()) {
                    QString format = QString().sprintf("%s(\"%s\")", ((PyObject*)%PYSELF)->ob_type->tp_name, qPrintable(%CPPSELF.toString()));
                    %PYARG_0 = Shiboken::String::fromCString(qPrintable(format));
                 } else {
                    %PYARG_0 = PyObject_Str((PyObject*)%PYSELF);
                }
            </inject-code>
        </add-function>
        <add-function signature="__mgetitem__">
            <inject-code>
                Shiboken::AutoDecRef key(PyObject_Str(_key));
                QVariant res = %CPPSELF.property(Shiboken::String::toCString(key.object())).toVariant();
                if (res.isValid()) {
                    return %CONVERTTOPYTHON[QVariant](res);
                } else {
                    PyObject* errorType = PyInt_Check(_key) ? PyExc_IndexError : PyExc_KeyError;
                    PyErr_SetString(errorType, "Key not found.");
                    return 0;
                }
            </inject-code>
        </add-function>
        <add-function signature="__iter__()" return-type="PyObject*">
            <inject-code>
                %PYARG_0 = Shiboken::createWrapper(new QScriptValueIterator(*%CPPSELF), true, true);
            </inject-code>
        </add-function>
    </value-type>
    <object-type name="QScriptValueIterator">
        <add-function signature="__iter__()" return-type="PyObject*">
            <inject-code>
                <insert-template name="__iter__" />
            </inject-code>
        </add-function>
        <add-function signature="__next__()" return-type="PyObject*">
            <inject-code>
                if (%CPPSELF.hasNext()) {
                    %CPPSELF.next();
                    %PYARG_0 = Shiboken::makeTuple(%CPPSELF.name(), %CPPSELF.value().toVariant());
                } else {
                    PyErr_SetNone(PyExc_StopIteration);
                }
            </inject-code>
        </add-function>
    </object-type>
</typesystem>