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; }
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; }
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; }
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; }