1
/*=======================================================================================*/
3
/* File : ED4_visualizeSAI.cxx */
4
/* Purpose : To Visualise the Sequence Associated Information (SAI) in the Editor */
5
/* Author : Yadhu Kumar (yadhu@mikro.biologie.tu-muenchen.de) */
6
/* web site : http://www.arb-home.de/ */
8
/* Copyright Department of Microbiology (Technical University Munich) */
10
/*=======================================================================================*/
18
#include <aw_root.hxx>
19
#include <aw_window.hxx>
1
// =============================================================== //
3
// File : ED4_visualizeSAI.cxx //
4
// Purpose : Visualize sequence associated information (SAI) //
7
// Coded by Yadhu Kumar (yadhu@mikro.biologie.tu-muenchen.de) //
8
// Institute of Microbiology (Technical University Munich) //
9
// http://www.arb-home.de/ //
11
// =============================================================== //
13
#include <ed4_extern.hxx>
14
#include "ed4_class.hxx"
20
16
#include <aw_awars.hxx>
22
17
#include <awt_canvas.hxx>
23
18
#include <awt_sel_boxes.hxx>
24
19
#include <aw_preset.hxx>
26
#include <ed4_extern.hxx>
28
#include "ed4_class.hxx"
29
#include "ed4_visualizeSAI.hxx"
31
// --------------------------------------------------------------------------------
21
#include <aw_root.hxx>
22
#include <aw_question.hxx>
23
#include <aw_select.hxx>
27
#include <arb_strbuf.h>
31
// --------------------------------------------------------------------------------
33
33
#define AWAR_SAI_CLR_TAB "saicolors/"
34
#define AWAR_SAI_SELECT AWAR_SAI_CLR_TAB "select" // current visualized SAI
35
#define AWAR_SAI_CLR_DEF AWAR_SAI_CLR_TAB "clr_trans_tab/" // container for definitions
36
#define AWAR_SAI_ENABLE AWAR_SAI_CLR_TAB "enable" // global enable of visualization
37
#define AWAR_SAI_ALL_SPECIES AWAR_SAI_CLR_TAB "all_species" // 1 = all / 0 = marked
38
#define AWAR_SAI_AUTO_SELECT AWAR_SAI_CLR_TAB "auto_select" // 1 = auto select / 0 = manual select
39
#define AWAR_SAI_CLR_TRANS_TABLE AWAR_SAI_CLR_TAB "clr_trans_table" // current translation table
40
#define AWAR_SAI_CLR_TRANS_TAB_NAMES AWAR_SAI_CLR_TAB "clr_trans_tab_names" // ;-seperated list of existing translation tables
41
#define AWAR_SAI_CLR_TRANS_TAB_REL AWAR_SAI_CLR_TAB "sai_relation/" // container to store trans tables for each SAI
42
#define AWAR_SAI_CLR_DEFAULTS_CREATED AWAR_SAI_CLR_TAB "defaults_created" // whether defaults have been created (create only once)
34
#define AWAR_SAI_VISUALIZED AWAR_SAI_CLR_TAB "current" // current visualized SAI
35
#define AWAR_SAI_CLR_DEF AWAR_SAI_CLR_TAB "clr_trans_tab/" // container for definitions
36
#define AWAR_SAI_ENABLE AWAR_SAI_CLR_TAB "enable" // global enable of visualization
37
#define AWAR_SAI_ALL_SPECIES AWAR_SAI_CLR_TAB "all_species" // 1 = all / 0 = marked
38
#define AWAR_SAI_AUTO_SELECT AWAR_SAI_CLR_TAB "auto_select" // 1 = auto select / 0 = manual select
39
#define AWAR_SAI_CLR_TRANS_TABLE AWAR_SAI_CLR_TAB "clr_trans_table" // current translation table
40
#define AWAR_SAI_CLR_TRANS_TAB_NAMES AWAR_SAI_CLR_TAB "clr_trans_tab_names" // ;-separated list of existing translation tables
41
#define AWAR_SAI_CLR_TRANS_TAB_REL AWAR_SAI_CLR_TAB "sai_relation/" // container to store trans tables for each SAI
42
#define AWAR_SAI_CLR_DEFAULTS_CREATED AWAR_SAI_CLR_TAB "defaults_created" // whether defaults have been created (create only once)
44
44
#define AWAR_SAI_CLR_TRANS_TAB_NEW_NAME "tmp/sai/clr_trans_tab_new_name" // textfield to enter translation table name
45
45
#define AWAR_SAI_CLR "tmp/sai/color_0" // the definition of the current translation table (number runs from 0 to 9)
126
123
clrDefinitionsChanged = true;
128
125
if (!in_colorDefChanged_callback) { // this callback is special, because it may change all other color defs
129
in_colorDefChanged_callback = true;
131
bool old_inCallback = inCallback;
134
char *clrTabName = awr->awar(AWAR_SAI_CLR_TRANS_TABLE)->read_string();
136
unsigned char charUsed[256]; memset(charUsed,255,256);
139
for (int i=0; i<10 ; i++){
140
char *awarString_next = awr->awar_string(getAwarName(i))->read_string();
141
for(int c=0; awarString_next[c]; ++c){
142
charUsed[(unsigned char)awarString_next[c]] = i;
144
free(awarString_next);
147
int awarNo = (int)cl_awarNo;
148
char *awarString = awr->awar_string(getAwarName(awarNo))->read_string();
149
for(int c=0; awarString[c]; ++c){
150
charUsed[(unsigned char)awarString[c]] = awarNo;
155
typedef unsigned char mystr[256];
157
for (int i=0; i<10; i++) s[i][0]=0; //initializing the strings
159
for (int i=0; i<256; i++) {
160
int table = charUsed[i];
162
char *eos = strchr((char *)s[table],0); // get pointer to end of string
169
GBS_strstruct *clrDefStr = GBS_stropen(500); /* create output stream */
170
for(int i=0; i<10; i++){
171
awr->awar_string(getAwarName(i))->write_string((char *)s[i]);
173
char *escaped = GBS_escape_string((char*)s[i], ";", '&');
174
GBS_strcat(clrDefStr, escaped);
176
GBS_chrcat(clrDefStr, ';');
179
char *colorDef = GBS_strclose(clrDefStr);
180
AW_awar *awar_def = awr->awar_string(getClrDefAwar(clrTabName), "", AW_ROOT_DEFAULT);
181
awar_def->write_string(colorDef); // writing clr defnition to clr trans table awar
186
if (!old_inCallback) { // only warn when user really changed the setting
187
aw_message("Please select a VALID Color Translation Table to EDIT.");
191
inCallback = old_inCallback;
194
ED4_ROOT->refresh_all_windows(1); //refresh editor
197
in_colorDefChanged_callback = false;
126
LocallyModify<bool> flag(in_colorDefChanged_callback, true);
129
LocallyModify<bool> in_cb(inCallback, true);
131
char *clrTabName = awr->awar(AWAR_SAI_CLR_TRANS_TABLE)->read_string();
133
unsigned char charUsed[256]; memset(charUsed, 255, 256);
136
for (int i=0; i<10; i++) {
137
char *awarString_next = awr->awar_string(getAwarName(i))->read_string();
138
for (int c=0; awarString_next[c]; ++c) {
139
charUsed[(unsigned char)awarString_next[c]] = i;
141
free(awarString_next);
144
int awarNo = (int)cl_awarNo;
145
char *awarString = awr->awar_string(getAwarName(awarNo))->read_string();
146
for (int c=0; awarString[c]; ++c) {
147
charUsed[(unsigned char)awarString[c]] = awarNo;
152
typedef unsigned char mystr[256];
154
for (int i=0; i<10; i++) s[i][0]=0; // initializing the strings
156
for (int i=0; i<256; i++) {
157
int table = charUsed[i];
159
char *eos = strchr((char *)s[table], 0); // get pointer to end of string
166
GBS_strstruct *clrDefStr = GBS_stropen(500); // create output stream
167
for (int i=0; i<10; i++) {
168
awr->awar_string(getAwarName(i))->write_string((char *)s[i]);
170
char *escaped = GBS_escape_string((char*)s[i], ";", '&');
171
GBS_strcat(clrDefStr, escaped);
173
GBS_chrcat(clrDefStr, ';');
176
char *colorDef = GBS_strclose(clrDefStr);
177
AW_awar *awar_def = awr->awar_string(getClrDefAwar(clrTabName), "", AW_ROOT_DEFAULT);
178
awar_def->write_string(colorDef); // writing clr definition to clr trans table awar
183
if (!in_cb.old_value()) { // only warn when user really changed the setting
184
aw_message("Please select a VALID Color Translation Table to EDIT.");
190
if (!inCallback) ED4_ROOT->request_refresh_for_sequence_terminals();
201
194
static void colorDefTabNameChanged_callback(AW_root *awr) {
202
195
char *clrTabName = awr->awar(AWAR_SAI_CLR_TRANS_TABLE)->read_string();
203
bool old_inCallback = inCallback;
206
bool old_in_colorDefChanged_callback = in_colorDefChanged_callback;
207
in_colorDefChanged_callback = true; // avoid correction
209
// clear current translation table definition
210
for(int i=0; i<10 ; i++) {
211
AW_awar *transDef_awar = awr->awar_string(getAwarName(i), "", AW_ROOT_DEFAULT);
212
transDef_awar->write_string("");
216
AW_awar *clrTabDef_awar = awr->awar_string(getClrDefAwar(clrTabName), "", AW_ROOT_DEFAULT);
217
char *clrTabDef = clrTabDef_awar->read_string();
223
for (int si = 0; clrTabDef[si]; ++si) {
224
if (clrTabDef[si] == ';') {
225
e4_assert(i >= 0 && i<10);
226
AW_awar *awar = awr->awar(getAwarName(i));
228
if (tokStart == si) { // empty definition
229
awar->write_string("");
232
int toklen = si-tokStart;
234
e4_assert(toklen > 0);
235
e4_assert(clrTabDef[tokStart+toklen] == ';');
236
clrTabDef[tokStart+toklen] = 0;
238
char *unescaped = GBS_unescape_string(clrTabDef+tokStart, ";", '&');
239
awar->write_string(unescaped);
242
clrTabDef[tokStart+toklen] = ';';
197
LocallyModify<bool> flag(inCallback, true);
199
LocallyModify<bool> flag2(in_colorDefChanged_callback, true); // avoid correction
201
// clear current translation table definition
202
for (int i=0; i<10; i++) {
203
AW_awar *transDef_awar = awr->awar_string(getAwarName(i), "", AW_ROOT_DEFAULT);
204
transDef_awar->write_string("");
208
AW_awar *clrTabDef_awar = awr->awar_string(getClrDefAwar(clrTabName), "", AW_ROOT_DEFAULT);
209
char *clrTabDef = clrTabDef_awar->read_string();
215
for (int si = 0; clrTabDef[si]; ++si) {
216
if (clrTabDef[si] == ';') {
217
e4_assert(i >= 0 && i<10);
218
AW_awar *awar = awr->awar(getAwarName(i));
220
if (tokStart == si) { // empty definition
221
awar->write_string("");
224
int toklen = si-tokStart;
226
e4_assert(toklen > 0);
227
e4_assert(clrTabDef[tokStart+toklen] == ';');
228
clrTabDef[tokStart+toklen] = 0;
230
char *unescaped = GBS_unescape_string(clrTabDef+tokStart, ";", '&');
231
awar->write_string(unescaped);
234
clrTabDef[tokStart+toklen] = ';';
252
in_colorDefChanged_callback = old_in_colorDefChanged_callback;
253
245
colorDefChanged_callback(awr, 0); // correct first def manually
256
// store the selected tabel as default for this SAI:
257
char *saiName = awr->awar(AWAR_SAI_SELECT)->read_string();
260
sprintf(buf, AWAR_SAI_CLR_TRANS_TAB_REL "%s", saiName);
261
awr->awar_string(buf, "", AW_ROOT_DEFAULT); // create an AWAR for the selected SAI and
262
awr->awar(buf)->write_string(clrTabName); // write the existing clr trans table names to the same
247
// store the selected table as default for this SAI:
248
char *saiName = awr->awar(AWAR_SAI_VISUALIZED)->read_string();
251
sprintf(buf, AWAR_SAI_CLR_TRANS_TAB_REL "%s", saiName);
252
awr->awar_string(buf, "", AW_ROOT_DEFAULT); // create an AWAR for the selected SAI and
253
awr->awar(buf)->write_string(clrTabName); // write the existing clr trans table names to the same
266
inCallback = old_inCallback;
267
258
free(clrTabName);
269
if (!inCallback && clrDefinitionsChanged) {
270
ED4_ROOT->refresh_all_windows(1); //refresh editor
260
if (!inCallback && clrDefinitionsChanged) ED4_ROOT->request_refresh_for_sequence_terminals();
274
static void refresh_display_cb(GBDATA *, int *, GB_CB_TYPE cb_type) {
263
static void refresh_display_cb(GB_CB_TYPE cb_type) {
275
264
if ((cb_type & GB_CB_CHANGED) &&
276
265
ED4_ROOT->aw_root->awar(AWAR_SAI_ENABLE)->read_int())
278
267
clrDefinitionsChanged = 1;
279
ED4_ROOT->refresh_all_windows(1); //refresh editor when current SAI is changed
268
ED4_ROOT->request_refresh_for_sequence_terminals();
283
272
static void saiChanged_callback(AW_root *awr) {
284
bool old_inCallback = inCallback;
288
static GBDATA *gb_last_SAI = 0;
291
GB_transaction dummy(GLOBAL_gb_main);
292
GB_remove_callback(gb_last_SAI, GB_CB_CHANGED, refresh_display_cb, 0);
296
saiName = awr->awar(AWAR_SAI_SELECT)->read_string();
297
char *transTabName = 0;
301
sprintf(buf, AWAR_SAI_CLR_TRANS_TAB_REL "%s", saiName);
302
awr->awar_string(buf, "", AW_ROOT_DEFAULT);
303
transTabName = awr->awar(buf)->read_string();
275
LocallyModify<bool> flag(inCallback, true);
307
GB_transaction dummy(GLOBAL_gb_main);
308
gb_last_SAI = GBT_find_SAI(GLOBAL_gb_main, saiName);
277
static GBDATA *gb_last_SAI = 0;
309
279
if (gb_last_SAI) {
310
GB_add_callback(gb_last_SAI, GB_CB_CHANGED, refresh_display_cb, 0);
280
GB_transaction ta(GLOBAL_gb_main);
281
GB_remove_callback(gb_last_SAI, GB_CB_CHANGED, makeDatabaseCallback(refresh_display_cb));
285
saiName = awr->awar(AWAR_SAI_VISUALIZED)->read_string();
286
char *transTabName = 0;
290
sprintf(buf, AWAR_SAI_CLR_TRANS_TAB_REL "%s", saiName);
291
awr->awar_string(buf, "", AW_ROOT_DEFAULT);
292
transTabName = awr->awar(buf)->read_string();
296
GB_transaction ta(GLOBAL_gb_main);
297
gb_last_SAI = GBT_find_SAI(GLOBAL_gb_main, saiName);
299
GB_add_callback(gb_last_SAI, GB_CB_CHANGED, makeDatabaseCallback(refresh_display_cb));
302
awr->awar(AWAR_SAI_CLR_TRANS_TABLE)->write_string(transTabName ? transTabName : "");
305
clrDefinitionsChanged = true; // SAI changed -> update needed
313
awr->awar(AWAR_SAI_CLR_TRANS_TABLE)->write_string(transTabName ? transTabName : "");
316
clrDefinitionsChanged = true; // SAI changed -> update needed
318
inCallback = old_inCallback;
320
309
if (!inCallback && clrDefinitionsChanged) {
321
ED4_ROOT->refresh_all_windows(1); //refresh editor
322
310
// SAI changed notify Global SAI Awar AWAR_SAI_GLOBAL
323
awr->awar(AWAR_SAI_GLOBAL)->write_string(saiName);
311
awr->awar(AWAR_SAI_GLOBAL)->write_string(saiName);
312
ED4_ROOT->request_refresh_for_sequence_terminals();
328
static void update_ClrTransTabNamesList_cb(AW_root *awr, AW_CL cl_aws, AW_CL cl_id) {
329
AW_window *aws = (AW_window*)cl_aws;
330
AW_selection_list *id = (AW_selection_list*)cl_id;
317
static void update_ClrTransTabNamesList_cb(AW_root *awr, AW_CL cl_colorTransList) {
318
AW_selection_list *colorTransList = (AW_selection_list*)cl_colorTransList;
331
319
char *clrTransTabNames = awr->awar(AWAR_SAI_CLR_TRANS_TAB_NAMES)->read_string();
333
aws->clear_selection_list(id);
321
colorTransList->clear();
335
for (char *tok = strtok(clrTransTabNames,"\n"); tok; tok = strtok(0,"\n")) {
336
aws->insert_selection(id,tok,tok);
323
for (char *tok = strtok(clrTransTabNames, "\n"); tok; tok = strtok(0, "\n")) {
324
colorTransList->insert(tok, tok);
338
aws->insert_default_selection(id, "????", "");
339
aws->update_selection_list(id);
326
colorTransList->insert_default("????", "");
327
colorTransList->update();
341
329
free(clrTransTabNames);
386
373
static void addDefaultTransTable(AW_root *aw_root, const char *newClrTransTabName, const char *defaultDefinition) {
387
if (!colorTransTable_exists(aw_root, newClrTransTabName)) {
388
addNewTransTable(aw_root, newClrTransTabName, defaultDefinition, false);
374
addOrUpdateTransTable(aw_root, newClrTransTabName, defaultDefinition, false);
392
377
void ED4_createVisualizeSAI_Awars(AW_root *aw_root, AW_default aw_def) { // --- Creating and initializing AWARS -----
393
aw_root->awar_int (AWAR_SAI_ENABLE, 0, aw_def);
394
aw_root->awar_int (AWAR_SAI_ALL_SPECIES, 0, aw_def);
395
aw_root->awar_int (AWAR_SAI_AUTO_SELECT, 0, aw_def);
396
aw_root->awar_string(AWAR_SAI_SELECT, "", aw_def);
378
aw_root->awar_int(AWAR_SAI_ENABLE, 0, aw_def);
379
aw_root->awar_int(AWAR_SAI_ALL_SPECIES, 0, aw_def);
380
aw_root->awar_int(AWAR_SAI_AUTO_SELECT, 0, aw_def);
382
aw_root->awar_string(AWAR_SAI_VISUALIZED, "", aw_def);
397
383
aw_root->awar_string(AWAR_SAI_CLR_TRANS_TABLE, "", aw_def);
398
384
aw_root->awar_string(AWAR_SAI_CLR_TRANS_TAB_NEW_NAME, "", aw_def);
399
385
aw_root->awar_string(AWAR_SAI_CLR_TRANS_TAB_NAMES, "", aw_def);
401
for (int i=0;i<10;i++){ // initialising 10 color definition string AWARS
402
AW_awar *def_awar = aw_root->awar_string(getAwarName(i),"",aw_def);
387
for (int i=0; i<10; i++) { // initializing 10 color definition string AWARS
388
AW_awar *def_awar = aw_root->awar_string(getAwarName(i), "", aw_def);
403
389
def_awar->add_callback(colorDefChanged_callback, (AW_CL)i);
405
aw_root->awar(AWAR_SAI_ENABLE)->add_callback(setVisualizeSAI_cb);
406
aw_root->awar(AWAR_SAI_ALL_SPECIES)->add_callback(setVisualizeSAI_options_cb);
407
aw_root->awar(AWAR_SAI_AUTO_SELECT)->add_callback(set_autoselect_cb);
408
aw_root->awar(AWAR_SAI_SELECT)->add_callback(saiChanged_callback);
391
aw_root->awar(AWAR_SAI_ENABLE) ->add_callback(setVisualizeSAI_cb);
392
aw_root->awar(AWAR_SAI_ALL_SPECIES) ->add_callback(setVisualizeSAI_options_cb);
393
aw_root->awar(AWAR_SAI_AUTO_SELECT) ->add_callback(set_autoselect_cb);
394
aw_root->awar(AWAR_SAI_VISUALIZED) ->add_callback(saiChanged_callback);
409
395
aw_root->awar(AWAR_SAI_CLR_TRANS_TABLE)->add_callback(colorDefTabNameChanged_callback);
411
397
ED4_ROOT->visualizeSAI = aw_root->awar(AWAR_SAI_ENABLE)->read_int();
412
398
ED4_ROOT->visualizeSAI_allSpecies = aw_root->awar(AWAR_SAI_ALL_SPECIES)->read_int();
414
400
// create some defaults:
415
AW_awar *awar_defaults_created = aw_root->awar_int(AWAR_SAI_CLR_DEFAULTS_CREATED, 0, aw_def);
417
if (awar_defaults_created->read_int() == 0) {
418
addDefaultTransTable(aw_root, "numeric", "0;1;2;3;4;5;6;7;8;9;");
419
addDefaultTransTable(aw_root, "binary", ".;+;;;;;;;;;");
420
addDefaultTransTable(aw_root, "consensus", "=ACGTU;;acgtu;.;;;;;;;");
421
addDefaultTransTable(aw_root, "helix", ";;<>;;;;;[];;;");
422
addDefaultTransTable(aw_root, "xstring", ";x;;;;;;;;;");
423
addDefaultTransTable(aw_root, "gaps", ";-.;;;;;;;;;");
425
awar_defaults_created->write_int(1);
428
inCallback = true; // avoid refresh
401
aw_root->awar_int(AWAR_SAI_CLR_DEFAULTS_CREATED, 1, aw_def); // @@@ Feb 2012 - remove me in some years
403
addDefaultTransTable(aw_root, "numeric", "0;1;2;3;4;5;6;7;8;9;");
404
addDefaultTransTable(aw_root, "binary", ".0;;+1;;;;;;;;");
405
addDefaultTransTable(aw_root, "consensus", "=ACGTU;;acgtu;.;;;;;;;");
406
addDefaultTransTable(aw_root, "helix", ";;<>;;;;;[];;;");
407
addDefaultTransTable(aw_root, "xstring", ";x;;;;;;;;;");
408
addDefaultTransTable(aw_root, "gaps", ";-.;;;;;;;;;");
410
LocallyModify<bool> flag(inCallback, true); // avoid refresh
429
411
saiChanged_callback(aw_root);
430
412
colorDefTabNameChanged_callback(aw_root); // init awars for selected table
431
413
set_autoselect_cb(aw_root);
435
416
static void createCopyClrTransTable(AW_window *aws, AW_CL cl_mode) {
483
464
static void deleteColorTranslationTable(AW_window *aws) {
484
bool delete_table = aw_ask_sure("Are you sure you want to delete the selected COLOR TRANSLATION TABLE?");
486
AW_root *aw_root = aws->get_root();
487
char *clrTabName = aw_root->awar_string(AWAR_SAI_CLR_TRANS_TABLE)->read_string();
490
AW_awar *awar_tabNames = aw_root->awar(AWAR_SAI_CLR_TRANS_TAB_NAMES);
491
char *clrTransTabNames = awar_tabNames->read_string();
492
GBS_strstruct *newTransTabName = GBS_stropen(strlen(clrTransTabNames));
494
for (const char *tok = strtok(clrTransTabNames,"\n"); tok; tok = strtok(0,"\n")) {
495
if (strcmp(clrTabName, tok) != 0) { // merge all not to delete
496
GBS_strcat(newTransTabName, tok);
497
GBS_strcat(newTransTabName, "\n");
465
AW_root *aw_root = aws->get_root();
466
char *clrTabName = aw_root->awar_string(AWAR_SAI_CLR_TRANS_TABLE)->read_string();
469
AW_awar *awar_tabNames = aw_root->awar(AWAR_SAI_CLR_TRANS_TAB_NAMES);
470
char *clrTransTabNames = awar_tabNames->read_string();
471
GBS_strstruct *newTransTabName = GBS_stropen(strlen(clrTransTabNames));
473
for (const char *tok = strtok(clrTransTabNames, "\n"); tok; tok = strtok(0, "\n")) {
474
if (strcmp(clrTabName, tok) != 0) { // merge all not to delete
475
GBS_strcat(newTransTabName, tok);
476
GBS_strcat(newTransTabName, "\n");
501
aw_root->awar_string(getClrDefAwar(clrTabName))->write_string("");
502
char *new_name = GBS_strclose(newTransTabName);
503
awar_tabNames->write_string(new_name); // updates selection list
506
free(clrTransTabNames);
509
aw_message("Selected Color Translation Table is not VALID and cannot be DELETED!");
480
aw_root->awar_string(getClrDefAwar(clrTabName))->write_string("");
481
char *new_name = GBS_strclose(newTransTabName);
482
awar_tabNames->write_string(new_name); // updates selection list
485
free(clrTransTabNames);
488
aw_message("Selected Color Translation Table is not VALID and cannot be DELETED!");
515
493
static AW_selection_list *buildClrTransTabNamesList(AW_window *aws) {
516
AW_root *awr = aws->get_root();
517
AW_selection_list *id = aws->create_selection_list(AWAR_SAI_CLR_TRANS_TABLE);
519
update_ClrTransTabNamesList_cb(awr, (AW_CL)aws, (AW_CL)id);
494
AW_root *awr = aws->get_root();
495
AW_selection_list *colorTransList = aws->create_selection_list(AWAR_SAI_CLR_TRANS_TABLE, true);
497
update_ClrTransTabNamesList_cb(awr, (AW_CL)colorTransList);
499
return colorTransList;
524
502
const char *ED4_getSaiColorString(AW_root *awr, int start, int end) {
618
/* -------------------- Creating Windows and Display dialogs -------------------- */
596
// -------------------- Creating Windows and Display dialogs --------------------
620
static AW_window *create_copyColorTranslationTable_window(AW_root *aw_root){ // creates copy color tranlation table window
598
static AW_window *create_copyColorTranslationTable_window(AW_root *aw_root) { // creates copy color translation table window
621
599
AW_window_simple *aws = new AW_window_simple;
622
aws->init( aw_root, "COPY_CLR_TR_TABLE", "Copy Color Translation Table");
600
aws->init(aw_root, "COPY_CLR_TR_TABLE", "Copy Color Translation Table");
623
601
aws->load_xfig("ad_al_si.fig");
625
603
aws->at("close");
626
aws->callback( (AW_CB0)AW_POPDOWN);
627
aws->create_button("CLOSE","CLOSE","C");
604
aws->callback((AW_CB0)AW_POPDOWN);
605
aws->create_button("CLOSE", "CLOSE", "C");
629
607
aws->at("label");
630
aws->create_autosize_button(0,"Please enter the new name\nfor the Color Translation Table");
608
aws->create_autosize_button(0, "Please enter the new name\nfor the Color Translation Table");
632
610
aws->at("input");
633
aws->create_input_field(AWAR_SAI_CLR_TRANS_TAB_NEW_NAME,15);
611
aws->create_input_field(AWAR_SAI_CLR_TRANS_TAB_NEW_NAME, 15);
636
614
aws->callback(createCopyClrTransTable, (AW_CL)ED4_VIS_COPY);
637
aws->create_button("GO","GO","G");
615
aws->create_button("GO", "GO", "G");
639
617
return (AW_window *)aws;
642
static AW_window *create_createColorTranslationTable_window(AW_root *aw_root){ // creates create color tranlation table window
620
static AW_window *create_createColorTranslationTable_window(AW_root *aw_root) { // creates create color translation table window
643
621
AW_window_simple *aws = new AW_window_simple;
644
aws->init( aw_root, "CREATE_CLR_TR_TABLE", "Create Color Translation Table");
622
aws->init(aw_root, "CREATE_CLR_TR_TABLE", "Create Color Translation Table");
645
623
aws->load_xfig("ad_al_si.fig");
647
625
aws->at("close");
648
aws->callback( (AW_CB0)AW_POPDOWN);
649
aws->create_button("CLOSE","CLOSE","C");
626
aws->callback((AW_CB0)AW_POPDOWN);
627
aws->create_button("CLOSE", "CLOSE", "C");
651
629
aws->at("label");
652
aws->create_autosize_button(0,"Please enter the name\nfor the Color Translation Table");
630
aws->create_autosize_button(0, "Please enter the name\nfor the Color Translation Table");
654
632
aws->at("input");
655
aws->create_input_field(AWAR_SAI_CLR_TRANS_TAB_NEW_NAME,15);
633
aws->create_input_field(AWAR_SAI_CLR_TRANS_TAB_NEW_NAME, 15);
658
636
aws->callback(createCopyClrTransTable, (AW_CL)ED4_VIS_CREATE);
659
aws->create_button("GO","GO","G");
637
aws->create_button("GO", "GO", "G");
661
639
return (AW_window *)aws;
685
static AW_window *create_editColorTranslationTable_window(AW_root *aw_root){ // creates edit color tranlation table window
663
static AW_window *create_editColorTranslationTable_window(AW_root *aw_root) { // creates edit color translation table window
686
664
static AW_window_simple *aws = 0;
687
if(aws) return (AW_window *)aws;
689
aws = new AW_window_simple;
690
aws->init( aw_root, "EDIT_CTT", "Color Translation Table");
691
aws->load_xfig("saiColorRange.fig");
693
char at_name[] = "rangex";
694
char *dig = strchr(at_name, 0)-1;
696
for (int i = 0; i<AWAR_SAI_CLR_COUNT; ++i) {
699
aws->create_input_field(getAwarName(i), 20);
703
aws->callback(AW_POPDOWN);
704
aws->create_button("CLOSE","CLOSE","C");
707
aws->callback(reverseColorTranslationTable);
708
aws->create_button("REVERSE", "Reverse", "R");
711
aws->callback(AW_POPUP,(AW_CL)AW_create_gc_window, (AW_CL)ED4_ROOT->aw_gc_manager);
712
aws->button_length(0);
713
aws->create_button("COLORS","#colors.xpm");
715
return (AW_window *)aws;
718
static AW_window *openSelectSAI_window(AW_root *aw_root, AW_CL cl_awar_name){
719
const char *awar_name = reinterpret_cast<const char *>(cl_awar_name);
721
static GB_HASH *SAI_window_hash = 0;
722
if (!SAI_window_hash) SAI_window_hash = GBS_create_hash(10, GB_MIND_CASE);
724
AW_window_simple *aws = reinterpret_cast<AW_window_simple *>(GBS_read_hash(SAI_window_hash, awar_name));
727
666
aws = new AW_window_simple;
728
aws->init( aw_root, "SELECT_SAI", "SELECT SAI");
729
aws->load_xfig("selectSAI.fig");
731
aws->at("selection");
732
aws->callback((AW_CB0)AW_POPDOWN);
733
awt_create_selection_list_on_extendeds(GLOBAL_gb_main, (AW_window *)aws, awar_name);
667
aws->init(aw_root, "EDIT_CTT", "Color Translation Table");
668
aws->load_xfig("saiColorRange.fig");
670
char at_name[] = "rangex";
671
char *dig = strchr(at_name, 0)-1;
673
for (int i = 0; i<AWAR_SAI_CLR_COUNT; ++i) {
676
aws->create_input_field(getAwarName(i), 20);
735
679
aws->at("close");
736
680
aws->callback(AW_POPDOWN);
737
aws->create_button("CLOSE","CLOSE","C");
741
GBS_write_hash(SAI_window_hash, awar_name, reinterpret_cast<long>(aws));
681
aws->create_button("CLOSE", "CLOSE", "C");
684
aws->callback(reverseColorTranslationTable);
685
aws->create_button("REVERSE", "Reverse", "R");
688
aws->callback(makeWindowCallback(ED4_popup_gc_window, ED4_ROOT->gc_manager));
689
aws->button_length(0);
690
aws->create_button("COLORS", "#colors.xpm");
747
void ED4_create_SAI_selection_button(AW_window *aws, const char *cawar_name) {
748
char *awar_name = strdup(cawar_name);
749
int old_button_length = aws->get_button_length();
751
aws->button_length(30);
753
aws->callback(AW_POPUP, (AW_CL)openSelectSAI_window, (AW_CL)awar_name);
754
aws->create_button("SELECT_SAI", awar_name);
756
aws->button_length(old_button_length);
759
695
AW_window *ED4_createVisualizeSAI_window(AW_root *aw_root) {
760
696
static AW_window_simple *aws = 0;
763
699
aws = new AW_window_simple;
765
aws->init( aw_root, "VISUALIZE_SAI", "Visualize SAIs");
701
aws->init(aw_root, "VISUALIZE_SAI", "Visualize SAIs");
766
702
aws->load_xfig("visualizeSAI.fig");
768
aws->callback( AW_POPUP_HELP,(AW_CL)"visualizeSAI.hlp");
704
aws->callback(makeHelpCallback("visualizeSAI.hlp"));
770
aws->create_button("HELP","HELP","H");
706
aws->create_button("HELP", "HELP", "H");
772
708
aws->at("close");
773
709
aws->callback((AW_CB0)AW_POPDOWN);
774
aws->create_button("CLOSE","CLOSE","C");
710
aws->create_button("CLOSE", "CLOSE", "C");
776
712
aws->at("enable");
777
713
aws->create_toggle(AWAR_SAI_ENABLE);
780
ED4_create_SAI_selection_button(aws, AWAR_SAI_SELECT);
716
aws->button_length(30);
717
awt_create_SAI_selection_button(GLOBAL_gb_main, aws, AWAR_SAI_VISUALIZED);
782
719
aws->at("auto_select");
783
720
aws->create_toggle(AWAR_SAI_AUTO_SELECT);