]> git.saurik.com Git - wxWidgets.git/blobdiff - src/stubs/dialog.cpp
Copied/merged from the 2.2 branch.
[wxWidgets.git] / src / stubs / dialog.cpp
index d29f2bbc8f7447b483b7ab7bf9ab70ac3d191a3b..f0358af36aaa21fbdf4996950373a76a6bcf98fd 100644 (file)
@@ -25,7 +25,6 @@ wxList wxModalDialogs;
 wxList wxModelessWindows;  // Frames and modeless dialogs
 extern wxList wxPendingDelete;
 
-#if !USE_SHARED_LIBRARY
 IMPLEMENT_DYNAMIC_CLASS(wxDialog, wxPanel)
 
 BEGIN_EVENT_TABLE(wxDialog, wxPanel)
@@ -37,7 +36,6 @@ BEGIN_EVENT_TABLE(wxDialog, wxPanel)
   EVT_CLOSE(wxDialog::OnCloseWindow)
 END_EVENT_TABLE()
 
-#endif
 
 wxDialog::wxDialog()
 {
@@ -164,20 +162,13 @@ void wxDialog::Centre(int direction)
   int x_offset,y_offset ;
   int display_width, display_height;
   int  width, height, x, y;
-  wxFrame *frame ;
-  if (direction & wxCENTER_FRAME)
+  wxWindow *parent = GetParent();
+  if ((direction & wxCENTER_FRAME) && parent)
   {
-    frame = (wxFrame*)GetParent() ;
-    if (frame)
-    {
-      frame->GetPosition(&x_offset,&y_offset) ;
-      frame->GetSize(&display_width,&display_height) ;
-    }
+      parent->GetPosition(&x_offset,&y_offset) ;
+      parent->GetSize(&display_width,&display_height) ;
   }
   else
-    frame = NULL ;
-
-  if (frame==NULL)
   {
     wxDisplaySize(&display_width, &display_height);
     x_offset = 0 ;
@@ -244,35 +235,34 @@ void wxDialog::OnCancel(wxCommandEvent& event)
     }
 }
 
-bool wxDialog::OnClose()
+void wxDialog::OnCloseWindow(wxCloseEvent& event)
 {
-       // Behaviour changed in 2.0: we'll send a Cancel message by default,
+    // We'll send a Cancel message by default,
     // which may close the dialog.
-    // Check for looping if the Cancel event handler calls Close()
+    // Check for looping if the Cancel event handler calls Close().
+
+    // Note that if a cancel button and handler aren't present in the dialog,
+    // nothing will happen when you close the dialog via the window manager, or
+    // via Close().
+    // We wouldn't want to destroy the dialog by default, since the dialog may have been
+    // created on the stack.
+    // However, this does mean that calling dialog->Close() won't delete the dialog
+    // unless the handler for wxID_CANCEL does so. So use Destroy() if you want to be
+    // sure to destroy the dialog.
+    // The default OnCancel (above) simply ends a modal dialog, and hides a modeless dialog.
 
     static wxList closing;
-
+    
     if ( closing.Member(this) )
-        return FALSE;
-
+        return;
+    
     closing.Append(this);
-
-       wxCommandEvent cancelEvent(wxEVT_COMMAND_BUTTON_CLICKED, wxID_CANCEL);
-       cancelEvent.SetEventObject( this );
-       GetEventHandler()->ProcessEvent(cancelEvent);
+    
+    wxCommandEvent cancelEvent(wxEVT_COMMAND_BUTTON_CLICKED, wxID_CANCEL);
+    cancelEvent.SetEventObject( this );
+    GetEventHandler()->ProcessEvent(cancelEvent); // This may close the dialog
 
     closing.DeleteObject(this);
-
-       return FALSE;
-}
-
-void wxDialog::OnCloseWindow(wxCloseEvent& event)
-{
-    // Compatibility
-    if ( GetEventHandler()->OnClose() || event.GetForce())
-    {
-        this->Destroy();
-    }
 }
 
 // Destroy the window (delayed, if a managed window)