0029589: Configuration - allow MFC samples to be built when OCCT is linked statically
[occt.git] / samples / mfc / standard / 05_ImportExport / src / ImportExportApp.cpp
1 // ImportExportApp.cpp : Defines the class behaviors for the application.
2 //
3
4 #include "stdafx.h"
5
6 #include "ImportExportApp.h"
7
8 #include "OCC_MainFrame.h"
9 #include "OCC_3dChildFrame.h"
10 #include "ImportExportDoc.h"
11 #include <OCC_3dView.h>
12 #include <res/resource.h>
13
14 BEGIN_MESSAGE_MAP(CImportExportApp, OCC_App)
15         //{{AFX_MSG_MAP(CSerializeApp)
16         ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
17         //}}AFX_MSG_MAP
18 END_MESSAGE_MAP()
19
20 /////////////////////////////////////////////////////////////////////////////
21 // CImportExportApp construction
22
23 CImportExportApp::CImportExportApp() : OCC_App()
24 {
25 }
26
27 /////////////////////////////////////////////////////////////////////////////
28 // The one and only CImportExportApp object
29
30 CImportExportApp theApp;
31
32 /////////////////////////////////////////////////////////////////////////////
33 // CImportExportApp initialization
34
35 BOOL CImportExportApp::InitInstance()
36 {
37   // Set the local system units
38   try
39   {
40     UnitsAPI::SetLocalSystem (UnitsAPI_MDTV);
41   }
42   catch (Standard_Failure)
43   {
44     AfxMessageBox (L"Fatal Error in units initialisation");
45   }
46
47   SampleName = "ImportExport"; //for about dialog
48   SetSamplePath (L"..\\..\\05_ImportExport");
49
50   AfxEnableControlContainer();
51
52         // Standard initialization
53         // If you are not using these features and wish to reduce the size
54         //  of your final executable, you should remove from the following
55         //  the specific initialization routines you do not need.
56
57         // Change the registry key under which our settings are stored.
58         // You should modify this string to be something appropriate
59         // such as the name of your company or organization.
60         // Modified by CasCade :
61         SetRegistryKey(_T("Local CasCade Applications"));
62
63         LoadStdProfileSettings();  // Load standard INI file options (including MRU)
64
65         // Register the application's document templates.  Document templates
66         //  serve as the connection between documents, frame windows and views.
67
68         CMultiDocTemplate* pDocTemplate;
69     pDocTemplate = new CMultiDocTemplate(
70                 IDR_3DTYPE,
71                 RUNTIME_CLASS(CImportExportDoc),
72                 RUNTIME_CLASS(OCC_3dChildFrame), 
73                 RUNTIME_CLASS(OCC_3dView));
74         AddDocTemplate(pDocTemplate);
75
76         // create main MDI Frame window
77         OCC_MainFrame* pMainFrame = new OCC_MainFrame(with_AIS_TB);
78         if (!pMainFrame->LoadFrame(IDR_MAINFRAME))
79                 return FALSE;
80         m_pMainWnd = pMainFrame;
81
82         // Parse command line for standard shell commands, DDE, file open
83         CCommandLineInfo cmdInfo;
84         ParseCommandLine(cmdInfo);
85
86         // Dispatch commands specified on the command line
87         if (!ProcessShellCommand(cmdInfo))
88                 return FALSE;
89
90         // The main window has been initialized, so show and update it.
91         pMainFrame->ShowWindow(m_nCmdShow);
92         pMainFrame->UpdateWindow();
93
94         return TRUE;
95 }
96
97 CDocument* CImportExportApp::OpenDocumentFile(LPCTSTR lpszFileName) 
98 {
99         CFile cf;
100         
101         if (!cf.Open(lpszFileName,CFile::modeReadWrite)){ 
102                 AfxMessageBox (L"File not found!");
103                 return NULL;
104         }
105         cf.Close();
106         return CWinApp::OpenDocumentFile(lpszFileName); 
107 }
108
109 void CImportExportApp::OnFileOpen() 
110 {
111   CFileDialog dlg(TRUE,
112                                   NULL,
113                                   NULL,
114                                   OFN_HIDEREADONLY | OFN_FILEMUSTEXIST,
115                                   NULL, 
116                                   NULL );
117   
118
119         CString initdir;
120         initdir.GetEnvironmentVariable (L"CSF_OCCTDataPath");
121
122         dlg.m_ofn.lpstrInitialDir = initdir;
123
124         CString strFilter;
125         CString strDefault;
126
127         POSITION pos = GetFirstDocTemplatePosition();
128
129         CDocTemplate* pTemplate = GetNextDocTemplate(pos);
130         CString strFilterExt, strFilterName;
131         if (pTemplate->GetDocString(strFilterExt, CDocTemplate::filterExt) &&
132                 !strFilterExt.IsEmpty() &&
133                 pTemplate->GetDocString(strFilterName, CDocTemplate::filterName) &&
134                 !strFilterName.IsEmpty()) {
135                 // add to filter
136                 strFilter += strFilterName;
137                 ASSERT(!strFilter.IsEmpty());  // must have a file type name
138                 strFilter += L'\0';  // next string please
139                 strFilter += L'*';
140                 strFilter += strFilterExt;
141                 strFilter += L'\0';  // next string please
142                 dlg.m_ofn.nMaxCustFilter++;             
143         }
144         // append the "*.*" all files filter
145         CString allFilter;
146         VERIFY(allFilter.LoadString(AFX_IDS_ALLFILTER));
147         strFilter += allFilter;
148         strFilter += L'\0';   // next string please
149         strFilter += L"*.*";
150         strFilter += L'\0';   // last string
151         dlg.m_ofn.nMaxCustFilter++;
152         dlg.m_ofn.lpstrFilter = strFilter;
153
154   if (dlg.DoModal() == IDOK) 
155   {
156         AfxGetApp()->OpenDocumentFile(dlg.GetPathName());
157   }     
158 }