void ViewArea::restoreAllViewAreaLayouts(ArchivePtr archive) { ViewAreaImpl* mainViewAreaImpl = MainWindow::instance()->viewArea()->impl; if(archive){ Listing& layouts = *archive->findListing("viewAreas"); if(!layouts.isValid()){ // for the compatibility with the older (1.4 or earlier) versions Archive* layoutOfViews = archive->findSubArchive("layoutOfViews"); if(layoutOfViews->isValid()){ layoutOfViews->inheritSharedInfoFrom(*archive); mainViewAreaImpl->restoreLayout(layoutOfViews); } } else { QDesktopWidget* desktop = QApplication::desktop(); const int numScreens = desktop->screenCount(); for(int i=0; i < layouts.size(); ++i){ Mapping& layout = *layouts[i].toMapping(); Archive* contents = dynamic_cast<Archive*>(layout.get("contents").toMapping()); if(contents){ contents->inheritSharedInfoFrom(*archive); const string type = layout.get("type").toString(); if(type == "embedded"){ mainViewAreaImpl->restoreLayout(contents); mainViewAreaImpl->self->setViewTabsVisible(layout.get("tabs", mainViewAreaImpl->viewTabsVisible)); } else if(type == "independent"){ ViewArea* viewWindow = new ViewArea(); viewWindow->impl->viewTabsVisible = layout.get("tabs", true); viewWindow->impl->restoreLayout(contents); if(viewWindow->impl->numViews == 0){ delete viewWindow; } else { const Listing& geo = *layout.findListing("geometry"); if(geo.isValid() && geo.size() == 4){ // -1 means the primary screen int screen = -1; if(layout.read("screen", screen)){ if(screen >= numScreens){ screen = -1; } } const QRect s = desktop->screenGeometry(screen); const QRect r(geo[0].toInt(), geo[1].toInt(), geo[2].toInt(), geo[3].toInt()); viewWindow->setGeometry(r.translated(s.x(), s.y())); } if(layout.get("fullScreen", false)){ layout.read("maximized", viewWindow->impl->isMaximizedBeforeFullScreen); viewWindow->showFullScreen(); } else { if(layout.get("maximized"), false){ viewWindow->showMaximized(); } else { viewWindow->show(); } } } } } } } } if(isBeforeDoingInitialLayout){ mainViewAreaImpl->resetLayout(); } }