X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c5e2ca7c529320e42d14d3a37450237a53553038..7749035c4edc84ff7ad722c0de8ff1679b68976f:/src/aui/tabmdi.cpp?ds=sidebyside diff --git a/src/aui/tabmdi.cpp b/src/aui/tabmdi.cpp index cacd76d01a..f7328f7864 100644 --- a/src/aui/tabmdi.cpp +++ b/src/aui/tabmdi.cpp @@ -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; }