/** * Check if our children are unrolled and if so roll them back up. * * @param it :: iterator pointing to the item whose children will be rolled up. */ void HistoryView::rollChildren(std::vector<HistoryItem>::iterator it) { const size_t numChildren = it->numberOfChildren(); ++it; for (size_t i = 0; i < numChildren; ++i) { if (it->isUnrolled()) roll(it); } }
/** * Iterate over each of the items children and output them to the script. * * This moves the iterator forward over each of the child records and writes them to * the stream. * * @param os :: output string stream to append algorithms to. * @param iter :: reference to the iterator pointing to the vector of history items * @param depth :: count of how far we've recursed into the history */ void ScriptBuilder::buildChildren(std::ostringstream& os, std::vector<HistoryItem>::const_iterator& iter, int depth) { size_t numChildren = iter->numberOfChildren(); ++iter; //move to first child for(size_t i = 0; i < numChildren && iter != m_historyItems.end(); ++i, ++iter) { writeHistoryToStream(os, iter, depth); } --iter; }
/** * Iterate over each of the items children and output them to the script. * This moves the iterator forward over each of the child records and writes * them to the stream. * * @param iter :: reference to the iterator pointing to the vector of history *items */ void NotebookBuilder::buildChildren( std::vector<HistoryItem>::const_iterator &iter) { size_t numChildren = iter->numberOfChildren(); ++iter; // move to first child for (size_t i = 0; i < numChildren && iter != m_historyItems.end(); ++i, ++iter) { writeHistoryToStream(iter); } --iter; }
/** * Roll an unrolled algorithm history item and remove its children from the *view. * * This removes each of the child algorithm histories (if any) and marks * the parent as being "rolled up". Note that this will recursively "roll up" *any child * history objects that are also unrolled. This method does nothing if * the history object has no children. * * @param it :: iterator to the list of history item objects at the positon to *roll */ void HistoryView::roll(std::vector<HistoryItem>::iterator &it) { // the number of records after this position const size_t numChildren = it->numberOfChildren(); if (it->isUnrolled() && numChildren > 0) { // mark this record as not being ignored by the script builder it->unrolled(false); this->rollChildren(it); // Then just remove the children from the list ++it; it = m_historyItems.erase(it, it + numChildren); } else ++it; }