/* * $Id$ * * (C) 2003-2006 Gabest * (C) 2006-2010 see AUTHORS * * This file is part of mplayerc. * * Mplayerc is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * Mplayerc is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ #include "stdafx.h" #include "mplayerc.h" #include "FavoriteOrganizeDlg.h" // CFavoriteOrganizeDlg dialog //IMPLEMENT_DYNAMIC(CFavoriteOrganizeDlg, CResizableDialog) CFavoriteOrganizeDlg::CFavoriteOrganizeDlg(CWnd* pParent /*=NULL*/) : CResizableDialog(CFavoriteOrganizeDlg::IDD, pParent) { } CFavoriteOrganizeDlg::~CFavoriteOrganizeDlg() { } void CFavoriteOrganizeDlg::SetupList(bool fSave) { int i = m_tab.GetCurSel(); if(fSave) { CAtlList sl; for(int j = 0; j < m_list.GetItemCount(); j++) { CString desc = m_list.GetItemText(j, 0); desc.Remove(';'); CString str = m_sl[i].GetAt((POSITION)m_list.GetItemData(j)); sl.AddTail(desc + str.Mid(str.Find(';'))); } m_sl[i].RemoveAll(); m_sl[i].AddTailList(&sl); } else { m_list.DeleteAllItems(); POSITION pos = m_sl[i].GetHeadPosition(), tmp; while(pos) { tmp = pos; CString s = m_sl[i].GetNext(pos); int i = s.Find(';'); if(i >= 0) s = s.Left(i); m_list.SetItemData(m_list.InsertItem(m_list.GetItemCount(), s), (DWORD_PTR)tmp); } m_list.SetRedraw(FALSE); CRect r; m_list.GetClientRect(r); m_list.SetColumnWidth(0, -1); m_list.SetColumnWidth(0, max(m_list.GetColumnWidth(0), r.Size().cx)); m_list.SetRedraw(TRUE); } } void CFavoriteOrganizeDlg::DoDataExchange(CDataExchange* pDX) { __super::DoDataExchange(pDX); DDX_Control(pDX, IDC_TAB1, m_tab); DDX_Control(pDX, IDC_LIST2, m_list); } BEGIN_MESSAGE_MAP(CFavoriteOrganizeDlg, CResizableDialog) ON_NOTIFY(TCN_SELCHANGE, IDC_TAB1, OnTcnSelchangeTab1) ON_WM_DRAWITEM() ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1) ON_BN_CLICKED(IDC_BUTTON2, OnBnClickedButton2) ON_BN_CLICKED(IDC_BUTTON3, OnBnClickedButton3) ON_BN_CLICKED(IDC_BUTTON4, OnBnClickedButton7) ON_NOTIFY(TCN_SELCHANGING, IDC_TAB1, OnTcnSelchangingTab1) ON_BN_CLICKED(IDOK, OnBnClickedOk) ON_WM_ACTIVATE() ON_NOTIFY(LVN_ENDLABELEDIT, IDC_LIST2, OnLvnEndlabeleditList2) ON_WM_SIZE() END_MESSAGE_MAP() // CFavoriteOrganizeDlg message handlers BOOL CFavoriteOrganizeDlg::OnInitDialog() { __super::OnInitDialog(); m_tab.InsertItem(0, ResStr(IDS_FAVFILES)); m_tab.InsertItem(1, ResStr(IDS_FAVDVDS)); // m_tab.InsertItem(2, ResStr(IDS_FAVDEVICES)); m_tab.SetCurSel(0); m_list.InsertColumn(0, _T("")); m_list.SetExtendedStyle(m_list.GetExtendedStyle()|LVS_EX_FULLROWSELECT); AfxGetAppSettings().GetFav(FAV_FILE, m_sl[0]); AfxGetAppSettings().GetFav(FAV_DVD, m_sl[1]); AfxGetAppSettings().GetFav(FAV_DEVICE, m_sl[2]); SetupList(false); AddAnchor(IDC_TAB1, TOP_LEFT, BOTTOM_RIGHT); AddAnchor(IDC_LIST2, TOP_LEFT, BOTTOM_RIGHT); AddAnchor(IDC_BUTTON1, TOP_RIGHT); AddAnchor(IDC_BUTTON2, TOP_RIGHT); AddAnchor(IDC_BUTTON3, TOP_RIGHT); AddAnchor(IDC_BUTTON4, TOP_RIGHT); AddAnchor(IDOK, BOTTOM_RIGHT); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CFavoriteOrganizeDlg::OnTcnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult) { SetupList(false); m_list.SetWindowPos(&wndTop, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE); *pResult = 0; } void CFavoriteOrganizeDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct) { if(nIDCtl != IDC_LIST2) return; int nItem = lpDrawItemStruct->itemID; CRect rcItem = lpDrawItemStruct->rcItem; CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC); if(!!m_list.GetItemState(nItem, LVIS_SELECTED)) { FillRect(pDC->m_hDC, rcItem, CBrush(0xf1dacc)); FrameRect(pDC->m_hDC, rcItem, CBrush(0xc56a31)); } else { CBrush b; b.CreateSysColorBrush(COLOR_WINDOW); FillRect(pDC->m_hDC, rcItem, b); } CString str = m_list.GetItemText(nItem, 0); pDC->SetTextColor(0); pDC->TextOut(rcItem.left+3, (rcItem.top+rcItem.bottom - pDC->GetTextExtent(str).cy)/2, str); } void CFavoriteOrganizeDlg::OnBnClickedButton1() { if(POSITION pos = m_list.GetFirstSelectedItemPosition()) { m_list.SetFocus(); m_list.EditLabel(m_list.GetNextSelectedItem(pos)); } } void CFavoriteOrganizeDlg::OnLvnEndlabeleditList2(NMHDR* pNMHDR, LRESULT* pResult) { NMLVDISPINFO* pDispInfo = reinterpret_cast(pNMHDR); if(pDispInfo->item.iItem >= 0 && pDispInfo->item.pszText) m_list.SetItemText(pDispInfo->item.iItem, 0, pDispInfo->item.pszText); *pResult = 0; } void CFavoriteOrganizeDlg::OnBnClickedButton2() { if(POSITION pos = m_list.GetFirstSelectedItemPosition()) { int nItem = m_list.GetNextSelectedItem(pos); if(nItem < 0 || nItem >= m_list.GetItemCount()) return; m_list.DeleteItem(nItem); nItem = min(nItem, m_list.GetItemCount()-1); m_list.SetSelectionMark(nItem); m_list.SetItemState(nItem, LVIS_SELECTED, LVIS_SELECTED); } } void CFavoriteOrganizeDlg::OnBnClickedButton3() { if(POSITION pos = m_list.GetFirstSelectedItemPosition()) { int nItem = m_list.GetNextSelectedItem(pos); if(nItem <= 0) return; DWORD_PTR data = m_list.GetItemData(nItem); CString str = m_list.GetItemText(nItem, 0); m_list.DeleteItem(nItem); nItem--; m_list.InsertItem(nItem, str); m_list.SetItemData(nItem, data); m_list.SetSelectionMark(nItem); m_list.SetItemState(nItem, LVIS_SELECTED, LVIS_SELECTED); } } void CFavoriteOrganizeDlg::OnBnClickedButton7() { if(POSITION pos = m_list.GetFirstSelectedItemPosition()) { int nItem = m_list.GetNextSelectedItem(pos); if(nItem < 0 || nItem >= m_list.GetItemCount()-1) return; DWORD_PTR data = m_list.GetItemData(nItem); CString str = m_list.GetItemText(nItem, 0); m_list.DeleteItem(nItem); nItem++; m_list.InsertItem(nItem, str); m_list.SetItemData(nItem, data); m_list.SetSelectionMark(nItem); m_list.SetItemState(nItem, LVIS_SELECTED, LVIS_SELECTED); } } void CFavoriteOrganizeDlg::OnTcnSelchangingTab1(NMHDR *pNMHDR, LRESULT *pResult) { SetupList(true); *pResult = 0; } void CFavoriteOrganizeDlg::OnBnClickedOk() { SetupList(true); AfxGetAppSettings().SetFav(FAV_FILE, m_sl[0]); AfxGetAppSettings().SetFav(FAV_DVD, m_sl[1]); AfxGetAppSettings().SetFav(FAV_DEVICE, m_sl[2]); OnOK(); } void CFavoriteOrganizeDlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized) { __super::OnActivate(nState, pWndOther, bMinimized); if(nState == WA_ACTIVE) m_list.SetWindowPos(&wndTop, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE); } void CFavoriteOrganizeDlg::OnSize(UINT nType, int cx, int cy) { __super::OnSize(nType, cx, cy); if(IsWindow(m_list)) m_list.SetColumnWidth(0, LVSCW_AUTOSIZE_USEHEADER); }