LeechCraft 0.6.70-17335-ge406ffdcaf
Modular cross-platform feature rich live environment.
Loading...
Searching...
No Matches
stddatafiltermenucreator.cpp
Go to the documentation of this file.
1/**********************************************************************
2 * LeechCraft - modular cross-platform feature rich internet client.
3 * Copyright (C) 2006-2014 Georg Rudoy
4 *
5 * Distributed under the Boost Software License, Version 1.0.
6 * (See accompanying file LICENSE or copy at https://www.boost.org/LICENSE_1_0.txt)
7 **********************************************************************/
8
10#include <QVariant>
11#include <QMenu>
12#include <interfaces/iinfo.h>
15#include "util.h"
16
17namespace LC::Util
18{
19 namespace
20 {
21 template<typename T>
22 void AddDatafilterMenuItem (const IDataFilter::FilterVariant& var, QMenu *menu, T actor)
23 {
24 const auto act = menu->addAction (var.Icon_, var.Name_);
25 QObject::connect (act,
26 &QAction::triggered,
27 [var, actor] () mutable { actor (var); });
28 }
29 }
30
31 StdDataFilterMenuCreator::StdDataFilterMenuCreator (const QVariant& dataVar, IEntityManager *em, QMenu *menu)
32 : QObject (menu)
33 {
34 auto entity = MakeEntity (dataVar,
35 QString (),
37 QStringLiteral ("x-leechcraft/data-filter-request"));
38 for (auto plugin : em->GetPossibleHandlers (entity))
39 {
40 auto ii = qobject_cast<IInfo*> (plugin);
41 auto idf = qobject_cast<IDataFilter*> (plugin);
42 if (!idf)
43 continue;
44
45 const auto& vars = idf->GetFilterVariants (dataVar);
46
47 if (vars.isEmpty ())
48 continue;
49
50 const auto actor = [this, entity, plugin, em] (const IDataFilter::FilterVariant& var) mutable
51 {
52 entity.Additional_ [QStringLiteral ("DataFilter")] = var.ID_;
53 em->HandleEntity (entity, plugin);
54
55 ChosenPlugin_ = qobject_cast<IInfo*> (plugin)->GetUniqueID ();
56 ChosenVariant_ = var.ID_;
57 };
58
59 if (vars.size () == 1)
60 AddDatafilterMenuItem (vars.value (0), menu, actor);
61 else
62 {
63 auto searchMenu = menu->addMenu (ii->GetIcon (), idf->GetFilterVerb ());
64 for (const auto& var : vars)
65 AddDatafilterMenuItem (var, searchMenu, actor);
66 }
67 }
68 }
69
71 {
72 return ChosenPlugin_;
73 }
74
76 {
77 return ChosenVariant_;
78 }
79}
Proxy to core entity manager.
virtual bool HandleEntity(LC::Entity entity, QObject *desired=nullptr)=0
Handles the given entity.
virtual QList< QObject * > GetPossibleHandlers(const LC::Entity &entity)=0
Queries what plugins can handle the given entity.
StdDataFilterMenuCreator(const QVariant &data, IEntityManager *iem, QMenu *menu)
Constructs the StdDataFilterMenuCreator.
const QByteArray & GetChosenPlugin() const
Returns the ID of the chosen plugin.
const QByteArray & GetChosenVariant() const
Returns the ID of the chosen data filter variant.
Entity MakeEntity(const QVariant &entity, const QString &location, TaskParameters tp, const QString &mime)
Definition util.cpp:82
@ FromUserInitiated
Definition structures.h:44
@ OnlyHandle
Definition structures.h:68
Describes a single filter variant supported by this data filter.
Definition idatafilter.h:76
QByteArray ID_
The ID of this filter variant.
Definition idatafilter.h:82
QIcon Icon_
The icon representing the filter variant.
Definition idatafilter.h:94
QString Name_
The human-readable name of the filter variant.
Definition idatafilter.h:86