X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/50414e24a7aa082f2569666421d3ee1ea581a3cd..d3dcceb4363163ea8eeba75234ac938e690230c8:/include/wx/motif/window.h diff --git a/include/wx/motif/window.h b/include/wx/motif/window.h index cbe336c021..81c51482c0 100644 --- a/include/wx/motif/window.h +++ b/include/wx/motif/window.h @@ -27,6 +27,7 @@ #include "wx/list.h" #include "wx/region.h" #include "wx/accel.h" +#include "wx/intl.h" #define wxKEY_SHIFT 1 #define wxKEY_CTRL 2 @@ -53,7 +54,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; @@ -67,11 +68,11 @@ class WXDLLEXPORT wxIcon; class WXDLLEXPORT wxDC; class WXDLLEXPORT wxValidator; -#if USE_DRAG_AND_DROP +#if wxUSE_DRAG_AND_DROP class WXDLLEXPORT wxDropTarget; #endif -#if USE_WX_RESOURCES +#if wxUSE_WX_RESOURCES class WXDLLEXPORT wxResourceTable; class WXDLLEXPORT wxItemResource; #endif @@ -81,12 +82,39 @@ WXDLLEXPORT_DATA(extern const char*) wxPanelNameStr; WXDLLEXPORT_DATA(extern const wxSize) wxDefaultSize; WXDLLEXPORT_DATA(extern const wxPoint) wxDefaultPosition; +//----------------------------------------------------------------------------- +// wxClientData +//----------------------------------------------------------------------------- + +class wxClientData +{ +public: + wxClientData() { } + virtual ~wxClientData() { } +}; + +//----------------------------------------------------------------------------- +// wxStringClientData +//----------------------------------------------------------------------------- + +class wxStringClientData: public wxClientData +{ +public: + wxStringClientData() { } + wxStringClientData( wxString &data ) { m_data = data; } + void SetData( wxString &data ) { m_data = data; } + wxString GetData() const { return m_data; } + +private: + wxString m_data; +}; + class WXDLLEXPORT wxWindow: public wxEvtHandler { DECLARE_ABSTRACT_CLASS(wxWindow) - friend class wxDC; - friend class wxPaintDC; + friend class WXDLLEXPORT wxDC; + friend class WXDLLEXPORT wxWindowDC; public: wxWindow(); @@ -162,26 +190,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(); @@ -193,7 +235,7 @@ public: // Enable or disable the window virtual void Enable(bool enable); -#if USE_DRAG_AND_DROP +#if wxUSE_DRAG_AND_DROP // Associate a drop target with this window (if the window already had a drop // target, it's deleted!) and return the current drop target (may be NULL). void SetDropTarget(wxDropTarget *pDropTarget); @@ -203,8 +245,20 @@ public: // Accept files for dragging virtual void DragAcceptFiles(bool accept); + // tooltips + // create a tooltip with this text + void SetToolTip(const wxString& tip); + + // TODO +#if wxUSE_TOOLTIPS + // pointer may be NULL to remove the tooltip + void SetToolTip(wxToolTip *tooltip); + // get the current tooltip (may return NULL if none) + wxToolTip* GetToolTip() const { return m_tooltip; } +#endif + // 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; @@ -228,18 +282,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); @@ -269,20 +327,31 @@ 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); inline wxValidator *GetValidator() const; + virtual void SetClientObject( wxClientData *data ); + virtual wxClientData *GetClientObject(); + + virtual void SetClientData( void *data ); + virtual void *GetClientData(); + // Set/get the window's style inline void SetWindowStyleFlag(long flag); inline long GetWindowStyleFlag() const; + // Handle a control command + virtual void OnCommand(wxWindow& win, wxCommandEvent& event); + // Set/get event handler inline void SetEventHandler(wxEvtHandler *handler); inline wxEvtHandler *GetEventHandler() const; @@ -308,22 +377,13 @@ public: void SetConstraints(wxLayoutConstraints *c); // Set/get window background colour - inline virtual void SetBackgroundColour(const wxColour& col); + virtual void SetBackgroundColour(const wxColour& col); inline virtual wxColour GetBackgroundColour() const; // Set/get window foreground colour - inline virtual void SetForegroundColour(const wxColour& col); + virtual void SetForegroundColour(const wxColour& col); inline virtual wxColour GetForegroundColour() const; - // Set/get window default background colour (for children to inherit). - // NOTE: these may be removed in later revisions. - inline virtual void SetDefaultBackgroundColour(const wxColour& col); - inline virtual wxColour GetDefaultBackgroundColour(void) const; - - // Set/get window default foreground colour (for children to inherit) - inline virtual void SetDefaultForegroundColour(const wxColour& col); - inline virtual wxColour GetDefaultForegroundColour(void) const; - // Get the default button, if there is one inline virtual wxButton *GetDefaultItem() const; inline virtual void SetDefaultItem(wxButton *but); @@ -333,9 +393,10 @@ public: virtual void OnDefaultAction(wxControl *initiatingItem); // Resource loading -#if USE_WX_RESOURCES +#if wxUSE_WX_RESOURCES virtual bool LoadFromResource(wxWindow *parent, const wxString& resourceName, const wxResourceTable *table = NULL); - virtual wxControl *CreateItem(const wxItemResource *childResource, const wxResourceTable *table = NULL); + virtual wxControl *CreateItem(const wxItemResource* childResource, const wxItemResource* parentResource, + const wxResourceTable *table = (const wxResourceTable *) NULL); #endif virtual void GetTextExtent(const wxString& string, int *x, int *y, @@ -368,13 +429,15 @@ public: void OnEraseBackground(wxEraseEvent& event); void OnChar(wxKeyEvent& event); + void OnKeyDown(wxKeyEvent& event); + void OnKeyUp(wxKeyEvent& event); void OnPaint(wxPaintEvent& event); void OnIdle(wxIdleEvent& event); // Does this window want to accept keyboard focus? virtual bool AcceptsFocus() const; - virtual void PrepareDC( wxDC &dc ) {}; + virtual void PrepareDC( wxDC & WXUNUSED(dc) ) {}; public: @@ -433,6 +496,14 @@ public: virtual void GetClientSizeConstraint(int *w, int *h) const ; virtual void GetPositionConstraint(int *x, int *y) const ; + // Dialog units translations. Implemented in wincmn.cpp. + wxPoint ConvertPixelsToDialog(const wxPoint& pt) ; + wxPoint ConvertDialogToPixels(const wxPoint& pt) ; + inline wxSize ConvertPixelsToDialog(const wxSize& sz) + { wxPoint pt(ConvertPixelsToDialog(wxPoint(sz.x, sz.y))); return wxSize(pt.x, pt.y); } + inline wxSize ConvertDialogToPixels(const wxSize& sz) + { wxPoint pt(ConvertDialogToPixels(wxPoint(sz.x, sz.y))); return wxSize(pt.x, pt.y); } + wxObject *GetChild(int number) const ; // Generates a new id for controls @@ -450,6 +521,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 @@ -460,20 +532,62 @@ public: // message, e.g. arrange status bar, toolbar etc. virtual bool PreResize() { return TRUE; } - // Get main widget for this window + // Get main widget for this window, e.g. a text widget virtual WXWidget GetMainWidget() const; + // Get the widget that corresponds to the label (for font setting, label setting etc.) + virtual WXWidget GetLabelWidget() const { return GetMainWidget(); } // Get the client widget for this window (something we can // create other windows on) virtual WXWidget GetClientWidget() const; + // Get the top widget for this window, e.g. the scrolled widget parent + // of a multi-line text widget. Top means, top in the window hierarchy + // that implements this window. + virtual WXWidget GetTopWidget() const; virtual void SetMainWidget(WXWidget w) { m_mainWidget = w; } + bool CanAddEventHandler() const { return m_canAddEventHandler; } + void SetCanAddEventHandler(bool flag) { m_canAddEventHandler = flag; } // Get the underlying X window and display virtual WXWindow GetXWindow() const; virtual WXDisplay *GetXDisplay() const; + virtual WXPixmap GetBackingPixmap() const { return m_backingPixmap; } + inline int GetPixmapWidth() const { return m_pixmapWidth; } + inline int GetPixmapHeight() const { return m_pixmapHeight; } + + // Change properties + virtual void ChangeFont(bool keepOriginalSize = TRUE); // Change to the current font (often overridden) + virtual void DoChangeForegroundColour(WXWidget widget, wxColour& foregroundColour); + virtual void DoChangeBackgroundColour(WXWidget widget, wxColour& backgroundColour, bool changeArmColour = FALSE); + // These to be overridden as needed (may change several widgets) + virtual void ChangeBackgroundColour(); // Change background and foreground colour using current + // background colour setting (Motif generates + // foreground based on background) + virtual void ChangeForegroundColour(); // Change foreground colour using current + // foreground colour setting + + // Adds the widget to the hash table and adds event handlers. + bool AttachWidget (wxWindow* parent, WXWidget mainWidget, + WXWidget formWidget, int x, int y, int width, int height); + bool DetachWidget(WXWidget widget); + // 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: @@ -505,11 +619,11 @@ protected: wxColour m_backgroundColour ; wxColour m_foregroundColour ; - wxColour m_defaultBackgroundColour; - wxColour m_defaultForegroundColour; wxAcceleratorTable m_acceleratorTable; + wxClientData* m_clientObject; + void* m_clientData; -#if USE_DRAG_AND_DROP +#if wxUSE_DRAG_AND_DROP wxDropTarget *m_pDropTarget; // the current drop target or NULL #endif //USE_DRAG_AND_DROP @@ -520,13 +634,16 @@ public: public: /// Motif-specific + bool m_needsRefresh; // Do we need to repaint the backing store? + bool m_canAddEventHandler; bool m_button1Pressed; bool m_button2Pressed; bool m_button3Pressed; // 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; protected: WXWidget m_mainWidget; WXWidget m_hScrollBar; @@ -535,16 +652,16 @@ protected: WXWidget m_scrolledWindow; WXWidget m_drawingArea; bool m_winCaptured; - bool m_isShown; bool m_hScroll; bool m_vScroll; - bool m_hScrollingEnabled; - bool m_vScrollingEnabled; WXPixmap m_backingPixmap; int m_pixmapWidth; int m_pixmapHeight; int m_pixmapOffsetX; int m_pixmapOffsetY; + int m_scrollPosX; // Store the last scroll pos, + int m_scrollPosY; // since in wxWin the pos isn't + // set automatically by system DECLARE_EVENT_TABLE() }; @@ -558,8 +675,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; } @@ -569,14 +686,8 @@ inline wxEvtHandler *wxWindow::GetEventHandler() const { return m_windowEventHan inline void wxWindow::SetAutoLayout(bool a) { m_autoLayout = a; } inline bool wxWindow::GetAutoLayout() const { return m_autoLayout; } inline wxLayoutConstraints *wxWindow::GetConstraints() const { return m_constraints; } -inline void wxWindow::SetBackgroundColour(const wxColour& col) { m_backgroundColour = col; }; inline wxColour wxWindow::GetBackgroundColour() const { return m_backgroundColour; }; -inline void wxWindow::SetForegroundColour(const wxColour& col) { m_foregroundColour = col; }; inline wxColour wxWindow::GetForegroundColour() const { return m_foregroundColour; }; -inline void wxWindow::SetDefaultForegroundColour(const wxColour& col) { m_defaultForegroundColour = col; }; -inline wxColour wxWindow::GetDefaultForegroundColour(void) const { return m_defaultForegroundColour; }; -inline void wxWindow::SetDefaultBackgroundColour(const wxColour& col) { m_defaultBackgroundColour = col; }; -inline wxColour wxWindow::GetDefaultBackgroundColour(void) const { return m_defaultBackgroundColour; }; inline wxButton *wxWindow::GetDefaultItem() const { return m_defaultItem; } inline void wxWindow::SetDefaultItem(wxButton *but) { m_defaultItem = but; } @@ -595,5 +706,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_