Ejemplo n.º 1
0
	void ContactDropFilter::CollectDataFilters (QStringList& choiceItems,
			QList<std::function<void ()>>& functions,
			const QImage& image)
	{
		const auto& imageVar = QVariant::fromValue (image);
		const auto& entity = Util::MakeEntity (imageVar,
				{},
				TaskParameter::NoParameters,
				"x-leechcraft/data-filter-request");

		auto prevChoices = choiceItems;
		choiceItems.clear ();
		auto prevFunctions = functions;
		functions.clear ();

		auto em = Core::Instance ().GetProxy ()->GetEntityManager ();
		for (const auto obj : em->GetPossibleHandlers (entity))
		{
			const auto idf = qobject_cast<IDataFilter*> (obj);

			const auto& verb = idf->GetFilterVerb ();

			for (const auto& var : idf->GetFilterVariants (imageVar))
			{
				auto thisEnt = entity;
				thisEnt.Additional_ ["DataFilter"] = var.Name_;

				choiceItems << verb + ": " + var.Name_;
				thisEnt.Additional_ ["DataFilterCallback"] = QVariant::fromValue<DataFilterCallback_f> (
						[this] (const QVariant& var)
						{
							const auto& url = var.toUrl ();
							if (url.isEmpty ())
								return;

							ChatTab_->insertMessageText (url.toEncoded ());
						});
				functions.append ([thisEnt, obj]
						{
							qobject_cast<IEntityHandler*> (obj)->Handle (thisEnt);
						});
			}
		}

		choiceItems << prevChoices;
		functions << prevFunctions;
	}
	StdDataFilterMenuCreator::StdDataFilterMenuCreator (const QVariant& dataVar, IEntityManager *em, QMenu *menu)
	: QObject (menu)
	, EntityMgr_ (em)
	{
		auto entity = MakeEntity (dataVar,
				QString (),
				FromUserInitiated | OnlyHandle,
				"x-leechcraft/data-filter-request");
		for (auto plugin : em->GetPossibleHandlers (entity))
		{
			auto ii = qobject_cast<IInfo*> (plugin);
			auto idf = qobject_cast<IDataFilter*> (plugin);
			if (!idf)
				continue;

			const auto& vars = idf->GetFilterVariants (dataVar);

			if (vars.isEmpty ())
				continue;

			const auto actor = [this, entity, plugin] (const IDataFilter::FilterVariant& var) mutable
					{
						entity.Additional_ ["DataFilter"] = var.ID_;
						EntityMgr_->HandleEntity (entity, plugin);

						ChosenPlugin_ = qobject_cast<IInfo*> (plugin)->GetUniqueID ();
						ChosenVariant_ = var.ID_;
					};

			if (vars.size () == 1)
				AddDatafilterMenuItem (vars.value (0), menu, actor);
			else
			{
				auto searchMenu = menu->addMenu (ii->GetIcon (), idf->GetFilterVerb ());
				for (const auto& var : vars)
					AddDatafilterMenuItem (var, searchMenu, actor);
			}
		}
	}
Ejemplo n.º 3
0
	void ShooterDialog::SetScreenshot (const QPixmap& px)
	{
		CurrentScreenshot_ = px;
		RescaleLabel ();

		Ui_.ActionBox_->clear ();
		Filters_.clear ();

		const auto& image = px.toImage ();
		const auto& filters = Util::GetDataFilters (image, Proxy_->GetEntityManager ());
		for (auto filter : filters)
		{
			auto idf = qobject_cast<IDataFilter*> (filter);
			const auto& verb = idf->GetFilterVerb ();

			for (const auto& var : idf->GetFilterVariants ())
			{
				Filters_.append ({ filter, var.ID_ });
				Ui_.ActionBox_->addItem (QString ("%1: %2").arg (verb).arg (var.Name_));
			}
		}
		Ui_.ActionBox_->addItem (tr ("save"));
	}