[WASAPI] fix stream types and frequencies enumeration
[xbmc.git] / xbmc / ContextMenuManager.h
blobc5f00d50b9600b866cd31e244c1048509b0b4190
1 /*
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.
7 */
9 #pragma once
11 #include "ContextMenuItem.h"
12 #include "threads/CriticalSection.h"
14 #include <memory>
15 #include <utility>
16 #include <vector>
18 namespace ADDON
20 struct AddonEvent;
21 class CAddonMgr;
22 } // namespace ADDON
24 namespace PVR
26 struct PVRContextMenuEvent;
29 using ContextMenuView = std::vector<std::shared_ptr<const IContextMenuItem>>;
31 class CContextMenuManager
33 public:
34 static const CContextMenuItem MAIN;
35 static const CContextMenuItem MANAGE;
37 explicit CContextMenuManager(ADDON::CAddonMgr& addonMgr);
38 ~CContextMenuManager();
40 void Init();
41 void Deinit();
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
53 \return the items
54 \sa ContextMenuView
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
68 \return the items
69 \sa ContextMenuView
71 ContextMenuView GetAddonItems(const CFileItem& fileItem, const CContextMenuItem& root) const;
73 private:
74 CContextMenuManager(const CContextMenuManager&) = delete;
75 CContextMenuManager& operator=(CContextMenuManager const&) = delete;
77 bool IsVisible(
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;
94 namespace CONTEXTMENU
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);