kodi
GUIDialogContextMenu.h
1 /*
2  * Copyright (C) 2005-2018 Team Kodi
3  * This file is part of Kodi - https://kodi.tv
4  *
5  * SPDX-License-Identifier: GPL-2.0-or-later
6  * See LICENSES/README.md for more information.
7  */
8 
9 #pragma once
10 
11 #include "guilib/GUIDialog.h"
12 
13 #include <string>
14 #include <utility>
15 #include <vector>
16 
17 
18 class CMediaSource;
19 
20 enum CONTEXT_BUTTON
21 {
22  CONTEXT_BUTTON_CANCELLED = 0,
23  CONTEXT_BUTTON_RENAME,
24  CONTEXT_BUTTON_DELETE,
25  CONTEXT_BUTTON_MOVE,
26  CONTEXT_BUTTON_SETTINGS,
27  CONTEXT_BUTTON_RIP_CD,
28  CONTEXT_BUTTON_CANCEL_RIP_CD,
29  CONTEXT_BUTTON_RIP_TRACK,
30  CONTEXT_BUTTON_EJECT_DRIVE,
31  CONTEXT_BUTTON_EDIT_SOURCE,
32  CONTEXT_BUTTON_REMOVE_SOURCE,
33  CONTEXT_BUTTON_SET_DEFAULT,
34  CONTEXT_BUTTON_CLEAR_DEFAULT,
35  CONTEXT_BUTTON_SET_THUMB,
36  CONTEXT_BUTTON_ADD_LOCK,
37  CONTEXT_BUTTON_REMOVE_LOCK,
38  CONTEXT_BUTTON_CHANGE_LOCK,
39  CONTEXT_BUTTON_RESET_LOCK,
40  CONTEXT_BUTTON_REACTIVATE_LOCK,
41  CONTEXT_BUTTON_VIEW_SLIDESHOW,
42  CONTEXT_BUTTON_RECURSIVE_SLIDESHOW,
43  CONTEXT_BUTTON_REFRESH_THUMBS,
44  CONTEXT_BUTTON_SWITCH_MEDIA,
45  CONTEXT_BUTTON_MOVE_ITEM,
46  CONTEXT_BUTTON_MOVE_HERE,
47  CONTEXT_BUTTON_CANCEL_MOVE,
48  CONTEXT_BUTTON_MOVE_ITEM_UP,
49  CONTEXT_BUTTON_MOVE_ITEM_DOWN,
50  CONTEXT_BUTTON_CLEAR,
51  CONTEXT_BUTTON_PLAY_ITEM,
52  CONTEXT_BUTTON_PLAY_PARTYMODE,
53  CONTEXT_BUTTON_PLAY_PART,
54  CONTEXT_BUTTON_EDIT,
55  CONTEXT_BUTTON_EDIT_SMART_PLAYLIST,
56  CONTEXT_BUTTON_INFO,
57  CONTEXT_BUTTON_INFO_ALL,
58  CONTEXT_BUTTON_CDDB,
59  CONTEXT_BUTTON_SCAN,
60  CONTEXT_BUTTON_SCAN_TO_LIBRARY,
61  CONTEXT_BUTTON_SET_ARTIST_THUMB,
62  CONTEXT_BUTTON_SET_ART,
63  CONTEXT_BUTTON_CANCEL_PARTYMODE,
64  CONTEXT_BUTTON_MARK_WATCHED,
65  CONTEXT_BUTTON_MARK_UNWATCHED,
66  CONTEXT_BUTTON_SET_CONTENT,
67  CONTEXT_BUTTON_EDIT_PARTYMODE,
68  CONTEXT_BUTTON_LINK_MOVIE,
69  CONTEXT_BUTTON_UNLINK_MOVIE,
70  CONTEXT_BUTTON_GO_TO_ARTIST,
71  CONTEXT_BUTTON_GO_TO_ALBUM,
72  CONTEXT_BUTTON_PLAY_OTHER,
73  CONTEXT_BUTTON_SET_ACTOR_THUMB,
74  CONTEXT_BUTTON_UNLINK_BOOKMARK,
75  CONTEXT_BUTTON_ACTIVATE,
76  CONTEXT_BUTTON_GROUP_MANAGER,
77  CONTEXT_BUTTON_CHANNEL_MANAGER,
78  CONTEXT_BUTTON_PLAY_AND_QUEUE,
79  CONTEXT_BUTTON_PLAY_ONLY_THIS,
80  CONTEXT_BUTTON_UPDATE_EPG,
81  CONTEXT_BUTTON_TAGS_ADD_ITEMS,
82  CONTEXT_BUTTON_TAGS_REMOVE_ITEMS,
83  CONTEXT_BUTTON_SET_MOVIESET,
84  CONTEXT_BUTTON_MOVIESET_ADD_REMOVE_ITEMS,
85  CONTEXT_BUTTON_EDIT_SORTTITLE,
86  CONTEXT_BUTTON_DELETE_ALL,
87  CONTEXT_BUTTON_HELP,
88  CONTEXT_BUTTON_PLAY_NEXT,
89  CONTEXT_BUTTON_NAVIGATE,
90  CONTEXT_BUTTON_MANAGE_VIDEOVERSIONS,
91 };
92 
93 class CContextButtons : public std::vector< std::pair<size_t, std::string> >
94 {
95 public:
96  void Add(unsigned int, const std::string &label);
97  void Add(unsigned int, int label);
98 };
99 
101  public CGUIDialog
102 {
103 public:
104  CGUIDialogContextMenu(void);
105  ~CGUIDialogContextMenu(void) override;
106  bool OnMessage(CGUIMessage &message) override;
107  bool OnAction(const CAction& action) override;
108  void SetPosition(float posX, float posY) override;
109 
110  static bool SourcesMenu(const std::string &strType, const CFileItemPtr& item, float posX, float posY);
111  static void SwitchMedia(const std::string& strType, const std::string& strPath);
112 
113  static void GetContextButtons(const std::string &type, const CFileItemPtr& item, CContextButtons &buttons);
114  static bool OnContextButton(const std::string &type, const CFileItemPtr& item, CONTEXT_BUTTON button);
115 
119  static int Show(const CContextButtons& choices, int focusedButton = 0);
120 
122  static int ShowAndGetChoice(const CContextButtons &choices);
123 
124 protected:
125  void SetupButtons();
126 
130  void PositionAtCurrentFocus();
131 
132  float GetWidth() const override;
133  float GetHeight() const override;
134  void OnInitWindow() override;
135  void OnWindowLoaded() override;
136  void OnDeinitWindow(int nextWindowID) override;
137  static std::string GetDefaultShareNameByType(const std::string &strType);
138  static void SetDefault(const std::string &strType, const std::string &strDefault);
139  static void ClearDefault(const std::string &strType);
140  static CMediaSource *GetShare(const std::string &type, const CFileItem *item);
141 
142 private:
143  float m_coordX, m_coordY;
145  float m_backgroundImageSize;
146  int m_initiallyFocusedButtonIdx = 0;
147  int m_clickedButton;
148  CContextButtons m_buttons;
149  const CGUIControl *m_backgroundImage = nullptr;
150 };
Base class for controls.
Definition: GUIControl.h:83
Represents a share.
Definition: MediaSource.h:22
Class encapsulating information regarding a particular user action to be sent to windows and controls...
Definition: Action.h:21
Definition: GUIDialog.h:35
Definition: GUIMessage.h:365
Definition: GUIDialogContextMenu.h:93
Definition: GUIDialogContextMenu.h:100
Represents a file on a share.
Definition: FileItem.h:102