// SecndFrame.cpp : 実装ファイル
//

#include "stdafx.h"
#include "SecndFrame.h"
#include "directoryview.h"
#include "settingview.h"
#include "serverinfoview.h"
#include "connectinfoview.h"

#define	SIDE_BAR_SIZE	195
#define	HEADER_SIZE		65


// CSecndFrame

IMPLEMENT_DYNAMIC(CSecndFrame, CWnd)
CSecndFrame::CSecndFrame()
{
	m_mainView = NULL;
}

CSecndFrame::~CSecndFrame()
{
	if(m_mainView)
		delete m_mainView;
	m_mainView = NULL;
}


BEGIN_MESSAGE_MAP(CSecndFrame, CWnd)
	ON_WM_PAINT()
	ON_WM_CREATE()
	ON_WM_SIZE()
	ON_MESSAGE( USER_MESG_CHANGE_SEL, OnChangeSel )
	ON_COMMAND(ID_EDIT_COPY_INFO, OnEditCopyInfo)
	ON_UPDATE_COMMAND_UI(ID_EDIT_COPY_INFO, OnUpdateEditCopyInfo)
END_MESSAGE_MAP()



// CSecndFrame メッセージ ハンドラ


void CSecndFrame::OnPaint()
{
	CPaintDC dc(this); // device context for painting
}

int CSecndFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CWnd::OnCreate(lpCreateStruct) == -1)
		return -1;

	if (!m_sideBar.Create(NULL, NULL, WS_CHILD | WS_VISIBLE,
		CRect(0, 0, 0, 0), this, 0, NULL))
	{
		TRACE0("ビュー ウィンドウを作成できませんでした。\n");
		return -1;
	}

	if (!m_header.Create(NULL, NULL, WS_CHILD | WS_VISIBLE,
		CRect(0, 0, 0, 0), this, 1, NULL))
	{
		TRACE0("ビュー ウィンドウを作成できませんでした。\n");
		return -1;
	}

	m_header.SetLabel("サーバ情報","サーバの設定やサーバの動作状況など、サーバの情報を表示します。");

	CreateMainView(new CServerInfoView);

	return 0;
}

BOOL CSecndFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	if (!CWnd::PreCreateWindow(cs))
		return FALSE;

	cs.dwExStyle |= WS_EX_CLIENTEDGE;

	return TRUE;
}

void CSecndFrame::OnSize(UINT nType, int cx, int cy)
{
	CWnd::OnSize(nType, cx, cy);

	m_sideBar.MoveWindow(0,0,SIDE_BAR_SIZE,cy);
	m_header.MoveWindow(SIDE_BAR_SIZE,0,cx-SIDE_BAR_SIZE,HEADER_SIZE);

	if(m_mainView)
		m_mainView->MoveWindow(SIDE_BAR_SIZE,HEADER_SIZE,cx-SIDE_BAR_SIZE,cy-HEADER_SIZE);
}

//	選択項目の変更
LRESULT CSecndFrame::OnChangeSel(WPARAM wParam, LPARAM lParam)
{
	int	sel = (int)wParam - SIDE_BAR_COMMAND_START;

	switch(sel)
	{
		case 0:
			m_header.SetLabel("サーバ情報","接続数・転送容量など、サーバの情報を表示します。");
			CreateMainView(new CServerInfoView);
			break;

		case 1:
			m_header.SetLabel("ディレクトリ設定","サーバの仮想パスと、PCの物理パスの関連付けを行います。");
			CreateMainView(new CDirectoryView);
			break;

		case 2:
			m_header.SetLabel("サーバ設定","ユーザー設定や接続制限など、サーバの各種設定を行います。");
			CreateMainView(new CSettingView);
			break;

		case 3:
			m_header.SetLabel("接続情報","現在通信を行っている接続の各種情報を表示します。");
			CreateMainView(new CConnectInfoView);
			break;
	}

	return(0);
}

//	メインビューの生成
void CSecndFrame::CreateMainView(CMainViewBase *view)
{
	//	前のウインドウ削除
	if(m_mainView)
		delete m_mainView;
	m_mainView = NULL;
	m_mainView = view;

	CRect	client;
	GetClientRect(client);

	if (!view->Create(NULL, NULL, WS_CHILD | WS_VISIBLE,CRect(SIDE_BAR_SIZE,HEADER_SIZE,client.Width(),client.Height()), this, 0, NULL))
		TRACE0("ビュー ウィンドウを作成できませんでした。\n");
}


//	情報のコピー
void CSecndFrame::OnEditCopyInfo()
{
	SetClipboard(m_mainView->ToString());
}

//	情報のコピー更新
void CSecndFrame::OnUpdateEditCopyInfo(CCmdUI *pCmdUI)
{
	if(m_mainView==NULL)
		return;

	if(m_mainView->ToStringActive())
		pCmdUI->Enable(TRUE);
	else
		pCmdUI->Enable(FALSE);
}

//	クリップボード設定
void CSecndFrame::SetClipboard(CString str)
{
	if (!::OpenClipboard(NULL)) 
	{
		return;
	}

	HGLOBAL	hglb = ::GlobalAlloc(GMEM_DDESHARE | GMEM_MOVEABLE,str.GetLength()+1);
	LPTSTR	lptstr = (LPTSTR)::GlobalLock(hglb);
	memcpy(lptstr,str.GetBuffer(),str.GetLength()+1);
	::GlobalUnlock(hglb);
	::EmptyClipboard();
	::SetClipboardData(CF_TEXT,hglb);
	::CloseClipboard(); 

	return;
}

