X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ea57084d103187771c0306a6e1684e32244d6101..b597caaca8ade60aa8ef750c94df803bbd8ba422:/include/wx/motif/window.h diff --git a/include/wx/motif/window.h b/include/wx/motif/window.h index a21bff3a0e..daa7e42b93 100644 --- a/include/wx/motif/window.h +++ b/include/wx/motif/window.h @@ -53,7 +53,7 @@ class WXDLLEXPORT wxCursor; class WXDLLEXPORT wxColourMap; class WXDLLEXPORT wxFont; class WXDLLEXPORT wxMenu; -class WXDLLEXPORT wxRectangle; +class WXDLLEXPORT wxRect; class WXDLLEXPORT wxBitmap; class WXDLLEXPORT wxSizer; class WXDLLEXPORT wxList; @@ -189,26 +189,40 @@ public: // Get overall window size virtual void GetSize(int *width, int *height) const; + virtual wxSize GetSize() const { int w, h; GetSize(& w, & h); return wxSize(w, h); } + virtual wxRect GetRect() const { int w, h; int x, y; GetPosition(& x, & y); GetSize(& w, & h); return wxRect(x, y, w, h); } // Get window position, relative to parent (or screen if no parent) virtual void GetPosition(int *x, int *y) const; + virtual wxPoint GetPosition() const { int x, y; GetPosition(&x, &y); return wxPoint(x, y); } // Get client (application-useable) size virtual void GetClientSize(int *width, int *height) const; + virtual wxSize GetClientSize() const { int w, h; GetClientSize(& w, & h); return wxSize(w, h); } // Set overall size and position virtual void SetSize(int x, int y, int width, int height, int sizeFlags = wxSIZE_AUTO); - inline virtual void SetSize(int width, int height) { SetSize(-1, -1, width, height, wxSIZE_USE_EXISTING); } - inline virtual void Move(int x, int y) { SetSize(x, y, -1, -1, wxSIZE_USE_EXISTING); } + virtual void SetSize(int width, int height) { SetSize(-1, -1, width, height, wxSIZE_USE_EXISTING); } + virtual void SetSize(const wxRect& rect, int sizeFlags = wxSIZE_AUTO) + { SetSize(rect.x, rect.y, rect.width, rect.height, sizeFlags); } + virtual void SetSize(const wxSize& size) { SetSize(-1, -1, size.x, size.y, wxSIZE_USE_EXISTING); } + + virtual void Move(int x, int y) { SetSize(x, y, -1, -1, wxSIZE_USE_EXISTING); } + virtual void Move(const wxPoint& pt) { SetSize(pt.x, pt.y, -1, -1, wxSIZE_USE_EXISTING); } // Set client size virtual void SetClientSize(int width, int size); + virtual void SetClientSize(const wxSize& sz) { SetClientSize(sz.x, sz.y); } // Convert client to screen coordinates virtual void ClientToScreen(int *x, int *y) const; + virtual wxPoint ClientToScreen(const wxPoint& pt) const + { int x = pt.x; int y = pt.y; ClientToScreen(& x, & y); return wxPoint(x, y); } // Convert screen to client coordinates virtual void ScreenToClient(int *x, int *y) const; + virtual wxPoint ScreenToClient(const wxPoint& pt) const + { int x = pt.x; int y = pt.y; ScreenToClient(& x, & y); return wxPoint(x, y); } // Set the focus to this window virtual void SetFocus(); @@ -231,7 +245,7 @@ public: virtual void DragAcceptFiles(bool accept); // Update region access - virtual wxRegion GetUpdateRegion() const; + virtual wxRegion& GetUpdateRegion() const; virtual bool IsExposed(int x, int y, int w, int h) const; virtual bool IsExposed(const wxPoint& pt) const; virtual bool IsExposed(const wxRect& rect) const; @@ -255,18 +269,22 @@ public: virtual bool PopupMenu(wxMenu *menu, int x, int y); // Send the window a refresh event - virtual void Refresh(bool eraseBack = TRUE, const wxRectangle *rect = NULL); + virtual void Refresh(bool eraseBack = TRUE, const wxRect *rect = NULL); // New functions that will replace the above. virtual void SetScrollbar(int orient, int pos, int thumbVisible, int range, bool refresh = TRUE); + // Helper functions for Motif + void CreateScrollbar(int orientation); + void DestroyScrollbar(int orientation); + virtual void SetScrollPos(int orient, int pos, bool refresh = TRUE); virtual int GetScrollPos(int orient) const; virtual int GetScrollRange(int orient) const; virtual int GetScrollThumb(int orient) const; - virtual void ScrollWindow(int dx, int dy, const wxRectangle *rect = NULL); + virtual void ScrollWindow(int dx, int dy, const wxRect *rect = NULL); // Caret manipulation virtual void CreateCaret(int w, int h); @@ -296,11 +314,13 @@ public: inline wxWindow *GetParent() const; inline void SetParent(wxWindow *p) ; inline wxWindow *GetGrandParent() const; - inline wxList *GetChildren() const; + inline wxList& GetChildren() const; + // Reparents this window to have the new parent. + virtual bool Reparent(wxWindow* parent); // Set/get the window's font virtual void SetFont(const wxFont& f); - inline virtual wxFont *GetFont() const; + inline virtual wxFont& GetFont() const; // Set/get the window's validator void SetValidator(const wxValidator& validator); @@ -486,6 +506,7 @@ public: /// Motif-specific + void ClearUpdateRects(); void CanvasGetSize(int* width, int* height) const; // If have drawing area void CanvasGetClientSize(int *width, int *height) const; void CanvasGetPosition(int *x, int *y) const; // If have drawing area @@ -518,7 +539,6 @@ public: virtual WXPixmap GetBackingPixmap() const { return m_backingPixmap; } inline int GetPixmapWidth() const { return m_pixmapWidth; } inline int GetPixmapHeight() const { return m_pixmapHeight; } - virtual WXRegion GetPaintRegion() const { return m_paintRegion; } // Change properties virtual void ChangeFont(bool keepOriginalSize = TRUE); // Change to the current font (often overridden) @@ -539,6 +559,20 @@ public: // Generates a paint event virtual void DoPaint(); + // How to implement accelerators. If we find a key event, + // translate to wxWindows wxKeyEvent form. Find a widget for the window. + // Now find a wxWindow for the widget. If there isn't one, go up the widget hierarchy + // trying to find one. Once one is found, call ProcessAccelerator for the + // window. If it returns TRUE (processed the event), skip the X event, + // otherwise carry on up the wxWindows window hierarchy calling ProcessAccelerator. + // If all return FALSE, process the X event as normal. + // Eventually we can implement OnCharHook the same way, but concentrate on accelerators + // for now. + // ProcessAccelerator must look at the current accelerator table, and try to find + // what menu id or window (beneath it) has this ID. Then construct an appropriate command + // event and send it. + virtual bool ProcessAccelerator(wxKeyEvent& event); + //////////////////////////////////////////////////////////////////////// //// PROTECTED DATA protected: @@ -592,9 +626,8 @@ public: // For double-click detection long m_lastTS; // last timestamp int m_lastButton; // last pressed button - wxList m_updateRects; // List of wxRectangles representing damaged region + wxList m_updateRects; // List of wxRects representing damaged region bool m_isShown; - WXRegion m_paintRegion; // Clip region generated by expose event protected: WXWidget m_mainWidget; WXWidget m_hScrollBar; @@ -626,8 +659,8 @@ inline void wxWindow::SetId(int id) { m_windowId = id; } inline wxWindow *wxWindow::GetParent() const { return m_windowParent; } inline void wxWindow::SetParent(wxWindow *p) { m_windowParent = p; } inline wxWindow *wxWindow::GetGrandParent() const { return (m_windowParent ? m_windowParent->m_windowParent : (wxWindow*) NULL); } -inline wxList *wxWindow::GetChildren() const { return m_children; } -inline wxFont *wxWindow::GetFont() const { return (wxFont *) & m_windowFont; } +inline wxList& wxWindow::GetChildren() const { return (wxList&) * m_children; } +inline wxFont& wxWindow::GetFont() const { return (wxFont&) m_windowFont; } inline wxString wxWindow::GetName() const { return m_windowName; } inline void wxWindow::SetName(const wxString& name) { m_windowName = name; } inline long wxWindow::GetWindowStyleFlag() const { return m_windowStyle; } @@ -657,5 +690,19 @@ wxWindow* WXDLLEXPORT wxGetActiveWindow(); WXDLLEXPORT_DATA(extern wxList) wxTopLevelWindows; +// A little class to switch off size optimization while an instance of the object +// exists +class WXDLLEXPORT wxNoOptimize: public wxObject +{ +public: + wxNoOptimize(); + ~wxNoOptimize(); + + static bool CanOptimize(); + +protected: + static int m_count; +}; + #endif // _WX_WINDOW_H_