OptionTreeItemFile.cpp
Upload User: kairuinn
Upload Date: 2009-02-07
Package Size: 2922k
Code Size: 11k
Category:

Graph program

Development Platform:

Visual C++

  1. // COptionTree
  2. //
  3. // License
  4. // -------
  5. // This code is provided "as is" with no expressed or implied warranty.
  6. // 
  7. // You may use this code in a commercial product with or without acknowledgement.
  8. // However you may not sell this code or any modification of this code, this includes 
  9. // commercial libraries and anything else for profit.
  10. //
  11. // I would appreciate a notification of any bugs or bug fixes to help the control grow.
  12. //
  13. // History:
  14. // --------
  15. // See License.txt for full history information.
  16. //
  17. //
  18. // Copyright (c) 1999-2002 
  19. // ComputerSmarts.net 
  20. // mattrmiller@computersmarts.net
  21. #include "stdafx.h"
  22. #include "OptionTreeItemFile.h"
  23. // Added Headers
  24. #include "OptionTree.h"
  25. #ifdef _DEBUG
  26. #undef THIS_FILE
  27. static char THIS_FILE[]=__FILE__;
  28. #define new DEBUG_NEW
  29. #endif
  30. //////////////////////////////////////////////////////////////////////
  31. // Construction/Destruction
  32. //////////////////////////////////////////////////////////////////////
  33. COptionTreeItemFile::COptionTreeItemFile()
  34. {
  35. // Initialize variables
  36. m_dwOptions = NULL;
  37. m_lDefaultHeight = 0;
  38. m_dwDlgFlags = NULL;
  39. m_strDefExt = _T("");
  40. m_strFilter = _T("");
  41. m_lDefaultHeight = 0;
  42. m_strDlgTitle = _T("Select Folder");
  43. // Set item type
  44. SetItemType(OT_ITEM_FILE);
  45. }
  46. COptionTreeItemFile::~COptionTreeItemFile()
  47. {
  48. }
  49. void COptionTreeItemFile::DrawAttribute(CDC *pDC, const RECT &rcRect)
  50. {
  51. // Declare variables
  52. COLORREF crOld;
  53. int nOldBack;
  54. CRect rcText, rcClient;
  55. CString strText = _T("");
  56. CString strTemp;
  57. HGDIOBJ hOld;
  58. CFileFind fFind;
  59. COLORREF crOldBack;
  60. // Make sure options aren't NULL
  61. if (m_otOption == NULL)
  62. {
  63. return;
  64. }
  65. // Get window rect
  66. rcClient = rcRect;
  67. // Select font
  68. hOld = pDC->SelectObject(m_otOption->GetNormalFont());
  69. // Set text color
  70. if (IsReadOnly() == TRUE || m_otOption->IsWindowEnabled() == FALSE)
  71. {
  72. crOld = pDC->SetTextColor(GetSysColor(COLOR_GRAYTEXT));
  73. }
  74. else
  75. {
  76. crOld = pDC->SetTextColor(GetTextColor());
  77. }
  78. // Set background mode
  79. nOldBack = pDC->SetBkMode(TRANSPARENT);
  80. // Set background color
  81. crOldBack = pDC->SetBkColor(GetBackgroundColor());
  82. // Draw text
  83. // -- Full path
  84. if (GetOption(OT_FILE_SHOWFULLPATH) == TRUE)
  85. {
  86. for (int i = 0; i < 1/*m_strFileNames.GetSize()*/; i++)
  87. {
  88. // -- -- Get file
  89. strTemp = m_strFileNames.GetAt(i);
  90. // -- -- Add newline
  91. if (i != m_strFileNames.GetSize())
  92. {
  93. strTemp += _T("n");
  94. }
  95. // -- -- Add to text
  96. strText += strTemp;
  97. }
  98. }
  99. // -- Filename
  100. else if (GetOption(OT_FILE_SHOWFILENAME) == TRUE)
  101. {
  102. for (int i = 0; i < 1/*m_strFileNames.GetSize()*/; i++)
  103. {
  104. // -- -- Find file information
  105. if (fFind.FindFile(m_strFileNames.GetAt(i)) == FALSE)
  106. {
  107. continue;
  108. }
  109. fFind.FindNextFile();
  110. // -- -- Get file
  111. strTemp = fFind.GetFileName();
  112. // -- -- Add newline
  113. if (i != m_strFileNames.GetSize())
  114. {
  115. strTemp += _T("n");
  116. }
  117. // -- -- Add to text
  118. strText += strTemp;
  119. }
  120. }
  121. // -- File title
  122. else if (GetOption(OT_FILE_SHOWFILETITLE) == TRUE)
  123. {
  124. for (int i = 0; i < 1/*m_strFileNames.GetSize()*/; i++)
  125. {
  126. // -- -- Find file informaton
  127. if (fFind.FindFile(m_strFileNames.GetAt(i)) == FALSE)
  128. {
  129. continue;
  130. }
  131. fFind.FindNextFile();
  132. // -- -- Get file
  133. strTemp = fFind.GetFileTitle();
  134. // -- -- Add newline
  135. if (i != m_strFileNames.GetSize())
  136. {
  137. strTemp += _T("n");
  138. }
  139. // -- -- Add to text
  140. strText += strTemp;
  141. }
  142. }
  143. // -- File extention
  144. else if (GetOption(OT_FILE_SHOWFILEEXT) == TRUE)
  145. {
  146. for (int i = 0; i < 1/*m_strFileNames.GetSize()*/; i++)
  147. {
  148. // -- -- Find file informaton
  149. if (fFind.FindFile(m_strFileNames.GetAt(i)) == FALSE)
  150. {
  151. continue;
  152. }
  153. fFind.FindNextFile();
  154. // -- -- Get file
  155. strTemp = GetFileExtention(fFind.GetFileName());
  156. // -- -- Add newline
  157. if (i != m_strFileNames.GetSize())
  158. {
  159. strTemp += _T("n");
  160. }
  161. // -- -- Add to text
  162. strText += strTemp;
  163. }
  164. }
  165. // -- File directory
  166. else if (GetOption(OT_FILE_SHOWFILEDIR) == TRUE)
  167. {
  168. for (int i = 0; i < 1/*m_strFileNames.GetSize()*/; i++)
  169. {
  170. // -- -- Get file
  171. strTemp = GetFileDirectory(m_strFileNames.GetAt(i));
  172. // -- -- Add newline
  173. if (i != m_strFileNames.GetSize())
  174. {
  175. strTemp += _T("n");
  176. }
  177. // -- -- Add to text
  178. strText += strTemp;
  179. }
  180. }
  181. // -- File drive
  182. else if (GetOption(OT_FILE_SHOWFILEDRIVE) == TRUE)
  183. {
  184. for (int i = 0; i < 1/*m_strFileNames.GetSize()*/; i++)
  185. {
  186. // -- -- Get file
  187. strTemp = GetFileDrive(m_strFileNames.GetAt(i));
  188. // -- -- Add newline
  189. if (i != m_strFileNames.GetSize())
  190. {
  191. strTemp += _T("n");
  192. }
  193. // -- -- Add to text
  194. strText += strTemp;
  195. }
  196. }
  197. // Makse sure we have a aselection
  198. if (m_strFileNames.GetSize() == 0 || strText == _T(""))
  199. {
  200. strText = OT_FILE_NOSELECTION;
  201. }
  202. // Get text rectangle
  203. rcText.left  = rcRect.left + 1;
  204. rcText.right = rcRect.right;
  205. rcText.top = rcRect.top + 1;
  206. rcText.bottom = rcRect.bottom;
  207. // Draw text
  208. pDC->DrawText(strText, rcText, DT_VCENTER);
  209. pDC->DrawText(strText, rcText, DT_VCENTER | DT_CALCRECT);
  210. // Restore GDI ojects
  211. pDC->SetTextColor(crOld);
  212. pDC->SetBkMode(nOldBack);
  213. pDC->SelectObject(hOld);
  214. pDC->SetBkColor(crOldBack);
  215. }
  216. void COptionTreeItemFile::OnCommit()
  217. {
  218. }
  219. void COptionTreeItemFile::OnRefresh()
  220. {
  221. }
  222. void COptionTreeItemFile::OnMove()
  223. {
  224. }
  225. void COptionTreeItemFile::OnActivate()
  226. {
  227. // Declare variables
  228. CFont *pFont;
  229. LOGFONT lf;
  230. BOOL bMultiline = FALSE;
  231. int m_nNumItems = 0;
  232. POSITION psPos;
  233. CString strFile;
  234. // Get file
  235. if (m_strFileNames.GetSize() == 0)
  236. {
  237. strFile = _T("");
  238. }
  239. else
  240. {
  241. strFile = m_strFileNames.GetAt(0);
  242. }
  243. // Select folder
  244. if (GetOption(OT_FILE_SELECTDIALOG) == TRUE)
  245. {
  246. if (m_dlgFile.SelectFolder(m_strDlgTitle, strFile, m_dwDlgFlags, m_otOption) == IDOK)
  247. {
  248. bMultiline = TRUE;
  249. // -- Get file names
  250. m_strFileNames.RemoveAll();
  251. m_strFileNames.Add(m_dlgFile.GetSelectedFolder());
  252. // -- Number of items
  253. m_nNumItems = 1;
  254. }
  255. }
  256. // Normal
  257. else
  258. {
  259. m_dlgFile.SetDialog(GetOption(OT_FILE_OPENDIALOG), m_strDefExt, strFile, m_dwDlgFlags, m_strFilter, m_otOption);
  260. if (m_dlgFile.DoModal() == IDOK)
  261. {
  262. bMultiline = TRUE;
  263. // -- Get file names
  264. m_strFileNames.RemoveAll();
  265. psPos = m_dlgFile.GetStartPosition();
  266. while (psPos != NULL)
  267. {
  268. m_strFileNames.Add(m_dlgFile.GetNextPathName(psPos));
  269. m_nNumItems++;
  270. }
  271. }
  272. }
  273. // Change height
  274. if (bMultiline == TRUE)
  275. {
  276. // -- Get font
  277. pFont = m_otOption->GetNormalFont();
  278. pFont->GetLogFont(&lf);
  279. if ((abs(lf.lfHeight) + 3) * m_nNumItems > m_lDefaultHeight)
  280. {
  281. SetItemHeight((abs(lf.lfHeight) + 3) * m_nNumItems + OT_SPACE);
  282. SetDrawMultiline(TRUE);
  283. }
  284. else
  285. {
  286. SetItemHeight(m_lDefaultHeight);
  287. SetDrawMultiline(FALSE);
  288. }
  289. }
  290. // Update items
  291. if (m_otOption != NULL)
  292. {
  293. m_otOption->UpdatedItems();
  294. }
  295. }
  296. void COptionTreeItemFile::CleanDestroyWindow()
  297. {
  298. }
  299. void COptionTreeItemFile::OnDeSelect()
  300. {
  301. }
  302. void COptionTreeItemFile::OnSelect()
  303. {
  304. }
  305. BOOL COptionTreeItemFile::GetOption(DWORD dwOption)
  306. {
  307. // Return option
  308. return (m_dwOptions & dwOption) ? TRUE : FALSE;
  309. }
  310. void COptionTreeItemFile::SetOption(DWORD dwOption, BOOL bSet)
  311. {
  312. // Set option
  313. if (bSet == TRUE)
  314. {
  315. m_dwOptions |= dwOption;
  316. }
  317. else
  318. {
  319. m_dwOptions &= ~dwOption;
  320. }
  321. }
  322. BOOL COptionTreeItemFile::GetDialogFlag(DWORD dwOption)
  323. {
  324. // Return option
  325. return (m_dwDlgFlags & dwOption) ? TRUE : FALSE;
  326. }
  327. void COptionTreeItemFile::SetDialogFlag(DWORD dwOption, BOOL bSet)
  328. {
  329. // Set option
  330. if (bSet == TRUE)
  331. {
  332. m_dwDlgFlags |= dwOption;
  333. }
  334. else
  335. {
  336. m_dwDlgFlags &= ~dwOption;
  337. }
  338. }
  339. BOOL COptionTreeItemFile::CreateFileItem(CString strFile, CString strDefExt, CString strFilter, DWORD dwOptions, DWORD dwDlgFlags)
  340. {
  341. // Make sure options is not NULL
  342. if (m_otOption == NULL)
  343. {
  344. return FALSE;
  345. }
  346. // Save options
  347. m_dwOptions = dwOptions;
  348. // Save dialog flags
  349. m_dwDlgFlags = dwDlgFlags;
  350. // Save file
  351. m_strFileNames.Add(strFile);
  352. // Save default extention
  353. m_strDefExt = strDefExt;
  354. // Save filter
  355. m_strFilter = strFilter;
  356. // Get default height
  357. m_lDefaultHeight = GetHeight();
  358. return TRUE;
  359. }
  360. void COptionTreeItemFile::AddFileName(CString strFile)
  361. {
  362. m_strFileNames.Add(strFile);
  363. }
  364. void COptionTreeItemFile::SetDialogFlags(DWORD dwFlags)
  365. {
  366. m_dwDlgFlags = dwFlags;
  367. }
  368. DWORD COptionTreeItemFile::GetDialogFlags()
  369. {
  370. return m_dwDlgFlags;
  371. }
  372. void COptionTreeItemFile::SertDefaultExtention(CString strExt)
  373. {
  374. m_strDefExt = strExt;
  375. }
  376. CString COptionTreeItemFile::GetDefaultExtention()
  377. {
  378. return m_strDefExt;
  379. }
  380. void COptionTreeItemFile::SetFilter(CString strFilter)
  381. {
  382. m_strFilter = strFilter;
  383. }
  384. CString COptionTreeItemFile::GetFilter()
  385. {
  386. return m_strFilter;
  387. }
  388. void COptionTreeItemFile::SetDialogTitle(CString strTitle)
  389. {
  390. m_strDlgTitle = strTitle;
  391. }
  392. CString COptionTreeItemFile::GetDialogTitle()
  393. {
  394. return m_strDlgTitle;
  395. }
  396. CString COptionTreeItemFile::GetFileExtention(CString strFile)
  397. {
  398. // Declare variables
  399. TCHAR szExt[MAX_PATH];
  400. // Split path into components
  401. _tsplitpath(strFile, NULL, NULL, NULL, szExt);
  402. memmove(szExt, szExt + 1,strlen(szExt) - 1);
  403. szExt[strlen(szExt) - 1] = '';
  404. return szExt;
  405. }
  406. CString COptionTreeItemFile::GetFileDirectory(CString strFile)
  407. {
  408. // Declare variables
  409. TCHAR szDrive[MAX_PATH];
  410. TCHAR szDir[MAX_PATH];
  411. // Split path into components
  412. _tsplitpath(strFile, szDrive, szDir, NULL, NULL);
  413. ::lstrcat(szDrive, szDir);
  414. return szDrive;
  415. }
  416. CString COptionTreeItemFile::GetFileDrive(CString strFile)
  417. {
  418. // Declare variables
  419. TCHAR szDrive[MAX_PATH];
  420. // Split path into components
  421. _tsplitpath(strFile, szDrive, NULL, NULL, NULL);
  422. return szDrive;
  423. }
  424. POSITION COptionTreeItemFile::GetStartPosition()
  425. {
  426. return m_dlgFile.GetStartPosition();
  427. }
  428. CString COptionTreeItemFile::GetNextPathName(POSITION &pos)
  429. {
  430. return m_dlgFile.GetNextPathName(pos);
  431. }
  432. CString COptionTreeItemFile::GetPathName()
  433. {
  434. return m_dlgFile.GetPathName();
  435. }
  436. CString COptionTreeItemFile::GetFileName()
  437. {
  438. return m_dlgFile.GetFileName();
  439. }
  440. CString COptionTreeItemFile::GetFileTitle()
  441. {
  442. return m_dlgFile.GetFileTitle();
  443. }
  444. CString COptionTreeItemFile::GetFileExt()
  445. {
  446. return m_dlgFile.GetFileExt();
  447. }
  448. CString COptionTreeItemFile::GetFileDir()
  449. {
  450. return m_dlgFile.GetFileDir();
  451. }
  452. CString COptionTreeItemFile::GetFileDrive()
  453. {
  454. return m_dlgFile.GetFileDrive();
  455. }
  456. CString COptionTreeItemFile::GetSelectedFolder()
  457. {
  458. return m_dlgFile.GetSelectedFolder();
  459. }