Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1547 lines
49 KiB

  1. // ProjectDataStructs.h: interface for the ProjectDataStructs class.
  2. //
  3. // By: Saud A. Alshibani. (c) MS 1998. All rights reserved.
  4. //////////////////////////////////////////////////////////////////////
  5. #if !defined(AFX_PROJECTDATASTRUCTS_H__A1B64483_53BD_11D2_8780_00C04F8DA632__INCLUDED_)
  6. #define AFX_PROJECTDATASTRUCTS_H__A1B64483_53BD_11D2_8780_00C04F8DA632__INCLUDED_
  7. #if _MSC_VER > 1000
  8. #pragma once
  9. #endif // _MSC_VER > 1000
  10. #include "RaidDataStructs.h"
  11. //#pragma TODO(_T("Finish replacing XMLTAG_xxx with Getxxxxx()"))
  12. //////////////////////////////////////////////////////////////////////
  13. const LPTSTR XMLTAG_PROJECT = _T("PROJECT");
  14. const LPTSTR XMLTAG_PROJECT_DATA = _T("PROJDATA");
  15. const LPTSTR XMLTAG_PROJECT_OPTIONS = _T("PROJOPTIONS");
  16. const LPTSTR XMLTAG_PROJECT_NAME = _T("PROJNAME");
  17. const LPTSTR XMLTAG_PROJECT_PATH = _T("PROJPATH");
  18. const LPTSTR XMLTAG_PROJECT_RRIFILE = _T("RRIFILE");
  19. const LPTSTR XMLTAG_PROJECT_LOGFILE = _T("LOGFILE");
  20. const LPTSTR XMLTAG_PROJECT_USERRIFILE = _T("USERRIFILE");
  21. const LPTSTR XMLTAG_PROJECT_USELOGFILE = _T("USELOGFILE");
  22. const LPTSTR XMLTAG_NAVIGATIONOPTIONS = _T("NAVIGATIONOPTIONS");
  23. const LPTSTR XMLTAG_NAVIGATION_MODESTR = _T("MODESTR");
  24. const LPTSTR XMLTAG_NAVIGATION_MODE = _T("MODE");
  25. const LPTSTR XMLTAG_NAVIGATION_DURATION = _T("DURATION");
  26. const LPTSTR XMLTAG_NAVIGATION_MINUTES = _T("MINUTES");
  27. const LPTSTR XMLTAG_NAVIGATION_ACTIONS = _T("ACTIONS");
  28. const LPTSTR XMLTAG_NAVIGATION_DELAY = _T("DELAY");
  29. const LPTSTR XMLTAG_ELEMENTNAVIGATION = _T("ELEMENTNAVIGATION");
  30. const LPTSTR XMLTAG_ELEMENTNAVIGATION_LIST = _T("ELEMENTNAVIGATIONLIST");
  31. const LPTSTR XMLTAG_ELEMENTNAVIGATION_ACTIVE = _T("ACTIVE");
  32. const LPTSTR XMLTAG_ELEMENTNAVIGATION_NAME = _T("NAME");
  33. const LPTSTR XMLTAG_ELEMENTNAVIGATION_ACTION = _T("ACTION");
  34. const LPTSTR XMLTAG_ELEMENTNAVIGATION_CAPTION = _T("CAPTION");
  35. const LPTSTR XMLTAG_ELEMENTNAVIGATION_ID = _T("ID");
  36. const LPTSTR XMLTAG_ELEMENTNAVIGATION_LOCATION= _T("LOCATION");
  37. const LPTSTR XMLTAG_ELEMENTNAVIGATION_FORMAT = _T("FORMAT");
  38. const LPTSTR XMLTAG_ELEMENTNAVIGATION_USEAPPSETTING = _T("USEAPPSETTING");
  39. const LPTSTR XMLTAG_APPLICATION_NAME = _T("APPNAME");
  40. const LPTSTR XMLTAG_APPLICATION_PATH = _T("APPPATH");
  41. const LPTSTR XMLTAG_APPLICATION_OPTIONS = _T("APPOPTIONS");
  42. const LPTSTR XMLTAG_APPLICATION_MAPFILE = _T("MAPFILE");
  43. const LPTSTR XMLTAG_APPLICATION_CMDLINE = _T("CMDLINE");
  44. const LPTSTR XMLTAG_APPLICATION_USECMDLINE = _T("USECMDLINE");
  45. const LPTSTR XMLTAG_APPLICATION_USENAVIGATION = _T("USENAVIGATION");
  46. const LPTSTR XMLTAG_APPLICATION_CMDLINEITEM = _T("CMDLINEITEM");
  47. const LPTSTR XMLTAG_APPLICATION_MENU = _T("APPMENU");
  48. const LPTSTR XMLTAG_APPLICATION_DATA = _T("APPDATA");
  49. const LPTSTR XMLTAG_APPLICATION_LIST = _T("APPLIST");
  50. const LPTSTR XMLTAG_APPLICATION_ACTIVE = _T("ACTIVE");
  51. const LPTSTR XMLTAG_GENERALOPTIONS = _T("GENERALOPTIONS");
  52. const LPTSTR XMLTAG_GENERALOPTIONS_DRIVEAPP = _T("DRIVEAPP");
  53. const LPTSTR XMLTAG_GENERALOPTIONS_CAPTURERRINFO = _T("CAPTURERRINFO");
  54. const LPTSTR XMLTAG_GENERALOPTIONS_CAPTURERESID = _T("CAPTURERESID");
  55. const LPTSTR XMLTAG_ELEMENT_DISABLEACTIONS = _T("disable-actions");
  56. const LPTSTR XMLTAG_ELEMENT_ELEMENT = _T("element");
  57. const LPTSTR XMLTAG_ELEMENT_ACTION = _T("action");
  58. const LPTSTR XMLTAG_ELEMENT_CAPTION = _T("caption");
  59. const LPTSTR XMLTAG_ELEMENT_RESOURCEID = _T("resource-id");
  60. //////////////////////////////////////////////////////////////////////
  61. typedef class ProjectXMLTags
  62. {
  63. public:
  64. static LPCTSTR GetProjectXMLTag() { return XMLTAG_PROJECT ; }
  65. static LPCTSTR GetProjDataXMLTag() { return XMLTAG_PROJECT_DATA ; }
  66. static LPCTSTR GetProjOptionsXMLTag() { return XMLTAG_PROJECT_OPTIONS ; }
  67. static LPCTSTR GetProjNameXMLTag() { return XMLTAG_PROJECT_NAME ; }
  68. static LPCTSTR GetProjPathXMLTag() { return XMLTAG_PROJECT_PATH ; }
  69. static LPCTSTR GetProjRrifileXMLTag() { return XMLTAG_PROJECT_RRIFILE ; }
  70. static LPCTSTR GetProjLogfileXMLTag() { return XMLTAG_PROJECT_LOGFILE ; }
  71. static LPCTSTR GetProjUserrifileXMLTag() { return XMLTAG_PROJECT_USERRIFILE ; }
  72. static LPCTSTR GetProjUselogfileXMLTag() { return XMLTAG_PROJECT_USELOGFILE ; }
  73. static LPCTSTR GetNavigationOptionsXMLTag() { return XMLTAG_NAVIGATIONOPTIONS ; }
  74. static LPCTSTR GetNavigationModeXMLTag() { return XMLTAG_NAVIGATION_MODE ; }
  75. static LPCTSTR GetNavigationModeStrXMLTag() { return XMLTAG_NAVIGATION_MODESTR ; }
  76. static LPCTSTR GetNavigationDurationXMLTag() { return XMLTAG_NAVIGATION_DURATION ; }
  77. static LPCTSTR GetNavigationMinutesXMLTag() { return XMLTAG_NAVIGATION_MINUTES ; }
  78. static LPCTSTR GetNavigationActionsXMLTag() { return XMLTAG_NAVIGATION_ACTIONS ; }
  79. static LPCTSTR GetNavigationDelayXMLTag() { return XMLTAG_NAVIGATION_DELAY ; }
  80. static LPCTSTR GetElementNavigationXMLTag() { return XMLTAG_ELEMENTNAVIGATION ; }
  81. static LPCTSTR GetElementNavigationListXMLTag() { return XMLTAG_ELEMENTNAVIGATION_LIST ; }
  82. static LPCTSTR GetElementNavigationActiveXMLTag() { return XMLTAG_ELEMENTNAVIGATION_ACTIVE ; }
  83. static LPCTSTR GetElementNavigationNameXMLTag() { return XMLTAG_ELEMENTNAVIGATION_NAME ; }
  84. static LPCTSTR GetElementNavigationActionXMLTag() { return XMLTAG_ELEMENTNAVIGATION_ACTION ; }
  85. static LPCTSTR GetElementNavigationCaptionXMLTag() { return XMLTAG_ELEMENTNAVIGATION_CAPTION ; }
  86. static LPCTSTR GetElementNavigationIdXMLTag() { return XMLTAG_ELEMENTNAVIGATION_ID ; }
  87. static LPCTSTR GetElementNavigationLocationXMLTag() { return XMLTAG_ELEMENTNAVIGATION_LOCATION; }
  88. static LPCTSTR GetElementNavigationFormatXMLTag() { return XMLTAG_ELEMENTNAVIGATION_FORMAT ; }
  89. static LPCTSTR GetElementNavigationUseAppSettingXMLTag() { return XMLTAG_ELEMENTNAVIGATION_USEAPPSETTING; }
  90. static LPCTSTR GetAppNameXMLTag() { return XMLTAG_APPLICATION_NAME ; }
  91. static LPCTSTR GetAppPathXMLTag() { return XMLTAG_APPLICATION_PATH ; }
  92. static LPCTSTR GetAppOptionsXMLTag() { return XMLTAG_APPLICATION_OPTIONS ; }
  93. static LPCTSTR GetAppMapfileXMLTag() { return XMLTAG_APPLICATION_MAPFILE ; }
  94. static LPCTSTR GetAppCmdlineXMLTag() { return XMLTAG_APPLICATION_CMDLINE ; }
  95. static LPCTSTR GetAppUsecmdlineXMLTag() { return XMLTAG_APPLICATION_USECMDLINE ; }
  96. static LPCTSTR GetAppUsenavigationXMLTag() { return XMLTAG_APPLICATION_USENAVIGATION; }
  97. static LPCTSTR GetAppCmdlineitemXMLTag() { return XMLTAG_APPLICATION_CMDLINEITEM ; }
  98. static LPCTSTR GetAppMenuXMLTag() { return XMLTAG_APPLICATION_MENU ; }
  99. static LPCTSTR GetAppDataXMLTag() { return XMLTAG_APPLICATION_DATA ; }
  100. static LPCTSTR GetAppListXMLTag() { return XMLTAG_APPLICATION_LIST ; }
  101. static LPCTSTR GetAppActiveXMLTag() { return XMLTAG_APPLICATION_ACTIVE ; }
  102. static LPCTSTR GetGeneralOptionsXMLTag() { return XMLTAG_GENERALOPTIONS ; }
  103. static LPCTSTR GetGeneralOptionsDriveAppXMLTag() { return XMLTAG_GENERALOPTIONS_DRIVEAPP ; }
  104. static LPCTSTR GetGeneralOptionsCaptureRRInfoXMLTag() { return XMLTAG_GENERALOPTIONS_CAPTURERRINFO ; }
  105. static LPCTSTR GetGeneralOptionsCaptureResIDXMLTag() { return XMLTAG_GENERALOPTIONS_CAPTURERESID ; }
  106. static LPCTSTR GetElementDisabeActionsXMLTag() { return XMLTAG_ELEMENT_DISABLEACTIONS; }
  107. static LPCTSTR GetElementXMLTag() { return XMLTAG_ELEMENT_ELEMENT ; }
  108. static LPCTSTR GetElementActionXMLTag() { return XMLTAG_ELEMENT_ACTION ; }
  109. static LPCTSTR GetElementCaptionXMLTag() { return XMLTAG_ELEMENT_CAPTION ; }
  110. static LPCTSTR GetElementResourceIDXMLTag() { return XMLTAG_ELEMENT_RESOURCEID ; }
  111. } PROJECTXMLTAGS, FAR* LPPROJECTXMLTAGS;
  112. typedef PROJECTXMLTAGS PXT;
  113. //////////////////////////////////////////////////////////////////////
  114. //////////////////////////////////////////////////////////////////////
  115. //////////////////////////////////////////////////////////////////////
  116. enum enumNavigationDelay
  117. {
  118. NAVIGATIONDELAY_NONE = -1,
  119. NAVIGATIONDELAY_SLOW = 3000,
  120. NAVIGATIONDELAY_NORMAL = 1000,
  121. NAVIGATIONDELAY_FAST = 0,
  122. };
  123. enum enumNavDelayIndex
  124. {
  125. NAVDELAYINDEX_NONE = -1,
  126. NAVDELAYINDEX_SLOW = 0,
  127. NAVDELAYINDEX_NORMAL,
  128. NAVDELAYINDEX_FAST ,
  129. };
  130. /////////////////////////////////////////////////////////////////////////////
  131. typedef struct NavigationDelay
  132. {
  133. int m_nType;
  134. int m_nDelayMSec;
  135. } NAVIGATIONDELAY, FAR* LPNAVIGATIONDELAY;
  136. //////////////////////////////////////////////////////////////////////
  137. typedef class CLParamBase
  138. {
  139. public:
  140. CLParamBase() : m_bChecked(true)
  141. {
  142. }
  143. virtual ~CLParamBase()
  144. {
  145. }
  146. public:
  147. bool m_bChecked;
  148. } CLPARAMBASE, FAR* LPCLPARAMBASE;
  149. //////////////////////////////////////////////////////////////////////
  150. typedef class CGeneralOptions
  151. {
  152. CGeneralOptions(CGeneralOptions&);
  153. CGeneralOptions& operator=(CGeneralOptions&);
  154. public:
  155. //////////////////////////////////////////////
  156. // Inline
  157. CGeneralOptions() : m_bCaptureResID(true), m_bCaptureRRInfo(true),
  158. m_bDriveApp(true)
  159. {
  160. }
  161. //////////////////////////////////////////////
  162. // Inline
  163. virtual ~CGeneralOptions()
  164. {
  165. }
  166. //////////////////////////////////////////////
  167. // Inline
  168. virtual void Clone(CGeneralOptions& refGeneralOptions)
  169. {
  170. refGeneralOptions.m_bCaptureResID = m_bCaptureResID ;
  171. refGeneralOptions.m_bCaptureRRInfo = m_bCaptureRRInfo;
  172. refGeneralOptions.m_bDriveApp = m_bDriveApp ;
  173. refGeneralOptions.m_strData = m_strData ;
  174. }
  175. //////////////////////////////////////////////
  176. // Pure virtual function.
  177. virtual CLString& GetDataString() = 0;
  178. public:
  179. bool m_bCaptureResID;
  180. bool m_bCaptureRRInfo;
  181. bool m_bDriveApp;
  182. CLString m_strData;
  183. } CGENERALOPTIONS, FAR* LPCGENERALOPTIONS;
  184. //////////////////////////////////////////////////////////////////////
  185. typedef class CXMLGeneralOptions : public CGeneralOptions
  186. {
  187. CXMLGeneralOptions(CXMLGeneralOptions&);
  188. CXMLGeneralOptions& operator=(CXMLGeneralOptions&);
  189. public:
  190. //////////////////////////////////////////////
  191. // Inline
  192. CXMLGeneralOptions() : m_XMLTagInformation(PXT::GetGeneralOptionsXMLTag(), _T("\t\t\t"))
  193. {
  194. }
  195. //////////////////////////////////////////////
  196. // Inline
  197. virtual ~CXMLGeneralOptions()
  198. {
  199. }
  200. //////////////////////////////////////////////
  201. // Pure virtual function.
  202. virtual CLString& GetDataString()
  203. {
  204. CLString strTabs = _T("\t\t\t\t");
  205. CXMLTagInformation XMLTagInfo(PXT::GetGeneralOptionsDriveAppXMLTag(), strTabs);
  206. CLString strTmp = XMLTagInfo.GetXMLString(m_bDriveApp);
  207. XMLTagInfo.Init(PXT::GetGeneralOptionsCaptureRRInfoXMLTag(), strTabs);
  208. strTmp += XMLTagInfo.GetXMLString(m_bCaptureRRInfo);
  209. XMLTagInfo.Init(PXT::GetGeneralOptionsCaptureResIDXMLTag(), strTabs);
  210. strTmp += XMLTagInfo.GetXMLString(m_bCaptureResID);
  211. m_strData = m_XMLTagInformation.GetTabbedStartTag();
  212. m_strData += strTmp;
  213. m_strData += m_XMLTagInformation.GetTabbedEndTag();
  214. return m_strData;
  215. }
  216. public:
  217. CXMLTagInformation m_XMLTagInformation;
  218. } CXMLGENERALOPTIONS, FAR* LPCXMLGENERALOPTIONS;
  219. //////////////////////////////////////////////////////////////////////
  220. typedef class CNavigationMode
  221. {
  222. public:
  223. int m_nNavigationMode;
  224. CLString m_strNavigationMode;
  225. } CNAVIGATIONMODE, FAR* LPCNAVIGATIONMODE;
  226. //////////////////////////////////////////////////////////////////////
  227. typedef class CDurationType
  228. {
  229. public:
  230. int m_nDurationType;
  231. CLString m_strDurationType;
  232. } CDURATIONTYPE, FAR* LPCDURATIONTYPE;
  233. //////////////////////////////////////////////////////////////////////
  234. enum enumNavigationMode
  235. {
  236. NAVIGATIONMODE_RANDOM = 0X0001,
  237. };
  238. enum enumDurationType
  239. {
  240. DURATIONTYPE_NOTDEFINED = 0X0000,
  241. DURATIONTYPE_INFINITE = 0X0000,
  242. DURATIONTYPE_MINUTES = 0X0002,
  243. DURATIONTYPE_ACTIONS = 0X0004,
  244. };
  245. //////////////////////////////////////////////////////////////////////
  246. typedef class CNavigationOptions
  247. {
  248. CNavigationOptions(CNavigationOptions&);
  249. CNavigationOptions& operator=(CNavigationOptions&);
  250. public:
  251. //////////////////////////////////////////////
  252. // Inline
  253. CNavigationOptions()
  254. : m_nNavigationMode(NAVIGATIONMODE_RANDOM), m_nDurationType(DURATIONTYPE_INFINITE),
  255. m_nMinutes(60), m_nActions(100), m_nDelayMSec(NAVIGATIONDELAY_FAST)
  256. {
  257. }
  258. //////////////////////////////////////////////
  259. // Inline
  260. virtual ~CNavigationOptions()
  261. {
  262. }
  263. //////////////////////////////////////////////
  264. // Inline
  265. virtual void Clone(CNavigationOptions& refNavigationOptions)
  266. {
  267. refNavigationOptions.m_strNavigationMode = m_strNavigationMode;
  268. refNavigationOptions.m_nNavigationMode = m_nNavigationMode ;
  269. refNavigationOptions.m_nDurationType = m_nDurationType ;
  270. refNavigationOptions.m_nMinutes = m_nMinutes ;
  271. refNavigationOptions.m_nActions = m_nActions ;
  272. refNavigationOptions.m_nDelayMSec = m_nDelayMSec ;
  273. refNavigationOptions.m_strData = m_strData ;
  274. }
  275. //////////////////////////////////////////////
  276. // Pure virtual function.
  277. virtual CLString& GetDataString() = 0;
  278. //////////////////////////////////////////////
  279. public:
  280. CLString m_strNavigationMode;
  281. int m_nNavigationMode;
  282. int m_nDurationType;
  283. int m_nMinutes;
  284. int m_nActions;
  285. int m_nDelayMSec;
  286. CLString m_strData;
  287. } CNAVIGATIONOPTIONS, FAR* LPCNAVIGATIONOPTIONS;
  288. //////////////////////////////////////////////////////////////////////
  289. typedef class CXMLNavigationOptions : public CNavigationOptions
  290. {
  291. CXMLNavigationOptions(CXMLNavigationOptions&);
  292. CXMLNavigationOptions& operator=(CXMLNavigationOptions&);
  293. public:
  294. //////////////////////////////////////////////
  295. // Inline
  296. CXMLNavigationOptions() : m_XMLTagInformation(PXT::GetNavigationOptionsXMLTag(), _T("\t\t\t\t"))
  297. {
  298. }
  299. //////////////////////////////////////////////
  300. // Inline
  301. virtual ~CXMLNavigationOptions()
  302. {
  303. }
  304. public:
  305. //////////////////////////////////////////////
  306. virtual CLString& GetDataString()
  307. {
  308. CLString strTabs = _T("\t\t\t\t\t");
  309. CXMLTagInformation XMLTagInfo(PXT::GetNavigationModeStrXMLTag(), strTabs);
  310. CLString strTmp = XMLTagInfo.GetXMLString(m_strNavigationMode);
  311. XMLTagInfo.Init(PXT::GetNavigationModeXMLTag(), strTabs);
  312. strTmp = XMLTagInfo.GetXMLString(m_nNavigationMode);
  313. XMLTagInfo.Init(PXT::GetNavigationDurationXMLTag(), strTabs);
  314. strTmp += XMLTagInfo.GetXMLString(m_nDurationType);
  315. XMLTagInfo.Init(PXT::GetNavigationMinutesXMLTag(), strTabs);
  316. strTmp += XMLTagInfo.GetXMLString(m_nMinutes);
  317. XMLTagInfo.Init(PXT::GetNavigationActionsXMLTag(), strTabs);
  318. strTmp += XMLTagInfo.GetXMLString(m_nActions);
  319. XMLTagInfo.Init(PXT::GetNavigationDelayXMLTag(), strTabs);
  320. strTmp += XMLTagInfo.GetXMLString(m_nDelayMSec);
  321. m_strData = m_XMLTagInformation.GetTabbedStartTag();
  322. m_strData += strTmp;
  323. m_strData += m_XMLTagInformation.GetTabbedEndTag();
  324. return m_strData;
  325. }
  326. public:
  327. CXMLTagInformation m_XMLTagInformation;
  328. } CXMLNAVIGATIONOPTIONS, FAR* LPCXMLNAVIGATIONOPTIONS;
  329. /////////////////////////////////////////////////////////////////
  330. typedef class CElementNavigation
  331. {
  332. private:
  333. CElementNavigation(CElementNavigation&);
  334. CElementNavigation& operator=(CElementNavigation&);
  335. public:
  336. //////////////////////////////////////////////
  337. // Inline
  338. CElementNavigation() : m_bChecked(true)
  339. {
  340. }
  341. //////////////////////////////////////////////
  342. // Inline
  343. virtual ~CElementNavigation()
  344. {
  345. }
  346. //////////////////////////////////////////////
  347. // Inline
  348. virtual void Clone(CElementNavigation& refElementNavigation)
  349. {
  350. refElementNavigation.m_bChecked = m_bChecked ;
  351. refElementNavigation.m_strAction = m_strAction ;
  352. refElementNavigation.m_strCaption = m_strCaption ;
  353. refElementNavigation.m_strElementName = m_strElementName;
  354. refElementNavigation.m_strFormat = m_strFormat ;
  355. refElementNavigation.m_strID = m_strID ;
  356. refElementNavigation.m_strLocation = m_strLocation ;
  357. refElementNavigation.m_strData = m_strData ;
  358. }
  359. //////////////////////////////////////////////
  360. // Pure virtual function.
  361. virtual CLString& GetDataString() = 0;
  362. //////////////////////////////////////////////
  363. public:
  364. CLString m_strElementName;
  365. CLString m_strAction;
  366. CLString m_strCaption;
  367. CLString m_strID;
  368. CLString m_strLocation;
  369. CLString m_strFormat;
  370. bool m_bChecked;
  371. CLString m_strData;
  372. } CELEMENTNAVIGATION, FAR* LPCELEMENTNAVIGATION;
  373. /////////////////////////////////////////////////////////////////
  374. typedef class CXMLElementNavigation : public CElementNavigation
  375. {
  376. private:
  377. CXMLElementNavigation(CXMLElementNavigation&);
  378. CXMLElementNavigation& operator=(CXMLElementNavigation&);
  379. public:
  380. //////////////////////////////////////////////
  381. // Inline
  382. CXMLElementNavigation() : m_XMLTagInformation(PXT::GetElementNavigationXMLTag(), _T("\t\t\t\t"))
  383. {
  384. }
  385. //////////////////////////////////////////////
  386. // Inline
  387. virtual ~CXMLElementNavigation()
  388. {
  389. }
  390. //////////////////////////////////////////////
  391. // virtual function.
  392. virtual CLString& GetDataString()
  393. {
  394. CLString strTabs = _T("\t\t\t\t\t");
  395. CXMLTagInformation XMLTagInfo(PXT::GetElementNavigationNameXMLTag(), strTabs);
  396. CLString strTmp = XMLTagInfo.GetXMLString(m_strElementName);
  397. XMLTagInfo.Init(PXT::GetElementNavigationActionXMLTag(), strTabs);
  398. strTmp += XMLTagInfo.GetXMLString(m_strAction);
  399. XMLTagInfo.Init(PXT::GetElementNavigationCaptionXMLTag(), strTabs);
  400. strTmp += XMLTagInfo.GetXMLString(m_strCaption);
  401. XMLTagInfo.Init(PXT::GetElementNavigationIdXMLTag(), strTabs);
  402. strTmp += XMLTagInfo.GetXMLString(m_strID);
  403. XMLTagInfo.Init(PXT::GetElementNavigationLocationXMLTag(), strTabs);
  404. strTmp += XMLTagInfo.GetXMLString(m_strLocation);
  405. XMLTagInfo.Init(PXT::GetElementNavigationFormatXMLTag(), strTabs);
  406. strTmp += XMLTagInfo.GetXMLString(m_strFormat);
  407. XMLTagInfo.Init(PXT::GetElementNavigationActiveXMLTag(), strTabs);
  408. strTmp += XMLTagInfo.GetXMLString(m_bChecked);
  409. m_strData = m_XMLTagInformation.GetTabbedStartTag();
  410. m_strData += strTmp;
  411. m_strData += m_XMLTagInformation.GetTabbedEndTag();
  412. return m_strData;
  413. }
  414. //////////////////////////////////////////////
  415. public:
  416. CXMLTagInformation m_XMLTagInformation;
  417. } CXMLELEMENTNAVIGATION, FAR* LPCXMLELEMENTNAVIGATION;
  418. //////////////////////////////////////////////////////////////////////
  419. //////////////////////////////////////////////////////////////////////
  420. typedef class CApplicationOptions
  421. {
  422. private:
  423. CApplicationOptions(CApplicationOptions&);
  424. CApplicationOptions& operator=(CApplicationOptions&);
  425. public:
  426. //////////////////////////////////////////////
  427. // Inline
  428. CApplicationOptions()
  429. : m_bUseCmdLineArg(TRUE), m_bUseNavigationOptions(FALSE),
  430. m_pGeneralOptions(NULL),
  431. m_pNavigationOptions(NULL)
  432. {
  433. }
  434. //////////////////////////////////////////////
  435. // Inline
  436. virtual ~CApplicationOptions()
  437. {
  438. }
  439. //////////////////////////////////////////////
  440. // Inline
  441. virtual void Clone(CApplicationOptions& refAppOptions)
  442. {
  443. refAppOptions.m_strMapFileName = m_strMapFileName ;
  444. refAppOptions.m_strCmdLineArg = m_strCmdLineArg ;
  445. refAppOptions.m_bUseCmdLineArg = m_bUseCmdLineArg ;
  446. refAppOptions.m_bUseNavigationOptions = m_bUseNavigationOptions ;
  447. refAppOptions.m_strCmdLineArgList.RemoveAll();
  448. POSITION pos = m_strCmdLineArgList.GetHeadPosition();
  449. while(pos)
  450. {
  451. CLString strTmp = m_strCmdLineArgList.GetNext(pos);
  452. refAppOptions.m_strCmdLineArgList.AddTail(strTmp);
  453. }
  454. // Clone the general and navigation option.
  455. ASSERT(m_pNavigationOptions);
  456. ASSERT(m_pGeneralOptions);
  457. m_pNavigationOptions->Clone(refAppOptions.GetNavigationOptions());
  458. m_pGeneralOptions->Clone(refAppOptions.GetGeneralOptions());
  459. }
  460. //////////////////////////////////////////////
  461. CNavigationOptions& GetNavigationOptions()
  462. {
  463. ASSERT(m_pNavigationOptions);
  464. return *m_pNavigationOptions;
  465. }
  466. //////////////////////////////////////////////
  467. CGeneralOptions& GetGeneralOptions()
  468. {
  469. ASSERT(m_pGeneralOptions);
  470. return *m_pGeneralOptions;
  471. }
  472. //////////////////////////////////////////////
  473. // Pure virtual function.
  474. virtual CLString& GetDataString() = 0;
  475. public:
  476. CLString m_strMapFileName;
  477. CLString m_strCmdLineArg;
  478. CStringList m_strCmdLineArgList;
  479. BOOL m_bUseCmdLineArg;
  480. BOOL m_bUseNavigationOptions;
  481. CNavigationOptions* m_pNavigationOptions; // IMPORTANT: This must be allocated in the derived class
  482. CGeneralOptions* m_pGeneralOptions; // IMPORTANT: This must be allocated in the derived class
  483. CLString m_strData;
  484. } CAPPLICATIONOPTIONS, FAR* LPCAPPLICATIONOPTIONS;
  485. //////////////////////////////////////////////////////////////////////
  486. typedef class CXMLApplicationOptions : public CApplicationOptions
  487. {
  488. private:
  489. CXMLApplicationOptions(CXMLApplicationOptions&);
  490. CXMLApplicationOptions& operator=(CXMLApplicationOptions&);
  491. public:
  492. //////////////////////////////////////////////
  493. CXMLApplicationOptions() : m_XMLTagInformation(XMLTAG_APPLICATION_OPTIONS, _T("\t\t\t"))
  494. {
  495. m_pNavigationOptions = new CXMLNAVIGATIONOPTIONS();
  496. m_pGeneralOptions = new CXMLGENERALOPTIONS;
  497. }
  498. //////////////////////////////////////////////
  499. virtual ~CXMLApplicationOptions()
  500. {
  501. delete m_pNavigationOptions;
  502. delete m_pGeneralOptions;
  503. }
  504. public:
  505. //////////////////////////////////////////////
  506. virtual CLString& GetDataString()
  507. {
  508. CLString strTabs = _T("\t\t\t\t");
  509. CXMLTagInformation XMLTagInfo(XMLTAG_APPLICATION_MAPFILE, strTabs);
  510. CLString strTmp = XMLTagInfo.GetXMLString(m_strMapFileName);
  511. XMLTagInfo.Init(XMLTAG_APPLICATION_CMDLINE, strTabs);
  512. strTmp += XMLTagInfo.GetXMLString(m_strCmdLineArg);
  513. XMLTagInfo.Init(XMLTAG_APPLICATION_USECMDLINE, strTabs);
  514. strTmp += XMLTagInfo.GetXMLString(m_bUseCmdLineArg);
  515. XMLTagInfo.Init(XMLTAG_APPLICATION_USENAVIGATION, strTabs);
  516. strTmp += XMLTagInfo.GetXMLString(m_bUseNavigationOptions);
  517. // Now file the command line items.
  518. XMLTagInfo.Init(XMLTAG_APPLICATION_CMDLINEITEM, strTabs);
  519. POSITION pos = m_strCmdLineArgList.GetHeadPosition();
  520. while(pos)
  521. {
  522. strTmp += XMLTagInfo.GetXMLString(CLString(m_strCmdLineArgList.GetNext(pos)));
  523. }
  524. m_strData = m_XMLTagInformation.GetTabbedStartTag();
  525. m_strData += strTmp;
  526. m_strData += m_pNavigationOptions->GetDataString();
  527. m_strData += m_pGeneralOptions->GetDataString();
  528. m_strData += m_XMLTagInformation.GetTabbedEndTag();
  529. return m_strData;
  530. }
  531. public:
  532. XMLTAGINFORMATION m_XMLTagInformation;
  533. } CXMLAPPLICATIONOPTIONS, FAR* LPCXMLAPPLICATIONOPTIONS;
  534. //////////////////////////////////////////////////////////////////////
  535. //////////////////////////////////////////////////////////////////////
  536. typedef class CApplicationMenus
  537. {
  538. private:
  539. CApplicationMenus(CApplicationMenus&);
  540. CApplicationMenus& operator=(CApplicationMenus&);
  541. public:
  542. //////////////////////////////////////////////
  543. // Inline
  544. CApplicationMenus()
  545. {
  546. }
  547. //////////////////////////////////////////////
  548. // Inline
  549. virtual ~CApplicationMenus()
  550. {
  551. }
  552. //////////////////////////////////////////////
  553. //Inline
  554. virtual void Clone(CApplicationMenus& refAppMenus)
  555. {
  556. UNREFERENCED_PARAMETER(refAppMenus);
  557. }
  558. // Pure virtual function.
  559. virtual CLString& GetDataString() = 0;
  560. public:
  561. CLString m_strData;
  562. } CAPPLICATIONMENUS, FAR* LPCAPPLICATIONMENUS;
  563. //////////////////////////////////////////////////////////////////////
  564. typedef class CXMLApplicationMenus : public CApplicationMenus
  565. {
  566. private:
  567. CXMLApplicationMenus(CXMLApplicationMenus&);
  568. CXMLApplicationMenus& operator=(CXMLApplicationMenus&);
  569. public:
  570. //////////////////////////////////////////////
  571. // Inline
  572. CXMLApplicationMenus() : m_XMLTagInformation(XMLTAG_APPLICATION_MENU, _T("\t\t\t"))
  573. {
  574. }
  575. //////////////////////////////////////////////
  576. // Inline
  577. virtual ~CXMLApplicationMenus()
  578. {
  579. }
  580. public:
  581. //////////////////////////////////////////////
  582. virtual CLString& GetDataString()
  583. {
  584. m_strData = m_XMLTagInformation.GetTabbedStartTag();
  585. m_strData += m_XMLTagInformation.GetTabbedEndTag();
  586. return m_strData;
  587. }
  588. public:
  589. XMLTAGINFORMATION m_XMLTagInformation;
  590. } CXMLAPPLICATIONMENUS, FAR* LPCXMLAPPLICATIONMENUS;
  591. //////////////////////////////////////////////////////////////////////
  592. //////////////////////////////////////////////////////////////////////
  593. typedef std::map<CLString, LPCELEMENTNAVIGATION, std::less<CLString> > CElementMap;
  594. typedef CElementMap::iterator iterElementMap;
  595. typedef CElementMap::value_type valueElement;
  596. //////////////////////////////////////////////////////////////////////
  597. typedef class CElementNavMap : public CElementMap
  598. {
  599. public:
  600. CElementNavMap() : m_bUseAppSetting(false)
  601. {
  602. }
  603. virtual ~CElementNavMap()
  604. {
  605. CleanUp();
  606. }
  607. //////////////////////////////////////////////
  608. //Inline
  609. virtual void CleanUp()
  610. {
  611. if(size())
  612. {
  613. iterElementMap iter = begin();
  614. iterElementMap iterEnd = end();
  615. while(iter != iterEnd)
  616. {
  617. LPCELEMENTNAVIGATION pElement = (*iter).second;
  618. ASSERT(pElement);
  619. delete pElement;
  620. iter++;
  621. }
  622. }
  623. clear();
  624. }
  625. //////////////////////////////////////////////
  626. //Inline
  627. virtual void Clone(CElementNavMap& refMapElement)
  628. {
  629. refMapElement.m_strData = m_strData;
  630. refMapElement.m_bUseAppSetting = m_bUseAppSetting;
  631. refMapElement.CleanUp();
  632. if(size())
  633. {
  634. iterElementMap iter = begin();
  635. iterElementMap iterEnd = end();
  636. while(iter != iterEnd)
  637. {
  638. LPCELEMENTNAVIGATION pElement = (*iter).second;
  639. ASSERT(pElement);
  640. iter++;
  641. // Now clone and insert the new item (if necessary)
  642. LPCELEMENTNAVIGATION pNewElement = GetNewElement();
  643. ASSERT(pNewElement);
  644. pElement->Clone(*pNewElement);
  645. refMapElement.InsertElement(pNewElement);
  646. }
  647. }
  648. }
  649. //////////////////////////////////////////////
  650. //Inline
  651. bool InsertElement(LPCELEMENTNAVIGATION pElement)
  652. {
  653. bool bInserted = false;
  654. CLString strKey;
  655. GetKey(pElement, strKey);
  656. if(Find(strKey) == end())
  657. {
  658. insert(valueElement(strKey, pElement));
  659. bInserted = true;
  660. }
  661. return bInserted;
  662. }
  663. //////////////////////////////////////////////
  664. iterElementMap Find(CLString strKey)
  665. {
  666. ASSERT(!strKey.IsEmpty());
  667. strKey.MakeLower();
  668. return find(strKey);
  669. }
  670. //////////////////////////////////////////////
  671. iterElementMap Find(LPCELEMENTNAVIGATION pElement)
  672. {
  673. CLString strKey;
  674. GetKey(pElement, strKey);
  675. ASSERT(!strKey.IsEmpty());
  676. return find(strKey);
  677. }
  678. //////////////////////////////////////////////
  679. void GetKey(LPCELEMENTNAVIGATION pElement, CLString& strKey)
  680. {
  681. strKey = pElement->m_strElementName
  682. + pElement->m_strAction
  683. + pElement->m_strCaption
  684. + pElement->m_strID
  685. + pElement->m_strFormat
  686. + pElement->m_strLocation;
  687. strKey.MakeLower();
  688. ASSERT(!strKey.IsEmpty());
  689. }
  690. public:
  691. //////////////////////////////////////////////
  692. // Inline - Pure Virtual
  693. virtual CLString& GetDataString() = 0;
  694. //////////////////////////////////////////////
  695. // Inline - Pure Virtual
  696. virtual LPCELEMENTNAVIGATION GetNewElement() = 0;
  697. //////////////////////////////////////////////
  698. virtual CLString& GetDisableActionsDataString() = 0;
  699. public:
  700. CLString m_strData;
  701. bool m_bUseAppSetting;
  702. }CELEMENTNAVMAP, FAR* LPCELEMENTNAVMAP;
  703. //////////////////////////////////////////////////////////////////////
  704. typedef class CXMLElementNavMap : public CElementNavMap
  705. {
  706. public:
  707. CXMLElementNavMap() : m_XMLTagInformation(PXT::GetElementNavigationListXMLTag(), _T("\t\t\t"))
  708. {
  709. }
  710. virtual ~CXMLElementNavMap()
  711. {
  712. }
  713. public:
  714. //////////////////////////////////////////////
  715. virtual CLString& GetDataString()
  716. {
  717. CLString strTabs = _T("\t\t\t\t");
  718. if(size())
  719. {
  720. m_strData = m_XMLTagInformation.GetTabbedStartTag();
  721. CXMLTagInformation XMLTagInfo(PXT::GetElementNavigationUseAppSettingXMLTag(), strTabs);
  722. m_strData += XMLTagInfo.GetXMLString(m_bUseAppSetting);
  723. iterElementMap iter = begin();
  724. iterElementMap iterEnd = end();
  725. while(iter != iterEnd)
  726. {
  727. LPCELEMENTNAVIGATION pElement = (*iter).second;
  728. ASSERT(pElement);
  729. m_strData += pElement->GetDataString();
  730. iter++;
  731. }
  732. m_strData += m_XMLTagInformation.GetTabbedEndTag();
  733. }
  734. return m_strData;
  735. }
  736. //////////////////////////////////////////////
  737. virtual CLString& GetDisableActionsDataString()
  738. {
  739. m_strData.Empty();
  740. if(size())
  741. {
  742. CLString strTabs = _T("\t");
  743. CXMLTagInformation ActionXMLTag(PXT::GetElementActionXMLTag(), strTabs);
  744. CXMLTagInformation ElementXMLTag(PXT::GetElementXMLTag(), strTabs);
  745. CXMLTagInformation ParentElementXMLTag(PXT::GetElementXMLTag(), strTabs);
  746. CXMLTagInformation CaptionXMLTag(PXT::GetElementCaptionXMLTag(), _T("\t\t"));
  747. CXMLTagInformation ResIDXMLTag(PXT::GetElementResourceIDXMLTag(), _T("\t\t"));
  748. iterElementMap iter = begin();
  749. iterElementMap iterEnd = end();
  750. CLString strElementsXML;
  751. while(iter != iterEnd)
  752. {
  753. LPCELEMENTNAVIGATION pElement = (*iter).second;
  754. ASSERT(pElement);
  755. iter++;
  756. // We only create a disable action iff: (1) checked, (2) element name is
  757. // not empty, and (3) action type not empty.
  758. if(pElement->m_bChecked && !pElement->m_strElementName.IsEmpty() && !pElement->m_strAction.IsEmpty())
  759. {
  760. CLString strXML;
  761. CLString strTmp2;
  762. // Did the user specify a location?
  763. if(!pElement->m_strLocation.IsEmpty())
  764. {
  765. strTmp2.Format(_T("type=\"%s\""), pElement->m_strLocation);
  766. strXML += ParentElementXMLTag.GetTabbedStartTag(strTmp2);
  767. ElementXMLTag.SetTabs(_T("\t\t"));
  768. }
  769. else
  770. {
  771. ElementXMLTag.SetTabs(strTabs);
  772. }
  773. // Now compose the Element.
  774. if(!pElement->m_strFormat.IsEmpty())
  775. strTmp2.Format(_T("type=\"%s\" format=\"%s\""), pElement->m_strElementName, pElement->m_strFormat);
  776. else
  777. strTmp2.Format(_T("type=\"%s\""), pElement->m_strElementName);
  778. strXML += ElementXMLTag.GetTabbedStartTag(strTmp2);
  779. if(!pElement->m_strCaption.IsEmpty())
  780. strXML += CaptionXMLTag.GetXMLString(pElement->m_strCaption);
  781. if(!pElement->m_strID.IsEmpty())
  782. strXML += ResIDXMLTag.GetXMLString(pElement->m_strID);
  783. strXML += ElementXMLTag.GetTabbedEndTag();
  784. // Add the closing element if a location has been specified.
  785. if(!pElement->m_strLocation.IsEmpty())
  786. {
  787. strXML += ParentElementXMLTag.GetTabbedEndTag();
  788. }
  789. strTmp2.Format(_T("type=\"%s\""), pElement->m_strAction);
  790. strXML += ActionXMLTag.GetTabbedStartTag(strTmp2);
  791. strXML += ActionXMLTag.GetTabbedEndTag();
  792. // Now add it to the overall string.
  793. strElementsXML += strXML;
  794. }
  795. }
  796. if(!strElementsXML.IsEmpty())
  797. {
  798. CXMLTagInformation DisableXMLTag(PXT::GetElementDisabeActionsXMLTag(), _T(""));
  799. m_strData = DisableXMLTag.GetTabbedStartTag();
  800. m_strData += strElementsXML;
  801. m_strData += DisableXMLTag.GetTabbedEndTag();
  802. }
  803. }
  804. return m_strData;
  805. }
  806. //////////////////////////////////////////////
  807. // Inline
  808. virtual LPCELEMENTNAVIGATION GetNewElement()
  809. {
  810. return new CXMLELEMENTNAVIGATION;
  811. }
  812. public:
  813. XMLTAGINFORMATION m_XMLTagInformation;
  814. }CXMLELEMENTNAVMAP, FAR* LPCXMLELEMENTNAVMAP;
  815. //////////////////////////////////////////////////////////////////////
  816. //////////////////////////////////////////////////////////////////////
  817. typedef class CApplicationData : public CLParamBase
  818. {
  819. private:
  820. CApplicationData(CApplicationData&);
  821. CApplicationData& operator=(CApplicationData&);
  822. public:
  823. //////////////////////////////////////////////
  824. // Inline
  825. CApplicationData() : m_pApplicationOptions(NULL), m_pApplicationMenus(NULL),
  826. m_pElementNavMap(NULL)
  827. {
  828. }
  829. //////////////////////////////////////////////
  830. // Inline
  831. virtual ~CApplicationData()
  832. {
  833. CleanUp();
  834. }
  835. //////////////////////////////////////////////
  836. //Inline
  837. void CleanUp()
  838. {
  839. }
  840. //////////////////////////////////////////////
  841. //Inline
  842. virtual void Clone(CApplicationData& refApplicationData)
  843. {
  844. refApplicationData.m_strAppName = m_strAppName;
  845. refApplicationData.m_strPath = m_strPath ;
  846. refApplicationData.m_bChecked = m_bChecked ;
  847. ASSERT(m_pApplicationOptions);
  848. ASSERT(m_pApplicationMenus);
  849. ASSERT(m_pElementNavMap);
  850. m_pApplicationOptions->Clone(refApplicationData.GetApplicationOptions());
  851. m_pApplicationMenus->Clone(refApplicationData.GetApplicationMenus());
  852. m_pElementNavMap->Clone(refApplicationData.GetElementNavMap());
  853. }
  854. //////////////////////////////////////////////
  855. // Pure virtual function.
  856. virtual CLString& GetDataString() = 0;
  857. //////////////////////////////////////////////
  858. // Inline
  859. CApplicationOptions& GetApplicationOptions()
  860. {
  861. ASSERT(m_pApplicationOptions);
  862. return *m_pApplicationOptions;
  863. }
  864. //////////////////////////////////////////////
  865. // Inline
  866. CElementNavMap& GetElementNavMap()
  867. {
  868. ASSERT(m_pElementNavMap);
  869. return *m_pElementNavMap;
  870. }
  871. //////////////////////////////////////////////
  872. // Inline
  873. CElementNavMap* GetElementNavMapPtr()
  874. {
  875. ASSERT(m_pElementNavMap);
  876. return m_pElementNavMap;
  877. }
  878. //////////////////////////////////////////////
  879. // Inline
  880. CApplicationMenus& GetApplicationMenus()
  881. {
  882. ASSERT(m_pApplicationMenus);
  883. return *m_pApplicationMenus;
  884. }
  885. //////////////////////////////////////////////
  886. public:
  887. CLString m_strAppName;
  888. CLString m_strPath;
  889. CApplicationOptions* m_pApplicationOptions;
  890. CApplicationMenus* m_pApplicationMenus;
  891. CElementNavMap* m_pElementNavMap;
  892. CLString m_strData;
  893. } CAPPLICATIONDATA, FAR* LPCAPPLICATIONDATA;
  894. //////////////////////////////////////////////////////////////////////
  895. typedef class CXMLApplicationData : public CApplicationData
  896. {
  897. private:
  898. CXMLApplicationData(CXMLApplicationData&);
  899. CXMLApplicationData& operator=(CXMLApplicationData&);
  900. public:
  901. //////////////////////////////////////////////
  902. CXMLApplicationData() : m_XMLTagInformation(XMLTAG_APPLICATION_DATA, _T("\t\t"))
  903. {
  904. m_pApplicationOptions = new CXMLAPPLICATIONOPTIONS();
  905. m_pApplicationMenus = new CXMLAPPLICATIONMENUS();
  906. m_pElementNavMap = new CXMLElementNavMap();
  907. }
  908. //////////////////////////////////////////////
  909. virtual ~CXMLApplicationData()
  910. {
  911. delete m_pApplicationOptions;
  912. delete m_pApplicationMenus;
  913. delete m_pElementNavMap;
  914. }
  915. public:
  916. //////////////////////////////////////////////
  917. virtual CLString& GetDataString()
  918. {
  919. CLString strTabs = _T("\t\t\t");
  920. CXMLTagInformation XMLTagInfo(PXT::GetAppNameXMLTag(), strTabs);
  921. CLString strTmp = XMLTagInfo.GetXMLString(m_strAppName);
  922. XMLTagInfo.Init(PXT::GetAppPathXMLTag(), strTabs);
  923. strTmp += XMLTagInfo.GetXMLString(m_strPath);
  924. XMLTagInfo.Init(PXT::GetAppActiveXMLTag(), strTabs);
  925. strTmp += XMLTagInfo.GetXMLString(m_bChecked);
  926. // Now create the entire application XML string
  927. m_strData = m_XMLTagInformation.GetTabbedStartTag();
  928. m_strData += strTmp;
  929. m_strData += m_pApplicationOptions->GetDataString();
  930. m_strData += m_pElementNavMap->GetDataString();
  931. m_strData += m_pApplicationMenus->GetDataString();
  932. m_strData += m_XMLTagInformation.GetTabbedEndTag();
  933. return m_strData;
  934. }
  935. public:
  936. XMLTAGINFORMATION m_XMLTagInformation;
  937. } CXMLAPPLICATIONDATA, FAR* LPCXMLAPPLICATIONDATA;
  938. //////////////////////////////////////////////////////////////////////
  939. //////////////////////////////////////////////////////////////////////
  940. //typedef CTypedPtrMap<CMapStringToPtr, CLString, LPCAPPLICATIONDATA> CAppList;
  941. typedef std::map<CLString, LPCAPPLICATIONDATA, std::less<CLString> > CAppMap;
  942. typedef CAppMap::iterator iterAppMap;
  943. typedef CAppMap::value_type valueApp;
  944. typedef class CAppMapEx : public CAppMap
  945. {
  946. public:
  947. CAppMapEx()
  948. {
  949. }
  950. virtual ~CAppMapEx()
  951. {
  952. CleanUp();
  953. }
  954. //////////////////////////////////////////////
  955. //Inline
  956. virtual void CleanUp()
  957. {
  958. if(size())
  959. {
  960. iterAppMap iter = begin();
  961. iterAppMap iterEnd = end();
  962. while(iter != iterEnd)
  963. {
  964. LPCAPPLICATIONDATA pItem = (*iter).second;
  965. ASSERT(pItem);
  966. delete pItem;
  967. iter++;
  968. }
  969. }
  970. clear();
  971. }
  972. //////////////////////////////////////////////
  973. //Inline
  974. bool InsertItem(LPCAPPLICATIONDATA pAppData)
  975. {
  976. CLString strTmp = pAppData->m_strPath;
  977. strTmp.MakeLower();
  978. insert(valueApp(strTmp, pAppData));
  979. return true;
  980. }
  981. //////////////////////////////////////////////
  982. //Inline
  983. iterAppMap Find(CLString strAppPath)
  984. {
  985. ASSERT(!strAppPath.IsEmpty());
  986. strAppPath.MakeLower();
  987. return find(strAppPath);
  988. }
  989. //////////////////////////////////////////////
  990. //Inline
  991. bool Erase(CLString strAppPath)
  992. {
  993. ASSERT(!strAppPath.IsEmpty());
  994. strAppPath.MakeLower();
  995. erase(strAppPath);
  996. return true;
  997. }
  998. } CAPPMAPEX, FAR* LPCAPPMAPEX;
  999. //////////////////////////////////////////////////////////////////////
  1000. typedef class CProjectOptions
  1001. {
  1002. private:
  1003. CProjectOptions(CProjectOptions&);
  1004. CProjectOptions& operator=(CProjectOptions&);
  1005. public:
  1006. //////////////////////////////////////////////
  1007. // Inline
  1008. CProjectOptions() : m_bUseRRIFile(1), m_bUseLogFile(1),
  1009. m_pNavigationOptions(NULL),
  1010. m_pGeneralOptions(NULL)
  1011. {
  1012. }
  1013. //////////////////////////////////////////////
  1014. // Inline
  1015. virtual ~CProjectOptions()
  1016. {
  1017. }
  1018. //////////////////////////////////////////////
  1019. //Inline
  1020. void CleanUp()
  1021. {
  1022. }
  1023. //////////////////////////////////////////////
  1024. CNavigationOptions& GetNavigationOptions()
  1025. {
  1026. ASSERT(m_pNavigationOptions);
  1027. return *m_pNavigationOptions;
  1028. }
  1029. //////////////////////////////////////////////
  1030. CGeneralOptions& GetGeneralOptions()
  1031. {
  1032. ASSERT(m_pGeneralOptions);
  1033. return *m_pGeneralOptions;
  1034. }
  1035. //////////////////////////////////////////////
  1036. // Pure virtual function.
  1037. virtual CLString& GetDataString() = 0;
  1038. public:
  1039. CLString m_strRRIFileName;
  1040. CLString m_strLogFileName;
  1041. BOOL m_bUseRRIFile;
  1042. BOOL m_bUseLogFile;
  1043. CNavigationOptions* m_pNavigationOptions; // IMPORTANT: This must be allocated in the derived class
  1044. CGeneralOptions* m_pGeneralOptions; // IMPORTANT: This must be allocated in the derived class
  1045. // Data String
  1046. CLString m_strData;
  1047. } CPROJECTOPTIONS, FAR* LPCPROJECTOPTIONS;
  1048. //////////////////////////////////////////////////////////////////////
  1049. typedef class CXMLProjectOptions : public CProjectOptions
  1050. {
  1051. private:
  1052. CXMLProjectOptions(CXMLProjectOptions&);
  1053. CXMLProjectOptions& operator=(CXMLProjectOptions&);
  1054. public:
  1055. //////////////////////////////////////////////
  1056. // Constructor - Inline
  1057. CXMLProjectOptions() : m_XMLTagInformation(PXT::GetProjOptionsXMLTag(), _T("\t\t"))
  1058. {
  1059. m_pNavigationOptions = new CXMLNAVIGATIONOPTIONS;
  1060. m_pGeneralOptions = new CXMLGENERALOPTIONS;
  1061. }
  1062. //////////////////////////////////////////////
  1063. // Destructor - Inline
  1064. virtual ~CXMLProjectOptions()
  1065. {
  1066. delete m_pNavigationOptions;
  1067. delete m_pGeneralOptions;
  1068. }
  1069. public:
  1070. //////////////////////////////////////////////
  1071. virtual CLString& GetDataString()
  1072. {
  1073. ASSERT(m_pNavigationOptions);
  1074. ASSERT(m_pGeneralOptions);
  1075. CLString strTabs = _T("\t\t\t");
  1076. CXMLTagInformation XMLTagInfo(PXT::GetProjRrifileXMLTag(), strTabs);
  1077. CLString strTmp = XMLTagInfo.GetXMLString(m_strRRIFileName);
  1078. XMLTagInfo.Init(PXT::GetProjLogfileXMLTag(), strTabs);
  1079. strTmp += XMLTagInfo.GetXMLString(m_strLogFileName);
  1080. XMLTagInfo.Init(PXT::GetProjUserrifileXMLTag(), strTabs);
  1081. strTmp += XMLTagInfo.GetXMLString(m_bUseRRIFile);
  1082. XMLTagInfo.Init(PXT::GetProjUselogfileXMLTag(), strTabs);
  1083. strTmp += XMLTagInfo.GetXMLString(m_bUseLogFile);
  1084. m_strData = m_XMLTagInformation.GetTabbedStartTag();
  1085. m_strData += strTmp;
  1086. m_strData += m_pNavigationOptions->GetDataString();
  1087. m_strData += m_pGeneralOptions->GetDataString();
  1088. m_strData += m_XMLTagInformation.GetTabbedEndTag();
  1089. return m_strData;
  1090. }
  1091. public:
  1092. XMLTAGINFORMATION m_XMLTagInformation;
  1093. } CXMLPROJECTOPTIONS, FAR* LPCXMLPROJECTOPTIONS;
  1094. //////////////////////////////////////////////////////////////////////
  1095. //////////////////////////////////////////////////////////////////////
  1096. typedef class CProjectData : CLParamBase
  1097. {
  1098. private:
  1099. CProjectData(CProjectData&);
  1100. CProjectData& operator=(CProjectData&);
  1101. public:
  1102. //////////////////////////////////////////////
  1103. // Inline
  1104. CProjectData() : m_pProjectOptions(NULL), m_pElementNavMap(NULL)
  1105. {
  1106. }
  1107. //////////////////////////////////////////////
  1108. // Inline
  1109. virtual ~CProjectData()
  1110. {
  1111. }
  1112. //////////////////////////////////////////////
  1113. // Inline
  1114. // Pure virtual function.
  1115. virtual CLString& GetDataString() = 0;
  1116. // Inline
  1117. CPROJECTOPTIONS& GetProjectOptions()
  1118. {
  1119. ASSERT(m_pProjectOptions);
  1120. return *m_pProjectOptions;
  1121. }
  1122. // Inline
  1123. CPROJECTOPTIONS* GetProjectOptionsPtr()
  1124. {
  1125. ASSERT(m_pProjectOptions);
  1126. return m_pProjectOptions;
  1127. }
  1128. //////////////////////////////////////////////
  1129. // Inline
  1130. CElementNavMap& GetElementNavMap()
  1131. {
  1132. ASSERT(m_pElementNavMap);
  1133. return *m_pElementNavMap;
  1134. }
  1135. //////////////////////////////////////////////
  1136. // Inline
  1137. CElementNavMap* GetElementNavMapPtr()
  1138. {
  1139. ASSERT(m_pElementNavMap);
  1140. return m_pElementNavMap;
  1141. }
  1142. //////////////////////////////////////////////
  1143. // Data
  1144. public:
  1145. CLString m_strProjectName;
  1146. CLString m_strProjectFileName;
  1147. CProjectOptions* m_pProjectOptions;
  1148. CElementNavMap* m_pElementNavMap;
  1149. CLString m_strData;
  1150. } CPROJECTDATA, FAR* LPCPROJECTDATA;
  1151. //////////////////////////////////////////////////////////////////////
  1152. typedef class CXMLProjectData : public CProjectData
  1153. {
  1154. private:
  1155. CXMLProjectData(CXMLProjectData&);
  1156. CXMLProjectData& operator=(CXMLProjectData&);
  1157. public:
  1158. //////////////////////////////////////////////
  1159. // Constructor
  1160. CXMLProjectData() : m_XMLTagInformation(PXT::GetProjDataXMLTag(), _T("\t"))
  1161. {
  1162. m_pElementNavMap = new CXMLElementNavMap();
  1163. m_pProjectOptions = new CXMLPROJECTOPTIONS();
  1164. CLString strTmp;
  1165. strTmp.Format(_T("%s/%s"), PXT::GetProjectXMLTag(),m_XMLTagInformation.GetTagName());
  1166. m_bstrXMLQuery = strTmp;
  1167. }
  1168. // Destructor
  1169. virtual ~CXMLProjectData()
  1170. {
  1171. delete m_pProjectOptions;
  1172. delete m_pElementNavMap;
  1173. }
  1174. public:
  1175. //////////////////////////////////////////////
  1176. virtual CLString& GetDataString()
  1177. {
  1178. CLString strTabs = _T("\t\t");
  1179. CXMLTagInformation XMLTagInfo(PXT::GetProjNameXMLTag(), strTabs);
  1180. CLString strTmp = XMLTagInfo.GetXMLString(m_strProjectName);
  1181. XMLTagInfo.Init(PXT::GetProjPathXMLTag(), strTabs);
  1182. strTmp += XMLTagInfo.GetXMLString(m_strProjectFileName);
  1183. m_strData = m_XMLTagInformation.GetTabbedStartTag();
  1184. m_strData += strTmp;
  1185. m_strData += m_pProjectOptions->GetDataString();
  1186. m_strData += m_pElementNavMap->GetDataString();
  1187. m_strData += m_XMLTagInformation.GetTabbedEndTag();
  1188. return m_strData;
  1189. }
  1190. //////////////////////////////////////////////
  1191. _bstr_t& GetProjectQueryXMLTag()
  1192. {
  1193. return m_bstrXMLQuery;
  1194. }
  1195. public:
  1196. _bstr_t m_bstrXMLQuery;
  1197. XMLTAGINFORMATION m_XMLTagInformation;
  1198. } CXMLPROJECTDATA, FAR* LPCXMLPROJECTDATA;
  1199. //////////////////////////////////////////////////////////////////////
  1200. //////////////////////////////////////////////////////////////////////
  1201. typedef class CProjectInformation
  1202. {
  1203. private:
  1204. CProjectInformation(CProjectInformation&);
  1205. CProjectInformation& operator=(CProjectInformation&);
  1206. public:
  1207. //////////////////////////////////////////////
  1208. // Inline
  1209. CProjectInformation(bool bAutoCleanUp = false) : m_pProjectData(NULL), m_XMLTagInformation(PXT::GetProjectXMLTag()),
  1210. m_bAutoCleanUp(bAutoCleanUp)
  1211. {
  1212. }
  1213. //////////////////////////////////////////////
  1214. // Inline
  1215. CProjectInformation(LPCPROJECTDATA pProjectData, bool bAutoCleanUp = false)
  1216. : m_pProjectData(pProjectData), m_XMLTagInformation(PXT::GetProjectXMLTag()),
  1217. m_bAutoCleanUp(bAutoCleanUp)
  1218. {
  1219. }
  1220. //////////////////////////////////////////////
  1221. // Inline
  1222. virtual ~CProjectInformation()
  1223. {
  1224. if(m_bAutoCleanUp)
  1225. {
  1226. CleanUp();
  1227. }
  1228. }
  1229. //////////////////////////////////////////////
  1230. // IMPORTANT: Don't call this routine unless you're specifically
  1231. // want this object to have absolute control of the memory allocated.
  1232. void CleanUp()
  1233. {
  1234. if(m_pProjectData)
  1235. {
  1236. delete m_pProjectData;
  1237. m_pProjectData = NULL;
  1238. }
  1239. }
  1240. //////////////////////////////////////////////
  1241. // Inline
  1242. void SetProjectInformation(LPCPROJECTDATA pProjectData)
  1243. {
  1244. ASSERT(pProjectData);
  1245. m_pProjectData = pProjectData;
  1246. }
  1247. //////////////////////////////////////////////
  1248. // Inline
  1249. CAppMapEx& GetAppMap()
  1250. {
  1251. return m_AppMap;
  1252. }
  1253. //////////////////////////////////////////////
  1254. // Inline
  1255. CProjectData& GetProjectData()
  1256. {
  1257. return *m_pProjectData;
  1258. }
  1259. //////////////////////////////////////////////
  1260. // Inline
  1261. CProjectData* GetProjectDataPtr()
  1262. {
  1263. return m_pProjectData;
  1264. }
  1265. //////////////////////////////////////////////
  1266. virtual CLString& GetDataString()
  1267. {
  1268. m_strData.Empty();
  1269. m_strData = _T("<?xml version=\"1.0\" standalone=\"no\"?>\n\n");
  1270. m_strData += m_XMLTagInformation.GetTabbedStartTag();
  1271. m_strData += m_pProjectData->GetDataString();
  1272. // Application List
  1273. CLString strTabs = _T("\t");
  1274. CXMLTagInformation XMLTagInfo(XMLTAG_APPLICATION_LIST, strTabs);
  1275. m_strData += XMLTagInfo.GetTabbedStartTag();
  1276. if(GetAppMap().size())
  1277. {
  1278. iterAppMap iter = GetAppMap().begin();
  1279. iterAppMap iterEnd = GetAppMap().end();
  1280. while(iter != iterEnd)
  1281. {
  1282. LPCAPPLICATIONDATA pAppData = (*iter).second;
  1283. ASSERT(pAppData);
  1284. m_strData += pAppData->GetDataString();
  1285. iter++;
  1286. }
  1287. }
  1288. m_strData += XMLTagInfo.GetTabbedEndTag();
  1289. m_strData += GetRaidReportDataPtr()->GetDataString(); // Add RAID information
  1290. m_strData += m_XMLTagInformation.GetTabbedEndTag();
  1291. return m_strData;
  1292. }
  1293. // Inline
  1294. bool IsModified()
  1295. {
  1296. return m_bModified;
  1297. }
  1298. // Inline
  1299. CRAIDREPORTDATA& GetRaidReportData()
  1300. {
  1301. return m_RaidReportData;
  1302. }
  1303. // Inline
  1304. LPCRAIDREPORTDATA GetRaidReportDataPtr()
  1305. {
  1306. return &m_RaidReportData;
  1307. }
  1308. // Inline
  1309. void SetModified(bool bModified = true)
  1310. {
  1311. m_bModified = bModified;
  1312. }
  1313. //////////////////////////////////////////////
  1314. // Data
  1315. public:
  1316. LPCPROJECTDATA m_pProjectData;
  1317. CXMLRAIDREPORTDATA m_RaidReportData;
  1318. CAppMapEx m_AppMap;
  1319. bool m_bAutoCleanUp;
  1320. bool m_bModified;
  1321. CLString m_strData;
  1322. XMLTAGINFORMATION m_XMLTagInformation;
  1323. } CPROJECTINFORMATION, FAR* LPCPROJECTINFORMATION;
  1324. #endif // !defined(AFX_PROJECTDATASTRUCTS_H__A1B64483_53BD_11D2_8780_00C04F8DA632__INCLUDED_)