}
// Creates a floating frame for the windows
-wxAuiFloatingPane * wxAuiManager::CreateFloatingFrame(wxWindow* parent, const wxAuiPaneInfo& p)
+wxAuiFloatingFrame * wxAuiManager::CreateFloatingFrame(wxWindow* parent, const wxAuiPaneInfo& p)
{
- return new wxAuiFloatingPane(parent, this, p);
+ return new wxAuiFloatingFrame(parent, this, p);
}
// GetPane() looks up a wxAuiPaneInfo structure based
if (GetPane(pane_info.window).IsOk())
return false;
+ // if the new pane is docked then we should undo maximize
+ if(pane_info.IsDocked())
+ RestoreMaximizedPane();
+
m_panes.Add(pane_info);
wxAuiPaneInfo& pinfo = m_panes.Last();
button.button_id = wxAUI_BUTTON_MAXIMIZE_RESTORE;
pinfo.buttons.Add(button);
}
-
+
+ if (pinfo.HasPinButton())
+ {
+ wxAuiPaneButton button;
+ button.button_id = wxAUI_BUTTON_PIN;
+ pinfo.buttons.Add(button);
+ }
+
if (pinfo.HasCloseButton())
{
wxAuiPaneButton button;
}
else
{
+ // if the new pane is docked then we should undo maximize
+ RestoreMaximizedPane();
+
existing_pane.Direction(pane_info.dock_direction);
existing_pane.Layer(pane_info.dock_layer);
existing_pane.Row(pane_info.dock_row);
part.sizer_item = sizer_item;
uiparts.Add(part);
}
+
+ // if we have buttons, add a little space to the right
+ // of them to ease visual crowding
+ if (button_count >= 1)
+ {
+ caption_sizer->Add(3,1);
+ }
// add the caption sizer
sizer_item = vert_pane_sizer->Add(caption_sizer, 0, wxEXPAND);
p.window->SetSize(1,1);
- // the following block is a workaround for bug #1531361
- // (see wxWidgets sourceforge page). On wxGTK (only), when
- // a frame is shown/hidden, a move event unfortunately
- // also gets fired. Because we may be dragging around
- // a pane, we need to cancel that action here to prevent
- // a spurious crash.
- if (m_action_window == p.frame)
- {
- if (wxWindow::GetCapture() == m_frame)
+ // the following block is a workaround for bug #1531361
+ // (see wxWidgets sourceforge page). On wxGTK (only), when
+ // a frame is shown/hidden, a move event unfortunately
+ // also gets fired. Because we may be dragging around
+ // a pane, we need to cancel that action here to prevent
+ // a spurious crash.
+ if (m_action_window == p.frame)
+ {
+ if (wxWindow::GetCapture() == m_frame)
m_frame->ReleaseMouse();
m_action = actionNone;
- m_action_window = NULL;
- }
+ m_action_window = NULL;
+ }
- // hide the frame
+ // hide the frame
if (p.frame->IsShown())
p.frame->Show(false);
// reparent to m_frame and destroy the pane
- if(m_action_window == p.frame) {
+ if(m_action_window == p.frame)
+ {
m_action_window = NULL;
}
+
p.window->Reparent(m_frame);
p.frame->SetSizer(NULL);
p.frame->Destroy();
{
// we need to create a frame for this
// pane, which has recently been floated
- wxAuiFloatingPane* frame = CreateFloatingFrame(m_frame, p);
+ wxAuiFloatingFrame* frame = CreateFloatingFrame(m_frame, p);
#if wxCHECK_VERSION(2,7,0)
// on MSW and Mac, if the owner desires transparent dragging, and
{
DoFrameLayout();
Repaint();
+
+#if wxUSE_MDI
+ if (m_frame->IsKindOf(CLASSINFO(wxMDIParentFrame)))
+ {
+ // for MDI parent frames, this event must not
+ // be "skipped". In other words, the parent frame
+ // must not be allowed to resize the client window
+ // after we are finished processing sizing changes
+ return;
+ }
+#endif
}
event.Skip();
}
void wxAuiManager::UpdateButtonOnScreen(wxAuiDockUIPart* button_ui_part,
- const wxMouseEvent& event)
+ const wxMouseEvent& event)
{
wxAuiDockUIPart* hit_test = HitTest(event.GetX(), event.GetY());
-
+ if (!hit_test || !button_ui_part)
+ return;
+
int state = wxAUI_BUTTON_STATE_NORMAL;
if (hit_test == button_ui_part)
wxAuiDockUIPart* part = HitTest(event.GetX(), event.GetY());
if (part)
{
- if (part->dock && part->dock->dock_direction == wxAUI_DOCK_CENTER)
- return;
-
if (part->type == wxAuiDockUIPart::typeDockSizer ||
part->type == wxAuiDockUIPart::typePaneSizer)
{
+ if (part->dock && part->dock->dock_direction == wxAUI_DOCK_CENTER)
+ return;
+
// a dock may not be resized if it has a single
// pane which is not resizable
if (part->type == wxAuiDockUIPart::typeDockSizer && part->dock &&
else if (part->type == wxAuiDockUIPart::typeCaption ||
part->type == wxAuiDockUIPart::typeGripper)
{
+ if (part->dock && part->dock->dock_direction == wxAUI_DOCK_CENTER)
+ return;
+
if (GetFlags() & wxAUI_MGR_ALLOW_ACTIVE_PANE)
{
// set the caption as active