aboutsummaryrefslogtreecommitdiff
path: root/Src/Winamp/application.h
diff options
context:
space:
mode:
authorJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
committerJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
commit20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch)
tree12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/Winamp/application.h
parent537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff)
downloadwinamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz
Initial community commit
Diffstat (limited to 'Src/Winamp/application.h')
-rw-r--r--Src/Winamp/application.h127
1 files changed, 127 insertions, 0 deletions
diff --git a/Src/Winamp/application.h b/Src/Winamp/application.h
new file mode 100644
index 00000000..77c07a69
--- /dev/null
+++ b/Src/Winamp/application.h
@@ -0,0 +1,127 @@
+#ifndef NULLSOFT_WINAMP_APPLICATION_H
+#define NULLSOFT_WINAMP_APPLICATION_H
+
+#include <api/application/api_application.h>
+#include <vector>
+#include <map>
+
+class Application : public api_application
+{
+public:
+ static const char *getServiceName() { return "Application API"; }
+ static const GUID getServiceGuid() { return applicationApiServiceGuid; }
+public:
+ Application();
+ ~Application();
+
+ const wchar_t *main_getAppName();
+ const wchar_t *main_getVersionString();
+ const wchar_t *main_getVersionNumString();
+ unsigned int main_getBuildNumber();
+ GUID main_getGUID();
+ HANDLE main_getMainThreadHandle();
+ HINSTANCE main_gethInstance();
+ const wchar_t *main_getCommandLine();
+ void main_shutdown(int deferred = TRUE);
+ void main_cancelShutdown();
+ int main_isShuttingDown();
+ const wchar_t *path_getAppPath();
+ const wchar_t *path_getUserSettingsPath();
+ // added for 5.58+ so gen_ff can fill @SKINSPATH@ in scripts correctly
+ const wchar_t *path_getSkinSettingsPath();
+ int app_getInitCount();
+ intptr_t app_messageLoopStep();
+ void app_addMessageProcessor(api_messageprocessor *processor);
+ void app_removeMessageProcessor(api_messageprocessor *processor);
+
+ void app_addModelessDialog(HWND hwnd);
+ void app_removeModelessDialog(HWND hwnd);
+ // added for 5.34
+ const wchar_t *path_getWorkingPath();
+ void path_setWorkingPath(const wchar_t *newPath);
+ // added for 5.35
+ /*
+ int GetMachineID(GUID *id);
+ */
+ int GetUserID(GUID *id);
+
+ int GetSessionID(GUID *id);
+
+ WPARAM MessageLoop();
+
+ // added for 5.53
+ bool app_translateAccelerators(MSG *msg);
+ void app_addAccelerators(HWND hwnd, HACCEL *phAccel, INT cAccel, UINT translateMode);
+ void app_removeAccelerators(HWND hwnd);
+ int app_getAccelerators(HWND hwnd, HACCEL *phAccel, INT cchAccelMax, BOOL bGlobal);
+
+ // added for 5.54
+ void app_registerGlobalWindow(HWND hwnd);
+ void app_unregisterGlobalWindow(HWND hwnd);
+ bool isGlobalWindow(HWND hwnd);
+
+ /* 5.54 + */
+ size_t AllocateThreadStorage(); // returns an index, -1 for error
+ void *GetThreadStorage(size_t index);
+ void SetThreadStorage(size_t index, void *value);
+
+ /* 5.58 + */
+ bool DirectMouseWheel_RegisterSkipClass(ATOM klass);
+ bool DirectMouseWheel_UnregisterSkipClass(ATOM klass);
+ bool DirectMouseWheel_EnableConvertToMouseWheel(HWND hwnd, BOOL enable);
+ /* 5.64 + */
+ BOOL DirectMouseWheel_ProcessDialogMessage(HWND hwnd, unsigned int uMsg, WPARAM wParam, LPARAM lParam, const int controls[], int controlslen);
+
+ /* 5.61 + */
+ void ActiveDialog_Register(HWND hwnd);
+ void ActiveDialog_Unregister(HWND hwnd);
+ HWND ActiveDialog_Get();
+
+ /* 5.64 + */
+ const wchar_t *getATFString(); // returns the current ATF formatting string
+
+ /* 5.66 + */
+ // used for dpi scaling so we're consistent in usage throughout the UI, etc
+ int getScaleX(int x);
+ int getScaleY(int y);
+private:
+ RECVS_DISPATCH;
+ bool ProcessMessageLight(MSG *msg);
+ bool ProcessMessage(MSG *msg);
+ bool FilterMessage(MSG *msg);
+ bool DirectMouseWheel_ProccessMessage(MSG *msg);
+ void DirectMouseWheel_InitBlackList();
+ friend static BOOL DirectMouseWheel_RegisterMessage();
+ static LRESULT CALLBACK MessageHookProc(INT code, WPARAM wParam, LPARAM lParam);
+
+private:
+ typedef struct __ACCELNODE
+ {
+ HACCEL hAccel;
+ UINT translateMode;
+ __ACCELNODE *pNext;
+ } ACCELNODE;
+
+ typedef std::map<HWND, ACCELNODE*> AccelMap;
+
+private:
+ int shuttingdown;
+ std::vector<api_messageprocessor*> messageProcessors;
+ HWND activeDialog;
+
+ AccelMap accelerators;
+ std::vector<HWND> globalWindows;
+ std::vector<ATOM> directMouseWheelBlackList;
+
+ GUID machineID, userID, sessionID;
+
+ DWORD tlsIndex;
+ LONG threadStorageIndex;
+
+ HHOOK messageHook;
+ bool disableMessageHook;
+};
+
+extern Application *application;
+
+#endif \ No newline at end of file