DragonNest/Client/EtUITool/LayoutView.h
2024-12-19 09:48:26 +08:00

283 lines
7.9 KiB
C++

#pragma once
#include "resource.h"
#include "EtUIDialog.h"
#include "undo.h"
class CUIToolTemplate;
class CEtUIControl;
class CUnionValueProperty;
typedef
enum SELECT_TYPE_
{
SELECT_NONE,
SELECT_DONE,
SELECT_LAST
} SELECT_TYPE;
// NOTE : 컨트롤의 정렬 타입
//
enum ALLIGN_TYPE
{
ALLIGN_LEFT,
ALLIGN_CENTER,
ALLIGN_RIGHT,
ALLIGN_TOP,
ALLIGN_MIDDLE,
ALLIGN_BOTTOM,
ALLIGN_HORIZONTAL,
ALLIGN_VERTICAL
};
// NOTE : 컨트롤의 사이즈 맞추기 타입
//
enum MAKESIZE_TYPE
{
MAKESIZE_WIDTH,
MAKESIZE_HEIGHT,
MAKESIZE_BOTH
};
struct SCreateControlInfo
{
SCreateControlInfo()
{
pControl = NULL;
emSelect = SELECT_NONE;
nTabOrder = 0;
}
CEtUIControl *pControl;
SELECT_TYPE emSelect;
SUIControlProperty Property;
int nTabOrder;
};
// CLayoutView form view
class CLayoutView : public CFormView, public CUndo
{
DECLARE_DYNCREATE(CLayoutView)
protected:
CLayoutView(); // protected constructor used by dynamic creation
virtual ~CLayoutView();
public:
enum { IDD = IDD_LAYOUTVIEW };
#ifdef _DEBUG
virtual void AssertValid() const;
#ifndef _WIN32_WCE
virtual void Dump(CDumpContext& dc) const;
#endif
#endif
enum
{
NUM_CONTROL_GROUP = 8,
};
protected:
CPoint m_CusorPt;
RECT m_CurDragRect;
CEtUIControl *m_pMoveControl;
bool m_bMoveMode;
bool m_bDragMode;
int m_nCurTabOrder;
int m_nWideScreen;
bool IsCurTabOrder() { return m_nCurTabOrder != -1;}
CString m_szCurFileName;
CEtUIDialog m_LayoutDlg;
SUIDialogInfo m_DlgInfo;
std::vector< CUIToolTemplate * > m_vecLayoutTemplate;
std::vector< SCreateControlInfo > m_vecLayoutControl;
std::vector< SCreateControlInfo > m_vecLayoutControlCopy;
// 인덱스로 두면 중간에 바뀔수도 있어서, 컨트롤 포인터 들고있으려 했는데, Undo때문에 안된다. 이름 들고 비교. 이름 같으면 할수없다.
std::vector< std::string > m_vecControlGroup[NUM_CONTROL_GROUP];
int m_nLastSelectGroup;
bool m_bTabOrderMode;
bool m_bInitStateMode;
int m_nViewCrosshair;
// 그냥 임시로 보이는 뒷배경 다이얼로그.
CEtUIDialog m_BackgroundDlg;
// 그냥 임시로 보이는 뒷배경 다이얼로그 리스트.
std::list<CEtUIDialog *> m_listBackgroundDlg;
// SaveCustomUI
protected:
virtual void UndoLoad(CMemFile* pFile);
virtual void UndoStore(CMemFile* pFile);
std::vector< std::string > m_vecNotUseTemplate;
void LoadNotUseTemplateList();
bool IsNotUseTemplate( CEtUITemplate *pTemplate );
public:
void StartTabOrder();
void EndTabOrder();
bool SetTabOrder( int nOrder, CEtUIControl *pControl );
void AddTabOrder( int nStart, int nEnd, int nAdd );
void StartInitStateMode();
void EndInitStateMode();
void AllignControl( ALLIGN_TYPE emAllign, int nInterval = 0 );
void MakeSameSizeControl( MAKESIZE_TYPE emMakeSize );
CEtUIDialog& GetDialog() { return m_LayoutDlg; }
void GetLayoutDlgPosition( float &fX, float &fY );
void SetDefaultControl( SUIControlProperty *pProperty );
int GetControlCount() { return ( int )m_vecLayoutControl.size(); }
int FindControl( CEtUIControl *pControl );
CEtUIControl *GetControl( POINT Point );
CEtUIControl *GetSelectedControl();
CEtUIControl* SelectControl( POINT Point, bool bMultiSelect );
void SelectControl( int nIndex );
void SelectAllControl( bool bSelect );
void SelectControlRect();
bool IsSelectedControl( CEtUIControl *pControl );
int GetSelectedControlCount();
int GetLastSelectedControlIndex();
void MoveSelectedControl( POINT &Point );
// 멀티셀렉트 상태에서 컨트롤 속성 변경시 멀티셀렉트 된 컨트롤들 속성 한번에 바꾸기.
void ChangeValueSelectedControl( CUnionValueProperty *pVariable, DWORD dwIndex );
void ResizeSelectedControl( SUICoord &ControlCoord );
void ResizeDialog( SUICoord &ControlCoord );
void SortDialogControl();
void GenerateControlID( UI_CONTROL_TYPE Type, char *pszControlID );
bool IsExistControlID( const char *pszControlID );
void DeleteSelectedControl();
void AddLayoutControl( SUICoord &ControlCoord, bool bUseTemplateCoord);
BOOL CheckMultiSelectedCount();
const char *GetTemplateName( SUIControlProperty *pProperty );
void DrawSelectControl();
void DrawTabOrder();
void DrawInitState();
void ReinitAllControl();
void ReinitAllTemplate();
void RegenerateTexture();
void ReconstructLayout();
void RefreshLayoutDlg();
int AddLayoutTemplate( CUIToolTemplate *pTemplate, bool &bAdd );
void NewLayoutDlg();
void SaveLayoutDlg( const char *pszFileName, bool bDoNotCompressTexture = false, bool bMessageBoxSaveFailed = true );
void LoadLayoutDlg( const char *pszFileName );
// 일부 특정 템플릿을 사용하는 UI파일들을 찾아 보여주고 새로 저장
void SaveCustomUI();
void _SearchSubFolderUIFile( const char *pszFolderName );
int m_nCurCustomControlIDforCustomSave;
// 커스텀 템플릿이 아닌 일반 템플릿을 사용하는 UI파일들을 찾아 보여주고 새로 저장
void SaveUIWithUsedTemplate();
void _SaveUIWithUsedTemplate( const char *pszFolderName );
std::string m_nCurSelTemplateNameforCustomSave;
// 몽땅 열고 다시 저장하기.
void SaveAllUI();
void _SaveAllUI( const char *pszFolderName );
void AddBackgroundDialog( const char *pFileName );
void ClearBackgroundDialog();
void DeleteBackgroundDialog( int nIndex );
// 그룹화
void MakeGroupSelectedControl( int nGroupIndex );
void SelectControlGroup( int nGroupIndex );
bool IsGroupControl( int nGroupIndex, CEtUIControl *pControl );
void DrawControlGroupInfo( CDC* pDC, int nX, int nY );
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
DECLARE_MESSAGE_MAP()
public:
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
afx_msg LRESULT OnOpenView( WPARAM wParam, LPARAM lParam );
afx_msg LRESULT OnCloseView( WPARAM wParam, LPARAM lParam );
afx_msg void OnFileSave();
afx_msg void OnFileSaveAs();
afx_msg void OnFileOpen();
afx_msg void OnFileNew();
afx_msg void OnUpdateAllignBottom(CCmdUI *pCmdUI);
afx_msg void OnUpdateAllignCenter(CCmdUI *pCmdUI);
afx_msg void OnUpdateAllignLeft(CCmdUI *pCmdUI);
afx_msg void OnUpdateAllignMiddle(CCmdUI *pCmdUI);
afx_msg void OnUpdateAllignRight(CCmdUI *pCmdUI);
afx_msg void OnUpdateAllignTop(CCmdUI *pCmdUI);
afx_msg void OnUpdateMakesamesizeBoth(CCmdUI *pCmdUI);
afx_msg void OnUpdateMakesamesizeHeight(CCmdUI *pCmdUI);
afx_msg void OnUpdateMakesamesizeWidth(CCmdUI *pCmdUI);
afx_msg void OnAllignBottom();
afx_msg void OnAllignCenter();
afx_msg void OnAllignLeft();
afx_msg void OnAllignMiddle();
afx_msg void OnAllignRight();
afx_msg void OnAllignTop();
afx_msg void OnMakesamesizeBoth();
afx_msg void OnMakesamesizeHeight();
afx_msg void OnMakesamesizeWidth();
afx_msg void OnFormatTaborder();
afx_msg void OnUpdateFormatTaborder(CCmdUI *pCmdUI);
virtual void OnInitialUpdate();
afx_msg void OnEditUndo();
afx_msg void OnEditRedo();
protected:
virtual void PostNcDestroy();
public:
afx_msg void OnUpdateEditUndo(CCmdUI *pCmdUI);
afx_msg void OnUpdateEditRedo(CCmdUI *pCmdUI);
afx_msg void OnEditDelete();
afx_msg void OnEditSelectall();
afx_msg void OnUpdateEditDelete(CCmdUI *pCmdUI);
afx_msg void OnUpdateEditCopy(CCmdUI *pCmdUI);
afx_msg void OnEditCopy();
afx_msg void OnUpdateEditPaste(CCmdUI *pCmdUI);
afx_msg void OnEditPaste();
afx_msg void OnCenterindialogVertical();
afx_msg void OnCenterindialogHorizontal();
afx_msg void OnEditDeletedialogtexture();
afx_msg void OnAllignHorizontal();
afx_msg void OnAllignVertical();
afx_msg void OnUpdateAllignHorizontal(CCmdUI *pCmdUI);
afx_msg void OnUpdateAllignVertical(CCmdUI *pCmdUI);
afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
afx_msg void OnAddCoinTemplate();
afx_msg void OnViewCrosshair();
afx_msg void OnUpdateViewCrosshair(CCmdUI *pCmdUI);
afx_msg void OnViewWidescreen();
afx_msg void OnUpdateViewWidescreen(CCmdUI *pCmdUI);
afx_msg void OnFormatMakesameproperty();
afx_msg void OnUpdateFormatMakesameproperty(CCmdUI *pCmdUI);
afx_msg void OnDelNotusetemplate();
afx_msg void OnFormatInitstate();
afx_msg void OnUpdateFormatInitstate(CCmdUI *pCmdUI);
};