From d0ffabed30e05f6dc56e2e5231637f333bc16003 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Fri, 8 Jun 2012 20:53:44 +0000 Subject: toptoolbar -> c++ git-svn-id: http://svn.miranda-ng.org/main/trunk@363 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/TopToolBar/launchbt.cpp | 218 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 218 insertions(+) create mode 100644 plugins/TopToolBar/launchbt.cpp (limited to 'plugins/TopToolBar/launchbt.cpp') diff --git a/plugins/TopToolBar/launchbt.cpp b/plugins/TopToolBar/launchbt.cpp new file mode 100644 index 0000000000..a5becaeba7 --- /dev/null +++ b/plugins/TopToolBar/launchbt.cpp @@ -0,0 +1,218 @@ +#include "common.h" +#pragma hdrstop + +extern HINSTANCE hInst; +#define MAXLBUTS 32 + +LBUTOPT LBUTS[MAXLBUTS]; +static int LButCnt = 0; + +extern char *AS(char *str, const char *setting, char *addstr); + +//wparam -id +INT_PTR LaunchService(WPARAM wParam, LPARAM lParam) +{ + PROCESS_INFORMATION pi; + STARTUPINFO si = {0}; + si.cb = sizeof(si); + if ( lParam < 0 || lParam >= MAXLBUTS ) + return -1; + + if ( CreateProcess(NULL, LBUTS[lParam].lpath, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) { + CloseHandle(pi.hProcess); + CloseHandle(pi.hThread); + } + Sleep(20); + CallService(MS_TTB_SETBUTTONSTATE, LBUTS[lParam].hframe, TTBST_RELEASED); + return 0; +} + +//wparam -id +//lparam &LBTOPT +INT_PTR GetLButton(WPARAM wParam, LPARAM lParam) +{ + if ( wParam < 0 || wParam >= MAXLBUTS ) + return -1; + + LBUTOPT *lbo = ( LBUTOPT* )lParam; + if (lbo == NULL) + return -1; + + if (LBUTS[wParam].hframe == 0) + return -1; + + *lbo = LBUTS[wParam]; + return 0; +} + +//wparam -id +//lparam &LBTOPT +INT_PTR ModifyLButton(WPARAM wParam, LPARAM lParam) +{ + if ( wParam < 0 || wParam >= LButCnt ) + return -1; + + LBUTOPT *lbo = ( LBUTOPT* )lParam; + if (lbo == NULL) + return -1; + + if (LBUTS[wParam].hframe == 0) + return -1; + + DeleteLBut(wParam, 0); + if (LBUTS[wParam].lpath != NULL){free(LBUTS[wParam].lpath);} + if (LBUTS[wParam].name != NULL){free(LBUTS[wParam].name);} + LBUTS[wParam].name = NULL; + LBUTS[wParam].lpath = NULL; + + if (lbo->name != NULL) + LBUTS[wParam].name = _strdup(lbo->name); + if (lbo->lpath != NULL) + LBUTS[wParam].lpath = _strdup(lbo->lpath); + + LBUTS[wParam].hframe = InsertLBut(wParam); + SaveAllLButs(); + return 0; +} + +int InsertLBut(int id) +{ + HBITMAP DefLUp = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_LAUNCHDN)); + HBITMAP DefLDn = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_LAUNCHUP)); + + TTBButton ttb = { 0 }; + ttb.cbSize = sizeof(ttb); + ttb.hbBitmapDown = DefLDn; + ttb.hbBitmapUp = DefLUp; + ttb.dwFlags = TTBBF_VISIBLE|TTBBF_ISLBUTTON; + ttb.pszServiceDown = TTB_LAUNCHSERVICE; + ttb.lParamDown = id; + ttb.name = LBUTS[id].name; + LButCnt++; + return TTBAddButton(( WPARAM )&ttb, 0); +} + +INT_PTR DeleteLBut(WPARAM id, LPARAM lParam) +{ + if (LBUTS[id].hframe != 0) + { + TTBRemoveButton(LBUTS[id].hframe, 0); + LBUTS[id].hframe = 0; + if (LBUTS[id].name != NULL){free(LBUTS[id].name);} + if (LBUTS[id].lpath != NULL){free(LBUTS[id].lpath);} + LBUTS[id].name = NULL; + LBUTS[id].lpath = NULL; + + LButCnt--; + } + return 0; +} + +int LoadAllLButs() +{ + char buf[255]; + char buf1[10]; + char fixname[255]; + int id, i; +// char *oldtb; + + //must be locked + memset(buf, 0, sizeof(buf)); + + memset(LBUTS, 0, sizeof(LBUTS)); + for (i = 0;i