Advertisement
Guest User

Untitled

a guest
Jul 3rd, 2015
199
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.06 KB | None | 0 0
  1. void SatConfigSys::saveMpcPlToFile(QString filepath)
  2. {
  3. QFile mpc_pl_file(filepath);
  4. if(!mpc_pl_file.open(QIODevice::WriteOnly))
  5. {
  6. qCritical() << "Error, unable to open MPC_PL file!!!";
  7. }
  8. QXmlStreamWriter mpc_pl_xml_writer(&mpc_pl_file);
  9. QDateTime current_utc_date_time = current_utc_date_time.currentDateTimeUtc();
  10. QString current_utc_date_time_str = current_utc_date_time.toString("yyyy-MM-ddThh:mm:ss");
  11.  
  12.  
  13. mpc_pl_xml_writer.setAutoFormatting(true);
  14. mpc_pl_xml_writer.setAutoFormattingIndent(-1); //Indent using one tab (spaces = positive, tabs = negative)
  15.  
  16. //XML Header
  17. mpc_pl_xml_writer.setCodec("ISO-8859-1");
  18. mpc_pl_xml_writer.writeStartDocument("1.0");
  19.  
  20. mpc_pl_xml_writer.writeCharacters("\r\n");
  21.  
  22. //SccMpcIf1 Header
  23. mpc_pl_xml_writer.writeStartElement("SccMpcIf1");
  24.  
  25. //Construct SccMpcIf1 attributes
  26. QXmlStreamAttributes SccMpcIf1;
  27. SccMpcIf1.append("version", "1.0");
  28. SccMpcIf1.append("xmlns:xsi", "http://www/w3.org/2001/XMLSchema-instance");
  29. SccMpcIf1.append("xsi:noNameSpaceSchemaLocation", "SccMpcIf1.xsd");
  30.  
  31. mpc_pl_xml_writer.writeAttributes(SccMpcIf1);
  32.  
  33. //Header definition
  34. mpc_pl_xml_writer.writeStartElement("headerDefinition");
  35. mpc_pl_xml_writer.writeStartElement("timestamp");
  36. mpc_pl_xml_writer.writeTextElement("dateAndTime", current_utc_date_time_str);
  37. mpc_pl_xml_writer.writeEndElement();
  38. mpc_pl_xml_writer.writeTextElement("source", "ASTRIUM-AEA52");
  39. mpc_pl_xml_writer.writeEndElement();
  40.  
  41. mpc_pl_xml_writer.writeStartElement("dataBlock");
  42. mpc_pl_xml_writer.writeAttribute("version", "1.0");
  43.  
  44. //Start actual content
  45. int starting_row = 1; //First row of actual data in mpc_pl_proxyModel, row 0 is XML version number
  46. QString current_satName_note = "";
  47. QString mode = "staName";
  48.  
  49.  
  50. for(int current_row = starting_row; current_row < mpc_pl_proxyModel->rowCount(); current_row++)
  51. {
  52. QModelIndex current_name_index = mpc_pl_proxyModel->index(current_row, NAME_INDEX);
  53. QModelIndex next_note_index = mpc_pl_proxyModel->index(current_row+1, NOTE_INDEX);
  54.  
  55.  
  56. if(mpc_pl_proxyModel->data(current_name_index) == "staName")
  57. {
  58. mode = "staName";
  59. mpc_pl_xml_writer.writeStartElement(getCurrentParamValue(mpc_pl_proxyModel, current_row));
  60. mpc_pl_xml_writer.writeStartElement("Definition");
  61. }
  62.  
  63.  
  64. else if(mpc_pl_proxyModel->data(current_name_index) == "satName")
  65. {
  66. mode = "satName";
  67. mpc_pl_xml_writer.writeStartElement(getCurrentParamValue(mpc_pl_proxyModel, current_row));
  68.  
  69. if(current_row+1 < mpc_pl_proxyModel->rowCount())
  70. {
  71. current_satName_note = mpc_pl_proxyModel->data(next_note_index);
  72. mpc_pl_xml_writer.writeStartElement(current_satName_note);
  73. }
  74. }
  75.  
  76. else
  77. {
  78. mpc_pl_xml_writer.writeTextElement(mpc_pl_proxyModel->data(current_name_index)
  79. ,getCurrentParamValue(mpc_pl_proxyModel, current_row));
  80.  
  81. if(current_row+1 < mpc_pl_proxyModel->rowCount())
  82. {
  83. if(mode == "staName" && mpc_pl_proxyModel->data(next_note_index) == "nocase")
  84. {
  85. //Find new staName, end this element loop
  86. mpc_pl_xml_writer.writeEndElement(); //End "Definition" element
  87. mpc_pl_xml_writer.writeEndElement(); //End <staName> element
  88. }
  89. else if(mode == "satName" && current_satName_note != mpc_pl_proxyModel->data(next_note_index))
  90. {
  91. mpc_pl_xml_writer.writeEndElement();
  92. current_satName_note = mpc_pl_proxyModel->data(next_note_index);
  93. mpc_pl_xml_writer.writeStartElement(current_satName_note);
  94. }
  95. }
  96. }
  97. }
  98.  
  99. mpc_pl_xml_writer.writeEndDocument(); //End the rest of unended elements (i.e. /Theos1, /dataBlock, /SccMpcIf1)
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement