xbmc
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 };
91 
92 class CContextButtons : public std::vector< std::pair<size_t, std::string> >
93 {
94 public:
95  void Add(unsigned int, const std::string &label);
96  void Add(unsigned int, int label);
97 };
98 
100  public CGUIDialog
101 {
102 public:
103  CGUIDialogContextMenu(void);
104  ~CGUIDialogContextMenu(void) override;
105  bool OnMessage(CGUIMessage &message) override;
106  bool OnAction(const CAction& action) override;
107  void SetPosition(float posX, float posY) override;
108 
109  static bool SourcesMenu(const std::string &strType, const CFileItemPtr& item, float posX, float posY);
110  static void SwitchMedia(const std::string& strType, const std::string& strPath);
111 
112  static void GetContextButtons(const std::string &type, const CFileItemPtr& item, CContextButtons &buttons);
113  static bool OnContextButton(const std::string &type, const CFileItemPtr& item, CONTEXT_BUTTON button);
114 
118  static int Show(const CContextButtons& choices, int focusedButton = 0);
119 
121  static int ShowAndGetChoice(const CContextButtons &choices);
122 
123 protected:
124  void SetupButtons();
125 
129  void PositionAtCurrentFocus();
130 
131  float GetWidth() const override;
132  float GetHeight() const override;
133  void OnInitWindow() override;
134  void OnWindowLoaded() override;
135  void OnDeinitWindow(int nextWindowID) override;
136  static std::string GetDefaultShareNameByType(const std::string &strType);
137  static void SetDefault(const std::string &strType, const std::string &strDefault);
138  static void ClearDefault(const std::string &strType);
139  static CMediaSource *GetShare(const std::string &type, const CFileItem *item);
140 
141 private:
142  float m_coordX, m_coordY;
144  float m_backgroundImageSize;
145  int m_initiallyFocusedButtonIdx = 0;
146  int m_clickedButton;
147  CContextButtons m_buttons;
148  const CGUIControl *m_backgroundImage = nullptr;
149 };
Base class for controls.
Definition: GUIControl.h:75
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:22
Definition: GUIDialog.h:35
Definition: GUIMessage.h:365
Definition: GUIDialogContextMenu.h:92
Definition: GUIDialogContextMenu.h:99
Represents a file on a share.
Definition: FileItem.h:102