95 lines
2.4 KiB
C++
95 lines
2.4 KiB
C++
#ifndef GUINodeContainer_h__
|
|
#define GUINodeContainer_h__
|
|
|
|
#include <gui/GUIWindow.h>
|
|
#include <gui/GUIManager.h>
|
|
#include <gui/GUIMenu.h>
|
|
#include "GUIShaderNode.h"
|
|
#include "GUIShaderNodeTexture.h"
|
|
#include <shaders/IShaderGraph.h>
|
|
#include <vector>
|
|
#include <ISerializable.h>
|
|
#include <delegate/Delegate.h>
|
|
|
|
struct LinkInfo
|
|
{
|
|
GUIShaderNodeIO* left;
|
|
GUIShaderNodeIO* right;
|
|
};
|
|
|
|
#define SPLINE_FREQ 20
|
|
typedef std::vector<GUIShaderNode*> NodeCollection;
|
|
typedef std::vector<GUIShaderNode*>::iterator NodeCollectionItr;
|
|
|
|
class GUINodeContainer : public GUIWindow, public ISerializable
|
|
{
|
|
public:
|
|
EVENT2(GUINodeContainer_NodeEvent, GUINodeContainer*, GUIShaderNode*);
|
|
GUINodeContainer_NodeEvent Event_DeleteNode;
|
|
|
|
GUINodeContainer(IShaderGraph* graph);
|
|
~GUINodeContainer();
|
|
bool Serialize(Core::IMemoryStream* stm);
|
|
bool Deserialize(Core::IMemoryStream* stm);
|
|
|
|
//void AddChild(GUIWindow* val);
|
|
void MakeLink(GUIShaderNodeIO* left, GUIShaderNodeIO* right);
|
|
void BreakLink(GUIShaderNodeIO* left, GUIShaderNodeIO* right);
|
|
|
|
void SetBackColor(const Vec4f& color);
|
|
void RenderSelf();
|
|
GUIShaderNode* FindNode(int id);
|
|
GUIShaderNode* AddNode(const String& name);
|
|
void Invalidate()
|
|
{
|
|
GUIWindow::Invalidate();
|
|
invalid = true;
|
|
}
|
|
GUIShaderNode* GetMaterialNode()
|
|
{
|
|
return materialNode;
|
|
}
|
|
NodeCollection* GetTextureUnits();
|
|
void RebuildGraph();
|
|
size_t GetNodeCount()
|
|
{
|
|
return nodes.size();
|
|
}
|
|
GUIShaderNode* getNode(int id)
|
|
{
|
|
return nodes[id];
|
|
}
|
|
String GetTexNameByID(int id);
|
|
private:
|
|
void OnNodeSelect(GUIShaderNode* node);
|
|
void GenGeom();
|
|
void OnNodeLayoutUpdate();
|
|
void SetSelection(GUIShaderNode* node);
|
|
void DeleteNode(GUIShaderNode* node);
|
|
void OnNodeHeaderMouseClick(GUIWindow* wnd, int param);
|
|
void OnNodePortMouseClick(GUIWindow* wnd, int param);
|
|
|
|
|
|
void OnDeleteLink(GUIMenuItem* itm);
|
|
|
|
void OnDeleteNode(GUIMenuItem* itm);
|
|
|
|
void RegisterNewNode(GUIShaderNode* node);
|
|
|
|
GUIShaderNode* FindNodeByGraphicsID(int id);
|
|
GUIShaderNode* selection;
|
|
GUIShaderNodeIO* selected_port;
|
|
GUIMenu* menu;
|
|
NodeCollection nodes;
|
|
NodeCollection texNodes;
|
|
GUIShaderNode* materialNode;
|
|
bool invalid;
|
|
IShaderGraph* graphics_graph;
|
|
typedef std::vector<LinkInfo> LinksCollection;
|
|
typedef std::vector<LinkInfo>::iterator LinksCollectionItr;
|
|
LinksCollection links;
|
|
int cache_length;
|
|
GUIVertex cache[SPLINE_FREQ * 2];
|
|
GUIVertex cache2[SPLINE_FREQ * 2 * 128]; //128 splines cache
|
|
};
|
|
#endif // GUINodeContainer_h__
|