void Cell::onCellDeleted(Cell* cell) { std::vector<Cell*>::iterator it = m_neighbors.begin(); for (; it != m_neighbors.end(); ++it) { if (*it == cell) { deleteTransition(); break; } } }
void TransitionHandler::updateTransition(QString oldTag, QString tag, int a_track, int b_track, GenTime in, GenTime out, QDomElement xml, bool force) { if (oldTag == tag && !force) updateTransitionParams(tag, a_track, b_track, in, out, xml); else { ////qDebug()<<"// DELETING TRANS: "<<a_track<<"-"<<b_track; deleteTransition(oldTag, a_track, b_track, in, out, xml, false); addTransition(tag, a_track, b_track, in, out, xml, false); } int position = mlt_producer_position(m_tractor->get_producer()); if (position >= in.frames(m_fps) && position <= out.frames(m_fps)) emit refresh(); }
Cell::~Cell() { // calls CellDeleteListener, e.g. for transition if (!m_deleteListeners.empty()) { std::vector<CellDeleteListener*>::iterator it = m_deleteListeners.begin(); for (; it != m_deleteListeners.end(); ++it) { if (*it) { (*it)->onCellDeleted(this); } } } // remove cell from zone if (m_zone) { m_zone->removeCell(this); } // delete m_transition; if (m_transition) { deleteTransition(); } // remove cell from cache (costs, narrow, area) m_layer->getCellCache()->removeCell(this); }
void Cell::createTransition(Layer* layer, const ModelCoordinate& mc, bool immediate) { TransitionInfo* trans = new TransitionInfo(layer); // if layers are the same then it's a portal if (layer != m_layer) { trans->m_difflayer = true; } trans->m_immediate = immediate; trans->m_mc = mc; deleteTransition(); m_transition = trans; Cell* c = layer->getCellCache()->getCell(mc); if (c) { m_neighbors.push_back(c); c->addDeleteListener(this); m_layer->getCellCache()->addTransition(this); } else { delete m_transition; m_transition = NULL; } }