diff options
Diffstat (limited to 'hammer/op_output.h')
| -rw-r--r-- | hammer/op_output.h | 231 |
1 files changed, 231 insertions, 0 deletions
diff --git a/hammer/op_output.h b/hammer/op_output.h new file mode 100644 index 0000000..7116279 --- /dev/null +++ b/hammer/op_output.h @@ -0,0 +1,231 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +//=============================================================================// + +#ifndef OP_OUTPUT_H +#define OP_OUTPUT_H +#pragma once + +#include "ObjectPage.h" +#include "Resource.h" +#include "TargetNameCombo.h" +#include "MapEntity.h" +#include "ToolPickEntity.h" +#include "AutoSelCombo.h" +#include "AnchorMgr.h" + + +#define OUTPUT_LIST_NUM_COLUMNS 6 + + +class COP_Output; + + +enum SortDirection_t; + + +//----------------------------------------------------------------------------- +// Purpose: A little glue object that connects the entity picker tool to our dialog. +//----------------------------------------------------------------------------- +class COP_OutputPickEntityTarget : public IPickEntityTarget +{ + public: + + void AttachEntityDlg(COP_Output *pDlg) { m_pDlg = pDlg; } + void OnNotifyPickEntity(CToolPickEntity *pTool); + void AttachDlgItem( int nItem ) { m_nDlgItem = nItem; } + + private: + int m_nDlgItem; + COP_Output *m_pDlg; +}; + + +//----------------------------------------------------------------------------- +// Purpose: A list of connections and entites that send them. +//----------------------------------------------------------------------------- +class COutputConnection +{ +public: + CEntityConnectionList* m_pConnList; + CMapEntityList* m_pEntityList; + bool m_bIsValid; + bool m_bOwnedByAll; // Connection used by all selected entities +}; + + +class COP_Output : public CObjectPage, public CFilteredComboBox::ICallbacks +{ + public: + static CImageList *m_pImageList; + static CEntityConnectionList* m_pConnectionBuffer; // Stores connections for copy/pasting + static void EmptyCopyBuffer(void); + + public: + + DECLARE_DYNCREATE(COP_Output) + + // Construction + COP_Output(void); + ~COP_Output(void); + + virtual void UpdateData( int Mode, PVOID pData, bool bCanEdit ); + void SetSelectedConnection(CEntityConnection *pConnection); + bool ShouldShowHiddenTargets(); + + protected: + + virtual void OnTextChanged( const char *pText ); + + void AddEntityConnections(CMapEntity *pEntity, bool bFirst); + void AddConnection(CEntityConnection *pConnection); + void RemoveAllEntityConnections(void); + void UpdateConnectionList(void); + void ResizeColumns(void); + + void SetSelectedItem(int nItem); + void SetSelectedConnections(CEntityConnectionList &List); + + // Validation functions + bool ValidateConnections(COutputConnection *pOutputConn, bool bVisibilityCheck); + void UpdateValidityButton(void); + + // Edit controls + void UpdateEditControls(void); + void EnableEditControls(bool bValue = true); + void UpdateItemValidity(int nItem); + void EnableTarget(bool bEnable); + void EnableParam(bool bEnable); + bool bSkipEditControlRefresh; + + // Functions for updating edited connections + void UpdateEditedInputs(void); + void UpdateEditedOutputs(void); + void UpdateEditedTargets(void); + void UpdateEditedDelays(void); + void UpdateEditedFireOnce(void); + void UpdateEditedParams(void); + + // Fuctions for reacting to combo box changes + void OutputChanged(void); + void InputChanged(void); + + void SortListByColumn(int nColumn, SortDirection_t eDirection); + void SetSortColumn(int nColumn, SortDirection_t eDirection); + void UpdateColumnHeaderText(int nColumn, bool bIsSortColumn, SortDirection_t eDirection); + + CMapEntityList m_EntityList; // Filtered m_pObjectList that only includes map entities + const CMapEntityList* m_pMapEntityList; // List of all entities in the map. + CEntityConnectionList m_EditList; // List of selected connections being edited + + void UpdateEntityList(); // Generates m_EntityList from m_pObjectList + + protected: + + CAnchorMgr m_AnchorMgr; + + CEditGameClass *m_pEditGameClass; + CMapEntity *m_pEntity; + bool m_bNoParamEdit; + + // + // Cached data for sorting the list view. + // + int m_nSortColumn; // Current column used for sorting. + SortDirection_t m_eSortDirection[OUTPUT_LIST_NUM_COLUMNS]; // Last sort direction per column. + + bool m_bPickingEntities; + + // ######################################## + // Message editing + // ######################################## + void SetConnection(CEntityConnectionList *pConnectionList); + + void SetMapEntityList(const CMapEntityList *pMapEntityList); + + void AddEntityOutputs(CMapEntity *pEntity); + + void FillInputList(void); + void FillOutputList(void); + void FillTargetList(void); + + void FilterInputList(void); + void FilterOutputList(void); + void FilterTargetList(void); + void FilterEntityOutputs(CMapEntity *pEntity); + + void StopPicking(void); + + CClassInput* GetInput(char *szInput, int nSize); + CClassOutput* GetOutput(char *szOutput, int nSize); + CMapEntityList* GetTarget(char *szTarget, int nSize); + + void UpdateCombosForSelectedInput(CClassInput *pInput); + void UpdateCombosForSelectedOutput(CClassOutput *pOutput); + + // ######################################### + + //{{AFX_DATA(COP_Output) + enum { IDD = IDD_OBJPAGE_OUTPUT }; + CListCtrl m_ListCtrl; + CAutoSelComboBox m_ComboOutput; + CTargetNameComboBox m_ComboTarget; + CAutoSelComboBox m_ComboInput; + CButton m_CheckBoxFireOnce; + CButton m_ctlShowHiddenTargetsAsBroken; + CButton m_AddControl; + CButton m_PasteControl; + CButton m_DeleteControl; + + CString m_strOutput; + CString m_strTarget; + CString m_strInput; + CString m_strParam; + float m_fDelay; + BOOL m_bFireOnce; + //}}AFX_DATA + + // ClassWizard generate virtual function overrides + //{{AFX_VIRTUAL(COP_Output) + virtual void DoDataExchange(CDataExchange* pDX); + virtual BOOL OnNotify(WPARAM wParam, LPARAM lParam, LRESULT *pResult); + virtual BOOL OnInitDialog(void); + virtual void OnDestroy(void); + //}}AFX_VIRTUAL + + // Generated message map functions + //{{AFX_MSG(COP_Output) + afx_msg void OnAdd(void); + afx_msg void OnCopy(void); + afx_msg void OnPaste(void); + afx_msg void OnSize( UINT nType, int cx, int cy ); + afx_msg void OnDelete(void); + afx_msg void OnMark(void); + afx_msg void OnPickEntity(void); + afx_msg void OnPickEntityParam(void); + afx_msg void OnSelChangeInput(void); + afx_msg void OnEditUpdateInput(void); + afx_msg void OnSelChangeOutput(void); + afx_msg void OnEditUpdateOutput(void); + afx_msg void OnSelChangeParam(void); + afx_msg void OnEditUpdateParam(void); + afx_msg void OnEditDelay(void); + afx_msg void OnFireOnce(void); + afx_msg void OnShowHiddenTargetsAsBroken(); + //}}AFX_MSG + + DECLARE_MESSAGE_MAP() + + private: + bool m_bEntityParamTarget; + COP_OutputPickEntityTarget m_PickEntityTarget; + CString m_strLastParam; + bool m_bIgnoreTextChanged; + + friend class COP_OutputPickEntityTarget; +public: +}; + +#endif // OP_OUTPUT_H |