Ejemplo n.º 1
0
	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);
			}
	}
Ejemplo n.º 2
0
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();
}