+ QStringList refsStrings;
+ QStringList refsCategories;
+ vector<docstring>::const_iterator iter;
+ bool noprefix = false;
+ for (iter = refs_.begin(); iter != refs_.end(); ++iter) {
+ QString const lab = toqstr(*iter);
+ refsStrings.append(lab);
+ if (groupCB->isChecked()) {
+ if (lab.contains(":")) {
+ QString const pref = lab.split(':')[0];
+ if (!refsCategories.contains(pref)) {
+ if (!pref.isEmpty())
+ refsCategories.append(pref);
+ else
+ noprefix = true;
+ }
+ }
+ else
+ noprefix = true;
+ }
+ }
+ // sort categories case-intensively
+ qSort(refsCategories.begin(), refsCategories.end(),
+ caseInsensitiveLessThan /*defined above*/);
+ if (noprefix)
+ refsCategories.insert(0, qt_("<No prefix>"));
+
+ QString const sort = sortingCO->isEnabled() ?
+ sortingCO->itemData(sortingCO->currentIndex()).toString()
+ : QString();
+ if (sort == "nocase")
+ qSort(refsStrings.begin(), refsStrings.end(),
+ caseInsensitiveLessThan /*defined above*/);
+ else if (sort == "case")
+ qSort(refsStrings.begin(), refsStrings.end());
+
+ if (groupCB->isChecked()) {
+ QList<QTreeWidgetItem *> refsCats;
+ for (int i = 0; i < refsCategories.size(); ++i) {
+ QString const cat = refsCategories.at(i);
+ QTreeWidgetItem * item = new QTreeWidgetItem(refsTW);
+ item->setText(0, cat);
+ for (int j = 0; j < refsStrings.size(); ++j) {
+ QString const ref = refsStrings.at(j);
+ if ((ref.startsWith(cat + QString(":")))
+ || (cat == qt_("<No prefix>")
+ && (!ref.mid(1).contains(":") || ref.left(1).contains(":")))) {
+ QTreeWidgetItem * child =
+ new QTreeWidgetItem(item);
+ child->setText(0, ref);
+ item->addChild(child);
+ }
+ }
+ refsCats.append(item);
+ }
+ refsTW->addTopLevelItems(refsCats);
+ } else {
+ QList<QTreeWidgetItem *> refsItems;
+ for (int i = 0; i < refsStrings.size(); ++i) {
+ QTreeWidgetItem * item = new QTreeWidgetItem(refsTW);
+ item->setText(0, refsStrings.at(i));
+ refsItems.append(item);
+ }
+ refsTW->addTopLevelItems(refsItems);