00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "stdafx.h"
00026 #include "mplayerc.h"
00027 #include "FavoriteOrganizeDlg.h"
00028
00029
00030
00031
00032
00033 CFavoriteOrganizeDlg::CFavoriteOrganizeDlg(CWnd* pParent )
00034 : CResizableDialog(CFavoriteOrganizeDlg::IDD, pParent)
00035 {
00036 }
00037
00038 CFavoriteOrganizeDlg::~CFavoriteOrganizeDlg()
00039 {
00040 }
00041
00042 void CFavoriteOrganizeDlg::SetupList(bool fSave)
00043 {
00044 int i = m_tab.GetCurSel();
00045
00046 if(fSave)
00047 {
00048 CList<CString> sl;
00049
00050 for(int j = 0; j < m_list.GetItemCount(); j++)
00051 {
00052 CString desc = m_list.GetItemText(j, 0);
00053 desc.Remove(';');
00054 CString str = m_sl[i].GetAt((POSITION)m_list.GetItemData(j));
00055 sl.AddTail(desc + str.Mid(str.Find(';')));
00056 }
00057
00058 m_sl[i].RemoveAll();
00059 m_sl[i].AddTail(&sl);
00060 }
00061 else
00062 {
00063 m_list.DeleteAllItems();
00064
00065 POSITION pos = m_sl[i].GetHeadPosition(), tmp;
00066 while(pos)
00067 {
00068 tmp = pos;
00069 CString s = m_sl[i].GetNext(pos);
00070 int i = s.Find(';');
00071 if(i >= 0) s = s.Left(i);
00072 m_list.SetItemData(m_list.InsertItem(m_list.GetItemCount(), s), (DWORD_PTR)tmp);
00073 }
00074
00075 m_list.SetRedraw(FALSE);
00076
00077 CRect r;
00078 m_list.GetClientRect(r);
00079 m_list.SetColumnWidth(0, -1);
00080 m_list.SetColumnWidth(0, max(m_list.GetColumnWidth(0), r.Size().cx));
00081
00082 m_list.SetRedraw(TRUE);
00083 }
00084 }
00085
00086 void CFavoriteOrganizeDlg::DoDataExchange(CDataExchange* pDX)
00087 {
00088 __super::DoDataExchange(pDX);
00089 DDX_Control(pDX, IDC_TAB1, m_tab);
00090 DDX_Control(pDX, IDC_LIST2, m_list);
00091 }
00092
00093
00094 BEGIN_MESSAGE_MAP(CFavoriteOrganizeDlg, CResizableDialog)
00095 ON_NOTIFY(TCN_SELCHANGE, IDC_TAB1, OnTcnSelchangeTab1)
00096 ON_WM_DRAWITEM()
00097 ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1)
00098 ON_BN_CLICKED(IDC_BUTTON2, OnBnClickedButton2)
00099 ON_BN_CLICKED(IDC_BUTTON3, OnBnClickedButton3)
00100 ON_BN_CLICKED(IDC_BUTTON7, OnBnClickedButton7)
00101 ON_NOTIFY(TCN_SELCHANGING, IDC_TAB1, OnTcnSelchangingTab1)
00102 ON_BN_CLICKED(IDOK, OnBnClickedOk)
00103 ON_WM_ACTIVATE()
00104 ON_NOTIFY(LVN_ENDLABELEDIT, IDC_LIST2, OnLvnEndlabeleditList2)
00105 ON_WM_SIZE()
00106 END_MESSAGE_MAP()
00107
00108
00109
00110
00111 BOOL CFavoriteOrganizeDlg::OnInitDialog()
00112 {
00113 __super::OnInitDialog();
00114
00115 m_tab.InsertItem(0, _T("Files"));
00116 m_tab.InsertItem(1, _T("DVDs"));
00117
00118 m_tab.SetCurSel(0);
00119
00120 m_list.InsertColumn(0, _T(""));
00121 m_list.SetExtendedStyle(m_list.GetExtendedStyle()|LVS_EX_FULLROWSELECT);
00122
00123 AfxGetAppSettings().GetFav(FAV_FILE, m_sl[0]);
00124 AfxGetAppSettings().GetFav(FAV_DVD, m_sl[1]);
00125 AfxGetAppSettings().GetFav(FAV_DEVICE, m_sl[2]);
00126
00127 SetupList(false);
00128
00129 AddAnchor(IDC_TAB1, TOP_LEFT, BOTTOM_RIGHT);
00130 AddAnchor(IDC_LIST2, TOP_LEFT, BOTTOM_RIGHT);
00131 AddAnchor(IDC_BUTTON1, TOP_RIGHT);
00132 AddAnchor(IDC_BUTTON2, TOP_RIGHT);
00133 AddAnchor(IDC_BUTTON3, TOP_RIGHT);
00134 AddAnchor(IDC_BUTTON7, TOP_RIGHT);
00135 AddAnchor(IDOK, BOTTOM_RIGHT);
00136
00137 return TRUE;
00138
00139 }
00140
00141 void CFavoriteOrganizeDlg::OnTcnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult)
00142 {
00143 SetupList(false);
00144
00145 m_list.SetWindowPos(&wndTop, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);
00146
00147 *pResult = 0;
00148 }
00149
00150 void CFavoriteOrganizeDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
00151 {
00152 if(nIDCtl != IDC_LIST2) return;
00153
00154 int nItem = lpDrawItemStruct->itemID;
00155 CRect rcItem = lpDrawItemStruct->rcItem;
00156
00157 CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
00158
00159 if(!!m_list.GetItemState(nItem, LVIS_SELECTED))
00160 {
00161 FillRect(pDC->m_hDC, rcItem, CBrush(0xf1dacc));
00162 FrameRect(pDC->m_hDC, rcItem, CBrush(0xc56a31));
00163 }
00164 else
00165 {
00166 CBrush b;
00167 b.CreateSysColorBrush(COLOR_WINDOW);
00168 FillRect(pDC->m_hDC, rcItem, b);
00169 }
00170
00171 CString str = m_list.GetItemText(nItem, 0);
00172
00173 pDC->SetTextColor(0);
00174 pDC->TextOut(rcItem.left+3, (rcItem.top+rcItem.bottom - pDC->GetTextExtent(str).cy)/2, str);
00175 }
00176
00177 void CFavoriteOrganizeDlg::OnBnClickedButton1()
00178 {
00179 if(POSITION pos = m_list.GetFirstSelectedItemPosition())
00180 {
00181 m_list.SetFocus();
00182 m_list.EditLabel(m_list.GetNextSelectedItem(pos));
00183 }
00184 }
00185
00186 void CFavoriteOrganizeDlg::OnLvnEndlabeleditList2(NMHDR* pNMHDR, LRESULT* pResult)
00187 {
00188 NMLVDISPINFO* pDispInfo = reinterpret_cast<NMLVDISPINFO*>(pNMHDR);
00189 if(pDispInfo->item.iItem >= 0 && pDispInfo->item.pszText)
00190 m_list.SetItemText(pDispInfo->item.iItem, 0, pDispInfo->item.pszText);
00191 *pResult = 0;
00192 }
00193
00194 void CFavoriteOrganizeDlg::OnBnClickedButton2()
00195 {
00196 if(POSITION pos = m_list.GetFirstSelectedItemPosition())
00197 {
00198 int nItem = m_list.GetNextSelectedItem(pos);
00199 if(nItem < 0 || nItem >= m_list.GetItemCount()) return;
00200
00201 m_list.DeleteItem(nItem);
00202
00203 nItem = min(nItem, m_list.GetItemCount()-1);
00204
00205 m_list.SetSelectionMark(nItem);
00206 m_list.SetItemState(nItem, LVIS_SELECTED, LVIS_SELECTED);
00207 }
00208 }
00209
00210 void CFavoriteOrganizeDlg::OnBnClickedButton3()
00211 {
00212 if(POSITION pos = m_list.GetFirstSelectedItemPosition())
00213 {
00214 int nItem = m_list.GetNextSelectedItem(pos);
00215 if(nItem <= 0) return;
00216
00217 DWORD_PTR data = m_list.GetItemData(nItem);
00218 CString str = m_list.GetItemText(nItem, 0);
00219
00220 m_list.DeleteItem(nItem);
00221
00222 nItem--;
00223
00224 m_list.InsertItem(nItem, str);
00225 m_list.SetItemData(nItem, data);
00226 m_list.SetSelectionMark(nItem);
00227 m_list.SetItemState(nItem, LVIS_SELECTED, LVIS_SELECTED);
00228 }
00229 }
00230
00231 void CFavoriteOrganizeDlg::OnBnClickedButton7()
00232 {
00233 if(POSITION pos = m_list.GetFirstSelectedItemPosition())
00234 {
00235 int nItem = m_list.GetNextSelectedItem(pos);
00236 if(nItem < 0 || nItem >= m_list.GetItemCount()-1) return;
00237
00238 DWORD_PTR data = m_list.GetItemData(nItem);
00239 CString str = m_list.GetItemText(nItem, 0);
00240
00241 m_list.DeleteItem(nItem);
00242
00243 nItem++;
00244
00245 m_list.InsertItem(nItem, str);
00246 m_list.SetItemData(nItem, data);
00247 m_list.SetSelectionMark(nItem);
00248 m_list.SetItemState(nItem, LVIS_SELECTED, LVIS_SELECTED);
00249 }
00250 }
00251
00252 void CFavoriteOrganizeDlg::OnTcnSelchangingTab1(NMHDR *pNMHDR, LRESULT *pResult)
00253 {
00254 SetupList(true);
00255
00256 *pResult = 0;
00257 }
00258
00259 void CFavoriteOrganizeDlg::OnBnClickedOk()
00260 {
00261 SetupList(true);
00262
00263 AfxGetAppSettings().SetFav(FAV_FILE, m_sl[0]);
00264 AfxGetAppSettings().SetFav(FAV_DVD, m_sl[1]);
00265 AfxGetAppSettings().SetFav(FAV_DEVICE, m_sl[2]);
00266
00267 OnOK();
00268 }
00269
00270 void CFavoriteOrganizeDlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
00271 {
00272 __super::OnActivate(nState, pWndOther, bMinimized);
00273
00274 if(nState == WA_ACTIVE)
00275 m_list.SetWindowPos(&wndTop, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);
00276 }
00277
00278 void CFavoriteOrganizeDlg::OnSize(UINT nType, int cx, int cy)
00279 {
00280 __super::OnSize(nType, cx, cy);
00281
00282 if(IsWindow(m_list))
00283 m_list.SetColumnWidth(0, LVSCW_AUTOSIZE_USEHEADER);
00284 }