From 47739a02585405a13b81123da3a9f3ff97cea0b9 Mon Sep 17 00:00:00 2001 From: Vadim Dashevskiy Date: Fri, 8 Jun 2012 13:55:50 +0000 Subject: TopToolBar added git-svn-id: http://svn.miranda-ng.org/main/trunk@360 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/TopToolBar/ttbopt.c | 970 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 970 insertions(+) create mode 100644 plugins/TopToolBar/ttbopt.c (limited to 'plugins/TopToolBar/ttbopt.c') diff --git a/plugins/TopToolBar/ttbopt.c b/plugins/TopToolBar/ttbopt.c new file mode 100644 index 0000000000..f202e7a6c0 --- /dev/null +++ b/plugins/TopToolBar/ttbopt.c @@ -0,0 +1,970 @@ +#include "common.h" +#include +#pragma hdrstop + +static BOOL CALLBACK DlgProcTTBBkgOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam); +extern int ttbOptionsChanged(); +extern HINSTANCE hInst; + +extern TopButtonInt Buttons[MAX_BUTTONS]; +extern int nButtonsCount; + +extern SortData arrangedbuts[MAX_BUTTONS]; + +extern void lockbut(); +extern void ulockbut(); +extern int applyuserbitmaps(); + +struct OrderData { + int dragging; + HTREEITEM hDragItem; +}; + +char *SetEndSlash(char *str) +{ + char *outs; + if (str==NULL){return(NULL);}; + if (strlen(str)==0){return(NULL);}; + outs=str; + + if (str[strlen(str)-1]!='\\') + { + outs=(char*)malloc(strlen(str)+3); + memset(outs,0,strlen(str)+3); + strcat(outs,str); + outs[strlen(str)]='\\'; + //free(str); + }; + return(outs); +}; +boolean FileExists(char *fname) +{ + HANDLE h; + WIN32_FIND_DATA wfd; + + + + /* + h=CreateFile(fname,GENERIC_READ, + FILE_SHARE_READ, + NULL,OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL, + NULL); + */ + memset(&wfd,0,sizeof(wfd)); + h=FindFirstFile(fname,&wfd); + + if (h==INVALID_HANDLE_VALUE) { + return(FALSE); + } + else + { + FindClose(h); + return(TRUE); + }; + + +}; + + +char *ReplaceBadChar(char *str,char bad,char toreplace) +{ + int i; + for (i=0;i','_'); + ReplaceBadChar(str,'<','_'); + ReplaceBadChar(str,':','_'); + ReplaceBadChar(str,'*','_'); + + return(str); +}; + +void AssignBitmapsFromDir(char *dir) +{ + char curnameUP[512],curnameDN[512]; + char ChangedName[512]; + + int i; + + if (dir==NULL){return;}; + if (strlen(dir)==0){return;}; + dir=SetEndSlash(dir); +lockbut(); + for(i=0;iname; + pos=((ButtonOptData *)tvi.lParam)->pos; + if (pos>=0&&posshow==TRUE )?TTBBF_VISIBLE:0; + Buttons[pos].arrangedpos=count; + // int DBSaveButtonSettings(int butpos) + }; + + + tvi.hItem=TreeView_GetNextSibling(GetDlgItem(hwndDlg,IDC_BUTTONORDERTREE),tvi.hItem); + + count++; + } + ulockbut(); + ttbOptionsChanged(); + return (TRUE); +}; + +int BuildTree(HWND hwndDlg) +{ + struct OrderData *dat; + TVINSERTSTRUCT tvis; + ButtonOptData *PD; + int i; + + PostMessage(GetDlgItem(hwndDlg,IDC_BMPUP), STM_SETIMAGE,IMAGE_BITMAP,0); + PostMessage(GetDlgItem(hwndDlg,IDC_BMPDN), STM_SETIMAGE,IMAGE_BITMAP,0); + + // LockWindowUpdate(GetDlgItem(hwndDlg,IDC_BUTTONORDERTREE)); + dat=(struct OrderData*)GetWindowLong(GetDlgItem(hwndDlg,IDC_BUTTONORDERTREE),GWLP_USERDATA); + tvis.hParent=NULL; + tvis.hInsertAfter=TVI_LAST; + tvis.item.mask=TVIF_PARAM|TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE; + TreeView_DeleteAllItems(GetDlgItem(hwndDlg,IDC_BUTTONORDERTREE)); + //CheckBUTORDER(); + + + if (nButtonsCount==0){return(FALSE);}; + + for(i=0;iname=Buttons[arrangedbuts[i].oldpos].name; + PD->show=Buttons[arrangedbuts[i].oldpos].dwFlags&TTBBF_VISIBLE?TRUE:FALSE; + PD->pos=arrangedbuts[i].oldpos; + tvis.item.lParam=(LPARAM)PD; + tvis.item.pszText=Translate(PD->name); + tvis.item.iImage=tvis.item.iSelectedImage=PD->show; + TreeView_InsertItem(GetDlgItem(hwndDlg,IDC_BUTTONORDERTREE),&tvis); + + tvis.item.iImage=tvis.item.iSelectedImage=PD->show; + }; + // LockWindowUpdate(NULL); + return (TRUE); +}; + +void SetImagesForCurrent (HWND hwndDlg,int curselect) +{ + + { + + int t=IMAGE_BITMAP; + char *curname; + + PostMessage(GetDlgItem(hwndDlg,IDC_BMPUP), STM_SETIMAGE,t,0); + PostMessage(GetDlgItem(hwndDlg,IDC_BMPDN), STM_SETIMAGE,t,0); + + curname=Buttons[curselect].UserDefinedbmUp; + if (curname!=NULL) + { + int st; + if (strstr(curname,".ico")) {t=IMAGE_ICON;}; + st=WS_CHILDWINDOW|SS_NOTIFY|WS_VISIBLE;(t==IMAGE_ICON)?(st|=SS_ICON):(st|=SS_BITMAP); + SetWindowLong(GetDlgItem(hwndDlg,IDC_BMPUP),GWL_STYLE,st); + }else + { + SetWindowLong(GetDlgItem(hwndDlg,IDC_BMPUP),GWL_STYLE,WS_CHILDWINDOW|WS_VISIBLE|SS_NOTIFY|(Buttons[curselect].hbBitmapDown==NULL?SS_ICON:SS_BITMAP)); + t=IMAGE_ICON; + } + + PostMessage(GetDlgItem(hwndDlg,IDC_BMPUP), STM_SETIMAGE,t,(LPARAM)(Buttons[curselect].hbBitmapUp==NULL?Buttons[curselect].hIconUp:Buttons[curselect].hbBitmapUp)); + + curname=Buttons[curselect].UserDefinedbmDown; + if (curname!=NULL) + { + int st; + if (strstr(curname,".ico")) {t=IMAGE_ICON;}; + st=WS_CHILDWINDOW|SS_NOTIFY|WS_VISIBLE;(t==IMAGE_ICON)?(st|=SS_ICON):(st|=SS_BITMAP); + SetWindowLong(GetDlgItem(hwndDlg,IDC_BMPDN),GWL_STYLE,st); + }else + { + SetWindowLong(GetDlgItem(hwndDlg,IDC_BMPDN),GWL_STYLE,WS_CHILDWINDOW|WS_VISIBLE|SS_NOTIFY|(Buttons[curselect].hbBitmapDown==NULL?SS_ICON:SS_BITMAP)); + t=IMAGE_ICON; + } + + PostMessage(GetDlgItem(hwndDlg,IDC_BMPDN), STM_SETIMAGE,t,(LPARAM)(Buttons[curselect].hbBitmapDown==NULL?Buttons[curselect].hIconDn:Buttons[curselect].hbBitmapDown )); + } +} + +static BOOL CALLBACK ButOrderOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) +{ struct OrderData *dat; + + dat=(struct OrderData*)GetWindowLong(GetDlgItem(hwndDlg,IDC_BUTTONORDERTREE),GWLP_USERDATA); + + switch (msg) + { + case WM_INITDIALOG: { + + + TranslateDialogDefault(hwndDlg); + dat=(struct OrderData*)malloc(sizeof(struct OrderData)); + SetWindowLong(GetDlgItem(hwndDlg,IDC_BUTTONORDERTREE),GWLP_USERDATA,(LONG)dat); + dat->dragging=0; + + //SetWindowLong(GetDlgItem(hwndDlg,IDC_PROTOCOLVISIBILITY),GWL_STYLE,GetWindowLong(GetDlgItem(hwndDlg,IDC_PROTOCOLVISIBILITY),GWL_STYLE)|TVS_NOHSCROLL); + SetWindowLong(GetDlgItem(hwndDlg,IDC_BUTTONORDERTREE),GWL_STYLE,GetWindowLong(GetDlgItem(hwndDlg,IDC_BUTTONORDERTREE),GWL_STYLE)|TVS_NOHSCROLL); + + { HIMAGELIST himlCheckBoxes; + himlCheckBoxes=ImageList_Create(GetSystemMetrics(SM_CXSMICON),GetSystemMetrics(SM_CYSMICON),ILC_COLOR4|ILC_MASK,2,2); + ImageList_AddIcon(himlCheckBoxes,LoadIcon(hInst,MAKEINTRESOURCE(IDI_NOTICK))); + ImageList_AddIcon(himlCheckBoxes,LoadIcon(hInst,MAKEINTRESOURCE(IDI_TICK))); + //TreeView_SetImageList(GetDlgItem(hwndDlg,IDC_PROTOCOLVISIBILITY),himlCheckBoxes,TVSIL_NORMAL); + // + TreeView_SetImageList(GetDlgItem(hwndDlg,IDC_BUTTONORDERTREE),himlCheckBoxes,TVSIL_NORMAL); + + } + PostMessage(GetDlgItem(hwndDlg,IDC_BMPUP), STM_SETIMAGE,IMAGE_BITMAP,0); + PostMessage(GetDlgItem(hwndDlg,IDC_BMPDN), STM_SETIMAGE,IMAGE_BITMAP,0); + SetDlgItemInt(hwndDlg,IDC_BUTTHEIGHT,DBGetContactSettingByte(0,TTB_OPTDIR,"BUTTHEIGHT",16),FALSE); + SetDlgItemInt(hwndDlg,IDC_BUTTWIDTH,DBGetContactSettingByte(0,TTB_OPTDIR,"BUTTWIDTH",20),FALSE); + CheckDlgButton(hwndDlg,IDC_USEMIRANDABUTTON,DBGetContactSettingByte(0,TTB_OPTDIR,"UseMirandaButtonClass",UseMirandaButtonClassDefaultValue)); + CheckDlgButton(hwndDlg,IDC_USEFLAT,DBGetContactSettingByte(0,TTB_OPTDIR,"UseFlatButton",1)); + + if (!ServiceExists(MS_SKIN2_ADDICON)) + { + EnableWindow(GetDlgItem(hwndDlg,IDC_USEICOLIB),FALSE); + } + CheckDlgButton(hwndDlg,IDC_USEICOLIB,ServiceExists(MS_SKIN2_ADDICON)&&DBGetContactSettingByte(0,TTB_OPTDIR,"UseIcoLib",UseIcoLibDefaultValue)); + + + + BuildTree(hwndDlg); + OptionsOpened=TRUE; + EnableWindow(GetDlgItem(hwndDlg,IDC_ENAME),FALSE); + EnableWindow(GetDlgItem(hwndDlg,IDC_EPATH),FALSE); + EnableWindow(GetDlgItem(hwndDlg,IDC_DELLBUTTON),FALSE); + + SetDlgItemText(hwndDlg,IDC_IMGDIR,DBGetString(0,TTB_OPTDIR,"ImgDir")); + SendMessage(hwndDlg,WM_COMMAND,0,0); + OptionshWnd=hwndDlg; + return TRUE; + } + case WM_COMMAND: + { + //if (IDC_BMPUP) + ShowWindow(GetDlgItem(hwndDlg,IDC_BMPUP),IsDlgButtonChecked(hwndDlg,IDC_USEICOLIB)?SW_HIDE:SW_SHOW); + ShowWindow(GetDlgItem(hwndDlg,IDC_BMPDN),IsDlgButtonChecked(hwndDlg,IDC_USEICOLIB)?SW_HIDE:SW_SHOW); + ShowWindow(GetDlgItem(hwndDlg,IDC_DEFAULT),IsDlgButtonChecked(hwndDlg,IDC_USEICOLIB)?SW_HIDE:SW_SHOW); + + ShowWindow(GetDlgItem(hwndDlg,IDC_STATIC1),IsDlgButtonChecked(hwndDlg,IDC_USEICOLIB)?SW_HIDE:SW_SHOW); + ShowWindow(GetDlgItem(hwndDlg,IDC_STATIC2),IsDlgButtonChecked(hwndDlg,IDC_USEICOLIB)?SW_HIDE:SW_SHOW); + ShowWindow(GetDlgItem(hwndDlg,IDC_STATIC3),IsDlgButtonChecked(hwndDlg,IDC_USEICOLIB)?SW_HIDE:SW_SHOW); + + EnableWindow(GetDlgItem(hwndDlg,IDC_USEFLAT),IsDlgButtonChecked(hwndDlg,IDC_USEMIRANDABUTTON)); + + if (HIWORD(wParam)==EN_CHANGE ) + { + SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); + break; + }; + if ((HIWORD(wParam)==BN_CLICKED|| HIWORD(wParam)==BN_DBLCLK)) + { + int ctrlid=LOWORD(wParam); + SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); + + if (ctrlid==IDC_OPENIMGDIR) + { + char buf[512]; + PCIDLIST_ABSOLUTE res; + + BROWSEINFO bi; + memset(&bi,0,sizeof(bi)); + bi.hwndOwner=hwndDlg; + bi.pszDisplayName=buf; + bi.lpszTitle=Translate("Select Directory"); + bi.ulFlags=BIF_RETURNONLYFSDIRS; + res=SHBrowseForFolder(&bi); + if(res!=NULL) + { + if (SHGetPathFromIDList(res,buf)==TRUE) + { + + SetDlgItemText(hwndDlg,IDC_IMGDIR,(LPCSTR)&buf); + SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); + }; + + }; + + break; + }; + if (ctrlid==IDC_LBUTTONSET) + { + int curselect; + TVITEM tvi; + tvi.hItem=TreeView_GetSelection(GetDlgItem(hwndDlg,IDC_BUTTONORDERTREE)); + if (tvi.hItem==NULL){break;}; + + tvi.mask=TVIF_PARAM; + TreeView_GetItem(GetDlgItem(hwndDlg,IDC_BUTTONORDERTREE),&tvi); + + curselect=((ButtonOptData *)tvi.lParam)->pos; + if (Buttons[curselect].dwFlags&TTBBF_ISLBUTTON) + { + LBUTOPT lbo; + char buf[256]; + memset(&lbo,0,sizeof(lbo)); + + + GetDlgItemText(hwndDlg,IDC_ENAME,buf,255); + lbo.name=_strdup(buf); + + GetDlgItemText(hwndDlg,IDC_EPATH,buf,255); + lbo.lpath=_strdup(buf); + + CallService(TTB_MODIFYLBUTTON,Buttons[curselect].lParamDown,(LPARAM)&lbo); + free(lbo.name); + free(lbo.lpath); + }; + + break; + }; + if (ctrlid==IDC_ADDLBUTTON) + { + if (CallService(TTB_ADDLBUTTON,0,0)==0) + { + // BuildTree(hwndDlg); + SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); + + }; + break; + }; + + if (ctrlid==IDC_DELLBUTTON) + { + int curselect; + TVITEM tvi; + tvi.hItem=TreeView_GetSelection(GetDlgItem(hwndDlg,IDC_BUTTONORDERTREE)); + if (tvi.hItem==NULL){break;}; + tvi.mask=TVIF_PARAM; + TreeView_GetItem(GetDlgItem(hwndDlg,IDC_BUTTONORDERTREE),&tvi); + + curselect=((ButtonOptData *)tvi.lParam)->pos; + if (Buttons[curselect].dwFlags&TTBBF_ISLBUTTON) + { + CallService(TTB_REMOVELBUTTON,Buttons[curselect].lParamDown,0); + EnableWindow(GetDlgItem(hwndDlg,IDC_ENAME),FALSE); + EnableWindow(GetDlgItem(hwndDlg,IDC_EPATH),FALSE); + BuildTree(hwndDlg); + SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); + + }; + + + }; + if (ctrlid==IDC_ADDSEP) + { + if (CallService(TTB_ADDSEPARATOR,0,0)==0) + { + // BuildTree(hwndDlg); + SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); + }; + break; + }; + if (ctrlid==IDC_REMOVESEP) + { + int curselect; + TVITEM tvi; + memset(&tvi,0,sizeof(tvi)); + tvi.hItem=TreeView_GetSelection(GetDlgItem(hwndDlg,IDC_BUTTONORDERTREE)); + if (tvi.hItem==NULL){break;}; + + //MessageBoxA(0,"GetSelItem","log",0); + tvi.mask=TVIF_PARAM; + TreeView_GetItem(GetDlgItem(hwndDlg,IDC_BUTTONORDERTREE),&tvi); + + if (tvi.lParam==0){break;}; + //MessageBoxA(0,"Getting curselect","log",0); + //!!! in win98 cause crash ? + if (IsBadCodePtr(tvi.lParam)) + { + MessageBoxA(0,"Bad Code Ptr: tvi.lParam","log",0); + break; + }; + curselect=((ButtonOptData *)tvi.lParam)->pos; + + if ((curselect>=0)&&(curselectpos; + lockbut(); + + if (Buttons[curselect].UserDefinedbmUp!=NULL){free(Buttons[curselect].UserDefinedbmUp);}; + if (Buttons[curselect].UserDefinedbmDown!=NULL){free(Buttons[curselect].UserDefinedbmDown);}; + Buttons[curselect].UserDefinedbmUp=NULL; + Buttons[curselect].UserDefinedbmDown=NULL; + applyuserbitmaps(curselect); + SetImagesForCurrent(hwndDlg,curselect); + //PostMessage(GetDlgItem(hwndDlg,IDC_BMPUP), STM_SETIMAGE,IMAGE_BITMAP,Buttons[curselect].hbBitmapUp); + //PostMessage(GetDlgItem(hwndDlg,IDC_BMPDN), STM_SETIMAGE,IMAGE_BITMAP,Buttons[curselect].hbBitmapDown); + + ulockbut(); + SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); + }; + }; + + if ((HIWORD(wParam)==STN_CLICKED|| HIWORD(wParam)==STN_DBLCLK)) + { + int ctrlid=LOWORD(wParam); + if (ctrlid==IDC_BMPUP||ctrlid==IDC_BMPDN) + { + + + char filename[MAX_PATH]; + OPENFILENAME ofn={0}; + char filter[512],*pfilter; + int curselect; + TVITEM tvi; + + tvi.hItem=TreeView_GetSelection(GetDlgItem(hwndDlg,IDC_BUTTONORDERTREE)); + if (tvi.hItem==NULL){break;}; + tvi.mask=TVIF_PARAM; + TreeView_GetItem(GetDlgItem(hwndDlg,IDC_BUTTONORDERTREE),&tvi); + + if (tvi.lParam==0){break;}; + curselect=((ButtonOptData *)tvi.lParam)->pos; + + + filename[0]=0; + memset(&ofn,0,sizeof(ofn)); + ofn.lStructSize = OPENFILENAME_SIZE_VERSION_400; + ofn.hwndOwner = hwndDlg; + ofn.hInstance = NULL; + strcpy(filter,Translate("Bitmap/Icon files")); + //sprintf(filter,"Bitmap/Icon files \0 *.bmp;*.ico \0\0" ); + + strcat(filter," (*.bmp;*.ico)"); + + pfilter=filter+strlen(filter)+1; + strcpy(pfilter,"*.bmp;*.ico"); + pfilter=pfilter+strlen(pfilter)+1; + + strcpy(pfilter,Translate("All Files")); + strcat(pfilter,"(*)"); + pfilter=pfilter+strlen(pfilter)+1; + strcpy(pfilter,"*"); + + + pfilter=pfilter+strlen(pfilter)+1; + *pfilter='\0'; + + ofn.lpstrFilter = filter; + ofn.lpstrFile = filename; + ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; + ofn.nMaxFile = sizeof(filename); + ofn.nMaxFileTitle = MAX_PATH; + ofn.lpstrDefExt = "bmp"; + ofn.lpstrTitle=(ctrlid==IDC_BMPUP)?Translate("Select Up Bitmap"):Translate("Select Down Bitmap"); + if(GetOpenFileName(&ofn)) { + lockbut(); + if (ctrlid==IDC_BMPUP){ + if (Buttons[curselect].UserDefinedbmUp!=NULL){free(Buttons[curselect].UserDefinedbmUp);}; + Buttons[curselect].UserDefinedbmUp=_strdup(ofn.lpstrFile); + }; + if (ctrlid==IDC_BMPDN){ + if (Buttons[curselect].UserDefinedbmDown!=NULL){free(Buttons[curselect].UserDefinedbmDown);}; + Buttons[curselect].UserDefinedbmDown=_strdup(ofn.lpstrFile); + }; + applyuserbitmaps(curselect); + SetImagesForCurrent(hwndDlg,curselect); + + ulockbut(); + SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); + }; + }; + }; + break; + } + + + + + + + + + + + case WM_NOTIFY: + switch(((LPNMHDR)lParam)->idFrom) { + case 0: + switch (((LPNMHDR)lParam)->code) + { + case PSN_APPLY: + { + + DBWriteContactSettingByte(0,TTB_OPTDIR,"BUTTHEIGHT",GetDlgItemInt(hwndDlg,IDC_BUTTHEIGHT,FALSE,FALSE)); + DBWriteContactSettingByte(0,TTB_OPTDIR,"BUTTWIDTH",GetDlgItemInt(hwndDlg,IDC_BUTTWIDTH,FALSE,FALSE)); + DBWriteContactSettingByte(0,TTB_OPTDIR,"UseMirandaButtonClass",(BYTE)IsDlgButtonChecked(hwndDlg,IDC_USEMIRANDABUTTON)); + DBWriteContactSettingByte(0,TTB_OPTDIR,"UseFlatButton",(BYTE)IsDlgButtonChecked(hwndDlg,IDC_USEFLAT)); + + DBWriteContactSettingByte(0,TTB_OPTDIR,"UseIcoLib",(BYTE)IsDlgButtonChecked(hwndDlg,IDC_USEICOLIB)); + + + SaveTree(hwndDlg); + ApplyNewDir(hwndDlg); + RecreateWindows(); + ArrangeButtons(); + + } + } + break; + case IDC_BUTTONORDERTREE: + switch (((LPNMHDR)lParam)->code) { + case TVN_BEGINDRAG: + SetCapture(hwndDlg); + dat->dragging=1; + dat->hDragItem=((LPNMTREEVIEW)lParam)->itemNew.hItem; + TreeView_SelectItem(GetDlgItem(hwndDlg,IDC_BUTTONORDERTREE),dat->hDragItem); + //ShowWindow(GetDlgItem(hwndDlg,IDC_BUTTONORDERTREEWARNING),SW_SHOW); + break; + + case NM_CLICK: + { + TVHITTESTINFO hti; + hti.pt.x=(short)LOWORD(GetMessagePos()); + hti.pt.y=(short)HIWORD(GetMessagePos()); + ScreenToClient(((LPNMHDR)lParam)->hwndFrom,&hti.pt); + if(TreeView_HitTest(((LPNMHDR)lParam)->hwndFrom,&hti)) + { + if(hti.flags&TVHT_ONITEMICON) { + TVITEM tvi; + tvi.mask=TVIF_HANDLE|TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_PARAM; + tvi.hItem=hti.hItem; + TreeView_GetItem(((LPNMHDR)lParam)->hwndFrom,&tvi); + tvi.iImage=tvi.iSelectedImage=!tvi.iImage; + ((ButtonOptData *)tvi.lParam)->show=tvi.iImage; + TreeView_SetItem(((LPNMHDR)lParam)->hwndFrom,&tvi); + SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); + + //all changes take effect in runtime + //ShowWindow(GetDlgItem(hwndDlg,IDC_BUTTONORDERTREEWARNING),SW_SHOW); + } + + + }; + } + break; + case TVN_SELCHANGED: + + { + + if(1/*TreeView_HitTest(((LPNMHDR)lParam)->hwndFrom,&hti)*/) + if (1/*hti.flags&TVHT_ONITEMLABEL*/) + { + TVITEM tvi; + HTREEITEM hti; + + hti=TreeView_GetSelection(GetDlgItem(hwndDlg,IDC_BUTTONORDERTREE)); + if (hti==NULL){break;}; + tvi.mask=TVIF_HANDLE|TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_PARAM; + tvi.hItem=hti; + TreeView_GetItem(GetDlgItem(hwndDlg,IDC_BUTTONORDERTREE),&tvi); + + + lockbut(); + EnableWindow(GetDlgItem(hwndDlg,IDC_BMPUP),FALSE); + EnableWindow(GetDlgItem(hwndDlg,IDC_BMPDN),FALSE); + + SetImagesForCurrent(hwndDlg,((ButtonOptData *)tvi.lParam)->pos); + //PostMessage(GetDlgItem(hwndDlg,IDC_BMPUP), STM_SETIMAGE,IMAGE_BITMAP,Buttons[((ButtonOptData *)tvi.lParam)->pos].hbBitmapUp); + //PostMessage(GetDlgItem(hwndDlg,IDC_BMPDN), STM_SETIMAGE,IMAGE_BITMAP,Buttons[((ButtonOptData *)tvi.lParam)->pos].hbBitmapDown); + + EnableWindow(GetDlgItem(hwndDlg,IDC_REMOVESEP),FALSE); + if (Buttons[((ButtonOptData *)tvi.lParam)->pos].dwFlags&TTBBF_ISSEPARATOR) + { + + EnableWindow(GetDlgItem(hwndDlg,IDC_REMOVESEP),TRUE); + }else + { + EnableWindow(GetDlgItem(hwndDlg,IDC_BMPUP),TRUE); + EnableWindow(GetDlgItem(hwndDlg,IDC_BMPDN),TRUE); + + }; + EnableWindow(GetDlgItem(hwndDlg,IDC_ENAME),FALSE); + EnableWindow(GetDlgItem(hwndDlg,IDC_EPATH),FALSE); + EnableWindow(GetDlgItem(hwndDlg,IDC_DELLBUTTON),FALSE); + EnableWindow(GetDlgItem(hwndDlg,IDC_LBUTTONSET),FALSE); + {SetDlgItemText(hwndDlg,IDC_ENAME,"");} + {SetDlgItemText(hwndDlg,IDC_EPATH,"");} + + + if (Buttons[((ButtonOptData *)tvi.lParam)->pos].dwFlags&TTBBF_ISLBUTTON) + { + LBUTOPT lbo; + + memset(&lbo,0,sizeof(lbo)); + CallService(TTB_GETLBUTTON,Buttons[((ButtonOptData *)tvi.lParam)->pos].lParamDown,(LPARAM)&lbo); + if (lbo.hframe!=0) + { + EnableWindow(GetDlgItem(hwndDlg,IDC_ENAME),TRUE); + EnableWindow(GetDlgItem(hwndDlg,IDC_EPATH),TRUE); + EnableWindow(GetDlgItem(hwndDlg,IDC_DELLBUTTON),TRUE); + EnableWindow(GetDlgItem(hwndDlg,IDC_LBUTTONSET),TRUE); + + if (lbo.name!=NULL){SetDlgItemText(hwndDlg,IDC_ENAME,lbo.name);}; + if (lbo.lpath!=NULL){SetDlgItemText(hwndDlg,IDC_EPATH,lbo.lpath);}; + }; + + + }; + + ulockbut(); + }; + + + + }; + + + + } + break; + } + break; + case WM_MOUSEMOVE: + if(!dat->dragging) break; + { TVHITTESTINFO hti; + hti.pt.x=(short)LOWORD(lParam); + hti.pt.y=(short)HIWORD(lParam); + ClientToScreen(hwndDlg,&hti.pt); + ScreenToClient(GetDlgItem(hwndDlg,IDC_BUTTONORDERTREE),&hti.pt); + TreeView_HitTest(GetDlgItem(hwndDlg,IDC_BUTTONORDERTREE),&hti); + if(hti.flags&(TVHT_ONITEM|TVHT_ONITEMRIGHT)) { + hti.pt.y-=TreeView_GetItemHeight(GetDlgItem(hwndDlg,IDC_BUTTONORDERTREE))/2; + TreeView_HitTest(GetDlgItem(hwndDlg,IDC_BUTTONORDERTREE),&hti); + TreeView_SetInsertMark(GetDlgItem(hwndDlg,IDC_BUTTONORDERTREE),hti.hItem,1); + } + else { + if(hti.flags&TVHT_ABOVE) SendDlgItemMessage(hwndDlg,IDC_BUTTONORDERTREE,WM_VSCROLL,MAKEWPARAM(SB_LINEUP,0),0); + if(hti.flags&TVHT_BELOW) SendDlgItemMessage(hwndDlg,IDC_BUTTONORDERTREE,WM_VSCROLL,MAKEWPARAM(SB_LINEDOWN,0),0); + TreeView_SetInsertMark(GetDlgItem(hwndDlg,IDC_BUTTONORDERTREE),NULL,0); + } + + } + break; + case WM_DESTROY: + { + OptionsOpened=FALSE; + return(0); + }; + + case WM_LBUTTONUP: + if(!dat->dragging) break; + TreeView_SetInsertMark(GetDlgItem(hwndDlg,IDC_BUTTONORDERTREE),NULL,0); + dat->dragging=0; + ReleaseCapture(); + { TVHITTESTINFO hti; + TVITEM tvi; + hti.pt.x=(short)LOWORD(lParam); + hti.pt.y=(short)HIWORD(lParam); + ClientToScreen(hwndDlg,&hti.pt); + ScreenToClient(GetDlgItem(hwndDlg,IDC_BUTTONORDERTREE),&hti.pt); + hti.pt.y-=TreeView_GetItemHeight(GetDlgItem(hwndDlg,IDC_BUTTONORDERTREE))/2; + TreeView_HitTest(GetDlgItem(hwndDlg,IDC_BUTTONORDERTREE),&hti); + if(dat->hDragItem==hti.hItem) break; + tvi.mask=TVIF_HANDLE|TVIF_PARAM; + tvi.hItem=hti.hItem; + TreeView_GetItem(GetDlgItem(hwndDlg,IDC_BUTTONORDERTREE),&tvi); + if(hti.flags&(TVHT_ONITEM|TVHT_ONITEMRIGHT)) { + TVINSERTSTRUCT tvis; + char name[128]; + tvis.item.mask=TVIF_HANDLE|TVIF_PARAM|TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE; + tvis.item.stateMask=0xFFFFFFFF; + tvis.item.pszText=name; + tvis.item.cchTextMax=sizeof(name); + tvis.item.hItem=dat->hDragItem; + // + tvis.item.iImage=tvis.item.iSelectedImage=((ButtonOptData *)tvi.lParam)->show; + + TreeView_GetItem(GetDlgItem(hwndDlg,IDC_BUTTONORDERTREE),&tvis.item); + + + TreeView_DeleteItem(GetDlgItem(hwndDlg,IDC_BUTTONORDERTREE),dat->hDragItem); + tvis.hParent=NULL; + tvis.hInsertAfter=hti.hItem; + TreeView_SelectItem(GetDlgItem(hwndDlg,IDC_BUTTONORDERTREE),TreeView_InsertItem(GetDlgItem(hwndDlg,IDC_BUTTONORDERTREE),&tvis)); + SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); + SaveTree(hwndDlg); + } + } + break; + } + return FALSE; +} + + + +int TTBOptInit(WPARAM wParam,LPARAM lParam) +{ + OPTIONSDIALOGPAGE odp; + + ZeroMemory(&odp,sizeof(odp)); + odp.cbSize=sizeof(odp); + odp.position=0; + odp.hInstance=hInst; + odp.pszGroup=Translate("TopToolBar"); + + if (ServiceExists(MS_BACKGROUNDCONFIG_REGISTER)) + { + + }else + { + odp.pszTemplate=MAKEINTRESOURCE(IDD_OPT_TTBBKG); + odp.pszTitle=Translate("TTBBackground"); + odp.pfnDlgProc=DlgProcTTBBkgOpts; + odp.flags=ODPF_BOLDGROUPS; + CallService(MS_OPT_ADDPAGE,wParam,(LPARAM)&odp); + }; + + ZeroMemory(&odp,sizeof(odp)); + odp.cbSize=sizeof(odp); + odp.position=-1000000000; + odp.hInstance=hInst;//GetModuleHandle(NULL); + odp.pszTemplate=MAKEINTRESOURCE(IDD_OPT_BUTORDER); + odp.pszGroup=Translate("TopToolBar"); + odp.pszTitle=Translate("Buttons"); + odp.pfnDlgProc=ButOrderOpts; + odp.flags=ODPF_BOLDGROUPS|ODPF_EXPERTONLY; + CallService(MS_OPT_ADDPAGE,wParam,(LPARAM)&odp); + + return 0; +} + +static BOOL CALLBACK DlgProcTTBBkgOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) +{ + switch (msg) + { + case WM_INITDIALOG: + TranslateDialogDefault(hwndDlg); + CheckDlgButton(hwndDlg,IDC_BITMAP,DBGetContactSettingByte(NULL,TTB_OPTDIR,"UseBitmap",TTBDEFAULT_USEBITMAP)?BST_CHECKED:BST_UNCHECKED); + SendMessage(hwndDlg,WM_USER+10,0,0); + SendDlgItemMessage(hwndDlg,IDC_BKGCOLOUR,CPM_SETDEFAULTCOLOUR,0,TTBDEFAULT_BKCOLOUR); + SendDlgItemMessage(hwndDlg,IDC_BKGCOLOUR,CPM_SETCOLOUR,0,DBGetContactSettingDword(NULL,TTB_OPTDIR,"BkColour",TTBDEFAULT_BKCOLOUR)); + SendDlgItemMessage(hwndDlg,IDC_SELCOLOUR,CPM_SETDEFAULTCOLOUR,0,TTBDEFAULT_SELBKCOLOUR); + SendDlgItemMessage(hwndDlg,IDC_SELCOLOUR,CPM_SETCOLOUR,0,DBGetContactSettingDword(NULL,TTB_OPTDIR,"SelBkColour",TTBDEFAULT_SELBKCOLOUR)); + { DBVARIANT dbv; + if(!DBGetContactSetting(NULL,TTB_OPTDIR,"BkBitmap",&dbv)) { + SetDlgItemText(hwndDlg,IDC_FILENAME,dbv.pszVal); + DBFreeVariant(&dbv); + + } + } + { WORD bmpUse=DBGetContactSettingWord(NULL,TTB_OPTDIR,"BkBmpUse",TTBDEFAULT_BKBMPUSE); + CheckDlgButton(hwndDlg,IDC_STRETCHH,bmpUse&CLB_STRETCHH?BST_CHECKED:BST_UNCHECKED); + CheckDlgButton(hwndDlg,IDC_STRETCHV,bmpUse&CLB_STRETCHV?BST_CHECKED:BST_UNCHECKED); + CheckDlgButton(hwndDlg,IDC_TILEH,bmpUse&CLBF_TILEH?BST_CHECKED:BST_UNCHECKED); + CheckDlgButton(hwndDlg,IDC_TILEV,bmpUse&CLBF_TILEV?BST_CHECKED:BST_UNCHECKED); + CheckDlgButton(hwndDlg,IDC_SCROLL,bmpUse&CLBF_SCROLL?BST_CHECKED:BST_UNCHECKED); + CheckDlgButton(hwndDlg,IDC_PROPORTIONAL,bmpUse&CLBF_PROPORTIONAL?BST_CHECKED:BST_UNCHECKED); + } + { HRESULT (STDAPICALLTYPE *MySHAutoComplete)(HWND,DWORD); + MySHAutoComplete=(HRESULT (STDAPICALLTYPE*)(HWND,DWORD))GetProcAddress(GetModuleHandle("shlwapi"),"SHAutoComplete"); + if(MySHAutoComplete) MySHAutoComplete(GetDlgItem(hwndDlg,IDC_FILENAME),1); + } + return TRUE; + case WM_USER+10: + EnableWindow(GetDlgItem(hwndDlg,IDC_FILENAME),IsDlgButtonChecked(hwndDlg,IDC_BITMAP)); + EnableWindow(GetDlgItem(hwndDlg,IDC_BROWSE),IsDlgButtonChecked(hwndDlg,IDC_BITMAP)); + EnableWindow(GetDlgItem(hwndDlg,IDC_STRETCHH),IsDlgButtonChecked(hwndDlg,IDC_BITMAP)); + EnableWindow(GetDlgItem(hwndDlg,IDC_STRETCHV),IsDlgButtonChecked(hwndDlg,IDC_BITMAP)); + EnableWindow(GetDlgItem(hwndDlg,IDC_TILEH),IsDlgButtonChecked(hwndDlg,IDC_BITMAP)); + EnableWindow(GetDlgItem(hwndDlg,IDC_TILEV),IsDlgButtonChecked(hwndDlg,IDC_BITMAP)); + EnableWindow(GetDlgItem(hwndDlg,IDC_SCROLL),IsDlgButtonChecked(hwndDlg,IDC_BITMAP)); + EnableWindow(GetDlgItem(hwndDlg,IDC_PROPORTIONAL),IsDlgButtonChecked(hwndDlg,IDC_BITMAP)); + break; + case WM_COMMAND: + if(LOWORD(wParam)==IDC_BROWSE) { + char str[MAX_PATH]; + OPENFILENAME ofn={0}; + char filter[512]; + + GetDlgItemText(hwndDlg,IDC_FILENAME,str,sizeof(str)); + ofn.lStructSize = OPENFILENAME_SIZE_VERSION_400; + ofn.hwndOwner = hwndDlg; + ofn.hInstance = NULL; + CallService(MS_UTILS_GETBITMAPFILTERSTRINGS,sizeof(filter),(LPARAM)filter); + ofn.lpstrFilter = filter; + ofn.lpstrFile = str; + ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; + ofn.nMaxFile = sizeof(str); + ofn.nMaxFileTitle = MAX_PATH; + ofn.lpstrDefExt = "bmp"; + if(!GetOpenFileName(&ofn)) break; + SetDlgItemText(hwndDlg,IDC_FILENAME,str); + } + else if(LOWORD(wParam)==IDC_FILENAME && HIWORD(wParam)!=EN_CHANGE) break; + if(LOWORD(wParam)==IDC_BITMAP) SendMessage(hwndDlg,WM_USER+10,0,0); + if(LOWORD(wParam)==IDC_FILENAME && (HIWORD(wParam)!=EN_CHANGE || (HWND)lParam!=GetFocus())) return 0; + SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); + break; + case WM_NOTIFY: + switch(((LPNMHDR)lParam)->idFrom) { + case 0: + switch (((LPNMHDR)lParam)->code) + { + case PSN_APPLY: + DBWriteContactSettingByte(NULL,TTB_OPTDIR,"UseBitmap",(BYTE)IsDlgButtonChecked(hwndDlg,IDC_BITMAP)); + { COLORREF col; + col=SendDlgItemMessage(hwndDlg,IDC_BKGCOLOUR,CPM_GETCOLOUR,0,0); + if(col==TTBDEFAULT_BKCOLOUR) DBDeleteContactSetting(NULL,TTB_OPTDIR,"BkColour"); + else DBWriteContactSettingDword(NULL,TTB_OPTDIR,"BkColour",col); + col=SendDlgItemMessage(hwndDlg,IDC_SELCOLOUR,CPM_GETCOLOUR,0,0); + if(col==TTBDEFAULT_SELBKCOLOUR) DBDeleteContactSetting(NULL,TTB_OPTDIR,"SelBkColour"); + else DBWriteContactSettingDword(NULL,TTB_OPTDIR,"SelBkColour",col); + } + { char str[MAX_PATH]; + GetDlgItemText(hwndDlg,IDC_FILENAME,str,sizeof(str)); + DBWriteContactSettingString(NULL,TTB_OPTDIR,"BkBitmap",str); + } + { WORD flags=0; + if(IsDlgButtonChecked(hwndDlg,IDC_STRETCHH)) flags|=CLB_STRETCHH; + if(IsDlgButtonChecked(hwndDlg,IDC_STRETCHV)) flags|=CLB_STRETCHV; + if(IsDlgButtonChecked(hwndDlg,IDC_TILEH)) flags|=CLBF_TILEH; + if(IsDlgButtonChecked(hwndDlg,IDC_TILEV)) flags|=CLBF_TILEV; + if(IsDlgButtonChecked(hwndDlg,IDC_SCROLL)) flags|=CLBF_SCROLL; + if(IsDlgButtonChecked(hwndDlg,IDC_PROPORTIONAL)) flags|=CLBF_PROPORTIONAL; + DBWriteContactSettingWord(NULL,TTB_OPTDIR,"BkBmpUse",flags); + } + + ttbOptionsChanged(); + return TRUE; + } + break; + } + break; + } + return FALSE; +} -- cgit v1.2.3