37 #define awt_assert(cond) arb_assert(cond)
41 typedef map<string, AW_window*>
WinMap;
56 : awar_name(awar_name_)
60 virtual const char *get_macro_id()
const = 0;
61 virtual const char *get_title()
const = 0;
70 WinMap::iterator found = window_map.find(awar_name);
71 if (found == window_map.end()) {
72 AW_window_simple *aws =
new AW_window_simple;
74 aws->load_xfig(
"select_simple.fig");
82 aws->create_button(
"CLOSE",
"CLOSE",
"C");
86 window_map[awar_name] = aws;
90 found->second->activate();
96 WinMap SelectionListSpec::window_map;
112 char *ali_type_match;
116 ali_type_match(nulldup(ali_type_match_))
120 GBDATA *gb_presets = get_gbd();
127 char *alignment_type =
GBT_read_string(gb_alignment,
"alignment_type");
130 if (!alignment_type) alignment_type =
ARB_strdup(
"<undef>");
134 if (!*str) insert(alignment_name, alignment_name);
136 free(alignment_type);
137 free(alignment_name);
143 freedup(ali_type_match, new_ali_type_match);
150 string ali_type_match;
161 ali_type_match(ali_type_match_)
165 const char *
get_title()
const {
return "Select alignment"; }
179 (
new ALI_sellst_spec(varname, gb_main, ali_type_match))->createButton(aws);
202 if (!tree_names.
empty()) {
203 int maxTreeNameLen = 0;
204 for (
int i = 0; tree_names[i]; ++i) {
205 const char *
tree = tree_names[i];
206 int len = strlen(tree);
207 if (len>maxTreeNameLen) maxTreeNameLen = len;
209 for (
int i = 0; tree_names[i]; ++i) {
210 const char *
tree = tree_names[i];
241 #define PT_SERVERNAME_LENGTH 23 // that's for buttons
242 #define PT_SERVERNAME_SELLIST_WIDTH 30 // this for lists
245 typedef list<PT_selection*> PT_selections;
247 static PT_selections ptserver_selections;
253 static void refresh_all();
256 PT_selection::PT_selections PT_selection::ptserver_selections;
262 while (pt_servers[count]) count++;
264 for (
int i=0; i<count; i++) {
270 insert(choice, (
long)i);
274 insert_default(
"-undefined-", (
long)-1);
278 PT_selections::iterator end = ptserver_selections.end();
279 for (PT_selections::iterator pts_sel = ptserver_selections.begin(); pts_sel != end; ++pts_sel) {
280 (*pts_sel)->refresh();
290 if (ptserver_selections.empty()) {
294 ptserver_selections.push_back(
this);
312 char *fullname =
NULp;
317 printf(
"awar given to ptserver-selection does not contain a valid index (index=%i)\n", index);
323 if (!fullname) fullname =
ARB_strdup(
"-undefined-");
325 int len = strlen(fullname);
328 int remove = len-maxlength;
331 strcpy(fullname+2, fullname+2+
remove);
344 AW_window_simple *aw_popup =
new AW_window_simple;
346 aw_popup->init(aw_root,
"SELECT_PT_SERVER",
"Select a PT-Server");
349 const char *CLOSE_ID =
"CLOSE";
351 aw_popup->at_newline();
355 aw_popup->at_newline();
357 aw_popup->create_button(CLOSE_ID,
"CLOSE",
"C");
359 aw_popup->window_fit();
371 int ptserver_index = awar_ptserver->
read_int();
373 if (ptserver_index<0) {
375 awar_ptserver->
write_int(ptserver_index);
394 free(awar_buttontext_name);
416 comment = null2empty(cmt);
417 for (
int area = 0; area<2; ++area) {
436 if (!config.
empty()) {
439 int *count =
new int[config.
size()];
440 string *comment =
new string[config.
size()];
442 for (
int c = 0; config[c]; ++c) {
443 maxlen =
max(maxlen,
int(strlen(config[c])));
445 maxcount =
max(maxcount, count[c]);
448 for (
int c = 0; config[c]; ++c) {
450 insert(
GBS_global_string(
"%-*s %*s(%i) %s", maxlen, config[c], (maxdigits-digits),
"", count[c], comment[c].c_str()), config[c]);
460 GBDATA *gb_configuration_data;
487 static SaiSelectionlistFilterCallback std_SAI_filter_cb = makeSaiSelectionlistFilterCallback(
get_SAI_description);
488 return std_SAI_filter_cb;
492 SaiSelectionlistFilterCallback filter_cb;
515 char *res = filter_cb(gb_extended);
521 sel->
sort(
false,
false);
529 SaiSelectionlistFilterCallback filter_cb;
571 for (
size_t i = 0; i<display.
size() && !
error; ++i) {
572 const char *disp = display[i];
574 if (disp[0] ==
'#') {
575 error =
"Invalid character '#' at start of displayed text (won't load)";
578 if (strchr(disp,
',')) {
580 error =
"Invalid character ',' in displayed text (won't load correctly)";
585 const char *val = value[i];
586 if (strcmp(disp, val) == 0) {
603 for (
size_t i = 0; i<line.
size(); ++i) {
604 if (line[i][0] ==
'#')
continue;
606 const char *comma = strchr(line[i],
',');
611 const char *rest = comma+strspn(comma,
" \t");
613 value.put(unescaped);
643 StrArray display, values;
651 if (number_of_lines>0) {
652 display.resize(number_of_lines);
653 values.resize(number_of_lines);
657 if (display.size()<1) {
658 error =
"List is empty (did not save)";
662 error = list2file(display, values, line);
665 error =
"list>file conversion produced nothing (internal error)";
668 FILE *out = fopen(filename,
"wt");
674 for (
size_t i = 0; i<line.size(); ++i) {
675 if (!warning && strchr(line[i],
'\n')) {
676 warning =
"Warning: Saved content contains LFs (loading will be impossible)";
698 "(one possibility is to enter '*.%s')'",
707 for (
int f = 0; fnames[f] && !
error; ++f) {
708 FILE *in = fopen(fnames[f],
"rb");
722 if (!append) sellist->
clear();
725 StrArray displayed, values;
726 error = file2list(lines, displayed, values);
728 int dsize = displayed.size();
729 int vsize = values.size();
731 if (dsize != vsize) {
732 error =
GBS_global_string(
"Error in translation (value/display mismatch: %i!=%i)", vsize, dsize);
735 for (
int i = 0; i<dsize; ++i) {
736 sellist->
insert(displayed[i], values[i]);
799 AW_window_simple *aws =
new AW_window_simple;
804 aws->init(aw_root, window_id, window_title);
805 aws->load_xfig(
"sl_s_box.fig");
807 aws->button_length(10);
811 aws->create_button(
"CANCEL",
"CANCEL",
"C");
815 aws->callback(makeWindowCallback(
save_list_cb, storabsellist));
816 aws->create_button(
"SAVE",
"SAVE",
"S");
819 aws->create_option_menu(awar_line_anz);
820 aws->insert_default_option(
"all",
"a", 0);
821 aws->insert_option (
"10",
"", 10);
822 aws->insert_option (
"50",
"", 50);
823 aws->insert_option (
"100",
"", 100);
824 aws->insert_option (
"500",
"", 500);
825 aws->insert_option (
"1000",
"", 1000);
826 aws->insert_option (
"5000",
"", 5000);
827 aws->insert_option (
"10000",
"", 10000);
828 aws->update_option_menu();
851 AW_window_simple *aws =
new AW_window_simple;
856 aws->init(aw_root, window_id, window_title);
857 aws->load_xfig(
"sl_l_box.fig");
861 aws->create_button(
"CANCEL",
"CANCEL",
"C");
865 aws->callback(makeWindowCallback(
load_list_cb, storabsellist));
866 aws->create_button(
"LOAD",
"LOAD",
"L");
869 aws->label(
"Append?");
870 aws->create_toggle(awar_append);
879 free(awar_base_name);
899 const char *default_directory,
900 const char *file_extension,
901 char **set_file_name_awar,
902 const WindowCallback& ok_cb,
903 const WindowCallback& close_cb,
904 const char *close_button_text)
938 if (set_file_name_awar) {
942 AW_window_simple *aws =
new AW_window_simple;
945 sprintf(title,
"%s %s", action, what);
946 aws->init(aw_root, title, title);
947 aws->load_xfig(
"load_box.fig");
951 aws->callback(close_cb);
952 if (close_button_text) {
953 aws->create_button(
"CLOSE", close_button_text,
"");
956 aws->create_button(
"CLOSE",
"CLOSE",
"C");
963 aws->create_button(
"HELP",
"HELP");
967 aws->callback(ok_cb);
968 aws->create_autosize_button(
"GO", action);
980 #define SUBSET_NOELEM_DISPLAY "<none>"
994 const char *parent_awar_name = parent_sellist.
get_awar_name();
1001 aw_root->awar_string(awar_name);
1004 finish_fill_box(&parent_sellist, sub_sellist);
1011 void callChangedCallback(
bool interactive_change) {
if (subChanged_cb) subChanged_cb(
this, interactive_change, cl_user); }
1016 parent_sellist(parent_sellist_),
1017 subChanged_cb(subChanged_cb_),
1020 callChangedCallback(
false);
1037 if (subset_list->
get_index_of(*listEntry.get_value()) == -1) {
1038 subset_list->
insert(listEntry.get_displayed(), *listEntry.get_value());
1041 finish_fill_box(whole_list, subset_list);
1064 int old_position = subset_list->
get_index_of(selected);
1067 finish_fill_box(whole_list, subset_list);
1075 subset_list->
clear();
1076 finish_fill_box(whole_list, subset_list);
1079 callChangedCallback(
true);
1087 StrArray listContent;
1088 subset_list->
to_array(listContent,
true);
1090 int old_pos = listContent.index_of(selected.
get_string());
1094 case ARM_TOP: new_pos= 0;
break;
1095 case ARM_UP: new_pos= old_pos-1;
break;
1096 case ARM_DOWN: new_pos= old_pos+1;
break;
1099 if (old_pos != new_pos) {
1100 listContent.move(old_pos, new_pos);
1105 callChangedCallback(
true);
1111 typedef std::set<const char*, charpLess> Entries;
1113 bool deleted =
false;
1124 int size = subsel->
size();
1126 for (
int i = 0; i<size; ++i) {
1136 callChangedCallback(
false);
1142 subset_list->
clear();
1144 for (
size_t e = 0; e<values.
size(); ++e) {
1145 const char *value = values[e];
1157 finish_fill_box(&parent_sellist, subset_list);
1158 callChangedCallback(
false);
1186 bool move_rightwards = x_list>x_buttons;
const char * GBS_ptserver_logname(void)
void awt_create_PTSERVER_selection_button(AW_window *aws, const char *varname)
const char * default_select_value() const
void insert_default(const char *displayed, const char *value)
GBDATA * GBT_first_SAI(GBDATA *gb_main)
static GB_ERROR standard_file2list(const CharPtrArray &line, StrArray &display, StrArray &value)
void sort(bool backward, bool case_sensitive)
#define PT_SERVERNAME_LENGTH
void awt_create_ALI_selection_button(GBDATA *gb_main, AW_window *aws, const char *varname, const char *ali_type_match)
void button_length(int length)
int get_at_xposition() const
#define PT_SERVERNAME_SELLIST_WIDTH
static char * readable_pt_servername(int index, int maxlength)
bool getLine(string &line)
void createButton(AW_window *aws) const
SAI_sellst_spec(const char *awar_name_, GBDATA *gb_main_, const SaiSelectionlistFilterCallback &fcb)
void select_element_at(int wanted_index)
const char * get_awar_name() const
const TypedSelectionList & get_typedsellist() const
void insert_default(const char *displayed, const AW_scalar &value)
SelectionListSpec(const char *awar_name_)
GBDATA * GB_nextEntry(GBDATA *entry)
void awt_edit_arbtcpdat_cb(AW_window *)
void AW_create_standard_fileselection(AW_window *aws, const char *awar_prefix)
static void popup_SelectionListSpec_cb(UNFIXED, const SelectionListSpec *spec)
void AW_edit_notified(const char *path, const FileChangedCallback &callback)
GB_ERROR GB_IO_error(const char *action, const char *filename)
char * ARB_strdup(const char *str)
AW_subset_selection(AW_window *aww, AW_selection_list &parent_sellist_, SubsetChangedCb subChanged_cb_, AW_CL cl_user_)
void set_awar_value(const AW_scalar &new_value)
void delete_element_at(int index)
const char * GBS_global_string(const char *templat,...)
void warning(int warning_num, const char *warning_message)
char * AW_get_selected_fullname(AW_root *awr, const char *awar_prefix)
static char * alignment_name
int getConfigInfo(const char *name, string &comment)
const SaiSelectionlistFilterCallback & awt_std_SAI_filter_cb()
char * GBS_string_eval(const char *insource, const char *icommand)
void AW_POPDOWN(AW_window *window)
void create_print_box_for_selection_lists(AW_window *aw_window, const TypedSelectionList *typedsellist)
char * GBS_escape_string(const char *str, const char *chars_to_escape, char escape_char)
char * ARB_stringdup(const std::string &str)
char * GBS_string_2_key(const char *str)
bool default_is_selected() const
GBDATA * GBT_get_tree_data(GBDATA *gb_main)
char * ARB_strpartdup(const char *start, const char *end)
AW_selection_list * get_sellist() const
static void arbtcpdat_changed_cb(const char *)
char * GBS_ptserver_id_to_choice(int i, int showBuild)
AWT_configuration_selection(AW_selection_list *sellist_, GBDATA *gb_configuration_data)
void awt_reconfigure_ALI_selection_list(AW_DB_selection *dbsel, const char *ali_type_match)
void insert(const char *displayed, const char *value)
GB_ERROR GB_incur_error_if(bool error_may_occur)
AW_awar * add_callback(const RootCallback &cb)
struct Unfixed_cb_parameter * UNFIXED
void collect_subset_cb(awt_collect_mode what)
void AWT_create_ascii_print_window(AW_root *awr, const char *text_to_print, const char *title)
void insert(const char *displayed, const AW_scalar &value)
const char * get_title() const
const char * get_string() const
const char * get_macro_id() const
static char * get_SAI_description(GBDATA *gb_extended)
void to_array(StrArray &array, bool values)
GB_ERROR GB_await_error()
static AW_root * SINGLETON
static void load_list_cb(AW_window *aww, const StorableSelectionList *storabsellist)
WindowCallback makeHelpCallback(const char *helpfile)
char * GBT_read_string(GBDATA *gb_container, const char *fieldpath)
static void ptserverlog_changed_cb(const char *)
ALI_selection(AW_selection_list *sellist_, GBDATA *gb_presets, const char *ali_type_match_)
static void save_list_cb(AW_window *aww, const StorableSelectionList *storabsellist)
const AW_scalar * get_value_at(int index)
GB_TYPES get_awar_type() const
const char * GBT_tree_info_string(GBDATA *gb_main, const char *tree_name, int maxTreeNameLen)
void set_update_callback(sellist_update_cb ucb, AW_CL cl_user)
CONSTEXPR_INLINE int digits(int parts)
void AW_add_inotification(const char *file, const FileChangedCallback &fccb)
GBT_CONFIG_ITEM_TYPE type
const char * get_macro_id() const
const char * get_filter() const
static void refresh_all()
int get_index_of(const AW_scalar &searched_value)
const char * get_comment() const
static void error(const char *msg)
void AW_create_fileselection_awars(AW_root *awr, const char *awar_base, const char *directories, const char *filter, const char *file_name)
#define NO_CONFIG_SELECTED
AW_window * create_load_box_for_selection_lists(AW_root *aw_root, const StorableSelectionList *storabsellist)
const char * get_displayed()
static void reorder_subset_cb(AW_window *, awt_reorder_mode dest, AW_subset_selection *subsel)
char * get_shared_sellist_awar_name(const TypedSelectionList &typedsellst, const char *name)
AW_DB_selection * awt_create_CONFIG_selection_list(GBDATA *gb_main, AW_window *aws, const char *varname)
static void update_ptserver_button(AW_root *, AW_awar *awar_ptserver, AW_awar *awar_buttontext_name)
const char * default_select_display() const
PT_selection(AW_selection_list *sellist_)
virtual ~SelectionListSpec()
void reorder_subset_cb(awt_reorder_mode dest)
SAI_selection(AW_selection_list *sellist_, GBDATA *gb_sai_data, const SaiSelectionlistFilterCallback &fcb)
AW_awar * awar(const char *awar)
void awt_create_order_buttons(AW_window *aws, awt_orderfun reorder_cb, AW_CL cl_user)
void GBS_read_dir(StrArray &names, const char *dir, const char *mask)
int get_button_length() const
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)
AW_DB_selection * awt_create_TREE_selection_list(GBDATA *gb_main, AW_window *aws, const char *varname)
void AW_refresh_fileselection(AW_root *awr, const char *awar_prefix)
const char * get_title() const
void awt_clear_selection_list_cb(AW_window *, AW_selection_list *sellist)
void(* SubsetChangedCb)(AW_selection *, bool interactive_change, AW_CL cl_user)
char * GBS_unescape_string(const char *str, const char *escaped_chars, char escape_char)
AWT_tree_selection(AW_selection_list *sellist_, GBDATA *gb_tree_data)
AW_DB_selection * awt_create_SAI_selection_list(GBDATA *gb_main, AW_window *aws, const char *varname, const SaiSelectionlistFilterCallback &fcb)
GBDATA * GBT_next_SAI(GBDATA *gb_sai)
const char *const * GBS_get_arb_tcp_entries(const char *matching)
void create_input_field(const char *awar_name, int columns=0)
fputs(TRACE_PREFIX, stderr)
static AW_window * create_PTSERVER_selection_window(AW_root *aw_root, const char *varname)
AW_awar * awar_int(const char *var_name, long default_value=0, AW_default default_file=AW_ROOT_DEFAULT)
void auto_space(int xspace, int yspace)
#define IF_ASSERTION_USED(x)
void awt_create_collect_buttons(AW_window *aws, bool collect_rightwards, awt_collectfun collect_cb, AW_CL cl_user)
const AW_scalar * get_value() const
void delete_entries_missing_in_parent()
const GBT_config_item & nextItem(GB_ERROR &error)
bool GB_is_directory(const char *path)
char * get_content_as_string(long number_of_lines)
void awt_auto_popdown_cb(AW_root *, AW_window_simple *aw_popup)
AW_DB_selection * awt_create_ALI_selection_list(GBDATA *gb_main, AW_window *aws, const char *varname, const char *ali_type_match)
const char * get_awar_name() const
AW_selection_list * get_parent_sellist() const
void awt_set_subset_selection_content(AW_selection *subset_sel_, const CharPtrArray &values)
AW_selection_list * create_selection_list(const char *awar_name, int columns, int rows)
void awt_popup_SAI_selection_list(AW_window *, const char *awar_name, GBDATA *gb_main)
void GBT_get_tree_names(ConstStrArray &names, GBDATA *gb_main, bool sorted)
char * GB_arbtcpdat_path(void)
static ARB_init_perl_interface init
map< string, AW_window * > WinMap
static void collect_subset_cb(AW_window *, awt_collect_mode what, AW_subset_selection *subsel)
AW_window * create_save_box_for_selection_lists(AW_root *aw_root, const StorableSelectionList *storabsellist)
void aw_message(const char *msg)
const char * get_default_display() const
void GBT_get_configuration_names(ConstStrArray &configNames, GBDATA *gb_main)
AW_selection_list * awt_create_selection_list_with_input_field(AW_window *aww, const char *awar_name, const char *at_box, const char *at_field)
GB_ERROR save(const char *filename, long number_of_lines=0) const
void AW_create_fileselection(AW_window *aws, const char *awar_prefix, const char *at_prefix, const char *pwd, DirDisplay disp_dirs, bool allow_wildcards)
const char * whats_contained() const
GB_ERROR write_string(const char *aw_string)
void awt_create_PTSERVER_selection_list(AW_window *aws, const char *varname)
const char * get_awar_name(const char *awar_base_name, const char *entry)
const char * get_unique_id() const
AW_DB_selection * create_list(AW_window *aws) const
const AW_scalar * get_default_value() const
GB_ERROR load(const char *filemask, bool append) const
GB_transaction ta(gb_var)
void callback(const WindowCallback &cb)
GB_CSTR GB_read_char_pntr(GBDATA *gbd)
void fill_entries_matching_values(const CharPtrArray &values)
void init_from_array(const CharPtrArray &entries, const char *default_displayed, const char *default_value)
AW_awar * awar_string(const char *var_name, const char *default_value="", AW_default default_file=AW_ROOT_DEFAULT)
static GB_ERROR standard_list2file(const CharPtrArray &display, const CharPtrArray &value, StrArray &line)
GBDATA * GBT_get_presets(GBDATA *gb_main)
GBDATA * GBT_get_SAI_data(GBDATA *gb_main)
GBDATA * GB_search(GBDATA *gbd, const char *fieldpath, GB_TYPES create)
void hide_or_notify(const char *error)
GB_CSTR GBT_get_name_or_description(GBDATA *gb_item)
AW_window * awt_create_load_box(AW_root *aw_root, const char *action, const char *what, const char *default_directory, const char *file_extension, char **set_file_name_awar, const WindowCallback &ok_cb, const WindowCallback &close_cb, const char *close_button_text)
static void correct_subselection_cb(AW_selection_list *parent_sel, AW_CL cl_subsel)
char * get_shared_sellist_awar_base(const TypedSelectionList &typedsellst)
GBDATA * get_gb_main(DbSel db)
static int info[maxsites+1]
void reconfigure(const char *new_ali_type_match)
const char * get_shared_id() const
GB_ERROR write_int(long aw_int)
StorableSelectionList(const TypedSelectionList &tsl_)
GBDATA * GB_entry(GBDATA *father, const char *key)
AW_scalar get_awar_value() const
AW_selection_list * get_sellist()
char * GBS_global_string_copy(const char *templat,...)
void awt_create_SAI_selection_button(GBDATA *gb_main, AW_window *aws, const char *varname, const SaiSelectionlistFilterCallback &fcb)
ALI_sellst_spec(const char *awar_name_, GBDATA *gb_main_, const char *ali_type_match_)
void create_button(const char *macro_name, AW_label label, const char *mnemonic=NULp, const char *color=NULp)