本文整理汇总了C++中ekiga::Form::editable_set方法的典型用法代码示例。如果您正苦于以下问题:C++ Form::editable_set方法的具体用法?C++ Form::editable_set怎么用?C++ Form::editable_set使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ekiga::Form
的用法示例。
在下文中一共展示了Form::editable_set方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1:
void
LM::Presentity::edit_presentity_form_submitted (bool submitted,
Ekiga::Form& result)
{
if (!submitted)
return;
const std::string name = result.text ("name");
const std::set<std::string> groups = result.editable_set ("groups");
LmMessage* message = lm_message_new_with_sub_type (NULL, LM_MESSAGE_TYPE_IQ, LM_MESSAGE_SUB_TYPE_SET);
LmMessageNode* query = lm_message_node_add_child (lm_message_get_node (message), "query", NULL);
lm_message_node_set_attribute (query, "xmlns", "jabber:iq:roster");
LmMessageNode* node = lm_message_node_add_child (query, "item", NULL);
{
gchar* escaped = g_markup_escape_text (name.c_str (), -1);
lm_message_node_set_attributes (node,
"jid", get_jid ().c_str (),
"name", escaped,
NULL);
g_free (escaped);
}
for (std::set<std::string>::const_iterator iter = groups.begin (); iter != groups.end (); ++iter) {
gchar* escaped = g_markup_escape_text (iter->c_str (), -1);
lm_message_node_add_child (node, "group", escaped);
g_free (escaped);
}
lm_connection_send_with_reply (connection, message,
build_message_handler (boost::bind(&LM::Presentity::handle_edit_reply, this, _1, _2)), NULL);
lm_message_unref (message);
}
示例2: robust_xmlEscape
void
RL::Presentity::edit_presentity_form_submitted (bool submitted,
Ekiga::Form &result)
{
if (!submitted)
return;
const std::string new_name = result.text ("name");
const std::string new_uri = result.text ("uri");
const std::set<std::string> new_groups = result.editable_set ("groups");
std::map<std::string, xmlNodePtr> future_group_nodes;
xmlNsPtr ns = xmlSearchNsByHref (node->doc, node,
BAD_CAST "http://www.ekiga.org");
bool reload = false;
robust_xmlNodeSetContent (node, &name_node, "name", new_name);
if (uri != new_uri) {
xmlSetProp (node, (const xmlChar*)"uri", (const xmlChar*)uri.c_str ());
boost::shared_ptr<Ekiga::PresenceCore> presence_core(services.get<Ekiga::PresenceCore> ("presence-core"));
presence_core->unfetch_presence (uri);
reload = true;
}
for (std::map<std::string, xmlNodePtr>::const_iterator iter
= group_nodes.begin ();
iter != group_nodes.end () ;
iter++) {
if (new_groups.find (iter->first) == new_groups.end ()) {
xmlUnlinkNode (iter->second);
xmlFreeNode (iter->second);
}
else {
future_group_nodes[iter->first] = iter->second;
}
}
for (std::set<std::string>::const_iterator iter = new_groups.begin ();
iter != new_groups.end ();
iter++) {
if (std::find (groups.begin (), groups.end (), *iter) == groups.end ())
future_group_nodes[*iter] = xmlNewChild (node, ns,
BAD_CAST "group",
BAD_CAST robust_xmlEscape (node->doc, *iter).c_str ());
}
group_nodes = future_group_nodes;
groups = new_groups;
save (reload);
}
示例3: request
void
Local::Heap::new_presentity_form_submitted (bool submitted,
Ekiga::Form &result)
{
if (!submitted)
return;
gmref_ptr<Ekiga::PresenceCore> presence_core = core.get ("presence-core");
const std::string name = result.text ("name");
const std::string good_uri = result.hidden ("good-uri");
std::string uri;
const std::set<std::string> groups = result.editable_set ("groups");
if (good_uri == "yes")
uri = result.hidden ("uri");
else
uri = result.text ("uri");
size_t pos = uri.find_first_of (' ');
if (pos != std::string::npos)
uri = uri.substr (0, pos);
if (presence_core->is_supported_uri (uri)
&& !has_presentity_with_uri (uri)) {
add (name, uri, groups);
save ();
} else {
Ekiga::FormRequestSimple request(sigc::mem_fun (this, &Local::Heap::new_presentity_form_submitted));
result.visit (request);
if (!presence_core->is_supported_uri (uri))
request.error (_("You supplied an unsupported address"));
else
request.error (_("You already have a contact with this address!"));
if (!questions.handle_request (&request)) {
// FIXME: better error handling
#ifdef __GNUC__
std::cout << "Unhandled form request in "
<< __PRETTY_FUNCTION__ << std::endl;
#endif
}
}
}
示例4: add
void
Local::Heap::new_presentity_form_submitted (bool submitted,
Ekiga::Form &result)
{
if (!submitted)
return;
boost::shared_ptr<Ekiga::PresenceCore> pcore = presence_core.lock ();
if (!pcore)
return;
const std::string name = result.text ("name");
const std::string good_uri = result.hidden ("good-uri");
std::string uri;
const std::set<std::string> groups = result.editable_set ("groups");
if (good_uri == "yes")
uri = result.hidden ("uri");
else
uri = result.text ("uri");
uri = canonize_uri (uri);
if (pcore->is_supported_uri (uri)
&& !has_presentity_with_uri (uri)) {
add (name, uri, groups);
save ();
} else {
boost::shared_ptr<Ekiga::FormRequestSimple> request = boost::shared_ptr<Ekiga::FormRequestSimple>(new Ekiga::FormRequestSimple (boost::bind (&Local::Heap::new_presentity_form_submitted, this, _1, _2)));
result.visit (*request);
if (!pcore->is_supported_uri (uri))
request->error (_("You supplied an unsupported address"));
else
request->error (_("You already have a contact with this address!"));
questions (request);
}
}
示例5:
void
LM::HeapRoster::add_item_form_submitted (bool submitted,
Ekiga::Form& result)
{
if ( !submitted)
return;
const std::string jid = result.text ("jid");
const std::string contact_name = result.text ("name");
const std::list<std::string> groups = result.editable_set ("groups");
if ( !jid.empty ()) {
LmMessage* message = lm_message_new_with_sub_type (NULL, LM_MESSAGE_TYPE_IQ, LM_MESSAGE_SUB_TYPE_SET);
LmMessageNode* query = lm_message_node_add_child (lm_message_get_node (message), "query", NULL);
lm_message_node_set_attribute (query, "xmlns", "jabber:iq:roster");
LmMessageNode* node = lm_message_node_add_child (query, "item", NULL);
lm_message_node_set_attributes (node,
"jid", jid.c_str (),
NULL);
if ( !contact_name.empty ()) {
gchar* escaped = g_markup_escape_text (contact_name.c_str (), -1);
lm_message_node_set_attributes (node,
"name", escaped,
NULL);
}
for (std::list<std::string>::const_iterator iter = groups.begin (); iter != groups.end (); ++iter) {
gchar* escaped = g_markup_escape_text (iter->c_str (), -1);
lm_message_node_add_child (node, "group", escaped);
g_free (escaped);
}
items_added_by_me.insert (jid);
lm_connection_send (connection, message, NULL);
lm_message_unref (message);
}
}
示例6: robust_xmlEscape
void
RL::Heap::on_new_entry_form_submitted (bool submitted,
Ekiga::Form& result)
{
if (!submitted)
return;
std::string entry_name = result.text ("name");
std::string entry_uri = result.text ("uri");
std::set<std::string> entry_groups = result.editable_set ("groups");
xmlNodePtr entry_node = xmlNewChild (list_node, NULL,
BAD_CAST "entry", NULL);
xmlSetProp (entry_node, BAD_CAST "uri",
BAD_CAST robust_xmlEscape (doc.get (), entry_uri).c_str ());
xmlNewChild (entry_node, NULL, BAD_CAST "display-name",
BAD_CAST robust_xmlEscape (doc.get (), entry_name).c_str ());
xmlNsPtr ns = xmlSearchNsByHref (doc.get (), entry_node,
BAD_CAST "http://www.ekiga.org");
if (ns == NULL) {
// FIXME: we should handle the case, even if it shouldn't happen
}
for (std::set<std::string>::const_iterator iter = entry_groups.begin ();
iter != entry_groups.end ();
++iter) {
xmlNewChild (entry_node, ns, BAD_CAST "group",
BAD_CAST robust_xmlEscape (doc.get (), *iter).c_str ());
}
xmlBufferPtr buffer = xmlBufferCreate ();
int res = xmlNodeDump (buffer, doc.get (), entry_node, 0, 0);
if (res >= 0) {
std::string root_str;
std::string username_str;
std::string password_str;
std::string user_str;
{
xmlChar* str = xmlNodeGetContent (root);
if (str != NULL)
root_str = (const char*)str;
}
{
xmlChar* str = xmlNodeGetContent (user);
if (str != NULL)
user_str = (const char*)str;
}
{
xmlChar* str = xmlNodeGetContent (username);
if (str != NULL)
username_str = (const char*)str;
}
{
xmlChar* str = xmlNodeGetContent (password);
if (str != NULL)
password_str = (const char*)str;
}
gmref_ptr<XCAP::Path> path(new XCAP::Path (root_str, "resource-lists",
user_str));
path->set_credentials (username_str, password_str);
path = path->build_child ("resource-lists");
path = path->build_child ("list");
path = path->build_child_with_attribute ("entry", "uri", entry_uri);
gmref_ptr<XCAP::Core> xcap(services.get ("xcap-core"));
xcap->write (path, "application/xcap-el+xml",
(const char*)xmlBufferContent (buffer),
sigc::mem_fun (this, &RL::Heap::new_entry_result));
}
xmlBufferFree (buffer);
}
示例7: robust_xmlEscape
void
Local::Presentity::edit_presentity_form_submitted (bool submitted,
Ekiga::Form &result)
{
if (!submitted)
return;
const std::string new_name = result.text ("name");
const std::set<std::string> groups = get_groups ();
const std::set<std::string> new_groups = result.editable_set ("groups");
std::string new_uri = result.text ("uri");
const std::string uri = get_uri ();
bool preferred = result.boolean ("preferred");
std::set<xmlNodePtr> nodes_to_remove;
new_uri = canonize_uri (new_uri);
for (xmlNodePtr child = node->children ;
child != NULL ;
child = child->next) {
if (child->type == XML_ELEMENT_NODE
&& child->name != NULL) {
if (xmlStrEqual (BAD_CAST ("name"), child->name)) {
robust_xmlNodeSetContent (node, &child, "name", new_name);
}
}
}
if (uri != new_uri) {
boost::shared_ptr<Ekiga::PresenceCore> pcore = presence_core.lock ();
if (pcore) {
pcore->unfetch_presence (uri);
pcore->fetch_presence (new_uri);
}
presence = "unknown";
xmlSetProp (node, (const xmlChar*)"uri", (const xmlChar*)new_uri.c_str ());
}
// the first loop looks at groups we were in : are we still in ?
for (xmlNodePtr child = node->children ;
child != NULL ;
child = child->next) {
if (child->type == XML_ELEMENT_NODE
&& child->name != NULL) {
if (xmlStrEqual (BAD_CAST ("group"), child->name)) {
xmlChar* xml_str = xmlNodeGetContent (child);
if (xml_str != NULL) {
if (new_groups.find ((const char*) xml_str) == new_groups.end ()) {
nodes_to_remove.insert (child); // don't free what we loop on!
}
xmlFree (xml_str);
}
}
}
}
// ok, now we can clean up!
for (std::set<xmlNodePtr>::iterator iter = nodes_to_remove.begin ();
iter != nodes_to_remove.end ();
++iter) {
xmlUnlinkNode (*iter);
xmlFreeNode (*iter);
}
// the second loop looking for groups we weren't in but are now
for (std::set<std::string>::const_iterator iter = new_groups.begin ();
iter != new_groups.end ();
iter++) {
if (std::find (groups.begin (), groups.end (), *iter) == groups.end ()) {
xmlNewChild (node, NULL,
BAD_CAST "group",
BAD_CAST robust_xmlEscape (node->doc, *iter).c_str ());
}
}
if (preferred) {
xmlSetProp (node, BAD_CAST "preferred", BAD_CAST "true");
} else {
xmlSetProp (node, BAD_CAST "preferred", BAD_CAST "false");
}
updated ();
trigger_saving ();
}