home *** CD-ROM | disk | FTP | other *** search
/ VRML Tools for 3D Cyberspace / VRML_Tools_For_3D_Cyberspace.iso / amber / demos / framed / mfc20 / framedoc.cpp < prev    next >
C/C++ Source or Header  |  1996-07-01  |  4KB  |  185 lines

  1. // framedoc.cpp : implementation of the CFramedDoc class
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "framed.h"
  6.  
  7. #include "framedoc.h"
  8. #include "amber.hpp"
  9. #include "geometry.hpp"
  10.  
  11. #ifdef _DEBUG
  12. #undef THIS_FILE
  13. static char BASED_CODE THIS_FILE[] = __FILE__;
  14. #endif
  15.  
  16. static char BASED_CODE szFilter[] = 
  17.     "VRML Files (*.wrl) | *.wrl | WTK Files (*.nff) | *.nff | All Files (*.*) | *.* ||";
  18.  
  19.  
  20. /////////////////////////////////////////////////////////////////////////////
  21. // CFramedDoc
  22.  
  23. IMPLEMENT_DYNCREATE(CFramedDoc, CDocument)
  24.  
  25. BEGIN_MESSAGE_MAP(CFramedDoc, CDocument)
  26.     //{{AFX_MSG_MAP(CFramedDoc)
  27.     ON_COMMAND(ID_FILE_SAVE, OnFileSave)
  28.     ON_UPDATE_COMMAND_UI(ID_FILE_SAVE, OnUpdateFileSave)
  29.     ON_COMMAND(ID_FILE_SAVE_AS, OnFileSaveAs)
  30.     ON_UPDATE_COMMAND_UI(ID_FILE_SAVE_AS, OnUpdateFileSaveAs)
  31.     //}}AFX_MSG_MAP
  32. END_MESSAGE_MAP()
  33.  
  34. /////////////////////////////////////////////////////////////////////////////
  35. // CFramedDoc construction/destruction
  36.  
  37. CFramedDoc::CFramedDoc()
  38. {
  39.     // TODO: add one-time construction code here
  40.  
  41. }
  42.  
  43. CFramedDoc::~CFramedDoc()
  44. {
  45. }
  46.  
  47. BOOL CFramedDoc::OnNewDocument()
  48. {
  49.     if (!CDocument::OnNewDocument())
  50.         return FALSE;
  51.  
  52.     // TODO: add reinitialization code here
  53.     // (SDI documents will reuse this document)
  54.  
  55.     return TRUE;
  56. }
  57.  
  58. /////////////////////////////////////////////////////////////////////////////
  59. // CFramedDoc serialization
  60.  
  61. void CFramedDoc::Serialize(CArchive& ar)
  62. {
  63.     if (ar.IsStoring())
  64.     {
  65.         // TODO: add storing code here
  66.     }
  67.     else
  68.     {
  69.         // TODO: add loading code here
  70.     }
  71. }
  72.  
  73. /////////////////////////////////////////////////////////////////////////////
  74. // CFramedDoc diagnostics
  75.  
  76. #ifdef _DEBUG
  77. void CFramedDoc::AssertValid() const
  78. {
  79.     CDocument::AssertValid();
  80. }
  81.  
  82. void CFramedDoc::Dump(CDumpContext& dc) const
  83. {
  84.     CDocument::Dump(dc);
  85. }
  86. #endif //_DEBUG
  87.  
  88. /////////////////////////////////////////////////////////////////////////////
  89. // CFramedDoc commands
  90.  
  91. BOOL CFramedDoc::OnOpenDocument(LPCTSTR lpszPathName) 
  92. {
  93.     if (!CDocument::OnOpenDocument(lpszPathName))
  94.         return FALSE;
  95.     
  96.     // TODO: Add your specialized creation code here
  97.     universeClass *univ = amber->getCurrentUniverse();
  98.     univ->removeAllGeo();
  99.     amber->deleteAllGeos();
  100.     amber->deleteAllTextures();
  101.     amber->deleteAllMaterials();
  102.     geometryClass *geo = new geometryClass((char *)lpszPathName);
  103.         
  104.     return TRUE;
  105. }
  106.  
  107.  
  108. void CFramedDoc::OnFileSave() 
  109. {
  110.     // TODO: Add your command handler code here
  111.     CFileDialog *dlg;
  112.     geometryClass *geo;
  113.     universeClass *univ = amber->getCurrentUniverse();
  114.     char name[255];
  115.  
  116.     geo = univ->getGeo(1);
  117.  
  118.     strcpy(name, geo->getFilename());
  119.  
  120.     if (strstr(name, "wrl") || strstr(name, "WRL")) {
  121.         geo->save(name, _VRML_FILE);
  122.     }
  123.     else if (strstr(name, "nff") || strstr(name, "NFF")) {
  124.         geo->save(name, _NFF_FILE);
  125.     }
  126.     
  127.  
  128.     
  129. }
  130.  
  131. void CFramedDoc::OnUpdateFileSave(CCmdUI* pCmdUI) 
  132. {
  133.     // TODO: Add your command update UI handler code here
  134.     geometryClass *geo;
  135.     universeClass *univ = amber->getCurrentUniverse();
  136.  
  137.     geo = univ->getGeo(1);
  138.     if (!geo)
  139.         pCmdUI->Enable(FALSE);
  140.     else
  141.         pCmdUI->Enable(TRUE);
  142. }
  143.  
  144. void CFramedDoc::OnFileSaveAs() 
  145. {
  146.     // TODO: Add your command handler code here
  147.     CFileDialog *dlg;
  148.     geometryClass *geo;
  149.     universeClass *univ = amber->getCurrentUniverse();
  150.     
  151.     geo = univ->getGeo(1);
  152.  
  153.     dlg = new CFileDialog(FALSE, "wrl", geo->getFilename(), 
  154.                           OFN_OVERWRITEPROMPT, szFilter);    
  155.  
  156.     if (dlg->DoModal()) {
  157.         switch(dlg->m_ofn.nFilterIndex) {
  158.             case 1:
  159.                 geo->save(dlg->m_ofn.lpstrFile, _VRML_FILE);
  160.                 break;
  161.             case 2:
  162.                 geo->save(dlg->m_ofn.lpstrFile, _NFF_FILE);
  163.                 break;
  164.             default:
  165.                 geo->save(dlg->m_ofn.lpstrFile, _VRML_FILE);
  166.                 break;
  167.         }
  168.     }
  169.     delete dlg;    
  170. }
  171.  
  172. void CFramedDoc::OnUpdateFileSaveAs(CCmdUI* pCmdUI) 
  173. {
  174.     // TODO: Add your command update UI handler code here
  175.     geometryClass *geo;
  176.     universeClass *univ = amber->getCurrentUniverse();
  177.  
  178.     geo = univ->getGeo(1);
  179.     if (!geo)
  180.         pCmdUI->Enable(FALSE);
  181.     else
  182.         pCmdUI->Enable(TRUE);
  183.     
  184. }
  185.