source: tags/old_import_filter/NTREE/ad_ali.cxx

Last change on this file was 10117, checked in by westram, 11 years ago
  • fix include-chaos in NTREE
    • all headers named
      • .h (some had .hxx)
      • as .cxx file
    • removed obsolete header (NT_dbrepair.hxx, nt_join.hxx)
  • removed some more definitions of nt_assert
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 11.6 KB
Line 
1// =============================================================== //
2//                                                                 //
3//   File      : ad_ali.cxx                                        //
4//   Purpose   :                                                   //
5//                                                                 //
6//   Institute of Microbiology (Technical University Munich)       //
7//   http://www.arb-home.de/                                       //
8//                                                                 //
9// =============================================================== //
10
11#include "NT_local.h"
12#include <insdel.h>
13#include <awt_sel_boxes.hxx>
14#include <aw_window.hxx>
15#include <aw_root.hxx>
16#include <aw_question.hxx>
17#include <aw_awar.hxx>
18#include <aw_msg.hxx>
19#include <arbdbt.h>
20
21
22static void alignment_vars_callback(AW_root *aw_root)
23{
24    GB_push_transaction(GLOBAL.gb_main);
25    char    *use = aw_root->awar("presets/use")->read_string();
26    GBDATA *ali_cont = GBT_get_alignment(GLOBAL.gb_main, use);
27    if (!ali_cont) {
28        GB_clear_error();
29        aw_root->awar("presets/alignment_name")->unmap();
30        aw_root->awar("presets/alignment_type")->unmap();
31        aw_root->awar("presets/alignment_len")->unmap();
32        aw_root->awar("presets/alignment_rem")->unmap();
33        aw_root->awar("presets/aligned")->unmap();
34        aw_root->awar("presets/auto_format")->unmap();
35        aw_root->awar("presets/security")->unmap();
36    }
37    else {
38        GBDATA *ali_name        = GB_search(ali_cont, "alignment_name",           GB_STRING);
39        GBDATA *ali_len         = GB_search(ali_cont, "alignment_len",            GB_INT);
40        GBDATA *ali_aligned     = GB_search(ali_cont, "aligned",                  GB_INT);
41        GBDATA *ali_auto_format = GB_search(ali_cont, "auto_format",              GB_INT);
42        GBDATA *ali_type        = GB_search(ali_cont, "alignment_type",           GB_STRING);
43        GBDATA *ali_security    = GB_search(ali_cont, "alignment_write_security", GB_INT);
44        GBDATA *ali_rem         = GB_search(ali_cont, "alignment_rem",            GB_STRING);
45
46        aw_root->awar("presets/alignment_name")->map(ali_name);
47        aw_root->awar("presets/alignment_type")->map(ali_type);
48        aw_root->awar("presets/alignment_len") ->map(ali_len);
49        aw_root->awar("presets/alignment_rem") ->map(ali_rem);
50        aw_root->awar("presets/aligned")       ->map(ali_aligned);
51        aw_root->awar("presets/auto_format")   ->map(ali_auto_format);
52        aw_root->awar("presets/security")      ->map(ali_security);
53    }
54    GB_pop_transaction(GLOBAL.gb_main);
55    free(use);
56}
57
58void NT_create_alignment_vars(AW_root *aw_root, AW_default aw_def)
59{
60    aw_root->awar_string("presets/use", "",     aw_def);
61    GB_push_transaction(GLOBAL.gb_main);
62
63    GBDATA *use = GB_search(GLOBAL.gb_main, "presets/use", GB_STRING);
64    aw_root->awar("presets/use")->map(use);
65
66    aw_root->awar_string("presets/alignment_name", "",   aw_def) ->set_srt(GBT_ALI_AWAR_SRT);
67    aw_root->awar_string("presets/alignment_dest", "",   aw_def) ->set_srt(GBT_ALI_AWAR_SRT);
68
69    aw_root->awar_string("presets/alignment_type", "", aw_def);
70    aw_root->awar_string("presets/alignment_rem");
71    aw_root->awar_int("presets/alignment_len", 0, aw_def);
72    aw_root->awar_int("presets/aligned", 0, aw_def);
73    aw_root->awar_int("presets/auto_format", 0, aw_def);
74    aw_root->awar_int("presets/security", 0, aw_def);
75
76    aw_root->awar("presets/use")->add_callback(alignment_vars_callback);
77    alignment_vars_callback(aw_root);
78    GB_pop_transaction(GLOBAL.gb_main);
79}
80
81static void ad_al_delete_cb(AW_window *aww) {
82    if (aw_ask_sure("delete_ali_data", "Are you sure to delete all data belonging to this alignment")) {
83        char           *source = aww->get_root()->awar("presets/use")->read_string();
84        GB_transaction  ta(GLOBAL.gb_main);
85        GB_ERROR        error  = GBT_rename_alignment(GLOBAL.gb_main, source, 0, 0, 1);
86
87        if (error) {
88            error = ta.close(error);
89            aw_message(error);
90        }
91        free(source);
92    }
93}
94
95
96static void ed_al_check_auto_format(AW_window *aww) {
97    AW_root *awr = aww->get_root();
98    char    *use = awr->awar("presets/use")->read_string();
99    if (strcmp(use, "ali_genom") == 0) {
100        awr->awar("presets/auto_format")->write_int(2); // ali_genom is always forced to "skip"
101    }
102}
103
104static void ed_al_check_len_cb(AW_window *aww)
105{
106    char *error = 0;
107    char *use = aww->get_root()->awar("presets/use")->read_string();
108    GB_begin_transaction(GLOBAL.gb_main);
109    if (!error) error = (char *)GBT_check_data(GLOBAL.gb_main, use);
110    GB_commit_transaction(GLOBAL.gb_main);
111    if (error) aw_message(error);
112    free(use);
113}
114
115static void ed_al_align_cb(AW_window *aww) {
116    char     *use = aww->get_root()->awar("presets/use")->read_string();
117    GB_begin_transaction(GLOBAL.gb_main);
118    GB_ERROR  err = ARB_format_alignment(GLOBAL.gb_main, use);
119    GB_commit_transaction(GLOBAL.gb_main);
120    if (err) aw_message(err);
121    free(use);
122    ed_al_check_len_cb(aww);
123}
124
125static void aa_copy_delete_rename(AW_window *aww, AW_CL copy, AW_CL dele) {
126    char *source = aww->get_root()->awar("presets/use")->read_string();
127    char *dest   = aww->get_root()->awar("presets/alignment_dest")->read_string();
128
129    GB_ERROR error    = GB_begin_transaction(GLOBAL.gb_main);
130    if (!error) error = GBT_rename_alignment(GLOBAL.gb_main, source, dest, (int)copy, (int)dele);
131    if (!error) {
132        char *nfield = GBS_global_string_copy("%s/data", dest);
133        error        = GBT_add_new_changekey(GLOBAL.gb_main, nfield, GB_STRING);
134        free(nfield);
135    }
136
137    error = GB_end_transaction(GLOBAL.gb_main, error);
138    aww->hide_or_notify(error);
139
140    free(source);
141    free(dest);
142}
143
144static AW_window *create_alignment_copy_window(AW_root *root)
145{
146    AW_window_simple *aws = new AW_window_simple;
147    aws->init(root, "COPY_ALIGNMENT", "ALIGNMENT COPY");
148    aws->load_xfig("ad_al_si.fig");
149
150    aws->callback((AW_CB0)AW_POPDOWN);
151    aws->at("close");
152    aws->create_button("CLOSE", "CLOSE", "C");
153
154    aws->at("label");
155    aws->create_autosize_button(0, "Please enter the new name\nof the alignment");
156
157    aws->at("input");
158    aws->create_input_field("presets/alignment_dest", 15);
159
160    aws->at("ok");
161    aws->callback(aa_copy_delete_rename, 1, 0);
162    aws->create_button("GO", "GO", "G");
163
164    return (AW_window *)aws;
165}
166static AW_window *create_alignment_rename_window(AW_root *root)
167{
168    AW_window_simple *aws = new AW_window_simple;
169    aws->init(root, "RENAME_ALIGNMENT", "ALIGNMENT RENAME");
170    aws->load_xfig("ad_al_si.fig");
171
172    aws->callback((AW_CB0)AW_POPDOWN);
173    aws->at("close");
174    aws->create_button("CLOSE", "CLOSE", "C");
175
176    aws->at("label");
177    aws->create_autosize_button(0, "Please enter the name\nof the new alignment");
178
179    aws->at("input");
180    aws->create_input_field("presets/alignment_dest", 15);
181
182    aws->at("ok");
183    aws->callback(aa_copy_delete_rename, 1, 1);
184    aws->create_button("GO", "GO", "G");
185
186    return (AW_window *)aws;
187}
188
189static void aa_create_alignment(AW_window *aww) {
190    GB_ERROR  error = GB_begin_transaction(GLOBAL.gb_main);
191    if (!error) {
192        char   *name             = aww->get_root()->awar("presets/alignment_dest")->read_string();
193        GBDATA *gb_alignment     = GBT_create_alignment(GLOBAL.gb_main, name, 0, 0, 0, "dna");
194        if (!gb_alignment) error = GB_await_error();
195        else {
196            char *nfield = GBS_global_string_copy("%s/data", name);
197            error        = GBT_add_new_changekey(GLOBAL.gb_main, nfield, GB_STRING);
198            free(nfield);
199        }
200        free(name);
201    }
202    GB_end_transaction_show_error(GLOBAL.gb_main, error, aw_message);
203}
204
205static AW_window *create_alignment_create_window(AW_root *root)
206{
207    AW_window_simple *aws = new AW_window_simple;
208    aws->init(root, "CREATE_ALIGNMENT", "ALIGNMENT CREATE");
209    aws->load_xfig("ad_al_si.fig");
210
211    aws->callback((AW_CB0)AW_POPDOWN);
212    aws->at("close");
213    aws->create_button("CLOSE", "CLOSE", "C");
214
215    aws->at("label");
216    aws->create_autosize_button(0, "Please enter the new name\nof the alignment");
217
218    aws->at("input");
219    aws->create_input_field("presets/alignment_dest", 15);
220
221    aws->at("ok");
222    aws->callback(aa_create_alignment);
223    aws->create_button("GO", "GO", "G");
224
225    return (AW_window *)aws;
226}
227
228AW_window *NT_create_alignment_window(AW_root *root, AW_CL popmedown)
229{
230    // if popmedown points to a window, that window is popped down
231
232    static AW_window_simple *aws = 0;
233
234    AW_window *aw_popmedown = (AW_window*)popmedown;
235    if (aw_popmedown) aw_popmedown->hide();
236
237    if (aws) return aws; // do not duplicate
238
239    aws = new AW_window_simple;
240
241    aws->init(root, "INFO_OF_ALIGNMENT", "ALIGNMENT INFORMATION");
242    aws->load_xfig("ad_align.fig");
243
244    aws->callback((AW_CB0)AW_POPDOWN);
245    aws->at("close");
246    aws->create_button("CLOSE", "CLOSE", "C");
247
248    aws->callback(AW_POPUP_HELP, (AW_CL)"ad_align.hlp");
249    aws->at("help");
250    aws->create_button("HELP", "HELP", "H");
251
252    aws->button_length(13);
253
254    aws->at("delete");
255    aws->callback(ad_al_delete_cb);
256    aws->create_button("DELETE", "DELETE", "D");
257
258    aws->at("rename");
259    aws->callback(AW_POPUP, (AW_CL)create_alignment_rename_window, 0);
260    aws->create_button("RENAME", "RENAME", "R");
261
262    aws->at("create");
263    aws->callback(AW_POPUP, (AW_CL)create_alignment_create_window, 0);
264    aws->create_button("CREATE", "CREATE", "N");
265
266    aws->at("copy");
267    aws->callback(AW_POPUP, (AW_CL)create_alignment_copy_window, 0);
268    aws->create_button("COPY", "COPY", "C");
269
270    aws->at("check_len");
271    aws->callback(ed_al_check_len_cb);
272    aws->create_button("CHECK_LEN", "CHECK LEN", "L");
273
274    aws->at("align");
275    aws->callback(ed_al_align_cb);
276    aws->create_button("FORMAT", "FORMAT", "F");
277
278    aws->at("list");
279    awt_create_selection_list_on_alignments(GLOBAL.gb_main, (AW_window *)aws, "presets/use", "*=");
280
281    aws->at("aligned");
282    aws->create_option_menu("presets/aligned");
283    aws->callback(ed_al_check_len_cb);
284    aws->insert_default_option("not formatted", "n", 0);
285    aws->callback(ed_al_align_cb);
286    aws->insert_option("formatted", "j", 1);
287    aws->update_option_menu();
288
289    aws->at("auto_format");
290    aws->create_option_menu("presets/auto_format");
291    aws->callback(ed_al_check_auto_format);
292    aws->insert_default_option("ask", "a", 0);
293    aws->callback(ed_al_check_auto_format);
294    aws->insert_option("always", "", 1);
295    aws->callback(ed_al_check_auto_format);
296    aws->insert_option("never", "", 2);
297    aws->update_option_menu();
298
299    aws->at("len");
300    aws->create_input_field("presets/alignment_len", 7);
301
302    aws->at("type");
303    aws->create_option_menu("presets/alignment_type");
304    aws->insert_option("dna", "d", "dna");
305    aws->insert_option("rna", "r", "rna");
306    aws->insert_option("pro", "p", "ami");
307    aws->insert_default_option("???", "?", "usr");
308    aws->update_option_menu();
309
310    aws->at("security");
311    aws->create_option_menu("presets/security");
312    aws->callback(ed_al_check_len_cb);
313    aws->insert_option("0", "0", 0);
314    aws->callback(ed_al_check_len_cb);
315    aws->insert_option("1", "1", 1);
316    aws->callback(ed_al_check_len_cb);
317    aws->insert_option("2", "2", 2);
318    aws->callback(ed_al_check_len_cb);
319    aws->insert_option("3", "3", 3);
320    aws->callback(ed_al_check_len_cb);
321    aws->insert_option("4", "4", 4);
322    aws->callback(ed_al_check_len_cb);
323    aws->insert_option("5", "5", 5);
324    aws->callback(ed_al_check_len_cb);
325    aws->insert_default_option("6", "6", 6);
326    aws->update_option_menu();
327
328    aws->at("rem");
329    aws->create_text_field("presets/alignment_rem");
330
331    return aws;
332}
Note: See TracBrowser for help on using the repository browser.