void NodeGraphDisplay::clearSelected() { for(auto c : selectedControls) c->selected = false; selectedControls.clear(); setActiveNode(nullptr); }
void StackGraph::updateGraph(StackNode* node) { resetView(); if(activeNode != 0) delete activeNode; activeNode = 0; setActiveNode(node); }
void NodeGraphDisplay::selectNode(NodeControl *nc, bool set_active) { if(!nc->selected) { nc->selected = true; selectedControls.push_back(nc); } if(set_active) setActiveNode(nc); }
void StackGraph::updateTransition(float dt) { in_transition -= dt; alpha = std::max(0.0f, alpha - dt); // animate transition_bar if(in_transition<=0.0) { setActiveNode(selectedNode); in_transition = 0.0; resetView(); } }
void NodeGraphDisplay::deselectNode(NodeControl *nc) { if(nc->selected) { for(unsigned int i = 0; i < selectedControls.size(); i++) { if(selectedControls[i] == nc) { selectedControls.erase(selectedControls.begin() + i); break; } } nc->selected = false; if(propDisp && propDisp->getActiveNode() == nc->getNode()) setActiveNode(chooseActiveNode()); } }
void CParticleEditor::loadWorkspace(const std::string &fullPath) { // Add to the path std::auto_ptr<CParticleWorkspace> newPW(new CParticleWorkspace); newPW->init(fullPath); // save empty workspace try { newPW->load(); } catch(NLMISC::EStream &e) { nlerror(e.what()); return; } // try to load each ps CWorkspaceNode *firstLoadedNode = NULL; TPWNodeItr itr = newPW->getNodeList().begin(); while(itr != newPW->getNodeList().end()) { CWorkspaceNode *node = (*itr); try { node->loadPS(); } catch(NLMISC::EStream &e) { nlwarning(e.what()); } if (node->isLoaded() && !firstLoadedNode) firstLoadedNode = node; itr++; } closeWorkspace(); _PW = newPW.release(); setActiveNode(firstLoadedNode); }
void NodeGraphDisplay::onMouseUp(APoint m_pos, MouseButton b) { if(pointInside(m_pos)) { if(draggedNode)// && valid(b & NODEGRAPH_CONNECT_NODES_BTN)) { std::cout << "NODE CONNECTING WAS INTERRUPTED!\n"; //Except not really... draggedNode = nullptr; draggedConnector = 0; removeConnection(connectionIndex); connectionIndex = -1; } else if(selectionRect.space != TSpace::INVALID && valid(b & NODEGRAPH_SELECT_NODES_BTN)) { /* if(selectedControls.size() > 0) { //Choose which selected control is in focus //selectedControls[selectedControls.size() - 1]->setFocus(true); if(propDisp) propDisp->setActiveNode(chooseActiveNode()); } else if(propDisp) { //No selected controls propDisp->setActiveNode(nullptr); } */ setActiveNode(chooseActiveNode()); selectionRect.space = TSpace::INVALID; } } }
void CParticleEditor::closeWorkspace() { setActiveNode(NULL); delete _PW; _PW = NULL; }
void StackGraph::logic(float t, float dt) { if(paused) return; if(activeNode==0) return; StackNode* clickedNode = mouseOverNode = 0; StackNode* nodeAtMouse = activeNode->mouseOverChildren(mousepos); if(nodeAtMouse != 0 && !nodeAtMouse->isLoading()) { mouseOverNode = nodeAtMouse; if(mouseclicked) clickedNode = nodeAtMouse; } if(clickedNode != 0) { selectNode(clickedNode); } else if(mouseclicked) { vec2f barclick = mousepos - corner; //select parent node if(section_bounds.contains(barclick)) { StackNode* parent = activeNode->getParent(); if(parent != 0) { setActiveNode(parent); resetView(); } } } if(in_transition>0.0) { updateTransition(dt); } else if(alpha < 1.0) { alpha = std::min(1.0f, alpha + dt); } if(last_update > gStackGraphFetchDelay) { last_update = 0.0; // activeNode->fetchBets(); } last_update += dt; //update the scale of the graph updateScale(dt); //update active node bets activeNode->updateBets(dt); //time char datestr[256]; long currtime = time(0); struct tm* timeinfo = localtime ( &currtime ); strftime(datestr, 256, "%d/%m/%Y %X", timeinfo); displaydate = datestr; mouseclicked = false; }