diff options
Diffstat (limited to 'plugins/TopToolBar/launchbt.c')
-rw-r--r-- | plugins/TopToolBar/launchbt.c | 211 |
1 files changed, 211 insertions, 0 deletions
diff --git a/plugins/TopToolBar/launchbt.c b/plugins/TopToolBar/launchbt.c new file mode 100644 index 0000000000..cffce36be0 --- /dev/null +++ b/plugins/TopToolBar/launchbt.c @@ -0,0 +1,211 @@ +#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 i;
+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)
+{
+ LBUTOPT *lbo=lParam;
+ if ((wParam<0)||(wParam>=MAXLBUTS)){return(-1);};
+ 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)
+{
+ LBUTOPT *lbo=lParam;
+ if ((wParam<0)||(wParam>=LButCnt)){return(-1);};
+ 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)
+{
+ TTBButton ttb;
+
+ HBITMAP DefLUp;
+ HBITMAP DefLDn;
+
+ DefLDn=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_LAUNCHDN));
+ DefLUp=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_LAUNCHUP));
+ //itoa(SeparatorCnt++,buf,10);
+
+ //wsprintf(buf,"%s %d",Translate("Separator"),id);
+ memset(&ttb,0,sizeof(ttb));
+ ttb.cbSize=sizeof(ttb);
+ ttb.hbBitmapDown=DefLDn;
+ ttb.hbBitmapUp=DefLUp;
+ ttb.dwFlags=TTBBF_VISIBLE|TTBBF_ISLBUTTON;
+ ttb.pszServiceDown=TTB_LAUNCHSERVICE;
+ //ttb.pszServiceUp=TTB_LAUNCHSERVICE;
+ ttb.lParamDown=id;
+ ttb.name=LBUTS[id].name;
+ LButCnt++;
+ return(TTBAddButton(&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<MAXLBUTS;i++)
+ {
+ memset(buf1,0,sizeof(buf1));
+ itoa(i,buf1,10);
+ AS(fixname,"LBUT",buf1);
+ id=DBGetContactSettingWord(0,TTB_OPTDIR,AS(buf,fixname,""),-1);
+ if (id!=-1)
+ {
+ LBUTS[i].name=DBGetString(0,TTB_OPTDIR,AS(buf,fixname,"_name"));
+ LBUTS[i].lpath=DBGetString(0,TTB_OPTDIR,AS(buf,fixname,"_lpath"));
+ if (LBUTS[i].lpath==NULL){LBUTS[i].lpath=_strdup("Execute Path");};
+ LBUTS[i].hframe=0;
+ LBUTS[i].hframe=InsertLBut(i);
+ };
+ };
+ return(0);
+
+};
+
+
+int SaveAllLButs()
+{
+ char buf[255];
+ char buf1[10];
+ char fixname[255];
+ int i;
+
+ //must be locked
+ memset(buf,0,sizeof(buf));
+
+ for (i=0;i<MAXLBUTS;i++)
+ {
+ itoa(i,buf1,10);
+ if (LBUTS[i].hframe!=0)
+ {
+ AS(fixname,"LBUT",buf1);
+ DBWriteContactSettingWord(0,TTB_OPTDIR,AS(buf,fixname,""),i);
+ DBWriteContactSettingString(0,TTB_OPTDIR,AS(buf,fixname,"_name"),LBUTS[i].name);
+ DBWriteContactSettingString(0,TTB_OPTDIR,AS(buf,fixname,"_lpath"),LBUTS[i].lpath);
+ }
+ else
+ {
+ AS(fixname,"LBUT",buf1);
+ DBWriteContactSettingWord(0,TTB_OPTDIR,AS(buf,fixname,""),-1);
+ DBDeleteContactSetting(0,TTB_OPTDIR,AS(buf,fixname,""));
+ DBDeleteContactSetting(0,TTB_OPTDIR,AS(buf,fixname,"_lpath"));
+ DBDeleteContactSetting(0,TTB_OPTDIR,AS(buf,fixname,"_name"));
+ };
+ };
+ return(0);
+
+};
+
+
+//return 0 on success,-1 on error
+INT_PTR InsertNewFreeLBut(WPARAM wParam,LPARAM lParam)
+{
+ char buf[256];
+ if (LButCnt<MAXLBUTS)
+ {
+ int i;
+ for (i=0;i<MAXLBUTS;i++)
+ {
+ if (LBUTS[i].hframe==0)
+ {
+ wsprintf(buf,"%s %d",Translate("Default"),i);
+ LBUTS[i].name=_strdup(buf);
+ LBUTS[i].lpath=_strdup("Execute Path");
+ LBUTS[i].hframe=InsertLBut(i);
+ SaveAllLButs();
+ return(0);
+ };
+ };
+ };
+
+ return(-1);
+};
+
+int InitLBut()
+{
+ CreateServiceFunction(TTB_LAUNCHSERVICE,LaunchService);
+ CreateServiceFunction(TTB_ADDLBUTTON,InsertNewFreeLBut);
+ CreateServiceFunction(TTB_REMOVELBUTTON,DeleteLBut);
+ CreateServiceFunction(TTB_MODIFYLBUTTON,ModifyLButton);
+ CreateServiceFunction(TTB_GETLBUTTON,GetLButton);
+
+
+
+ LoadAllLButs();
+ return(0);
+};
+int UnInitLBut()
+{
+ SaveAllLButs();
+ return(0);
+};
\ No newline at end of file |