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