void LoadCLCFonts(HWND hwnd, ClcData *dat) { RegisterCLUIFonts(); HDC hdc = GetDC(hwnd); HFONT holdfont = (HFONT)GetCurrentObject(hdc, OBJ_FONT); for (int i = 0; i <= FONTID_MODERN_MAX; i++) { if (!dat->fontModernInfo[i].changed && dat->fontModernInfo[i].hFont) { DeleteObject(dat->fontModernInfo[i].hFont); } LOGFONT lf; // Issue 40: Do not reload font colors for embedded clists // Parent window is responsible to re-set fonts colors if needed GetFontSetting(i, &lf, dat->force_in_dialog ? NULL : &dat->fontModernInfo[i].colour, &dat->fontModernInfo[i].effect, &dat->fontModernInfo[i].effectColour1, &dat->fontModernInfo[i].effectColour2); dat->fontModernInfo[i].hFont = CreateFontIndirect(&lf); dat->fontModernInfo[i].changed = 0; SelectObject(hdc, dat->fontModernInfo[i].hFont); SIZE fontSize; GetTextExtentPoint32A(hdc, "x", 1, &fontSize); dat->fontModernInfo[i].fontHeight = fontSize.cy; } SelectObject(hdc, holdfont); ReleaseDC(hwnd, hdc); }
void LoadClcOptions(HWND hwnd,struct ClcData *dat) { int i; // dat->rowHeight=DBGetContactSettingByte(NULL,"CLC","RowHeight",CLCDEFAULT_ROWHEIGHT); { LOGFONTA lf; HFONT holdfont; SIZE fontSize; HDC hdc=GetDC(hwnd); for(i=0;i<=FONTID_MAX;i++) { if(!dat->fontInfo[i].changed) DeleteObject(dat->fontInfo[i].hFont); GetFontSetting(i,&lf,&dat->fontInfo[i].colour); { LONG height; HDC hdc=GetDC(NULL); height=lf.lfHeight; lf.lfHeight=-MulDiv(lf.lfHeight, GetDeviceCaps(hdc, LOGPIXELSY), 72); ReleaseDC(NULL,hdc); dat->fontInfo[i].hFont=CreateFontIndirectA(&lf); lf.lfHeight=height; } dat->fontInfo[i].changed=0; holdfont=SelectObject(hdc,dat->fontInfo[i].hFont); GetTextExtentPoint32A(hdc,"x",1,&fontSize); dat->fontInfo[i].fontHeight=fontSize.cy; // if(fontSize.cy>dat->rowHeight && (!DBGetContactSettingByte(NULL,"CLC","DoNotCheckFontSize",0))) dat->rowHeight=fontSize.cy; if(holdfont) SelectObject(hdc,holdfont); } ReleaseDC(hwnd,hdc); } // Row dat->row_min_heigh = DBGetContactSettingWord(NULL,"CList","MinRowHeight",CLCDEFAULT_ROWHEIGHT); dat->row_border = DBGetContactSettingWord(NULL,"CList","RowBorder",2); dat->row_variable_height = DBGetContactSettingByte(NULL,"CList","VariableRowHeight",1); dat->row_align_left_items_to_left = DBGetContactSettingByte(NULL,"CList","AlignLeftItemsToLeft",1); dat->row_hide_group_icon = DBGetContactSettingByte(NULL,"CList","HideGroupsIcon",0); dat->row_align_right_items_to_right = DBGetContactSettingByte(NULL,"CList","AlignRightItemsToRight",1); //TODO: Add to settings dat->row_align_group_mode=DBGetContactSettingByte(NULL,"CList","AlignGroupCaptions",0); for (i = 0 ; i < NUM_ITEM_TYPE ; i++) { char tmp[128]; mir_snprintf(tmp, sizeof(tmp), "RowPos%d", i); dat->row_items[i] = DBGetContactSettingWord(NULL, "CList", tmp, i); } // Avatar if (hwndContactTree == hwnd || hwndContactTree==NULL) { dat->avatars_show = DBGetContactSettingByte(NULL,"CList","AvatarsShow",0); dat->avatars_draw_border = DBGetContactSettingByte(NULL,"CList","AvatarsDrawBorders",0); dat->avatars_border_color = (COLORREF)DBGetContactSettingDword(NULL,"CList","AvatarsBorderColor",0); dat->avatars_round_corners = DBGetContactSettingByte(NULL,"CList","AvatarsRoundCorners",1); dat->avatars_use_custom_corner_size = DBGetContactSettingByte(NULL,"CList","AvatarsUseCustomCornerSize",0); dat->avatars_custom_corner_size = DBGetContactSettingWord(NULL,"CList","AvatarsCustomCornerSize",4); dat->avatars_ignore_size_for_row_height = DBGetContactSettingByte(NULL,"CList","AvatarsIgnoreSizeForRow",0); dat->avatars_draw_overlay = DBGetContactSettingByte(NULL,"CList","AvatarsDrawOverlay",0); dat->avatars_overlay_type = DBGetContactSettingByte(NULL,"CList","AvatarsOverlayType",SETTING_AVATAR_OVERLAY_TYPE_NORMAL); dat->avatars_size = DBGetContactSettingWord(NULL,"CList","AvatarsSize",30); } else { dat->avatars_show = 0; dat->avatars_draw_border = 0; dat->avatars_border_color = 0; dat->avatars_round_corners = 0; dat->avatars_use_custom_corner_size = 0; dat->avatars_custom_corner_size = 4; dat->avatars_ignore_size_for_row_height = 0; dat->avatars_draw_overlay = 0; dat->avatars_overlay_type = SETTING_AVATAR_OVERLAY_TYPE_NORMAL; dat->avatars_size = 30; } // Icon if (hwndContactTree == hwnd|| hwndContactTree==NULL) { dat->icon_hide_on_avatar = DBGetContactSettingByte(NULL,"CList","IconHideOnAvatar",0); dat->icon_draw_on_avatar_space = DBGetContactSettingByte(NULL,"CList","IconDrawOnAvatarSpace",0); dat->icon_ignore_size_for_row_height = DBGetContactSettingByte(NULL,"CList","IconIgnoreSizeForRownHeight",0); } else { dat->icon_hide_on_avatar = 0; dat->icon_draw_on_avatar_space = 0; dat->icon_ignore_size_for_row_height = 0; } // Contact time if (hwndContactTree == hwnd|| hwndContactTree==NULL) { dat->contact_time_show = DBGetContactSettingByte(NULL,"CList","ContactTimeShow",0); dat->contact_time_show_only_if_different = DBGetContactSettingByte(NULL,"CList","ContactTimeShowOnlyIfDifferent",1); } else { dat->contact_time_show = 0; dat->contact_time_show_only_if_different = 0; } { const time_t now = time(NULL); struct tm gmt = *gmtime(&now); time_t gmt_time; //gmt.tm_isdst = -1; gmt_time = mktime(&gmt); dat->local_gmt_diff = (int)difftime(now, gmt_time); gmt = *gmtime(&now); gmt.tm_isdst = -1; gmt_time = mktime(&gmt); dat->local_gmt_diff_dst = (int)difftime(now, gmt_time); } // Text dat->text_rtl = DBGetContactSettingByte(NULL,"CList","TextRTL",0); dat->text_align_right = DBGetContactSettingByte(NULL,"CList","TextAlignToRight",0); dat->text_replace_smileys = DBGetContactSettingByte(NULL,"CList","TextReplaceSmileys",1); dat->text_resize_smileys = DBGetContactSettingByte(NULL,"CList","TextResizeSmileys",1); dat->text_smiley_height = 0; dat->text_use_protocol_smileys = DBGetContactSettingByte(NULL,"CList","TextUseProtocolSmileys",1); if (hwndContactTree == hwnd|| hwndContactTree==NULL) { dat->text_ignore_size_for_row_height = DBGetContactSettingByte(NULL,"CList","TextIgnoreSizeForRownHeight",0); } else { dat->text_ignore_size_for_row_height = 0; } // First line dat->first_line_draw_smileys = DBGetContactSettingByte(NULL,"CList","FirstLineDrawSmileys",1); // Second line if (hwndContactTree == hwnd || hwndContactTree==NULL) { dat->second_line_show = DBGetContactSettingByte(NULL,"CList","SecondLineShow",1); dat->second_line_top_space = DBGetContactSettingWord(NULL,"CList","SecondLineTopSpace",2); dat->second_line_draw_smileys = DBGetContactSettingByte(NULL,"CList","SecondLineDrawSmileys",1); dat->second_line_type = DBGetContactSettingWord(NULL,"CList","SecondLineType",TEXT_STATUS_MESSAGE); { DBVARIANT dbv; if (!DBGetContactSettingTString(NULL, "CList","SecondLineText", &dbv)) { lstrcpyn(dat->second_line_text, dbv.ptszVal, SIZEOF(dat->second_line_text)-1); dat->second_line_text[SIZEOF(dat->second_line_text)-1] = '\0'; DBFreeVariant(&dbv); } else { dat->second_line_text[0] = '\0'; } } dat->second_line_xstatus_has_priority = DBGetContactSettingByte(NULL,"CList","SecondLineXStatusHasPriority",1); dat->second_line_show_status_if_no_away=DBGetContactSettingByte(NULL,"CList","SecondLineShowStatusIfNoAway",0); dat->second_line_use_name_and_message_for_xstatus = DBGetContactSettingByte(NULL,"CList","SecondLineUseNameAndMessageForXStatus",0); } else { dat->second_line_show = 0; dat->second_line_top_space = 0; dat->second_line_draw_smileys = 0; dat->second_line_type = TEXT_STATUS_MESSAGE; dat->second_line_text[0] = '\0'; dat->second_line_xstatus_has_priority = 1; dat->second_line_use_name_and_message_for_xstatus = 0; } // Third line if (hwndContactTree == hwnd || hwndContactTree==NULL) { dat->third_line_show = DBGetContactSettingByte(NULL,"CList","ThirdLineShow",0); dat->third_line_top_space = DBGetContactSettingWord(NULL,"CList","ThirdLineTopSpace",2); dat->third_line_draw_smileys = DBGetContactSettingByte(NULL,"CList","ThirdLineDrawSmileys",0); dat->third_line_type = DBGetContactSettingWord(NULL,"CList","ThirdLineType",TEXT_STATUS); { DBVARIANT dbv; if (!DBGetContactSettingTString(NULL, "CList","ThirdLineText", &dbv)) { lstrcpyn(dat->third_line_text, dbv.ptszVal, SIZEOF(dat->third_line_text)-1); dat->third_line_text[SIZEOF(dat->third_line_text)-1] = '\0'; DBFreeVariant(&dbv); } else { dat->third_line_text[0] = '\0'; } } dat->third_line_xstatus_has_priority = DBGetContactSettingByte(NULL,"CList","ThirdLineXStatusHasPriority",1); dat->third_line_show_status_if_no_away=DBGetContactSettingByte(NULL,"CList","ThirdLineShowStatusIfNoAway",0); dat->third_line_use_name_and_message_for_xstatus = DBGetContactSettingByte(NULL,"CList","ThirdLineUseNameAndMessageForXStatus",0); } else { dat->third_line_show = 0; dat->third_line_top_space = 0; dat->third_line_draw_smileys = 0; dat->third_line_type = TEXT_STATUS_MESSAGE; dat->third_line_text[0] = '\0'; dat->third_line_xstatus_has_priority = 1; dat->third_line_use_name_and_message_for_xstatus = 0; } dat->leftMargin=DBGetContactSettingByte(NULL,"CLC","LeftMargin",CLCDEFAULT_LEFTMARGIN); dat->rightMargin=DBGetContactSettingByte(NULL,"CLC","RightMargin",CLCDEFAULT_RIGHTMARGIN); dat->exStyle=DBGetContactSettingDword(NULL,"CLC","ExStyle",GetDefaultExStyle()); dat->scrollTime=DBGetContactSettingWord(NULL,"CLC","ScrollTime",CLCDEFAULT_SCROLLTIME); dat->force_in_dialog=0; dat->groupIndent=DBGetContactSettingByte(NULL,"CLC","GroupIndent",CLCDEFAULT_GROUPINDENT); dat->subIndent=DBGetContactSettingByte(NULL,"CLC","SubIndent",CLCDEFAULT_GROUPINDENT); dat->gammaCorrection=DBGetContactSettingByte(NULL,"CLC","GammaCorrect",CLCDEFAULT_GAMMACORRECT); dat->showIdle=DBGetContactSettingByte(NULL,"CLC","ShowIdle",CLCDEFAULT_SHOWIDLE); dat->noVScrollbar=DBGetContactSettingByte(NULL,"CLC","NoVScrollBar",0); SendMessage(hwnd,INTM_SCROLLBARCHANGED,0,0); //ShowScrollBar(hwnd,SB_VERT,dat->noVScrollbar==1 ? FALSE : TRUE); if(!dat->bkChanged) { DBVARIANT dbv; dat->bkColour=DBGetContactSettingDword(NULL,"CLC","BkColour",CLCDEFAULT_BKCOLOUR); if(dat->hBmpBackground) {DeleteObject(dat->hBmpBackground); dat->hBmpBackground=NULL;} if(DBGetContactSettingByte(NULL,"CLC","UseBitmap",CLCDEFAULT_USEBITMAP)) { if(!DBGetContactSetting(NULL,"CLC","BkBitmap",&dbv)) { dat->hBmpBackground=(HBITMAP)CallService(MS_UTILS_LOADBITMAP,0,(LPARAM)dbv.pszVal); mir_free(dbv.pszVal); DBFreeVariant(&dbv); } } dat->backgroundBmpUse=DBGetContactSettingWord(NULL,"CLC","BkBmpUse",CLCDEFAULT_BKBMPUSE); dat->MenuBkColor=DBGetContactSettingDword(NULL,"Menu","BkColour",CLCDEFAULT_BKCOLOUR); dat->MenuBkHiColor=DBGetContactSettingDword(NULL,"Menu","SelBkColour",CLCDEFAULT_SELBKCOLOUR); dat->MenuTextColor=DBGetContactSettingDword(NULL,"Menu","TextColour",CLCDEFAULT_TEXTCOLOUR); dat->MenuTextHiColor=DBGetContactSettingDword(NULL,"Menu","SelTextColour",CLCDEFAULT_SELTEXTCOLOUR); if (dat->hMenuBackground) {DeleteObject(dat->hMenuBackground); dat->hMenuBackground=NULL;} if(DBGetContactSettingByte(NULL,"Menu","UseBitmap",CLCDEFAULT_USEBITMAP)) { if(!DBGetContactSetting(NULL,"Menu","BkBitmap",&dbv)) { dat->hMenuBackground=(HBITMAP)CallService(MS_UTILS_LOADBITMAP,0,(LPARAM)dbv.pszVal); mir_free(dbv.pszVal); DBFreeVariant(&dbv); } } dat->MenuBmpUse=DBGetContactSettingWord(NULL,"Menu","BkBmpUse",CLCDEFAULT_BKBMPUSE); } dat->greyoutFlags=DBGetContactSettingDword(NULL,"CLC","GreyoutFlags",CLCDEFAULT_GREYOUTFLAGS); dat->offlineModes=DBGetContactSettingDword(NULL,"CLC","OfflineModes",CLCDEFAULT_OFFLINEMODES); dat->selBkColour=DBGetContactSettingDword(NULL,"CLC","SelBkColour",CLCDEFAULT_SELBKCOLOUR); dat->selTextColour=DBGetContactSettingDword(NULL,"CLC","SelTextColour",CLCDEFAULT_SELTEXTCOLOUR); dat->hotTextColour=DBGetContactSettingDword(NULL,"CLC","HotTextColour",CLCDEFAULT_HOTTEXTCOLOUR); dat->quickSearchColour=DBGetContactSettingDword(NULL,"CLC","QuickSearchColour",CLCDEFAULT_QUICKSEARCHCOLOUR); dat->IsMetaContactsEnabled= DBGetContactSettingByte(NULL,"MetaContacts","Enabled",1) && ServiceExists(MS_MC_GETDEFAULTCONTACT); { dat->MetaIgnoreEmptyExtra=DBGetContactSettingByte(NULL,"CLC","MetaIgnoreEmptyExtra",1); dat->expandMeta=DBGetContactSettingByte(NULL,"CLC","MetaExpanding",1); /* style=GetWindowLong(hwnd,GWL_STYLE); if (dat->MetaIgnoreEmptyExtra) style&=CLS_EX_MULTICOLUMNALIGNLEFT; else style&=!(CLS_EX_MULTICOLUMNALIGNLEFT) */ } { NMHDR hdr; hdr.code=CLN_OPTIONSCHANGED; hdr.hwndFrom=hwnd; hdr.idFrom=GetDlgCtrlID(hwnd); SendMessage(GetParent(hwnd),WM_NOTIFY,0,(LPARAM)&hdr); } SendMessage(hwnd,WM_SIZE,0,0); }