LeechCraft 0.6.70-19424-g027e980fd1
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 act,
28 [var, actor] () mutable { actor (var); });
29 }
30 }
31
32 StdDataFilterMenuCreator::StdDataFilterMenuCreator (const QVariant& dataVar, IEntityManager *em, QMenu *menu)
33 : QObject (menu)
34 {
35 auto entity = MakeEntity (dataVar,
36 QString (),
38 QStringLiteral ("x-leechcraft/data-filter-request"));
39 for (auto plugin : em->GetPossibleHandlers (entity))
40 {
41 auto ii = qobject_cast<IInfo*> (plugin);
42 auto idf = qobject_cast<IDataFilter*> (plugin);
43 if (!idf)
44 continue;
45
46 const auto& vars = idf->GetFilterVariants (dataVar);
47
48 if (vars.isEmpty ())
49 continue;
50
51 const auto actor = [this, entity, plugin, em] (const IDataFilter::FilterVariant& var) mutable
52 {
53 entity.Additional_ [QStringLiteral ("DataFilter")] = var.ID_;
54 em->HandleEntity (entity, plugin);
55
56 ChosenPlugin_ = qobject_cast<IInfo*> (plugin)->GetUniqueID ();
57 ChosenVariant_ = var.ID_;
58 };
59
60 if (vars.size () == 1)
61 AddDatafilterMenuItem (vars.value (0), menu, actor);
62 else
63 {
64 auto searchMenu = menu->addMenu (ii->GetIcon (), idf->GetFilterVerb ());
65 for (const auto& var : vars)
66 AddDatafilterMenuItem (var, searchMenu, actor);
67 }
68 }
69 }
70
72 {
73 return ChosenPlugin_;
74 }
75
77 {
78 return ChosenVariant_;
79 }
80}
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:45
@ OnlyHandle
Definition structures.h:69
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