X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7f4dc78d358e4f33fbc53d9d4469a735cf0fd19b..246037e22990a4719c672c2e2a8b62b99cc4d49c:/src/gtk/window.cpp diff --git a/src/gtk/window.cpp b/src/gtk/window.cpp index 9b8cc2ee02..d62e188723 100644 --- a/src/gtk/window.cpp +++ b/src/gtk/window.cpp @@ -5,7 +5,7 @@ // Created: 01/02/97 // Id: // Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem -// Licence: wxWindows licence +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -25,7 +25,7 @@ #include "wx/dcclient.h" #include "wx/dnd.h" #include "wx/mdi.h" -#include "wx/tabctrl.h" +#include "wx/notebook.h" #include "gdk/gdkkeysyms.h" #include #include "wx/gtk/win_gtk.h" @@ -65,9 +65,9 @@ void gtk_window_expose_callback( GtkWidget *WXUNUSED(widget), GdkEventExpose *gd win->m_updateRegion.Union( gdk_event->area.x, gdk_event->area.y, - gdk_event->area.width, - gdk_event->area.height ); - + gdk_event->area.width, + gdk_event->area.height ); + if (gdk_event->count > 0) return; wxPaintEvent event( win->GetId() ); @@ -98,7 +98,7 @@ void gtk_window_draw_callback( GtkWidget *WXUNUSED(widget), GdkRectangle *rect, */ win->m_updateRegion.Union( rect->x, rect->y, rect->width, rect->height ); - + wxPaintEvent event( win->GetId() ); event.SetEventObject( win ); win->ProcessEvent( event ); @@ -108,7 +108,9 @@ void gtk_window_draw_callback( GtkWidget *WXUNUSED(widget), GdkRectangle *rect, //----------------------------------------------------------------------------- // size -// I don't any longer intercept GTK's internal resize events (except frames) +// I don't any longer intercept GTK's internal resize events, except +// for frames and from within MDI and tabbed windows (client area +// size determined internally by GTK, not wxWin). /* void gtk_window_size_callback( GtkWidget *WXUNUSED(widget), GtkAllocation* alloc, wxWindow *win ) @@ -163,74 +165,74 @@ gint gtk_window_key_press_callback( GtkWidget *WXUNUSED(widget), GdkEventKey *gd long key_code = 0; switch (gdk_event->keyval) { - case GDK_BackSpace: key_code = WXK_BACK; break; - case GDK_Tab: key_code = WXK_TAB; break; - case GDK_Linefeed: key_code = WXK_RETURN; break; - case GDK_Clear: key_code = WXK_CLEAR; break; - case GDK_Return: key_code = WXK_RETURN; break; - case GDK_Pause: key_code = WXK_PAUSE; break; - case GDK_Scroll_Lock: key_code = WXK_SCROLL; break; - case GDK_Escape: key_code = WXK_ESCAPE; break; - case GDK_Delete: key_code = WXK_DELETE; break; - case GDK_Home: key_code = WXK_HOME; break; - case GDK_Left: key_code = WXK_LEFT; break; - case GDK_Up: key_code = WXK_UP; break; - case GDK_Right: key_code = WXK_RIGHT; break; - case GDK_Down: key_code = WXK_DOWN; break; - case GDK_Prior: key_code = WXK_PRIOR; break; -// case GDK_Page_Up: key_code = WXK_PAGEUP; break; - case GDK_Next: key_code = WXK_NEXT; break; -// case GDK_Page_Down: key_code = WXK_PAGEDOWN; break; - case GDK_End: key_code = WXK_END; break; - case GDK_Begin: key_code = WXK_HOME; break; - case GDK_Select: key_code = WXK_SELECT; break; - case GDK_Print: key_code = WXK_PRINT; break; - case GDK_Execute: key_code = WXK_EXECUTE; break; - case GDK_Insert: key_code = WXK_INSERT; break; - case GDK_Num_Lock: key_code = WXK_NUMLOCK; break; - case GDK_KP_Tab: key_code = WXK_TAB; break; - case GDK_KP_Enter: key_code = WXK_RETURN; break; - case GDK_KP_Home: key_code = WXK_HOME; break; - case GDK_KP_Left: key_code = WXK_LEFT; break; - case GDK_KP_Up: key_code = WXK_UP; break; - case GDK_KP_Right: key_code = WXK_RIGHT; break; - case GDK_KP_Down: key_code = WXK_DOWN; break; - case GDK_KP_Prior: key_code = WXK_PRIOR; break; -// case GDK_KP_Page_Up: key_code = WXK_PAGEUP; break; - case GDK_KP_Next: key_code = WXK_NEXT; break; -// case GDK_KP_Page_Down: key_code = WXK_PAGEDOWN; break; - case GDK_KP_End: key_code = WXK_END; break; - case GDK_KP_Begin: key_code = WXK_HOME; break; - case GDK_KP_Insert: key_code = WXK_INSERT; break; - case GDK_KP_Delete: key_code = WXK_DELETE; break; - case GDK_KP_Multiply: key_code = WXK_MULTIPLY; break; - case GDK_KP_Add: key_code = WXK_ADD; break; - case GDK_KP_Separator: key_code = WXK_SEPARATOR; break; - case GDK_KP_Subtract: key_code = WXK_SUBTRACT; break; - case GDK_KP_Decimal: key_code = WXK_DECIMAL; break; - case GDK_KP_Divide: key_code = WXK_DIVIDE; break; - case GDK_KP_0: key_code = WXK_NUMPAD0; break; - case GDK_KP_1: key_code = WXK_NUMPAD1; break; - case GDK_KP_2: key_code = WXK_NUMPAD2; break; - case GDK_KP_3: key_code = WXK_NUMPAD3; break; - case GDK_KP_4: key_code = WXK_NUMPAD4; break; - case GDK_KP_5: key_code = WXK_NUMPAD5; break; - case GDK_KP_6: key_code = WXK_NUMPAD6; break; - case GDK_KP_7: key_code = WXK_NUMPAD7; break; - case GDK_KP_8: key_code = WXK_NUMPAD7; break; - case GDK_KP_9: key_code = WXK_NUMPAD9; break; - case GDK_F1: key_code = WXK_F1; break; - case GDK_F2: key_code = WXK_F2; break; - case GDK_F3: key_code = WXK_F3; break; - case GDK_F4: key_code = WXK_F4; break; - case GDK_F5: key_code = WXK_F5; break; - case GDK_F6: key_code = WXK_F6; break; - case GDK_F7: key_code = WXK_F7; break; - case GDK_F8: key_code = WXK_F8; break; - case GDK_F9: key_code = WXK_F9; break; - case GDK_F10: key_code = WXK_F10; break; - case GDK_F11: key_code = WXK_F11; break; - case GDK_F12: key_code = WXK_F12; break; + case GDK_BackSpace: key_code = WXK_BACK; break; + case GDK_Tab: key_code = WXK_TAB; break; + case GDK_Linefeed: key_code = WXK_RETURN; break; + case GDK_Clear: key_code = WXK_CLEAR; break; + case GDK_Return: key_code = WXK_RETURN; break; + case GDK_Pause: key_code = WXK_PAUSE; break; + case GDK_Scroll_Lock: key_code = WXK_SCROLL; break; + case GDK_Escape: key_code = WXK_ESCAPE; break; + case GDK_Delete: key_code = WXK_DELETE; break; + case GDK_Home: key_code = WXK_HOME; break; + case GDK_Left: key_code = WXK_LEFT; break; + case GDK_Up: key_code = WXK_UP; break; + case GDK_Right: key_code = WXK_RIGHT; break; + case GDK_Down: key_code = WXK_DOWN; break; + case GDK_Prior: key_code = WXK_PRIOR; break; +// case GDK_Page_Up: key_code = WXK_PAGEUP; break; + case GDK_Next: key_code = WXK_NEXT; break; +// case GDK_Page_Down: key_code = WXK_PAGEDOWN; break; + case GDK_End: key_code = WXK_END; break; + case GDK_Begin: key_code = WXK_HOME; break; + case GDK_Select: key_code = WXK_SELECT; break; + case GDK_Print: key_code = WXK_PRINT; break; + case GDK_Execute: key_code = WXK_EXECUTE; break; + case GDK_Insert: key_code = WXK_INSERT; break; + case GDK_Num_Lock: key_code = WXK_NUMLOCK; break; + case GDK_KP_Tab: key_code = WXK_TAB; break; + case GDK_KP_Enter: key_code = WXK_RETURN; break; + case GDK_KP_Home: key_code = WXK_HOME; break; + case GDK_KP_Left: key_code = WXK_LEFT; break; + case GDK_KP_Up: key_code = WXK_UP; break; + case GDK_KP_Right: key_code = WXK_RIGHT; break; + case GDK_KP_Down: key_code = WXK_DOWN; break; + case GDK_KP_Prior: key_code = WXK_PRIOR; break; +// case GDK_KP_Page_Up: key_code = WXK_PAGEUP; break; + case GDK_KP_Next: key_code = WXK_NEXT; break; +// case GDK_KP_Page_Down: key_code = WXK_PAGEDOWN; break; + case GDK_KP_End: key_code = WXK_END; break; + case GDK_KP_Begin: key_code = WXK_HOME; break; + case GDK_KP_Insert: key_code = WXK_INSERT; break; + case GDK_KP_Delete: key_code = WXK_DELETE; break; + case GDK_KP_Multiply: key_code = WXK_MULTIPLY; break; + case GDK_KP_Add: key_code = WXK_ADD; break; + case GDK_KP_Separator: key_code = WXK_SEPARATOR; break; + case GDK_KP_Subtract: key_code = WXK_SUBTRACT; break; + case GDK_KP_Decimal: key_code = WXK_DECIMAL; break; + case GDK_KP_Divide: key_code = WXK_DIVIDE; break; + case GDK_KP_0: key_code = WXK_NUMPAD0; break; + case GDK_KP_1: key_code = WXK_NUMPAD1; break; + case GDK_KP_2: key_code = WXK_NUMPAD2; break; + case GDK_KP_3: key_code = WXK_NUMPAD3; break; + case GDK_KP_4: key_code = WXK_NUMPAD4; break; + case GDK_KP_5: key_code = WXK_NUMPAD5; break; + case GDK_KP_6: key_code = WXK_NUMPAD6; break; + case GDK_KP_7: key_code = WXK_NUMPAD7; break; + case GDK_KP_8: key_code = WXK_NUMPAD7; break; + case GDK_KP_9: key_code = WXK_NUMPAD9; break; + case GDK_F1: key_code = WXK_F1; break; + case GDK_F2: key_code = WXK_F2; break; + case GDK_F3: key_code = WXK_F3; break; + case GDK_F4: key_code = WXK_F4; break; + case GDK_F5: key_code = WXK_F5; break; + case GDK_F6: key_code = WXK_F6; break; + case GDK_F7: key_code = WXK_F7; break; + case GDK_F8: key_code = WXK_F8; break; + case GDK_F9: key_code = WXK_F9; break; + case GDK_F10: key_code = WXK_F10; break; + case GDK_F11: key_code = WXK_F11; break; + case GDK_F12: key_code = WXK_F12; break; default: { if ((gdk_event->keyval >= 0x20) && (gdk_event->keyval <= 0xFF)) @@ -285,7 +287,7 @@ gint gtk_window_button_press_callback( GtkWidget *widget, GdkEventButton *gdk_ev printf( ".\n" ); */ - WXTYPE event_type = wxEVT_LEFT_DOWN; + wxEventType event_type = wxEVT_LEFT_DOWN; if (gdk_event->button == 1) { @@ -351,7 +353,7 @@ gint gtk_window_button_release_callback( GtkWidget *widget, GdkEventButton *gdk_ printf( ".\n" ); */ - WXTYPE event_type = 0; + wxEventType event_type = wxEVT_NULL; switch (gdk_event->button) { @@ -414,9 +416,9 @@ gint gtk_window_motion_notify_callback( GtkWidget *widget, GdkEventMotion *gdk_e //----------------------------------------------------------------------------- // focus_in -void gtk_window_focus_in_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WXUNUSED(event), wxWindow *win ) +gint gtk_window_focus_in_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WXUNUSED(event), wxWindow *win ) { - if (g_blockEventsOnDrag) return; + if (g_blockEventsOnDrag) return FALSE; if (win->m_wxwindow) { if (GTK_WIDGET_CAN_FOCUS(win->m_wxwindow)) @@ -431,7 +433,7 @@ void gtk_window_focus_in_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WXUNUS }; }; - if (!win->HasVMT()) return; + if (!win->HasVMT()) return FALSE; /* printf( "OnSetFocus from " ); @@ -444,22 +446,22 @@ void gtk_window_focus_in_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WXUNUS wxFocusEvent event( wxEVT_SET_FOCUS, win->GetId() ); event.SetEventObject( win ); - win->ProcessEvent( event ); + return win->ProcessEvent( event ); }; //----------------------------------------------------------------------------- // focus out -void gtk_window_focus_out_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WXUNUSED(event), wxWindow *win ) +gint gtk_window_focus_out_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WXUNUSED(event), wxWindow *win ) { - if (g_blockEventsOnDrag) return; + if (g_blockEventsOnDrag) return FALSE; if (win->m_wxwindow) { if (GTK_WIDGET_CAN_FOCUS(win->m_wxwindow)) GTK_WIDGET_UNSET_FLAGS (win->m_wxwindow, GTK_HAS_FOCUS); }; - if (!win->HasVMT()) return; + if (!win->HasVMT()) return FALSE; /* printf( "OnKillFocus from " ); @@ -470,7 +472,7 @@ void gtk_window_focus_out_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WXUNU wxFocusEvent event( wxEVT_KILL_FOCUS, win->GetId() ); event.SetEventObject( win ); - win->ProcessEvent( event ); + return win->ProcessEvent( event ); }; //----------------------------------------------------------------------------- @@ -499,7 +501,7 @@ void gtk_window_vscroll_callback( GtkWidget *WXUNUSED(widget), wxWindow *win ) printf( "Sending new value: %d.\n", i ); */ - int command = 0; + wxEventType command = wxEVT_NULL; float line_step = win->m_vAdjust->step_increment; float page_step = win->m_vAdjust->page_increment; @@ -543,7 +545,7 @@ void gtk_window_hscroll_callback( GtkWidget *WXUNUSED(widget), wxWindow *win ) printf( "Sending new value: %d.\n", i ); */ - int command = 0; + wxEventType command = wxEVT_NULL; float line_step = win->m_hAdjust->step_increment; float page_step = win->m_hAdjust->page_increment; @@ -577,7 +579,7 @@ void gtk_window_vscroll_change_callback( GtkWidget *WXUNUSED(widget), wxWindow * if (!win->HasVMT()) return; - int command = wxEVT_SCROLL_THUMBTRACK; + wxEventType command = wxEVT_SCROLL_THUMBTRACK; int value = (int)(win->m_vAdjust->value+0.5); wxScrollEvent event( command, win->GetId(), value, wxVERTICAL ); @@ -601,7 +603,7 @@ void gtk_window_hscroll_change_callback( GtkWidget *WXUNUSED(widget), wxWindow * if (!win->HasVMT()) return; - int command = wxEVT_SCROLL_THUMBTRACK; + wxEventType command = wxEVT_SCROLL_THUMBTRACK; int value = (int)(win->m_hAdjust->value+0.5); wxScrollEvent event( command, win->GetId(), value, wxHORIZONTAL ); @@ -648,27 +650,35 @@ bool gtk_window_destroy_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WXUNUSE //----------------------------------------------------------------------------- // enter -bool gtk_window_enter_callback( GtkWidget *widget, GdkEvent *WXUNUSED(event), wxWindow *win ) +bool gtk_window_enter_callback( GtkWidget *widget, GdkEventCrossing *gdk_event, wxWindow *win ) { + if (widget->window != gdk_event->window) return TRUE; + if (g_blockEventsOnDrag) return FALSE; if (widget->window) gdk_window_set_cursor( widget->window, win->m_cursor->GetCursor() ); - return TRUE; + wxMouseEvent event( wxEVT_ENTER_WINDOW ); + event.SetEventObject( win ); + return win->ProcessEvent( event ); }; //----------------------------------------------------------------------------- // leave -bool gtk_window_leave_callback( GtkWidget *widget, GdkEvent *WXUNUSED(event), wxWindow *WXUNUSED(win) ) +bool gtk_window_leave_callback( GtkWidget *widget, GdkEventCrossing *gdk_event, wxWindow *win ) { + if (widget->window != gdk_event->window) return TRUE; + if (g_blockEventsOnDrag) return FALSE; if (widget->window) gdk_window_set_cursor( widget->window, wxSTANDARD_CURSOR->GetCursor() ); - return TRUE; + wxMouseEvent event( wxEVT_LEAVE_WINDOW ); + event.SetEventObject( win ); + return win->ProcessEvent( event ); }; //----------------------------------------------------------------------------- @@ -678,12 +688,10 @@ bool gtk_window_leave_callback( GtkWidget *widget, GdkEvent *WXUNUSED(event), wx IMPLEMENT_DYNAMIC_CLASS(wxWindow,wxEvtHandler) BEGIN_EVENT_TABLE(wxWindow, wxEvtHandler) -// EVT_CHAR(wxWindow::OnChar) EVT_SIZE(wxWindow::OnSize) -// EVT_ERASE_BACKGROUND(wxWindow::OnEraseBackground) EVT_SYS_COLOUR_CHANGED(wxWindow::OnSysColourChanged) EVT_INIT_DIALOG(wxWindow::OnInitDialog) -// EVT_IDLE(wxWindow::OnIdle) + EVT_IDLE(wxWindow::OnIdle) END_EVENT_TABLE() wxWindow::wxWindow() @@ -722,18 +730,19 @@ wxWindow::wxWindow() m_drawingOffsetX = 0; m_drawingOffsetY = 0; m_pDropTarget = NULL; + m_resizing = FALSE; }; -wxWindow::wxWindow( wxWindow *parent, const wxWindowID id, - const wxPoint &pos, const wxSize &size, - const long style, const wxString &name ) +wxWindow::wxWindow( wxWindow *parent, wxWindowID id, + const wxPoint &pos, const wxSize &size, + long style, const wxString &name ) { Create( parent, id, pos, size, style, name ); }; -bool wxWindow::Create( wxWindow *parent, const wxWindowID id, - const wxPoint &pos, const wxSize &size, - const long style, const wxString &name ) +bool wxWindow::Create( wxWindow *parent, wxWindowID id, + const wxPoint &pos, const wxSize &size, + long style, const wxString &name ) { m_isShown = FALSE; m_isEnabled = TRUE; @@ -759,14 +768,14 @@ bool wxWindow::Create( wxWindow *parent, const wxWindowID id, m_vAdjust = gtk_range_get_adjustment( GTK_RANGE(s_window->vscrollbar) ); gtk_signal_connect (GTK_OBJECT (m_hAdjust), "value_changed", - (GtkSignalFunc) gtk_window_hscroll_callback, (gpointer) this ); + (GtkSignalFunc) gtk_window_hscroll_callback, (gpointer) this ); gtk_signal_connect (GTK_OBJECT (m_vAdjust), "value_changed", - (GtkSignalFunc) gtk_window_vscroll_callback, (gpointer) this ); - + (GtkSignalFunc) gtk_window_vscroll_callback, (gpointer) this ); + gtk_signal_connect (GTK_OBJECT (m_hAdjust), "changed", - (GtkSignalFunc) gtk_window_hscroll_change_callback, (gpointer) this ); + (GtkSignalFunc) gtk_window_hscroll_change_callback, (gpointer) this ); gtk_signal_connect (GTK_OBJECT (m_vAdjust), "changed", - (GtkSignalFunc) gtk_window_vscroll_change_callback, (gpointer) this ); + (GtkSignalFunc) gtk_window_vscroll_change_callback, (gpointer) this ); GtkViewport *viewport; viewport = GTK_VIEWPORT(s_window->viewport); @@ -869,9 +878,9 @@ wxWindow::~wxWindow(void) }; -void wxWindow::PreCreation( wxWindow *parent, const wxWindowID id, - const wxPoint &pos, const wxSize &size, - const long style, const wxString &name ) +void wxWindow::PreCreation( wxWindow *parent, wxWindowID id, + const wxPoint &pos, const wxSize &size, + long style, const wxString &name ) { if (m_needParent && (parent == NULL)) wxFatalError( "Need complete parent.", name ); @@ -905,6 +914,7 @@ void wxWindow::PreCreation( wxWindow *parent, const wxWindowID id, m_drawingOffsetX = 0; m_drawingOffsetY = 0; m_pDropTarget = NULL; + m_resizing = FALSE; } void wxWindow::PostCreation(void) @@ -997,7 +1007,7 @@ bool wxWindow::HasVMT(void) return m_hasVMT; }; -bool wxWindow::Close( const bool force ) +bool wxWindow::Close( bool force ) { wxCloseEvent event(wxEVT_CLOSE_WINDOW, m_windowId); event.SetEventObject(this); @@ -1024,7 +1034,7 @@ bool wxWindow::DestroyChildren(void) if ((child = (wxWindow *)node->Data()) != (wxWindow *)NULL) { delete child; - if (GetChildren()->Member(child)) delete node; + if (GetChildren()->Member(child)) delete node; }; }; }; @@ -1043,14 +1053,31 @@ void wxWindow::ImplementSetSize(void) void wxWindow::ImplementSetPosition(void) { + if (!m_parent) + { + if (IsKindOf(CLASSINFO(wxFrame)) || + IsKindOf(CLASSINFO(wxDialog))) + { + gtk_widget_set_uposition( m_widget, m_x, m_y ); + } + else + { + printf( "wxWindow::SetSize error.\n" ); + } + return; + } + if ((m_parent) && (m_parent->m_wxwindow)) gtk_myfixed_move( GTK_MYFIXED(m_parent->m_wxwindow), m_widget, m_x, m_y ); - else - gtk_widget_set_uposition( m_widget, m_x, m_y ); + + // Don't do anything for children of wxNotebook and wxMDIChildFrame }; -void wxWindow::SetSize( const int x, const int y, const int width, const int height, const int sizeFlags ) +void wxWindow::SetSize( int x, int y, int width, int height, int sizeFlags ) { + if (m_resizing) return; // I don't like recursions + m_resizing = TRUE; + int newX = x; int newY = y; int newW = width; @@ -1091,25 +1118,27 @@ void wxWindow::SetSize( const int x, const int y, const int width, const int hei wxSizeEvent event( wxSize(m_width,m_height), GetId() ); event.SetEventObject( this ); ProcessEvent( event ); + + m_resizing = FALSE; }; -void wxWindow::SetSize( const int width, const int height ) +void wxWindow::SetSize( int width, int height ) { SetSize( -1, -1, width, height, wxSIZE_USE_EXISTING ); }; -void wxWindow::Move( const int x, const int y ) +void wxWindow::Move( int x, int y ) { SetSize( x, y, -1, -1, wxSIZE_USE_EXISTING ); }; void wxWindow::GetSize( int *width, int *height ) const { - (*width) = m_width; - (*height) = m_height; + if (width) (*width) = m_width; + if (height) (*height) = m_height; }; -void wxWindow::SetClientSize( const int width, const int height ) +void wxWindow::SetClientSize( int width, int height ) { if (!m_wxwindow) { @@ -1144,7 +1173,7 @@ void wxWindow::SetClientSize( const int width, const int height ) if ((m_windowStyle & wxRAISED_BORDER) || (m_windowStyle & wxSUNKEN_BORDER) - ) + ) { dw += 2 * viewport_class->xthickness; dh += 2 * viewport_class->ythickness; @@ -1203,7 +1232,7 @@ void wxWindow::GetClientSize( int *width, int *height ) const if ((m_windowStyle & wxRAISED_BORDER) || (m_windowStyle & wxSUNKEN_BORDER) - ) + ) { dw += 2 * viewport_class->xthickness; dh += 2 * viewport_class->ythickness; @@ -1287,7 +1316,7 @@ void wxWindow::ScreenToClient( int *x, int *y ) if (y) *y -= org_y; }; -void wxWindow::Centre( const int direction ) +void wxWindow::Centre( int direction ) { int x = 0; int y = 0; @@ -1314,31 +1343,31 @@ void wxWindow::Centre( const int direction ) void wxWindow::Fit(void) { - int maxX = 0; - int maxY = 0; - wxNode *node = GetChildren()->First(); - while ( node ) - { - wxWindow *win = (wxWindow *)node->Data(); - int wx, wy, ww, wh; - win->GetPosition(&wx, &wy); - win->GetSize(&ww, &wh); - if ( wx + ww > maxX ) - maxX = wx + ww; - if ( wy + wh > maxY ) - maxY = wy + wh; - - node = node->Next(); - } - SetClientSize(maxX + 5, maxY + 5); + int maxX = 0; + int maxY = 0; + wxNode *node = GetChildren()->First(); + while ( node ) + { + wxWindow *win = (wxWindow *)node->Data(); + int wx, wy, ww, wh; + win->GetPosition(&wx, &wy); + win->GetSize(&ww, &wh); + if ( wx + ww > maxX ) + maxX = wx + ww; + if ( wy + wh > maxY ) + maxY = wy + wh; + + node = node->Next(); + } + SetClientSize(maxX + 5, maxY + 5); }; void wxWindow::OnSize( wxSizeEvent &WXUNUSED(event) ) { - if (GetAutoLayout()) Layout(); + //if (GetAutoLayout()) Layout(); }; -bool wxWindow::Show( const bool show ) +bool wxWindow::Show( bool show ) { if (show) gtk_widget_show( m_widget ); @@ -1348,14 +1377,14 @@ bool wxWindow::Show( const bool show ) return TRUE; }; -void wxWindow::Enable( const bool enable ) +void wxWindow::Enable( bool enable ) { m_isEnabled = enable; gtk_widget_set_sensitive( m_widget, enable ); if (m_wxwindow) gtk_widget_set_sensitive( m_wxwindow, enable ); }; -void wxWindow::MakeModal( const bool modal ) +void wxWindow::MakeModal( bool modal ) { return; // Disable all other windows @@ -1415,9 +1444,11 @@ void wxWindow::AddChild( wxWindow *child ) }; }; - if (IsKindOf(CLASSINFO(wxTabCtrl))) + // wxNotebooks are very special, so they have their own AddChild + + if (IsKindOf(CLASSINFO(wxNotebook))) { - wxTabCtrl *tab = (wxTabCtrl*)this; + wxNotebook *tab = (wxNotebook*)this; tab->AddChild( child ); return; }; @@ -1508,16 +1539,16 @@ void wxWindow::SetCursor( const wxCursor &cursor ) gdk_window_set_cursor( m_wxwindow->window, m_cursor->GetCursor() ); }; -void wxWindow::Refresh( const bool eraseBackground, const wxRect *rect ) +void wxWindow::Refresh( bool eraseBackground, const wxRect *rect ) { if (eraseBackground && m_wxwindow && m_wxwindow->window) { if (rect) gdk_window_clear_area( m_wxwindow->window, rect->x, - rect->y, - rect->width, - rect->height ); + rect->y, + rect->width, + rect->height ); else Clear(); }; @@ -1557,12 +1588,12 @@ void wxWindow::Refresh( const bool eraseBackground, const wxRect *rect ) }; }; -bool wxWindow::IsExposed( const long x, const long y ) +bool wxWindow::IsExposed( long x, long y ) { return (m_updateRegion.Contains( x, y ) != wxOutRegion ); }; -bool wxWindow::IsExposed( const long x, const long y, const long width, const long height ) +bool wxWindow::IsExposed( long x, long y, long width, long height ) { return (m_updateRegion.Contains( x, y, width, height ) != wxOutRegion ); }; @@ -1609,7 +1640,7 @@ bool wxWindow::TransferDataToWindow(void) { wxWindow *child = (wxWindow *)node->Data(); if (child->GetValidator() && /* child->GetValidator()->Ok() && */ - !child->GetValidator()->TransferToWindow() ) + !child->GetValidator()->TransferToWindow() ) { wxMessageBox( "Application Error", "Could not transfer data to window", wxOK|wxICON_EXCLAMATION ); return FALSE; @@ -1701,10 +1732,10 @@ void wxWindow::CaptureMouse(void) gtk_grab_add( connect_widget ); gdk_pointer_grab ( connect_widget->window, FALSE, (GdkEventMask) - (GDK_BUTTON_PRESS_MASK | - GDK_BUTTON_RELEASE_MASK | - GDK_POINTER_MOTION_MASK), - NULL, NULL, GDK_CURRENT_TIME ); + (GDK_BUTTON_PRESS_MASK | + GDK_BUTTON_RELEASE_MASK | + GDK_POINTER_MOTION_MASK), + NULL, NULL, GDK_CURRENT_TIME ); }; void wxWindow::ReleaseMouse(void) @@ -1739,7 +1770,7 @@ wxString wxWindow::GetName(void) const return (wxString&)m_windowName; }; -bool wxWindow::IsShown(void) +bool wxWindow::IsShown(void) const { return m_isShown; }; @@ -1749,7 +1780,7 @@ bool wxWindow::IsRetained(void) return FALSE; }; -wxWindow *wxWindow::FindWindow( const long id ) +wxWindow *wxWindow::FindWindow( long id ) { if (id == m_windowId) return this; wxNode *node = m_children.First(); @@ -1777,8 +1808,8 @@ wxWindow *wxWindow::FindWindow( const wxString& name ) return NULL; }; -void wxWindow::SetScrollbar( const int orient, const int pos, const int thumbVisible, - const int range, const bool WXUNUSED(refresh) ) +void wxWindow::SetScrollbar( int orient, int pos, int thumbVisible, + int range, bool WXUNUSED(refresh) ) { if (!m_wxwindow) return; @@ -1791,7 +1822,7 @@ void wxWindow::SetScrollbar( const int orient, const int pos, const int thumbVis if ((fabs(fpos-m_hAdjust->value) < 0.2) && (fabs(frange-m_hAdjust->upper) < 0.2) && - (fabs(fthumb-m_hAdjust->page_size) < 0.2)) + (fabs(fthumb-m_hAdjust->page_size) < 0.2)) return; m_hAdjust->lower = 0.0; @@ -1810,7 +1841,7 @@ void wxWindow::SetScrollbar( const int orient, const int pos, const int thumbVis if ((fabs(fpos-m_vAdjust->value) < 0.2) && (fabs(frange-m_vAdjust->upper) < 0.2) && - (fabs(fthumb-m_vAdjust->page_size) < 0.2)) + (fabs(fthumb-m_vAdjust->page_size) < 0.2)) return; m_vAdjust->lower = 0.0; @@ -1820,7 +1851,7 @@ void wxWindow::SetScrollbar( const int orient, const int pos, const int thumbVis m_vAdjust->page_increment = (float)(wxMax(fthumb-2,0)); m_vAdjust->page_size = fthumb; }; - + if (m_wxwindow->window) { if (orient == wxHORIZONTAL) @@ -1828,11 +1859,11 @@ void wxWindow::SetScrollbar( const int orient, const int pos, const int thumbVis else gtk_signal_emit_by_name( GTK_OBJECT(m_vAdjust), "changed" ); -// gtk_widget_set_usize( m_widget, m_width, m_height ); + gtk_widget_set_usize( m_widget, m_width, m_height ); }; }; -void wxWindow::SetScrollPos( const int orient, const int pos, const bool WXUNUSED(refresh) ) +void wxWindow::SetScrollPos( int orient, int pos, bool WXUNUSED(refresh) ) { if (!m_wxwindow) return; @@ -1861,7 +1892,7 @@ void wxWindow::SetScrollPos( const int orient, const int pos, const bool WXUNUSE }; }; -int wxWindow::GetScrollThumb( const int orient ) const +int wxWindow::GetScrollThumb( int orient ) const { if (!m_wxwindow) return 0; @@ -1871,7 +1902,7 @@ int wxWindow::GetScrollThumb( const int orient ) const return (int)(m_vAdjust->page_size+0.5); }; -int wxWindow::GetScrollPos( const int orient ) const +int wxWindow::GetScrollPos( int orient ) const { if (!m_wxwindow) return 0; @@ -1881,7 +1912,7 @@ int wxWindow::GetScrollPos( const int orient ) const return (int)(m_vAdjust->value+0.5); }; -int wxWindow::GetScrollRange( const int orient ) const +int wxWindow::GetScrollRange( int orient ) const { if (!m_wxwindow) return 0; @@ -1891,7 +1922,7 @@ int wxWindow::GetScrollRange( const int orient ) const return (int)(m_vAdjust->upper+0.5); }; -void wxWindow::ScrollWindow( const int dx, const int dy, const wxRect* WXUNUSED(rect) ) +void wxWindow::ScrollWindow( int dx, int dy, const wxRect* WXUNUSED(rect) ) { if (!m_wxwindow) return; @@ -1985,7 +2016,7 @@ void wxWindow::SetConstraints( wxLayoutConstraints *constraints ) } ; -void wxWindow::SetAutoLayout( const bool autoLayout ) +void wxWindow::SetAutoLayout( bool autoLayout ) { m_autoLayout = autoLayout; }; @@ -2153,7 +2184,7 @@ bool wxWindow::LayoutPhase2(int *noChanges) } // Do a phase of evaluating child constraints -bool wxWindow::DoPhase(const int phase) +bool wxWindow::DoPhase(int phase) { int noIterations = 0; int maxIterations = 500; @@ -2221,7 +2252,7 @@ void wxWindow::ResetConstraints(void) // Need to distinguish between setting the 'fake' size for // windows and sizers, and setting the real values. -void wxWindow::SetConstraintSizes(const bool recurse) +void wxWindow::SetConstraintSizes(bool recurse) { wxLayoutConstraints *constr = GetConstraints(); if (constr && constr->left.GetDone() && constr->right.GetDone() && @@ -2250,10 +2281,10 @@ void wxWindow::SetConstraintSizes(const bool recurse) char *windowClass = this->GetClassInfo()->GetClassName(); wxString winName; - if (GetName() == "") - winName = "unnamed"; - else - winName = GetName(); + if (GetName() == "") + winName = "unnamed"; + else + winName = GetName(); wxDebugMsg("Constraint(s) not satisfied for window of type %s, name %s:\n", (const char *)windowClass, (const char *)winName); if (!constr->left.GetDone()) wxDebugMsg(" unsatisfied 'left' constraint.\n"); @@ -2284,7 +2315,7 @@ void wxWindow::SetConstraintSizes(const bool recurse) void wxWindow::TransformSizerToActual(int *x, int *y) const { if (!m_sizerParent || m_sizerParent->IsKindOf(CLASSINFO(wxDialog)) || - m_sizerParent->IsKindOf(CLASSINFO(wxFrame)) ) + m_sizerParent->IsKindOf(CLASSINFO(wxFrame)) ) return; int xp, yp; @@ -2294,24 +2325,24 @@ void wxWindow::TransformSizerToActual(int *x, int *y) const *y += yp; } -void wxWindow::SizerSetSize(const int x, const int y, const int w, const int h) +void wxWindow::SizerSetSize(int x, int y, int w, int h) { - int xx = x; - int yy = y; + int xx = x; + int yy = y; TransformSizerToActual(&xx, &yy); SetSize(xx, yy, w, h); } -void wxWindow::SizerMove(const int x, const int y) +void wxWindow::SizerMove(int x, int y) { - int xx = x; - int yy = y; + int xx = x; + int yy = y; TransformSizerToActual(&xx, &yy); Move(xx, yy); } // Only set the size/position of the constraint (if any) -void wxWindow::SetSizeConstraint(const int x, const int y, const int w, const int h) +void wxWindow::SetSizeConstraint(int x, int y, int w, int h) { wxLayoutConstraints *constr = GetConstraints(); if (constr) @@ -2339,7 +2370,7 @@ void wxWindow::SetSizeConstraint(const int x, const int y, const int w, const in } } -void wxWindow::MoveConstraint(const int x, const int y) +void wxWindow::MoveConstraint(int x, int y) { wxLayoutConstraints *constr = GetConstraints(); if (constr) @@ -2393,3 +2424,14 @@ void wxWindow::GetPositionConstraint(int *x, int *y) const GetPosition(x, y); } +bool wxWindow::AcceptsFocus() const +{ + return IsEnabled() && IsShown(); +} + +void wxWindow::OnIdle(wxIdleEvent& event) +{ + UpdateWindowUI(); +} + +#include "../common/wincmn.cpp"