| 
					
				 | 
			
			
				@@ -242,7 +242,7 @@ QLayoutItem* ctkLayoutManager::processElement(QDomElement element) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   else if (element.tagName() == "view") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return new QWidgetItem(this->processViewElement(element)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return this->widgetItemFromXML(element); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   qDebug() << element.tagName() << element.text(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   Q_ASSERT(element.tagName() != "layout" && element.tagName() != "view"); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -314,13 +314,36 @@ void ctkLayoutManager::processItemElement(QDomElement itemElement, QLayoutItem* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   Q_ASSERT(itemElement.tagName() == "item"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   Q_ASSERT(itemElement.childNodes().count() == 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  QLayoutItem* childItem = this->processElement(itemElement.firstChild().toElement()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  bool multiple = itemElement.attribute("multiple", "false") == "true"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  QList<QLayoutItem*> childrenItem; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (multiple) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    childrenItem = this->widgetItemsFromXML(itemElement.firstChild().toElement()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    childrenItem << this->processElement(itemElement.firstChild().toElement()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  foreach(QLayoutItem* item, childrenItem) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    this->addChildItemToLayout(itemElement, item, layoutItem); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//----------------------------------------------------------------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void ctkLayoutManager::addChildItemToLayout(QDomElement itemElement, QLayoutItem* childItem, QLayoutItem* layoutItem) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  Q_ASSERT(childItem); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  QString itemName = itemElement.attribute("name"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (itemName.isEmpty() && childItem->widget()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    itemName = childItem->widget()->windowTitle(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   QLayout* layout = layoutItem->layout(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   QGridLayout* gridLayout = qobject_cast<QGridLayout*>(layout); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   QLayout* genericLayout = qobject_cast<QLayout*>(layout); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   QTabWidget* tabWidget = qobject_cast<QTabWidget*>(layoutItem->widget()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   QSplitter* splitter = qobject_cast<QSplitter*>(layoutItem->widget()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (gridLayout) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     int row = itemElement.attribute("row", QString::number(0)).toInt(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -343,7 +366,7 @@ void ctkLayoutManager::processItemElement(QDomElement itemElement, QLayoutItem* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if (tabWidget) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      tabWidget->addTab(childWidget, itemElement.attribute("name")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      tabWidget->addTab(childWidget, itemName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -353,15 +376,37 @@ void ctkLayoutManager::processItemElement(QDomElement itemElement, QLayoutItem* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //----------------------------------------------------------------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-QWidget* ctkLayoutManager::processViewElement(QDomElement viewElement) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+QWidgetItem* ctkLayoutManager::widgetItemFromXML(QDomElement viewElement) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Q_D(ctkLayoutManager); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   Q_ASSERT(viewElement.tagName() == "view"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   QWidget* view = this->viewFromXML(viewElement); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  this->setupView(viewElement, view); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  return new QWidgetItem(view); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//----------------------------------------------------------------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void ctkLayoutManager::setupView(QDomElement viewElement, QWidget* view) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  Q_UNUSED(viewElement); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  Q_D(ctkLayoutManager); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   Q_ASSERT(view); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   view->setVisible(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   d->Views.insert(view); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  return view; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//----------------------------------------------------------------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+QList<QLayoutItem*> ctkLayoutManager::widgetItemsFromXML(QDomElement viewElement) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  Q_ASSERT(viewElement.tagName() == "view"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  QList<QLayoutItem*> res; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  QList<QWidget*> views = this->viewsFromXML(viewElement); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  Q_ASSERT(views.count()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  foreach(QWidget* view, views) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    this->setupView(viewElement, view); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    res << new QWidgetItem(view); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  return res; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //----------------------------------------------------------------------------- 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -371,3 +416,11 @@ QWidget* ctkLayoutManager::viewFromXML(QDomElement viewElement) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   // default, for testing purpose. Must be reimplemented 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return new QWidget(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//----------------------------------------------------------------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+QList<QWidget*> ctkLayoutManager::viewsFromXML(QDomElement viewElement) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  QList<QWidget*> res; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  res << this->viewFromXML(viewElement); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  return res; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |