TriTempFile.cpp 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. #include "stdafx.h"
  2. #include "TriTempFile.h"
  3. namespace OTSMODEL {
  4. // CPartSizeFile
  5. // constructor
  6. CTriTempFile::CTriTempFile()
  7. {
  8. // initialization
  9. Init();
  10. }
  11. // copy constructor
  12. CTriTempFile::CTriTempFile(const CTriTempFile& a_oSource)
  13. {
  14. // can't copy itself
  15. if (&a_oSource == this)
  16. {
  17. return;
  18. }
  19. // copy data over
  20. Duplicate(a_oSource);
  21. }
  22. // copy constructor
  23. CTriTempFile::CTriTempFile(CTriTempFile* a_poSource)
  24. {
  25. // can't copy itself
  26. if (a_poSource == this)
  27. {
  28. return;
  29. }
  30. // copy data over
  31. Duplicate(*a_poSource);
  32. }
  33. // =operator
  34. CTriTempFile& CTriTempFile::operator=(const CTriTempFile& a_oSource)
  35. {
  36. // cleanup
  37. Cleanup();
  38. // copy the class data over
  39. Duplicate(a_oSource);
  40. // return class
  41. return *this;
  42. }
  43. // ==operator
  44. BOOL CTriTempFile::operator==(const CTriTempFile& a_oSource)
  45. {
  46. // return FASLE, if the two list are in different size
  47. int nSize = (int)m_listTriTempItem.size();
  48. if (nSize != (int)a_oSource.m_listTriTempItem.size())
  49. {
  50. return FALSE;
  51. }
  52. // return FALSE if any of the pare holes are different
  53. for (int i = 0; i < nSize; ++i)
  54. {
  55. if (!(*(m_listTriTempItem[i].get()) == *(a_oSource.m_listTriTempItem[i].get())))
  56. {
  57. return FALSE;
  58. }
  59. }
  60. return m_strName.Compare(a_oSource.m_strName) == 0 &&
  61. m_strVersion == a_oSource.m_strVersion;
  62. }
  63. // destructor
  64. CTriTempFile::~CTriTempFile()
  65. {
  66. // cleanup
  67. Cleanup();
  68. }
  69. // CPartSizeItem member functions
  70. // public
  71. // serialization
  72. void CTriTempFile::Serialize(bool isStoring, tinyxml2::XMLDocument * classDoc, tinyxml2::XMLElement * rootNode)
  73. {
  74. xmls::xString xstrName;
  75. xmls::xString xstrVersion;
  76. xmls::Collection<CTriTempItem> xTriTempItem;
  77. xmls::Slo slo;
  78. slo.Register("Name", &xstrName);
  79. slo.Register("Version", &xstrVersion);
  80. slo.Register("TemplateItem", &xTriTempItem);
  81. if (isStoring)
  82. {
  83. xstrName = TRIA_TEMP_NAME;
  84. xstrVersion = TRIA_TEMP_FILE_VERSION;
  85. for (int i = 0; i < m_listTriTempItem.size(); i++)
  86. {
  87. xTriTempItem.addItem(m_listTriTempItem[i].get());
  88. }
  89. slo.Serialize(true, classDoc, rootNode);
  90. }
  91. else
  92. {
  93. slo.Serialize(false, classDoc, rootNode);
  94. m_strName = xstrName.value().c_str();
  95. m_strVersion = xstrVersion.value().c_str();
  96. for (int i = 0; i < xTriTempItem.size(); i++)
  97. {
  98. m_listTriTempItem.push_back(CTriTempItemPtr(xTriTempItem.getItem(i)));
  99. }
  100. }
  101. //// Filemark
  102. //xmls::xInt xnTriaTempFileMark;
  103. //// Fileversion
  104. //xmls::xString xnTriaTempFileVersion;
  105. //// Name
  106. //xmls::xString xstrName;
  107. //xmls::Collection<CTriTempItem> xTriTemps;
  108. //xmls::Slo slo;
  109. //slo.Register("Name", &xstrName);
  110. //slo.Register("FileMark", &xnTriaTempFileMark);
  111. //slo.Register("FileVersion", &xnTriaTempFileVersion);
  112. //slo.Register("TriTemps", &xTriTemps);
  113. //if (isStoring)
  114. //{
  115. // xnTriaTempFileMark = TRIA_TEMP_FILE_MARK;
  116. // xnTriaTempFileVersion = TRIA_TEMP_FILE_VERSION;
  117. // xstrName = m_strName;
  118. // xTriTemps.Clear();
  119. // for (int i = 0; i < m_listTriTemp.size(); i++)
  120. // {
  121. // xTriTemps.addItem(m_listTriTemp[i].get());
  122. // }
  123. // slo.Serialize(true, classDoc, rootNode);
  124. //}
  125. //else
  126. //{
  127. // slo.Serialize(false, classDoc, rootNode);
  128. // m_strVersion = xnTriaTempFileVersion.value().c_str();
  129. // m_strName = xstrName.value().c_str();
  130. // m_listTriTemp.clear();
  131. // for (int i=0;i<xTriTemps.size ();i++)
  132. // {
  133. // m_listTriTemp.push_back(CTriTempItemPtr(xTriTemps.getItem(i)));
  134. // }
  135. //}
  136. }
  137. void CTriTempFile::SetTriTempItemList(CTriTempItemList& a_listTriTemp, BOOL a_bClear/* = TRUE*/)
  138. {
  139. // clear list if necessary
  140. if (a_bClear)
  141. {
  142. m_listTriTempItem.clear();
  143. }
  144. // copy the list
  145. for (auto pTriTemp : a_listTriTemp)
  146. {
  147. CTriTempItemPtr pTriTempItemNew = CTriTempItemPtr(new CTriTempItem(*pTriTemp.get()));
  148. m_listTriTempItem.push_back(pTriTempItemNew);
  149. }
  150. }
  151. CTriTempItemPtr CTriTempFile::GetTriTempByIndex(int a_nIndex)
  152. {
  153. if (a_nIndex < 0 || a_nIndex >= (int)m_listTriTempItem.size())
  154. {
  155. // invalid index
  156. return nullptr;
  157. }
  158. return m_listTriTempItem[a_nIndex];
  159. }
  160. CTriTempItemPtr CTriTempFile::GetTriTempByName(CString a_strPartSizeName)
  161. {
  162. a_strPartSizeName.Trim();
  163. if (a_strPartSizeName.IsEmpty())
  164. {
  165. // invalid hole name
  166. return nullptr;
  167. }
  168. auto itr = std::find_if(m_listTriTempItem.begin(), m_listTriTempItem.end(), [a_strPartSizeName](CTriTempItemPtr p) { return p->GetTemplateName().CompareNoCase(a_strPartSizeName) == 0; });
  169. if (itr == m_listTriTempItem.end())
  170. {
  171. // didn't find the hole
  172. return nullptr;
  173. }
  174. // return the hole
  175. return *itr;
  176. }
  177. // protected
  178. // cleanup
  179. void CTriTempFile::Cleanup()
  180. {
  181. m_listTriTempItem.clear();
  182. }
  183. // initialization
  184. void CTriTempFile::Init()
  185. {
  186. m_strVersion = _T("");
  187. m_strName = _T("");
  188. // initialization
  189. m_listTriTempItem.clear();
  190. }
  191. // duplication
  192. void CTriTempFile::Duplicate(const CTriTempFile& a_oSource)
  193. {
  194. // initialization
  195. Init();
  196. // copy data over
  197. m_strVersion = a_oSource.m_strVersion;
  198. m_strName = a_oSource.m_strName;
  199. for (auto pTriTempItem : a_oSource.m_listTriTempItem)
  200. {
  201. CTriTempItemPtr pTriTempNew = CTriTempItemPtr(new CTriTempItem(pTriTempItem.get()));
  202. m_listTriTempItem.push_back(pTriTempNew);
  203. }
  204. }
  205. }