void XmlSettingsDialog::UpdateXml (bool whole) { const auto& nodes = Document_->elementsByTagName ("item"); if (whole) for (int i = 0; i < nodes.size (); ++i) { auto elem = nodes.at (i).toElement (); if (!elem.hasAttribute ("property")) continue; const auto& name = elem.attribute ("property"); const auto& value = WorkingObject_->property (name.toLatin1 ().constData ()); UpdateSingle (name, value, elem); } else for (const auto& pair : Util::Stlize (HandlersManager_->GetNewValues ())) { QDomElement element; const auto& name = pair.first; for (int j = 0, size = nodes.size (); j < size; ++j) { const auto& e = nodes.at (j).toElement (); if (e.isNull ()) continue; if (e.attribute ("property") == name) { element = e; break; } } if (element.isNull ()) { qWarning () << Q_FUNC_INFO << "element for property" << name << "not found"; return; } UpdateSingle (name, pair.second, element); } }
bool SpectraCoroutineExecutor::DoWork(void) { if(!coroutines.empty()) { coroutine_queue tmp_queue; while(!coroutines.empty()) { std::shared_ptr<SpectraCoroutine> coro = coroutines.front(); coroutines.pop(); if(!UpdateSingle(coro)) { tmp_queue.push(coro); } } coroutines.swap(tmp_queue); } return coroutines.empty(); }