/*==LICENSE==* CyanWorlds.com Engine - MMOG client, server and tools Copyright (C) 2011 Cyan Worlds, 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 . You can contact Cyan Worlds, Inc. by email legal@cyan.com or by snail mail at: Cyan Worlds, Inc. 14617 N Newport Hwy Mead, WA 99021 *==LICENSE==*/ #include "hsTypes.h" #include "max.h" #include #include class plComponentBase; class IParamBlock2; class plMaxNodeBase; class plResponderGetComp { public: typedef std::vector ClassIDs; static plResponderGetComp& Instance(); // Get a comp and node it is applied to from the user and store it in the PB // // pb - Your param block // nodeID - ParamID of a reftarg for the node to be put in // compID - ParamID of a reftarg for the comp to be put in // classIDs - Optional list of component Class_ID's to allow (nil for all) bool GetComp(IParamBlock2 *pb, int nodeID, int compID, ClassIDs *classIDs); // Get the comp stored in your PB // Set convertTime to true to verify that the node can convert (ie, only use it after PreConvert) plComponentBase *GetSavedComp(IParamBlock2 *pb, int nodeID, int compID, bool convertTime=false); protected: IParamBlock2 *fPB; int fNodeID; int fCompID; ClassIDs *fClassIDs; typedef std::set NodeSet; #if 0 ULONG fLastAnimComp; ULONG fLastAnimObj; ULONG fLastSoundComp; ULONG fLastSoundObj; #endif void IFindCompsRecur(plMaxNodeBase *node, NodeSet& nodes); void ILoadNodes(plMaxNodeBase *compNode, HWND hDlg); static BOOL CALLBACK ForwardDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam); BOOL DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam); }; class plResponderCompNode { public: typedef std::vector ClassIDs; protected: IParamBlock2 *fPB; int fNodeID; int fCompID; int fCompResID; int fNodeResID; ClassIDs fCompCIDs; // typedef std::set NodeSet; void IUpdateCompButton(HWND hWnd); void IUpdateNodeButton(HWND hWnd); bool IValidate(); public: // Get a comp and node it is applied to from the user and store it in the PB // // pb - Your param block // nodeID - ParamID of a reftarg for the node to be put in // compID - ParamID of a reftarg for the comp to be put in // classIDs - Optional list of component Class_ID's to allow (nil for all) void Init(IParamBlock2 *pb, int compID, int nodeID, int compResID, int nodeResID, ClassIDs *compCIDs); void InitDlg(HWND hWnd); void CompButtonPress(HWND hWnd); void NodeButtonPress(HWND hWnd); bool GetCompAndNode(plComponentBase*& comp, plMaxNodeBase*& node); };