X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/203c2f9a9acd71ae956b600d35ee46405a247215..9750481f368dceba820004ab479d31deb4860253:/wxPython/src/misc2.i?ds=inline diff --git a/wxPython/src/misc2.i b/wxPython/src/misc2.i index 59ad1076ad..db800a4455 100644 --- a/wxPython/src/misc2.i +++ b/wxPython/src/misc2.i @@ -32,6 +32,9 @@ #endif #include +#include +#include +//#include %} //---------------------------------------------------------------------- @@ -175,6 +178,8 @@ void wxFlushEvents(); wxWindow* wxGetTopLevelParent(wxWindow *win); +//bool wxSpawnBrowser(wxWindow *parent, wxString href); + //--------------------------------------------------------------------------- // Resource System @@ -443,7 +448,7 @@ public: virtual wxString GetTip() = 0; size_t GetCurrentTip(); - + virtual wxString PreprocessTip(const wxString& tip); }; @@ -455,12 +460,12 @@ public: : wxTipProvider(currentTip) {} DEC_PYCALLBACK_STRING__pure(GetTip); - + DEC_PYCALLBACK_STRING_STRING(PreprocessTip); PYPRIVATE; }; IMP_PYCALLBACK_STRING__pure( wxPyTipProvider, wxTipProvider, GetTip); - +IMP_PYCALLBACK_STRING_STRING(wxPyTipProvider, wxTipProvider, PreprocessTip); %} @@ -468,6 +473,9 @@ IMP_PYCALLBACK_STRING__pure( wxPyTipProvider, wxTipProvider, GetTip); class wxPyTipProvider : public wxTipProvider { public: wxPyTipProvider(size_t currentTip); + + void _setCallbackInfo(PyObject* self, PyObject* _class); + %pragma(python) addtomethod = "__init__:self._setCallbackInfo(self, wxPyTipProvider)" }; @@ -563,6 +571,27 @@ enum wxLOG_User = 100 // user defined levels start here }; +#define wxTRACE_MemAlloc "memalloc" // trace memory allocation (new/delete) +#define wxTRACE_Messages "messages" // trace window messages/X callbacks +#define wxTRACE_ResAlloc "resalloc" // trace GDI resource allocation +#define wxTRACE_RefCount "refcount" // trace various ref counting operations + +#ifdef __WXMSW__ +#define wxTRACE_OleCalls "ole" // OLE interface calls +#endif + +enum { + wxTraceMemAlloc, + wxTraceMessages, + wxTraceResAlloc, + wxTraceRefCount, + +#ifdef __WXMSW__ + wxTraceOleCalls, +#endif +}; + + class wxLog { @@ -571,7 +600,7 @@ public: static bool IsEnabled(); static bool EnableLogging(bool doIt = TRUE); - static void OnLog(wxLogLevel level, const wxString& szString, int t=0); + static void OnLog(unsigned long level, const wxString& szString, int t=0); virtual void Flush(); bool HasPendingMessages() const; @@ -586,17 +615,18 @@ public: static void SetVerbose(bool bVerbose = TRUE); static void DontCreateOnDemand(); - static void SetTraceMask(wxTraceMask ulMask); + static void SetTraceMask(long ulMask); static void AddTraceMask(const wxString& str); static void RemoveTraceMask(const wxString& str); static void ClearTraceMasks(); + static const wxArrayString &GetTraceMasks(); static void SetTimestamp(const wxString& ts); static const wxString& GetTimestamp(); bool GetVerbose() const; - static wxTraceMask GetTraceMask(); + static unsigned long GetTraceMask(); static bool IsAllowedTraceMask(const wxString& mask); // static void TimeStamp(wxString *str); @@ -660,15 +690,20 @@ public: unsigned long wxSysErrorCode(); const wxString wxSysErrorMsg(unsigned long nErrCode = 0); -void wxLogFatalError(const wxString& szFormat); -void wxLogError(const wxString& szFormat); -void wxLogWarning(const wxString& szFormat); -void wxLogMessage(const wxString& szFormat); -void wxLogInfo(const wxString& szFormat); -void wxLogVerbose(const wxString& szFormat); -void wxLogStatus(const wxString& szFormat); -%name(wxLogStatusFrame)void wxLogStatus(wxFrame *pFrame, const wxString& szFormat); -void wxLogSysError(const wxString& szFormat); +void wxLogFatalError(const wxString& msg); +void wxLogError(const wxString& msg); +void wxLogWarning(const wxString& msg); +void wxLogMessage(const wxString& msg); +void wxLogInfo(const wxString& msg); +void wxLogVerbose(const wxString& msg); +void wxLogStatus(const wxString& msg); +%name(wxLogStatusFrame)void wxLogStatus(wxFrame *pFrame, const wxString& msg); +void wxLogSysError(const wxString& msg); + +void wxLogTrace(const wxString& msg); +%name(wxLogTraceMask)void wxLogTrace(const wxString& mask, const wxString& msg); + +void wxLogGeneric(unsigned long level, const wxString& msg); // wxLogFatalError helper: show the (fatal) error to the user in a safe way, // i.e. without using wxMessageBox() for example because it could crash @@ -696,9 +731,11 @@ public: virtual void DoLog(wxLogLevel level, const wxChar *szString, time_t t) { bool found; wxPyBeginBlockThreads(); - if ((found = wxPyCBH_findCallback(m_myInst, "DoLog"))) - wxPyCBH_callCallback(m_myInst, Py_BuildValue("(iOi)", level, - wx2PyString(szString), t)); + if ((found = wxPyCBH_findCallback(m_myInst, "DoLog"))) { + PyObject* s = wx2PyString(szString); + wxPyCBH_callCallback(m_myInst, Py_BuildValue("(iOi)", level, s, t)); + Py_DECREF(s); + } wxPyEndBlockThreads(); if (! found) wxLog::DoLog(level, szString, t); @@ -707,9 +744,11 @@ public: virtual void DoLogString(const wxChar *szString, time_t t) { bool found; wxPyBeginBlockThreads(); - if ((found = wxPyCBH_findCallback(m_myInst, "DoLogString"))) - wxPyCBH_callCallback(m_myInst, Py_BuildValue("(Oi)", - wx2PyString(szString), t)); + if ((found = wxPyCBH_findCallback(m_myInst, "DoLogString"))) { + PyObject* s = wx2PyString(szString); + wxPyCBH_callCallback(m_myInst, Py_BuildValue("(Oi)", s, t)); + Py_DECREF(s); + } wxPyEndBlockThreads(); if (! found) wxLog::DoLogString(szString, t); @@ -733,12 +772,47 @@ public: //---------------------------------------------------------------------- +enum wxKillError +{ + wxKILL_OK, // no error + wxKILL_BAD_SIGNAL, // no such signal + wxKILL_ACCESS_DENIED, // permission denied + wxKILL_NO_PROCESS, // no such process + wxKILL_ERROR // another, unspecified error +}; + +enum wxSignal +{ + wxSIGNONE = 0, // verify if the process exists under Unix + wxSIGHUP, + wxSIGINT, + wxSIGQUIT, + wxSIGILL, + wxSIGTRAP, + wxSIGABRT, + wxSIGIOT = wxSIGABRT, // another name + wxSIGEMT, + wxSIGFPE, + wxSIGKILL, + wxSIGBUS, + wxSIGSEGV, + wxSIGSYS, + wxSIGPIPE, + wxSIGALRM, + wxSIGTERM + + // further signals are different in meaning between different Unix systems +}; + + + enum { /* event type */ wxEVT_END_PROCESS }; + class wxProcessEvent : public wxEvent { public: wxProcessEvent(int id = 0, int pid = 0, int exitcode = 0); @@ -770,6 +844,23 @@ IMP_PYCALLBACK_VOID_INTINT( wxPyProcess, wxProcess, OnTerminate); %name(wxProcess)class wxPyProcess : public wxEvtHandler { public: + // kill the process with the given PID + static wxKillError Kill(int pid, wxSignal sig = wxSIGTERM); + + // test if the given process exists + static bool Exists(int pid); + + // this function replaces the standard popen() one: it launches a process + // asynchronously and allows the caller to get the streams connected to its + // std{in|out|err} + // + // on error NULL is returned, in any case the process object will be + // deleted automatically when the process terminates and should *not* be + // deleted by the caller + static wxPyProcess *Open(const wxString& cmd, int flags = wxEXEC_ASYNC); + + + wxPyProcess(wxEvtHandler *parent = NULL, int id = -1); %addmethods { void Destroy() { delete self; } } @@ -787,6 +878,13 @@ public: wxOutputStream *GetOutputStream(); void CloseOutput(); + + // return TRUE if the child process stdout is not closed + bool IsInputOpened() const; + + // return TRUE if any input is available on the child process stdout/err + bool IsInputAvailable() const; + bool IsErrorAvailable() const; }; @@ -814,6 +912,25 @@ long wxExecute(const wxString& command, //---------------------------------------------------------------------- + +// Which joystick? Same as Windows ids so no conversion necessary. +enum +{ + wxJOYSTICK1, + wxJOYSTICK2 +}; + +// Which button is down? +enum +{ + wxJOY_BUTTON_ANY, + wxJOY_BUTTON1, + wxJOY_BUTTON2, + wxJOY_BUTTON3, + wxJOY_BUTTON4, +}; + + %{ #if !wxUSE_JOYSTICK && !defined(__WXMSW__) // A C++ stub class for wxJoystick for platforms that don't have it. @@ -1346,6 +1463,128 @@ extern wxMimeTypesManager* wxTheMimeTypesManager; %} %readwrite +//---------------------------------------------------------------------- + +%{ +#include + + DECLARE_DEF_STRING(ART_OTHER); + +%} + +%pragma(python) code = " +# Art clients +wxART_TOOLBAR = 'wxART_TOOLBAR_C' +wxART_MENU = 'wxART_MENU_C' +wxART_FRAME_ICON = 'wxART_FRAME_ICON_C' +wxART_CMN_DIALOG = 'wxART_CMN_DIALOG_C' +wxART_HELP_BROWSER = 'wxART_HELP_BROWSER_C' +wxART_MESSAGE_BOX = 'wxART_MESSAGE_BOX_C' +wxART_OTHER = 'wxART_OTHER_C' + +# Art IDs +wxART_ADD_BOOKMARK = 'wxART_ADD_BOOKMARK' +wxART_DEL_BOOKMARK = 'wxART_DEL_BOOKMARK' +wxART_HELP_SIDE_PANEL = 'wxART_HELP_SIDE_PANEL' +wxART_HELP_SETTINGS = 'wxART_HELP_SETTINGS' +wxART_HELP_BOOK = 'wxART_HELP_BOOK' +wxART_HELP_FOLDER = 'wxART_HELP_FOLDER' +wxART_HELP_PAGE = 'wxART_HELP_PAGE' +wxART_GO_BACK = 'wxART_GO_BACK' +wxART_GO_FORWARD = 'wxART_GO_FORWARD' +wxART_GO_UP = 'wxART_GO_UP' +wxART_GO_DOWN = 'wxART_GO_DOWN' +wxART_GO_TO_PARENT = 'wxART_GO_TO_PARENT' +wxART_GO_HOME = 'wxART_GO_HOME' +wxART_FILE_OPEN = 'wxART_FILE_OPEN' +wxART_PRINT = 'wxART_PRINT' +wxART_HELP = 'wxART_HELP' +wxART_TIP = 'wxART_TIP' +wxART_REPORT_VIEW = 'wxART_REPORT_VIEW' +wxART_LIST_VIEW = 'wxART_LIST_VIEW' +wxART_NEW_DIR = 'wxART_NEW_DIR' +wxART_FOLDER = 'wxART_FOLDER' +wxART_GO_DIR_UP = 'wxART_GO_DIR_UP' +wxART_EXECUTABLE_FILE = 'wxART_EXECUTABLE_FILE' +wxART_NORMAL_FILE = 'wxART_NORMAL_FILE' +wxART_TICK_MARK = 'wxART_TICK_MARK' +wxART_CROSS_MARK = 'wxART_CROSS_MARK' +wxART_ERROR = 'wxART_ERROR' +wxART_QUESTION = 'wxART_QUESTION' +wxART_WARNING = 'wxART_WARNING' +wxART_INFORMATION = 'wxART_INFORMATION' +" + +%{ // Python aware wxArtProvider +class wxPyArtProvider : public wxArtProvider { +public: + + virtual wxBitmap CreateBitmap(const wxArtID& id, + const wxArtClient& client, + const wxSize& size) { + wxBitmap rval = wxNullBitmap; + wxPyBeginBlockThreads(); + if ((wxPyCBH_findCallback(m_myInst, "CreateBitmap"))) { + PyObject* so = wxPyConstructObject((void*)&size, "wxSize", 0); + PyObject* ro; + wxBitmap* ptr; + PyObject* s1, *s2; + s1 = wx2PyString(id); + s2 = wx2PyString(client); + ro = wxPyCBH_callCallbackObj(m_myInst, Py_BuildValue("(OOO)", s1, s2, so)); + Py_DECREF(so); + Py_DECREF(s1); + Py_DECREF(s2); + if (ro) { + if (!SWIG_GetPtrObj(ro, (void**)&ptr, "_wxBitmap_p")) + rval = *ptr; + Py_DECREF(ro); + } + } + wxPyEndBlockThreads(); + return rval; + } + + PYPRIVATE; +}; +%} + +// The one for SWIG to see +%name(wxArtProvider) class wxPyArtProvider : public wxObject +{ +public: + wxPyArtProvider(); + + void _setCallbackInfo(PyObject* self, PyObject* _class); + %pragma(python) addtomethod = "__init__:self._setCallbackInfo(self, wxArtProvider)" + + // Add new provider to the top of providers stack. + static void PushProvider(wxPyArtProvider *provider); + + // Remove latest added provider and delete it. + static bool PopProvider(); + + // Remove provider. The provider must have been added previously! + // The provider is _not_ deleted. + static bool RemoveProvider(wxPyArtProvider *provider); + + // Query the providers for bitmap with given ID and return it. Return + // wxNullBitmap if no provider provides it. + static wxBitmap GetBitmap(const wxString& id, + const wxString& client = wxPyART_OTHER, + const wxSize& size = wxDefaultSize); + + // Query the providers for icon with given ID and return it. Return + // wxNullIcon if no provider provides it. + static wxIcon GetIcon(const wxString& id, + const wxString& client = wxPyART_OTHER, + const wxSize& size = wxDefaultSize); + + // Destroy caches & all providers + static void CleanUpProviders(); +}; + + //---------------------------------------------------------------------- %{ @@ -1383,12 +1622,88 @@ public: }; //---------------------------------------------------------------------- + +class wxEffects: public wxObject +{ +public: + // Assume system colours + wxEffects(); + + wxColour GetHighlightColour() const; + wxColour GetLightShadow() const; + wxColour GetFaceColour() const; + wxColour GetMediumShadow() const; + wxColour GetDarkShadow() const; + + void SetHighlightColour(const wxColour& c); + void SetLightShadow(const wxColour& c); + void SetFaceColour(const wxColour& c); + void SetMediumShadow(const wxColour& c); + void SetDarkShadow(const wxColour& c); + + void Set(const wxColour& highlightColour, const wxColour& lightShadow, + const wxColour& faceColour, const wxColour& mediumShadow, + const wxColour& darkShadow); + + // Draw a sunken edge + void DrawSunkenEdge(wxDC& dc, const wxRect& rect, int borderSize = 1); + + // Tile a bitmap + bool TileBitmap(const wxRect& rect, wxDC& dc, wxBitmap& bitmap); + +}; + +//---------------------------------------------------------------------- + +class wxSingleInstanceChecker +{ +public: + // like Create() but no error checking (dangerous!) + wxSingleInstanceChecker(const wxString& name, + const wxString& path = wxPyEmptyString); + + // default ctor, use Create() after it + %name(wxPreSingleInstanceChecker) wxSingleInstanceChecker(); + + ~wxSingleInstanceChecker(); + + + // name must be given and be as unique as possible, it is used as the mutex + // name under Win32 and the lock file name under Unix - + // wxTheApp->GetAppName() may be a good value for this parameter + // + // path is optional and is ignored under Win32 and used as the directory to + // create the lock file in under Unix (default is wxGetHomeDir()) + // + // returns FALSE if initialization failed, it doesn't mean that another + // instance is running - use IsAnotherRunning() to check it + bool Create(const wxString& name, const wxString& path = wxPyEmptyString); + + // is another copy of this program already running? + bool IsAnotherRunning() const; +}; + //---------------------------------------------------------------------- +// %{ +// #if wxUSE_UNICODE +// #define ADD_STRING(dict, str) \ +// wxString tmp##str(str); \ +// PyDict_SetItemString(dict, #str, \ +// PyUnicode_FromUnicode(tmp##str.c_str(), tmp##str.Len())) +// #else +// #define ADD_STRING(dict, str) \ +// PyDict_SetItemString(d, #str, PyString_FromString(str)) +// #endif +// %} + + %init %{ wxPyPtrTypeMap_Add("wxDragImage", "wxGenericDragImage"); wxPyPtrTypeMap_Add("wxProcess", "wxPyProcess"); + wxPyPtrTypeMap_Add("wxArtProvider", "wxPyArtProvider"); + %} //----------------------------------------------------------------------