reman3/Rayman_X/cpa/tempgrp/ITF/cpawbuto.cpp

234 lines
7.1 KiB
C++

/*=========================================================================
* CPAWButo.cpp : Implementation of Window Button for the PopUpToolBar.
* This is a part of the PCA project.
*
* Version 1.0
* Creation date 26/06/96
* Revision date
*
*
* (c) Ubi Studios 1996
*=======================================================================*/
#include "stdafx.h"
#ifdef ACTIVE_EDITOR
#include "itf/CPAPopTB.hpp"
#include "itf/CPAWButo.hpp"
#include "itf/CPARes.h"
#include "itf/frmbsmn.hpp"
/////////////////////////////////////////////////////////////////////////////
// CPA_WndButton
CPA_WndButton::CPA_WndButton()
{
}
CPA_WndButton::~CPA_WndButton()
{
}
BEGIN_MESSAGE_MAP(CPA_WndButton, CWnd)
//{{AFX_MSG_MAP(CPA_WndButton)
ON_WM_CREATE()
ON_WM_SIZE()
ON_WM_LBUTTONUP()
ON_WM_MOUSEMOVE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPA_WndButton message handlers
int CPA_WndButton::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CWnd::OnCreate(lpCreateStruct) == -1)
return -1;
return 0;
}
//////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////
int CPA_WndButton::CreateToolBarCtrl()
{
long i;
TBBUTTON a_stTBBut[C_MAX_BUTTON_PER_FAMILY];
m_oToolBarCtrl.AddBitmap(m_lNbButtonsTotal,m_lIdResource);
for (i = 0 ; i < m_lNbButtons ; i++ )
{
if ( m_a_stButtons[i].lId != NULL)
{
a_stTBBut[i].fsState = (m_a_stButtons[i].bPermit)?TBSTATE_ENABLED:TBSTATE_INDETERMINATE;// button state
a_stTBBut[i].fsStyle = TBSTYLE_BUTTON; // button style--see below
a_stTBBut[i].dwData = NULL; // application-defined value
a_stTBBut[i].iString = NULL; // zero-based index of button label string
if ( m_a_stButtons[i].lId == ID_SEPARATOR )
{
a_stTBBut[i].iBitmap = 0 ;
a_stTBBut[i].idCommand = 0 ;
a_stTBBut[i].fsStyle = TBSTYLE_SEP ;
}
else
{
a_stTBBut[i].iBitmap = m_a_stButtons[i].lIndexBitmap;
a_stTBBut[i].idCommand = m_a_stButtons[i].lId ;
}
}
}
m_oToolBarCtrl.AddButtons(m_lNbButtons, a_stTBBut );
m_oToolBarCtrl.AutoSize();
return 0;
}
///////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////
// Create the toolbar in the parent FrameWnd.
int CPA_WndButton::CreateToolBar()
{
CRect stRect;
if (!m_oToolBarCtrl.Create(CCS_NODIVIDER|WS_CHILD|WS_VISIBLE,CRect(0,0,0,0),
this,m_lIdResource))
{
TRACE0("Failed to create toolbar\n");
return -1;
}
m_p_oPopUpTBParent->GetItemRect(0,&stRect);
m_oToolBarCtrl.SetButtonSize(CSize(stRect.right-stRect.left-7, stRect.bottom-stRect.top-6));
m_oToolBarCtrl.SetBitmapSize(CSize(stRect.right-stRect.left-7, stRect.bottom-stRect.top-6));
CreateToolBarCtrl();
return 0;
}
//////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////
void CPA_WndButton::CreateWndButton(CPA_PopUpToolBar *p_oPopUpTB,
long lWndPosX,
long lWndPosY,
tdstButton a_stButtons[],
long lNbButtons,
long lFamily,
long lNbButtonsTotal,
long lIdResource)
{
CRect stRect;
CWnd *p_oWnd = p_oPopUpTB->GetParent()->GetParent();
CPoint pt(lWndPosX, lWndPosY);
p_oWnd->ScreenToClient(&pt);
Create( NULL, "toto",WS_BORDER|WS_VISIBLE|WS_CHILD,
CRect(pt.x,pt.y,0,0), p_oWnd, lIdResource);
g_bMouseLocked = TRUE;
m_lNbButtonsTotal = lNbButtonsTotal;
m_lIdResource = lIdResource;
m_lFamily = lFamily;
m_lNbButtons = lNbButtons;
m_p_oPopUpTBParent = p_oPopUpTB;
m_lIdChosenButton = 0;
memcpy(m_a_stButtons, a_stButtons,m_lNbButtons * sizeof(tdstButton));
CreateToolBar();
m_oToolBarCtrl.GetItemRect(0,&stRect);
SetWindowPos(&wndTopMost,0,0,m_lNbButtons*stRect.right,stRect.bottom,SWP_NOMOVE|SWP_NOZORDER|SWP_SHOWWINDOW);
m_p_oGrabCapture();
SetFocus();
}
//////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////
void CPA_WndButton::OnSize(UINT nType, int cx, int cy)
{
CWnd::OnSize(nType, cx, cy);
if (m_oToolBarCtrl.m_hWnd != NULL)
m_oToolBarCtrl.AutoSize();
}
//////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////
void CPA_WndButton::OnLButtonUp( UINT nflags, CPoint oPoint )
{
CWnd::OnLButtonUp(nflags,oPoint);
int i;
long lParam;
if(m_p_oPopUpTBParent->m_bJustPressed)
{
m_p_oPopUpTBParent->m_bJustPressed = FALSE;
if(m_p_oPopUpTBParent->m_bCurrentButtonAlone)
{
m_p_oPopUpTBParent->PressButton(m_p_oPopUpTBParent->m_lIdCurrentButton, FALSE);
m_p_oPopUpTBParent->GetParent()->SendMessage(WM_COMMAND, m_p_oPopUpTBParent->m_lIdCurrentButton);
DestroyWindow();
g_bMouseLocked = FALSE;
}
return;
}
for(i = 0; i < m_oToolBarCtrl.GetButtonCount(); i++)
{
if(m_oToolBarCtrl.IsButtonPressed(m_a_stButtons[i].lId))
{
m_lIdChosenButton = m_a_stButtons[i].lId;
break;
}
}
((FRMBaseMenu*)(m_p_oPopUpTBParent->GetParent()->GetParent()))->UpdateStatus(NULL,
C_STATUSPANE_INFOS,
C_STATUS_NORMAL);
m_p_oSurrenderCapture();
// tells popuptoolbar about buttonup...
lParam = (oPoint.x + (oPoint.y << 16));
m_p_oPopUpTBParent->SendMessage(WM_LBUTTONUP,nflags,lParam);
DestroyWindow();
g_bMouseLocked = FALSE;
}
//////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////
void CPA_WndButton::OnMouseMove( UINT nflags, CPoint oPoint )
{
CRect rect;
int i;
// first, release the buttons if necessary
for(i = 0; i < m_lNbButtons; i++)
{
m_oToolBarCtrl.GetItemRect(i, &rect);
// if the mouse is not on the button and if the button is pressed -> release it
if (m_oToolBarCtrl.IsButtonPressed(m_a_stButtons[i].lId) && !rect.PtInRect(oPoint))
{
m_oToolBarCtrl.PressButton( m_a_stButtons[i].lId, FALSE);
((FRMBaseMenu*)(m_p_oPopUpTBParent->GetParent()->GetParent()))->UpdateStatus(NULL,
C_STATUSPANE_INFOS,
C_STATUS_NORMAL);
}
}
//then, press the the good button if necessary
for(i = 0; i < m_lNbButtons; i++)
{
m_oToolBarCtrl.GetItemRect(i, &rect);
// if the mouse is on the button and if the button is not pressed -> press it
if (rect.PtInRect(oPoint) && !m_oToolBarCtrl.IsButtonPressed(m_a_stButtons[i].lId))
{
if (m_oToolBarCtrl.IsButtonEnabled(m_a_stButtons[i].lId))
{
m_oToolBarCtrl.PressButton(m_a_stButtons[i].lId, TRUE);
((FRMBaseMenu*)(m_p_oPopUpTBParent->GetParent()->GetParent()))->UpdateStatus(m_a_stButtons[i].szTipText,
C_STATUSPANE_INFOS,
C_STATUS_NORMAL);
}
}
}
}
#endif // ACTIVE_EDITOR