Serious-Engine/Sources/WorldEditor/InfoFrame.cpp
2016-03-11 18:20:51 -06:00

120 lines
3.8 KiB
C++

/* Copyright (c) 2002-2012 Croteam Ltd.
This program is free software; you can redistribute it and/or modify
it under the terms of version 2 of the GNU General Public License as published by
the Free Software Foundation
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
// InfoFrame.cpp : implementation file
//
#include "stdafx.h"
#include "InfoFrame.h"
#ifdef _DEBUG
#undef new
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CInfoFrame
IMPLEMENT_DYNCREATE(CInfoFrame, CMiniFrameWnd)
CInfoFrame::CInfoFrame()
{
m_pInfoSheet = NULL;
}
CInfoFrame::~CInfoFrame()
{
// there is no need to destroy or delete sheet object m_pInfoSheet because
// it is created as child window and will be automatically deleted trough its
// PostNcDestroy() and DestroyWindow() member functions. (second one will be called
// by its parent and will end with "delete this;"
}
BEGIN_MESSAGE_MAP(CInfoFrame, CMiniFrameWnd)
//{{AFX_MSG_MAP(CInfoFrame)
ON_WM_CREATE()
ON_WM_CLOSE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CInfoFrame message handlers
int CInfoFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMiniFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
CMainFrame* pMainFrame = STATIC_DOWNCAST(CMainFrame, AfxGetMainWnd());
// create sheet object to hold numerous pages
m_pInfoSheet = new CInfoSheet(this);
// if creation fails, delete allocated object
if (!m_pInfoSheet->Create(this, WS_CHILD | WS_VISIBLE, 0))
{
delete m_pInfoSheet;
m_pInfoSheet = NULL;
return -1;
}
// resize the mini frame so that it fits around the child property sheet
CRect rectClient, rectWindow;
// property sheet's window rectangle
m_pInfoSheet->GetWindowRect(rectClient);
// becomes mini frame's client rectangle
rectWindow = rectClient;
// add the width and height needed from the mini frame's borders
CalcWindowRect(rectWindow);
// get screen size
int iScreenWidth = ::GetSystemMetrics(SM_CXSCREEN);
int iScreenHeight = ::GetSystemMetrics(SM_CYSCREEN);
// rectangle to hold status bar size
CRect rectStatusBar;
// get status bar rectangle
pMainFrame->m_wndStatusBar.GetWindowRect( rectStatusBar);
// rectangle to hold mainframe height
CRect rectMainFrame;
// get main frame rectangle
pMainFrame->GetWindowRect( rectMainFrame);
PIX pixStatusHeight = rectStatusBar.Height();
PIX pixInfoHeight = rectWindow.Height();
PIX pixMainFrameHeight = rectMainFrame.Height();
// offset mini frame window coordinates so it fits in lower left part of the screen
//rectWindow.OffsetRect( 3, iScreenHeight - pixInfoHeight - pixStatusHeight - 3);
rectWindow.OffsetRect( 0, pixMainFrameHeight - pixInfoHeight - pixStatusHeight - 9);
// move frame window to new position
SetWindowPos( NULL, rectWindow.left, rectWindow.top, rectWindow.Width(), rectWindow.Height(),
SWP_NOZORDER | SWP_NOACTIVATE);
// set property sheet position and type
m_pInfoSheet->SetWindowPos( NULL, 0, 0, rectClient.Width(), rectClient.Height(),
SWP_NOZORDER | SWP_NOACTIVATE);
return 0;
}
void CInfoFrame::OnClose()
{
// Instead of closing the modeless property sheet, just hide it.
CMainFrame* pMainFrame = STATIC_DOWNCAST(CMainFrame, AfxGetMainWnd());
pMainFrame->m_pInfoFrame->ShowWindow(SW_HIDE);
}