1 ///////////////////////////////////////////////////////////////////////////// 
   2 // Name:        wx/gtk1/window.h 
   4 // Author:      Robert Roebling 
   6 // Copyright:   (c) 1998 Robert Roebling 
   7 // Licence:     wxWindows licence 
   8 ///////////////////////////////////////////////////////////////////////////// 
  10 #ifndef __GTKWINDOWH__ 
  11 #define __GTKWINDOWH__ 
  13 // helper structure that holds class that holds GtkIMContext object and 
  14 // some additional data needed for key events processing 
  17 //----------------------------------------------------------------------------- 
  18 // callback definition for inserting a window (internal) 
  19 //----------------------------------------------------------------------------- 
  21 class WXDLLIMPEXP_CORE wxWindowGTK
; 
  22 typedef void (*wxInsertChildFunction
)( wxWindowGTK
*, wxWindowGTK
* ); 
  24 //----------------------------------------------------------------------------- 
  26 //----------------------------------------------------------------------------- 
  28 class WXDLLIMPEXP_CORE wxWindowGTK 
: public wxWindowBase
 
  31     // creating the window 
  32     // ------------------- 
  34     wxWindowGTK(wxWindow 
*parent
, 
  36                 const wxPoint
& pos 
= wxDefaultPosition
, 
  37                 const wxSize
& size 
= wxDefaultSize
, 
  39                 const wxString
& name 
= wxPanelNameStr
); 
  40     bool Create(wxWindow 
*parent
, 
  42                 const wxPoint
& pos 
= wxDefaultPosition
, 
  43                 const wxSize
& size 
= wxDefaultSize
, 
  45                 const wxString
& name 
= wxPanelNameStr
); 
  46     virtual ~wxWindowGTK(); 
  48     // implement base class (pure) virtual methods 
  49     // ------------------------------------------- 
  51     virtual void SetLabel(const wxString
& WXUNUSED(label
)) { } 
  52     virtual wxString 
GetLabel() const { return wxEmptyString
; } 
  54     virtual bool Destroy(); 
  59     virtual bool Show( bool show 
= true ); 
  60     virtual bool Enable( bool enable 
= true ); 
  62     virtual void SetWindowStyleFlag( long style 
); 
  64     virtual bool IsRetained() const; 
  66     virtual void SetFocus(); 
  67     virtual bool AcceptsFocus() const; 
  69     virtual bool Reparent( wxWindowBase 
*newParent 
); 
  71     virtual void WarpPointer(int x
, int y
); 
  73     virtual void Refresh( bool eraseBackground 
= true, 
  74                           const wxRect 
*rect 
= (const wxRect 
*) NULL 
); 
  75     virtual void Update(); 
  76     virtual void ClearBackground(); 
  78     virtual bool SetBackgroundColour( const wxColour 
&colour 
); 
  79     virtual bool SetForegroundColour( const wxColour 
&colour 
); 
  80     virtual bool SetCursor( const wxCursor 
&cursor 
); 
  81     virtual bool SetFont( const wxFont 
&font 
); 
  83     virtual bool SetBackgroundStyle(wxBackgroundStyle style
) ; 
  85     virtual int GetCharHeight() const; 
  86     virtual int GetCharWidth() const; 
  87     virtual void GetTextExtent(const wxString
& string
, 
  89                                int *descent 
= (int *) NULL
, 
  90                                int *externalLeading 
= (int *) NULL
, 
  91                                const wxFont 
*theFont 
= (const wxFont 
*) NULL
) 
  94 #if wxUSE_MENUS_NATIVE 
  95     virtual bool DoPopupMenu( wxMenu 
*menu
, int x
, int y 
); 
  96 #endif // wxUSE_MENUS_NATIVE 
  98     virtual void SetScrollbar( int orient
, int pos
, int thumbVisible
, 
  99                                int range
, bool refresh 
= true ); 
 100     virtual void SetScrollPos( int orient
, int pos
, bool refresh 
= true ); 
 101     virtual int GetScrollPos( int orient 
) const; 
 102     virtual int GetScrollThumb( int orient 
) const; 
 103     virtual int GetScrollRange( int orient 
) const; 
 104     virtual void ScrollWindow( int dx
, int dy
, 
 105                                const wxRect
* rect 
= (wxRect 
*) NULL 
); 
 107 #if wxUSE_DRAG_AND_DROP 
 108     virtual void SetDropTarget( wxDropTarget 
*dropTarget 
); 
 109 #endif // wxUSE_DRAG_AND_DROP 
 114     virtual WXWidget 
GetHandle() const { return m_widget
; } 
 116     // I don't want users to override what's done in idle so everything that 
 117     // has to be done in idle time in order for wxGTK to work is done in 
 119     virtual void OnInternalIdle(); 
 121     // Internal represention of Update() 
 124     // For compatibility across platforms (not in event table) 
 125     void OnIdle(wxIdleEvent
& WXUNUSED(event
)) {} 
 127     // wxGTK-specific: called recursively by Enable, 
 128     // to give widgets an opportunity to correct their colours after they 
 129     // have been changed by Enable 
 130     virtual void OnParentEnable( bool WXUNUSED(enable
) ) {} 
 132     // Used by all window classes in the widget creation process. 
 133     bool PreCreation( wxWindowGTK 
*parent
, const wxPoint 
&pos
, const wxSize 
&size 
); 
 136     // Internal addition of child windows. differs from class 
 137     // to class not by using virtual functions but by using 
 138     // the m_insertCallback. 
 139     void DoAddChild(wxWindowGTK 
*child
); 
 141     // This methods sends wxPaintEvents to the window. It reads the 
 142     // update region, breaks it up into rects and sends an event 
 143     // for each rect. It is also responsible for background erase 
 144     // events and NC paint events. It is called from "draw" and 
 145     // "expose" handlers as well as from ::Update() 
 146     void GtkSendPaintEvents(); 
 148     // The methods below are required because many native widgets 
 149     // are composed of several subwidgets and setting a style for 
 150     // the widget means setting it for all subwidgets as well. 
 151     // also, it is not clear which native widget is the top 
 152     // widget where (most of) the input goes. even tooltips have 
 153     // to be applied to all subwidgets. 
 154     virtual GtkWidget
* GetConnectWidget(); 
 155     virtual bool IsOwnGtkWindow( GdkWindow 
*window 
); 
 156     void ConnectWidget( GtkWidget 
*widget 
); 
 159     virtual void ApplyToolTip( GtkTooltips 
*tips
, const wxChar 
*tip 
); 
 160 #endif // wxUSE_TOOLTIPS 
 162     // Call after modifing the value of m_hAdjust or m_vAdjust to bring the 
 163     // scrolbar in sync (this does not generate any wx events) 
 164     void GtkUpdateScrollbar(int orient
); 
 166     // Called from GTK signal handlers. it indicates that 
 167     // the layouting functions have to be called later on 
 168     // (i.e. in idle time, implemented in OnInternalIdle() ). 
 169     void GtkUpdateSize() { m_sizeSet 
= false; } 
 171     // fix up the mouse event coords, used by wxListBox only so far 
 172     virtual void FixUpMouseEvent(GtkWidget 
* WXUNUSED(widget
), 
 173                                  wxCoord
& WXUNUSED(x
), 
 174                                  wxCoord
& WXUNUSED(y
)) { } 
 176     // is this window transparent for the mouse events (as wxStaticBox is)? 
 177     virtual bool IsTransparentForMouse() const { return false; } 
 179     // is this a radiobutton (used by radiobutton code itself only)? 
 180     virtual bool IsRadioButton() const { return false; } 
 182     // position and size of the window 
 184     int                  m_width
, m_height
; 
 185     int                  m_oldClientWidth
,m_oldClientHeight
; 
 187     // see the docs in src/gtk/window.cpp 
 188     GtkWidget           
*m_widget
;          // mostly the widget seen by the rest of GTK 
 189     GtkWidget           
*m_wxwindow
;        // mostly the client area as per wxWidgets 
 191     // this widget will be queried for GTK's focus events 
 192     GtkWidget           
*m_focusWidget
; 
 195     // XIM support for wxWidgets 
 200     // The area to be cleared (and not just refreshed) 
 201     // We cannot make this distinction under GTK 2.0. 
 202     wxRegion             m_clearRegion
; 
 205     GtkAdjustment       
*m_hAdjust
,*m_vAdjust
; 
 206     float                m_oldHorizontalPos
; 
 207     float                m_oldVerticalPos
; 
 209     // extra (wxGTK-specific) flags 
 210     bool                 m_needParent
:1;        // ! wxFrame, wxDialog, wxNotebookPage ? 
 211     bool                 m_noExpose
:1;          // wxGLCanvas has its own redrawing 
 212     bool                 m_nativeSizeEvent
:1;   // wxGLCanvas sends wxSizeEvent upon "alloc_size" 
 213     bool                 m_hasScrolling
:1; 
 217     bool                 m_acceptsFocus
:1;      // true if not static 
 218     bool                 m_hasFocus
:1;          // true if == FindFocus() 
 219     bool                 m_isScrolling
:1;       // dragging scrollbar thumb? 
 220     bool                 m_clipPaintRegion
:1;   // true after ScrollWindow() 
 221     bool                 m_needsStyleChange
:1;  // May not be able to change 
 222                                                 // background style until OnIdle 
 224     // C++ has no virtual methods in the constrcutor of any class but we need 
 225     // different methods of inserting a child window into a wxFrame, 
 226     // wxMDIFrame, wxNotebook etc. this is the callback that will get used. 
 227     wxInsertChildFunction  m_insertCallback
; 
 229     // implement the base class pure virtuals 
 230     virtual void DoClientToScreen( int *x
, int *y 
) const; 
 231     virtual void DoScreenToClient( int *x
, int *y 
) const; 
 232     virtual void DoGetPosition( int *x
, int *y 
) const; 
 233     virtual void DoGetSize( int *width
, int *height 
) const; 
 234     virtual void DoGetClientSize( int *width
, int *height 
) const; 
 235     virtual void DoSetSize(int x
, int y
, 
 236                            int width
, int height
, 
 237                            int sizeFlags 
= wxSIZE_AUTO
); 
 238     virtual void DoSetClientSize(int width
, int height
); 
 239     virtual void DoMoveWindow(int x
, int y
, int width
, int height
); 
 241     virtual void DoCaptureMouse(); 
 242     virtual void DoReleaseMouse(); 
 245     virtual void DoSetToolTip( wxToolTip 
*tip 
); 
 246 #endif // wxUSE_TOOLTIPS 
 249     // common part of all ctors (not virtual because called from ctor) 
 252     // Called by ApplyWidgetStyle (which is called by SetFont() and 
 253     // SetXXXColour etc to apply style changed to native widgets) to create 
 254     // modified GTK style with non-standard attributes. If forceStyle=true, 
 255     // creates empty GtkRcStyle if there are no modifications, otherwise 
 256     // returns NULL in such case. 
 257     GtkRcStyle 
*CreateWidgetStyle(bool forceStyle 
= false); 
 259     // Overridden in many GTK widgets who have to handle subwidgets 
 260     virtual void ApplyWidgetStyle(bool forceStyle 
= false); 
 262     // helper function to ease native widgets wrapping, called by 
 263     // ApplyWidgetStyle -- override this, not ApplyWidgetStyle 
 264     virtual void DoApplyWidgetStyle(GtkRcStyle 
*style
); 
 267     DECLARE_DYNAMIC_CLASS(wxWindowGTK
) 
 268     DECLARE_NO_COPY_CLASS(wxWindowGTK
) 
 271 extern WXDLLIMPEXP_CORE wxWindow 
*wxFindFocusedChild(wxWindowGTK 
*win
); 
 273 #endif // __GTKWINDOWH__