00001 // Copyright (c) 1998-2014 by Tech Soft 3D, Inc. 00002 // 00003 // The information contained herein is confidential and proprietary to Tech Soft 3D, Inc., 00004 // and considered a trade secret as defined under civil and criminal statutes. 00005 // Tech Soft 3D, Inc. shall pursue its civil and criminal remedies in the event of 00006 // unauthorized use or misappropriation of its trade secrets. Use of this information 00007 // by anyone other than authorized employees of Tech Soft 3D, Inc. is granted only under 00008 // a written non-disclosure agreement, expressly prescribing the scope and manner of such use. 00009 00010 #if !defined(AFX_DATALOADER_H__A606F2DA_B9BD_487F_93F8_A22F5BAD1DA5__INCLUDED_) 00011 #define AFX_DATALOADER_H__A606F2DA_B9BD_487F_93F8_A22F5BAD1DA5__INCLUDED_ 00012 00013 #if _MSC_VER > 1000 00014 #pragma once 00015 #endif // _MSC_VER > 1000 00016 00017 #include "resource.h" // main symbols 00018 #include <atlctl.h> 00019 #include "HUtility.h" 00020 00021 #include "HStream.h" 00022 #include "HOpcodeHandler.h" 00023 struct IWebBrowserApp; 00024 00025 00026 #include "Vector" 00027 using namespace std; 00028 00029 00030 class HBaseModel; 00031 class HCtrlView; 00032 class HCtrlDB; 00033 class HBaseOperator; 00034 class CHoops3dStreamCtrl; 00035 class HUtilityXMLTag; 00036 class HUtilityXMLGenerator; 00037 class ModelStructureObject; 00038 00039 00040 00042 struct databuffer 00043 { 00044 unsigned char *data; 00045 unsigned int length; 00046 }; 00047 00048 00050 00055 class CDataLoader 00056 { 00057 public: 00062 CDataLoader(CHoops3dStreamCtrl *ctrl); 00063 virtual ~CDataLoader(); 00064 00069 void Init(HCtrlView *view); 00076 bool StartDownload(BSTR filename, bool isStreamable = true); 00083 bool OnData (BYTE* pBytes, DWORD dwSize); 00084 00089 bool ProcessNextChunk(); 00090 00094 bool GetDownloadInProgress() { return m_bDownloadInProgress; } 00095 00099 bool GetDownloadComplete() { return m_bDataProcessingComplete; } 00100 00104 long GetDownloadDataReceived() { return m_DataReceived; } 00105 00109 long GetDownloadDataTotalSize() { return m_DataReceiveSize; } 00114 void AbortDownload() { 00115 if (!m_bDataProcessingComplete || m_bDownloadInProgress) { 00116 m_bAbortDownload = true; 00117 if (!m_bDownloadInProgress) 00118 m_bDataProcessingComplete = true; 00119 } 00120 00121 } 00126 void SetDownloadStatus(int ulProgressMax) { m_DataReceiveSize = ulProgressMax; } 00127 00131 bool GetRestoreCamera() { return m_bRestoreCamera; } 00132 00137 void SetRestoreCamera(bool restorecamera) { m_bRestoreCamera = restorecamera; } 00138 00139 00144 void SetTreeControlXML(char *data); 00145 00150 char *GetTreeControlXML() { return m_pTreeControlXML; } 00151 00152 00157 struct vlist_s* GetModelStructureTypeList() { return m_ModelStructureTypesList; } 00162 ModelStructureObject *GetModelStructureObjectTree() { return m_pModelStructureObjectTree; } 00163 00169 int FilterIdentifier(int identifier, char *type); 00177 ModelStructureObject * FindModelStructureObject(ModelStructureObject *mso, int identifier); 00178 00185 void GetXMLForItemChildren(int identifier, char *(&text)); 00186 00194 ModelStructureObject * FindModelStructureObject(ModelStructureObject *mso, char *path); 00201 void GetXMLForItemChildren(ModelStructureObject *mso, char *(&text)); 00208 void GetXMLForItemChildren(char *path, char *(&text)); 00215 void GetPathFromIdentifier(int identifier, char *path); 00216 00217 00222 HCtrlView * GetView() { return m_pView; } 00227 CHoops3dStreamCtrl *GetControl() { return m_pStreamControl; } 00228 00229 00230 DWORD m_ParsingThread; 00231 protected: 00238 TK_Status ProcessData( BYTE* pBytes, DWORD dwSize); 00242 void ClearCachedDataList(); 00243 00244 00245 00246 vector <databuffer *> m_CachedDataList; 00248 HCtrlView* m_pView; 00249 bool m_bDataIsStreamable; 00251 bool m_bDownloadInProgress; 00252 long m_DataReceived; 00253 long m_DataReceiveSize; 00254 bool m_bAbortDownload; 00256 bool m_bDataProcessingComplete; 00258 bool m_bRestoreCamera; 00260 private: 00261 void ResetModelStructureTypes(); 00262 00263 FILE * m_temphandle; 00264 TCHAR m_tempfilename[MAX_PATH]; 00265 char * m_pTreeControlXML; 00266 struct vlist_s* m_ModelStructureTypesList; 00267 ModelStructureObject *m_pModelStructureObjectTree; 00268 CHoops3dStreamCtrl *m_pStreamControl; 00269 00270 00271 }; 00272 00273 00274 #ifndef DOXYGEN_SHOULD_SKIP_THIS 00275 00276 template <class T> 00277 class CBindStatusCallback2 : public CBindStatusCallback<T> 00278 { 00279 typedef void (T::*ATL_PDATAAVAILABLE2)(CBindStatusCallback<T>* pbsc, BYTE* pBytes, DWORD dwSize); 00280 00281 public: 00282 STDMETHOD(OnProgress)(ULONG ulProgress, ULONG ulProgressMax, ULONG ulStatusCode, LPCWSTR szStatusText) 00283 { 00284 // ATLTRACE(_T("CBindStatusCallback2::OnProgress")); 00285 // return m_pT->OnProgress ( ulProgress, ulProgressMax, ulStatusCode, szStatusText ); 00286 m_pT->GetDataLoader()->SetDownloadStatus(ulProgressMax); 00287 return S_OK; 00288 } 00289 00290 static HRESULT Download(T* pT, ATL_PDATAAVAILABLE2 pFunc, BSTR bstrURL, IUnknown* pUnkContainer = NULL, BOOL bRelative = FALSE) 00291 { 00292 CComObject<CBindStatusCallback2<T> > *pbsc; 00293 HRESULT hRes = CComObject<CBindStatusCallback2<T> >::CreateInstance(&pbsc); 00294 if (FAILED(hRes)) 00295 return hRes; 00296 return pbsc->StartAsyncDownload(pT, pFunc, bstrURL, pUnkContainer, bRelative); 00297 } 00298 }; 00299 00300 class ModelStructureType 00301 { 00302 public: 00303 00304 ModelStructureType() 00305 { 00306 m_pName = 0; 00307 m_pImage = 0; 00308 m_bSelectable = false; 00309 00310 } 00311 ~ModelStructureType() 00312 { 00313 delete [] m_pName; 00314 delete [] m_pImage; 00315 } 00316 00317 void SetName(char *name) 00318 { 00319 m_pName = new char[strlen(name)+1]; 00320 strcpy(m_pName, name); 00321 } 00322 00323 void SetImage(char *image) 00324 { 00325 m_pImage = new char[strlen(image)+1]; 00326 strcpy(m_pImage, image); 00327 } 00328 00329 char *GetName() { return m_pName; } 00330 char *GetImage() { return m_pImage; } 00331 bool GetSelectable() { return m_bSelectable; } 00332 void SetSelectable( bool selectable ) { m_bSelectable = selectable; } 00333 00334 char *m_pName; 00335 char *m_pImage; 00336 bool m_bSelectable; 00337 00338 }; 00339 00340 class ModelStructureObject 00341 { 00342 public: 00343 00344 ModelStructureObject(); 00345 ~ModelStructureObject(); 00346 void SetType(char *name) 00347 { 00348 m_pType = new char[strlen(name)+1]; 00349 strcpy(m_pType, name); 00350 } 00351 void SetType(ModelStructureType *type) 00352 { 00353 m_pTypePointer = type; 00354 } 00355 00356 void SetIdentifier(int identifier) 00357 { 00358 m_Identifier = identifier; 00359 } 00360 void SetParent(ModelStructureObject *parent) 00361 { 00362 m_pParent = parent; 00363 } 00364 void SetName(char *name) 00365 { 00366 m_pName = new char[strlen(name)+1]; 00367 strcpy(m_pName, name); 00368 } 00369 00370 char *GetType() { return m_pType; } 00371 ModelStructureType *GetTypePointer() { return m_pTypePointer; } 00372 void SelectAllChildItemsRecursive(HBaseView *view); 00373 void Select(HBaseView *view); 00374 00375 00376 void AddChild(ModelStructureObject *child); 00377 00378 char *m_pType; 00379 char *m_pName; 00380 struct vlist_s* m_Children; 00381 struct vlist_s* m_IdentifierList; 00382 ModelStructureObject *m_pParent; 00383 ModelStructureType *m_pTypePointer; 00384 int m_Identifier; 00385 00386 }; 00387 00388 00389 class TK_ATL_Initial_View : public HTK_Camera 00390 { 00391 private: 00392 HCtrlView * m_pView; 00393 int my_stage; 00394 HTK_Camera *my_camera; 00395 CDataLoader *m_pDataLoader; 00396 00397 public: 00398 TK_ATL_Initial_View(HCtrlView * view, CDataLoader *dataloader) : HTK_Camera(TKE_View) 00399 { 00400 m_pView = view; 00401 m_pDataLoader = dataloader; 00402 } 00403 00404 TK_Status Interpret(BStreamFileToolkit &tk, ID_Key key, int variant); 00405 TK_Status Execute (BStreamFileToolkit & tk); 00406 }; 00407 00408 00409 00410 00412 class TK_ModelStructure_XML : public TK_XML 00413 { 00414 00415 00416 public: 00417 00422 TK_ModelStructure_XML(CDataLoader * model, HStreamFileToolkit*toolkit) : TK_XML() 00423 { 00424 m_pDataLoader = model; 00425 m_pStreamFileToolkit = toolkit; 00426 } 00427 00428 00430 TK_Status Execute (BStreamFileToolkit & tk); 00431 00432 static void *XMLCallback(HUtilityXMLTag *xt, bool open, void *m_pExtraData); 00433 00434 private: 00435 CDataLoader * m_pDataLoader; 00436 HStreamFileToolkit * m_pStreamFileToolkit; 00437 struct vlist_s* m_TempObjects; 00440 }; 00441 00442 class XML_Parsing_Object 00443 { 00444 public: 00445 CDataLoader * m_pDataLoader; 00446 char *buffer; 00447 static unsigned long XMLParsingThread(LPVOID pParam); 00448 struct vlist_s* m_TempObjects; 00449 HUtilityXMLGenerator * m_pXmlgen; 00450 00451 }; 00452 00453 00454 #endif 00455 00456 #endif // !defined(AFX_DATALOADER_H__A606F2DA_B9BD_487F_93F8_A22F5BAD1DA5__INCLUDED_) 00457 00458