StringAttr.cpp 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  1. #include "StringAttr.h"
  2. #include "..\strutil.h"
  3. #include "..\..\missioneditor.h"
  4. #include "..\AttributeList.h"
  5. extern IGUIManager* igui;
  6. #include "..\..\forms\globalParams.h"
  7. StringAttribute & StringAttribute::operator = (const StringAttribute & source)
  8. {
  9. SetValue (source.GetValue());
  10. SetMaxChars (source.GetMaxChars());
  11. SetMinChars (source.GetMinChars());
  12. flags = source.flags;
  13. BaseAttribute::Copy(*this, source);
  14. return *this;
  15. }
  16. StringAttribute & StringAttribute::operator = (const IMOParams::String& source)
  17. {
  18. SetValue (source.def);
  19. SetMaxChars (source.maxChars);
  20. SetMinChars (source.minChars);
  21. flags = source.flags;
  22. SetName (source.name);
  23. SetIsLimit (source.isLimit);
  24. return *this;
  25. }
  26. StringAttribute::StringAttribute ()
  27. {
  28. data_storage[0] = 0;
  29. minChars = 0;
  30. maxChars = 100;
  31. flags = 0;
  32. Type = IMOParams::t_string;
  33. }
  34. StringAttribute::~StringAttribute ()
  35. {
  36. //api->Trace("string deleted\n");
  37. }
  38. void StringAttribute::SetValue (const char* value)
  39. {
  40. crt_strncpy(data_storage, 100, value, 100);
  41. // this->value = value;
  42. }
  43. const char* StringAttribute::GetValue () const
  44. {
  45. return data_storage;
  46. //return value;
  47. }
  48. void StringAttribute::SetMaxChars (int Max)
  49. {
  50. maxChars = Max;
  51. if (maxChars > 100) maxChars = 100;
  52. }
  53. int StringAttribute::GetMaxChars () const
  54. {
  55. return maxChars;
  56. }
  57. void StringAttribute::SetMinChars (int Min)
  58. {
  59. minChars = Min;
  60. }
  61. int StringAttribute::GetMinChars () const
  62. {
  63. return minChars;
  64. }
  65. void StringAttribute::PopupEdit (int pX, int pY)
  66. {
  67. //GUIWindow* wnd = igui->FindWindow (STRINGEDIT_WINDOWNAME);
  68. //if (wnd) igui->Close (wnd);
  69. Form = NEW TStringEdit (0, 0);
  70. Form->SetPosition (pX, pY);
  71. // Form->lDescription->Caption = GetName ();
  72. Form->eValue->Text = data_storage;
  73. Form->eValue->Hint = GetName ();
  74. if (GetIsLimit())
  75. {
  76. Form->eValue->Hint = string ("\nMinChars : ") + string (IntToStr (minChars));
  77. Form->eValue->Hint = string ("\nMaxChars : ") + string (IntToStr (maxChars));
  78. string sflag = "\nFlags : ";
  79. for (int n = 0; n < 16; n++)
  80. {
  81. if (flags & 1) sflag += "1"; else sflag += "0";
  82. }
  83. Form->eValue->Hint = sflag;
  84. }
  85. Form->MasterAttrib = this;
  86. igui->ShowModal (Form);
  87. // Обязательно нужно сделать...
  88. pForm = Form;
  89. }
  90. void StringAttribute::AddToWriter (MOPWriter& wrt)
  91. {
  92. wrt.AddString (data_storage);
  93. }
  94. void StringAttribute::WriteToFile (IFile* pFile)
  95. {
  96. DWORD written = 0;
  97. DWORD slen = strlen (GetName ());
  98. written = pFile->Write(&slen, sizeof (DWORD));
  99. Assert (written == sizeof (DWORD));
  100. written = pFile->Write(GetName (), slen);
  101. Assert (written == slen);
  102. DWORD sLen = strlen (data_storage);
  103. written = pFile->Write(&sLen, sizeof (DWORD));
  104. Assert (written == sizeof (DWORD));
  105. written = pFile->Write(&minChars, sizeof (int));
  106. Assert (written == sizeof (int));
  107. written = pFile->Write(&maxChars, sizeof (int));
  108. Assert (written == sizeof (int));
  109. written = pFile->Write(&flags, sizeof (DWORD));
  110. Assert (written == sizeof (DWORD));
  111. written = pFile->Write(data_storage, sLen);
  112. Assert (written == sLen);
  113. DWORD sLimit = IsLimit;
  114. written = pFile->Write(&sLimit, sizeof (DWORD));
  115. Assert (written == sizeof (DWORD));
  116. }
  117. #pragma warning (disable : 4800)
  118. void StringAttribute::LoadFromFile (IFile* pFile, const char* ClassName)
  119. {
  120. DWORD loaded = 0;
  121. DWORD slen = 0;
  122. loaded = pFile->Read(&slen, sizeof (DWORD));
  123. Assert (loaded == sizeof (DWORD));
  124. char* ldName = NEW char[slen+1];
  125. ldName[slen] = 0;
  126. loaded = pFile->Read(ldName, slen);
  127. Assert (loaded == slen);
  128. SetName (ldName);
  129. delete ldName;
  130. DWORD sLen = 0;
  131. loaded = pFile->Read(&sLen, sizeof (DWORD));
  132. Assert (loaded == sizeof (DWORD));
  133. int ldMinChars, ldMaxChars;
  134. ldMinChars, ldMaxChars = 0;
  135. loaded = pFile->Read(&ldMinChars, sizeof (int));
  136. Assert (loaded == sizeof (int));
  137. loaded = pFile->Read(&ldMaxChars, sizeof (int));
  138. Assert (loaded == sizeof (int));
  139. minChars = ldMinChars;
  140. ldMaxChars = ldMaxChars;
  141. DWORD ldFlags = 0;
  142. loaded = pFile->Read(&ldFlags, sizeof (DWORD));
  143. Assert (loaded == sizeof (DWORD));
  144. flags = ldFlags;
  145. char* ldValue = NEW char [sLen+1];
  146. ldValue[sLen] = 0;
  147. loaded = pFile->Read(ldValue, sLen);
  148. Assert (loaded == sLen);
  149. SetValue (ldValue);
  150. delete ldValue;
  151. //---------------------------------
  152. DWORD sLimit = 0;
  153. loaded = pFile->Read(&sLimit, sizeof (DWORD));
  154. Assert (loaded == sizeof (DWORD));
  155. IsLimit = (bool)sLimit;
  156. }
  157. void StringAttribute::UpdateTree(GUITreeNode * node, string * v)
  158. {
  159. gp->__tmpText = GetName ();
  160. gp->__tmpText += "#c808080";
  161. gp->__tmpText += string (" '");
  162. gp->__tmpText += data_storage;
  163. gp->__tmpText += string (" '");
  164. if (v && v->IsEmpty())
  165. {
  166. *v = data_storage;
  167. }
  168. node->Image->Load("meditor\\string");
  169. node->Tag = TAG_ATTRIBUTE;
  170. node->CanDrag = false;
  171. node->CanDrop = false;
  172. node->CanCopy = false;
  173. node->Data = this;
  174. node->SetText(gp->__tmpText);
  175. }
  176. void StringAttribute::Add2Tree (GUITreeNodes* nodes, TreeNodesPool* nodesPool, string * v)
  177. {
  178. GUITreeNode* nNode = nodesPool->CreateNode();;
  179. UpdateTree(nNode, v);
  180. nodes->Add(nNode);
  181. }
  182. void StringAttribute::WriteToXML (TextFile &file, int level)
  183. {
  184. file.Write(level, "<string val = \"%s\">\n", GetName ());
  185. file.Write(level+1, "<value val = \"%s\" />\n", data_storage);
  186. file.Write(level, "</string>\n");
  187. }
  188. void StringAttribute::ReadXML (TiXmlElement* Root, const char* szMasterClass)
  189. {
  190. const char* objectName = Root->Attribute("val");
  191. SetName(objectName);
  192. //Минимум и максимум берем из исходного
  193. MissionEditor::tAvailableMO* pObject = sMission->GetAvailableClassByName(szMasterClass);
  194. if (pObject)
  195. {
  196. BaseAttribute* SourceAttr = pObject->AttrList->FindInAttrList(GetName(), GetType());
  197. if (SourceAttr)
  198. {
  199. StringAttribute* SrcAttr = (StringAttribute*)SourceAttr;
  200. *this = *SrcAttr;
  201. }
  202. }
  203. TiXmlElement* node = Root->FirstChildElement("value");
  204. if (node)
  205. {
  206. SetValue(node->Attribute("val"));
  207. //value = ;
  208. }
  209. }