本文整理汇总了C++中ArchivePtr::findListing方法的典型用法代码示例。如果您正苦于以下问题:C++ ArchivePtr::findListing方法的具体用法?C++ ArchivePtr::findListing怎么用?C++ ArchivePtr::findListing使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ArchivePtr
的用法示例。
在下文中一共展示了ArchivePtr::findListing方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: restoreAllViewAreaLayouts
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();
}
}
示例2: restoreViews
void ViewManager::restoreViews(ArchivePtr archive, const std::string& key, ViewManager::ViewStateInfo& out_viewStateInfo)
{
MessageView* mv = MessageView::instance();
typedef map<ViewInfo*, vector<View*> > ViewsMap;
ViewsMap remainingViewsMap;
Listing* viewList = archive->findListing(key);
if(viewList->isValid() && !viewList->empty()){
vector<ViewState>* viewsToRestoreState = new vector<ViewState>();
out_viewStateInfo.data = viewsToRestoreState;
int id;
string moduleName;
string className;
string instanceName;
for(int i=0; i < viewList->size(); ++i){
Archive* viewArchive = dynamic_cast<Archive*>(viewList->at(i)->toMapping());
if(viewArchive){
bool isHeaderValid =
viewArchive->read("id", id) &&
viewArchive->read("plugin", moduleName) &&
viewArchive->read("class", className);
if(isHeaderValid){
View* view = 0;
if(!viewArchive->read("name", instanceName)){
view = getOrCreateView(moduleName, className);
} else {
// get one of the view instances having the instance name, or create a new instance.
// Different instances are assigned even if there are instances with the same name in the archive
ViewInfo* info = findViewInfo(moduleName, className);
if(info){
vector<View*>* remainingViews;
ViewsMap::iterator p = remainingViewsMap.find(info);
if(p != remainingViewsMap.end()){
remainingViews = &p->second;
} else {
remainingViews = &remainingViewsMap[info];
InstanceInfoList& instances = info->instances;
remainingViews->reserve(instances.size());
InstanceInfoList::iterator q = instances.begin();
if(info->hasDefaultInstance() && q != instances.end()){
++q;
}
while(q != instances.end()){
remainingViews->push_back((*q++)->view);
}
}
for(vector<View*>::iterator q = remainingViews->begin(); q != remainingViews->end(); ++q){
if((*q)->name() == instanceName){
view = *q;
remainingViews->erase(q);
break;
}
}
if(!view){
if(!info->isSingleton() || info->instances.empty()){
view = info->createView(instanceName, true);
} else {
mv->putln(MessageView::ERROR,
boost::format(_("A singleton view \"%1%\" of the %2% type cannot be created because its singleton instance has already been created."))
% instanceName % info->className());
}
}
}
}
if(view){
archive->registerViewId(view, id);
ArchivePtr state = viewArchive->findSubArchive("state");
if(state->isValid()){
state->inheritSharedInfoFrom(*archive);
viewsToRestoreState->push_back(ViewState(view, state));
}
if(viewArchive->get("mounted", false)){
mainWindow->viewArea()->addView(view);
}
}
}
}
}
}
}