// This is the SIP interface definition for TQPEApplication. // // Copyright (c) 2007 // Riverbank Computing Limited // // This file is part of PyTQt. // // This copy of PyTQt 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. // // PyTQt 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 // PyTQt; see the file LICENSE. If not, write to the Free Software Foundation, // Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // The documentation is in the main documentation file because SIP isn't clever // enough to handle the resulting %Timeline complexity. %If (WS_QWS) class TQPEApplication : TQApplication { %TypeHeaderCode #include #include %End public: TQPEApplication(SIP_PYLIST,Type=GuiClient) [(int &,char **,Type=GuiClient)]; %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. int nargc = argc; Py_BEGIN_ALLOW_THREADS sipCpp = new sipTQPEApplication(nargc,argv,(TQApplication::Type)a1); Py_END_ALLOW_THREADS // Now modify the original list. updatePyArgv(a0,argc,argv); } %End ~TQPEApplication(); %MethodCode // See the comments in ~TQApplication() to understand what's // being done here. TQWidgetList *tlw = TQApplication::topLevelWidgets(); TQWidgetListIt it(*tlw); TQWidget *w; while ((w = it.current()) != 0) { PyObject *sw; if ((sw = sipGetWrapper(w,sipClass_TQWidget)) != NULL) sipTransferTo(sw,NULL); ++it; } delete tlw; %End %ConvertToSubClassCode // The table of Python class objects indexed by their names. The table // must be sorted by name. static sipStringTypeClassMap map[] = { {sipName_FileSelector, &sipClass_FileSelector}, {sipName_MenuButton, &sipClass_MenuButton}, {sipName_TQPEApplication, &sipClass_TQPEApplication}, {sipName_TQPEMenuBar, &sipClass_TQPEMenuBar}, {sipName_TQPEToolBar, &sipClass_TQPEToolBar}, }; sipClass = sipMapStringToClass(sipCpp -> className(),map, sizeof (map)/sizeof (map[0])); %End static TQString tqpeDir(); static TQString documentDir(); void applyStyle(); static int defaultRotation(); static void setDefaultRotation(int); static void grabKeyboard(); static void ungrabKeyboard(); enum StylusMode { LeftOnly, RightOnHold }; static void setStylusOperation(TQWidget *,StylusMode); static StylusMode stylusOperation(TQWidget *); enum InputMethodHint { Normal, AlwaysOff, AlwaysOn }; enum screenSaverHint { Disable, DisableLightOff, DisableSuspend, Enable }; static void setInputMethodHint(TQWidget *,InputMethodHint); static InputMethodHint inputMethodHint(TQWidget *); void showMainWidget(TQWidget *,bool = 0); void showMainDocumentWidget(TQWidget *,bool = 0); static void setKeepRunning(); bool keepRunning() const; int exec() /PyName=exec_loop, ReleaseGIL, PreHook=__pyTQtPreEventLoopHook__, PostHook=__pyTQtPostEventLoopHook__/; signals: void clientMoused(); void timeChanged(); void clockChanged(bool); void volumeChanged(bool); void appMessage(const TQCString &,const TQByteArray &); void weekChanged(bool); void dateFormatChanged(DateFormat); void flush(); void reload(); protected: // bool qwsEventFilter(TQWSEvent *); // void internalSetStyle(const TQString &); void prepareForTermination(bool); virtual void restart(); virtual void shutdown(); bool eventFilter(TQObject *,TQEvent *); void timerEvent(TQTimerEvent *); bool keyboardGrabbed() const; bool raiseAppropriateWindow(); virtual void tryQuit(); %TypeCode #include // Convert a Python argv list to a conventional C argc count and argv array. static char **pyArgvToC(PyObject *argvlist,int *argcp) { 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 = (char *)sipBytes_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; *argcp = argc; 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 }; %End