This repository has been archived on 2025-02-27. You can view files and clone it, but cannot push or open issues or pull requests.
CnC_Renegade/Code/Tools/W3DView/Toolbar.h

168 lines
4.6 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/>.
*/
//////////////////////////////////////////////////////////////////////
//
// Toolbar.H
//
// Declaration of a 'fancy' toolbar using hi-color buttons
//
#ifndef __FANCYTOOLBAR_H
#define __FANCYTOOLBAR_H
//////////////////////////////////////////////////////////////
//
// Constants
//
const int BUTTON_WIDTH = 42;
const int BUTTON_HEIGHT = 36;
const int BUTTON_MIDDLE = 18;
const int BORDER_LEFT = 8;
const int BORDER_RIGHT = 8;
const int BORDER_TOP = 8;
const int BORDER_BOTTOM = 8;
//////////////////////////////////////////////////////////////
//
// CFancyToolbar
//
class CFancyToolbar : public CControlBar
{
////////////////////////////////////////////////////////
//
// MFC Junk
//
public:
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CFancyToolbar)
public:
virtual void OnDraw(CDC* pDC); // overridden to draw this view
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
protected:
//}}AFX_VIRTUAL
public:
////////////////////////////////////////////////////////
//
// Public Data Types
//
typedef enum
{
StateUp = 0,
StateDn = 1
} STATE_INFO;
typedef enum
{
TypeNormal = 0,
Type2State = 1
} BUTTON_TYPE;
////////////////////////////////////////////////////////
//
// Public Contructors
//
CFancyToolbar ();
virtual ~CFancyToolbar ();
////////////////////////////////////////////////////////
//
// Public Methods
//
//
// Required methods
//
CSize CalcFixedLayout (BOOL, BOOL)
{ return CSize (m_iButtons*BUTTON_WIDTH + BORDER_LEFT + BORDER_RIGHT, BUTTON_HEIGHT + BORDER_TOP + BORDER_BOTTOM); }
CSize CalcDynamicLayout( int nLength, DWORD dwMode )
{ return CSize (m_iButtons*BUTTON_WIDTH + BORDER_LEFT + BORDER_RIGHT, BUTTON_HEIGHT + BORDER_TOP + BORDER_BOTTOM); }
void OnUpdateCmdUI (class CFrameWnd*, int) {}
//
// Creation routines
//
void AddButton (UINT iBMPUp, UINT iBMPDn, int iCommandID, BUTTON_TYPE buttonType = TypeNormal);
BOOL Create (LPCTSTR pszWindowName, CWnd *pCParentWnd, UINT uiID);
//
// State management routines
//
void SetButtonState (int iCommandID, STATE_INFO newState, BOOL bRepaint = TRUE);
STATE_INFO GetButtonState (int iCommandID) const;
protected:
////////////////////////////////////////////////////////
//
// Protected Methods
//
void Paint (void);
void DrawButton (HDC hDC, int iXPos, int iYPos, HBITMAP hBMP);
int ButtonFromPoint (const CPoint &point);
void RegisterFancyToolbarClass (void);
//{{AFX_MSG(CFancyToolbar)
afx_msg void OnPaint();
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
////////////////////////////////////////////////////////
//
// Static Methods
//
static LRESULT CALLBACK fnMessageProc (HWND hWnd, UINT uiMessage, WPARAM wParam, LPARAM lParam);
private:
////////////////////////////////////////////////////////
//
// Private Data Types
//
typedef struct
{
HBITMAP hBMPUp;
HBITMAP hBMPDn;
int iCommandID;
STATE_INFO currentState;
BUTTON_TYPE buttonType;
BOOL bVisible;
} BUTTON_INFO;
////////////////////////////////////////////////////////
//
// Private Methods
//
BUTTON_INFO m_pButtonArray[10];
int m_iButtons;
int m_iCurrentButton;
};
#endif // __FANCYTOOLBAR_H