- wxWindow();
- wxWindow( wxWindow *parent, wxWindowID id,
- const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize,
- long style = 0, const wxString &name = wxPanelNameStr );
- bool Create( wxWindow *parent, wxWindowID id,
- const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize,
- long style = 0, const wxString &name = wxPanelNameStr );
- virtual ~wxWindow();
- bool Close( bool force = FALSE );
- virtual bool Destroy();
- virtual bool DestroyChildren();
-
- virtual void PrepareDC( wxDC &dc );
-
- virtual void SetSize( int x, int y, int width, int height,
- int sizeFlags = wxSIZE_AUTO );
- virtual void SetSize( int width, int height );
- virtual void Move( int x, int y );
- virtual void GetSize( int *width, int *height ) const;
- virtual void SetClientSize( int const width, int const height );
- virtual void GetClientSize( int *width, int *height ) const;
- virtual void GetPosition( int *x, int *y ) const;
- virtual void Centre( int direction = wxHORIZONTAL );
- virtual void Fit();
-
- void OnSize( wxSizeEvent &event );
- void OnIdle( wxIdleEvent& event );
-
- virtual bool Show( bool show );
- virtual void Enable( bool enable );
- virtual void MakeModal( bool modal );
- virtual bool IsEnabled() const { return m_isEnabled; };
- virtual void SetFocus();
- virtual bool OnClose();
-
- virtual void AddChild( wxWindow *child );
- wxList *GetChildren();
- virtual void RemoveChild( wxWindow *child );
- void SetReturnCode( int retCode );
- int GetReturnCode();
- wxWindow *GetParent();
-
- wxEvtHandler *GetEventHandler();
- void SetEventhandler( wxEvtHandler *handler );
-
- virtual wxValidator *GetValidator();
- virtual void SetValidator( wxValidator *validator );
-
- bool IsBeingDeleted();
-
- void SetId( wxWindowID id );
- wxWindowID GetId();
-
- void SetCursor( const wxCursor &cursor );
-
- virtual void Refresh( bool eraseBackground = TRUE, const wxRect *rect = NULL );
- virtual void Clear();
- virtual bool IsExposed( long x, long y );
- virtual bool IsExposed( long x, long y, long width, long height );
-
- virtual wxColour GetBackgroundColour() const;
- virtual void SetBackgroundColour( const wxColour &colour );
-
- virtual void SetDefaultBackgroundColour( const wxColour& col )
- { m_defaultBackgroundColour = col; };
- virtual wxColour GetDefaultBackgroundColour() const
- { return m_defaultBackgroundColour; };
- virtual void SetDefaultForegroundColour( const wxColour& col )
- { m_defaultForegroundColour = col; };
- virtual wxColour GetDefaultForegroundColour() const
- { return m_defaultForegroundColour; };
-
- virtual void SetFont( const wxFont &font );
- virtual wxFont *GetFont();
- // For backward compatibility
- inline virtual void SetButtonFont(const wxFont& font) { SetFont(font); }
- inline virtual void SetLabelFont(const wxFont& font) { SetFont(font); }
- inline virtual wxFont *GetLabelFont() { return GetFont(); };
- inline virtual wxFont *GetButtonFont() { return GetFont(); };
- virtual void SetWindowStyleFlag( long flag );
- virtual long GetWindowStyleFlag() const;
- virtual void CaptureMouse();
- virtual void ReleaseMouse();
- virtual void SetTitle( const wxString &title );
- virtual wxString GetTitle() const;
- virtual void SetName( const wxString &name );
- virtual wxString GetName() const;
- virtual wxString GetLabel() const;
-
- void OnSysColourChanged( wxSysColourChangedEvent &WXUNUSED(event) ) {};
-
- virtual bool IsShown() const;
- virtual bool IsRetained();
- virtual wxWindow *FindWindow( long id );
- virtual wxWindow *FindWindow( const wxString& name );
- void AllowDoubleClick( bool WXUNUSED(allow) ) {};
- void SetDoubleClick( bool WXUNUSED(allow) ) {};
- virtual void ClientToScreen( int *x, int *y );
- virtual void ScreenToClient( int *x, int *y );
-
- virtual bool Validate();
- virtual bool TransferDataToWindow();
- virtual bool TransferDataFromWindow();
- void OnInitDialog( wxInitDialogEvent &event );
- virtual void InitDialog();
-
- virtual void SetDropTarget( wxDropTarget *dropTarget );
- virtual wxDropTarget *GetDropTarget() const;
+ // Returns the default context which usually is anti-aliased
+ PangoContext *GTKGetPangoDefaultContext();
+
+#if wxUSE_TOOLTIPS
+ // applies tooltip to the widget (tip must be UTF-8 encoded)
+ virtual void GTKApplyToolTip(const char* tip);
+#endif // wxUSE_TOOLTIPS
+
+ // Called when a window should delay showing itself
+ // until idle time used in Reparent().
+ void GTKShowOnIdle() { m_showOnIdle = true; }
+
+ // This is called from the various OnInternalIdle methods
+ bool GTKShowFromOnIdle();
+
+ // is this window transparent for the mouse events (as wxStaticBox is)?
+ virtual bool GTKIsTransparentForMouse() const { return false; }
+
+ // Common scroll event handling code for wxWindow and wxScrollBar
+ wxEventType GTKGetScrollEventType(GtkRange* range);
+
+ // position and size of the window
+ int m_x, m_y;
+ int m_width, m_height;
+ int m_clientWidth, m_clientHeight;
+ // Whether the client size variables above are known to be correct
+ // (because they have been validated by a size-allocate) and should
+ // be used to report client size
+ bool m_useCachedClientSize;
+
+ // see the docs in src/gtk/window.cpp
+ GtkWidget *m_widget; // mostly the widget seen by the rest of GTK
+ GtkWidget *m_wxwindow; // mostly the client area as per wxWidgets
+
+ // label for use with GetLabelSetLabel
+ wxString m_gtkLabel;
+
+ // return true if the window is of a standard (i.e. not wxWidgets') class
+ bool IsOfStandardClass() const { return m_wxwindow == NULL; }
+
+ // this widget will be queried for GTK's focus events
+ GtkWidget *m_focusWidget;
+
+ void GTKDisableFocusOutEvent();
+ void GTKEnableFocusOutEvent();
+
+
+ // Input method support
+
+ // The IM context used for generic, i.e. non-native, windows.
+ //
+ // It might be a good idea to avoid allocating it unless key events from
+ // this window are really needed but currently we do it unconditionally.
+ //
+ // For native widgets (i.e. those for which IsOfStandardClass() returns
+ // true) it is NULL.
+ GtkIMContext* m_imContext;
+
+ // Pointer to the event being currently processed by the IME or NULL if not
+ // inside key handling.
+ GdkEventKey* m_imKeyEvent;
+
+ // This method generalizes gtk_im_context_filter_keypress(): for the
+ // generic windows it does just that but it's overridden by the classes
+ // wrapping native widgets that use IM themselves and so provide specific
+ // methods for accessing it such gtk_entry_im_context_filter_keypress().
+ virtual int GTKIMFilterKeypress(GdkEventKey* event) const;
+
+ // This method must be called from the derived classes "insert-text" signal
+ // handlers to check if the text is not being inserted by the IM and, if
+ // this is the case, generate appropriate wxEVT_CHAR events for it.
+ //
+ // Returns true if we did generate and process events corresponding to this
+ // text or false if we didn't handle it.
+ bool GTKOnInsertText(const char* text);
+
+ // This is just a helper of GTKOnInsertText() which is also used by GTK+
+ // "commit" signal handler.
+ bool GTKDoInsertTextFromIM(const char* text);
+
+
+ // indices for the arrays below
+ enum ScrollDir { ScrollDir_Horz, ScrollDir_Vert, ScrollDir_Max };
+
+ // horizontal/vertical scroll bar
+ GtkRange* m_scrollBar[ScrollDir_Max];
+
+ // horizontal/vertical scroll position
+ double m_scrollPos[ScrollDir_Max];
+
+ // return the scroll direction index corresponding to the given orientation
+ // (which is wxVERTICAL or wxHORIZONTAL)
+ static ScrollDir ScrollDirFromOrient(int orient)
+ {
+ return orient == wxVERTICAL ? ScrollDir_Vert : ScrollDir_Horz;
+ }
+
+ // return the orientation for the given scrolling direction
+ static int OrientFromScrollDir(ScrollDir dir)
+ {
+ return dir == ScrollDir_Horz ? wxHORIZONTAL : wxVERTICAL;
+ }
+
+ // find the direction of the given scrollbar (must be one of ours)
+ ScrollDir ScrollDirFromRange(GtkRange *range) const;
+
+ // set the current cursor for all GdkWindows making part of this widget
+ // (see GTKGetWindow)
+ void GTKUpdateCursor(bool update_self = true, bool recurse = true);
+
+ // extra (wxGTK-specific) flags
+ bool m_noExpose:1; // wxGLCanvas has its own redrawing
+ bool m_nativeSizeEvent:1; // wxGLCanvas sends wxSizeEvent upon "alloc_size"
+ bool m_isScrolling:1; // dragging scrollbar thumb?
+ bool m_clipPaintRegion:1; // true after ScrollWindow()
+ wxRegion m_nativeUpdateRegion; // not transformed for RTL
+ bool m_dirtyTabOrder:1; // tab order changed, GTK focus
+ // chain needs update
+ bool m_mouseButtonDown:1;
+
+ bool m_showOnIdle:1; // postpone showing the window until idle
+
+protected:
+ // implement the base class pure virtuals
+ virtual void DoGetTextExtent(const wxString& string,
+ int *x, int *y,
+ int *descent = NULL,
+ int *externalLeading = NULL,
+ const wxFont *font = NULL) const;
+ virtual void DoClientToScreen( int *x, int *y ) const;
+ virtual void DoScreenToClient( int *x, int *y ) const;
+ virtual void DoGetPosition( int *x, int *y ) const;
+ virtual void DoGetSize( int *width, int *height ) const;
+ virtual void DoGetClientSize( int *width, int *height ) const;
+ virtual void DoSetSize(int x, int y,
+ int width, int height,
+ int sizeFlags = wxSIZE_AUTO);
+ virtual void DoSetClientSize(int width, int height);
+ virtual wxSize DoGetBorderSize() const;
+ virtual void DoMoveWindow(int x, int y, int width, int height);
+ virtual void DoEnable(bool enable);
+
+#if wxUSE_MENUS_NATIVE
+ virtual bool DoPopupMenu( wxMenu *menu, int x, int y );
+#endif // wxUSE_MENUS_NATIVE
+
+ virtual void DoCaptureMouse();
+ virtual void DoReleaseMouse();
+
+ virtual void DoFreeze();
+ virtual void DoThaw();
+
+ void GTKFreezeWidget(GtkWidget *w);
+ void GTKThawWidget(GtkWidget *w);
+ void GTKDisconnect(void* instance);
+
+#if wxUSE_TOOLTIPS
+ virtual void DoSetToolTip( wxToolTip *tip );
+#endif // wxUSE_TOOLTIPS
+
+ // Create a GtkScrolledWindow containing the given widget (usually
+ // m_wxwindow but not necessarily) and assigns it to m_widget. Also shows
+ // the widget passed to it.
+ //
+ // Can be only called if we have either wxHSCROLL or wxVSCROLL in our
+ // style.
+ void GTKCreateScrolledWindowWith(GtkWidget* view);
+
+ virtual void DoMoveInTabOrder(wxWindow *win, WindowOrder move);
+ virtual bool DoNavigateIn(int flags);
+
+
+ // Copies m_children tab order to GTK focus chain:
+ void RealizeTabOrder();
+
+#ifndef __WXGTK3__
+ // Called by ApplyWidgetStyle (which is called by SetFont() and
+ // SetXXXColour etc to apply style changed to native widgets) to create
+ // modified GTK style with non-standard attributes.
+ GtkRcStyle* GTKCreateWidgetStyle();
+#endif
+
+ void GTKApplyWidgetStyle(bool forceStyle = false);
+
+ // helper function to ease native widgets wrapping, called by
+ // ApplyWidgetStyle -- override this, not ApplyWidgetStyle
+ virtual void DoApplyWidgetStyle(GtkRcStyle *style);
+
+ void GTKApplyStyle(GtkWidget* widget, GtkRcStyle* style);
+
+ // sets the border of a given GtkScrolledWindow from a wx style
+ static void GTKScrolledWindowSetBorder(GtkWidget* w, int style);
+
+ // Connect the given function to the specified signal on m_widget.
+ //
+ // This is just a wrapper for g_signal_connect() and returns the handler id
+ // just as it does.
+ unsigned long GTKConnectWidget(const char *signal, wxGTKCallback callback);
+
+ void ConstrainSize();
+