diff options
Diffstat (limited to 'xbmc/video/windows/GUIWindowVideoBase.h')
-rw-r--r-- | xbmc/video/windows/GUIWindowVideoBase.h | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/xbmc/video/windows/GUIWindowVideoBase.h b/xbmc/video/windows/GUIWindowVideoBase.h new file mode 100644 index 0000000..0c5acf4 --- /dev/null +++ b/xbmc/video/windows/GUIWindowVideoBase.h @@ -0,0 +1,148 @@ +/* + * 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 "playlists/PlayListTypes.h" +#include "video/VideoDatabase.h" +#include "video/VideoThumbLoader.h" +#include "windows/GUIMediaWindow.h" + +enum VideoSelectAction +{ + SELECT_ACTION_CHOOSE = 0, + SELECT_ACTION_PLAY_OR_RESUME, + SELECT_ACTION_RESUME, + SELECT_ACTION_INFO, + SELECT_ACTION_MORE, + SELECT_ACTION_PLAY, + SELECT_ACTION_PLAYPART, + SELECT_ACTION_QUEUE +}; + +class CGUIWindowVideoBase : public CGUIMediaWindow, public IBackgroundLoaderObserver +{ +public: + CGUIWindowVideoBase(int id, const std::string &xmlFile); + ~CGUIWindowVideoBase(void) override; + bool OnMessage(CGUIMessage& message) override; + bool OnAction(const CAction &action) override; + + void PlayMovie(const CFileItem* item, const std::string& player = ""); + + /*! \brief Gets called to process the "info" action for the given file item + Default implementation shows a dialog containing information for the movie/episode/... + represented by the file item. + \param fileItem the item for which information is to be presented. + \param scraper a scraper addon instance that can be used to obtain additional information for + the given item + \return true if information was presented, false otherwise. + */ + virtual bool OnItemInfo(const CFileItem& fileItem, ADDON::ScraperPtr& scraper); + + /*! \brief Show the resume menu for this item (if it has a resume bookmark) + If a resume bookmark is found, we set the item's m_lStartOffset to STARTOFFSET_RESUME. + Note that we do this in favour of setting the resume point, as we need additional + information from the database (in particular, the playerState) when resuming some items + (eg ISO/VIDEO_TS). + \param item item to check for a resume bookmark + \return true if an option was chosen, false if the resume menu was cancelled. + */ + static bool ShowResumeMenu(CFileItem &item); + + /*! \brief Append a set of search items to a results list using a specific prepend label + Sorts the search items first, then appends with the given prependLabel to the results list. + Then empty the search item list so it can be refilled. + \param searchItems The search items to append. + \param prependLabel the label that should be prepended to all search results. + \param results the fileitemlist to append the search results to. + \sa DoSearch + */ + static void AppendAndClearSearchItems(CFileItemList &searchItems, const std::string &prependLabel, CFileItemList &results); + + /*! \brief Prompt the user for assigning content to a path. + Based on changes, we then call OnUnassignContent, update or refresh scraper information in the database + and optionally start a scan + \param path the path to assign content for + */ + static void OnAssignContent(const std::string &path); + + /*! \brief checks the database for a resume position and puts together a string + \param item selected item + \return string containing the resume position or an empty string if there is no resume position + */ + static std::string GetResumeString(const CFileItem &item); + + /*! \brief Load video information from the database for these items (public static version) + Useful for grabbing information for file listings, from watched status to full metadata + \param items the items to load information for. + \param database open database object to retrieve the data from + \param allowReplaceLabels allow label replacement if according GUI setting is enabled + */ + static void LoadVideoInfo(CFileItemList& items, + CVideoDatabase& database, + bool allowReplaceLabels = true); + +protected: + void OnScan(const std::string& strPath, bool scanAll = false); + bool Update(const std::string &strDirectory, bool updateFilterPath = true) override; + bool GetDirectory(const std::string &strDirectory, CFileItemList &items) override; + void OnItemLoaded(CFileItem* pItem) override {}; + void GetGroupedItems(CFileItemList &items) override; + + bool CheckFilterAdvanced(CFileItemList &items) const override; + bool CanContainFilter(const std::string &strDirectory) const override; + + void GetContextButtons(int itemNumber, CContextButtons &buttons) override; + bool OnContextButton(int itemNumber, CONTEXT_BUTTON button) override; + virtual void OnQueueItem(int iItem, bool first = false); + virtual void OnDeleteItem(const CFileItemPtr& pItem); + void OnDeleteItem(int iItem) override; + virtual void DoSearch(const std::string& strSearch, CFileItemList& items) {} + std::string GetStartFolder(const std::string &dir) override; + + bool OnClick(int iItem, const std::string &player = "") override; + bool OnSelect(int iItem) override; + /*! \brief react to an Info action on a view item + \param item the selected item + \return true if the action is performed, false otherwise + */ + bool OnItemInfo(int item); + /*! \brief perform a given action on a file + \param item the selected item + \param action the action to perform + \return true if the action is performed, false otherwise + */ + bool OnFileAction(int item, int action, const std::string& player); + + void OnRestartItem(int iItem, const std::string &player = ""); + bool OnResumeItem(int iItem, const std::string &player = ""); + void PlayItem(int iItem, const std::string &player = ""); + bool OnPlayMedia(int iItem, const std::string &player = "") override; + bool OnPlayAndQueueMedia(const CFileItemPtr& item, const std::string& player = "") override; + using CGUIMediaWindow::LoadPlayList; + void LoadPlayList(const std::string& strPlayList, PLAYLIST::Id playlistId = PLAYLIST::TYPE_VIDEO); + + bool ShowIMDB(CFileItemPtr item, const ADDON::ScraperPtr& content, bool fromDB); + + void OnSearch(); + void OnSearchItemFound(const CFileItem* pSelItem); + int GetScraperForItem(CFileItem *item, ADDON::ScraperPtr &info, VIDEO::SScanSettings& settings); + + static bool OnUnAssignContent(const std::string &path, int header, int text); + + static bool StackingAvailable(const CFileItemList &items); + + bool OnPlayStackPart(int item); + + CGUIDialogProgress* m_dlgProgress; + CVideoDatabase m_database; + + CVideoThumbLoader m_thumbLoader; + bool m_stackingAvailable; +}; |