From ea9711d2bbd7ddd8000b2843c0ed247c72688ad3 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Thu, 12 Jul 2012 07:00:46 +0000 Subject: added hook to load TTB buttons for dynamically loaded plugins git-svn-id: http://svn.miranda-ng.org/main/trunk@915 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/TopToolBar/toolbar.cpp | 120 +++++++++++++++++++++++------------------ 1 file changed, 69 insertions(+), 51 deletions(-) (limited to 'plugins/TopToolBar/toolbar.cpp') diff --git a/plugins/TopToolBar/toolbar.cpp b/plugins/TopToolBar/toolbar.cpp index 2b6f7f52f2..e9d6525c15 100644 --- a/plugins/TopToolBar/toolbar.cpp +++ b/plugins/TopToolBar/toolbar.cpp @@ -134,24 +134,6 @@ int SaveAllButtonsOptions() return 0; } -INT_PTR TTBRemoveButton(WPARAM wParam, LPARAM lParam) -{ - mir_cslock lck(csButtonsHook); - - int idx; - TopButtonInt* b = idtopos(wParam, &idx); - if (b == NULL) - return -1; - - RemoveFromOptions(b->id); - - Buttons.remove(idx); - delete b; - - ArrangeButtons(); - return 0; -} - static bool nameexists(const char *name) { if (name == NULL) @@ -250,34 +232,6 @@ TopButtonInt* CreateButton(TTBButton* but) return b; } -INT_PTR TTBAddButton(WPARAM wParam, LPARAM lParam) -{ - if (wParam == 0) - return -1; - - TopButtonInt* b; - { - mir_cslock lck(csButtonsHook); - - TTBButton *but = (TTBButton*)wParam; - if (but->cbSize != sizeof(TTBButton) && but->cbSize != OLD_TBBUTTON_SIZE) - return -1; - - if ( !(but->dwFlags && TTBBF_ISLBUTTON) && nameexists(but->name)) - return -1; - - b = CreateButton(but); - b->hLangpack = (int)lParam; - b->LoadSettings(); - Buttons.insert(b); - b->CreateWnd(); - } - - ArrangeButtons(); - AddToOptions(b); - return b->id; -} - int ArrangeButtons() { mir_cslock lck(csButtonsHook); @@ -359,8 +313,60 @@ int ArrangeButtons() ///////////////////////////////////////////////////////////////////////////////////////// // Toolbar services -//wparam = hTTBButton -//lparam = state +// wparam = (TTBButton*)lpTTBButton +// lparam = hLangpack +INT_PTR TTBAddButton(WPARAM wParam, LPARAM lParam) +{ + if (wParam == 0) + return -1; + + TopButtonInt* b; + { + mir_cslock lck(csButtonsHook); + + TTBButton *but = (TTBButton*)wParam; + if (but->cbSize != sizeof(TTBButton) && but->cbSize != OLD_TBBUTTON_SIZE) + return -1; + + if ( !(but->dwFlags && TTBBF_ISLBUTTON) && nameexists(but->name)) + return -1; + + b = CreateButton(but); + b->hLangpack = (int)lParam; + b->LoadSettings(); + Buttons.insert(b); + b->CreateWnd(); + } + + g_ctrl->bOrderChanged = TRUE; + ArrangeButtons(); + AddToOptions(b); + return b->id; +} + +// wparam = (HANDLE)hTTButton +// lparam = 0 +INT_PTR TTBRemoveButton(WPARAM wParam, LPARAM lParam) +{ + mir_cslock lck(csButtonsHook); + + int idx; + TopButtonInt* b = idtopos(wParam, &idx); + if (b == NULL) + return -1; + + RemoveFromOptions(b->id); + + Buttons.remove(idx); + delete b; + + g_ctrl->bOrderChanged = TRUE; + ArrangeButtons(); + return 0; +} + +// wparam = hTTBButton +// lparam = state INT_PTR TTBSetState(WPARAM wParam, LPARAM lParam) { mir_cslock lck(csButtonsHook); @@ -375,8 +381,8 @@ INT_PTR TTBSetState(WPARAM wParam, LPARAM lParam) return 0; } -//wparam = hTTBButton -//lparam = 0 +// wparam = hTTBButton +// lparam = 0 //return = state INT_PTR TTBGetState(WPARAM wParam, LPARAM lParam) { @@ -547,7 +553,18 @@ static INT_PTR TTBSetCustomProc(WPARAM wParam, LPARAM lParam) } ///////////////////////////////////////////////////////////////////////////////////////// -// Removes buttons of plugins being unloads. lParam = HINSTANCE +// Adds buttons of plugins being loaded. lParam = HINSTANCE + +int OnPluginLoad(WPARAM wParam, LPARAM lParam) +{ + CallPluginEventHook((HINSTANCE)lParam, hTTBModuleLoaded, 0, 0); + if (g_ctrl->hWnd && g_ctrl->bOrderChanged) + PostMessage(g_ctrl->hWnd, TTB_UPDATEFRAMEVISIBILITY, TRUE, 0); + return 0; +} + +///////////////////////////////////////////////////////////////////////////////////////// +// Removes buttons of plugins being unloaded. lParam = HINSTANCE int OnPluginUnload(WPARAM wParam, LPARAM lParam) { @@ -627,6 +644,7 @@ int LoadToolbarModule() InitializeCriticalSection(&csButtonsHook); hBmpSeparator = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_SEP)); + HookEvent(ME_SYSTEM_MODULELOAD, OnPluginLoad); HookEvent(ME_SYSTEM_MODULEUNLOAD, OnPluginUnload); HookEvent(ME_SYSTEM_MODULESLOADED, OnModulesLoad); HookEvent(ME_SKIN2_ICONSCHANGED, OnIconChange); -- cgit v1.2.3