X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2003562174a484f41cddba0d8b236b775f2b6e5a..5d7792236f7e4fcbb94cdc2a5213e0c5788e8c28:/src/aui/framemanager.cpp?ds=sidebyside diff --git a/src/aui/framemanager.cpp b/src/aui/framemanager.cpp index 13be60b14a..cd0eebc4f9 100644 --- a/src/aui/framemanager.cpp +++ b/src/aui/framemanager.cpp @@ -277,6 +277,16 @@ public: return true; } +protected: + virtual void DoSetSizeHints( int minW, int minH, + int maxW, int maxH, + int incW, int incH) + { + // the real wxFrame method doesn't work for us because we're not really + // a top level window so skip it + wxWindow::DoSetSizeHints(minW, minH, maxW, maxH, incW, incH); + } + private: DECLARE_DYNAMIC_CLASS(wxPseudoTransparentFrame) }; @@ -568,7 +578,7 @@ class wxAuiProportionalBoxSizer : public wxBoxSizer { public: wxAuiProportionalBoxSizer(int orientation) : wxBoxSizer(orientation) { } - + void RecalcSizes() { if (m_children.GetCount() == 0) @@ -578,18 +588,18 @@ public: int fixed_width = 0; int stretchable = 0; wxSizerItemList::compatibility_iterator node; - + // find fixed width and height, as well // as the total stretchable proportions node = m_children.GetFirst(); while (node) { wxSizerItem *item = node->GetData(); - + if (item->IsShown()) { stretchable += item->GetProportion(); - + wxSize size(item->GetMinSizeWithBorder()); if (item->GetProportion() == 0) { @@ -605,7 +615,7 @@ public: } } } - + node = node->GetNext(); } @@ -676,7 +686,7 @@ public: child_pos.y += (m_size.y - size.y) / 2; item->SetDimension(child_pos, child_size); - + pt.x += width; } } @@ -706,7 +716,6 @@ BEGIN_EVENT_TABLE(wxAuiManager, wxEvtHandler) EVT_MOUSE_CAPTURE_LOST(wxAuiManager::OnCaptureLost) EVT_CHILD_FOCUS(wxAuiManager::OnChildFocus) EVT_AUI_FIND_MANAGER(wxAuiManager::OnFindManager) - EVT_TIMER(101, wxAuiManager::OnHintFadeTimer) END_EVENT_TABLE() @@ -1187,14 +1196,6 @@ bool wxAuiManager::AddPane(wxWindow* window, const wxAuiPaneInfo& pane_info) // a toolbar under some newer versions of wxWidgets, // so use GetBestSize() pinfo.best_size = pinfo.window->GetBestSize(); - - // for some reason, wxToolBar::GetBestSize() is returning - // a size that is a pixel shy of the correct amount. - // I believe this to be the correct action, until - // wxToolBar::GetBestSize() is fixed. Is this assumption - // correct? - // commented out by JACS 2007-9-08 after having added a pixel in wxMSW's wxToolBar::DoGetBestSize() - // pinfo.best_size.y++; } #endif // wxUSE_TOOLBAR @@ -3321,6 +3322,8 @@ void wxAuiManager::OnHintFadeTimer(wxTimerEvent& WXUNUSED(event)) if (!m_hint_wnd || m_hint_fadeamt >= m_hint_fademax) { m_hint_fadetimer.Stop(); + Disconnect(m_hint_fadetimer.GetId(), wxEVT_TIMER, + wxTimerEventHandler(wxAuiManager::OnHintFadeTimer)); return; } @@ -3362,8 +3365,10 @@ void wxAuiManager::ShowHint(const wxRect& rect) if (m_hint_fadeamt != m_hint_fademax) // Only fade if we need to { // start fade in timer - m_hint_fadetimer.SetOwner(this, 101); + m_hint_fadetimer.SetOwner(this); m_hint_fadetimer.Start(5); + Connect(m_hint_fadetimer.GetId(), wxEVT_TIMER, + wxTimerEventHandler(wxAuiManager::OnHintFadeTimer)); } } else // Not using a transparent hint window... @@ -3431,6 +3436,10 @@ void wxAuiManager::HideHint() m_hint_wnd->Show(false); m_hint_wnd->SetTransparent(0); m_hint_fadetimer.Stop(); + // In case this is called while a hint fade is going, we need to + // disconnect the event handler. + Disconnect(m_hint_fadetimer.GetId(), wxEVT_TIMER, + wxTimerEventHandler(wxAuiManager::OnHintFadeTimer)); m_last_hint = wxRect(); return; } @@ -3597,6 +3606,9 @@ void wxAuiManager::OnFloatingPaneMoveStart(wxWindow* wnd) wxAuiPaneInfo& pane = GetPane(wnd); wxASSERT_MSG(pane.IsOk(), wxT("Pane window not found")); + if(!pane.frame) + return; + if (m_flags & wxAUI_MGR_TRANSPARENT_DRAG) pane.frame->SetTransparent(150); } @@ -4189,7 +4201,7 @@ bool wxAuiManager::DoEndResizeAction(wxMouseEvent& event) int used_width = 0, used_height = 0; wxSize client_size = m_frame->GetClientSize(); - + size_t dock_i, dock_count = m_docks.GetCount(); for (dock_i = 0; dock_i < dock_count; ++dock_i) { @@ -4207,12 +4219,12 @@ bool wxAuiManager::DoEndResizeAction(wxMouseEvent& event) if (dock.resizable) used_width += sash_size; } - - + + int available_width = client_size.GetWidth() - used_width; int available_height = client_size.GetHeight() - used_height; - - + + #if wxUSE_STATUSBAR // if there's a status control, the available // height decreases accordingly @@ -4227,13 +4239,13 @@ bool wxAuiManager::DoEndResizeAction(wxMouseEvent& event) } } #endif - + wxRect& rect = m_action_part->dock->rect; wxPoint new_pos(event.m_x - m_action_offset.x, event.m_y - m_action_offset.y); int new_size, old_size = m_action_part->dock->size; - + switch (m_action_part->dock->dock_direction) { case wxAUI_DOCK_LEFT: @@ -4366,7 +4378,7 @@ bool wxAuiManager::DoEndResizeAction(wxMouseEvent& event) m_action = actionNone; return false; } - + // calculate the new proportion of the pane int new_proportion = (new_pixsize*total_proportion)/dock_pixels; @@ -4429,7 +4441,7 @@ bool wxAuiManager::DoEndResizeAction(wxMouseEvent& event) prop_borrow -= prop_diff; } - + dock.panes.Item(borrow_pane)->dock_proportion = prop_borrow; pane.dock_proportion = new_proportion; @@ -4576,7 +4588,7 @@ void wxAuiManager::OnMotion(wxMouseEvent& event) DrawResizeHint(dc, m_action_hintrect); m_action_hintrect = wxRect(); } - + // draw new resize hint, if it's inside the managed frame wxRect frame_screen_rect = m_frame->GetScreenRect(); if (frame_screen_rect.Contains(rect))