234 lines
7.1 KiB
C++
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
|