source: branches/port5/EDIT/edit_tools.cxx

Last change on this file was 5968, checked in by westram, 16 years ago
  • new flag -w to aisc_mkpt (add include wrapper)
  • uniform style for several include wrappers
  • removed duplicated includes
  • removed useless nt_concatenate.hxx
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 29.2 KB
Line 
1// edit_tools.cxx
2
3#include <stdio.h>
4#include <stdlib.h>     // system
5#include <string.h>
6
7#include <arbdb.h>
8#include <adtools.hxx>
9#include <aw_root.hxx>
10#include <aw_device.hxx>
11#include <aw_window.hxx>
12#include "edit.hxx"
13
14void create_tool_variables(AW_root *root,AW_default db1)
15{
16    root->awar_string( "tmp/tools/search/string", "" ,      db1);
17    root->awar_string( "tmp/tools/search/replace_string", "" ,      db1);
18    root->awar_int(    "tmp/tools/search/mismatches", 0,       db1);
19    root->awar_int(    "tmp/tools/search/mistakes_found", 0,       db1);
20    root->awar_int(    "tmp/tools/search/t_equal_u", 0,       db1);
21    root->awar_int(    "tmp/tools/search/upper_eq_lower", 0,       db1);
22    root->awar_int(    "tmp/tools/search/gaps", -1,       db1);
23    //-----------------------------------------------------------complement
24    root->awar_int(    "tmp/tools/complement/action", 0,       db1);
25    root->awar_int(    "tmp/tools/complement/gaps_points", 0,       db1);
26    root->awar_int(    "tmp/tools/complement/left", 0,       db1);
27    root->awar_int(    "tmp/tools/complement/right", 0,       db1);
28}
29
30// ----------------------------------------------------------------
31//      Search/Replace  Liefert alle Sequenzen eines Bereiches.
32// ----------------------------------------------------------------
33void search_get_area( AED_window *aedw, AED_area_entry  *get_area_current,
34                      ADT_SEARCH *ptr_adt_search, ADT_EDIT *ptr_adt_edit ) {
35
36    AD_ERR      *ad_err;
37
38    //================================Sequenzsuche solange AREA nicht leer.
39    while( get_area_current != NULL )   {
40        ADT_SEQUENCE    *get_area_adt_sequence;
41
42        if( ptr_adt_search->replace_option != ADT_NO_REPLACE ) {
43            if (aw_status()) break;
44        }
45        //----------------------------------------selektierte sequence
46        if(get_area_current->is_selected != 0) {
47            ptr_adt_edit->selection = 1;
48            // im Alignement selektierten String gefunden
49        }
50        //---------------------------------------------------end selec
51
52        //-------------------------------------------func aufruf/fehler
53        get_area_adt_sequence = get_area_current->adt_sequence;
54
55        if( (ptr_adt_edit->selection == 1) &&
56            (get_area_adt_sequence != NULL) ){
57            ad_err = get_area_adt_sequence->
58                show_edit_seq_search(ptr_adt_search, ptr_adt_edit);
59            //###############################################
60
61            if(ad_err) {
62                //                                      printf("**** ERROR ADT_SEARCH");
63                //                                      printf("        show_edit_replace()\n");
64                aw_message(ad_err->show());
65                return;
66            } // end if(ad_err)
67
68        } // end if (selection)
69        //---------------------------------------------end func aufruf
70
71        //------------------------------------------REPLACE REST EDITOR
72        if(ptr_adt_search->replace_option == ADT_REPLACE_REST_EDITOR) {
73            ptr_adt_edit->found_matchp = 0;
74            ptr_adt_search->replace_loop_sequence =
75                ADT_DONT_STOPP_REPLACE;
76        }
77        //-----------------------------------------------------END REST
78
79        //-------------------------------------------get next Sequence
80        if( ptr_adt_edit->found_matchp == 0 ) {
81            if(ptr_adt_search->search_direction ==
82               ADT_SEARCH_FORWARD) {
83                get_area_current = get_area_current->next;
84            }
85            else {
86                get_area_current = get_area_current->previous;
87            }
88
89        }
90        //----------matchpattern found
91        else {
92            break;
93        }
94        //------------------------------------------------------------
95
96    } //===========================================end while: Sequenzsuche
97
98
99    //---------------------------------------------------Eintrag in Editor
100    if(ptr_adt_edit->found_matchp == 1) {
101        set_cursor_to( aedw,
102                       (int)ptr_adt_edit->actual_cursorpos_editor,
103                       get_area_current );
104    }
105    //--------------------------------------------------ENDE Editoreintrag
106
107} // end func: search_get_area()
108
109
110
111
112// --------------------------------------------------------------------------
113//      Aufruf der Dialogbox > search/replace < + deren Funktionalitaeten
114// --------------------------------------------------------------------------
115void edit_tool_search_cb(AW_window *aw, AED_window *aedwindow,
116                         ADT_BUTTON pressed_button ){
117
118    AW_root             *awroot = aw->get_root();
119    ADT_SEARCH  adt_search;
120    ADT_EDIT            adt_edit;
121    AD_ERR                      *adt_error;
122
123    long        mismatches      = awroot->awar("tmp/tools/search/mismatches")->read_int(); //erlaubte Fehler
124    char        *search         = awroot->awar("tmp/tools/search/string")->read_string(); //Suchstring
125    char        *repl_str       = awroot->awar("tmp/tools/search/replace_string")->read_string(); //replace String
126    long        t_equal_u       = awroot->awar("tmp/tools/search/t_equal_u")->read_int(); //t und u gleich?
127    long        upper_eq_lower  = awroot->awar("tmp/tools/search/upper_eq_lower")->read_int(); //GROSS/klein beachten?
128    long        gaps            = awroot->awar("tmp/tools/search/gaps")->read_int(); //Gaps beachten?
129
130    adt_search.matchpattern             = search;       //  Suchstring
131    adt_search.replace_string   = repl_str;
132    adt_search.gaps             = gaps;         //  Mit oder ohne Gaps
133
134    ADT_SEARCH_DIRECTION        direction = ADT_SEARCH_FORWARD;
135    ADT_REPLACE_OPTION  option = ADT_NO_REPLACE;
136
137    switch(pressed_button) {
138
139        // SEARCH-Buttons
140        case BUTTON_SEARCH_ALL:
141            direction = ADT_SEARCH_ALL;
142            break;
143        case BUTTON_SEARCH_FORWARD:
144            direction = ADT_SEARCH_FORWARD;
145            break;
146        case BUTTON_SEARCH_BACKWARD:
147            direction = ADT_SEARCH_BACKWARD;
148            break;
149
150            // REPLACE-Buttons
151        case BUTTON_REPLACE_ONLY:
152            option        = ADT_REPLACE_ONLY;
153            break;
154        case BUTTON_REPLACE_AND_SEARCH_NEXT:
155            direction = ADT_SEARCH_FORWARD;
156            option        = ADT_REPLACE_AND_SEARCH_NEXT;
157            break;
158        case BUTTON_SEARCH_AND_REPLACE_NEXT:
159            direction = ADT_SEARCH_FORWARD;
160            option        = ADT_SEARCH_AND_REPLACE_NEXT;
161            break;
162        case BUTTON_REPLACE_REST_SEQUENCE:
163            direction = ADT_SEARCH_FORWARD;
164            option        = ADT_REPLACE_REST_SEQUENCE;
165            break;
166        case BUTTON_REPLACE_REST_EDITOR:
167            direction = ADT_SEARCH_FORWARD;
168            option        = ADT_REPLACE_REST_EDITOR;
169            break;
170        default:
171            GB_warning("Unknown case in switch in search");
172            // Default ueber Konstruktor von ADT_SEARCH
173    }
174
175    if(option >= 0) {
176        adt_search.replace_option = option;
177    }
178    //Mehr oder gleichviele Fehler erlaubt
179    //als Suchstring lang?
180    if( strlen(search) == 0 && option < 0 ) {
181        aw_message("*********   Please insert Matchpattern!   *********");
182        free(search);
183        return;
184    }
185
186    /*  if( option >= 0 ) {
187        if( strlen(repl_str) == 0 ) {
188        aw_message("*********   Please insert Replace-String!   *********");
189        free(search);
190        free(repl_str);
191        return;
192        }
193        }
194    */
195
196    if( option >= 0 && adt_search.gaps >= 0 ) {
197        if( strlen(adt_search.matchpattern) !=
198            strlen(adt_search.replace_string) ) {
199            aw_message("*********   WITHOUT GAPS   *********\n    Search_String length must be\n\n        >>>>   EQUAL   <<<<\n\n     as Replace_String length!");
200            free(search);
201            free(repl_str);
202            return;
203        }
204    }
205
206    if( (mismatches > 0) && (strlen(search) <= (unsigned long)mismatches)) {
207        aw_message("*********   Mismatches must be lower as Search_String length!   *********");
208        free(search);
209        return;
210    }
211
212    //--------------------------------------------Anzahl erlaubter Fehler;
213    adt_search.mistakes_allowed = mismatches;
214    //-------------------------------------------------------------------
215
216    //---------------------------------------Suchen ja, aber im Editor ist
217    //noch nichts markiert!
218    if(aedwindow->one_area_entry_is_selected == false) {
219
220        //-------------------------------------no selection no replace
221        if( adt_search.replace_option != ADT_NO_REPLACE )   {
222            aw_message("There`s nothing  SELECTED !!");
223            free(search);
224            free(repl_str);
225            return;
226        }
227        //---------------------------------------------end select-repl
228
229        adt_search.search_direction=ADT_SEARCH_FORWARD;
230        adt_search.search_start_cursor_pos = 0;
231        adt_edit.selection=1;
232    }
233    //--------------------------------------------------------------------
234
235    //-------------------------------------Hole Cursorposition der Sequenz;
236    if(aedwindow->cursor_is_managed) {
237        adt_edit.actual_cursorpos_editor = (long) aedwindow->cursor;
238    }
239    //--------------------------------------------------------------------
240
241    //---------------------------------------Suchrichtung, Start der Suche;
242    if(direction == ADT_SEARCH_ALL) {
243        adt_search.search_direction=ADT_SEARCH_FORWARD;
244        adt_search.search_start_cursor_pos = 0;
245        adt_edit.actual_cursorpos_editor = -1;
246        adt_edit.selection=1;
247    }
248    else{
249        adt_search.search_direction = direction;
250        adt_search.search_start_cursor_pos =
251            adt_edit.actual_cursorpos_editor + adt_search.search_direction;
252    }                              // Cursorpos. +/-1
253    //--------------------------------------------------------------------
254
255    //-------------------------------------------- t und u gleichbehandeln;
256    if(t_equal_u) {
257        adt_search.t_equal_u = 1;  // JA
258    }
259    //--------------------------------------------------------------------
260
261    //----------------------------------------------- GROSS/klein beachten;
262    if(upper_eq_lower) {
263        adt_search.upper_eq_lower = 1;     // JA
264    }
265    //--------------------------------------------------------------------
266
267    adt_search.compile();             //Stellt Zeichensatz zur Verfuegung
268
269    //============================================== REPLACE => DB oeffnen
270    AD_MAIN *database_functions = aedwindow->root->ad_main;
271
272    if( adt_search.replace_option != ADT_NO_REPLACE ) {
273        adt_error = database_functions->begin_transaction();
274        if(adt_error) {
275            aw_message("ADT_SEARCH::begin_transaction failed");
276        }
277        adt_edit.db_status = ADT_DB_OPEN;
278    }
279    // ========================================================== DB offen
280
281    //--------------------------------------------Funktionsaufrufe liefern
282    //die Sequenzen der drei Bereiche:
283    //Top, Middle, Bottom, ab !! der
284    //markierten Sequenz
285    if( adt_search.replace_option != ADT_NO_REPLACE ) {
286        aw_openstatus("SEARCH & REPLACE");
287    }
288
289    if(adt_search.search_direction == ADT_SEARCH_FORWARD) {
290        search_get_area( aedwindow, aedwindow->area_top->first,
291                         &adt_search, &adt_edit );
292
293        if( adt_edit.found_matchp == 0 ) {
294            search_get_area( aedwindow,
295                             aedwindow->area_middle->first,
296                             &adt_search, &adt_edit );
297        }
298
299        if( adt_edit.found_matchp == 0 ) {
300            search_get_area( aedwindow,
301                             aedwindow->area_bottom->first,
302                             &adt_search, &adt_edit );
303        }
304    }else {        // adt_search.search_direction == ADT_SEARCH_BACKWARD
305        search_get_area( aedwindow, aedwindow->area_bottom->last,
306                         &adt_search, &adt_edit );
307
308        if( adt_edit.found_matchp == 0 ) {
309            search_get_area( aedwindow, aedwindow->area_middle->last,
310                             &adt_search, &adt_edit );
311        }
312
313        if( adt_edit.found_matchp == 0 ) {
314            search_get_area( aedwindow, aedwindow->area_top->last,
315                             &adt_search, &adt_edit );
316        }
317    }
318
319    aw_closestatus();
320
321    //-------------------------------------------------------------------
322
323    // ======================================================DB schliessen
324    if( adt_edit.db_status == ADT_DB_OPEN ) {
325        adt_error = database_functions->commit_transaction();
326
327        if(adt_error) {
328            aw_message("ADT_SEARCH::commit_transaction failed");
329        }
330        adt_edit.db_status = ADT_DB_CLOSED;
331    }
332    // =====================================================DB geschlossen
333
334    // ----------------------------------------------------Fehlermeldungen
335    if( (adt_edit.found_matchp == 0) && (adt_search.string_replace == 0)) {
336        aw_message("********   Nothing found!   *********");
337    }
338
339    if( adt_edit.seq_equal_match == 0 ) {
340        aw_message("*********   For Replace_Only   *********\nCursor moved  ???\nFrom cursorposition on,\nSequence and Matchpattern are not equal! ");
341    }
342
343    if( adt_edit.replace_overflow == 1 ) {
344        aw_message("*********   Didn`t you SEARCH ???   *********\nOr Replace-String is longer as Rest-Sequence !!!");
345    }
346    //-------------------------------------------------end Fehlermeldungen
347
348    //-------------------------------------------------Schreiben in Editor
349    //Schreibt Anzahl der gefundenen
350    //Fehler in den Editor
351    awroot->awar("tmp/tools/search/mistakes_found")->write_int( adt_edit.mistakes_found);
352    //------------------------------------------------------end schreiben
353
354    //-------------------------------------------------Speicher freigeben
355    free(search);
356    free(repl_str);
357    //-------------------------------------------------------------------
358
359
360} // end edit_tool_search_cb()
361
362// ---------------------------------------------------------------
363//      Sucht die richtige Sequenz fuer Complement/Invertieren
364// ---------------------------------------------------------------
365void compl_get_area(  AED_window *aedw, AED_area_entry  *get_area_current, ADT_COMPLEMENT *ptr_adt_complement, ADT_EDIT *ptr_adt_edit ) {
366
367    AD_ERR      *ad_err;
368    AWUSE(aedw);
369
370    while(get_area_current != NULL)
371    {
372        ADT_SEQUENCE    *get_area_adt_sequence;
373        AD_SPECIES      *ptr_ad_species;
374
375        //----------------------------------------selektierte sequence
376        if(get_area_current->is_selected != 0) {
377            ptr_adt_edit->selection = 1;
378            // im Alignement selektierten String gefunden
379        }
380        //---------------------------------------------------end selec
381
382        //-------------------------------------------func aufruf/fehler
383        get_area_adt_sequence = get_area_current->adt_sequence;
384
385        if( (ptr_adt_edit->selection == 1) && (get_area_adt_sequence != NULL) ) {
386            //---------------------------------------------- Species name
387            ptr_ad_species = get_area_current->ad_species;
388            ptr_adt_complement->species_name = ptr_ad_species->name();
389            //------------------------------------------ end Species name
390
391            ad_err = get_area_adt_sequence->show_edit_seq_compl( ptr_adt_complement, ptr_adt_edit);
392            //###############################################
393
394            if(ad_err) {
395                //                              printf("**** ERROR ADT_COMPLEMENT");
396                //                              printf("    show_edit_seq_compl()\n");
397                aw_message(ad_err->show());
398                return;
399            } // end if(ad_err)
400
401            //-------------------------------------------get next Sequence
402            if((ptr_adt_complement->which_button == BUTTON_COMPL_BLOCK) ||
403               (ptr_adt_complement->which_button == BUTTON_COMPL_REST_SEQUENCE) ||
404               (ptr_adt_complement->which_button == BUTTON_COMPL_SEQUENCE))
405            {
406                break;
407            }
408            //------------------------------------------------------------
409        } // end if (selection)
410        //---------------------------------------------end func aufruf
411
412        get_area_current = get_area_current->next;
413
414    } //===========================================end while: Sequenzsuche
415
416} // end compl_get_area()
417
418// ----------------------------------------------------------
419//      Bildet das Complement und invertiert die Sequence
420// ----------------------------------------------------------
421void edit_tool_complement_cb(AW_window *aw, AED_window *aedwindow,
422                             ADT_BUTTON pressed_button ){
423
424    AW_root                     *awroot = aw->get_root();
425    AD_ERR                      *adt_error;
426    ADT_COMPLEMENT              adt_complement;
427    ADT_EDIT                    adt_edit;
428
429
430    switch(pressed_button) {
431
432        case NO_BUTTON:
433            aw_message("Oh Sweety - You are really in trouble now.");
434            return;
435            //break;
436        case BUTTON_COMPL_BLOCK:
437            adt_complement.which_button = BUTTON_COMPL_BLOCK;
438            adt_complement.take_borders = YES;
439            break;
440        case BUTTON_COMPL_REST_SEQUENCE:
441            adt_complement.which_button = BUTTON_COMPL_REST_SEQUENCE;
442            adt_complement.take_cursor  = YES;
443            break;
444        case BUTTON_COMPL_SEQUENCE:
445            adt_complement.which_button = BUTTON_COMPL_SEQUENCE;
446            break;
447        case BUTTON_COMPL_REST_TEXT:
448            adt_complement.which_button = BUTTON_COMPL_REST_TEXT;
449            adt_complement.take_cursor  = YES;
450            break;
451        case BUTTON_COMPL_ALL:
452            adt_complement.which_button = BUTTON_COMPL_ALL;
453            adt_edit.selection  = 1;
454            break;
455        default:
456            GB_warning("Unknown case in switch in search");
457    }
458
459    if( (!(adt_complement.which_button ==  BUTTON_COMPL_ALL)) &&
460        (aedwindow->one_area_entry_is_selected == false)
461        )  {
462        aw_message("**** ERROR:    no sequence selected !");
463        return;
464    }
465
466    //  adt_complement.ad_species = aedwindow->selected_area_entry->ad_species;
467    adt_complement.alignment_type = aedwindow->alignment->type();
468    adt_complement.alignment_name = aedwindow->alignment->name();
469    adt_complement.alignment_length = aedwindow->alignment->len();
470
471
472    //-----------------------------------------------------complement/invert
473    long        action  = awroot->awar("tmp/tools/complement/action")->read_int();
474    if( (action == 0) || (action == 1) )   {            // complement
475        adt_complement.complement_seq = YES;
476    }
477    if( (action == 0) || (action == 2) )   {            // invert
478        adt_complement.invert_seq = YES;
479        //adt_complement.complement_buffers();          // wird in der fct aufger
480    }
481    //-------------------------------------------------end complement/invert
482
483    //----------------------------------------------------remove GAPS/points
484    long        gaps_points  = awroot->awar("tmp/tools/complement/gaps_points")->read_int();
485    if(gaps_points == 1)  {                     // DEFAULT:  0 = NO !!
486        adt_complement.remove_gaps_points = YES;
487    }
488    //------------------------------------------------end remove GAPS/points
489
490    //-------------------------------------Hole Cursorposition der Sequenz;
491    if(aedwindow->cursor_is_managed) {
492        adt_edit.actual_cursorpos_editor = (long) aedwindow->cursor;
493    }
494    else {
495        adt_edit.actual_cursorpos_editor = 0;
496    }
497    //--------------------------------------------------------end cursorpos
498
499    //---------------------------------------------------------take borders
500    if(adt_complement.take_borders == YES)  {
501        long     left_border  = awroot->awar("tmp/tools/complement/left")->read_int();
502        long     right_border = awroot->awar("tmp/tools/complement/right")->read_int();
503
504        if(left_border < 0)  {
505            aw_message("**** ERROR:     left border >= 0 !");
506            return;
507        }
508        if(left_border > (adt_complement.alignment_length - 1))  {
509            aw_message("**** ERROR:     left border <= alignment length !");
510            return;
511
512        }
513        if(right_border < left_border)  {
514            aw_message("**** ERROR:     right border >= left border !");
515            return;
516        }
517        if(right_border > (adt_complement.alignment_length - 1))  {
518            right_border = (adt_complement.alignment_length - 1);
519        }
520
521        adt_complement.left_border      = left_border;
522        adt_complement.right_border     = right_border;
523    }
524    //----------------------------------------------------------end borders
525
526    //---------------------------------------------Complement dna/rna/... ?
527    if( adt_complement.complement_seq == YES )  {
528        if( strcmp(adt_complement.alignment_type,"rna")==0 )  {
529            adt_complement.adt_acid = ADT_ALITYPE_RNA;
530        }
531        else if( strcmp(adt_complement.alignment_type,"dna")==0 )  {
532            adt_complement.adt_acid = ADT_ALITYPE_DNA;
533        }
534        else if( strcmp(adt_complement.alignment_type,"ami")==0 )  {
535            //adt_complement.adt_acid = ADT_ALITYPE_AMI;
536            aw_message("NO COMPLEMENT:  Alignment Type is AMINO-ACID!");
537            return;
538        }
539        else {
540            //adt_complement.adt_acid = ADT_ALITYPE_UNDEFINED;
541            aw_message("NO COMPLEMENT:  Alignment Type is UNDEFINED!");
542            return;
543        }
544        adt_complement.complement_compile();
545    }
546    //---------------------------------------------------end compl dna/rna/
547
548    //============================================== REPLACE => DB oeffnen
549    AD_MAIN *database_functions = aedwindow->root->ad_main;
550
551    adt_error = database_functions->begin_transaction();
552
553    if(adt_error) {
554        aw_message("ADT_SEARCH::begin_transaction failed");
555    }
556    adt_edit.db_status = ADT_DB_OPEN;
557    // ========================================================== DB offen
558
559    //--------------------------------------------Funktionsaufrufe liefern
560    //die Sequenzen der drei Bereiche:
561    //Top, Middle, Bottom, ab !! der
562    //markierten Sequenz
563
564    //soll entfallen    compl_get_area( aedwindow, aedwindow->area_top->first,
565    //                                            &adt_complement, &adt_edit );
566
567    compl_get_area( aedwindow, aedwindow->area_middle->first,
568                    &adt_complement, &adt_edit );
569
570    //soll entfallen    compl_get_area( aedwindow, aedwindow->area_bottom->first,
571    //                                            &adt_complement, &adt_edit );
572    //-------------------------------------------------------------------
573
574    // ======================================================DB schliessen
575    adt_error = database_functions->commit_transaction();
576
577    if(adt_error) {
578        aw_message("ADT_SEARCH::commit_transaction failed");
579    }
580    adt_edit.db_status = ADT_DB_CLOSED;
581    // =====================================================DB geschlossen
582
583} // end edit_tool_complement_cb()
584
585
586
587
588// ----------------------------------------
589//      gemeinsam in SEARCH und REPLACE
590// ----------------------------------------
591AW_window *common_window_features( AW_window_simple *aws,
592                                   AED_window *aedwindow )
593{
594    aws->label_length( 7 );
595    aws->button_length( 14 );
596
597    aws->at( "close" );
598    aws->callback     ( (AW_CB0)AW_POPDOWN  );
599    aws->create_button( "CLOSE", "CLOSE", "C" );
600
601    aws->label_length( 7 );
602    aws->button_length( 18 );
603
604    aws->at("start");
605    aws->callback     ( (AW_CB)edit_tool_search_cb, (AW_CL)aedwindow,
606                        (AW_CL)BUTTON_SEARCH_FORWARD );// +1
607    aws->create_button( "FIND_NEXT", "FIND NEXT     ", "1" );
608
609    aws->at("start_rev");
610    aws->callback     ( (AW_CB)edit_tool_search_cb, (AW_CL)aedwindow,
611                        (AW_CL)BUTTON_SEARCH_BACKWARD );// -1
612    aws->create_button( "FIND_BACK", "FIND BACKWARD ", "2" );
613
614    aws->at("start_all");
615    aws->callback     ( (AW_CB)edit_tool_search_cb, (AW_CL)aedwindow,
616                        (AW_CL)BUTTON_SEARCH_ALL );     //  0
617    aws->create_button( "FIND_ALL", "FIND ALL      ", "3" );
618
619    aws->at("search");
620    aws->create_input_field("tmp/tools/search/string",49);
621
622    aws->at("mismatches");
623    aws->create_input_field("tmp/tools/search/mismatches",3);
624
625    aws->at("mistakes");
626    aws->create_button(0,"tmp/tools/search/mistakes_found");
627
628    aws->at("t_equal_u");
629    aws->create_option_menu("tmp/tools/search/t_equal_u",0,"");
630    aws->insert_default_option("T <> U","N",0);
631    aws->insert_option("T = U ","Y",1);
632    aws->update_option_menu();
633
634    aws->at("upper_eq_lower");
635    aws->create_option_menu("tmp/tools/search/upper_eq_lower",0,"");
636    aws->insert_default_option("a <> A","N",0);
637    aws->insert_option("a = A ","Y",1);
638    aws->update_option_menu();
639
640    aws->at("gaps");
641    aws->create_option_menu("tmp/tools/search/gaps",0,"");
642    aws->insert_default_option  (" 'A-A' <> 'AA'        ","D",-1);
643    aws->insert_option          (" IGNORE GAPS IN SEQ   ","S",0);
644    aws->insert_option          (" IGNORE GAPS IN SEARCH","M",2);
645    aws->insert_option          (" IGNORE ALL GAPS       ","B",1);
646    aws->update_option_menu();
647
648    return aws;
649}
650
651AW_window *create_tool_search( AW_root *root, AED_window *aedwindow ) {
652    AW_window_simple *aws = new AW_window_simple;
653    aws->init( root, "SEARCH_STRING","EDIT SEARCH");
654    aws->load_xfig("ed_searc.fig");
655
656    aws->label_length( 7 );
657    aws->button_length( 14 );
658
659
660    common_window_features( aws, aedwindow );
661
662    return aws;
663}
664
665AW_window *create_tool_replace( AW_root *root, AED_window *aedwindow ) {
666    AW_window_simple *aws = new AW_window_simple;
667    aws->init( root, "REPLACE_STRING", "EDIT REPLACE");
668    aws->load_xfig("ed_repla.fig");
669
670    aws->label_length( 7 );
671    aws->button_length( 14 );
672
673    //  aws->at( "reopen" );
674    //  aws->callback     ( AW_POPUP, (AW_CL)create_tool_replace,
675    //                                                  (AW_CL)aedwindow  );
676    //  aws->create_button( "REOPEN", "R" );
677
678    aws->at("replace");
679    aws->create_input_field("tmp/tools/search/replace_string",49);
680
681    aws->button_length( 28 );
682    aws->at("start_replace");
683    aws->callback     ( (AW_CB)edit_tool_search_cb, (AW_CL)aedwindow,
684                        (AW_CL)BUTTON_REPLACE_ONLY );
685    aws->create_button( "REPLACE", "REPLACE", "4" );
686
687    aws->at("replace_and_find_next");
688    aws->callback     ( (AW_CB)edit_tool_search_cb, (AW_CL)aedwindow,
689                        (AW_CL)BUTTON_REPLACE_AND_SEARCH_NEXT );
690    aws->create_button( "REPLACE_FIND", "REPLACE THEN FIND", "5" );
691
692    aws->at("find_and_replace_next");
693    aws->callback     ( (AW_CB)edit_tool_search_cb, (AW_CL)aedwindow,
694                        (AW_CL)BUTTON_SEARCH_AND_REPLACE_NEXT );
695    aws->create_button( "FIND_REPLACE", "FIND THEN REPLACE", "6" );
696
697    aws->at("replace_rest_sequence");
698    aws->callback     ( (AW_CB)edit_tool_search_cb, (AW_CL)aedwindow,
699                        (AW_CL)BUTTON_REPLACE_REST_SEQUENCE );
700    aws->create_button( "REPLACE_TO_END_OF_SEQUENCE", "REPLACE TO END OF SEQUENCE", "7" );
701
702    aws->at("replace_rest_editor");
703    aws->callback     ( (AW_CB)edit_tool_search_cb, (AW_CL)aedwindow,
704                        (AW_CL)BUTTON_REPLACE_REST_EDITOR );
705    aws->create_button( "REPLACE_TO_END_OF_EDITOR", "REPLACE TO END OF EDITOR", "8" );
706
707    common_window_features( aws, aedwindow );
708    return aws;
709}
710
711AW_window *create_tool_complement( AW_root *root, AED_window *aedwindow ) {
712    AW_window_simple *aws = new AW_window_simple;
713    aws->init( root, "COMPLEMENT_SEQUENCE", "COMPLEMENT  and  REVERS");
714    aws->load_xfig("ed_compl.fig");
715
716    aws->label_length( 7 );
717    aws->button_length( 14 );
718
719    aws->at( "close" );
720    aws->callback     ( (AW_CB0)AW_POPDOWN  );
721    aws->create_button( "CLOSE", "CLOSE", "C" );
722
723
724    aws->at("action");
725    aws->create_option_menu("tmp/tools/complement/action",0,"");
726    aws->insert_default_option(" COMPLEMENT AND REVERS ","1",0);
727    aws->insert_option           (" COMPLEMENT             ","2",1);
728    aws->insert_option           (" REVERS                ","3",2);
729    aws->update_option_menu();
730
731    aws->at("gaps_points");
732    aws->create_toggle("tmp/tools/complement/gaps_points");
733
734    aws->at("left");
735    aws->create_input_field("tmp/tools/complement/left",8);
736
737    aws->at("right");
738    aws->create_input_field("tmp/tools/complement/right",8);
739
740    aws->button_length( 17 );
741    aws->at("block");
742    aws->callback     ( (AW_CB)edit_tool_complement_cb, (AW_CL)aedwindow,
743                        (AW_CL)BUTTON_COMPL_BLOCK );
744    aws->create_button( "COMPLEMENT_PART", "SEQUENCE PART", "P" );
745
746    aws->at("rest_seq");
747    aws->callback     ( (AW_CB)edit_tool_complement_cb, (AW_CL)aedwindow,
748                        (AW_CL)BUTTON_COMPL_REST_SEQUENCE );
749    aws->create_button( "COMPLEMENT_REST", "REST SEQUENCE", "1" );
750
751    aws->at("sequence");
752    aws->callback     ( (AW_CB)edit_tool_complement_cb, (AW_CL)aedwindow,
753                        (AW_CL)BUTTON_COMPL_SEQUENCE );
754    aws->create_button( "COMPLEMENT_SEQUENCE", "SEQUENCE", "2" );
755
756    aws->at("rest_text");
757    aws->callback     ( (AW_CB)edit_tool_complement_cb, (AW_CL)aedwindow,
758                        (AW_CL)BUTTON_COMPL_REST_TEXT );
759    aws->create_button( "COMPLEMENT_REST_EDITOR", "REST EDITOR", "3" );
760
761    aws->at("all");
762    aws->callback     ( (AW_CB)edit_tool_complement_cb, (AW_CL)aedwindow,
763                        (AW_CL)BUTTON_COMPL_ALL );
764    aws->create_button( "COMPLEMENT_ALL", "ALL", "4" );
765
766    return aws;
767}
Note: See TracBrowser for help on using the repository browser.