31 seqTemplate(seqTempl ? seqTempl->dup() :
NULp),
35 addDeleteCallbacks(add_delete_callbacks)
58 if (gb_tree == gb_tree_del) {
93 tree_name = strdup(name);
100 if (error)
delete arb_tree;
110 error =
"Can't save your tree (no tree loaded or tree has been deleted)";
125 if (arb_tree->
gb_node == gb_species) {
136 if (!error && addDeleteCallbacks) {
139 if (!error && ali->
has_data() && seqTemplate) {
140 error = get_root_node()->preloadLeafSequences();
142 if (!error) isLinkedToDB =
true;
151 if (ali->
has_data() && seqTemplate) get_root_node()->unloadSequences();
152 isLinkedToDB =
false;
160 memset(
this, 0,
sizeof(*
this));
176 get_leftson()->calcTreeInfo(info);
177 get_rightson()->calcTreeInfo(info);
193 get_leftson()->mark_subtree();
194 get_rightson()->mark_subtree();
203 get_leftson()->contains_marked_species() ||
204 get_rightson()->contains_marked_species();
215 error = get_leftson() ->add_delete_cb_rec(cb);
216 if (error) error = get_rightson()->add_delete_cb_rec(cb);
226 get_leftson() ->remove_delete_cb_rec(cb);
227 get_rightson()->remove_delete_cb_rec(cb);
232 GB_ERROR ARB_seqtree::preloadLeafSequences() {
241 error = get_leftson()->preloadLeafSequences();
242 if (!error) error = get_rightson()->preloadLeafSequences();
247 void ARB_seqtree::unloadSequences() {
251 get_leftson()->unloadSequences();
252 get_rightson()->unloadSequences();
271 if (
this != upgroup) {
273 pos +=
get_father()->relative_position_in(upgroup);
GBDATA * get_gb_main() const
void GBT_unlink_tree(TreeNode *tree)
const TreeNode * get_root_node() const
GB_ERROR GB_add_callback(GBDATA *gbd, GB_CB_TYPE type, const DatabaseCallback &dbcb)
bool is_upper_son() const
GB_ERROR GB_end_transaction(GBDATA *gbd, GB_ERROR error)
TreeRoot * get_tree_root() const
TreeNode * GBT_read_tree(GBDATA *gb_main, const char *tree_name, TreeRoot *troot)
void calcTreeInfo(ARB_tree_info &info)
ARB_seqtree_root(AliView *aliView, AP_sequence *seqTempl, bool add_delete_callbacks)
GB_ERROR GBT_link_tree(TreeNode *tree, GBDATA *gb_main, bool show_status, int *zombies, int *duplicates)
GB_ERROR GB_push_transaction(GBDATA *gbd)
#define DOWNCAST(totype, expr)
POS_TREE1 * get_father() const
GB_ERROR GB_await_error()
size_t relative_position_in(const ARB_countedTree *upgroup) const
GB_ERROR GBT_overwrite_tree(GBDATA *gb_tree, TreeNode *tree)
void replace_seq(AP_sequence *sequence)
virtual GB_ERROR saveToDB() __ATTR__USERESULT
virtual GB_ERROR loadFromDB(const char *name) __ATTR__USERESULT
static void error(const char *msg)
AP_sequence * set_seq(AP_sequence *sequence)
virtual unsigned get_leaf_count() const =0
int GB_read_flag(GBDATA *gbd)
~ARB_seqtree_root() OVERRIDE
static void tree_deleted_cbwrapper(GBDATA *gb_tree, ARB_seqtree_root *troot)
const AliView * get_aliview() const
void GB_write_flag(GBDATA *gbd, long flag)
static void arb_tree_species_deleted_cb(GBDATA *gb_species, ARB_seqtree *arb_tree)
bool is_inside(const TreeNode *subtree) const
GB_ERROR linkToDB(int *zombies, int *duplicates) __ATTR__USERESULT
bool contains_marked_species()
void GB_remove_callback(GBDATA *gbd, GB_CB_TYPE type, const DatabaseCallback &dbcb)
void(* ARB_tree_node_del_cb)(GBDATA *, class ARB_seqtree *)
GBDATA * GBT_find_tree(GBDATA *gb_main, const char *tree_name)
GB_ERROR bind_to_species(GBDATA *gb_species)
virtual void change_root(TreeNode *old, TreeNode *newroot)
const AP_sequence * get_seqTemplate() const
static int info[maxsites+1]
void tree_deleted_cb(GBDATA *gb_tree_del)