kodi
ContextMenuItem.h
1 /*
2  * Copyright (C) 2015-2018 Team Kodi
3  * This file is part of Kodi - https://kodi.tv
4  *
5  * SPDX-License-Identifier: GPL-2.0-or-later
6  * See LICENSES/README.md for more information.
7  */
8 
9 #pragma once
10 
11 #include <map>
12 #include <memory>
13 #include <string>
14 #include <vector>
15 
16 class CFileItem;
17 
18 namespace ADDON
19 {
20  class CContextMenuAddon;
21 }
22 
23 namespace INFO
24 {
25 class InfoBool;
26 }
27 
29 {
30 public:
31  virtual ~IContextMenuItem() = default;
32  virtual bool IsVisible(const CFileItem& item) const = 0;
33  virtual bool Execute(const std::shared_ptr<CFileItem>& item) const = 0;
34  virtual std::string GetLabel(const CFileItem& item) const = 0;
35  virtual bool IsGroup() const { return false; }
36  virtual bool HasParent() const { return false; }
37 };
38 
39 
41 {
42 public:
43  explicit CStaticContextMenuAction(uint32_t label) : m_label(label) {}
44  std::string GetLabel(const CFileItem& item) const final;
45  bool IsGroup() const final { return false; }
46 private:
47  const uint32_t m_label;
48 };
49 
50 
52 {
53 public:
54  CContextMenuItem() = default;
55 
56  std::string GetLabel(const CFileItem& item) const override { return m_label; }
57  bool IsVisible(const CFileItem& item) const override ;
58  bool IsParentOf(const CContextMenuItem& menuItem) const;
59  bool IsGroup() const override ;
60  bool HasParent() const override;
61  bool Execute(const std::shared_ptr<CFileItem>& item) const override;
62  bool operator==(const CContextMenuItem& other) const;
63  std::string ToString() const;
64 
65  static CContextMenuItem CreateGroup(
66  const std::string& label,
67  const std::string& parent,
68  const std::string& groupId,
69  const std::string& addonId);
70 
71  static CContextMenuItem CreateItem(
72  const std::string& label,
73  const std::string& parent,
74  const std::string& library,
75  const std::string& condition,
76  const std::string& addonId,
77  const std::vector<std::string>& args = std::vector<std::string>());
78 
79  friend class ADDON::CContextMenuAddon;
80 
81 private:
82  std::string m_label;
83  std::string m_parent;
84  std::string m_groupId;
85  std::string m_library;
86  std::string m_addonId; // The owner of this menu item
87  std::vector<std::string> m_args;
88 
89  std::string m_visibilityCondition;
90  mutable std::shared_ptr<INFO::InfoBool> m_infoBool;
91  mutable bool m_infoBoolRegistered{false};
92 };
Definition: ContextMenuAddon.h:24
Definition: ContextMenuItem.h:51
Definition: ContextMenuItem.h:23
Definition: ContextMenuItem.h:28
Definition: ContextMenuItem.h:40
Definition: Addon.cpp:39
Represents a file on a share.
Definition: FileItem.h:102