// save to file void MetricDomModel::SaveToFile(const QModelIndex& selectedItem, const QString& fileName) { QFile file( fileName ); if( !file.open( QIODevice::WriteOnly ) ) { printf("ERROR writing to file %s\n", fileName.toStdString().c_str()); return ; } DomItem *item = static_cast<DomItem*>(selectedItem.internalPointer()); vector<QDomNode> nodes; while(item) { nodes.push_back(item->node()); item = item->parent(); } SmartPtr<Named_interface> ni = Root::instance()->interface( metricData_manager + "/metricRegistrar"); MetricDataManager* mDataRegistrar = (MetricDataManager*)(ni.raw_ptr()); // create QDom QDomDocument doc("save"); QDomElement root = doc.createElement( "MetricDataCollection" ); doc.appendChild( root ); if (nodes.size() == 4) { // save one property string metric_name = nodes[2].nodeName().toStdString(); string grid_name = nodes[1].nodeName().toStdString(); string property_name = nodes[0].nodeName().toStdString(); AddQDomForProperty(mDataRegistrar, doc, root, metric_name,grid_name,property_name); } else if (nodes.size() == 3) { // save all properties in the grid string metric_name = nodes[1].nodeName().toStdString(); string grid_name = nodes[0].nodeName().toStdString(); string property_name; item = static_cast<DomItem*>(selectedItem.internalPointer()); QHash<int,DomItem*>::iterator it; for (it = item->begin(); it != item->end(); ++it) { property_name = it.value()->node().nodeName().toStdString(); AddQDomForProperty(mDataRegistrar, doc, root, metric_name,grid_name,property_name); } } else if (nodes.size() == 2) { // save all grids with these metric string metric_name = nodes[0].nodeName().toStdString(); string grid_name; string property_name; DomItem* item1; item = static_cast<DomItem*>(selectedItem.internalPointer()); QHash<int,DomItem*>::iterator it; QHash<int,DomItem*>::iterator it1; for (it = item->begin(); it != item->end(); ++it) { grid_name = it.value()->node().nodeName().toStdString(); item1 = it.value(); for (it1 = item1->begin(); it1 != item1->end(); ++it1) { property_name = it1.value()->node().nodeName().toStdString(); AddQDomForProperty(mDataRegistrar, doc, root, metric_name,grid_name,property_name); } } } QTextStream ts( &file ); ts << doc.toString(); file.close(); }