summaryrefslogtreecommitdiffstats
path: root/xbmc/addons/gui/GUIDialogAddonInfo.h
diff options
context:
space:
mode:
Diffstat (limited to 'xbmc/addons/gui/GUIDialogAddonInfo.h')
-rw-r--r--xbmc/addons/gui/GUIDialogAddonInfo.h162
1 files changed, 162 insertions, 0 deletions
diff --git a/xbmc/addons/gui/GUIDialogAddonInfo.h b/xbmc/addons/gui/GUIDialogAddonInfo.h
new file mode 100644
index 0000000..b28a858
--- /dev/null
+++ b/xbmc/addons/gui/GUIDialogAddonInfo.h
@@ -0,0 +1,162 @@
+/*
+ * Copyright (C) 2005-2018 Team Kodi
+ * This file is part of Kodi - https://kodi.tv
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ * See LICENSES/README.md for more information.
+ */
+
+#pragma once
+
+#include "addons/addoninfo/AddonInfo.h"
+#include "guilib/GUIDialog.h"
+
+#include <memory>
+#include <string>
+#include <utility>
+#include <vector>
+
+namespace ADDON
+{
+class IAddon;
+using AddonPtr = std::shared_ptr<IAddon>;
+
+} // namespace ADDON
+
+enum class Reactivate : bool
+{
+ CHOICE_YES = true,
+ CHOICE_NO = false,
+};
+
+enum class PerformButtonFocus : bool
+{
+ CHOICE_YES = true,
+ CHOICE_NO = false,
+};
+
+enum class EntryPoint : int
+{
+ INSTALL,
+ UPDATE,
+ SHOW_DEPENDENCIES,
+};
+
+struct CInstalledWithAvailable
+{
+ CInstalledWithAvailable(const ADDON::DependencyInfo& depInfo,
+ const std::shared_ptr<ADDON::IAddon>& installed,
+ const std::shared_ptr<ADDON::IAddon>& available)
+ : m_depInfo(depInfo), m_installed(installed), m_available(available)
+ {
+ }
+
+ /*!
+ * @brief Returns true if the currently installed dependency version is up to date
+ * or the dependency is not available from a repository
+ */
+ bool IsInstalledUpToDate() const;
+
+ ADDON::DependencyInfo m_depInfo;
+ std::shared_ptr<ADDON::IAddon> m_installed;
+ std::shared_ptr<ADDON::IAddon> m_available;
+};
+
+class CGUIDialogAddonInfo : public CGUIDialog
+{
+public:
+ CGUIDialogAddonInfo(void);
+ ~CGUIDialogAddonInfo(void) override;
+ bool OnMessage(CGUIMessage& message) override;
+ bool OnAction(const CAction& action) override;
+
+ CFileItemPtr GetCurrentListItem(int offset = 0) override { return m_item; }
+ bool HasListItems() const override { return true; }
+
+ static bool ShowForItem(const CFileItemPtr& item);
+
+private:
+ void OnInitWindow() override;
+
+ /*!
+ * @brief Set the item to display addon info on.
+ *
+ * @param[in] item to display
+ * @return true if we can display information, false otherwise
+ */
+ bool SetItem(const CFileItemPtr& item);
+ void UpdateControls(PerformButtonFocus performButtonFocus);
+
+ void OnUpdate();
+ void OnSelectVersion();
+ void OnInstall();
+ void OnUninstall();
+ void OnEnableDisable();
+ void OnSettings();
+ void OnSelect();
+ void OnToggleAutoUpdates();
+ int AskForVersion(std::vector<std::pair<ADDON::CAddonVersion, std::string>>& versions);
+
+ /*!
+ * @brief Returns true if current addon can be opened (i.e is a plugin)
+ */
+ bool CanOpen() const;
+
+ /*!
+ * @brief Returns true if current addon can be run (i.e is a script)
+ */
+ bool CanRun() const;
+
+ /*!
+ * @brief Returns true if current addon is of a type that can only have one active
+ * in use at a time and can be changed (e.g skins)
+ */
+ bool CanUse() const;
+
+ /*!
+ * @brief Returns true if current addon can be show list about supported parts
+ */
+ bool CanShowSupportList() const;
+
+ /*!
+ * @brief check if the add-on is a dependency of others, and if so prompt the user.
+ *
+ * @param[in] heading the label for the heading of the prompt dialog
+ * @param[in] line2 the action that could not be completed.
+ * @return true if prompted, false otherwise.
+ */
+ bool PromptIfDependency(int heading, int line2);
+
+ /*!
+ * @brief Show a dialog with the addon's dependencies.
+ *
+ * @param[in] reactivate If true, reactivate info dialog when done
+ * @param[in] entryPoint INSTALL, UPDATE or SHOW_DEPENDENCIES
+ * @return True if okay was selected, false otherwise
+ */
+ bool ShowDependencyList(Reactivate reactivate, EntryPoint entryPoint);
+
+ /*!
+ * @brief Show a dialog with the addon's supported extensions and mimetypes.
+ */
+ void ShowSupportList();
+
+ /*!
+ * @brief Used to build up the dependency list shown by @ref ShowDependencyList()
+ */
+ void BuildDependencyList();
+
+ CFileItemPtr m_item;
+ ADDON::AddonPtr m_localAddon;
+ bool m_addonEnabled = false;
+
+ /*!< a switch to force @ref OnUninstall() to proceed without user interaction.
+ * useful for cases like where another repo’s version of an addon must
+ * be removed before installing a new version.
+ */
+ bool m_silentUninstall = false;
+
+ bool m_showDepDialogOnInstall = false;
+ std::vector<ADDON::DependencyInfo> m_deps;
+ std::vector<CInstalledWithAvailable> m_depsInstalledWithAvailable;
+};