//========= 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