//
// ExDocument.cpp : インプリメンテーション ファイル
//

#include  "ExDocument.h"
#include  "appCallBack.h"



#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


using namespace jbxwl;




/////////////////////////////////////////////////////////////////////////////
// CExDocument

IMPLEMENT_DYNCREATE(CExDocument, CDocument)


CExDocument::CExDocument()
{
	//DEBUG_WARN("CExDocument::CExDocument Start");

	init_CmnHead(&infHead);
	msGraph.init();
	cmnHead.init();

	hasReadData    = FALSE;	// データを正常に読み込み，保持しているか．
	hasViewData    = FALSE;	// 読み込んだデータから表示用データを作成したか．
	ctrlCntrst     = FALSE;	// 表示用データ作成時に（画素値が255以下でも）強制的にコントラストを調整を行う．
	multiSliceData = FALSE;	// TRUE ならマルチスライス読み込みモード
	notFreeMSGraph = FALSE;	// メモリ管理無しの場合，このオブジェクトが msGraph のメモリを開放するのは禁止．
	notFreeCmnHead = FALSE;	// メモリ管理無しの場合，このオブジェクトが cmnHead のメモリを開放するのは禁止．
	
	pView		= NULL;
	pFrame		= NULL;
	pApp		= NULL;
	anyData		= NULL;

	Title		= _T("");
	preTitle    = _T("");
	pstTitle	= _T("");

	startNo		= 0;
	endNo		= 0;
	vMax		= 0;
	vMin		= 0;
	colorMode	= GRAPH_COLOR_MONO;
	base		= 0;

	//DEBUG_WARN("CExDocument::CExDocument End");
}





CExDocument::~CExDocument()
{
	DEBUG_ERR("DESTRUCTOR: IN  CExDocument");

	if (pApp!=NULL) pApp->DocumentDistructor(this);			// 上位アプリケーションに通知

	if (notFreeCmnHead) cmnHead.mfree();
	else                cmnHead.free();
	if (notFreeMSGraph) msGraph.mfree();
	else                msGraph.free();
	
	if (!isNull(pView))  pView->pDoc  = NULL;
	if (!isNull(pFrame)) pFrame->pDoc = NULL;
	pView  = NULL;
	pFrame = NULL;

//	DEBUG_ERR("DESTRUCTOR: OUT CExDocument");
}





BEGIN_MESSAGE_MAP(CExDocument, CDocument)
	//{{AFX_MSG_MAP(CExDocument)
		// メモ - ClassWizard はこの位置にマッピング用のマクロを追加または削除します．
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()




/////////////////////////////////////////////////////////////////////////////
// CExDocument 診断

#ifdef _DEBUG
void CExDocument::AssertValid() const
{
	CDocument::AssertValid();
}

void CExDocument::Dump(CDumpContext& dc) const
{
	CDocument::Dump(dc);
}
#endif //_DEBUG



/////////////////////////////////////////////////////////////////////////////
// CExDocument シリアライズ

void CExDocument::Serialize(CArchive& ar)
{
	if (ar.IsStoring())
	{
		// TODO: この位置に保存用のコードを追加してください
	}
	else
	{
		// TODO: この位置に読み込み用のコードを追加してください
	}
}





/////////////////////////////////////////////////////////////////////////////
// CExDocument コマンド


BOOL CExDocument::OnNewDocument()
{
	//DEBUG_ERR("CExDocument::OnNewDocument Start");

	if (!hasReadData) return FALSE;

	if (!hasViewData) hasViewData = MakeViewData();
	if (!hasViewData) return FALSE;

	//DEBUG_ERR("CExDocument::OnNewDocument End");
	return  TRUE;
}





BOOL CExDocument::OnOpenDocument(LPCTSTR lpszPathName) 
{
	//DEBUG_ERR("CExDocument::OnOpenDocument Start");

	if (!hasReadData) hasReadData = ReadDataFile(lpszPathName);
	if (!hasReadData) return FALSE;

	if (!hasViewData) hasViewData = MakeViewData();
	if (!hasViewData) return FALSE;

	//DEBUG_ERR("CExDocument::OnOpenDocument End");
	return TRUE;
}




//
CExView*  CExDocument::GetView()
{
	if (pView==NULL) {
		POSITION pos = GetFirstViewPosition();
		while (pos!=NULL) {
			CExView* pview = (CExView*)GetNextView(pos);
			if (this==pview->GetDocument()) return pview;
		}
		return NULL;
	}
	return pView;
}




/**
	機能：  画像データを読み込む．
	引数：  ファイル名
	戻値：  TRUE: 成功，FALSE: 失敗
	説明：  読み込んだグラフィックデータ(msGraphメンバ)
*/
BOOL   CExDocument::ReadDataFile(LPCTSTR str)
{
	return  TRUE;
}




//
//  読み込んだデータから表示用のデータを作る．
//			オーバーライド用
//
BOOL  CExDocument::MakeViewData()
{
	return TRUE;
}




//
//  データを書き込む．
//			オーバーライド用
//
BOOL  CExDocument::WriteDataFile(LPCTSTR fname)
{
	return TRUE;
}








