// reduce flicker
p.window->SetSize(1,1);
- p.frame->Show(false);
+
+ if (p.frame->IsShown())
+ p.frame->Show(false);
// reparent to m_frame and destroy the pane
p.window->Reparent(m_frame);
return result;
}
-// Load a "pane" with the pane infor settings in pane_part; return the remainder of the
-// string
-wxString wxFrameManager::LoadPaneInfo(wxString pane_part, wxPaneInfo &pane)
+// Load a "pane" with the pane infor settings in pane_part
+void wxFrameManager::LoadPaneInfo(wxString pane_part, wxPaneInfo &pane)
{
// replace escaped characters so we can
// split up the string easily
pane_part.Replace(wxT("\\|"), wxT("\a"));
pane_part.Replace(wxT("\\;"), wxT("\b"));
- wxString val_part = pane_part.BeforeFirst(wxT(';'));
- pane_part = pane_part.AfterFirst(wxT(';'));
- wxString val_name = val_part.BeforeFirst(wxT('='));
- wxString value = val_part.AfterFirst(wxT('='));
- val_name.MakeLower();
- val_name.Trim(true);
- val_name.Trim(false);
- value.Trim(true);
- value.Trim(false);
-
- if (val_name.empty())
- return wxEmptyString;
-
- if (val_name == wxT("name"))
- pane.name = value;
- else if (val_name == wxT("caption"))
- pane.caption = value;
- else if (val_name == wxT("state"))
- pane.state = (unsigned int)wxAtoi(value.c_str());
- else if (val_name == wxT("dir"))
- pane.dock_direction = wxAtoi(value.c_str());
- else if (val_name == wxT("layer"))
- pane.dock_layer = wxAtoi(value.c_str());
- else if (val_name == wxT("row"))
- pane.dock_row = wxAtoi(value.c_str());
- else if (val_name == wxT("pos"))
- pane.dock_pos = wxAtoi(value.c_str());
- else if (val_name == wxT("prop"))
- pane.dock_proportion = wxAtoi(value.c_str());
- else if (val_name == wxT("bestw"))
- pane.best_size.x = wxAtoi(value.c_str());
- else if (val_name == wxT("besth"))
- pane.best_size.y = wxAtoi(value.c_str());
- else if (val_name == wxT("minw"))
- pane.min_size.x = wxAtoi(value.c_str());
- else if (val_name == wxT("minh"))
- pane.min_size.y = wxAtoi(value.c_str());
- else if (val_name == wxT("maxw"))
- pane.max_size.x = wxAtoi(value.c_str());
- else if (val_name == wxT("maxh"))
- pane.max_size.y = wxAtoi(value.c_str());
- else if (val_name == wxT("floatx"))
- pane.floating_pos.x = wxAtoi(value.c_str());
- else if (val_name == wxT("floaty"))
- pane.floating_pos.y = wxAtoi(value.c_str());
- else if (val_name == wxT("floatw"))
- pane.floating_size.x = wxAtoi(value.c_str());
- else if (val_name == wxT("floath"))
- pane.floating_size.y = wxAtoi(value.c_str());
- else {
- wxFAIL_MSG(wxT("Bad Perspective String"));
+ while(1)
+ {
+ wxString val_part = pane_part.BeforeFirst(wxT(';'));
+ pane_part = pane_part.AfterFirst(wxT(';'));
+ wxString val_name = val_part.BeforeFirst(wxT('='));
+ wxString value = val_part.AfterFirst(wxT('='));
+ val_name.MakeLower();
+ val_name.Trim(true);
+ val_name.Trim(false);
+ value.Trim(true);
+ value.Trim(false);
+
+ if (val_name.empty())
+ break;
+
+ if (val_name == wxT("name"))
+ pane.name = value;
+ else if (val_name == wxT("caption"))
+ pane.caption = value;
+ else if (val_name == wxT("state"))
+ pane.state = (unsigned int)wxAtoi(value.c_str());
+ else if (val_name == wxT("dir"))
+ pane.dock_direction = wxAtoi(value.c_str());
+ else if (val_name == wxT("layer"))
+ pane.dock_layer = wxAtoi(value.c_str());
+ else if (val_name == wxT("row"))
+ pane.dock_row = wxAtoi(value.c_str());
+ else if (val_name == wxT("pos"))
+ pane.dock_pos = wxAtoi(value.c_str());
+ else if (val_name == wxT("prop"))
+ pane.dock_proportion = wxAtoi(value.c_str());
+ else if (val_name == wxT("bestw"))
+ pane.best_size.x = wxAtoi(value.c_str());
+ else if (val_name == wxT("besth"))
+ pane.best_size.y = wxAtoi(value.c_str());
+ else if (val_name == wxT("minw"))
+ pane.min_size.x = wxAtoi(value.c_str());
+ else if (val_name == wxT("minh"))
+ pane.min_size.y = wxAtoi(value.c_str());
+ else if (val_name == wxT("maxw"))
+ pane.max_size.x = wxAtoi(value.c_str());
+ else if (val_name == wxT("maxh"))
+ pane.max_size.y = wxAtoi(value.c_str());
+ else if (val_name == wxT("floatx"))
+ pane.floating_pos.x = wxAtoi(value.c_str());
+ else if (val_name == wxT("floaty"))
+ pane.floating_pos.y = wxAtoi(value.c_str());
+ else if (val_name == wxT("floatw"))
+ pane.floating_size.x = wxAtoi(value.c_str());
+ else if (val_name == wxT("floath"))
+ pane.floating_size.y = wxAtoi(value.c_str());
+ else {
+ wxFAIL_MSG(wxT("Bad Perspective String"));
+ }
}
// replace escaped characters so we can
pane_part.Replace(wxT("\a"), wxT("|"));
pane_part.Replace(wxT("\b"), wxT(";"));
- return pane_part;
+ return;
}
pane_part.Replace(wxT("\a"), wxT("|"));
pane_part.Replace(wxT("\b"), wxT(";"));
- while (!pane_part.empty())
- {
- pane_part = LoadPaneInfo(pane_part, pane);
- }
+ LoadPaneInfo(pane_part, pane);
wxPaneInfo& p = GetPane(pane.name);
if (!p.IsOk())
// reduce flicker
p.window->SetSize(1,1);
- p.frame->Show(false);
+
+ if (p.frame->IsShown())
+ p.frame->Show(false);
// reparent to m_frame and destroy the pane
p.window->Reparent(m_frame);
frame->SetPaneWindow(p);
p.frame = frame;
- if (p.IsShown())
- {
+ if (p.IsShown() && !frame->IsShown())
frame->Show();
- }
}
else
{
//p.frame->Move(p.floating_pos.x, p.floating_pos.y);
}
- p.frame->Show(p.IsShown());
+ if (p.frame->IsShown() != p.IsShown())
+ p.frame->Show(p.IsShown());
}
}
else
{
- p.window->Show(p.IsShown());
+ if (p.window->IsShown() != p.IsShown())
+ p.window->Show(p.IsShown());
}
// if "active panes" are no longer allowed, clear
// hides a transparent window hint, if there is one
if (m_hint_wnd)
{
- m_hint_wnd->Show(false);
+ if (m_hint_wnd->IsShown())
+ m_hint_wnd->Show(false);
#if wxCHECK_VERSION(2,7,0)
m_hint_wnd->SetTransparent(0);
#else
{
// reparent the pane window back to us and
// prepare the frame window for destruction
- pane.window->Show(false);
+ if (pane.window->IsShown())
+ pane.window->Show(false);
pane.window->Reparent(m_frame);
pane.frame = NULL;
pane.Hide();