/*
**	Command & Conquer Renegade(tm)
**	Copyright 2025 Electronic Arts Inc.
**
**	This program is free software: you can redistribute it and/or modify
**	it under the terms of the GNU General Public License as published by
**	the Free Software Foundation, either version 3 of the License, or
**	(at your option) any later version.
**
**	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, see <http://www.gnu.org/licenses/>.
*/

// MainFrm.h : interface of the CMainFrame class
//
/////////////////////////////////////////////////////////////////////////////

#if !defined(AFX_MAINFRM_H__2BB39E2F_5D3A_11D2_9FC6_00104B791122__INCLUDED_)
#define AFX_MAINFRM_H__2BB39E2F_5D3A_11D2_9FC6_00104B791122__INCLUDED_

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000

#include "DataTreeView.H"
#include "Toolbar.H"

class CMainFrame : public CFrameWnd
{
protected: // create from serialization only
	CMainFrame();
	DECLARE_DYNCREATE(CMainFrame)

// Attributes
protected:
	CSplitterWnd m_wndSplitter;
public:

// Operations
public:

// Overrides
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CMainFrame)
	public:
	virtual BOOL OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext);
	virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
	virtual BOOL OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo);
	protected:
	virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
	virtual BOOL OnCommand(WPARAM wParam, LPARAM lParam);
	//}}AFX_VIRTUAL

// Implementation
public:
	virtual ~CMainFrame();
#ifdef _DEBUG
	virtual void AssertValid() const;
	virtual void Dump(CDumpContext& dc) const;
#endif

protected:  // control bar embedded members
	CStatusBar  m_wndStatusBar;
	CToolBar    m_wndToolBar;

// Generated message map functions
protected:
	//{{AFX_MSG(CMainFrame)
	afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
	afx_msg void OnObjectProperties();
	afx_msg void OnUpdateObjectProperties(CCmdUI* pCmdUI);
	afx_msg void OnLodGenerate();
	afx_msg void OnActivateApp(BOOL bActive, HTASK hTask);
	afx_msg void OnFileOpen();
	afx_msg void OnAniSpeed();
	afx_msg void OnAniStop();
	afx_msg void OnAniStart();
	afx_msg void OnAniPause();
	afx_msg void OnCameraBack();
	afx_msg void OnCameraBottom();
	afx_msg void OnCameraFront();
	afx_msg void OnCameraLeft();
	afx_msg void OnCameraReset();
	afx_msg void OnCameraRight();
	afx_msg void OnCameraTop();
	afx_msg void OnObjectRotateZ();
	afx_msg void OnObjectRotateY();
	afx_msg void OnObjectRotateX();
	afx_msg void OnLightAmbient();
	afx_msg void OnLightScene();
	afx_msg void OnBackgroundColor();
	afx_msg void OnBackgroundBMP();
	afx_msg void OnSaveSettings();
	afx_msg void OnLoadSettings();
	afx_msg void OnLODSetSwitch();
	afx_msg void OnLODSave();
	afx_msg void OnLODSaveAll();
	afx_msg void OnBackgroundObject();
	afx_msg void OnUpdateViewAnimationBar(CCmdUI* pCmdUI);
	afx_msg void OnUpdateViewObjectBar(CCmdUI* pCmdUI);
	afx_msg void OnViewAnimationBar();
	afx_msg void OnViewObjectBar();
	afx_msg void OnAniStepFwd();
	afx_msg void OnAniStepBkwd();
	afx_msg void OnObjectReset();
	afx_msg void OnCameraAllowRotateX();
	afx_msg void OnCameraAllowRotateY();
	afx_msg void OnCameraAllowRotateZ();
	afx_msg void OnUpdateCameraAllowRotateX(CCmdUI* pCmdUI);
	afx_msg void OnUpdateCameraAllowRotateY(CCmdUI* pCmdUI);
	afx_msg void OnUpdateCameraAllowRotateZ(CCmdUI* pCmdUI);
	afx_msg void OnUpdateObjectRotateX(CCmdUI* pCmdUI);
	afx_msg void OnUpdateObjectRotateY(CCmdUI* pCmdUI);
	afx_msg void OnUpdateObjectRotateZ(CCmdUI* pCmdUI);
	afx_msg void OnDeviceChange();
	afx_msg void OnViewFullscreen();
	afx_msg void OnUpdateViewFullscreen(CCmdUI* pCmdUI);
	afx_msg void OnWindowPosChanging(WINDOWPOS FAR* lpwndpos);
	afx_msg void OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI);
	afx_msg void OnCreateEmitter();
	afx_msg void OnEditEmitter();
	afx_msg void OnUpdateEditEmitter(CCmdUI* pCmdUI);
	afx_msg void OnSaveEmitter();
	afx_msg void OnUpdateSaveEmitter(CCmdUI* pCmdUI);
	afx_msg void OnBoneAutoAssign();
	afx_msg void OnBoneManagement();
	afx_msg void OnSaveAggregate();
	afx_msg void OnCameraAnimate();
	afx_msg void OnUpdateCameraAnimate(CCmdUI* pCmdUI);
	afx_msg void OnUpdateLodSave(CCmdUI* pCmdUI);
	afx_msg void OnUpdateSaveAggregate(CCmdUI* pCmdUI);
	afx_msg void OnCameraResetOnLoad();
	afx_msg void OnUpdateCameraResetOnLoad(CCmdUI* pCmdUI);
	afx_msg void OnObjectRotateYBack();
	afx_msg void OnObjectRotateZBack();
	afx_msg void OnLightRotateY();
	afx_msg void OnLightRotateYBack();
	afx_msg void OnLightRotateZ();
	afx_msg void OnLightRotateZBack();
	afx_msg void OnDestroy();
	afx_msg void OnDecLight();
	afx_msg void OnIncLight();
	afx_msg void OnDecAmbientLight();
	afx_msg void OnIncAmbientLight();
	afx_msg void OnMakeAggregate();
	afx_msg void OnRenameAggregate();
	afx_msg void OnCrashApp();
	afx_msg void OnLODRecordScreenArea();
	afx_msg void OnLODIncludeNull();
	afx_msg void OnUpdateLODIncludeNull(CCmdUI* pCmdUI);
	afx_msg void OnLodPrevLevel();
	afx_msg void OnUpdateLodPrevLevel(CCmdUI* pCmdUI);
	afx_msg void OnLodNextLevel();
	afx_msg void OnUpdateLodNextLevel(CCmdUI* pCmdUI);
	afx_msg void OnLodAutoswitch();
	afx_msg void OnUpdateLodAutoswitch(CCmdUI* pCmdUI);
	afx_msg void OnUpdateMakeMovie(CCmdUI* pCmdUI);
	afx_msg void OnMakeMovie();
	afx_msg void OnSaveScreenshot();
	afx_msg void OnSlideshowDown();
	afx_msg void OnSlideshowUp();
	afx_msg void OnAdvancedAnim();
	afx_msg void OnUpdateAdvancedAnim(CCmdUI* pCmdUI);
	afx_msg void OnCameraSettings();
	afx_msg void OnCopyScreenSize();
	afx_msg void OnListMissingTextures();
	afx_msg void OnCopyAssets();
	afx_msg void OnUpdateCopyAssets(CCmdUI* pCmdUI);
	afx_msg void OnLightingExpose();
	afx_msg void OnUpdateLightingExpose(CCmdUI* pCmdUI);
	afx_msg void OnTexturePath();
	afx_msg void OnChangeResolution();
	afx_msg void OnCreateSphere();
	afx_msg void OnCreateRing();
	afx_msg void OnUpdateEditPrimitive(CCmdUI* pCmdUI);
	afx_msg void OnEditPrimitive();
	afx_msg void OnExportPrimitive();
	afx_msg void OnUpdateExportPrimitive(CCmdUI* pCmdUI);
	afx_msg void OnKillSceneLight();
	afx_msg void OnPrelitMultipass();
	afx_msg void OnUpdatePrelitMultipass(CCmdUI* pCmdUI);
	afx_msg void OnPrelitMultitex();
	afx_msg void OnUpdatePrelitMultitex(CCmdUI* pCmdUI);
	afx_msg void OnPrelitVertex();
	afx_msg void OnUpdatePrelitVertex(CCmdUI* pCmdUI);
	afx_msg void OnAddToLineup();
	afx_msg void OnUpdateAddToLineup(CCmdUI* pCmdUI);
	afx_msg void OnImportFacialAnims();
	afx_msg void OnUpdateImportFacialAnims(CCmdUI* pCmdUI);
	afx_msg void OnRestrictAnims();
	afx_msg void OnUpdateRestrictAnims(CCmdUI* pCmdUI);
	afx_msg void OnBindSubobjectLod();
	afx_msg void OnUpdateBindSubobjectLod(CCmdUI* pCmdUI);
	afx_msg void OnSetCameraDistance();
	afx_msg void OnObjectAlternateMaterials();
	afx_msg void OnCreateSoundObject();
	afx_msg void OnEditSoundObject();
	afx_msg void OnUpdateEditSoundObject(CCmdUI* pCmdUI);
	afx_msg void OnExportSoundObj();
	afx_msg void OnUpdateExportSoundObj(CCmdUI* pCmdUI);
	afx_msg void OnWireframeMode();
	afx_msg void OnUpdateWireframeMode(CCmdUI* pCmdUI);
	afx_msg void OnUpdateBackgroundFog(CCmdUI* pCmdUI);
	afx_msg void OnBackgroundFog();
	afx_msg void OnUpdateScaleEmitter(CCmdUI* pCmdUI);
	afx_msg void OnScaleEmitter();
	afx_msg void OnUpdateToggleSorting(CCmdUI* pCmdUI);
	afx_msg void OnToggleSorting();
	afx_msg void OnCameraBonePosX();
	afx_msg void OnUpdateCameraBonePosX(CCmdUI* pCmdUI);
	afx_msg void OnViewPatchGapFill();
	afx_msg void OnUpdateViewPatchGapFill(CCmdUI* pCmdUI);
	afx_msg void OnViewSubdivision1();
	afx_msg void OnUpdateViewSubdivision1(CCmdUI* pCmdUI);
	afx_msg void OnViewSubdivision2();
	afx_msg void OnUpdateViewSubdivision2(CCmdUI* pCmdUI);
	afx_msg void OnViewSubdivision3();
	afx_msg void OnUpdateViewSubdivision3(CCmdUI* pCmdUI);
	afx_msg void OnViewSubdivision4();
	afx_msg void OnUpdateViewSubdivision4(CCmdUI* pCmdUI);
	afx_msg void OnViewSubdivision5();
	afx_msg void OnUpdateViewSubdivision5(CCmdUI* pCmdUI);
	afx_msg void OnViewSubdivision6();
	afx_msg void OnUpdateViewSubdivision6(CCmdUI* pCmdUI);
	afx_msg void OnViewSubdivision7();
	afx_msg void OnUpdateViewSubdivision7(CCmdUI* pCmdUI);
	afx_msg void OnViewSubdivision8();
	afx_msg void OnUpdateViewSubdivision8(CCmdUI* pCmdUI);
	afx_msg void OnMungeSortOnLoad();
	afx_msg void OnUpdateMungeSortOnLoad(CCmdUI* pCmdUI);
	afx_msg void OnEnableGammaCorrection();
	afx_msg void OnUpdateEnableGammaCorrection(CCmdUI* pCmdUI);
	afx_msg void OnSetGamma();
	afx_msg void OnEditAnimatedSoundsOptions();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()

public:
	
	//////////////////////////////////////////////////////////////////////
	//	Public methods
	//////////////////////////////////////////////////////////////////////
	CView *GetPane (int iRow, int iCol) const
	{ return (CView *)m_wndSplitter.GetPane (iRow, iCol); }

	void	ShowObjectProperties (void);

	void	OnSelectionChanged (ASSET_TYPE newAssetType);

	void	Update_Frame_Time (DWORD milliseconds);
	void	UpdatePolygonCount (int iPolygons);
	void	Update_Particle_Count (int particles);
	void	UpdateCameraDistance (float cameraDistance);
	void	UpdateFrameCount (int iCurrentFrame, int iTotalFrames, float frame_rate);
	void	RestoreOriginalSize (void);
	void	Select_Device (bool show_dlg = true);

	HMENU	Get_Emitters_List_Menu (void) const { return m_hEmittersSubMenu; }
	void	Update_Emitters_List (void);

protected:
	
	//////////////////////////////////////////////////////////////////////
	//	Protected methods
	//////////////////////////////////////////////////////////////////////
	void	Restore_Window_State (void);

private:

	//////////////////////////////////////////////////////////////////////
	//	Private member data
	//////////////////////////////////////////////////////////////////////
	ASSET_TYPE m_currentAssetType;
	CFancyToolbar m_objectToolbar;
	CFancyToolbar m_animationToolbar;
	BOOL m_bShowAnimationBar;
	RECT m_OrigRect;
	HMENU m_hEmittersSubMenu;
	BOOL m_bInitialized;
};

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_MAINFRM_H__2BB39E2F_5D3A_11D2_9FC6_00104B791122__INCLUDED_)
