36 free(item_description);
43 const char *refs =
NULp;
48 else if (error_if_field_missing) {
61 const char *refs = ref.
get_refs(itemtype, gb_item);
69 size_t refCount = refNames.
size();
71 for (
size_t r = 0; r<refCount && !
error; ++r) {
75 referred.insert(gb_referred);
79 "in content of field '%s'\n"
106 gb_container && !
error;
113 error =
addRefsTo(referred, itemtype, gb_item, refsel);
118 if (!error) error = callback(gb_main, referred);
125 if (!error) error = callback(gb_main, referred);
135 #define AWAR_MARKBYREF "awt/refs/"
136 #define AWAR_MARKBYREF_ALL AWAR_MARKBYREF "which"
137 #define AWAR_MARKBYREF_FIELD AWAR_MARKBYREF "field"
138 #define AWAR_MARKBYREF_IGNORE_MISSING AWAR_MARKBYREF "ignore_missing"
139 #define AWAR_MARKBYREF_IGNORE_UNKNOWN AWAR_MARKBYREF "ignore_unknown"
140 #define AWAR_MARKBYREF_FILTER AWAR_MARKBYREF "filter"
142 #define AWAR_MARKBYREF_TEMP "tmp/awt/refs/"
143 #define AWAR_MARKBYREF_SELECTED AWAR_MARKBYREF_TEMP "selected"
144 #define AWAR_MARKBYREF_CONTENT AWAR_MARKBYREF_TEMP "content"
145 #define AWAR_MARKBYREF_RESULT AWAR_MARKBYREF_TEMP "result"
187 const char *refs = refsel.
get_refs(itemtype, gb_item);
197 char *
result = refsel.filter_refs(refs, gb_item);
247 {
"*relatives_used_by_aligner",
"For use with 'used_rels' entry as\ngenerated by fast-aligner.",
"field='used_rels';filter='/:[0-9]+//'" },
248 {
"*next_relatives_of_listed",
"For use with entries generated by\n'Search next relatives of listed'.",
"field='tmp';filter='/[0-9.]+[%]://'" },
254 AW_window_simple *aws =
new AW_window_simple;
258 aws->init(aw_root, window_id, title);
260 aws->auto_space(PAD, PAD);
265 aws->create_button(
"CLOSE",
"CLOSE",
"C");
268 aws->create_button(
"HELP",
"HELP",
"H");
270 const int LABEL_LENGTH = 27;
271 const int LABEL_SHORTL = 10;
272 aws->label_length(LABEL_LENGTH);
274 const int HEIGHT_IF = 32;
275 const int HEIGHT_SB = 25;
276 const int HEIGHT_DF = 18;
280 char *items_name = strdup(itemtype.
items_name);
281 items_name[0] = toupper(items_name[0]);
286 aws->insert_option(
"Marked",
"M", 0);
287 aws->insert_option(
"All",
"A", 1);
288 aws->update_option_menu();
291 aws->at_attach_to(
true,
false, -PAD, HEIGHT_SB);
292 aws->label(
"Field containing references");
296 aws->label(
"Ignore if field missing?");
300 aws->at_attach_to(
true,
false, -PAD, HEIGHT_IF);
301 aws->label(
"Filter content by ACI");
304 aws->label_length(LABEL_SHORTL);
307 aws->at_attach_to(
true,
false, -PAD, HEIGHT_DF);
308 aws->label(
"Selected");
312 aws->at_attach_to(
true,
false, -PAD, HEIGHT_DF);
313 aws->label(
"Content");
317 aws->at_attach_to(
true,
false, -PAD, HEIGHT_DF);
318 aws->label(
"Result");
321 aws->label_length(LABEL_LENGTH);
324 aws->label(
"Ignore unknown references?");
327 if (build_client_area) build_client_area(aws);
331 aws->create_autosize_button(
"ACTION", action,
"");
333 aws->at_attach(-PAD, PAD);
#define AWAR_MARKBYREF_FIELD
ARB_ERROR with_all_referred_items(GBDATA *gb_item, const RefSelector &refsel, referred_item_handler cb)
ItemSelector & get_referring_item() const
bool ignore_unknown_refs() const
#define AWAR_MARKBYREF_FILTER
AliDataPtr format(AliDataPtr data, const size_t wanted_len, GB_ERROR &error)
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)
#define AWAR_MARKBYREF_RESULT
const char * GBS_global_string(const char *templat,...)
char * GBS_string_eval(const char *insource, const char *icommand)
void AW_POPDOWN(AW_window *window)
static AWT_config_mapping_def markByRef_config_mapping[]
static AWT_predefined_config markByRef_predefined_config[]
GB_ERROR GB_incur_error_if(bool error_may_occur)
AW_awar * add_callback(const RootCallback &cb)
static void bind_result_refresh_cbs(AW_root *aw_root, ReferringEntriesHandler *reh)
void create_itemfield_selection_button(AW_window *aws, const FieldSelDef &selDef, const char *at)
const char * read_char_pntr() const
GB_ERROR GB_export_error(const char *error)
GB_ERROR GB_await_error()
#define AWAR_MARKBYREF_IGNORE_UNKNOWN
WindowCallback makeHelpCallback(const char *helpfile)
ARB_ERROR(* referred_item_handler)(GBDATA *gb_main, const DBItemSet &referred)
std::set< GBDATA * > DBItemSet
AW_window * create_refentries_window(AW_root *aw_root, ReferringEntriesHandler *reh, const char *window_id, const char *title, const char *help, client_area_builder build_client_area, const char *action, referred_item_handler action_cb)
GBDATA *(* get_selected_item)(GBDATA *gb_main, AW_root *aw_root)
GBDATA *(* get_first_item_container)(GBDATA *, AW_root *, QUERY_RANGE)
static void error(const char *msg)
GBDATA * GB_get_root(GBDATA *gbd)
GBDATA *(* get_next_item_container)(GBDATA *, QUERY_RANGE)
#define AWAR_SPECIES_NAME
static ARB_ERROR addRefsTo(DBItemSet &referred, ItemSelector &itemtype, GBDATA *gb_item, const RefSelector &ref)
void(* client_area_builder)(AW_window *aw_reh)
char *(* generate_item_id)(GBDATA *gb_main, GBDATA *gb_item)
AW_awar * awar(const char *awar)
GBDATA *(* get_first_item)(GBDATA *, QUERY_RANGE)
static void perform_refentries(AW_window *aww, ReferringEntriesHandler *reh, referred_item_handler ricb)
#define AWAR_MARKBYREF_ALL
const char * get_field() const
GBDATA *(* get_next_item)(GBDATA *, QUERY_RANGE)
GBDATA * get_gbmain() const
AW_awar * awar_int(const char *var_name, long default_value=0, AW_default default_file=AW_ROOT_DEFAULT)
static ARB_ERROR generate_item_error(const char *format, ItemSelector &itemtype, GBDATA *gb_item)
#define AWAR_MARKBYREF_IGNORE_MISSING
#define AWAR_MARKBYREF_SELECTED
ItemSelector & SPECIES_get_selector()
#define AWAR_MARKBYREF_CONTENT
GBDATA *(* find_item_by_id)(GBDATA *gb_main, const char *id)
void create_refentries_awars(AW_root *aw_root, AW_default aw_def)
GB_ERROR write_string(const char *aw_string)
void GBT_split_string(ConstStrArray &dest, const char *namelist, const char *separator, SplitMode mode)
NOT4PERL char * GB_command_interpreter_in_env(const char *str, const char *commands, const GBL_call_env &callEnv)
GB_transaction ta(gb_var)
const char * get_refs(ItemSelector &itemtype, GBDATA *gb_item) const
GB_CSTR GB_read_char_pntr(GBDATA *gbd)
static void refresh_result_cb(AW_root *aw_root, ReferringEntriesHandler *reh)
AW_awar * awar_string(const char *var_name, const char *default_value="", AW_default default_file=AW_ROOT_DEFAULT)
CONSTEXPR long FIELD_FILTER_STRING
GBDATA * GB_entry(GBDATA *father, const char *key)
char * filter_refs(const char *refs, GBDATA *gb_item) const
void aw_message_if(GB_ERROR error)
char * GBS_global_string_copy(const char *templat,...)