X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/fd512ba2864a4ddf82ef70caf7a5b107d34906c8..8c14bc9170c549c44cef259546e6c80541be28e5:/wxPython/src/misc2.i diff --git a/wxPython/src/misc2.i b/wxPython/src/misc2.i index db800a4455..8aa9480bfd 100644 --- a/wxPython/src/misc2.i +++ b/wxPython/src/misc2.i @@ -17,7 +17,6 @@ %{ #include "helpers.h" #include "pyistream.h" -#include #include #include #include @@ -34,7 +33,7 @@ #include #include #include -//#include +#include %} //---------------------------------------------------------------------- @@ -74,6 +73,9 @@ wxString wxFileSelector(const wxString& message = wxPyFileSelectorPromptStr, wxWindow *parent = NULL, int x = -1, int y = -1); +// TODO: wxFileSelectorEx + + // Ask for filename to load wxString wxLoadFileSelector(const wxString& what, const wxString& extension, @@ -173,7 +175,7 @@ wxWindow* wxFindWindowAtPoint(const wxPoint& pt); #ifdef __WXMSW__ bool wxCheckForInterrupt(wxWindow *wnd); -void wxFlushEvents(); +// link error? void wxFlushEvents(); #endif wxWindow* wxGetTopLevelParent(wxWindow *win); @@ -183,6 +185,7 @@ wxWindow* wxGetTopLevelParent(wxWindow *win); //--------------------------------------------------------------------------- // Resource System +#ifdef wxUSE_WX_RESOURCES bool wxResourceAddIdentifier(char* name, int value); void wxResourceClear(void); wxBitmap wxResourceCreateBitmap(char* resource); @@ -192,6 +195,7 @@ int wxResourceGetIdentifier(char* name); bool wxResourceParseData(char* resource, wxResourceTable *table = NULL); bool wxResourceParseFile(char* filename, wxResourceTable *table = NULL); bool wxResourceParseString(char* resource, wxResourceTable *table = NULL); +#endif //--------------------------------------------------------------------------- // System Settings @@ -341,6 +345,23 @@ public: +class wxSystemOptions : public wxObject +{ +public: + wxSystemOptions() { } + + // User-customizable hints to wxWindows or associated libraries + // These could also be used to influence GetSystem... calls, indeed + // to implement SetSystemColour/Font/Metric + + static void SetOption(const wxString& name, const wxString& value); + %name(SetOptionInt)static void SetOption(const wxString& name, int value); + static wxString GetOption(const wxString& name) ; + static int GetOptionInt(const wxString& name) ; + static bool HasOption(const wxString& name) ; +}; + + //--------------------------------------------------------------------------- // wxToolTip @@ -377,6 +398,8 @@ public: void SetSize(const wxSize& size); void Show(int show = TRUE); void Hide(); + + %pragma(python) addtoclass = "def __nonzero__(self): return self.IsOk()" }; %inline %{ @@ -407,7 +430,7 @@ public: //---------------------------------------------------------------------- -bool wxSafeYield(wxWindow* win=NULL); +bool wxSafeYield(wxWindow* win=NULL, bool onlyIfNeeded=FALSE); void wxPostEvent(wxEvtHandler *dest, wxEvent& event); void wxWakeUpIdle(); @@ -509,8 +532,10 @@ public: bool BeginDrag(const wxPoint& hotspot, wxWindow* window, bool fullScreen = FALSE, wxRect* rect = NULL); - %name(BeginDrag2) bool BeginDrag(const wxPoint& hotspot, wxWindow* window, - wxWindow* fullScreenRect); + %name(BeginDragBounded) bool BeginDrag(const wxPoint& hotspot, wxWindow* window, + wxWindow* boundingWindow); + + %pragma(python) addtoclass = "BeginDrag2 = BeginDragBounded" bool EndDrag(); bool Move(const wxPoint& pt); @@ -533,7 +558,7 @@ public: bool IsOneShot(); bool IsRunning(); void SetOwner(wxEvtHandler *owner, int id = -1); - void Start(int milliseconds=-1, int oneShot=FALSE); + bool Start(int milliseconds=-1, int oneShot=FALSE); void Stop(); }; @@ -603,8 +628,6 @@ public: static void OnLog(unsigned long level, const wxString& szString, int t=0); virtual void Flush(); - bool HasPendingMessages() const; - static void FlushActive(); static wxLog *GetActiveTarget(); static wxLog *SetActiveTarget(wxLog *pLogger); @@ -629,6 +652,10 @@ public: static unsigned long GetTraceMask(); static bool IsAllowedTraceMask(const wxString& mask); + static void SetLogLevel(unsigned long logLevel); + static unsigned long GetLogLevel(); + + // static void TimeStamp(wxString *str); %addmethods { wxString TimeStamp() { @@ -695,6 +722,7 @@ void wxLogError(const wxString& msg); void wxLogWarning(const wxString& msg); void wxLogMessage(const wxString& msg); void wxLogInfo(const wxString& msg); +void wxLogDebug(const wxString& msg); void wxLogVerbose(const wxString& msg); void wxLogStatus(const wxString& msg); %name(wxLogStatusFrame)void wxLogStatus(wxFrame *pFrame, const wxString& msg); @@ -1041,6 +1069,8 @@ public: bool SetCapture(wxWindow* win, int pollingFreq = 0); bool ReleaseCapture(); + + %pragma(python) addtoclass = "def __nonzero__(self): return self.IsOk()" }; //---------------------------------------------------------------------- @@ -1074,11 +1104,13 @@ public: class wxWave : public wxObject { public: - wxWave(const wxString& fileName, bool isResource = FALSE); - ~wxWave(); + wxWave(const wxString& fileName, bool isResource = FALSE); + ~wxWave(); + + bool IsOk() const; + bool Play(bool async = TRUE, bool looped = FALSE) const; - bool IsOk() const; - bool Play(bool async = TRUE, bool looped = FALSE) const; + %pragma(python) addtoclass = "def __nonzero__(self): return self.IsOk()" }; %new wxWave* wxWaveData(const wxString& data); @@ -1108,10 +1140,10 @@ class wxFileTypeInfo public: // ctors // a normal item - wxFileTypeInfo(const char* mimeType, - const char* openCmd, - const char* printCmd, - const char* desc); + wxFileTypeInfo(const wxString& mimeType, + const wxString& openCmd, + const wxString& printCmd, + const wxString& desc); // the array elements correspond to the parameters of the ctor above in @@ -1205,7 +1237,7 @@ public: wxString str; if (self->GetMimeType(&str)) { #if wxUSE_UNICODE - return PyUnicode_FromUnicode(str.c_str(), str.Len()); + return PyUnicode_FromWideChar(str.c_str(), str.Len()); #else return PyString_FromStringAndSize(str.c_str(), str.Len()); #endif @@ -1238,9 +1270,9 @@ public: %addmethods { // Get the icon corresponding to this file type %new wxIcon* GetIcon() { - wxIcon icon; - if (self->GetIcon(&icon)) - return new wxIcon(icon); + wxIconLocation loc; + if (self->GetIcon(&loc)) + return new wxIcon(loc); else return NULL; } @@ -1248,16 +1280,20 @@ public: // Get the icon corresponding to this file type, the name of the file // where this icon resides, and its index in this file if applicable. PyObject* GetIconInfo() { - wxIcon icon; - wxString iconFile; - int iconIndex; - if (self->GetIcon(&icon, &iconFile, &iconIndex)) { + wxIconLocation loc; + if (self->GetIcon(&loc)) { + wxString iconFile = loc.GetFileName(); + int iconIndex = -1; +#ifdef __WXMSW__ + iconIndex = loc.GetIndex(); +#endif + // Make a tuple and put the values in it wxPyBeginBlockThreads(); PyObject* tuple = PyTuple_New(3); - PyTuple_SetItem(tuple, 0, wxPyConstructObject(new wxIcon(icon), - "wxIcon", TRUE)); + PyTuple_SetItem(tuple, 0, + wxPyConstructObject(new wxIcon(loc), wxT("wxIcon"), TRUE)); #if wxUSE_UNICODE - PyTuple_SetItem(tuple, 1, PyUnicode_FromUnicode(iconFile.c_str(), iconFile.Len())); + PyTuple_SetItem(tuple, 1, PyUnicode_FromWideChar(iconFile.c_str(), iconFile.Len())); #else PyTuple_SetItem(tuple, 1, PyString_FromStringAndSize(iconFile.c_str(), iconFile.Len())); #endif @@ -1276,7 +1312,7 @@ public: wxString str; if (self->GetDescription(&str)) { #if wxUSE_UNICODE - return PyUnicode_FromUnicode(str.c_str(), str.Len()); + return PyUnicode_FromWideChar(str.c_str(), str.Len()); #else return PyString_FromStringAndSize(str.c_str(), str.Len()); #endif @@ -1293,7 +1329,7 @@ public: wxString str; if (self->GetOpenCommand(&str, wxFileType::MessageParameters(filename, mimetype))) { #if wxUSE_UNICODE - return PyUnicode_FromUnicode(str.c_str(), str.Len()); + return PyUnicode_FromWideChar(str.c_str(), str.Len()); #else return PyString_FromStringAndSize(str.c_str(), str.Len()); #endif @@ -1310,7 +1346,7 @@ public: wxString str; if (self->GetPrintCommand(&str, wxFileType::MessageParameters(filename, mimetype))) { #if wxUSE_UNICODE - return PyUnicode_FromUnicode(str.c_str(), str.Len()); + return PyUnicode_FromWideChar(str.c_str(), str.Len()); #else return PyString_FromStringAndSize(str.c_str(), str.Len()); #endif @@ -1389,7 +1425,7 @@ public: // // use the extraDir parameter if you want to look for files in another // directory - void Initialize(int mailcapStyle = wxMAILCAP_STANDARD, + void Initialize(int mailcapStyle = wxMAILCAP_ALL, const wxString& extraDir = wxPyEmptyString); // and this function clears all the data from the manager @@ -1457,6 +1493,7 @@ public: %{ #if 0 %} +// See also wxPy_ReinitStockObjects in helpers.cpp extern wxMimeTypesManager* wxTheMimeTypesManager; %{ #endif @@ -1513,6 +1550,7 @@ wxART_ERROR = 'wxART_ERROR' wxART_QUESTION = 'wxART_QUESTION' wxART_WARNING = 'wxART_WARNING' wxART_INFORMATION = 'wxART_INFORMATION' +wxART_MISSING_IMAGE = 'wxART_MISSING_IMAGE' " %{ // Python aware wxArtProvider @@ -1525,7 +1563,7 @@ public: wxBitmap rval = wxNullBitmap; wxPyBeginBlockThreads(); if ((wxPyCBH_findCallback(m_myInst, "CreateBitmap"))) { - PyObject* so = wxPyConstructObject((void*)&size, "wxSize", 0); + PyObject* so = wxPyConstructObject((void*)&size, wxT("wxSize"), 0); PyObject* ro; wxBitmap* ptr; PyObject* s1, *s2; @@ -1580,8 +1618,6 @@ public: const wxString& client = wxPyART_OTHER, const wxSize& size = wxDefaultSize); - // Destroy caches & all providers - static void CleanUpProviders(); }; @@ -1615,9 +1651,8 @@ public: // Accessors wxString GetHistoryFile(int i) const; - // A synonym for GetNoHistoryFiles int GetCount() const; - int GetNoHistoryFiles() const; + %pragma(python) addtoclass = "GetNoHistoryFiles = GetCount" }; @@ -1685,18 +1720,91 @@ public: //---------------------------------------------------------------------- +%{ +#ifdef __WXMSW__ +#include +#include +#endif +%} + + +%inline %{ -// %{ -// #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 -// %} +void wxDrawWindowOnDC(wxWindow* window, const wxDC& dc, int method) +{ +#ifdef __WXMSW__ + + switch (method) + { + case 1: + // This one only partially works. Appears to be an undocumented + // "standard" convention that not all widgets adhear to. For + // example, for some widgets backgrounds or non-client areas may + // not be painted. + ::SendMessage(GetHwndOf(window), WM_PAINT, (long)GetHdcOf(dc), 0); + break; + + case 2: + // This one works much better, except for on XP. On Win2k nearly + // all widgets and their children are captured correctly[**]. On + // XP with Themes activated most native widgets draw only + // partially, if at all. Without themes it works just like on + // Win2k. + // + // ** For example the radio buttons in a wxRadioBox are not its + // children by default, but you can capture it via the panel + // instead, or change RADIOBTN_PARENT_IS_RADIOBOX in radiobox.cpp. + ::SendMessage(GetHwndOf(window), WM_PRINT, (long)GetHdcOf(dc), + PRF_CLIENT | PRF_NONCLIENT | PRF_CHILDREN | + PRF_ERASEBKGND | PRF_OWNED ); + break; + + case 3: + // This one is only defined in the latest SDK and is only + // available on XP. MSDN says it is similar to sending WM_PRINT + // so I expect that it will work similar to the above. Since it + // is avaialble only on XP, it can't be compiled like this and + // will have to be loaded dynamically. + // //::PrintWindow(GetHwndOf(window), GetHdcOf(dc), 0); //break; + + // fall through + + case 4: + // Use PrintWindow if available, or fallback to WM_PRINT + // otherwise. Unfortunately using PrintWindow is even worse than + // WM_PRINT. For most native widgets nothing is drawn to the dc + // at all, with or without Themes. + typedef BOOL (WINAPI *PrintWindow_t)(HWND, HDC, UINT); + static bool s_triedToLoad = false; + static PrintWindow_t pfnPrintWindow = NULL; + if ( !s_triedToLoad ) + { + + s_triedToLoad = true; + wxDynamicLibrary dllUser32(_T("user32.dll")); + if ( dllUser32.IsLoaded() ) + { + wxLogNull nolog; // Don't report errors here + pfnPrintWindow = (PrintWindow_t)dllUser32.GetSymbol(_T("PrintWindow")); + } + } + if (pfnPrintWindow) + { + printf("Using PrintWindow\n"); + pfnPrintWindow(GetHwndOf(window), GetHdcOf(dc), 0); + } + else + { + printf("Using WM_PRINT\n"); + ::SendMessage(GetHwndOf(window), WM_PRINT, (long)GetHdcOf(dc), + PRF_CLIENT | PRF_NONCLIENT | PRF_CHILDREN | PRF_ERASEBKGND | PRF_OWNED ); + } + } +#endif +} + +%} +//---------------------------------------------------------------------- %init %{