2 * Copyright (C) 2013-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.
11 #include "ContextMenuItem.h"
12 #include "threads/CriticalSection.h"
26 struct PVRContextMenuEvent
;
29 using ContextMenuView
= std::vector
<std::shared_ptr
<const IContextMenuItem
>>;
31 class CContextMenuManager
34 static const CContextMenuItem MAIN
;
35 static const CContextMenuItem MANAGE
;
37 explicit CContextMenuManager(ADDON::CAddonMgr
& addonMgr
);
38 ~CContextMenuManager();
43 /*! \brief Checks whether context menu items are available for a file item.
44 \param fileItem the file item
45 \param root the root context menu item
46 \return true if any items are present, false otherwise
48 bool HasItems(const CFileItem
& fileItem
, const CContextMenuItem
& root
) const;
50 /*! \brief Gets the context menu items available for a file item.
51 \param fileItem the file item
52 \param root the root context menu item
56 ContextMenuView
GetItems(const CFileItem
& fileItem
, const CContextMenuItem
& root
) const;
58 /*! \brief Checks whether addon context menu items are available for a file item.
59 \param fileItem the file item
60 \param root the root context menu item
61 \return true if any items are present, false otherwise
63 bool HasAddonItems(const CFileItem
& fileItem
, const CContextMenuItem
& root
) const;
65 /*! \brief Gets the addon context menu items available for a file item.
66 \param fileItem the file item
67 \param root the root context menu item
71 ContextMenuView
GetAddonItems(const CFileItem
& fileItem
, const CContextMenuItem
& root
) const;
74 CContextMenuManager(const CContextMenuManager
&) = delete;
75 CContextMenuManager
& operator=(CContextMenuManager
const&) = delete;
78 const CContextMenuItem
& menuItem
,
79 const CContextMenuItem
& root
,
80 const CFileItem
& fileItem
) const;
82 void ReloadAddonItems();
83 void OnEvent(const ADDON::AddonEvent
& event
);
85 void OnPVREvent(const PVR::PVRContextMenuEvent
& event
);
87 ADDON::CAddonMgr
& m_addonMgr
;
89 mutable CCriticalSection m_criticalSection
;
90 std::vector
<CContextMenuItem
> m_addonItems
;
91 std::vector
<std::shared_ptr
<IContextMenuItem
>> m_items
;
96 /*! \brief Checks whether any context menu items are available for a file item.
97 \param fileItem the file item
98 \param root the root context menu item
99 \return true if any items are present, false otherwise
101 bool HasAnyMenuItemsFor(const std::shared_ptr
<CFileItem
>& fileItem
, const CContextMenuItem
& root
);
103 /*! \brief Starts the context menu loop for a file item.
104 \param fileItem the file item
105 \param root the root context menu item
106 \return true on success, false otherwise
108 bool ShowFor(const std::shared_ptr
<CFileItem
>& fileItem
, const CContextMenuItem
& root
);
110 /*! \brief Shortcut for continuing the context menu loop from an existing menu item.
111 \param menu the menu item
112 \param fileItem the file item
113 \return true on success, false otherwise
115 bool LoopFrom(const IContextMenuItem
& menu
, const std::shared_ptr
<CFileItem
>& fileItem
);