wxAuiPaneInfo wxAuiNullPaneInfo;
wxAuiDockInfo wxAuiNullDockInfo;
-DEFINE_EVENT_TYPE(wxEVT_AUI_PANEBUTTON)
-DEFINE_EVENT_TYPE(wxEVT_AUI_PANECLOSE)
-DEFINE_EVENT_TYPE(wxEVT_AUI_PANEMAXIMIZE)
-DEFINE_EVENT_TYPE(wxEVT_AUI_PANERESTORE)
+DEFINE_EVENT_TYPE(wxEVT_AUI_PANE_BUTTON)
+DEFINE_EVENT_TYPE(wxEVT_AUI_PANE_CLOSE)
+DEFINE_EVENT_TYPE(wxEVT_AUI_PANE_MAXIMIZE)
+DEFINE_EVENT_TYPE(wxEVT_AUI_PANE_RESTORE)
DEFINE_EVENT_TYPE(wxEVT_AUI_RENDER)
-DEFINE_EVENT_TYPE(wxEVT_AUI_FINDMANAGER)
+DEFINE_EVENT_TYPE(wxEVT_AUI_FIND_MANAGER)
#ifdef __WXMAC__
// a few defines to avoid nameclashes
IMPLEMENT_DYNAMIC_CLASS(wxAuiManagerEvent, wxEvent)
IMPLEMENT_CLASS(wxAuiManager, wxEvtHandler)
-// private manager flags (not yet on the public API)
-enum wxAuiPrivateManagerOption
-{
- wxAUI_MGR_NO_DOCK_SIZE_LIMIT = 1 << 28
-};
const int auiToolBarLayer = 10;
BEGIN_EVENT_TABLE(wxAuiManager, wxEvtHandler)
- EVT_AUI_PANEBUTTON(wxAuiManager::OnPaneButton)
+ EVT_AUI_PANE_BUTTON(wxAuiManager::OnPaneButton)
EVT_AUI_RENDER(wxAuiManager::OnRender)
EVT_PAINT(wxAuiManager::OnPaint)
EVT_ERASE_BACKGROUND(wxAuiManager::OnEraseBackground)
EVT_MOTION(wxAuiManager::OnMotion)
EVT_LEAVE_WINDOW(wxAuiManager::OnLeaveWindow)
EVT_CHILD_FOCUS(wxAuiManager::OnChildFocus)
- EVT_AUI_FINDMANAGER(wxAuiManager::OnFindManager)
+ EVT_AUI_FIND_MANAGER(wxAuiManager::OnFindManager)
EVT_TIMER(101, wxAuiManager::OnHintFadeTimer)
END_EVENT_TABLE()
m_skipping = false;
m_has_maximized = false;
m_frame = NULL;
+ m_dock_constraint_x = 0.3;
+ m_dock_constraint_y = 0.3;
+ m_reserved = NULL;
if (managed_wnd)
{
// need to be managed by the manager itself.
wxAuiManager* wxAuiManager::GetManager(wxWindow* window)
{
- wxAuiManagerEvent evt(wxEVT_AUI_FINDMANAGER);
+ wxAuiManagerEvent evt(wxEVT_AUI_FIND_MANAGER);
evt.SetManager(NULL);
evt.ResumePropagation(wxEVENT_PROPAGATE_MAX);
if (!window->ProcessEvent(evt))
}
bool wxAuiManager::AddPane(wxWindow* window,
- int direction,
- const wxString& caption)
+ int direction,
+ const wxString& caption)
{
wxAuiPaneInfo pinfo;
pinfo.Caption(caption);
}
bool wxAuiManager::AddPane(wxWindow* window,
- const wxAuiPaneInfo& pane_info,
- const wxPoint& drop_pos)
+ const wxAuiPaneInfo& pane_info,
+ const wxPoint& drop_pos)
{
if (!AddPane(window, pane_info))
return false;
if (!p.IsToolbar())
{
p.Restore();
- p.SaveHidden();
+
+ // save hidden state
+ p.SetFlag(wxAuiPaneInfo::savedHiddenState,
+ p.HasFlag(wxAuiPaneInfo::optionHidden));
+
+ // hide the pane, because only the newly
+ // maximized pane should show
p.Hide();
}
}
wxAuiPaneInfo& p = m_panes.Item(i);
if (!p.IsToolbar())
{
- p.RestoreHidden();
+ p.SetFlag(wxAuiPaneInfo::optionHidden,
+ p.HasFlag(wxAuiPaneInfo::savedHiddenState));
}
}
{
wxString result;
result.Alloc(500);
- result = wxT("layout1|");
+ result = wxT("layout2|");
int pane_i, pane_count = m_panes.GetCount();
for (pane_i = 0; pane_i < pane_count; ++pane_i)
wxString part;
// check layout string version
+ // 'layout1' = wxAUI 0.9.0 - wxAUI 0.9.2
+ // 'layout2' = wxAUI 0.9.2 (wxWidgets 2.8)
part = input.BeforeFirst(wxT('|'));
input = input.AfterFirst(wxT('|'));
part.Trim(true);
part.Trim(false);
- if (part != wxT("layout1"))
+ if (part != wxT("layout2"))
return false;
// mark all panes currently managed as docked and hidden
void wxAuiManager::LayoutAddPane(wxSizer* cont,
- wxAuiDockInfo& dock,
- wxAuiPaneInfo& pane,
- wxAuiDockUIPartArray& uiparts,
- bool spacer_only)
+ wxAuiDockInfo& dock,
+ wxAuiPaneInfo& pane,
+ wxAuiDockUIPartArray& uiparts,
+ bool spacer_only)
{
wxAuiDockUIPart part;
wxSizerItem* sizer_item;
// determine if the pane should have a minimum size; if the pane is
- // non-resizable (fixed) then we must set a minimum size. Alternitavely,
+ // non-resizable (fixed) then we must set a minimum size. Alternatively,
// if the pane.min_size is set, we must use that value as well
wxSize min_size = pane.min_size;
}
wxSizer* wxAuiManager::LayoutAll(wxAuiPaneInfoArray& panes,
- wxAuiDockInfoArray& docks,
- wxAuiDockUIPartArray& uiparts,
- bool spacer_only)
+ wxAuiDockInfoArray& docks,
+ wxAuiDockUIPartArray& uiparts,
+ bool spacer_only)
{
wxBoxSizer* container = new wxBoxSizer(wxVERTICAL);
}
}
- if (!(m_flags & wxAUI_MGR_NO_DOCK_SIZE_LIMIT))
- {
- // new dock's size may not be more than 1/3 of the frame size
- if (dock.IsHorizontal())
- size = wxMin(size, cli_size.y/3);
- else
- size = wxMin(size, cli_size.x/3);
- }
+
+ // new dock's size may not be more than the dock constraint
+ // parameter specifies. See SetDockSizeConstraint()
+ int max_dock_x_size = (int)(m_dock_constraint_x * ((double)cli_size.x));
+ int max_dock_y_size = (int)(m_dock_constraint_y * ((double)cli_size.y));
+
+ if (dock.IsHorizontal())
+ size = wxMin(size, max_dock_y_size);
+ else
+ size = wxMin(size, max_dock_x_size);
+
+ // absolute minimum size for a dock is 10 pixels
if (size < 10)
size = 10;
+
dock.size = size;
}
}
+// SetDockSizeConstraint() allows the dock constraints to be set. For example,
+// specifying values of 0.5, 0.5 will mean that upon dock creation, a dock may
+// not be larger than half of the window's size
+
+void wxAuiManager::SetDockSizeConstraint(double width_pct, double height_pct)
+{
+ m_dock_constraint_x = wxMax(0.0, wxMin(1.0, width_pct));
+ m_dock_constraint_y = wxMax(0.0, wxMin(1.0, height_pct));
+}
+
+void wxAuiManager::GetDockSizeConstraint(double* width_pct, double* height_pct) const
+{
+ if (width_pct)
+ *width_pct = m_dock_constraint_x;
+
+ if (height_pct)
+ *height_pct = m_dock_constraint_y;
+}
+
+
+
// Update() updates the layout. Whenever changes are made to
// one or more panes, this function should be called. It is the
// external entry point for running the layout engine.
// the target info. If the operation was allowed, the function returns true.
bool wxAuiManager::ProcessDockResult(wxAuiPaneInfo& target,
- const wxAuiPaneInfo& new_pos)
+ const wxAuiPaneInfo& new_pos)
{
bool allowed = false;
switch (new_pos.dock_direction)
// actually show the hint rectangle on the screen
m_frame->ClientToScreen(&rect.x, &rect.y);
+ if ( m_frame->GetLayoutDirection() == wxLayout_RightToLeft )
+ {
+ // Mirror rectangle in RTL mode
+ rect.x -= rect.GetWidth();
+ }
+
return rect;
}
// fire pane close event
- wxAuiManagerEvent e(wxEVT_AUI_PANECLOSE);
+ wxAuiManagerEvent e(wxEVT_AUI_PANE_CLOSE);
e.SetPane(&pane);
e.SetCanVeto(evt.CanVeto());
ProcessMgrEvent(e);
if (m_action_part == HitTest(event.GetX(), event.GetY()))
{
// fire button-click event
- wxAuiManagerEvent e(wxEVT_AUI_PANEBUTTON);
+ wxAuiManagerEvent e(wxEVT_AUI_PANE_BUTTON);
e.SetManager(this);
e.SetPane(m_action_part->pane);
e.SetButton(m_action_part->button->button_id);
if (evt.button == wxAUI_BUTTON_CLOSE)
{
// fire pane close event
- wxAuiManagerEvent e(wxEVT_AUI_PANECLOSE);
+ wxAuiManagerEvent e(wxEVT_AUI_PANE_CLOSE);
e.SetManager(this);
e.SetPane(evt.pane);
ProcessMgrEvent(e);
else if (evt.button == wxAUI_BUTTON_MAXIMIZE_RESTORE && !pane.IsMaximized())
{
// fire pane close event
- wxAuiManagerEvent e(wxEVT_AUI_PANEMAXIMIZE);
+ wxAuiManagerEvent e(wxEVT_AUI_PANE_MAXIMIZE);
e.SetManager(this);
e.SetPane(evt.pane);
ProcessMgrEvent(e);
else if (evt.button == wxAUI_BUTTON_MAXIMIZE_RESTORE && pane.IsMaximized())
{
// fire pane close event
- wxAuiManagerEvent e(wxEVT_AUI_PANERESTORE);
+ wxAuiManagerEvent e(wxEVT_AUI_PANE_RESTORE);
e.SetManager(this);
e.SetPane(evt.pane);
ProcessMgrEvent(e);