SDL3pp
A slim C++ wrapper for SDL3
Loading...
Searching...
No Matches
SDL3pp_tray.h
1#ifndef SDL3PP_TRAY_H_
2#define SDL3PP_TRAY_H_
3
4#include <SDL3/SDL_tray.h>
5#include "SDL3pp_stdinc.h"
6#include "SDL3pp_surface.h"
7
8namespace SDL {
9
20
21// Forward decl
22struct Tray;
23
25using TrayRaw = SDL_Tray*;
26
33
35using TrayMenuRaw = SDL_TrayMenu*;
36
37// Forward decl
38struct TrayMenu;
39
40// Forward decl
41struct TrayEntry;
42
44using TrayEntryRaw = SDL_TrayEntry*;
45
46// Forward decl
47struct TrayEntryScoped;
48
51
64
66 SDL_TRAYENTRY_BUTTON;
67
69 SDL_TRAYENTRY_CHECKBOX;
70
72 SDL_TRAYENTRY_SUBMENU;
73
75 SDL_TRAYENTRY_DISABLED;
76
78constexpr TrayEntryFlags TRAYENTRY_CHECKED = SDL_TRAYENTRY_CHECKED;
79
91using TrayCallback = void(SDLCALL*)(void* userdata, TrayEntryRaw entry);
92
105
113struct Tray : ResourceBase<TrayRaw>
114{
116
124 constexpr explicit Tray(TrayRaw resource) noexcept
125 : ResourceBase(resource)
126 {
127 }
128
130 constexpr Tray(const Tray& other) = delete;
131
133 constexpr Tray(Tray&& other) noexcept
134 : Tray(other.release())
135 {
136 }
137
138 constexpr Tray(const TrayRef& other) = delete;
139
140 constexpr Tray(TrayRef&& other) = delete;
141
165 Tray(SurfaceRef icon, StringParam tooltip);
166
168 ~Tray() { SDL_DestroyTray(get()); }
169
171 constexpr Tray& operator=(Tray&& other) noexcept
172 {
173 swap(*this, other);
174 return *this;
175 }
176
178 Tray& operator=(const Tray& other) = delete;
179
192 void Destroy();
193
206 void SetIcon(SurfaceRef icon);
207
220 void SetTooltip(StringParam tooltip);
221
244
266 TrayMenu GetMenu() const;
267};
268
275{
276 TrayMenuRaw m_trayMenu;
277
278public:
284 constexpr TrayMenu(TrayMenuRaw trayMenu = {}) noexcept
285 : m_trayMenu(trayMenu)
286 {
287 }
288
294 constexpr operator TrayMenuRaw() const noexcept { return m_trayMenu; }
295
311 std::span<TrayEntry> GetEntries();
312
338 TrayEntry InsertEntry(int pos, StringParam label, TrayEntryFlags flags);
339
365
384
402 TrayRef GetParentTray() const;
403};
404
412struct TrayEntry : ResourceBase<TrayEntryRaw>
413{
415
442 TrayEntry(TrayMenu menu, int pos, StringParam label, TrayEntryFlags flags);
443
470
472 constexpr operator TrayEntryRaw() const noexcept { return get(); }
473
485 void Remove();
486
509
532
552 void SetLabel(StringParam label);
553
570 const char* GetLabel() const;
571
588 void SetChecked(bool checked);
589
606 bool GetChecked() const;
607
622 void SetEnabled(bool enabled);
623
638 bool GetEnabled() const;
639
655 void SetCallback(TrayCallback callback, void* userdata);
656
670 void SetCallback(TrayCB callback);
671
680 void Click();
681
695};
696
698struct TrayEntryScoped : TrayEntry
699{
701
702 constexpr TrayEntryScoped(const TrayEntryScoped& other) = delete;
703
705 constexpr TrayEntryScoped(TrayEntryScoped&& other) noexcept
706 : TrayEntry(other.release())
707 {
708 }
709
711 constexpr TrayEntryScoped(TrayEntry&& other) noexcept
712 : TrayEntry(std::move(other).release())
713 {
714 }
715
718};
719
744{
745 return Tray(icon, std::move(tooltip));
746}
747
748inline Tray::Tray(SurfaceRef icon, StringParam tooltip)
749 : Tray(SDL_CreateTray(icon, tooltip))
750{
751}
752
766inline void SetTrayIcon(TrayRef tray, SurfaceRef icon)
767{
768 SDL_SetTrayIcon(tray, icon);
769}
770
771inline void Tray::SetIcon(SurfaceRef icon) { SDL::SetTrayIcon(get(), icon); }
772
786inline void SetTrayTooltip(TrayRef tray, StringParam tooltip)
787{
788 SDL_SetTrayTooltip(tray, tooltip);
789}
790
791inline void Tray::SetTooltip(StringParam tooltip)
792{
793 SDL::SetTrayTooltip(get(), std::move(tooltip));
794}
795
819{
820 return SDL_CreateTrayMenu(tray);
821}
822
824
848{
849 return SDL_CreateTraySubmenu(entry);
850}
851
856
879inline TrayMenu GetTrayMenu(TrayRef tray) { return SDL_GetTrayMenu(tray); }
880
881inline TrayMenu Tray::GetMenu() const { return SDL::GetTrayMenu(get()); }
882
906{
907 return SDL_GetTraySubmenu(entry);
908}
909
911
928inline std::span<TrayEntry> GetTrayEntries(TrayMenu menu)
929{
930 int count;
931 auto entries = SDL_GetTrayEntries(menu, &count);
932 return std::span<TrayEntry>{reinterpret_cast<TrayEntry*>(entries),
933 size_t(count)};
934}
935
936inline std::span<TrayEntry> TrayMenu::GetEntries()
937{
938 return SDL::GetTrayEntries(m_trayMenu);
939}
940
954inline void RemoveTrayEntry(TrayEntryRaw entry) { SDL_RemoveTrayEntry(entry); }
955
957
985 int pos,
986 StringParam label,
987 TrayEntryFlags flags)
988{
989 return TrayEntry(menu, pos, std::move(label), flags);
990}
991
993 StringParam label,
994 TrayEntryFlags flags)
995{
996 return TrayEntry(m_trayMenu, pos, std::move(label), flags);
997}
998
1000 int pos,
1001 StringParam label,
1002 TrayEntryFlags flags)
1003 : TrayEntry(SDL_InsertTrayEntryAt(menu, pos, label, flags))
1004{
1005}
1006
1008 StringParam label,
1009 TrayEntryFlags flags)
1010 : TrayEntry(menu, -1, std::move(label), flags)
1011{
1012}
1013
1040 StringParam label,
1041 TrayEntryFlags flags)
1042{
1043 return TrayEntry(menu, std::move(label), flags);
1044}
1045
1047{
1048 return SDL::AppendTrayEntry(m_trayMenu, std::move(label), flags);
1049}
1050
1071inline void SetTrayEntryLabel(TrayEntry entry, StringParam label)
1072{
1073 SDL_SetTrayEntryLabel(entry, label);
1074}
1075
1077{
1078 SDL::SetTrayEntryLabel(get(), std::move(label));
1079}
1080
1098inline const char* GetTrayEntryLabel(TrayEntryRef entry)
1099{
1100 return SDL_GetTrayEntryLabel(entry);
1101}
1102
1103inline const char* TrayEntry::GetLabel() const
1104{
1105 return SDL::GetTrayEntryLabel(get());
1106}
1107
1125inline void SetTrayEntryChecked(TrayEntry entry, bool checked)
1126{
1127 SDL_SetTrayEntryChecked(entry, checked);
1128}
1129
1130inline void TrayEntry::SetChecked(bool checked)
1131{
1132 SDL::SetTrayEntryChecked(get(), checked);
1133}
1134
1153{
1154 return SDL_GetTrayEntryChecked(entry);
1155}
1156
1157inline bool TrayEntry::GetChecked() const
1158{
1159 return SDL::GetTrayEntryChecked(get());
1160}
1161
1177inline void SetTrayEntryEnabled(TrayEntry entry, bool enabled)
1178{
1179 SDL_SetTrayEntryEnabled(entry, enabled);
1180}
1181
1182inline void TrayEntry::SetEnabled(bool enabled)
1183{
1184 SDL::SetTrayEntryEnabled(get(), enabled);
1185}
1186
1203{
1204 return SDL_GetTrayEntryEnabled(entry);
1205}
1206
1207inline bool TrayEntry::GetEnabled() const
1208{
1209 return SDL::GetTrayEntryEnabled(get());
1210}
1211
1229 TrayCallback callback,
1230 void* userdata)
1231{
1232 SDL_SetTrayEntryCallback(entry, callback, userdata);
1233}
1234
1249inline void SetTrayEntryCallback(TrayEntry entry, TrayCB callback)
1250{
1251 SetTrayEntryCallback(entry, callback.wrapper, callback.data);
1252}
1253
1254inline void TrayEntry::SetCallback(TrayCallback callback, void* userdata)
1255{
1256 SDL::SetTrayEntryCallback(get(), callback, userdata);
1257}
1258
1259inline void TrayEntry::SetCallback(TrayCB callback)
1260{
1261 SetTrayEntryCallback(get(), callback);
1262}
1263
1274inline void ClickTrayEntry(TrayEntry entry) { SDL_ClickTrayEntry(entry); }
1275
1277
1292inline void DestroyTray(TrayRaw tray) { SDL_DestroyTray(tray); }
1293
1294inline void Tray::Destroy() { DestroyTray(release()); }
1295
1310{
1311 return SDL_GetTrayEntryParent(entry);
1312}
1313
1315{
1316 return SDL::GetTrayEntryParent(get());
1317}
1318
1338{
1339 return SDL_GetTrayMenuParentEntry(menu);
1340}
1341
1343{
1344 return SDL::GetTrayMenuParentEntry(m_trayMenu);
1345}
1346
1366{
1367 return SDL_GetTrayMenuParentTray(menu);
1368}
1369
1371{
1372 return SDL::GetTrayMenuParentTray(m_trayMenu);
1373}
1374
1385inline void UpdateTrays() { SDL_UpdateTrays(); }
1386
1388
1389} // namespace SDL
1390
1391#endif /* SDL3PP_TRAY_H_ */
constexpr RawPointer get() const noexcept
Definition SDL3pp_resource.h:53
constexpr RawPointer release() noexcept
Retrieves underlying resource pointer and clear this.
Definition SDL3pp_resource.h:56
constexpr ResourceBase(RawPointer resource)
Constructs from resource pointer.
Definition SDL3pp_resource.h:29
Helpers to use C++ strings parameters.
Definition SDL3pp_strings.h:43
An opaque handle representing a menu/submenu on a system tray object.
Definition SDL3pp_tray.h:275
constexpr TrayMenu(TrayMenuRaw trayMenu={}) noexcept
Wraps TrayMenu.
Definition SDL3pp_tray.h:284
::Uint32 Uint32
An unsigned 32-bit integer type.
Definition SDL3pp_stdinc.h:290
ResourceRef< Surface > SurfaceRef
Reference for Surface.
Definition SDL3pp_surface.h:54
TrayMenu CreateSubmenu()
Create a submenu for a system tray entry.
Definition SDL3pp_tray.h:852
void SetTrayIcon(TrayRef tray, SurfaceRef icon)
Updates the system tray icon's icon.
Definition SDL3pp_tray.h:766
TrayEntry InsertEntry(int pos, StringParam label, TrayEntryFlags flags)
Insert a tray entry at a given position.
Definition SDL3pp_tray.h:992
void SetTooltip(StringParam tooltip)
Updates the system tray icon's tooltip.
Definition SDL3pp_tray.h:791
void UpdateTrays()
Update the trays.
Definition SDL3pp_tray.h:1385
TrayEntry InsertTrayEntryAt(TrayMenu menu, int pos, StringParam label, TrayEntryFlags flags)
Insert a tray entry at a given position.
Definition SDL3pp_tray.h:984
ResourceRef< Tray > TrayRef
Reference for Tray.
Definition SDL3pp_tray.h:32
TrayMenu GetMenu() const
Gets a previously created tray menu.
Definition SDL3pp_tray.h:881
void DestroyTray(TrayRaw tray)
Destroys a tray object.
Definition SDL3pp_tray.h:1292
constexpr TrayEntryFlags TRAYENTRY_BUTTON
Make the entry a simple button. Required.
Definition SDL3pp_tray.h:65
void SetTrayEntryLabel(TrayEntry entry, StringParam label)
Sets the label of an entry.
Definition SDL3pp_tray.h:1071
void SetChecked(bool checked)
Sets whether or not an entry is checked.
Definition SDL3pp_tray.h:1130
constexpr TrayEntryFlags TRAYENTRY_DISABLED
Make the entry disabled. Optional.
Definition SDL3pp_tray.h:74
void ClickTrayEntry(TrayEntry entry)
Simulate a click on a tray entry.
Definition SDL3pp_tray.h:1274
TrayEntry AppendEntry(StringParam label, TrayEntryFlags flags)
Appends a tray entry.
Definition SDL3pp_tray.h:1046
TrayEntry GetTrayMenuParentEntry(TrayMenuRaw menu)
Gets the entry for which the menu is a submenu, if the current menu is a submenu.
Definition SDL3pp_tray.h:1337
void(SDLCALL *)(void *userdata, TrayEntryRaw entry) TrayCallback
A callback that is invoked when a tray entry is selected.
Definition SDL3pp_tray.h:91
TrayMenu CreateTrayMenu(TrayRef tray)
Create a menu for a system tray.
Definition SDL3pp_tray.h:818
TrayMenu CreateMenu()
Create a menu for a system tray.
Definition SDL3pp_tray.h:823
TrayEntry AppendTrayEntry(TrayMenuRaw menu, StringParam label, TrayEntryFlags flags)
Appends a tray entry.
Definition SDL3pp_tray.h:1039
MakeFrontCallback< void(TrayEntryRaw entry)> TrayCB
A callback that is invoked when a tray entry is selected.
Definition SDL3pp_tray.h:104
TrayMenu GetTraySubmenu(TrayEntry entry)
Gets a previously created tray entry submenu.
Definition SDL3pp_tray.h:905
TrayMenu GetParent()
Gets the menu containing a certain tray entry.
Definition SDL3pp_tray.h:1314
bool GetTrayEntryChecked(TrayEntryRef entry)
Gets whether or not an entry is checked.
Definition SDL3pp_tray.h:1152
void SetTrayEntryChecked(TrayEntry entry, bool checked)
Sets whether or not an entry is checked.
Definition SDL3pp_tray.h:1125
TrayMenu GetTrayMenu(TrayRef tray)
Gets a previously created tray menu.
Definition SDL3pp_tray.h:879
TrayRef GetParentTray() const
Gets the tray for which this menu is the first-level menu, if the current menu isn't a submenu.
Definition SDL3pp_tray.h:1370
void Click()
Simulate a click on a tray entry.
Definition SDL3pp_tray.h:1276
std::span< TrayEntry > GetTrayEntries(TrayMenu menu)
Returns a list of entries in the menu, in order.
Definition SDL3pp_tray.h:928
TrayEntry TrayEntryRef
Alias to TrayEntry for non owning parameters.
Definition SDL3pp_tray.h:50
void SetCallback(TrayCallback callback, void *userdata)
Sets a callback to be invoked when the entry is selected.
Definition SDL3pp_tray.h:1254
const char * GetTrayEntryLabel(TrayEntryRef entry)
Gets the label of an entry.
Definition SDL3pp_tray.h:1098
void SetTrayEntryEnabled(TrayEntry entry, bool enabled)
Sets whether or not an entry is enabled.
Definition SDL3pp_tray.h:1177
void Destroy()
Destroys a tray object.
Definition SDL3pp_tray.h:1294
SDL_Tray * TrayRaw
Alias to raw representation for Tray.
Definition SDL3pp_tray.h:25
Tray CreateTray(SurfaceRef icon, StringParam tooltip)
Create an icon to be placed in the operating system's tray, or equivalent.
Definition SDL3pp_tray.h:743
void SetEnabled(bool enabled)
Sets whether or not an entry is enabled.
Definition SDL3pp_tray.h:1182
SDL_TrayEntry * TrayEntryRaw
Alias to raw representation for TrayEntry.
Definition SDL3pp_tray.h:44
void RemoveTrayEntry(TrayEntryRaw entry)
Removes a tray entry.
Definition SDL3pp_tray.h:954
SDL_TrayMenu * TrayMenuRaw
Alias to raw representation for TrayMenu.
Definition SDL3pp_tray.h:35
TrayMenu GetSubmenu()
Gets a previously created tray entry submenu.
Definition SDL3pp_tray.h:910
TrayMenu CreateTraySubmenu(TrayEntry entry)
Create a submenu for a system tray entry.
Definition SDL3pp_tray.h:847
void SetTrayTooltip(TrayRef tray, StringParam tooltip)
Updates the system tray icon's tooltip.
Definition SDL3pp_tray.h:786
const char * GetLabel() const
Gets the label of an entry.
Definition SDL3pp_tray.h:1103
void SetTrayEntryCallback(TrayEntry entry, TrayCallback callback, void *userdata)
Sets a callback to be invoked when the entry is selected.
Definition SDL3pp_tray.h:1228
void SetIcon(SurfaceRef icon)
Updates the system tray icon's icon.
Definition SDL3pp_tray.h:771
bool GetChecked() const
Gets whether or not an entry is checked.
Definition SDL3pp_tray.h:1157
TrayEntry GetParentEntry() const
Gets the entry for which the menu is a submenu, if the current menu is a submenu.
Definition SDL3pp_tray.h:1342
bool GetTrayEntryEnabled(TrayEntryRef entry)
Gets whether or not an entry is enabled.
Definition SDL3pp_tray.h:1202
std::span< TrayEntry > GetEntries()
Returns a list of entries in the menu, in order.
Definition SDL3pp_tray.h:936
TrayRef GetTrayMenuParentTray(TrayMenuRaw menu)
Gets the tray for which this menu is the first-level menu, if the current menu isn't a submenu.
Definition SDL3pp_tray.h:1365
bool GetEnabled() const
Gets whether or not an entry is enabled.
Definition SDL3pp_tray.h:1207
TrayEntry(TrayMenu menu, int pos, StringParam label, TrayEntryFlags flags)
Insert a tray entry at a given position.
Definition SDL3pp_tray.h:999
constexpr TrayEntryFlags TRAYENTRY_CHECKED
Make the entry checked. This is valid only for checkboxes. Optional.
Definition SDL3pp_tray.h:78
void Remove()
Removes a tray entry.
Definition SDL3pp_tray.h:956
TrayMenu GetTrayEntryParent(TrayEntry entry)
Gets the menu containing a certain tray entry.
Definition SDL3pp_tray.h:1309
constexpr TrayEntryFlags TRAYENTRY_SUBMENU
Prepare the entry to have a submenu. Required.
Definition SDL3pp_tray.h:71
constexpr TrayEntryFlags TRAYENTRY_CHECKBOX
Make the entry a checkbox. Required.
Definition SDL3pp_tray.h:68
void SetLabel(StringParam label)
Sets the label of an entry.
Definition SDL3pp_tray.h:1076
Uint32 TrayEntryFlags
Flags that control the creation of system tray entries.
Definition SDL3pp_tray.h:63
Main include header for the SDL3pp library.
Definition SDL3pp_callbackWrapper.h:169
A non-owning reference wrapper for a given resource.
Definition SDL3pp_resource.h:156
RAII owning version TrayEntry.
Definition SDL3pp_tray.h:699
constexpr TrayEntryScoped(TrayEntryScoped &&other) noexcept
Move constructor.
Definition SDL3pp_tray.h:705
~TrayEntryScoped()
Destructor.
Definition SDL3pp_tray.h:717
TrayEntry(TrayMenu menu, int pos, StringParam label, TrayEntryFlags flags)
Insert a tray entry at a given position.
Definition SDL3pp_tray.h:999
constexpr TrayEntryScoped(TrayEntry &&other) noexcept
Move constructor.
Definition SDL3pp_tray.h:711
An opaque handle representing an entry on a system tray object.
Definition SDL3pp_tray.h:413
constexpr ResourceBase(RawPointer resource)
Constructs from resource pointer.
Definition SDL3pp_resource.h:29
An opaque handle representing a toplevel system tray object.
Definition SDL3pp_tray.h:114
constexpr Tray(TrayRaw resource) noexcept
Constructs from raw Tray.
Definition SDL3pp_tray.h:124
constexpr ResourceBase(RawPointer resource)
Constructs from resource pointer.
Definition SDL3pp_resource.h:29
~Tray()
Destructor.
Definition SDL3pp_tray.h:168
Tray & operator=(const Tray &other)=delete
Assignment operator.
constexpr Tray & operator=(Tray &&other) noexcept
Assignment operator.
Definition SDL3pp_tray.h:171
constexpr Tray(Tray &&other) noexcept
Move constructor.
Definition SDL3pp_tray.h:133
constexpr Tray(const Tray &other)=delete
Copy constructor.