#ifndef _SCENE_CONTEXT_H
#define _SCENE_CONTEXT_H
#include "GlFunctions.h"
class DrawText;
class SceneContext
{
public:
    enum Status
    {
        UNLOADED,               
        MUST_BE_LOADED,         
        MUST_BE_REFRESHED,      
        REFRESHED               
    };
    Status GetStatus() const { return mStatus; }
    
    SceneContext(const char * pFileName, int pWindowWidth, int pWindowHeight, bool pSupportVBO);
    ~SceneContext();
    
    const FbxScene * GetScene()
 const { 
return mScene; }
 
    
    bool LoadFile();
    
    const FbxTime GetFrameTime()
 const { 
return mFrameTime; }
 
    
    bool OnDisplay();
    
    void OnReshape(int pWidth, int pHeight);
    
    void OnKeyboard(unsigned char pKey);
    
    void OnMouse(int pButton, int pState, int pX, int pY);
    
    void OnMouseMotion(int pX, int pY);
    
    void OnTimerClick() const;
    
    
    
    
    
    bool SetCurrentAnimStack(int pIndex);
    
    bool SetCurrentCamera(const char * pCameraName);
    
    bool SetCurrentPoseIndex(int pPoseIndex);
    
    void SetSelectedNode(
FbxNode * pSelectedNode);
 
    
    void SetShadingMode(ShadingMode pMode);
    
    void SetPause(bool pPause) { mPause = pPause; }
    
    bool GetPause() const { return mPause; }
    enum CameraZoomMode
    {
        ZOOM_FOCAL_LENGTH,
        ZOOM_POSITION
    };
    CameraZoomMode  GetZoomMode()        { return mCameraZoomMode; }
    void            SetZoomMode( CameraZoomMode pZoomMode);       
private:
    
    void DisplayWindowMessage();
    
    enum CameraStatus
    {
        CAMERA_NOTHING,
        CAMERA_ORBIT,
        CAMERA_ZOOM,
        CAMERA_PAN
    };
    const char * mFileName;
    mutable Status mStatus;
    int mPoseIndex;
    mutable FbxTime mFrameTime, mStart, mStop, mCurrentTime;
 
    mutable FbxTime mCache_Start, mCache_Stop;
 
    
    mutable int mLastX, mLastY;
    mutable double mRoll;
    mutable CameraStatus mCameraStatus;
    bool mPause;
    ShadingMode mShadingMode;
    bool mSupportVBO;
    
    CameraZoomMode mCameraZoomMode;
    int mWindowWidth, mWindowHeight;
    
    DrawText * mDrawText;
};
bool InitializeOpenGL();
#endif // _SCENE_CONTEXT_H