Exemple #1
0
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();
    }
}