bool CanvasTreeStore::find_first_value_node(const synfig::ValueNode::Handle& value_node, Gtk::TreeIter& iter) { // maybe replace the ValueNode_Const or ValueNode_Animated with the contained ValueNode_Bone // todo: do we need to do this in find_next_value_node, and find_*_value_desc too? synfig::ValueNode::Handle node(expandable_bone_parent(value_node)); iter=children().begin(); while(iter && node!=(ValueNode::Handle)(*iter)[model.value_node]) { if(!iter->children().empty()) { Gtk::TreeIter iter2(iter->children().begin()); //! \todo confirm that the && should be done before the || if((iter2 && node==(ValueNode::Handle)(*iter2)[model.value_node]) || find_next_value_node(node, iter2)) { iter=iter2; return true; } } Gtk::TreeIter iter2(++iter); if(!iter2) iter==iter->parent(); else iter=iter2; } return (bool)iter && node==(ValueNode::Handle)(*iter)[model.value_node]; }
bool CanvasTreeStore::find_next_value_node(const synfig::ValueNode::Handle& value_node, Gtk::TreeIter& iter) { if(!iter) return find_first_value_node(value_node,iter); if(iter) do { if(!iter->children().empty()) { Gtk::TreeIter iter2(iter->children().begin()); //! \todo confirm that the && should be done before the || if((iter2 && value_node==(ValueNode::Handle)(*iter2)[model.value_node]) || find_next_value_node(value_node, iter2)) { iter=iter2; return true; } } Gtk::TreeIter iter2(++iter); if(!iter2) { iter==iter->parent(); if(iter)++iter; } else iter=iter2; } while(iter && value_node!=(ValueNode::Handle)(*iter)[model.value_node]); return (bool)iter && value_node==(ValueNode::Handle)(*iter)[model.value_node]; }
bool CanvasTreeStore::find_first_value_desc(const synfigapp::ValueDesc& value_desc, Gtk::TreeIter& iter) { iter=children().begin(); while(iter && value_desc!=(*iter)[model.value_desc]) { if(!iter->children().empty()) { Gtk::TreeIter iter2(iter->children().begin()); //! \todo confirm that the && should be done before the || if((iter2 && value_desc==(*iter2)[model.value_desc]) || find_next_value_desc(value_desc, iter2)) { iter=iter2; return true; } } Gtk::TreeIter iter2(++iter); if(!iter2) iter==iter->parent(); else iter=iter2; } return (bool)iter && value_desc==(*iter)[model.value_desc]; }
void GrpBuffer::fill_tree_branch(Gtk::TreeIter node, GrpHierarchy groups) { for(GrpHierarchy::iter i = groups.begin(); i != groups.end(); i++) { Gtk::TreeIter it; it = data->append(node->children()); (*it)[columns->name] = i->second.name; (*it)[columns->subscribed] = false; (*it)[columns->font] = "normal"; if (i->second.name.empty()) { (*it)[columns->internal] = true; (*it)[columns->caption] = i->first; } else { (*it)[columns->internal] = false; (*it)[columns->caption] = i->second.name; } if (i->second.has_child()) fill_tree_branch(it, i->second); } }
Gtk::TreeIter AddinsTreeModel::append(const gnote::AddinInfo & module_info, const sharp::DynamicModule *module) { gnote::AddinCategory category = module_info.category(); Gtk::TreeIter iter = children().begin(); while(iter != children().end()) { gnote::AddinCategory row_value; iter->get_value(3, row_value); if(row_value == category) break; else ++iter; } if(iter == children().end()) { iter = Gtk::TreeStore::append(); iter->set_value(0, get_addin_category_name(category)); iter->set_value(3, category); } iter = Gtk::TreeStore::append(iter->children()); iter->set_value(0, std::string(module_info.name())); iter->set_value(1, std::string(module_info.version())); iter->set_value(2, module); iter->set_value(4, module_info.id()); return iter; }