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 TrayBase;
23
24// Forward decl
25struct Tray;
26
28using TrayRaw = SDL_Tray*;
29
36
38using TrayMenuRaw = SDL_TrayMenu*;
39
40// Forward decl
41struct TrayMenu;
42
43// Forward decl
44struct TrayEntry;
45
47using TrayEntryRaw = SDL_TrayEntry*;
48
49// Forward decl
50struct TrayEntryScoped;
51
58
71
73 SDL_TRAYENTRY_BUTTON;
74
76 SDL_TRAYENTRY_CHECKBOX;
77
79 SDL_TRAYENTRY_SUBMENU;
80
82 SDL_TRAYENTRY_DISABLED;
83
85constexpr TrayEntryFlags TRAYENTRY_CHECKED = SDL_TRAYENTRY_CHECKED;
86
98using TrayCallback = void(SDLCALL*)(void* userdata, TrayEntryRaw entry);
99
112
118struct TrayBase : ResourceBaseT<TrayRaw>
119{
121
134 void Destroy();
135
148 void SetIcon(SurfaceRef icon);
149
162 void SetTooltip(StringParam tooltip);
163
186
208 TrayMenu GetMenu() const;
209};
210
219{
220 using TrayBase::TrayBase;
221
229 constexpr explicit Tray(TrayRaw resource) noexcept
230 : TrayBase(resource)
231 {
232 }
233
235 constexpr Tray(Tray&& other) noexcept
236 : Tray(other.release())
237 {
238 }
239
263 Tray(SurfaceRef icon, StringParam tooltip);
264
266 ~Tray() { SDL_DestroyTray(get()); }
267
269 constexpr Tray& operator=(Tray&& other) noexcept
270 {
271 swap(*this, other);
272 return *this;
273 }
274};
275
282{
283 TrayMenuRaw m_trayMenu;
284
285public:
291 constexpr TrayMenu(TrayMenuRaw trayMenu = {}) noexcept
292 : m_trayMenu(trayMenu)
293 {
294 }
295
301 constexpr operator TrayMenuRaw() const noexcept { return m_trayMenu; }
302
318 std::span<TrayEntry> GetEntries();
319
345 TrayEntry InsertEntry(int pos, StringParam label, TrayEntryFlags flags);
346
372
391
409 TrayRef GetParentTray() const;
410};
411
419struct TrayEntry : ResourceBaseT<TrayEntryRaw>
420{
422
449 TrayEntry(TrayMenu menu, int pos, StringParam label, TrayEntryFlags flags);
450
477
479 constexpr operator TrayEntryRaw() const noexcept { return get(); }
480
492 void Remove();
493
516
539
559 void SetLabel(StringParam label);
560
577 const char* GetLabel() const;
578
595 void SetChecked(bool checked);
596
613 bool GetChecked() const;
614
629 void SetEnabled(bool enabled);
630
645 bool GetEnabled() const;
646
662 void SetCallback(TrayCallback callback, void* userdata);
663
677 void SetCallback(TrayCB callback);
678
687 void Click();
688
702};
703
705struct TrayEntryScoped : TrayEntry
706{
708
709 constexpr TrayEntryScoped(const TrayEntryScoped& other) = delete;
710
712 constexpr TrayEntryScoped(TrayEntryScoped&& other) noexcept
713 : TrayEntry(other.release())
714 {
715 }
716
718 constexpr TrayEntryScoped(TrayEntry&& other) noexcept
719 : TrayEntry(std::move(other).release())
720 {
721 }
722
725};
726
751{
752 return Tray(icon, tooltip);
753}
754
755inline Tray::Tray(SurfaceRef icon, StringParam tooltip)
756 : Tray(SDL_CreateTray(icon, tooltip))
757{
758}
759
773inline void SetTrayIcon(TrayRef tray, SurfaceRef icon)
774{
775 SDL_SetTrayIcon(tray, icon);
776}
777
779{
780 SDL::SetTrayIcon(get(), icon);
781}
782
796inline void SetTrayTooltip(TrayRef tray, StringParam tooltip)
797{
798 SDL_SetTrayTooltip(tray, tooltip);
799}
800
802{
803 SDL::SetTrayTooltip(get(), tooltip);
804}
805
829{
830 return SDL_CreateTrayMenu(tray);
831}
832
834
858{
859 return SDL_CreateTraySubmenu(entry);
860}
861
866
889inline TrayMenu GetTrayMenu(TrayRef tray) { return SDL_GetTrayMenu(tray); }
890
891inline TrayMenu TrayBase::GetMenu() const { return SDL::GetTrayMenu(get()); }
892
916{
917 return SDL_GetTraySubmenu(entry);
918}
919
921
938inline std::span<TrayEntry> GetTrayEntries(TrayMenu menu)
939{
940 int count;
941 auto entries = SDL_GetTrayEntries(menu, &count);
942 return std::span<TrayEntry>{reinterpret_cast<TrayEntry*>(entries),
943 size_t(count)};
944}
945
946inline std::span<TrayEntry> TrayMenu::GetEntries()
947{
948 return SDL::GetTrayEntries(m_trayMenu);
949}
950
964inline void RemoveTrayEntry(TrayEntryRaw entry) { SDL_RemoveTrayEntry(entry); }
965
967
995 int pos,
996 StringParam label,
997 TrayEntryFlags flags)
998{
999 return TrayEntry(menu, pos, label, flags);
1000}
1001
1003 StringParam label,
1004 TrayEntryFlags flags)
1005{
1006 return TrayEntry(m_trayMenu, pos, label, flags);
1007}
1008
1010 int pos,
1011 StringParam label,
1012 TrayEntryFlags flags)
1013 : TrayEntry(SDL_InsertTrayEntryAt(menu, pos, label, flags))
1014{
1015}
1016
1018 StringParam label,
1019 TrayEntryFlags flags)
1020 : TrayEntry(menu, -1, label, flags)
1021{
1022}
1023
1050 StringParam label,
1051 TrayEntryFlags flags)
1052{
1053 return TrayEntry(menu, label, flags);
1054}
1055
1057{
1058 return SDL::AppendTrayEntry(m_trayMenu, label, flags);
1059}
1060
1081inline void SetTrayEntryLabel(TrayEntry entry, StringParam label)
1082{
1083 SDL_SetTrayEntryLabel(entry, label);
1084}
1085
1087{
1088 SDL::SetTrayEntryLabel(get(), label);
1089}
1090
1108inline const char* GetTrayEntryLabel(TrayEntryRef entry)
1109{
1110 return SDL_GetTrayEntryLabel(entry);
1111}
1112
1113inline const char* TrayEntry::GetLabel() const
1114{
1115 return SDL::GetTrayEntryLabel(get());
1116}
1117
1135inline void SetTrayEntryChecked(TrayEntry entry, bool checked)
1136{
1137 SDL_SetTrayEntryChecked(entry, checked);
1138}
1139
1140inline void TrayEntry::SetChecked(bool checked)
1141{
1142 SDL::SetTrayEntryChecked(get(), checked);
1143}
1144
1163{
1164 return SDL_GetTrayEntryChecked(entry);
1165}
1166
1167inline bool TrayEntry::GetChecked() const
1168{
1169 return SDL::GetTrayEntryChecked(get());
1170}
1171
1187inline void SetTrayEntryEnabled(TrayEntry entry, bool enabled)
1188{
1189 SDL_SetTrayEntryEnabled(entry, enabled);
1190}
1191
1192inline void TrayEntry::SetEnabled(bool enabled)
1193{
1194 SDL::SetTrayEntryEnabled(get(), enabled);
1195}
1196
1213{
1214 return SDL_GetTrayEntryEnabled(entry);
1215}
1216
1217inline bool TrayEntry::GetEnabled() const
1218{
1219 return SDL::GetTrayEntryEnabled(get());
1220}
1221
1239 TrayCallback callback,
1240 void* userdata)
1241{
1242 SDL_SetTrayEntryCallback(entry, callback, userdata);
1243}
1244
1259inline void SetTrayEntryCallback(TrayEntry entry, TrayCB callback)
1260{
1261 SetTrayEntryCallback(entry, callback.wrapper, callback.data);
1262}
1263
1264inline void TrayEntry::SetCallback(TrayCallback callback, void* userdata)
1265{
1266 SDL::SetTrayEntryCallback(get(), callback, userdata);
1267}
1268
1269inline void TrayEntry::SetCallback(TrayCB callback)
1270{
1271 SetTrayEntryCallback(get(), callback);
1272}
1273
1284inline void ClickTrayEntry(TrayEntry entry) { SDL_ClickTrayEntry(entry); }
1285
1287
1302inline void DestroyTray(TrayRaw tray) { SDL_DestroyTray(tray); }
1303
1305
1320{
1321 return SDL_GetTrayEntryParent(entry);
1322}
1323
1325{
1326 return SDL::GetTrayEntryParent(get());
1327}
1328
1348{
1349 return SDL_GetTrayMenuParentEntry(menu);
1350}
1351
1353{
1354 return SDL::GetTrayMenuParentEntry(m_trayMenu);
1355}
1356
1376{
1377 return SDL_GetTrayMenuParentTray(menu);
1378}
1379
1381{
1382 return SDL::GetTrayMenuParentTray(m_trayMenu);
1383}
1384
1395inline void UpdateTrays() { SDL_UpdateTrays(); }
1396
1398
1399} // namespace SDL
1400
1401#endif /* SDL3PP_TRAY_H_ */
constexpr RawPointer release() noexcept
Retrieves underlying resource pointer and clear this.
Definition SDL3pp_resource.h:57
friend constexpr void swap(ResourceBaseT &lhs, ResourceBaseT &rhs) noexcept
Definition SDL3pp_resource.h:65
constexpr RawPointer get() const noexcept
Definition SDL3pp_resource.h:54
constexpr ResourceBaseT()=default
Default constructor, creates null/invalid resource.
Helpers to use C++ strings parameters.
Definition SDL3pp_strings.h:58
An opaque handle representing a menu/submenu on a system tray object.
Definition SDL3pp_tray.h:282
constexpr TrayMenu(TrayMenuRaw trayMenu={}) noexcept
Wraps TrayMenu.
Definition SDL3pp_tray.h:291
::Uint32 Uint32
An unsigned 32-bit integer type.
Definition SDL3pp_stdinc.h:296
ResourceRefT< SurfaceBase > SurfaceRef
Reference for Surface.
Definition SDL3pp_surface.h:57
TrayMenu CreateSubmenu()
Create a submenu for a system tray entry.
Definition SDL3pp_tray.h:862
void SetTrayIcon(TrayRef tray, SurfaceRef icon)
Updates the system tray icon's icon.
Definition SDL3pp_tray.h:773
TrayEntry InsertEntry(int pos, StringParam label, TrayEntryFlags flags)
Insert a tray entry at a given position.
Definition SDL3pp_tray.h:1002
void UpdateTrays()
Update the trays.
Definition SDL3pp_tray.h:1395
TrayEntry InsertTrayEntryAt(TrayMenu menu, int pos, StringParam label, TrayEntryFlags flags)
Insert a tray entry at a given position.
Definition SDL3pp_tray.h:994
TrayMenu CreateMenu()
Create a menu for a system tray.
Definition SDL3pp_tray.h:833
void DestroyTray(TrayRaw tray)
Destroys a tray object.
Definition SDL3pp_tray.h:1302
constexpr TrayEntryFlags TRAYENTRY_BUTTON
Make the entry a simple button. Required.
Definition SDL3pp_tray.h:72
TrayMenu GetMenu() const
Gets a previously created tray menu.
Definition SDL3pp_tray.h:891
void SetTrayEntryLabel(TrayEntry entry, StringParam label)
Sets the label of an entry.
Definition SDL3pp_tray.h:1081
void SetChecked(bool checked)
Sets whether or not an entry is checked.
Definition SDL3pp_tray.h:1140
constexpr TrayEntryFlags TRAYENTRY_DISABLED
Make the entry disabled. Optional.
Definition SDL3pp_tray.h:81
void ClickTrayEntry(TrayEntry entry)
Simulate a click on a tray entry.
Definition SDL3pp_tray.h:1284
TrayEntry AppendEntry(StringParam label, TrayEntryFlags flags)
Appends a tray entry.
Definition SDL3pp_tray.h:1056
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:1347
void(SDLCALL *)(void *userdata, TrayEntryRaw entry) TrayCallback
A callback that is invoked when a tray entry is selected.
Definition SDL3pp_tray.h:98
TrayMenu CreateTrayMenu(TrayRef tray)
Create a menu for a system tray.
Definition SDL3pp_tray.h:828
TrayEntry AppendTrayEntry(TrayMenuRaw menu, StringParam label, TrayEntryFlags flags)
Appends a tray entry.
Definition SDL3pp_tray.h:1049
MakeFrontCallback< void(TrayEntryRaw entry)> TrayCB
A callback that is invoked when a tray entry is selected.
Definition SDL3pp_tray.h:111
TrayMenu GetTraySubmenu(TrayEntry entry)
Gets a previously created tray entry submenu.
Definition SDL3pp_tray.h:915
TrayMenu GetParent()
Gets the menu containing a certain tray entry.
Definition SDL3pp_tray.h:1324
bool GetTrayEntryChecked(TrayEntryRef entry)
Gets whether or not an entry is checked.
Definition SDL3pp_tray.h:1162
void SetTrayEntryChecked(TrayEntry entry, bool checked)
Sets whether or not an entry is checked.
Definition SDL3pp_tray.h:1135
TrayMenu GetTrayMenu(TrayRef tray)
Gets a previously created tray menu.
Definition SDL3pp_tray.h:889
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:1380
void Click()
Simulate a click on a tray entry.
Definition SDL3pp_tray.h:1286
std::span< TrayEntry > GetTrayEntries(TrayMenu menu)
Returns a list of entries in the menu, in order.
Definition SDL3pp_tray.h:938
TrayEntry TrayEntryRef
Reference for TrayEntry.
Definition SDL3pp_tray.h:57
void SetCallback(TrayCallback callback, void *userdata)
Sets a callback to be invoked when the entry is selected.
Definition SDL3pp_tray.h:1264
const char * GetTrayEntryLabel(TrayEntryRef entry)
Gets the label of an entry.
Definition SDL3pp_tray.h:1108
void SetTrayEntryEnabled(TrayEntry entry, bool enabled)
Sets whether or not an entry is enabled.
Definition SDL3pp_tray.h:1187
SDL_Tray * TrayRaw
Alias to raw representation for Tray.
Definition SDL3pp_tray.h:28
Tray CreateTray(SurfaceRef icon, StringParam tooltip)
Create an icon to be placed in the operating system's tray, or equivalent.
Definition SDL3pp_tray.h:750
void SetEnabled(bool enabled)
Sets whether or not an entry is enabled.
Definition SDL3pp_tray.h:1192
SDL_TrayEntry * TrayEntryRaw
Alias to raw representation for TrayEntry.
Definition SDL3pp_tray.h:47
void RemoveTrayEntry(TrayEntryRaw entry)
Removes a tray entry.
Definition SDL3pp_tray.h:964
void Destroy()
Destroys a tray object.
Definition SDL3pp_tray.h:1304
SDL_TrayMenu * TrayMenuRaw
Alias to raw representation for TrayMenu.
Definition SDL3pp_tray.h:38
TrayMenu GetSubmenu()
Gets a previously created tray entry submenu.
Definition SDL3pp_tray.h:920
TrayMenu CreateTraySubmenu(TrayEntry entry)
Create a submenu for a system tray entry.
Definition SDL3pp_tray.h:857
void SetTooltip(StringParam tooltip)
Updates the system tray icon's tooltip.
Definition SDL3pp_tray.h:801
void SetTrayTooltip(TrayRef tray, StringParam tooltip)
Updates the system tray icon's tooltip.
Definition SDL3pp_tray.h:796
const char * GetLabel() const
Gets the label of an entry.
Definition SDL3pp_tray.h:1113
void SetTrayEntryCallback(TrayEntry entry, TrayCallback callback, void *userdata)
Sets a callback to be invoked when the entry is selected.
Definition SDL3pp_tray.h:1238
bool GetChecked() const
Gets whether or not an entry is checked.
Definition SDL3pp_tray.h:1167
TrayEntry GetParentEntry() const
Gets the entry for which the menu is a submenu, if the current menu is a submenu.
Definition SDL3pp_tray.h:1352
bool GetTrayEntryEnabled(TrayEntryRef entry)
Gets whether or not an entry is enabled.
Definition SDL3pp_tray.h:1212
ResourceRefT< TrayBase > TrayRef
Reference for Tray.
Definition SDL3pp_tray.h:35
void SetIcon(SurfaceRef icon)
Updates the system tray icon's icon.
Definition SDL3pp_tray.h:778
std::span< TrayEntry > GetEntries()
Returns a list of entries in the menu, in order.
Definition SDL3pp_tray.h:946
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:1375
bool GetEnabled() const
Gets whether or not an entry is enabled.
Definition SDL3pp_tray.h:1217
TrayEntry(TrayMenu menu, int pos, StringParam label, TrayEntryFlags flags)
Insert a tray entry at a given position.
Definition SDL3pp_tray.h:1009
constexpr TrayEntryFlags TRAYENTRY_CHECKED
Make the entry checked. This is valid only for checkboxes. Optional.
Definition SDL3pp_tray.h:85
void Remove()
Removes a tray entry.
Definition SDL3pp_tray.h:966
TrayMenu GetTrayEntryParent(TrayEntry entry)
Gets the menu containing a certain tray entry.
Definition SDL3pp_tray.h:1319
constexpr TrayEntryFlags TRAYENTRY_SUBMENU
Prepare the entry to have a submenu. Required.
Definition SDL3pp_tray.h:78
constexpr TrayEntryFlags TRAYENTRY_CHECKBOX
Make the entry a checkbox. Required.
Definition SDL3pp_tray.h:75
void SetLabel(StringParam label)
Sets the label of an entry.
Definition SDL3pp_tray.h:1086
Uint32 TrayEntryFlags
Flags that control the creation of system tray entries.
Definition SDL3pp_tray.h:70
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:93
Base class to Tray.
Definition SDL3pp_tray.h:119
constexpr ResourceBaseT()=default
Default constructor, creates null/invalid resource.
RAII owning version TrayEntry.
Definition SDL3pp_tray.h:706
constexpr TrayEntryScoped(TrayEntryScoped &&other) noexcept
Move constructor.
Definition SDL3pp_tray.h:712
~TrayEntryScoped()
Destructor.
Definition SDL3pp_tray.h:724
TrayEntry(TrayMenu menu, int pos, StringParam label, TrayEntryFlags flags)
Insert a tray entry at a given position.
Definition SDL3pp_tray.h:1009
constexpr TrayEntryScoped(TrayEntry &&other) noexcept
Move constructor.
Definition SDL3pp_tray.h:718
An opaque handle representing an entry on a system tray object.
Definition SDL3pp_tray.h:420
constexpr ResourceBaseT()=default
Default constructor, creates null/invalid resource.
An opaque handle representing a toplevel system tray object.
Definition SDL3pp_tray.h:219
constexpr Tray(TrayRaw resource) noexcept
Constructs from raw Tray.
Definition SDL3pp_tray.h:229
~Tray()
Destructor.
Definition SDL3pp_tray.h:266
constexpr Tray & operator=(Tray &&other) noexcept
Assignment operator.
Definition SDL3pp_tray.h:269
constexpr Tray(Tray &&other) noexcept
Move constructor.
Definition SDL3pp_tray.h:235