// roster - custom { - // gather new data - QMap newdata; - - QTreeWidgetItemIterator it( d->tw_customRoster ); - while(*it) { - newdata[(*it)->data(0, Qt::UserRole).toString()] = (*it)->data(1, Qt::UserRole).toString(); - ++it; - } + QString baseCustomStatusPath = "options.iconsets.custom-status"; + PsiOptions::instance()->beginBulkUpdate(baseCustomStatusPath); + PsiOptions::instance()->removeOption(baseCustomStatusPath, true); - // remove deleted ones - QStringList previousIdx = PsiOptions::instance()->getChildOptionNames("options.iconsets.custom-status", true, true); - QMap previous; // (regexp, base) - foreach(QString base, previousIdx) { - previous[PsiOptions::instance()->getOption(base + ".regexp").toString()] = base; + int index = 0; + QTreeWidgetItemIterator it(d->tw_customRoster); + while (*it) { + QString path = baseCustomStatusPath + ".a" + QString::number(index++); + PsiOptions::instance()->setOption(path + ".regexp", (*it)->data(0, RegexpRole).toString()); + PsiOptions::instance()->setOption(path + ".iconset", (*it)->data(0, IconsetRole).toString()); } - foreach(QString todel, previous.keys().toSet() - newdata.keys().toSet()) { - QString base = previous[todel]; - PsiOptions::instance()->removeOption(base, true); - } - // update/add all others - foreach(QString regexp, newdata.keys()) { - QString base; - if (previous.contains(regexp)) { - base = previous[regexp]; - } else { - int idx = 0; - do { - base = "options.iconsets.custom-status" ".a" + QString::number(idx); - idx++; - } while (previousIdx.contains(base)); - previous[regexp] = base; - PsiOptions::instance()->setOption(base + ".regexp", regexp); - } - PsiOptions::instance()->setOption(base + ".iconset", newdata[regexp]); - } + PsiOptions::instance()->endBulkUpdate(); }