2 * Copyright (C) 2015-2018 Team Kodi
3 * This file is part of Kodi - https://kodi.tv
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
20 class CContextMenuAddon
;
28 class IContextMenuItem
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; }
40 class CStaticContextMenuAction
: public IContextMenuItem
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; }
47 const uint32_t m_label
;
51 class CContextMenuItem
: public IContextMenuItem
54 CContextMenuItem() = default;
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;
65 static CContextMenuItem
CreateGroup(
66 const std::string
& label
,
67 const std::string
& parent
,
68 const std::string
& groupId
,
69 const std::string
& addonId
);
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
>());
79 friend class ADDON::CContextMenuAddon
;
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
;
89 std::string m_visibilityCondition
;
90 mutable std::shared_ptr
<INFO::InfoBool
> m_infoBool
;
91 mutable bool m_infoBoolRegistered
{false};