|
#pragma once
|
|
#include <helper/SAdapterBase.h>
|
|
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<SAdapterObject> 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<EventItemPanelClick>(pEvt);
|
SASSERT(pEvt_ItemPanel);
|
SWindow* pPanel = sobj_cast<SWindow>(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;
|
}
|
};
|