XvidQuantsParserDlg.cpp
上传用户:tuheem
上传日期:2007-05-01
资源大小:21889k
文件大小:14k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. // XvidQuantsParserDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "XvidQuantsParser.h"
  5. #include "XvidQuantsParserDlg.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CAboutDlg dialog used for App About
  13. class CAboutDlg : public CDialog
  14. {
  15. public:
  16. CAboutDlg();
  17. // Dialog Data
  18. //{{AFX_DATA(CAboutDlg)
  19. enum { IDD = IDD_ABOUTBOX };
  20. CString m_notes;
  21. //}}AFX_DATA
  22. // ClassWizard generated virtual function overrides
  23. //{{AFX_VIRTUAL(CAboutDlg)
  24. protected:
  25. virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  26. //}}AFX_VIRTUAL
  27. // Implementation
  28. protected:
  29. //{{AFX_MSG(CAboutDlg)
  30. virtual BOOL OnInitDialog();
  31. //}}AFX_MSG
  32. DECLARE_MESSAGE_MAP()
  33. };
  34. CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
  35. {
  36. //{{AFX_DATA_INIT(CAboutDlg)
  37. m_notes = _T("");
  38. //}}AFX_DATA_INIT
  39. }
  40. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  41. {
  42. CDialog::DoDataExchange(pDX);
  43. //{{AFX_DATA_MAP(CAboutDlg)
  44. DDX_Text(pDX, IDC_EDIT_NOTES, m_notes);
  45. //}}AFX_DATA_MAP
  46. }
  47. BOOL CAboutDlg::OnInitDialog() 
  48. {
  49. CDialog::OnInitDialog();
  50. // Notes Begin -------------------------------------------------------------
  51. m_notes +="Supported builds:rn";
  52. m_notes +="--------------------------------------------------------------------------------rn";
  53. m_notes +="Koepi'st04/10/2002;rn";
  54. m_notes +="Nic'st09/09/2002;rn";
  55. // Notes End ---------------------------------------------------------------
  56. UpdateData(FALSE);
  57. return TRUE;  // return TRUE unless you set the focus to a control
  58.               // EXCEPTION: OCX Property Pages should return FALSE
  59. }
  60. BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
  61. //{{AFX_MSG_MAP(CAboutDlg)
  62. //}}AFX_MSG_MAP
  63. END_MESSAGE_MAP()
  64. /////////////////////////////////////////////////////////////////////////////
  65. // CXvidQuantsParserDlg dialog
  66. CXvidQuantsParserDlg::CXvidQuantsParserDlg(CWnd* pParent /*=NULL*/)
  67. : CDialog(CXvidQuantsParserDlg::IDD, pParent)
  68. {
  69. //{{AFX_DATA_INIT(CXvidQuantsParserDlg)
  70. m_rate = 0.0f;
  71. m_height = 0;
  72. m_width = 0;
  73. m_nframes = 0;
  74. m_qmax = 0;
  75. m_qmin = 0;
  76. m_qavg = 0.0f;
  77. m_logging = false;
  78. m_len = 0;
  79. m_start = 0;
  80. m_stop = 0;
  81. m_maxfs = 0;
  82. m_minfs = 0;
  83. //}}AFX_DATA_INIT
  84. // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
  85. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  86. }
  87. void CXvidQuantsParserDlg::DoDataExchange(CDataExchange* pDX)
  88. {
  89. CDialog::DoDataExchange(pDX);
  90. //{{AFX_DATA_MAP(CXvidQuantsParserDlg)
  91. DDX_Control(pDX, IDC_EDIT_STATUS, m_status);
  92. DDX_Control(pDX, IDC_PROGRESS_ANALYZE, m_progress);
  93. DDX_Text(pDX, IDC_EDIT_RATE, m_rate);
  94. DDX_Text(pDX, IDC_EDIT_HEIGHT, m_height);
  95. DDX_Text(pDX, IDC_EDIT_WIDTH, m_width);
  96. DDX_Text(pDX, IDC_EDIT_FRAMES, m_nframes);
  97. DDX_Text(pDX, IDC_EDIT_QMAX, m_qmax);
  98. DDX_Text(pDX, IDC_EDIT_QMIN, m_qmin);
  99. DDX_Text(pDX, IDC_EDIT_QAVG, m_qavg);
  100. DDX_Text(pDX, IDC_EDIT_LEN, m_len);
  101. DDX_Text(pDX, IDC_EDIT_START, m_start);
  102. DDX_Text(pDX, IDC_EDIT_STOP, m_stop);
  103. DDX_Text(pDX, IDC_EDIT_MAXFS, m_maxfs);
  104. DDX_Text(pDX, IDC_EDIT_MINFS, m_minfs);
  105. //}}AFX_DATA_MAP
  106. }
  107. BEGIN_MESSAGE_MAP(CXvidQuantsParserDlg, CDialog)
  108. //{{AFX_MSG_MAP(CXvidQuantsParserDlg)
  109. ON_WM_SYSCOMMAND()
  110. ON_WM_PAINT()
  111. ON_WM_QUERYDRAGICON()
  112. ON_COMMAND(MNU_FILE_OPEN, OnFileOpen)
  113. ON_COMMAND(MNU_FILE_CLOSE, OnFileClose)
  114. ON_COMMAND(MNU_FILE_QUIT, OnFileQuit)
  115. ON_COMMAND(MNU_FILE_ANALYZE, OnFileAnalyze)
  116. ON_COMMAND(MNU_HELP_ABOUT, OnHelpAbout)
  117. ON_COMMAND(MNU_FILE_SAVE, OnFileSave)
  118. ON_COMMAND(MNU_FILE_LOAD, OnFileLoad)
  119. ON_COMMAND(MNU_EDIT_OPTIONS, OnEditOptions)
  120. ON_COMMAND(MNU_VIEW_HISTOGRAM, OnViewHistogram)
  121. ON_COMMAND(MNU_VIEW_TIMELINE, OnViewTimeline)
  122. ON_COMMAND(MNU_EDIT_RANGE, OnEditRange)
  123. ON_COMMAND(MNU_VIEW_CRITICAL, OnViewCritical)
  124. //}}AFX_MSG_MAP
  125. END_MESSAGE_MAP()
  126. /////////////////////////////////////////////////////////////////////////////
  127. // CXvidQuantsParserDlg message handlers
  128. BOOL CXvidQuantsParserDlg::OnInitDialog()
  129. {
  130. CDialog::OnInitDialog();
  131. // Set the icon for this dialog
  132. SetIcon(m_hIcon, TRUE); // Set big icon
  133. SetIcon(m_hIcon, FALSE); // Set small icon
  134. hAccel = LoadAccelerators(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDR_ACCELERATOR_MAIN));
  135. m_status.ReplaceSel("Ready!");
  136. //Init menu items
  137. SetMenuInit();
  138. UpdateData(FALSE);
  139. return TRUE;  // return TRUE  unless you set the focus to a control
  140. }
  141. void CXvidQuantsParserDlg::OnSysCommand(UINT nID, LPARAM lParam)
  142. {
  143. if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  144. {
  145. CAboutDlg dlgAbout;
  146. dlgAbout.DoModal();
  147. }
  148. else
  149. {
  150. CDialog::OnSysCommand(nID, lParam);
  151. }
  152. }
  153. // If you add a minimize button to your dialog, you will need the code below
  154. //  to draw the icon.  For MFC applications using the document/view model,
  155. //  this is automatically done for you by the framework.
  156. void CXvidQuantsParserDlg::OnPaint() 
  157. {
  158. if (IsIconic())
  159. {
  160. CPaintDC dc(this); // device context for painting
  161. SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  162. // Center icon in client rectangle
  163. int cxIcon = GetSystemMetrics(SM_CXICON);
  164. int cyIcon = GetSystemMetrics(SM_CYICON);
  165. CRect rect;
  166. GetClientRect(&rect);
  167. int x = (rect.Width() - cxIcon + 1) / 2;
  168. int y = (rect.Height() - cyIcon + 1) / 2;
  169. // Draw the icon
  170. dc.DrawIcon(x, y, m_hIcon);
  171. }
  172. else
  173. {
  174. CDialog::OnPaint();
  175. }
  176. }
  177. // The system calls this to obtain the cursor to display while the user drags
  178. //  the minimized window.
  179. HCURSOR CXvidQuantsParserDlg::OnQueryDragIcon()
  180. {
  181. return (HCURSOR) m_hIcon;
  182. }
  183. //---------------------------------------------------------------------------------------------
  184. BOOL CXvidQuantsParserDlg::PreTranslateMessage(MSG* pMsg) 
  185. {
  186. if (!TranslateAccelerator(this->m_hWnd ,hAccel,pMsg))
  187. return CDialog::PreTranslateMessage(pMsg);
  188. else
  189. return TRUE;
  190. }
  191. //---------------------------------------------------------------------------------------------
  192. void CXvidQuantsParserDlg::OnFileOpen() 
  193. {
  194. CFileDialog* filedialog;
  195. CString filetypes;
  196. filetypes = "Xvid AVI (*.avi)|*.avi||";
  197. filedialog = new CFileDialog(TRUE, NULL, NULL, OFN_HIDEREADONLY , (LPCTSTR)filetypes, this);
  198. filedialog->m_ofn.lpstrTitle = "Xvid AVI File";
  199. if (IDOK == filedialog->DoModal())
  200. {
  201. OnFileClose();
  202. if (!m_xvid.Open(filedialog->GetPathName()))
  203. {
  204. m_rate = m_xvid.GetRate();
  205. m_width = m_xvid.GetWidth();
  206. m_height = m_xvid.GetHeight();
  207. m_nframes = m_xvid.GetFrameCount();
  208. m_start = 0;
  209. m_stop = m_nframes;
  210. m_len = m_nframes;
  211. SetMenuOpened();
  212. UpdateData(FALSE);
  213. }
  214. else
  215. {
  216. AfxMessageBox("Error loading Xvid AVI");
  217. }
  218. }
  219. delete filedialog;
  220. }
  221. //---------------------------------------------------------------------------------------------
  222. void CXvidQuantsParserDlg::OnFileClose() 
  223. {
  224. if (m_xvid.IsOpened())
  225. {
  226. m_xvid.Close();
  227. m_width = 0;
  228. m_height = 0;
  229. m_nframes = 0;
  230. m_rate = 0;
  231. m_qmin = 0;
  232. m_qmax = 0;
  233. m_qavg = 0;
  234. m_start = 0;
  235. m_stop = 0;
  236. m_len = 0;
  237. m_maxfs = 0;
  238. m_minfs = 0;
  239. m_progress.SetPos(0);
  240. m_status.SetSel(0, m_status.LineLength());
  241. m_status.ReplaceSel("Ready!");
  242. SetMenuInit();
  243. UpdateData(FALSE);
  244. }
  245. }
  246. //---------------------------------------------------------------------------------------------
  247. void CXvidQuantsParserDlg::OnFileAnalyze() 
  248. {
  249. if (m_xvid.IsOpened())
  250. {
  251. m_xvid.Analyze(m_progress, m_status, m_logging, m_start, m_stop);
  252. m_qmax = m_xvid.GetMaxQuant();
  253. m_qmin = m_xvid.GetMinQuant();
  254. m_qavg = m_xvid.GetAvgQuants();
  255. m_maxfs = m_xvid.GetMaxFrameSize();
  256. m_minfs = m_xvid.GetMinFrameSize();
  257. SetMenuAnalysed();
  258. UpdateData(FALSE);
  259. }
  260. else
  261. {
  262. AfxMessageBox("No XviD File Opened!");
  263. }
  264. }
  265. //---------------------------------------------------------------------------------------------
  266. void CXvidQuantsParserDlg::OnFileSave() 
  267. {
  268. CReportFile report;
  269. CFileDialog* filedialog;
  270. CString filetypes;
  271. CString ext;
  272. filetypes = "XviD Quants Parser Report (*.xqr)|*.xqr||";
  273. filedialog = new CFileDialog(FALSE, NULL, NULL, OFN_HIDEREADONLY , (LPCTSTR)filetypes, this);
  274. filedialog->m_ofn.lpstrTitle = "XviD Quants Parser Report";
  275. if (m_xvid.IsAnalysed())
  276. {
  277. if (IDOK == filedialog->DoModal())
  278. {
  279. ext = filedialog->GetFileExt();
  280. if (ext != "") //Wrote extension
  281. {
  282. if (!report.Save(filedialog->GetPathName(), m_xvid, m_start, m_stop))
  283. {
  284. AfxMessageBox("Error saving report!");
  285. }
  286. }
  287. else //No extension (add it)
  288. {
  289. if (!report.Save(filedialog->GetPathName() + ".xqr", m_xvid, m_start, m_stop))
  290. {
  291. AfxMessageBox("Error saving report!");
  292. }
  293. }
  294. }
  295. }
  296. else
  297. {
  298. AfxMessageBox("Xvid AVI not analysed yet!");
  299. }
  300. delete filedialog;
  301. }
  302. //---------------------------------------------------------------------------------------------
  303. void CXvidQuantsParserDlg::OnFileLoad() 
  304. {
  305. CReportFile report;
  306. CFileDialog* filedialog;
  307. CString filetypes;
  308. filetypes = "XviD Quants Parser Report (*.xqr)|*.xqr||";
  309. filedialog = new CFileDialog(TRUE, NULL, NULL, OFN_HIDEREADONLY , (LPCTSTR)filetypes, this);
  310. filedialog->m_ofn.lpstrTitle = "XviD Quants Parser Report";
  311. if (IDOK == filedialog->DoModal())
  312. {
  313. if (!report.Load(filedialog->GetPathName(), m_xvid))
  314. {
  315. AfxMessageBox("Error loading report!");
  316. }
  317. else
  318. {
  319. m_rate = m_xvid.GetRate();
  320. m_width = m_xvid.GetWidth();
  321. m_height = m_xvid.GetHeight();
  322. m_nframes = m_xvid.GetFrameCount();
  323. m_qmax = m_xvid.GetMaxQuant();
  324. m_qmin = m_xvid.GetMinQuant();
  325. m_qavg = m_xvid.GetAvgQuants();
  326. m_start = 0;
  327. m_stop = m_nframes;
  328. m_len = m_nframes;
  329. m_maxfs = m_xvid.GetMaxFrameSize();
  330. m_minfs = m_xvid.GetMinFrameSize();
  331. SetMenuAnalysed();
  332. //Options/Views not available when loading from report
  333. EnableMenuItem(*GetMenu(), MNU_FILE_ANALYZE, MF_GRAYED);
  334. EnableMenuItem(*GetMenu(), MNU_EDIT_RANGE, MF_GRAYED);
  335. UpdateData(FALSE);
  336. }
  337. }
  338. delete filedialog;
  339. }
  340. //---------------------------------------------------------------------------------------------
  341. void CXvidQuantsParserDlg::OnFileQuit() 
  342. {
  343. OnOK();
  344. }
  345. //---------------------------------------------------------------------------------------------
  346. void CXvidQuantsParserDlg::OnEditOptions() 
  347. {
  348. if (GetMenuState(*GetMenu(), MNU_EDIT_OPTIONS, MF_BYCOMMAND) == MF_CHECKED)
  349. {
  350. CheckMenuItem(*GetMenu(), MNU_EDIT_OPTIONS, MF_UNCHECKED);
  351. m_logging=false;
  352. }
  353. else
  354. {
  355. CheckMenuItem(*GetMenu(), MNU_EDIT_OPTIONS, MF_CHECKED);
  356. m_logging=true;
  357. }
  358. }
  359. //---------------------------------------------------------------------------------------------
  360. void CXvidQuantsParserDlg::OnEditRange() 
  361. {
  362. CRangeDlg m_range;
  363. m_range.SetStart(m_start);
  364. m_range.SetEnd(m_stop);
  365. m_range.SetFrameCount(m_nframes);
  366. if (IDOK == m_range.DoModal())
  367. {
  368. m_start = m_range.GetStart();
  369. m_stop  = m_range.GetEnd();
  370. m_len = m_stop - m_start;
  371. UpdateData(FALSE);
  372. }
  373. }
  374. //---------------------------------------------------------------------------------------------
  375. void CXvidQuantsParserDlg::OnViewHistogram() 
  376. {
  377. CDistributionDlg distdlg;
  378. if (m_xvid.IsAnalysed())
  379. {
  380. distdlg.Init(m_xvid, m_xvid.GetQuantsArray(), m_len);
  381. distdlg.DoModal();
  382. }
  383. else
  384. {
  385. AfxMessageBox("Xvid AVI not analysed yet!");
  386. }
  387. }
  388. //---------------------------------------------------------------------------------------------
  389. void CXvidQuantsParserDlg::OnViewTimeline() 
  390. {
  391. CTimelineDlg timedlg;
  392. if (m_xvid.IsAnalysed())
  393. {
  394. timedlg.Init(m_xvid.GetQuantsArray(), m_len, m_xvid.GetMaxQuant(), m_xvid.GetMaxFrameSize());
  395. timedlg.DoModal();
  396. }
  397. else
  398. {
  399. AfxMessageBox("Xvid AVI not analysed yet!");
  400. }
  401. }
  402. //---------------------------------------------------------------------------------------------
  403. void CXvidQuantsParserDlg::OnViewCritical() 
  404. {
  405. CCriticalDlg criticDlg;
  406. criticDlg.Init(m_xvid.GetQuantsArray(), m_len);
  407. criticDlg.DoModal();
  408. }
  409. //---------------------------------------------------------------------------------------------
  410. void CXvidQuantsParserDlg::OnHelpAbout() 
  411. {
  412. CAboutDlg about;
  413. about.DoModal();
  414. }
  415. // Utils --------------------------------------------------------------------------------------
  416. void CXvidQuantsParserDlg::SetMenuInit(void)
  417. {
  418. //Enabled
  419. EnableMenuItem(*GetMenu(), MNU_FILE_OPEN, MF_ENABLED);
  420. EnableMenuItem(*GetMenu(), MNU_FILE_LOAD, MF_ENABLED);
  421. //Disabled
  422. EnableMenuItem(*GetMenu(), MNU_FILE_CLOSE, MF_GRAYED);
  423. EnableMenuItem(*GetMenu(), MNU_FILE_ANALYZE, MF_GRAYED);
  424. EnableMenuItem(*GetMenu(), MNU_FILE_SAVE, MF_GRAYED);
  425. EnableMenuItem(*GetMenu(), MNU_EDIT_RANGE, MF_GRAYED);
  426. EnableMenuItem(*GetMenu(), MNU_VIEW_HISTOGRAM, MF_GRAYED);
  427. EnableMenuItem(*GetMenu(), MNU_VIEW_TIMELINE, MF_GRAYED);
  428. EnableMenuItem(*GetMenu(), MNU_VIEW_CRITICAL, MF_GRAYED);
  429. }
  430. //---------------------------------------------------------------------------------------------
  431. void CXvidQuantsParserDlg::SetMenuOpened(void)
  432. {
  433. //Enabled
  434. EnableMenuItem(*GetMenu(), MNU_FILE_OPEN, MF_ENABLED);
  435. EnableMenuItem(*GetMenu(), MNU_FILE_CLOSE, MF_ENABLED);
  436. EnableMenuItem(*GetMenu(), MNU_FILE_ANALYZE, MF_ENABLED);
  437. EnableMenuItem(*GetMenu(), MNU_FILE_LOAD, MF_ENABLED);
  438. EnableMenuItem(*GetMenu(), MNU_EDIT_RANGE, MF_ENABLED);
  439. //Disabled
  440. EnableMenuItem(*GetMenu(), MNU_FILE_SAVE, MF_GRAYED);
  441. EnableMenuItem(*GetMenu(), MNU_VIEW_HISTOGRAM, MF_GRAYED);
  442. EnableMenuItem(*GetMenu(), MNU_VIEW_TIMELINE, MF_GRAYED);
  443. EnableMenuItem(*GetMenu(), MNU_VIEW_CRITICAL, MF_GRAYED);
  444. }
  445. //---------------------------------------------------------------------------------------------
  446. void CXvidQuantsParserDlg::SetMenuAnalysed(void)
  447. {
  448. //All Enabled
  449. EnableMenuItem(*GetMenu(), MNU_FILE_OPEN, MF_ENABLED);
  450. EnableMenuItem(*GetMenu(), MNU_FILE_CLOSE, MF_ENABLED);
  451. EnableMenuItem(*GetMenu(), MNU_FILE_ANALYZE, MF_ENABLED);
  452. EnableMenuItem(*GetMenu(), MNU_FILE_SAVE, MF_ENABLED);
  453. EnableMenuItem(*GetMenu(), MNU_FILE_LOAD, MF_ENABLED);
  454. EnableMenuItem(*GetMenu(), MNU_EDIT_RANGE, MF_ENABLED);
  455. EnableMenuItem(*GetMenu(), MNU_VIEW_HISTOGRAM, MF_ENABLED);
  456. EnableMenuItem(*GetMenu(), MNU_VIEW_TIMELINE, MF_ENABLED);
  457. EnableMenuItem(*GetMenu(), MNU_VIEW_CRITICAL, MF_ENABLED);
  458. }