home *** CD-ROM | disk | FTP | other *** search
/ Mastering Microsoft Visual C++ 4 (2nd Edition) / VisualC4.ISO / minidrw3 / miniddoc.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1995-11-30  |  3.7 KB  |  171 lines

  1. // MiniDDoc.cpp : implementation of the CMiniDrawDoc class
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "MiniDraw.h"
  6.  
  7. #include "MiniDDoc.h"
  8.  
  9. #ifdef _DEBUG
  10. #define new DEBUG_NEW
  11. #undef THIS_FILE
  12. static char THIS_FILE[] = __FILE__;
  13. #endif
  14.  
  15. /////////////////////////////////////////////////////////////////////////////
  16. // CMiniDrawDoc
  17.  
  18. IMPLEMENT_DYNCREATE(CMiniDrawDoc, CDocument)
  19.  
  20. BEGIN_MESSAGE_MAP(CMiniDrawDoc, CDocument)
  21.    //{{AFX_MSG_MAP(CMiniDrawDoc)
  22.    ON_COMMAND(ID_EDIT_CLEAR_ALL, OnEditClearAll)
  23.    ON_UPDATE_COMMAND_UI(ID_EDIT_CLEAR_ALL, OnUpdateEditClearAll)
  24.    ON_COMMAND(ID_EDIT_UNDO, OnEditUndo)
  25.    ON_UPDATE_COMMAND_UI(ID_EDIT_UNDO, OnUpdateEditUndo)
  26.    //}}AFX_MSG_MAP
  27. END_MESSAGE_MAP()
  28.  
  29. /////////////////////////////////////////////////////////////////////////////
  30. // CMiniDrawDoc construction/destruction
  31.  
  32. CMiniDrawDoc::CMiniDrawDoc()
  33. {
  34.    // TODO: add one-time construction code here
  35.  
  36. }
  37.  
  38. CMiniDrawDoc::~CMiniDrawDoc()
  39. {
  40. }
  41.  
  42. BOOL CMiniDrawDoc::OnNewDocument()
  43. {
  44.    if (!CDocument::OnNewDocument())
  45.       return FALSE;
  46.  
  47.    // TODO: add reinitialization code here
  48.    // (SDI documents will reuse this document)
  49.  
  50.    return TRUE;
  51. }
  52.  
  53. /////////////////////////////////////////////////////////////////////////////
  54. // CMiniDrawDoc serialization
  55.  
  56. void CMiniDrawDoc::Serialize(CArchive& ar)
  57. {
  58.    if (ar.IsStoring())
  59.    {
  60.       // TODO: add storing code here
  61.       m_LineArray.Serialize (ar);
  62.    }
  63.    else
  64.    {
  65.       // TODO: add loading code here
  66.       m_LineArray.Serialize (ar);
  67.    }
  68. }
  69.  
  70. /////////////////////////////////////////////////////////////////////////////
  71. // CMiniDrawDoc diagnostics
  72.  
  73. #ifdef _DEBUG
  74. void CMiniDrawDoc::AssertValid() const
  75. {
  76.    CDocument::AssertValid();
  77. }
  78.  
  79. void CMiniDrawDoc::Dump(CDumpContext& dc) const
  80. {
  81.    CDocument::Dump(dc);
  82. }
  83. #endif //_DEBUG
  84.  
  85. /////////////////////////////////////////////////////////////////////////////
  86. // CMiniDrawDoc commands
  87.  
  88. IMPLEMENT_SERIAL (CLine, CObject, 1)
  89.  
  90. void CLine::Draw (CDC *PDC)
  91.    {
  92.    PDC->MoveTo (m_X1, m_Y1);
  93.    PDC->LineTo (m_X2, m_Y2);
  94.    }
  95.  
  96. void CLine::Serialize (CArchive& ar)
  97.    {
  98.    if (ar.IsStoring())
  99.       ar << m_X1 << m_Y1 << m_X2 << m_Y2;
  100.    else
  101.       ar >> m_X1 >> m_Y1 >> m_X2 >> m_Y2;
  102.    }
  103.  
  104. void CMiniDrawDoc::AddLine (int X1, int Y1, int X2, int Y2)
  105.    {            
  106.    CLine *PLine = new CLine (X1, Y1, X2, Y2);
  107.    m_LineArray.Add (PLine);
  108.    SetModifiedFlag ();
  109.    }
  110.  
  111. CLine *CMiniDrawDoc::GetLine (int Index)
  112.    {
  113.    if (Index < 0 || Index > m_LineArray.GetUpperBound ())
  114.       return 0;
  115.    return m_LineArray.GetAt (Index);
  116.    }    
  117.    
  118. int CMiniDrawDoc::GetNumLines ()
  119.    {
  120.    return m_LineArray.GetSize ();
  121.    }
  122.  
  123. void CMiniDrawDoc::DeleteContents() 
  124. {
  125.    // TODO: Add your specialized code here and/or call the base class
  126.    
  127.    int Index = m_LineArray.GetSize ();
  128.    while (Index--)
  129.       delete m_LineArray.GetAt (Index);      
  130.    m_LineArray.RemoveAll ();      
  131.  
  132.    CDocument::DeleteContents();
  133. }
  134.  
  135. void CMiniDrawDoc::OnEditClearAll() 
  136. {
  137.    // TODO: Add your command handler code here
  138.  
  139.    DeleteContents ();
  140.    UpdateAllViews (0);
  141.    SetModifiedFlag ();
  142. }
  143.  
  144. void CMiniDrawDoc::OnUpdateEditClearAll(CCmdUI* pCmdUI) 
  145. {
  146.    // TODO: Add your command update UI handler code here
  147.  
  148.    pCmdUI->Enable (m_LineArray.GetSize ());  
  149. }
  150.  
  151. void CMiniDrawDoc::OnEditUndo() 
  152. {
  153.    // TODO: Add your command handler code here
  154.  
  155.    int Index = m_LineArray.GetUpperBound ();
  156.    if (Index > -1)
  157.       {
  158.       delete m_LineArray.GetAt (Index);
  159.       m_LineArray.RemoveAt (Index);
  160.       }
  161.    UpdateAllViews (0);
  162.    SetModifiedFlag ();   
  163. }
  164.  
  165. void CMiniDrawDoc::OnUpdateEditUndo(CCmdUI* pCmdUI) 
  166. {
  167.    // TODO: Add your command update UI handler code here
  168.    
  169.    pCmdUI->Enable (m_LineArray.GetSize ());
  170. }
  171.