40 #define AWAR_CL_SELECTED_CONFIGS "configuration_data/win%i/selected"
41 #define AWAR_CL_DISPLAY_CONFIG_MARKERS "configuration_data/win%i/display"
43 #define AWAR_CONFIG_COMMENT "tmp/configuration/comment"
66 for (
int c = 0; c<size(); ++c) {
70 for (
int area = 0; area<=1 && !
error; ++area) {
77 ConfigHits::iterator found = hits.find(item.
name);
78 if (found == hits.end()) {
79 string h(size(),
'0');
84 (found->second)[c] =
'1';
103 const char *
error = errors[markerIdx];
104 const char *name = (*config)[markerIdx];
109 ConfigHits::const_iterator found = hits.find(speciesName);
110 if (found != hits.end()) {
111 const string& hit = found->second;
113 for (
int c = 0; c<size(); ++c) {
114 if (hit[c] ==
'1')
node.incMarker(c);
125 exports.request_structure_update();
133 #define CONFIG_SEPARATOR "\1"
185 ConfigMarkerDisplay *disp =
new ConfigMarkerDisplay(config, ntw->
gb_main);
191 if (selected_configs_list[ntw_id]) {
222 bool is_same_modification = gb_name == gb_lastname && (thiscall == lastcall || thiscall == (lastcall+1));
223 if (!is_same_modification) {
229 for (
size_t c = 0; c<config->
size(); ++c) {
230 if (strcmp((*config)[c], name) == 0) {
237 gb_lastname = gb_name;
241 #define CONFIG_BASE_PATH "/configuration_data/configuration"
244 static bool installed =
false;
264 awar_selCfgs->
touch();
269 #define MANAGED_CONFIGSET_SECTION "configmarkers"
270 #define MANAGED_CONFIGSET_ENTRY "selected_configs"
282 virtual const char *modify(
const char *old)
const = 0;
285 bool changed =
false;
286 for (
size_t i = 0; i<config.
size(); ++i) {
287 const char *newContent = modify(config[i]);
292 else if (strcmp(newContent, config[i]) != 0) {
303 const char *modify(
const char *name)
const OVERRIDE {
304 return strcmp(name, oldName) == 0 ? newName : name;
313 const char *toDelete;
314 const char *modify(
const char *name)
const OVERRIDE {
315 return strcmp(name, toDelete) == 0 ?
NULp : name;
319 : toDelete(toDelete_)
324 char *modified_value =
NULp;
333 return modified_value ? modified_value :
ARB_strdup(value);
351 AW_window_simple *aws =
new AW_window_simple;
354 aws->init(root,
GBS_global_string(
"MARK_CONFIGS_%i", ntw_id),
"Highlight configurations in tree");
355 aws->load_xfig(
"mark_configs.fig");
357 aws->auto_space(10, 10);
361 aws->create_button(
"CLOSE",
"CLOSE",
"C");
365 aws->create_button(
"HELP",
"HELP",
"H");
377 selected_configs_list[ntw_id] = sub_sel;
382 aws->label(
"Display?");
387 aws->create_autosize_button(
"SETTINGS",
"Settings",
"S");
422 void call(
void (*aPizza)(
TreeNode*))
const;
431 if (next) next->
call(aPizza);
447 *extra_marked_species = (
new Store_species(node))->
add(*extra_marked_species);
455 node = node->get_rightson();
474 father = node->get_father();
486 int use_species_aside,
489 int *marked_at_right)
526 *marked_at_right = marked_at_left;
536 *marked_at_right = 0;
541 if (marked_at_left<use_species_aside) {
547 int step_over = marked_at_left+1;
548 int then_mark = use_species_aside-marked_at_left;
550 while (step_over--) {
555 while (leaf_at_left && then_mark--) {
563 while (marked_back) {
564 memfile.
put(CFG_SEP);
574 marked_at_left = use_species_aside;
577 *auto_mark = use_species_aside;
580 memfile.
put(CFG_SEP);
585 *marked_at_right = marked_at_left+1;
592 memfile.
put(CFG_SEP);
603 int right_of_leftson;
604 long nspecies=
nt_build_conf_string_rek(used, tree->get_leftson(), memfile, extra_marked_species, use_species_aside, auto_mark, marked_at_left, &right_of_leftson);
605 nspecies +=
nt_build_conf_string_rek(used, tree->get_rightson(), memfile, extra_marked_species, use_species_aside, auto_mark, right_of_leftson, marked_at_right);
608 memfile.
put(CFG_SEP);
627 const char *sep = strchr(key, 1);
632 if (!last_group_name || strncmp(key, last_group_name, sep-key)) {
633 if (last_group_name) {
634 sai_middle.
put(CFG_SEP);
637 sai_middle.
put(CFG_SEP);
638 sai_middle.
cat(
"FSAI:");
639 sai_middle.
ncat(key, sep-key);
642 sai_middle.
put(CFG_SEP);
644 sai_middle.
cat(sep+1);
665 bool wantedInTop =
false;
666 for (
unsigned s = 0; !wantedInTop &&
s<topAreaSai.
size(); ++
s) {
667 wantedInTop = strcmp(name, topAreaSai[
s]) == 0;
677 char *cn =
new char[strlen(gn) + strlen(name) + 2];
678 sprintf(cn,
"%s%c%s", gn, 1, name);
688 for (
unsigned s = 0;
s<topAreaSai.
size(); ++
s) {
691 topfile.
put(CFG_SEP);
693 topfile.
cat(topAreaSai[s]);
698 middlefile.
put(CFG_SEP);
699 middlefile.
cat(
"GSAI-Maingroup");
704 middlefile.
put(CFG_SEP);
709 middlefile.
put(CFG_SEP);
718 file.
cat(
"FMore Sequences");
750 size_t unknown_species = 0;
751 bool refresh =
false;
771 for (
int area = 0; area<=1 && !
error; ++area) {
783 int newmark = oldmark;
796 if (newmark != oldmark) {
809 if (unknown_species>0 && !error) error =
GBS_global_string(
"configuration '%s' contains %zu unknown species", cn, unknown_species);
824 if (gb_configuration) {
828 error = ta.
close(error);
848 if (!conf_name || !conf_name[0]) error =
"no config name given";
850 if (use_species_aside==-1) {
851 static int last_used_species_aside = 3;
854 char *use_species =
aw_input(
"How many extra species to view aside marked:", val);
855 if (use_species) use_species_aside = atoi(use_species);
859 if (use_species_aside<1) error =
"illegal number of 'species aside'";
860 else last_used_species_aside = use_species_aside;
877 if (use_species_aside) {
882 nt_build_conf_string_rek(used, tree, middlefile, &extra_marked_species, use_species_aside, &auto_mark, use_species_aside, &marked_at_right);
883 if (extra_marked_species) {
885 delete extra_marked_species;
889 int dummy_1=0, dummy_2;
905 const char *prevComment =
NULp;
906 const char *comment =
NULp;
907 bool warnIfSavingDefault =
true;
910 prevComment =
"This configuration will be OVERWRITTEN each time\nARB_EDIT4 is started w/o specifying a config!\n---";
911 comment =
"created for ARB_EDIT4";
912 warnIfSavingDefault =
false;
918 comment =
"updated manually";
922 if (!prevComment[0]) prevComment =
NULp;
923 comment =
"created manually";
929 comment =
"created by importer";
967 char *new_name =
aw_input(
"Rename selection",
"Enter the new name of the selection", old_name);
975 if (gb_existing_cfg) err =
GBS_global_string(
"There is already a selection named '%s'", new_name);
984 else err =
"Selection has no name";
986 else err =
"Can't find that selection";
1007 bool nonexisting_config =
false;
1011 if (gb_configuration) {
1012 gb_target_commment =
GB_entry(gb_configuration,
"comment");
1015 nonexisting_config =
true;
1020 if (gb_target_commment) {
1022 awar_comment->
map(gb_target_commment);
1027 awar_comment->
unmap();
1030 free(reuse_comment);
1049 awar_comment->
unmap();
1056 if (gb_configuration) {
1064 else if (!config[0]) {
1067 error =
"Please select an existing species selection to edit its comment";
1081 #pragma GCC diagnostic push
1082 #if (GCC_VERSION_CODE<700)
1083 #pragma GCC diagnostic ignored "-Wstrict-overflow" // gcc 6.x produces a bogus overflow warning (gcc 7.x is smart enough)
1089 if (i1>i2)
swap(i1, i2);
1090 nt_assert(i1<i2 && i1>=0 && i2<
int(config.size()));
1095 if (!error) error = c1.
saveAsOver(gb_main, config[i1], config[i2],
false);
1096 if (!error) error = c2.
saveAsOver(gb_main, config[i2], config[i1],
false);
1097 if (!error) config.swap(i1, i2);
1102 #pragma GCC diagnostic pop
1109 if (selected && selected[0]) {
1113 int target_idx = -1;
1115 case ARM_TOP: target_idx = 0;
break;
1116 case ARM_UP: target_idx = source_idx-1;
break;
1117 case ARM_DOWN: target_idx = source_idx+1;
break;
1121 int entries = sellist->
size();
1122 target_idx = (target_idx+entries)%entries;
1132 if (source_idx<target_idx) {
1133 for (
int i = source_idx+1; i<=target_idx; ++i) {
1137 else if (source_idx>target_idx) {
1138 for (
int i = source_idx-1; i>=target_idx; --i) {
1143 error = ta.
close(error);
1146 awar_config->
touch();
1157 bool removedDatedLines =
false;
1158 RegExpr datedLine(
"^([A-Z][a-z]{2}\\s){2}[0-9]+\\s([0-9]{2}:){2}[0-9]{2}\\s[0-9]{4}:\\s",
false);
1159 for (
int i = line.
size()-1; i >= 0; --i) {
1164 removedDatedLines =
true;
1168 if (!removedDatedLines) line.
clear();
1178 if (!existing_aws[ntw_id]) {
1181 AW_window_simple *aws =
new AW_window_simple;
1182 aws->init(root,
GBS_global_string(
"SPECIES_SELECTIONS_%i", ntw_id),
"Species Selections");
1183 aws->load_xfig(
"nt_selection.fig");
1187 aws->create_button(
"CLOSE",
"CLOSE",
"C");
1191 aws->create_button(
"HELP",
"HELP",
"H");
1201 aws->create_autosize_button(
"CLEAR",
"Clear",
"l");
1206 aws->button_length(8);
1214 aws->create_button(
"EXTRACT",
"EXTRACT",
"E");
1218 aws->create_button(
"MARK",
"MARK",
"M");
1222 aws->create_button(
"UNMARK",
"UNMARK",
"U");
1226 aws->create_button(
"INVERT",
"INVERT",
"I");
1230 aws->create_button(
"COMBINE",
"COMBINE",
"C");
1234 aws->create_button(
"DELETE",
"DELETE",
"D");
1238 aws->create_button(
"RENAME",
"RENAME",
"R");
1240 aws->at(
"highlight");
1242 aws->create_autosize_button(
GBS_global_string(
"HIGHLIGHT_%i", ntw_id),
"Highlight in tree",
"t");
1244 aws->button_length(0);
1248 existing_aws[ntw_id] = aws;
1250 return existing_aws[ntw_id];
1272 static AW_window_simple *aws =
NULp;
1276 aws =
new AW_window_simple;
1277 aws->init(awr,
"SELECT_CONFIGURATION",
"SELECT A CONFIGURATION");
1279 aws->auto_space(0, 0);
1284 aws->create_button(
"START",
"START");
1287 aws->create_button(
"CLOSE",
"CLOSE",
"C");
1328 if (imported_from_scratch) {
1357 static bool fold_group(
TreeNode *
tree,
const char *groupName) {
1361 fprintf(stderr,
"group='%s' groupName='%s'\n", tree->
name, groupName);
1362 if (strcmp(tree->
name, groupName) == 0) {
1376 fold_group(tree->get_leftson(), groupName) ||
1377 fold_group(tree->get_rightson(), groupName);
1382 void TEST_build_conf_string() {
1427 TEST_EXPECT_EQUAL(memfile.get_data(),
"\1Gupper\1LCloButy2\1E\1Glower\1Glow1\1LCurCitre\1LCorAquat\1LCloPaste\1E\1Glow2\1LCloTyro4\1E\1E");
1443 TEST_EXPECT_EQUAL(memfile.get_data(),
"\1Gupper\1LCloButy2\1E\1Glower\1Flow1\1LCurCitre\1LCorAquat\1LCloPaste\1E\1Glow2\1LCloTyro4\1E\1E");
1457 TEST_EXPECT_EQUAL(memfile.get_data(),
"\1Gupper\1LCloTyro3\1LCloButyr\1LCloButy2\1LCloBifer\1LCloInnoc\1E\1Glower\1Flow1\1LCytAquat\1LCurCitre\1LCorAquat\1LCelBiazo\1LCorGluta\1LCloCarni\1LCloPaste\1E\1Glow2\1Gtwoleafs\1LCloTyrob\1LCloTyro2\1E\1LCloTyro4\1E\1E");
1462 delete extra_marked_species;
1475 TEST_EXPECT_EQUAL(memfile.get_data(),
"\1FMore Sequences\1LCorAquat\1LCurCitre\1LCloButy2\1LCloPaste\1LCloTyro4\1E");
1482 TEST_EXPECT_EQUAL(memfile.get_data(),
"\1FMore Sequences\1LCorAquat\1LCloButy2\1LCloTyro4\1E");
1495 TEST_EXPECT_EQUAL(memfile.get_data(),
"\1GSAI-Maingroup\1FSAI:SAI's\1SPOS_VAR_BY_PARSIMONY\1E\1FSAI:special\1SECOLI\1E\1E");
1504 #endif // UNIT_TESTS
void NT_popup_configuration_admin(AW_window *aw_main, TREE_canvas *ntw)
GB_HASH * GBT_create_marked_species_hash(GBDATA *gb_main)
GB_ERROR GBK_system(const char *system_command)
void GBS_hash_do_const_sorted_loop(const GB_HASH *hs, gb_hash_const_loop_type func, gbs_hash_compare_function sorter, void *client_data)
void set_marker_display(MarkerDisplay *display)
static void reorder_configs_cb(AW_window *aww, awt_reorder_mode mode, AW_DB_selection *sel)
static void configuration_deleted_cb(const char *name)
GBDATA * GB_open(const char *path, const char *opent)
void cut_tail(size_t byte_count)
static AW_selection * selected_configs_list[MAX_NT_WINDOWS]
void add(const char *awar_name, const char *config_name)
GBDATA * GBT_first_marked_species(GBDATA *gb_main)
AW_window * NT_create_startEditorOnOldConfiguration_window(AW_root *awr)
static void selected_configs_display_awar_changed_cb(AW_root *root, TREE_canvas *ntw)
#define GB_USERFLAG_WASMARKED
void NT_create_config_after_import(TREE_canvas *ntw, bool imported_from_scratch)
Store_species(TreeNode *aNode)
GB_ERROR GB_add_hierarchy_callback(GBDATA *gb_main, const char *db_path, GB_CB_TYPE type, const DatabaseCallback &dbcb)
#define implicated(hypothesis, conclusion)
static void nt_build_sai_string_by_hash(const char *key, long, void *cd_sai_builder)
long GBS_write_hash(GB_HASH *hs, const char *key, long val)
GB_ERROR GBT_restore_marked_species(GBDATA *gb_main, const char *stored_marked)
GB_ERROR GB_write_string(GBDATA *gbd, const char *s)
static AW_window * create_configuration_marker_window(AW_root *root, TREE_canvas *ntw)
#define ASSERT_NO_ERROR(errorExpr)
long GBT_mark_all(GBDATA *gb_main, int flag)
static const int MIDDLE_AREA
Store_species * add(Store_species *list)
static void init_config_awars(AW_root *root)
AW_selection * awt_create_subset_selection_list(AW_window *aww, AW_selection_list *parent_selection, const char *at_box, const char *at_add, const char *at_sort, bool autocorrect_subselection, SubsetChangedCb subChanged_cb, AW_CL cl_user)
#define AWAR_CONFIG_COMMENT
#define AWAR_CL_DISPLAY_CONFIG_MARKERS
char * ARB_strdup(const char *str)
void AWT_insert_config_manager(AW_window *aww, AW_default default_file_, const char *id, const StoreConfigCallback &store_cb, const RestoreConfigCallback &load_or_reset_cb, const char *macro_id, const AWT_predefined_config *predef)
TreeNode * GBT_read_tree(GBDATA *gb_main, const char *tree_name, TreeRoot *troot)
static const int TOP_AREA
void NT_start_editor_on_tree(AW_window *aww, int use_species_aside, TREE_canvas *ntw)
const char * GBS_global_string(const char *templat,...)
#define AWAR_CONFIGURATION
static void init_config_admin_awars(AW_root *root)
void AW_POPDOWN(AW_window *window)
void GBS_free_hash(GB_HASH *hs)
#define MANAGED_CONFIGSET_ENTRY
static void nt_delete_configuration(AW_window *aww, AW_DB_selection *dbsel)
TreeNode * getNode() const
void cat(const char *from)
void get_values(StrArray &intoArray)
bool modifyConfig(ConstStrArray &config) const
static GB_ERROR swap_configs(GBDATA *gb_main, StrArray &config, int i1, int i2)
ConfigRenamer(const char *oldName_, const char *newName_)
static void nt_build_conf_marked(GBDATA *gb_main, GB_HASH *used, GBS_strstruct &file)
GB_ERROR GBT_link_tree(TreeNode *tree, GBDATA *gb_main, bool show_status, int *zombies, int *duplicates)
GBDATA * GB_get_father(GBDATA *gbd)
AW_awar * get_config_awar(int canvas_id)
#define MAX_NT_WINDOWS_NULLINIT
ConfigDeleter(const char *toDelete_)
static void unmark_species(TreeNode *node)
#define DEFAULT_CONFIGURATION
static SmartPtr< ConstStrArray > get_selected_configs_from_awar(int canvas_id)
#define DOWNCAST(totype, expr)
ConfigMarkerDisplay(SmartPtr< ConstStrArray > config_, GBDATA *gb_main_)
const char * ARB_dateTime_suffix()
AW_awar * add_callback(const RootCallback &cb)
GB_ERROR GB_delete(GBDATA *&source)
struct Unfixed_cb_parameter * UNFIXED
static struct aisc_static_set_mem md
#define AWAR_CL_SELECTED_CONFIGS
static TreeNode * left_neighbour_leaf(TreeNode *node)
const char * read_char_pntr() const
bool GB_user_flag(GBDATA *gbd, unsigned char user_bit)
static void configuration_renamed_cb(const char *old_name, const char *new_name)
void to_array(StrArray &array, bool values)
static AW_root * SINGLETON
TreeNode * NT_get_tree_root_of_canvas(TREE_canvas *ntw)
AW_window * TREE_create_marker_settings_window(AW_root *root)
WindowCallback makeHelpCallback(const char *helpfile)
#define TEST_EXPECT(cond)
static void selected_config_changed_cb(AW_root *root)
char * GBT_read_string(GBDATA *gb_container, const char *fieldpath)
static char * correct_managed_configsets_cb(const char *key, const char *value, AW_CL cl_ConfigModifier)
GBDATA * GB_create(GBDATA *father, const char *key, GB_TYPES type)
long GB_number_of_subentries(GBDATA *gbd)
static void config_modified_cb(GBDATA *gb_cfg_area)
void hide_marker_display()
bool displays_config_markers(MarkerDisplay *md)
static void selected_configs_awar_changed_cb(AW_root *aw_root, TREE_canvas *ntw)
GBT_CONFIG_ITEM_TYPE type
AW_DB_selection * awt_create_CONFIG_selection_list(GBDATA *gb_main, AW_window *aws, const char *varname)
static void nt_extract_configuration(UNFIXED, extractType ext_type)
MarkerDisplay * get_marker_display()
static void modify_configurations(const ConfigModifier &mod)
static int nt_build_conf_string_rek(GB_HASH *used, TreeNode *tree, GBS_strstruct &memfile, Store_species **extra_marked_species, int use_species_aside, int *auto_mark, int marked_at_left, int *marked_at_right)
#define TEST_REJECT_NULL(n)
int get_index_of(const AW_scalar &searched_value)
virtual ~ConfigModifier()
const char * get_comment() const
static void error(const char *msg)
#define AWAR_TREE_REFRESH
#define NO_CONFIG_SELECTED
const RegMatch * match(const std::string &versus, size_t offset=0) const
void set_comment(const char *newComment)
static AW_window * create_configuration_admin_window(AW_root *root, TREE_canvas *ntw)
static void install_config_change_callbacks(GBDATA *gb_main)
GBDATA * GBT_next_marked_species(GBDATA *gb_species)
static bool allow_selection2awar_update
CONSTEXPR_INLINE_Cxx14 void swap(unsigned char &c1, unsigned char &c2)
GB_ULONG GB_time_of_day(void)
GB_ERROR save(GBDATA *gb_main, const char *name, bool warnIfSavingDefault) const
size_t GBS_hash_elements(const GB_HASH *hs)
static void nt_build_sai_string(GBDATA *gb_main, const char *topAreaSaiList, GBS_strstruct &topfile, GBS_strstruct &middlefile)
GBDATA * GBT_first_SAI_rel_SAI_data(GBDATA *gb_sai_data)
static void mark_species(TreeNode *node, Store_species **extra_marked_species)
AW_awar * get_canvas_awar(const char *awar_name_format, int canvas_id)
AW_awar * get_display_toggle_awar(int canvas_id)
static void nt_store_configuration(AW_window *, TREE_canvas *ntw)
static void nt_start_editor_on_configuration(AW_window *aww)
static TreeNode * rightmost_leaf(TreeNode *node)
map< string, string > ConfigHits
static SearchTree * tree[SEARCH_PATTERNS]
int GB_read_flag(GBDATA *gbd)
char * read_string() const
AW_awar * awar_no_error(const char *awar)
end timer stuff
GB_ERROR saveAsOver(GBDATA *gb_main, const char *name, const char *oldName, bool warnIfSavingDefault) const
AW_awar * awar(const char *awar)
void awt_create_order_buttons(AW_window *aws, awt_orderfun reorder_cb, AW_CL cl_user)
char * GBS_log_action_to(const char *comment, const char *action, bool stamp)
void awt_set_subset_selection_content(AW_selection *subset_sel_, const CharPtrArray &values)
GBDATA * GBT_find_configuration(GBDATA *gb_main, const char *name)
void call(void(*aPizza)(TreeNode *)) const
long GBT_count_marked_species(GBDATA *gb_main)
const char * get_marker_name(int markerIdx) const OVERRIDE
static void configs_selectionlist_changed_cb(AW_selection *selected_configs, bool interactive_change, AW_CL ntw_id)
#define TEST_EXPECT_ZERO(cond)
static GB_ERROR nt_create_configuration(TreeNode *tree, const char *conf_name, int use_species_aside, ConfigCreation creation)
const std::string * has_failed() const
static void setup_configmarker_config_cb(AWT_config_definition &config, int ntw_id)
char * GBT_join_strings(const CharPtrArray &strings, char separator)
GBDATA * GBT_next_SAI(GBDATA *gb_sai)
#define AWAR_TOPAREA_SAIS
void ncat(const char *from, size_t count)
AW_awar * awar_int(const char *var_name, long default_value=0, AW_default default_file=AW_ROOT_DEFAULT)
#define TEST_EXPECT_NULL(n)
void NT_activate_configMarkers_display(TREE_canvas *ntw)
GB_ERROR close(GB_ERROR error)
char * GBK_singlequote(const char *arg)
void GB_write_flag(GBDATA *gbd, long flag)
void GB_write_user_flag(GBDATA *gbd, unsigned char user_bit, bool state)
GB_ERROR GBT_write_string(GBDATA *gb_container, const char *fieldpath, const char *content)
const GBT_config_item & nextItem(GB_ERROR &error)
void move_selection(int offset)
void nt_create_config_after_import(TREE_canvas *ntw)
int GB_read_byte(GBDATA *gbd)
AW_awar * map(const char *awarn)
char * GB_read_string(GBDATA *gbd)
GB_ERROR GB_write_byte(GBDATA *gbd, int i)
void AWT_modify_managed_configs(AW_default default_file, const char *id, ConfigModifyCallback mod_cb, AW_CL cl_user)
GBDATA * GBT_first_species(GBDATA *gb_main)
#define TEST_EXPECT_NO_ERROR(call)
void aw_message(const char *msg)
static void config_comment_changed_cb(AW_root *root)
void GB_clear_user_flag(GBDATA *gbd, unsigned char user_bit)
int GBS_HCF_sortedByKey(const char *k0, long dummy_1x, const char *k1, long dummy_2x)
#define MANAGED_CONFIGSET_SECTION
GBDATA * GBT_next_species(GBDATA *gb_species)
static void write_configs_to_awar(int canvas_id, const CharPtrArray &configs)
GBDATA * GBT_find_species(GBDATA *gb_main, const char *name)
static void clear_comment_cb(AW_window *aww)
void retrieve_marker_state(const char *speciesName, NodeMarkers &node) OVERRIDE
GB_ERROR write_string(const char *aw_string)
void GBT_split_string(ConstStrArray &dest, const char *namelist, const char *separator, SplitMode mode)
const char * get_data() const
GBDATA * GBT_find_SAI_rel_SAI_data(GBDATA *gb_sai_data, const char *name)
#define GB_USERFLAG_QUERY
int GB_get_transaction_level(GBDATA *gbd)
void handle_click(int markerIdx, AW_MouseButton button, AWT_graphic_exports &exports) OVERRIDE
long GBT_get_species_count(GBDATA *gb_main)
GB_transaction ta(gb_var)
void destroy(TreeNode *that)
GB_CSTR GB_read_char_pntr(GBDATA *gbd)
AW_awar * awar_string(const char *var_name, const char *default_value="", AW_default default_file=AW_ROOT_DEFAULT)
GBDATA * GBT_get_SAI_data(GBDATA *gb_main)
GBDATA * GB_search(GBDATA *gbd, const char *fieldpath, GB_TYPES create)
char * aw_input(const char *title, const char *prompt, const char *default_input)
void GBT_splitNdestroy_string(ConstStrArray &names, char *&namelist, const char *separator, SplitMode mode)
const char * replace(int i, const char *elem)
#define TEST_EXPECT_EQUAL(expr, want)
static void nt_rename_configuration(AW_window *aww)
bool is_normal_group() const
long GBS_read_hash(const GB_HASH *hs, const char *key)
GBDATA * GB_entry(GBDATA *father, const char *key)
size_t get_position() const
AW_selection_list * get_sellist()
void aw_message_if(GB_ERROR error)
char * GBS_global_string_copy(const char *templat,...)
void GB_close(GBDATA *gbd)
void set_definition(int area, char *new_def)
const char * last_group_name
GBS_strstruct & sai_middle
GB_HASH * GBS_create_hash(long estimated_elements, GB_CASE case_sens)
void AWT_system_cb(AW_window *, const char *command)
static bool allow_to_activate_display
GB_write_int const char s