annotate foosdk/sdk/foobar2000/SDK/core_api.h @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1 #pragma once
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3 namespace core_api {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5 #ifdef _WIN32
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 //! Retrieves HINSTANCE of calling DLL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 HINSTANCE get_my_instance();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9 //! Retrieves filename of calling dll, excluding extension, e.g. "foo_asdf"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 const char * get_my_file_name();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11 //! Retrieves full path of calling dll, e.g. c:\blah\foobar2000\foo_asdf.dll . No file:// prefix, this path can interop with win32 API calls.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12 const char * get_my_full_path();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13 //! Retrieves main app window. WARNING: this is provided for parent of dialog windows and such only; using it for anything else (such as hooking windowproc to alter app behaviors) is absolutely illegal. \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 //! Becomes valid when main window has been fully initialized. Returns NULL during creation of main window's embedded elements.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 fb2k::hwnd_t get_main_window();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 //! Tests whether services are available at this time. They are not available only during DLL startup or shutdown (e.g. inside static object constructors or destructors).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17 bool are_services_available();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18 //! Tests whether calling thread is main app thread, and shows diagnostic message in debugger output if it's not.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19 bool assert_main_thread();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 //! Triggers a bug check if the calling thread is not the main app thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21 void ensure_main_thread();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 //! Returns true if calling thread is main app thread, false otherwise.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23 bool is_main_thread();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24 //! Returns whether the app is currently shutting down.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25 bool is_shutting_down();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 //! Returns whether the app is currently initializing.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27 bool is_initializing();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28 //! Returns filesystem path to directory with user settings, e.g. file://c:\documents_and_settings\username\blah\foobar2000
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29 const char * get_profile_path();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31 //! Returns a path to <file name> in fb2k profile folder.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 inline pfc::string8 pathInProfile(const char * fileName) { pfc::string8 p( core_api::get_profile_path() ); p.add_filename( fileName ); return p; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34 //! Returns whether foobar2000 has been installed in "portable" mode.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35 bool is_portable_mode_enabled();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 //! Returns whether foobar2000 is currently running in quiet mode. \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 //! Quiet mode bypasses all GUI features, disables Media Library and does not save any changes to app configuration. \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39 //! Your component should not display any forms of user interface when running in quiet mode, as well as avoid saving configuration on its own (no need to worry if you only rely on cfg_vars or config_io_callback, they will simply be ignored on shutdown).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40 bool is_quiet_mode_enabled();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43 #define FB2K_SUPPORT_LOW_MEM_MODE (SIZE_MAX <= UINT32_MAX)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45 namespace fb2k {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46 bool isDebugModeActive();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47 #if FB2K_SUPPORT_LOW_MEM_MODE
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48 bool isLowMemModeActive();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
49 #else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
50 inline constexpr bool isLowMemModeActive() { return false; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
51 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
52 }