二. Htmlayout之元素value来世今生 select元素封装类

1.先判断该元素是否存在隐藏元素

        判断方法: (一般来说文本都在text标签里边)

        a 递归该元素的所有子元素element::children_count();

        b 判断该子元素类型element::get_element_type(),根据类型大概可以判断出每个子元素的作用,从而确定从哪个元素拿到当前文本.

2.相关取值API

                  element:: text();

                  element::set_text();

                  element::get_value();

                  element::set_value();

3.举例说明

                 无隐藏元素的input标签: 可以直接使用前两个函数(里边其实有个text标签)

                 select元素:一看到长那样子就知道有好几个元素嘞,OK看看TA的子元素先: 一个是caption,顾名思义是显示当前文本(但不代表当前选中的item文本);第二个是button,很

显然是右边那个小按钮;的三个是popup,也就是下拉框.popup还有子元素option,option就是下拉框弹出来的东西咯(tem);在API操作select的时候要要记得设置option状 态的同时更新caption;

                 后边那俩个API是操作texteara, plaintext, richtext... 具体拉个例子试试就OK了.当然还有其他获取的方法,在SDK例子中都有陈列.

4.select元素简单代码

class CUDSelectCtrl: public CUDObject//CUDObject简单基类
{
public:
	BOOL              IsValid();
	int               GetItemCount();                  //获取节点数目
	std::string       GetItemText(int index);          //得到节点文字
	std::string       GetText();
	void              SetText(const char *text);

	element           AddItem(const char* text);       //添加节点
	element           GetCheckedItem();                //得到被选中Item
	string            GetCheckedItemID();              //得到被选中Item的ID
	BOOL              DeleteItem(int index);           //删除节点
	void              DeleteAll();

	std::vector<int>  GetSelectedItem();               //得到被选中的节点索引
	void              GetAllItem(std::vector<std::string>&ar);
	void              AddItem(const std::vector<std::string>&ar);

	void              SetCur(int index=0);

	CUDSelectCtrl();
	CUDSelectCtrl(const element &ele_select);
	CUDSelectCtrl(const HELEMENT he);
	CUDSelectCtrl& operator=(const HELEMENT  he);
	CUDSelectCtrl& operator=(const element& ele_tree);

	static CUDSelectCtrl Target_select(const HELEMENT target);
	static CUDSelectCtrl Target_select(const element  target);
};


 

CUDSelectCtrl::CUDSelectCtrl()
{

}

CUDSelectCtrl::CUDSelectCtrl(const element &ele_select)
{
    m_element = ele_select;
}

CUDSelectCtrl::CUDSelectCtrl(const HELEMENT he)
{
	m_element = he;
}

CUDSelectCtrl& CUDSelectCtrl::operator=(const HELEMENT  he)
{
    m_element = he;
	return *this;
}

CUDSelectCtrl& CUDSelectCtrl::operator=(const element& ele_tree)
{
	m_element = ele_tree;
	return *this;
}

CUDSelectCtrl CUDSelectCtrl::Target_select(const HELEMENT target)
{
    element ele(target);
	return Target_select(ele);
}

CUDSelectCtrl CUDSelectCtrl::Target_select(const element  target)
{
	if (!target.is_valid())		
		return 0;

	const char* td = target.get_element_type();
	if (strcmp(td, "select")==0)
	{
		return target;
	}
	return Target_select(target.parent());
}

int CUDSelectCtrl::GetItemCount()
{
	element poup = m_element.child(2);
    return poup.children_count();
}

std::string CUDSelectCtrl::GetItemText( int index )
{
	std::string st;
	if (GetItemCount()>index)
	{
		element poup = m_element.child(2);
		element ele = poup.child(index);
		json::string js = ele.text();
        const wchar_t* cw = js.c_str();
		if(cw != NULL)
			st = w2t(cw);
	}
	return st;
}

element CUDSelectCtrl::AddItem( const char* text)
{
	element ele = element::create("option");
	ele.set_text(t2w(text));

	if(!m_element.is_valid())
		return NULL;

	element poup = m_element.child(2);
	if(!poup.is_valid())
		return NULL;

	poup.append(ele);

	element(m_element.child(0)).set_state(STATE_CHECKED);

	return ele;
}

void CUDSelectCtrl::AddItem( const std::vector<std::string>&ar)
{
    int  num = ar.size();
	for (int i=0; i<num; i++)
	{
		AddItem(ar[i].c_str());
	}

	if (num>0)
	{
		SetCur(0);
	}
}

BOOL CUDSelectCtrl::DeleteItem( int index )
{
	if(GetItemCount()<=index)
		return FALSE;

	element poup = m_element.child(2);
	element ele = poup.child(index);
	ele.destroy();

	return TRUE;
}

std::vector<int> CUDSelectCtrl::GetSelectedItem()
{
	std::vector<dom::element> all;
    m_element.find_all(all, "option","checked");

	std::vector<int> index;
	for(int i=0; i<all.size(); i++)
	{
		index.push_back(all[i].index());
	}

	return index;
}

void CUDSelectCtrl::DeleteAll()
{
	if(!m_element.is_valid())
		return;
	element poup = m_element.child(2);
	if(!poup.is_valid())
		return;
	poup.clear();

	element caption = m_element.child(0);
	if(!caption.is_valid())
		return;
	caption.set_text(L"");
}

std::string CUDSelectCtrl::GetText()
{
	std::string text;
    element caption = m_element.find_first("caption");
	if(!caption.is_valid())
		return text;
	json::string  js = caption.text();
	const wchar_t* cw = js.c_str();
	if (cw!=NULL)
	{
		text = w2t(cw);
	}

	return text;
}

void CUDSelectCtrl::SetText( const char *text )
{
	element caption = m_element.find_first("caption");
	if (caption.is_valid())
	{
		caption.set_text(t2w(text));
	}
}

void CUDSelectCtrl::GetAllItem( std::vector<std::string>&ar )
{
	int num = GetItemCount();
	for (int i=0; i<num; i++)
	{
		ar.push_back(GetItemText(i));
	}
}

void CUDSelectCtrl::SetCur( int index/*=0*/ )
{
	std::string text = GetItemText(index);
    if (text.empty())
		return;

	element caption = m_element.child(0);
	caption.set_text(t2w(text.c_str()));
	element poup = m_element.child(2);
	element(poup.child(index)).set_state(STATE_CHECKED);
}

htmlayout::dom::element CUDSelectCtrl::GetCheckedItem()
{
	element poup = m_element.child(2);
	return poup.find_first("option:checked");
}

std::string CUDSelectCtrl::GetCheckedItemID()
{
	CUDObject item = GetCheckedItem();
	return item.GetAttribute("id");
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值