Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
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);
}