Exemplo n.º 1
0
Node* CGroupsUI::AddNode(const GroupsListItemInfo& item, Node* parent)
{
	if (!parent)
		parent = root_node_;

	TCHAR szBuf[MAX_PATH] = {0};

    CListContainerElementUI* pListElement = NULL;
    if( !m_dlgBuilder.GetMarkup()->IsValid() ) {
        pListElement = static_cast<CListContainerElementUI*>(m_dlgBuilder.Create(_T("group_list_item.xml"), (UINT)0, NULL, &paint_manager_));
    }
    else {
        pListElement = static_cast<CListContainerElementUI*>(m_dlgBuilder.Create((UINT)0, &paint_manager_));
    }
    if (pListElement == NULL)
        return NULL;

	Node* node = new Node;

	node->data().level_ = parent->data().level_ + 1;
	if (item.folder)
		node->data().has_child_ = !item.empty;
	else
		node->data().has_child_ = false;

	node->data().folder_ = item.folder;

	node->data().child_visible_ = (node->data().level_ == 0);

	node->data().text_ = item.nick_name;
	node->data().list_elment_ = pListElement;

	if (!parent->data().child_visible_)
		pListElement->SetVisible(false);

	if (parent != root_node_ && !parent->data().list_elment_->IsVisible())
		pListElement->SetVisible(false);

	CRect rcPadding = text_padding_;
	for (int i = 0; i < node->data().level_; ++i)
	{
		rcPadding.left += level_text_start_pos_;		
	}
	pListElement->SetPadding(rcPadding);

	CButtonUI* log_button = static_cast<CButtonUI*>(paint_manager_.FindSubControlByName(pListElement, kLogoButtonControlName));
	if (log_button != NULL)
	{
		if (!item.folder && !item.logo.empty())
		{
#if defined(UNDER_WINCE)
			_stprintf(szBuf, _T("%s"), item.logo.c_str());
#else
			_stprintf_s(szBuf, MAX_PATH - 1, _T("%s"), item.logo.c_str());
#endif
			log_button->SetNormalImage(szBuf);
		}
		else
		{
			CContainerUI* logo_container = static_cast<CContainerUI*>(paint_manager_.FindSubControlByName(pListElement, kLogoContainerControlName));
			if (logo_container != NULL)
				logo_container->SetVisible(false);
		}
        log_button->SetTag((UINT_PTR)pListElement);
        log_button->OnEvent += MakeDelegate(&OnLogoButtonEvent);
	}

	tString html_text;
	if (node->data().has_child_)
	{
		if (node->data().child_visible_)
			html_text += level_expand_image_;
		else
			html_text += level_collapse_image_;

#if defined(UNDER_WINCE)
		_stprintf(szBuf, _T("<x %d>"), level_text_start_pos_);
#else
		_stprintf_s(szBuf, MAX_PATH - 1, _T("<x %d>"), level_text_start_pos_);
#endif
		html_text += szBuf;
	}

	if (item.folder)
	{
		html_text += node->data().text_;
	}
	else
	{
#if defined(UNDER_WINCE)
		_stprintf(szBuf, _T("%s"), item.nick_name.c_str());
#else
		_stprintf_s(szBuf, MAX_PATH - 1, _T("%s"), item.nick_name.c_str());
#endif
		html_text += szBuf;
	}

	CLabelUI* nick_name = static_cast<CLabelUI*>(paint_manager_.FindSubControlByName(pListElement, kNickNameControlName));
	if (nick_name != NULL)
	{
		if (item.folder)
			nick_name->SetFixedWidth(0);

		nick_name->SetShowHtml(true);
		nick_name->SetText(html_text.c_str());
	}

	if (!item.folder && !item.description.empty())
	{
		CLabelUI* description = static_cast<CLabelUI*>(paint_manager_.FindSubControlByName(pListElement, kDescriptionControlName));
		if (description != NULL)
		{
#if defined(UNDER_WINCE)
			_stprintf(szBuf, _T("<x 20><c #808080>%s</c>"), item.description.c_str());
#else
			_stprintf_s(szBuf, MAX_PATH - 1, _T("<x 20><c #808080>%s</c>"), item.description.c_str());
#endif
			description->SetShowHtml(true);
			description->SetText(szBuf);
		}
	}

	pListElement->SetFixedHeight(kGroupListItemNormalHeight);
	pListElement->SetTag((UINT_PTR)node);
	int index = 0;
	if (parent->has_children())
	{
		Node* prev = parent->get_last_child();
		index = prev->data().list_elment_->GetIndex() + 1;
	}
	else 
	{
		if (parent == root_node_)
			index = 0;
		else
			index = parent->data().list_elment_->GetIndex() + 1;
	}
	if (!CListUI::AddAt(pListElement, index))
	{
		delete pListElement;
		delete node;
		node = NULL;
	}

	parent->add_child(node);
	return node;
}
Exemplo n.º 2
0
void CProjectInfoPage::AddListItem(int nFromIndex, int nCount)
{
	for (int i=nFromIndex; i<nCount+nFromIndex; i++)
	{
		CDialogBuilder DlgBuilder;
		CListContainerElementUI *plstItem = NULL;
		if (!DlgBuilder.GetMarkup()->IsValid())
		{
			plstItem = static_cast<CListContainerElementUI*>(DlgBuilder.Create(_T("project_list_item.xml"),
				(UINT)0, NULL, m_PaintManager));
		}
		else
		{
			plstItem = static_cast<CListContainerElementUI*>(DlgBuilder.Create((UINT)0, m_PaintManager));
		}
		if (plstItem == NULL)
			return ;
		else
		{
			sProjectItem& oneProj = m_vecProjects[i];
			sProjectItem* pNewData = new sProjectItem;
			pNewData->strCreateTime = oneProj.strCreateTime;
			pNewData->strDestOrgID = oneProj.strDestOrgID;
			pNewData->strDestOrgName = oneProj.strDestOrgName;
			pNewData->strProjID = oneProj.strProjID;
			pNewData->strProjName = oneProj.strProjName;
			pNewData->strRoomID = oneProj.strRoomID;
			pNewData->vecDestParticipants = oneProj.vecDestParticipants;

			CLabelUI *pLabelProjName = static_cast<CLabelUI *>(m_PaintManager->FindSubControlByName(plstItem, _T("lable_project_name")));
			if (pLabelProjName != NULL)
			{
				pLabelProjName->SetText(oneProj.strProjName.c_str());
			}

			tstring strShowDest;
			//判断是个人还是机构。
			if (oneProj.strDestOrgID.empty() 
				&& oneProj.strDestOrgName.empty()
				&& oneProj.vecDestParticipants.size()>0)
			{
				tstring strAccount = oneProj.vecDestParticipants[0];
				strAccount += MMPC_ACCOUNT;
			

				//策略修改:取消了用户的备注名
				sUserVCard oneUser;
				if (GetDBTaskModule()->LoadUserVCard(strAccount,  oneUser))
				{
					strShowDest = oneUser.strUserNickname.c_str();
				}
				sUserVCard oneNewVCard;
				if(CController::Instance()->GetUserInfoMgr()->GetUserVCard(strAccount, oneNewVCard))
				{
					strShowDest = oneNewVCard.strUserNickname;
				}

				if (strShowDest.empty())
				{
					strShowDest = oneProj.vecDestParticipants[0];
				}
				
			}
			else
			{
				strShowDest = oneProj.strDestOrgName;
			}

			CLabelUI *pLabelOrgName = static_cast<CLabelUI *>(m_PaintManager->FindSubControlByName(plstItem, _T("label_orgnization_name")));
			if (pLabelOrgName != NULL)
			{
				pLabelOrgName->SetText(strShowDest.c_str());
			}

			CLabelUI *pLabelTime = static_cast<CLabelUI *>(m_PaintManager->FindSubControlByName(plstItem, _T("label_project_time")));
			if (pLabelTime != NULL)
			{
				pLabelTime->SetText(oneProj.strCreateTime.c_str());
			}

			//用roomID来标识唯一的Item
			plstItem->SetTag((UINT_PTR)pNewData);

			plstItem->SetFixedHeight(50);
			if (!m_pListProjs->Add(plstItem))
			{
				delete plstItem;
			}
		}
	}
}
Exemplo n.º 3
0
Node* CGroupsTreelistUI::AddNode(const GroupsListItemInfo& item, Node* parent)
{
	if (!parent)
		parent = root_node_;

	TCHAR szBuf[MAX_PATH] = {0};

    CListContainerElementUI* pListElement = NULL;
	if (!UIIMList::m_dlgBuilder.GetMarkup()->IsValid()) {
		pListElement = static_cast<CListContainerElementUI*>(UIIMList::m_dlgBuilder.Create(kXMLFilePath, (UINT)0, NULL, &paint_manager_));
    }
    else {
		pListElement = static_cast<CListContainerElementUI*>(UIIMList::m_dlgBuilder.Create((UINT)0, &paint_manager_));
    }
    if (pListElement == NULL)
        return NULL;

	Node* node = new Node;
	node->data().level_ = parent->data().level_ + 1;
	if (item.folder)
		node->data().has_child_ = !item.empty;
	else
		node->data().has_child_ = false;

	node->data().folder_ = item.folder;

	node->data().child_visible_ = (node->data().level_ == 0);
	node->data().child_visible_ = false;
	node->data().sId = item.id;
	node->data().text_ = item.nickName;
	node->data().list_elment_ = pListElement;

	if (!parent->data().child_visible_)
		pListElement->SetVisible(false);

	if (parent != UIIMList::root_node_ && !parent->data().list_elment_->IsVisible())
		pListElement->SetVisible(false);

	CDuiRect rcPadding = UIIMList::text_padding_;
	for (int i = 0; i < node->data().level_; ++i)
	{
		rcPadding.left += UIIMList::level_text_start_pos_;
	}
	pListElement->SetPadding(rcPadding);

	CButtonUI* log_button = static_cast<CButtonUI*>(UIIMList::paint_manager_.FindSubControlByName(pListElement, kLogoButtonControlName));
	if (log_button != NULL)
	{
		if (!item.folder && !item.avatarPath.IsEmpty())
		{
			_stprintf_s(szBuf, MAX_PATH - 1, _T("%s"), item.avatarPath);
			log_button->SetNormalImage(szBuf);
		}
		else
		{
			CContainerUI* logo_container = static_cast<CContainerUI*>(paint_manager_.FindSubControlByName(pListElement, kLogoContainerControlName));
			if (logo_container != NULL)
				logo_container->SetVisible(false);
		}
        log_button->SetTag((UINT_PTR)pListElement);
        log_button->OnEvent += MakeDelegate(&OnButtonEvent);
	}

	CDuiString html_text;
	if (node->data().has_child_)
	{
		if (node->data().child_visible_)
			html_text += UIIMList::level_expand_image_;
		else
			html_text += UIIMList::level_collapse_image_;

		_stprintf_s(szBuf, MAX_PATH - 1, _T("<x %d>"), level_text_start_pos_);

		html_text += szBuf;
	}

	if (item.folder)
	{
		html_text += node->data().text_;
	}
	else
	{
		_stprintf_s(szBuf, MAX_PATH - 1, _T("%s"), item.nickName);

		html_text += szBuf;
	}

	CLabelUI* nick_name = static_cast<CLabelUI*>(UIIMList::paint_manager_.FindSubControlByName(pListElement, kNickNameControlName));
	if (nick_name != NULL)
	{
		if (item.folder)
			nick_name->SetFixedWidth(0);

		nick_name->SetShowHtml(true);
		nick_name->SetText(html_text);
	}

	if (item.folder && item.id == MY_DISCUSSGROUP_ITEMID)
	{
		CButtonUI* btnCreatGroup = static_cast<CButtonUI*>(UIIMList::paint_manager_.FindSubControlByName(pListElement, kcreatGroupControlName));
		if (btnCreatGroup != NULL)
		{
			btnCreatGroup->SetVisible(true);
			btnCreatGroup->SetTag((UINT_PTR)pListElement);
			btnCreatGroup->OnEvent += MakeDelegate(&OnButtonEvent);
		}
	}

	if (!item.folder && !item.description.IsEmpty())
	{
		CLabelUI* description = static_cast<CLabelUI*>(UIIMList::paint_manager_.FindSubControlByName(pListElement, kDescriptionControlName));
		if (description != NULL)
		{
			_stprintf_s(szBuf, MAX_PATH - 1, _T("<x 10><c #808080>%s</c>"), item.description);

			description->SetShowHtml(true);
			description->SetText(szBuf);
		}
	}

	if (item.folder)
	{
		pListElement->SetFixedHeight(kGroupListFolderItemHeight);
	}
	else
		pListElement->SetFixedHeight(kGroupListNormalItemHeight);

	pListElement->SetTag((UINT_PTR)node);
	int index = 0;
	if (parent->has_children())
	{
		Node* prev = parent->get_last_child();
		index = prev->data().list_elment_->GetIndex() + 1;
	}
	else 
	{
		if (parent == UIIMList::root_node_)
			index = 0;
		else
			index = parent->data().list_elment_->GetIndex() + 1;
	}
	if (!CListUI::AddAt(pListElement, index))
	{
		delete pListElement;
		delete node;
		node = NULL;
	}

	parent->add_child(node);

	return node;
}
Exemplo n.º 4
0
Node* CGroupsUI::AddNode(const FriendListItemInfo& item, Node* parent)
{
	if (!parent)
		parent = root_node_;

	TCHAR szBuf[MAX_PATH] = {0};

    CListContainerElementUI* pListElement = NULL;
    if( !m_dlgBuilder.GetMarkup()->IsValid() ) 
	{
		if (uiType == eUI_Group)
		{
			pListElement = static_cast<CListContainerElementUI*>(m_dlgBuilder.Create(_T("item_group_list.xml"), (UINT)0, NULL, &paint_manager_));
			kGroupListItemNormalHeight = 26;
			kGroupListItemSelectedHeight = 44;
		}
		else if (uiType == eUI_Member)
		{
			pListElement = static_cast<CListContainerElementUI*>(m_dlgBuilder.Create(_T("item_member_list.xml"), (UINT)0, NULL, &paint_manager_));
			kGroupListItemNormalHeight = 26;
			kGroupListItemSelectedHeight = 44;
		}
		else if (uiType == eUI_Recent)
		{
			pListElement = static_cast<CListContainerElementUI*>(m_dlgBuilder.Create(_T("item_recent_list.xml"), (UINT)0, NULL, &paint_manager_));
			kGroupListItemNormalHeight = 56;
			kGroupListItemSelectedHeight = 56;
		}
    }
    else 
	{
        pListElement = static_cast<CListContainerElementUI*>(m_dlgBuilder.Create((UINT)0, &paint_manager_));
    }
    if (pListElement == NULL)
        return NULL;

	Node* node = new Node;

	node->data().level_ = parent->data().level_ + 1;
	if (item.folder)
		node->data().has_child_ = !item.empty;
	else
		node->data().has_child_ = false;

	node->data().folder_ = item.folder;
	node->data().child_visible_ = (node->data().level_ == 0);

	node->data().nodetype = item.nodetype;
	node->data().type = item.type;
	node->data().rusertype = item.rusertype;
	node->data().text_ = item.showname;
	node->data().value = item.id;
	node->data().id = item.id;
	node->data().numid = item.numid;
	node->data().Parentid = item.Parentid;
	node->data().nickname = item.nick_name;
	node->data().list_elment_ = pListElement;

	//IM2.0
	node->data().Lastword = item.Lastword;
	node->data().GoodAt = item.GoodAt;
	node->data().lastwordtime = item.lastwordtime;
	node->data().isvip = item.isvip;
	node->data().hasright = item.hasright;
	node->data().totlenum = item.totlenum;
	node->data().onlinenum = item.onlinenum;

	if (!parent->data().child_visible_)
		pListElement->SetVisible(false);

	if (parent != root_node_ && !parent->data().list_elment_->IsVisible())
		pListElement->SetVisible(false);

	CDuiRect rcPadding = text_padding_;
	for (int i = 0; i < node->data().level_; ++i)
	{
		rcPadding.left += level_text_start_pos_;		
	}
	pListElement->SetPadding(rcPadding);

	CButtonUI* log_button = static_cast<CButtonUI*>(paint_manager_.FindSubControlByName(pListElement, kLogoButtonControlName));
	if (log_button != NULL)
	{
		if (!item.folder && !item.logo.IsEmpty())
		{
			_stprintf_s(szBuf, MAX_PATH - 1, _T("%s"), item.logo);
			log_button->SetNormalImage(szBuf);
		}
		else
		{
			CContainerUI* logo_container = static_cast<CContainerUI*>(paint_manager_.FindSubControlByName(pListElement, kLogoContainerControlName));
			if (logo_container != NULL)
				logo_container->SetVisible(false);
		}
        log_button->SetTag((UINT_PTR)pListElement);
        log_button->OnEvent += MakeDelegate(&OnLogoButtonEvent);
	}

	CDuiString html_text;
	if (node->data().has_child_)
	{
		if (node->data().child_visible_)
			html_text += level_expand_image_;
		else
			html_text += level_collapse_image_;

		_stprintf_s(szBuf, MAX_PATH - 1, _T("<x %d>"), level_text_start_pos_);
		html_text += szBuf;
	}

	if (item.folder)
	{
		html_text += node->data().text_;
	}
	else
	{
		_stprintf_s(szBuf, MAX_PATH - 1, _T("%s"), node->data().text_);
		html_text += szBuf;
	}

	CLabelUI* nick_name = static_cast<CLabelUI*>(paint_manager_.FindSubControlByName(pListElement, kNickNameControlName));
	if (nick_name != NULL)
	{
		if (item.folder)
			nick_name->SetFixedWidth(0);

		nick_name->SetShowHtml(true);
		nick_name->SetText(html_text);
	}

	//////////////////////////////////////////////////////////////////////////
	//IM2.0
	CLabelUI* l_time = static_cast<CLabelUI*>(paint_manager_.FindSubControlByName(pListElement, kTimeControlName));
	if (l_time != NULL)
	{
		CDuiString lastwordtime = _T("");
		long time = item.lastwordtime ; 
		CTime tempTime(time) ; 
		CTime curTime = CTime::GetCurrentTime() ; 

		// 昨天 
		if( ( curTime.GetYear() == tempTime.GetYear() && curTime.GetMonth() == tempTime.GetMonth() ) && ( curTime.GetDay() == tempTime.GetDay() + 1 ) )
		{
			l_time->SetText(_T("昨天")) ; 
		}
		else if( ( curTime.GetYear() == tempTime.GetYear() && curTime.GetMonth() == tempTime.GetMonth() ) && ( curTime.GetDay() == tempTime.GetDay() + 2 ) ) 
		{
			l_time->SetText(_T("前天")) ;
		}
		else if( ( curTime.GetYear() == tempTime.GetYear() && curTime.GetMonth() == tempTime.GetMonth() ) && ( curTime.GetDay() == tempTime.GetDay()) )
		{
			// 当天 
			CString strText = _T(" ") ;
			strText.Format("%d:%d" ,tempTime.GetHour(),tempTime.GetMinute()) ; 
			l_time->SetText(strText.GetBuffer()) ;
		}
		else 
		{
			CString strText = _T(" ") ;
			strText.Format("%d-%d" ,tempTime.GetMonth(),tempTime.GetDay()) ; 
			l_time->SetText(strText.GetBuffer()) ;
		}
		//lastwordtime.Format("%02d:%02d", item.lastwordtime/100, item.lastwordtime%100);
		//l_time->SetText(lastwordtime);
	}
	CLabelUI* l_lastword = static_cast<CLabelUI*>(paint_manager_.FindSubControlByName(pListElement, kLastWordControlName));
	if (l_lastword != NULL)
		l_lastword->SetText(item.Lastword);
	//////////////////////////////////////////////////////////////////////////

	if (!item.folder && !item.description.IsEmpty())
	{
		CLabelUI* description = static_cast<CLabelUI*>(paint_manager_.FindSubControlByName(pListElement, kDescriptionControlName));
		if (description != NULL)
		{
			_stprintf_s(szBuf, MAX_PATH - 1, _T("<x 8><c #808080>%s</c>"), item.description);
			description->SetShowHtml(true);
			description->SetText(szBuf);
		}
	}

	pListElement->SetFixedHeight(kGroupListItemNormalHeight);
	pListElement->SetTag((UINT_PTR)node);
	int index = 0;
	if (parent->has_children())
	{
		Node* prev = parent->get_last_child();
		index = prev->data().list_elment_->GetIndex() + 1;
	}
	else 
	{
		if (parent == root_node_)
			index = 0;
		else
			index = parent->data().list_elment_->GetIndex() + 1;
	}
	if (!CListUI::AddAt(pListElement, index))
	{
		delete pListElement;
		delete node;
		node = NULL;
	}

	parent->add_child(node);

	CString strID = item.id.GetData();
	allNodeInfo[strID] = node;
	return node;
}
Exemplo n.º 5
0
	void DuiLib::CRecentCallContactUI::AddItem( recentCallContactItem *item, int indx/*=-1*/ )
	{
		CListContainerElementUI *pListElement = NULL;
		if (!m_DlgBuilder.GetMarkup()->IsValid())
		{
			pListElement = static_cast<CListContainerElementUI*>(m_DlgBuilder.Create(_T("Call\\recent_call_contacts_list_item.xml"),
				(UINT)0, NULL, m_pPaintManager));
		}
		else
		{
			pListElement = static_cast<CListContainerElementUI*>(m_DlgBuilder.Create((UINT)0, m_pPaintManager));
		}
		if (pListElement == NULL)
			return;

		CControlUI* pBtnLogo = static_cast<CControlUI*>(m_pPaintManager->FindSubControlByName(pListElement, kLogoControl));
		if (pBtnLogo != NULL)
		{			
			pBtnLogo->SetBkImage(item->m_strLogo);			
		}

		CLabelUI *pLblNickName = static_cast<CLabelUI*>(m_pPaintManager->FindSubControlByName(pListElement, kNickNameLabel));
		if (pLblNickName != NULL)
		{			
			pLblNickName->SetText(item->m_strNickName);
		}

		CLabelUI *pOrgNameLabel = static_cast<CLabelUI*>(m_pPaintManager->FindSubControlByName(pListElement, kOrgNameLabel));
		if (pOrgNameLabel != NULL)
		{			
			pOrgNameLabel->SetText(item->m_strOrgName);
		}

		CControlUI *pDialIndicate = static_cast<CControlUI*>(m_pPaintManager->FindSubControlByName(pListElement, "dialIndicateLogo"));
		if (pDialIndicate != NULL)
		{			
			CDuiString strImg;
			strImg.Format("Call\\call%d.png", item->dialIndicate);
			pDialIndicate->SetBkImage(strImg);
		}
			

		pListElement->SetTag(item->nItemID);
		pListElement->SetFixedHeight(kContactListItemNormalHeight);

		CButtonUI* pBtnVoiceCall= static_cast<CButtonUI*>(m_pPaintManager->FindSubControlByName(pListElement, kVoiceCallBtnName));
		CButtonUI* pBtnVedioCall= static_cast<CButtonUI*>(m_pPaintManager->FindSubControlByName(pListElement, kVedioCallBtnName));
		if (NULL != pBtnVoiceCall)  pBtnVoiceCall->SetTag(item->nItemID);
		if (NULL != pBtnVedioCall)  pBtnVedioCall->SetTag(item->nItemID);


		if (-1 == indx)
		{
			if (!CListUI::Add(pListElement))
			{
				delete pListElement;
			}
		}
		else if(indx >= 0)
		{
			if (!CListUI::AddAt(pListElement,indx))
			{
				delete pListElement;
			}
		}		

	}
Exemplo n.º 6
0
Node* CUIRecentSessionList::AddNode(const SessionListItemInfo& item, Node* parent /*= NULL*/, int index /*= 0*/)
{
	if (!parent)
		parent = root_node_;

	TCHAR szBuf[MAX_PATH] = { 0 };

	CListContainerElementUI* pListElement = NULL;
	if (!m_dlgBuilder.GetMarkup()->IsValid()) {
		pListElement = static_cast<CListContainerElementUI*>(m_dlgBuilder.Create(_T("MainDialog\\recentlyListItem.xml"), (UINT)0, NULL, &paint_manager_));
	}
	else {
		pListElement = static_cast<CListContainerElementUI*>(m_dlgBuilder.Create((UINT)0, &paint_manager_));
	}
	if (pListElement == NULL)
		return NULL;

	Node* node = new Node;

	node->data().level_ = parent->data().level_ + 1;
	if (item.folder)
		node->data().has_child_ = !item.empty;
	else
		node->data().has_child_ = false;

	node->data().folder_ = item.folder;
	node->data().child_visible_ = (node->data().level_ == 0);
	node->data().sId = item.id;
	node->data().text_ = item.nickName;
	node->data().list_elment_ = pListElement;

	if (!parent->data().child_visible_)
		pListElement->SetVisible(false);

	if (parent != root_node_ && !parent->data().list_elment_->IsVisible())
		pListElement->SetVisible(false);

	CDuiRect rcPadding = text_padding_;
	for (int i = 0; i < node->data().level_; ++i)
	{
		rcPadding.left += level_text_start_pos_;
	}
	pListElement->SetPadding(rcPadding);

	CControlUI* log_button = static_cast<CControlUI*>(paint_manager_.FindSubControlByName(pListElement, kLogoButtonControlName));
	if (log_button != NULL)
	{
		if (!item.folder && !item.avatarPath.IsEmpty())
		{
			_stprintf_s(szBuf, MAX_PATH - 1, _T("%s"), item.avatarPath);
			log_button->SetBkImage(szBuf);
		}
		else
		{
			CContainerUI* logo_container = static_cast<CContainerUI*>(paint_manager_.FindSubControlByName(pListElement, kLogoContainerControlName));
			if (logo_container != NULL)
				logo_container->SetVisible(false);
		}
		log_button->SetTag((UINT_PTR)pListElement);
		//log_button->OnEvent += MakeDelegate(&OnLogoButtonEvent);//右键替代了该功能,不用绑定
	}

	CDuiString html_text;
	if (node->data().has_child_)
	{
		if (node->data().child_visible_)
			html_text += level_expand_image_;
		else
			html_text += level_collapse_image_;

		_stprintf_s(szBuf, MAX_PATH - 1, _T("<x %d>"), level_text_start_pos_);
		html_text += szBuf;
	}

	if (item.folder)
	{
		html_text += node->data().text_;
	}
	else
	{
		_stprintf_s(szBuf, MAX_PATH - 1, _T("%s"), item.nickName);
		html_text += szBuf;
	}

	CLabelUI* nick_name = static_cast<CLabelUI*>(paint_manager_.FindSubControlByName(pListElement, kNickNameControlName));
	if (nick_name != NULL)
	{
		if (item.folder)
			nick_name->SetFixedWidth(0);

		nick_name->SetShowHtml(true);
		nick_name->SetText(html_text);
	}

	CLabelUI* lastTime = static_cast<CLabelUI*>(paint_manager_.FindSubControlByName(pListElement, lastContentTimeControlName));
	if (lastTime != NULL)
	{
		lastTime->SetShowHtml(true);
		CString strTime = module::getMiscModule()->makeShortTimeDescription(item.Time);//timeData.Format(_T("-%Y%m%d-%H-%M-%S-"));
		lastTime->SetText(strTime);
	}

	CLabelUI* plastMsgUI = static_cast<CLabelUI*>(paint_manager_.FindSubControlByName(pListElement, klastmsgControlName));
	if (plastMsgUI)
	{
		CString strContent = item.description;
		ReceiveMsgManage::getInstance()->parseContent(strContent, TRUE, 400);//需要转换成本地的格式
		plastMsgUI->SetText(strContent);
	}

	pListElement->SetFixedHeight(kIMListItemNormalHeight);
	pListElement->SetTag((UINT_PTR)node);
	pListElement->SetUserData(item.id);
	if (0 == index)
	{
		if (parent->has_children())
		{
			Node* prev = parent->get_last_child();
			index = prev->data().list_elment_->GetIndex() + 1;
		}
		else
		{
			if (parent == root_node_)
				index = 0;
			else
				index = parent->data().list_elment_->GetIndex() + 1;
		}
	}

	if (!CListUI::AddAt(pListElement, index))
	{
		delete pListElement;
		delete node;
		node = NULL;
	}

	parent->add_child(node);
	return node;
}