FavoriteOrganizeDlg.cpp
上传用户:xjjlds
上传日期:2015-12-05
资源大小:22823k
文件大小:7k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. /* 
  2.  * Copyright (C) 2003-2005 Gabest
  3.  * http://www.gabest.org
  4.  *
  5.  *  This Program is free software; you can redistribute it and/or modify
  6.  *  it under the terms of the GNU General Public License as published by
  7.  *  the Free Software Foundation; either version 2, or (at your option)
  8.  *  any later version.
  9.  *   
  10.  *  This Program is distributed in the hope that it will be useful,
  11.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13.  *  GNU General Public License for more details.
  14.  *   
  15.  *  You should have received a copy of the GNU General Public License
  16.  *  along with GNU Make; see the file COPYING.  If not, write to
  17.  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 
  18.  *  http://www.gnu.org/copyleft/gpl.html
  19.  *
  20.  */
  21. // FavoriteOrganizeDlg.cpp : implementation file
  22. //
  23. #include "stdafx.h"
  24. #include "mplayerc.h"
  25. #include "FavoriteOrganizeDlg.h"
  26. // CFavoriteOrganizeDlg dialog
  27. //IMPLEMENT_DYNAMIC(CFavoriteOrganizeDlg, CResizableDialog)
  28. CFavoriteOrganizeDlg::CFavoriteOrganizeDlg(CWnd* pParent /*=NULL*/)
  29. : CResizableDialog(CFavoriteOrganizeDlg::IDD, pParent)
  30. {
  31. }
  32. CFavoriteOrganizeDlg::~CFavoriteOrganizeDlg()
  33. {
  34. }
  35. void CFavoriteOrganizeDlg::SetupList(bool fSave)
  36. {
  37. int i = m_tab.GetCurSel();
  38. if(fSave)
  39. {
  40. CList<CString> sl;
  41. for(int j = 0; j < m_list.GetItemCount(); j++)
  42. {
  43. CString desc = m_list.GetItemText(j, 0);
  44. desc.Remove(';');
  45. CString str = m_sl[i].GetAt((POSITION)m_list.GetItemData(j));
  46. sl.AddTail(desc + str.Mid(str.Find(';')));
  47. }
  48. m_sl[i].RemoveAll();
  49. m_sl[i].AddTail(&sl);
  50. }
  51. else
  52. {
  53. m_list.DeleteAllItems();
  54. POSITION pos = m_sl[i].GetHeadPosition(), tmp;
  55. while(pos) 
  56. {
  57. tmp = pos;
  58. CString s = m_sl[i].GetNext(pos);
  59. int i = s.Find(';');
  60. if(i >= 0) s = s.Left(i);
  61. m_list.SetItemData(m_list.InsertItem(m_list.GetItemCount(), s), (DWORD_PTR)tmp);
  62. }
  63. m_list.SetRedraw(FALSE);
  64. CRect r;
  65. m_list.GetClientRect(r);
  66. m_list.SetColumnWidth(0, -1);
  67. m_list.SetColumnWidth(0, max(m_list.GetColumnWidth(0), r.Size().cx));
  68. m_list.SetRedraw(TRUE);
  69. }
  70. }
  71. void CFavoriteOrganizeDlg::DoDataExchange(CDataExchange* pDX)
  72. {
  73. __super::DoDataExchange(pDX);
  74. DDX_Control(pDX, IDC_TAB1, m_tab);
  75. DDX_Control(pDX, IDC_LIST2, m_list);
  76. }
  77. BEGIN_MESSAGE_MAP(CFavoriteOrganizeDlg, CResizableDialog)
  78. ON_NOTIFY(TCN_SELCHANGE, IDC_TAB1, OnTcnSelchangeTab1)
  79. ON_WM_DRAWITEM()
  80. ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1)
  81. ON_BN_CLICKED(IDC_BUTTON2, OnBnClickedButton2)
  82. ON_BN_CLICKED(IDC_BUTTON3, OnBnClickedButton3)
  83. ON_BN_CLICKED(IDC_BUTTON7, OnBnClickedButton7)
  84. ON_NOTIFY(TCN_SELCHANGING, IDC_TAB1, OnTcnSelchangingTab1)
  85. ON_BN_CLICKED(IDOK, OnBnClickedOk)
  86. ON_WM_ACTIVATE()
  87. ON_NOTIFY(LVN_ENDLABELEDIT, IDC_LIST2, OnLvnEndlabeleditList2)
  88. ON_WM_SIZE()
  89. END_MESSAGE_MAP()
  90. // CFavoriteOrganizeDlg message handlers
  91. BOOL CFavoriteOrganizeDlg::OnInitDialog()
  92. {
  93. __super::OnInitDialog();
  94. m_tab.InsertItem(0, _T("Files"));
  95. m_tab.InsertItem(1, _T("DVDs"));
  96. // m_tab.InsertItem(2, _T("Devices"));
  97. m_tab.SetCurSel(0);
  98. m_list.InsertColumn(0, _T(""));
  99. m_list.SetExtendedStyle(m_list.GetExtendedStyle()|LVS_EX_FULLROWSELECT);
  100. AfxGetAppSettings().GetFav(FAV_FILE, m_sl[0]);
  101. AfxGetAppSettings().GetFav(FAV_DVD, m_sl[1]);
  102. AfxGetAppSettings().GetFav(FAV_DEVICE, m_sl[2]);
  103. SetupList(false);
  104. AddAnchor(IDC_TAB1, TOP_LEFT, BOTTOM_RIGHT);
  105. AddAnchor(IDC_LIST2, TOP_LEFT, BOTTOM_RIGHT);
  106. AddAnchor(IDC_BUTTON1, TOP_RIGHT);
  107. AddAnchor(IDC_BUTTON2, TOP_RIGHT);
  108. AddAnchor(IDC_BUTTON3, TOP_RIGHT);
  109. AddAnchor(IDC_BUTTON7, TOP_RIGHT);
  110. AddAnchor(IDOK, BOTTOM_RIGHT);
  111. return TRUE;  // return TRUE unless you set the focus to a control
  112. // EXCEPTION: OCX Property Pages should return FALSE
  113. }
  114. void CFavoriteOrganizeDlg::OnTcnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult)
  115. {
  116. SetupList(false);
  117. m_list.SetWindowPos(&wndTop, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);
  118. *pResult = 0;
  119. }
  120. void CFavoriteOrganizeDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
  121. {
  122. if(nIDCtl != IDC_LIST2) return;
  123. int nItem = lpDrawItemStruct->itemID;
  124. CRect rcItem = lpDrawItemStruct->rcItem;
  125. CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
  126. if(!!m_list.GetItemState(nItem, LVIS_SELECTED))
  127. {
  128. FillRect(pDC->m_hDC, rcItem, CBrush(0xf1dacc));
  129. FrameRect(pDC->m_hDC, rcItem, CBrush(0xc56a31));
  130. }
  131. else
  132. {
  133. CBrush b;
  134. b.CreateSysColorBrush(COLOR_WINDOW);
  135. FillRect(pDC->m_hDC, rcItem, b);
  136. }
  137. CString str = m_list.GetItemText(nItem, 0);
  138. pDC->SetTextColor(0);
  139. pDC->TextOut(rcItem.left+3, (rcItem.top+rcItem.bottom - pDC->GetTextExtent(str).cy)/2, str);
  140. }
  141. void CFavoriteOrganizeDlg::OnBnClickedButton1()
  142. {
  143. if(POSITION pos = m_list.GetFirstSelectedItemPosition())
  144. {
  145. m_list.SetFocus();
  146. m_list.EditLabel(m_list.GetNextSelectedItem(pos));
  147. }
  148. }
  149. void CFavoriteOrganizeDlg::OnLvnEndlabeleditList2(NMHDR* pNMHDR, LRESULT* pResult)
  150. {
  151. NMLVDISPINFO* pDispInfo = reinterpret_cast<NMLVDISPINFO*>(pNMHDR);
  152. if(pDispInfo->item.iItem >= 0 && pDispInfo->item.pszText)
  153. m_list.SetItemText(pDispInfo->item.iItem, 0, pDispInfo->item.pszText);
  154. *pResult = 0;
  155. }
  156. void CFavoriteOrganizeDlg::OnBnClickedButton2()
  157. {
  158. if(POSITION pos = m_list.GetFirstSelectedItemPosition())
  159. {
  160. int nItem = m_list.GetNextSelectedItem(pos);
  161. if(nItem < 0 || nItem >= m_list.GetItemCount()) return;
  162. m_list.DeleteItem(nItem);
  163. nItem = min(nItem, m_list.GetItemCount()-1);
  164. m_list.SetSelectionMark(nItem);
  165. m_list.SetItemState(nItem, LVIS_SELECTED, LVIS_SELECTED);
  166. }
  167. }
  168. void CFavoriteOrganizeDlg::OnBnClickedButton3()
  169. {
  170. if(POSITION pos = m_list.GetFirstSelectedItemPosition())
  171. {
  172. int nItem = m_list.GetNextSelectedItem(pos);
  173. if(nItem <= 0) return;
  174. DWORD_PTR data = m_list.GetItemData(nItem);
  175. CString str = m_list.GetItemText(nItem, 0);
  176. m_list.DeleteItem(nItem);
  177. nItem--;
  178. m_list.InsertItem(nItem, str);
  179. m_list.SetItemData(nItem, data);
  180. m_list.SetSelectionMark(nItem);
  181. m_list.SetItemState(nItem, LVIS_SELECTED, LVIS_SELECTED);
  182. }
  183. }
  184. void CFavoriteOrganizeDlg::OnBnClickedButton7()
  185. {
  186. if(POSITION pos = m_list.GetFirstSelectedItemPosition())
  187. {
  188. int nItem = m_list.GetNextSelectedItem(pos);
  189. if(nItem < 0 || nItem >= m_list.GetItemCount()-1) return;
  190. DWORD_PTR data = m_list.GetItemData(nItem);
  191. CString str = m_list.GetItemText(nItem, 0);
  192. m_list.DeleteItem(nItem);
  193. nItem++;
  194. m_list.InsertItem(nItem, str);
  195. m_list.SetItemData(nItem, data);
  196. m_list.SetSelectionMark(nItem);
  197. m_list.SetItemState(nItem, LVIS_SELECTED, LVIS_SELECTED);
  198. }
  199. }
  200. void CFavoriteOrganizeDlg::OnTcnSelchangingTab1(NMHDR *pNMHDR, LRESULT *pResult)
  201. {
  202. SetupList(true);
  203. *pResult = 0;
  204. }
  205. void CFavoriteOrganizeDlg::OnBnClickedOk()
  206. {
  207. SetupList(true);
  208. AfxGetAppSettings().SetFav(FAV_FILE, m_sl[0]);
  209. AfxGetAppSettings().SetFav(FAV_DVD, m_sl[1]);
  210. AfxGetAppSettings().SetFav(FAV_DEVICE, m_sl[2]);
  211. OnOK();
  212. }
  213. void CFavoriteOrganizeDlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
  214. {
  215. __super::OnActivate(nState, pWndOther, bMinimized);
  216. if(nState == WA_ACTIVE)
  217. m_list.SetWindowPos(&wndTop, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);
  218. }
  219. void CFavoriteOrganizeDlg::OnSize(UINT nType, int cx, int cy)
  220. {
  221. __super::OnSize(nType, cx, cy);
  222. if(IsWindow(m_list))
  223. m_list.SetColumnWidth(0, LVSCW_AUTOSIZE_USEHEADER);
  224. }