void ToolBarAreaImpl::restoreLayout(const YamlMappingPtr layout) { if(DEBUG_MODE){ cout << "ToolBarAreaImpl::restoreLayout()" << endl; } if(isBeforeDoingInitialLayout){ initialLayout = layout; return; } const YamlMappingPtr layoutOfToolBars = layout->findMapping("layoutOfToolBars"); if(!layoutOfToolBars->isValid()){ layoutToolBars(); return; } // make the map from name to toolBar typedef map<QString, ToolBar*> ToolBarMap; ToolBarMap toolBarMap; for(size_t i=0; i < toolBarRows.size(); ++i){ ToolBarList& toolBars = toolBarRows[i]->toolBars; for(ToolBarList::iterator q = toolBars.begin(); q != toolBars.end(); ++q){ ToolBar* toolBar = *q; toolBarMap[toolBar->windowTitle()] = toolBar; } } toolBarRows.clear(); for(size_t i=0; i < newToolBars.size(); ++i){ toolBarMap[newToolBars[i]->windowTitle()] = newToolBars[i]; newToolBars[i]->setParent(self); } newToolBars.clear(); const YamlSequence* rows = layoutOfToolBars->get("rows").toSequence(); for(int i=0; i < rows->size(); ++i){ ToolBarRowPtr row(new ToolBarRow(self)); toolBarRows.push_back(row); const YamlSequence* bars = rows->get(i).toSequence(); for(int j=0; j < bars->size(); ++j){ const YamlMapping* state = bars->get(j).toMapping(); ToolBarMap::iterator it = toolBarMap.find(QString(state->get("name").toString().c_str())); if(it != toolBarMap.end()){ ToolBar* toolBar = it->second; toolBarMap.erase(it); row->toolBars.push_back(toolBar); toolBar->desiredX = state->get("x").toInt(); toolBar->layoutPriority = state->get("priority").toInt(); } } if(row->toolBars.empty()){ toolBarRows.pop_back(); } } for(ToolBarMap::iterator p = toolBarMap.begin(); p != toolBarMap.end(); ++p){ newToolBars.push_back(p->second); } layoutToolBars(); }