]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mgl/toplevel.cpp
always skip OnSize
[wxWidgets.git] / src / mgl / toplevel.cpp
index e75baca885c279596821dba727368ecb66710666..d2ede3f43c4bc713b211c3704156d2294276712a 100644 (file)
@@ -1,5 +1,5 @@
 /////////////////////////////////////////////////////////////////////////////
-// Name:        toplevel.cpp
+// Name:        src/mgl/toplevel.cpp
 // Purpose:
 // Author:      Vaclav Slavik
 // Id:          $Id$
@@ -7,6 +7,13 @@
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
+// For compilers that support precompilation, includes "wx.h".
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+    #pragma hdrstop
+#endif
+
 // ============================================================================
 // declarations
 // ============================================================================
 // headers
 // ----------------------------------------------------------------------------
 
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
-    #pragma implementation "toplevel.h"
-#endif
-
-// For compilers that support precompilation, includes "wx.h".
-#include "wx/wxprec.h"
+#include "wx/toplevel.h"
 
-#ifdef __BORLANDC__
-#pragma hdrstop
-#endif
+#ifndef WX_PRECOMP
+    #include "wx/app.h"
+#endif // WX_PRECOMP
 
-#include "wx/defs.h"
-#include "wx/toplevel.h"
-#include "wx/app.h"
 #include "wx/mgl/private.h"
 
 // ----------------------------------------------------------------------------
@@ -52,17 +51,17 @@ extern int g_openDialogs;
 
 void wxTopLevelWindowMGL::Init()
 {
-    m_isShown = FALSE;
-    m_isIconized = FALSE;
-    m_isMaximized = FALSE;
-    m_fsIsShowing = FALSE;
-    m_sizeSet = FALSE;
+    m_isShown = false;
+    m_isIconized = false;
+    m_isMaximized = false;
+    m_fsIsShowing = false;
+    m_sizeSet = false;
 }
 
 bool wxTopLevelWindowMGL::Create(wxWindow *parent,
                                  wxWindowID id,
                                  const wxString& title,
-                                 const wxPoint& pos,
+                                 const wxPoint& posOrig,
                                  const wxSize& sizeOrig,
                                  long style,
                                  const wxString &name)
@@ -70,16 +69,36 @@ bool wxTopLevelWindowMGL::Create(wxWindow *parent,
     // always create a frame of some reasonable, even if arbitrary, size (at
     // least for MSW compatibility)
     wxSize size = sizeOrig;
-    if ( size.x == -1 || size.y == -1 )
+    if ( size.x == wxDefaultCoord || size.y == wxDefaultCoord )
+    {
+        wxSize sizeDefault = GetDefaultSize();
+        if ( size.x == wxDefaultCoord )
+            size.x = sizeDefault.x;
+        if ( size.y == wxDefaultCoord )
+            size.y = sizeDefault.y;
+    }
+
+    // for default positioning, centre the first top level window and
+    // cascade any addtional ones from there.
+    wxPoint pos = posOrig;
+    if ( pos.x == wxDefaultCoord || pos.y == wxDefaultCoord )
     {
-        wxSize sizeDpy = wxGetDisplaySize();
-        if ( size.x == -1 )
-            size.x = sizeDpy.x / 3;
-        if ( size.y == -1 )
-            size.y = sizeDpy.y / 5;
+        wxSize sizeDisplay = wxGetDisplaySize();
+        static wxPoint nextPos((sizeDisplay.x - size.x) / 2,
+                               (sizeDisplay.y - size.y) / 2);
+
+        if ( pos.x == wxDefaultCoord )
+            pos.x = nextPos.x;
+        if ( pos.y == wxDefaultCoord )
+            pos.y = nextPos.y;
+        if ( pos.x + size.x > sizeDisplay.x || pos.y + size.y > sizeDisplay.y )
+            pos = wxPoint();
+
+        const wxSize cascadeOffset(16, 20);
+        nextPos = pos + cascadeOffset;
     }
-    
-    wxWindow::Create(NULL, id, pos, sizeOrig, style, name);
+
+    wxWindow::Create(NULL, id, pos, size, style, name);
     SetParent(parent);
     if ( parent )
         parent->AddChild(this);
@@ -87,28 +106,12 @@ bool wxTopLevelWindowMGL::Create(wxWindow *parent,
     wxTopLevelWindows.Append(this);
     m_title = title;
 
-    return TRUE;
-}
-
-wxTopLevelWindowMGL::~wxTopLevelWindowMGL()
-{
-    m_isBeingDeleted = TRUE;
-
-    wxTopLevelWindows.DeleteObject(this);
-
-    if (wxTheApp->GetTopWindow() == this)
-        wxTheApp->SetTopWindow(NULL);
-
-    if ((wxTopLevelWindows.Number() == 0) &&
-        (wxTheApp->GetExitOnFrameDelete()))
-    {
-        wxTheApp->ExitMainLoop();
-    }
+    return true;
 }
 
 bool wxTopLevelWindowMGL::ShowFullScreen(bool show, long style)
 {
-    if (show == m_fsIsShowing) return FALSE; // return what?
+    if (show == m_fsIsShowing) return false; // return what?
 
     m_fsIsShowing = show;
 
@@ -131,11 +134,11 @@ bool wxTopLevelWindowMGL::ShowFullScreen(bool show, long style)
     else
     {
         m_windowStyle = m_fsSaveStyle;
-        SetSize(m_fsSaveFrame.x, m_fsSaveFrame.y, 
+        SetSize(m_fsSaveFrame.x, m_fsSaveFrame.y,
                 m_fsSaveFrame.width, m_fsSaveFrame.height);
     }
 
-    return TRUE;
+    return true;
 }
 
 bool wxTopLevelWindowMGL::Show(bool show)
@@ -146,13 +149,13 @@ bool wxTopLevelWindowMGL::Show(bool show)
     // so that the frame can adjust itself (think auto layout or single child)
     if ( !m_sizeSet )
     {
-        m_sizeSet = TRUE;
+        m_sizeSet = true;
         wxSizeEvent event(GetSize(), GetId());
         event.SetEventObject(this);
-        GetEventHandler()->ProcessEvent(event);
+        HandleWindowEvent(event);
     }
 
-    if ( ret && show && AcceptsFocus() )
+    if ( ret && show && CanAcceptFocus() )
         SetFocus();
         // FIXME_MGL -- don't do this for popup windows?
     return ret;
@@ -168,7 +171,7 @@ void wxTopLevelWindowMGL::Maximize(bool maximize)
 
     if ( maximize && !m_isMaximized )
     {
-        m_isMaximized = TRUE;
+        m_isMaximized = true;
 
         GetPosition(&m_savedFrame.x, &m_savedFrame.y);
         GetSize(&m_savedFrame.width, &m_savedFrame.height);
@@ -177,8 +180,8 @@ void wxTopLevelWindowMGL::Maximize(bool maximize)
     }
     else if ( !maximize && m_isMaximized )
     {
-        m_isMaximized = FALSE;
-        SetSize(m_savedFrame.x, m_savedFrame.y, 
+        m_isMaximized = false;
+        SetSize(m_savedFrame.x, m_savedFrame.y,
                 m_savedFrame.width, m_savedFrame.height);
     }
 }
@@ -192,11 +195,11 @@ void wxTopLevelWindowMGL::Restore()
 {
     if ( IsIconized() )
     {
-        Iconize(FALSE);
+        Iconize(false);
     }
     if ( IsMaximized() )
     {
-        Maximize(FALSE);
+        Maximize(false);
     }
 }