summaryrefslogtreecommitdiffstats
path: root/python/pyqt/sip/qt/qapplication.sip
diff options
context:
space:
mode:
Diffstat (limited to 'python/pyqt/sip/qt/qapplication.sip')
-rw-r--r--python/pyqt/sip/qt/qapplication.sip574
1 files changed, 574 insertions, 0 deletions
diff --git a/python/pyqt/sip/qt/qapplication.sip b/python/pyqt/sip/qt/qapplication.sip
new file mode 100644
index 00000000..fbdf9e5e
--- /dev/null
+++ b/python/pyqt/sip/qt/qapplication.sip
@@ -0,0 +1,574 @@
+// This is the SIP interface definition for QApplication.
+//
+// Copyright (c) 2007
+// Riverbank Computing Limited <info@riverbankcomputing.co.uk>
+//
+// This file is part of PyQt.
+//
+// This copy of PyQt is free software; you can redistribute it and/or modify it
+// under the terms of the GNU General Public License as published by the Free
+// Software Foundation; either version 2, or (at your option) any later
+// version.
+//
+// PyQt is supplied 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 General Public License for more
+// details.
+//
+// You should have received a copy of the GNU General Public License along with
+// PyQt; see the file LICENSE. If not, write to the Free Software Foundation,
+// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+
+%ExportedDoc
+<Sect2><Title>QApplication</Title>
+<FuncSynopsis>
+ <FuncDef><Function>QApplication</Function></FuncDef>
+ <ParamDef>int &amp;<Parameter>argc</Parameter></ParamDef>
+ <ParamDef>char **<Parameter>argv</Parameter></ParamDef>
+</FuncSynopsis>
+<Para>
+This takes one parameter which is a list of argument strings. Arguments
+used by Qt are removed from the list.
+</Para>
+
+<FuncSynopsis>
+ <FuncDef><Function>QApplication</Function></FuncDef>
+ <ParamDef>int &amp;<Parameter>argc</Parameter></ParamDef>
+ <ParamDef>char **<Parameter>argv</Parameter></ParamDef>
+ <ParamDef>bool <Parameter>GUIenabled</Parameter></ParamDef>
+</FuncSynopsis>
+<Para>
+This takes two parameters, the first of which is a list of argument strings.
+Arguments used by Qt are removed from the list.
+</Para>
+
+<FuncSynopsis>
+ <FuncDef><Function>QApplication</Function></FuncDef>
+ <ParamDef>int &amp;<Parameter>argc</Parameter></ParamDef>
+ <ParamDef>char **<Parameter>argv</Parameter></ParamDef>
+ <ParamDef>Type <Parameter>type</Parameter></ParamDef>
+</FuncSynopsis>
+<Para>
+This takes two parameters, the first of which is a list of argument strings.
+Arguments used by Qt are removed from the list. (Qt v2.2+)
+</Para>
+
+<FuncSynopsis>
+ <FuncDef>int <Function>exec</Function></FuncDef>
+ <ParamDef></ParamDef>
+</FuncSynopsis>
+<Para>
+This has been renamed to <Literal>exec_loop</Literal> in Python.
+</Para>
+</Sect2>
+%End
+
+
+QApplication *qApp;
+
+
+class QApplication : QObject
+{
+%TypeHeaderCode
+#include <qapplication.h>
+#include <qwidgetlist.h>
+%End
+
+public:
+ QApplication(SIP_PYLIST) /PostHook=__pyQtQAppHook__/ [(int &,char **)];
+%MethodCode
+ // The Python interface is a list of argument strings that is
+ // modified.
+
+ int argc;
+ char **argv;
+
+ // Convert the list.
+ if ((argv = pyArgvToC(a0,argc)) == NULL)
+ sipIsErr = 1;
+ else
+ {
+ // Create it now the arguments are right.
+ static int nargc;
+ nargc = argc;
+
+ Py_BEGIN_ALLOW_THREADS
+ sipCpp = new sipQApplication(nargc,argv);
+ Py_END_ALLOW_THREADS
+
+ // Now modify the original list.
+ updatePyArgv(a0,argc,argv);
+ }
+%End
+
+ QApplication(SIP_PYLIST,bool) /PostHook=__pyQtQAppHook__/ [(int &,char **,bool)];
+%MethodCode
+ // The Python interface is a list of argument strings that is
+ // modified.
+
+ int argc;
+ char **argv;
+
+ // Convert the list.
+ if ((argv = pyArgvToC(a0,argc)) == NULL)
+ sipIsErr = 1;
+ else
+ {
+ // Create it now the arguments are right.
+ static int nargc;
+ nargc = argc;
+
+ Py_BEGIN_ALLOW_THREADS
+ sipCpp = new sipQApplication(nargc,argv,a1);
+ Py_END_ALLOW_THREADS
+
+ // Now modify the original list.
+ updatePyArgv(a0,argc,argv);
+ }
+%End
+
+%If (Qt_2_2_0 -)
+ enum Type {
+ Tty,
+ GuiClient,
+ GuiServer
+ };
+
+ QApplication(SIP_PYLIST,Type) /PostHook=__pyQtQAppHook__/ [(int &,char **,Type)];
+%MethodCode
+ // The Python interface is a list of argument strings that is
+ // modified.
+
+ int argc;
+ char **argv;
+
+ // Convert the list.
+ if ((argv = pyArgvToC(a0,argc)) == NULL)
+ sipIsErr = 1;
+ else
+ {
+ // Create it now the arguments are right.
+ static int nargc;
+ nargc = argc;
+
+ Py_BEGIN_ALLOW_THREADS
+ sipCpp = new sipQApplication(nargc,argv,(QApplication::Type)a1);
+ Py_END_ALLOW_THREADS
+
+ // Now modify the original list.
+ updatePyArgv(a0,argc,argv);
+ }
+%End
+%End
+
+ ~QApplication();
+%MethodCode
+ // Make sure all remaining top level widgets are not owned by
+ // Python. When a PyQt script terminates we have no control
+ // over the order in which the QApplication instance and the
+ // top level widgets are destroyed. If the former happens
+ // first then we get a seg. fault. We could take the approach
+ // of only pretending to delete the QApplication instance, but
+ // Qt seems to allow an application to delete the QApplication
+ // instance and then create another one. The approach we take
+ // is to transfer ownership of all top level widgets away from
+ // Python so that the C++ dtor is not called if they are
+ // destroyed after the QApplication instance. This might be
+ // seen as a memory leak - but if we really are terminating
+ // then it doesn't matter, and if we are just deleting the
+ // QApplication instance then (I think) we should have already
+ // deleted the top level widgets manually. In any event, the X
+ // server resources will be freed.
+
+ QWidgetList *tlw = QApplication::topLevelWidgets();
+ QWidgetListIt it(*tlw);
+ QWidget *w;
+
+ while ((w = it.current()) != 0)
+ {
+ PyObject *sw;
+
+ if ((sw = sipGetWrapper(w,sipClass_QWidget)) != NULL)
+ sipTransferTo(sw,NULL);
+
+ ++it;
+ }
+
+ delete tlw;
+%End
+
+ int argc() const;
+ SIP_PYLIST argv() const;
+%MethodCode
+ // The Python interface returns a list of strings.
+
+ int argc = sipCpp -> argc();
+
+ if ((sipRes = PyList_New(argc)) == NULL)
+ sipIsErr = 1;
+ else
+ for (int a = 0; a < argc; ++a)
+ if (PyList_SetItem(sipRes,a,PyString_FromString(sipCpp -> argv()[a])) < 0)
+ {
+ Py_DECREF(sipRes);
+ sipIsErr = 1;
+ break;
+ }
+%End
+
+%If (Qt_2_3_0 -)
+ Type type() const;
+%End
+%If (- Qt_2_00)
+ static GUIStyle style();
+ static void setStyle(GUIStyle);
+%End
+%If (Qt_2_00 -)
+ static QStyle &style();
+ static void setStyle(QStyle * /Transfer/);
+%End
+%If (Qt_3_0_0 -)
+ static QStyle *setStyle(const QString &);
+%End
+
+%If (- Qt_2_00)
+ enum ColorSpec
+ {
+ NormalColor = 0,
+ CustomColor = 1,
+ PrivateColor = 4,
+ ManyColor = 4,
+ TrueColor = 4
+ };
+%End
+%If (Qt_2_00 -)
+ enum ColorSpec
+ {
+ NormalColor = 0,
+ CustomColor = 1,
+ ManyColor = 2
+ };
+%End
+
+ static int colorSpec();
+ static void setColorSpec(int);
+ static QCursor *overrideCursor();
+ static void setOverrideCursor(QCursor &,bool = 0);
+ static void restoreOverrideCursor();
+ static bool hasGlobalMouseTracking();
+ static void setGlobalMouseTracking(bool);
+%If (- Qt_2_00)
+ static QPalette *palette();
+ static void setPalette(QPalette &,bool = 0);
+ static QFont *font();
+ static void setFont(const QFont &,bool = 0);
+%End
+%If (Qt_2_00 -)
+ static QPalette palette(const QWidget * = 0);
+ static void setPalette(QPalette &,bool = 0,const char * = 0);
+ static QFont font(const QWidget * = 0);
+ static void setFont(const QFont &,bool = 0,const char * = 0);
+%End
+ static QFontMetrics fontMetrics();
+ QWidget *mainWidget() const;
+%If (- Qt_2_00)
+ // We may not need the /Transfer/ now that the QApplication dtor is
+ // instrumented, but we'll leave it in so as not to break old programs
+ // needlessly.
+ void setMainWidget(QWidget * /Transfer/);
+%End
+%If (Qt_2_00 -)
+ virtual void setMainWidget(QWidget *);
+ virtual void polish(QWidget *);
+%End
+ static QWidgetList *allWidgets();
+ static QWidgetList *topLevelWidgets();
+%If (- Qt_3_0_0)
+ static QWidget *desktop();
+%End
+%If (Qt_3_0_0 -)
+ static QDesktopWidget *desktop();
+%End
+ static QWidget *activePopupWidget();
+ static QWidget *activeModalWidget();
+ static QClipboard *clipboard();
+ QWidget *focusWidget() const;
+%If (Qt_2_00 -)
+ QWidget *activeWindow() const;
+%End
+ static QWidget *widgetAt(int,int,bool = 0);
+ static QWidget *widgetAt(const QPoint &,bool = 0);
+
+%If (Qt_3_1_0 -)
+ static QEventLoop *eventLoop();
+%End
+
+ int exec() /PyName=exec_loop, ReleaseGIL,
+ PreHook=__pyQtPreEventLoopHook__,
+ PostHook=__pyQtPostEventLoopHook__/;
+ void processEvents() /ReleaseGIL/;
+ void processEvents(int) /ReleaseGIL/;
+ void processOneEvent() /ReleaseGIL/;
+%If (Qt_3_0_0 -)
+ bool hasPendingEvents();
+%End
+ int enter_loop() /ReleaseGIL/;
+ void exit_loop();
+%If (Qt_2_00 -)
+ int loopLevel() const;
+%End
+ static void exit(int = 0);
+ static bool sendEvent(QObject *,QEvent *) /ReleaseGIL/;
+ static void postEvent(QObject *,QEvent * /Transfer/) /ReleaseGIL/;
+ static void sendPostedEvents(QObject *,int) /ReleaseGIL/;
+%If (Qt_2_00 -)
+ static void sendPostedEvents() /ReleaseGIL/;
+ static void removePostedEvents(QObject *);
+%End
+ virtual bool notify(QObject *,QEvent *) /ReleaseGIL/;
+ static bool startingUp();
+ static bool closingDown();
+ static void flushX();
+%If (Qt_3_0_0 -)
+ static void flush();
+%End
+ static void syncX();
+ static void beep();
+%If (Qt_2_00 -)
+ void setDefaultCodec(QTextCodec *);
+ QTextCodec *defaultCodec() const;
+ void installTranslator(QTranslator *);
+ void removeTranslator(QTranslator *);
+%End
+%If (Qt_2_00 - Qt_3_0_0)
+ QString translate(const char *,const char *) const;
+%End
+%If (Qt_2_2_0 - Qt_3_0_0)
+ QString translate(const char *,const char *,const char *) const;
+%End
+%If (Qt_3_0_0 -)
+ enum Encoding {
+ DefaultCodec,
+ UnicodeUTF8
+ };
+
+ QString translate(const char *,const char *,const char * = 0,
+ Encoding = DefaultCodec) const;
+%End
+%If (Qt_3_2_0 -)
+ QString applicationDirPath();
+ QString applicationFilePath();
+%End
+%If (- Qt_3_0_0)
+ static void setWinStyleHighlightColor(const QColor &);
+ static const QColor &winStyleHighlightColor();
+%End
+%If (Qt_2_00 -)
+ static void setDesktopSettingsAware(bool);
+ static bool desktopSettingsAware();
+ static void setCursorFlashTime(int);
+ static int cursorFlashTime();
+%End
+ static void setDoubleClickInterval(int);
+ static int doubleClickInterval();
+%If (Qt_2_1_0 -)
+ static void setWheelScrollLines(int);
+ static int wheelScrollLines();
+%If (Qt_2_2_0 -)
+ static void setGlobalStrut(const QSize &);
+ static QSize globalStrut();
+%End
+%If (Qt_3_0_0 -)
+ static void setLibraryPaths(const QStringList &);
+ static QStringList libraryPaths();
+ static void addLibraryPath(const QString &);
+ static void removeLibraryPath(const QString &);
+%End
+ static void setStartDragTime(int);
+ static int startDragTime();
+ static void setStartDragDistance(int);
+ static int startDragDistance();
+%If (Qt_3_0_0 -)
+ static void setReverseLayout(bool);
+ static bool reverseLayout();
+
+ static int horizontalAlignment(int);
+%End
+%If (Qt_2_2_0 -)
+ static bool isEffectEnabled(Qt::UIEffect);
+ static void setEffectEnabled(Qt::UIEffect,bool = 1);
+%End
+%End
+
+
+%If (Qt_2_00 -)
+ bool isSessionRestored() const;
+ QString sessionId() const;
+%If (Qt_3_1_0 -)
+ QString sessionKey() const;
+%End
+ virtual void commitData(QSessionManager &);
+ virtual void saveState(QSessionManager &);
+%End
+%If (Qt_2_1_0 -)
+ void wakeUpGuiThread();
+%End
+%If (Qt_THREAD_SUPPORT)
+%If (Qt_2_2_0 -)
+ void lock() /ReleaseGIL/;
+ void unlock(bool = 1);
+ bool locked();
+%End
+%If (Qt_3_0_0 -)
+ bool tryLock();
+%End
+%End
+
+signals:
+ void lastWindowClosed();
+%If (Qt_2_00 -)
+ void aboutToQuit();
+%End
+%If (Qt_2_1_0 -)
+ void guiThreadAwake();
+%End
+
+public slots:
+ void quit();
+%If (Qt_2_00 -)
+ void closeAllWindows();
+%End
+%If (Qt_3_2_0 -)
+ void aboutQt();
+%End
+
+protected:
+%If (Qt_3_1_0 -)
+ bool event(QEvent *);
+%End
+
+private:
+ QApplication(const QApplication &);
+
+
+%TypeCode
+#include <string.h>
+
+
+// Convert a Python argv list to a conventional C argc count and argv array.
+static char **pyArgvToC(PyObject *argvlist,int &argc)
+{
+ char **argv;
+
+ argc = PyList_Size(argvlist);
+
+ // Allocate space for two copies of the argument pointers, plus the
+ // terminating NULL.
+ if ((argv = (char **)sipMalloc(2 * (argc + 1) * sizeof (char *))) == NULL)
+ return NULL;
+
+ // Convert the list.
+ for (int a = 0; a < argc; ++a)
+ {
+ char *arg;
+
+ // Get the argument and allocate memory for it.
+ if ((arg = PyString_AsString(PyList_GetItem(argvlist,a))) == NULL ||
+ (argv[a] = (char *)sipMalloc(strlen(arg) + 1)) == NULL)
+ return NULL;
+
+ // Copy the argument and save a pointer to it.
+ strcpy(argv[a],arg);
+ argv[a + argc + 1] = argv[a];
+ }
+
+ argv[argc + argc + 1] = argv[argc] = NULL;
+
+ return argv;
+}
+
+
+// Remove arguments from the Python argv list that have been removed from the
+// C argv array.
+static void updatePyArgv(PyObject *argvlist,int argc,char **argv)
+{
+ for (int a = 0, na = 0; a < argc; ++a)
+ {
+ // See if it was removed.
+ if (argv[na] == argv[a + argc + 1])
+ ++na;
+ else
+ PyList_SetSlice(argvlist,na,na + 1,NULL);
+ }
+}
+%End
+
+};
+
+
+enum QtMsgType {
+ QtDebugMsg,
+ QtWarningMsg,
+ QtFatalMsg
+};
+
+
+SIP_PYCALLABLE qInstallMsgHandler(SIP_PYCALLABLE /AllowNone/);
+%MethodCode
+ void (*old)(QtMsgType, const char *);
+
+ // Treat None as the default handler.
+ old = qInstallMsgHandler((a0 != Py_None) ? pyqtMsgHandler : 0);
+
+ // If we recognise the old handler, then return it. Otherwise return
+ // the default handler. This doesn't exactly mimic the Qt behaviour
+ // but it is probably close enough for the way it will be used.
+ sipRes = (old == pyqtMsgHandler) ? pyqtPyMsgHandler : Py_None;
+ Py_INCREF(sipRes);
+
+ // Save the new Python handler.
+ Py_XDECREF(pyqtPyMsgHandler);
+ pyqtPyMsgHandler = a0;
+ Py_INCREF(pyqtPyMsgHandler);
+%End
+
+%ModuleCode
+// The user supplied Python handler.
+static PyObject *pyqtPyMsgHandler = 0;
+
+// The C++ wrapper around the Python handler.
+static void pyqtMsgHandler(QtMsgType type, const char *msg)
+{
+ PyObject *res;
+
+ SIP_BLOCK_THREADS
+
+#if SIP_VERSION >= 0x040200
+ res = sipCallMethod(0, pyqtPyMsgHandler, "Es", type, sipEnum_QtMsgType, msg);
+#elif SIP_VERSION >= 0x040000
+ res = sipCallMethod(0, pyqtPyMsgHandler, "es", type, msg);
+#else
+ PyObject *args = Py_BuildValue("is", type, msg);
+
+ if (args != NULL)
+ {
+ res = PyEval_CallObject(pyqtPyMsgHandler, args);
+ Py_DECREF(args);
+ }
+#endif
+
+ Py_XDECREF(res);
+
+ if (res != NULL && res != Py_None)
+ {
+ PyErr_SetString(PyExc_TypeError, "invalid result type from PyQt message handler");
+ res = NULL;
+ }
+
+ if (res == NULL)
+ PyErr_Print();
+
+ SIP_UNBLOCK_THREADS
+}
+%End