39 void call()
const { (instance->*member_fun)(
this); }
69 #define AWAR_PAIRS(type) AWAR_SECEDIT_##type##_PAIRS
70 #define AWAR_PCHAR(type) AWAR_SECEDIT_##type##_PAIR_CHAR
91 if (changed_awar_name) {
92 int changed_pair_idx = -1;
94 if (strcmp(changed_awar_name, pairdef[i].awar_pairs) == 0) {
102 if (changed_pair_idx != -1) {
106 if (i != changed_pair_idx) {
108 AW_awar *awar = aw_root->
awar(pairdef[i].awar_pairs);
113 insert(content,
' ');
115 char *newP = get_pair_string(
'#');
128 for (
int i = 0; !error && i<
PAIR_TYPES; ++i) {
130 char *pairchar = aw_root->
awar(pairdef[i].awar_pairchar)->
read_string();
132 error = insert(pairs, pairchar[0]);
187 void SEC_db_interface::reload_sequence(
const SEC_dbcb *
cb) {
192 bool had_sequence = sequence;
197 Host.announce_current_species(species_name);
199 if (
bool(sequence) != had_sequence) scr->request_zoom_reset();
202 scr->request_refresh();
207 void SEC_db_interface::reload_ecoli(
const SEC_dbcb *cb) {
216 ecoli_seq =
new SEC_seq_data(gb_ecoli, aliname, cb);
219 Ecoli->
init(ecoli_seq->sequence(), ecoli_seq->length());
227 scr->request_refresh();
230 void SEC_db_interface::reload_helix(
const SEC_dbcb *cb) {
234 delete helix_nr; helix_nr =
NULp;
235 delete helix_pos; helix_pos =
NULp;
236 delete Helix; Helix =
NULp;
245 helix_pos =
new SEC_seq_data(gb_helix_pos, aliname, cb);
246 helix_nr =
new SEC_seq_data(gb_helix_nr, aliname, cb);
249 GB_ERROR error = Helix->initFromData(helix_nr->sequence(), helix_pos->sequence(), helix_pos->length());
258 free(helix_pos_name);
261 scr->request_refresh();
264 void SEC_db_interface::update_positions(
const SEC_dbcb *) {
269 gfx->sec_root->nail_cursor();
271 scr->request_refresh();
274 void SEC_db_interface::relayout(
const SEC_dbcb *) {
280 scr->request_refresh();
283 void SEC_db_interface::refresh(
const SEC_dbcb *) {
287 scr->request_refresh();
293 int nailedPos = nailedAbsPos;
295 cursorAbsPos = abspos;
299 db->canvas()->request_refresh();
302 nailedAbsPos = nailedPos;
303 position_cursor(
false,
false);
306 void SEC_db_interface::cursor_changed(
const SEC_dbcb *) {
313 void SEC_db_interface::alilen_changed(
const SEC_dbcb *) {
319 scr->request_refresh();
354 void SEC_db_interface::bind_awars(
const char **awars,
SEC_dbcb *cb) {
355 RootCallback awarcb = makeRootCallback(
sec_dbcb, cb);
356 for (
int i = 0; awars[i]; ++i) {
357 aw_root->awar(awars[i])->add_callback(awarcb);
403 displayEcoliPositions(
false),
406 displayBindingHelixPositions(
true),
413 aw_root(gfx->aw_root)
426 displayPos =
new bool[ali_length];
431 sequence_cb =
new SEC_dbcb(
this, &SEC_db_interface::reload_sequence);
432 ecoli_cb =
new SEC_dbcb(
this, &SEC_db_interface::reload_ecoli);
433 helix_cb =
new SEC_dbcb(
this, &SEC_db_interface::reload_helix);
434 updatepos_cb =
new SEC_dbcb(
this, &SEC_db_interface::update_positions);
435 relayout_cb =
new SEC_dbcb(
this, &SEC_db_interface::relayout);
436 refresh_cb =
new SEC_dbcb(
this, &SEC_db_interface::refresh);
437 cursorpos_cb =
new SEC_dbcb(
this, &SEC_db_interface::cursor_changed);
438 alilen_changed_cb =
new SEC_dbcb(
this, &SEC_db_interface::alilen_changed);
443 bind_awars(update_pos_awars, updatepos_cb);
444 bind_awars(relayout_awars, relayout_cb);
445 bind_awars(refresh_awars, refresh_cb);
462 updatepos_cb->
call();
472 delete [] displayPos;
474 delete sequence; sequence =
NULp;
476 delete ecoli_seq; ecoli_seq =
NULp;
477 delete Ecoli; Ecoli =
NULp;
479 delete helix_nr; helix_nr =
NULp;
480 delete helix_pos; helix_pos =
NULp;
481 delete Helix; Helix =
NULp;
483 delete sequence_cb; sequence_cb =
NULp;
484 delete ecoli_cb; ecoli_cb =
NULp;
485 delete helix_cb; helix_cb =
NULp;
486 delete updatepos_cb; updatepos_cb =
NULp;
487 delete relayout_cb; relayout_cb =
NULp;
488 delete refresh_cb; refresh_cb =
NULp;
489 delete cursorpos_cb; cursorpos_cb =
NULp;
490 delete alilen_changed_cb; alilen_changed_cb =
NULp;
492 delete toggler; toggler =
NULp;
494 delete bonddef; bonddef =
NULp;
506 for (
size_t pos = 0; pos<ali_length; ++pos) {
511 if (displayBindingHelixPositions) {
512 displayPos[pos] =
true;
523 shown += displayPos[pos];
527 if (displayEcoliPositions && ecoli_seq) {
528 for (
size_t pos = 0; pos<ali_length; ++pos) {
530 displayPos[pos] =
true;
#define AWAR_SECEDIT_SHOW_CURPOS
#define AWAR_SECEDIT_SKELETON_THICKNESS
SEC_dbcb(SEC_db_interface *db, interface_cb cb)
GB_CSTR GB_path_in_arbprop(const char *relative_path)
static const char * update_pos_awars[]
GB_ERROR GB_add_callback(GBDATA *gbd, GB_CB_TYPE type, const DatabaseCallback &dbcb)
static void sec_dbcb(UNFIXED, const SEC_dbcb *cb)
#define AWAR_SECEDIT_DISPLAY_SEARCH
#define AWAR_CURSOR_POSITION
void update_shown_positions()
GBDATA * GBT_get_alignment(GBDATA *gb_main, const char *aliname)
AWT_canvas * canvas() const
#define AWAR_SECEDIT_BASELINEWIDTH
SEC_db_interface * instance
char * ARB_strdup(const char *str)
static void pair_def_changed_cb(AW_root *aw_root, SEC_db_interface *db, const char *awar_name)
virtual bool SAIs_visualized() const =0
AW_awar * set_minmax(float min, float max)
size_t opposite_position(size_t pos) const
long GBT_get_alignment_len(GBDATA *gb_main, const char *aliname)
void update_shown_positions()
char data(size_t abspos) const
#define AWAR_EDIT_RIGHTWARD
char * GBT_get_default_helix_nr(GBDATA *)
AW_awar * add_callback(const RootCallback &cb)
struct Unfixed_cb_parameter * UNFIXED
#define AWAR_SECEDIT_BOND_THICKNESS
GBDATA * GBT_find_SAI(GBDATA *gb_main, const char *name)
const char * default_pairchar
size_t GB_read_string_count(GBDATA *gbd)
void reread_display_params(AW_root *aw_root, const ED4_plugin_host &Host)
SEC_db_interface(SEC_graphic *Gfx, AWT_canvas *Scr, ED4_plugin_host &host_)
AW_awar * awar_float(const char *var_name, float default_value=0.0, AW_default default_file=AW_ROOT_DEFAULT)
#define AWAR_SECEDIT_SHOW_STR_SKELETON
#define ED4_AWAR_SEARCH_RESULT_CHANGED
#define AWAR_SECEDIT_SAVEDIR
static void error(const char *msg)
const char * default_pairs
#define AWAR_SECEDIT_HIDE_BASES
void AW_create_fileselection_awars(AW_root *awr, const char *awar_base, const char *directories, const char *filter, const char *file_name)
#define AWAR_SECEDIT_SHOW_DEBUG
#define AWAR_SECEDIT_SHOW_ECOLI_POS
SEC_root * secroot() const
GB_alignment_type GBT_get_alignment_type(GBDATA *gb_main, const char *aliname)
void set_cursor(int abspos)
#define AWAR_SPECIES_NAME
void reread(AW_root *aw_root, const ED4_plugin_host &host)
void init(const char *seq, int size)
char * read_string() const
#define AWAR_SECEDIT_SHOW_BONDS
#define AWAR_SECEDIT_SHOW_HELIX_NRS
#define AWAR_SECEDIT_DIST_BETW_STRANDS
AW_awar * awar(const char *awar)
GBDATA * GBT_find_sequence(GBDATA *gb_species, const char *aliname)
static PairDefinition pairdef[PAIR_TYPES]
ASSERTING_CONSTEXPR_INLINE int bio2info(int biopos)
AW_awar * awar_int(const char *var_name, long default_value=0, AW_default default_file=AW_ROOT_DEFAULT)
GB_ERROR close(GB_ERROR error)
BI_PAIR_TYPE pairtype(size_t pos) const
char * GB_read_string(GBDATA *gbd)
#define AWAR_SECEDIT_DISPLAY_SAI
void GB_remove_callback(GBDATA *gbd, GB_CB_TYPE type, const DatabaseCallback &dbcb)
static const char * refresh_awars[]
void init_toggler() const
void(SEC_db_interface::* interface_cb)(const SEC_dbcb *)
#define AWAR_SECEDIT_DISPPOS_ECOLI
void aw_message(const char *msg)
static const char * relayout_awars[]
char baseAt(size_t abspos) const
char * GBT_get_default_helix(GBDATA *)
GBDATA * GBT_find_species(GBDATA *gb_main, const char *name)
GB_ERROR write_string(const char *aw_string)
char * GBT_get_default_alignment(GBDATA *gb_main)
SEC_bond_def * bonds() const
GB_ERROR update(AW_root *awr, const char *changed_awar_name)
GB_transaction ta(gb_var)
const char * awar_pairchar
SEC_seq_data(GBDATA *gb_item, const char *aliname, const SEC_dbcb *reload_item)
AW_awar * awar_string(const char *var_name, const char *default_value="", AW_default default_file=AW_ROOT_DEFAULT)
GBDATA * GB_search(GBDATA *gbd, const char *fieldpath, GB_TYPES create)
static void create_awars(AW_root *aw_root, AW_default def)
static void bind_bonddef_awars(SEC_db_interface *db)
#define AWAR_SECEDIT_DISPPOS_BINDING