Alphabetical Class Index   File Members   Compound Members   File List  

DataLoader.h

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: 5cdddb55c2e042b98774f5cf3b95c1ba52bd1651 $
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