26 #define AWAR_TRACK_BASE "track/"
27 #define AWAR_TRACK_ALI AWAR_TRACK_BASE "ali"
28 #define AWAR_TRACK_ID AWAR_TRACK_BASE "initials" // [historical]
30 #define SEQ_HISTORY_FIELD "seq_history"
43 size_t newSize = strlen(newContent);
46 content.
ncat(newContent, newSize);
70 time_t t = time(
NULp);
71 struct tm *tms = localtime(&t);
73 strftime(atime, 255,
"%Y/%m/%d %k:%M", tms);
83 size_t newSpecies = 0;
84 size_t ali_changed = 0;
85 size_t seq_changed = 0;
100 const char *save_comment =
NULp;
107 else save_comment =
"new";
113 char *comma = strchr(oldValue,
',');
115 error =
GBS_global_string(
"Invalid value '%s' in field '%s'", oldValue, checksum_field);
119 if (strcmp(char_entry, oldValue) == 0) {
120 if (strcmp(ali_entry, comma+1) == 0) {
125 save_comment =
"alignment changed";
130 save_comment =
"sequence changed";
157 ReportLine(
string tag_,
size_t amount_) : tag(tag_), amount(amount_) { }
160 list<ReportLine> reports;
161 if (newSpecies) reports.push_back(ReportLine(
"previously untracked", newSpecies));
162 if (unchanged) reports.push_back(ReportLine(
"unchanged", unchanged));
163 if (ali_changed) reports.push_back(ReportLine(
"only alignment changed", ali_changed));
164 if (seq_changed) reports.push_back(ReportLine(
"sequence changed", seq_changed));
166 if (!reports.empty()) {
167 size_t tagMaxLen = 0;
168 size_t amountMax = 0;
169 for (list<ReportLine>::const_iterator r = reports.begin(); r != reports.end(); ++r) {
170 tagMaxLen =
std::max(tagMaxLen, r->tag.length());
171 amountMax =
std::max(amountMax, r->amount);
174 size_t amountMaxLen = std::to_string(amountMax).length();
176 for (list<ReportLine>::const_iterator r = reports.begin(); r != reports.end(); ++r) {
179 msg.
cat(
" species\n");
187 free(checksum_field);
197 AW_window_simple *aws =
new AW_window_simple;
198 aws->init(root,
"TRACK_ALI_CHANGES",
"Track alignment changes");
203 aws->create_button(
"CLOSE",
"CLOSE",
"C");
207 aws->create_button(
"HELP",
"HELP",
"H");
217 aws->create_autosize_button(
"TRACK",
"Track changes",
"T");
void cut_tail(size_t byte_count)
static GB_ERROR writeHistory(GBDATA *gb_species, const char *stamp, const char *entry)
return string(buffer, length)
GB_ERROR GB_write_string(GBDATA *gbd, const char *s)
void load_xfig(const char *file, bool resize=true)
void GB_warning_if(const char *message)
const char * GBS_global_string(const char *templat,...)
void AW_POPDOWN(AW_window *window)
char * GBS_string_2_key(const char *str)
void cat(const char *from)
#define SEQ_HISTORY_FIELD
const char * read_char_pntr() const
GB_ERROR GBT_add_new_species_changekey(GBDATA *gb_main, const char *name, GB_TYPES type)
size_t GB_read_string_count(GBDATA *gbd)
GB_ERROR GB_await_error()
WindowCallback makeHelpCallback(const char *helpfile)
GBDATA * GB_create(GBDATA *father, const char *key, GB_TYPES type)
static void error(const char *msg)
AW_window * NT_create_trackAliChanges_window(AW_root *root)
char * read_string() const
AW_awar * awar(const char *awar)
GBDATA * GBT_find_sequence(GBDATA *gb_species, const char *aliname)
AW_DB_selection * awt_create_ALI_selection_list(GBDATA *gb_main, AW_window *aws, const char *varname, const char *ali_type_match)
void ncat(const char *from, size_t count)
void NT_create_trackAliChanges_Awars(AW_root *root, AW_default properties)
static void trackAlignmentChanges(AW_window *aww)
GB_CSTR GB_getenvUSER(void)
GB_ERROR GBT_write_string(GBDATA *gb_container, const char *fieldpath, const char *content)
void nprintf(size_t maxlen, const char *templat,...) __ATTR__FORMAT_MEMBER(2)
char * GB_read_string(GBDATA *gbd)
int catPadded(const char *from, size_t paddedWidth)
GBDATA * GBT_first_species(GBDATA *gb_main)
uint32_t GBS_checksum(const char *seq, int ignore_case, const char *exclude)
void aw_message(const char *msg)
GBDATA * GBT_next_species(GBDATA *gb_species)
const char * get_data() const
long GBT_get_species_count(GBDATA *gb_main)
GB_transaction ta(gb_var)
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)
GB_CSTR GBT_get_name_or_description(GBDATA *gb_item)
GBDATA * GB_entry(GBDATA *father, const char *key)
void inc_and_check_user_abort(GB_ERROR &error)
char * GBS_global_string_copy(const char *templat,...)