reman3/Rayman_X/cpa/tempgrp/OGD/src/EToolBar.cpp

358 lines
11 KiB
C++

//ROMTEAM WorldEditor
////////////////////////////////////////////////////////////////////////////////////////
// File : EToolBar.cpp
// Author : Cristian S
// Date : 97.11
// Description :
////////////////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
//ROMTEAM WorldEditor (Cristian Stegaru 11/97)
#include "3DGe_res.h" // main symbols
//ENDROMTEAM WorldEditor (Cristian Stegaru)
#include "EToolBar.h"
#include "ITView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
static UINT BASED_CODE ToolBarButtons[] =
{
// same order as in the bitmap 'IDR_EDIT_TOOLBAR'
ID_EDIT_SLIDER,
ID_SEPARATOR,
ID_STATIC_NAME,
ID_EDIT_NAME,
ID_STATIC_XNB,
ID_EDIT_XNB,
ID_STATIC_YNB,
ID_EDIT_YNB,
ID_SEPARATOR,
ID_BT_NEW,
ID_BT_SAVE,
ID_BT_HIDE,
ID_BT_UNDO,
ID_BT_REDO,
ID_BT_ONTOP,
ID_BT_EXIT
};
#define SLIDER_INDEX 0
#define SLIDER_BITMAP 0
#define SLIDER_WIDTH 100
#define SLIDER_HEIGHT 150
#define STATIC_NAME_INDEX 2
#define STATIC_NAME_BITMAP 1
#define STATIC_NAME_WIDTH 50
#define STATIC_NAME_HEIGHT 20
#define EDIT_NAME_INDEX 3
#define EDIT_NAME_BITMAP 2
#define EDIT_NAME_WIDTH 80
#define EDIT_NAME_HEIGHT 20
#define STATIC_XNB_INDEX 4
#define STATIC_XNB_BITMAP 3
#define STATIC_XNB_WIDTH 40
#define STATIC_XNB_HEIGHT 20
#define EDIT_XNB_INDEX 5
#define EDIT_XNB_BITMAP 4
#define EDIT_XNB_WIDTH 40
#define EDIT_XNB_HEIGHT 20
#define STATIC_YNB_INDEX 6
#define STATIC_YNB_BITMAP 5
#define STATIC_YNB_WIDTH 40
#define STATIC_YNB_HEIGHT 20
#define EDIT_YNB_INDEX 7
#define EDIT_YNB_BITMAP 6
#define EDIT_YNB_WIDTH 40
#define EDIT_YNB_HEIGHT 20
#define EDIT_ONTOP_INDEX 14
#define EDIT_HIDE_INDEX 11
BEGIN_MESSAGE_MAP(CEditorToolBar, CToolBar)
//{{AFX_MSG_MAP(CEditorToolBar)
ON_WM_HSCROLL()
ON_WM_LBUTTONDBLCLK()
ON_WM_LBUTTONDOWN()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
#define DEFAULT_X 15
#define DEFAULT_Y 15
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Method : CEditorToolBar constructor
// Date : November 1997
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Description :
// Author : Stegaru Cristian
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Modification :
// Date :
// By :
//////////////////////////////////////////////////////////////////////////////////////////////////////
CEditorToolBar::CEditorToolBar ()
{
m_iXNb = DEFAULT_X;
m_iYNb = DEFAULT_Y;
m_csName.LoadString (IDS_DEFAULT_ITNAME);
}
CEditorToolBar::~CEditorToolBar ()
{
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Method : Init
// Date : November 1997
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Description :
// Author : Stegaru Cristian
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Modification :
// Date :
// By :
//////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL CEditorToolBar::Init (CWnd *pParent)
{
DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_SIZE_DYNAMIC | CBRS_TOOLTIPS | CBRS_FLYBY;
if (!Create (pParent, dwStyle, IDW_TOOLBAR) || !LoadBitmap(IDR_EDIT_TOOLBAR))
return FALSE;
if(!SetButtons(ToolBarButtons, sizeof(ToolBarButtons)/sizeof(UINT)))
return FALSE;
CRect sliderRect (-SLIDER_WIDTH, -SLIDER_HEIGHT, 0, 0);
CRect staticNameRect (-STATIC_NAME_WIDTH, -STATIC_NAME_HEIGHT, 0, 0);
CRect editNameRect (-EDIT_NAME_WIDTH, -EDIT_NAME_HEIGHT, 0, 0);
CRect xnbRect (-STATIC_XNB_WIDTH, -STATIC_XNB_HEIGHT, 0, 0);
CRect ynbRect (-STATIC_YNB_WIDTH, -STATIC_YNB_HEIGHT, 0, 0);
DWORD dwStaticStyle = WS_CHILD | SS_CENTER;
DWORD dwEditStyle = WS_CHILD | ES_LEFT | ES_AUTOHSCROLL | WS_TABSTOP | WS_BORDER;
DWORD dwSliderStyle = WS_CHILD | TBS_HORZ | TBS_NOTICKS;
if (!m_stName.Create ("Name:", dwStaticStyle, staticNameRect, this, IDC_STATIC_NAME) ||
!m_stXNb.Create ("XNb:", dwStaticStyle, xnbRect, this, IDC_STATIC_XNB) ||
!m_stYNb.Create ("YNb:", dwStaticStyle, ynbRect, this, IDC_STATIC_YNB) ||
!m_edName.Create (dwEditStyle, editNameRect, this, IDC_EDIT_NAME) ||
!m_edXNb.Create (dwEditStyle, xnbRect, this, IDC_EDIT_XNB) ||
!m_edYNb.Create (dwEditStyle, ynbRect, this, IDC_EDIT_YNB) ||
!m_Slider.Create (dwSliderStyle, sliderRect, this, IDC_SLIDER))
return FALSE;
SetButtonInfo(STATIC_NAME_INDEX, IDC_STATIC_NAME, TBBS_SEPARATOR, STATIC_NAME_WIDTH);
SetButtonInfo(STATIC_XNB_INDEX, IDC_STATIC_XNB, TBBS_SEPARATOR, STATIC_XNB_WIDTH);
SetButtonInfo(STATIC_YNB_INDEX, IDC_STATIC_YNB, TBBS_SEPARATOR, STATIC_YNB_WIDTH);
SetButtonInfo(EDIT_NAME_INDEX, IDC_EDIT_NAME, TBBS_SEPARATOR, EDIT_NAME_WIDTH);
SetButtonInfo(EDIT_XNB_INDEX, IDC_EDIT_XNB, TBBS_SEPARATOR, EDIT_XNB_WIDTH);
SetButtonInfo(EDIT_YNB_INDEX, IDC_EDIT_YNB, TBBS_SEPARATOR, EDIT_YNB_WIDTH);
SetButtonInfo(SLIDER_INDEX, IDC_SLIDER, TBBS_SEPARATOR, SLIDER_WIDTH);
UINT uID = 0, uStyle = 0;
int iImage = 0;
GetButtonInfo (EDIT_ONTOP_INDEX, uID, uStyle, iImage);
SetButtonInfo (EDIT_ONTOP_INDEX, uID, uStyle | TBBS_CHECKBOX, iImage);
GetButtonInfo (EDIT_HIDE_INDEX, uID, uStyle, iImage);
SetButtonInfo (EDIT_HIDE_INDEX, uID, uStyle | TBBS_CHECKBOX, iImage);
if (NULL != m_stName.m_hWnd)
{
CRect rect;
GetItemRect(STATIC_NAME_INDEX, rect);
m_stName.SetWindowPos(NULL, rect.left, rect.top, 0, 0, SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOCOPYBITS);
m_stName.ShowWindow(SW_SHOW);
}
if (NULL != m_stXNb.m_hWnd)
{
CRect rect;
GetItemRect(STATIC_XNB_INDEX, rect);
m_stXNb.SetWindowPos(NULL, rect.left, rect.top, 0, 0, SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOCOPYBITS);
m_stXNb.ShowWindow(SW_SHOW);
}
if (NULL != m_stYNb.m_hWnd)
{
CRect rect;
GetItemRect(STATIC_YNB_INDEX, rect);
m_stYNb.SetWindowPos(NULL, rect.left, rect.top, 0, 0, SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOCOPYBITS);
m_stYNb.ShowWindow(SW_SHOW);
}
if (NULL != m_edName.m_hWnd)
{
CRect rect;
GetItemRect(EDIT_NAME_INDEX, rect);
m_edName.SetWindowPos(NULL, rect.left, rect.top, 0, 0, SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOCOPYBITS);
m_edName.ShowWindow(SW_SHOW);
}
if (NULL != m_edXNb.m_hWnd)
{
CRect rect;
GetItemRect(EDIT_XNB_INDEX, rect);
m_edXNb.SetWindowPos(NULL, rect.left, rect.top, 0, 0, SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOCOPYBITS);
m_edXNb.ShowWindow(SW_SHOW);
}
if (NULL != m_edYNb.m_hWnd)
{
CRect rect;
GetItemRect(EDIT_YNB_INDEX, rect);
m_edYNb.SetWindowPos(NULL, rect.left, rect.top, 0, 0, SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOCOPYBITS);
m_edYNb.ShowWindow(SW_SHOW);
}
if (NULL != m_Slider.m_hWnd)
{
CRect rect;
GetItemRect(SLIDER_INDEX, rect);
m_Slider.SetWindowPos(NULL, rect.left, rect.top, 0, 0, SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOCOPYBITS);
m_Slider.ShowWindow(SW_SHOW);
}
UpdateData (FALSE);
return TRUE;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Method : OnHScroll
// Date : November 1997
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Description :
// Author : Stegaru Cristian
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Modification :
// Date :
// By :
//////////////////////////////////////////////////////////////////////////////////////////////////////
void CEditorToolBar::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
int min, max;
CSliderCtrl *sl = (CSliderCtrl*)pScrollBar;
sl->GetRange(min, max);
GetView ()->SetLinearity((float)sl->GetPos()/(max-min));
CToolBar::OnHScroll(nSBCode, nPos, pScrollBar);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Method : GetView
// Date : November 1997
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Description :
// Author : Stegaru Cristian
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Modification :
// Date :
// By :
//////////////////////////////////////////////////////////////////////////////////////////////////////
CIndexedTriangleView* CEditorToolBar::GetView ()
{
CWnd *pDockBar = GetParent ();
ASSERT (pDockBar);
CFrameWnd *pFrameWnd = (CFrameWnd*)pDockBar->GetParent ();
ASSERT (pFrameWnd);
return (CIndexedTriangleView*)pFrameWnd->GetActiveView();
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Method : OnLButtonDblClk
// Date : November 1997
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Description :
// Author : Stegaru Cristian
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Modification :
// Date :
// By :
//////////////////////////////////////////////////////////////////////////////////////////////////////
void CEditorToolBar::OnLButtonDblClk(UINT nFlags, CPoint point)
{
//don't allow floating toolbar
CWnd::OnLButtonDblClk(nFlags, point);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Method : OnLButtonDown
// Date : November 1997
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Description :
// Author : Stegaru Cristian
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Modification :
// Date :
// By :
//////////////////////////////////////////////////////////////////////////////////////////////////////
void CEditorToolBar::OnLButtonDown(UINT nFlags, CPoint point)
{
//don't allow floating toolbar
CWnd::OnLButtonDown(nFlags, point);
}
#define MAX_CHARS 30
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Method : UpdateData
// Date : November 1997
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Description :
// Author : Stegaru Cristian
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Modification :
// Date :
// By :
//////////////////////////////////////////////////////////////////////////////////////////////////////
void CEditorToolBar::UpdateData (BOOL bGet/* = TRUE*/)
{
CString csXNb, csYNb;
if (bGet)
{
GetDlgItem (IDC_EDIT_XNB)->GetWindowText (csXNb);
m_iXNb = atoi (csXNb);
GetDlgItem (IDC_EDIT_YNB)->GetWindowText (csYNb);
m_iYNb = atoi (csYNb);
GetDlgItem (IDC_EDIT_NAME)->GetWindowText (m_csName);
//ANNECY Shaitan Correction 03/03/98 {
while (((m_iXNb + 1)*(m_iYNb +1)) >= 2500)
{
if (m_iXNb > m_iYNb)
m_iXNb--;
else
m_iYNb--;
}
UpdateData(FALSE);
//ENDANNECY Shaitan Correction }
}
else
{
itoa (m_iXNb, csXNb.GetBuffer (MAX_CHARS), 10);
GetDlgItem (IDC_EDIT_XNB)->SetWindowText (csXNb);
itoa (m_iYNb, csYNb.GetBuffer (MAX_CHARS), 10);
GetDlgItem (IDC_EDIT_YNB)->SetWindowText (csYNb);
GetDlgItem (IDC_EDIT_NAME)->SetWindowText (m_csName);
}
}