/* Miranda IM: the free IM client for Microsoft* Windows* Copyright 2000-2008 Miranda ICQ/IM project, all portions of this codebase are copyrighted to the people listed in contributors.txt. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "hdr/modern_commonheaders.h" #include "m_clui.h" #include "hdr/modern_clist.h" #include "m_clc.h" #include "io.h" #include "hdr/modern_commonprototypes.h" #include "hdr/modern_sync.h" typedef struct _OPT_OBJECT_DATA { char * szName; char * szPath; char * szValue; char * szTempValue; } OPT_OBJECT_DATA; static char *gl_Mask=NULL; HWND gl_Dlg=NULL; int gl_controlID=0; int EnableGroup(HWND hwndDlg, HWND first, BOOL bEnable); int ShowGroup(HWND hwndDlg, HWND first, BOOL bEnable); BOOL glOtherSkinWasLoaded=FALSE; BYTE glSkinWasModified=0; //1- but not applied, 2-stored to DB HTREEITEM FindChild(HWND hTree, HTREEITEM Parent, char * Caption) { HTREEITEM res=NULL, tmp=NULL; if (Parent) tmp=TreeView_GetChild(hTree,Parent); else tmp=TreeView_GetRoot(hTree); while (tmp) { TVITEMA tvi; char buf[255]; tvi.hItem=tmp; tvi.mask=TVIF_TEXT|TVIF_HANDLE; tvi.pszText=(LPSTR)&buf; tvi.cchTextMax=254; TreeView_GetItemA(hTree,&tvi); if (mir_bool_strcmpi(Caption,tvi.pszText)) return tmp; tmp=TreeView_GetNextSibling(hTree,tmp); } return tmp; } int TreeAddObject(HWND hwndDlg, int ID, OPT_OBJECT_DATA * data) { HTREEITEM rootItem=NULL; HTREEITEM cItem=NULL; char * path; char * ptr; char * ptrE; char buf[255]; BOOL ext=FALSE; path=data->szPath?mir_strdup(data->szPath):(data->szName[1]=='$')?mir_strdup((data->szName)+2):NULL; if (!path) { mir_snprintf(buf,SIZEOF(buf),"$(other)/%s",(data->szName)+1); path=mir_strdup(buf); } ptr=path; ptrE=path; do { while (*ptrE!='/' && *ptrE!='\0') ptrE++; if (*ptrE=='/') { *ptrE='\0'; ptrE++; // find item if not - create; { cItem=FindChild(GetDlgItem(hwndDlg,ID),rootItem,ptr); if (!cItem) // not found - create node { TVINSERTSTRUCTA tvis; tvis.hParent=rootItem; tvis.hInsertAfter=TVI_SORT; tvis.item.mask=TVIF_PARAM|TVIF_TEXT|TVIF_PARAM; tvis.item.pszText=ptr; tvis.item.lParam=(LPARAM)NULL; cItem=TreeView_InsertItemA(GetDlgItem(hwndDlg,ID),&tvis); } rootItem=cItem; } ptr=ptrE; } else ext=TRUE; }while (!ext); //Insert item node { TVINSERTSTRUCTA tvis; tvis.hParent=rootItem; tvis.hInsertAfter=TVI_SORT; tvis.item.mask=TVIF_PARAM|TVIF_TEXT|TVIF_PARAM; tvis.item.pszText=ptr; tvis.item.lParam=(LPARAM)data; TreeView_InsertItemA(GetDlgItem(hwndDlg,ID),&tvis); } mir_free_and_nill(path); return 0; } int enumDB_SkinObjectsForEditorProc(const char *szSetting,LPARAM lParam) { if (wildcmp((char *)szSetting,gl_Mask,0)||wildcmp((char *)szSetting,"$*",0)) { char * value; char *desc; char *descKey; descKey=mir_strdup(szSetting); descKey[0]='%'; value= ModernGetStringA(NULL,SKIN,szSetting); desc= ModernGetStringA(NULL,SKIN,descKey); if (wildcmp(value,"?lyph*",0)) { OPT_OBJECT_DATA * a=(OPT_OBJECT_DATA*)mir_alloc(sizeof(OPT_OBJECT_DATA)); a->szPath=desc; a->szName=mir_strdup(szSetting); a->szValue=value; a->szTempValue=NULL; TreeAddObject(gl_Dlg,gl_controlID,a); } else { if (value) mir_free_and_nill(value); if (desc) mir_free_and_nill(desc); } mir_free_and_nill(descKey); } return 0; } int FillObjectTree(HWND hwndDlg, int ObjectTreeID, char * wildmask) { DBCONTACTENUMSETTINGS dbces; gl_Dlg=hwndDlg; gl_controlID=ObjectTreeID; gl_Mask=wildmask; dbces.pfnEnumProc=enumDB_SkinObjectsForEditorProc; dbces.szModule=SKIN; dbces.ofsSettings=0; CallService(MS_DB_CONTACT_ENUMSETTINGS,0,(LPARAM)&dbces); return 0; } TCHAR *TYPES[]={_T("- Empty - (do not draw this object)"),_T("Solid fill object"),_T("Image (draw image)"),_T("Fragment (draw portion of image)")}; TCHAR *FITMODES[]={_T("Stretch Both directions"),_T("Stretch Vertical, Tile Horizontal"),_T("Tile Vertical, Stretch Horizontal"),_T("Tile Both directions")}; void SetAppropriateGroups(HWND hwndDlg, int Type) //str contains default values { switch (Type) { case -1: { EnableGroup(hwndDlg,GetDlgItem(hwndDlg,IDC_GROUP_1),FALSE); EnableGroup(hwndDlg,GetDlgItem(hwndDlg,IDC_ST_COLOUR),FALSE); EnableGroup(hwndDlg,GetDlgItem(hwndDlg,IDC_ST_ALPHA),FALSE); EnableGroup(hwndDlg,GetDlgItem(hwndDlg,IDC_GROUP_2),FALSE); EnableGroup(hwndDlg,GetDlgItem(hwndDlg,IDC_GROUP_3),FALSE); ShowWindow(GetDlgItem(hwndDlg,IDC_S_SIZE),FALSE); } break; case 0: { EnableGroup(hwndDlg,GetDlgItem(hwndDlg,IDC_GROUP_1),TRUE); EnableGroup(hwndDlg,GetDlgItem(hwndDlg,IDC_ST_COLOUR),FALSE); EnableGroup(hwndDlg,GetDlgItem(hwndDlg,IDC_ST_ALPHA),FALSE); EnableGroup(hwndDlg,GetDlgItem(hwndDlg,IDC_GROUP_2),FALSE); EnableGroup(hwndDlg,GetDlgItem(hwndDlg,IDC_GROUP_3),FALSE); ShowWindow(GetDlgItem(hwndDlg,IDC_S_SIZE),FALSE); } break; case 1: { EnableGroup(hwndDlg,GetDlgItem(hwndDlg,IDC_GROUP_1),TRUE); EnableGroup(hwndDlg,GetDlgItem(hwndDlg,IDC_ST_COLOUR),TRUE); EnableGroup(hwndDlg,GetDlgItem(hwndDlg,IDC_ST_ALPHA),TRUE); EnableGroup(hwndDlg,GetDlgItem(hwndDlg,IDC_GROUP_2),FALSE); EnableGroup(hwndDlg,GetDlgItem(hwndDlg,IDC_GROUP_3),FALSE); ShowWindow(GetDlgItem(hwndDlg,IDC_S_SIZE),FALSE); //Set Color and alpha } break; case 2: { EnableGroup(hwndDlg,GetDlgItem(hwndDlg,IDC_GROUP_1),TRUE); EnableGroup(hwndDlg,GetDlgItem(hwndDlg,IDC_ST_COLOUR),FALSE); EnableGroup(hwndDlg,GetDlgItem(hwndDlg,IDC_ST_ALPHA),TRUE); EnableGroup(hwndDlg,GetDlgItem(hwndDlg,IDC_GROUP_2),TRUE); EnableGroup(hwndDlg,GetDlgItem(hwndDlg,IDC_GROUP_3),FALSE); ShowWindow(GetDlgItem(hwndDlg,IDC_S_SIZE),TRUE); //Set alpha, image, margins etc. } break; case 3: { EnableGroup(hwndDlg,GetDlgItem(hwndDlg,IDC_GROUP_1),TRUE); EnableGroup(hwndDlg,GetDlgItem(hwndDlg,IDC_ST_COLOUR),FALSE); EnableGroup(hwndDlg,GetDlgItem(hwndDlg,IDC_ST_ALPHA),TRUE); EnableGroup(hwndDlg,GetDlgItem(hwndDlg,IDC_GROUP_2),TRUE); EnableGroup(hwndDlg,GetDlgItem(hwndDlg,IDC_GROUP_3),TRUE); ShowWindow(GetDlgItem(hwndDlg,IDC_S_SIZE),TRUE); //Set alpha, image, margins etc. } break; } } void SetControls(HWND hwndDlg, char * str) { char buf[250]; int Type=0; if (!str) { SetAppropriateGroups(hwndDlg,-1); return; } GetParamN(str,buf,SIZEOF(buf),1,',',TRUE); if (mir_bool_strcmpi(buf,"Solid")) Type=1; else if (mir_bool_strcmpi(buf,"Image")) Type=2; else if (mir_bool_strcmpi(buf,"Fragment")) Type=3; SendDlgItemMessage(hwndDlg,IDC_TYPE,CB_SETCURSEL,(WPARAM)Type,(LPARAM)0); SetAppropriateGroups(hwndDlg,Type); switch (Type) { case 1: { int r,g,b,a; r=g=b=200; a=255; r=atoi(GetParamN(str,buf,SIZEOF(buf),2,',',TRUE)); g=atoi(GetParamN(str,buf,SIZEOF(buf),3,',',TRUE)); b=atoi(GetParamN(str,buf,SIZEOF(buf),4,',',TRUE)); a=atoi(GetParamN(str,buf,SIZEOF(buf),5,',',TRUE)); SendDlgItemMessage(hwndDlg,IDC_COLOR,CPM_SETCOLOUR,(WPARAM)0,(LPARAM)RGB(r,g,b)); SendDlgItemMessage(hwndDlg,IDC_COLOR,CPM_SETDEFAULTCOLOUR,(WPARAM)0,(LPARAM)RGB(r,g,b)); SendDlgItemMessage(hwndDlg,IDC_SPIN_ALPHA,UDM_SETPOS,0,MAKELONG(a,0)); } break; case 2: { int a; int l,t,r,b; int fitmode=0; l=t=r=b=0; a=255; l=atoi(GetParamN(str,buf,SIZEOF(buf),4,',',TRUE)); t=atoi(GetParamN(str,buf,SIZEOF(buf),5,',',TRUE)); r=atoi(GetParamN(str,buf,SIZEOF(buf),6,',',TRUE)); b=atoi(GetParamN(str,buf,SIZEOF(buf),7,',',TRUE)); a=atoi(GetParamN(str,buf,SIZEOF(buf),8,',',TRUE)); SendDlgItemMessage(hwndDlg,IDC_SPIN_ALPHA,UDM_SETPOS,0,MAKELONG(a,0)); SendDlgItemMessage(hwndDlg,IDC_SPIN_LEFT,UDM_SETPOS,0,MAKELONG(l,0)); SendDlgItemMessage(hwndDlg,IDC_SPIN_TOP,UDM_SETPOS,0,MAKELONG(t,0)); SendDlgItemMessage(hwndDlg,IDC_SPIN_RIGHT,UDM_SETPOS,0,MAKELONG(r,0)); SendDlgItemMessage(hwndDlg,IDC_SPIN_BOTTOM,UDM_SETPOS,0,MAKELONG(b,0)); GetParamN(str,buf,SIZEOF(buf),2,',',TRUE); SendDlgItemMessageA(hwndDlg,IDC_FILE,WM_SETTEXT,0,(LPARAM)buf); GetParamN(str,buf,SIZEOF(buf),3,',',TRUE); if (mir_bool_strcmpi(buf,"TileBoth")) fitmode=FM_TILE_BOTH; else if (mir_bool_strcmpi(buf,"TileVert")) fitmode=FM_TILE_VERT; else if (mir_bool_strcmpi(buf,"TileHorz")) fitmode=FM_TILE_HORZ; else fitmode=0; SendDlgItemMessage(hwndDlg,IDC_FIT,CB_SETCURSEL,(WPARAM)fitmode,(LPARAM)0); } break; case 3: { int a; int l,t,r,b; int x,y,w,h; int fitmode=0; l=t=r=b=0; x=y=w=h=0; a=255; x=atoi(GetParamN(str,buf,SIZEOF(buf),3,',',TRUE)); y=atoi(GetParamN(str,buf,SIZEOF(buf),4,',',TRUE)); w=atoi(GetParamN(str,buf,SIZEOF(buf),5,',',TRUE)); h=atoi(GetParamN(str,buf,SIZEOF(buf),6,',',TRUE)); l=atoi(GetParamN(str,buf,SIZEOF(buf),8,',',TRUE)); t=atoi(GetParamN(str,buf,SIZEOF(buf),9,',',TRUE)); r=atoi(GetParamN(str,buf,SIZEOF(buf),10,',',TRUE)); b=atoi(GetParamN(str,buf,SIZEOF(buf),11,',',TRUE)); a=atoi(GetParamN(str,buf,SIZEOF(buf),12,',',TRUE)); SendDlgItemMessage(hwndDlg,IDC_SPIN_ALPHA,UDM_SETPOS,0,MAKELONG(a,0)); SendDlgItemMessage(hwndDlg,IDC_SPIN_LEFT,UDM_SETPOS,0,MAKELONG(l,0)); SendDlgItemMessage(hwndDlg,IDC_SPIN_TOP,UDM_SETPOS,0,MAKELONG(t,0)); SendDlgItemMessage(hwndDlg,IDC_SPIN_RIGHT,UDM_SETPOS,0,MAKELONG(r,0)); SendDlgItemMessage(hwndDlg,IDC_SPIN_BOTTOM,UDM_SETPOS,0,MAKELONG(b,0)); SendDlgItemMessage(hwndDlg,IDC_SPIN_POSLEFT,UDM_SETPOS,0,MAKELONG(x,0)); SendDlgItemMessage(hwndDlg,IDC_SPIN_POSTOP,UDM_SETPOS,0,MAKELONG(y,0)); SendDlgItemMessage(hwndDlg,IDC_SPIN_WIDTH,UDM_SETPOS,0,MAKELONG(w,0)); SendDlgItemMessage(hwndDlg,IDC_SPIN_HEIGHT,UDM_SETPOS,0,MAKELONG(h,0)); GetParamN(str,buf,SIZEOF(buf),2,',',TRUE); SendDlgItemMessageA(hwndDlg,IDC_FILE,WM_SETTEXT,0,(LPARAM)buf); GetParamN(str,buf,SIZEOF(buf),7,',',TRUE); if (mir_bool_strcmpi(buf,"TileBoth")) fitmode=FM_TILE_BOTH; else if (mir_bool_strcmpi(buf,"TileVert")) fitmode=FM_TILE_VERT; else if (mir_bool_strcmpi(buf,"TileHorz")) fitmode=FM_TILE_HORZ; else fitmode=0; SendDlgItemMessage(hwndDlg,IDC_FIT,CB_SETCURSEL,(WPARAM)fitmode,(LPARAM)0); } break; } } int GetShortFileName(char * FullFile) { char buf[MAX_PATH]={0}; char * f=strrchr(FullFile,'\\'); char * file=f?mir_strdup(f+1):0; if (!file) return 0; ske_GetFullFilename(buf,file,0,TRUE); if (mir_bool_strcmpi(buf,FullFile)) { _snprintf(FullFile,MAX_PATH,"%s",file); mir_free_and_nill(file); return 1; //skin folder relative } else { CallService(MS_UTILS_PATHTORELATIVE,(WPARAM)FullFile,(LPARAM)buf); if (buf[0]!='\\' && buf[1]!=':') _snprintf(FullFile,MAX_PATH,"\\%s",buf); else _snprintf(FullFile,MAX_PATH,"%s",buf); } mir_free_and_nill(file); return 2; //mirand folder relative } char * MadeString(HWND hwndDlg) { char buf[MAX_PATH*2]={0}; int i=SendDlgItemMessage(hwndDlg,IDC_TYPE,CB_GETCURSEL,(WPARAM)0,(LPARAM)0); switch (i) { case 0: mir_snprintf(buf,SIZEOF(buf),"Glyph,Skip"); break; case 1: { BYTE a; DWORD col; a=(BYTE)SendDlgItemMessage(hwndDlg,IDC_SPIN_ALPHA,UDM_GETPOS,0,0); col=(DWORD)SendDlgItemMessage(hwndDlg,IDC_COLOR,CPM_GETCOLOUR,(WPARAM)0,(LPARAM)0); mir_snprintf(buf,SIZEOF(buf),"Glyph,Solid,%d,%d,%d,%d",GetRValue(col),GetGValue(col),GetBValue(col),a); } break; case 2: { BYTE a; WORD l,t,b,r; char buf_name[MAX_PATH]={0}; int i=0; a=(BYTE)SendDlgItemMessage(hwndDlg,IDC_SPIN_ALPHA,UDM_GETPOS,0,0); l=(WORD)SendDlgItemMessage(hwndDlg,IDC_SPIN_LEFT,UDM_GETPOS,0,0); t=(WORD)SendDlgItemMessage(hwndDlg,IDC_SPIN_TOP,UDM_GETPOS,0,0); r=(WORD)SendDlgItemMessage(hwndDlg,IDC_SPIN_RIGHT,UDM_GETPOS,0,0); b=(WORD)SendDlgItemMessage(hwndDlg,IDC_SPIN_BOTTOM,UDM_GETPOS,0,0); SendDlgItemMessageA(hwndDlg,IDC_FILE,WM_GETTEXT,(WPARAM)MAX_PATH,(LPARAM)buf_name); i=SendDlgItemMessage(hwndDlg,IDC_FIT,CB_GETCURSEL,0,0); mir_snprintf(buf,SIZEOF(buf),"Glyph,Image,%s,%s,%d,%d,%d,%d,%d",buf_name, //fitmode (i==FM_TILE_BOTH)?"TileBoth": (i==FM_TILE_VERT)?"TileVert": (i==FM_TILE_HORZ)?"TileHorz":"StretchBoth", l,t,r,b,a); } break; case 3: { BYTE a; WORD l,t,b,r; WORD x,y,w,h; char buf_name[MAX_PATH]={0}; int i=0; a=(BYTE)SendDlgItemMessage(hwndDlg,IDC_SPIN_ALPHA,UDM_GETPOS,0,0); l=(WORD)SendDlgItemMessage(hwndDlg,IDC_SPIN_LEFT,UDM_GETPOS,0,0); t=(WORD)SendDlgItemMessage(hwndDlg,IDC_SPIN_TOP,UDM_GETPOS,0,0); r=(WORD)SendDlgItemMessage(hwndDlg,IDC_SPIN_RIGHT,UDM_GETPOS,0,0); b=(WORD)SendDlgItemMessage(hwndDlg,IDC_SPIN_BOTTOM,UDM_GETPOS,0,0); x=(WORD)SendDlgItemMessage(hwndDlg,IDC_SPIN_POSLEFT,UDM_GETPOS,0,0); y=(WORD)SendDlgItemMessage(hwndDlg,IDC_SPIN_POSTOP,UDM_GETPOS,0,0); w=(WORD)SendDlgItemMessage(hwndDlg,IDC_SPIN_WIDTH,UDM_GETPOS,0,0); h=(WORD)SendDlgItemMessage(hwndDlg,IDC_SPIN_HEIGHT,UDM_GETPOS,0,0); SendDlgItemMessageA(hwndDlg,IDC_FILE,WM_GETTEXT,(WPARAM)MAX_PATH,(LPARAM)buf_name); i=SendDlgItemMessage(hwndDlg,IDC_FIT,CB_GETCURSEL,0,0); mir_snprintf(buf,SIZEOF(buf),"Glyph,Fragment,%s,%d,%d,%d,%d,%s,%d,%d,%d,%d,%d",buf_name,x,y,w,h, //fitmode (i==FM_TILE_BOTH)?"TileBoth": (i==FM_TILE_VERT)?"TileVert": (i==FM_TILE_HORZ)?"TileHorz":"StretchBoth", l,t,r,b,a); } break; } if (buf[0]!='\0') return mir_strdup(buf); return 0; } void UpdateInfo(HWND hwndDlg) { char *b=MadeString(hwndDlg); if (!b) { SendDlgItemMessageA(hwndDlg,IDC_EDIT1,WM_SETTEXT,0,(LPARAM)""); return; } SendDlgItemMessageA(hwndDlg,IDC_EDIT1,WM_SETTEXT,0,(LPARAM)b); { OPT_OBJECT_DATA *sd=NULL; HTREEITEM hti=TreeView_GetSelection(GetDlgItem(hwndDlg,IDC_OBJECT_TREE)); if (hti) { TVITEMA tvi={0}; tvi.hItem=hti; tvi.mask=TVIF_HANDLE|TVIF_PARAM; TreeView_GetItem(GetDlgItem(hwndDlg,IDC_OBJECT_TREE),&tvi); sd=(OPT_OBJECT_DATA*)(tvi.lParam); if (sd) { if (sd->szValue) mir_free_and_nill(sd->szValue); sd->szValue=mir_strdup(b); } } } mir_free_and_nill(b); glSkinWasModified=1; } void StoreTreeNode(HWND hTree, HTREEITEM node, char * section) { HTREEITEM tmp; tmp=node; while (tmp) { HTREEITEM tmp2=NULL; TVITEMA tvi; char buf[255]; tvi.hItem=tmp; tvi.mask=TVIF_TEXT|TVIF_HANDLE; tvi.pszText=(LPSTR)&buf; tvi.cchTextMax=254; TreeView_GetItemA(hTree,&tvi); if (tvi.lParam) { OPT_OBJECT_DATA * dat =(OPT_OBJECT_DATA*)(tvi.lParam); if (dat->szName && dat->szValue) ModernWriteSettingString(NULL,section,dat->szName,dat->szValue); } tmp2=TreeView_GetChild(hTree,tmp); if (tmp2) StoreTreeNode(hTree,tmp2,section); tmp=TreeView_GetNextSibling(hTree,tmp); } return; } void StoreTreeToDB(HWND hTree, char * section) { HTREEITEM tmp=NULL; tmp=TreeView_GetRoot(hTree); StoreTreeNode(hTree,tmp,section); ModernWriteSettingByte(NULL,section,"Modified",1); glSkinWasModified=2; } static BOOL fileChanged=FALSE; static char * object_clipboard=NULL; int GetFileSizes(HWND hwndDlg) { char buf[MAX_PATH]; SIZE sz={0}; SendDlgItemMessageA(hwndDlg,IDC_FILE,WM_GETTEXT,(WPARAM)MAX_PATH,(LPARAM)buf); ske_GetFullFilename(buf,buf,0,TRUE); { HBITMAP hbmp=ske_LoadGlyphImage(buf); if (hbmp) { BITMAP bm={0}; GetObject(hbmp,sizeof(BITMAP),&bm); sz.cx=bm.bmWidth; sz.cy=bm.bmHeight; ske_UnloadGlyphImage(hbmp); } } _snprintf(buf, MAX_PATH, "%s %d x %d %s",Translate("Image size is"),sz.cx, sz.cy, Translate("pixels")); SendDlgItemMessageA(hwndDlg,IDC_S_SIZE,WM_SETTEXT,0,(LPARAM)buf); return 0; } INT_PTR CALLBACK DlgSkinEditorOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_DESTROY: { if (object_clipboard) mir_free_and_nill(object_clipboard); break; } case WM_WINDOWPOSCHANGED: { WINDOWPOS * wp=(WINDOWPOS *)lParam; if (lParam && wp->flags&SWP_SHOWWINDOW) { if (glOtherSkinWasLoaded) { TreeView_DeleteAllItems(GetDlgItem(hwndDlg,IDC_OBJECT_TREE)); FillObjectTree(hwndDlg,IDC_OBJECT_TREE,"$$*"); glSkinWasModified=0; glOtherSkinWasLoaded=FALSE; } } break; } case WM_INITDIALOG: { TranslateDialogDefault(hwndDlg); FillObjectTree(hwndDlg,IDC_OBJECT_TREE,"$$*"); { //Fill types combo int i=0; for (i=0; iszValue) object_clipboard=mir_strdup(sd->szValue); } EnableWindow(GetDlgItem(hwndDlg,IDC_PASTE),object_clipboard!=NULL); return 0; } } else if (LOWORD(wParam)==IDC_PASTE) { if (HIWORD(wParam)==BN_CLICKED) { if (object_clipboard) SetControls(hwndDlg, object_clipboard); SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); UpdateInfo(hwndDlg); return 0; } } else if (LOWORD(wParam)==IDC_COLOR) { SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); UpdateInfo(hwndDlg); } else if (LOWORD(wParam)==IDC_BROWSE) { if (HIWORD(wParam)==BN_CLICKED) { { char str[MAX_PATH]={0}; OPENFILENAMEA ofn={0}; char filter[512]={0}; int res=0; ofn.lStructSize = OPENFILENAME_SIZE_VERSION_400; ofn.hwndOwner = hwndDlg; ofn.hInstance = NULL; ofn.lpstrFilter = "Images (*.png,*.jpg,*.bmp,*.gif,*.tga)\0*.png;*.jpg;*.jpeg;*.bmp;*.gif;*.tga\0All files (*.*)\0*.*\0\0"; ofn.Flags = (OFN_FILEMUSTEXIST | OFN_HIDEREADONLY); SendDlgItemMessageA(hwndDlg,IDC_FILE,WM_GETTEXT,(WPARAM)SIZEOF(str),(LPARAM)str); if (str[0]=='\0' || strchr(str,'%')) { ofn.Flags|=OFN_NOVALIDATE; str[0]='\0'; } else { ske_GetFullFilename(str,str,(char*)0,TRUE); } ofn.lpstrFile = str; ofn.nMaxFile = SIZEOF(str); ofn.nMaxFileTitle = MAX_PATH; ofn.lpstrDefExt = "*.*"; // { // DWORD tick=GetTickCount(); res=GetOpenFileNameA(&ofn); // if(!res) // if (GetTickCount()-tick<100) // { // res=GetOpenFileNameA(&ofn); // if(!res) break; // } // else break; //} if (res) { GetShortFileName(ofn.lpstrFile); SendDlgItemMessageA(hwndDlg,IDC_FILE,WM_SETTEXT,(WPARAM)0,(LPARAM)ofn.lpstrFile); SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); UpdateInfo(hwndDlg); } } } } else if (LOWORD(wParam)==IDC_FILE) { if (HIWORD(wParam) == EN_CHANGE) { fileChanged=TRUE; if ((HWND)lParam != GetFocus()) { GetFileSizes(hwndDlg); fileChanged=FALSE; } } else if (HIWORD(wParam) == EN_KILLFOCUS) { if (fileChanged) { GetFileSizes(hwndDlg); fileChanged=FALSE; } } } else if (( (LOWORD(wParam)==IDC_E_TOP ||LOWORD(wParam)==IDC_E_BOTTOM ||LOWORD(wParam)==IDC_E_LEFT ||LOWORD(wParam)==IDC_E_RIGHT ||LOWORD(wParam)==IDC_E_X ||LOWORD(wParam)==IDC_E_Y ||LOWORD(wParam)==IDC_E_W ||LOWORD(wParam)==IDC_E_H ||LOWORD(wParam)==IDC_EDIT_ALPHA ) && HIWORD(wParam) != EN_CHANGE || (HWND)lParam != GetFocus())) { return 0; } else if (LOWORD(wParam)!=IDC_EDIT1) { SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); UpdateInfo(hwndDlg); } //check (LOWORD(wParam)) //SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); break; } case WM_NOTIFY: switch (((LPNMHDR)lParam)->idFrom) { case IDC_OBJECT_TREE: { //Save existed object //Change to new object NMTREEVIEWA * nmtv = (NMTREEVIEWA *) lParam; if (!nmtv) return 0; if (nmtv->hdr.code==TVN_SELCHANGEDA || nmtv->hdr.code==TVN_SELCHANGEDW) { if (nmtv->itemOld.lParam) { OPT_OBJECT_DATA * dataOld=(OPT_OBJECT_DATA*)nmtv->itemOld.lParam; if (dataOld->szValue) { mir_free_and_nill(dataOld->szValue); dataOld->szValue=MadeString(hwndDlg); } } if (nmtv->itemNew.lParam) { OPT_OBJECT_DATA * data=(OPT_OBJECT_DATA*)nmtv->itemNew.lParam; char buf[255]; mir_snprintf(buf,SIZEOF(buf),"%s=%s",data->szName, data->szValue); SendDlgItemMessageA(hwndDlg,IDC_EDIT1,WM_SETTEXT,0,(LPARAM)buf); SetControls(hwndDlg,data->szValue); EnableWindow(GetDlgItem(hwndDlg,IDC_COPY),TRUE); EnableWindow(GetDlgItem(hwndDlg,IDC_PASTE),object_clipboard!=NULL); } else { SendDlgItemMessageA(hwndDlg,IDC_EDIT1,WM_SETTEXT,0,(LPARAM)""); SetControls(hwndDlg,NULL); EnableWindow(GetDlgItem(hwndDlg,IDC_COPY),FALSE); EnableWindow(GetDlgItem(hwndDlg,IDC_PASTE),FALSE); } } else if (nmtv->hdr.code==TVN_DELETEITEMA) { OPT_OBJECT_DATA * dataOld=(OPT_OBJECT_DATA*)nmtv->itemOld.lParam; if (dataOld) { if (dataOld->szName) mir_free_and_nill(dataOld->szName); if (dataOld->szPath) mir_free_and_nill(dataOld->szPath); if (dataOld->szTempValue) mir_free_and_nill(dataOld->szTempValue); if (dataOld->szValue) mir_free_and_nill(dataOld->szValue); } } return 0; } case 0: switch (((LPNMHDR)lParam)->code) { case PSN_APPLY: if (!glOtherSkinWasLoaded) //store only if skin is same { StoreTreeToDB(GetDlgItem(hwndDlg,IDC_OBJECT_TREE),SKIN); //ReloadSkin ske_LoadSkinFromDB(); pcli->pfnClcBroadcast( INTM_RELOADOPTIONS,0,0); Sync(CLUIFrames_OnClistResize_mod,0,0); ske_RedrawCompleteWindow(); Sync(CLUIFrames_OnClistResize_mod, (WPARAM)0, (LPARAM)0); { HWND hwnd=pcli->hwndContactList; RECT rc={0}; GetWindowRect(hwnd, &rc); Sync(CLUIFrames_OnMoving,hwnd,&rc); } return TRUE; } else return TRUE; } break; } } return FALSE; } int EnableGroup(HWND hwndDlg, HWND first, BOOL bEnable) { HWND hwnd=first; BOOL exit=FALSE; if (!hwnd) return 0; do { EnableWindow(hwnd,bEnable); hwnd=GetWindow(hwnd,GW_HWNDNEXT); if (!hwnd || GetWindowLong(hwnd,GWL_STYLE)&WS_GROUP) exit=TRUE; }while (!exit); return 0; } int ShowGroup(HWND hwndDlg, HWND first, BOOL bEnable) { HWND hwnd=first; BOOL exit=FALSE; if (!hwnd) return 0; do { ShowWindow(hwnd,bEnable?SW_SHOW:SW_HIDE); hwnd=GetWindow(hwnd,GW_HWNDNEXT); if (!hwnd || GetWindowLong(hwnd,GWL_STYLE)&WS_GROUP) exit=TRUE; }while (!exit); return 0; }