/* 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(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 = db_get_sa(NULL,SKIN,szSetting); desc = db_get_sa(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 { mir_free(value); mir_free(desc); } mir_free(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(file); return 1; //skin folder relative } 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(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) { mir_free(sd->szValue); sd->szValue = mir_strdup(b); } } } mir_free(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) db_set_s(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); db_set_b(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_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; i < SIZEOF(TYPES); i++) SendDlgItemMessage(hwndDlg,IDC_TYPE,CB_ADDSTRING,0,(LPARAM)TranslateTS(TYPES[i])); } { //Fill fit combo int i=0; for (i=0; i < SIZEOF(FITMODES); i++) SendDlgItemMessage(hwndDlg,IDC_FIT,CB_ADDSTRING,0,(LPARAM)TranslateTS(FITMODES[i])); } //SPIN Ranges { SendDlgItemMessage(hwndDlg,IDC_SPIN_ALPHA,UDM_SETRANGE,0,MAKELONG(255,0)); SendDlgItemMessage(hwndDlg,IDC_SPIN_ALPHA,UDM_SETPOS,0,MAKELONG(255,0)); SendDlgItemMessage(hwndDlg,IDC_SPIN_TOP,UDM_SETRANGE,0,MAKELONG(900,0)); SendDlgItemMessage(hwndDlg,IDC_SPIN_LEFT,UDM_SETRANGE,0,MAKELONG(900,0)); SendDlgItemMessage(hwndDlg,IDC_SPIN_BOTTOM,UDM_SETRANGE,0,MAKELONG(900,0)); SendDlgItemMessage(hwndDlg,IDC_SPIN_RIGHT,UDM_SETRANGE,0,MAKELONG(900,0)); SendDlgItemMessage(hwndDlg,IDC_SPIN_POSLEFT,UDM_SETRANGE,0,MAKELONG(1000,0)); SendDlgItemMessage(hwndDlg,IDC_SPIN_POSTOP,UDM_SETRANGE,0,MAKELONG(1000,0)); SendDlgItemMessage(hwndDlg,IDC_SPIN_WIDTH,UDM_SETRANGE,0,MAKELONG(1000,0)); SendDlgItemMessage(hwndDlg,IDC_SPIN_HEIGHT,UDM_SETRANGE,0,MAKELONG(1000,0)); } 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); EnableWindow(GetDlgItem(hwndDlg,IDC_PASTE),FALSE); EnableWindow(GetDlgItem(hwndDlg,IDC_COPY),FALSE); glSkinWasModified = 0; glOtherSkinWasLoaded = FALSE; break; case WM_COMMAND: { if (LOWORD(wParam) == IDC_TYPE) { if (HIWORD(wParam) == CBN_SELCHANGE) { int i = SendDlgItemMessage(hwndDlg,IDC_TYPE,CB_GETCURSEL,(WPARAM)0,(LPARAM)0); //if (IsWindowEnabled(GetDlgItem(hwndDlg,IDC_TYPE))) SetAppropriateGroups(hwndDlg,i); if (GetFocus() == GetDlgItem(hwndDlg,IDC_TYPE)) SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); UpdateInfo(hwndDlg); break; } } else if (LOWORD(wParam) == IDC_COPY) { if (HIWORD(wParam) == BN_CLICKED) { mir_free_and_nil(object_clipboard); OPT_OBJECT_DATA *sd = NULL; HTREEITEM hti = TreeView_GetSelection(GetDlgItem(hwndDlg,IDC_OBJECT_TREE)); if (hti != 0) { TVITEM 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 && sd->szValue) 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 = "*.*"; res = GetOpenFileNameA(&ofn); 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(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) { mir_free_and_nil(dataOld->szName); mir_free_and_nil(dataOld->szPath); mir_free_and_nil(dataOld->szTempValue); mir_free_and_nil(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; } case WM_DESTROY: mir_free(object_clipboard); 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 || GetWindowLongPtr(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 || GetWindowLongPtr(hwnd,GWL_STYLE)&WS_GROUP) exit = TRUE; } while (!exit); return 0; }