X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1e4a197e4c60e461b8068b0619692ea083e30b8b..7ea515abfb0211078d9ffcd4420ef0b53f3fcabe:/wxPython/src/misc2.i?ds=sidebyside diff --git a/wxPython/src/misc2.i b/wxPython/src/misc2.i index 15edd72de2..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); @@ -343,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 @@ -379,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 %{ @@ -537,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(); }; @@ -607,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); @@ -1050,6 +1069,8 @@ public: bool SetCapture(wxWindow* win, int pollingFreq = 0); bool ReleaseCapture(); + + %pragma(python) addtoclass = "def __nonzero__(self): return self.IsOk()" }; //---------------------------------------------------------------------- @@ -1083,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); @@ -1247,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; } @@ -1257,14 +1280,18 @@ 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), - wxT("wxIcon"), TRUE)); + PyTuple_SetItem(tuple, 0, + wxPyConstructObject(new wxIcon(loc), wxT("wxIcon"), TRUE)); #if wxUSE_UNICODE PyTuple_SetItem(tuple, 1, PyUnicode_FromWideChar(iconFile.c_str(), iconFile.Len())); #else @@ -1398,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 @@ -1466,6 +1493,7 @@ public: %{ #if 0 %} +// See also wxPy_ReinitStockObjects in helpers.cpp extern wxMimeTypesManager* wxTheMimeTypesManager; %{ #endif @@ -1522,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 @@ -1622,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" }; @@ -1692,18 +1720,91 @@ public: //---------------------------------------------------------------------- +%{ +#ifdef __WXMSW__ +#include +#include +#endif +%} + -// %{ -// #if wxUSE_UNICODE -// #define ADD_STRING(dict, str) \ -// wxString tmp##str(str); \ -// PyDict_SetItemString(dict, #str, \ -// PyUnicode_FromWideChar(tmp##str.c_str(), tmp##str.Len())) -// #else -// #define ADD_STRING(dict, str) \ -// PyDict_SetItemString(d, #str, PyString_FromString(str)) -// #endif -// %} +%inline %{ + +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 %{