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

1292 lines
38 KiB
C++

//=========================================================================
// FRMBSMN.cpp : implementation of the FRMBaseMenu class
// This is a part of the CPA project.
//
// Version 1.0
// Creation date 11/12/96
// Revision date
//
// (c) Ubi Studios 1996
//
// DO NOT MODIFY THAT FILE. IF SOMETHING NEEDS TO BE CHANGE, PLEASE CONTACT
// VINCENT GRECO OR CHRISTOPHE BEAUDET.
//=========================================================================
#include "stdafx.h"
#include "acp_base.h"
#include "direct.h"
#include "itf/CPARes.h"
#include "errint.h"
#include "mmgint.h"
#include "itf/FRMBase.hpp"
#include "itf/FRMBsMn.hpp"
#include "itf/CPAProj.hpp"
#include "itf/A3dkeyal.hpp"
#include "itf/CustomID.h"
#include "itf/CPASubM.hpp"
#include "itf/CPAMWorl.hpp"
#include "itf/CPAKaCnf.hpp"
#include "itf/CoheMngr.hpp"
#include "itf/CPACont.hpp"
#include "itf/DEVSgl3D.hpp"
#include "itf/stddllid.h"
#include "itf/camdllb.hpp"
#include "itf/cpainter.hpp"
#include "itf/cpaspec.hpp"
#include "SaveMngr.h"
#include "itf/namemngr.hpp"
//nclude "SCR_Lib.h"
#ifdef ACTIVE_EDITOR
#define M_GetObjectDLLList() (M_GetMainWorld()->GetListOfObjectDLLBase())
#define M_GetToolDLLList() (M_GetMainWorld()->GetListOfToolDLLBase())
#define M_GetEditorList() (M_GetMainWorld()->GetListOfEditorBase())
//
#define M_PosMenuFile 0
#define M_PosMenuEdit 1
#define M_PosMenuEditor 2
#define M_PosMenuTool 3
//ANNECY Shaitan NewInterface 24/03/98 {
#define M_PosMenu3DView 4
#define M_PosMenuSpecific 5
#define M_PosMenuPreference 6
//ENDANNECY Shaitan NewInterface }
#define M_PosMenuHelp (m_oGeneralMenu.GetMenuItemCount() - 1)
#define M_IsGeneralSubMenu(pMenu,Pos) ( (m_oGeneralMenu.GetSubMenu(Pos)) && (pMenu->m_hMenu == m_oGeneralMenu.GetSubMenu(Pos)->m_hMenu))
tdstEDTInfo g_stInterfaceInfo;
/////////////////////////////////////////////////////////////////////////////
// FRMBaseMenu
IMPLEMENT_DYNCREATE(FRMBaseMenu, FRMBase)
BEGIN_MESSAGE_MAP(FRMBaseMenu, FRMBase)
//{{AFX_MSG_MAP(FRMBaseMenu)
ON_WM_CREATE()
ON_WM_INITMENU()
ON_WM_INITMENUPOPUP()
ON_COMMAND(CPA_IDM_SAVEALL, OnSaveAll)
ON_COMMAND(CPA_IDM_INITMAP, OnInitMap)
ON_COMMAND(CPA_IDCB_UNDO, OnUndo)
ON_COMMAND(CPA_IDCB_REDO, OnRedo)
ON_COMMAND(CPA_IDCB_SAVEALL, OnSaveAll)
ON_COMMAND(CPA_IDCB_OPTIONS, OnOptions)
ON_WM_SYSCOMMAND()
ON_WM_NCLBUTTONDBLCLK()
ON_WM_DRAWITEM()
ON_WM_ACTIVATE()
ON_WM_ENTERMENULOOP()
ON_WM_EXITMENULOOP()
ON_WM_MOUSEWHEEL()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// FRMBaseMenu construction/destruction
FRMBaseMenu::FRMBaseMenu()
{
//statement
m_p_oEditSubMenu = new EDT_SubMenu(C_SubMenuEdit,C_EditMenuIDStart);
m_p_oEditorSubMenu = new EDT_SubMenu(C_SubMenuEditor,C_EditorMenuIDStart);
m_p_oToolSubMenu = new EDT_SubMenu(C_SubMenuTool,C_ToolMenuIDStart);
//ANNECY Shaitan NewInterface 24/03/98 {
m_p_o3DViewSubMenu = new EDT_SubMenu(C_SubMenu3DView,C_3DViewMenuIDStart);
m_p_oSpecificSubMenu = new EDT_SubMenu(C_SubMenuSpecific,C_SpecificMenuIDStart);
//ENDANNECY Shaitan NewInterface }
m_p_oPrefSubMenu = new EDT_SubMenu(C_SubMenuPreference,C_PrefMenuIDStart);
m_bEnableEditors = FALSE;
mbWantSplit = FALSE;
mbWantNew = FALSE;
mbWantTile = FALSE;
mbWantClose = FALSE;
g_stInterfaceInfo.csName = "Interface";
g_stInterfaceInfo.csAuthor = "Chantal Oury";
g_stInterfaceInfo.csVersion = "V 6.0.4 31/03/99";
g_stInterfaceInfo.csFrenchHelpFile = "General.hlp";
g_stInterfaceInfo.csEnglishHelpFile = "";
}
FRMBaseMenu::~FRMBaseMenu()
{
//statement
delete m_p_oEditSubMenu;
delete m_p_oEditorSubMenu;
delete m_p_oToolSubMenu;
//ANNECY Shaitan NewInterface 24/03/98 {
delete m_p_o3DViewSubMenu;
delete m_p_oSpecificSubMenu;
//ENDANNECY Shaitan NewInterface }
delete m_p_oPrefSubMenu;
}
void FRMBaseMenu::OnActivate(UINT State, CWnd *pOther, BOOL bMini)
{
if(pOther == NULL)
{
g_oBaseFrame.OnActivate(State, pOther, bMini);
if(State != WA_INACTIVE)
g_oBaseFrame.BringWindowToTop();
}
else
CFrameWnd::OnActivate(State, pOther, bMini);
}
////
CPA_Interface * FRMBaseMenu::GetInterface (void)
{
return GetMultiDevice()->GetInterface();
}
////
BOOL FRMBaseMenu::CreateBase
(
LPCTSTR _lpStr,
int,
int,
CPA_MainWorld* _p_oMainWorld
)
{
BOOL Ret;
CCreateContext stContext;
stContext.m_pNewViewClass = RUNTIME_CLASS(DEV_MultiDevice3D);
stContext.m_pCurrentDoc = M_GetMainWnd()->GetActiveView()->GetDocument();
Ret = FRMBase::CreateBase(_lpStr, 2, 2, _p_oMainWorld, &stContext);
SetParent(&g_oBaseFrame);
return Ret;
}
////
BOOL FRMBaseMenu::CreateBase(LPCTSTR _lpStr, CPA_MainWorld* _p_oMainWorld)
{
BOOL Ret;
CCreateContext stContext;
stContext.m_pNewViewClass = RUNTIME_CLASS(DEV_MultiDevice3D);
stContext.m_pCurrentDoc = M_GetMainWnd()->GetActiveView()->GetDocument();
Ret = FRMBase::CreateBase(_lpStr, 2, 2, _p_oMainWorld, &stContext);
SetParent(&g_oBaseFrame);
return Ret;
}
////
typedef struct tdstUpdateStat_
{
char a_szText[500];
int iType;
} tdstUpdateStat;
tdstUpdateStat g_a_UpdateStat[20];
afx_msg void FRMBaseMenu::OnDrawItem(int nID, LPDRAWITEMSTRUCT pSt)
{
if(*g_a_UpdateStat[pSt->itemID].a_szText)
{
CDC *pDC = m_oStatusBar.GetDC();
CBrush oBrush;
CRect oRect;
CFont xFnt, *xFntPrev = NULL;
PLOGFONT plf = (PLOGFONT) LocalAlloc(LPTR, sizeof(LOGFONT));
lstrcpy(plf->lfFaceName, "Arial");
plf->lfWeight = (g_a_UpdateStat[pSt->itemID].iType == C_STATUS_NORMAL) ? FW_NORMAL : FW_BOLD;
plf->lfHeight = 15;
plf->lfEscapement = 0;
if (xFnt.CreateFontIndirect(plf))
xFntPrev = pDC->SelectObject(&xFnt);
switch(g_a_UpdateStat[pSt->itemID].iType)
{
case C_STATUS_NORMAL:
pDC->SetTextColor(RGB(0, 0, 0));
oBrush.CreateSolidBrush(RGB(200, 200, 200));
break;
case C_STATUS_WARNING:
pDC->SetTextColor(RGB(255, 255, 255));
oBrush.CreateSolidBrush(RGB(0, 0, 100));
break;
case C_STATUS_ERROR:
pDC->SetTextColor(RGB(255, 255, 255));
oBrush.CreateSolidBrush(RGB(100, 0, 0));
break;
}
pDC->SetBkMode(TRANSPARENT);
pDC->FillRect(&pSt->rcItem, &oBrush);
oRect.left = pSt->rcItem.left + 5;
oRect.top = pSt->rcItem.top - 1;
oRect.right = pSt->rcItem.right;
oRect.bottom = pSt->rcItem.bottom;
pDC->DrawText(g_a_UpdateStat[pSt->itemID].a_szText, strlen(g_a_UpdateStat[pSt->itemID].a_szText), &oRect, DT_LEFT|DT_TOP|DT_EXTERNALLEADING);
if ( xFntPrev )
{
pDC->SelectObject(xFntPrev);
xFnt.DeleteObject();
}
//do not forget to free the memory for the font
LocalFree(plf);
// do not forget to release the Device context !!!
m_oStatusBar . ReleaseDC (pDC);
}
}
void FRMBaseMenu::UpdateStatus(char *_p_szString, int _iPane, int _iType)
{
CStatusBarCtrl &Stat = m_oStatusBar.GetStatusBarCtrl();
BOOL bCanDisplay = ::IsWindow(Stat.m_hWnd);
/* if(_iType == C_STATUS_NORMAL)
Stat.SetText(_p_szString, _iPane, 0);
else
{
*/ if(_p_szString)
{
strcpy(g_a_UpdateStat[_iPane].a_szText, _p_szString);
g_a_UpdateStat[_iPane].iType = _iType;
}
else
*g_a_UpdateStat[_iPane].a_szText = '\0';
if ( bCanDisplay )
Stat.SetText(_p_szString, _iPane, SBT_OWNERDRAW);
// }
if((_iType == C_STATUS_ERROR) && (_p_szString) && (*_p_szString))
::Beep(100, 250);
if ( bCanDisplay )
Stat.UpdateWindow();
}
BOOL FRMBaseMenu::fn_bCanClose(void)
{
// Ask DLLs if it's ok to close
if (M_GetListOfAllDLL()->CallAcceptToExit() == FALSE)
return FALSE;
// They are some datas not saved ?
if(SCR_g_st_Ntfy_Array.uiNumValues)
{
if(MessageBox("Some datas have not been saved. Exit anyway ?", NULL, MB_ICONQUESTION|MB_YESNO) == IDNO)
return FALSE;
}
// We can close
return TRUE;
}
int FRMBaseMenu::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
//
// Create status bar (from MFC to avoid size box)
//
ModifyStyle(WS_THICKFRAME, 0);
m_oStatusBar.Create(this, WS_CHILD | CBRS_BOTTOM);
ModifyStyle(0, WS_THICKFRAME);
UINT ar[2] = {CPA_IDR_MAINFRAME, CPA_IDR_MAINFRAME};
m_oStatusBar.SetIndicators(ar, 2);
m_oStatusBar.SetPaneInfo(0, CPA_IDR_MAINFRAME, SBPS_NORMAL, 170);
m_oStatusBar.SetPaneInfo(1, CPA_IDR_MAINFRAME, SBPS_NOBORDERS|SBPS_STRETCH, 0);
UpdateStatus(NULL, 0, C_STATUS_NORMAL);
UpdateStatus(NULL, 1, C_STATUS_NORMAL);
//
// Create general tool bar. By default, init and hide.
//
if (!m_oGeneralDialogBar.Create(this, CPA_IDD_GENERALDIALOGBAR, CBRS_ALIGN_TOP, 5000))
{
TRACE0("Failed to create dialog bar m_oGeneralDialogBar\n");
return -1;
}
m_oGeneralMenu.LoadMenu(CPA_IDM_GENERALMENU);
return 0;
}
////
void FRMBaseMenu::OnNcLButtonDblClk(UINT nID, CPoint point)
{
if(M_bEditorsActive())
return;
CFrameWnd::OnNcLButtonDblClk(nID, point);
}
////
void FRMBaseMenu::OnSysCommand(UINT nID, LPARAM lParam)
{
if(M_bEditorsActive())
{
if (
(nID == SC_CLOSE) ||
(nID == SC_MAXIMIZE) ||
(nID == SC_MINIMIZE) ||
(nID == SC_RESTORE)
)
return;
}
CFrameWnd::OnSysCommand(nID, lParam);
}
////
void FRMBaseMenu::fn_vOnActivate(void)
{
m_p_oMainWorld->fn_vSetCurrentFRMBaseMenu(this);
}
////
void FRMBaseMenu::fn_vInitGeneralMenuWithContext(void)
{
UINT uiSTATE;
uiSTATE = M_bEditorsActive() ? MF_BYPOSITION|MF_ENABLED : MF_BYPOSITION|MF_GRAYED;
m_oGeneralMenu.EnableMenuItem(M_PosMenuFile, uiSTATE);
m_oGeneralMenu.EnableMenuItem(M_PosMenuEdit, uiSTATE);
m_oGeneralMenu.EnableMenuItem(M_PosMenuEditor, uiSTATE);
m_oGeneralMenu.EnableMenuItem(M_PosMenuTool, uiSTATE);
//ANNECY Shaitan NewInterface 24/03/98 {
m_oGeneralMenu.EnableMenuItem(M_PosMenu3DView, uiSTATE);
m_oGeneralMenu.EnableMenuItem(M_PosMenuSpecific, uiSTATE);
//ENDANNECY Shaitan NewInterface }
m_oGeneralMenu.EnableMenuItem(M_PosMenuPreference, uiSTATE);
m_oGeneralMenu.EnableMenuItem(M_PosMenuHelp, uiSTATE);
}
////
void FRMBaseMenu::OnUndo(void)
{
M_GetEditManager()->Undo();
fn_vInitGeneralDialogBarWithContext();
}
void FRMBaseMenu::OnRedo(void)
{
M_GetEditManager()->Redo();
fn_vInitGeneralDialogBarWithContext();
}
BOOL FRMBaseMenu::OnCommand(WPARAM _wParam, LPARAM _lParam)
{
UINT IDCmdMsg = LOWORD(_wParam);
UINT IDRealCmdMsg;
CPA_EditorBase *pOwner;
////////////////////
//Begin Mircea Dunka 31 Aug 1998 - DialogBar interface (no notify!)
UINT IDNotifyMsg = HIWORD(_wParam);
if(IDNotifyMsg != 0)
return TRUE;
// Editor buttons
if ((IDCmdMsg >= C_EditorButtonIDStart) &&
(IDCmdMsg < C_EditorButtonIDEnd))
{
//I have to re-initialize the "editors" menu in order to use the buttons :)
m_p_oEditorSubMenu->Clear();
// call Hierarchy Editor
M_GetEditor()->fn_bDefineSubMenu(m_p_oEditorSubMenu);
// call Objects DLLs
AddItemToPopupMenu(m_p_oEditorSubMenu,(CPA_List<CPA_DLLBase>*)M_GetObjectDLLList());
// call Tool DLLs
AddItemToPopupMenu(m_p_oEditorSubMenu,(CPA_List<CPA_DLLBase>*)M_GetToolDLLList());
//send the same command as the corresponding menu item
IDCmdMsg = IDCmdMsg - C_EditorButtonIDStart + C_EditorMenuIDStart;
m_p_oEditorSubMenu->_OnCommand(IDCmdMsg);
return TRUE;
}
//end Mircea Dunka 31 Aug 1998 - DialogBar interface
// Edit PopupMenu
if ((IDCmdMsg >= C_EditMenuIDStart) &&
(IDCmdMsg < C_EditMenuIDEnd))
{
// undo
if (IDCmdMsg == C_EditMenuIDUndo )
{
M_GetEditManager()->Undo();
fn_vInitGeneralDialogBarWithContext();
}
// redo
else if (IDCmdMsg == C_EditMenuIDRedo )
{
M_GetEditManager()->Redo();
fn_vInitGeneralDialogBarWithContext();
}
//ANNECY Shaitan NewInterface 24/03/98 {
// Interface commands
else if ((m_p_oEditSubMenu->fn_bFindCmdID(IDCmdMsg,&pOwner,&IDRealCmdMsg))&&(pOwner == NULL))
GetInterface()->_OnSubMenuCommand(m_p_oEditSubMenu, IDRealCmdMsg);
// custom commands
else
//ENDANNECY Shaitan NewInterface }
m_p_oEditSubMenu->_OnCommand(IDCmdMsg);
// message processed
return TRUE;
}
// Editor PopupMenu
if ((IDCmdMsg >= C_EditorMenuIDStart) &&
(IDCmdMsg < C_EditorMenuIDEnd))
{
m_p_oEditorSubMenu->_OnCommand(IDCmdMsg);
return TRUE;
}
// Tools PopupMenu
if ((IDCmdMsg >= C_ToolMenuIDStart) &&
(IDCmdMsg < C_ToolMenuIDEnd))
{
//ANNECY Shaitan NewInterface 24/03/98 {
// Interface commands
if ((m_p_oToolSubMenu->fn_bFindCmdID(IDCmdMsg,&pOwner,&IDRealCmdMsg))&&(pOwner == NULL))
GetInterface()->_OnSubMenuCommand(m_p_oToolSubMenu, IDRealCmdMsg);
// Editors commands
else
//ENDANNECY Shaitan NewInterface }
m_p_oToolSubMenu->_OnCommand(IDCmdMsg);
return TRUE;
}
//ANNECY Shaitan NewInterface 24/03/98 {
// Load PopupMenu
/*
if ((IDCmdMsg >= C_LoadMenuIDStart) &&
(IDCmdMsg < C_LoadMenuIDEnd))
{
m_p_oLoadSubMenu->_OnCommand(IDCmdMsg);
return TRUE;
}
*/
// 3DView PopupMenu
if ((IDCmdMsg >= C_3DViewMenuIDStart) &&
(IDCmdMsg < C_3DViewMenuIDEnd))
{
// Interface commands
if ((m_p_o3DViewSubMenu->fn_bFindCmdID(IDCmdMsg,&pOwner,&IDRealCmdMsg))&&(pOwner == NULL))
GetInterface()->_OnSubMenuCommand(m_p_o3DViewSubMenu, IDRealCmdMsg);
// Editors commands
else
m_p_o3DViewSubMenu->_OnCommand(IDCmdMsg);
return TRUE;
}
// Specific PopupMenu
if ((IDCmdMsg >= C_SpecificMenuIDStart) &&
(IDCmdMsg < C_SpecificMenuIDEnd))
{
m_p_oSpecificSubMenu->_OnCommand(IDCmdMsg);
return TRUE;
}
//ENDANNECY Shaitan NewInterface }
// Preferences PopupMenu
if ((IDCmdMsg >= C_PrefMenuIDStart) &&
(IDCmdMsg < C_PrefMenuIDEnd))
{
// undo
if (IDCmdMsg == C_PrefMenuIDStart )
GetInterface()->fn_vSaveDisplayMode();
else
m_p_oPrefSubMenu->_OnCommand(IDCmdMsg);
return TRUE;
}
// Help PopupMenu
if ((IDCmdMsg >= C_HelpMenuIDStart) &&
(IDCmdMsg < C_HelpMenuIDEnd))
{
fn_vActivateHelp(IDCmdMsg);
return TRUE;
}
// send message to contact
if ((GetMultiDevice())&&(GetMultiDevice()->GetContact()))
GetMultiDevice()->GetContact()->_OnCommand(IDCmdMsg);
// default handling
return FRMBase::OnCommand(_wParam,_lParam);
}
////
void FRMBaseMenu::OnInitMenu(CMenu *_pMenu)
{
CFrameWnd::OnInitMenu(_pMenu);
}
////
void FRMBaseMenu::OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu)
{
if( M_IsGeneralSubMenu(pPopupMenu,nIndex) )
{
CString oEntryName;
switch(nIndex)
{
case M_PosMenuEdit:
m_p_oEditSubMenu->Clear();
// add Undo entry
oEntryName = M_GetEditManager()->GetUndoName();
oEntryName += "\t";
oEntryName += M_GetMainApp()->mp_oAppKeyboard->mfn_oConvertIniStringToKeyString((const CString*)&CString("Undo"));
m_p_oEditSubMenu->AddAnEntry((CPA_DLLBase*)NULL,(char*)(LPCTSTR)oEntryName,0,FALSE,M_GetEditManager()->CanUndo());
// add Redo entry
oEntryName = M_GetEditManager()->GetRedoName();
oEntryName += "\t";
oEntryName += M_GetMainApp()->mp_oAppKeyboard->mfn_oConvertIniStringToKeyString((const CString*)&CString("Redo"));
m_p_oEditSubMenu->AddAnEntry((CPA_DLLBase*)NULL,(char*)(LPCTSTR)oEntryName,0,FALSE,M_GetEditManager()->CanRedo());
m_p_oEditSubMenu->AddASeparator();
//ANNECY Shaitan NewInterface 24/03/98 {
// interface
GetInterface()->fn_bDefineSubMenu(m_p_oEditSubMenu);
// Call Hierarchy Editor
M_GetEditor()->fn_bDefineSubMenu(m_p_oEditSubMenu);
//ENDANNECY Shaitan NewInterface }
// Build menu
m_p_oEditSubMenu->Build(pPopupMenu);
break;
case M_PosMenuEditor:
m_p_oEditorSubMenu->Clear();
// call Hierarchy Editor
M_GetEditor()->fn_bDefineSubMenu(m_p_oEditorSubMenu);
m_p_oEditorSubMenu->AddASeparator();
// call Objects DLLs
if( !AddItemToPopupMenu(m_p_oEditorSubMenu,(CPA_List<CPA_DLLBase>*)M_GetObjectDLLList()) )
m_p_oEditorSubMenu->AddAnEntry((CPA_DLLBase*)NULL, "No object editor", 0, FALSE, FALSE);
m_p_oEditorSubMenu->AddASeparator();
// call Tool DLLs
if( !AddItemToPopupMenu(m_p_oEditorSubMenu,(CPA_List<CPA_DLLBase>*)M_GetToolDLLList()) )
m_p_oEditorSubMenu->AddAnEntry((CPA_DLLBase*)NULL, "No tool editor", 0, FALSE, FALSE);
m_p_oEditorSubMenu->Build(pPopupMenu);
break;
case M_PosMenuTool:
m_p_oToolSubMenu->Clear();
//ANNECY Shaitan NewInterface 24/03/98 {
// load submenu
m_p_oLoadSubMenu = m_p_oToolSubMenu->fn_p_oGetNewSubMenu("Load",C_SubMenuLoad);
// objects DLLs
AddItemToPopupMenu(m_p_oLoadSubMenu,(CPA_List<CPA_DLLBase>*)M_GetObjectDLLList());
// tool DLLs
AddItemToPopupMenu(m_p_oLoadSubMenu,(CPA_List<CPA_DLLBase>*)M_GetToolDLLList());
m_p_oToolSubMenu->AddASubMenu(m_p_oLoadSubMenu);
// objects DLLs
AddItemToPopupMenu(m_p_oToolSubMenu,(CPA_List<CPA_DLLBase>*)M_GetObjectDLLList());
// tool DLLs
AddItemToPopupMenu(m_p_oToolSubMenu,(CPA_List<CPA_DLLBase>*)M_GetToolDLLList());
// interface entries
GetInterface()->fn_bDefineSubMenu(m_p_oToolSubMenu);
m_p_oToolSubMenu->Build(pPopupMenu);
break;
case M_PosMenu3DView:
m_p_o3DViewSubMenu->Clear();
// objects DLLs
AddItemToPopupMenu(m_p_o3DViewSubMenu,(CPA_List<CPA_DLLBase>*)M_GetObjectDLLList());
// tool DLLs
AddItemToPopupMenu(m_p_o3DViewSubMenu,(CPA_List<CPA_DLLBase>*)M_GetToolDLLList());
m_p_o3DViewSubMenu->AddASeparator();
// hierarchy editor
M_GetEditor()->fn_bDefineSubMenu(m_p_o3DViewSubMenu);
// interface
GetInterface()->fn_bDefineSubMenu(m_p_o3DViewSubMenu);
m_p_o3DViewSubMenu->Build(pPopupMenu);
break;
case M_PosMenuSpecific:
m_p_oSpecificSubMenu->Clear();
// only current editor
if (!M_GetCurrentEditor()->fn_bDefineSubMenu(m_p_oSpecificSubMenu))
m_p_oSpecificSubMenu->AddAnEntry((CPA_DLLBase*)NULL, "No Specific Entry", 0, FALSE, FALSE);
m_p_oSpecificSubMenu->Build(pPopupMenu);
break;
//ENDANNECY Shaitan NewInterface }
case M_PosMenuPreference:
m_p_oPrefSubMenu->Clear();
// add preference entry
m_p_oPrefSubMenu->AddAnEntry((CPA_DLLBase*)NULL, "Save Display Mode", 0, FALSE, TRUE);
m_p_oPrefSubMenu->AddASeparator();
// call current editor
if (!M_GetCurrentEditor()->fn_bDefineSubMenu(m_p_oPrefSubMenu))
m_p_oPrefSubMenu->AddAnEntry((CPA_DLLBase*)NULL, "No Preferences", 0, FALSE, FALSE);
m_p_oPrefSubMenu->Build(pPopupMenu);
break;
/* case M_PosMenuOption:
if (M_GetEditor()->GetSpecificEditor()->GetDisplayMode() == E_dm_DrawWorld)
{
m_oGeneralMenu.GetSubMenu(M_PosMenuOption)->CheckMenuItem(CPA_IDCB_DISPLAYWORLD, MF_BYCOMMAND|MF_CHECKED);
m_oGeneralMenu.GetSubMenu(M_PosMenuOption)->CheckMenuItem(CPA_IDCB_DISPLAYSECTOR, MF_BYCOMMAND|MF_UNCHECKED);
}
else
{
m_oGeneralMenu.GetSubMenu(M_PosMenuOption)->CheckMenuItem(CPA_IDCB_DISPLAYWORLD, MF_BYCOMMAND|MF_UNCHECKED);
m_oGeneralMenu.GetSubMenu(M_PosMenuOption)->CheckMenuItem(CPA_IDCB_DISPLAYSECTOR, MF_BYCOMMAND|MF_CHECKED);
}
CFrameWnd::OnInitMenuPopup(pPopupMenu,nIndex,bSysMenu);
break;
*/
default:
if( nIndex == M_PosMenuHelp ) // M_PosMenuHelp not constant
fn_vFillHelpMenu(pPopupMenu);
else
{
CFrameWnd::OnInitMenuPopup(pPopupMenu,nIndex,bSysMenu);
}
}
}
}
////
BOOL FRMBaseMenu::AddItemToPopupMenu(EDT_SubMenu* _pSubMenu,CPA_List<CPA_DLLBase>* _p_oListOfDLL)
{
BOOL bAddEntries = FALSE;
POSITION stPos = _p_oListOfDLL->GetHeadPosition();
while(stPos)
{
CPA_DLLBase *p_oDLL = _p_oListOfDLL->GetNext(stPos);
bAddEntries |= p_oDLL->fn_bDefineSubMenu(_pSubMenu);
}
return bAddEntries;
}
////
void FRMBaseMenu::fn_vFillHelpMenu(CMenu *pPopupMenu)
{
// delete menu
while( pPopupMenu -> GetMenuItemCount() )
pPopupMenu -> DeleteMenu( 0, MF_BYPOSITION );
// add entries
UINT uiID = C_HelpMenuIDStart ;
// add about...
pPopupMenu -> AppendMenu( MF_STRING, uiID++, "About..." );
pPopupMenu -> AppendMenu( MF_SEPARATOR );
// add interface help
UINT nFlags = MF_STRING + ( (g_stInterfaceInfo.csFrenchHelpFile.IsEmpty() && g_stInterfaceInfo.csEnglishHelpFile.IsEmpty() ) ? MF_GRAYED : MF_ENABLED );
pPopupMenu -> AppendMenu( nFlags, uiID++, g_stInterfaceInfo.csName );
// add context help
POSITION stPos = M_GetEditorList() -> GetHeadPosition();
while( stPos )
{
tdstEDTInfo *p_stInfo = M_GetEditorList() -> GetNext( stPos ) -> GetEditorInfo();
UINT nFlags = MF_STRING + ( ( p_stInfo -> csFrenchHelpFile . IsEmpty() && p_stInfo -> csEnglishHelpFile . IsEmpty()) ? MF_GRAYED : MF_ENABLED );
pPopupMenu -> AppendMenu( nFlags, uiID++, p_stInfo -> csName );
}
}
////
void FRMBaseMenu::fn_vActivateHelp(UINT IDCmdMsg)
{
if( IDCmdMsg == C_HelpMenuIDStart )
{
// About entry
M_GetMainApp() -> OnHelpAbout();
}
else
{
tdstEDTInfo *p_stInfo;
CString csHelpFile;
if (IDCmdMsg == C_HelpMenuIDStart + 1)
p_stInfo = &g_stInterfaceInfo;
else
{
int iNumEditor = IDCmdMsg - C_HelpMenuIDStart - 2;
POSITION stPos = M_GetEditorList() -> FindIndex( iNumEditor );
CPA_EditorBase *p_oEditor = M_GetEditorList() -> GetAt( stPos );
p_stInfo = p_oEditor -> GetEditorInfo();
}
if ((GetInterface()->fn_csGetCurrentLanguage() == "French") || (GetInterface()->fn_csGetCurrentLanguage() == "Francais"))
{
if (!p_stInfo->csFrenchHelpFile.IsEmpty())
csHelpFile = CString(M_GetMainApp() -> m_csEditorDataPath) + "EditorHelp\\French\\" + p_stInfo -> csFrenchHelpFile;
else
csHelpFile = CString(M_GetMainApp() -> m_csEditorDataPath) + "EditorHelp\\English\\" + p_stInfo -> csEnglishHelpFile;
}
else
{
if (!p_stInfo->csEnglishHelpFile.IsEmpty())
csHelpFile = CString(M_GetMainApp() -> m_csEditorDataPath) + "EditorHelp\\English\\" + p_stInfo -> csEnglishHelpFile;
else
csHelpFile = CString(M_GetMainApp() -> m_csEditorDataPath) + "EditorHelp\\French\\" + p_stInfo -> csFrenchHelpFile;
}
::WinHelp( M_GetMainWnd()->m_hWnd, csHelpFile, HELP_FINDER, 0 );
}
}
////
void FRMBaseMenu::OnInitMap(void)
{
M_GetListOfAllDLL()->CallBeforeEngine();
M_GetMainApp()->fn_vReinitCurrentMap();
GetInterface()->SetInitialState(TRUE);
M_GetListOfAllDLL()->CallBeforeEditor();
}
////-------------------
// Call to options
////-------------------
void FRMBaseMenu::OnOptions(void)
{
GetInterface()->fn_vDoDialogOptions();
}
////-------------------
// Call to save
////-------------------
void FRMBaseMenu::OnSaveAll(void)
{
POSITION stPos;
SetCursor(M_GetMainApp()->LoadStandardCursor(IDC_WAIT));
//////////////////////////////
// Generate modification file
//////////////////////////////
/*
{
unsigned int uiPos;
SCR_tdst_Ntfy_Description *p_stNtfy;
FILE *p_xFile;
char szMdfName[MAX_PATH];
char *p_szNotfy;
// Compute modification file name (last and new)
strcpy(szMdfName, (LPCTSTR) M_GetMainApp()->m_csEngineDataPath);
if(szMdfName[strlen(szMdfName) - 1] != '\\')
strcat(szMdfName, "\\");
strcat(szMdfName, "modiflst.txt");
// Append modification list
p_xFile = fopen(szMdfName, "at");
if(p_xFile == NULL)
{
SetCursor(M_GetMainApp()->LoadStandardCursor(IDC_ARROW));
MessageBox("Unable to create modification file.");
return;
}
uiPos = 0;
SCR_M_DyAr_GetNextElement(SCR_tdst_Ntfy_Description, uiPos, p_stNtfy, SCR_g_st_Ntfy_Array);
while(p_stNtfy)
{
p_szNotfy = strchr(p_stNtfy->a_szSectionName, '\\') + 1;
fputs(p_szNotfy, p_xFile);
fputc('\n', p_xFile);
uiPos++;
SCR_M_DyAr_GetNextElement(SCR_tdst_Ntfy_Description, uiPos, p_stNtfy, SCR_g_st_Ntfy_Array);
}
fclose(p_xFile);
}
*/
// call fn_bAcceptToSave msg
stPos = M_GetEditorList() -> GetHeadPosition();
while( stPos )
{
if (!M_GetEditorList() -> GetNext( stPos ) -> fn_bAcceptToSave())
{
SetCursor(M_GetMainApp()->LoadStandardCursor(IDC_ARROW));
return;
}
}
// call fn_vBeforeSaveAll msg
stPos = M_GetEditorList() -> GetHeadPosition();
while( stPos )
{
M_GetEditorList() -> GetNext( stPos ) -> fn_vBeforeSaveAll();
}
// call saving
if (GetInterface()->GetNbObjectsRenamed() != 0)
{
g_oNameManager.fn_vWriteNameConflicts();
UpdateStatus("Objects were renamed during loading : your changes cannot be saved", C_STATUSPANE_INFOS, C_STATUS_ERROR);
MessageBox ("Objects were renamed during loading : \nyour changes in all editors cannot be saved", "PROBLEM !", MB_OK|MB_ICONEXCLAMATION);
SetCursor(M_GetMainApp()->LoadStandardCursor(IDC_ARROW));
return;
}
/*
* save in a directory all file that will be modified
* in order to be able to recuperate data that currently work
*/
if ( !SAVE_fn_bGenerateACopyOfFilesBeforeModification( ) )
{
UpdateStatus("Save canceled", C_STATUSPANE_INFOS, C_STATUS_ERROR);
SetCursor(M_GetMainApp()->LoadStandardCursor(IDC_ARROW));
return;
}
// save
SCR_fn_v_SvL1_UpdateAllNotify();
// call fn_vAfterSaveAll msg
stPos = M_GetEditorList() -> GetHeadPosition();
while( stPos )
{
M_GetEditorList() -> GetNext( stPos ) -> fn_vAfterSaveAll();
}
// RAZ Undos
M_GetEditManager()->Reset();
fn_vInitGeneralDialogBarWithContext();
// warn user
UpdateStatus("Save complete", C_STATUSPANE_INFOS, C_STATUS_NORMAL);
SetCursor(M_GetMainApp()->LoadStandardCursor(IDC_ARROW));
}
////
void FRMBaseMenu::fn_vUpdateCurrentEditor (CPA_EditorBase *pNewCurrentEditor)
{
if(pNewCurrentEditor)
{
UpdateStatus((char *) (LPCTSTR) (pNewCurrentEditor->GetCurrentEditorName()), C_STATUSPANE_EDITOR, C_STATUS_NORMAL);
// Dunka 17.09.1998 - update tool bar (the editor buttons)
fn_vUpdateEditorButtonsToolbar();
//end Mircea Dunka 17.09.1998 - update tool bar (the editor buttons)
}
else
UpdateStatus(NULL, C_STATUSPANE_EDITOR, C_STATUS_NORMAL);
}
//===========================================================================
// Description: Init dialog bar regardless to context of application.
// => Combo box will contain all editors that can be current
// one.
// Creation date: 11 Jun 96
// Author: CB
//---------------------------------------------------------------------------
// Return void
//---------------------------------------------------------------------------
// Revision date:
// Author:
//===========================================================================
void FRMBaseMenu::fn_vInitGeneralDialogBarWithContext(void)
{
CButton *pBut;
// For engine
pBut = (CButton *) m_oGeneralDialogBar.GetDlgItem(CPA_IDCB_SWAPTOEDITORS);
pBut->SetCheck(0);
pBut->ShowWindow(SW_HIDE);
pBut = (CButton *) m_oGeneralDialogBar.GetDlgItem(CPA_IDCB_PAUSEENGINE);
pBut->SetCheck(0);
pBut->ShowWindow(SW_HIDE);
pBut = (CButton *) m_oGeneralDialogBar.GetDlgItem(CPA_IDCB_ONESTEPENGINE);
pBut->SetCheck(0);
pBut->ShowWindow(SW_HIDE);
pBut = (CButton *) m_oGeneralDialogBar.GetDlgItem(CPA_IDCB_FULLSCREEN);
pBut->SetCheck(0);
pBut->ShowWindow(SW_HIDE);
// Undo/Redo
pBut = (CButton *) m_oGeneralDialogBar.GetDlgItem(CPA_IDCB_UNDO);
pBut->SetCheck(0);
pBut->ShowWindow(SW_SHOW);
pBut->EnableWindow(M_GetEditManager()->CanUndo() ? TRUE : FALSE);
pBut = (CButton *) m_oGeneralDialogBar.GetDlgItem(CPA_IDCB_REDO);
pBut->SetCheck(0);
pBut->ShowWindow(SW_SHOW);
pBut->EnableWindow(M_GetEditManager()->CanRedo() ? TRUE : FALSE);
// Save
pBut = (CButton *) m_oGeneralDialogBar.GetDlgItem(CPA_IDCB_SAVEALL);
pBut->ShowWindow(SW_SHOW);
// Options
pBut = (CButton *) m_oGeneralDialogBar.GetDlgItem(CPA_IDCB_OPTIONS);
pBut->ShowWindow(SW_SHOW);
// Device ToolBar
mfn_vUpdateDeviceToolBar();
}
//===========================================================================
// Description: resets all buttons except for the current editor
// Creation date: 8.09.98
// Author: Mircea Dunka
//---------------------------------------------------------------------------
// Return BOOL Helps the user to see what he's doing
//---------------------------------------------------------------------------
// Revision date:
// Author:
//===========================================================================
void FRMBaseMenu::fn_vUpdateEditorButtonsToolbar()
{
if(m_oGeneralDialogBar.m_oListOfEditorButtons.IsEmpty())
return;
CPA_DLLBase* pEditor = M_GetCurrentEditor();
POSITION stPos;
stPos = m_oGeneralDialogBar.m_oListOfEditorButtons.GetHeadPosition();
while(stPos)
{
CButton *pBut = (CButton*)m_oGeneralDialogBar.m_oListOfEditorButtons.GetNext(stPos);
if( GetWindowLong(pBut->m_hWnd,GWL_USERDATA) == (long)pEditor)
pBut->SetCheck(1);
else
pBut->SetCheck(0);
}
return;
}
//end Mircea Dunka
void FRMBaseMenu::mfn_vUpdateDeviceToolBar(void)
{
if(!M_bEditorsActive())
{
// m_oGeneralDialogBar.m_oDeviceToolbar.ShowWindow(SW_HIDE);
return;
}
/* if(!mbWantSplit && !mbWantNew && !mbWantTile)
m_oGeneralDialogBar.m_oDeviceToolbar.ShowWindow(SW_HIDE);
else
*/ {
// m_oGeneralDialogBar.m_oDeviceToolbar.ShowWindow(SW_SHOW);
/* if(!mbWantNew)
m_oGeneralDialogBar.m_oDeviceToolbar.SetPermission(CPA_IDB_OPENDEVICE, FALSE);
if(!mbWantSplit)
{
m_oGeneralDialogBar.m_oDeviceToolbar.SetPermission(CPA_IDB_DEVICE_SPLITVERT, FALSE);
m_oGeneralDialogBar.m_oDeviceToolbar.SetPermission(CPA_IDB_DEVICE_SPLITHORIZ, FALSE);
}
else
{
m_oGeneralDialogBar.m_oDeviceToolbar.SetPermission(CPA_IDB_DEVICE_SPLITVERT, TRUE);
m_oGeneralDialogBar.m_oDeviceToolbar.SetPermission(CPA_IDB_DEVICE_SPLITHORIZ, TRUE);
if(m_oSplitter.GetColumnCount() == 2)
m_oGeneralDialogBar.m_oDeviceToolbar.SetPermission(CPA_IDB_DEVICE_SPLITVERT, FALSE);
if(m_oSplitter.GetRowCount() == 2)
m_oGeneralDialogBar.m_oDeviceToolbar.SetPermission(CPA_IDB_DEVICE_SPLITHORIZ, FALSE);
}
*/
// Is there an additional active device ?
BOOL bActiv = FALSE;
for(int i = 1; (i < MAX_DEVICE) && (GetActiveView()); i++)
{
if(((DEV_MultiDevice *) GetActiveView())->IsActivDevice(i))
{
bActiv = TRUE;
break;
}
}
/* m_oGeneralDialogBar.m_oDeviceToolbar.SetPermission(CPA_IDB_DEVICE_TILE_HORZ, TRUE);
m_oGeneralDialogBar.m_oDeviceToolbar.SetPermission(CPA_IDB_DEVICE_TILE_VERT, TRUE);
m_oGeneralDialogBar.m_oDeviceToolbar.SetPermission(CPA_IDB_DEVICE_CASCADE, TRUE);
if((!mbWantTile) || (!bActiv))
{
m_oGeneralDialogBar.m_oDeviceToolbar.SetPermission(CPA_IDB_DEVICE_TILE_HORZ, FALSE);
m_oGeneralDialogBar.m_oDeviceToolbar.SetPermission(CPA_IDB_DEVICE_TILE_VERT, FALSE);
m_oGeneralDialogBar.m_oDeviceToolbar.SetPermission(CPA_IDB_DEVICE_CASCADE, FALSE);
}
*/ }
}
//===========================================================================
// Description: Show or hide the general interface of application in edit
// mode (toolbar and menu)
// Creation date: 11 Jun 96
// Author: CB
//---------------------------------------------------------------------------
// BOOL Not used
// Return void
//---------------------------------------------------------------------------
// Revision date:
// Author:
//===========================================================================
void FRMBaseMenu::fn_vShowGeneralInterface(BOOL bMustShow)
{
// Menu
if (bMustShow)
{
// Update menu regardless to context
fn_vInitGeneralMenuWithContext();
// Menu
SetMenu(&m_oGeneralMenu);
}
else
{
SetMenu(NULL);
}
// ToolBar
if (bMustShow)
{
// Update menu and toolbar regardless to context
fn_vInitGeneralDialogBarWithContext();
}
m_oGeneralDialogBar.ShowWindow( bMustShow ? SW_SHOWNORMAL : SW_HIDE );
m_oStatusBar.ShowWindow( bMustShow ? SW_SHOWNORMAL : SW_HIDE );
RecalcLayout();
}
void FRMBaseMenu::fn_vEnableEditors(BOOL _bCan)
{
if(!M_bEditorsActive())
{
CButton *pBut;
m_bEnableEditors = _bCan;
pBut = (CButton *) m_oGeneralDialogBar.GetDlgItem(CPA_IDCB_SWAPTOEDITORS);
pBut->SetCheck(0);
pBut->ShowWindow(m_bEnableEditors ? SW_SHOW : SW_HIDE);
pBut = (CButton *) m_oGeneralDialogBar.GetDlgItem(CPA_IDCB_PAUSEENGINE);
pBut->ShowWindow(m_bEnableEditors ? SW_SHOW : SW_HIDE);
pBut = (CButton *) m_oGeneralDialogBar.GetDlgItem(CPA_IDCB_FULLSCREEN);
pBut->ShowWindow(m_bEnableEditors ? SW_SHOW : SW_HIDE);
}
}
void FRMBaseMenu::OnEnterMenuLoop(BOOL bIsTrackPopupMenu)
{
g_bMouseLocked = TRUE;
}
void FRMBaseMenu::OnExitMenuLoop(BOOL bIsTrackPopupMenu)
{
g_bMouseLocked = FALSE;
}
///////////////////////
// For splitter
///////////////////////
IMPLEMENT_DYNCREATE(FRMSplitter, CSplitterWnd)
BEGIN_MESSAGE_MAP(FRMSplitter, CSplitterWnd)
ON_WM_LBUTTONDOWN()
ON_WM_PAINT()
ON_WM_MOUSEWHEEL()
END_MESSAGE_MAP()
BOOL FRMBaseMenu::OnCreateClient(LPCREATESTRUCT _p_stStruct, CCreateContext *_p_stContext)
{
m_oSplitter.Create
(
this, 2, 2,
CSize(10, 10),//chbani
_p_stContext,
WS_CHILD|WS_VISIBLE|SPLS_DYNAMIC_SPLIT
);
return TRUE;
}
BOOL FRMBaseMenu::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
return FALSE;
}
BOOL FRMSplitter::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
return FALSE;
}
void FRMSplitter::RecalcLayout(void)
{
if(!M_bEditorsActive() && M_GetMainApp()->m_bFlagTaken == FALSE)
if (WaitForSingleObject(M_GetMainApp()->m_hDrawSem,10000) == WAIT_TIMEOUT)
ASSERT(0);
CSplitterWnd::RecalcLayout();
if(!M_bEditorsActive() && M_GetMainApp()->m_bFlagTaken == FALSE)
ReleaseSemaphore(M_GetMainApp()->m_hDrawSem, 1, NULL);
}
void FRMSplitter::DrawObject(CWnd *_p_stParam)
{
DEV_MultiDevice3D *pMulti = (DEV_MultiDevice3D *) GetPane(0, 0);
DEV_MultiDevice3D *pInit = (DEV_MultiDevice3D *) _p_stParam;
DEV_MultiDevice3D *pSingle;
pSingle = (DEV_MultiDevice3D *) GetPane(0, 0);
if(pSingle != pInit)
{
if(M_bEditorsActive())
{
pSingle->m_p_oMultiToDraw = _p_stParam;
pSingle->DrawObject();
pSingle->m_p_oMultiToDraw = NULL;
}
}
if(GetColumnCount() == 2)
{
pSingle = (DEV_MultiDevice3D *) GetPane(0, 1);
if(pSingle != pInit)
{
pSingle->m_p_oMultiToDraw = _p_stParam;
pSingle->DrawObject();
pSingle->m_p_oMultiToDraw = NULL;
}
}
if(GetRowCount() == 2)
{
pSingle = (DEV_MultiDevice3D *) GetPane(1, 0);
if(pSingle != pInit)
{
pSingle->m_p_oMultiToDraw = _p_stParam;
pSingle->DrawObject();
pSingle->m_p_oMultiToDraw = NULL;
}
if(GetColumnCount() == 2)
{
pSingle = (DEV_MultiDevice3D *) GetPane(1, 1);
if(pSingle != pInit)
{
pSingle->m_p_oMultiToDraw = _p_stParam;
pSingle->DrawObject();
pSingle->m_p_oMultiToDraw = NULL;
}
}
}
}
BOOL FRMSplitter::CreateView(int row, int col, CRuntimeClass* pViewClass, SIZE sizeInit, CCreateContext* pContext)
{
CPA_SuperObject *p_oCameraSO;
CPA_CameraDLLBase *p_oCamDLL;
if(row || col)
{
CSplitterWnd::CreateView(row, col, pViewClass, sizeInit, pContext);
((DEV_MultiDevice3D *) GetPane(row, col))->m_cIsAdditional = 1;
// create the default camera for the device
p_oCamDLL = (CPA_CameraDLLBase*) M_GetMainApp()->m_p_oMainWorld->GetObjectDLLWithName(C_szDLLCameraName);
ASSERT(p_oCamDLL != NULL);
p_oCameraSO = p_oCamDLL->CreateDefaultCamera();
p_oCamDLL->InsertCameraInHierarchy(p_oCameraSO);
ASSERT(p_oCameraSO != NULL);
((DEV_ViewPort3D*)(((DEV_MultiDevice3D *)GetPane(row, col))->GetDevice(0)->GetViewPort()))->ChangeCamera(p_oCameraSO);
GetParentFrame()->mfn_vUpdateDeviceToolBar();
}
else
{
CSplitterWnd::CreateView(row, col, pViewClass, sizeInit, pContext);
((DEV_MultiDevice3D *) GetPane(row, col))->m_cIsAdditional = 0;
}
return TRUE;
}
void FRMSplitter::DeleteView(int iRow, int iCol)
{
CSplitterWnd::DeleteView(iRow, iCol);
}
void FRMSplitter::DeleteRow(int iRow)
{
CSplitterWnd::DeleteRow(iRow);
GetParentFrame()->mfn_vUpdateDeviceToolBar();
}
void FRMSplitter::DeleteColumn(int iCol)
{
CSplitterWnd::DeleteColumn(iCol);
GetParentFrame()->mfn_vUpdateDeviceToolBar();
}
void FRMSplitter::SetActivePane(int iRow, int iCol, CWnd *pWnd /*= NULL*/)
{
CSplitterWnd::SetActivePane(iRow, iCol, pWnd);
}
// To disable the deletion of the game view.
void FRMSplitter::OnLButtonDown(UINT nFlags, CPoint pt)
{
CSplitterWnd::OnLButtonDown(0, pt);
if(M_GetMainDevice() == (DEV_MultiDevice *) GetPane(0, 0))
{
int hit = HitTest( pt );
if ((hit >= 201) && (hit <= 215))
{
hit -= 201;
m_rectLimit.left = 20;
}
else if ((hit >= 101) && (hit <= 115))
{
hit -= 101;
m_rectLimit.top = 20;
}
}
}
BOOL FRMSplitter::CreateScrollBarCtrl(DWORD dwStyle, UINT nID)
{
CSplitterWnd::CreateScrollBarCtrl(dwStyle, nID);
return TRUE;
}
int FRMSplitter::HitTest(CPoint pt) const
{
return CSplitterWnd::HitTest(pt);
}
void FRMSplitter::OnPaint()
{
CSplitterWnd::OnPaint();
}
void FRMSplitter::MakeSplit(int ht)
{
// start tracking
StartTracking(ht);
CRect rect;
rect.left = m_rectTracker.Width() / 2;
rect.top = m_rectTracker.Height() / 2;
if (m_ptTrackOffset.y != 0)
rect.top = m_rectTracker.top;
if (m_ptTrackOffset.x != 0)
rect.left = m_bTracking2 ? m_rectTracker2.left :m_rectTracker.left;
rect.OffsetRect(-m_ptTrackOffset.x, -m_ptTrackOffset.y);
ClientToScreen(&rect);
SetCursorPos(rect.left, rect.top);
GetParentFrame()->mfn_vUpdateDeviceToolBar();
}
#endif //ACTIVE_EDITOR