171 lines
3.9 KiB
C++
171 lines
3.9 KiB
C++
/*
|
|
** Command & Conquer Renegade(tm)
|
|
** Copyright 2025 Electronic Arts Inc.
|
|
**
|
|
** This program is free software: you can redistribute it and/or modify
|
|
** it under the terms of the GNU General Public License as published by
|
|
** the Free Software Foundation, either version 3 of the License, or
|
|
** (at your option) any later version.
|
|
**
|
|
** 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, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// FormToolbarClass.CPP
|
|
//
|
|
// Module defining a CControlBar derived class which is used to implement
|
|
// floating or dockable toolbars containing dialogs.
|
|
//
|
|
//
|
|
|
|
#include "StdAfx.H"
|
|
#include "FormToolbar.H"
|
|
#include "DockableForm.H"
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(FormToolbarClass, CControlBar)
|
|
//{{AFX_MSG_MAP(FormToolbarClass)
|
|
ON_WM_SIZE()
|
|
ON_WM_ERASEBKGND()
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
//////////////////////////////////////////////////////////////
|
|
//
|
|
// Local constants
|
|
//
|
|
const int BORDER_TOP = 6;
|
|
const int BORDER_BOTTOM = 6;
|
|
const int BORDER_LEFT = 6;
|
|
const int BORDER_RIGHT = 6;
|
|
|
|
|
|
//////////////////////////////////////////////////////////////
|
|
//
|
|
// FormToolbarClass
|
|
//
|
|
FormToolbarClass::FormToolbarClass (void)
|
|
: m_pCForm (NULL)
|
|
{
|
|
m_minSize.cx = 100;
|
|
m_minSize.cy = 100;
|
|
return ;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////
|
|
//
|
|
// ~FormToolbarClass
|
|
//
|
|
FormToolbarClass::~FormToolbarClass (void)
|
|
{
|
|
if (m_pCForm) {
|
|
// Free the dockable form
|
|
delete m_pCForm;
|
|
m_pCForm = NULL;
|
|
}
|
|
|
|
return ;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////
|
|
//
|
|
// Create
|
|
//
|
|
BOOL
|
|
FormToolbarClass::Create
|
|
(
|
|
DockableFormClass *pCFormClass,
|
|
LPCTSTR pszWindowName,
|
|
CWnd *pCParentWnd,
|
|
UINT uiID
|
|
)
|
|
{
|
|
ASSERT (pCFormClass);
|
|
m_pCForm = pCFormClass;
|
|
|
|
// Allow the base class to process this message
|
|
RECT rect = { 0 };
|
|
BOOL retval = CWnd::Create (NULL, pszWindowName, WS_CHILD | WS_VISIBLE, rect, pCParentWnd, uiID);
|
|
if (retval) {
|
|
|
|
// Ask the dockable form to create itself
|
|
retval = m_pCForm->Create (this, 101);
|
|
|
|
|
|
CRect rect;
|
|
rect = m_pCForm->Get_Form_Rect ();
|
|
m_minSize.cx = rect.Width ();
|
|
m_minSize.cy = rect.Height ();
|
|
m_minSize.cx += BORDER_LEFT + BORDER_RIGHT;
|
|
m_minSize.cy += BORDER_TOP + BORDER_BOTTOM;
|
|
SetWindowPos (NULL, 0, 0, m_minSize.cx, m_minSize.cy, SWP_NOZORDER | SWP_NOMOVE);
|
|
m_pCForm->SetWindowPos (NULL, BORDER_LEFT, BORDER_TOP, 0, 0, SWP_NOZORDER | SWP_NOSIZE);
|
|
|
|
// Allow the toolbar to be resized
|
|
// Allow the toolbar to be docked either to the right or left
|
|
SetBarStyle (GetBarStyle() | CBRS_SIZE_DYNAMIC);
|
|
EnableDocking (CBRS_ALIGN_RIGHT | CBRS_ALIGN_LEFT);
|
|
}
|
|
|
|
// Return the TRUE/FALSE result code
|
|
return retval;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////
|
|
//
|
|
// OnSize
|
|
//
|
|
void
|
|
FormToolbarClass::OnSize
|
|
(
|
|
UINT nType,
|
|
int cx,
|
|
int cy
|
|
)
|
|
{
|
|
// Allow the base class to process this message
|
|
CControlBar::OnSize(nType, cx, cy);
|
|
|
|
if (m_pCForm && (cx > 0) && (cy > 0)) {
|
|
// Get the bounding rectangle
|
|
CRect rect;
|
|
GetClientRect (rect);
|
|
|
|
// Resize the dockable form window
|
|
m_pCForm->SetWindowPos (NULL,
|
|
0,
|
|
0,
|
|
rect.Width () - (BORDER_LEFT + BORDER_RIGHT),
|
|
rect.Height () - (BORDER_TOP + BORDER_BOTTOM),
|
|
SWP_NOZORDER | SWP_NOMOVE);
|
|
}
|
|
|
|
return ;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////
|
|
//
|
|
// OnEraseBkgnd
|
|
//
|
|
BOOL
|
|
FormToolbarClass::OnEraseBkgnd (CDC* pDC)
|
|
{
|
|
// Get the bounding rectangle
|
|
RECT rect;
|
|
GetClientRect (&rect);
|
|
|
|
// Paint the background light gray
|
|
::FillRect (*pDC, &rect, (HBRUSH)(COLOR_3DFACE + 1));
|
|
|
|
// Allow the base class to process this message
|
|
return CControlBar::OnEraseBkgnd(pDC);
|
|
}
|