30 #define MAXPOINTS (2*MAXLINES)
45 int point(
int x,
int y) {
48 xpos[points] = char_width-x;
56 int line(
int p1,
int p2) {
66 int horizontal_line(
int x,
int y,
int half_width) {
67 return line(point(x-half_width, y), point(x+half_width, y));
77 for (
int l=0; l<lines; l++) {
85 void get_bounding_box(
int x,
int y,
int &xmin,
int &ymin,
int &xmax,
int &ymax)
const {
87 xmin = ymin = INT_MAX;
88 xmax = ymax = INT_MIN;
89 for (
int p=0; p<points; p++) {
90 if (xpos[p]<xmin) { xmin = xpos[p]; }
91 else if (xpos[p]>xmax) { xmax = xpos[p]; }
92 if (ypos[p]<ymin) { ymin = ypos[p]; }
93 else if (ypos[p]>ymax) { ymax = ypos[p]; }
106 reverse = reverse_cursor;
107 char_width = character_width;
113 #define UPPER_OFFSET (-1)
114 #define LOWER_OFFSET (term_height-1)
115 #define CWIDTH (character_width)
156 int small_version = (term_height <= 10) ? 1 : 0;
159 #define UPPER_OFFSET 0
160 #define LOWER_OFFSET (term_height-1)
183 if (!small_version) {
191 if (draw_upper) line(pu, pu);
209 #define OUTER_HEIGHT (term_height/4)
210 #define INNER_HEIGHT (term_height-1)
215 #if (2*STEPS+THICKNESS > MAXLINES)
216 #error Bad definitions!
234 for (s=0; s<
STEPS; s++) {
241 int y_upper = ypos[s-4];
242 int y_lower = ypos[s-2];
246 int xp = x-(THICKNESS/2)+t+1;
247 line(point(xp, y_upper), point(xp, y_lower));
283 cursor_shape->
draw(
window()->get_device(),
int(x),
int(y));
285 #if defined(TRACE_REFRESH)
286 printf(
"draw_cursor(%i, %i)\n",
int(x),
int(y));
287 #endif // TRACE_REFRESH
305 const int MAX_AFFECTED = 3;
309 affected_terminal[affected++] = target_terminal->to_terminal();
313 bool backward =
true;
321 affected_terminal[affected++] = term;
326 if (!backward)
break;
328 term = target_terminal->to_terminal();
333 bool refresh_was_requested[MAX_AFFECTED];
334 e4_assert(affected >= 1 && affected <= MAX_AFFECTED);
335 for (
int a = 0; a<affected; ++a) {
346 int xmin, xmax, ymin, ymax;
351 #if defined(TRACE_REFRESH)
352 printf(
"delete_cursor(%i, %i)\n",
int(x),
int(y));
353 #endif // TRACE_REFRESH
357 #define EXPAND_SIZE 0
368 for (
int a = 0; a<affected; ++a) {
397 return remap->
screen_to_sequence(
size_t(screen_position)<=max_scrpos ? screen_position : max_scrpos);
404 bool did_unfold =
false;
406 while (group_manager_to_unfold && unfold_groups) {
407 group_manager_to_unfold->
unfold();
409 group_manager_to_unfold = is_in_folded_group();
415 if (!group_manager_to_unfold) {
428 ED4_species_manager *species_manager = name_term->get_parent(
LEV_SPECIES)->to_species_manager();
432 if (species_manager) jumped = species_manager->setCursorTo(cursor, -1, unfold_groups,
ED4_JUMP_KEEP_POSITION);
446 ED4_species_name_terminal *cursor_name_term =
NULp;
455 cursor_seq_term = cursor_term->to_sequence_terminal();
464 if (cursor_seq_term) {
470 if (name_term!=cursor_name_term) {
471 #if defined(TRACE_JUMPS)
472 printf(
"Jumping to species/SAI '%s'\n", name);
477 #if defined(TRACE_JUMPS)
478 printf(
"Change ignored because same name term!\n");
485 if (!ignore_selected_SAI_changes_cb) {
488 if (name && name[0]) {
489 #if defined(TRACE_JUMPS)
490 printf(
"Selected SAI is '%s'\n", name);
500 if (!ignore_selected_species_changes_cb) {
502 if (name && name[0]) {
503 #if defined(TRACE_JUMPS)
504 printf(
"Selected species is '%s'\n", name);
512 #if defined(TRACE_JUMPS)
513 printf(
"Change ignored because ignore_selected_species_changes_cb!\n");
523 if (name && name[0]) {
525 #if defined(TRACE_JUMPS)
526 printf(
"Jump to selected species (%s)\n", name);
549 if (consensus_name) {
550 if (strncmp(consensus_name->
id, start, strlen(start))==0) {
552 return cons_ms_man==ms_man;
563 return manager ? manager->to_multi_species_manager() :
NULp;
588 char *
buffer = ARB_alloc<char>(strlen(species_name)+3);
589 sprintf(buffer,
"-%c%s", is_SAI ?
'S' :
'L', species_name);
612 ED4_species_name_terminal *name_term = is_SAI
632 if (sai_name && sai_name[0]) {
653 e4_assert(species_name && species_name[0]);
675 if (name && name[0]) {
684 #define BUFFERSIZE 1000
713 int namelen = strlen(name);
716 if ((namelen+2)>buffree) {
725 memcpy(bp, name, namelen);
735 group_man->
table().add(data, len);
800 if (!last_value || strcmp(last_value, species_name) != 0) {
801 freeset(last_value, species_name);
803 #if defined(TRACE_JUMPS)
804 fprintf(stderr,
"Writing '%s' to awar '%s'\n", species_name, awar_name);
813 void ED4_cursor::updateAwars(
bool new_term_selected) {
820 static char *last_set_SAI =
NULp;
824 static char *last_set_species =
NULp;
858 int ecoli_pos = ecoli->
abs_2_rel(seq_pos+1);
879 if (seq_pos<groupTab.
size()) {
887 if (seq_pos<len) at[0] = seq[seq_pos];
914 int scroll_amount = curr_rel_pos-scroll_to_relpos;
917 scroll_amount = (scroll_amount/length_of_char)*length_of_char;
919 if (scroll_amount != 0) {
922 #if defined(TRACE_JUMPS)
923 printf(
"set_screen_relative_pos(%i) auto-scrolls %i\n", scroll_to_relpos, scroll_amount);
932 aw_message(
"First you have to place the cursor");
938 AW_pos terminal_x, terminal_y;
941 #if defined(TRACE_JUMPS)
942 printf(
"jump_screen_pos(%i)\n", screen_pos);
950 int cursor_diff = screen_pos-screen_position;
951 if (cursor_diff == 0) {
957 int abs_x_new = cursor_abs_x+cursor_diff*length_of_char;
966 int scroll_new_to = -1;
972 bool was_in_screen = rel_x >= 0 && rel_x <= screen_width;
973 if (!was_in_screen) {
992 if (left_margin >= right_margin) scroll_new_to = screen_width/2;
993 else if (abs_x_new > right_margin) scroll_new_to = screen_width-margin;
994 else if (abs_x_new < left_margin) scroll_new_to = margin;
999 if (scroll_new_to >= 0) {
1001 int scroll_amount = rel_x_new-scroll_new_to;
1003 if (scroll_amount>0) scroll_amount += length_of_char/2;
1004 else if (scroll_amount<0) scroll_amount -= length_of_char/2;
1006 scroll_amount = (scroll_amount/length_of_char)*length_of_char;
1007 if (scroll_amount != 0) {
1010 #if defined(TRACE_JUMPS)
1011 printf(
"jump_screen_pos auto-scrolls %i\n", scroll_amount);
1019 if (cursor_diff >= 0) {
1025 #if defined(ASSERTION_USED)
1041 #if defined(ASSERTION_USED)
1049 int scr_left, scr_right;
1059 #if defined(ASSERTION_USED)
1071 has_base_at(
int seq_pos_,
bool want_base_) : seq_pos(seq_pos_), want_base(want_base_) {}
1073 bool test_succeeded =
false;
1085 return test_succeeded;
1101 int last_m = starting_point->
members()-1;
1123 bool pos_beyond = (cursor_move ==
ED4_C_UP) ? y<current_y : y>current_y;
1125 bool skip_top_scrolled =
false;
1131 skip_top_scrolled = y<y_area;
1135 if (!skip_top_scrolled) {
1143 if (m == last_m)
break;
1158 bool endHome =
false;
1194 if (!target_terminal) {
1198 dir == ED4_C_UP ? 0 : INT_MAX,
false,
1208 bool isScreen =
false;
1219 if (target_terminal) {
1236 AW_pos x=0, y=0, x_help = 0, y_help;
1241 case ED4_C_RIGHT: screen_position += move_pos;
break;
1242 case ED4_C_LEFT: screen_position -= move_pos;
break;
1252 x_help = cursor_abs_x + offset_x;
1258 #if defined(DEBUG) && 0
1259 else printf(
"Skip draw_cursor (allowed_to_draw=false)\n");
1262 cursor_abs_x += offset_x;
1283 printf(
"is_hidden_inside_group=true\n");
1293 bool visible =
false;
1316 bool visible =
false;
1327 #if defined(DEBUG) && 0
1328 #define DUMP_SCROLL_INTO_VIEW
1342 bool scroll =
false;
1347 AW_pos termw_y_upper = termw_y;
1348 AW_pos termw_y_lower = termw_y + term_height;
1351 if (termw_y_upper < coords->window_upper_clip_point) {
1352 #ifdef DUMP_SCROLL_INTO_VIEW
1353 printf(
"termw_y_upper(%i) < window_upper_clip_point(%i)\n",
1361 #ifdef DUMP_SCROLL_INTO_VIEW
1362 printf(
"termw_y_lower(%i) > window_lower_clip_point(%i)\n",
1371 #ifdef DUMP_SCROLL_INTO_VIEW
1373 printf(
"No scroll needed (termw_y_upper=%i termw_y_lower=%i term_height=%i window_upper_clip_point=%i window_lower_clip_point=%i)\n",
1374 int(termw_y_upper),
int(termw_y_lower), term_height,
1383 int slider_pos_yrange = pic_ysize - win_ysize;
1385 if (slider_pos_yrange<0) {
1394 slider_pos_y = direction ==
ED4_C_UP ? 0 : slider_pos_yrange;
1398 if (slider_pos_y>slider_pos_yrange) slider_pos_y = slider_pos_yrange;
1399 if (slider_pos_y<0) slider_pos_y = 0;
1410 if (new_term_selected) {
1429 updateAwars(new_term_selected);
1448 screen_position = scr_pos;
1453 AW_pos world_y = termw_y;
1459 cursor_abs_x = (
long int)world_x;
1462 draw_cursor(win_x, win_y);
1465 updateAwars(new_term_selected);
1487 void ED4_base_position::remove_changed_cb() {
1498 void ED4_base_position::calc4term(
const ED4_terminal *base) {
1506 if (base != calced4term) {
1507 remove_changed_cb();
1511 bool (*isGap_fun)(
char);
1512 if (species_manager->is_consensus_manager()) {
1534 if (!term)
return 0;
1539 if (!term)
return 0;
1603 aw_message(
"First you have to place the cursor.");
1639 aw_message(
"First you have to place the cursor.");
1669 struct test_absrel {
1671 test_absrel(
bool r) : torel(r) {}
1672 virtual ~test_absrel() {}
1674 virtual int a2r(
int a)
const = 0;
1675 virtual int r2a(
int r)
const = 0;
1677 virtual int abs_size()
const = 0;
1678 virtual int rel_size()
const = 0;
1680 int gen(
int i)
const {
return torel ? a2r(i) : r2a(i); }
1681 int get_size()
const {
return torel ? abs_size()+1 : rel_size(); }
1683 char *genResult()
const;
1687 const test_absrel& me;
1688 membind(
const test_absrel&
ta) : me(ta) {}
1689 int operator()(
int i)
const {
return me.gen(i); }
1692 char *test_absrel::genResult()
const {
1696 struct test_ecoli :
public test_absrel {
1698 test_ecoli(
BI_ecoli_ref& b,
bool to_rel) : test_absrel(to_rel), eref(b) {}
1705 struct test_basepos :
public test_absrel {
1708 : test_absrel(to_rel), bpos(bpos_) {}
1715 #define TEST_ABSREL_EQUALS(tester,expected) do { \
1716 char *res = tester.genResult(); \
1717 TEST_EXPECT_EQUAL(res,expected); \
1721 #define TEST_ECOLIREF_EQUALS(data,alen,a2r,r2a) do { \
1722 BI_ecoli_ref eref; \
1723 eref.init(data,alen); \
1724 TEST_ABSREL_EQUALS(test_ecoli(eref, true), a2r); \
1725 TEST_ABSREL_EQUALS(test_ecoli(eref, false), r2a); \
1729 #define TEST_BASE_POS_EQUALS(data,a2r,r2a) do { \
1731 BasePosition bpos(data, strlen(data), CharPredicate(ED4_is_gap_character)); \
1732 TEST_ABSREL_EQUALS(test_basepos(bpos, true), a2r); \
1733 TEST_ABSREL_EQUALS(test_basepos(bpos, false), r2a); \
1737 void TEST_BI_ecoli_ref() {
1738 TEST_ECOLIREF_EQUALS(
"-.AC-G-T-.", 10,
1739 " [0] 0 0 0 1 2 2 3 3 4 4 4 [4]",
1740 " [0] 2 3 5 7 [7]");
1742 TEST_ECOLIREF_EQUALS(
"-", 1,
" [0] 0 0 [0]",
" [0] [0]");
1743 TEST_ECOLIREF_EQUALS(
"--A", 1,
" [0] 0 0 [0]",
" [0] [0]");
1744 TEST_ECOLIREF_EQUALS(
"--", 2,
" [0] 0 0 0 [0]",
" [0] [0]");
1745 TEST_ECOLIREF_EQUALS(
"---", 3,
" [0] 0 0 0 0 [0]",
" [0] [0]");
1747 TEST_ECOLIREF_EQUALS(
"A", 1,
" [0] 0 1 [1]",
" [0] 0 [0]");
1748 TEST_ECOLIREF_EQUALS(
"A", 2,
" [0] 0 1 1 [1]",
" [0] 0 [0]");
1750 TEST_ECOLIREF_EQUALS(
"A-", 2,
" [0] 0 1 1 [1]",
" [0] 0 [0]");
1751 TEST_ECOLIREF_EQUALS(
"-A", 2,
" [0] 0 0 1 [1]",
" [0] 1 [1]");
1753 TEST_ECOLIREF_EQUALS(
"A", 3,
" [0] 0 1 1 1 [1]",
" [0] 0 [0]");
1754 TEST_ECOLIREF_EQUALS(
"A--", 3,
" [0] 0 1 1 1 [1]",
" [0] 0 [0]");
1755 TEST_ECOLIREF_EQUALS(
"-A-", 3,
" [0] 0 0 1 1 [1]",
" [0] 1 [1]");
1756 TEST_ECOLIREF_EQUALS(
"--A", 3,
" [0] 0 0 0 1 [1]",
" [0] 2 [2]");
1759 void TEST_base_position() {
1762 TEST_BASE_POS_EQUALS(
"-.AC-G-T-.",
1763 " [0] 0 0 1 2 3 3 4 4 5 5 6 [6]",
1764 " [0] 1 2 3 5 7 9 [9]");
1769 TEST_BASE_POS_EQUALS(
"-.AC-G-T-.",
1770 " [0] 0 0 0 1 2 2 3 3 4 4 4 [4]",
1771 " [0] 2 3 5 7 [7]");
1773 TEST_BASE_POS_EQUALS(
"-",
" [0] 0 0 [0]",
" [0] [0]");
1774 TEST_BASE_POS_EQUALS(
"--",
" [0] 0 0 0 [0]",
" [0] [0]");
1775 TEST_BASE_POS_EQUALS(
"---",
" [0] 0 0 0 0 [0]",
" [0] [0]");
1777 TEST_BASE_POS_EQUALS(
"A",
" [0] 0 1 [1]",
" [0] 0 [0]");
1779 TEST_BASE_POS_EQUALS(
"A-",
" [0] 0 1 1 [1]",
" [0] 0 [0]");
1780 TEST_BASE_POS_EQUALS(
"-A",
" [0] 0 0 1 [1]",
" [0] 1 [1]");
1782 TEST_BASE_POS_EQUALS(
"A--",
" [0] 0 1 1 1 [1]",
" [0] 0 [0]");
1783 TEST_BASE_POS_EQUALS(
"-A-",
" [0] 0 0 1 1 [1]",
" [0] 1 [1]");
1784 TEST_BASE_POS_EQUALS(
"--A",
" [0] 0 0 0 1 [1]",
" [0] 2 [2]");
1787 #endif // UNIT_TESTS
virtual bool fulfilled_by(const ED4_terminal *) const =0
ED4_species_name_terminal * ED4_find_SAI_name_terminal(const char *sai_name)
bool is_pairpos(size_t pos) const
char * collectIntFunResults(FUN fun, int start, int end, int width, int try_underflow, int try_overflow)
void ED4_get_and_jump_to_current(AW_window *aww)
AW_device * get_device() const
const char * resolve_pointer_to_char_pntr(int *str_len=NULp) const FINAL_OVERRIDE
int screen_to_sequence(int screen_pos) const
GBDATA * GBT_first_marked_species(GBDATA *gb_main)
ED4_returncode move_cursor(AW_event *event)
void special_window_refresh(bool handle_updates)
const AW_bitset AW_SCREEN
AW_pos get_scrolled_picture_height() const
void set_to_terminal(ED4_terminal *terminal, int seq_pos, ED4_CursorJumpType jump_type)
int rel_2_abs(int rel) const
ED4_returncode ShowCursor(ED4_index offset_x, ED4_cursor_move move, int move_pos=1)
#define ED4_AWAR_CONSENSUS_GROUP
bool compile_needed() const
ED4_window * window() const
void ED4_store_curpos(AW_window *aww)
int reduceClipBorders(int top, int bottom, int left, int right)
void scroll_into_view(ED4_window *ed4w)
bool fulfilled_by(const ED4_terminal *) const OVERRIDE
void ED4_helix_jump_opposite(AW_window *aww)
ED4_base * member(ED4_index i) const
void ED4_horizontal_change_cb(AW_window *aww)
bool is_hidden() const FINAL_OVERRIDE
ED4_group_manager * is_in_folded_group() const
#define ED4_AWAR_FAST_CURSOR_JUMP
ED4_SearchResults & results() const
void ED4_selected_SAI_changed_cb(AW_root *)
GB_CSTR get_comment() const
virtual void clear_part(const AW::Rectangle &rect, AW_bitset filteri)
#define AWAR_CURSOR_POSITION
bool fulfilled_by(const ED4_terminal *terminal) const OVERRIDE
bool in_species_seq_terminal() const
static bool multi_species_man_consensus_id_starts_with(ED4_base *base, const char *start)
BaseFrequencies & table()
bool shows_xpos(int x) const
static CursorPos * get_head()
void initialize(const char *seq, int size)
bool is_shown(int seq_pos) const
int base2sequence_position(int base_pos) const
const char * GBS_global_string(const char *templat,...)
size_t opposite_position(size_t pos) const
char awar_path_for_IUPAC[50]
void draw(AW_device *device, int x, int y) const
ED4_update_info update_info
static void trace_termChange_in_global_awar(ED4_terminal *term, char *&last_value, bool &ignore_flag, const char *awar_name)
size_t get_max_screen_pos() const
int get_sequence_position(const ED4_terminal *base, int base_position)
const AW_bitset AW_ALL_DEVICES
ED4_terminal * owner_of_cursor
int slider_pos_horizontal
current position of the vertical slider
static bool is_consensus_gap(char c)
int get_base_position() const
int get_width(int gc) const
bool in_SAI_terminal() const
ED4_reference_terminals ref_terminals
static void ed4_bp_sequence_changed_cb(ED4_species_manager *, ED4_base_position *base_pos)
char awar_path_for_basePos[50]
char buffer[MESSAGE_BUFFERSIZE]
ED4_CursorShape(ED4_CursorType type, int term_height, int character_width, bool reverse_cursor)
ED4_base * find_first_that(ED4_level level, const ED4_basePredicate &fulfills_predicate)
int get_screen_pos() const
static void jump_to_corresponding_seq_terminal(ED4_species_name_terminal *name_term, bool unfold_groups)
void ED4_get_and_jump_to_species(GB_CSTR species_name)
void jump_screen_pos(int screen_pos, ED4_CursorJumpType jump_type)
bool has_property(ED4_properties prop) const
static HelixNrInfo * start
void world_to_win_coords(AW_pos *xPtr, AW_pos *yPtr) const
const AW::Position & calc_world_coords() const
GBDATA * GBT_find_SAI(GBDATA *gb_main, const char *name)
const char * read_char_pntr() const
char * build_consensus_string(PosRange range) const
bool is_hidden_inside_group() const
size_t GB_read_string_count(GBDATA *gbd)
#define ED4_AWAR_CURSOR_TYPE
void get_bounding_box(int x, int y, int &xmin, int &ymin, int &xmax, int &ymax) const
char * get_name_of_species()
void invalidate_species_counters()
char * GBT_read_string(GBDATA *gb_container, const char *fieldpath)
int abs_2_rel(int abs) const
const char * decode(char iupac, GB_alignment_type aliType, bool decode_amino_iupac_groups)
int SEQ_TERM_TEXT_YOFFSET
ED4_index members() const
#define MAX_SHOWN_MISSING_SPECIES
int get_string_size(int gc, long textlen) const
long window_upper_clip_point
void ED4_viewDifferences_announceTerminalChange()
void jump_base_pos(int base_pos, ED4_CursorJumpType jump_type)
long window_lower_clip_point
GBDATA * get_gb_main() const
int sequence_to_screen(int sequence_pos) const
GB_BUFFER GB_give_buffer(size_t size)
ED4_species_name_terminal * ED4_find_species_name_terminal(const char *species_name)
ED4_species_name_terminal * ED4_find_species_or_SAI_name_terminal(const char *species_name)
ED4_SearchPositionType get_whatsFound() const
bool in_consensus_terminal() const
bool line(int gc, const AW::LineVector &Line, AW_bitset filteri=AW_ALL_DEVICES_SCALED)
ED4_terminal * get_next_terminal()
static bool allow_update_global_cursorpos
void PV_AddOrfTerminalsToLoadedSpecies()
ED4_returncode show_clicked_cursor(AW_pos click_xpos, ED4_terminal *target_terminal)
void ED4_get_marked_from_menu(AW_window *)
GBDATA * GBT_next_marked_species(GBDATA *gb_species)
CONSTEXPR_INLINE_Cxx14 void swap(unsigned char &c1, unsigned char &c2)
ASSERTING_CONSTEXPR_INLINE int info2bio(int infopos)
CursorPos(ED4_terminal *t, int p)
ED4_root_group_manager * root_group_man
void ED4_jump_to_current_species(AW_window *aww)
void set_screen_relative_pos(int scroll_to_relpos)
char awar_path_for_cursor[50]
#define AWAR_SPECIES_NAME
ED4_main_manager * main_manager
void set_font_overlap(bool allow)
const char * helixNr(size_t pos) const
static void select_named_sequence_terminal(const char *name)
void calc_world_coords(AW_pos *x, AW_pos *y) const
ED4_returncode HideCursor()
GBS_strstruct * not_found_message
AW_awar * awar(const char *awar)
void ED4_clear_stored_curpos()
GBDATA * GBT_find_sequence(GBDATA *gb_species, const char *aliname)
GB_alignment_type alignment_type
bool setCursorTo(ED4_cursor *cursor, int seq_pos, bool unfoldGroups, ED4_CursorJumpType jump_type)
const ConsensusBuildParams & get_consensus_params()
long GBT_count_marked_species(GBDATA *gb_main)
void changeType(ED4_CursorType typ)
bool fulfilled_by(const ED4_terminal *term) const OVERRIDE
void PV_AddCorrespondingOrfTerminals(ED4_species_name_terminal *spNameTerm)
bool is_consensus_terminal() const
ED4_returncode fill_species(ED4_multi_species_manager *multi_species_manager, ED4_reference_terminals &refterms, const char *str, int *index, int group_depth, arb_progress *progress)
ED4_multi_species_manager * ED4_find_MoreSequences_manager()
void ED4_selected_species_changed_cb(AW_root *)
ED4_base * search_spec_child_rek(ED4_level level)
bool is_completely_visible() const
void ED4_change_cursor(AW_window *aww)
ED4_cursor & current_cursor()
ED4_species_name_terminal * corresponding_species_name_terminal() const
void ED4_restore_curpos(AW_window *aww)
ED4_CursorType getType() const
char awar_path_for_Ecoli[50]
ED4_SearchPosition * get_shown_at(int pos) const
GB_ERROR GBT_write_string(GBDATA *gb_container, const char *fieldpath, const char *content)
ED4_cursor(ED4_window *win)
ED4_AREA_LEVEL get_area_level(ED4_multi_species_manager **multi_species_manager=NULp) const
#define ED4_AWAR_SCROLL_MARGIN
char awar_path_for_helixNr[50]
ED4_returncode update_bases(const ED4_base *old_base, const ED4_base *new_base, PosRange range=PosRange::whole())
void nprintf(size_t maxlen, const char *templat,...) __ATTR__FORMAT_MEMBER(2)
ED4_returncode show_cursor_at(ED4_terminal *target_terminal, ED4_index what_pos)
void jump_sequence_pos(int sequence_pos, ED4_CursorJumpType jump_type)
const char * get_alignment_name() const
char * GB_read_string(GBDATA *gbd)
ED4_window * current_ed4w()
void set_horizontal_scrollbar_position(int position)
long window_right_clip_point
bool ED4_is_gap_character(char chr)
void request_refresh(int clear=1) FINAL_OVERRIDE
void aw_message(const char *msg)
void ED4_init_notFoundMessage()
ED4_index pixel2pos(AW_pos click_x)
ED4_terminal * get_terminal() const
bool completely_shows(int x1, int y1, int x2, int y2) const
static bool ignore_selected_SAI_changes_cb
ED4_returncode refresh_all_windows(bool redraw)
has_base_at(int seq_pos_, bool want_base_)
GBDATA * GBT_find_species(GBDATA *gb_main, const char *name)
const ED4_remap * remap() const
void ED4_finish_and_show_notFoundMessage()
GB_ERROR write_string(const char *aw_string)
int is_sequence_terminal() const
void ED4_setup_gaps_and_alitype(const char *gap_chars, GB_alignment_type alitype)
int get_base_position(const ED4_terminal *base, int sequence_position)
const char * get_data() const
void set_vertical_scrollbar_position(int position)
void build_consensus_string_to(char *consensus_string, ExplicitRange range, const ConsensusBuildParams &BK) const
char * resolve_pointer_to_string_copy(int *str_len=NULp) const FINAL_OVERRIDE
void adjacent_screen_positions(int seq_pos, int &screen_pos_left, int &screen_pos_right)
int get_sequence_pos() const
AW_window_menu_modes * aww
GB_transaction ta(gb_var)
bool partly_shows(int x1, int y1, int x2, int y2) const
void ED4_scrollbar_change_cb(AW_window *aww)
long window_left_clip_point
bool is_partly_visible() const
static RandomNumberGenerator gen(time(NULp))
void ED4_get_and_jump_to_selected_SAI(AW_window *aww)
GB_CSTR GBT_get_name_or_description(GBDATA *gb_item)
static ED4_terminal * get_upper_lower_cursor_pos(ED4_manager *starting_point, ED4_cursor_move cursor_move, AW_pos current_y, bool isScreen, const ED4_TerminalPredicate &predicate)
ED4_terminal * get_prev_terminal()
int get_screen_relative_pos() const
ED4_manager * get_parent(ED4_level lev) const
GB_ERROR write_int(long aw_int)
const char * ED4_SearchPositionTypeId[SEARCH_PATTERNS+1]
static bool ignore_selected_species_changes_cb
static ED4_species_name_terminal * insert_new_species_terminal(GB_CSTR species_name, bool is_SAI)
GB_write_int const char s