#include "wx/notebook.h"
#include "wx/tabctrl.h"
#include "wx/tooltip.h"
+#include "wx/statusbr.h"
// TODO remove the line below, just for lookup-up convenience CS
#include "wx/window.h"
EVT_SYS_COLOUR_CHANGED(wxWindow::OnSysColourChanged)
EVT_INIT_DIALOG(wxWindow::OnInitDialog)
EVT_IDLE(wxWindow::OnIdle)
-// EVT_SCROLL(wxWindow::OnScroll)
+ EVT_SET_FOCUS(wxWindow::OnSetFocus)
END_EVENT_TABLE()
#endif
m_width = WidthDefault( size.x );
m_height = HeightDefault( size.y ) ;
- if ( ! IsKindOf( CLASSINFO ( wxControl ) ) )
+ if ( ! IsKindOf( CLASSINFO ( wxControl ) ) && ! IsKindOf( CLASSINFO( wxStatusBar ) ) )
{
MacCreateScrollBars( style ) ;
}
void wxWindow::SetFocus()
{
+ if ( gFocusWindow == this )
+ return ;
+
if ( AcceptsFocus() )
{
if (gFocusWindow )
DoSetSize( x,y, width, height ) ;
}
+// set the size of the window: if the dimensions are positive, just use them,
+// but if any of them is equal to -1, it means that we must find the value for
+// it ourselves (unless sizeFlags contains wxSIZE_ALLOW_MINUS_ONE flag, in
+// which case -1 is a valid value for x and y)
+//
+// If sizeFlags contains wxSIZE_AUTO_WIDTH/HEIGHT flags (default), we calculate
+// the width/height to best suit our contents, otherwise we reuse the current
+// width/height
void wxWindow::DoSetSize(int x, int y, int width, int height, int sizeFlags)
{
actualX = currentX;
if (y == -1 && !(sizeFlags & wxSIZE_ALLOW_MINUS_ONE))
actualY = currentY;
- if (width == -1)
+
+ wxSize size( -1 , -1 ) ;
+
+ if (width == -1 || height == -1 )
+ {
+ size = DoGetBestSize() ;
+ }
+
+ if ( width == -1 )
+ {
+ if ( sizeFlags & wxSIZE_AUTO_WIDTH )
+ {
+ actualWidth = size.x ;
+ if ( actualWidth == -1 )
+ actualWidth = 80 ;
+ }
+ else
+ {
actualWidth = currentW ;
+ }
+ }
if (height == -1)
+ {
+ if ( sizeFlags & wxSIZE_AUTO_HEIGHT )
+ {
+ actualHeight = size.y ;
+ if ( actualHeight == -1 )
+ actualHeight = 26 ;
+ }
+ else
+ {
actualHeight = currentH ;
+ }
+ }
+ if ((m_minWidth != -1) && (actualWidth < m_minWidth))
+ actualWidth = m_minWidth;
+ if ((m_minHeight != -1) && (actualHeight < m_minHeight))
+ actualHeight = m_minHeight;
+ if ((m_maxWidth != -1) && (actualWidth > m_maxWidth))
+ actualWidth = m_maxWidth;
+ if ((m_maxHeight != -1) && (actualHeight > m_maxHeight))
+ actualHeight = m_maxHeight;
if ( actualX == currentX && actualY == currentY && actualWidth == currentW && actualHeight == currentH)
{
MacRepositionScrollBars() ; // we might have a real position shift
else
{
// erase former position
+ wxMacDrawingHelper focus( this ) ;
+ if ( focus.Ok() )
{
- wxMacDrawingClientHelper focus( this ) ;
- if ( focus.Ok() )
- {
- Rect clientrect = { 0 , 0 , m_height , m_width } ;
- InvalWindowRect( GetMacRootWindow() , &clientrect ) ;
- }
+ Rect clientrect = { 0 , 0 , m_height , m_width } ;
+ ClipRect( &clientrect ) ;
+ InvalWindowRect( GetMacRootWindow() , &clientrect ) ;
}
}
m_x = actualX ;
if ( doResize )
::SizeWindow(m_macWindowData->m_macWindow, m_width, m_height , true);
- // the OS takes care of invalidating and erasing
+ // the OS takes care of invalidating and erasing the new area
+ // we have erased the old one
if ( IsKindOf( CLASSINFO( wxFrame ) ) )
{
else
{
// erase new position
+
{
- wxMacDrawingClientHelper focus( this ) ;
+ wxMacDrawingHelper focus( this ) ;
if ( focus.Ok() )
{
Rect clientrect = { 0 , 0 , m_height , m_width } ;
+ ClipRect( &clientrect ) ;
InvalWindowRect( GetMacRootWindow() , &clientrect ) ;
}
}
+
if ( doMove )
wxWindow::MacSuperChangedPosition() ; // like this only children will be notified
}
}
}
+bool wxWindow::MacIsReallyShown() const
+{
+ bool status = m_isShown ;
+ wxWindow * win = this ;
+ while ( status && win->m_parent != NULL )
+ {
+ win = win->m_parent ;
+ status = win->m_isShown ;
+ }
+ return status ;
+}
+
int wxWindow::GetCharHeight() const
{
wxClientDC dc ( (wxWindow*)this ) ;
attr |= kWindowSideTitlebarAttribute ;
}
}
- else if ( HasFlag( wxTHICK_FRAME ) )
+ else if ( HasFlag( wxCAPTION ) )
{
if ( HasFlag( wxDIALOG_MODAL ) )
{
wclass = kMovableModalWindowClass ;
}
- else if ( HasFlag( wxDIALOG_MODELESS ) )
+ else
{
wclass = kDocumentWindowClass ;
}
- else
- {
- if ( HasFlag( wxCAPTION ) )
- {
- wclass = kDocumentWindowClass ;
- }
- else
- {
- wclass = kModalWindowClass ;
- }
- }
}
else
{
}
#endif // WXWIN_COMPATIBILITY
+void wxWindow::OnSetFocus(wxFocusEvent& event)
+{
+ // panel wants to track the window which was the last to have focus in it,
+ // so we want to set ourselves as the window which last had focus
+ //
+ // notice that it's also important to do it upwards the tree becaus
+ // otherwise when the top level panel gets focus, it won't set it back to
+ // us, but to some other sibling
+ wxWindow *win = this;
+ while ( win )
+ {
+ wxWindow *parent = win->GetParent();
+ wxPanel *panel = wxDynamicCast(parent, wxPanel);
+ if ( panel )
+ {
+ panel->SetLastFocus(win);
+ }
+
+ win = parent;
+ }
+
+ event.Skip();
+}
+
void wxWindow::Clear()
{
if ( m_macWindowData )
{
m_cursor.MacInstall() ;
}
+
+ if ( event.GetEventType() == wxEVT_LEFT_DOWN )
+ {
+ // set focus to this window
+ if (AcceptsFocus() && FindFocus()!=this)
+ SetFocus();
+ }
#if wxUSE_TOOLTIPS
if ( event.GetEventType() == wxEVT_MOTION
}
void wxWindow::MacActivate( EventRecord *ev , bool inIsActivating )
{
- wxActivateEvent event(wxEVT_ACTIVATE, inIsActivating);
+ wxActivateEvent event(wxEVT_ACTIVATE, inIsActivating , m_windowId);
event.m_timeStamp = ev->when ;
event.SetEventObject(this);
node = node->Next();
}
}
-/*
-
-bool wxWindow::MacSetupFocusPort( )
-{
- Point localOrigin ;
- Rect clipRect ;
- WindowRef window ;
- wxWindow *rootwin ;
- GrafPtr port ;
-
- MacGetPortParams( &localOrigin , &clipRect , &window , &rootwin) ;
- return MacSetPortFocusParams( localOrigin, clipRect, window , rootwin ) ;
-}
-
-bool wxWindow::MacSetupFocusClientPort( )
-{
- Point localOrigin ;
- Rect clipRect ;
- WindowRef window ;
- wxWindow *rootwin ;
- GrafPtr port ;
-
- MacGetPortClientParams( &localOrigin , &clipRect , &window , &rootwin) ;
- return MacSetPortFocusParams( localOrigin, clipRect, window , rootwin ) ;
-}
-
-bool wxWindow::MacSetupDrawingPort( )
-{
- Point localOrigin ;
- Rect clipRect ;
- WindowRef window ;
- wxWindow *rootwin ;
- GrafPtr port ;
-
- MacGetPortParams( &localOrigin , &clipRect , &window , &rootwin) ;
- return MacSetPortDrawingParams( localOrigin, clipRect, window , rootwin ) ;
-}
-
-bool wxWindow::MacSetupDrawingClientPort( )
-{
- Point localOrigin ;
- Rect clipRect ;
- WindowRef window ;
- wxWindow *rootwin ;
- GrafPtr port ;
-
- MacGetPortClientParams( &localOrigin , &clipRect , &window , &rootwin) ;
- return MacSetPortDrawingParams( localOrigin, clipRect, window , rootwin ) ;
-}
-*/
bool wxWindow::MacSetPortFocusParams( const Point & localOrigin, const Rect & clipRect, WindowRef window , wxWindow* win )
{
{
return style & ~( wxDOUBLE_BORDER | wxSUNKEN_BORDER | wxRAISED_BORDER | wxBORDER | wxSTATIC_BORDER ) ;
}
-/*
-wxMacFocusHelper::wxMacFocusHelper( wxWindow * theWindow )
-{
- m_ok = false ;
- Point localOrigin ;
- Rect clipRect ;
- WindowRef window ;
- wxWindow *rootwin ;
- m_currentPort = NULL ;
- GetPort( &m_formerPort ) ;
- if ( theWindow )
- {
-
- theWindow->MacGetPortParams( &localOrigin , &clipRect , &window , &rootwin) ;
- m_currentPort = UMAGetWindowPort( window ) ;
- theWindow->MacSetPortFocusParams( localOrigin, clipRect, window , rootwin ) ;
- m_ok = true ;
- }
-}
-
-wxMacFocusHelper::~wxMacFocusHelper()
-{
- if ( m_ok )
- {
- SetPort( m_currentPort ) ;
- SetOrigin( 0 , 0 ) ;
- }
- if ( m_formerPort != m_currentPort )
- SetPort( m_formerPort ) ;
-}
-*/
+
+
wxMacDrawingHelper::wxMacDrawingHelper( wxWindow * theWindow )
{
m_ok = false ;
Rect portRect ;
GetPortBounds( m_currentPort , &portRect ) ;
ClipRect( &portRect ) ;
+ wxDC::MacInvalidateSetup() ;
}
if ( m_formerPort != m_currentPort )
SetPort( m_formerPort ) ;
}
-/*
-wxMacFocusClientHelper::wxMacFocusClientHelper( wxWindow * theWindow )
-{
- m_ok = false ;
- Point localOrigin ;
- Rect clipRect ;
- WindowRef window ;
- wxWindow *rootwin ;
- m_currentPort = NULL ;
-
- GetPort( &m_formerPort ) ;
-
- if ( theWindow )
- {
- theWindow->MacGetPortClientParams( &localOrigin , &clipRect , &window , &rootwin) ;
- m_currentPort = UMAGetWindowPort( window ) ;
- theWindow->MacSetPortFocusParams( localOrigin, clipRect, window , rootwin ) ;
- m_ok = true ;
- }
-}
-
-wxMacFocusClientHelper::~wxMacFocusClientHelper()
-{
- if ( m_ok )
- {
- SetPort( m_currentPort ) ;
- SetOrigin( 0 , 0 ) ;
- }
- if ( m_formerPort != m_currentPort )
- SetPort( m_formerPort ) ;
-}
-*/
wxMacDrawingClientHelper::wxMacDrawingClientHelper( wxWindow * theWindow )
{