]> git.saurik.com Git - wxWidgets.git/blobdiff - src/aui/tabmdi.cpp
DoGetBestSize fix, the lbWidth was not getting updated because of a
[wxWidgets.git] / src / aui / tabmdi.cpp
index cacd76d01a79a94d85ee9e3eba70a8dd4da7bc87..f7328f7864768e6bab4faceefc6af31992a946eb 100644 (file)
@@ -82,8 +82,9 @@ wxAuiMDIParentFrame::~wxAuiMDIParentFrame()
     wxDELETE(m_pClientWindow);
 
 #if wxUSE_MENUS
+    wxDELETE(m_pMyMenuBar);
     RemoveWindowMenu(GetMenuBar());
-    delete m_pWindowMenu;
+    wxDELETE(m_pWindowMenu);
 #endif // wxUSE_MENUS
 }
 
@@ -166,7 +167,7 @@ void wxAuiMDIParentFrame::SetMenuBar(wxMenuBar* pMenuBar)
     AddWindowMenu(pMenuBar);
 
     wxFrame::SetMenuBar(pMenuBar);
-    m_pMyMenuBar = GetMenuBar();
+    //m_pMyMenuBar = GetMenuBar();
 }
 #endif // wxUSE_MENUS
 
@@ -179,7 +180,7 @@ void wxAuiMDIParentFrame::SetChildMenuBar(wxAuiMDIChildFrame* pChild)
         SetMenuBar(m_pMyMenuBar);
 
         // Make sure we know our menu bar is in use
-        //m_pMyMenuBar = NULL;
+        m_pMyMenuBar = NULL;
     }
      else
     {
@@ -354,6 +355,26 @@ void wxAuiMDIParentFrame::DoGetClientSize(int* width, int* height) const
     wxFrame::DoGetClientSize(width, height);
 }
 
+void wxAuiMDIParentFrame::Tile(wxOrientation orient)
+{
+    wxAuiMDIClientWindow* client_window = GetClientWindow();
+    wxASSERT_MSG(client_window, wxT("Missing MDI Client Window"));
+    
+    int cur_idx = client_window->GetSelection();
+    if (cur_idx == -1)
+        return;
+        
+    if (orient == wxVERTICAL)
+    {
+        client_window->Split(cur_idx, wxLEFT);
+    }
+     else if (orient == wxHORIZONTAL)
+    {
+        client_window->Split(cur_idx, wxTOP);
+    }
+}
+
+
 //-----------------------------------------------------------------------------
 // wxAuiMDIChildFrame
 //-----------------------------------------------------------------------------
@@ -380,11 +401,29 @@ wxAuiMDIChildFrame::wxAuiMDIChildFrame(wxAuiMDIParentFrame *parent,
                                        const wxString& name)
 {
     Init();
-    Create(parent, id, title, wxDefaultPosition, size, style, name);
+    
+    // There are two ways to create an tabbed mdi child fram without
+    // making it the active document.  Either Show(false) can be called
+    // before Create() (as is customary on some ports with wxFrame-type
+    // windows), or wxMINIMIZE can be passed in the style flags.  Note that
+    // wxAuiMDIChildFrame is not really derived from wxFrame, as wxMDIChildFrame
+    // is, but those are the expected symantics.  No style flag is passed
+    // onto the panel underneath.
+    if (style & wxMINIMIZE)
+        m_activate_on_create = false;
+        
+    Create(parent, id, title, wxDefaultPosition, size, 0, name);
 }
 
 wxAuiMDIChildFrame::~wxAuiMDIChildFrame()
 {
+    wxAuiMDIParentFrame* pParentFrame = GetMDIParentFrame();
+    if (pParentFrame && pParentFrame->GetActiveChild() == this)
+    {
+        pParentFrame->SetActiveChild(NULL);
+        pParentFrame->SetChildMenuBar(NULL);
+    }
+    
 #if wxUSE_MENUS
     wxDELETE(m_pMenuBar);
 #endif // wxUSE_MENUS
@@ -401,6 +440,10 @@ bool wxAuiMDIChildFrame::Create(wxAuiMDIParentFrame* parent,
     wxAuiMDIClientWindow* pClientWindow = parent->GetClientWindow();
     wxASSERT_MSG((pClientWindow != (wxWindow*) NULL), wxT("Missing MDI client window."));
 
+    // see comment in constructor
+    if (style & wxMINIMIZE)
+        m_activate_on_create = false;
+
     wxSize cli_size = pClientWindow->GetClientSize();
 
     // create the window off-screen to prevent flicker
@@ -408,7 +451,9 @@ bool wxAuiMDIChildFrame::Create(wxAuiMDIParentFrame* parent,
                    id,
                    wxPoint(cli_size.x+1, cli_size.y+1),
                    size,
-                   style|wxNO_BORDER, name);
+                   wxNO_BORDER, name);
+
+    DoShow(false);
 
     SetMDIParentFrame(parent);
 
@@ -417,9 +462,9 @@ bool wxAuiMDIChildFrame::Create(wxAuiMDIParentFrame* parent,
 
     m_title = title;
 
-    pClientWindow->AddPage(this, title, true);
+    pClientWindow->AddPage(this, title, m_activate_on_create);
     pClientWindow->Refresh();
-
+    
     return true;
 }
 
@@ -528,7 +573,7 @@ void wxAuiMDIChildFrame::SetIcon(const wxIcon& icon)
     
     wxBitmap bmp;
     bmp.CopyFromIcon(m_icon);
-    
+        
     wxAuiMDIClientWindow* pClientWindow = pParentFrame->GetClientWindow();
     if (pClientWindow != NULL)
     {
@@ -604,14 +649,17 @@ wxAuiMDIParentFrame* wxAuiMDIChildFrame::GetMDIParentFrame() const
 
 void wxAuiMDIChildFrame::Init()
 {
+    m_activate_on_create = true;
     m_pMDIParentFrame = NULL;
 #if wxUSE_MENUS
     m_pMenuBar = NULL;
 #endif // wxUSE_MENUS
 }
 
-bool wxAuiMDIChildFrame::Show(bool WXUNUSED(show))
+bool wxAuiMDIChildFrame::Show(bool show)
 {
+    m_activate_on_create = show;
+    
     // do nothing
     return true;
 }
@@ -677,6 +725,11 @@ bool wxAuiMDIClientWindow::CreateClient(wxAuiMDIParentFrame* parent, long style)
 {
     SetWindowStyleFlag(style);
 
+    wxSize caption_icon_size = 
+            wxSize(wxSystemSettings::GetMetric(wxSYS_SMALLICON_X),
+                   wxSystemSettings::GetMetric(wxSYS_SMALLICON_Y));
+    SetUniformBitmapSize(caption_icon_size);
+    
     if (!wxAuiNotebook::Create(parent,
                                wxID_ANY,
                                wxPoint(0,0),
@@ -687,9 +740,9 @@ bool wxAuiMDIClientWindow::CreateClient(wxAuiMDIParentFrame* parent, long style)
     }
 
     wxColour bkcolour = wxSystemSettings::GetColour(wxSYS_COLOUR_APPWORKSPACE);
-    SetBackgroundColour(bkcolour);
+    SetOwnBackgroundColour(bkcolour);
 
-    m_mgr.GetArtProvider()->SetColour(wxAUI_ART_BACKGROUND_COLOUR, bkcolour);
+    m_mgr.GetArtProvider()->SetColour(wxAUI_DOCKART_BACKGROUND_COLOUR, bkcolour);
 
     return true;
 }