Alphabetical Class Index   Compound Members   File List  

DataLoader.h
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