]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/src/misc2.i
Added wxPyLog so log targets can be created in Python with the
[wxWidgets.git] / wxPython / src / misc2.i
index 7a7f49ad580a2009c3b129c873658f5740613113..ca975d61f8f0909122548685eb949a9244e3e158 100644 (file)
 #include <wx/caret.h>
 #include <wx/fontenum.h>
 #include <wx/tipdlg.h>
+#include <wx/process.h>
+
+#if wxUSE_JOYSTICK || defined(__WXMSW__)
+#include <wx/joystick.h>
+#endif
+
+#if wxUSE_WAVE || defined(__WXMSW__)
+#include <wx/wave.h>
+#endif
 %}
 
 //----------------------------------------------------------------------
 %import misc.i
 %import gdi.i
 %import events.i
+%import streams.i
+
+%{
+    static wxString wxPyEmptyStr("");
+%}
 
 //---------------------------------------------------------------------------
 // Dialog Functions
@@ -54,6 +68,11 @@ wxString wxGetTextFromUser(const wxString& message,
                            int x = -1, int y = -1,
                            bool centre = TRUE);
 
+wxString wxGetPasswordFromUser(const wxString& message,
+                               const wxString& caption = wxPyEmptyStr,
+                               const wxString& default_value = wxPyEmptyStr,
+                               wxWindow *parent = NULL);
+
 
 // TODO: Need to custom wrap this one...
 // int wxGetMultipleChoice(char* message, char* caption,
@@ -90,13 +109,25 @@ long wxGetNumberFromUser(const wxString& message,
                          long value,
                          long min = 0, long max = 100,
                          wxWindow *parent = NULL,
-                         const wxPoint& pos = wxPyDefaultPosition);
+                         const wxPoint& pos = wxDefaultPosition);
 
 //---------------------------------------------------------------------------
 // GDI Functions
 
 bool wxColourDisplay();
+
 int wxDisplayDepth();
+int wxGetDisplayDepth();
+
+void   wxDisplaySize(int* OUTPUT, int* OUTPUT);
+wxSize wxGetDisplaySize();
+
+void   wxDisplaySizeMM(int* OUTPUT, int* OUTPUT);
+wxSize wxGetDisplaySizeMM();
+
+void   wxClientDisplayRect(int *OUTPUT, int *OUTPUT, int *OUTPUT, int *OUTPUT);
+wxRect wxGetClientDisplayRect();
+
 void wxSetCursor(wxCursor& cursor);
 
 //----------------------------------------------------------------------
@@ -108,6 +139,13 @@ wxWindow * wxFindWindowByName(const wxString& name, wxWindow *parent=NULL);
 void wxBeginBusyCursor(wxCursor *cursor = wxHOURGLASS_CURSOR);
 wxWindow * wxGetActiveWindow();
 
+wxWindow* wxGenericFindWindowAtPoint(const wxPoint& pt);
+wxWindow* wxFindWindowAtPoint(const wxPoint& pt);
+
+#ifdef __WXMSW__
+bool wxCheckForInterrupt(wxWindow *wnd);
+void wxFlushEvents();
+#endif
 
 //---------------------------------------------------------------------------
 // Resource System
@@ -238,7 +276,7 @@ enum {
 //---------------------------------------------------------------------------
 // wxToolTip
 
-class wxToolTip {
+class wxToolTip : public wxObject {
 public:
     wxToolTip(const wxString &tip);
 
@@ -246,18 +284,10 @@ public:
     wxString GetTip();
     // *** Not in the "public" interface void SetWindow(wxWindow *win);
     wxWindow *GetWindow();
-};
-
-
-%inline %{
-    void wxToolTip_Enable(bool flag) {
-        wxToolTip::Enable(flag);
-    }
 
-    void wxToolTip_SetDelay(long milliseconds) {
-        wxToolTip::SetDelay(milliseconds);
-    }
-%}
+    static void Enable(bool flag);
+    static void SetDelay(long milliseconds);
+};
 
 //----------------------------------------------------------------------
 
@@ -353,9 +383,40 @@ public:
 
 //----------------------------------------------------------------------
 
+class wxWindowDisabler {
+public:
+    wxWindowDisabler(wxWindow *winToSkip = NULL);
+    ~wxWindowDisabler();
+};
+
+//----------------------------------------------------------------------
+
+bool wxSafeYield(wxWindow* win=NULL);
 void wxPostEvent(wxEvtHandler *dest, wxEvent& event);
 void wxWakeUpIdle();
 
+
+#ifdef __WXMSW__
+void wxWakeUpMainThread();
+#endif
+
+void wxMutexGuiEnter();
+void wxMutexGuiLeave();
+
+
+class wxMutexGuiLocker  {
+public:
+    wxMutexGuiLocker();
+    ~wxMutexGuiLocker();
+};
+
+
+%inline %{
+    bool wxThread_IsMain() {
+        return wxThread::IsMain();
+    }
+%}
+
 //----------------------------------------------------------------------
 
 
@@ -404,18 +465,24 @@ bool wxShowTip(wxWindow *parent, wxTipProvider *tipProvider, bool showAtStartup
 
 %{
 #include <wx/generic/dragimgg.h>
-static wxPoint wxPyNullPoint;
 %}
 
-%name (wxDragImage) class wxGenericDragImage
+%name (wxDragImage) class wxGenericDragImage : public wxObject
 {
 public:
 
     wxGenericDragImage(const wxBitmap& image,
-                       const wxCursor& cursor = wxNullCursor,
-                       const wxPoint& hotspot = wxPyNullPoint);
+                       const wxCursor& cursor = wxNullCursor);
+    %name(wxDragIcon)wxGenericDragImage(const wxIcon& image,
+                                        const wxCursor& cursor = wxNullCursor);
+    %name(wxDragString)wxGenericDragImage(const wxString& str,
+                                          const wxCursor& cursor = wxNullCursor);
+    %name(wxDragTreeItem)wxGenericDragImage(const wxTreeCtrl& treeCtrl, wxTreeItemId& id);
+    %name(wxDragListItem)wxGenericDragImage(const wxListCtrl& listCtrl, long id);
+
     ~wxGenericDragImage();
 
+    void SetBackingBitmap(wxBitmap* bitmap);
     bool BeginDrag(const wxPoint& hotspot, wxWindow* window,
                    bool fullScreen = FALSE, wxRect* rect = NULL);
 
@@ -433,49 +500,9 @@ public:
 };
 
 
-// Alternate Constructors
-%new wxGenericDragImage* wxDragIcon(const wxIcon& image,
-                                   const wxCursor& cursor = wxNullCursor,
-                                   const wxPoint& hotspot = wxPyNullPoint);
-
-%new wxGenericDragImage* wxDragString(const wxString& str,
-                                      const wxCursor& cursor = wxNullCursor,
-                                      const wxPoint& hotspot = wxPyNullPoint);
-
-%new wxGenericDragImage* wxDragTreeItem(const wxTreeCtrl& treeCtrl, wxTreeItemId& id);
-
-%new wxGenericDragImage* wxDragListItem(const wxListCtrl& listCtrl, long id);
-
-
-%{
-
-wxGenericDragImage* wxDragIcon(const wxIcon& image,
-                               const wxCursor& cursor,
-                               const wxPoint& hotspot) {
-    return new wxGenericDragImage(image, cursor, hotspot);
-}
-
-wxGenericDragImage* wxDragString(const wxString& str,
-                                 const wxCursor& cursor,
-                                 const wxPoint& hotspot) {
-    return new wxGenericDragImage(str, cursor, hotspot);
-}
-
-wxGenericDragImage* wxDragTreeItem(const wxTreeCtrl& treeCtrl, wxTreeItemId& id) {
-    return new wxGenericDragImage(treeCtrl, id);
-}
-
-wxGenericDragImage* wxDragListItem(const wxListCtrl& listCtrl, long id) {
-    return new wxGenericDragImage(listCtrl, id);
-}
-
-%}
-
-
-
 //----------------------------------------------------------------------
 
-class wxPyTimer {
+class wxPyTimer : public wxObject {
 public:
     wxPyTimer(PyObject* notify);
     ~wxPyTimer();
@@ -531,12 +558,24 @@ public:
     static void SetTraceMask(wxTraceMask ulMask);
     static void AddTraceMask(const wxString& str);
     static void RemoveTraceMask(const wxString& str);
+    static void ClearTraceMasks();
+
+    static void SetTimestamp(const wxChar *ts);
+    static const wxChar *GetTimestamp();
 
     bool GetVerbose() const { return m_bVerbose; }
 
     static wxTraceMask GetTraceMask();
     static bool IsAllowedTraceMask(const char *mask);
 
+    // static void TimeStamp(wxString *str);
+    %addmethods {
+        wxString TimeStamp() {
+            wxString msg;
+            wxLog::TimeStamp(&msg);
+            return msg;
+        }
+    }
 };
 
 
@@ -584,6 +623,17 @@ public:
 };
 
 
+class wxLogChain : public wxLog
+{
+public:
+    wxLogChain(wxLog *logger);
+    void SetLog(wxLog *logger);
+    void PassMessages(bool bDoPass);
+    bool IsPassingMessages();
+    wxLog *GetOldLog();
+};
+
+
 unsigned long wxSysErrorCode();
 const char* wxSysErrorMsg(unsigned long nErrCode = 0);
 void wxLogFatalError(const char *szFormat);
@@ -597,6 +647,281 @@ void wxLogStatus(const char *szFormat);
 void wxLogSysError(const char *szFormat);
 
 
+%{
+// A Log class that can be derived from in wxPython
+class wxPyLog : public wxLog {
+public:
+    wxPyLog() : wxLog() {}
+
+    virtual void DoLog(wxLogLevel level, const wxChar *szString, time_t t) {
+        bool found;
+        wxPyTState* state = wxPyBeginBlockThreads();
+        if ((found = wxPyCBH_findCallback(m_myInst, "DoLog")))
+            wxPyCBH_callCallback(m_myInst, Py_BuildValue("(isi)", level, szString, t));
+        wxPyEndBlockThreads(state);
+        if (! found)
+            wxLog::DoLog(level, szString, t);
+    }
+
+    virtual void DoLogString(const wxChar *szString, time_t t) {
+        bool found;
+        wxPyTState* state = wxPyBeginBlockThreads();
+        if ((found = wxPyCBH_findCallback(m_myInst, "DoLogString")))
+            wxPyCBH_callCallback(m_myInst, Py_BuildValue("(si)", szString, t));
+        wxPyEndBlockThreads(state);
+        if (! found)
+            wxLog::DoLogString(szString, t);
+    }
+
+    PYPRIVATE;
+};
+%}
+
+// Now tell SWIG about it
+class wxPyLog : public wxLog {
+public:
+    wxPyLog();
+    void _setSelf(PyObject* self, PyObject* _class);
+    %pragma(python) addtomethod = "__init__:self._setSelf(self, wxPyLog)"
+    %addmethods { void Destroy() { delete self; } }
+
+};
+
+
 //----------------------------------------------------------------------
+
+
+enum {
+    /* event type */
+    wxEVT_END_PROCESS
+};
+
+
+class wxProcessEvent : public wxEvent {
+public:
+    wxProcessEvent(int id = 0, int pid = 0, int exitcode = 0);
+    int GetPid();
+    int GetExitCode();
+    int m_pid, m_exitcode;
+};
+
+
+
+
+%{ // C++ version of wxProcess derived class
+
+class wxPyProcess : public wxProcess {
+public:
+    wxPyProcess(wxEvtHandler *parent = NULL, int id = -1)
+        : wxProcess(parent, id)
+        {}
+
+    DEC_PYCALLBACK_VOID_INTINT(OnTerminate);
+
+    PYPRIVATE;
+};
+
+IMP_PYCALLBACK_VOID_INTINT( wxPyProcess, wxProcess, OnTerminate);
+
+%}
+
+
+%name(wxProcess)class wxPyProcess : public wxEvtHandler {
+public:
+    wxPyProcess(wxEvtHandler *parent = NULL, int id = -1);
+    %addmethods { void Destroy() { delete self; } }
+
+    void _setSelf(PyObject* self, PyObject* _class);
+    %pragma(python) addtomethod = "__init__:self._setSelf(self, wxProcess)"
+
+    void base_OnTerminate(int pid, int status);
+
+    void Redirect();
+    bool IsRedirected();
+    void Detach();
+
+    wxInputStream *GetInputStream();
+    wxInputStream *GetErrorStream();
+    wxOutputStream *GetOutputStream();
+
+    void CloseOutput();
+};
+
+
+
+long wxExecute(const wxString& command,
+               int sync = FALSE,
+               wxPyProcess *process = NULL);
+
+//----------------------------------------------------------------------
+
+%{
+#if !wxUSE_JOYSTICK && !defined(__WXMSW__)
+// A C++ stub class for wxJoystick for platforms that don't have it.
+class wxJoystick : public wxObject {
+public:
+    wxJoystick(int joystick = wxJOYSTICK1) {
+        bool doSave = wxPyRestoreThread();
+        PyErr_SetString(PyExc_NotImplementedError, "wxJoystick is not available on this platform.");
+        wxPySaveThread(doSave);
+    }
+    wxPoint GetPosition() { return wxPoint(-1,-1); }
+    int GetZPosition() { return -1; }
+    int GetButtonState() { return -1; }
+    int GetPOVPosition() { return -1; }
+    int GetPOVCTSPosition() { return -1; }
+    int GetRudderPosition() { return -1; }
+    int GetUPosition() { return -1; }
+    int GetVPosition() { return -1; }
+    int GetMovementThreshold() { return -1; }
+    void SetMovementThreshold(int threshold) {}
+
+    bool IsOk(void) { return FALSE; }
+    int GetNumberJoysticks() { return -1; }
+    int GetManufacturerId() { return -1; }
+    int GetProductId() { return -1; }
+    wxString GetProductName() { return ""; }
+    int GetXMin() { return -1; }
+    int GetYMin() { return -1; }
+    int GetZMin() { return -1; }
+    int GetXMax() { return -1; }
+    int GetYMax() { return -1; }
+    int GetZMax() { return -1; }
+    int GetNumberButtons() { return -1; }
+    int GetNumberAxes() { return -1; }
+    int GetMaxButtons() { return -1; }
+    int GetMaxAxes() { return -1; }
+    int GetPollingMin() { return -1; }
+    int GetPollingMax() { return -1; }
+    int GetRudderMin() { return -1; }
+    int GetRudderMax() { return -1; }
+    int GetUMin() { return -1; }
+    int GetUMax() { return -1; }
+    int GetVMin() { return -1; }
+    int GetVMax() { return -1; }
+
+    bool HasRudder() { return FALSE; }
+    bool HasZ() { return FALSE; }
+    bool HasU() { return FALSE; }
+    bool HasV() { return FALSE; }
+    bool HasPOV() { return FALSE; }
+    bool HasPOV4Dir() { return FALSE; }
+    bool HasPOVCTS() { return FALSE; }
+
+    bool SetCapture(wxWindow* win, int pollingFreq = 0) { return FALSE; }
+    bool ReleaseCapture() { return FALSE; }
+};
+#endif
+%}
+
+
+class wxJoystick : public wxObject {
+public:
+    wxJoystick(int joystick = wxJOYSTICK1);
+    ~wxJoystick();
+
+    wxPoint GetPosition();
+    int GetZPosition();
+    int GetButtonState();
+    int GetPOVPosition();
+    int GetPOVCTSPosition();
+    int GetRudderPosition();
+    int GetUPosition();
+    int GetVPosition();
+    int GetMovementThreshold();
+    void SetMovementThreshold(int threshold) ;
+
+    bool IsOk(void);
+    int GetNumberJoysticks();
+    int GetManufacturerId();
+    int GetProductId();
+    wxString GetProductName();
+    int GetXMin();
+    int GetYMin();
+    int GetZMin();
+    int GetXMax();
+    int GetYMax();
+    int GetZMax();
+    int GetNumberButtons();
+    int GetNumberAxes();
+    int GetMaxButtons();
+    int GetMaxAxes();
+    int GetPollingMin();
+    int GetPollingMax();
+    int GetRudderMin();
+    int GetRudderMax();
+    int GetUMin();
+    int GetUMax();
+    int GetVMin();
+    int GetVMax();
+
+    bool HasRudder();
+    bool HasZ();
+    bool HasU();
+    bool HasV();
+    bool HasPOV();
+    bool HasPOV4Dir();
+    bool HasPOVCTS();
+
+    bool SetCapture(wxWindow* win, int pollingFreq = 0);
+    bool ReleaseCapture();
+};
+
+//----------------------------------------------------------------------
+
+%{
+#if !wxUSE_WAVE
+// A C++ stub class for wxWave for platforms that don't have it.
+class wxWave : public wxObject
+{
+public:
+    wxWave(const wxString& fileName, bool isResource = FALSE) {
+        wxPyTState* state = wxPyBeginBlockThreads();
+        PyErr_SetString(PyExc_NotImplementedError, "wxWave is not available on this platform.");
+        wxPyEndBlockThreads(state);
+    }
+    wxWave(int size, const wxByte* data) {
+        wxPyTState* state = wxPyBeginBlockThreads();
+        PyErr_SetString(PyExc_NotImplementedError, "wxWave is not available on this platform.");
+        wxPyEndBlockThreads(state);
+    }
+
+    ~wxWave() {}
+
+    bool  IsOk() const { return FALSE; }
+    bool  Play(bool async = TRUE, bool looped = FALSE) const { return FALSE; }
+};
+
+#endif
+%}
+
+class wxWave : public wxObject
+{
+public:
+  wxWave(const wxString& fileName, bool isResource = FALSE);
+  ~wxWave();
+
+  bool  IsOk() const;
+  bool  Play(bool async = TRUE, bool looped = FALSE) const;
+};
+
+%new wxWave* wxWaveData(const wxString& data);
+%{ // Implementations of some alternate "constructors"
+    wxWave* wxWaveData(const wxString& data) {
+        return new wxWave(data.Len(), (wxByte*)data.c_str());
+    }
+%}
+
+
+//----------------------------------------------------------------------
+//----------------------------------------------------------------------
+
+
+%init %{
+    wxPyPtrTypeMap_Add("wxFontEnumerator", "wxPyFontEnumerator");
+    wxPyPtrTypeMap_Add("wxDragImage", "wxGenericDragImage");
+    wxPyPtrTypeMap_Add("wxProcess", "wxPyProcess");
+%}
+
 //----------------------------------------------------------------------