#pragma once #include struct IObjectAdapterCallback { virtual void OnClickCBItem(CString strCtrlName,int nIndex,CString strText) = 0; }; class CObjectAdapter : public SAdapterBase { public: struct SAdapterObject { SStringT strText; SStringT strData; DWORD dwData; SAdapterObject(){dwData=0 ;} }; private: SArray m_arrObject; IObjectAdapterCallback* m_pCBCallback; CString m_strCtrlName; public: CObjectAdapter(IObjectAdapterCallback* pCBCallback){ m_pCBCallback = pCBCallback; } ~CObjectAdapter(){} virtual int getCount() { return m_arrObject.GetCount(); } virtual void getView(int position, SWindow * pItem, pugi::xml_node xmlTemplate) { if (pItem->GetChildrenCount() == 0) pItem->InitFromXml(xmlTemplate); SWindow* pWnd = pItem->FindChildByID(1); SStringT strText = getItemText(position); pWnd->SetWindowText(strText); pItem->SetUserData(position); pItem->GetEventSet()->subscribeEvent(EventItemPanelClick::EventID, Subscriber(&CObjectAdapter::OnItemClick, this)); } bool OnItemClick(EventArgs *pEvt) { EventItemPanelClick* pEvt_ItemPanel = sobj_cast(pEvt); SASSERT(pEvt_ItemPanel); SWindow* pPanel = sobj_cast(pEvt_ItemPanel->sender); SOUI::CPoint pt(GET_X_LPARAM(pEvt_ItemPanel->lParam), GET_Y_LPARAM(pEvt_ItemPanel->lParam)); SWND swnd = pPanel->SwndFromPoint(pt, FALSE); SWindow *pClicked = NULL; if (swnd) { pClicked = SWindowMgr::GetWindow(swnd); } int nIndex = pPanel->GetUserData(); CString strText = getItemText(nIndex); m_pCBCallback->OnClickCBItem(m_strCtrlName,nIndex,strText); return true; } SStringT getItemDesc(int position) { SASSERT(position >= 0 && position < (int)m_arrObject.GetCount()); return m_arrObject[position].strText; } SStringT getItemText(int position) { SASSERT(position >= 0 && position < (int)m_arrObject.GetCount()); return m_arrObject[position].strText; } SStringT getItemStrData(int position) { SASSERT(position >= 0 && position < (int)m_arrObject.GetCount()); return m_arrObject[position].strData; } DWORD getItemData(int position) { SASSERT(position >= 0 && position < (int)m_arrObject.GetCount()); return m_arrObject[position].dwData; } SAdapterObject getItem(int position) { SASSERT(position >= 0 && position < (int)m_arrObject.GetCount()); return m_arrObject[position]; } void SetCtrlName(const SStringT& strText) { m_strCtrlName = strText; } void AddText(const SStringT& strText) { SAdapterObject itemObject ; itemObject.strData = strText; itemObject.strText = strText; itemObject.dwData = 0; m_arrObject.Add(itemObject); notifyDataSetChanged(); } void AddObject(const SStringT& strText,const SStringT& strData,DWORD dwData = 0) { SAdapterObject itemObject ; itemObject.strData = strData; itemObject.strText = strText; itemObject.dwData = dwData; m_arrObject.Add(itemObject); notifyDataSetChanged(); } void Clear() { m_arrObject.RemoveAll(); this->notifyDataSetChanged(); } int GetTextIndex(CString strText) { CString strTempText ; strText.Trim(); int nIndex = -1; for(int i =0; i < m_arrObject.GetCount(); i++) { SAdapterObject itemObject = m_arrObject.GetAt(i); strTempText = itemObject.strText; strTempText.Trim(); if(strText == strTempText) { nIndex = i; break; } } return nIndex; } int GetDataIndex(CString strData) { CString strTempData ; strData.Trim(); int nIndex = -1; for(int i =0; i < m_arrObject.GetCount(); i++) { SAdapterObject itemObject = m_arrObject.GetAt(i); strTempData = itemObject.strData; strTempData.Trim(); if(strData == strTempData) { nIndex = i; break; } } return nIndex; } };