LeechCraft  0.6.70-15082-g543737046d
Modular cross-platform feature rich live environment.
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>
13 #include <interfaces/idatafilter.h>
15 #include "util.h"
16 
17 namespace 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 
70  const QByteArray& StdDataFilterMenuCreator::GetChosenPlugin () const
71  {
72  return ChosenPlugin_;
73  }
74 
75  const QByteArray& StdDataFilterMenuCreator::GetChosenVariant () const
76  {
77  return ChosenVariant_;
78  }
79 }
IEntityManager::HandleEntity
virtual bool HandleEntity(LC::Entity entity, QObject *desired=nullptr)=0
Handles the given entity.
idatafilter.h
LC::Util
Definition: icoreproxy.h:33
IDataFilter::FilterVariant::Name_
QString Name_
The human-readable name of the filter variant.
Definition: idatafilter.h:86
iinfo.h
LC::FromUserInitiated
@ FromUserInitiated
Definition: structures.h:44
stddatafiltermenucreator.h
LC::Util::MakeEntity
Entity MakeEntity(const QVariant &entity, const QString &location, TaskParameters tp, const QString &mime)
Definition: util.cpp:82
util.h
IDataFilter::FilterVariant
Describes a single filter variant supported by this data filter.
Definition: idatafilter.h:75
IEntityManager
Proxy to core entity manager.
Definition: ientitymanager.h:31
IDataFilter::FilterVariant::ID_
QByteArray ID_
The ID of this filter variant.
Definition: idatafilter.h:82
LC::OnlyHandle
@ OnlyHandle
Definition: structures.h:68
LC::Util::StdDataFilterMenuCreator::StdDataFilterMenuCreator
StdDataFilterMenuCreator(const QVariant &data, IEntityManager *iem, QMenu *menu)
Constructs the StdDataFilterMenuCreator.
Definition: stddatafiltermenucreator.cpp:37
ientitymanager.h
IDataFilter::FilterVariant::Icon_
QIcon Icon_
The icon representing the filter variant.
Definition: idatafilter.h:94
IEntityManager::GetPossibleHandlers
virtual QList< QObject * > GetPossibleHandlers(const LC::Entity &entity)=0
Queries what plugins can handle the given entity.