Fix for bug #6747: make single button for node groups didn't work,
functionality was not implemented.
This commit is contained in:
@@ -153,7 +153,7 @@ void nodeUpdateType(struct bNodeTree *ntree, struct bNode* node, struct bNodeT
|
||||
void nodeMakeDynamicType(struct bNode *node);
|
||||
int nodeDynamicUnlinkText(struct ID *txtid);
|
||||
void nodeFreeNode(struct bNodeTree *ntree, struct bNode *node);
|
||||
struct bNode *nodeCopyNode(struct bNodeTree *ntree, struct bNode *node);
|
||||
struct bNode *nodeCopyNode(struct bNodeTree *ntree, struct bNode *node, int internal);
|
||||
|
||||
struct bNodeLink *nodeAddLink(struct bNodeTree *ntree, struct bNode *fromnode, struct bNodeSocket *fromsock, struct bNode *tonode, struct bNodeSocket *tosock);
|
||||
void nodeRemLink(struct bNodeTree *ntree, struct bNodeLink *link);
|
||||
@@ -179,6 +179,8 @@ int nodeGroupUnGroup(struct bNodeTree *ntree, struct bNode *gnode);
|
||||
void nodeVerifyGroup(struct bNodeTree *ngroup);
|
||||
void nodeGroupSocketUseFlags(struct bNodeTree *ngroup);
|
||||
|
||||
void nodeCopyGroup(struct bNode *gnode);
|
||||
|
||||
/* ************** COMMON NODES *************** */
|
||||
|
||||
#define NODE_GROUP 2
|
||||
|
||||
@@ -801,6 +801,23 @@ int nodeGroupUnGroup(bNodeTree *ntree, bNode *gnode)
|
||||
return 1;
|
||||
}
|
||||
|
||||
void nodeCopyGroup(bNode *gnode)
|
||||
{
|
||||
bNodeSocket *sock;
|
||||
|
||||
gnode->id->us--;
|
||||
gnode->id= (ID *)ntreeCopyTree((bNodeTree *)gnode->id, 0);
|
||||
|
||||
/* new_sock was set in nodeCopyNode */
|
||||
for(sock=gnode->inputs.first; sock; sock=sock->next)
|
||||
if(sock->tosock)
|
||||
sock->tosock= sock->tosock->new_sock;
|
||||
|
||||
for(sock=gnode->outputs.first; sock; sock=sock->next)
|
||||
if(sock->tosock)
|
||||
sock->tosock= sock->tosock->new_sock;
|
||||
}
|
||||
|
||||
/* ************** Add stuff ********** */
|
||||
void nodeAddSockets(bNode *node, bNodeType *ntype)
|
||||
{
|
||||
@@ -901,23 +918,30 @@ void nodeUpdateType(bNodeTree *ntree, bNode* node, bNodeType *ntype)
|
||||
|
||||
/* keep socket listorder identical, for copying links */
|
||||
/* ntree is the target tree */
|
||||
bNode *nodeCopyNode(struct bNodeTree *ntree, struct bNode *node)
|
||||
bNode *nodeCopyNode(struct bNodeTree *ntree, struct bNode *node, int internal)
|
||||
{
|
||||
bNode *nnode= MEM_callocN(sizeof(bNode), "dupli node");
|
||||
bNodeSocket *sock;
|
||||
bNodeSocket *sock, *oldsock;
|
||||
|
||||
*nnode= *node;
|
||||
BLI_addtail(&ntree->nodes, nnode);
|
||||
|
||||
duplicatelist(&nnode->inputs, &node->inputs);
|
||||
for(sock= nnode->inputs.first; sock; sock= sock->next)
|
||||
sock->own_index= 0;
|
||||
oldsock= node->inputs.first;
|
||||
for(sock= nnode->inputs.first; sock; sock= sock->next, oldsock= oldsock->next) {
|
||||
oldsock->new_sock= sock;
|
||||
if(internal)
|
||||
sock->own_index= 0;
|
||||
}
|
||||
|
||||
duplicatelist(&nnode->outputs, &node->outputs);
|
||||
for(sock= nnode->outputs.first; sock; sock= sock->next) {
|
||||
sock->own_index= 0;
|
||||
oldsock= node->outputs.first;
|
||||
for(sock= nnode->outputs.first; sock; sock= sock->next, oldsock= oldsock->next) {
|
||||
if(internal)
|
||||
sock->own_index= 0;
|
||||
sock->stack_index= 0;
|
||||
sock->ns.data= NULL;
|
||||
oldsock->new_sock= sock;
|
||||
}
|
||||
|
||||
if(nnode->id)
|
||||
@@ -995,7 +1019,7 @@ bNodeTree *ntreeCopyTree(bNodeTree *ntree, int internal_select)
|
||||
|
||||
node->new_node= NULL;
|
||||
if(internal_select==0 || (node->flag & NODE_SELECT)) {
|
||||
nnode= nodeCopyNode(newtree, node); /* sets node->new */
|
||||
nnode= nodeCopyNode(newtree, node, internal_select); /* sets node->new */
|
||||
if(internal_select) {
|
||||
node->flag &= ~NODE_SELECT;
|
||||
nnode->flag |= NODE_SELECT;
|
||||
|
||||
@@ -58,7 +58,7 @@ typedef struct bNodeStack {
|
||||
#define NS_OSA_VALUES 2
|
||||
|
||||
typedef struct bNodeSocket {
|
||||
struct bNodeSocket *next, *prev;
|
||||
struct bNodeSocket *next, *prev, *new_sock;
|
||||
|
||||
char name[32];
|
||||
bNodeStack ns; /* custom data for inputs, only UI writes in this */
|
||||
|
||||
@@ -247,6 +247,14 @@ static void node_but_title_cb(void *node_v, void *but_v)
|
||||
allqueue(REDRAWNODE, 0);
|
||||
}
|
||||
|
||||
static void node_group_alone_cb(void *node_v, void *unused_v)
|
||||
{
|
||||
bNode *node= node_v;
|
||||
|
||||
nodeCopyGroup(node);
|
||||
|
||||
allqueue(REDRAWNODE, 0);
|
||||
}
|
||||
|
||||
/* ****************** BUTTON CALLBACKS FOR ALL TREES ***************** */
|
||||
|
||||
@@ -272,7 +280,7 @@ static int node_buts_group(uiBlock *block, bNodeTree *ntree, bNode *node, rctf *
|
||||
bt= uiDefBut(block, BUT, B_NOP, str1,
|
||||
butr->xmax-19, butr->ymin, 19, 19,
|
||||
NULL, 0, 0, 0, 0, "Displays number of users.");
|
||||
//uiButSetFunc(bt, node_mat_alone_cb, node, NULL);
|
||||
uiButSetFunc(bt, node_group_alone_cb, node, NULL);
|
||||
}
|
||||
|
||||
uiBlockEndAlign(block);
|
||||
@@ -3104,7 +3112,7 @@ static void node_draw_group_links(SpaceNode *snode, bNode *gnode)
|
||||
bNodeSocket *sock;
|
||||
|
||||
glEnable(GL_BLEND);
|
||||
glEnable( GL_LINE_SMOOTH );
|
||||
glEnable(GL_LINE_SMOOTH);
|
||||
|
||||
fakelink.tonode= fakelink.fromnode= gnode;
|
||||
|
||||
@@ -3129,7 +3137,7 @@ static void node_draw_group_links(SpaceNode *snode, bNode *gnode)
|
||||
}
|
||||
|
||||
glDisable(GL_BLEND);
|
||||
glDisable( GL_LINE_SMOOTH );
|
||||
glDisable(GL_LINE_SMOOTH);
|
||||
}
|
||||
|
||||
/* groups are, on creation, centered around 0,0 */
|
||||
|
||||
Reference in New Issue
Block a user