home *** CD-ROM | disk | FTP | other *** search
/ Mastering MFC Development / MMD.ISO / labs / c07 / lab02 / ex04 / diffdoc.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1997-02-20  |  2.8 KB  |  139 lines

  1. // diffDoc.cpp : implementation of the CDiffDoc class
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "diff.h"
  6.  
  7. #include "diffDoc.h"
  8. #include "diffview.h"
  9.  
  10. #include "splitter.h"
  11. #include "mainfrm.h"
  12.  
  13. #ifdef _DEBUG
  14. #undef THIS_FILE
  15. static char THIS_FILE[] = __FILE__;
  16. #endif
  17.  
  18. /////////////////////////////////////////////////////////////////////////////
  19. // CDiffDoc
  20.  
  21. IMPLEMENT_DYNCREATE(CDiffDoc, CRichEditDoc)
  22.  
  23. BEGIN_MESSAGE_MAP(CDiffDoc, CRichEditDoc)
  24.     //{{AFX_MSG_MAP(CDiffDoc)
  25.     ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
  26.     //}}AFX_MSG_MAP
  27. END_MESSAGE_MAP()
  28.  
  29. /////////////////////////////////////////////////////////////////////////////
  30. // CDiffDoc construction/destruction
  31.  
  32. CDiffDoc::CDiffDoc()
  33. {
  34.     m_File1 = "";
  35.     m_File2 = "";
  36.     m_bRTF    = FALSE;
  37. }
  38.  
  39. CDiffDoc::~CDiffDoc()
  40. {
  41. }
  42.  
  43. CRichEditCntrItem* CDiffDoc::CreateClientItem(REOBJECT* preo) const
  44. {
  45.         return new CRichEditCntrItem();
  46. }
  47.  
  48. BOOL CDiffDoc::OnNewDocument()
  49. {
  50.     if (!CRichEditDoc::OnNewDocument())
  51.         return FALSE;
  52.  
  53.     // TODO: add reinitialization code here
  54.     // (SDI documents will reuse this document)
  55.  
  56.     return TRUE;
  57. }
  58.  
  59. /////////////////////////////////////////////////////////////////////////////
  60. // CDiffDoc serialization
  61.  
  62. void CDiffDoc::Serialize(CArchive& ar)
  63. {
  64.     if (ar.IsStoring())
  65.     {
  66.         // TODO: add storing code here
  67.     }
  68.     else
  69.     {
  70.         // TODO: add loading code here
  71.     }
  72. }
  73.  
  74. /////////////////////////////////////////////////////////////////////////////
  75. // CDiffDoc diagnostics
  76.  
  77. #ifdef _DEBUG
  78. void CDiffDoc::AssertValid() const
  79. {
  80.     CRichEditDoc::AssertValid();
  81. }
  82.  
  83. void CDiffDoc::Dump(CDumpContext& dc) const
  84. {
  85.     CRichEditDoc::Dump(dc);
  86. }
  87. #endif //_DEBUG
  88.  
  89. /////////////////////////////////////////////////////////////////////////////
  90. // CDiffDoc commands
  91.  
  92. void CDiffDoc::OnFileOpen() 
  93. {
  94.     static char BASED_CODE szFilter[] =
  95.             "All Files (*.*)|*.*|C++ Files (*.cpp, *.h)" \
  96.             "|*.cpp;*.h||";
  97.  
  98.     CFileDialog dlg(TRUE,NULL,NULL,NULL,szFilter);
  99.  
  100.     if(dlg.DoModal() == IDOK)
  101.     {
  102.         m_File1 = m_File2 = dlg.GetPathName();
  103.     }
  104.     RunComparison (m_File1, m_File2);
  105. }
  106.  
  107.  
  108. void CDiffDoc::RunComparison (LPCSTR lpszFile1, LPCSTR lpszFile2)
  109. {
  110.     CMainFrame * pFrame    = CDiffApp::GetApp()->GetMainFrame();
  111.  
  112.     if(pFrame)
  113.     {
  114.         CSplitter * pSplitter = pFrame->GetSplitter();
  115.         if(pSplitter)
  116.         {
  117.             CDiffView * pView;
  118.             pView = (CDiffView *)pSplitter->GetPane(0,0);
  119.             if (pView)
  120.             {
  121.                 CFile file(lpszFile1, CFile::modeRead);
  122.                 CArchive ar(&file, CArchive::load);
  123.                 pView->Serialize(ar);
  124.             }
  125.  
  126.             pView = (CDiffView *)pSplitter->GetPane(0,1);
  127.             if (pView)
  128.             {
  129.                 CFile file(lpszFile2, CFile::modeRead);
  130.                 CArchive ar(&file, CArchive::load);
  131.                 pView->Serialize(ar);
  132.             }
  133.             //      Flag as clean so that we won't get
  134.             //      prompted to save
  135.             SetModifiedFlag(FALSE);
  136.         }
  137.     }
  138. }
  139.