struct treeNode* findChildNode(Tree* tree ,struct Node* ptr, void* key){ ptr = ptr->value->child; while(ptr != NULL){ if(tree->comparatorFun(ptr->value->employee ,key))return ptr->value; if(ptr->value->child != NULL && findChildNode(tree, ptr, key) != NULL){ return findChildNode(tree, ptr, key); } ptr = ptr->next; } return NULL; }
bool RangeProfilePlotManager::deserialize(SessionItemDeserializer& deserializer) { XmlReader reader(NULL, false); DOMElement* pRootElement = deserializer.deserialize(reader, "RangeProfilePlotManager"); if (pRootElement) { std::string viewId = A(pRootElement->getAttribute(X("viewId"))); mpView = dynamic_cast<PlotView*>(Service<SessionManager>()->getSessionItem(viewId)); mpPlot = Service<DesktopServices>()->createPlotWidget(getName(), CARTESIAN_PLOT); VERIFY(mpPlot); Serializable* pPlotSer = dynamic_cast<Serializable*>(mpPlot); // The imp side is serializable VERIFY(pPlotSer); if (!pPlotSer->fromXml(findChildNode(pRootElement, "plot"), reader.VERSION)) { return false; } mpView = mpPlot->getPlot(); VERIFY(mpView); Serializable* pPlotViewSer = dynamic_cast<Serializable*>(mpView); // The imp side is serializable VERIFY(pPlotViewSer); if (!pPlotViewSer->fromXml(findChildNode(pRootElement, "plotView"), reader.VERSION)) { return false; } std::list<PlotObject*> objects; mpView->getObjects(POINT_SET, objects); FOR_EACH_DOMNODE(pRootElement, pChild) { if (XMLString::equals(pChild->getNodeName(), X("signature"))) { DOMElement* pChldElmnt = static_cast<DOMElement*>(pChild); std::string sigId = A(pChldElmnt->getAttribute(X("sigId"))); std::string pointSetName = A(pChldElmnt->getAttribute(X("pointSetName"))); Signature* pSignature = static_cast<Signature*>(Service<SessionManager>()->getSessionItem(sigId)); if (pSignature == NULL) { return false; } mSigPointSets[pSignature] = pointSetName; pSignature->attach(SIGNAL_NAME(Subject, Deleted), Slot(this, &RangeProfilePlotManager::signatureDeleted)); pSignature->getDataDescriptor()->attach(SIGNAL_NAME(DataDescriptor, Renamed), Slot(this, &RangeProfilePlotManager::signatureRenamed)); } } deserializer.nextBlock(); return DockWindowShell::deserialize(deserializer); } return false; }
Node::NodeSP Node::addChildNode(Node* child) { if(child != nullptr) { QString key(child->getName()); NodeSP child_sp(child); mChildren.insert(std::make_pair(key, child_sp)); child_sp->setParent(this); child_sp->initialize(); if(!mIsEnabled) child->disable(); return findChildNode(key, false); } else { return nullptr; } }
QStringList Bookmarks::bookmarkList(const QString &type) { QStringList bookmarkedItemList; if (type == "Verses" || type == tr("Verses")) { QDomElement verseNode = findChildNode("folder", "Verses"); if (!verseNode.isNull()) { QTreeWidgetItem* versesParentItem = m_domElementForItem.key(verseNode); if (versesParentItem) { int countOfChildren = versesParentItem->childCount(); for (int i = 0; i < countOfChildren; ++i) { QTreeWidgetItem* child = versesParentItem->child(i); if (child) { bookmarkedItemList << versesParentItem->child(i)->data(0, Qt::UserRole).toString(); } } } } } return bookmarkedItemList; }
//查找某号码 char *searchCallNumber(Tree *pTree, NodeType *callNum, int len) { int i; TreeNode *ptempNode; if (pTree == NULL) return NULL; if (pTree->root == NULL) return NULL; ptempNode = pTree->root; if (ptempNode->val != callNum[0]) return NULL; for (i=1; i<len; i++) { ptempNode = findChildNode(ptempNode, callNum[i]); if (ptempNode == NULL) return NULL; } printf("success.\n"); return (char *)ptempNode->child; //最后一个节点child指针指向用户名,或数据结构 }
void Node::removeChildNode(const QString name) { if(findChildNode(name, false) != nullptr) { findChildNode(name, false)->deinitialize(); // destroy recursively mChildren.erase(name); } }
//删除号码 BOOL delCallNumber(Tree *pTree, NodeType *callNum, int len) { int i; int delIndex = 0; TreeNode *ptempNode; TreeNode *delList[CALL_NUM_LENGHT]; BOOL hasBorther[CALL_NUM_LENGHT]; memset(delList, 0, sizeof(delList)); memset(hasBorther, 0, sizeof(hasBorther)); if (pTree == NULL || callNum == NULL) return FALSE; delList[0] = pTree->root; if (delList[0] == NULL) return FALSE; if (delList[0]->val != callNum[0]) return FALSE; for (i=1; i<CALL_NUM_LENGHT; i++) { ptempNode = findChildNode(delList[i-1], callNum[i]); if (ptempNode == NULL) { printf("\ncall number not exist.\n"); return FALSE; } hasBorther[i] = delList[i-1]->child->brother != NULL ? TRUE : FALSE; delList[i] = ptempNode; } delIndex = getDelIndex(hasBorther, sizeof(hasBorther)/sizeof(hasBorther[0])); if (delIndex != -2) { if (delIndex == -1) { pTree->root = NULL; ptempNode = delList[0]; } else { //有兄弟节点 ptempNode = findPreNode(delList[delIndex], delList[delIndex+1]); if (ptempNode == NULL) return FALSE; if (ptempNode == delList[delIndex]) //左 delList[delIndex]->child = delList[delIndex+1]->brother; else ptempNode->brother = delList[delIndex+1]->brother; ptempNode = delList[delIndex+1]; } while (ptempNode) { ptempNode = delChildNode(ptempNode); } } else { return FALSE; } return TRUE; }
bool Bookmarks::updateBookmarkState(const QString &type, const QVariant &data, bool state) { if (type == "Verses" || type == tr("Verses")) { QDomElement verseNode = findChildNode("folder", "Verses"); if (verseNode.isNull()) { QDomElement root = m_domDocument.createElement("folder"); QDomElement child = m_domDocument.createElement("title"); QDomText newTitleText = m_domDocument.createTextNode(tr("Verses")); root.setAttribute("folded", "no"); child.appendChild(newTitleText); root.appendChild(child); m_domDocument.documentElement().appendChild(root); verseNode = root; parseFolderElement(root); } QTreeWidgetItem* parentItem = m_domElementForItem.key(verseNode); //REMOVE OPERATION if (!state) { int countOfChildren = parentItem->childCount(); int numOfDel = 0; bool allMatchedRemoved = true; for (int i = 0; i < countOfChildren; ++i) { QTreeWidgetItem* childItem = parentItem->child(i); if (!childItem) { continue; } if (childItem->data(0, Qt::UserRole).toString() == data.toStringList().at(0) + "|" + data.toStringList().at(1)) { ++numOfDel; if (unBookmarkItem(childItem)) { --i; //because one of children was deleted --countOfChildren; } else { allMatchedRemoved = false; } } } //allMatchedRemoved is false when at least one of // matched items are not deleted!! return allMatchedRemoved; } QDomElement bookmark = m_domDocument.createElement("bookmark"); QDomElement bookmarkTitle = m_domDocument.createElement("title"); QDomElement bookmarkDescription = m_domDocument.createElement("desc"); QDomElement bookmarkInfo = m_domDocument.createElement("info"); QDomElement infoMetaData = m_domDocument.createElement("metadata"); infoMetaData.setAttribute("owner", "http://saaghar.pozh.org"); QDomText bookmarkSaagharMetadata = m_domDocument.createTextNode(data.toStringList().at(0) + "|" + data.toStringList().at(1)); infoMetaData.appendChild(bookmarkSaagharMetadata); bookmarkInfo.appendChild(infoMetaData); bookmark.appendChild(bookmarkTitle); bookmark.appendChild(bookmarkDescription); bookmark.appendChild(bookmarkInfo); verseNode.appendChild(bookmark); qDebug() << data << state; QDomElement firstChild = m_domDocument.documentElement().firstChildElement("folder"); firstChild.text(); QTreeWidgetItem* item = createItem(bookmark, parentItem); item->setIcon(0, m_bookmarkIcon); QString title = data.toStringList().at(2); item->setText(0, title); item->setToolTip(0, title); item->setData(0, Qt::UserRole, data.toStringList().at(0) + "|" + data.toStringList().at(1)); item->setData(1, Qt::UserRole, data.toStringList().at(3)); if (data.toStringList().size() == 5) { item->setText(1, data.toStringList().at(4)); item->setToolTip(1, data.toStringList().at(4)); } if (parentItem->childCount() == 1) { resizeColumnToContents(0); resizeColumnToContents(1); } return true; } //an unknown type!! return false; }