123
This commit is contained in:
627
Editor/LayoutWnd.cpp
Normal file
627
Editor/LayoutWnd.cpp
Normal file
@@ -0,0 +1,627 @@
|
||||
// LayoutWnd.cpp : implementation file
|
||||
//
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "LayoutWnd.h"
|
||||
#include "ViewPane.h"
|
||||
#include "ViewManager.h"
|
||||
#include "Viewport.h"
|
||||
#include "CryEditDoc.h"
|
||||
|
||||
#ifdef _DEBUG
|
||||
#define new DEBUG_NEW
|
||||
#undef THIS_FILE
|
||||
static char THIS_FILE[] = __FILE__;
|
||||
#endif
|
||||
|
||||
IMPLEMENT_DYNCREATE(CLayoutSplitter,CSplitterWnd)
|
||||
IMPLEMENT_DYNCREATE(CLayoutWnd,CWnd)
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CLayoutSplitter
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
CLayoutSplitter::CLayoutSplitter()
|
||||
{
|
||||
m_cxSplitter = m_cySplitter = 3 + 1 + 1;
|
||||
m_cxBorderShare = m_cyBorderShare = 0;
|
||||
m_cxSplitterGap = m_cySplitterGap = 3 + 1 + 1;
|
||||
m_cxBorder = m_cyBorder = 1;
|
||||
}
|
||||
|
||||
CLayoutSplitter::~CLayoutSplitter()
|
||||
{
|
||||
}
|
||||
|
||||
BEGIN_MESSAGE_MAP(CLayoutSplitter, CSplitterWnd)
|
||||
//{{AFX_MSG_MAP(CLayoutSplitter)
|
||||
ON_WM_SIZE()
|
||||
//}}AFX_MSG_MAP
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void CLayoutSplitter::OnDrawSplitter(CDC* pDC, ESplitType nType, const CRect& rectArg)
|
||||
{
|
||||
// Let CSplitterWnd handle everything but the border-drawing
|
||||
if((nType != splitBorder) || (pDC == NULL))
|
||||
{
|
||||
CSplitterWnd::OnDrawSplitter(pDC, nType, rectArg);
|
||||
return;
|
||||
}
|
||||
|
||||
ASSERT_VALID(pDC);
|
||||
|
||||
// Draw border
|
||||
pDC->Draw3dRect(rectArg, GetSysColor(COLOR_BTNSHADOW), GetSysColor(COLOR_BTNHIGHLIGHT));
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void CLayoutSplitter::OnSize(UINT nType, int cx, int cy)
|
||||
{
|
||||
CSplitterWnd::OnSize(nType, cx, cy);
|
||||
|
||||
// TODO: Add your message handler code here
|
||||
|
||||
if (m_hWnd && m_pRowInfo && m_pColInfo)
|
||||
{
|
||||
CRect rc;
|
||||
GetClientRect( rc );
|
||||
|
||||
int i;
|
||||
int rows = GetRowCount();
|
||||
int cols = GetColumnCount();
|
||||
for (i = 0; i < rows; i++)
|
||||
{
|
||||
float idealSize = 0;
|
||||
CViewPane *viewPane = (CViewPane*)GetPane(i,0);
|
||||
if (viewPane)
|
||||
{
|
||||
CViewport *viewport = viewPane->GetViewport();
|
||||
if (viewport)
|
||||
idealSize = viewport->GetIdealSize().cy;
|
||||
}
|
||||
if (idealSize == 0)
|
||||
SetRowInfo( i,rc.bottom/rows,10 );
|
||||
else
|
||||
SetRowInfo( i,idealSize,10 );
|
||||
}
|
||||
for (i = 0; i < cols; i++)
|
||||
{
|
||||
float idealSize = 0;
|
||||
CViewPane *viewPane = (CViewPane*)GetPane(0,i);
|
||||
if (viewPane)
|
||||
{
|
||||
CViewport *viewport = viewPane->GetViewport();
|
||||
if (viewport)
|
||||
idealSize = viewport->GetIdealSize().cx;
|
||||
}
|
||||
if (idealSize == 0)
|
||||
SetColumnInfo( i,rc.right/cols,10 );
|
||||
else
|
||||
{
|
||||
SetColumnInfo( i,idealSize,10 );
|
||||
}
|
||||
}
|
||||
|
||||
RecalcLayout();
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void CLayoutSplitter::CreateLayoutView( int row,int col,int id,EViewportType viewType,CCreateContext* pContext )
|
||||
{
|
||||
assert( row >= 0 && row < 3 );
|
||||
assert( col >= 0 && col < 3 );
|
||||
CreateView( row,col,RUNTIME_CLASS(CViewPane),CSize(100,100),pContext );
|
||||
CViewPane *viewPane = (CViewPane*)GetPane(row,col);
|
||||
if (viewPane)
|
||||
{
|
||||
viewPane->SetId(id);
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// CLayoutWnd
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
CLayoutWnd::CLayoutWnd()
|
||||
{
|
||||
m_splitWnd = 0;
|
||||
m_splitWnd2 = 0;
|
||||
|
||||
m_bMaximized = false;
|
||||
m_maximizedView = 0;
|
||||
m_layout = (EViewLayout)-1;
|
||||
|
||||
m_maximizedViewId = 0;
|
||||
|
||||
for (int i = 0; i < sizeof(m_viewType)/sizeof(m_viewType[0]); i++)
|
||||
m_viewType[i] = ET_ViewportUnknown;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
CLayoutWnd::~CLayoutWnd()
|
||||
{
|
||||
if (m_splitWnd)
|
||||
delete m_splitWnd;
|
||||
m_splitWnd = 0;
|
||||
|
||||
if (m_splitWnd2)
|
||||
delete m_splitWnd2;
|
||||
m_splitWnd2 = 0;
|
||||
}
|
||||
|
||||
BEGIN_MESSAGE_MAP(CLayoutWnd, CWnd)
|
||||
//{{AFX_MSG_MAP(CLayoutWnd)
|
||||
ON_WM_SIZE()
|
||||
//}}AFX_MSG_MAP
|
||||
ON_WM_DESTROY()
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void CLayoutWnd::OnSize(UINT nType, int cx, int cy)
|
||||
{
|
||||
CWnd::OnSize(nType, cx, cy);
|
||||
|
||||
if (m_hWnd)
|
||||
{
|
||||
CRect rc;
|
||||
GetClientRect( rc );
|
||||
|
||||
// Move primary split window.
|
||||
// Secondary split window will be resized within primary.
|
||||
if (m_splitWnd)
|
||||
m_splitWnd->MoveWindow(rc);
|
||||
|
||||
|
||||
// Resize maximized view.
|
||||
if (m_maximizedView)
|
||||
m_maximizedView->MoveWindow(rc);
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void CLayoutWnd::UnbindViewports()
|
||||
{
|
||||
// First unbind all views.
|
||||
for (int i = 0; i < MAX_VIEWPORTS; i++)
|
||||
{
|
||||
CViewPane *pViewPane = GetViewPane(i);
|
||||
if (pViewPane)
|
||||
{
|
||||
pViewPane->AssignViewport( ET_ViewportUnknown );
|
||||
}
|
||||
}
|
||||
|
||||
if (m_maximizedView)
|
||||
m_maximizedView->AssignViewport( ET_ViewportUnknown );
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void CLayoutWnd::BindViewports()
|
||||
{
|
||||
// First unbind all views.
|
||||
UnbindViewports();
|
||||
|
||||
for (int i = 0; i < MAX_VIEWPORTS; i++)
|
||||
{
|
||||
CViewPane *pViewPane = GetViewPane(i);
|
||||
if (pViewPane)
|
||||
{
|
||||
BindViewport( pViewPane,m_viewType[pViewPane->GetId()] );
|
||||
}
|
||||
}
|
||||
|
||||
if (m_splitWnd)
|
||||
m_splitWnd->SetActivePane(0,0);
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
if (GetIEditor()->GetViewManager()->GetViewCount() == 1)
|
||||
{
|
||||
//MaximizeViewport( GetIEditor()->GetViewManager()->GetView(0)->GetType() );
|
||||
//return;
|
||||
}
|
||||
|
||||
Invalidate(FALSE);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void CLayoutWnd::BindViewport( CViewPane *vp,EViewportType type )
|
||||
{
|
||||
assert( vp );
|
||||
vp->AssignViewport( type );
|
||||
vp->SetFullscren( false );
|
||||
vp->ShowWindow( SW_SHOW );
|
||||
m_viewType[vp->GetId()] = type;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void CLayoutWnd::BindViewport( CViewPane *vp,CViewport *pViewport )
|
||||
{
|
||||
//vp->AssignViewport( pViewport );
|
||||
//vp->ShowWindow( SW_SHOW );
|
||||
//m_viewType[vp->GetId()] = pViewport->GetType();
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void CLayoutWnd::MaximizeViewport( int paneId )
|
||||
{
|
||||
// Ignore with full screen layout.
|
||||
if (m_layout == ET_Layout0 && m_bMaximized)
|
||||
return;
|
||||
|
||||
EViewportType type = m_viewType[paneId];
|
||||
|
||||
CRect rc;
|
||||
GetClientRect( rc );
|
||||
if (!m_bMaximized)
|
||||
{
|
||||
UnbindViewports();
|
||||
m_maximizedViewId = paneId;
|
||||
m_bMaximized = true;
|
||||
|
||||
if (m_maximizedView)
|
||||
{
|
||||
if (m_splitWnd)
|
||||
m_splitWnd->ShowWindow( SW_HIDE );
|
||||
if (m_splitWnd2)
|
||||
m_splitWnd2->ShowWindow(SW_HIDE);
|
||||
|
||||
m_maximizedView->ShowWindow( SW_SHOW );
|
||||
BindViewport( m_maximizedView,type );
|
||||
|
||||
m_maximizedView->SetFocus();
|
||||
|
||||
((CFrameWnd*)AfxGetMainWnd())->SetActiveView( m_maximizedView );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_bMaximized = false;
|
||||
m_maximizedViewId = 0;
|
||||
|
||||
UnbindViewports();
|
||||
|
||||
if (m_maximizedView)
|
||||
m_maximizedView->ShowWindow(SW_HIDE);
|
||||
|
||||
if (m_splitWnd)
|
||||
m_splitWnd->ShowWindow(SW_SHOW);
|
||||
if (m_splitWnd2)
|
||||
m_splitWnd2->ShowWindow(SW_SHOW);
|
||||
|
||||
BindViewports();
|
||||
|
||||
if (m_splitWnd)
|
||||
m_splitWnd->SetActivePane(0,0);
|
||||
}
|
||||
|
||||
RedrawWindow();
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void CLayoutWnd::CreateSubSplitView( int row,int col,EViewLayout splitType,CCreateContext* pContext )
|
||||
{
|
||||
assert( row >= 0 && row < 3 );
|
||||
assert( col >= 0 && col < 3 );
|
||||
// m_viewType[row][col] = -1;
|
||||
|
||||
//m_secondSplitWnd = new CLayoutWnd;
|
||||
//m_secondSplitWnd->CreateLayout( this,splitType,pCtx,IdFromRowCol(0,0) );
|
||||
}
|
||||
|
||||
void CLayoutWnd::CreateLayoutView( CLayoutSplitter *wndSplitter,int row,int col,int id,EViewportType viewType,CCreateContext* pContext )
|
||||
{
|
||||
wndSplitter->CreateLayoutView( row,col,id,viewType,pContext );
|
||||
m_viewType[id] = viewType;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void CLayoutWnd::CreateLayout( EViewLayout layout,bool bBindViewports,EViewportType defaultView )
|
||||
{
|
||||
UnbindViewports();
|
||||
|
||||
m_layout = layout;
|
||||
m_bMaximized = false;
|
||||
|
||||
CCreateContext ctx;
|
||||
ZeroStruct(ctx);
|
||||
ctx.m_pNewViewClass = RUNTIME_CLASS(CViewPane);
|
||||
ctx.m_pCurrentDoc = GetIEditor()->GetDocument();
|
||||
ctx.m_pCurrentFrame = (CFrameWnd*)AfxGetMainWnd();
|
||||
CCreateContext *pCtx = &ctx;
|
||||
|
||||
if (m_splitWnd)
|
||||
{
|
||||
m_splitWnd->ShowWindow( SW_HIDE );
|
||||
m_splitWnd->DestroyWindow();
|
||||
delete m_splitWnd;
|
||||
m_splitWnd = 0;
|
||||
}
|
||||
|
||||
if (m_splitWnd2)
|
||||
{
|
||||
delete m_splitWnd2;
|
||||
m_splitWnd2 = 0;
|
||||
}
|
||||
|
||||
if (m_maximizedView)
|
||||
m_maximizedView->ShowWindow( SW_HIDE );
|
||||
|
||||
CRect rc;
|
||||
GetClientRect(rc);
|
||||
|
||||
if (!m_maximizedView)
|
||||
{
|
||||
m_maximizedView = new CViewPane;
|
||||
m_maximizedView->SetId(0);
|
||||
m_maximizedView->Create( 0,0,WS_CHILD|WS_VISIBLE,rc,this,0,pCtx );
|
||||
m_maximizedView->ShowWindow( SW_HIDE );
|
||||
m_maximizedView->SetFullscren(true);
|
||||
}
|
||||
|
||||
switch (layout) {
|
||||
case ET_Layout0:
|
||||
m_viewType[0] = defaultView;
|
||||
MaximizeViewport(0);
|
||||
break;
|
||||
|
||||
case ET_Layout1:
|
||||
m_splitWnd = new CLayoutSplitter;
|
||||
m_splitWnd->CreateStatic( this,1,2 );
|
||||
CreateLayoutView( m_splitWnd,0,0,2,ET_ViewportMap,pCtx );
|
||||
CreateLayoutView( m_splitWnd,0,1,1,defaultView,pCtx );
|
||||
break;
|
||||
case ET_Layout2:
|
||||
m_splitWnd = new CLayoutSplitter;
|
||||
m_splitWnd->CreateStatic( this,2,1 );
|
||||
CreateLayoutView( m_splitWnd,0,0,2,ET_ViewportMap,pCtx );
|
||||
CreateLayoutView( m_splitWnd,1,0,1,defaultView,pCtx );
|
||||
break;
|
||||
|
||||
case ET_Layout3:
|
||||
m_splitWnd = new CLayoutSplitter;
|
||||
m_splitWnd->CreateStatic( this,1,2 );
|
||||
CreateLayoutView( m_splitWnd,0,1,1,defaultView,pCtx );
|
||||
|
||||
m_splitWnd2 = new CLayoutSplitter;
|
||||
m_splitWnd2->CreateStatic( m_splitWnd,2,1,WS_CHILD|WS_VISIBLE,m_splitWnd->IdFromRowCol(0,0) );
|
||||
CreateLayoutView( m_splitWnd2,0,0,2,ET_ViewportXY,pCtx );
|
||||
CreateLayoutView( m_splitWnd2,1,0,3,ET_ViewportXZ,pCtx );
|
||||
break;
|
||||
|
||||
case ET_Layout4:
|
||||
m_splitWnd = new CLayoutSplitter;
|
||||
m_splitWnd->CreateStatic( this,1,2 );
|
||||
CreateLayoutView( m_splitWnd,0,0,1,defaultView,pCtx );
|
||||
|
||||
m_splitWnd2 = new CLayoutSplitter;
|
||||
m_splitWnd2->CreateStatic( m_splitWnd,2,1,WS_CHILD|WS_VISIBLE,m_splitWnd->IdFromRowCol(0,1) );
|
||||
CreateLayoutView( m_splitWnd2,0,0,2,ET_ViewportXY,pCtx );
|
||||
CreateLayoutView( m_splitWnd2,1,0,3,ET_ViewportXZ,pCtx );
|
||||
break;
|
||||
|
||||
case ET_Layout5:
|
||||
m_splitWnd = new CLayoutSplitter;
|
||||
m_splitWnd->CreateStatic( this,2,1 );
|
||||
CreateLayoutView( m_splitWnd,1,0,1,defaultView,pCtx );
|
||||
|
||||
m_splitWnd2 = new CLayoutSplitter;
|
||||
m_splitWnd2->CreateStatic( m_splitWnd,1,2,WS_CHILD|WS_VISIBLE,m_splitWnd->IdFromRowCol(0,0) );
|
||||
CreateLayoutView( m_splitWnd2,0,0,2,ET_ViewportXY,pCtx );
|
||||
CreateLayoutView( m_splitWnd2,0,1,3,ET_ViewportXZ,pCtx );
|
||||
break;
|
||||
|
||||
case ET_Layout6:
|
||||
m_splitWnd = new CLayoutSplitter;
|
||||
m_splitWnd->CreateStatic( this,2,1 );
|
||||
CreateLayoutView( m_splitWnd,0,0,1,defaultView,pCtx );
|
||||
|
||||
m_splitWnd2 = new CLayoutSplitter;
|
||||
m_splitWnd2->CreateStatic( m_splitWnd,1,2,WS_CHILD|WS_VISIBLE,m_splitWnd->IdFromRowCol(1,0) );
|
||||
CreateLayoutView( m_splitWnd2,0,0,2,ET_ViewportXY,pCtx );
|
||||
CreateLayoutView( m_splitWnd2,0,1,3,ET_ViewportXZ,pCtx );
|
||||
break;
|
||||
|
||||
case ET_Layout7:
|
||||
m_splitWnd = new CLayoutSplitter;
|
||||
m_splitWnd->CreateStatic( this,2,2 );
|
||||
CreateLayoutView( m_splitWnd,0,0,2,ET_ViewportXZ,pCtx );
|
||||
CreateLayoutView( m_splitWnd,0,1,3,ET_ViewportYZ,pCtx );
|
||||
CreateLayoutView( m_splitWnd,1,0,4,ET_ViewportXY,pCtx );
|
||||
CreateLayoutView( m_splitWnd,1,1,1,defaultView,pCtx );
|
||||
break;
|
||||
|
||||
case ET_Layout8:
|
||||
m_splitWnd = new CLayoutSplitter;
|
||||
m_splitWnd->CreateStatic( this,2,1 );
|
||||
CreateLayoutView( m_splitWnd,1,0,1,defaultView,pCtx );
|
||||
|
||||
m_splitWnd2 = new CLayoutSplitter;
|
||||
m_splitWnd2->CreateStatic( m_splitWnd,1,3,WS_CHILD|WS_VISIBLE,m_splitWnd->IdFromRowCol(0,0) );
|
||||
CreateLayoutView( m_splitWnd2,0,0,2,ET_ViewportXY,pCtx );
|
||||
CreateLayoutView( m_splitWnd2,0,1,3,ET_ViewportXZ,pCtx );
|
||||
CreateLayoutView( m_splitWnd2,0,2,4,ET_ViewportYZ,pCtx );
|
||||
break;
|
||||
|
||||
default:
|
||||
CLogFile::FormatLine( "Trying to Create Unknown Layout %d",(int)layout );
|
||||
AfxMessageBox( _T("Trying to Create Unknown Layout"),MB_OK|MB_ICONERROR );
|
||||
break;
|
||||
};
|
||||
|
||||
if (m_splitWnd)
|
||||
{
|
||||
m_splitWnd->MoveWindow(rc);
|
||||
m_splitWnd->SetActivePane(0,0);
|
||||
}
|
||||
|
||||
if (bBindViewports && !m_bMaximized)
|
||||
BindViewports();
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void CLayoutWnd::SaveConfig()
|
||||
{
|
||||
CWinApp *pApp = AfxGetApp();
|
||||
assert( pApp );
|
||||
pApp->WriteProfileInt( "Layout","Layout",(int)m_layout );
|
||||
pApp->WriteProfileInt( "Layout","Maximized",(int)m_maximizedViewId );
|
||||
|
||||
CString str;
|
||||
int v[MAX_VIEWPORTS];
|
||||
for (int i = 0; i < MAX_VIEWPORTS; i++) v[i] = m_viewType[i];
|
||||
str.Format( "%d,%d,%d,%d,%d,%d,%d,%d,%d",v[0],v[1],v[2],v[3],v[4],v[5],v[6],v[7],v[8] );
|
||||
pApp->WriteProfileString( "Layout","Views",str );
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
bool CLayoutWnd::LoadConfig()
|
||||
{
|
||||
CWinApp *pApp = AfxGetApp();
|
||||
assert( pApp );
|
||||
int layout = pApp->GetProfileInt( "Layout","Layout",-1 );
|
||||
int maximizedView = pApp->GetProfileInt( "Layout","Maximized",0 );
|
||||
if (layout < 0)
|
||||
return false;
|
||||
|
||||
CreateLayout( (EViewLayout)layout,false );
|
||||
|
||||
bool bRebindViewports = false;
|
||||
if (m_splitWnd)
|
||||
{
|
||||
CString str = pApp->GetProfileString( "Layout","Views" );
|
||||
if (!str.IsEmpty())
|
||||
{
|
||||
int v[9];
|
||||
if (sscanf( str,"%d,%d,%d,%d,%d,%d,%d,%d,%d",&v[0],&v[1],&v[2],&v[3],&v[4],&v[5],&v[6],&v[7],&v[8] ) == 9)
|
||||
{
|
||||
bRebindViewports = true;
|
||||
for (int i = 0; i < MAX_VIEWPORTS; i++)
|
||||
m_viewType[i] = (EViewportType)v[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (maximizedView > 0 && bRebindViewports)
|
||||
{
|
||||
MaximizeViewport( maximizedView );
|
||||
}
|
||||
else
|
||||
{
|
||||
if (bRebindViewports)
|
||||
BindViewports();
|
||||
else
|
||||
CreateLayout( (EViewLayout)layout );
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void CLayoutWnd::AssignViewport( CViewPane *vp,EViewportType type )
|
||||
{
|
||||
assert( vp );
|
||||
|
||||
//UnbindViewports();
|
||||
|
||||
if (vp == m_maximizedView)
|
||||
{
|
||||
BindViewport( m_maximizedView,type );
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == ET_ViewportCamera)
|
||||
{
|
||||
// Cannot simply assign new viewport to camera.
|
||||
// must swap with existing viewport that holds perspective view.
|
||||
}
|
||||
|
||||
BindViewport( vp,type );
|
||||
|
||||
//BindViewports();
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
CViewPane* CLayoutWnd::GetViewPane( int id )
|
||||
{
|
||||
if (m_splitWnd)
|
||||
{
|
||||
for (int row = 0; row < m_splitWnd->GetRowCount(); row++)
|
||||
for (int col = 0; col < m_splitWnd->GetColumnCount(); col++)
|
||||
{
|
||||
CWnd *pWnd = m_splitWnd->GetPane(row,col);
|
||||
if (pWnd->IsKindOf(RUNTIME_CLASS(CViewPane)))
|
||||
{
|
||||
CViewPane *pane = (CViewPane*)pWnd;
|
||||
if (pane && pane->GetId() == id)
|
||||
return pane;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (m_splitWnd2)
|
||||
{
|
||||
for (int row = 0; row < m_splitWnd2->GetRowCount(); row++)
|
||||
for (int col = 0; col < m_splitWnd2->GetColumnCount(); col++)
|
||||
{
|
||||
CWnd *pWnd = m_splitWnd2->GetPane(row,col);
|
||||
if (pWnd->IsKindOf(RUNTIME_CLASS(CViewPane)))
|
||||
{
|
||||
CViewPane *pane = (CViewPane*)pWnd;
|
||||
if (pane && pane->GetId() == id)
|
||||
return pane;
|
||||
}
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
CViewPane* CLayoutWnd::FindViewByType( EViewportType type )
|
||||
{
|
||||
for (int i = 1; i < MAX_VIEWPORTS; i++)
|
||||
{
|
||||
if (m_viewType[i] == type)
|
||||
{
|
||||
return GetViewPane(i);
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void CLayoutWnd::Cycle2DViewport()
|
||||
{
|
||||
// Cycle between 3 2D viewports.
|
||||
CViewPane *vp = NULL;
|
||||
vp = FindViewByType( ET_ViewportXY );
|
||||
if (vp)
|
||||
{
|
||||
AssignViewport( vp,ET_ViewportXZ );
|
||||
return;
|
||||
}
|
||||
vp = FindViewByType( ET_ViewportXZ );
|
||||
if (vp)
|
||||
{
|
||||
AssignViewport( vp,ET_ViewportYZ );
|
||||
return;
|
||||
}
|
||||
vp = FindViewByType( ET_ViewportYZ );
|
||||
if (vp)
|
||||
{
|
||||
AssignViewport( vp,ET_ViewportXY );
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void CLayoutWnd::OnDestroy()
|
||||
{
|
||||
CWnd::OnDestroy();
|
||||
|
||||
// Also destroy all viewports.
|
||||
for (int i = 0; i < GetIEditor()->GetViewManager()->GetViewCount(); i++)
|
||||
{
|
||||
GetIEditor()->GetViewManager()->GetView(i)->DestroyWindow();
|
||||
}
|
||||
|
||||
// TODO: Add your message handler code here
|
||||
}
|
||||
Reference in New Issue
Block a user