Serious-Engine/Sources/SeriousSkaStudio/MainFrm.cpp
2016-03-11 18:20:51 -06:00

333 lines
10 KiB
C++

/* Copyright (c) 2002-2012 Croteam Ltd.
This program is free software; you can redistribute it and/or modify
it under the terms of version 2 of the GNU General Public License as published by
the Free Software Foundation
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
#include "stdafx.h"
#include "SeriousSkaStudio.h"
#include "MainFrm.h"
#include "resource.h"
#ifdef _DEBUG
#undef new
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define LOAD_BAR_STATE( WName, HName, bar, dx, dy) \
bar.m_Size.cx = (AfxGetApp()->GetProfileInt(_T("General"),_T(WName),dx)); \
bar.m_Size.cy = (AfxGetApp()->GetProfileInt(_T("General"),_T(HName),dy)); \
bar.CalcDynamicLayout(0, LM_HORZDOCK)
#define SAVE_BAR_STATE( WName, HName, bar) \
AfxGetApp()->WriteProfileInt( _T("General"),_T(WName), bar.m_Size.cx); \
AfxGetApp()->WriteProfileInt( _T("General"),_T(HName), bar.m_Size.cy)
#define STD_TREEVIEW_WIDTH 230
#define STD_TREEVIEW_HEIGHT 550
IMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameWnd)
BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_WM_ACTIVATEAPP()
ON_COMMAND(ID_VIEW_TREEVIEW, OnViewTreeview)
ON_UPDATE_COMMAND_UI(ID_VIEW_TREEVIEW, OnUpdateViewTreeview)
ON_WM_CLOSE()
ON_WM_SIZE()
ON_COMMAND(ID_VIEW_TOOLBAR, OnViewToolbar)
ON_UPDATE_COMMAND_UI(ID_VIEW_TOOLBAR, OnUpdateViewToolbar)
ON_COMMAND(ID_FILE_CREATE_TEXTURE, OnFileCreateTexture)
ON_BN_CLICKED(IDC_BT_CLOSE, OnBtClose)
ON_BN_CLICKED(IDC_BT_CLEAR, OnBtClear)
ON_COMMAND(ID_VIEW_ERRORLIST, OnViewErrorlist)
ON_UPDATE_COMMAND_UI(ID_VIEW_ERRORLIST, OnUpdateViewErrorlist)
//}}AFX_MSG_MAP
// Global help commands
ON_COMMAND(ID_HELP_FINDER, CMDIFrameWnd::OnHelpFinder)
ON_COMMAND(ID_HELP, CMDIFrameWnd::OnHelp)
ON_COMMAND(ID_CONTEXT_HELP, CMDIFrameWnd::OnContextHelp)
ON_COMMAND(ID_DEFAULT_HELP, CMDIFrameWnd::OnHelpFinder)
END_MESSAGE_MAP()
static UINT indicators[] =
{
ID_STATUS_BAR_TEXT,
ID_SEPARATOR,
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
#define STD_DRAGBAR_WIDTH 230
#define STD_DRAGBAR_HEIGHT 230
CMainFrame::CMainFrame()
{
}
CMainFrame::~CMainFrame()
{
}
BOOL _bApplicationActive = TRUE;
void CMainFrame::OnActivateApp(BOOL bActive, DWORD hTask)
{
_bApplicationActive = bActive;
CMDIFrameWnd::OnActivateApp(bActive, hTask);
}
// create main frame
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
// set same styles for use with all toolbars
CRect rectDummy(0,0,0,0);
DWORD dwToolBarStyles = TBSTYLE_FLAT | WS_CHILD | WS_VISIBLE | CBRS_SIZE_DYNAMIC |
CBRS_TOP | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_GRIPPER;
if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
// subclass mdiclient
if (!m_wndMDIClient.SubclassWindow(m_hWndMDIClient)) {
TRACE ("Failed to subclass MDI client window\n");
return (-1);
}
// create toolbar IDR_MAINFRAME
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, dwToolBarStyles, rectDummy, IDW_TOOLBAR_MAINFRAME) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}
// create toolbar IDR_NAVIGATION
if( (!m_wndNavigationToolBar.CreateEx(this, TBSTYLE_FLAT, dwToolBarStyles, rectDummy,IDW_TOOLBAR_NAVIGATION)) ||
(!m_wndNavigationToolBar.LoadToolBar(IDR_NAVIGATION)) )
{
TRACE0("Failed to create FX toolbar\n");
return -1; // fail to create fx tool bar
}
// create toolbar IDR_MANAGE
if (!m_wndToolBarManage.CreateEx(this, TBSTYLE_FLAT, dwToolBarStyles, rectDummy,IDW_TOOLBAR_MANAGE) ||
!m_wndToolBarManage.LoadToolBar(IDR_MANAGE))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}
// create status bar
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1; // fail to create
}
EnableDocking(CBRS_ALIGN_ANY);
// enable docking for toolbars
m_wndToolBar.EnableDocking(CBRS_ALIGN_TOP);
m_wndNavigationToolBar.EnableDocking(CBRS_ALIGN_TOP);
m_wndToolBarManage.EnableDocking(CBRS_ALIGN_TOP);
// dock toolbars
DockControlBar(&m_wndToolBar);
DockControlBar(&m_wndNavigationToolBar);
DockControlBar(&m_wndToolBarManage);
// Set model instance stretch edit ctrl
m_wndNavigationToolBar.SetButtonInfo(STRETCH_BUTTON_INDEX, ID_MI_STRETCH, TBBS_SEPARATOR, 40);
CRect rcEditStretch;
m_wndNavigationToolBar.GetItemRect(STRETCH_BUTTON_INDEX, &rcEditStretch);
rcEditStretch.top = 2;
rcEditStretch.right -= 2;
rcEditStretch.bottom = rcEditStretch.top + 18;
if (!m_ctrlMIStretch.Create( WS_VISIBLE|WS_BORDER,
rcEditStretch, &m_wndNavigationToolBar, ID_MI_STRETCH) )
{
TRACE0("Failed to create model instance stretch edit control\n");
return FALSE;
}
m_ctrlMIStretch.SetWindowText(L"1");
// Initialize dialog bar m_dlgBarTreeView
if (!theApp.m_dlgBarTreeView.Create(this, IDD_TREEBAR,
CBRS_LEFT | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_HIDE_INPLACE | CBRS_SIZE_DYNAMIC,
ID_VIEW_TREEVIEW))
{
TRACE0("Failed to create dialog bar m_dlgBarTreeView\n");
return -1; // fail to create
}
if(!theApp.m_dlgErrorList.Create(this,IDD_ERROR_LIST,
CBRS_BOTTOM/* | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_HIDE_INPLACE | CBRS_SIZE_DYNAMIC*/,
ID_VIEW_ERRORLIST)) {
TRACE0("Failed to create dialog bar m_dlgErrorList\n");
return -1; // fail to create
}
theApp.GetErrorList()->InsertColumn(0,L"Error");
theApp.GetErrorList()->SetImageList( &theApp.m_dlgBarTreeView.m_IconsImageList, LVSIL_SMALL);
// theApp.m_dlgErrorList.m_Size = theApp.m_dlgErrorList.m_sizeDefault;
// theApp.m_dlgErrorList.SetSplitterControlID(IDC_SPLITER_LOG_FRAME);
theApp.m_dlgBarTreeView.SetWindowText(L"Tree view");
theApp.m_dlgErrorList.SetWindowText(L"Log");
theApp.m_dlgBarTreeView.EnableDockingSides(CBRS_ALIGN_LEFT | CBRS_ALIGN_RIGHT);
// theApp.m_dlgErrorList.EnableDockingSides(CBRS_ALIGN_BOTTOM);
//theApp.m_dlgErrorList.dlg_ulEnabledDockingSides = CBRS_ALIGN_BOTTOM;
theApp.m_dlgBarTreeView.DockCtrlBar();
// theApp.m_dlgErrorList.DockCtrlBar();
// DockControlBar(&theApp.m_dlgErrorList);
// set size of panels in status bar
m_wndStatusBar.SetPaneInfo(0,ID_STATUS_BAR_TEXT,SBPS_NORMAL,600);
m_wndStatusBar.SetPaneInfo(1,ID_SEPARATOR,SBPS_STRETCH,100);
// try to load dialog width and height from reg.
LOAD_BAR_STATE("TreeView width", "TreeView height", theApp.m_dlgBarTreeView,
STD_TREEVIEW_WIDTH, STD_TREEVIEW_HEIGHT);
// try to load toolbars positions
LoadBarState(_T("General"));
theApp.bAppInitialized = TRUE;
return 0;
}
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CMDIFrameWnd::PreCreateWindow(cs) )
return FALSE;
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics
#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
CMDIFrameWnd::AssertValid();
}
void CMainFrame::Dump(CDumpContext& dc) const
{
CMDIFrameWnd::Dump(dc);
}
#endif //_DEBUG
// Show/hide treeview
void CMainFrame::OnViewTreeview()
{
// OnBarCheck();
if(theApp.m_dlgBarTreeView.IsWindowVisible() )
{
ShowControlBar(&theApp.m_dlgBarTreeView, FALSE, FALSE);
theApp.m_dlgBarTreeView.SetFocus();
}
else
{
ShowControlBar(&theApp.m_dlgBarTreeView, TRUE, FALSE);
theApp.m_dlgBarTreeView.m_TreeCtrl.SetFocus();
}
}
// Update treeview check
void CMainFrame::OnUpdateViewTreeview(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(theApp.m_dlgBarTreeView.IsWindowVisible());
}
// Show/hide error dlg
void CMainFrame::OnViewErrorlist()
{
theApp.ShowErrorDlg(!theApp.IsErrorDlgVisible());
}
// Update error dlg
void CMainFrame::OnUpdateViewErrorlist(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(theApp.IsErrorDlgVisible());
}
// close main frame
void CMainFrame::OnClose()
{
// try to save all documents before closing them
POSITION pos = theApp.m_pdtDocTemplate->GetFirstDocPosition();
while (pos!=NULL)
{
CSeriousSkaStudioDoc *pmdCurrent = (CSeriousSkaStudioDoc *)theApp.m_pdtDocTemplate->GetNextDoc(pos);
if(!pmdCurrent->BeforeDocumentClose()) {
return;
}
}
// save toolbars positions
SaveBarState(_T("General"));
// savedialog width and height in reg
SAVE_BAR_STATE("TreeView width", "TreeView height", theApp.m_dlgBarTreeView);
CMDIFrameWnd::OnClose();
}
// resize main frame
void CMainFrame::OnSize(UINT nType, int cx, int cy)
{
CMDIFrameWnd::OnSize(nType, cx, cy);
m_wndStatusBar.SetPaneInfo(0,ID_STATUS_BAR_TEXT,SBPS_NORMAL,cx/1.5);
}
// show/hide toolbars
void CMainFrame::OnViewToolbar()
{
BOOL bVisible = ((m_wndToolBar.GetStyle() & WS_VISIBLE) != 0);
bVisible &= ((m_wndNavigationToolBar.GetStyle() & WS_VISIBLE) != 0);
bVisible &= ((m_wndToolBarManage.GetStyle() & WS_VISIBLE) != 0);
ShowControlBar(&m_wndToolBar, !bVisible, FALSE);
ShowControlBar(&m_wndNavigationToolBar, !bVisible, FALSE);
ShowControlBar(&m_wndToolBarManage, !bVisible, FALSE);
}
// update toolbars check
void CMainFrame::OnUpdateViewToolbar(CCmdUI* pCmdUI)
{
BOOL bVisible = ((m_wndToolBar.GetStyle() & WS_VISIBLE) != 0);
bVisible &= ((m_wndNavigationToolBar.GetStyle() & WS_VISIBLE) != 0);
bVisible &= ((m_wndToolBarManage.GetStyle() & WS_VISIBLE) != 0);
pCmdUI->SetCheck(bVisible);
}
CTString CMainFrame::CreateTexture()
{
// call create texture dialog
CTFileName fnCreated = _EngineGUI.CreateTexture();
return fnCreated;
}
void CMainFrame::OnFileCreateTexture()
{
CreateTexture();
}
void CMainFrame::OnBtClose()
{
theApp.ShowErrorDlg(FALSE);
}
void CMainFrame::OnBtClear()
{
theApp.GetErrorList()->DeleteAllItems();
OnBtClose();
}