void SortedList<T, Pred>::copyNodes(const SortedList<T, Pred>& rhs) { SortedList<T, Pred>::const_iterator iter = rhs.begin(); while (iter != rhs.end()) { push_back(*iter); ++iter; } }
static void generateJSNavTree(QList<FTVNode *> &nodeList) { QString htmlOutput = Config::getString("html-output"); // new JS QFile f(htmlOutput + "/navtreedata.js"); SortedList<NavIndexEntry *> navIndex; if (f.open(QIODevice::WriteOnly)) { QTextStream t(&f); t << "var NAVTREE =" << endl; t << "[" << endl; t << " [ "; QString projName = Config::getString("project-name"); if (projName.isEmpty()) { if (Doxy_Globals::mainPage && ! Doxy_Globals::mainPage->title().isEmpty()) { // use title of main page as root t << "\"" << convertToJSString(Doxy_Globals::mainPage->title()) << "\", "; } else { // use default section title as root LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::MainPage); t << "\"" << convertToJSString(lne->title()) << "\", "; } } else { // use PROJECT_NAME as root tree element t << "\"" << convertToJSString(projName) << "\", "; } t << "\"index" << Doxy_Globals::htmlFileExtension << "\", "; // add special entry for index page navIndex.inSort(new NavIndexEntry("index" + Doxy_Globals::htmlFileExtension, "")); // related page index, written as a child of index.html navIndex.inSort(new NavIndexEntry("pages" + Doxy_Globals::htmlFileExtension, "")); // adjust for display output reSortNodes(nodeList); bool omitComma = true; generateJSTree(navIndex, t, nodeList, 1, omitComma); if (omitComma) { t << "]" << endl; } else { t << endl << " ] ]" << endl; } t << "];" << endl << endl; int subIndex = 0; int elemCount = 0; const int maxElemCount = 250; // new JS QFile fsidx(htmlOutput + "/navtreeindex0.js"); if (fsidx.open(QIODevice::WriteOnly)) { QTextStream tsidx(&fsidx); t << "var NAVTREEINDEX =" << endl; t << "[" << endl; tsidx << "var NAVTREEINDEX" << subIndex << " =" << endl; tsidx << "{" << endl; omitComma = true; auto nextItem = navIndex.begin(); for (auto e : navIndex) { // for each entry ++nextItem; if (elemCount == 0) { if (! omitComma) { t << "," << endl; } else { omitComma = false; } t << "\"" << e->m_url << "\""; } tsidx << "\"" << e->m_url << "\":[" << e->m_indexId << "]"; if (nextItem != navIndex.end() && elemCount < maxElemCount - 1) { // not the last entry tsidx << ","; } tsidx << endl; elemCount++; if (nextItem != navIndex.end() && elemCount >= maxElemCount) { // switch to new sub-index tsidx << "};" << endl; elemCount = 0; fsidx.close(); subIndex++; fsidx.setFileName(htmlOutput + "/navtreeindex" + QString::number(subIndex) + ".js"); if (! fsidx.open(QIODevice::WriteOnly)) { break; } tsidx.setDevice(&fsidx); tsidx << "var NAVTREEINDEX" << subIndex << " =" << endl; tsidx << "{" << endl; } } tsidx << "};" << endl; t << endl << "];" << endl; } t << endl << "var SYNCONMSG = '" << theTranslator->trPanelSyncTooltip(false) << "';"; t << endl << "var SYNCOFFMSG = '" << theTranslator->trPanelSyncTooltip(true) << "';"; } ResourceMgr::instance().copyResourceAs("html/navtree.js", htmlOutput, "navtree.js"); }