1 ///////////////////////////////////////////////////////////////////////////// 2 // Name: wx/x11/window.h 3 // Purpose: wxWindow class 4 // Author: Julian Smart 5 // Modified by: 6 // Created: 17/09/98 7 // Copyright: (c) Julian Smart 8 // Licence: wxWindows licence 9 ///////////////////////////////////////////////////////////////////////////// 10 11 #ifndef _WX_WINDOW_H_ 12 #define _WX_WINDOW_H_ 13 14 #include "wx/region.h" 15 16 // ---------------------------------------------------------------------------- 17 // wxWindow class for Motif - see also wxWindowBase 18 // ---------------------------------------------------------------------------- 19 20 class WXDLLIMPEXP_CORE wxWindowX11 : public wxWindowBase 21 { 22 friend class WXDLLIMPEXP_FWD_CORE wxDC; 23 friend class WXDLLIMPEXP_FWD_CORE wxWindowDC; 24 25 public: wxWindowX11()26 wxWindowX11() { Init(); } 27 28 wxWindowX11(wxWindow *parent, 29 wxWindowID id, 30 const wxPoint& pos = wxDefaultPosition, 31 const wxSize& size = wxDefaultSize, 32 long style = 0, 33 const wxString& name = wxPanelNameStr) 34 { 35 Init(); 36 Create(parent, id, pos, size, style, name); 37 } 38 39 virtual ~wxWindowX11(); 40 41 bool Create(wxWindow *parent, 42 wxWindowID id, 43 const wxPoint& pos = wxDefaultPosition, 44 const wxSize& size = wxDefaultSize, 45 long style = 0, 46 const wxString& name = wxPanelNameStr); 47 48 virtual void Raise(); 49 virtual void Lower(); 50 51 virtual void SetLabel(const wxString& label); 52 virtual wxString GetLabel() const; 53 54 virtual bool Show( bool show = true ); 55 virtual bool Enable( bool enable = true ); 56 57 virtual void SetFocus(); 58 59 virtual void WarpPointer(int x, int y); 60 61 virtual void Refresh( bool eraseBackground = true, 62 const wxRect *rect = (const wxRect *) NULL ); 63 virtual void Update(); 64 65 virtual bool SetBackgroundColour( const wxColour &colour ); 66 virtual bool SetForegroundColour( const wxColour &colour ); 67 68 virtual bool SetCursor( const wxCursor &cursor ); 69 virtual bool SetFont( const wxFont &font ); 70 71 virtual int GetCharHeight() const; 72 virtual int GetCharWidth() const; 73 74 virtual void ScrollWindow( int dx, int dy, const wxRect* rect = NULL ); 75 76 #if wxUSE_DRAG_AND_DROP 77 virtual void SetDropTarget( wxDropTarget *dropTarget ); 78 #endif // wxUSE_DRAG_AND_DROP 79 80 // Accept files for dragging 81 virtual void DragAcceptFiles(bool accept); 82 83 // Get the unique identifier of a window GetHandle()84 virtual WXWindow GetHandle() const { return X11GetMainWindow(); } 85 86 // implementation from now on 87 // -------------------------- 88 89 // accessors 90 // --------- 91 92 // Get main X11 window 93 virtual WXWindow X11GetMainWindow() const; 94 95 // Get X11 window representing the client area 96 virtual WXWindow GetClientAreaWindow() const; 97 SetLastClick(int button,long timestamp)98 void SetLastClick(int button, long timestamp) 99 { m_lastButton = button; m_lastTS = timestamp; } 100 GetLastClickedButton()101 int GetLastClickedButton() const { return m_lastButton; } GetLastClickTime()102 long GetLastClickTime() const { return m_lastTS; } 103 104 // Gives window a chance to do something in response to a size message, e.g. 105 // arrange status bar, toolbar etc. 106 virtual bool PreResize(); 107 108 // Generates paint events from m_updateRegion 109 void SendPaintEvents(); 110 111 // Generates paint events from flag 112 void SendNcPaintEvents(); 113 114 // Generates erase events from m_clearRegion 115 void SendEraseEvents(); 116 117 // Clip to paint region? GetClipPaintRegion()118 bool GetClipPaintRegion() { return m_clipPaintRegion; } 119 120 // Return clear region GetClearRegion()121 wxRegion &GetClearRegion() { return m_clearRegion; } 122 123 void NeedUpdateNcAreaInIdle( bool update = true ) { m_updateNcArea = update; } 124 125 // Inserting into main window instead of client 126 // window. This is mostly for a wxWindow's own 127 // scrollbars. 128 void SetInsertIntoMain( bool insert = true ) { m_insertIntoMain = insert; } GetInsertIntoMain()129 bool GetInsertIntoMain() { return m_insertIntoMain; } 130 131 // sets the fore/background colour for the given widget 132 static void DoChangeForegroundColour(WXWindow widget, wxColour& foregroundColour); 133 static void DoChangeBackgroundColour(WXWindow widget, wxColour& backgroundColour, bool changeArmColour = false); 134 135 // I don't want users to override what's done in idle so everything that 136 // has to be done in idle time in order for wxX11 to work is done in 137 // OnInternalIdle 138 virtual void OnInternalIdle(); 139 140 protected: 141 // Responds to colour changes: passes event on to children. 142 void OnSysColourChanged(wxSysColourChangedEvent& event); 143 144 // For double-click detection 145 long m_lastTS; // last timestamp 146 int m_lastButton; // last pressed button 147 148 protected: 149 WXWindow m_mainWindow; 150 WXWindow m_clientWindow; 151 bool m_insertIntoMain; 152 153 bool m_winCaptured; 154 wxRegion m_clearRegion; 155 bool m_clipPaintRegion; 156 bool m_updateNcArea; 157 bool m_needsInputFocus; // Input focus set in OnIdle 158 159 // implement the base class pure virtuals 160 virtual void DoGetTextExtent(const wxString& string, 161 int *x, int *y, 162 int *descent = NULL, 163 int *externalLeading = NULL, 164 const wxFont *font = NULL) const; 165 virtual void DoClientToScreen( int *x, int *y ) const; 166 virtual void DoScreenToClient( int *x, int *y ) const; 167 virtual void DoGetPosition( int *x, int *y ) const; 168 virtual void DoGetSize( int *width, int *height ) const; 169 virtual void DoGetClientSize( int *width, int *height ) const; 170 virtual void DoSetSize(int x, int y, 171 int width, int height, 172 int sizeFlags = wxSIZE_AUTO); 173 virtual void DoSetClientSize(int width, int height); 174 virtual void DoMoveWindow(int x, int y, int width, int height); 175 virtual void DoSetSizeHints(int minW, int minH, 176 int maxW, int maxH, 177 int incW, int incH); 178 virtual void DoCaptureMouse(); 179 virtual void DoReleaseMouse(); 180 181 #if wxUSE_TOOLTIPS 182 virtual void DoSetToolTip( wxToolTip *tip ); 183 #endif // wxUSE_TOOLTIPS 184 185 private: 186 // common part of all ctors 187 void Init(); 188 189 DECLARE_DYNAMIC_CLASS(wxWindowX11) 190 wxDECLARE_NO_COPY_CLASS(wxWindowX11); 191 DECLARE_EVENT_TABLE() 192 }; 193 194 // ---------------------------------------------------------------------------- 195 // A little class to switch off `size optimization' while an instance of the 196 // object exists: this may be useful to temporarily disable the optimisation 197 // which consists to do nothing when the new size is equal to the old size - 198 // although quite useful usually to avoid flicker, sometimes it leads to 199 // undesired effects. 200 // 201 // Usage: create an instance of this class on the stack to disable the size 202 // optimisation, it will be reenabled as soon as the object goes out from scope. 203 // ---------------------------------------------------------------------------- 204 205 class WXDLLIMPEXP_CORE wxNoOptimize 206 { 207 public: wxNoOptimize()208 wxNoOptimize() { ms_count++; } ~wxNoOptimize()209 ~wxNoOptimize() { ms_count--; } 210 CanOptimize()211 static bool CanOptimize() { return ms_count == 0; } 212 213 protected: 214 static int ms_count; 215 }; 216 217 #endif // _WX_WINDOW_H_ 218