- Main Page
- Namespaces
- Classes
- Files
- Directories

- File List
- File Members

# PnSPresetsDlg.cpp

    00001 /*
    00002  *      Copyright (C) 2003-2005 Gabest
    00003  *      http://www.gabest.org
    00004  *
    00005  *  This Program is free software; you can redistribute it and/or modify
    00006  *  it under the terms of the GNU General Public License as published by
    00007  *  the Free Software Foundation; either version 2, or (at your option)
    00008  *  any later version.
    00009  *
    00010  *  This Program is distributed in the hope that it will be useful,
    00011  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
    00012  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    00013  *  GNU General Public License for more details.
    00014  *
    00015  *  You should have received a copy of the GNU General Public License
    00016  *  along with GNU Make; see the file COPYING.  If not, write to
    00017  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
    00018  *  http://www.gnu.org/copyleft/gpl.html
    00019  *
    00020  */
    00021
    00022 // PnSPresetsDlg.cpp : implementation file
    00023 //
    00024
    00025 #include "stdafx.h"
    00026 #include "mplayerc.h"
    00027 #include "PnSPresetsDlg.h"
    00028
    00029
    00030 // CPnSPresetsDlg dialog
    00031
    00032 IMPLEMENT_DYNAMIC(CPnSPresetsDlg, CCmdUIDialog)
    00033 CPnSPresetsDlg::CPnSPresetsDlg(CWnd* pParent /*=NULL*/)
    00034         : CCmdUIDialog(CPnSPresetsDlg::IDD, pParent)
    00035         , m_label(_T(""))
    00036 {
    00037 }
    00038
    00039 CPnSPresetsDlg::~CPnSPresetsDlg()
    00040 {
    00041 }
    00042
    00043 void CPnSPresetsDlg::DoDataExchange(CDataExchange* pDX)
    00044 {
    00045         __super::DoDataExchange(pDX);
    00046         DDX_Control(pDX, IDC_EDIT2, m_PosX);
    00047         DDX_Control(pDX, IDC_EDIT3, m_PosY);
    00048         DDX_Control(pDX, IDC_EDIT4, m_ZoomX);
    00049         DDX_Control(pDX, IDC_EDIT5, m_ZoomY);
    00050         DDX_Text(pDX, IDC_EDIT1, m_label);
    00051         DDX_Control(pDX, IDC_LIST1, m_list);
    00052 }
    00053
    00054 BOOL CPnSPresetsDlg::OnInitDialog()
    00055 {
    00056         __super::OnInitDialog();
    00057
    00058         for(int i = 0, j = m_pnspresets.GetCount(); i < j; i++)
    00059         {
    00060                 CString label;
    00061                 double PosX, PosY, ZoomX, ZoomY;
    00062                 StringToParams(m_pnspresets[i], label, PosX, PosY, ZoomX, ZoomY);
    00063
    00064                 m_list.AddString(label);
    00065
    00066                 if(i == 0)
    00067                 {
    00068                         m_list.SetCurSel(0);
    00069                         OnLbnSelchangeList1();
    00070                 }
    00071         }
    00072
    00073         return TRUE;  // return TRUE unless you set the focus to a control
    00074         // EXCEPTION: OCX Property Pages should return FALSE
    00075 }
    00076
    00077
    00078 void CPnSPresetsDlg::StringToParams(CString str, CString& label, double& PosX, double& PosY, double& ZoomX, double& ZoomY)
    00079 {
    00080         int i = 0, j = 0;
    00081
    00082         for(CString token = str.Tokenize(_T(","), i); !token.IsEmpty(); token = str.Tokenize(_T(","), i), j++)
    00083         {
    00084                 if(j == 0)
    00085                 {
    00086                         label = token;
    00087                 }
    00088                 else
    00089                 {
    00090                         float f = 0;
    00091                         if(_stscanf(token, _T("%f"), &f) != 1) continue;
    00092
    00093                         switch(j)
    00094                         {
    00095                         case 1: PosX = f; break;
    00096                         case 2: PosY = f; break;
    00097                         case 3: ZoomX = f; break;
    00098                         case 4: ZoomY = f; break;
    00099                         default: break;
    00100                         }
    00101                 }
    00102         }
    00103 }
    00104
    00105 CString CPnSPresetsDlg::ParamsToString(CString label, double PosX, double PosY, double ZoomX, double ZoomY)
    00106 {
    00107         CString str;
    00108         str.Format(_T("%s,%.3f,%.3f,%.3f,%.3f"), label, PosX, PosY, ZoomX, ZoomY);
    00109         return(str);
    00110 }
    00111
    00112 BEGIN_MESSAGE_MAP(CPnSPresetsDlg, CCmdUIDialog)
    00113         ON_LBN_SELCHANGE(IDC_LIST1, OnLbnSelchangeList1)
    00114         ON_BN_CLICKED(IDC_BUTTON2, OnBnClickedButton2)
    00115         ON_UPDATE_COMMAND_UI(IDC_BUTTON2, OnUpdateButton2)
    00116         ON_BN_CLICKED(IDC_BUTTON6, OnBnClickedButton6)
    00117         ON_UPDATE_COMMAND_UI(IDC_BUTTON6, OnUpdateButton6)
    00118         ON_BN_CLICKED(IDC_BUTTON9, OnBnClickedButton9)
    00119         ON_UPDATE_COMMAND_UI(IDC_BUTTON9, OnUpdateButton9)
    00120         ON_BN_CLICKED(IDC_BUTTON10, OnBnClickedButton10)
    00121         ON_UPDATE_COMMAND_UI(IDC_BUTTON10, OnUpdateButton10)
    00122         ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1)
    00123         ON_UPDATE_COMMAND_UI(IDC_BUTTON1, OnUpdateButton1)
    00124 END_MESSAGE_MAP()
    00125
    00126
    00127 // CPnSPresetsDlg message handlers
    00128 void CPnSPresetsDlg::OnLbnSelchangeList1()
    00129 {
    00130         int i = m_list.GetCurSel();
    00131         if(i >= 0 && i < m_pnspresets.GetCount())
    00132         {
    00133                 double PosX, PosY, ZoomX, ZoomY;
    00134                 StringToParams(m_pnspresets[i], m_label, PosX, PosY, ZoomX, ZoomY);
    00135                 m_PosX = PosX; m_PosY = PosY;
    00136                 m_ZoomX = ZoomX; m_ZoomY = ZoomY;
    00137         }
    00138         else
    00139         {
    00140                 m_label.Empty();
    00141                 m_PosX.SetWindowText(_T(""));
    00142                 m_PosY.SetWindowText(_T(""));
    00143                 m_ZoomX.SetWindowText(_T(""));
    00144                 m_ZoomY.SetWindowText(_T(""));
    00145         }
    00146
    00147         UpdateData(FALSE);
    00148 }
    00149
    00150 void CPnSPresetsDlg::OnBnClickedButton2() // new
    00151 {
    00152         m_pnspresets.Add(_T("New,0.5,0.5,1.0,1.0"));
    00153         m_list.SetCurSel(m_list.AddString(_T("New")));
    00154         OnLbnSelchangeList1();
    00155 }
    00156
    00157 void CPnSPresetsDlg::OnUpdateButton2(CCmdUI* pCmdUI)
    00158 {
    00159         CString str;
    00160         int len = m_list.GetCount();
    00161         if(len > 0) m_list.GetText(len-1, str);
    00162         pCmdUI->Enable(str != _T("New"));
    00163 }
    00164
    00165 void CPnSPresetsDlg::OnBnClickedButton6() // del
    00166 {
    00167         int i = m_list.GetCurSel();
    00168         m_list.DeleteString(i);
    00169         m_pnspresets.RemoveAt(i);
    00170         if(i ==  m_list.GetCount()) i--;
    00171         m_list.SetCurSel(i);
    00172         OnLbnSelchangeList1();
    00173 }
    00174
    00175 void CPnSPresetsDlg::OnUpdateButton6(CCmdUI* pCmdUI)
    00176 {
    00177         pCmdUI->Enable(m_list.GetCurSel() >= 0);
    00178 }
    00179
    00180 void CPnSPresetsDlg::OnBnClickedButton9() // up
    00181 {
    00182         int i = m_list.GetCurSel();
    00183         CString str, str2;
    00184         m_list.GetText(i, str);
    00185         str2 = m_pnspresets.GetAt(i);
    00186         m_list.DeleteString(i);
    00187         m_pnspresets.RemoveAt(i);
    00188         i--;
    00189         m_list.InsertString(i, str);
    00190         m_pnspresets.InsertAt(i, str2);
    00191         m_list.SetCurSel(i);
    00192 }
    00193
    00194 void CPnSPresetsDlg::OnUpdateButton9(CCmdUI* pCmdUI)
    00195 {
    00196         pCmdUI->Enable(m_list.GetCurSel() > 0 && m_list.GetCurSel() < m_list.GetCount());
    00197 }
    00198
    00199 void CPnSPresetsDlg::OnBnClickedButton10() // down
    00200 {
    00201         int i = m_list.GetCurSel();
    00202         CString str, str2;
    00203         m_list.GetText(i, str);
    00204         str2 = m_pnspresets.GetAt(i);
    00205         m_list.DeleteString(i);
    00206         m_pnspresets.RemoveAt(i);
    00207         i++;
    00208         m_list.InsertString(i, str);
    00209         m_pnspresets.InsertAt(i, str2);
    00210         m_list.SetCurSel(i);
    00211 }
    00212
    00213 void CPnSPresetsDlg::OnUpdateButton10(CCmdUI* pCmdUI)
    00214 {
    00215         pCmdUI->Enable(m_list.GetCurSel() >= 0 && m_list.GetCurSel() < m_list.GetCount()-1);
    00216 }
    00217
    00218 void CPnSPresetsDlg::OnBnClickedButton1() // set
    00219 {
    00220         int i = m_list.GetCurSel();
    00221         UpdateData();
    00222         if(m_label.Remove(',') > 0)
    00223                 UpdateData(FALSE);
    00224         m_pnspresets[i] = ParamsToString(m_label, m_PosX, m_PosY, m_ZoomX, m_ZoomY);
    00225         m_list.DeleteString(i);
    00226         m_list.InsertString(i, m_label);
    00227         m_list.SetCurSel(i);
    00228 }
    00229
    00230 void CPnSPresetsDlg::OnUpdateButton1(CCmdUI* pCmdUI)
    00231 {
    00232         UpdateData();
    00233         pCmdUI->Enable(m_list.GetCurSel() >= 0
    00234                 && !m_label.IsEmpty() && m_label.Find(',') < 0
    00235                 && m_PosX >= 0 && m_PosX <= 1
    00236                 && m_PosY >= 0 && m_PosY <= 1
    00237                 && m_ZoomX >= 0.2 && m_ZoomX <= 3.0
    00238                 && m_ZoomY >= 0.2 && m_ZoomY <= 3.0);
    00239 }
    00240
    00241 void CPnSPresetsDlg::OnOK()
    00242 {
    00243         if(m_list.GetCurSel() >= 0)
    00244                 OnBnClickedButton1();
    00245
    00246         __super::OnOK();
    00247 }