*
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
#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__
|
||||
Reference in New Issue
Block a user