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 <afxpriv.h>
00027 #include "VSRip.h"
00028 #include "VSRipDlg.h"
00029
00030 #ifdef _DEBUG
00031 #define new DEBUG_NEW
00032 #endif
00033
00034
00035
00036
00037 CVSRipDlg::CVSRipDlg(CWnd* pParent )
00038 : CDialog(CVSRipDlg::IDD, pParent)
00039 {
00040 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
00041 m_dlgpos = NULL;
00042
00043 m_pVSFRipper = new CVobSubFileRipper();
00044 }
00045
00046 CVSRipDlg::~CVSRipDlg()
00047 {
00048 m_pVSFRipper->SetCallBack(NULL);
00049 }
00050
00051 void CVSRipDlg::DoDataExchange(CDataExchange* pDX)
00052 {
00053 CDialog::DoDataExchange(pDX);
00054 DDX_Control(pDX, IDC_DLGRECT, m_dlgrect);
00055 DDX_Control(pDX, IDC_HEADERSEP, m_hdrline);
00056 DDX_Control(pDX, IDC_FOOTERSEP, m_ftrline);
00057 }
00058
00059 void CVSRipDlg::ShowNext()
00060 {
00061 POSITION prev = m_dlgpos;
00062 m_dlgpos = GetNext();
00063
00064 if(prev && prev != m_dlgpos)
00065 {
00066 m_dlgs.GetAt(prev)->OnNext();
00067 m_dlgs.GetAt(prev)->ShowWindow(SW_HIDE);
00068 }
00069
00070 if(m_dlgpos)
00071 {
00072 CVSRipPage* pDlg = m_dlgs.GetAt(m_dlgpos);
00073 CRect dr;
00074 m_dlgrect.GetClientRect(dr);
00075 m_dlgrect.MapWindowPoints(this, dr);
00076 pDlg->MoveWindow(dr);
00077 pDlg->ShowWindow(SW_SHOWNORMAL);
00078 Invalidate();
00079 }
00080 }
00081
00082 void CVSRipDlg::ShowPrev()
00083 {
00084 POSITION next = m_dlgpos;
00085 m_dlgpos = GetPrev();
00086
00087 if(next && next != m_dlgpos)
00088 {
00089 m_dlgs.GetAt(next)->OnPrev();
00090 m_dlgs.GetAt(next)->ShowWindow(SW_HIDE);
00091 }
00092
00093 if(m_dlgpos)
00094 {
00095 CVSRipPage* pDlg = m_dlgs.GetAt(m_dlgpos);
00096 CRect dr;
00097 m_dlgrect.GetClientRect(dr);
00098 m_dlgrect.MapWindowPoints(this, dr);
00099 pDlg->MoveWindow(dr);
00100 pDlg->ShowWindow(SW_SHOWNORMAL);
00101 Invalidate();
00102 }
00103 }
00104
00105 POSITION CVSRipDlg::GetNext()
00106 {
00107 POSITION pos = m_dlgpos;
00108 if(pos && m_dlgs.GetAt(pos)->CanGoNext()) m_dlgs.GetNext(pos);
00109 else if(pos && !m_dlgs.GetAt(pos)->CanGoNext()) pos = NULL;
00110 else pos = m_dlgs.GetHeadPosition();
00111 return(pos);
00112 }
00113
00114 POSITION CVSRipDlg::GetPrev()
00115 {
00116 POSITION pos = m_dlgpos;
00117 if(pos && m_dlgs.GetAt(pos)->CanGoPrev()) m_dlgs.GetPrev(pos);
00118 else if(pos && !m_dlgs.GetAt(pos)->CanGoPrev()) pos = NULL;
00119 else pos = m_dlgs.GetTailPosition();
00120 return(pos);
00121 }
00122
00123 BEGIN_MESSAGE_MAP(CVSRipDlg, CDialog)
00124 ON_WM_PAINT()
00125 ON_WM_QUERYDRAGICON()
00126 ON_MESSAGE_VOID(WM_KICKIDLE, OnKickIdle)
00127 ON_BN_CLICKED(IDC_BUTTON1, OnPrev)
00128 ON_UPDATE_COMMAND_UI(IDC_BUTTON1, OnUpdatePrev)
00129 ON_BN_CLICKED(IDC_BUTTON2, OnNext)
00130 ON_UPDATE_COMMAND_UI(IDC_BUTTON2, OnUpdateNext)
00131 ON_BN_CLICKED(IDCANCEL, OnClose)
00132 ON_UPDATE_COMMAND_UI(IDCANCEL, OnUpdateClose)
00133 END_MESSAGE_MAP()
00134
00135
00136
00137 BOOL CVSRipDlg::OnInitDialog()
00138 {
00139 CDialog::OnInitDialog();
00140
00141
00142
00143 SetIcon(m_hIcon, TRUE);
00144 SetIcon(m_hIcon, FALSE);
00145
00146 if(CMenu* pSysMenu = GetSystemMenu(FALSE))
00147 {
00148 pSysMenu->RemoveMenu(SC_SIZE, MF_BYCOMMAND);
00149 pSysMenu->RemoveMenu(SC_MAXIMIZE, MF_BYCOMMAND);
00150 }
00151
00152 CRect cr;
00153 GetClientRect(cr);
00154 CRect r;
00155 m_hdrline.GetClientRect(r);
00156 m_hdrline.MapWindowPoints(this, r);
00157 r.left = 0;
00158 r.right = cr.right;
00159 r.bottom+=2;
00160 m_hdrline.MoveWindow(r);
00161 m_ftrline.GetClientRect(r);
00162 m_ftrline.MapWindowPoints(this, r);
00163 r.left = 0;
00164 r.right = cr.right;
00165 r.bottom+=2;
00166 m_ftrline.MoveWindow(r);
00167
00168 m_pVSFRipper = new CVobSubFileRipper();
00169
00170 CAutoPtr<CVSRipPage> pPage;
00171
00172 pPage.Attach(new CVSRipFileDlg(m_pVSFRipper));
00173 pPage->Create(CVSRipFileDlg::IDD, this);
00174 m_dlgs.AddTail(pPage);
00175
00176 pPage.Attach(new CVSRipPGCDlg(m_pVSFRipper));
00177 pPage->Create(CVSRipPGCDlg::IDD, this);
00178 m_dlgs.AddTail(pPage);
00179
00180 pPage.Attach(new CVSRipIndexingDlg(m_pVSFRipper));
00181 pPage->Create(CVSRipIndexingDlg::IDD, this);
00182 m_dlgs.AddTail(pPage);
00183
00184 if(__argc > 1)
00185 {
00186 m_pVSFRipper->SetCallBack((IVSFRipperCallback*)m_dlgs.GetTail());
00187
00188 if(S_OK != m_pVSFRipper->LoadParamFile(CString(__targv[1])))
00189 {
00190 AfxMessageBox(_T("Error parsing parameter file!"), MB_OK);
00191 EndDialog(IDCANCEL);
00192 return FALSE;
00193 }
00194
00195 ShowPrev();
00196 }
00197 else
00198 {
00199 ShowNext();
00200 }
00201
00202 return TRUE;
00203 }
00204
00205
00206
00207
00208
00209 void CVSRipDlg::OnPaint()
00210 {
00211 if (IsIconic())
00212 {
00213 CPaintDC dc(this);
00214
00215 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
00216
00217
00218 int cxIcon = GetSystemMetrics(SM_CXICON);
00219 int cyIcon = GetSystemMetrics(SM_CYICON);
00220 CRect rect;
00221 GetClientRect(&rect);
00222 int x = (rect.Width() - cxIcon + 1) / 2;
00223 int y = (rect.Height() - cyIcon + 1) / 2;
00224
00225
00226 dc.DrawIcon(x, y, m_hIcon);
00227 }
00228 else
00229 {
00230 CPaintDC dc(this);
00231
00232 CWnd* pHdrSep = GetDlgItem(IDC_HEADERSEP);
00233 CRect r;
00234 m_hdrline.GetClientRect(r);
00235 m_hdrline.MapWindowPoints(this, r);
00236 CRect cr;
00237 GetClientRect(cr);
00238 dc.FillSolidRect(CRect(0,0,cr.right,r.top), 0xffffff);
00239
00240 if(m_dlgpos)
00241 {
00242 CVSRipPage* pWnd = m_dlgs.GetAt(m_dlgpos);
00243 CFont hdrfont, descfont;
00244 hdrfont.CreateFont(16,0,0,0,FW_BOLD,0,0,0,DEFAULT_CHARSET,
00245 OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,ANTIALIASED_QUALITY,DEFAULT_PITCH,
00246 _T("Times New Roman"));
00247 descfont.CreateFont(14,0,0,0,FW_NORMAL,0,0,0,DEFAULT_CHARSET,
00248 OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,ANTIALIASED_QUALITY,DEFAULT_PITCH,
00249 _T("Arial"));
00250 CFont* pOld = dc.SelectObject(&hdrfont);
00251 dc.DrawText(pWnd->GetHeaderText(), CRect(10,5,cr.right,r.top), DT_WORDBREAK);
00252 dc.SelectObject(&descfont);
00253 dc.DrawText(pWnd->GetDescText(), CRect(20,22,cr.right,r.top), DT_WORDBREAK);
00254 dc.SelectObject(pOld);
00255 }
00256
00257 CDialog::OnPaint();
00258 }
00259 }
00260
00261 void CVSRipDlg::OnKickIdle()
00262 {
00263 UpdateDialogControls(this, false);
00264
00265 for(CWnd* pChild = GetWindow(GW_CHILD); pChild; pChild = pChild->GetNextWindow())
00266 {
00267 if(pChild->IsKindOf(RUNTIME_CLASS(CVSRipPage)))
00268 pChild->UpdateDialogControls(pChild, false);
00269 }
00270 }
00271
00272
00273
00274 HCURSOR CVSRipDlg::OnQueryDragIcon()
00275 {
00276 return static_cast<HCURSOR>(m_hIcon);
00277 }
00278
00279 void CVSRipDlg::OnPrev()
00280 {
00281 ShowPrev();
00282 }
00283
00284 void CVSRipDlg::OnUpdatePrev(CCmdUI* pCmdUI)
00285 {
00286 if(m_dlgpos) pCmdUI->SetText(m_dlgs.GetAt(m_dlgpos)->GetPrevText());
00287 pCmdUI->Enable(!!GetPrev());
00288 }
00289
00290 void CVSRipDlg::OnNext()
00291 {
00292 ShowNext();
00293 }
00294
00295 void CVSRipDlg::OnUpdateNext(CCmdUI* pCmdUI)
00296 {
00297 if(m_dlgpos) pCmdUI->SetText(m_dlgs.GetAt(m_dlgpos)->GetNextText());
00298 pCmdUI->Enable(!!GetNext());
00299 }
00300
00301 void CVSRipDlg::OnClose()
00302 {
00303 if(m_dlgpos) m_dlgs.GetAt(m_dlgpos)->OnClose();
00304
00305 OnCancel();
00306 }
00307
00308 void CVSRipDlg::OnUpdateClose(CCmdUI* pCmdUI)
00309 {
00310 if(m_dlgpos) pCmdUI->SetText(m_dlgs.GetAt(m_dlgpos)->GetCloseText());
00311 pCmdUI->Enable(!m_dlgpos || m_dlgs.GetAt(m_dlgpos)->CanClose());
00312 }