Changeset 7097

Show
Ignore:
Timestamp:
13/11/10 12:03:26 (19 months ago)
Author:
westram
Message:
  • use arb_progress instead of aw_openstatus, aw_closestatus and aw_status
    • allows nested progress bars
    • avoids repeatedly popping up progress bars
    • avoids passing down info about progress to callees or bookkeeping it in method-objects and similar
    • removed many useless status messages (e.g. those that were only visible for ms)
    • corrected incrementation / limit for many progress bars (esp. matrix-calculations, parsimony)
  • hide aw_open/close/status inside libAW
  • hide rests of GB_status inside libCORE
  • replaced ARB_null_status by arb_suppress_progress
    • suppress progress display in unit-tests
  • added GBT_count_alignments
  • stuffed a few memleaks on the way
  • disabled some deprecation warnings
Location:
branches/refactor
Files:
1 removed
122 modified

Legend:

Unmodified
Added
Removed
  • branches/refactor/ARBDB/Makefile

    r7089 r7097  
    287287adcolumns.o: $(ARBHOME)/INCLUDE/arb_error.h 
    288288adcolumns.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     289adcolumns.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    289290adcolumns.o: $(ARBHOME)/INCLUDE/arb_string.h 
    290291adcolumns.o: $(ARBHOME)/INCLUDE/arbtools.h 
     
    511512adlang1.o: $(ARBHOME)/INCLUDE/arb_error.h 
    512513adlang1.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     514adlang1.o: $(ARBHOME)/INCLUDE/arb_str.h 
    513515adlang1.o: $(ARBHOME)/INCLUDE/arb_string.h 
    514516adlang1.o: $(ARBHOME)/INCLUDE/arbtools.h 
     
    631633adname.o: $(ARBHOME)/INCLUDE/arb_error.h 
    632634adname.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     635adname.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    633636adname.o: $(ARBHOME)/INCLUDE/arb_string.h 
    634637adname.o: $(ARBHOME)/INCLUDE/arbtools.h 
     
    658661adoptimize.o: $(ARBHOME)/INCLUDE/arb_error.h 
    659662adoptimize.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     663adoptimize.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    660664adoptimize.o: $(ARBHOME)/INCLUDE/arb_string.h 
    661665adoptimize.o: $(ARBHOME)/INCLUDE/arbtools.h 
     
    741745adseqcompr.o: $(ARBHOME)/INCLUDE/arb_error.h 
    742746adseqcompr.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     747adseqcompr.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    743748adseqcompr.o: $(ARBHOME)/INCLUDE/arb_string.h 
    744749adseqcompr.o: $(ARBHOME)/INCLUDE/arbtools.h 
     
    934939adtree.o: $(ARBHOME)/INCLUDE/arb_error.h 
    935940adtree.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     941adtree.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    936942adtree.o: $(ARBHOME)/INCLUDE/arb_string.h 
    937943adtree.o: $(ARBHOME)/INCLUDE/arbtools.h 
  • branches/refactor/ARBDB/ad_t_prot.h

    r7084 r7097  
    7979GB_ERROR GBT_rename_species(const char *oldname, const char *newname, bool ignore_protection); 
    8080GB_ERROR GBT_abort_rename_session(void); 
    81 GB_ERROR GBT_commit_rename_session(int (*show_status)(double gauge), int (*show_status_text)(const char *)) __ATTR__USERESULT; 
     81GB_ERROR GBT_commit_rename_session(void) __ATTR__USERESULT; 
    8282 
    8383/* adseqcompr.cxx */ 
     
    123123void GBT_names_move(char **names, int old_index, int new_index); 
    124124void GBT_free_names(char **names); 
     125size_t GBT_count_names(const char **names); 
    125126char *GBT_read_string(GBDATA *gb_container, const char *fieldpath); 
    126127char *GBT_read_as_string(GBDATA *gb_container, const char *fieldpath); 
     
    169170char **GBT_get_tree_names(GBDATA *Main); 
    170171char *GBT_get_name_of_next_tree(GBDATA *gb_main, const char *tree_name); 
    171 GB_CSTR *GBT_get_names_of_species_in_tree(const GBT_TREE *tree); 
     172GB_CSTR *GBT_get_names_of_species_in_tree(const GBT_TREE *tree, size_t *count); 
    172173char *GBT_existing_tree(GBDATA *gb_main, const char *tree_name); 
    173174 
    174175/* adali.cxx */ 
     176int GBT_count_alignments(GBDATA *gb_main); 
    175177GB_ERROR GBT_check_data(GBDATA *Main, const char *alignment_name); 
    176178char **GBT_get_alignment_names(GBDATA *gbd); 
  • branches/refactor/ARBDB/adali.cxx

    r7084 r7097  
    2929#endif // DEVEL_RALF 
    3030 
     31int GBT_count_alignments(GBDATA *gb_main) { 
     32    int     count      = 0; 
     33    GBDATA *gb_presets = GBT_find_or_create(gb_main, "presets", 7); 
     34    for (GBDATA *gb_ali = GB_entry(gb_presets, "alignment"); 
     35         gb_ali; 
     36         gb_ali = GB_nextEntry(gb_ali)) 
     37    { 
     38        ++count; 
     39    } 
     40    return count; 
     41} 
    3142 
    3243GB_ERROR GBT_check_data(GBDATA *Main, const char *alignment_name) { 
  • branches/refactor/ARBDB/adcolumns.cxx

    r6656 r7097  
    1111#include <arbdbt.h> 
    1212#include <adGene.h> 
     13#include <arb_progress.h> 
    1314 
    1415#include "gb_local.h" 
     
    273274 
    274275static GB_ERROR gbt_insert_character(GBDATA *gb_item_data, const char *item_field, enum insDelTarget item_type, const insDel_params *params) { 
    275     GBDATA   *gb_item; 
    276     GB_ERROR  error      = 0; 
    277     long      item_count = GB_number_of_subentries(gb_item_data); 
    278     long      count      = 0; 
     276    GBDATA       *gb_item; 
     277    GB_ERROR      error      = 0; 
     278    long          item_count = GB_number_of_subentries(gb_item_data); 
     279    arb_progress  progress(item_field, item_count); 
    279280 
    280281    for (gb_item = GB_entry(gb_item_data, item_field); 
     
    283284    { 
    284285        error = gbt_insert_character_item(gb_item, item_type, params); 
    285         count++; 
    286         GB_status((double)count/item_count); 
     286        progress.inc_and_check_user_abort(error); 
    287287    } 
    288288    return error; 
     
    292292    GB_ERROR  error  = 0; 
    293293    GBDATA   *gb_ali = GB_entry(gb_secstructs, params->ali_name); 
     294     
    294295    if (gb_ali) { 
    295         long    item_count = GB_number_of_subentries(gb_ali)-1; 
    296         long    count      = 0; 
     296        long item_count = GB_number_of_subentries(gb_ali)-1; 
     297 
     298        if (item_count<1) item_count = 1; 
     299        arb_progress progress("secstructs", item_count); 
     300 
    297301        GBDATA *gb_item; 
    298  
    299         if (item_count<1) item_count = 1; 
    300  
    301302        for (gb_item = GB_entry(gb_ali, "struct"); 
    302303             gb_item && !error; 
     
    311312                } 
    312313            } 
    313             count++; 
    314             GB_status((double)count/item_count); 
     314            progress.inc_and_check_user_abort(error); 
    315315        } 
    316316    } 
     
    335335 
    336336        if (gb_name) { 
     337            arb_progress progress(3); // SAI, species and secstructs 
    337338            GBDATA *gb_len = GB_entry(gb_ali, "alignment_len"); 
    338339 
  • branches/refactor/ARBDB/adlang1.cxx

    r6806 r7097  
    2020#include <static_assert.h> 
    2121#include <arb_defs.h> 
     22#include <arb_str.h> 
    2223 
    2324#define AWAR_TREE_REFRESH "tmp/focus/tree_refresh" // touch this awar to refresh the tree display 
     
    689690    if (args->cparam>=2) return "len syntax: len[(\"characters not to count\")]"; 
    690691 
    691     for (i=0; i<256; i++) { 
    692         if (strchr(option, i)) tab[i] = 0; 
    693         else tab[i] = 1; 
    694     } 
     692    for (i = 0; i<256; ++i) tab[i] = 1; 
     693    for (i = 0; option[i]; ++i) tab[safeCharIndex(option[i])] = 0; 
     694 
    695695    GBL_CHECK_FREE_PARAM(*args->coutput, args->cinput); 
    696696    for (i=0; i<args->cinput; i++) {       // go through all orig streams 
     
    699699        p = args->vinput[i].str; 
    700700        while (*p) { 
    701             sum += tab[(unsigned int)*(p++)]; 
     701            sum += tab[safeCharIndex(*(p++))]; 
    702702        } 
    703703        PASS_2_OUT(args, GBS_global_string_copy("%li", sum)); 
  • branches/refactor/ARBDB/adname.cxx

    r6871 r7097  
    1212 
    1313#include <arbdbt.h> 
     14#include <arb_progress.h> 
    1415#include <ad_config.h> 
    1516 
     
    158159} 
    159160 
    160 GB_ERROR GBT_commit_rename_session(int (*show_status)(double gauge), int (*show_status_text)(const char *)) { 
    161     // goes to header: __ATTR__USERESULT 
     161GB_ERROR GBT_commit_rename_session() { // goes to header: __ATTR__USERESULT 
     162    arb_progress commit_progress("Renaming name references", 3); 
     163    commit_progress.allow_title_reuse(); 
     164 
    162165    GB_ERROR error = 0; 
    163166 
     
    171174            gb_assert(tree_count); // otherwise tree_names should be zero 
    172175 
    173             if (show_status_text) show_status_text(GBS_global_string("Renaming species in %i tree%c", tree_count, "s"[tree_count<2])); 
    174             if (show_status) show_status(0.0); 
    175  
    176             for (count = 0; count<tree_count; ++count) { 
     176            arb_progress progress(GBS_global_string("Renaming species in %i tree%c", tree_count, "s"[tree_count<2]), 
     177                                  tree_count*3); 
     178 
     179            for (count = 0; count<tree_count && !error; ++count) { 
    177180                char     *tname = tree_names[count]; 
    178181                GBT_TREE *tree  = GBT_read_tree(NameSession.gb_main, tname, -sizeof(GBT_TREE)); 
     182                ++progress; 
    179183 
    180184                if (tree) { 
     
    183187                    currentTreeName = 0; 
    184188 
     189                    ++progress; 
     190 
    185191                    GBT_write_tree(NameSession.gb_main, 0, tname, tree); 
    186192                    GBT_delete_tree(tree); 
    187                 } 
    188                 if (show_status) show_status((double)(count+1)/tree_count); 
     193                     
     194                    progress.inc_and_check_user_abort(error); 
     195                } 
     196                else { 
     197                    ++progress; 
     198                    ++progress; 
     199                } 
    189200            } 
    190201            GBT_free_names(tree_names); 
    191202        } 
     203        commit_progress.inc_and_check_user_abort(error); 
    192204    } 
    193205    // rename configurations 
     
    200212            gb_assert(config_count); // otherwise config_names should be zero 
    201213 
    202             if (show_status_text) show_status_text(GBS_global_string("Renaming species in %i config%c", config_count, "s"[config_count<2])); 
    203             if (show_status) show_status(0.0); 
     214            arb_progress progress(GBS_global_string("Renaming species in %i config%c", config_count, "s"[config_count<2]), config_count); 
    204215 
    205216            for (count = 0; !error && count<config_count; ++count) { 
     
    241252                    } 
    242253                } 
    243                 if (show_status) show_status((double)(count+1)/config_count); 
     254                progress.inc_and_check_user_abort(error); 
    244255            } 
    245256            GBT_free_names(config_names); 
    246257        } 
    247258    } 
     259    commit_progress.inc_and_check_user_abort(error); 
    248260 
    249261    // rename links in pseudo-species 
     
    265277        } 
    266278    } 
     279    commit_progress.inc_and_check_user_abort(error); 
    267280 
    268281    gbt_free_rename_session_data(); 
  • branches/refactor/ARBDB/adoptimize.cxx

    r6661 r7097  
    1616#include "gb_compress.h" 
    1717#include "gb_dict.h" 
     18#include "arb_progress.h" 
    1819 
    1920#if defined(DEBUG) 
     
    24282429#else 
    24292430        // create dictionaries for all indices (this is the normal operation) 
    2430         for (idx = gbdByKey_cnt-1; idx >= 1 && !error; --idx) 
     2431        arb_progress progress("Optimizing key data", gbdByKey_cnt); 
     2432        for (idx = gbdByKey_cnt-1; idx >= 1 && !error; --idx, progress.inc_and_check_user_abort(error)) 
    24312433#endif 
    24322434 
     
    24462448 
    24472449#ifndef TEST_ONE 
    2448             GB_status(idx/(double)gbdByKey_cnt); 
    24492450            if (!gbk[idx].cnt) continue; // there are no entries with this quark 
    24502451 
  • branches/refactor/ARBDB/adseqcompr.cxx

    r6659 r7097  
    1010 
    1111#include <arbdbt.h> 
     12#include <arb_progress.h> 
    1213 
    1314#include "gb_key.h" 
     
    169170} 
    170171 
    171 void g_b_create_master(CompressionTree *node, Sequence *seqs, MasterSequence **masters, 
    172                        int masterCount, int *builtMasters, int my_master, 
    173                        const char *ali_name, long seq_len, int *aborted) 
    174 { 
    175     if (*aborted) { 
    176         return; 
    177     } 
    178  
     172void g_b_create_master(CompressionTree *node, Sequence *seqs, MasterSequence **masters, int my_master, const char *ali_name, long seq_len, arb_progress& progress) { 
    179173    if (node->is_leaf) { 
    180174        if (node->index >= 0) { 
     
    186180    } 
    187181    else { 
     182        if (progress.aborted()) return; 
     183         
    188184        if (node->index>=0) { 
    189185            masters[node->index]->master = my_master; 
    190186            my_master = node->index; 
    191187        } 
    192         g_b_create_master(node->leftson, seqs, masters, masterCount, builtMasters, my_master, ali_name, seq_len, aborted); 
    193         g_b_create_master(node->rightson, seqs, masters, masterCount, builtMasters, my_master, ali_name, seq_len, aborted); 
    194         if (node->index>=0 && !*aborted) { // build me 
     188        g_b_create_master(node->leftson, seqs, masters, my_master, ali_name, seq_len, progress); 
     189        g_b_create_master(node->rightson, seqs, masters, my_master, ali_name, seq_len, progress); 
     190        if (node->index>=0 && !progress.aborted()) { // build me 
    195191            char      *data; 
    196192            Consensus *gcon = g_b_new_Consensus(seq_len); 
     
    207203            free(data); 
    208204 
    209             (*builtMasters)++; 
    210             *aborted |= GB_status(*builtMasters/(double)masterCount); 
     205            ++progress; 
    211206        } 
    212207    } 
     
    433428        } 
    434429        else { 
     430            arb_progress tree_progress("Compressing sequences", 4); 
     431             
    435432            // Distribute masters in tree 
    436433            int mastercount   = 0; 
    437434            int max_compSteps = 0; // in one branch 
    438435            int seqcount      = 0; 
    439  
    440             GB_status("Create master sequences"); 
    441             GB_status(0.0); 
    442436 
    443437            init_indices_and_count_sons(tree, &seqcount, ali_name); 
     
    527521                    } 
    528522                    seqs = (Sequence *)GB_calloc(sizeof(*seqs), leafcount); 
    529                     { 
    530                         int builtMasters = 0; 
    531                         int aborted      = 0; 
    532                         GB_status(GBS_global_string("Building %i master sequences", mastercount)); 
    533                         g_b_create_master(tree, seqs, masters, mastercount, &builtMasters, -1, ali_name, ali_len, &aborted); 
    534                         if (aborted) error = "User abort"; 
    535                     } 
    536                 } 
     523 
     524                    if (!error) { 
     525                        arb_progress progress("Building master sequences", mastercount); 
     526                        g_b_create_master(tree, seqs, masters, -1, ali_name, ali_len, progress); 
     527                         
     528                        error = progress.error_if_aborted(); 
     529                    } 
     530                } 
     531                tree_progress.inc_and_check_user_abort(error); 
    537532 
    538533                // Compress sequences in tree 
    539534                if (!error) { 
    540                     GB_status(GBS_global_string("Compressing %i sequences in tree", seqcount)); 
    541                     GB_status(0.0); 
    542  
    543                     for (si=0; si<seqcount; si++) { 
     535                    arb_progress progress("Compressing sequences in tree", seqcount); 
     536 
     537                    for (si=0; si<seqcount && !error; si++) { 
    544538                        int             mi     = seqs[si].master; 
    545539                        MasterSequence *master = masters[mi]; 
     
    569563                        } 
    570564 
    571                         if (GB_status((si+1)/(double)seqcount)) { 
    572                             error = "User abort"; 
    573                             break; 
    574                         } 
    575                     } 
    576                 } 
     565                        progress.inc_and_check_user_abort(error); 
     566                    } 
     567                } 
     568                tree_progress.inc_and_check_user_abort(error); 
    577569 
    578570                // Compress rest of sequences 
     
    581573                    int speciesNotInTree = 0; 
    582574 
    583                     GB_status("Compressing sequences NOT in tree"); 
    584                     GB_status(0.0); 
     575                    SmartPtr<arb_progress> progress; 
    585576 
    586577                    for (pass = 1; pass <= 2; ++pass) { 
     
    613604                                sumorg += seq_len; 
    614605 
    615                                 if (GB_status(count/(double)speciesNotInTree)) { 
    616                                     error = "User abort"; 
    617                                     break; 
    618                                 } 
     606                                progress->inc_and_check_user_abort(error); 
    619607                            } 
    620608                        } 
    621609                        if (pass == 1) { 
    622610                            speciesNotInTree = count; 
    623                             if (GB_status(GBS_global_string("Compressing %i sequences NOT in tree", speciesNotInTree))) { 
    624                                 error = "User abort"; 
    625                                 break; 
    626                             } 
     611                            progress = new arb_progress("Compressing sequences NOT in tree", speciesNotInTree); 
    627612                        } 
    628613                    } 
    629614                } 
     615                tree_progress.inc_and_check_user_abort(error); 
    630616 
    631617                if (!error) { 
    632                     GB_status(GBS_global_string("Compressing %i master-sequences", mastercount)); 
    633                     GB_status(0.0); 
     618                    arb_progress progress("Compressing master-sequences", mastercount); 
    634619 
    635620                    // Compress all masters 
     
    664649                            } 
    665650 
    666                             if (GB_status((si+1)/(double)mastercount)) { 
    667                                 error = "User abort"; 
    668                                 break; 
    669                             } 
     651                            progress.inc_and_check_user_abort(error); 
    670652                        } 
    671653                        else { // count size of top master 
     
    705687                    } 
    706688                } 
    707  
     689                tree_progress.inc_and_check_user_abort(error); 
    708690 
    709691                if (!error) { 
  • branches/refactor/ARBDB/adtools.cxx

    r6808 r7097  
    438438} 
    439439 
     440size_t GBT_count_names(const char **names) { 
     441    size_t count = 0; 
     442    if (names) while (names[count]) ++count; 
     443    return count; 
     444} 
     445 
    440446 
    441447char *GBT_read_string(GBDATA *gb_container, const char *fieldpath) { 
  • branches/refactor/ARBDB/adtree.cxx

    r7090 r7097  
    1010 
    1111#include <arbdbt.h> 
     12#include <arb_progress.h> 
    1213#include "gb_local.h" 
    1314 
     
    582583 
    583584struct link_tree_data { 
    584     GB_HASH *species_hash; 
    585     GB_HASH *seen_species;                          // used to count duplicates 
    586     int      nodes;                                 // if != 0 -> update status 
    587     int      counter; 
    588     int      zombies;                               // counts zombies 
    589     int      duplicates;                            // counts duplicates 
     585    GB_HASH      *species_hash; 
     586    GB_HASH      *seen_species;                     // used to count duplicates 
     587    arb_progress *progress; 
     588    int           zombies;                          // counts zombies 
     589    int           duplicates;                       // counts duplicates 
    590590}; 
    591591 
     
    593593    GB_ERROR error = 0; 
    594594    if (tree->is_leaf) { 
    595         if (ltd->nodes) { // update status? 
    596             ltd->counter++; 
    597             GB_status(ltd->counter/(double)ltd->nodes); 
    598         } 
    599  
    600595        tree->gb_node = 0; 
    601596        if (tree->name) { 
     
    609604            } 
    610605        } 
     606 
     607        if (ltd->progress) ++(*ltd->progress); 
    611608    } 
    612609    else { 
     
    630627    ltd.zombies      = 0; 
    631628    ltd.duplicates   = 0; 
    632     ltd.counter      = 0; 
    633629 
    634630    if (show_status) { 
    635         GB_status("Relinking tree to database"); 
    636         ltd.nodes = leafs; 
    637     } 
    638     else { 
    639         ltd.nodes = 0; 
     631        ltd.progress = new arb_progress("Relinking tree to database", leafs); 
     632    } 
     633    else { 
     634        ltd.progress = NULL; 
    640635    } 
    641636 
     
    643638    if (ltd.seen_species) GBS_free_hash(ltd.seen_species); 
    644639 
    645     if (zombies) *zombies = ltd.zombies; 
     640    if (zombies) *zombies       = ltd.zombies; 
    646641    if (duplicates) *duplicates = ltd.duplicates; 
     642 
     643    delete ltd.progress; 
    647644 
    648645    return error; 
     
    852849} 
    853850 
    854 GB_CSTR *GBT_get_names_of_species_in_tree(const GBT_TREE *tree) { 
     851GB_CSTR *GBT_get_names_of_species_in_tree(const GBT_TREE *tree, size_t *count) { 
    855852    /* creates an array of all species names in a tree, 
    856853     * The names are not allocated (so they may change as side effect of renaming species) */ 
    857854 
    858     size_t size = GBT_count_leafs(tree); 
     855    size_t   size  = GBT_count_leafs(tree); 
    859856    GB_CSTR *result = (GB_CSTR *)GB_calloc(sizeof(char *), size + 1); 
     857     
    860858    IF_ASSERTION_USED(GB_CSTR *check =) fill_species_name_array(result, tree); 
    861859    gb_assert(check - size == result); 
     860 
     861    if (count) *count = size; 
     862 
    862863    return result; 
    863864} 
  • branches/refactor/ARB_GDE/GDE_arbdb_io.cxx

    r6920 r7097  
    33 
    44#include <aw_msg.hxx> 
    5 #include <aw_status.hxx> 
     5#include <arb_progress.h> 
    66#include <AW_rename.hxx> 
    77#include <AP_filter.hxx> 
     
    194194    int  bad_names = 0; 
    195195 
     196    arb_progress progress("Read data from DB", numberspecies); 
     197    GB_ERROR     error = 0; 
    196198    if (the_species) { 
    197         for (gb_species = the_species[number]; gb_species; gb_species = the_species[++number]) { 
    198             if ((number/10)*10==number) { 
    199                 if (aw_status((double)number/(double)numberspecies)) { 
    200                     return 1; 
    201                 } 
    202             } 
     199        for (gb_species = the_species[number]; gb_species && !error; gb_species = the_species[++number]) { 
    203200            gb_name = GB_entry(gb_species, "name"); 
    204201 
     
    235232                this_elem->col_lut = Default_PROColor_LKUP; 
    236233            } 
     234            progress.inc_and_check_user_abort(error); 
    237235        } 
    238236    } 
     
    240238        unsigned char *species_name; 
    241239 
    242         for (species_name=the_names[number]; species_name; species_name=the_names[++number]) { 
    243             if ((number/10)*10==number) { 
    244                 if (aw_status((double)number/(double)numberspecies)) { 
    245                     return 1; 
    246                 } 
    247             } 
    248  
     240        for (species_name=the_names[number]; species_name && !error; species_name=the_names[++number]) { 
    249241            curelem = Arbdb_get_curelem(dataset); 
    250242            this_elem = &(dataset->element[curelem]); 
     
    274266                this_elem->col_lut = Default_PROColor_LKUP; 
    275267            } 
    276         } 
    277     } 
    278  
    279     if (bad_names) { 
    280         aw_message(GBS_global_string("Problematic names found: %i\n" 
    281                                      "External program call may fail or produce invalid results.\n" 
    282                                      "You might want to use 'Generate new names' and read the associated help.", 
    283                                      bad_names)); 
    284     } 
    285  
    286     { 
    287         unsigned long i; 
    288         for (i=0; i<dataset->numelements; i++) { 
    289             dataset->maxlen = MAX(dataset->maxlen, 
    290                                   dataset->element[i].seqlen+dataset->element[i].offset); 
    291         } 
    292         for (i=0; i<numberspecies; i++) 
     268            progress.inc_and_check_user_abort(error); 
     269        } 
     270    } 
     271 
     272    if (!error) { 
     273        if (bad_names) { 
     274            aw_message(GBS_global_string("Problematic names found: %i\n" 
     275                                         "External program call may fail or produce invalid results.\n" 
     276                                         "You might want to use 'Generate new names' and read the associated help.", 
     277                                         bad_names)); 
     278        } 
     279 
    293280        { 
    294             delete sequfilt[i]; 
    295         } 
    296         free(sequfilt); 
    297     } 
     281            unsigned long i; 
     282            for (i=0; i<dataset->numelements; i++) { 
     283                dataset->maxlen = MAX(dataset->maxlen, 
     284                                      dataset->element[i].seqlen+dataset->element[i].offset); 
     285            } 
     286            for (i=0; i<numberspecies; i++) 
     287            { 
     288                delete sequfilt[i]; 
     289            } 
     290            free(sequfilt); 
     291        } 
     292    } 
     293 
    298294    delete allocatedFilter; 
     295    if (error) { 
     296        aw_message(error); 
     297        return 1; // = aborted 
     298    } 
    299299    return 0; 
     300 
    300301} 
    301302 
  • branches/refactor/ARB_GDE/GDE_event.cxx

    r6861 r7097  
    77#include <aw_awar.hxx> 
    88#include <aw_msg.hxx> 
    9 #include <aw_status.hxx> 
     9#include <arb_progress.h> 
    1010#include <AP_filter.hxx> 
    1111 
     
    275275    } change_mode = ACCEPT_CHANGE; 
    276276 
     277    arb_progress progress("importing", dataset->numelements-oldnumelements); 
    277278    for (i = oldnumelements; !error && i < dataset->numelements; i++) { 
    278279        NA_Sequence *sequ = dataset->element+i; 
     
    413414        } 
    414415        free(savename); 
     416        progress.inc_and_check_user_abort(error); 
    415417    } 
    416418 
     
    483485    bool            marked            = (aw_root->awar(AWAR_GDE_SPECIES)->read_int() != 0); 
    484486    long            cutoff_stop_codon = aw_root->awar(AWAR_GDE_CUTOFF_STOPCODON)->read_int(); 
    485  
    486     GmenuItem *current_item; 
    487     current_item=gmenuitem; 
    488  
    489     aw_openstatus(current_item->label); 
    490     aw_status((double)0); 
     487    GmenuItem      *current_item      = gmenuitem; 
     488    arb_progress    progress(current_item->label); 
    491489 
    492490    int   j; 
     
    504502        freedup(alignment_name, DataSet->alignment_name); 
    505503 
    506         aw_status("reading database"); 
     504        progress.subtitle("reading database"); 
    507505        if (db_access.get_sequences) { 
    508506            stop = ReadArbdb2(DataSet, filter2, compress, cutoff_stop_codon); 
     
    572570 
    573571        // call and go... 
    574         aw_status("calling external program"); 
     572        progress.subtitle("calling external program"); 
    575573        printf("Action: %s\n", Action); 
    576574        system(Action); 
     
    625623        } 
    626624 
    627         aw_closestatus(); 
    628625        GDE_export(DataSet, alignment_name, oldnumelements); 
    629     } 
    630     else { 
    631         aw_closestatus(); 
    632626    } 
    633627 
  • branches/refactor/ARB_GDE/Makefile

    r7089 r7097  
    8989GDE_arbdb_io.o: $(ARBHOME)/INCLUDE/arb_error.h 
    9090GDE_arbdb_io.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     91GDE_arbdb_io.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    9192GDE_arbdb_io.o: $(ARBHOME)/INCLUDE/arb_string.h 
    9293GDE_arbdb_io.o: $(ARBHOME)/INCLUDE/arbdb.h 
     
    100101GDE_arbdb_io.o: $(ARBHOME)/INCLUDE/aw_msg.hxx 
    101102GDE_arbdb_io.o: $(ARBHOME)/INCLUDE/AW_rename.hxx 
    102 GDE_arbdb_io.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    103103GDE_arbdb_io.o: $(ARBHOME)/INCLUDE/cb.h 
    104104GDE_arbdb_io.o: $(ARBHOME)/INCLUDE/dupstr.h 
     
    119119GDE_event.o: $(ARBHOME)/INCLUDE/arb_error.h 
    120120GDE_event.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     121GDE_event.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    121122GDE_event.o: $(ARBHOME)/INCLUDE/arb_string.h 
    122123GDE_event.o: $(ARBHOME)/INCLUDE/arbdb.h 
     
    130131GDE_event.o: $(ARBHOME)/INCLUDE/aw_msg.hxx 
    131132GDE_event.o: $(ARBHOME)/INCLUDE/aw_root.hxx 
    132 GDE_event.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    133133GDE_event.o: $(ARBHOME)/INCLUDE/aw_window.hxx 
    134134GDE_event.o: $(ARBHOME)/INCLUDE/awt_filter.hxx 
  • branches/refactor/AWT/AWT_canio.cxx

    r6858 r7097  
    1414#include <aw_awar.hxx> 
    1515#include <aw_msg.hxx> 
    16 #include <aw_status.hxx> 
     16#include <arb_progress.h> 
    1717#include <aw_root.hxx> 
    1818#include <arbdbt.h> 
     
    411411        } 
    412412 
    413         aw_openstatus("Printing"); 
     413        arb_progress progress("Printing"); 
    414414 
    415415        if (!xfig) error = GB_await_error(); 
     
    418418            ntw->init_device(device);  // draw screen 
    419419 
    420             aw_status("Get Picture Size"); 
     420            progress.subtitle("Get Picture Size"); 
    421421            device->reset(); 
    422422 
     
    450450 
    451451            // ---------------------------------------- 
    452             aw_status("Exporting Data"); 
     452            progress.subtitle("Exporting Data"); 
    453453 
    454454            device->set_filter(awr->awar(AWAR_PRINT_TREE_HANDLES)->read_int() 
     
    462462 
    463463            // ---------------------------------------- 
    464             aw_status("Converting to Postscript"); 
     464            progress.subtitle("Converting to Postscript"); 
    465465 
    466466            { 
     
    484484 
    485485            if (!error) { 
    486                 aw_status("Printing"); 
     486                progress.subtitle("Printing"); 
    487487 
    488488                switch (printdest) { 
     
    506506            } 
    507507        } 
    508         aw_closestatus(); 
    509508        if (xfig) { 
    510509            GB_unlink_or_warn(xfig, &error); 
  • branches/refactor/AWT/AWT_query_and_functions.cxx

    r7059 r7097  
    1919#include <aw_msg.hxx> 
    2020#include <aw_awars.hxx> 
    21 #include <aw_status.hxx> 
     21#include <arb_progress.h> 
    2222#include <aw_root.hxx> 
    2323 
     
    116116#endif // DEVEL_RALF 
    117117 
    118 static int awt_count_items(DbQuery *cbs, AWT_QUERY_RANGE range) { 
     118static int awt_count_items(DbQuery *cbs, AWT_QUERY_RANGE range, AWT_QUERY_MODES mode) { 
    119119    int                     count    = 0; 
    120120    GBDATA                 *gb_main  = cbs->gb_main; 
     
    130130             gb_item = selector->get_next_item(gb_item)) 
    131131        { 
    132             count++; 
     132            switch (mode) { 
     133                case AWT_QUERY_GENERATE: ++count; break; 
     134                case AWT_QUERY_ENLARGE:  count += !IS_QUERIED(gb_item, cbs); break; 
     135                case AWT_QUERY_REDUCE:   count +=  IS_QUERIED(gb_item, cbs); break; 
     136            } 
    133137        } 
    134138    } 
     
    9981002 
    9991003    if (!error) { 
    1000         size_t   item_count     = awt_count_items(cbs, range); 
    1001         size_t   searched_count = 0; 
    1002  
    1003         aw_openstatus("Searching"); 
    1004         aw_status(0.0); 
     1004        size_t       item_count = awt_count_items(cbs, range, mode); 
     1005        arb_progress progress("Searching", item_count); 
    10051006 
    10061007        if (cbs->gb_ref && // merge tool only 
     
    10791080                    } 
    10801081 
    1081                     if (aw_status(searched_count++/double(item_count))) error = "aborted"; 
     1082                    progress.inc_and_check_user_abort(error); 
    10821083                } 
    10831084            } 
     
    12521253                    else CLEAR_QUERIED(gb_item, cbs); 
    12531254 
    1254                     if (aw_status(searched_count++/double(item_count))) error = "aborted"; 
    1255                 } 
    1256             } 
    1257         } 
    1258  
    1259         aw_closestatus(); 
     1255                    progress.inc_and_check_user_abort(error); 
     1256                } 
     1257            } 
     1258        } 
    12601259    } 
    12611260 
     
    15611560 
    15621561        if (!error) { 
    1563             long  count  = 0; 
    15641562            long  ncount = cbs->aws->get_root()->awar(cbs->awar_count)->read_int(); 
    15651563            char *deftag = cbs->aws->get_root()->awar(cbs->awar_deftag)->read_string(); 
     
    15741572            int double_pars = cbs->aws->get_root()->awar(cbs->awar_double_pars)->read_int(); 
    15751573 
    1576             aw_openstatus("Pars Fields"); 
    1577  
     1574            arb_progress     progress("Parse fields", ncount); 
    15781575            AW_root         *aw_root = cbs->aws->get_root(); 
    15791576            AWT_QUERY_RANGE  range   = (AWT_QUERY_RANGE)aw_root->awar(cbs->awar_where)->read_int(); 
     
    15881585                { 
    15891586                    if (IS_QUERIED(gb_item, cbs)) { 
    1590                         if (aw_status((count++)/(double)ncount)) { 
    1591                             error = "Aborted by user"; 
    1592                             break; 
    1593                         } 
    15941587                        GBDATA *gb_new = GB_search(gb_item, key, GB_FIND); 
    15951588                        char   *str    = gb_new ? GB_read_as_string(gb_new) : strdup(""); 
     
    16261619                        } 
    16271620                        free(str); 
     1621                        progress.inc_and_check_user_abort(error); 
    16281622                    } 
    16291623                } 
    16301624            } 
    16311625 
    1632  
    1633             aw_closestatus(); 
    16341626            delete tag; 
    16351627            free(deftag); 
     
    25862578    cbs->tree_name              = awtqs->tree_name ? aw_root->awar(awtqs->tree_name)->read_string() : 0; 
    25872579    cbs->selector               = awtqs->selector; 
    2588     cbs->hit_description        = GBS_create_hash(awt_count_items(cbs, AWT_QUERY_ALL_SPECIES), GB_IGNORE_CASE); 
     2580    cbs->hit_description        = GBS_create_hash(awt_count_items(cbs, AWT_QUERY_ALL_SPECIES, AWT_QUERY_GENERATE), GB_IGNORE_CASE); 
    25892581 
    25902582    GB_push_transaction(gb_main); 
  • branches/refactor/AWT/Makefile

    r7089 r7097  
    9797AWT_canio.o: $(ARBHOME)/INCLUDE/arb_error.h 
    9898AWT_canio.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     99AWT_canio.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    99100AWT_canio.o: $(ARBHOME)/INCLUDE/arb_string.h 
    100101AWT_canio.o: $(ARBHOME)/INCLUDE/arbdb.h 
     
    111112AWT_canio.o: $(ARBHOME)/INCLUDE/aw_position.hxx 
    112113AWT_canio.o: $(ARBHOME)/INCLUDE/aw_root.hxx 
    113 AWT_canio.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    114114AWT_canio.o: $(ARBHOME)/INCLUDE/aw_window.hxx 
    115115AWT_canio.o: $(ARBHOME)/INCLUDE/cb.h 
     
    360360AWT_query_and_functions.o: $(ARBHOME)/INCLUDE/arb_error.h 
    361361AWT_query_and_functions.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     362AWT_query_and_functions.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    362363AWT_query_and_functions.o: $(ARBHOME)/INCLUDE/arb_string.h 
    363364AWT_query_and_functions.o: $(ARBHOME)/INCLUDE/arbdb.h 
     
    376377AWT_query_and_functions.o: $(ARBHOME)/INCLUDE/aw_root.hxx 
    377378AWT_query_and_functions.o: $(ARBHOME)/INCLUDE/aw_select.hxx 
    378 AWT_query_and_functions.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    379379AWT_query_and_functions.o: $(ARBHOME)/INCLUDE/aw_window.hxx 
    380380AWT_query_and_functions.o: $(ARBHOME)/INCLUDE/cb.h 
  • branches/refactor/AWTI/AWTI_export.cxx

    r7058 r7097  
    1818#include <aw_window.hxx> 
    1919#include <aw_msg.hxx> 
    20 #include <aw_status.hxx> 
     20#include <arb_progress.h> 
    2121#include <aw_root.hxx> 
    2222#include <arbdbt.h> 
     
    4040    adfiltercbstruct *acbs    = (adfiltercbstruct*)res_from_awt_create_select_filter; 
    4141 
    42     aw_openstatus("Exporting data"); 
     42    arb_progress progress("Exporting data"); 
    4343 
    4444    AW_root  *awr            = aww->get_root(); 
     
    5959                                   db_name, formname, outname, multiple, &real_outname); 
    6060    free(db_name); 
    61     aw_closestatus(); 
    6261    if (error) aw_message(error); 
    6362 
  • branches/refactor/AWTI/AWTI_import.cxx

    r7059 r7097  
    1919#include <AW_rename.hxx> 
    2020#include <aw_msg.hxx> 
    21 #include <aw_status.hxx> 
     21#include <arb_progress.h> 
    2222#include <aw_root.hxx> 
    2323#include <GenomeImport.h> 
     
    391391                char *sys = GBS_string_eval(awtcig.ifo2->system, srt, 0); 
    392392 
    393                 aw_status(GBS_global_string("exec '%s'", awtcig.ifo2->system)); 
     393                arb_progress::show_comment(GBS_global_string("exec '%s'", awtcig.ifo2->system)); 
    394394 
    395395                error                        = GB_system(sys); 
     
    419419                char *sys = GBS_string_eval(awtcig.ifo->system, srt, 0); 
    420420 
    421                 aw_status(GBS_global_string("Converting File %s", awtcig.ifo->system)); 
     421                arb_progress::show_comment(GBS_global_string("Converting File %s", awtcig.ifo->system)); 
    422422 
    423423                error                        = GB_system(sys); 
     
    704704 
    705705        counter++; 
    706         sprintf(text, "Reading species %i", counter); 
    707706        if (counter % 10 == 0) { 
    708             if (aw_status(text)) break; 
     707            sprintf(text, "Reading species %i", counter); 
     708            arb_progress::show_comment(text); 
    709709        } 
    710710 
     
    957957                GB_commit_transaction(GB_MAIN); 
    958958 
    959                 aw_openstatus("Reading input files"); 
     959                arb_progress progress("Reading input files", count); 
    960960 
    961961                for (int curr = 0; !error && fnames[curr]; ++curr) { 
     
    965965                    { 
    966966                        const char *lslash = strrchr(fnames[curr], '/'); 
    967                         aw_status(GBS_global_string("%i/%i: %s", curr+1, count, lslash ? lslash+1 : fnames[curr])); 
     967                        progress.subtitle(GBS_global_string("%i/%i: %s", curr+1, count, lslash ? lslash+1 : fnames[curr])); 
    968968                    } 
    969969 
     
    985985                    } 
    986986 
    987                     aw_status((curr+1)/double(count)); 
     987                    progress.inc_and_check_user_abort(error); 
    988988                } 
    989989 
     
    994994                    GB_warningf("%i of %i files were imported with success", successfull_imports, (successfull_imports+failed_imports)); 
    995995                } 
    996  
    997                 aw_closestatus(); 
    998996 
    999997                // now open another transaction to "undo" the transaction close above 
     
    10471045            } 
    10481046 
    1049             bool status_open = false; 
    10501047            if (!error) { 
    1051                 aw_openstatus("Reading input files"); 
    1052                 status_open = true; 
     1048                arb_progress progress("Reading input files"); 
    10531049 
    10541050                error = awtc_read_data(ali_name, ali_protection); 
    1055  
    10561051                if (error) { 
    10571052                    error = GBS_global_string("Error: %s\nwhile reading file %s", error, awtcig.current_file[-1]); 
     
    10781073            awtcig.filenames    = 0; 
    10791074            awtcig.current_file = 0; 
    1080  
    1081             if (status_open) aw_closestatus(); 
    10821075        } 
    10831076    } 
     
    11011094        aww->hide(); // import window stays open in case of error 
    11021095 
    1103         aw_openstatus("Checking and Scanning database"); 
    1104         aw_status("Pass 1: Check entries"); 
     1096        arb_progress progress("Checking and Scanning database", 2+ask_generate_names); // 2 or 3 passes 
     1097        progress.subtitle("Pass 1: Check entries"); 
    11051098 
    11061099        // scan for hidden/unknown fields : 
     
    11091102 
    11101103        GBT_mark_all(GB_MAIN, 1); 
    1111         sleep(1); 
    1112         aw_status("Pass 2: Check sequence lengths"); 
     1104        progress.inc(); 
     1105        progress.subtitle("Pass 2: Check sequence lengths"); 
    11131106        GBT_check_data(GB_MAIN, 0); 
    1114         sleep(1); 
    11151107 
    11161108        GB_commit_transaction(GB_MAIN); 
     1109        progress.inc(); 
    11171110 
    11181111        if (ask_generate_names) { 
     
    11201113                            "Generate new short names (recommended),Use found names")==0) 
    11211114            { 
    1122                 aw_status("Pass 3: Generate unique names"); 
     1115                progress.subtitle("Pass 3: Generate unique names"); 
    11231116                error = AW_select_nameserver(GB_MAIN, awtcig.gb_other_main); 
    11241117                if (!error) { 
    1125                     error = AWTC_pars_names(GB_MAIN, 1); 
    1126                 } 
    1127             } 
    1128         } 
    1129  
    1130         aw_closestatus(); 
     1118                    error = AWTC_pars_names(GB_MAIN); 
     1119                } 
     1120            } 
     1121            progress.inc(); 
     1122        } 
    11311123    } 
    11321124 
     
    11751167 
    11761168    if (last_valid_gbmain) { // detect default write protection for alignment 
    1177         GB_transaction  ta(last_valid_gbmain); 
    1178         GBDATA         *gb_ali            = GBT_get_alignment(last_valid_gbmain, ali_name); 
    1179         int             protection_to_use = 4; // default protection 
     1169        GB_transaction ta(last_valid_gbmain); 
     1170        GBDATA *gb_ali            = GBT_get_alignment(last_valid_gbmain, ali_name); 
     1171        int     protection_to_use = 4;        // default protection 
    11801172 
    11811173        if (gb_ali) { 
     
    11841176                protection_to_use = GB_read_int(gb_write_security); 
    11851177            } 
     1178        } 
     1179        else { 
     1180            GB_clear_error(); 
    11861181        } 
    11871182        awr->awar(AWAR_ALI_PROTECTION)->write_int(protection_to_use); 
  • branches/refactor/AWTI/Makefile

    r7089 r7097  
    4040AWTI_export.o: $(ARBHOME)/INCLUDE/arb_error.h 
    4141AWTI_export.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     42AWTI_export.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    4243AWTI_export.o: $(ARBHOME)/INCLUDE/arb_str.h 
    4344AWTI_export.o: $(ARBHOME)/INCLUDE/arb_string.h 
     
    5455AWTI_export.o: $(ARBHOME)/INCLUDE/aw_msg.hxx 
    5556AWTI_export.o: $(ARBHOME)/INCLUDE/aw_root.hxx 
    56 AWTI_export.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    5757AWTI_export.o: $(ARBHOME)/INCLUDE/aw_window.hxx 
    5858AWTI_export.o: $(ARBHOME)/INCLUDE/awt_filter.hxx 
     
    7272AWTI_import.o: $(ARBHOME)/INCLUDE/arb_error.h 
    7373AWTI_import.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     74AWTI_import.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    7475AWTI_import.o: $(ARBHOME)/INCLUDE/arb_string.h 
    7576AWTI_import.o: $(ARBHOME)/INCLUDE/arbdb.h 
     
    8788AWTI_import.o: $(ARBHOME)/INCLUDE/aw_root.hxx 
    8889AWTI_import.o: $(ARBHOME)/INCLUDE/aw_select.hxx 
    89 AWTI_import.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    9090AWTI_import.o: $(ARBHOME)/INCLUDE/aw_window.hxx 
    9191AWTI_import.o: $(ARBHOME)/INCLUDE/awt.hxx 
  • branches/refactor/CORE/Makefile

    r7084 r7097  
    1111        $(CPPLIB) $(cflags) -c $< $(AINCLUDES) $(POST_COMPILE) 
    1212 
    13 .cxx.genh: 
    14         ../MAKEBIN/aisc_mkpt -P -G -A -w $(subst .genh,.h,$@) $< > $@ 
    15  
    16 .genh.h: 
    17         ../SOURCE_TOOLS/mv_if_diff $< $@ 
    18  
    19 GENERATED_HEADERS=\ 
    20         arb_msg.h \ 
    21         arb_string.h \ 
    22         arb_signal.h \ 
    23  
    24 proto: $(GENERATED_HEADERS) 
     13proto:  
     14        ../MAKEBIN/aisc_mkpt -P -G -A -w arb_msg.h    arb_msg.cxx    > arb_msg.genh 
     15        ../MAKEBIN/aisc_mkpt -P -G -A -w arb_string.h arb_string.cxx > arb_string.genh 
     16        ../MAKEBIN/aisc_mkpt -P -G -A -w arb_signal.h arb_signal.cxx > arb_signal.genh 
     17        ../SOURCE_TOOLS/mv_if_diff arb_msg.genh    arb_msg.h 
     18        ../SOURCE_TOOLS/mv_if_diff arb_string.genh arb_string.h 
     19        ../SOURCE_TOOLS/mv_if_diff arb_signal.genh arb_signal.h 
    2520 
    2621clean: 
     
    4641arb_handlers.o: arb_core.h 
    4742arb_handlers.o: arb_handlers.h 
     43arb_handlers.o: arb_msg.h 
     44arb_handlers.o: $(ARBHOME)/INCLUDE/arb_assert.h 
     45arb_handlers.o: $(ARBHOME)/INCLUDE/attributes.h 
    4846arb_handlers.o: $(ARBHOME)/INCLUDE/dupstr.h 
     47arb_handlers.o: $(ARBHOME)/INCLUDE/smartptr.h 
     48arb_handlers.o: $(ARBHOME)/INCLUDE/test_global.h 
    4949 
    5050arb_msg.o: arb_core.h 
     
    5252arb_msg.o: arb_msg.h 
    5353arb_msg.o: arb_string.h 
    54 arb_msg.o: core.h 
    5554arb_msg.o: $(ARBHOME)/INCLUDE/arb_assert.h 
    5655arb_msg.o: $(ARBHOME)/INCLUDE/arb_backtrace.h 
     
    6160 
    6261arb_progress.o: arb_core.h 
     62arb_progress.o: arb_handlers.h 
     63arb_progress.o: arb_msg.h 
    6364arb_progress.o: arb_progress.h 
    6465arb_progress.o: $(ARBHOME)/INCLUDE/arb_assert.h 
     66arb_progress.o: $(ARBHOME)/INCLUDE/arb_error.h 
     67arb_progress.o: $(ARBHOME)/INCLUDE/arbtools.h 
     68arb_progress.o: $(ARBHOME)/INCLUDE/attributes.h 
    6569arb_progress.o: $(ARBHOME)/INCLUDE/dupstr.h 
     70arb_progress.o: $(ARBHOME)/INCLUDE/smartptr.h 
    6671arb_progress.o: $(ARBHOME)/INCLUDE/test_global.h 
    6772arb_progress.o: $(ARBHOME)/INCLUDE/test_unit.h 
  • branches/refactor/CORE/arb_handlers.cxx

    r7084 r7097  
    1010// ================================================================ // 
    1111 
    12 #include "arb_handlers.h" 
     12#include <arb_handlers.h> 
     13#include <arb_msg.h> 
     14#include <arb_assert.h> 
     15#include <smartptr.h> 
     16#include <unistd.h> 
     17 
    1318 
    1419// AISC_MKPT_PROMOTE:#ifndef ARB_CORE_H 
     
    1621// AISC_MKPT_PROMOTE:#endif 
    1722 
    18 static void gb_error_to_stderr(const char *msg) { 
     23static void to_stderr(const char *msg) { 
     24    fflush(stdout); 
    1925    fprintf(stderr, "%s\n", msg); 
     26    fflush(stderr); 
     27} 
     28static void to_stdout(const char *msg) { 
     29    fprintf(stdout, "%s\n", msg); 
    2030} 
    2131 
    22 gb_error_handler_type     gb_error_handler = gb_error_to_stderr; 
    23 gb_warning_func_type      gb_warning_func; 
    24 gb_information_func_type  gb_information_func; 
    25 gb_status_gauge_func_type gb_status_gauge_func; 
    26 gb_status_msg_func_type   gb_status_msg_func; 
     32// ------------------------- 
     33//      ARB_stdout_status 
    2734 
     35const int  HEIGHT = 12; // 12 can be devided by 2, 3, 4 (so subtitles tend to be at start of line) 
     36const int  WIDTH  = 70; 
     37const char CHAR   = '.'; 
    2838 
    29 void GB_install_error_handler(gb_error_handler_type aw_message_handler) { 
    30     gb_error_handler = aw_message_handler; 
    31 } 
     39#if defined(DEBUG) 
     40static int openCount        = 0; 
     41static int set_gauge_called = 0; 
     42#endif 
    3243 
    33 void GB_install_warning(gb_warning_func_type warn) { 
    34     gb_warning_func = warn; 
    35 } 
     44class BasicStatus { 
     45    char       *subtitle; 
     46    int         printed; 
     47    const char *cursor; 
    3648 
    37 void GB_install_information(gb_information_func_type info) { 
    38     gb_information_func = info; 
    39 } 
     49public: 
     50    void open(const char *title) { 
     51#if defined(DEBUG) 
     52        arb_assert(++openCount <= 1); 
     53        set_gauge_called = 0; 
     54#endif 
     55         
     56        printf("Progress: %s\n", title); 
     57        printed  = 0; 
     58        cursor   = NULL; 
     59        subtitle = NULL; 
     60    } 
     61    void close() { 
     62        freenull(subtitle); 
     63        printf("[done]\n"); 
     64#if defined(DEBUG) 
     65        printf("set_gauge_called=%i\n", set_gauge_called); 
     66        arb_assert(set_gauge_called<1000); // crazy caller ?  
     67        arb_assert(--openCount >= 0); 
     68#endif 
     69        fflush(stdout); 
     70    } 
    4071 
    41 void GB_install_status(gb_status_gauge_func_type gauge_fun, gb_status_msg_func_type msg_fun) { 
    42     gb_status_gauge_func = gauge_fun; 
    43     gb_status_msg_func   = msg_fun; 
    44 } 
     72    ~BasicStatus() { 
     73#if defined(DEBUG) 
     74        if (openCount) 
     75#endif 
     76            close(); 
     77    } 
    4578 
     79    int next_LF() const { return printed-printed%WIDTH+WIDTH; } 
     80 
     81    void set_subtitle(const char *stitle) { 
     82        arb_assert(openCount == 1); 
     83        if (cursor) { 
     84            int offset = cursor - subtitle; 
     85            subtitle[strlen(subtitle)-1] = 0; 
     86            freeset(subtitle, GBS_global_string_copy("%s/%s}", subtitle, stitle)); 
     87            cursor = subtitle+offset; 
     88        } 
     89        else { 
     90            freeset(subtitle, GBS_global_string_copy("{%s}", stitle)); 
     91            cursor = subtitle; 
     92        } 
     93    } 
     94    void set_gauge(double gauge) { 
     95#if defined(DEBUG) 
     96        arb_assert(openCount == 1); 
     97        set_gauge_called++; 
     98#endif 
     99 
     100        int wanted = int(gauge*WIDTH*HEIGHT); 
     101        int nextLF = next_LF(); 
     102 
     103        if (printed<wanted) { 
     104            while (printed<wanted) { 
     105                if (cursor && cursor[0]) { 
     106                    fputc(*cursor++, stdout); 
     107                } 
     108                else { 
     109                    cursor = 0; 
     110                    fputc(CHAR, stdout); 
     111                } 
     112                printed++; 
     113                if (printed == nextLF) { 
     114                    printf(" [%5.1f%%]\n", printed*100.0/(WIDTH*HEIGHT)); 
     115                    nextLF = next_LF(); 
     116                } 
     117            } 
     118            fflush(stdout); 
     119#if defined(DEBUG) 
     120            // usleep(25000); // uncomment to see slow status 
     121#endif 
     122        } 
     123    } 
     124}; 
     125 
     126static BasicStatus status; 
     127 
     128static void basic_openstatus(const char *title) { status.open(title); } 
     129static void basic_closestatus() { status.close(); } 
     130static bool basic_set_title(const char */*title*/) { return false; } 
     131static bool basic_set_subtitle(const char *stitle) { status.set_subtitle(stitle); return false; } 
     132static bool basic_set_gauge(double gauge) { status.set_gauge(gauge); return false; } 
     133static bool basic_user_abort() { return false; } 
     134 
     135static arb_status_implementation ARB_stdout_status = { 
     136    AST_FORWARD,  
     137    basic_openstatus, 
     138    basic_closestatus, 
     139    basic_set_title, 
     140    basic_set_subtitle, 
     141    basic_set_gauge, 
     142    basic_user_abort 
     143}; 
     144 
     145static arb_handlers stderr_handlers = { 
     146    to_stderr, 
     147    to_stdout, 
     148    to_stdout, 
     149    ARB_stdout_status,  
     150}; 
     151 
     152arb_handlers *active_arb_handlers = &stderr_handlers; 
     153void ARB_install_handlers(arb_handlers& handlers) { active_arb_handlers = &handlers; } 
     154 
  • branches/refactor/CORE/arb_handlers.h

    r7084 r7097  
    1616#include <arb_core.h> 
    1717#endif 
     18#ifndef ATTRIBUTES_H 
     19#include <attributes.h> 
     20#endif 
    1821 
    19 void GB_install_error_handler(gb_error_handler_type aw_message_handler); 
    20 void GB_install_warning(gb_warning_func_type warn); 
    21 void GB_install_information(gb_information_func_type info); 
    22 void GB_install_status(gb_status_gauge_func_type gauge_fun, gb_status_msg_func_type msg_fun); 
     22enum arb_status_type { 
     23    AST_FORWARD, // gauge may only increment (not decrement) 
     24    AST_RANDOM,  // random gauge allowed 
     25}; 
     26 
     27struct arb_status_implementation { 
     28    arb_status_type type; 
     29    void (*openstatus)(const char *title);   // opens the status window and sets title 
     30    void (*closestatus)();                   // close the status window 
     31    bool (*set_title)(const char *title);    // set the title (return true on user abort) 
     32    bool (*set_subtitle)(const char *title); // set the subtitle (return true on user abort) 
     33    bool (*set_gauge)(double gauge);         // set the gauge (=percent) (return true on user abort) 
     34    bool (*user_abort)();                    // return true on user abort 
     35}; 
     36 
     37struct arb_handlers { 
     38    gb_error_handler_type     show_error; 
     39    gb_warning_func_type      show_warning; 
     40    gb_information_func_type  show_message; 
     41    arb_status_implementation status; 
     42}; 
     43 
     44extern arb_handlers *active_arb_handlers; 
     45 
     46void ARB_install_handlers(arb_handlers& handlers); 
    2347 
    2448#else 
  • branches/refactor/CORE/arb_msg.cxx

    r7084 r7097  
    1616#include <smartptr.h> 
    1717#include <arb_handlers.h> 
    18 #include "core.h" 
    19  
    2018  
    2119/* AISC_MKPT_PROMOTE:#ifndef _GLIBCXX_CSTDLIB */ 
     
    301299 
    302300GB_ERROR GB_export_IO_error(const char *action, const char *filename) { 
    303     // goes to header: __ATTR__DEPRECATED 
     301    // goes to header: __ATTR__DEPRECATED_LATER 
    304302    return GB_export_error(GB_IO_error(action, filename)); 
    305303} 
     
    311309 
    312310GB_ERROR GB_print_error() { 
    313     // goes to header: __XATTR__DEPRECATED 
     311    // goes to header: __ATTR__DEPRECATED_LATER 
    314312    if (GB_error_buffer) { 
    315313        fflush(stdout); 
     
    320318 
    321319GB_ERROR GB_get_error() { 
    322     // goes to header: __ATTR__DEPRECATED 
     320    // goes to header: __ATTR__DEPRECATED_LATER 
    323321 
    324322    /* This function is deprecated. 
     
    410408 
    411409    char *full_message = GBS_global_string_copy("Internal ARB Error: %s", message); 
    412     gb_error_handler(full_message); 
    413     gb_error_handler("ARB is most likely unstable now (due to this error).\n" 
    414                      "If you've made changes to the database, consider to save it using a different name.\n" 
    415                      "Try to fix the cause of the error and restart ARB."); 
     410    active_arb_handlers->show_error(full_message); 
     411    active_arb_handlers->show_error("ARB is most likely unstable now (due to this error).\n" 
     412                                    "If you've made changes to the database, consider to save it using a different name.\n" 
     413                                    "Try to fix the cause of the error and restart ARB."); 
    416414 
    417415#ifdef ASSERTION_USED 
     
    466464     * see also : GB_information 
    467465     */ 
    468  
    469     if (gb_warning_func) { 
    470         gb_warning_func(message); 
    471     } 
    472     else { 
    473         fputs(message, stdout); 
    474         fputc('\n', stdout); 
    475     } 
     466    active_arb_handlers->show_warning(message); 
    476467} 
    477468void GB_warningf(const char *templat, ...) { 
     
    489480 
    490481void GB_information(const char *message) { 
    491     if (gb_information_func) { 
    492         gb_information_func(message); 
    493     } 
    494     else { 
    495         fputs(message, stdout); 
    496         fputc('\n', stdout); 
    497     } 
     482    active_arb_handlers->show_message(message); 
    498483} 
    499484void GB_informationf(const char *templat, ...) { 
     
    514499} 
    515500 
    516 int GB_status(double val) { 
    517     int result = 0; 
    518  
    519     /* if program uses GUI this uses aw_status(), 
    520      * otherwise it uses simple status to stdout 
    521      * 
    522      * return value : 0 = ok, 1 = userAbort 
    523      */ 
    524  
    525     if (gb_status_gauge_func) { 
    526         result = gb_status_gauge_func(val); 
    527     } 
    528     else { 
    529         char buffer[100]; 
    530         int i; 
    531         static int lastv = 0; 
    532         int v = (int)(val*80); 
    533         if (v == lastv) return 0; 
    534         lastv = v; 
    535         for (i=0; i<v; i++) buffer[i] = '+'; 
    536         for (; i<80; i++) buffer[i] = '-'; 
    537         buffer[i] = 0; 
    538         fprintf(stdout, "%s\n", buffer); 
    539     } 
    540     return result; 
    541 } 
    542  
    543 int GB_status(const char *message) { 
    544     int result = 0; 
    545  
    546     if (gb_status_msg_func) { 
    547         result = gb_status_msg_func(message); 
    548     } 
    549     else { 
    550         fputs(message, stdout); 
    551         fputc('\n', stdout); 
    552     } 
    553  
    554     return result; 
    555 } 
    556  
  • branches/refactor/CORE/arb_msg.h

    r7084 r7097  
    3030GB_ERROR GB_export_errorf(const char *templat, ...) __ATTR__FORMAT(1) __ATTR__DEPRECATED_LATER; 
    3131GB_ERROR GB_IO_error(const char *action, const char *filename); 
    32 GB_ERROR GB_export_IO_error(const char *action, const char *filename) __ATTR__DEPRECATED; 
    33 GB_ERROR GB_print_error(void); 
    34 GB_ERROR GB_get_error(void) __ATTR__DEPRECATED; 
     32GB_ERROR GB_export_IO_error(const char *action, const char *filename) __ATTR__DEPRECATED_LATER; 
     33GB_ERROR GB_print_error(void) __ATTR__DEPRECATED_LATER; 
     34GB_ERROR GB_get_error(void) __ATTR__DEPRECATED_LATER; 
    3535bool GB_have_error(void); 
    3636GB_ERROR GB_await_error(void); 
     
    5050void GB_information(const char *message); 
    5151void GB_informationf(const char *templat, ...) __ATTR__FORMAT(1); 
    52 int GB_status(double val); 
    53 int GB_status(const char *message); 
    5452 
    5553#else 
  • branches/refactor/CORE/arb_progress.cxx

    r7084 r7097  
    1010// ================================================================ // 
    1111 
    12 #include "arb_progress.h" 
    13 #include <cstdio> 
    14  
     12#include <arb_progress.h> 
     13#include <arb_handlers.h> 
     14#include <arb_msg.h> 
     15#include <algorithm> 
     16 
     17// ---------------- 
     18//      counter 
     19 
     20struct null_counter: public arb_progress_counter { 
     21    null_counter(arb_parent_progress *progress_) : arb_progress_counter(progress_) {} 
     22 
     23    void inc() {} 
     24    void implicit_inc() {} 
     25    void done() {} 
     26    void restart(int) {} 
     27    void force_update() {} 
     28    void auto_subtitles(const char *) {} 
     29    bool has_auto_subtitles() { return false; } 
     30    void child_updates_gauge(double ) { 
     31        arb_assert(0); // wont 
     32    } 
     33 
     34#if defined(DUMP_PROGRESS) 
     35    void dump() { 
     36        fprintf(stderr, "null_counter\n"); 
     37    } 
     38#endif 
     39 
     40    arb_progress_counter* clone(arb_parent_progress *parent_, int ) const { return new null_counter(parent_); } 
     41}; 
     42 
     43struct no_counter : public null_counter { 
     44    no_counter(arb_parent_progress *progress_) : null_counter(progress_) {} 
     45    void inc() { 
     46        arb_assert(0); // this is no_counter - so explicit inc() is prohibited! 
     47    } 
     48    void child_updates_gauge(double gauge) { progress->update_gauge(gauge); } 
     49     
     50#if defined(DUMP_PROGRESS) 
     51    void dump() { 
     52        fprintf(stderr, "no_counter (=wrapper)\n"); 
     53    } 
     54#endif 
     55}; 
     56 
     57class concrete_counter: public arb_progress_counter { 
     58    int     explicit_counter; // incremented by calls to inc() etc. 
     59    int     implicit_counter; // incremented by child_done() 
     60    int     maxcount;         // == 0 -> does not really count (just a wrapper for child progresses) 
     61    double  autoUpdateEvery; 
     62    double  nextAutoUpdate; 
     63    char   *auto_subtitle_prefix; 
     64    int     last_auto_counter; 
     65 
     66    int dispositive_counter() const { return std::max(implicit_counter, explicit_counter); } 
     67 
     68    void init(int overallCount) { 
     69        arb_assert(overallCount>0); 
     70 
     71        implicit_counter  = 0; 
     72        explicit_counter  = 0; 
     73        maxcount          = overallCount; 
     74        autoUpdateEvery   = overallCount/500.0; // update status approx. 500 times 
     75        nextAutoUpdate    = 0; 
     76    } 
     77 
     78    bool refresh_if_needed(double my_counter) { 
     79        if (my_counter<nextAutoUpdate) return false; 
     80        progress->update_gauge(my_counter/maxcount); 
     81        if (auto_subtitle_prefix) { 
     82            int count = int(my_counter+1); 
     83            if (count>last_auto_counter) { 
     84                const char *autosub = GBS_global_string("%s #%i/%i", auto_subtitle_prefix, count, maxcount); 
     85                progress->set_text(LEVEL_SUBTITLE, autosub); 
     86                last_auto_counter   = count; 
     87            } 
     88        } 
     89        nextAutoUpdate += autoUpdateEvery; 
     90        return true; 
     91    } 
     92    void update_display_if_needed() { 
     93        int dcount = dispositive_counter(); 
     94        arb_assert(dcount <= maxcount); 
     95        refresh_if_needed(dcount); 
     96    } 
     97 
     98    void force_update() { 
     99        int oldNext    = nextAutoUpdate;; 
     100        nextAutoUpdate = 0; 
     101        update_display_if_needed(); 
     102        nextAutoUpdate = oldNext; 
     103    } 
     104 
     105public: 
     106    concrete_counter(arb_parent_progress *parent, int overall_count) 
     107        : arb_progress_counter(parent), 
     108          auto_subtitle_prefix(NULL), 
     109          last_auto_counter(0) 
     110    { 
     111        arb_assert(overall_count>0); 
     112        init(overall_count); 
     113    } 
     114    ~concrete_counter() { 
     115        free(auto_subtitle_prefix); 
     116#if defined(TEST_COUNTERS) 
     117        if (!progress->accept_invalid_counters) { 
     118            arb_assert(implicit_counter || explicit_counter); // progress was never incremented 
     119             
     120            arb_assert(implicit_counter <= maxcount); // overflow 
     121            arb_assert(explicit_counter <= maxcount); // overflow 
     122 
     123            arb_assert(dispositive_counter() == maxcount); // progress did not finish 
     124        } 
     125#endif 
     126    } 
     127 
     128#if defined(DUMP_PROGRESS) 
     129    void dump() { 
     130        fprintf(stderr, 
     131                "concrete_counter: explicit=%i, implicit=%i, maxcount=%i\n",  
     132                explicit_counter, implicit_counter, maxcount); 
     133    } 
     134#endif 
     135 
     136    void auto_subtitles(const char *prefix) { 
     137        arb_assert(!auto_subtitle_prefix); 
     138        freedup(auto_subtitle_prefix, prefix); 
     139        force_update(); 
     140    } 
     141    bool has_auto_subtitles() { return auto_subtitle_prefix; } 
     142 
     143    void inc()          { explicit_counter += 1; update_display_if_needed(); } 
     144    void implicit_inc() { implicit_counter += 1; update_display_if_needed(); } 
     145     
     146    void done() { 
     147        implicit_counter = explicit_counter = maxcount; 
     148        force_update(); 
     149    } 
     150 
     151    void restart(int overallCount) { 
     152        init(overallCount); 
     153        force_update(); 
     154    } 
     155 
     156    arb_progress_counter* clone(arb_parent_progress *parent, int overall_count) const{ 
     157        return new concrete_counter(parent, overall_count); 
     158    } 
     159    void child_updates_gauge(double child_gauge) { 
     160        refresh_if_needed(dispositive_counter()+child_gauge); 
     161    } 
     162}; 
     163 
     164// ----------------- 
     165//      progress 
     166 
     167 
     168class child_progress : public arb_parent_progress { 
     169    arb_parent_progress *parent; 
     170 
     171public: 
     172    child_progress(arb_parent_progress *parent_, const char *title, int overall_count) 
     173        : arb_parent_progress(overall_count 
     174                              ? (arb_progress_counter*)new concrete_counter(this, overall_count) 
     175                              : (arb_progress_counter*)new no_counter(this), 
     176                              title), 
     177          parent(parent_) 
     178    { 
     179        set_text(LEVEL_TITLE, title); 
     180#if defined(DUMP_PROGRESS) 
     181        freedup(name, GBS_global_string("child: %s", title)); 
     182#endif 
     183    } 
     184    ~child_progress() { 
     185        parent->child_terminated(); 
     186    } 
     187 
     188    SmartPtr<arb_parent_progress> create_child_progress(const char *title, int overall_count) { 
     189        return new child_progress(this, title, overall_count); 
     190    } 
     191 
     192#if defined(DUMP_PROGRESS) 
     193    void dump() { 
     194        arb_parent_progress::dump(); 
     195        fprintf(stderr, "is child of\n"); 
     196        parent->dump(); 
     197    } 
     198#endif 
     199 
     200    bool aborted() const { return parent->aborted(); } 
     201    void set_text(int level, const char *text) { parent->child_sets_text(level+has_title-1, text); } 
     202     
     203    void update_gauge(double gauge) { parent->child_updates_gauge(gauge); } 
     204}; 
     205 
     206class initial_progress: public arb_parent_progress { 
     207    bool user_abort; 
     208     
     209public: 
     210    initial_progress(const char *title, arb_progress_counter *counter_) 
     211        : arb_parent_progress(counter_, title), 
     212          user_abort(false) 
     213    { 
     214        arb_assert(title); // initial progress should have a title 
     215        impl->openstatus(title); 
     216#if defined(DUMP_PROGRESS) 
     217        freedup(name, GBS_global_string("initial: %s", title)); 
     218#endif 
     219    } 
     220    ~initial_progress() { 
     221        update_gauge(1.0); // due to numeric issues it often only counts up to 99.999% 
     222        impl->closestatus(); 
     223    } 
     224 
     225    SmartPtr<arb_parent_progress> create_child_progress(const char *title, int overall_count) { 
     226        return new child_progress(this, title, overall_count); 
     227    } 
     228 
     229    bool aborted() const { return user_abort; } 
     230    void set_text(int level, const char *text) { 
     231        if (!text) return; 
     232        switch (level+has_title-1) { 
     233            case LEVEL_TITLE: impl->set_title(text); break; 
     234            case LEVEL_SUBTITLE: impl->set_subtitle(text); break; 
     235        } 
     236    } 
     237 
     238    void update_gauge(double gauge) { user_abort = impl->set_gauge(gauge); } 
     239}; 
     240 
     241struct initial_wrapping_progress: public initial_progress { 
     242    initial_wrapping_progress(const char *title) 
     243        : initial_progress(title, new no_counter(this)) {} 
     244}; 
     245struct initial_counting_progress : public initial_progress { 
     246    initial_counting_progress(const char *title, int overall_count) 
     247        : initial_progress(title, new concrete_counter(this, overall_count)) {} 
     248}; 
     249 
     250class null_progress: public arb_parent_progress { 
     251public: 
     252    null_progress(arb_progress_counter *counter_) 
     253        : arb_parent_progress(counter_, false) 
     254    { 
     255#if defined(DUMP_PROGRESS) 
     256        freedup(name, "null_progress"); 
     257#endif 
     258    } 
     259 
     260    SmartPtr<arb_parent_progress> create_child_progress(const char*, int overall_count) { 
     261        return new null_progress(clone_counter(overall_count)); 
     262    } 
     263    bool aborted() const { return false; } 
     264    void set_text(int,const char*) {} 
     265    void update_gauge(double) {} 
     266}; 
    15267 
    16268// ------------------------- 
    17 //      ARB_basic_status 
    18  
    19 const int  HEIGHT = 10; 
    20 const int  WIDTH = 70; 
    21 const char CHAR  = '.'; 
    22  
    23 static int printed = 0; 
    24  
    25 static void basic_openstatus(const char *title) { 
    26     printf("Progress: %s\n", title); 
    27     printed = 0; 
    28 } 
    29 static void basic_closestatus() { 
    30     printf("[done]\n"); 
    31 } 
    32 static bool basic_set_subtitle(const char *) { return false; } 
    33 static bool basic_set_gauge(double gauge) { 
    34     int wanted = int(gauge*WIDTH*HEIGHT); 
    35     int nextLF = printed-printed%WIDTH+WIDTH; 
    36     while (printed<wanted) { 
    37         fputc(CHAR, stdout); 
    38         printed++; 
    39         if (printed == nextLF) { 
    40             printf(" [%5.1f%%]\n", printed*100.0/(WIDTH*HEIGHT)); 
    41             nextLF = printed-printed%WIDTH+WIDTH; 
    42         } 
    43     } 
    44     return false; 
    45 } 
    46 static bool basic_user_abort() { return false; } 
    47  
    48 arb_status_implementation ARB_basic_status = { 
    49     basic_openstatus,  
    50     basic_closestatus,  
    51     basic_set_subtitle,  
    52     basic_set_gauge,  
    53     basic_user_abort 
    54 }; 
    55  
    56 // ------------------------ 
    57 //      ARB_null_status 
    58  
    59 static void null_openstatus(const char *) {} 
    60 static void null_closestatus() {} 
    61 static bool null_set_subtitle(const char *) { return false; } 
    62 static bool null_set_gauge(double ) { return false; } 
    63 static bool null_user_abort() { return false; } 
    64  
    65 arb_status_implementation ARB_null_status = { 
    66     null_openstatus,  
    67     null_closestatus,  
    68     null_set_subtitle, 
    69     null_set_gauge, 
    70     null_user_abort 
    71 }; 
    72  
    73 // --------------------- 
    74 //      arb_progress 
    75  
    76 arb_status_implementation  *arb_progress::impl = &ARB_basic_status; 
    77 arb_progress::arb_progress *opened             = NULL; 
     269//      progress factory 
     270 
     271arb_parent_progress       *arb_parent_progress::recent = NULL; 
     272arb_status_implementation *arb_parent_progress::impl   = NULL; // defines implementation to display status 
     273 
     274SmartPtr<arb_parent_progress> arb_parent_progress::create(const char *title, int overall_count) { 
     275    if (recent) { 
     276        return recent->create_child_progress(title, overall_count); 
     277    } 
     278 
     279    impl = &active_arb_handlers->status; 
     280 
     281    if (overall_count == 0) return new initial_wrapping_progress(title); 
     282    return new initial_counting_progress(title, overall_count); 
     283 
     284} 
     285 
     286SmartPtr<arb_parent_progress> arb_parent_progress::create_suppressor() { 
     287    return new null_progress(new null_counter(NULL)); 
     288} 
    78289 
    79290// -------------------------------------------------------------------------------- 
     
    82293#include <test_unit.h> 
    83294 
    84 void TEST_arb_progress() { 
    85     arb_progress outer("outer", 100); 
    86     for (int i = 0; i<100; ++i) { 
    87         ++outer; 
    88     } 
    89 } 
     295const int OUTERCOUNT  = 100; 
     296const int INNERCOUNT  = 200; 
     297 
     298void TEST_simple_arb_progress() { 
     299    const int SIMPLECOUNT = OUTERCOUNT*INNERCOUNT; 
     300     
     301    arb_progress simple("simple", SIMPLECOUNT); 
     302    for (int i = 0; i<SIMPLECOUNT; ++i) { 
     303        simple.inc(); 
     304    } 
     305} 
     306 
     307#if defined(TEST_COUNTERS) 
     308void TEST_aborted_arb_progress() { 
     309    const int SIMPLECOUNT = OUTERCOUNT*INNERCOUNT; 
     310 
     311    arb_progress simple("simple", SIMPLECOUNT); 
     312    GB_ERROR     error = NULL; 
     313    for (int i = 0; i<SIMPLECOUNT && !error; ++i) { 
     314        if (i > 10) { 
     315            error = "someError"; 
     316        } 
     317        simple.inc_and_check_user_abort(error); 
     318    } 
     319    TEST_ASSERT_EQUAL(error, "someError"); 
     320} 
     321#endif 
     322 
     323void TEST_nested_arb_progress() { 
     324    for (int explicit_incr = 0; explicit_incr<2; ++explicit_incr) { 
     325        arb_progress outer(explicit_incr ? "explicit" : "only implicit", OUTERCOUNT); 
     326        if (explicit_incr) outer.auto_subtitles("expl"); 
     327        for (int i = 0; i<OUTERCOUNT; ++i) { 
     328            arb_progress inner("inner", INNERCOUNT); 
     329            for (int j = 0; j<INNERCOUNT; ++j) { 
     330                ++inner; 
     331            } 
     332            if (explicit_incr) outer.inc(); 
     333        } 
     334    } 
     335} 
     336 
     337static int nested_progress_count = 0; 
     338 
     339static void spawn_numerous_nested_progresses(int level, int recurse) { 
     340    const int    SUBPROGRESSES = 3; 
     341    arb_progress progress(GBS_global_string("progress level %i", level), SUBPROGRESSES); 
     342    nested_progress_count++; 
     343 
     344    if (recurse) { 
     345        for (int sp = 0; sp<SUBPROGRESSES; ++sp) { 
     346            spawn_numerous_nested_progresses(level+1, recurse-1); 
     347        } 
     348    } 
     349    else { 
     350        progress.done(); 
     351    } 
     352} 
     353 
     354void TEST_deep_nested_arb_progress() { 
     355    nested_progress_count = 0; 
     356    spawn_numerous_nested_progresses(0, 5); // spawns 364 nested progresses  
     357    printf("nested_progress_count=%i\n", nested_progress_count); 
     358} 
     359 
     360void TEST_wrapping_arb_progress() { 
     361    arb_progress progress("wrapper"); 
     362    for (int i = 0; i<3; ++i) { 
     363        arb_progress inner("inner", INNERCOUNT); 
     364        for (int j = 0; j<INNERCOUNT; ++j) { 
     365            ++inner; 
     366        } 
     367    } 
     368} 
     369 
     370 
    90371 
    91372#endif // UNIT_TESTS 
  • branches/refactor/CORE/arb_progress.h

    r7084 r7097  
    1616#include <arb_assert.h> 
    1717#endif 
    18  
    19 struct arb_status_implementation { 
    20     void (*openstatus)(const char *title);   // opens the status window and sets title 
    21     void (*closestatus)();                   // close the status window 
    22     bool (*set_subtitle)(const char *title); // set the subtitle (return true on user abort) 
    23     bool (*set_gauge)(double gauge);         // set the gauge (=percent) (return true on user abort) 
    24     bool (*user_abort)();                    // return true on user abort 
    25 }; 
    26  
    27 extern arb_status_implementation ARB_basic_status; 
    28 extern arb_status_implementation ARB_null_status; 
     18#ifndef ARB_ERROR_H 
     19#include <arb_error.h> 
     20#endif 
     21#ifndef ARBTOOLS_H 
     22#include <arbtools.h> 
     23#endif 
     24 
     25#if defined(DEBUG) 
     26#if defined(DEVEL_RALF) 
     27#define DUMP_PROGRESS 
     28#define TEST_COUNTERS 
     29#endif 
     30#endif 
     31 
     32 
     33class  arb_parent_progress; 
     34struct arb_status_implementation; 
     35 
     36class arb_progress_counter { 
     37protected: 
     38    arb_parent_progress *progress; 
     39public: 
     40    arb_progress_counter(arb_parent_progress *progress_) 
     41        : progress(progress_) 
     42    {} 
     43    virtual ~arb_progress_counter() {} 
     44 
     45    virtual void inc()                              = 0; 
     46    virtual void implicit_inc()                     = 0; 
     47    virtual void child_updates_gauge(double gauge)  = 0; 
     48    virtual void done()                             = 0; 
     49    virtual void force_update()                     = 0; 
     50    virtual void restart(int overall_count)         = 0; 
     51    virtual void auto_subtitles(const char *prefix) = 0; 
     52    virtual bool has_auto_subtitles()               = 0; 
     53 
     54#if defined(DUMP_PROGRESS) 
     55    virtual void dump() = 0; 
     56#endif 
     57 
     58    virtual arb_progress_counter *clone(arb_parent_progress *parent, int overall_count) const = 0; 
     59}; 
     60 
     61const int LEVEL_TITLE    = 0; 
     62const int LEVEL_SUBTITLE = 1; 
     63 
     64class arb_parent_progress : Noncopyable { 
     65    arb_parent_progress *prev_recent; 
     66    bool                 reuse_allowed; // display may be reused by childs 
     67 
     68protected: 
     69#if defined(DUMP_PROGRESS) 
     70    char *name; 
     71#endif 
     72     
     73    bool                  has_title; 
     74    arb_progress_counter *counter; 
     75 
     76    static arb_parent_progress       *recent; 
     77    static arb_status_implementation *impl; // defines implementation to display status 
     78 
     79    virtual SmartPtr<arb_parent_progress> create_child_progress(const char *title, int overall_count) = 0; 
     80 
     81    arb_parent_progress(arb_progress_counter *counter_, bool has_title_)  
     82        : reuse_allowed(false), 
     83          has_title(has_title_), 
     84          counter(counter_) 
     85    { 
     86        prev_recent = recent; 
     87        recent      = this; 
     88         
     89#if defined(DUMP_PROGRESS) 
     90        name = NULL; 
     91#endif 
     92 
     93#if defined(TEST_COUNTERS) 
     94        accept_invalid_counters = false; 
     95#endif 
     96    } 
     97public: 
     98#if defined(TEST_COUNTERS) 
     99    bool accept_invalid_counters; // if true, do not complain about unfinished counters 
     100#endif 
     101 
     102    virtual ~arb_parent_progress() { 
     103        delete counter; 
     104        recent = prev_recent; 
     105#if defined(DUMP_PROGRESS) 
     106        free(name); 
     107#endif 
     108    } 
     109 
     110    static SmartPtr<arb_parent_progress> create(const char *title, int overall_count); 
     111    static SmartPtr<arb_parent_progress> create_suppressor(); 
     112 
     113    virtual bool aborted() const                       = 0; 
     114    virtual void set_text(int level, const char *text) = 0; 
     115    virtual void update_gauge(double gauge)            = 0; 
     116 
     117#if defined(DUMP_PROGRESS) 
     118    virtual void dump() { 
     119        fprintf(stderr, "progress '%s'\n", name); 
     120        fprintf(stderr, "counter: "); 
     121        counter->dump(); 
     122    } 
     123#endif 
     124 
     125    void child_sets_text(int level, const char *text) { 
     126        set_text(level+1-reuse_allowed+counter->has_auto_subtitles(), text); 
     127    } 
     128    void allow_title_reuse() { reuse_allowed = true; } 
     129 
     130    void child_updates_gauge(double gauge) { counter->child_updates_gauge(gauge); } 
     131    void child_terminated() { counter->implicit_inc(); } 
     132 
     133    arb_progress_counter *clone_counter(int overall_count) { return counter->clone(this, overall_count); } 
     134    void initial_update() { counter->force_update(); } 
     135    void force_update() { counter->force_update(); } 
     136 
     137    void inc() { counter->inc(); } 
     138    void done() { counter->done(); } 
     139    void auto_subtitles(const char *prefix) { counter->auto_subtitles(prefix); } 
     140 
     141    static void show_comment(const char *comment) { 
     142        if (recent) recent->set_text(LEVEL_SUBTITLE, comment); 
     143    } 
     144}; 
    29145 
    30146class arb_progress { 
    31     static arb_status_implementation *impl; 
    32     static arb_progress *opened; 
    33  
    34     int counter; 
    35     int maxcount; 
    36     int autoUpdateEvery; 
    37     int nextAutoUpdate; 
    38     bool user_abort; 
    39  
    40     void track_abort(bool status_result) { if (status_result) user_abort = true; } 
    41     void init(int overallCount) { 
    42         counter         = 0; 
    43         maxcount        = overallCount; 
    44         autoUpdateEvery = overallCount <= 250 ? 1 : int(overallCount/250.0+0.5); 
    45         nextAutoUpdate  = counter+autoUpdateEvery; 
    46     } 
    47  
    48     void update() { track_abort(impl->set_gauge(counter/double(maxcount))); } 
    49  
    50 public: 
    51     arb_progress(const char *title, int overall_count) 
    52         : user_abort(false) 
    53     { 
    54         init(overall_count); 
    55         impl->openstatus(title); 
    56         update(); 
    57     } 
    58     ~arb_progress() { impl->closestatus(); } 
    59  
    60     void inc(int incr = 1) { 
    61         counter += incr; 
    62         arb_assert(counter <= maxcount); 
    63         if (counter >= nextAutoUpdate) { 
    64             update(); 
    65             nextAutoUpdate += autoUpdateEvery; 
    66         } 
    67     } 
    68     const arb_progress& operator++() { inc(); return *this; } 
    69     bool aborted() const { return user_abort; } 
    70     void restart(int overallCount) { init(overallCount); update(); } 
     147    SmartPtr<arb_parent_progress> used; 
     148 
     149    void setup(const char *title, int overall_count) { 
     150        used = arb_parent_progress::create(title, overall_count); 
     151        used->initial_update(); 
     152    } 
     153    void accept_invalid_counters() { 
     154#if defined(TEST_COUNTERS) 
     155        used->accept_invalid_counters = true; 
     156#endif 
     157    } 
     158 
     159public: 
     160    // ------------------------------ 
     161    // recommended interface: 
     162 
     163    arb_progress(const char *title, int overall_count) { 
     164        // open a progress indicator 
     165        //  
     166        // expects to be incremented 'overall_count' times 
     167        //      incrementation is done either 
     168        //      - explicitely by calling one of the inc...()-functions below or 
     169        //      - implicitely by creating another arb_progress while this one remains 
     170        // 
     171        // if you can't ahead-determine the exact number of incrementations, 
     172        // specify an upper-limit and call .done() before dtor. 
     173 
     174        arb_assert(overall_count>0); 
     175        setup(title, overall_count); 
     176    } 
     177    explicit arb_progress(const char *title) { 
     178        // open a wrapping progress indicator 
     179        // 
     180        // expects NOT to be incremented explicitely! 
     181        //      if arb_progresses are created while this exists, they reuse the progress window. 
     182        //      Useful to avoid spamming the user with numerous popping-up progress windows. 
     183        setup(title, 0); 
     184    } 
     185    explicit arb_progress(int overall_count) { 
     186        // open counting progress (reuses text of parent progress). 
     187        //  
     188        // Useful to separate text- from gauge-display or 
     189        // to summarize several consecutive child-progresses into one. 
     190        setup(NULL, overall_count); 
     191    } 
     192    arb_progress() { 
     193        // plain wrapper (avoids multiple implicit increments of its parent). 
     194        //  
     195        // usage-conditions: 
     196        // * caller increments progress in a loop and 
     197        // * loop calls one or more callees and callees open multiple progress bars. 
     198        //  
     199        // in this case the parent progress would be implicitely incremented several times 
     200        // per loop, resulting in wrong gauge. 
     201        // 
     202        // if you know the number of opened progresses, use arb_progress(int), 
     203        // otherwise add one wrapper-progress into the loop. 
     204        setup(NULL, 0); 
     205    } 
     206 
     207    void allow_title_reuse() { used->allow_title_reuse(); } 
     208 
     209    void subtitle(const char *stitle) { used->set_text(LEVEL_SUBTITLE, stitle); } 
     210 
     211    GB_ERROR error_if_aborted() { 
     212        return aborted() ? "Operation aborted on user request" : NULL; 
     213    } 
     214 
     215    GB_ERROR inc_and_error_if_aborted() { 
     216        inc(); 
     217        return error_if_aborted(); 
     218    } 
     219 
     220    void inc_and_check_user_abort(GB_ERROR& error)  { if (!error) error = inc_and_error_if_aborted(); else accept_invalid_counters(); } 
     221    void inc_and_check_user_abort(ARB_ERROR& error) { if (!error) error = inc_and_error_if_aborted(); else accept_invalid_counters(); } 
     222 
     223    bool aborted() { 
     224        // true if user pressed "Abort" 
     225        bool aborted_ = used->aborted(); 
     226#if defined(TEST_COUNTERS) 
     227        if (aborted_) accept_invalid_counters(); 
     228#endif 
     229        return aborted_; 
     230    } 
     231 
     232    void auto_subtitles(const char *prefix) { 
     233        // automatically update subtitles ("prefix #/#") 
     234        // prefix = NULL -> switch off 
     235        used->auto_subtitles(prefix); 
     236    } 
     237    static void show_comment(const char *comment) { 
     238        // Like subtitle(), but w/o needing to know anything about a eventually open progress 
     239        // e.g. used to show ARB is connecting to ptserver 
     240        arb_parent_progress::show_comment(comment); 
     241    } 
     242     
     243    // ------------------------------ 
     244    // less recommended interface: 
     245 
     246    void inc() { used->inc(); } // increment progress 
     247    const arb_progress& operator++() { inc(); return *this; } // ++progress 
     248 
     249    void done() { used->done(); } // set "done" (aka 100%). Useful when exiting some loop early 
     250    void dump() { 
     251        fprintf(stderr, "--------------------\n"); 
     252        used->dump(); 
     253    } 
     254    void force_update() { used->force_update(); } 
     255}; 
     256 
     257class arb_suppress_progress { 
     258    SmartPtr<arb_parent_progress> suppressor; 
     259public: 
     260    arb_suppress_progress() { suppressor = arb_parent_progress::create_suppressor(); } 
    71261}; 
    72262 
  • branches/refactor/DIST/DI_clusters.cxx

    r6858 r7097  
    2424#include <aw_awars.hxx> 
    2525#include <aw_msg.hxx> 
    26 #include <aw_status.hxx> 
     26#include <arb_progress.h> 
    2727#include <aw_root.hxx> 
    2828 
     
    152152    GB_ERROR  error   = NULL; 
    153153 
     154    arb_progress progress("Detecting clusters"); 
     155 
    154156    // calculate ClusterTree 
    155157    ClusterTreeRoot *tree = NULL; 
     
    175177        } 
    176178 
    177         aw_openstatus("Loading tree"); 
     179        progress.subtitle("Loading tree"); 
    178180        { 
    179181            char *tree_name = aw_root->awar(AWAR_DIST_TREE_CURR_NAME)->read_string(); 
     
    183185 
    184186        if (!error) error = tree->linkToDB(0, 0); 
    185         aw_closestatus(); 
    186187    } 
    187188 
  • branches/refactor/DIST/DI_clustertree.cxx

    r6858 r7097  
    1111 
    1212#include "di_clustertree.hxx" 
    13 #include <aw_status.hxx> 
     13#include <arb_progress.h> 
    1414#include <set> 
    1515#include <cmath> 
     
    7777#endif // DEBUG 
    7878 
    79     aw_status_counter cluster_progress(root->get_cluster_count()); 
    80     aw_openstatus("Searching clusters"); 
    81     aw_status(0.0); 
     79    arb_progress cluster_progress(root->get_cluster_count()); 
     80    cluster_progress.auto_subtitles("Cluster"); 
    8281 
    8382    GB_ERROR error = NULL; 
     
    118117    } 
    119118 
    120     aw_closestatus(); 
    121  
    122119    return error; 
    123120} 
     
    182179} 
    183180 
    184 void ClusterTree::detect_clusters(aw_status_counter& progress) { 
     181void ClusterTree::detect_clusters(arb_progress& progress) { 
    185182    if (state == CS_MAYBE_CLUSTER) { 
    186183        cl_assert(!is_leaf); 
     
    272269 
    273270        progress.inc(); 
    274         if (progress.aborted_by_user()) throw "aborted on userrequest"; 
     271        if (progress.aborted()) throw "aborted on userrequest"; 
    275272    } 
    276273 
  • branches/refactor/DIST/DI_main.cxx

    r6858 r7097  
    1818#include <aw_root.hxx> 
    1919#include <aw_msg.hxx> 
    20 #include <aw_status.hxx> 
    2120#include <arbdb.h> 
    2221 
  • branches/refactor/DIST/DI_matr.cxx

    r6858 r7097  
    3232#include <aw_file.hxx> 
    3333#include <aw_msg.hxx> 
    34 #include <aw_status.hxx> 
     34#include <arb_progress.h> 
    3535#include <aw_root.hxx> 
    3636 
     
    6464AP_matrix DI_dna_matrix(AP_MAX); 
    6565 
    66 static void delete_matrix_cb(AW_root *dummy) 
     66static void delete_matrix_cb(AW_root *) 
    6767{ 
    6868    delete DI_MATRIX::ROOT; 
     
    282282    } 
    283283    else { 
    284         species_in_sort_tree = GBT_get_names_of_species_in_tree(sort_tree); 
     284        species_in_sort_tree = GBT_get_names_of_species_in_tree(sort_tree, NULL); 
    285285 
    286286        { 
     
    461461        return "There are no species selected"; 
    462462    } 
    463     long row, col, pos, s_len; 
    464  
    465     const unsigned char *seq1, *seq2; 
    466     s_len = aliview->get_length(); 
     463 
     464    arb_progress progress("rates", (nentries*(nentries+1))/2); 
     465    GB_ERROR     error = NULL; 
     466 
     467    long s_len = aliview->get_length(); 
     468 
    467469    this->clear(hrates); 
    468470    this->clear(nrates); 
    469471    this->clear(pairs); 
    470     for (row = 0; row<nentries; row++) { 
    471         double gauge = (double)row/(double)nentries; 
    472         if (aw_status(gauge*gauge)) return "Aborted by user"; 
    473         for (col=0; col<row; col++) { 
    474             seq1 = entries[row]->sequence_parsimony->get_usequence(); 
    475             seq2 = entries[col]->sequence_parsimony->get_usequence(); 
    476             for (pos = 0; pos < s_len; pos++) { 
     472 
     473    for (long row = 0; row<nentries && !error; row++) { 
     474        for (long col=0; col<row; col++) { 
     475            const unsigned char *seq1 = entries[row]->sequence_parsimony->get_usequence(); 
     476            const unsigned char *seq2 = entries[col]->sequence_parsimony->get_usequence(); 
     477            for (long pos = 0; pos < s_len; pos++) { 
    477478                if (filter[pos]>=0) { 
    478479                    hrates[*seq1][*seq2]++; 
     
    483484                seq1++; seq2++; 
    484485            } 
    485         } 
    486     } 
    487     for (row = 0; row<nentries; row++) { 
    488         seq1 = entries[row]->sequence_parsimony->get_usequence(); 
    489         for (pos = 0; pos < s_len; pos++) { 
     486            progress.inc_and_check_user_abort(error); 
     487        } 
     488    } 
     489    for (long row = 0; row<nentries; row++) { 
     490        const unsigned char *seq1 = entries[row]->sequence_parsimony->get_usequence(); 
     491        for (long pos = 0; pos < s_len; pos++) { 
    490492            if (filter[pos]>=0) { 
    491493                pairs[seq1[pos]][seq1[filter[pos]]]++; 
     
    493495        } 
    494496    } 
    495     return 0; 
     497    return error; 
    496498} 
    497499 
     
    511513        } 
    512514        else { 
    513             aw_openstatus("Calculating Distance Matrix"); 
    514             aw_status("Calculating global rate matrix"); 
     515            arb_progress progress("Calculating distance matrix"); 
    515516 
    516517            fprintf(out, "Pairs in helical regions:\n"); 
     
    538539                for (pos = 0; pos<MAXDISTDEBUG; pos++) distdebug[pos] = 0.0; 
    539540 
    540                 for (row = 0; row<nentries; row++) { 
    541                     if (nentries > 100 || ((row&0xf) == 0)) { 
    542                         double gauge = (double)row/(double)nentries; 
    543                         if (aw_status(gauge*gauge)) { 
    544                             error = "Aborted by user"; 
    545                             break; 
    546                         } 
    547                     } 
     541                arb_progress dist_progress("distance", (nentries*(nentries+1))/2); 
     542                for (row = 0; row<nentries && !error; row++) { 
    548543                    fprintf (out, "\n%s  ", entries[row]->name); 
    549544 
    550                     for (col=0; col<row; col++) { 
     545                    for (col=0; col<row && !error; col++) { 
    551546                        const unsigned char *seq1, *seq2; 
    552547 
     
    581576                            distdebug[dist*MAXDISTDEBUG/all] = (double)hdist/(double)hall2; 
    582577                        } 
     578                        dist_progress.inc_and_check_user_abort(error); 
    583579                    } 
    584580                } 
     
    596592            } 
    597593             
    598             aw_closestatus(); 
    599594            fclose(out); 
    600595        } 
     
    693688    }; 
    694689 
    695     for (row = 0; row<nentries; row++) { 
    696         if (nentries > 100 || ((row&0xf) == 0)) { 
    697             double gauge = (double)row/(double)nentries; 
    698             if (aw_status(gauge*gauge)) { 
    699                 aw_closestatus(); 
    700                 if (aborted_flag) *aborted_flag = true; 
    701                 return "Aborted by user"; 
    702             } 
    703         } 
    704         for (col=0; col<=row; col++) { 
     690    arb_progress progress("Calculating distance matrix", (nentries*(nentries+1))/2); 
     691    GB_ERROR     error = NULL; 
     692    for (row = 0; row<nentries && !error; row++) { 
     693        for (col=0; col<=row && !error; col++) { 
    705694            columns = 0; 
    706695             
     
    846835                default:; 
    847836            }   /* switch */ 
    848         } 
    849     } 
    850     return 0; 
     837            progress.inc_and_check_user_abort(error); 
     838        } 
     839    } 
     840    if (aborted_flag && progress.aborted()) *aborted_flag = true; 
     841    return error; 
    851842} 
    852843 
     
    902893        return "Error"; 
    903894    } 
    904     if (!bootstrap_flag) { 
    905         aw_openstatus("Calculating Matrix"); 
    906         aw_status("Read the database"); 
    907     } 
    908  
     895    arb_progress progress("Calculating matrix"); 
     896     
    909897    char *cancel = aw_root->awar(AWAR_DIST_CANCEL_CHARS)->read_string(); 
    910898 
     
    925913        GB_pop_transaction(GLOBAL_gb_main); 
    926914        bool aborted = false; 
    927         if (aw_status()) { 
     915        if (progress.aborted()) { 
    928916            phm->unload(); 
    929917            error   = "Aborted by user"; 
     
    936924            else error            = phm->calculate(aw_root, cancel, 0.0, trans, &aborted); 
    937925        } 
    938         if (!bootstrap_flag) aw_closestatus(); 
    939926        delete DI_MATRIX::ROOT; 
    940927 
     
    998985 
    999986                if (!error) { 
    1000                     aw_openstatus("Mark species by distance"); 
    1001                     aw_status("Calculating distances"); 
    1002                     aw_status(0.0); 
    1003  
    1004987                    DI_MATRIX *old_root = DI_MATRIX::ROOT; 
    1005988                    DI_MATRIX::ROOT = 0; 
    1006989 
    1007                     size_t speciesCount = GBT_get_species_count(GLOBAL_gb_main); 
    1008                     size_t count        = 0; 
    1009                     bool markedSelected = false; 
     990                    size_t speciesCount   = GBT_get_species_count(GLOBAL_gb_main); 
     991                    bool   markedSelected = false; 
     992 
     993                    arb_progress progress("Mark species by distance", speciesCount); 
    1010994 
    1011995                    for (GBDATA *gb_species = GBT_first_species(GLOBAL_gb_main); 
     
    10391023 
    10401024                        delete phm; 
    1041                         aw_status(++count/(double)speciesCount); 
     1025                        progress.inc_and_check_user_abort(error); 
    10421026                    } 
    10431027 
    10441028                    di_assert(DI_MATRIX::ROOT == 0); 
    10451029                    DI_MATRIX::ROOT = old_root; 
    1046  
    1047                     aw_closestatus(); 
    10481030                } 
    10491031 
     
    11761158}; 
    11771159 
    1178 static int di_calculate_tree_show_status(int loop_count, int bootstrap_count) { 
    1179     // returns value of aw_status() 
    1180     int result = 0; 
    1181     if (bootstrap_count) { 
    1182         result = aw_status(GBS_global_string("Tree #%i of %i", loop_count, bootstrap_count)); 
    1183         if (!result) result = aw_status(loop_count/double(bootstrap_count)); 
    1184     } 
    1185     else { 
    1186         result = aw_status(GBS_global_string("Tree #%i of %u", loop_count, UINT_MAX)); 
    1187         if (!result) result = aw_status(loop_count/double(UINT_MAX)); 
    1188     } 
    1189     return result; 
    1190 } 
    1191  
    11921160static void di_calculate_tree_cb(AW_window *aww, AW_CL cl_weightedFilter, AW_CL bootstrap_flag) 
    11931161{ 
     
    11971165    char     **all_names       = 0; 
    11981166    int        loop_count      = 0; 
    1199     bool       close_stat      = false; 
    12001167    int        bootstrap_count = aw_root->awar(AWAR_DIST_BOOTSTRAP_COUNT)->read_int(); 
    12011168 
     
    12061173    } 
    12071174 
    1208     int starttime        = time(0); 
    1209     int trees_per_second = -1; 
    1210     int last_status_upd  = 0; 
    1211  
    12121175    WeightedFilter *weighted_filter = (WeightedFilter*)cl_weightedFilter; 
     1176 
     1177    SmartPtr<arb_progress> progress; 
    12131178 
    12141179    if (!error) { 
    12151180        { 
    1216             const char *stat_msg = 0; 
    12171181            if (bootstrap_flag) { 
    1218                 if (bootstrap_count) stat_msg = "Calculating bootstrap trees"; 
    1219                 else stat_msg = "Calculating bootstrap trees (KILL to stop)"; 
    1220             } 
    1221             else stat_msg = "Calculating tree"; 
    1222  
    1223             aw_openstatus(stat_msg); 
    1224             close_stat = true; 
     1182                if (bootstrap_count) { 
     1183                    progress = new arb_progress("Calculating bootstrap trees", bootstrap_count); 
     1184                } 
     1185                else { 
     1186                    progress    = new arb_progress("Calculating bootstrap trees (KILL to stop)", INT_MAX); 
     1187                } 
     1188                progress->auto_subtitles("tree"); 
     1189            } 
     1190            else { 
     1191                progress = new arb_progress("Calculating tree"); 
     1192            } 
    12251193        } 
    12261194 
    12271195        if (bootstrap_flag) { 
    1228             loop_count++; 
    1229             di_calculate_tree_show_status(loop_count, bootstrap_count); 
    1230  
    12311196            di_assert(DI_MATRIX::ROOT == 0); 
    12321197 
     
    12451210                } 
    12461211            } 
     1212            loop_count++; 
     1213            progress->inc(); 
    12471214        } 
    12481215    } 
     
    12501217    do { 
    12511218        if (error) break; 
    1252  
    1253         if (bootstrap_flag) { 
    1254             bool show_update = true; 
    1255             if (trees_per_second == -1) { 
    1256                 int timediff = time(0)-starttime; 
    1257                 if (timediff>10) { 
    1258                     trees_per_second = loop_count/timediff; 
    1259                 } 
    1260             } 
    1261             else { 
    1262                 if ((loop_count-last_status_upd)*4 < trees_per_second) { 
    1263                     show_update = false; // do not update more often than 4 times a second 
    1264                 } 
    1265             } 
    1266  
    1267             loop_count++; 
    1268             if (show_update) { // max. once per second 
    1269                 if (di_calculate_tree_show_status(loop_count, bootstrap_count)) { 
    1270                     break; // user abort 
    1271                 } 
    1272                 last_status_upd = loop_count; 
    1273             } 
    1274  
    1275         } 
    12761219 
    12771220        delete DI_MATRIX::ROOT; 
     
    13001243            insert_ctree(tree, 1); 
    13011244            GBT_delete_tree(tree); tree = 0; 
     1245            loop_count++; 
     1246            progress->inc(); 
     1247            if (!bootstrap_count) { 
     1248                int        t     = time(0); 
     1249                static int tlast = 0; 
     1250 
     1251                if (t>tlast) { 
     1252                    progress->force_update(); 
     1253                    tlast = t; 
     1254                } 
     1255            } 
    13021256        } 
    13031257        free(names); 
    1304  
    13051258    } while (bootstrap_flag && loop_count != bootstrap_count); 
    13061259 
     
    13271280    if (tree) GBT_delete_tree(tree); 
    13281281 
    1329     if (close_stat) aw_closestatus(); 
    1330     aw_status();                      // remove 'abort' flag 
     1282    // aw_status(); // remove 'abort' flag (@@@ got no equiv for arb_progress yet. really needed?) 
    13311283 
    13321284    if (bootstrap_flag) { 
     
    13421294 
    13431295    if (error) aw_message(error); 
     1296    progress->done(); 
    13441297} 
    13451298 
     
    13531306    } 
    13541307    AW_root *aw_root = aww->get_root(); 
    1355     char    *use = aw_root->awar(AWAR_DIST_ALIGNMENT)->read_string(); 
    1356     long ali_len = GBT_get_alignment_len(GLOBAL_gb_main, use); 
     1308    char    *use     = aw_root->awar(AWAR_DIST_ALIGNMENT)->read_string(); 
     1309    long     ali_len = GBT_get_alignment_len(GLOBAL_gb_main, use); 
     1310 
    13571311    if (ali_len<=0) { 
    13581312        GB_pop_transaction(GLOBAL_gb_main); 
     
    13621316    } 
    13631317 
    1364     aw_openstatus("Analyzing data..."); 
    1365     aw_status("Read the database"); 
    1366  
    1367     char    *filter_str = aw_root->awar(AWAR_DIST_FILTER_FILTER)->read_string(); 
    1368     char    *cancel = aw_root->awar(AWAR_DIST_CANCEL_CHARS)->read_string(); 
     1318    arb_progress progress("Analyzing data"); 
     1319 
     1320    char *filter_str = aw_root->awar(AWAR_DIST_FILTER_FILTER)->read_string(); 
     1321    char *cancel     = aw_root->awar(AWAR_DIST_CANCEL_CHARS)->read_string(); 
    13691322 
    13701323    AliView *aliview; 
     
    14061359    GB_pop_transaction(GLOBAL_gb_main); 
    14071360 
    1408     aw_status("Search Correction"); 
     1361    progress.subtitle("Search Correction"); 
    14091362 
    14101363    DI_TRANSFORMATION trans; 
     
    14121365 
    14131366    phm->analyse(); 
    1414     aw_closestatus(); 
    1415  
    14161367    delete phm; 
    14171368 
  • branches/refactor/DIST/DI_mldist.cxx

    r6858 r7097  
    1414#include <AP_seq_simple_pro.hxx> 
    1515#include <aw_msg.hxx> 
    16 #include <aw_status.hxx> 
     16#include <arb_progress.h> 
    1717 
    1818#include <cmath> 
     
    212212} 
    213213 
    214 const char *di_mldist::makedists(bool *aborted_flag) 
     214GB_ERROR di_mldist::makedists(bool *aborted_flag) 
    215215{ 
    216216    /* compute the distances */ 
    217     long            i, j, k, iterations; 
    218     double          delta, slope, curv; 
    219     int             b1=0, b2=0; 
    220     double              tt=0; 
    221     int         pos; 
     217    long   i, j, k, iterations; 
     218    double delta, slope, curv; 
     219    int    b1 = 0, b2=0; 
     220    double tt = 0; 
     221    int    pos; 
     222 
     223    arb_progress progress("Calculating distances", (spp*(spp+1))/2); 
     224    GB_ERROR     error = NULL; 
    222225 
    223226    for (i = 0; i < spp; i++) { 
    224227        matrix->set(i, i, 0.0); 
    225         { 
    226             double gauge = (double)i/(double)spp; 
    227             if (aw_status(gauge*gauge)) { 
    228                 if (aborted_flag) *aborted_flag = true; 
    229                 return "Aborted by user"; 
    230             } 
    231         } 
    232228        { 
    233229            /* move all unknown characters to del */ 
     
    293289                } 
    294290            } while (iterations < 20); 
     291 
     292            progress.inc_and_check_user_abort(error); 
    295293        } 
    296294        matrix->set(i, j, fracchange * tt); 
    297295    } 
    298     return 0; 
     296 
     297    if (aborted_flag && error) *aborted_flag = true; 
     298    return error; 
    299299} 
    300300 
  • branches/refactor/DIST/DI_protdist.cxx

    r6858 r7097  
    1212#include "di_matr.hxx" 
    1313#include <aw_msg.hxx> 
    14 #include <aw_status.hxx> 
     14#include <arb_progress.h> 
    1515#include <cmath> 
    1616 
     
    657657} 
    658658 
    659 const char *di_protdist::makedists(bool *aborted_flag) { 
     659GB_ERROR di_protdist::makedists(bool *aborted_flag) { 
    660660    /* compute the distances. 
    661661     * sets 'aborted_flag' to true, if it is non-NULL and user aborts the calculation 
    662662     */ 
    663     long            i, j, k, m, n, iterations; 
    664     double          delta, slope, curv; 
    665     int             b1=0, b2=0; 
    666     double              tt=0; 
    667     int         pos; 
     663    long   i, j, k, m, n, iterations; 
     664    double delta, slope, curv; 
     665    int    b1 = 0, b2=0; 
     666    double tt = 0; 
     667    int    pos; 
     668 
     669    arb_progress progress("Calculating distances", (spp*(spp+1))/2); 
     670    GB_ERROR     error = NULL; 
    668671 
    669672    for (i = 0; i < spp; i++) { 
    670673        matrix->set(i, i, 0.0); 
    671         { 
    672             double gauge = (double)i/(double)spp; 
    673             if (aw_status(gauge*gauge)) { 
    674                 if (aborted_flag) *aborted_flag = true; 
    675                 return "Aborted by user"; 
    676             } 
    677         } 
    678674        { 
    679675            /* move all unknown characters to del */ 
     
    788784            } 
    789785            matrix->set(i, j, fracchange * tt); 
    790         } 
    791     } 
    792     return 0; 
     786            progress.inc_and_check_user_abort(error); 
     787        } 
     788    } 
     789    if (aborted_flag && error) *aborted_flag = true; 
     790    return error; 
    793791} 
    794792 
  • branches/refactor/DIST/Makefile

    r7089 r7097  
    5656DI_clusters.o: $(ARBHOME)/INCLUDE/arb_error.h 
    5757DI_clusters.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     58DI_clusters.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    5859DI_clusters.o: $(ARBHOME)/INCLUDE/arb_string.h 
    5960DI_clusters.o: $(ARBHOME)/INCLUDE/ARB_Tree.hxx 
     
    6970DI_clusters.o: $(ARBHOME)/INCLUDE/aw_msg.hxx 
    7071DI_clusters.o: $(ARBHOME)/INCLUDE/aw_root.hxx 
    71 DI_clusters.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    7272DI_clusters.o: $(ARBHOME)/INCLUDE/aw_window.hxx 
    7373DI_clusters.o: $(ARBHOME)/INCLUDE/awt_sel_boxes.hxx 
     
    8888DI_clustertree.o: $(ARBHOME)/INCLUDE/arb_error.h 
    8989DI_clustertree.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     90DI_clustertree.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    9091DI_clustertree.o: $(ARBHOME)/INCLUDE/arb_string.h 
    9192DI_clustertree.o: $(ARBHOME)/INCLUDE/ARB_Tree.hxx 
     
    9596DI_clustertree.o: $(ARBHOME)/INCLUDE/arbtools.h 
    9697DI_clustertree.o: $(ARBHOME)/INCLUDE/attributes.h 
    97 DI_clustertree.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    9898DI_clustertree.o: $(ARBHOME)/INCLUDE/downcast.h 
    9999DI_clustertree.o: $(ARBHOME)/INCLUDE/dupstr.h 
     
    170170DI_main.o: $(ARBHOME)/INCLUDE/aw_preset.hxx 
    171171DI_main.o: $(ARBHOME)/INCLUDE/aw_root.hxx 
    172 DI_main.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    173172DI_main.o: $(ARBHOME)/INCLUDE/aw_window.hxx 
    174173DI_main.o: $(ARBHOME)/INCLUDE/awt.hxx 
     
    200199DI_matr.o: $(ARBHOME)/INCLUDE/arb_error.h 
    201200DI_matr.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     201DI_matr.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    202202DI_matr.o: $(ARBHOME)/INCLUDE/arb_string.h 
    203203DI_matr.o: $(ARBHOME)/INCLUDE/ARB_Tree.hxx 
     
    216216DI_matr.o: $(ARBHOME)/INCLUDE/aw_preset.hxx 
    217217DI_matr.o: $(ARBHOME)/INCLUDE/aw_root.hxx 
    218 DI_matr.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    219218DI_matr.o: $(ARBHOME)/INCLUDE/aw_window.hxx 
    220219DI_matr.o: $(ARBHOME)/INCLUDE/awt.hxx 
     
    247246DI_mldist.o: $(ARBHOME)/INCLUDE/arb_error.h 
    248247DI_mldist.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     248DI_mldist.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    249249DI_mldist.o: $(ARBHOME)/INCLUDE/arb_string.h 
    250250DI_mldist.o: $(ARBHOME)/INCLUDE/ARB_Tree.hxx 
     
    257257DI_mldist.o: $(ARBHOME)/INCLUDE/aw_color_groups.hxx 
    258258DI_mldist.o: $(ARBHOME)/INCLUDE/aw_msg.hxx 
    259 DI_mldist.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    260259DI_mldist.o: $(ARBHOME)/INCLUDE/downcast.h 
    261260DI_mldist.o: $(ARBHOME)/INCLUDE/dupstr.h 
     
    277276DI_protdist.o: $(ARBHOME)/INCLUDE/arb_error.h 
    278277DI_protdist.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     278DI_protdist.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    279279DI_protdist.o: $(ARBHOME)/INCLUDE/arb_string.h 
    280280DI_protdist.o: $(ARBHOME)/INCLUDE/ARB_Tree.hxx 
     
    287287DI_protdist.o: $(ARBHOME)/INCLUDE/aw_color_groups.hxx 
    288288DI_protdist.o: $(ARBHOME)/INCLUDE/aw_msg.hxx 
    289 DI_protdist.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    290289DI_protdist.o: $(ARBHOME)/INCLUDE/downcast.h 
    291290DI_protdist.o: $(ARBHOME)/INCLUDE/dupstr.h 
  • branches/refactor/DIST/di_clustertree.hxx

    r7006 r7097  
    3535class AP_sequence; 
    3636class ClusterTree; 
    37 class aw_status_counter; 
     37class arb_progress; 
    3838 
    3939enum ClusterState { 
     
    182182 
    183183    void init_tree(); 
    184     void detect_clusters(aw_status_counter& progress); 
     184    void detect_clusters(arb_progress& progress); 
    185185 
    186186    const NodeValues *get_branch_depths() { 
  • branches/refactor/DIST/di_mldist.hxx

    r6509 r7097  
    1111#ifndef DI_MLDIST_HXX 
    1212#define DI_MLDIST_HXX 
     13 
     14#ifndef ARB_CORE_H 
     15#include <arb_core.h> 
     16#endif 
    1317 
    1418const int DI_ML_RESOLUTION   = 1000; // max res 
     
    7680    ~di_mldist(); 
    7781 
    78     const char *makedists(bool *aborted_flag);    // calculate the distance matrix 
     82    GB_ERROR makedists(bool *aborted_flag);    // calculate the distance matrix 
    7983}; 
    8084 
  • branches/refactor/DIST/di_protdist.hxx

    r6509 r7097  
    101101    ~di_protdist(); 
    102102 
    103     const char *makedists(bool *aborted_flag);    // calculate the distance matrix 
     103    GB_ERROR makedists(bool *aborted_flag);    // calculate the distance matrix 
    104104}; 
    105105 
  • branches/refactor/EDIT4/ED4_base.cxx

    r6858 r7097  
    33#include <aw_awar.hxx> 
    44#include <aw_msg.hxx> 
    5 #include <aw_status.hxx> 
     5#include <arb_progress.h> 
    66#include <aw_root.hxx> 
    77 
     
    916916} 
    917917 
    918 void ED4_manager::create_consensus(ED4_group_manager *upper_group_manager, aw_status_counter *progress) { 
     918void ED4_manager::create_consensus(ED4_group_manager *upper_group_manager, arb_progress *progress) { 
    919919    // creates consensus 
    920920    // is called by group manager 
     
    928928        group_manager_for_child = group_manager; 
    929929 
    930         if (progress) { 
    931             progress->inc(); 
    932             if (progress->aborted_by_user()) ED4_exit(); 
    933         } 
     930        if (progress) progress->inc(); 
    934931    } 
    935932    int i; 
     
    947944                e4_assert(!group_manager_for_child->table().empty()); 
    948945                free(db_pointer); 
     946 
     947                if (progress) progress->inc(); 
    949948            } 
    950949        } 
  • branches/refactor/EDIT4/ED4_cursor.cxx

    r6858 r7097  
    66#include <AW_helix.hxx> 
    77#include <aw_msg.hxx> 
    8 #include <aw_status.hxx> 
     8#include <arb_progress.h> 
    99#include <aw_root.hxx> 
    1010 
     
    600600void ED4_finish_and_show_notFoundMessage() { 
    601601    if (not_found_counter != 0) { 
    602         GBS_strcat(not_found_message, GBS_global_string("(skipped display of %zu more species)\n", not_found_counter-MAX_SHOWN_MISSING_SPECIES)); 
     602        if (not_found_counter>MAX_SHOWN_MISSING_SPECIES) { 
     603            GBS_strcat(not_found_message, GBS_global_string("(skipped display of %zu more species)\n", not_found_counter-MAX_SHOWN_MISSING_SPECIES)); 
     604        } 
    603605        char *out_message = GBS_strclose(not_found_message); 
    604606        aw_message(out_message); 
     
    695697 
    696698    if (marked) { 
    697         GBDATA                    *gb_species          = GBT_first_marked_species(GLOBAL_gb_main); 
    698         int                        count               = 0; 
    699         char                      *buffer              = new char[BUFFERSIZE+1]; 
    700         char                      *bp                  = buffer; 
     699        GBDATA *gb_species = GBT_first_marked_species(GLOBAL_gb_main); 
     700        char   *buffer     = new char[BUFFERSIZE+1]; 
     701        char   *bp         = buffer; 
     702 
    701703        ED4_multi_species_manager *insert_into_manager = ED4_new_species_multi_species_manager(); 
    702704        ED4_group_manager         *group_man           = insert_into_manager->get_parent(ED4_L_GROUP)->to_group_manager(); 
    703         int                        group_depth         = insert_into_manager->calc_group_depth(); 
    704         int                        index               = 0; 
    705         ED4_index                  y                   = 0; 
    706         ED4_index                  lot                 = 0; 
    707         int                        inserted            = 0; 
    708         char                      *default_alignment   = GBT_get_default_alignment(GLOBAL_gb_main); 
    709  
    710         aw_openstatus("ARB_EDIT4"); 
    711         aw_status("Loading species..."); 
     705 
     706        int        group_depth       = insert_into_manager->calc_group_depth(); 
     707        int        index             = 0; 
     708        ED4_index  y                 = 0; 
     709        ED4_index  lot               = 0; 
     710        int        inserted          = 0; 
     711        char      *default_alignment = GBT_get_default_alignment(GLOBAL_gb_main); 
     712 
     713        arb_progress progress("Loading species", marked); 
    712714 
    713715        ED4_init_notFoundMessage(); 
    714716 
    715717        while (gb_species) { 
    716             count++; 
    717             GB_status(double(count)/double(marked)); 
    718  
    719718            const char *name = GBT_read_name(gb_species); 
    720719            ED4_species_name_terminal *name_term = ED4_find_species_name_terminal(name); 
     
    753752            } 
    754753            gb_species = GBT_next_marked_species(gb_species); 
     754            progress.inc(); 
    755755        } 
    756756 
     
    762762        } 
    763763 
    764         aw_closestatus(); 
    765764        aw_message(GBS_global_string("Loaded %i of %i marked species.", inserted, marked)); 
    766765 
  • branches/refactor/EDIT4/ED4_main.cxx

    r6858 r7097  
    3333#include <aw_awars.hxx> 
    3434#include <aw_msg.hxx> 
    35 #include <aw_status.hxx> 
    3635#include <aw_root.hxx> 
    3736#include <arbdbt.h> 
  • branches/refactor/EDIT4/ED4_no_class.cxx

    r6861 r7097  
    2727#include <aw_awars.hxx> 
    2828#include <aw_msg.hxx> 
    29 #include <aw_status.hxx> 
     29#include <arb_progress.h> 
    3030#include <aw_root.hxx> 
    3131 
     
    18701870            } 
    18711871            else { 
    1872                 error = AWTC_generate_one_name(GLOBAL_gb_main, new_species_full_name, acc, addid, new_species_name, true, true); 
     1872                error = AWTC_generate_one_name(GLOBAL_gb_main, new_species_full_name, acc, addid, new_species_name); 
    18731873                if (!error) {   // name was created 
    18741874                    if (!nameIsUnique(new_species_name, gb_species_data)) { 
     
    19231923                        SpeciesMergeList   sml       = 0; // list of species in group 
    19241924 
    1925                         aw_openstatus("Merging fields"); 
    1926  
    19271925                        error = group_man->route_down_hierarchy(add_species_to_merge_list, (AW_CL)&sml, (AW_CL)gb_species_data); 
    19281926                        if (!error && !sml) { 
     
    19441942                            SpeciesMergeList  sl         = sml; 
    19451943                            int               sl_length  = SpeciesMergeListLength(sml); 
    1946                             int              *fieldStat  = new int[sl_length]; // 0 = not used yet ; -1 = don't has field ; 1..n = field content, same number means same content 
     1944                            int              *fieldStat  = new int[sl_length];         // 0 = not used yet ; -1 = don't has field ; 1..n = field content, same number means same content 
     1945 
     1946                            arb_progress progress("Merging fields", sl_length); 
    19471947 
    19481948                            while (sl && !error) { // with all species do.. 
     
    19641964                                        fieldEnd[0] = 0; 
    19651965 
    1966                                         aw_status(fieldName); 
    19671966                                        GBDATA *gb_field = GB_search(sl->species, fieldName, GB_FIND); 
    19681967                                        e4_assert(gb_field); // field has to exist, cause it was found before 
     
    21122111                                free(newFields); 
    21132112                                sl = sl->next; 
    2114                                 if (aw_status() == 1) error = "Aborted by user"; 
     2113                                progress.inc_and_check_user_abort(error); 
    21152114                            } 
    21162115                            free(doneFields); 
     
    21182117                        } 
    21192118                        freeSpeciesMergeList(sml); sml = 0; 
    2120                         aw_closestatus(); 
    21212119                    } 
    21222120                } 
  • branches/refactor/EDIT4/ED4_root.cxx

    r6858 r7097  
    3333#include <aw_preset.hxx> 
    3434#include <aw_msg.hxx> 
    35 #include <aw_status.hxx> 
     35#include <arb_progress.h> 
    3636#include <aw_root.hxx> 
    3737#include <arb_version.h> 
     
    439439    total_no_of_species += species_count; 
    440440 
    441     aw_status_counter species_progress(total_no_of_species); 
     441    arb_progress startup_progress("EDIT4 startup"); 
    442442 
    443443    GB_push_transaction(GLOBAL_gb_main); 
     
    486486 
    487487        { 
    488             ED4_area_manager *top_area_manager = new ED4_area_manager("Top_Area_Manager", 0, y, 0, 0, device_manager); 
    489             device_manager->children->append_member(top_area_manager); 
    490             top_area_man = top_area_manager; 
    491  
    492             top_spacer_terminal = new ED4_spacer_terminal("Top_Spacer",   0, 0, 100, 10, top_area_manager); 
    493             top_area_manager->children->append_member(top_spacer_terminal); 
    494  
    495             top_multi_species_manager = new ED4_multi_species_manager("Top_MultiSpecies_Manager", x, 0, 0, 0, top_area_manager); 
    496             top_area_manager->children->append_member(top_multi_species_manager); 
    497  
    498             top_multi_spacer_terminal_beg = new ED4_spacer_terminal("Top_Multi_Spacer_Terminal_Beg", 0, 0, 0, 3, top_multi_species_manager); 
    499             top_multi_species_manager->children->append_member(top_multi_spacer_terminal_beg); 
    500  
    501             y+=3; 
    502  
    503  
    504             aw_openstatus("Reading species from database"); 
    505             aw_status((double)0); 
    506  
    507             reference = new AWT_reference(GLOBAL_gb_main); 
    508             database->scan_string(top_multi_species_manager, ref_terminals.get_ref_sequence_info(), ref_terminals.get_ref_sequence(), 
    509                                   area_string_top, &index, &y, species_progress); 
    510             GB_pop_transaction(GLOBAL_gb_main); 
    511  
    512             const int TOP_MID_LINE_HEIGHT   = 3; 
    513             int       TOP_MID_SPACER_HEIGHT = font_group.get_max_height()-TOP_MID_LINE_HEIGHT; 
    514  
    515             top_mid_line_terminal = new ED4_line_terminal("Top_Mid_Line_Terminal", 0, y, 0, TOP_MID_LINE_HEIGHT, device_manager);    // width will be set below 
    516             device_manager->children->append_member(top_mid_line_terminal); 
    517  
    518             y += TOP_MID_LINE_HEIGHT; 
    519  
    520  
    521             top_mid_spacer_terminal = new ED4_spacer_terminal("Top_Middle_Spacer", 0, y, 880, TOP_MID_SPACER_HEIGHT,   device_manager); 
    522             device_manager->children->append_member(top_mid_spacer_terminal); 
    523  
    524             // needed to avoid text-clipping problems: 
    525             main_manager->set_top_middle_spacer_terminal(top_mid_spacer_terminal); 
    526             main_manager->set_top_middle_line_terminal(top_mid_line_terminal); 
    527  
    528             y += TOP_MID_SPACER_HEIGHT; // add top-mid_spacer_terminal height 
    529  
    530             top_multi_species_manager->generate_id_for_groups(); 
    531         } 
    532  
    533         // ********** Top Area end ********** 
    534  
    535  
    536         // ********** Middle Area beginning ********** 
    537  
    538         { 
    539             middle_area_manager = new ED4_area_manager("Middle_Area_Manager", 0, y, 0, 0, device_manager); 
    540             device_manager->children->append_member(middle_area_manager); 
    541             middle_area_man = middle_area_manager; 
    542  
    543             tree_terminal = new ED4_tree_terminal("Tree", 0, 0, 2, change, middle_area_manager); 
    544             middle_area_manager->children->append_member(tree_terminal); 
    545  
    546             mid_multi_species_manager = new ED4_multi_species_manager("Middle_MultiSpecies_Manager", x, 0, 0, 0, middle_area_manager); 
    547             middle_area_manager->children->append_member(mid_multi_species_manager); 
    548  
    549             mid_multi_spacer_terminal_beg = new ED4_spacer_terminal("Mid_Multi_Spacer_Terminal_Beg", 0, 0, 0, 3, mid_multi_species_manager); 
    550             mid_multi_species_manager->children->append_member(mid_multi_spacer_terminal_beg); 
    551  
    552             y+=3;               // dummy height, to create a dummy layout ( to preserve order of objects ) 
    553  
    554             scroll_links.link_for_ver_slider = middle_area_manager; 
    555  
    556             help = y; 
    557             index = 0; 
     488            arb_progress species_progress("Loading species", total_no_of_species); 
    558489            { 
    559                 GB_transaction dummy(GLOBAL_gb_main); 
    560                 database->scan_string(mid_multi_species_manager, ref_terminals.get_ref_sequence_info(), ref_terminals.get_ref_sequence(), 
    561                                       area_string_middle, &index, &y, species_progress); 
    562             } 
    563  
    564             aw_closestatus(); 
     490                ED4_area_manager *top_area_manager = new ED4_area_manager("Top_Area_Manager", 0, y, 0, 0, device_manager); 
     491                device_manager->children->append_member(top_area_manager); 
     492                top_area_man = top_area_manager; 
     493 
     494                top_spacer_terminal = new ED4_spacer_terminal("Top_Spacer",   0, 0, 100, 10, top_area_manager); 
     495                top_area_manager->children->append_member(top_spacer_terminal); 
     496 
     497                top_multi_species_manager = new ED4_multi_species_manager("Top_MultiSpecies_Manager", x, 0, 0, 0, top_area_manager); 
     498                top_area_manager->children->append_member(top_multi_species_manager); 
     499 
     500                top_multi_spacer_terminal_beg = new ED4_spacer_terminal("Top_Multi_Spacer_Terminal_Beg", 0, 0, 0, 3, top_multi_species_manager); 
     501                top_multi_species_manager->children->append_member(top_multi_spacer_terminal_beg); 
     502 
     503                y+=3; 
     504 
     505                reference = new AWT_reference(GLOBAL_gb_main); 
     506                database->scan_string(top_multi_species_manager, ref_terminals.get_ref_sequence_info(), ref_terminals.get_ref_sequence(), 
     507                                      area_string_top, &index, &y, species_progress); 
     508                GB_pop_transaction(GLOBAL_gb_main); 
     509 
     510                const int TOP_MID_LINE_HEIGHT   = 3; 
     511                int       TOP_MID_SPACER_HEIGHT = font_group.get_max_height()-TOP_MID_LINE_HEIGHT; 
     512 
     513                top_mid_line_terminal = new ED4_line_terminal("Top_Mid_Line_Terminal", 0, y, 0, TOP_MID_LINE_HEIGHT, device_manager);    // width will be set below 
     514                device_manager->children->append_member(top_mid_line_terminal); 
     515 
     516                y += TOP_MID_LINE_HEIGHT; 
     517 
     518 
     519                top_mid_spacer_terminal = new ED4_spacer_terminal("Top_Middle_Spacer", 0, y, 880, TOP_MID_SPACER_HEIGHT,   device_manager); 
     520                device_manager->children->append_member(top_mid_spacer_terminal); 
     521 
     522                // needed to avoid text-clipping problems: 
     523                main_manager->set_top_middle_spacer_terminal(top_mid_spacer_terminal); 
     524                main_manager->set_top_middle_line_terminal(top_mid_line_terminal); 
     525 
     526                y += TOP_MID_SPACER_HEIGHT; // add top-mid_spacer_terminal height 
     527 
     528                top_multi_species_manager->generate_id_for_groups(); 
     529            } 
     530 
     531            // ********** Top Area end ********** 
     532 
     533 
     534            // ********** Middle Area beginning ********** 
    565535 
    566536            { 
    567                 ED4_spacer_terminal *mid_bot_spacer_terminal = new ED4_spacer_terminal("Middle_Bot_Spacer_Terminal", 0, y, 880, 10, device_manager); 
    568                 device_manager->children->append_member(mid_bot_spacer_terminal); 
    569             } 
    570  
    571             tree_terminal->extension.size[HEIGHT] = y - help; 
    572  
    573             mid_multi_species_manager->generate_id_for_groups(); 
    574             y += 10;                                                // add top-mid_spacer_terminal height 
    575  
    576             mid_bot_line_terminal = new ED4_line_terminal("Mid_Bot_Line_Terminal", 0, y, 0, 3, device_manager);    // width will be set below 
    577             device_manager->children->append_member(mid_bot_line_terminal); 
    578             y += 3; 
    579  
    580             total_bottom_spacer = new ED4_spacer_terminal("Total_Bottom_Spacer_terminal", 0, y, 0, 10000, device_manager); 
    581             device_manager->children->append_member(total_bottom_spacer); 
    582             y += 10000; 
    583         } 
    584  
    585         // ********** Middle Area end ********** 
    586  
    587         if (scroll_links.link_for_hor_slider) { 
    588             long ext_width = long(scroll_links.link_for_hor_slider->extension.size[WIDTH]); 
    589  
    590             top_multi_spacer_terminal_beg->extension.size[WIDTH] = ext_width + MAXSPECIESWIDTH + SEQUENCEINFOSIZE; 
    591             mid_multi_spacer_terminal_beg->extension.size[WIDTH] = ext_width + MAXSPECIESWIDTH + SEQUENCEINFOSIZE; 
    592             total_bottom_spacer->extension.size[WIDTH] = ext_width + MAXSPECIESWIDTH + SEQUENCEINFOSIZE; 
    593  
    594             top_mid_line_terminal->extension.size[WIDTH] = ext_width + TREETERMINALSIZE + MAXSPECIESWIDTH + SEQUENCEINFOSIZE; 
    595             mid_bot_line_terminal->extension.size[WIDTH] = ext_width + TREETERMINALSIZE + MAXSPECIESWIDTH + SEQUENCEINFOSIZE; 
    596  
    597         } 
    598  
    599         tree_terminal->set_links(NULL, mid_multi_species_manager);                          // set links 
    600         top_spacer_terminal->set_links(tree_terminal, top_multi_species_manager); 
    601         top_mid_spacer_terminal->set_links(middle_area_manager, NULL); 
    602         total_bottom_spacer->set_links(mid_bot_line_terminal, 0); 
     537                middle_area_manager = new ED4_area_manager("Middle_Area_Manager", 0, y, 0, 0, device_manager); 
     538                device_manager->children->append_member(middle_area_manager); 
     539                middle_area_man = middle_area_manager; 
     540 
     541                tree_terminal = new ED4_tree_terminal("Tree", 0, 0, 2, change, middle_area_manager); 
     542                middle_area_manager->children->append_member(tree_terminal); 
     543 
     544                mid_multi_species_manager = new ED4_multi_species_manager("Middle_MultiSpecies_Manager", x, 0, 0, 0, middle_area_manager); 
     545                middle_area_manager->children->append_member(mid_multi_species_manager); 
     546 
     547                mid_multi_spacer_terminal_beg = new ED4_spacer_terminal("Mid_Multi_Spacer_Terminal_Beg", 0, 0, 0, 3, mid_multi_species_manager); 
     548                mid_multi_species_manager->children->append_member(mid_multi_spacer_terminal_beg); 
     549 
     550                y+=3;               // dummy height, to create a dummy layout ( to preserve order of objects ) 
     551 
     552                scroll_links.link_for_ver_slider = middle_area_manager; 
     553 
     554                help = y; 
     555                index = 0; 
     556                { 
     557                    GB_transaction dummy(GLOBAL_gb_main); 
     558                    database->scan_string(mid_multi_species_manager, ref_terminals.get_ref_sequence_info(), ref_terminals.get_ref_sequence(), 
     559                                          area_string_middle, &index, &y, species_progress); 
     560                } 
     561 
     562                { 
     563                    ED4_spacer_terminal *mid_bot_spacer_terminal = new ED4_spacer_terminal("Middle_Bot_Spacer_Terminal", 0, y, 880, 10, device_manager); 
     564                    device_manager->children->append_member(mid_bot_spacer_terminal); 
     565                } 
     566 
     567                tree_terminal->extension.size[HEIGHT] = y - help; 
     568 
     569                mid_multi_species_manager->generate_id_for_groups(); 
     570                y += 10;                                                // add top-mid_spacer_terminal height 
     571 
     572                mid_bot_line_terminal = new ED4_line_terminal("Mid_Bot_Line_Terminal", 0, y, 0, 3, device_manager);    // width will be set below 
     573                device_manager->children->append_member(mid_bot_line_terminal); 
     574                y += 3; 
     575 
     576                total_bottom_spacer = new ED4_spacer_terminal("Total_Bottom_Spacer_terminal", 0, y, 0, 10000, device_manager); 
     577                device_manager->children->append_member(total_bottom_spacer); 
     578                y += 10000; 
     579            } 
     580 
     581            // ********** Middle Area end ********** 
     582 
     583            if (scroll_links.link_for_hor_slider) { 
     584                long ext_width = long(scroll_links.link_for_hor_slider->extension.size[WIDTH]); 
     585 
     586                top_multi_spacer_terminal_beg->extension.size[WIDTH] = ext_width + MAXSPECIESWIDTH + SEQUENCEINFOSIZE; 
     587                mid_multi_spacer_terminal_beg->extension.size[WIDTH] = ext_width + MAXSPECIESWIDTH + SEQUENCEINFOSIZE; 
     588                total_bottom_spacer->extension.size[WIDTH] = ext_width + MAXSPECIESWIDTH + SEQUENCEINFOSIZE; 
     589 
     590                top_mid_line_terminal->extension.size[WIDTH] = ext_width + TREETERMINALSIZE + MAXSPECIESWIDTH + SEQUENCEINFOSIZE; 
     591                mid_bot_line_terminal->extension.size[WIDTH] = ext_width + TREETERMINALSIZE + MAXSPECIESWIDTH + SEQUENCEINFOSIZE; 
     592 
     593            } 
     594 
     595            tree_terminal->set_links(NULL, mid_multi_species_manager);                          // set links 
     596            top_spacer_terminal->set_links(tree_terminal, top_multi_species_manager); 
     597            top_mid_spacer_terminal->set_links(middle_area_manager, NULL); 
     598            total_bottom_spacer->set_links(mid_bot_line_terminal, 0); 
     599        } 
    603600    } 
    604601 
     
    609606    // build consensi 
    610607    { 
    611         aw_openstatus("Initializing consensi"); 
    612         aw_status((double)0); 
    613  
    614         aw_status_counter progress(total_no_of_groups+1); // 1 is root_group_man 
    615  
    616         root_group_man->create_consensus(root_group_man, &progress); 
     608        arb_progress consensi_progress("Initializing consensi", total_no_of_species+total_no_of_groups+1); // 1 is root_group_man 
     609 
     610        root_group_man->create_consensus(root_group_man, &consensi_progress); 
    617611        e4_assert(root_group_man->table().ok()); 
    618  
    619         aw_closestatus(); 
     612        consensi_progress.done(); // if there is a "top"-group, progress increment is one to low 
    620613    } 
    621614 
  • branches/refactor/EDIT4/EDB_root_bact.cxx

    r6858 r7097  
    1313 
    1414#include <aw_msg.hxx> 
    15 #include <aw_status.hxx> 
     15#include <arb_progress.h> 
    1616#include <arbdbt.h> 
    1717#include <ad_config.h> 
     
    328328                                            ED4_index                  *length_of_terminals, /* height of terminals is meant */ 
    329329                                            int                         group_depth, 
    330                                             aw_status_counter          *progress) 
     330                                            arb_progress               *progress) 
    331331{ 
    332332#define SHIPSIZE 1024 
     
    398398            if (progress) { 
    399399                progress->inc(); 
    400                 if (progress->aborted_by_user()) ED4_exit(); 
     400                if (progress->aborted()) ED4_exit(); 
    401401            } 
    402402 
     
    423423                                     int                        *index, 
    424424                                     ED4_index                  *y, 
    425                                      aw_status_counter&          progress) 
     425                                     arb_progress&               progress) 
    426426{ 
    427427    ED4_multi_species_manager *multi_species_manager = NULL; 
  • branches/refactor/EDIT4/Makefile

    r7089 r7097  
    7070ED4_base.o: $(ARBHOME)/INCLUDE/arb_error.h 
    7171ED4_base.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     72ED4_base.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    7273ED4_base.o: $(ARBHOME)/INCLUDE/arb_string.h 
    7374ED4_base.o: $(ARBHOME)/INCLUDE/arbdb.h 
     
    8687ED4_base.o: $(ARBHOME)/INCLUDE/aw_preset.hxx 
    8788ED4_base.o: $(ARBHOME)/INCLUDE/aw_root.hxx 
    88 ED4_base.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    8989ED4_base.o: $(ARBHOME)/INCLUDE/aw_window.hxx 
    9090ED4_base.o: $(ARBHOME)/INCLUDE/cb.h 
     
    143143ED4_cursor.o: $(ARBHOME)/INCLUDE/arb_error.h 
    144144ED4_cursor.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     145ED4_cursor.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    145146ED4_cursor.o: $(ARBHOME)/INCLUDE/arb_string.h 
    146147ED4_cursor.o: $(ARBHOME)/INCLUDE/arbdb.h 
     
    160161ED4_cursor.o: $(ARBHOME)/INCLUDE/aw_position.hxx 
    161162ED4_cursor.o: $(ARBHOME)/INCLUDE/aw_root.hxx 
    162 ED4_cursor.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    163163ED4_cursor.o: $(ARBHOME)/INCLUDE/aw_window.hxx 
    164164ED4_cursor.o: $(ARBHOME)/INCLUDE/BI_helix.hxx 
     
    318318ED4_main.o: $(ARBHOME)/INCLUDE/aw_preset.hxx 
    319319ED4_main.o: $(ARBHOME)/INCLUDE/aw_root.hxx 
    320 ED4_main.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    321320ED4_main.o: $(ARBHOME)/INCLUDE/aw_window.hxx 
    322321ED4_main.o: $(ARBHOME)/INCLUDE/awt.hxx 
     
    494493ED4_no_class.o: $(ARBHOME)/INCLUDE/arb_error.h 
    495494ED4_no_class.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     495ED4_no_class.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    496496ED4_no_class.o: $(ARBHOME)/INCLUDE/arb_string.h 
    497497ED4_no_class.o: $(ARBHOME)/INCLUDE/arbdb.h 
     
    513513ED4_no_class.o: $(ARBHOME)/INCLUDE/aw_root.hxx 
    514514ED4_no_class.o: $(ARBHOME)/INCLUDE/aw_select.hxx 
    515 ED4_no_class.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    516515ED4_no_class.o: $(ARBHOME)/INCLUDE/aw_window.hxx 
    517516ED4_no_class.o: $(ARBHOME)/INCLUDE/awt.hxx 
     
    649648ED4_root.o: $(ARBHOME)/INCLUDE/arb_error.h 
    650649ED4_root.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     650ED4_root.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    651651ED4_root.o: $(ARBHOME)/INCLUDE/arb_string.h 
    652652ED4_root.o: $(ARBHOME)/INCLUDE/arb_version.h 
     
    668668ED4_root.o: $(ARBHOME)/INCLUDE/aw_preset.hxx 
    669669ED4_root.o: $(ARBHOME)/INCLUDE/aw_root.hxx 
    670 ED4_root.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    671670ED4_root.o: $(ARBHOME)/INCLUDE/aw_window.hxx 
    672671ED4_root.o: $(ARBHOME)/INCLUDE/awt.hxx 
     
    909908EDB_root_bact.o: $(ARBHOME)/INCLUDE/arb_error.h 
    910909EDB_root_bact.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     910EDB_root_bact.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    911911EDB_root_bact.o: $(ARBHOME)/INCLUDE/arb_string.h 
    912912EDB_root_bact.o: $(ARBHOME)/INCLUDE/arbdb.h 
     
    922922EDB_root_bact.o: $(ARBHOME)/INCLUDE/aw_msg.hxx 
    923923EDB_root_bact.o: $(ARBHOME)/INCLUDE/aw_position.hxx 
    924 EDB_root_bact.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    925924EDB_root_bact.o: $(ARBHOME)/INCLUDE/aw_window.hxx 
    926925EDB_root_bact.o: $(ARBHOME)/INCLUDE/dupstr.h 
  • branches/refactor/EDIT4/ed4_class.hxx

    r7084 r7097  
    8282class BI_ecoli_ref; 
    8383class AW_helix; 
    84 class aw_status_counter; 
     84class arb_progress; 
    8585class ST_ML; 
    8686class ed_key; 
     
    107107                                ED4_index                  *length_of_terminals, 
    108108                                int                         group_depth, 
    109                                 aw_status_counter          *progress); 
     109                                arb_progress               *progress); 
    110110 
    111111    ED4_returncode fill_data(ED4_multi_species_manager  *multi_species_manager, 
     
    134134                          int                        *index, 
    135135                          ED4_index                  *y, 
    136                           aw_status_counter&          progress); 
     136                          arb_progress&               progress); 
    137137 
    138138    ED4_returncode create_group_header(ED4_multi_species_manager   *parent, 
     
    891891    virtual ED4_returncode  move_requested_by_parent(ED4_move_info *mi); 
    892892 
    893     void create_consensus(ED4_group_manager *upper_group_manager, aw_status_counter *progress); 
     893    void create_consensus(ED4_group_manager *upper_group_manager, arb_progress *progress); 
    894894 
    895895    virtual ARB_ERROR route_down_hierarchy(ED4_cb cb, AW_CL cd1, AW_CL cd2); 
  • branches/refactor/GENOM/GEN_map.cxx

    r7070 r7097  
    2525#include <awt_input_mask.hxx> 
    2626#include <aw_msg.hxx> 
    27 #include <aw_status.hxx> 
     27#include <arb_progress.h> 
    2828#include <aw_root.hxx> 
    2929#include <adGene.h> 
     
    677677 
    678678struct EG2PS_data { 
    679     // used for status: 
    680     int count; 
    681     int marked_genes; 
    682  
     679    arb_progress        progress; 
    683680    GBDATA             *gb_species_data; 
    684681    char               *ali; 
    685682    UniqueNameDetector  existing; 
    686683    GB_HASH            *pseudo_hash; 
    687  
    688     int  duplicateSpecies;      // counts created gene-species with identical ACC 
    689     bool nameProblem;           // nameserver and DB disagree about names 
     684    int                 duplicateSpecies; // counts created gene-species with identical ACC 
     685    bool                nameProblem; // nameserver and DB disagree about names 
    690686 
    691687    EG2PS_data(const char *ali_, GBDATA *gb_species_data_, int marked_genes_) 
    692         : count(0) 
    693         , marked_genes(marked_genes_) 
    694         , gb_species_data(gb_species_data_) 
    695         , ali(strdup(ali_)) 
    696         , existing(gb_species_data, marked_genes) 
    697         , duplicateSpecies(0) 
    698         , nameProblem(false) 
     688        : progress(marked_genes_),  
     689          gb_species_data(gb_species_data_),  
     690          ali(strdup(ali_)),  
     691          existing(gb_species_data, marked_genes_),  
     692          duplicateSpecies(0),  
     693          nameProblem(false) 
    699694    { 
    700         pseudo_hash = GEN_create_pseudo_species_hash(GB_get_root(gb_species_data), marked_genes); 
     695        pseudo_hash = GEN_create_pseudo_species_hash(GB_get_root(gb_species_data), marked_genes_); 
    701696    } 
    702697 
     
    803798            if (create_new_gene_species) { 
    804799                if (!short_name) { // create a new name 
    805                     error = AWTC_generate_one_name(gb_main, full_name, acc, 0, short_name, false, false); 
     800                    error = AWTC_generate_one_name(gb_main, full_name, acc, 0, short_name); 
    806801                    if (!error) { // name has been created 
    807802                        if (eg2ps->existing.name_known(short_name)) { // nameserver-generated name is already in use 
     
    925920                    EG2PS_data *eg2ps = (EG2PS_data*)cl_user; 
    926921                    gen_extract_gene_2_pseudoSpecies(gb_species, gb_gene, eg2ps); 
    927                     if ((++eg2ps->count)%10 == 0) { 
    928                         aw_status(eg2ps->count/double(eg2ps->marked_genes)); 
    929                     } 
     922                    eg2ps->progress.inc(); 
    930923                } 
    931924                break; 
     
    11221115        ask_to_overwrite_alignment      = new AW_repeated_question(); 
    11231116 
    1124         aw_openstatus("Extracting pseudo-species"); 
     1117        arb_progress progress("Extracting pseudo-species"); 
    11251118        { 
    11261119            EG2PS_data *eg2ps = 0; 
     
    11391132            delete eg2ps; 
    11401133        } 
    1141         aw_closestatus(); 
    11421134 
    11431135        delete ask_to_overwrite_alignment; 
  • branches/refactor/GENOM/Makefile

    r7089 r7097  
    225225GEN_map.o: $(ARBHOME)/INCLUDE/arb_error.h 
    226226GEN_map.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     227GEN_map.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    227228GEN_map.o: $(ARBHOME)/INCLUDE/arb_string.h 
    228229GEN_map.o: $(ARBHOME)/INCLUDE/arbdb.h 
     
    243244GEN_map.o: $(ARBHOME)/INCLUDE/AW_rename.hxx 
    244245GEN_map.o: $(ARBHOME)/INCLUDE/aw_root.hxx 
    245 GEN_map.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    246246GEN_map.o: $(ARBHOME)/INCLUDE/aw_window.hxx 
    247247GEN_map.o: $(ARBHOME)/INCLUDE/awt.hxx 
  • branches/refactor/MERGE/MG_alignment.cxx

    r6861 r7097  
    1515#include <aw_awar.hxx> 
    1616#include <aw_msg.hxx> 
    17 #include <aw_status.hxx> 
    1817#include <arbdbt.h> 
    1918 
     
    8786} 
    8887 
    89 int MG_copy_and_check_alignments(AW_window */*aww*/, int show_status) { 
     88int MG_copy_and_check_alignments(AW_window */*aww*/) { 
    9089    // returns 0 if alignments are ok for merging. 
    9190    // checks types and names. 
    9291 
    9392    GB_ERROR error = NULL; 
    94  
    95     if (show_status) aw_openstatus("Checking alignments"); 
    9693 
    9794    GB_begin_transaction(GLOBAL_gb_dest); 
     
    133130 
    134131    if (error) aw_message(error); 
    135     if (show_status) aw_closestatus(); 
    136132 
    137133    return !!error; 
  • branches/refactor/MERGE/MG_checkfield.cxx

    r6858 r7097  
    1818#include <aw_root.hxx> 
    1919#include <aw_msg.hxx> 
    20 #include <aw_status.hxx> 
     20#include <arb_progress.h> 
    2121 
    2222#include <arbdbt.h> 
     
    169169} 
    170170 
    171 #undef IS_QUERIED 
    172 #define IS_QUERIED(gb_species) (1 & GB_read_usr_private(gb_species)) 
     171int mg_count_queried(GBDATA *gb_main) { 
     172    int queried  = 0; 
     173    for (GBDATA *gb_spec = GBT_first_species(gb_main); 
     174         gb_spec; 
     175         gb_spec = GBT_next_species(gb_spec)) 
     176    { 
     177        if (IS_QUERIED_SPECIES(gb_spec)) queried++; 
     178    } 
     179    return queried; 
     180} 
    173181 
    174182void mg_check_field_cb(AW_window *aww) { 
     
    189197    } 
    190198    else { 
    191         aw_openstatus("Checking fields"); 
    192199        error = GB_begin_transaction(GLOBAL_gb_merge); 
    193200 
     
    201208            GBDATA *gb_species2; 
    202209 
    203             int     sum_species   = 0; 
    204             int     species_count = 0; 
    205  
    206210            // First step: count selected species 
    207             for (gb_species1 = GBT_first_species_rel_species_data(gb_species_data1); 
    208                  gb_species1 && !error; 
    209                  gb_species1 = GBT_next_species(gb_species1)) 
    210             { 
    211                 if (IS_QUERIED(gb_species1)) sum_species++; 
    212             } 
     211            arb_progress progress("Checking fields", mg_count_queried(GLOBAL_gb_merge)); 
    213212 
    214213            // Delete all 'dest' fields in gb_database 2 
     
    231230 
    232231                if (!error) { 
    233                     if (IS_QUERIED(gb_species1)) { 
    234                         species_count++; 
    235                         if ((species_count & 0xf) == 0) aw_status(species_count / (double)sum_species); 
    236  
     232                    if (IS_QUERIED_SPECIES(gb_species1)) { 
    237233                        const char *name1 = GBT_read_name(gb_species1); 
    238234                        gb_species2       = GB_find_string(gb_species_data2, "name", name1, GB_IGNORE_CASE, SEARCH_GRANDCHILD); 
     
    277273                            free(s1); 
    278274                        } 
     275                        progress.inc_and_check_user_abort(error); 
    279276                    } 
    280277                } 
    281278            } 
    282279 
    283             aw_closestatus(); 
    284280            error = GB_end_transaction(GLOBAL_gb_merge, error); 
    285281            error = GB_end_transaction(GLOBAL_gb_dest, error); 
  • branches/refactor/MERGE/MG_main.cxx

    r6858 r7097  
    1919#include <aw_file.hxx> 
    2020#include <aw_msg.hxx> 
    21 #include <aw_status.hxx> 
     21#include <arb_progress.h> 
    2222#include <aw_root.hxx> 
    2323 
     
    8181    char *name = aww->get_root()->awar(AWAR_MAIN_DB"/file_name")->read_string(); 
    8282    char *type = aww->get_root()->awar(AWAR_MAIN_DB"/type")->read_string(); 
    83     aw_openstatus("Saving database"); 
     83 
     84    arb_progress progress("Saving database"); 
    8485    GB_begin_transaction(GLOBAL_gb_dest); 
    8586    GBT_check_data(GLOBAL_gb_dest, 0); 
    8687    GB_commit_transaction(GLOBAL_gb_dest); 
     88     
    8789    GB_ERROR error = GB_save(GLOBAL_gb_dest, name, type); 
    88     aw_closestatus(); 
    8990    if (error) aw_message(error); 
    9091    else AW_refresh_fileselection(aww->get_root(), AWAR_MAIN_DB); 
    91     delete name; 
    92     delete type; 
     92 
     93    free(type); 
     94    free(name); 
    9395} 
    9496 
     
    133135void MG_save_quick_result_cb(AW_window *aww) { 
    134136    char *name = aww->get_root()->awar(AWAR_MAIN_DB"/file_name")->read_string(); 
    135     aw_openstatus("Saving database"); 
     137 
     138    arb_progress progress("Saving database"); 
    136139    GB_begin_transaction(GLOBAL_gb_dest); 
    137140    GBT_check_data(GLOBAL_gb_dest, 0); 
    138141    GB_commit_transaction(GLOBAL_gb_dest); 
     142     
    139143    GB_ERROR error = GB_save_quick_as(GLOBAL_gb_dest, name); 
    140     aw_closestatus(); 
    141144    if (error) aw_message(error); 
    142145    else AW_refresh_fileselection(aww->get_root(), AWAR_MAIN_DB); 
    143     delete name; 
    144     return; 
     146 
     147    free(name); 
    145148} 
    146149 
     
    308311        } 
    309312        else { 
    310             aw_openstatus("Loading databases"); 
     313            arb_progress progress("Loading databases"); 
    311314 
    312315#if defined(DEVEL_RALF) 
     
    314317#warning when closing them, call AWT_browser_forget_db as well 
    315318#endif // DEVEL_RALF 
    316             aw_status("DATABASE I"); 
     319            progress.subtitle("DATABASE I"); 
    317320            GLOBAL_gb_merge             = GBT_open(merge, "rw", "$(ARBHOME)/lib/pts/*"); 
    318321            if (!GLOBAL_gb_merge) error = GB_await_error(); 
     
    322325#endif // DEBUG 
    323326 
    324                 aw_status("DATABASE II"); 
     327                progress.subtitle("DATABASE II"); 
    325328 
    326329                char       *main      = awr->awar(AWAR_MAIN_DB"/file_name")->read_string(); 
     
    347350                free(main); 
    348351            } 
    349             aw_closestatus(); 
    350352        } 
    351353        free(merge); 
  • branches/refactor/MERGE/MG_names.cxx

    r6858 r7097  
    1515#include <aw_awar.hxx> 
    1616#include <aw_msg.hxx> 
    17 #include <aw_status.hxx> 
     17#include <arb_progress.h> 
    1818 
    1919// -------------------------------------------------------------------------------- 
     
    123123 
    124124static GB_ERROR renameDB(const char *which, GBDATA *gb_db, bool allowDups) { 
    125     aw_openstatus(GBS_global_string("Generating new names in %s database", which)); 
    126     aw_status("Contacting name server"); 
    127  
    128     bool     isDuplicatesWarning; 
    129     GB_ERROR error = AWTC_pars_names(gb_db, 1, &isDuplicatesWarning); 
     125    arb_progress progress(GBS_global_string("Generating new names in %s database", which)); 
     126    bool         isDuplicatesWarning; 
     127    GB_ERROR     error = AWTC_pars_names(gb_db, &isDuplicatesWarning); 
    130128 
    131129    if (error) { 
     
    138136    } 
    139137 
    140     aw_closestatus(); 
    141138    return error; 
    142139} 
  • branches/refactor/MERGE/MG_preserves.cxx

    r6858 r7097  
    2020#include <aw_root.hxx> 
    2121#include <aw_msg.hxx> 
    22 #include <aw_status.hxx> 
     22#include <arb_progress.h> 
    2323#include <arbdbt.h> 
    2424 
     
    184184// add all candidate species to 'candidates' 
    185185static void find_species_candidates(Candidates& candidates, const char *const *ali_names) { 
    186     aw_status("Examining species (kill to stop)"); 
    187     aw_status(0.0); 
    188  
    189186    // collect names of all species in source database 
    190     GB_HASH *src_species = GBT_create_species_hash(GLOBAL_gb_merge); 
    191     long     src_count   = GBS_hash_count_elems(src_species); 
    192     long     found       = 0; 
    193     bool     aborted     = false; 
     187    GB_HASH      *src_species = GBT_create_species_hash(GLOBAL_gb_merge); 
     188    long          src_count   = GBS_hash_count_elems(src_species); 
     189    arb_progress  progress("Examining species", src_count); 
     190    bool          aborted     = false; 
    194191 
    195192    // find existing species in destination database 
     
    213210            } 
    214211 
    215             ++found; 
    216             aw_status(double(found)/src_count); 
    217             aborted = aw_status() != 0; // test user abort 
     212            progress.inc(); 
     213            aborted = progress.aborted(); 
    218214        } 
    219215    } 
     
    222218} 
    223219 
    224 // add all candidate SAIs to 'candidates' 
    225220static void find_SAI_candidates(Candidates& candidates, const char *const *ali_names) { 
    226     aw_status("Examining SAIs"); 
    227     aw_status(0.0); 
    228  
    229     // collect names of all SAIs in source database 
    230     GB_HASH *src_SAIs  = GBT_create_SAI_hash(GLOBAL_gb_merge); 
    231     long     src_count = GBS_hash_count_elems(src_SAIs); 
    232     long     found       = 0; 
     221    // add all candidate SAIs to 'candidates' 
     222    GB_HASH      *src_SAIs  = GBT_create_SAI_hash(GLOBAL_gb_merge); 
     223    long          src_count = GBS_hash_count_elems(src_SAIs); 
     224    arb_progress  progress("Examining SAIs", src_count); 
    233225 
    234226    // find existing SAIs in destination database 
     
    252244            } 
    253245 
    254             ++found; 
    255             aw_status(double(found)/src_count); 
     246            progress.inc(); 
    256247        } 
    257248    } 
     
    274265    Candidates  candidates; 
    275266 
    276     aw_openstatus("Searching candidates"); 
     267    arb_progress("Searching candidates"); 
    277268 
    278269    // add candidates 
     
    305296    } 
    306297    free(ali); 
    307  
    308     aw_closestatus(); 
    309298 
    310299    aww->update_selection_list(id); 
  • branches/refactor/MERGE/MG_species.cxx

    r6858 r7097  
    1818#include <aw_awars.hxx> 
    1919#include <aw_msg.hxx> 
    20 #include <aw_status.hxx> 
     20#include <arb_progress.h> 
    2121#include <aw_root.hxx> 
    2222#include <arb_str.h> 
     
    198198 
    199199void MG_transfer_selected_species(AW_window *aww) { 
    200     if (MG_copy_and_check_alignments(aww, 0) != 0) return; 
     200    if (MG_copy_and_check_alignments(aww) != 0) return; 
    201201 
    202202    AW_root  *aw_root = aww->get_root(); 
     
    208208    } 
    209209    else { 
    210         aw_openstatus("Transferring selected species"); 
     210        arb_progress progress("Transferring selected species"); 
    211211 
    212212        error             = GB_begin_transaction(GLOBAL_gb_merge); 
     
    234234        error = GB_end_transaction(GLOBAL_gb_merge, error); 
    235235        error = GB_end_transaction(GLOBAL_gb_dest, error); 
    236  
    237         aw_closestatus(); 
    238236    } 
    239237 
     
    241239} 
    242240 
    243 #undef IS_QUERIED 
    244 #define IS_QUERIED(gb_species) (1 & GB_read_usr_private(gb_species)) 
    245  
    246241void MG_transfer_species_list(AW_window *aww) { 
    247     if (MG_copy_and_check_alignments(aww, 0) != 0) return; 
     242    if (MG_copy_and_check_alignments(aww) != 0) return; 
    248243 
    249244    GB_ERROR error = NULL; 
    250     aw_openstatus("Transferring species"); 
    251245    GB_begin_transaction(GLOBAL_gb_merge); 
    252246    GB_begin_transaction(GLOBAL_gb_dest); 
     
    263257 
    264258    GBDATA *gb_species1; 
    265     int     queried = 0; 
    266     int     count   = 0; 
    267  
    268     for (gb_species1 = GBT_first_species(GLOBAL_gb_merge); gb_species1; gb_species1 = GBT_next_species(gb_species1)) { 
    269         if (IS_QUERIED(gb_species1)) queried++; 
    270     } 
    271  
    272     for (gb_species1 = GBT_first_species(GLOBAL_gb_merge); gb_species1; gb_species1 = GBT_next_species(gb_species1)) { 
    273         if (IS_QUERIED(gb_species1)) { 
     259    arb_progress progress("Transferring listed species", mg_count_queried(GLOBAL_gb_merge)); 
     260     
     261    for (gb_species1 = GBT_first_species(GLOBAL_gb_merge); 
     262         gb_species1; 
     263         gb_species1 = GBT_next_species(gb_species1)) 
     264    { 
     265        if (IS_QUERIED_SPECIES(gb_species1)) { 
    274266            GBDATA *gb_species_data2 = GB_search(GLOBAL_gb_dest, "species_data", GB_CREATE_CONTAINER); 
    275267 
     
    280272                                            source_organism_hash, dest_species_hash, 
    281273                                            error_suppressor); 
    282             aw_status(++count/double(queried)); 
     274 
     275            progress.inc_and_check_user_abort(error); 
    283276        } 
    284277    } 
     
    292285    error = GB_end_transaction(GLOBAL_gb_merge, error); 
    293286    GB_end_transaction_show_error(GLOBAL_gb_dest, error, aw_message); 
    294  
    295     aw_closestatus(); 
    296287} 
    297288 
    298289void MG_transfer_fields_cb(AW_window *aww) { 
    299     if (MG_copy_and_check_alignments(aww, 0) != 0) return; 
     290    if (MG_copy_and_check_alignments(aww) != 0) return; 
    300291 
    301292    char     *field  = aww->get_root()->awar(AWAR_FIELD1)->read_string(); 
     
    310301    } 
    311302    else { 
    312         aw_openstatus("Transferring fields"); 
    313303        GB_begin_transaction(GLOBAL_gb_merge); 
    314304        GB_begin_transaction(GLOBAL_gb_dest); 
     
    316306        GBDATA *gb_dest_species_data  = GB_search(GLOBAL_gb_dest, "species_data", GB_CREATE_CONTAINER); 
    317307        bool    transfer_of_alignment = GBS_string_matches(field, "ali_*/data", GB_MIND_CASE); 
     308 
     309        arb_progress progress("Transferring fields of listed", mg_count_queried(GLOBAL_gb_merge)); 
    318310 
    319311        AW_root   *aw_root = aww->get_root(); 
     
    324316             gb_species1 = GBT_next_species(gb_species1)) 
    325317        { 
    326             if (IS_QUERIED(gb_species1)) { 
     318            if (IS_QUERIED_SPECIES(gb_species1)) { 
    327319                const char *name1       = GBT_read_name(gb_species1); 
    328320                GBDATA     *gb_species2 = GB_find_string(gb_dest_species_data, "name", name1, GB_IGNORE_CASE, SEARCH_GRANDCHILD); 
     
    386378                    } 
    387379                } 
     380                progress.inc_and_check_user_abort(error); 
    388381            } 
    389382        } 
     
    393386        error = GB_end_transaction(GLOBAL_gb_merge, error); 
    394387        error = GB_end_transaction(GLOBAL_gb_dest, error); 
    395         aw_closestatus(); 
    396388    } 
    397389 
     
    433425 
    434426void MG_move_field_cb(AW_window *aww) { 
    435     if (MG_copy_and_check_alignments(aww, 0) != 0) return; 
     427    if (MG_copy_and_check_alignments(aww) != 0) return; 
    436428 
    437429    AW_root  *aw_root = aww->get_root(); 
     
    446438    } 
    447439    else { 
    448         aw_openstatus("Cross Move field"); 
     440        arb_progress progress("Cross Move field"); 
    449441        error             = GB_begin_transaction(GLOBAL_gb_merge); 
    450442        if (!error) error = GB_begin_transaction(GLOBAL_gb_dest); 
     
    500492        error = GB_end_transaction(GLOBAL_gb_merge, error); 
    501493        error = GB_end_transaction(GLOBAL_gb_dest, error); 
    502  
    503         aw_closestatus(); 
    504494    } 
    505495 
     
    551541        char    *tag_del1 = awr->awar(AWAR_TAG_DEL1)->read_string(); 
    552542 
     543        arb_progress progress("Merging tagged fields", mg_count_queried(GLOBAL_gb_merge)); 
     544         
    553545        GBDATA *gb_dest_species_data     = GB_search(GLOBAL_gb_dest, "species_data", GB_CREATE_CONTAINER); 
    554546        if (!gb_dest_species_data) error = GB_await_error(); 
     
    558550                 gb_species1 = GBT_next_species(gb_species1)) 
    559551            { 
    560                 if (IS_QUERIED(gb_species1)) { 
     552                if (IS_QUERIED_SPECIES(gb_species1)) { 
    561553                    char *name       = GBT_read_string(gb_species1, "name"); 
    562554                    if (!name) error = GB_await_error(); 
     
    579571                    } 
    580572                    free(name); 
     573                    progress.inc_and_check_user_abort(error); 
    581574                } 
    582575            } 
  • branches/refactor/MERGE/Makefile

    r7089 r7097  
    8484MG_alignment.o: $(ARBHOME)/INCLUDE/aw_msg.hxx 
    8585MG_alignment.o: $(ARBHOME)/INCLUDE/aw_root.hxx 
    86 MG_alignment.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    8786MG_alignment.o: $(ARBHOME)/INCLUDE/aw_window.hxx 
    8887MG_alignment.o: $(ARBHOME)/INCLUDE/awt_sel_boxes.hxx 
     
    10099MG_checkfield.o: $(ARBHOME)/INCLUDE/arb_error.h 
    101100MG_checkfield.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     101MG_checkfield.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    102102MG_checkfield.o: $(ARBHOME)/INCLUDE/arb_string.h 
    103103MG_checkfield.o: $(ARBHOME)/INCLUDE/arbdb.h 
     
    113113MG_checkfield.o: $(ARBHOME)/INCLUDE/aw_root.hxx 
    114114MG_checkfield.o: $(ARBHOME)/INCLUDE/aw_select.hxx 
    115 MG_checkfield.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    116115MG_checkfield.o: $(ARBHOME)/INCLUDE/aw_window.hxx 
    117116MG_checkfield.o: $(ARBHOME)/INCLUDE/awt.hxx 
     
    216215MG_main.o: $(ARBHOME)/INCLUDE/arb_error.h 
    217216MG_main.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     217MG_main.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    218218MG_main.o: $(ARBHOME)/INCLUDE/arb_string.h 
    219219MG_main.o: $(ARBHOME)/INCLUDE/arbdb.h 
     
    231231MG_main.o: $(ARBHOME)/INCLUDE/AW_rename.hxx 
    232232MG_main.o: $(ARBHOME)/INCLUDE/aw_root.hxx 
    233 MG_main.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    234233MG_main.o: $(ARBHOME)/INCLUDE/aw_window.hxx 
    235234MG_main.o: $(ARBHOME)/INCLUDE/awt.hxx 
     
    247246MG_names.o: $(ARBHOME)/INCLUDE/arb_error.h 
    248247MG_names.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     248MG_names.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    249249MG_names.o: $(ARBHOME)/INCLUDE/arb_string.h 
    250250MG_names.o: $(ARBHOME)/INCLUDE/arbdb.h 
     
    259259MG_names.o: $(ARBHOME)/INCLUDE/AW_rename.hxx 
    260260MG_names.o: $(ARBHOME)/INCLUDE/aw_root.hxx 
    261 MG_names.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    262261MG_names.o: $(ARBHOME)/INCLUDE/aw_window.hxx 
    263262MG_names.o: $(ARBHOME)/INCLUDE/cb.h 
     
    275274MG_preserves.o: $(ARBHOME)/INCLUDE/arb_error.h 
    276275MG_preserves.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     276MG_preserves.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    277277MG_preserves.o: $(ARBHOME)/INCLUDE/arb_string.h 
    278278MG_preserves.o: $(ARBHOME)/INCLUDE/arbdb.h 
     
    287287MG_preserves.o: $(ARBHOME)/INCLUDE/aw_msg.hxx 
    288288MG_preserves.o: $(ARBHOME)/INCLUDE/aw_root.hxx 
    289 MG_preserves.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    290289MG_preserves.o: $(ARBHOME)/INCLUDE/aw_window.hxx 
    291290MG_preserves.o: $(ARBHOME)/INCLUDE/awt.hxx 
     
    304303MG_species.o: $(ARBHOME)/INCLUDE/arb_error.h 
    305304MG_species.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     305MG_species.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    306306MG_species.o: $(ARBHOME)/INCLUDE/arb_str.h 
    307307MG_species.o: $(ARBHOME)/INCLUDE/arb_string.h 
     
    319319MG_species.o: $(ARBHOME)/INCLUDE/aw_root.hxx 
    320320MG_species.o: $(ARBHOME)/INCLUDE/aw_select.hxx 
    321 MG_species.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    322321MG_species.o: $(ARBHOME)/INCLUDE/aw_window.hxx 
    323322MG_species.o: $(ARBHOME)/INCLUDE/awt.hxx 
  • branches/refactor/MERGE/merge.hxx

    r6551 r7097  
    4545GB_ERROR MG_expect_renamed(); 
    4646 
    47 int MG_copy_and_check_alignments(AW_window *aww, int show_status); 
     47int MG_copy_and_check_alignments(AW_window *aww); 
    4848 
    4949// export of gene-species: 
     
    5858#define AWAR_MERGE_GENE_SPECIES_BASE "merge/gene_species/" 
    5959 
     60#define IS_QUERIED_SPECIES(gb_species) (1 & GB_read_usr_private(gb_species)) 
     61int mg_count_queried(GBDATA *gb_main); 
     62 
    6063const char *MG_left_AWAR_SPECIES_NAME(); 
    6164const char *MG_right_AWAR_SPECIES_NAME(); 
  • branches/refactor/MULTI_PROBE/MP_Generation.cxx

    r6595 r7097  
    1212#include "MP_externs.hxx" 
    1313#include "MultiProbe.hxx" 
     14#include <arb_progress.h> 
    1415 
    1516bool Stop_evaluation = false; 
     
    5051    double  fitness = 0; 
    5152    double  dummy = 0; 
    52  
    5353    int     i; 
     54 
     55    arb_progress progress(probe_combi_array_length); 
    5456 
    5557    for (i=0; i<probe_combi_array_length; i++) 
     
    6769            max_fit = dummy; 
    6870 
    69         if (!MP_check_status(generation_counter, old_avg_fit, min_fit, max_fit))       // Berechnungen abbrechen 
     71        if (MP_aborted(generation_counter, old_avg_fit, min_fit, max_fit, progress))       // Berechnungen abbrechen 
    7072        { 
    7173            Stop_evaluation = true; 
     
    7375            return; 
    7476        } 
     77        progress.inc(); 
    7578    } 
    7679 
  • branches/refactor/MULTI_PROBE/MP_externs.hxx

    r6583 r7097  
    1212#define MP_EXTERNS_HXX 
    1313 
    14 class        AW_window; 
    15 class        AW_root; 
     14class AW_window; 
     15class AW_root; 
     16class arb_progress; 
     17 
    1618typedef long AW_CL;             // generic client data type (void *) 
    1719 
     
    3739void MP_selected_chosen(AW_window *aww); 
    3840 
    39 bool MP_check_status(int gen_cnt, double avg_fit, double min_fit, double max_fit); 
     41bool MP_aborted(int gen_cnt, double avg_fit, double min_fit, double max_fit, arb_progress& progress); 
    4042 
    4143char *MP_get_comment(int which, const char *str); 
  • branches/refactor/MULTI_PROBE/MP_mo_liste.cxx

    r6858 r7097  
    3838    } 
    3939    delete [] mo_liste; 
    40     GBS_free_hash(hashptr); 
     40    if (hashptr) GBS_free_hash(hashptr); 
    4141} 
    4242 
  • branches/refactor/MULTI_PROBE/MP_noclass.cxx

    r6861 r7097  
    1717#include <aw_select.hxx> 
    1818#include <aw_msg.hxx> 
    19 #include <aw_status.hxx> 
     19#include <arb_progress.h> 
    2020#include <aw_root.hxx> 
    2121#include <TreeCallbacks.hxx> 
     
    200200} 
    201201 
    202 bool MP_check_status(int gen_cnt, double avg_fit, double min_fit, double max_fit) { 
     202bool MP_aborted(int gen_cnt, double avg_fit, double min_fit, double max_fit, arb_progress& progress) { 
    203203    char view_text[150]; 
    204204 
     
    208208        sprintf(view_text, "Gen:%d Avg:%5i Min:%5i Max:%5i", gen_cnt, int(avg_fit), int(min_fit), int(max_fit)); 
    209209 
    210     if (aw_status(view_text) == 1) 
    211     { 
    212         aw_closestatus(); 
    213         return false;                   // Berechnungen abbrechen !!!!!! 
    214     } 
    215  
    216     return true; 
     210    progress.subtitle(view_text); 
     211    return progress.aborted(); 
    217212} 
    218213 
     
    347342    single_mismatch = new int[selected_probes_count]; 
    348343 
    349     aw_openstatus("Computing multiprobes"); 
     344    arb_progress progress("Computing multiprobes"); 
    350345 
    351346    while ((ptr2 = (char *)aww->get_list_entry_char_value())) 
     
    377372    mp_main->destroy_probe_eval(); 
    378373 
    379     aw_closestatus(); 
    380374    aww2->activate(); 
    381  
    382375} 
    383376 
  • branches/refactor/MULTI_PROBE/MP_probe.cxx

    r6858 r7097  
    1515#include <aw_window.hxx> 
    1616#include <aw_msg.hxx> 
    17 #include <aw_status.hxx> 
     17#include <arb_progress.h> 
    1818 
    1919#include <ctime> 
     
    3737    } 
    3838 
    39     MP_check_status(0, 0.0, 0.0, 0.0); 
    40  
     39 
     40    long max_generation = moeglichkeiten/(3*MAXPOPULATION)-1; 
     41 
     42    mp_assert(max_generation>1); 
     43    arb_progress progress(max_generation); 
     44    MP_aborted(0, 0.0, 0.0, 0.0, progress); 
     45     
    4146    // hier beginnt der genetische Algorithmus 
    42     do 
    43     { 
     47    do { 
    4448        act_generation->calc_fitness(0, avg_fit);       // hier wird auch init_roulette_wheel gemacht 
    4549        avg_fit = act_generation->get_avg_fit(); 
    4650 
    47         if (avg_fit == 0 && !Stop_evaluation) 
    48         { 
    49             aw_message("Please choose better Probes!"); 
    50             return; 
    51         } 
    52  
    53         if (Stop_evaluation)            // Abgebrochen durch Benutzer 
    54         { 
    55             Stop_evaluation = false; 
    56             act_generation->check_for_results(); 
    57             return; 
    58         } 
    59  
    60         child_generation = act_generation->create_next_generation(); 
    61         delete act_generation; 
    62         act_generation = NULL; 
    63  
    64  
    65         child_generation->check_for_results(); 
    66  
    67         act_generation = child_generation;  // zum testen hier nur generierung einer Generation 
    68     } 
    69     while (moeglichkeiten/3 > act_generation->get_generation() * MAXPOPULATION) ; // hier abbruchbedingung 
     51        if (!Stop_evaluation) { 
     52            if (avg_fit == 0) { 
     53                aw_message("Please choose better Probes!"); 
     54                return; 
     55            } 
     56            child_generation = act_generation->create_next_generation(); 
     57            delete act_generation; act_generation = NULL; 
     58 
     59            child_generation->check_for_results(); 
     60 
     61            act_generation = child_generation;  // zum testen hier nur generierung einer Generation 
     62            progress.inc(); 
     63        } 
     64    } 
     65    while (act_generation->get_generation() <= max_generation && !Stop_evaluation) ; // hier abbruchbedingung 
     66 
     67    Stop_evaluation = false; 
    7068 
    7169    // Abbruchbedingung deshalb, weil der genetische Alg. keinesfalls mehr Versuche 
     
    194192            delete mp_main->get_stc(); 
    195193 
    196         aw_status("Starting computation"); 
    197194        mp_main->set_stc(new ST_Container(MAXSONDENHASHSIZE)); 
    198195    } 
  • branches/refactor/MULTI_PROBE/MP_probe.hxx

    r6595 r7097  
    176176        max_init_pop_combis; 
    177177    Generation          *act_generation, 
    178         *child_generation; 
     178        *child_generation; // @@@ can be removed 
    179179    List<result_struct>     *computation_result_list; 
    180180 
  • branches/refactor/MULTI_PROBE/Makefile

    r7089 r7097  
    5555MP_Generation.o: $(ARBHOME)/INCLUDE/arb_assert.h 
    5656MP_Generation.o: $(ARBHOME)/INCLUDE/arb_core.h 
     57MP_Generation.o: $(ARBHOME)/INCLUDE/arb_error.h 
     58MP_Generation.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    5759MP_Generation.o: $(ARBHOME)/INCLUDE/arbdb_base.h 
     60MP_Generation.o: $(ARBHOME)/INCLUDE/arbtools.h 
    5861MP_Generation.o: $(ARBHOME)/INCLUDE/attributes.h 
    5962MP_Generation.o: $(ARBHOME)/INCLUDE/aw_awar.hxx 
     
    6366MP_Generation.o: $(ARBHOME)/INCLUDE/dupstr.h 
    6467MP_Generation.o: $(ARBHOME)/INCLUDE/PT_com.h 
     68MP_Generation.o: $(ARBHOME)/INCLUDE/smartptr.h 
    6569MP_Generation.o: $(ARBHOME)/INCLUDE/test_global.h 
    6670 
     
    154158MP_noclass.o: $(ARBHOME)/INCLUDE/arb_error.h 
    155159MP_noclass.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     160MP_noclass.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    156161MP_noclass.o: $(ARBHOME)/INCLUDE/arb_string.h 
    157162MP_noclass.o: $(ARBHOME)/INCLUDE/ARB_Tree.hxx 
     
    171176MP_noclass.o: $(ARBHOME)/INCLUDE/aw_root.hxx 
    172177MP_noclass.o: $(ARBHOME)/INCLUDE/aw_select.hxx 
    173 MP_noclass.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    174178MP_noclass.o: $(ARBHOME)/INCLUDE/aw_window.hxx 
    175179MP_noclass.o: $(ARBHOME)/INCLUDE/awt.hxx 
     
    212216MP_probe.o: $(ARBHOME)/INCLUDE/arb_core.h 
    213217MP_probe.o: $(ARBHOME)/INCLUDE/arb_error.h 
     218MP_probe.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    214219MP_probe.o: $(ARBHOME)/INCLUDE/arbdb_base.h 
    215220MP_probe.o: $(ARBHOME)/INCLUDE/arbtools.h 
     
    220225MP_probe.o: $(ARBHOME)/INCLUDE/aw_keysym.hxx 
    221226MP_probe.o: $(ARBHOME)/INCLUDE/aw_msg.hxx 
    222 MP_probe.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    223227MP_probe.o: $(ARBHOME)/INCLUDE/aw_window.hxx 
    224228MP_probe.o: $(ARBHOME)/INCLUDE/cb.h 
  • branches/refactor/NTREE/AP_consensus.cxx

    r6858 r7097  
    4949#include <awt_sel_boxes.hxx> 
    5050#include <aw_window.hxx> 
    51 #include <aw_status.hxx> 
     51#include <arb_progress.h> 
    5252#include <aw_root.hxx> 
    5353#include <aw_msg.hxx> 
     
    107107    long numentries; 
    108108 
    109     aw_status("calculating result"); 
     109    arb_progress progress("calculating result", alignlength); 
    110110 
    111111    result=(char *)GB_calloc(alignlength+1, 1); 
     
    116116        if (numentries==0) { 
    117117            result[column]='.'; 
    118             continue; 
    119         } 
    120  
    121         if (numentries-statistic[0][column]==0) { 
    122             result[column]='='; 
    123             continue;   /* 100 per cent `-` -> `=` */ 
    124         } 
    125  
    126         if (!countgap) { 
    127             numentries -= statistic[0][column]; 
    128             statistic[0][column]=0; 
    129         } 
    130  
    131         if ((statistic[0][column]*100/numentries)>gapbound) { 
    132             result[column]='-'; 
    133             continue; 
    134         } 
    135  
    136         for (j=0; j<numgroups; j++) { 
    137             groupfr[j]=0; 
    138         } 
    139  
    140         row=0; 
    141         while (statistic[row]) { 
    142             if ((statistic[row][column]*100.0)>=fconsidbound*numentries) { 
    143                 for (j=numgroups-1; j>=0; j--) { 
    144                     if (groupflags[j][row]) { 
    145                         groupfr[j] += statistic[row][column]; 
     118        } 
     119        else { 
     120            if (numentries-statistic[0][column]==0) { 
     121                result[column]='='; // 100 per cent `-` -> `=`  
     122            } 
     123            else { 
     124                if (!countgap) { 
     125                    numentries -= statistic[0][column]; 
     126                    statistic[0][column]=0; 
     127                } 
     128 
     129                if ((statistic[0][column]*100/numentries)>gapbound) { 
     130                    result[column]='-'; 
     131                } 
     132                else { 
     133                    for (j=0; j<numgroups; j++) { 
     134                        groupfr[j]=0; 
     135                    } 
     136 
     137                    row=0; 
     138                    while (statistic[row]) { 
     139                        if ((statistic[row][column]*100.0)>=fconsidbound*numentries) { 
     140                            for (j=numgroups-1; j>=0; j--) { 
     141                                if (groupflags[j][row]) { 
     142                                    groupfr[j] += statistic[row][column]; 
     143                                } 
     144                            } 
     145                        } 
     146                        row++; 
     147                    } 
     148 
     149                    highestfr=0; 
     150                    highestgr=0; 
     151                    for (j=0; j<numgroups; j++) { 
     152                        if (groupfr[j] > highestfr) { 
     153                            highestfr=groupfr[j]; 
     154                            highestgr=j; 
     155                        } 
     156                    } 
     157 
     158                    if ((highestfr*100.0/numentries)>=fupper) { 
     159                        result[column]=groupnames[highestgr]; 
     160                    } 
     161                    else if ((highestfr*100/numentries)>=lower) { 
     162                        char c=groupnames[highestgr]; 
     163                        if (c>='A' && c<='Z') { 
     164                            c=c-'A'+'a'; 
     165                        } 
     166                        result[column]=c; 
     167                    } 
     168                    else { 
     169                        result[column]='.'; 
    146170                    } 
    147171                } 
    148172            } 
    149             row++; 
    150         } 
    151  
    152         highestfr=0; highestgr=0; 
    153         for (j=0; j<numgroups; j++) { 
    154             if (groupfr[j] > highestfr) { 
    155                 highestfr=groupfr[j]; 
    156                 highestgr=j; 
    157             } 
    158         } 
    159  
    160         if ((highestfr*100.0/numentries)>=fupper) { 
    161             result[column]=groupnames[highestgr]; 
    162         } 
    163         else if ((highestfr*100/numentries)>=lower) { 
    164             char c=groupnames[highestgr]; 
    165             if (c>='A' && c<='Z') { 
    166                 c=c-'A'+'a'; 
    167             } 
    168             result[column]=c; 
    169         } 
    170         else { 
    171             result[column]='.'; 
    172         } 
     173        } 
     174        ++progress; 
    173175    } 
    174176} 
     
    293295    int i, nrofspecies=0; 
    294296 
    295     aw_status("reading database"); 
    296  
    297297    if (onlymarked) { 
    298298        nrofspecies = GBT_count_marked_species(GLOBAL_gb_main); 
     
    302302    } 
    303303 
     304    arb_progress progress(nrofspecies); 
     305    progress.auto_subtitles("Examining sequence"); 
     306 
    304307    if (onlymarked) { 
    305308        gb_species = GBT_first_marked_species(GLOBAL_gb_main); 
     
    309312    } 
    310313 
    311     long count = 0; 
    312     while (gb_species) 
    313     { 
    314         if ((alidata=GBT_read_sequence(gb_species, align))) 
    315         { 
     314    while (gb_species) { 
     315        if ((alidata=GBT_read_sequence(gb_species, align))) { 
    316316            unsigned char        c; 
    317317            const unsigned char *data = (const unsigned char *)GB_read_char_pntr(alidata); 
    318318 
    319             aw_status((double)count++/(double)nrofspecies); 
    320319            i = 0; 
    321320            while ((c=data[i])) { 
     
    334333            gb_species = GBT_next_species(gb_species); 
    335334        } 
     335        ++progress; 
    336336    } 
    337337    return (nrofspecies); 
     
    639639 
    640640        /* filling the statistic table */ 
    641         aw_openstatus("Consensus"); 
     641        arb_progress progress("Calculating consensus"); 
     642 
    642643        long   nrofspecies = CON_makestatistic(statistic, convtable, align, onlymarked); 
    643644        double fupper      = awr->awar("con/fupper")->read_float(); 
     
    694695        } 
    695696 
    696         aw_closestatus(); 
    697697        CON_cleartables(statistic, isamino); 
    698698    } 
     
    929929    isamino = GBT_is_alignment_protein(GLOBAL_gb_main, align); 
    930930 
    931     aw_openstatus("Max. Frequency"); 
     931    arb_progress progress("Calculating max. frequency"); 
    932932    long nrofspecies; 
    933933 
     
    982982 
    983983    CON_cleartables(statistic, isamino); 
    984     aw_closestatus(); 
    985984    free(align); 
    986985    if (error) aw_message(error); 
  • branches/refactor/NTREE/AP_cprofile.cxx

    r6858 r7097  
    4646#include <aw_window.hxx> 
    4747#include <aw_msg.hxx> 
    48 #include <aw_status.hxx> 
     48#include <arb_progress.h> 
    4949#include <aw_root.hxx> 
    5050#include <aw_device.hxx> 
     
    145145    GBDATA *gb_species; 
    146146 
    147     aw_status("reading database"); 
    148  
    149     long nrofspecies=0; 
    150     gb_species = GBT_first_species_rel_species_data(gb_species_data); 
    151     while (gb_species) 
    152     { 
    153         if (GBT_read_sequence(gb_species, align)) { 
    154             nrofspecies++; } 
    155         gb_species = GBT_next_species(gb_species); 
    156     } 
    157     CPRO.numspecies=nrofspecies; 
     147    { 
     148        long nrofspecies=0; 
     149        gb_species = GBT_first_species_rel_species_data(gb_species_data); 
     150        while (gb_species) 
     151        { 
     152            if (GBT_read_sequence(gb_species, align)) { 
     153                nrofspecies++; } 
     154            gb_species = GBT_next_species(gb_species); 
     155        } 
     156        CPRO.numspecies=nrofspecies; 
     157    } 
    158158 
    159159    speciesdata=(char **)calloc((size_t)CPRO.numspecies, sizeof(char *)); 
     
    165165    long countspecies=0; 
    166166    gb_species = GBT_first_species_rel_species_data(gb_species_data); 
    167     while (gb_species) 
    168     { 
    169         if ((alidata=GBT_read_sequence(gb_species, align))) 
    170         { 
    171             speciesdatabase[countspecies++]=alidata; 
     167    while (gb_species) { 
     168        if ((alidata=GBT_read_sequence(gb_species, align))) { 
     169            speciesdatabase[countspecies++] = alidata; 
    172170        } 
    173171        gb_species = GBT_next_species(gb_species); 
     
    483481    long n              = CPRO.numspecies; 
    484482    long comparesneeded = n*n; 
    485     long compares       = 0; 
    486483    long numofsegments  = CPRO.numspecies/widthmatrix + 1; 
    487     long segmentx       = 0, segmenty=0, elemx=0, elemy=0; 
    488     long elemx1         = 0, elemx2=0, elemy1=0, elemy2=0; 
    489  
    490     if (CPRO.result[which_statistic].statisticexists) 
    491     { 
     484 
     485    if (CPRO.result[which_statistic].statisticexists) { 
    492486        CPRO_freestatistic(which_statistic); 
    493487    } 
     
    496490    CPRO_allocstatistic(which_statistic); 
    497491 
    498     aw_status("calculating"); 
    499  
    500     for (segmentx=0; segmentx<numofsegments; segmentx++) 
    501     { 
    502         elemx1=widthmatrix*segmentx; 
    503         elemx2=widthmatrix*(segmentx+1)-1; 
    504         for (segmenty=0; segmenty<numofsegments; segmenty++) 
    505         { 
    506             elemy1=widthmatrix*segmenty; 
    507             elemy2=widthmatrix*(segmenty+1)-1; 
     492    arb_progress progress("calculating matrix", comparesneeded); 
     493    bool         aborted = false; 
     494 
     495    for (long segmentx=0; segmentx<numofsegments && !aborted; segmentx++) { 
     496        long elemx1 = widthmatrix*segmentx; 
     497        long elemx2 = widthmatrix*(segmentx+1)-1; 
     498 
     499        for (long segmenty=0; segmenty<numofsegments && !aborted; segmenty++) { 
     500            long elemy1 = widthmatrix*segmenty; 
     501            long elemy2 = widthmatrix*(segmenty+1)-1; 
     502             
    508503            CPRO_readneededdata(speciesdata, speciesdatabase, elemx1, elemx2, elemy1, elemy2, which_statistic); 
    509             for (elemx=elemx1; elemx<=elemx2; elemx++) 
    510             { 
    511                 for (elemy=elemy1; elemy<=elemy2; elemy++) 
    512                 { 
    513                     if ((elemy<CPRO.numspecies)&&(elemx<CPRO.numspecies)) 
    514                     { 
    515                         CPRO_entryinstatistic(speciesdata, 
    516                                               elemx, elemy, which_statistic); 
    517                         compares++; 
    518                         if (((compares/30)*30)==compares) 
    519                         { 
    520                             if (aw_status((double)compares 
    521                                          /(double)comparesneeded))  return (0); 
    522                         } 
     504            for (long elemx=elemx1; elemx<=elemx2 && !aborted; elemx++) { 
     505                for (long elemy=elemy1; elemy<=elemy2 && !aborted; elemy++) { 
     506                    if ((elemy<CPRO.numspecies)&&(elemx<CPRO.numspecies)) { 
     507                        CPRO_entryinstatistic(speciesdata, elemx, elemy, which_statistic); 
     508                        ++progress; 
     509                        aborted = progress.aborted(); 
    523510                    } 
    524511                } 
     
    600587    CPRO.result[which_statistic].maxalignlen = GBT_get_alignment_len(GLOBAL_gb_main, align); 
    601588    if (CPRO.result[which_statistic].maxalignlen<=0) { 
     589        GB_clear_error(); 
    602590        GB_pop_transaction(GLOBAL_gb_main); 
    603591        aw_message("Error: Select an alignment !"); 
     
    607595 
    608596    char isamino = GBT_is_alignment_protein(GLOBAL_gb_main, align); 
    609     aw_openstatus("calculating"); aw_status((double)0); 
     597    arb_progress progress("Calculating conservation profile"); 
    610598 
    611599    GBDATA **speciesdatabase; // array of GBDATA-pointers to the species 
     
    629617 
    630618    /* fill the CPRO.statistic table */ 
    631     char success=CPRO_makestatistic(speciesdata, speciesdatabase, (char)which_statistic); 
     619    CPRO_makestatistic(speciesdata, speciesdatabase, (char)which_statistic); 
    632620    // GBUSE(success); 
    633621    CPRO_workupstatistic((char)which_statistic); 
    634  
    635     aw_closestatus(); 
    636622 
    637623    CPRO_deallocate(speciesdata, speciesdatabase); 
     
    649635static void CPRO_memrequirement_cb(AW_root *aw_root) 
    650636{ 
    651     char *align=aw_root->awar("cpro/alignment")->read_string(); 
    652     char *marked=aw_root->awar("cpro/which_species")->read_string(); 
    653     char versus=0; /* all vs all */ 
    654     if (!(strcmp("marked", marked))) versus=1; 
    655     if (!(strcmp("markedall", marked))) versus=2; 
    656     free(marked); 
    657     CPRO.partition=aw_root->awar("cpro/partition")->read_int(); 
    658     if (CPRO.partition<=0) CPRO.partition=1; 
    659     long resolution=aw_root->awar("cpro/resolution")->read_int(); 
    660     if (resolution<=0) resolution=1; 
     637    char  versus = 0; /* all vs all */ 
     638    { 
     639        char *marked = aw_root->awar("cpro/which_species")->read_string(); 
     640         
     641        if (!(strcmp("marked", marked))) versus    = 1; 
     642        if (!(strcmp("markedall", marked))) versus = 2; 
     643        free(marked); 
     644    } 
     645 
     646    CPRO.partition  = aw_root->awar("cpro/partition")->read_int(); 
     647    long resolution = aw_root->awar("cpro/resolution")->read_int(); 
     648 
     649    if (CPRO.partition<=0) CPRO.partition = 1; 
     650    if (resolution<=0) resolution         = 1; 
     651 
    661652    char buf[80]; 
    662     GB_ERROR faultmessage; 
    663653 
    664654    aw_root->awar("tmp/cpro/which1")->write_string(CPRO.result[0].which_species); 
     
    686676    } 
    687677 
    688     if ((faultmessage=GB_push_transaction(GLOBAL_gb_main))) { 
    689         aw_question(faultmessage, "OK,EXIT"); 
     678    long len; 
     679    { 
     680        GB_transaction ta(GLOBAL_gb_main); 
     681        char *align  = aw_root->awar("cpro/alignment")->read_string(); 
     682     
     683        len = GBT_get_alignment_len(GLOBAL_gb_main, align); 
    690684        free(align); 
    691         return; 
    692     } 
    693  
    694     long len=GBT_get_alignment_len(GLOBAL_gb_main, align); 
     685    } 
    695686 
    696687    if (len<=0) { 
    697         GB_pop_transaction(GLOBAL_gb_main); 
     688        GB_clear_error(); 
    698689        aw_root->awar("tmp/cpro/mempartition")->write_string("???"); 
    699690        aw_root->awar("tmp/cpro/memstatistic")->write_string("???"); 
    700         free(align); 
    701         return; 
    702     } 
    703  
    704     long mem; 
    705  
    706     mem=CPRO.partition*len*2;    // *2, because of row and column in matrix 
    707     sprintf(buf, "%li KB", long(mem/1024)); 
    708     aw_root->awar("tmp/cpro/mempartition")->write_string(buf); 
    709  
    710     mem+=resolution*3*sizeof(STATTYPE)*len; 
    711     sprintf(buf, "%li KB", long(mem/1024)); 
    712     aw_root->awar("tmp/cpro/memstatistic")->write_string(buf); 
    713  
    714     free(align); 
    715     if ((faultmessage=GB_pop_transaction(GLOBAL_gb_main))) 
    716     { 
    717         aw_question(faultmessage, "OK,EXIT"); 
    718         return; 
     691    } 
     692    else { 
     693        long mem; 
     694 
     695        mem=CPRO.partition*len*2;    // *2, because of row and column in matrix 
     696        sprintf(buf, "%li KB", long(mem/1024)); 
     697        aw_root->awar("tmp/cpro/mempartition")->write_string(buf); 
     698 
     699        mem+=resolution*3*sizeof(STATTYPE)*len; 
     700        sprintf(buf, "%li KB", long(mem/1024)); 
     701        aw_root->awar("tmp/cpro/memstatistic")->write_string(buf); 
    719702    } 
    720703} 
     
    13421325    } 
    13431326 
    1344     aw_openstatus("condense statistic"); aw_status((double)0); 
     1327    arb_progress progress("condense statistic", maxcol); 
    13451328 
    13461329    char *result=(char *)calloc((unsigned int)maxcol+1, 1); 
     
    13511334    for (long column=0; column<maxcol; column++) 
    13521335    { 
    1353         if (((column/100)*100)==column) aw_status((double)column/(double)maxcol); 
    13541336        maximum=CPRO_getmaximum(column, transversion, (char)which_statistic, mode); 
    13551337        if (maximum<-100.0) result[column]='.'; 
     
    13651347            result[column]+=steps; 
    13661348        } 
     1349        ++progress; 
    13671350    } 
    13681351 
    13691352    GB_ERROR error = 0; 
    13701353    char *align=CPRO.result[which_statistic].alignname; 
    1371  
    1372     aw_status("exporting result"); 
    13731354 
    13741355    GB_begin_transaction(GLOBAL_gb_main); 
     
    13901371 
    13911372    error = GB_write_string(gb_data, result); 
    1392     aw_closestatus(); 
    13931373    GB_end_transaction_show_error(GLOBAL_gb_main, error, aw_message); 
    13941374 
  • branches/refactor/NTREE/AP_pos_var_pars.cxx

    r6858 r7097  
    1414#include <awt_sel_boxes.hxx> 
    1515#include <aw_window.hxx> 
    16 #include <aw_status.hxx> 
     16#include <arb_progress.h> 
    1717#include <aw_root.hxx> 
    1818#include <aw_awar.hxx> 
     
    3030AP_pos_var::AP_pos_var(GBDATA *gb_maini, char *ali_namei, long ali_leni, int isdna, char *tree_namei) { 
    3131    memset((char  *)this, 0, sizeof(AP_pos_var)); 
    32     this->gb_main   = gb_maini; 
    33     this->ali_name  = strdup(ali_namei); 
    34     this->is_dna    = isdna; 
    35     this->ali_len   = ali_leni; 
    36     this->tree_name = strdup(tree_namei); 
     32    gb_main   = gb_maini; 
     33    ali_name  = strdup(ali_namei); 
     34    is_dna    = isdna; 
     35    ali_len   = ali_leni; 
     36    tree_name = strdup(tree_namei); 
     37    progress  = NULL; 
    3738} 
    3839 
    3940AP_pos_var::~AP_pos_var() { 
     41    delete progress; 
    4042    free(ali_name); 
    4143    free(tree_name); 
    4244    free(transitions); 
    4345    free(transversions); 
    44     int i; 
    45     for (i=0; i<256; i++) free(frequencies[i]); 
    46 } 
    47  
    48 long    AP_pos_var::getsize(GBT_TREE *tree) { 
     46    for (int i=0; i<256; i++) free(frequencies[i]); 
     47} 
     48 
     49long AP_pos_var::getsize(GBT_TREE *tree) { 
    4950    if (!tree) return 0; 
    5051    if (tree->is_leaf) return 1; 
     
    5455const char *AP_pos_var::parsimony(GBT_TREE *tree, GB_UINT4 *bases, GB_UINT4 *tbases) { 
    5556    GB_ERROR error = 0; 
    56     timer ++; 
    57     long i; 
    58     long l, r; 
    5957 
    6058    if (tree->is_leaf) { 
    61         unsigned char *sequence; 
    62         long           seq_len = ali_len; 
    63         if (!tree->gb_node) return 0; // zombie 
    64  
    65         GBDATA *gb_data = GBT_read_sequence(tree->gb_node, ali_name); 
    66         if (!gb_data) return 0; // no sequence 
    67         if (GB_read_string_count(gb_data) < seq_len) 
    68             seq_len     = GB_read_string_count(gb_data); 
    69         sequence        = (unsigned char*)GB_read_char_pntr(gb_data); 
    70  
    71         for (i = 0; i< seq_len; i++) { 
    72             l = char_2_freq[sequence[i]]; 
    73             if (l) { 
    74                 ap_assert(frequencies[l]); 
    75                 frequencies[l][i]++; 
    76             } 
    77         } 
    78  
    79         if (bases) { 
    80             for (i = 0; i< seq_len; i++) bases[i] = char_2_transition[sequence[i]]; 
    81         } 
    82         if (tbases) { 
    83             for (i = 0; i< seq_len; i++) tbases[i] = char_2_transversion[sequence[i]]; 
    84         } 
    85         return 0; 
    86     } 
    87     if (aw_status(timer/(double)treesize)) return "Operation aborted"; 
    88  
    89     GB_UINT4 *ls = (GB_UINT4 *)calloc(sizeof(GB_UINT4), (int)ali_len); 
    90     GB_UINT4 *rs = (GB_UINT4 *)calloc(sizeof(GB_UINT4), (int)ali_len); 
    91     GB_UINT4 *lts = (GB_UINT4 *)calloc(sizeof(GB_UINT4), (int)ali_len); 
    92     GB_UINT4 *rts = (GB_UINT4 *)calloc(sizeof(GB_UINT4), (int)ali_len); 
    93  
    94     if (!error) error = this->parsimony(tree->leftson, ls, lts); 
    95     if (!error) error = this->parsimony(tree->rightson, rs, rts); 
    96     if (!error) { 
    97         for (i=0; i< ali_len; i++) { 
    98             l = ls[i]; 
    99             r = rs[i]; 
    100             if (l & r) { 
    101                 if (bases) bases[i] = l&r; 
    102             } 
    103             else { 
    104                 transitions[i] ++; 
    105                 if (bases) bases[i] = l|r; 
    106             } 
    107             l = lts[i]; 
    108             r = rts[i]; 
    109             if (l & r) { 
    110                 if (tbases) tbases[i] = l&r; 
    111             } 
    112             else { 
    113                 transversions[i] ++; 
    114                 if (tbases) tbases[i] = l|r; 
    115             } 
    116         } 
    117     } 
    118  
    119     free(lts); 
    120     free(rts); 
    121  
    122     free(ls); 
    123     free(rs); 
     59        if (tree->gb_node) { 
     60            GBDATA *gb_data = GBT_read_sequence(tree->gb_node, ali_name); 
     61            if (gb_data) { 
     62                long seq_len = ali_len; 
     63                if (GB_read_string_count(gb_data) < seq_len) { 
     64                    seq_len = GB_read_string_count(gb_data); 
     65                } 
     66 
     67                unsigned char *sequence = (unsigned char*)GB_read_char_pntr(gb_data); 
     68                for (long i = 0; i< seq_len; i++) { 
     69                    long L = char_2_freq[sequence[i]]; 
     70                    if (L) { 
     71                        ap_assert(frequencies[L]); 
     72                        frequencies[L][i]++; 
     73                    } 
     74                } 
     75 
     76                if (bases) { 
     77                    for (long i = 0; i< seq_len; i++) bases[i] = char_2_transition[sequence[i]]; 
     78                } 
     79                if (tbases) { 
     80                    for (long i = 0; i< seq_len; i++) tbases[i] = char_2_transversion[sequence[i]]; 
     81                } 
     82            } 
     83        } 
     84    } 
     85    else { 
     86        GB_UINT4 *ls  = (GB_UINT4 *)calloc(sizeof(GB_UINT4), (int)ali_len); 
     87        GB_UINT4 *rs  = (GB_UINT4 *)calloc(sizeof(GB_UINT4), (int)ali_len); 
     88        GB_UINT4 *lts = (GB_UINT4 *)calloc(sizeof(GB_UINT4), (int)ali_len); 
     89        GB_UINT4 *rts = (GB_UINT4 *)calloc(sizeof(GB_UINT4), (int)ali_len); 
     90 
     91        if (!error) error = this->parsimony(tree->leftson, ls, lts); 
     92        if (!error) error = this->parsimony(tree->rightson, rs, rts); 
     93        if (!error) { 
     94            for (long i=0; i< ali_len; i++) { 
     95                long l = ls[i]; 
     96                long r = rs[i]; 
     97                if (l & r) { 
     98                    if (bases) bases[i] = l&r; 
     99                } 
     100                else { 
     101                    transitions[i] ++; 
     102                    if (bases) bases[i] = l|r; 
     103                } 
     104                l = lts[i]; 
     105                r = rts[i]; 
     106                if (l & r) { 
     107                    if (tbases) tbases[i] = l&r; 
     108                } 
     109                else { 
     110                    transversions[i] ++; 
     111                    if (tbases) tbases[i] = l|r; 
     112                } 
     113            } 
     114        } 
     115 
     116        free(lts); 
     117        free(rts); 
     118 
     119        free(ls); 
     120        free(rs); 
     121    } 
     122    progress->inc_and_check_user_abort(error); 
    124123    return error; 
    125124} 
     
    166165        } 
    167166    } 
    168     this->treesize = this->getsize(tree); 
    169     this->timer = 0; 
     167    treesize = getsize(tree); 
     168    progress = new arb_progress(treesize); 
    170169 
    171170    for (i=0; i<256; i++) { 
     
    305304    GB_ERROR        error = 0; 
    306305 
    307     aw_openstatus("Calculating positional variability"); 
    308     aw_status("Loading Tree"); 
     306    arb_progress progress("Calculating positional variability"); 
     307    progress.subtitle("Loading Tree"); 
    309308    GBT_TREE *tree; 
    310309    {           // get tree 
     
    320319 
    321320    if (!error) { 
    322         aw_status("Counting Mutations"); 
     321        progress.subtitle("Counting mutations"); 
    323322 
    324323        char *ali_name = GBT_get_default_alignment(GLOBAL_gb_main); 
     
    346345    free(tree_name); 
    347346 
    348     aw_closestatus(); 
    349  
    350347    if (error) aw_message(error); 
    351348    return; 
  • branches/refactor/NTREE/Makefile

    r7093 r7097  
    132132ad_spec.o: $(ARBHOME)/INCLUDE/arb_error.h 
    133133ad_spec.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     134ad_spec.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    134135ad_spec.o: $(ARBHOME)/INCLUDE/arb_str.h 
    135136ad_spec.o: $(ARBHOME)/INCLUDE/arb_string.h 
     
    153154ad_spec.o: $(ARBHOME)/INCLUDE/aw_root.hxx 
    154155ad_spec.o: $(ARBHOME)/INCLUDE/aw_select.hxx 
    155 ad_spec.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    156156ad_spec.o: $(ARBHOME)/INCLUDE/aw_window.hxx 
    157157ad_spec.o: $(ARBHOME)/INCLUDE/awt.hxx 
     
    181181ad_transpro.o: $(ARBHOME)/INCLUDE/arb_error.h 
    182182ad_transpro.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     183ad_transpro.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    183184ad_transpro.o: $(ARBHOME)/INCLUDE/arb_string.h 
    184185ad_transpro.o: $(ARBHOME)/INCLUDE/arbdb.h 
     
    193194ad_transpro.o: $(ARBHOME)/INCLUDE/aw_msg.hxx 
    194195ad_transpro.o: $(ARBHOME)/INCLUDE/aw_root.hxx 
    195 ad_transpro.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    196196ad_transpro.o: $(ARBHOME)/INCLUDE/aw_window.hxx 
    197197ad_transpro.o: $(ARBHOME)/INCLUDE/awt_sel_boxes.hxx 
     
    240240AP_consensus.o: $(ARBHOME)/INCLUDE/arb_error.h 
    241241AP_consensus.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     242AP_consensus.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    242243AP_consensus.o: $(ARBHOME)/INCLUDE/arb_string.h 
    243244AP_consensus.o: $(ARBHOME)/INCLUDE/arbdb.h 
     
    251252AP_consensus.o: $(ARBHOME)/INCLUDE/aw_msg.hxx 
    252253AP_consensus.o: $(ARBHOME)/INCLUDE/aw_root.hxx 
    253 AP_consensus.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    254254AP_consensus.o: $(ARBHOME)/INCLUDE/aw_window.hxx 
    255255AP_consensus.o: $(ARBHOME)/INCLUDE/awt_sel_boxes.hxx 
     
    291291AP_cprofile.o: $(ARBHOME)/INCLUDE/arb_error.h 
    292292AP_cprofile.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     293AP_cprofile.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    293294AP_cprofile.o: $(ARBHOME)/INCLUDE/arb_string.h 
    294295AP_cprofile.o: $(ARBHOME)/INCLUDE/arbdb.h 
     
    306307AP_cprofile.o: $(ARBHOME)/INCLUDE/aw_position.hxx 
    307308AP_cprofile.o: $(ARBHOME)/INCLUDE/aw_root.hxx 
    308 AP_cprofile.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    309309AP_cprofile.o: $(ARBHOME)/INCLUDE/aw_window.hxx 
    310310AP_cprofile.o: $(ARBHOME)/INCLUDE/awt_sel_boxes.hxx 
     
    322322AP_pos_var_pars.o: $(ARBHOME)/INCLUDE/arb_error.h 
    323323AP_pos_var_pars.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     324AP_pos_var_pars.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    324325AP_pos_var_pars.o: $(ARBHOME)/INCLUDE/arb_string.h 
    325326AP_pos_var_pars.o: $(ARBHOME)/INCLUDE/arbdb.h 
     
    333334AP_pos_var_pars.o: $(ARBHOME)/INCLUDE/aw_msg.hxx 
    334335AP_pos_var_pars.o: $(ARBHOME)/INCLUDE/aw_root.hxx 
    335 AP_pos_var_pars.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    336336AP_pos_var_pars.o: $(ARBHOME)/INCLUDE/aw_window.hxx 
    337337AP_pos_var_pars.o: $(ARBHOME)/INCLUDE/awt_sel_boxes.hxx 
     
    409409NT_concatenate.o: $(ARBHOME)/INCLUDE/arb_error.h 
    410410NT_concatenate.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     411NT_concatenate.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    411412NT_concatenate.o: $(ARBHOME)/INCLUDE/arb_string.h 
    412413NT_concatenate.o: $(ARBHOME)/INCLUDE/arbdb.h 
     
    440441NT_dbrepair.o: $(ARBHOME)/INCLUDE/arb_error.h 
    441442NT_dbrepair.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     443NT_dbrepair.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    442444NT_dbrepair.o: $(ARBHOME)/INCLUDE/arb_str.h 
    443445NT_dbrepair.o: $(ARBHOME)/INCLUDE/arb_string.h 
     
    452454NT_dbrepair.o: $(ARBHOME)/INCLUDE/aw_msg.hxx 
    453455NT_dbrepair.o: $(ARBHOME)/INCLUDE/aw_root.hxx 
    454 NT_dbrepair.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    455456NT_dbrepair.o: $(ARBHOME)/INCLUDE/aw_window.hxx 
    456457NT_dbrepair.o: $(ARBHOME)/INCLUDE/awt.hxx 
     
    507508NT_extern.o: $(ARBHOME)/INCLUDE/arb_error.h 
    508509NT_extern.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     510NT_extern.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    509511NT_extern.o: $(ARBHOME)/INCLUDE/arb_string.h 
    510512NT_extern.o: $(ARBHOME)/INCLUDE/ARB_Tree.hxx 
     
    528530NT_extern.o: $(ARBHOME)/INCLUDE/AW_rename.hxx 
    529531NT_extern.o: $(ARBHOME)/INCLUDE/aw_root.hxx 
    530 NT_extern.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    531532NT_extern.o: $(ARBHOME)/INCLUDE/aw_window.hxx 
    532533NT_extern.o: $(ARBHOME)/INCLUDE/awt.hxx 
     
    618619NT_join.o: $(ARBHOME)/INCLUDE/arb_error.h 
    619620NT_join.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     621NT_join.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    620622NT_join.o: $(ARBHOME)/INCLUDE/arb_string.h 
    621623NT_join.o: $(ARBHOME)/INCLUDE/arbdb.h 
     
    631633NT_join.o: $(ARBHOME)/INCLUDE/aw_root.hxx 
    632634NT_join.o: $(ARBHOME)/INCLUDE/aw_select.hxx 
    633 NT_join.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    634635NT_join.o: $(ARBHOME)/INCLUDE/aw_window.hxx 
    635636NT_join.o: $(ARBHOME)/INCLUDE/awt.hxx 
     
    656657NT_main.o: $(ARBHOME)/INCLUDE/arb_error.h 
    657658NT_main.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     659NT_main.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    658660NT_main.o: $(ARBHOME)/INCLUDE/arb_string.h 
    659661NT_main.o: $(ARBHOME)/INCLUDE/ARB_Tree.hxx 
     
    677679NT_main.o: $(ARBHOME)/INCLUDE/aw_question.hxx 
    678680NT_main.o: $(ARBHOME)/INCLUDE/aw_root.hxx 
    679 NT_main.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    680681NT_main.o: $(ARBHOME)/INCLUDE/aw_window.hxx 
    681682NT_main.o: $(ARBHOME)/INCLUDE/awt.hxx 
     
    699700NT_sort.o: $(ARBHOME)/INCLUDE/arb_error.h 
    700701NT_sort.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     702NT_sort.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    701703NT_sort.o: $(ARBHOME)/INCLUDE/arb_string.h 
    702704NT_sort.o: $(ARBHOME)/INCLUDE/arbdb.h 
     
    711713NT_sort.o: $(ARBHOME)/INCLUDE/aw_root.hxx 
    712714NT_sort.o: $(ARBHOME)/INCLUDE/aw_select.hxx 
    713 NT_sort.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    714715NT_sort.o: $(ARBHOME)/INCLUDE/aw_window.hxx 
    715716NT_sort.o: $(ARBHOME)/INCLUDE/awt.hxx 
     
    727728NT_trackAliChanges.o: $(ARBHOME)/INCLUDE/arb_error.h 
    728729NT_trackAliChanges.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     730NT_trackAliChanges.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    729731NT_trackAliChanges.o: $(ARBHOME)/INCLUDE/arb_string.h 
    730732NT_trackAliChanges.o: $(ARBHOME)/INCLUDE/arbdb.h 
     
    738740NT_trackAliChanges.o: $(ARBHOME)/INCLUDE/aw_msg.hxx 
    739741NT_trackAliChanges.o: $(ARBHOME)/INCLUDE/aw_root.hxx 
    740 NT_trackAliChanges.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    741742NT_trackAliChanges.o: $(ARBHOME)/INCLUDE/aw_window.hxx 
    742743NT_trackAliChanges.o: $(ARBHOME)/INCLUDE/awt_sel_boxes.hxx 
     
    756757NT_tree_cmp.o: $(ARBHOME)/INCLUDE/arb_error.h 
    757758NT_tree_cmp.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     759NT_tree_cmp.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    758760NT_tree_cmp.o: $(ARBHOME)/INCLUDE/arb_string.h 
    759761NT_tree_cmp.o: $(ARBHOME)/INCLUDE/ARB_Tree.hxx 
     
    766768NT_tree_cmp.o: $(ARBHOME)/INCLUDE/aw_color_groups.hxx 
    767769NT_tree_cmp.o: $(ARBHOME)/INCLUDE/aw_msg.hxx 
    768 NT_tree_cmp.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    769770NT_tree_cmp.o: $(ARBHOME)/INCLUDE/downcast.h 
    770771NT_tree_cmp.o: $(ARBHOME)/INCLUDE/dupstr.h 
  • branches/refactor/NTREE/NT_concatenate.cxx

    r6858 r7097  
    2121#include <aw_msg.hxx> 
    2222#include <aw_root.hxx> 
     23#include <arb_progress.h> 
    2324 
    2425#define nt_assert(bed) arb_assert(bed) 
     
    271272/* ---------------------------------------- Concatenation function ---------------------------------- */ 
    272273void concatenateAlignments(AW_window *aws) { 
    273  
    274274    GB_push_transaction(GLOBAL_gb_main); 
     275    arb_progress progress("Concatenating alignments", GBT_count_marked_species(GLOBAL_gb_main)); 
    275276    AW_root  *aw_root = aws->get_root(); 
    276277 
     
    318319            AW_repeated_question ask_about_missing_alignment; 
    319320 
    320             for (GBDATA *gb_species = GBT_first_marked_species(GLOBAL_gb_main); gb_species; gb_species = GBT_next_marked_species(gb_species)) { 
     321            for (GBDATA *gb_species = GBT_first_marked_species(GLOBAL_gb_main); 
     322                 gb_species && !error; 
     323                 gb_species = GBT_next_marked_species(gb_species)) 
     324            { 
    321325                GBS_strstruct *str_seq = GBS_stropen(new_alignment_len+1000); /* create output stream */ 
    322326                int            ali_len = 0; 
     
    355359                    free(concatenated_ali_seq_data); 
    356360                } 
    357             } 
    358  
    359             {    /* ............. print missing alignments........... */ 
     361                progress.inc_and_check_user_abort(error); 
     362            } 
     363 
     364            if (!error) { 
     365                /* ............. print missing alignments........... */ 
    360366                aw_message(GBS_global_string("Concatenation of Alignments was performed for %ld species.", GBT_count_marked_species(GLOBAL_gb_main))); 
    361367                const_ali_name = con_alignment_list->first_element(); int i = 0; 
     
    570576    char *full_name = 0; 
    571577    char *acc       = 0; 
    572     char *addid     = 0; 
    573578 
    574579    /* --------------------getting the species related data -------------------- */ 
     
    625630        const char *add_field = AW_get_nameserver_addid(GLOBAL_gb_main); 
    626631        GBDATA     *gb_addid  = add_field[0] ? GB_entry(gb_new_species, add_field) : 0; 
    627         if (gb_addid) addid   = GB_read_string(gb_addid); 
    628  
    629         error = AWTC_generate_one_name(GLOBAL_gb_main, full_name, acc, addid, new_species_name, false, true); 
     632        char       *addid     = 0; 
     633        if (gb_addid) addid   = GB_read_as_string(gb_addid); 
     634 
     635        error = AWTC_generate_one_name(GLOBAL_gb_main, full_name, acc, addid, new_species_name); 
    630636        if (!error) {   // name was created 
    631637            if (GBT_find_species_rel_species_data(gb_species_data, new_species_name) != 0) { 
     
    640646 
    641647        free(new_species_name); 
     648        free(addid); 
    642649    } 
    643650 
     
    648655    } 
    649656 
    650     free(addid); 
    651657    free(acc); 
    652658    free(full_name); 
     
    670676 
    671677static void mergeSimilarSpecies(AW_window *aws, AW_CL cl_mergeSimilarConcatenateAlignments) { 
    672     AW_root *aw_root          = aws->get_root(); 
    673     char    *merge_field_name = aw_root->awar(AWAR_CON_MERGE_FIELD)->read_string(); 
    674     char    *new_field_name   = aw_root->awar(AWAR_CON_STORE_SIM_SP_NO)->read_string(); 
    675  
    676     speciesConcatenateList scl            = 0; // to build list of similar species 
    677     speciesConcatenateList newSpeciesList = 0;  // new SPECIES_ConcatenateList 
    678  
    679     GB_begin_transaction(GLOBAL_gb_main);       // open database for transaction 
    680  
    681     GB_ERROR error = checkAndCreateNewField(GLOBAL_gb_main, new_field_name); 
    682  
    683     for (GBDATA * gb_species = GBT_first_marked_species(GLOBAL_gb_main); 
    684          gb_species && !error; 
    685          gb_species = GBT_next_marked_species(gb_species)) 
     678    GB_ERROR error = NULL; 
     679    arb_progress wrapper; 
    686680    { 
    687         GBDATA     *gb_species_field = GB_entry(gb_species, merge_field_name); 
    688         const char *name             = GBT_read_name(gb_species); 
    689  
    690         if (!gb_species_field) { 
    691             // exit if species doesn't have any data in the selected field 
    692             error = GBS_global_string("Species '%s' does not contain data in selected field '%s'", name, merge_field_name); 
    693         } 
    694         else { 
    695             char *gb_species_field_content = GB_read_string(gb_species_field); 
    696             int   similar_species          = 0; 
    697  
    698             for (GBDATA * gb_species_next = GBT_next_marked_species(gb_species); 
    699                  gb_species_next && !error; 
    700                  gb_species_next = GBT_next_marked_species(gb_species_next)) 
    701             { 
    702                 GBDATA     *gb_next_species_field = GB_entry(gb_species_next, merge_field_name); 
    703                 const char *next_name             = GBT_read_name(gb_species_next); 
    704  
    705                 if (!gb_next_species_field) { 
    706                     // exit if species doesn't have any data in the selected field 
    707                     error = GBS_global_string("Species '%s' does not contain data in selected field '%s'", next_name, merge_field_name); 
     681        AW_root *aw_root          = aws->get_root(); 
     682        char    *merge_field_name = aw_root->awar(AWAR_CON_MERGE_FIELD)->read_string(); 
     683        char    *new_field_name   = aw_root->awar(AWAR_CON_STORE_SIM_SP_NO)->read_string(); 
     684 
     685        speciesConcatenateList scl            = 0; // to build list of similar species 
     686        speciesConcatenateList newSpeciesList = 0;  // new SPECIES_ConcatenateList 
     687 
     688        GB_begin_transaction(GLOBAL_gb_main);       // open database for transaction 
     689 
     690        error = checkAndCreateNewField(GLOBAL_gb_main, new_field_name); 
     691 
     692        PersistentNameServerConnection stayAlive; 
     693        arb_progress progress("Merging similar species", GBT_count_marked_species(GLOBAL_gb_main)); 
     694        progress.auto_subtitles("Species"); 
     695 
     696        for (GBDATA * gb_species = GBT_first_marked_species(GLOBAL_gb_main); 
     697             gb_species && !error; 
     698             gb_species = GBT_next_marked_species(gb_species)) 
     699        { 
     700            GBDATA     *gb_species_field = GB_entry(gb_species, merge_field_name); 
     701            const char *name             = GBT_read_name(gb_species); 
     702 
     703            if (!gb_species_field) { 
     704                // exit if species doesn't have any data in the selected field 
     705                error = GBS_global_string("Species '%s' does not contain data in selected field '%s'", name, merge_field_name); 
     706            } 
     707            else { 
     708                char *gb_species_field_content = GB_read_string(gb_species_field); 
     709                int   similar_species          = 0; 
     710 
     711                for (GBDATA * gb_species_next = GBT_next_marked_species(gb_species); 
     712                     gb_species_next && !error; 
     713                     gb_species_next = GBT_next_marked_species(gb_species_next)) 
     714                { 
     715                    GBDATA     *gb_next_species_field = GB_entry(gb_species_next, merge_field_name); 
     716                    const char *next_name             = GBT_read_name(gb_species_next); 
     717 
     718                    if (!gb_next_species_field) { 
     719                        // exit if species doesn't have any data in the selected field 
     720                        error = GBS_global_string("Species '%s' does not contain data in selected field '%s'", next_name, merge_field_name); 
     721                    } 
     722                    else { 
     723                        char *gb_next_species_field_content = GB_read_string(gb_next_species_field); 
     724 
     725                        if (strcmp(gb_species_field_content, gb_next_species_field_content) == 0) { 
     726                            addSpeciesToConcatenateList(&scl, next_name); 
     727                            GB_write_flag(gb_species_next, 0); 
     728                            ++similar_species; 
     729                            ++progress; 
     730                        } 
     731                        free(gb_next_species_field_content); 
     732                    } 
    708733                } 
    709                 else { 
    710                     char *gb_next_species_field_content = GB_read_string(gb_next_species_field); 
    711  
    712                     if (strcmp(gb_species_field_content, gb_next_species_field_content) == 0) { 
    713                         addSpeciesToConcatenateList(&scl, next_name); 
    714                         GB_write_flag(gb_species_next, 0); 
    715                         ++similar_species; 
     734 
     735                if (similar_species > 0 && !error) { 
     736                    addSpeciesToConcatenateList(&scl, name); 
     737                    GB_write_flag(gb_species, 0); 
     738 
     739                    GBDATA *new_species_created = concatenateFieldsCreateNewSpecies(aws, gb_species, scl); 
     740 
     741                    nt_assert(new_species_created); 
     742                    if (new_species_created) {      // create a list of newly created species 
     743                        addSpeciesToConcatenateList(&newSpeciesList, GBT_read_name(new_species_created)); 
    716744                    } 
    717                     free(gb_next_species_field_content); 
     745 
     746                    error = GBT_write_int(new_species_created, new_field_name, ++similar_species); 
    718747                } 
    719             } 
    720  
    721             if (similar_species > 0 && !error) { 
    722                 addSpeciesToConcatenateList(&scl, name); 
    723                 GB_write_flag(gb_species, 0); 
    724  
    725                 GBDATA *new_species_created = concatenateFieldsCreateNewSpecies(aws, gb_species, scl); 
    726  
    727                 nt_assert(new_species_created); 
    728                 if (new_species_created) {      // create a list of newly created species 
    729                     addSpeciesToConcatenateList(&newSpeciesList, GBT_read_name(new_species_created)); 
    730                 } 
    731  
    732                 error = GBT_write_int(new_species_created, new_field_name, ++similar_species); 
    733             } 
    734  
    735             freeSpeciesConcatenateList(scl); scl = 0; 
    736             free(gb_species_field_content); 
    737         } 
    738     } 
    739  
    740     if (!error) { 
    741         GBT_mark_all(GLOBAL_gb_main, 0);        // unmark all species in the database 
    742         int newSpeciesCount = 0; 
    743  
    744         for (; newSpeciesList; newSpeciesList = newSpeciesList->next) { // mark only newly created species 
    745             GB_write_flag(newSpeciesList->species, 1); 
    746             newSpeciesCount++; 
    747         } 
    748         aw_message(GBS_global_string("%i new species were created by taking \"%s\" as a criterion!", newSpeciesCount, merge_field_name)); 
    749         freeSpeciesConcatenateList(newSpeciesList); 
    750     } 
    751  
    752     free(merge_field_name); 
    753     free(new_field_name); 
    754  
    755     GB_end_transaction_show_error(GLOBAL_gb_main, error, aw_message); 
    756  
     748 
     749                freeSpeciesConcatenateList(scl); scl = 0; 
     750                free(gb_species_field_content); 
     751            } 
     752 
     753            progress.inc_and_check_user_abort(error); 
     754        } 
     755 
     756        if (!error) { 
     757            GBT_mark_all(GLOBAL_gb_main, 0);        // unmark all species in the database 
     758            int newSpeciesCount = 0; 
     759 
     760            for (; newSpeciesList; newSpeciesList = newSpeciesList->next) { // mark only newly created species 
     761                GB_write_flag(newSpeciesList->species, 1); 
     762                newSpeciesCount++; 
     763            } 
     764            aw_message(GBS_global_string("%i new species were created by taking \"%s\" as a criterion!", newSpeciesCount, merge_field_name)); 
     765            freeSpeciesConcatenateList(newSpeciesList); 
     766        } 
     767 
     768        free(merge_field_name); 
     769        free(new_field_name); 
     770 
     771        GB_end_transaction_show_error(GLOBAL_gb_main, error, aw_message); 
     772    } 
    757773    // Concatenate alignments of the merged species if cl_mergeSimilarConcatenateAlignments = MERGE_SIMILAR_CONCATENATE_ALIGNMENTS 
    758774    if (int (cl_mergeSimilarConcatenateAlignments) && !error) concatenateAlignments(aws); 
  • branches/refactor/NTREE/NT_dbrepair.cxx

    r6858 r7097  
    2020#include <aw_color_groups.hxx> 
    2121#include <aw_msg.hxx> 
    22 #include <aw_status.hxx> 
     22#include <arb_progress.h> 
    2323#include <aw_root.hxx> 
    2424 
     
    107107    { 
    108108        if (!error && !was_performed(check_name)) { 
    109             aw_status(check_name.c_str()); 
    110             aw_status(0.0); 
     109            arb_progress progress(check_name.c_str()); 
    111110            error = do_check(gb_main, species_count, sai_count); 
    112             aw_status(1.0); 
    113111            if (!error) register_as_performed(check_name); 
    114112        } 
     
    193191static GB_ERROR NT_fix_gene_data(GBDATA *gb_main, size_t species_count, size_t /* sai_count */) { 
    194192    GB_transaction ta(gb_main); 
    195     size_t         deleted_gene_datas   = 0; 
    196     size_t         generated_gene_datas = 0; 
    197     GB_ERROR       error                = 0; 
    198     size_t         count                = 0; 
     193    arb_progress   progress(species_count); 
     194 
     195    size_t   deleted_gene_datas   = 0; 
     196    size_t   generated_gene_datas = 0; 
     197    GB_ERROR error                = 0; 
    199198 
    200199    for (GBDATA *gb_species = GBT_first_species(gb_main); 
     
    224223        } 
    225224 
    226         aw_status(double(++count)/species_count); 
     225        progress.inc_and_check_user_abort(error); 
    227226    } 
    228227 
     
    268267    typedef vector<GBDATA*> GBvec; 
    269268    GBvec                   toDelete; 
    270     size_t                  count = 0; 
    271  
     269 
     270    arb_progress progress(species_count); 
     271     
    272272    for (GBDATA *gb_organism = GEN_first_organism(gb_main); 
    273273         gb_organism && !error; 
    274274         gb_organism = GEN_next_organism(gb_organism)) 
    275275    { 
    276  
    277  
    278276        GBDATA *gb_gene_data = GEN_find_gene_data(gb_organism); 
    279277        nt_assert(gb_gene_data); 
     
    449447        } 
    450448 
    451         aw_status(double(++count)/species_count); 
     449        progress.inc_and_check_user_abort(error); 
    452450    } 
    453451 
     
    474472    GB_transaction ta(gb_main); 
    475473    GB_ERROR       error   = 0; 
    476     size_t         count   = 0; 
    477474    size_t         all     = species_count+sai_count; 
    478475    size_t         removed = 0; 
     
    480477    // delete 'mark' entries from all alignments of species/SAIs 
    481478 
     479    arb_progress progress(all); 
    482480    char **ali_names = GBT_get_alignment_names(gb_main); 
    483481 
     
    498496            } 
    499497 
    500             aw_status(double(++count)/all); 
     498            progress.inc_and_check_user_abort(error); 
    501499        } 
    502500    } 
     
    773771    Dict::gb_main = gb_main; 
    774772 
    775     aw_status(STATUS_PREFIX "init"); 
    776     aw_status(0.0); 
    777  
    778773    if (!gb_key_data) { 
    779774        error = "No @key_data found.. DB corrupted?"; 
     
    794789        if (!error) { 
    795790            // check which keys are compressed 
    796             int cnt            = 0; 
    797             aw_status(STATUS_PREFIX "search compression"); 
    798             aw_status(0.0); 
    799             for (Keys::iterator ki = keys.begin(); ki != keys.end(); ++ki) { 
    800                 KeyInfoPtr k = ki->second; 
    801                 k->testCompressed(gb_main); 
    802                 aw_status(++cnt/double(affectedKeys)); 
     791 
     792            { 
     793                arb_progress progress(STATUS_PREFIX "search compressed data", affectedKeys); 
     794 
     795                for (Keys::iterator ki = keys.begin(); ki != keys.end(); ++ki) { 
     796                    KeyInfoPtr k = ki->second; 
     797                    k->testCompressed(gb_main); 
     798                    ++progress; 
     799                } 
    803800            } 
    804801 
    805802            // test which key/dict combinations work 
    806             aw_status(STATUS_PREFIX "test compression"); 
    807             aw_status(0.0); 
    808             cnt              = 0; 
    809             int combinations = 0; // possible key/dict combinations 
     803            int combinations = 0;          // possible key/dict combinations 
    810804 
    811805            DictMap   use;      // keyname -> dictionary (which dictionary to use) 
     
    813807 
    814808            for (int pass = 1; pass <= 2; ++pass) { 
     809                arb_progress *progress  = NULL; 
     810                if (pass == 2 && combinations) progress = new arb_progress(STATUS_PREFIX "test compression", combinations); 
     811 
    815812                for (Dicts::iterator di = dicts.begin(); di != dicts.end(); ++di) { 
    816813                    DictPtr d = *di; 
     
    834831                                        } 
    835832                                    } 
    836                                     aw_status(++cnt/double(combinations)); 
     833                                    ++(*progress); 
    837834                                    break; 
    838835                            } 
     
    840837                    } 
    841838                } 
     839                delete progress; 
    842840            } 
    843841 
     
    862860                                             "Data of %i DB-keys is lost and will be deleted", nd_count)); 
    863861 
    864                 aw_status(STATUS_PREFIX "deleting corrupt data"); 
    865                 aw_status(0.0); 
    866                 cnt = 0; 
     862                arb_progress progress(STATUS_PREFIX "deleting corrupt data", nd_count); 
    867863 
    868864                StringSet deletedData; 
     
    874870 
    875871                    error = deleteDataOfKey(gb_main, GB_key_2_quark(gb_main, keyname.c_str()), deletedData, deleted, notDeleted); 
    876                     aw_status(++cnt/double(nd_count)); 
     872                    ++progress; 
    877873                } 
    878874 
     
    10601056    } 
    10611057    if (!err) { 
    1062         aw_openstatus("DB-Repair"); 
     1058        arb_progress progress("DB-Repair"); 
    10631059        err = NT_repair_DB(gb_main); 
    1064         aw_closestatus(); 
    10651060    } 
    10661061 
  • branches/refactor/NTREE/NT_extern.cxx

    r7078 r7097  
    4444#include <aw_file.hxx> 
    4545#include <aw_msg.hxx> 
    46 #include <aw_status.hxx> 
     46#include <arb_progress.h> 
    4747#include <aw_root.hxx> 
    4848 
     
    334334 
    335335void NT_database_optimization(AW_window *aww) { 
    336     GB_ERROR error = 0; 
     336    arb_progress progress("Optimizing database", 2); 
     337 
    337338    GB_push_my_security(GLOBAL_gb_main); 
    338  
    339     { 
    340         aw_openstatus("Optimizing sequence data"); 
    341  
    342         error = GB_begin_transaction(GLOBAL_gb_main); 
     339    GB_ERROR error = GB_begin_transaction(GLOBAL_gb_main); 
     340    if (!error) { 
     341        char         **ali_names = GBT_get_alignment_names(GLOBAL_gb_main); 
     342        arb_progress   ali_progress("Optimizing sequence data", GBT_count_names(ali_names)); 
     343 
     344        ali_progress.allow_title_reuse(); 
     345 
     346        error = GBT_check_data(GLOBAL_gb_main, 0); 
     347        error = GB_end_transaction(GLOBAL_gb_main, error); 
     348 
    343349        if (!error) { 
    344             char **ali_names = GBT_get_alignment_names(GLOBAL_gb_main); 
    345  
    346             aw_status("Checking Sequence Lengths"); 
    347             error = GBT_check_data(GLOBAL_gb_main, 0); 
    348             error = GB_end_transaction(GLOBAL_gb_main, error); 
    349  
    350             if (!error) { 
    351                 char *tree_name = aww->get_root()->awar("tmp/nt/arbdb/optimize_tree_name")->read_string(); 
    352                 for (char **ali_name = ali_names; !error && *ali_name; ali_name++) { 
    353                     aw_status(*ali_name); 
    354                     error = GBT_compress_sequence_tree2(GLOBAL_gb_main, tree_name, *ali_name); 
    355                 } 
    356                 free(tree_name); 
    357             } 
    358             GBT_free_names(ali_names); 
    359         } 
    360         aw_closestatus(); 
    361     } 
     350            char *tree_name = aww->get_root()->awar("tmp/nt/arbdb/optimize_tree_name")->read_string(); 
     351            for (char **ali_name = ali_names; !error && *ali_name; ali_name++) { 
     352                error = GBT_compress_sequence_tree2(GLOBAL_gb_main, tree_name, *ali_name); 
     353                ali_progress.inc_and_check_user_abort(error); 
     354            } 
     355            free(tree_name); 
     356        } 
     357        GBT_free_names(ali_names); 
     358    } 
     359    progress.inc_and_check_user_abort(error); 
    362360 
    363361    if (!error) { 
    364         aw_openstatus("Optimizing non-sequence data"); 
    365362        error = GB_optimize(GLOBAL_gb_main); 
    366         aw_closestatus(); 
     363        progress.inc_and_check_user_abort(error); 
    367364    } 
    368365 
     
    998995    GBT_TREE_REMOVE_TYPE  mode    = (GBT_TREE_REMOVE_TYPE)cl_mode; 
    999996 
     997    GB_ERROR       error = 0; 
    1000998    GB_transaction ta(gb_main); 
    1001999 
     
    10041002 
    10051003    if (tree_names) { 
    1006         aw_openstatus("Deleting from trees"); 
    1007         GB_HASH *species_hash = GBT_create_species_hash(gb_main); 
    1008  
    1009         for (int t = 0; t<treeCount; t++) { 
    1010             GB_ERROR  error = 0; 
    1011             aw_status(t/double(treeCount)); 
    1012             aw_status(tree_names[t]); 
     1004        arb_progress  progress("Deleting from trees", treeCount); 
     1005        GB_HASH      *species_hash = GBT_create_species_hash(gb_main); 
     1006 
     1007        for (int t = 0; t<treeCount && !error; t++) { 
     1008            progress.subtitle(tree_names[t]); 
    10131009            GBT_TREE *tree = GBT_read_tree(gb_main, tree_names[t], -sizeof(GBT_TREE)); 
    10141010            if (!tree) { 
     
    10391035                } 
    10401036            } 
    1041             if (error) aw_message(error); 
    1042         } 
    1043         aw_status(1.0); 
     1037            progress.inc_and_check_user_abort(error); 
     1038        } 
    10441039 
    10451040        GBT_free_names(tree_names); 
    10461041        GBS_free_hash(species_hash); 
    1047         aw_closestatus(); 
    1048     } 
     1042    } 
     1043 
     1044    aw_message_if(ta.close(error)); 
    10491045} 
    10501046 
     
    13381334            { 
    13391335                AWMIMT("pos_var_dist",          "Positional variability (distance method)",     "P", "pos_variability.ps", AWM_EXP, AW_POPUP, (AW_CL)AP_open_cprofile_window, 0); 
    1340                 AWMIMT("count_different_chars", "Count different chars/column",                 "C", "count_chars.hlp",    AWM_EXP, NT_count_different_chars, (AW_CL)GLOBAL_gb_main, 1); 
     1336                AWMIMT("count_different_chars", "Count different chars/column",                 "C", "count_chars.hlp",    AWM_EXP, NT_count_different_chars, (AW_CL)GLOBAL_gb_main, 0); 
    13411337                AWMIMT("export_pos_var",        "Export Column Statistic (GNUPLOT format)",     "E", "csp_2_gnuplot.hlp",  AWM_ALL, AW_POPUP, (AW_CL)NT_create_colstat_2_gnuplot_window, 0); 
    13421338            } 
  • branches/refactor/NTREE/NT_join.cxx

    r6858 r7097  
    1515#include <aw_root.hxx> 
    1616#include <aw_msg.hxx> 
    17 #include <aw_status.hxx> 
     17#include <arb_progress.h> 
    1818#include <arbdbt.h> 
    1919 
     
    114114    if (!error) { 
    115115        GB_HASH *hash = GBS_create_hash(1000, GB_MIND_CASE); 
    116         aw_openstatus("Joining species"); 
    117  
    118         long maxs = GBT_count_marked_species(GLOBAL_gb_main); 
    119         long cnt  = 0; 
     116        long     maxs = GBT_count_marked_species(GLOBAL_gb_main); 
     117         
     118        arb_progress progress("Joining species", maxs); 
    120119 
    121120        GBDATA *gb_next = 0; 
     
    125124        { 
    126125            gb_next = GBT_next_marked_species(gb_species); 
    127  
    128             aw_status(++cnt/(double)maxs); 
    129126 
    130127            GBDATA *gb_field = GB_entry(gb_species, field); 
     
    141138                } 
    142139            } 
     140            progress.inc_and_check_user_abort(error); 
    143141        } 
    144142 
    145         aw_closestatus(); 
    146143        GBS_free_hash(hash); 
    147144    } 
  • branches/refactor/NTREE/NT_main.cxx

    r7055 r7097  
    2525#include <aw_file.hxx> 
    2626#include <aw_msg.hxx> 
    27 #include <aw_status.hxx> 
     27#include <arb_progress.h> 
    2828#include <aw_root.hxx> 
    2929 
     
    5454    GB_push_my_security(gb_main); 
    5555 
    56     aw_status("Checking alignments"); 
     56    arb_progress progress("Formatting alignments", GBT_count_alignments(gb_main)); 
    5757    err = GBT_check_data(gb_main, 0); 
    5858 
     
    6262    question.add_help("prompt/format_alignments.hlp"); 
    6363 
    64     for (GBDATA *gb_ali = GB_entry(gb_presets, "alignment"); gb_ali && !err; gb_ali = GB_nextEntry(gb_ali)) { 
     64    for (GBDATA *gb_ali = GB_entry(gb_presets, "alignment"); 
     65         gb_ali && !err; 
     66         gb_ali = GB_nextEntry(gb_ali)) 
     67    { 
    6568        GBDATA *gb_aligned = GB_search(gb_ali, "aligned", GB_INT); 
    6669 
     
    122125            } 
    123126            if (!err && perform_format) { 
    124                 aw_status(GBS_global_string("Formatting '%s'", ali_name)); 
    125127                GB_push_my_security(gb_main); 
    126128                err = GBT_format_alignment(gb_main, ali_name); 
     
    128130            } 
    129131        } 
     132        progress.inc_and_check_user_abort(err); 
    130133    } 
    131134 
     
    138141// -------------------------------------------------------------------------------- 
    139142 
    140  
    141  
    142 // called once on ARB_NTREE startup 
    143 // 
    144143static GB_ERROR nt_check_database_consistency() { 
    145     aw_openstatus("Checking database..."); 
    146  
    147     GB_ERROR err = NT_format_all_alignments(GLOBAL_gb_main); 
     144    // called once on ARB_NTREE startup 
     145    arb_progress("Checking consistency"); 
     146 
     147    GB_ERROR err  = NT_format_all_alignments(GLOBAL_gb_main); 
    148148    if (!err) err = NT_repair_DB(GLOBAL_gb_main); 
    149149 
    150     aw_closestatus(); 
    151150    return err; 
    152151} 
  • branches/refactor/NTREE/NT_sort.cxx

    r6858 r7097  
    1515#include <awt.hxx> 
    1616#include <aw_awar.hxx> 
    17 #include <aw_status.hxx> 
     17#include <arb_progress.h> 
    1818#include <aw_msg.hxx> 
    1919#include <aw_root.hxx> 
     
    135135 
    136136void NT_resort_data_by_phylogeny(AW_window *, AW_CL, AW_CL) { 
    137     aw_openstatus("resorting data"); 
    138     GB_ERROR error = 0; 
    139     GBT_TREE *tree = nt_get_current_tree_root(); 
    140     if (!tree) error = "Please select/build a tree first"; 
     137    arb_progress  progress("Sorting data"); 
     138    GB_ERROR      error = 0; 
     139    GBT_TREE     *tree  = nt_get_current_tree_root(); 
     140 
     141    if (!tree)  error = "Please select/build a tree first"; 
    141142    if (!error) error = NT_resort_data_base(tree, 0, 0, 0); 
    142     aw_closestatus(); 
    143143    if (error) aw_message(error); 
    144  
    145144} 
    146145 
    147146void NT_resort_data_by_user_criteria(AW_window *aw) { 
    148     aw_openstatus("resorting data"); 
    149     GB_ERROR error = 0; 
     147    arb_progress progress("Sorting data"); 
     148     
    150149    char *s1 = aw->get_root()->awar("ad_tree/sort_1")->read_string(); 
    151150    char *s2 = aw->get_root()->awar("ad_tree/sort_2")->read_string(); 
    152151    char *s3 = aw->get_root()->awar("ad_tree/sort_3")->read_string(); 
    153     if (!error) error = NT_resort_data_base(0, s1, s2, s3); 
    154     aw_closestatus(); 
     152 
     153    GB_ERROR error = NT_resort_data_base(0, s1, s2, s3); 
    155154    if (error) aw_message(error); 
     155 
     156    free(s3); 
     157    free(s2); 
     158    free(s1); 
    156159} 
    157160 
  • branches/refactor/NTREE/NT_trackAliChanges.cxx

    r6858 r7097  
    1717#include <aw_root.hxx> 
    1818#include <aw_msg.hxx> 
    19 #include <aw_status.hxx> 
     19#include <arb_progress.h> 
    2020#include <arbdbt.h> 
    2121#include <ctime> 
     
    5656 
    5757static void trackAlignmentChanges(AW_window *aww) { 
    58     GB_transaction  ta(GLOBAL_gb_main); 
    59     AW_root        *root           = aww->get_root(); 
    60     char           *ali            = root->awar(AWAR_TRACK_ALI)->read_string(); 
    61     char           *checksum_field = GBS_string_2_key(GBS_global_string("checksum_%s", ali)); 
    62     long            newSpecies     = 0; 
    63     long            ali_changed    = 0; 
    64     long            seq_changed    = 0; 
    65     long            unchanged      = 0; 
    66     long            species        = GBT_get_species_count(GLOBAL_gb_main); 
    67     long            count          = 0; 
    68     GB_ERROR        error          = 0; 
    69     char           *stamp; 
     58    GB_transaction ta(GLOBAL_gb_main); 
     59 
     60    AW_root  *root           = aww->get_root(); 
     61    char     *ali            = root->awar(AWAR_TRACK_ALI)->read_string(); 
     62    char     *checksum_field = GBS_string_2_key(GBS_global_string("checksum_%s", ali)); 
     63    long      newSpecies     = 0; 
     64    long      ali_changed    = 0; 
     65    long      seq_changed    = 0; 
     66    long      unchanged      = 0; 
     67    GB_ERROR  error          = 0; 
     68    char     *stamp; 
    7069 
    7170    { 
     
    8079    } 
    8180 
    82     aw_openstatus(GBS_global_string("Tracking changes in '%s'", ali)); 
     81    arb_progress progress(GBS_global_string("Tracking changes in '%s'", ali), GBT_get_species_count(GLOBAL_gb_main)); 
    8382 
    8483    for (GBDATA *gb_species = GBT_first_species(GLOBAL_gb_main); 
     
    139138            free(char_entry); 
    140139        } 
    141         count++; 
    142         aw_status(count/(double)species); 
     140        progress.inc_and_check_user_abort(error); 
    143141    } 
    144142 
    145     aw_closestatus(); 
    146  
    147     if (seq_changed) aw_message(GBS_global_string("%li species with changed sequence", seq_changed)); 
    148     if (ali_changed) aw_message(GBS_global_string("%li species with changed alignment", ali_changed)); 
    149     if (newSpecies) aw_message(GBS_global_string("%li new species", newSpecies)); 
     143    if (error) aw_message(error); 
     144    else { 
     145        if (seq_changed) aw_message(GBS_global_string("%li species with changed sequence", seq_changed)); 
     146        if (ali_changed) aw_message(GBS_global_string("%li species with changed alignment", ali_changed)); 
     147        if (newSpecies) aw_message(GBS_global_string("%li new species", newSpecies)); 
     148    } 
    150149 
    151150    free(stamp); 
  • branches/refactor/NTREE/NT_tree_cmp.cxx

    r6858 r7097  
    1212#include <AP_Tree.hxx> 
    1313#include <aw_msg.hxx> 
    14 #include <aw_status.hxx> 
     14#include <arb_progress.h> 
    1515#include <string> 
    1616 
     
    1919using namespace std; 
    2020 
    21 AWT_species_set_root::AWT_species_set_root(GBDATA *gb_maini, long nspeciesi) { 
     21AWT_species_set_root::AWT_species_set_root(GBDATA *gb_maini, long nspeciesi, arb_progress *progress_) { 
    2222    memset((char *)this, 0, sizeof(*this)); 
    23     gb_main = gb_maini; 
     23    gb_main  = gb_maini; 
    2424    nspecies = nspeciesi; 
    25     sets = (AWT_species_set **)GB_calloc(sizeof(AWT_species_set *), (size_t)(nspecies*2+1)); 
     25    progress = progress_; 
     26    sets     = (AWT_species_set **)GB_calloc(sizeof(AWT_species_set *), (size_t)(nspecies*2+1)); 
    2627 
    2728    int i; 
     
    162163     * If a match is found, set ssr->sets to this match) 
    163164     */ 
    164     AWT_species_set *ss; 
     165    AWT_species_set *ss = NULL; 
    165166    if (tree_source->is_leaf) { 
    166         aw_status(this->status++/(double)this->mstatus); 
    167167        ss = new AWT_species_set(tree_source, this, tree_source->name); 
    168         return ss; 
    169     } 
    170     aw_status(this->status++/(double)this->mstatus); 
    171     AWT_species_set *ls = find_best_matches_info(tree_source->get_leftson(), log, compare_node_info); 
    172     AWT_species_set *rs = find_best_matches_info(tree_source->get_rightson(), log, compare_node_info); 
    173  
    174     ss = new AWT_species_set(tree_source, this, ls, rs); // Generate new bitstring 
    175     if (compare_node_info) { 
    176         int mismatches = this->search(ss, log); // Search optimal position 
    177         delete ss->node->remark_branch; 
    178         ss->node->remark_branch = 0; 
    179         if (mismatches) { 
    180             char remark[20]; 
    181             sprintf(remark, "# %i", mismatches); // the #-sign is important (otherwise TREE_write_Newick will not work correctly) 
    182             ss->node->remark_branch = strdup(remark); 
    183         } 
    184168    } 
    185169    else { 
    186         if (tree_source->name) { 
    187             this->search(ss, log);      // Search optimal position 
    188         } 
    189     } 
    190     delete rs; 
    191     delete ls; 
     170        AWT_species_set *ls = NULL; 
     171        AWT_species_set *rs = NULL; 
     172 
     173        ls         = find_best_matches_info(tree_source->get_leftson(), log, compare_node_info); 
     174        if (ls) rs = find_best_matches_info(tree_source->get_rightson(), log, compare_node_info); 
     175 
     176        if (rs) { 
     177            ss = new AWT_species_set(tree_source, this, ls, rs); // Generate new bitstring 
     178            if (compare_node_info) { 
     179                int mismatches = this->search(ss, log); // Search optimal position 
     180                delete ss->node->remark_branch; 
     181                ss->node->remark_branch = 0; 
     182                if (mismatches) { 
     183                    char remark[20]; 
     184                    sprintf(remark, "# %i", mismatches); // the #-sign is important (otherwise TREE_write_Newick will not work correctly) 
     185                    ss->node->remark_branch = strdup(remark); 
     186                } 
     187            } 
     188            else { 
     189                if (tree_source->name) { 
     190                    this->search(ss, log);      // Search optimal position 
     191                } 
     192            } 
     193        } 
     194        delete rs; 
     195        delete ls; 
     196    } 
     197    if (ss) { 
     198        progress->inc(); 
     199        if (progress->aborted()) { 
     200            delete ss; 
     201            ss = NULL; 
     202        } 
     203    } 
    192204    return ss;                  // return bitstring for this node 
    193205} 
     
    257269 
    258270    return error; 
     271} 
     272 
     273void AWT_species_set_root::finish(GB_ERROR& error) { 
     274    if (!error) error = progress->error_if_aborted(); 
     275    progress->done(); 
    259276} 
    260277 
     
    280297    AP_tree_root rdest  (new AliView(gb_main), AP_tree(0), NULL, false); 
    281298 
    282     aw_openstatus("Comparing Topologies"); 
    283  
    284     aw_status("Load Tree 1"); 
     299    arb_progress progress("Comparing Topologies"); 
     300 
    285301    error             = rsource.loadFromDB(tree_source); 
    286302    if (!error) error = rsource.linkToDB(0, 0); 
    287303    if (!error) { 
    288         aw_status("Load Tree 2"); 
    289304        error             = rdest.loadFromDB(tree_dest); 
    290305        if (!error) error = rdest.linkToDB(0, 0); 
     
    293308            AP_tree *dest   = rdest.get_root_node(); 
    294309 
    295             long                  nspecies = dest->arb_tree_leafsum2(); 
    296             AWT_species_set_root *ssr      = new AWT_species_set_root(gb_main, nspecies); 
    297  
    298             aw_status("Building Search Table for Tree 2"); 
     310            long nspecies     = dest->arb_tree_leafsum2(); 
     311            long source_leafs = source->arb_tree_leafsum2(); 
     312            long source_nodes = source_leafs*2-1; 
     313 
     314            arb_progress compare_progress(source_nodes); 
     315            compare_progress.subtitle("Comparing both trees"); 
     316 
     317            AWT_species_set_root *ssr = new AWT_species_set_root(gb_main, nspecies, &compare_progress); 
     318 
    299319            ssr->move_tree_2_ssr(dest); 
    300320 
    301             aw_status("Compare Both Trees"); 
    302             ssr->mstatus = source->arb_tree_leafsum2() * 2; 
    303             ssr->status  = 0; 
    304  
    305             if (ssr->mstatus < 2) error = GB_export_error("Destination tree has less than 3 species"); 
     321            if (source_leafs < 3) error = GB_export_error("Destination tree has less than 3 species"); 
    306322            else { 
    307                 AWT_species_set *root_setl = ssr->find_best_matches_info(source->get_leftson(),  log, compare_node_info); 
    308                 AWT_species_set *root_setr = ssr->find_best_matches_info(source->get_rightson(), log, compare_node_info); 
    309  
    310                 if (!compare_node_info) { 
    311                     aw_status("Copy Node Information"); 
    312                     ssr->copy_node_information(log, delete_old_nodes, nodes_with_marked_only); 
    313                 } 
    314  
    315                 long             dummy         = 0; 
    316                 AWT_species_set *new_root_setl = ssr->search(root_setl, &dummy); 
    317                 AWT_species_set *new_root_setr = ssr->search(root_setr, &dummy); 
    318                 AP_tree         *new_rootl     = (AP_tree *) new_root_setl->node; 
    319                 AP_tree         *new_rootr     = (AP_tree *) new_root_setr->node; 
    320  
    321                 new_rootl->set_root(); // set root correctly 
    322                 new_rootr->set_root(); // set root correctly 
    323  
    324                 aw_status("Save Tree"); 
    325  
    326                 AP_tree *root = new_rootr->get_root_node(); 
    327  
    328                 error             = GBT_write_tree(gb_main, rdest.get_gb_tree(), 0, root->get_gbt_tree()); 
    329                 if (!error) error = GBT_write_tree(gb_main, rsource.get_gb_tree(), 0, source->get_gbt_tree()); 
    330             } 
     323                AWT_species_set *root_setl = NULL; 
     324                AWT_species_set *root_setr = NULL; 
     325 
     326                root_setl = ssr->find_best_matches_info(source->get_leftson(),  log, compare_node_info); 
     327                if (root_setl) root_setr = ssr->find_best_matches_info(source->get_rightson(), log, compare_node_info); 
     328 
     329                if (root_setr) { 
     330                    if (!compare_node_info) { 
     331                        compare_progress.subtitle("Copying node information"); 
     332                        ssr->copy_node_information(log, delete_old_nodes, nodes_with_marked_only); 
     333                    } 
     334 
     335                    long             dummy         = 0; 
     336                    AWT_species_set *new_root_setl = ssr->search(root_setl, &dummy); 
     337                    AWT_species_set *new_root_setr = ssr->search(root_setr, &dummy); 
     338                    AP_tree         *new_rootl     = (AP_tree *) new_root_setl->node; 
     339                    AP_tree         *new_rootr     = (AP_tree *) new_root_setr->node; 
     340 
     341                    new_rootl->set_root(); // set root correctly 
     342                    new_rootr->set_root(); // set root correctly 
     343 
     344                    compare_progress.subtitle("Saving trees"); 
     345 
     346                    AP_tree *root = new_rootr->get_root_node(); 
     347 
     348                    error             = GBT_write_tree(gb_main, rdest.get_gb_tree(), 0, root->get_gbt_tree()); 
     349                    if (!error) error = GBT_write_tree(gb_main, rsource.get_gb_tree(), 0, source->get_gbt_tree()); 
     350                } 
     351 
     352                delete root_setl; 
     353                delete root_setr; 
     354            } 
     355 
     356            ssr->finish(error); 
     357            delete ssr; 
    331358        } 
    332359    } 
     
    337364    } 
    338365 
    339     aw_closestatus(); 
    340  
    341366    GB_end_transaction_show_error(gb_main, error, aw_message); 
    342367} 
  • branches/refactor/NTREE/ad_spec.cxx

    r7095 r7097  
    2424#include <aw_detach.hxx> 
    2525#include <aw_msg.hxx> 
    26 #include <aw_status.hxx> 
     26#include <arb_progress.h> 
    2727#include <arb_str.h> 
    2828#include <arb_defs.h> 
     
    9494static const char * const SAI_COUNTED_CHARS = "COUNTED_CHARS"; 
    9595 
    96 void NT_count_different_chars(AW_window *, AW_CL cl_gb_main, AW_CL use_status) { 
    97     // @@@ extract algorithm 
     96void NT_count_different_chars(AW_window *, AW_CL cl_gb_main, AW_CL) { 
     97    // @@@ extract algorithm and call extracted from testcode 
    9898    ARB_ERROR  error; 
    9999    GBDATA    *gb_main = (GBDATA*)cl_gb_main; 
     
    120120        // loop over all marked species 
    121121        { 
    122             if (use_status) { 
    123                 aw_openstatus("Counting characters"); 
    124                 aw_status(0.0); 
    125             } 
    126  
    127             int                all_marked = GBT_count_marked_species(gb_main); 
    128             aw_status_counter *progress   = use_status ? new aw_status_counter(all_marked) : NULL; 
     122            int          all_marked = GBT_count_marked_species(gb_main); 
     123            arb_progress progress("Counting different characters", all_marked); 
    129124 
    130125            for (GBDATA *gb_species = GBT_first_marked_species(gb_main); 
     
    147142                    } 
    148143                } 
    149                 if (progress) progress->inc(); 
    150             } 
    151  
    152             if (use_status) { 
    153                 delete progress; 
    154                 aw_closestatus(); 
     144                progress.inc_and_check_user_abort(error); 
    155145            } 
    156146        } 
     
    427417            if (!error) { 
    428418                if (aw_ask_sure("Do you want to re-create the 'name' field?")) { 
    429                     aw_openstatus("Recreating species name"); 
    430                     aw_status(""); 
    431                     aw_status(0.0); 
    432                     error = AWTC_recreate_name(gb_species, true); 
     419                    arb_progress progress("Recreating species name", 1); 
     420                    error = AWTC_recreate_name(gb_species); 
    433421                    if (!error) aw_root->awar(AWAR_SPECIES_NAME)->write_string(GBT_read_name(gb_species)); // set focus 
    434                     aw_closestatus(); 
    435422                } 
    436423            } 
     
    945932        error = GB_export_error("Please select a valid field"); 
    946933    } 
    947     long max = awt_count_queried_items(cbs, AWT_QUERY_ALL_SPECIES); 
    948934 
    949935    if (strcmp(dest_field, "name")==0) { 
     
    956942    } 
    957943 
    958     aw_openstatus("Searching next neighbours"); 
    959  
    960     long           count          = 0; 
     944    long         max = awt_count_queried_items(cbs, AWT_QUERY_ALL_SPECIES); 
     945    arb_progress progress("Searching next neighbours", max); 
     946    progress.auto_subtitles("Species"); 
     947 
    961948    int            pts            = aw_root->awar(AWAR_PROBE_ADMIN_PT_SERVER)->read_int(); 
    962949    char          *ali_name       = aw_root->awar(AWAR_DEFAULT_ALIGNMENT)->read_string(); 
     
    976963        if (!IS_QUERIED(gb_species, cbs)) continue; 
    977964 
    978         count++; 
    979         if ((count%10) == 0) { 
    980             GBDATA *gb_name = GB_search(gb_species, "name", GB_STRING); 
    981             aw_status(GBS_global_string("Species '%s' (%li:%li)", GB_read_char_pntr(gb_name), count, max)); 
    982         } 
    983  
    984965        GBDATA *gb_data = GBT_read_sequence(gb_species, ali_name); 
    985         if (!gb_data) continue; 
    986  
    987         if (aw_status(count/(double)max)) { 
    988             error = "operation aborted"; 
    989         } 
    990         else { 
     966        if (gb_data) { 
    991967            char            *sequence = GB_read_string(gb_data); 
    992968            PT_FamilyFinder  ff(GLOBAL_gb_main, pts, oligo_len, mismatches, fast_mode, rel_matches); 
     
    10401016            free(sequence); 
    10411017        } 
    1042     } 
    1043     aw_closestatus(); 
     1018        progress.inc_and_check_user_abort(error); 
     1019    } 
    10441020    GB_end_transaction_show_error(GLOBAL_gb_main, error, aw_message); 
    10451021    free(dest_field); 
     
    14651441void TEST_count_chars() { 
    14661442    // calculate SAI for test DBs 
    1467      
     1443 
     1444    arb_suppress_progress silence; 
    14681445    for (int prot = 0; prot<2; ++prot) { 
    14691446        GBDATA *gb_main; 
     
    14841461    // the difference to TEST_count_chars() is just in size of alignment. 
    14851462    // NT_count_different_chars() crashes for big alignments when running in gdb  
     1463    arb_suppress_progress silence; 
    14861464    { 
    14871465        arb_unit_test::test_alignment_data data_source[] = { 
  • branches/refactor/NTREE/ad_transpro.cxx

    r6861 r7097  
    1919#include <aw_root.hxx> 
    2020#include <aw_msg.hxx> 
    21 #include <aw_status.hxx> 
     21#include <arb_progress.h> 
    2222#include <arbdbt.h> 
    2323#include <cctype> 
     
    8080 
    8181    if (!error) { 
    82         aw_openstatus("Translating"); 
    83  
    84         int spec_count = GBT_get_species_count(gb_main); 
    85         int spec_i     = 0; 
     82        arb_progress progress("Translating", GBT_count_marked_species(gb_main)); 
    8683 
    8784        bool table_used[AWT_CODON_TABLES]; 
     
    139136                } 
    140137 
    141                 if (aw_status(double(spec_i++)/double(spec_count))) { 
    142                     error = "Aborted by user"; 
    143                 } 
     138                GBDATA *gb_source = GB_entry(gb_species, ali_source); 
     139                if (!gb_source) { ++no_data; } 
    144140                else { 
    145                     GBDATA *gb_source = GB_entry(gb_species, ali_source); 
    146                     if (!gb_source) { ++no_data; continue; } 
    147  
    148141                    GBDATA *gb_source_data = GB_entry(gb_source, "data"); 
    149                     if (!gb_source_data) { ++no_data; continue; } 
    150  
    151                     char *data = GB_read_string(gb_source_data); 
    152                     if (!data) { 
    153                         GB_print_error(); // cannot read data (ignore species) 
    154                         ++no_data; 
    155                         continue; 
    156                     } 
    157  
    158                     if (!found_transl_info) ++spec_no_transl_info; // count species with missing info 
    159  
    160                     stops += AWT_pro_a_nucs_convert(table, data, GB_read_string_count(gb_source_data), startpos, translate_all, false, false, 0); // do the translation 
    161                     ++count; 
    162  
    163                     GBDATA *gb_dest_data     = GBT_add_data(gb_species, ali_dest, "data", GB_STRING); 
    164                     if (!gb_dest_data) error = GB_await_error(); 
    165                     else    error            = GB_write_string(gb_dest_data, data); 
    166  
    167                     free(data); 
    168                 } 
    169  
    170                 if (!error && save_entries && !found_transl_info) { 
    171                     error = AWT_saveTranslationInfo(gb_species, selected_ttable, startpos); 
    172                 } 
    173             } 
    174         } 
    175  
    176         aw_closestatus(); 
     142                    if (!gb_source_data) { ++no_data; } 
     143                    else { 
     144                        char *data = GB_read_string(gb_source_data); 
     145                        if (!data) { 
     146                            GB_print_error(); // cannot read data (ignore species) 
     147                            ++no_data; 
     148                        } 
     149                        else { 
     150                            if (!found_transl_info) ++spec_no_transl_info; // count species with missing info 
     151 
     152                            stops += AWT_pro_a_nucs_convert(table, data, GB_read_string_count(gb_source_data), startpos, translate_all, false, false, 0); // do the translation 
     153                            ++count; 
     154 
     155                            GBDATA *gb_dest_data     = GBT_add_data(gb_species, ali_dest, "data", GB_STRING); 
     156                            if (!gb_dest_data) error = GB_await_error(); 
     157                            else    error            = GB_write_string(gb_dest_data, data); 
     158 
     159 
     160                            if (!error && save_entries && !found_transl_info) { 
     161                                error = AWT_saveTranslationInfo(gb_species, selected_ttable, startpos); 
     162                            } 
     163                             
     164                            free(data); 
     165                        } 
     166                    } 
     167                } 
     168                progress.inc_and_check_user_abort(error); 
     169            } 
     170        } 
    177171    } 
    178172 
     
    353347    GB_ERROR error              = 0; 
    354348 
    355     aw_openstatus("Re-aligner"); 
    356  
    357     int no_of_marked_species    = GBT_count_marked_species(gb_main); 
    358     int no_of_realigned_species = 0; 
    359     int ignore_fail_pos         = 0; 
     349    arb_progress progress("Re-aligner", GBT_count_marked_species(gb_main)); 
     350    progress.auto_subtitles("Re-aligning species"); 
     351 
     352    int ignore_fail_pos = 0; 
    360353 
    361354    for (GBDATA *gb_species = GBT_first_marked_species(gb_main); 
     
    363356         gb_species = GBT_next_marked_species(gb_species)) 
    364357    { 
    365         aw_status(GBS_global_string("Re-aligning #%i of %i ...", no_of_realigned_species+1, no_of_marked_species)); 
    366  
    367358        gb_source              = GB_entry(gb_species, ali_source); if (!gb_source)      continue; 
    368359        GBDATA *gb_source_data = GB_entry(gb_source,  "data");     if (!gb_source_data) continue; 
     
    657648        free(source); 
    658649 
    659         no_of_realigned_species++; 
    660         GB_status(double(no_of_realigned_species)/double(no_of_marked_species)); 
    661     } 
    662     aw_closestatus(); 
     650        progress.inc_and_check_user_abort(error); 
     651    } 
    663652 
    664653    if (max_wanted_ali_len>0) { 
  • branches/refactor/NTREE/ap_pos_var_pars.hxx

    r6490 r7097  
    2424AW_window *AP_open_pos_var_pars_window(AW_root *root); 
    2525 
     26class arb_progress; 
     27 
    2628class AP_pos_var { 
    2729    GBDATA        *gb_main; 
    28     long           timer;       // for the status box 
    29     long           treesize;    // max value for slider 
     30    long           treesize;         // max value for slider 
     31    arb_progress  *progress; 
    3032    GB_UINT4      *frequencies[256]; // count every occurrence 
    31     GB_UINT4      *transitions; // minimum transitions 
    32     GB_UINT4      *transversions; // minimum transversions (dna only) 
     33    GB_UINT4      *transitions;      // minimum transitions 
     34    GB_UINT4      *transversions;    // minimum transversions (dna only) 
    3335    unsigned char  char_2_freq[256]; // mapper (~ toupper) 
    3436    long           char_2_transition[256]; // a->1 c->2 g->4 ... 
  • branches/refactor/NTREE/nt_internal.h

    r7084 r7097  
    129129/* ad_spec.cxx */ 
    130130void NT_create_species_var(AW_root *aw_root, AW_default aw_def); 
    131 void NT_count_different_chars(AW_window *, AW_CL cl_gb_main, AW_CL use_status); 
     131void NT_count_different_chars(AW_window *, AW_CL cl_gb_main, AW_CL dummy_1x); 
    132132void NT_create_sai_from_pfold(AW_window *aww, AW_CL ntw, AW_CL dummy_1x); 
    133133AW_window *NT_create_ad_list_reorder(AW_root *root, AW_CL cl_item_selector); 
  • branches/refactor/NTREE/nt_tree_cmp.hxx

    r6490 r7097  
    1818class AP_tree; 
    1919class AWT_species_set; 
     20class arb_progress; 
    2021 
    2122class AWT_species_set_root { 
     
    2526    int               diff_bits[256]; 
    2627 
     28    arb_progress *progress; 
     29 
    2730public: 
    28     long     mstatus; 
    29     long     status;            // temporary variables for status 
    3031    long     nspecies; 
    3132    GBDATA  *gb_main; 
     
    3334 
    3435    // REAL PUBLIC 
    35     AWT_species_set_root(GBDATA *gb_main, long nspecies); 
     36    AWT_species_set_root(GBDATA *gb_main, long nspecies, arb_progress *progress_); 
    3637    ~AWT_species_set_root(); 
    3738 
     
    4344    AWT_species_set *find_best_matches_info(AP_tree *tree_source, FILE *log, bool setinner_node); 
    4445    AWT_species_set *move_tree_2_ssr(AP_tree *node); 
     46 
     47    void finish(GB_ERROR& error); 
    4548}; 
    4649 
  • branches/refactor/PARSIMONY/AP_tree_edge.cxx

    r6858 r7097  
    1313 
    1414#include <AP_filter.hxx> 
    15 #include <aw_status.hxx> 
     15#include <arb_progress.h> 
    1616 
    1717#include <cmath> 
     
    680680} 
    681681 
    682 #if defined(DEVEL_RALF) 
    683 #warning fix interfaces of AP_tree_nlen::nn_interchange_rek and AP_tree_edge::nni_rek (use a struct as param) 
    684 #endif // DEVEL_RALF 
    685 AP_FLOAT AP_tree_edge::nni_rek(bool useStatus, int &Abort, int deep, bool skip_hidden, 
    686                                AP_BL_MODE mode, AP_tree_nlen *skipNode) 
    687 { 
     682AP_FLOAT AP_tree_edge::nni_rek(int deep, bool skip_hidden, AP_BL_MODE mode, AP_tree_nlen *skipNode) { 
    688683    if (!rootNode())        return 0.0; 
    689684    if (rootNode()->is_leaf)    return rootNode()->costs(); 
     
    691686    AP_tree_edge *oldRootEdge = rootEdge(); 
    692687 
    693     if (useStatus) aw_openstatus("Recursive NNI"); 
    694688    if (deep>=0) set_root(); 
    695689 
     
    699693    buildChain(deep, skip_hidden, 0, skipNode); 
    700694    long cs = sizeofChain(); 
     695    arb_progress progress(cs*2); 
    701696    AP_tree_edge *follow; 
    702     long count = 0; 
    703     { // set all branch lengths to undef 
     697    { 
     698        // set all branch lengths to undef 
    704699        for (follow = this; follow; follow = follow->next) { 
    705700            follow->node[0]->leftlen          = ap_undef_bl; 
     
    714709    } 
    715710 
    716     if (useStatus) aw_status(0.0); 
    717  
    718     for (follow = this; follow && Abort == 0; follow = follow->next) { 
     711    for (follow = this; follow && !progress.aborted(); follow = follow->next) { 
    719712        AP_tree_nlen *son = follow->sonNode(); 
    720713        AP_tree_nlen *fath = son; 
     
    741734        } 
    742735 
    743         if (useStatus ? aw_status(++count/(double)cs) : aw_status()) { Abort = 1; break; } 
    744     } 
    745  
    746     if (useStatus) { 
    747         aw_status("Recalc modified branches"); 
    748         aw_status(0.0); 
    749         count = 0; 
    750     } 
    751  
    752     for (follow = this; follow && Abort == 0; follow = follow->next) { 
     736        progress.inc(); 
     737    } 
     738 
     739    for (follow = this; follow && !progress.aborted(); follow = follow->next) { 
    753740        ap_check_leaf_bl(follow->node[0]); 
    754741        ap_check_leaf_bl(follow->node[1]); 
    755         if (useStatus ? aw_status(++count/(double)cs) : aw_status()) { Abort = 1; break; } 
     742        progress.inc(); 
    756743    } 
    757744    oldRootEdge->set_root(); 
    758745    new_parsimony = rootNode()->costs(); 
    759     if (useStatus) aw_closestatus(); 
    760746 
    761747    return new_parsimony; 
  • branches/refactor/PARSIMONY/AP_tree_nlen.cxx

    r7096 r7097  
    859859} 
    860860 
    861 #if defined(DEVEL_RALF) 
    862 #warning fix interfaces of AP_tree_nlen::nn_interchange_rek and AP_tree_edge::nni_rek (use a struct as param) 
    863 #endif // DEVEL_RALF 
    864 AP_FLOAT AP_tree_nlen::nn_interchange_rek(bool openclosestatus, int &Abort, int deep, AP_BL_MODE mode, bool skip_hidden) 
     861AP_FLOAT AP_tree_nlen::nn_interchange_rek(int deep, AP_BL_MODE mode, bool skip_hidden) 
    865862{ 
    866863    if (!father) 
    867864    { 
    868         return rootEdge()->nni_rek(openclosestatus, Abort, deep, skip_hidden, mode, NULL); 
     865        return rootEdge()->nni_rek(deep, skip_hidden, mode, NULL); 
    869866    } 
    870867 
     
    873870        AP_tree_edge *e = rootEdge(); 
    874871 
    875         return e->nni_rek(openclosestatus, Abort, deep, skip_hidden, mode, e->otherNode(this)); 
    876     } 
    877  
    878     return edgeTo(get_father())->nni_rek(openclosestatus, Abort, deep, skip_hidden, mode, get_father()); 
     872        return e->nni_rek(deep, skip_hidden, mode, e->otherNode(this)); 
     873    } 
     874 
     875    return edgeTo(get_father())->nni_rek(deep, skip_hidden, mode, get_father()); 
    879876} 
    880877 
  • branches/refactor/PARSIMONY/Makefile

    r7089 r7097  
    100100AP_tree_edge.o: $(ARBHOME)/INCLUDE/arb_error.h 
    101101AP_tree_edge.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     102AP_tree_edge.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    102103AP_tree_edge.o: $(ARBHOME)/INCLUDE/arb_string.h 
    103104AP_tree_edge.o: $(ARBHOME)/INCLUDE/ARB_Tree.hxx 
     
    109110AP_tree_edge.o: $(ARBHOME)/INCLUDE/aw_base.hxx 
    110111AP_tree_edge.o: $(ARBHOME)/INCLUDE/aw_color_groups.hxx 
    111 AP_tree_edge.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    112112AP_tree_edge.o: $(ARBHOME)/INCLUDE/downcast.h 
    113113AP_tree_edge.o: $(ARBHOME)/INCLUDE/dupstr.h 
     
    181181PARS_dtree.o: $(ARBHOME)/INCLUDE/arb_error.h 
    182182PARS_dtree.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     183PARS_dtree.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    183184PARS_dtree.o: $(ARBHOME)/INCLUDE/arb_string.h 
    184185PARS_dtree.o: $(ARBHOME)/INCLUDE/ARB_Tree.hxx 
     
    197198PARS_dtree.o: $(ARBHOME)/INCLUDE/aw_preset.hxx 
    198199PARS_dtree.o: $(ARBHOME)/INCLUDE/aw_root.hxx 
    199 PARS_dtree.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    200200PARS_dtree.o: $(ARBHOME)/INCLUDE/aw_window.hxx 
    201201PARS_dtree.o: $(ARBHOME)/INCLUDE/awt_canvas.hxx 
     
    236236PARS_main.o: $(ARBHOME)/INCLUDE/arb_error.h 
    237237PARS_main.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     238PARS_main.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    238239PARS_main.o: $(ARBHOME)/INCLUDE/arb_string.h 
    239240PARS_main.o: $(ARBHOME)/INCLUDE/ARB_Tree.hxx 
     
    253254PARS_main.o: $(ARBHOME)/INCLUDE/aw_preset.hxx 
    254255PARS_main.o: $(ARBHOME)/INCLUDE/aw_root.hxx 
    255 PARS_main.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    256256PARS_main.o: $(ARBHOME)/INCLUDE/aw_window.hxx 
    257257PARS_main.o: $(ARBHOME)/INCLUDE/awt.hxx 
  • branches/refactor/PARSIMONY/PARS_dtree.cxx

    r7096 r7097  
    2727#include <aw_awar.hxx> 
    2828#include <aw_msg.hxx> 
    29 #include <aw_status.hxx> 
     29#include <arb_progress.h> 
    3030#include <aw_root.hxx> 
    3131 
     
    6767    agt->tree_static->set_root_changed_callback(AWT_graphic_parsimony_root_changed, agt); 
    6868} 
    69  
    70 static int ap_global_abort_flag; 
    7169 
    7270double funktion_quadratisch(double x, double *param_list, int param_anz) { 
     
    145143 
    146144    i = 0; 
    147     aw_openstatus("KL Optimizer"); 
    148     { 
    149         char buffer[100]; 
    150         sprintf(buffer, "Old Parsimony: %f", pars_start); 
    151         aw_status(buffer); 
    152     } 
    153     int abort_flag = false; 
     145    arb_progress progress(anzahl); 
     146 
     147    progress.subtitle(GBS_global_string("Old Parsimony: %.1f", pars_start)); 
    154148 
    155149    GB_pop_transaction(GLOBAL_gb_main); 
    156150 
    157     for (i=0; i<anzahl && ! abort_flag; i++) { 
    158         abort_flag |= aw_status(i/(double)anzahl); 
    159         if (abort_flag) break; 
    160  
     151    for (i=0; i<anzahl && !progress.aborted(); i++) { 
    161152        AP_tree_nlen *tree_elem = (AP_tree_nlen *)list[i]; 
    162153 
    163         if (tree_elem->gr.hidden || 
    164             (tree_elem->father && tree_elem->get_father()->gr.hidden)) { 
    165             continue;   // within a folded group 
    166         } 
    167         { 
     154        bool in_folded_group = tree_elem->gr.hidden || 
     155            (tree_elem->father && tree_elem->get_father()->gr.hidden); 
     156 
     157        if (!in_folded_group) { 
    168158            bool better_tree_found = false; 
    169159            ap_main->push(); 
     
    179169                ap_main->clear(); 
    180170                pars_start =  GLOBAL_PARS->get_root_node()->costs(); 
    181                 char buffer[100]; 
    182                 sprintf(buffer, "New Parsimony: %f", pars_start); 
    183                 abort_flag |= aw_status(buffer); 
     171                progress.subtitle(GBS_global_string("New parsimony: %.1f (gain: %.1f)", pars_start, pars_prev-pars_start)); 
    184172            } 
    185173            else { 
     
    187175            } 
    188176        } 
    189     } 
    190     aw_closestatus(); 
     177        progress.inc(); 
     178    } 
    191179    delete list; 
    192     ap_global_abort_flag |= abort_flag; 
    193180    printf("Combines: %li\n", AP_sequence::combine_count()-prevCombineCount); 
    194181} 
    195182 
    196 void PARS_optimizer_cb(AP_tree *tree) { 
     183void PARS_optimizer_cb(AP_tree *tree, arb_progress& progress) { 
    197184    AWT_graphic_tree *agt          = GLOBAL_PARS->tree; 
    198185    AP_tree          *oldrootleft  = agt->get_root_node()->get_leftson(); 
    199186    AP_tree          *oldrootright = agt->get_root_node()->get_rightson(); 
    200187 
    201     for (ap_global_abort_flag = 0; !ap_global_abort_flag;) { 
    202         AP_FLOAT old_pars = DOWNCAST(AP_tree_nlen*, agt->get_root_node())->costs(); 
    203  
    204         AP_FLOAT this_pars = ((AP_tree_nlen *)tree)->nn_interchange_rek(true, ap_global_abort_flag, -1, AP_BL_NNI_ONLY, false); 
    205         if (ap_global_abort_flag) break; 
    206  
    207         if (old_pars != this_pars) { // NNI found better tree 
    208             continue; 
     188    AP_FLOAT org_pars  = DOWNCAST(AP_tree_nlen*, agt->get_root_node())->costs(); 
     189    AP_FLOAT prev_pars = org_pars; 
     190 
     191    progress.subtitle(GBS_global_string("Old parsimony: %.1f", org_pars)); 
     192 
     193    while (!progress.aborted()) { 
     194        AP_FLOAT nni_pars = ((AP_tree_nlen *)tree)->nn_interchange_rek(-1, AP_BL_NNI_ONLY, false); 
     195 
     196        if (nni_pars == prev_pars) { // NNI did not reduce costs -> kern-lin 
     197            PARS_kernighan_cb(tree); 
     198            AP_FLOAT ker_pars = DOWNCAST(AP_tree_nlen*, agt->get_root_node())->costs(); 
     199             
     200            if (ker_pars == prev_pars) break; // kern-lin did not improve tree -> done 
     201            prev_pars = ker_pars; 
    209202        } 
    210  
    211         PARS_kernighan_cb(tree); 
    212         if (old_pars == DOWNCAST(AP_tree_nlen*, agt->get_root_node())->costs()) { 
    213             ap_global_abort_flag = 1; 
     203        else { 
     204            prev_pars = nni_pars; 
    214205        } 
    215     } 
     206        progress.subtitle(GBS_global_string("New parsimony: %.1f (gain: %.1f)", prev_pars, org_pars-prev_pars)); 
     207    } 
     208 
    216209    if (oldrootleft->father == oldrootright) oldrootleft->set_root(); 
    217210    else oldrootright->set_root(); 
     211 
    218212    DOWNCAST(AP_tree_nlen*, agt->get_root_node())->costs(); 
    219     aw_closestatus(); 
    220213} 
    221214 
     
    386379                    case AWT_M_LEFT: { 
    387380                        if (cl->exists) { 
    388                             at                   = (AP_tree *)cl->client_data1; 
    389                             ap_global_abort_flag = false; 
     381                            arb_progress progress("NNI optimize subtree"); 
     382 
     383                            at                = (AP_tree *)cl->client_data1; 
    390384                            AP_tree_nlen *atn = DOWNCAST(AP_tree_nlen*, at); 
    391                             atn->nn_interchange_rek(true, ap_global_abort_flag, -1, AP_BL_NNI_ONLY, false); 
     385                            atn->nn_interchange_rek(-1, AP_BL_NNI_ONLY, false); 
     386 
    392387                            exports.refresh = 1; 
    393388                            exports.save    = 1; 
     389 
    394390                            ASSERT_VALID_TREE(get_root_node()); 
    395391                            recalc_branch_lengths = true; 
     
    398394                    } 
    399395                    case AWT_M_RIGHT: { 
    400                         long          prevCombineCount = AP_sequence::combine_count(); 
    401                         ap_global_abort_flag           = false; 
    402                         AP_tree_nlen *atn              = DOWNCAST(AP_tree_nlen*, get_root_node()); 
    403  
    404                         atn->nn_interchange_rek(true, ap_global_abort_flag, -1, AP_BL_NNI_ONLY, false); 
     396                        arb_progress progress("NNI optimize tree"); 
     397                        long         prevCombineCount = AP_sequence::combine_count(); 
     398                         
     399                        AP_tree_nlen *atn = DOWNCAST(AP_tree_nlen*, get_root_node()); 
     400                        atn->nn_interchange_rek(-1, AP_BL_NNI_ONLY, false); 
    405401                        printf("Combines: %li\n", AP_sequence::combine_count()-prevCombineCount); 
    406402 
    407                         exports.refresh       = 1; 
    408                         exports.save          = 1; 
     403                        exports.refresh = 1; 
     404                        exports.save    = 1; 
     405 
    409406                        ASSERT_VALID_TREE(get_root_node()); 
    410407                        recalc_branch_lengths = true; 
     
    420417                switch (button) { 
    421418                    case AWT_M_LEFT: 
    422                         if (!cl->exists) break; 
    423                         at = (AP_tree *)cl->client_data1; 
    424                         PARS_kernighan_cb(at); 
    425                         this->exports.refresh = 1; 
    426                         this->exports.save = 1; 
    427                         ASSERT_VALID_TREE(get_root_node()); 
    428                         recalc_branch_lengths = true; 
    429                         break; 
    430                     case AWT_M_RIGHT: 
     419                        if (cl->exists) { 
     420                            arb_progress progress("Kernighan-Lin optimize subtree"); 
     421                            at = (AP_tree *)cl->client_data1; 
     422                            PARS_kernighan_cb(at); 
     423                            this->exports.refresh = 1; 
     424                            this->exports.save = 1; 
     425                            ASSERT_VALID_TREE(get_root_node()); 
     426                            recalc_branch_lengths = true; 
     427                        } 
     428                        break; 
     429                    case AWT_M_RIGHT: { 
     430                        arb_progress progress("Kernighan-Lin optimize tree"); 
    431431                        PARS_kernighan_cb(get_root_node()); 
    432432                        this->exports.refresh = 1; 
     
    435435                        recalc_branch_lengths = true; 
    436436                        break; 
     437                    } 
    437438                } 
    438439                GB_begin_transaction(gb_main); 
     
    444445                switch (button) { 
    445446                    case AWT_M_LEFT: 
    446                         if (!cl->exists) break; 
    447                         at = (AP_tree *)cl->client_data1; 
    448                         if (at) PARS_optimizer_cb(at); 
     447                        if (cl->exists) { 
     448                            arb_progress progress("Optimizing subtree"); 
     449 
     450                            at = (AP_tree *)cl->client_data1; 
     451                             
     452                            if (at) PARS_optimizer_cb(at, progress); 
     453                            this->exports.refresh = 1; 
     454                            this->exports.save    = 1; 
     455                            ASSERT_VALID_TREE(get_root_node()); 
     456                            recalc_branch_lengths = true; 
     457                        } 
     458                        break; 
     459                    case AWT_M_RIGHT: { 
     460                        arb_progress progress("Optimizing tree"); 
     461                         
     462                        PARS_optimizer_cb(get_root_node(), progress); 
    449463                        this->exports.refresh = 1; 
    450                         this->exports.save = 1; 
     464                        this->exports.save    = 1; 
    451465                        ASSERT_VALID_TREE(get_root_node()); 
    452466                        recalc_branch_lengths = true; 
    453467                        break; 
    454                     case AWT_M_RIGHT: 
    455                         PARS_optimizer_cb(get_root_node()); 
    456                         this->exports.refresh = 1; 
    457                         this->exports.save = 1; 
    458                         ASSERT_VALID_TREE(get_root_node()); 
    459                         recalc_branch_lengths = true; 
    460                         break; 
     468                    } 
    461469                } 
    462470                GB_begin_transaction(gb_main); 
     
    471479 
    472480    if (recalc_branch_lengths) { 
    473         int abort_flag = false; 
    474         rootEdge()->nni_rek(false, abort_flag, -1, false, AP_BL_BL_ONLY, NULL); 
     481        arb_progress progress("Recalculating branch lengths"); 
     482        rootEdge()->calc_branchlengths(); 
    475483 
    476484        beautify_tree = true; // beautify after recalc_branch_lengths 
  • branches/refactor/PARSIMONY/PARS_main.cxx

    r7096 r7097  
    2323#include <awt_sel_boxes.hxx> 
    2424#include <awt_filter.hxx> 
    25 #include <aw_status.hxx> 
     25#include <arb_progress.h> 
    2626#include <aw_root.hxx> 
    2727#include <gui_aliview.hxx> 
     
    110110} 
    111111 
    112 struct InsertData { 
     112class InsertData { 
     113    int  abort_flag; 
     114    long currentspecies; 
     115     
     116    arb_progress progress; 
     117 
     118public: 
     119 
    113120    bool quick_add_flag; 
    114     bool singlestatus;                              // update status for single species addition 
    115     int  abort_flag; 
    116     long maxspecies; 
    117     long currentspecies; 
    118  
    119     InsertData(bool quick) 
    120         : quick_add_flag(quick) 
    121         , singlestatus(false) 
    122         , abort_flag(false) 
    123         , maxspecies(0) 
    124         , currentspecies(0) 
     121    InsertData(bool quick, long spec_count) 
     122        : abort_flag(false), 
     123          currentspecies(0), 
     124          progress(GBS_global_string("Inserting %li species", spec_count), spec_count),  
     125          quick_add_flag(quick) 
    125126    { 
    126127    } 
    127128 
    128129    bool every_sixteenth() { return (currentspecies & 0xf) == 0; } 
     130 
     131    bool aborted() const { return abort_flag; } 
     132    void set_aborted(bool aborted_) { abort_flag = aborted_; } 
     133 
     134    void inc() { 
     135        ++currentspecies; 
     136        progress.inc(); 
     137        abort_flag = progress.aborted(); 
     138    } 
    129139}; 
    130140 
     
    133143 
    134144    InsertData *isits = (InsertData*)cd_isits; 
    135     if (isits->abort_flag) return val; 
     145    if (isits->aborted()) return val; 
    136146 
    137147    GBDATA  *gb_node = (GBDATA *)val; 
     
    167177    } 
    168178 
    169     if (isits->singlestatus) { 
    170         sprintf(AW_ERROR_BUFFER, 
    171                 "Inserting Species %s (%li:%li)", 
    172                 key, 
    173                 ++isits->currentspecies, 
    174                 isits->maxspecies); 
    175         aw_openstatus(AW_ERROR_BUFFER); 
    176     } 
    177     else { 
    178         isits->abort_flag = aw_status(++isits->currentspecies/(double)isits->maxspecies); 
    179     } 
     179    isits->inc(); 
    180180 
    181181    { 
     
    185185 
    186186        while (cnt<2) { 
    187             char buf[200]; 
    188  
    189             sprintf(buf, "Pre-optimize (pars=%f)", best_val); 
    190  
    191             aw_status(buf); 
    192             this_val = rootEdge()->nni_rek(false, isits->abort_flag, -1, false, AP_BL_NNI_ONLY, NULL); 
     187            this_val = rootEdge()->nni_rek(-1, false, AP_BL_NNI_ONLY, NULL); 
    193188            if (this_val<best_val) { 
    194189                best_val = this_val; 
     
    206201    rootEdge()->dumpNNI=2; 
    207202 
    208     aw_status("Searching best position"); 
    209  
    210203    AP_tree      **blist; 
    211204    AP_tree_nlen  *bl, *blf; 
     
    225218    best_parsimony = akt_parsimony = rootNode()->costs(); 
    226219 
    227     for (counter = 0; !isits->abort_flag && blist[counter]; counter += 2) 
    228     { 
    229         if (isits->singlestatus && isits->every_sixteenth()) { 
    230             isits->abort_flag = aw_status(counter/(bsum*2.0)); 
    231         } 
    232  
     220    for (counter = 0; !isits->aborted() && blist[counter]; counter += 2) 
     221    { 
    233222        bl = (AP_tree_nlen *)blist[counter]; 
    234223        blf = (AP_tree_nlen *)blist[counter+1]; 
     
    304293        if (isits->every_sixteenth())  deep = -1; 
    305294 
    306         aw_status("optimization"); 
    307         e->dumpNNI = 1; 
     295        arb_progress progress("optimization"); 
     296        e->dumpNNI          = 1; 
    308297        e->distInsertBorder = e->distanceToBorder(INT_MAX, (AP_tree_nlen*)leaf); 
    309         e->basesChanged = baseDiff; 
    310         e->nni_rek(false, isits->abort_flag, deep, false, AP_BL_NNI_ONLY, NULL); 
    311         e->dumpNNI = 0; 
     298        e->basesChanged     = baseDiff; 
     299        e->nni_rek(deep, false, AP_BL_NNI_ONLY, NULL); 
     300        e->dumpNNI          = 0; 
    312301    } 
    313302 
     
    351340static AP_tree_nlen *insert_species_in_tree(const char *key, AP_tree_nlen *leaf, InsertData *isits) { 
    352341    if (!leaf) return leaf; 
    353     if (isits->abort_flag) return leaf; 
     342    if (isits->aborted()) return leaf; 
    354343 
    355344    AP_tree_nlen *tree = rootNode(); 
     
    367356    } 
    368357 
    369     ++isits->currentspecies; 
    370     if (isits->singlestatus) { 
    371         sprintf(AW_ERROR_BUFFER, "Inserting Species %s (%li:%li)", 
    372                 key, isits->currentspecies, isits->maxspecies); 
    373         aw_openstatus(AW_ERROR_BUFFER); 
    374     } 
    375  
    376358    if (!tree) {                                    // no tree yet 
    377359        static AP_tree_nlen *last_inserted = NULL; // @@@ move 'last_inserted' into 'InsertData' 
     
    392374    } 
    393375    else { 
    394         aw_status("Searching best position"); 
    395  
    396376        ASSERT_VALID_TREE(tree); 
    397377 
     
    418398            ASSERT_VALID_TREE(rootNode()); 
    419399 
    420             for (long counter = 0; !isits->abort_flag && branchlist[counter]; counter += 2) { 
    421                 if (isits->singlestatus && isits->every_sixteenth()) { 
    422                     isits->abort_flag = aw_status(counter/(bsum*2.0)); 
    423                 } 
     400            for (long counter = 0; !isits->aborted() && branchlist[counter]; counter += 2) { 
    424401                AP_tree_nlen *bl  = branchlist[counter]; 
    425402                AP_tree_nlen *blf = branchlist[counter+1]; 
     
    462439 
    463440        if (!isits->quick_add_flag) { 
    464             int deep = 5; 
     441            int deep                           = 5; 
    465442            if (isits->every_sixteenth()) deep = -1; 
    466             aw_status("optimization"); 
    467             bestposl->get_father()->nn_interchange_rek(false, isits->abort_flag, deep, AP_BL_NNI_ONLY, true); 
     443             
     444            arb_progress progress("optimization"); 
     445            bestposl->get_father()->nn_interchange_rek(deep, AP_BL_NNI_ONLY, true); 
    468446            ASSERT_VALID_TREE(rootNode()); 
    469447        } 
     
    481459 
    482460                    char *label = GBS_global_string_copy(format, to_insert->name); 
    483                     isits->currentspecies--;        // undo counter increment done by insert_species_in_tree 
    484461                    insert_species_in_tree(label, to_insert, isits); 
    485462                    free(label); 
     
    488465        } 
    489466 
    490         if (!isits->singlestatus) { 
    491             isits->abort_flag |= aw_status(isits->currentspecies/(double)isits->maxspecies); 
    492         } 
    493  
    494467        ASSERT_VALID_TREE(rootNode()); 
    495468    } 
     
    499472 
    500473static long hash_insert_species_in_tree(const char *key, long leaf, void *cd_isits) { 
    501     InsertData *isits = (InsertData*)cd_isits; 
    502     return (long)insert_species_in_tree(key, (AP_tree_nlen*)leaf, isits); 
    503 } 
    504  
    505 static long count_hash_elements(const char *, long val, void *cd_isits) { 
     474    InsertData *isits  = (InsertData*)cd_isits; 
     475    long        result = (long)insert_species_in_tree(key, (AP_tree_nlen*)leaf, isits); 
     476    isits->inc(); 
     477    return result; 
     478} 
     479 
     480static long count_hash_elements(const char *, long val, void *cd_count) { 
    506481    if (val) { 
    507         InsertData *isits = (InsertData*)cd_isits; 
    508         isits->maxspecies++; 
     482        long *count = (long*)cd_count; 
     483        (*count)++; 
    509484    } 
    510485    return val; 
     
    529504        } 
    530505    } 
    531  
    532     aw_openstatus("Search selected species"); 
    533506 
    534507    GB_HASH *hash = 0; 
     
    562535        NT_remove_species_in_tree_from_hash(rootNode(), hash); 
    563536 
    564         InsertData isits(quick); 
    565         GBS_hash_do_loop(hash, count_hash_elements, &isits); 
    566         aw_openstatus(GBS_global_string("Adding %li species", isits.maxspecies)); 
     537        long       max_species = 0; 
     538        GBS_hash_do_loop(hash, count_hash_elements, &max_species); 
     539        InsertData isits(quick, max_species); 
    567540 
    568541        if (test) { 
     
    570543        } 
    571544        else { 
    572             aw_status("reading database"); 
    573545            GB_begin_transaction(GLOBAL_gb_main); 
    574546            GBS_hash_do_loop(hash, transform_gbd_to_leaf, NULL); 
     
    577549        } 
    578550        if (!quick) { 
    579             aw_status("final optimization"); 
    580             rootEdge()->nni_rek(false, isits.abort_flag, -1, false, AP_BL_NNI_ONLY, NULL); 
     551            rootEdge()->nni_rek(-1, false, AP_BL_NNI_ONLY, NULL); 
    581552        } 
    582553 
    583554        if (rootNode()) { 
    584             aw_status("Calculating Branch lengths"); 
    585             rootEdge()->nni_rek(false, isits.abort_flag, -1, false, AP_BL_BL_ONLY, NULL); 
     555            rootEdge()->calc_branchlengths(); 
    586556 
    587557            ASSERT_VALID_TREE(rootNode()); 
     
    600570            error = "Tree lost (no leafs left)"; 
    601571        } 
    602  
    603         aw_closestatus(); 
    604572    } 
    605573 
     
    792760    int      no_data                  = 0; // no data in alignment 
    793761 
    794     aw_openstatus("Adding partial sequences"); 
     762    arb_progress("Adding partial sequences"); 
    795763 
    796764    { 
     
    855823            list<PartialSequence>::iterator e = partial.end(); 
    856824 
     825            arb_progress part_insert_progress(partial.size()); 
     826 
    857827#if defined(DEBUG) 
    858828            // show results : 
     
    950920                    delete part_leaf; 
    951921                } 
     922 
     923                part_insert_progress.inc_and_check_user_abort(error); 
    952924            } 
    953925        } 
    954926    } 
    955  
    956     aw_closestatus(); 
    957927 
    958928    if (full_marked_sequences) { 
     
    10311001 
    10321002static void NT_branch_lengths(AW_window *, AWT_canvas *ntw) { 
    1033     aw_openstatus("Calculating Branch Lengths"); 
    1034     int abort_flag = false; 
    1035     rootEdge()->nni_rek(false, abort_flag, -1, false, AP_BL_BL_ONLY, NULL); 
    1036  
    1037     aw_closestatus(); 
     1003    arb_progress progress("Calculating Branch Lengths"); 
     1004    rootEdge()->calc_branchlengths(); 
    10381005    AWT_TREE(ntw)->resort_tree(0); 
    1039  
    10401006    pars_saveNrefresh_changed_tree(ntw); 
    10411007} 
    10421008 
    10431009static void NT_bootstrap(AW_window *, AWT_canvas *ntw, AW_CL limit_only) { 
    1044     aw_openstatus("Calculating Bootstrap Limit"); 
    1045     int abort_flag = false; 
    1046     rootEdge()->nni_rek(false, abort_flag, -1, false, 
    1047                         AP_BL_MODE((limit_only ? AP_BL_BOOTSTRAP_LIMIT : AP_BL_BOOTSTRAP_ESTIMATE)|AP_BL_BL_ONLY), NULL); 
    1048     aw_closestatus(); 
    1049  
     1010    arb_progress progress("Calculating Bootstrap Limit"); 
     1011    AP_BL_MODE mode       = AP_BL_MODE((limit_only ? AP_BL_BOOTSTRAP_LIMIT : AP_BL_BOOTSTRAP_ESTIMATE)|AP_BL_BL_ONLY); 
     1012    rootEdge()->nni_rek(-1, false, mode, NULL); 
    10501013    AWT_TREE(ntw)->resort_tree(0); 
    1051  
    10521014    AWT_TREE(ntw)->tree_root_display = AWT_TREE(ntw)->get_root_node(); 
    10531015    pars_saveNrefresh_changed_tree(ntw); 
    10541016} 
    10551017 
    1056 static void NT_optimize(AW_window *, AWT_canvas *ntw) 
    1057 { 
    1058     aw_openstatus("Optimize Tree"); 
    1059  
    1060     PARS_optimizer_cb(rootNode()); 
     1018static void NT_optimize(AW_window *, AWT_canvas *ntw) { 
     1019    arb_progress progress("Optimizing Tree"); 
     1020    PARS_optimizer_cb(rootNode(), progress); 
    10611021    ASSERT_VALID_TREE(rootNode()); 
    1062  
    1063     aw_openstatus("Calculating Branch Lengths"); 
    1064     int abort_flag = false; 
    1065     rootEdge()->nni_rek(false, abort_flag, -1, false, AP_BL_BL_ONLY, NULL); 
     1022    rootEdge()->calc_branchlengths(); 
    10661023    AWT_TREE(ntw)->resort_tree(0); 
    10671024    rootNode()->compute_tree(GLOBAL_gb_main); 
    1068     aw_closestatus(); 
    10691025    pars_saveNrefresh_changed_tree(ntw); 
    10701026} 
    10711027 
    1072 static void NT_recursiveNNI(AW_window *, AWT_canvas *ntw) 
    1073 { 
    1074     aw_openstatus("Recursive NNI"); 
    1075     int abort_flag = false; 
    1076  
    1077     AP_FLOAT thisPars = rootNode()->costs(); 
    1078     AP_FLOAT lastPars = -1.0; 
    1079  
    1080     aw_status(GBS_global_string("Old parsimony: %f", thisPars)); 
    1081     while (thisPars!=lastPars && !abort_flag) { 
    1082         lastPars    = thisPars; 
    1083         thisPars    = rootEdge()->nni_rek(false, abort_flag, -1, true, AP_BL_NNI_ONLY, NULL); 
    1084         abort_flag |= aw_status(GBS_global_string("New Parsimony: %f", thisPars)); 
    1085     } 
    1086  
    1087     aw_status("Calculating Branch Lengths"); 
    1088     abort_flag = false; 
    1089     rootEdge()->nni_rek(false, abort_flag, -1, false, AP_BL_BL_ONLY, NULL); 
    1090  
     1028static void NT_recursiveNNI(AW_window *, AWT_canvas *ntw) { 
     1029    arb_progress progress("Recursive NNI"); 
     1030    AP_FLOAT orgPars = rootNode()->costs(); 
     1031    AP_FLOAT prevPars = orgPars; 
     1032    progress.subtitle(GBS_global_string("Old parsimony: %.1f", orgPars)); 
     1033    while (!progress.aborted()) { 
     1034        AP_FLOAT currPars = rootEdge()->nni_rek(-1, true, AP_BL_NNI_ONLY, NULL); 
     1035        if (currPars == prevPars) break; // no improvement -> abort 
     1036        progress.subtitle(GBS_global_string("New parsimony: %.1f (gain: %.1f)", currPars, orgPars-currPars)); 
     1037        prevPars = currPars; 
     1038    } 
     1039    rootEdge()->calc_branchlengths(); 
    10911040    AWT_TREE(ntw)->resort_tree(0); 
    10921041    rootNode()->compute_tree(GLOBAL_gb_main); 
    1093     aw_closestatus(); 
    10941042    pars_saveNrefresh_changed_tree(ntw); 
    10951043} 
     
    13161264    { 
    13171265        GB_ERROR error = 0; 
    1318  
    1319         aw_openstatus("load tree"); 
     1266        arb_progress progress("loading tree"); 
    13201267        NT_reload_tree_event(awr, ntw);             // load first tree 
    13211268        if (!GLOBAL_PARS->tree->get_root_node()) { 
     
    13371284            error = GB_end_transaction(ntw->gb_main, error); 
    13381285            if (!error) { 
    1339                 aw_status("Calculating inner nodes"); 
     1286                progress.subtitle("Calculating inner nodes"); 
    13401287                GLOBAL_PARS->get_root_node()->costs(); 
    13411288            } 
    13421289        } 
    1343         aw_closestatus(); 
    13441290        if (error) aw_popup_exit(error); 
    13451291    } 
  • branches/refactor/PARSIMONY/ap_tree_nlen.hxx

    r7096 r7097  
    107107    void parsimony_rek(char *mutPerSite = NULL); 
    108108 
    109     AP_FLOAT nn_interchange_rek(bool        openclosestatus, 
    110                                 int        &abort, 
    111                                 int         deep,   // -1 means: do whole subtree 
     109    AP_FLOAT nn_interchange_rek(int         deep,   // -1 means: do whole subtree 
    112110                                AP_BL_MODE  mode, 
    113111                                bool        skip_hidden); 
     
    240238    // tree optimization: 
    241239 
    242     AP_FLOAT nni_rek(bool          openclosestatus, 
    243                      int&          Abort, 
    244                      int           deep, 
    245                      bool          skip_hidden, 
    246                      AP_BL_MODE    mode, 
    247                      AP_tree_nlen *skipNode); 
     240    AP_FLOAT nni_rek(int deep, bool skip_hidden, AP_BL_MODE mode, AP_tree_nlen *skipNode); 
     241 
     242    AP_FLOAT calc_branchlengths() { return nni_rek(-1, false, AP_BL_BL_ONLY, NULL); } 
    248243 
    249244    AP_FLOAT nni_mutPerSite(AP_FLOAT pars_one, AP_BL_MODE mode, MutationsPerSite *mps); 
  • branches/refactor/PARSIMONY/pars_dtree.hxx

    r6428 r7097  
    1616#endif 
    1717 
     18class arb_progress; 
    1819 
    1920class AWT_graphic_parsimony : public AWT_graphic_tree { 
     
    3536 
    3637void PARS_tree_init(AWT_graphic_tree *agt); 
    37 void PARS_optimizer_cb(AP_tree *tree); 
     38void PARS_optimizer_cb(AP_tree *tree, arb_progress& progress); 
    3839 
    3940#else 
  • branches/refactor/PHYLO/Makefile

    r7089 r7097  
    4141PH_data.o: $(ARBHOME)/INCLUDE/arb_error.h 
    4242PH_data.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     43PH_data.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    4344PH_data.o: $(ARBHOME)/INCLUDE/arb_string.h 
    4445PH_data.o: $(ARBHOME)/INCLUDE/arbdb.h 
     
    5152PH_data.o: $(ARBHOME)/INCLUDE/aw_keysym.hxx 
    5253PH_data.o: $(ARBHOME)/INCLUDE/aw_root.hxx 
    53 PH_data.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    5454PH_data.o: $(ARBHOME)/INCLUDE/aw_window.hxx 
    5555PH_data.o: $(ARBHOME)/INCLUDE/cb.h 
     
    9696PH_filt.o: $(ARBHOME)/INCLUDE/arb_error.h 
    9797PH_filt.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     98PH_filt.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    9899PH_filt.o: $(ARBHOME)/INCLUDE/arb_string.h 
    99100PH_filt.o: $(ARBHOME)/INCLUDE/arbdb.h 
     
    106107PH_filt.o: $(ARBHOME)/INCLUDE/aw_keysym.hxx 
    107108PH_filt.o: $(ARBHOME)/INCLUDE/aw_root.hxx 
    108 PH_filt.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    109109PH_filt.o: $(ARBHOME)/INCLUDE/aw_window.hxx 
    110110PH_filt.o: $(ARBHOME)/INCLUDE/cb.h 
     
    138138PH_main.o: $(ARBHOME)/INCLUDE/aw_preset.hxx 
    139139PH_main.o: $(ARBHOME)/INCLUDE/aw_root.hxx 
    140 PH_main.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    141140PH_main.o: $(ARBHOME)/INCLUDE/aw_window.hxx 
    142141PH_main.o: $(ARBHOME)/INCLUDE/awt.hxx 
  • branches/refactor/PHYLO/PH_data.cxx

    r6858 r7097  
    1313#include <arbdbt.h> 
    1414#include <aw_awar.hxx> 
    15 #include <aw_status.hxx> 
     15#include <arb_progress.h> 
    1616#include <aw_root.hxx> 
    1717 
     
    147147    bool        compare[256]; 
    148148    AP_FLOAT    number_of_comparisons; 
    149     double      gauge; 
    150149    bool        bases_used = true;                      // rna oder dna sequence : nur zum testen und Entwicklung 
    151150 
    152151    if (!PHDATA::ROOT) return "nothing loaded yet"; 
     152 
     153    arb_progress progress("Calculating matrix", (nentries*(nentries+1))/2); 
    153154 
    154155    aw_root = PH_used_windows::windowList->phylo_main_window->get_root(); 
     
    251252 
    252253    // counting routine 
    253     aw_openstatus("Calculating Matrix"); 
    254     aw_status("Calculate the matrix"); 
    255254    sequence_bufferi = 0; 
    256255    sequence_bufferj = 0; 
    257256    GB_transaction dummy(PHDATA::ROOT->gb_main); 
    258257 
     258    GB_ERROR error = 0; 
    259259    for (i = 0; i < long(nentries); i++) { 
    260         gauge = (double) i / (double) nentries; 
    261         if (aw_status(gauge * gauge)) return 0; 
    262260        delete sequence_bufferi; 
    263261        sequence_bufferi = GB_read_string(hash_elements[i]->gb_species_data_ptr); 
     
    280278                matrix->set(i, j, (matrix->get(i, j) / number_of_comparisons)); 
    281279            } 
     280            progress.inc_and_check_user_abort(error); 
    282281        } 
    283282    } 
    284283    delete sequence_bufferi; 
    285     delete          sequence_bufferj; 
    286     aw_closestatus(); 
    287  
    288     return 0; 
    289 } 
     284    delete sequence_bufferj; 
     285 
     286    if (error) { 
     287        delete matrix; 
     288        matrix = NULL; 
     289    } 
     290 
     291    return error; 
     292} 
  • branches/refactor/PHYLO/PH_display.cxx

    r6861 r7097  
    212212 
    213213    if (!device) return; 
     214    if (!markerline) return; 
     215     
    214216    GB_transaction dummy(PHDATA::ROOT->gb_main); 
    215217    switch (display_what) // be careful: text origin is lower left 
  • branches/refactor/PHYLO/PH_filt.cxx

    r6858 r7097  
    1313#include <arbdbt.h> 
    1414#include <aw_awar.hxx> 
    15 #include <aw_status.hxx> 
     15#include <arb_progress.h> 
    1616#include <aw_root.hxx> 
    1717#include <cctype> 
     
    9595    AW_root       *aw_root; 
    9696    float         *mline = 0; 
    97     double         gauge; 
    9897 
    9998    if (!PHDATA::ROOT) return 0;                    // nothing loaded yet 
    10099 
     100    arb_progress filt_progress("Calculating filter"); 
     101     
    101102    GB_transaction dummy(PHDATA::ROOT->gb_main); 
    102     bool isNUC = true;    // rna oder dna sequence : nur zum testen und Entwicklung 
     103    bool           isNUC = true; // rna oder dna sequence : nur zum testen und Entwicklung 
    103104    if (GBT_is_alignment_protein(PHDATA::ROOT->gb_main, PHDATA::ROOT->use)) { 
    104105        isNUC = false; 
     
    299300    } 
    300301 
    301     aw_openstatus("Calculating Filter"); 
    302     aw_status("Counting"); 
    303     // counting routine 
    304     for (i=0; i<long(PHDATA::ROOT->nentries); i++) { 
    305         gauge = (double)i/(double)PHDATA::ROOT->nentries; 
    306         if (aw_status(gauge*gauge)) return 0; 
    307         sequence_buffer = (unsigned char*)GB_read_char_pntr(PHDATA::ROOT->hash_elements[i]->gb_species_data_ptr); 
    308         long send = stopcol; 
    309         long slen = GB_read_string_count(PHDATA::ROOT->hash_elements[i]->gb_species_data_ptr); 
    310         if (slen< send) send = slen; 
    311         for (j=startcol; j<send; j++) { 
    312             if (mask[sequence_buffer[j]]) { 
    313                 chars_counted[j-startcol][reference_table[sequence_buffer[j]]]++; 
    314             } 
    315             else { 
    316                 chars_counted[j-startcol][num_all_chars+1]++; 
    317             } 
     302    GB_ERROR error = NULL; 
     303    { 
     304        arb_progress progress("Counting", PHDATA::ROOT->nentries); 
     305        // counting routine 
     306        for (i=0; i<long(PHDATA::ROOT->nentries) && !error; i++) { 
     307            sequence_buffer = (unsigned char*)GB_read_char_pntr(PHDATA::ROOT->hash_elements[i]->gb_species_data_ptr); 
     308            long send = stopcol; 
     309            long slen = GB_read_string_count(PHDATA::ROOT->hash_elements[i]->gb_species_data_ptr); 
     310            if (slen< send) send = slen; 
     311            for (j=startcol; j<send; j++) { 
     312                if (mask[sequence_buffer[j]]) { 
     313                    chars_counted[j-startcol][reference_table[sequence_buffer[j]]]++; 
     314                } 
     315                else { 
     316                    chars_counted[j-startcol][num_all_chars+1]++; 
     317                } 
     318            } 
     319            progress.inc_and_check_user_abort(error); 
    318320        } 
    319321    } 
    320  
    321     // calculate similarity 
    322     aw_status("Calculate similarity"); 
    323     for (i=0; i<len; i++) { 
    324         if (aw_status(i/(double)len)) return 0; 
    325         if (chars_counted[i][num_all_chars]==0) // else: forget whole column 
    326         { 
    327             max=0; max_char=' '; 
    328             for (j=0; get_maximum_from[j]!='\0'; j++) { 
    329                 if (max<chars_counted[i][reference_table[(unsigned char)get_maximum_from[j]]]) { 
    330                     max_char = get_maximum_from[j]; 
    331                     max      = chars_counted[i][reference_table[(unsigned char)max_char]]; 
     322    if (!error) { 
     323        // calculate similarity 
     324        arb_progress progress("Calculate similarity", len); 
     325        for (i=0; i<len && !error; i++) { 
     326            if (chars_counted[i][num_all_chars]==0) // else: forget whole column 
     327            { 
     328                max=0; max_char=' '; 
     329                for (j=0; get_maximum_from[j]!='\0'; j++) { 
     330                    if (max<chars_counted[i][reference_table[(unsigned char)get_maximum_from[j]]]) { 
     331                        max_char = get_maximum_from[j]; 
     332                        max      = chars_counted[i][reference_table[(unsigned char)max_char]]; 
     333                    } 
    332334                } 
    333             } 
    334             if ((max!=0) && !strchr(delete_when_max, max_char)) { 
    335                 // delete SKIP_COLUMN_IF_MAX classes for counting 
    336                 for (j=0; delete_when_max[j]!='\0'; j++) { 
    337                     chars_counted[i][num_all_chars+1] += chars_counted[i][reference_table[(unsigned char)delete_when_max[j]]]; 
    338                     chars_counted[i][reference_table[(unsigned char)delete_when_max[j]]]=0; 
     335                if ((max!=0) && !strchr(delete_when_max, max_char)) { 
     336                    // delete SKIP_COLUMN_IF_MAX classes for counting 
     337                    for (j=0; delete_when_max[j]!='\0'; j++) { 
     338                        chars_counted[i][num_all_chars+1] += chars_counted[i][reference_table[(unsigned char)delete_when_max[j]]]; 
     339                        chars_counted[i][reference_table[(unsigned char)delete_when_max[j]]]=0; 
     340                    } 
     341                    mline[i+startcol] = (max/ 
     342                                         ((float) PHDATA::ROOT->nentries - 
     343                                          (float) chars_counted[i][num_all_chars+1]))*100.0; 
     344                    // (maximum in column / number of counted positions) * 100 
    339345                } 
    340                 mline[i+startcol] = (max/ 
    341                                      ((float) PHDATA::ROOT->nentries - 
    342                                       (float) chars_counted[i][num_all_chars+1]))*100.0; 
    343                 // (maximum in column / number of counted positions) * 100 
    344             } 
     346            } 
     347            progress.inc_and_check_user_abort(error); 
    345348        } 
    346349    } 
     
    350353    } 
    351354    free(chars_counted); 
    352     aw_closestatus(); 
    353  
    354     char *filt=(char *)calloc((int) PHDATA::ROOT->get_seq_len()+1, sizeof(char)); 
    355     for (i=0; i<PHDATA::ROOT->get_seq_len(); i++) 
    356         filt[i]=((options_vector[OPT_MIN_HOM]<=mline[i])&&(options_vector[OPT_MAX_HOM]>=mline[i])) ? '1' : '0'; 
    357     filt[i]='\0'; 
    358     aw_root->awar("phyl/filter/filter")->write_string(filt); 
    359     free(filt); 
    360  
    361     return mline; 
     355 
     356    if (!error) { 
     357        char *filt=(char *)calloc((int) PHDATA::ROOT->get_seq_len()+1, sizeof(char)); 
     358        for (i=0; i<PHDATA::ROOT->get_seq_len(); i++) 
     359            filt[i]=((options_vector[OPT_MIN_HOM]<=mline[i])&&(options_vector[OPT_MAX_HOM]>=mline[i])) ? '1' : '0'; 
     360        filt[i]='\0'; 
     361        aw_root->awar("phyl/filter/filter")->write_string(filt); 
     362        free(filt); 
     363 
     364        return mline; 
     365    } 
     366    else { 
     367        delete mline; 
     368        return 0; 
     369    } 
    362370} 
    363371 
  • branches/refactor/PHYLO/PH_main.cxx

    r6861 r7097  
    1818#include <aw_msg.hxx> 
    1919#include <awt.hxx> 
    20 #include <aw_status.hxx> 
    2120#include <aw_root.hxx> 
    2221#include <arbdbt.h> 
  • branches/refactor/PRIMER_DESIGN/Makefile

    r7089 r7097  
    5858PRD_Design.o: $(ARBHOME)/INCLUDE/arb_error.h 
    5959PRD_Design.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     60PRD_Design.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    6061PRD_Design.o: $(ARBHOME)/INCLUDE/arb_string.h 
    6162PRD_Design.o: $(ARBHOME)/INCLUDE/arbdb.h 
     
    128129primer_design.o: $(ARBHOME)/INCLUDE/arb_error.h 
    129130primer_design.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     131primer_design.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    130132primer_design.o: $(ARBHOME)/INCLUDE/arb_string.h 
    131133primer_design.o: $(ARBHOME)/INCLUDE/arbdb.h 
     
    140142primer_design.o: $(ARBHOME)/INCLUDE/aw_msg.hxx 
    141143primer_design.o: $(ARBHOME)/INCLUDE/aw_root.hxx 
    142 primer_design.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    143144primer_design.o: $(ARBHOME)/INCLUDE/aw_window.hxx 
    144145primer_design.o: $(ARBHOME)/INCLUDE/awt_config_manager.hxx 
  • branches/refactor/PRIMER_DESIGN/PRD_Design.cxx

    r6385 r7097  
    1313#include "PRD_SequenceIterator.hxx" 
    1414#include "PRD_SearchFIFO.hxx" 
     15#include <arb_progress.h> 
    1516 
    1617#include <iostream> 
     
    4041    list2     = 0; 
    4142    pairs     = 0; 
    42  
    43     show_status_txt    = 0; 
    44     show_status_double = 0; 
    4543 
    4644    setPositionalParameters (pos1_, pos2_, length_, distance_); 
     
    179177#endif // DEBUG 
    180178 
    181     show_status("searching possible primers"); 
    182179    buildPrimerTrees(); 
    183180    if (error) return; 
    184181    if (print_stages_ & PRINT_RAW_TREES) printPrimerTrees(); 
    185182 
    186     show_status("match possible primers vs. sequence"); 
    187183    matchSequenceAgainstPrimerTrees(); 
    188184    if (error) return; 
    189185    if (print_stages_ & PRINT_MATCHED_TREES) printPrimerTrees(); 
    190186 
    191     show_status("evaluating primer pairs"); show_status(0.0); 
     187    arb_progress::show_comment("evaluating primer pairs"); 
    192188    convertTreesToLists(); 
    193189    if (error) return; 
     
    276272void PrimerDesign::buildPrimerTrees () 
    277273{ 
     274    arb_progress progress("searching possible primers", 
     275                          primer1.max()+primer2.max()-2*primer_length.min()); 
     276 
    278277#if defined(DEBUG) 
    279278    primer1.print("buildPrimerTrees : pos1\t\t", "\n"); 
     
    314313    // build first tree 
    315314    // 
    316     long int primer1_length = primer1.max()-primer1.min()+1; 
    317     show_status("searching possible primers -- left"); 
    318  
    319315    for (PRD_Sequence_Pos start_pos = primer1.min(); 
    320316          (start_pos < primer1.max()-primer_length.min()) && (sequence[start_pos] != '\x00'); 
    321           start_pos++) { 
    322  
    323         show_status((double)(start_pos-primer1.min())/primer1_length/2); 
    324  
     317          start_pos++) 
     318    { 
    325319        // start iterator at new position 
    326320        sequence_iterator->restart(start_pos, primer1.max(), primer_length.max(), SequenceIterator::FORWARD); 
     
    346340 
    347341        offset++; 
     342        progress.inc(); 
    348343    } 
    349344 
     
    355350    printf ("           clearing left tree\n"); 
    356351#endif 
    357     show_status("clearing left primertree"); 
    358352    clearTree(root1, 1, 0); 
    359353#if defined(DEBUG) 
     
    377371    // build second tree 
    378372    // 
    379     long int primer2_length = primer2.max()-primer2.min()+1; 
    380     show_status("searching possible primers -- right"); 
    381  
    382373    for (PRD_Sequence_Pos start_pos = primer2.min(); 
    383374          (start_pos < primer2.max()-primer_length.min()) && (sequence[start_pos] != '\x00'); 
    384           start_pos++) { 
    385  
    386         show_status((double)(start_pos-primer2.min())/primer2_length/2+0.5); 
    387  
     375          start_pos++) 
     376    { 
    388377        // start iterator at new position 
    389378        sequence_iterator->restart(start_pos, primer2.max(), primer_length.max(), SequenceIterator::FORWARD); 
     
    409398 
    410399        offset++; 
    411     } 
     400        progress.inc(); 
     401    } 
     402    progress.done(); 
    412403 
    413404    if (!treeContainsPrimer(root2)) { 
     
    424415    printf ("           clearing right tree\n"); 
    425416#endif 
    426     show_status("clearing right primertree"); 
    427417    clearTree(root2, 0, 1); 
    428418#if defined(DEBUG) 
     
    496486#endif 
    497487 
    498     show_status("match possible primers vs. seq. (forward)"); 
    499     base    = sequence_iterator->nextBase(); 
     488    arb_progress progress(seqLength); 
     489 
     490    progress.subtitle("match possible primers vs. seq. (forward)"); 
     491 
     492    base = sequence_iterator->nextBase(); 
    500493    while (base != SequenceIterator::EOS) { 
    501494        pos = sequence_iterator->pos; 
    502  
    503         if ((pos&0x7f) == 0) { 
    504             show_status((double)pos/seqLength/2); 
    505         } 
    506495 
    507496        // tree/fifo 1 
     
    531520        // get next base in sequence 
    532521        base = sequence_iterator->nextBase(); 
     522        progress.inc(); 
    533523    } 
    534524 
     
    537527    fifo2->flush(); 
    538528 
    539     show_status("match possible primers vs. seq. (backward)"); 
     529    progress.subtitle("match possible primers vs. seq. (backward)"); 
    540530    base = INVERT.BASE[sequence_iterator->nextBase()]; 
    541531    while (base != SequenceIterator::EOS) { 
    542532        pos = sequence_iterator->pos; 
    543533 
    544         if ((pos&0x7f) == 0) { 
    545             show_status((double)(seqLength-pos)/seqLength/2+0.5); 
    546         } 
    547  
    548534        // tree/fifo 1 
    549535        if (primer1.includes(pos)) {     // flush fifo1 if in range of Primer 1 
     
    572558        // get next base in sequence 
    573559        base = INVERT.BASE[sequence_iterator->nextBase()]; 
    574     } 
     560        progress.inc(); 
     561    } 
     562    progress.done(); 
    575563 
    576564    delete fifo1; 
     
    924912#endif 
    925913 
    926     show_status("evaluating primer pairs"); 
    927914    int list1_elems = 0; 
    928     int elems       = 0; 
    929915    while (one) { 
    930916        list1_elems++; 
     
    933919    one = list1; 
    934920 
     921    arb_progress progress("evaluating primer pairs", list1_elems); 
    935922    // outer loop <= > run through list1 
    936923    while (one != NULL) 
    937924    { 
    938         show_status(GBS_global_string("evaluating primer pairs (%6.3f)", pairs[0].rating)); 
    939         show_status((double)elems/list1_elems); 
    940         elems++; 
    941  
    942925        // inner loop <= > run through list2 
    943926        two            = list2; 
     
    961944        // next in outer loop 
    962945        one = one->next; 
     946        progress.inc(); 
    963947    } 
    964948 
  • branches/refactor/PRIMER_DESIGN/PRD_Design.hxx

    r6381 r7097  
    155155    double           evaluatePair       (Item *one_, Item *two_); 
    156156    void             insertPair         (double rating_, Item *one_, Item *two_); 
    157  
    158     int (*show_status_txt)(const char *msg); 
    159     int (*show_status_double)(double gauge); 
    160  
    161     inline int show_status(const char *msg) { return show_status_txt ? show_status_txt(msg) : 0; } 
    162     inline int show_status(double gauge) { return show_status_double ? show_status_double(gauge) : 0; } 
    163  
    164 public: 
    165     void set_status_callbacks(int (*show_txt)(const char*), int (*show_double)(double)) { 
    166         show_status_txt    = show_txt; 
    167         show_status_double = show_double; 
    168     } 
    169157}; 
    170158 
  • branches/refactor/PRIMER_DESIGN/primer_design.cxx

    r6858 r7097  
    2222#include <aw_window.hxx> 
    2323#include <aw_msg.hxx> 
    24 #include <aw_status.hxx> 
     24#include <arb_progress.h> 
    2525#include <aw_root.hxx> 
    2626 
     
    8989} 
    9090 
    91  
    92 inline int prd_aw_status(const char *s) { return aw_status(s); } 
    93 inline int prd_aw_status(double d) { return aw_status(d); } 
    94  
    95  
    9691static void primer_design_event_go(AW_window *aww, AW_CL cl_gb_main) { 
    9792    AW_root  *root     = aww->get_root(); 
     
    130125 
    131126    if (!error) { 
    132         aw_openstatus("Search PCR primer pairs"); 
     127        arb_progress progress("Searching PCR primer pairs"); 
    133128        PrimerDesign *PD = 
    134129            new PrimerDesign(sequence, length, 
     
    146141                             ); 
    147142 
    148         PD->set_status_callbacks(prd_aw_status, prd_aw_status); 
    149  
    150143        try { 
    151144#ifdef DEBUG 
     
    208201    if (sequence) free(sequence); 
    209202    if (error) aw_message(error); 
    210  
    211     aw_closestatus(); 
    212203} 
    213204 
  • branches/refactor/PROBE_DESIGN/Makefile

    r7089 r7097  
    4141probe_design.o: $(ARBHOME)/INCLUDE/arb_error.h 
    4242probe_design.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     43probe_design.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    4344probe_design.o: $(ARBHOME)/INCLUDE/arb_string.h 
    4445probe_design.o: $(ARBHOME)/INCLUDE/ARB_Tree.hxx 
     
    6061probe_design.o: $(ARBHOME)/INCLUDE/aw_root.hxx 
    6162probe_design.o: $(ARBHOME)/INCLUDE/aw_select.hxx 
    62 probe_design.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    6363probe_design.o: $(ARBHOME)/INCLUDE/aw_window.hxx 
    6464probe_design.o: $(ARBHOME)/INCLUDE/awt_canvas.hxx 
  • branches/refactor/PROBE_DESIGN/probe_design.cxx

    r6920 r7097  
    2929#include <aw_select.hxx> 
    3030#include <aw_msg.hxx> 
    31 #include <aw_status.hxx> 
     31#include <arb_progress.h> 
    3232#include <aw_root.hxx> 
    3333#include <adGene.h> 
     
    391391    GBDATA      *gb_main = (GBDATA*)cl_gb_main; 
    392392 
    393     aw_openstatus("Probe Design"); 
    394     aw_status("Search a free running server"); 
     393    arb_progress progress("Probe design"); 
     394    progress.subtitle("Connecting PT-server"); 
    395395 
    396396    { 
     
    423423    if (error) { 
    424424        aw_message(error); 
    425         aw_closestatus(); 
    426425        return; 
    427426    } 
    428427 
    429     aw_status("Start probe design (Cannot be stopped)"); 
     428    progress.subtitle("probe design running"); 
    430429 
    431430    aisc_create(pd_gl.link, PT_LOCS, pd_gl.locs, 
     
    447446    if (probe_design_send_data(root, pdc)) { 
    448447        aw_message ("Connection to PT_SERVER lost (1)"); 
    449         aw_closestatus(); 
    450448        return; 
    451449    } 
     
    463461                 NULL)) { 
    464462        aw_message ("Connection to PT_SERVER lost (1)"); 
    465         aw_closestatus(); 
    466463        return; 
    467464    } 
     
    528525                 NULL); 
    529526 
    530         aw_status("Read the results from the server"); 
     527        progress.subtitle("Reading results from server"); 
    531528        { 
    532529            char *locs_error = 0; 
     
    638635 
    639636    aisc_close(pd_gl.link); pd_gl.link = 0; 
    640     aw_closestatus(); 
    641637    return; 
    642638} 
     
    658654        if (!gb_main) { error = "Internal error (gb_main unknown)"; } 
    659655 
     656        SmartPtr<arb_progress> progress; 
     657         
    660658        if (!error) { 
    661659            const char *servername = PD_probe_pt_look_for_server(root, gb_main, error); 
     
    672670 
    673671                if (show_status) { 
    674                     aw_openstatus("Probe Match"); 
    675                     aw_status("Open Connection"); 
     672                    progress = new arb_progress("Probe match"); 
     673                    progress->subtitle("Connecting PT-server"); 
    676674                } 
    677675 
     
    682680 
    683681        if (!error) { 
    684             if (show_status) aw_status("Initialize Server"); 
    685682            if (init_local_com_struct()) error = "Cannot contact PT-server (2)"; 
    686683 
     
    694691 
    695692        if (!error) { 
    696             if (show_status) aw_status("Start Probe Match"); 
     693            if (show_status) progress->subtitle("Probe match running"); 
    697694 
    698695            if (aisc_nput(pd_gl.link, PT_LOCS, pd_gl.locs, 
     
    723720        long matches_truncated = 0; 
    724721        if (!error) { 
    725             if (show_status) aw_status("Read the Results"); 
     722            if (show_status) progress->subtitle("Reading results"); 
    726723 
    727724            T_PT_MATCHLIST  match_list; 
     
    760757 
    761758        if (!error) { 
    762             if (show_status) aw_status("Parse the Results"); 
    763  
    764759            char        toksep[2]  = { 1, 0 }; 
    765760            char       *strtok_ptr = 0; // stores strtok position 
     
    797792            GBDATA *gb_species_data = GB_search(gb_main, "species_data", GB_CREATE_CONTAINER); 
    798793            if (mark && !error) { 
    799                 if (show_status) aw_status(gene_flag ? "Unmarking all species and genes" : "Unmarking all species"); 
     794                if (show_status) progress->subtitle(gene_flag ? "Unmarking all species and genes" : "Unmarking all species"); 
    800795                for (GBDATA *gb_species = GBT_first_marked_species_rel_species_data(gb_species_data); 
    801796                     gb_species; 
     
    824819            } 
    825820            if (write_2_tmp && !error) { 
    826                 if (show_status) aw_status("Deleting old 'tmp' fields"); 
     821                if (show_status) progress->subtitle("Deleting old 'tmp' fields"); 
    827822                for (GBDATA *gb_species = GBT_first_species_rel_species_data(gb_species_data); 
    828823                     gb_species; 
     
    846841 
    847842            if (!error) { 
    848                 if (show_status) aw_status("Parsing results.."); 
     843                if (show_status) progress->subtitle("Parsing results"); 
    849844 
    850845                g_spd->probeSpecies.clear(); 
     
    1003998 
    1004999            aww->insert_default_selection(selection_id, last_line, ""); 
    1005  
    1006             if (show_status) aw_status("Formatting output"); 
    10071000            aww->update_selection_list(selection_id); 
    10081001        } 
    1009  
    1010         if (show_status) aw_closestatus(); 
    10111002 
    10121003        free(bs.data); 
     
    10291020 
    10301021    aww->init_list_entry_iterator(iselection_id); // init 
    1031     aw_openstatus("Matching all resolved strings"); 
    1032  
    1033     size_t string_count = iselection_id->size(); 
    1034     size_t local_count = 0; 
    1035  
     1022 
     1023    arb_progress progress("Matching all resolved strings", iselection_id->size()); 
     1024     
     1025    bool got_result = false; 
    10361026    for (;;) { 
    10371027        const char *entry = aww->get_list_entry_char_value(); 
    10381028        if (!entry) break; 
    1039  
    1040         double percent = local_count++/double(string_count); 
    1041         aw_status(GBS_global_string("Match string %zu of %zu", local_count, string_count)); 
    1042         aw_status(percent); 
    10431029 
    10441030        root->awar(AWAR_TARGET_STRING)->write_string(entry); // probe match 
     
    10511037        sprintf(buffer, "%5i %s", counter, entry); 
    10521038        aww->set_list_entry_displayed(buffer); 
     1039        got_result   = true; 
    10531040        delete buffer; 
    10541041 
    10551042        aww->iterate_list_entry(1); // iterate 
    1056     } 
    1057  
    1058     aw_closestatus(); 
    1059  
    1060     if (local_count) { 
     1043        progress.inc(); 
     1044         
     1045    } 
     1046 
     1047    if (got_result) { 
    10611048        aww->sort_selection_list(iselection_id, 1, 1); 
    10621049        aww->update_selection_list(iselection_id); 
     
    16271614static void pd_start_pt_server(AW_window *aww, AW_CL cl_gb_main) { 
    16281615    const char *server_tag = GBS_ptserver_tag(aww->get_root()->awar(AWAR_PROBE_ADMIN_PT_SERVER)->read_int()); 
    1629      
    1630     aw_openstatus("Start a server"); 
    1631     aw_status("Look for server or start one"); 
    1632      
     1616    arb_progress progress("Connecting PT-server"); 
    16331617    GB_ERROR error = arb_look_and_start_server(AISC_MAGIC_NUMBER, server_tag, (GBDATA*)cl_gb_main); 
    16341618    if (error) aw_message(error); 
    1635     aw_closestatus(); 
    16361619} 
    16371620 
     
    16521635        } 
    16531636 
    1654         aw_openstatus("Stopping PT-servers.."); 
    1655  
    1656         for (int i = min; i <= max;  i++) { 
     1637        arb_progress progress("Stopping PT-servers..", max-min+1); 
     1638        GB_ERROR     error = NULL; 
     1639 
     1640        for (int i = min; i <= max && !error;  i++) { 
    16571641            char *choice = GBS_ptserver_id_to_choice(i, 0); 
    16581642            if (!choice) { 
    1659                 aw_message(GB_await_error()); 
    1660                 break; 
    1661             } 
    1662  
    1663             aw_status(GBS_global_string("Trying to stop '%s'", choice)); 
    1664  
    1665             const char *server_tag = GBS_ptserver_tag(i); 
    1666             GB_ERROR    error      = arb_look_and_kill_server(AISC_MAGIC_NUMBER, server_tag); 
    1667  
    1668             if (error) aw_message(GBS_global_string("Could not stop '%s' (Reason: %s)", choice, error)); 
    1669             else aw_message(GBS_global_string("Stopped '%s'", choice)); 
    1670  
    1671             free(choice); 
    1672         } 
    1673         aw_closestatus(); 
     1643                error = GB_await_error(); 
     1644            } 
     1645            else { 
     1646                progress.subtitle(GBS_global_string("Trying to stop '%s'", choice)); 
     1647 
     1648                const char *server_tag = GBS_ptserver_tag(i); 
     1649                GB_ERROR    kill_error = arb_look_and_kill_server(AISC_MAGIC_NUMBER, server_tag); 
     1650 
     1651                if (kill_error) aw_message(GBS_global_string("Could not stop '%s' (Reason: %s)", choice, kill_error)); 
     1652                else aw_message(GBS_global_string("Stopped '%s'", choice)); 
     1653 
     1654                free(choice); 
     1655            } 
     1656            progress.inc_and_check_user_abort(error); 
     1657        } 
     1658        progress.done(); 
     1659        if (error) aw_message(error); 
    16741660    } 
    16751661} 
     
    17321718                    "Cancel,Do it")) 
    17331719    { 
    1734         aw_openstatus("Updating PT-server"); 
    1735         aw_status("Stopping PT-server"); 
     1720        arb_progress progress("Updating PT-server"); 
     1721        progress.subtitle("Stopping PT-server"); 
    17361722        arb_look_and_kill_server(AISC_MAGIC_NUMBER, server_tag); 
    17371723 
     
    17461732        } 
    17471733 
    1748         aw_status("Exporting the database"); 
     1734        progress.subtitle("Exporting the database"); 
    17491735        { 
    17501736            const char *mode = "bfm"; // save PT-server database with Fastload file 
     
    17561742                if (!error) { 
    17571743                    // convert database (genes -> species) 
    1758                     aw_status("Preparing DB for gene PT server"); 
     1744                    progress.subtitle("Preparing DB for gene PT server"); 
    17591745                    GBS_add_ptserver_logentry("Preparing DB for gene PT server"); 
    17601746                    char *command = GBS_global_string_copy("$ARBHOME/bin/arb_gene_probe %s %s", temp_server_name, file); 
     
    17851771 
    17861772        if (!error) { 
    1787             aw_status("Start PT-server (builds in background)"); 
     1773            progress.subtitle("Start PT-server (builds in background)"); 
    17881774            error = arb_start_server(server_tag, gb_main, 1); 
    17891775        } 
    1790         aw_closestatus(); 
    1791  
    17921776    } 
    17931777    if (error) aw_message(error); 
  • branches/refactor/SEQ_QUALITY/Makefile

    r7089 r7097  
    6161SQ_functions.o: $(ARBHOME)/INCLUDE/arb_error.h 
    6262SQ_functions.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     63SQ_functions.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    6364SQ_functions.o: $(ARBHOME)/INCLUDE/arb_string.h 
    6465SQ_functions.o: $(ARBHOME)/INCLUDE/arbdb.h 
     
    7071SQ_functions.o: $(ARBHOME)/INCLUDE/aw_keysym.hxx 
    7172SQ_functions.o: $(ARBHOME)/INCLUDE/aw_preset.hxx 
    72 SQ_functions.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    7373SQ_functions.o: $(ARBHOME)/INCLUDE/aw_window.hxx 
    7474SQ_functions.o: $(ARBHOME)/INCLUDE/awt.hxx 
     
    9393SQ_main.o: $(ARBHOME)/INCLUDE/arb_error.h 
    9494SQ_main.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     95SQ_main.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    9596SQ_main.o: $(ARBHOME)/INCLUDE/arb_string.h 
    9697SQ_main.o: $(ARBHOME)/INCLUDE/arbdb.h 
     
    105106SQ_main.o: $(ARBHOME)/INCLUDE/aw_msg.hxx 
    106107SQ_main.o: $(ARBHOME)/INCLUDE/aw_root.hxx 
    107 SQ_main.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    108108SQ_main.o: $(ARBHOME)/INCLUDE/aw_window.hxx 
    109109SQ_main.o: $(ARBHOME)/INCLUDE/awt.hxx 
  • branches/refactor/SEQ_QUALITY/SQ_functions.cxx

    r6858 r7097  
    1919 
    2020#include <aw_preset.hxx> 
    21 #include <aw_status.hxx> 
     21#include <arb_progress.h> 
    2222#include <awt.hxx> 
    2323#include <arbdbt.h> 
     
    2626 
    2727static SQ_GroupDataDictionary group_dict; 
    28 static int globalcounter = -1; 
    29 static int groupcounter = -1; 
    30 static int globalcounter_notree = 0; 
    31 static int pass1_counter_notree = 0; 
    32 static int pass2_counter_notree = 0; 
    3328 
    3429enum { 
     
    418413} 
    419414 
    420 GB_ERROR SQ_pass1(SQ_GroupData * globalData, GBDATA * gb_main, GBT_TREE * node, 
    421         AP_filter * filter) { 
     415GB_ERROR SQ_pass1(SQ_GroupData * globalData, GBDATA * gb_main, GBT_TREE * node, AP_filter * filter) { 
    422416    char *alignment_name; 
    423  
    424417    GBDATA *read_sequence = 0; 
    425418    GBDATA *gb_species; 
     
    443436        } 
    444437        else { 
    445             GBDATA *gb_quality = GB_search(gb_species, "quality", 
    446                     GB_CREATE_CONTAINER); 
     438            GBDATA *gb_quality = GB_search(gb_species, "quality", GB_CREATE_CONTAINER); 
    447439 
    448440            if (!gb_quality) { 
     
    452444            read_sequence = GB_entry(gb_ali, "data"); 
    453445 
    454             GBDATA *gb_quality_ali = GB_search(gb_quality, alignment_name, 
    455                     GB_CREATE_CONTAINER); 
     446            GBDATA *gb_quality_ali = GB_search(gb_quality, alignment_name, GB_CREATE_CONTAINER); 
    456447            if (!gb_quality_ali) 
    457448                error = GB_get_error(); 
     
    459450            /* real calculations start here */ 
    460451            if (read_sequence) { 
    461                 char *rawSequence = SQ_fetch_filtered_sequence(read_sequence, 
    462                         filter); 
     452                char *rawSequence = SQ_fetch_filtered_sequence(read_sequence, filter); 
    463453                int sequenceLength = filter->get_filtered_length(); 
    464454 
     
    466456                { 
    467457                    SQ_physical_layout ps_chan; 
    468                     ps_chan.SQ_calc_physical_layout(rawSequence, 
    469                             sequenceLength, gb_quality_ali); 
     458                    ps_chan.SQ_calc_physical_layout(rawSequence, sequenceLength, gb_quality_ali); 
    470459 
    471460                    /* calculate the average number of bases in group */ 
     
    480469                { 
    481470                    SQ_ambiguities ambi_chan; 
    482                     ambi_chan.SQ_count_ambiguities(rawSequence, sequenceLength, 
    483                             gb_quality_ali); 
     471                    ambi_chan.SQ_count_ambiguities(rawSequence, sequenceLength, gb_quality_ali); 
    484472                } 
    485473 
     
    487475                { 
    488476                    SQ_helix heli_chan(sequenceLength); 
    489                     heli_chan.SQ_calc_helix_layout(rawSequence, gb_main, 
    490                             alignment_name, gb_quality_ali, filter); 
     477                    heli_chan.SQ_calc_helix_layout(rawSequence, gb_main, alignment_name, gb_quality_ali, filter); 
    491478                } 
    492479 
     
    514501} 
    515502 
    516 GB_ERROR SQ_pass1_no_tree(SQ_GroupData * globalData, GBDATA * gb_main, 
    517         AP_filter * filter) { 
     503GB_ERROR SQ_pass1_no_tree(SQ_GroupData * globalData, GBDATA * gb_main, AP_filter * filter, arb_progress& progress) { 
    518504    char *alignment_name; 
    519505 
     
    531517 
    532518    getFirst = GBT_first_species; 
    533     getNext = GBT_next_species; 
     519    getNext  = GBT_next_species; 
    534520 
    535521    /* first pass operations */ 
    536     for (gb_species = getFirst(gb_main); gb_species && !error; gb_species 
    537             = getNext(gb_species)) { 
    538  
     522    for (gb_species = getFirst(gb_main); gb_species && !error; gb_species = getNext(gb_species)) { 
    539523        gb_name = GB_entry(gb_species, "name"); 
    540524 
     
    548532            } 
    549533            else { 
    550                 GBDATA *gb_quality = GB_search(gb_species, "quality", 
    551                         GB_CREATE_CONTAINER); 
     534                GBDATA *gb_quality = GB_search(gb_species, "quality", GB_CREATE_CONTAINER); 
    552535                if (!gb_quality) { 
    553536                    error = GB_get_error(); 
     
    556539                read_sequence = GB_entry(gb_ali, "data"); 
    557540 
    558                 GBDATA *gb_quality_ali = GB_search(gb_quality, alignment_name, 
    559                         GB_CREATE_CONTAINER); 
     541                GBDATA *gb_quality_ali = GB_search(gb_quality, alignment_name, GB_CREATE_CONTAINER); 
    560542                if (!gb_quality_ali) 
    561543                    error = GB_get_error(); 
     
    563545                /* real calculations start here */ 
    564546                if (read_sequence) { 
    565                     char *rawSequence = SQ_fetch_filtered_sequence( 
    566                             read_sequence, filter); 
     547                    char *rawSequence = SQ_fetch_filtered_sequence(read_sequence, filter); 
    567548                    int sequenceLength = filter->get_filtered_length(); 
    568549 
    569550                    /* calculate physical layout of sequence */ 
    570551                    SQ_physical_layout *ps_chan = new SQ_physical_layout(); 
    571                     ps_chan->SQ_calc_physical_layout(rawSequence, 
    572                             sequenceLength, gb_quality_ali); 
     552                    ps_chan->SQ_calc_physical_layout(rawSequence, sequenceLength, gb_quality_ali); 
    573553 
    574554                    /* calculate the average number of bases in group */ 
    575555                    globalData->SQ_count_sequences(); 
    576                     globalData->SQ_set_avg_bases(ps_chan-> 
    577                     SQ_get_number_of_bases()); 
    578                     globalData->SQ_set_avg_gc(ps_chan-> 
    579                     SQ_get_gc_proportion()); 
     556                    globalData->SQ_set_avg_bases(ps_chan->SQ_get_number_of_bases()); 
     557                    globalData->SQ_set_avg_gc(ps_chan->SQ_get_gc_proportion()); 
    580558                    delete ps_chan; 
    581559 
    582560                    /* get values for ambiguities */ 
    583561                    SQ_ambiguities *ambi_chan = new SQ_ambiguities(); 
    584                     ambi_chan->SQ_count_ambiguities(rawSequence, 
    585                             sequenceLength, gb_quality_ali); 
     562                    ambi_chan->SQ_count_ambiguities(rawSequence, sequenceLength, gb_quality_ali); 
    586563                    delete ambi_chan; 
    587564 
    588565                    /* calculate the number of strong, weak and no helixes */ 
    589566                    SQ_helix *heli_chan = new SQ_helix(sequenceLength); 
    590                     heli_chan->SQ_calc_helix_layout(rawSequence, gb_main, 
    591                             alignment_name, gb_quality_ali, filter); 
     567                    heli_chan->SQ_calc_helix_layout(rawSequence, gb_main, alignment_name, gb_quality_ali, filter); 
    592568                    delete heli_chan; 
    593569 
     
    599575                        globalData->SQ_add_sequence(rawSequence); 
    600576                    } 
    601                     pass1_counter_notree++; 
    602                     aw_status((double) pass1_counter_notree 
    603                             / (double) globalcounter_notree); 
    604  
    605577                    delete(rawSequence); 
    606578                } 
    607579            } 
    608580        } 
     581        progress.inc_and_check_user_abort(error); 
    609582    } 
    610583 
     
    670643                double gcp = 0; 
    671644 
    672                 const char *rawSequence = SQ_fetch_filtered_sequence( 
    673                         read_sequence, filter); 
     645                const char *rawSequence = SQ_fetch_filtered_sequence(read_sequence, filter); 
    674646 
    675647                /* 
     
    677649                 a single sequence in group from it 
    678650                 */ 
    679                 GBDATA *gb_result1 = GB_search(gb_quality_ali, 
    680                         "number_of_bases", GB_INT); 
     651                GBDATA *gb_result1 = GB_search(gb_quality_ali, "number_of_bases", GB_INT); 
    681652                bases = GB_read_int(gb_result1); 
    682653                avg_bases = globalData->SQ_get_avg_bases(); 
     
    688659                } 
    689660 
    690                 GBDATA *gb_result2 = GB_search(gb_quality_ali, 
    691                         "percent_base_deviation", GB_INT); 
     661                GBDATA *gb_result2 = GB_search(gb_quality_ali, "percent_base_deviation", GB_INT); 
    692662                seq_assert(gb_result2); 
    693663                GB_write_int(gb_result2, diff_percent); 
     
    697667                 a single sequence in group from it 
    698668                 */ 
    699                 GBDATA *gb_result6 = GB_search(gb_quality_ali, "GC_proportion", 
    700                         GB_FLOAT); 
     669                GBDATA *gb_result6 = GB_search(gb_quality_ali, "GC_proportion", GB_FLOAT); 
    701670                gcp = GB_read_float(gb_result6); 
    702671                avg_gc = globalData->SQ_get_avg_gc(); 
     
    708677                } 
    709678 
    710                 GBDATA *gb_result7 = GB_search(gb_quality_ali, 
    711                         "percent_GC_difference", GB_INT); 
     679                GBDATA *gb_result7 = GB_search(gb_quality_ali, "percent_GC_difference", GB_INT); 
    712680                seq_assert(gb_result7); 
    713681                GB_write_int(gb_result7, diff_percent); 
     
    718686                 evaluate sequence with group consensus 
    719687                 */ 
    720                 GBDATA *gb_con = GB_search(gb_quality_ali, 
    721                         "consensus_conformity", GB_CREATE_CONTAINER); 
     688                GBDATA *gb_con = GB_search(gb_quality_ali, "consensus_conformity", GB_CREATE_CONTAINER); 
    722689                if (!gb_con) 
    723690                    error = GB_get_error(); 
    724                 GBDATA *gb_dev = GB_search(gb_quality_ali, 
    725                         "consensus_deviation", GB_CREATE_CONTAINER); 
     691                GBDATA *gb_dev = GB_search(gb_quality_ali, "consensus_deviation", GB_CREATE_CONTAINER); 
    726692                if (!gb_dev) 
    727693                    error = GB_get_error(); 
     
    731697                while (backup->father) { 
    732698                    if (backup->name) { 
    733                         SQ_GroupDataDictionary::iterator GDI = 
    734                                 group_dict.find(backup->name); 
     699                        SQ_GroupDataDictionary::iterator GDI = group_dict.find(backup->name); 
    735700                        if (GDI != group_dict.end()) { 
    736701                            SQ_GroupDataPtr GD_ptr = GDI->second; 
    737702 
    738                             consensus_result cr = 
    739                                     GD_ptr->SQ_calc_consensus(rawSequence); 
     703                            consensus_result cr = GD_ptr->SQ_calc_consensus(rawSequence); 
    740704                            value1 = cr.conformity; 
    741705                            value2 = cr.deviation; 
    742706                            value3 = GD_ptr->SQ_get_nr_sequences(); 
    743707 
    744                             GBDATA *gb_node_entry = GB_search(gb_con, 
    745                                     "name", GB_STRING); 
     708                            GBDATA *gb_node_entry = GB_search(gb_con, "name", GB_STRING); 
    746709                            seq_assert(gb_node_entry); 
    747710                            GB_write_string(gb_node_entry, backup->name); 
    748711 
    749                             gb_node_entry = GB_search(gb_con, "value", 
    750                                     GB_FLOAT); seq_assert(gb_node_entry); 
     712                            gb_node_entry = GB_search(gb_con, "value", GB_FLOAT); seq_assert(gb_node_entry); 
    751713                            GB_write_float(gb_node_entry, value1); 
    752714 
    753                             gb_node_entry = GB_search(gb_con, 
    754                                     "num_species", GB_INT); seq_assert(gb_node_entry); 
     715                            gb_node_entry = GB_search(gb_con, "num_species", GB_INT); seq_assert(gb_node_entry); 
    755716                            GB_write_int(gb_node_entry, value3); 
    756717 
    757                             gb_node_entry = GB_search(gb_dev, "name", 
    758                                     GB_STRING); seq_assert(gb_node_entry); 
     718                            gb_node_entry = GB_search(gb_dev, "name", GB_STRING); seq_assert(gb_node_entry); 
    759719                            GB_write_string(gb_node_entry, backup->name); 
    760720 
    761                             gb_node_entry = GB_search(gb_dev, "value", 
    762                                     GB_FLOAT); seq_assert(gb_node_entry); 
     721                            gb_node_entry = GB_search(gb_dev, "value", GB_FLOAT); seq_assert(gb_node_entry); 
    763722                            GB_write_float(gb_node_entry, value2); 
    764723 
    765                             gb_node_entry = GB_search(gb_dev, 
    766                                     "num_species", GB_INT); seq_assert(gb_node_entry); 
     724                            gb_node_entry = GB_search(gb_dev, "num_species", GB_INT); seq_assert(gb_node_entry); 
    767725                            GB_write_int(gb_node_entry, value3); 
    768726 
     
    832790                    evaluation = sq_round(eval); 
    833791                } 
    834                 GBDATA *gb_result5 = GB_search(gb_quality_ali, 
    835                         "consensus_evaluated", GB_INT); 
     792                GBDATA *gb_result5 = GB_search(gb_quality_ali, "consensus_evaluated", GB_INT); 
    836793                seq_assert(gb_result5); 
    837794                GB_write_int(gb_result5, evaluation); 
     
    853810} 
    854811 
    855 GB_ERROR SQ_pass2_no_tree(const SQ_GroupData * globalData, GBDATA * gb_main, 
    856         AP_filter * filter) { 
     812GB_ERROR SQ_pass2_no_tree(const SQ_GroupData * globalData, GBDATA * gb_main, AP_filter * filter, arb_progress& progress) { 
    857813    char *alignment_name; 
    858814 
     
    867823    GB_push_transaction(gb_main); 
    868824    gb_species_data = GB_search(gb_main, "species_data", GB_CREATE_CONTAINER); 
    869     alignment_name = GBT_get_default_alignment(gb_main); seq_assert(alignment_name); 
    870     getFirst = GBT_first_species; 
    871     getNext = GBT_next_species; 
     825    alignment_name  = GBT_get_default_alignment(gb_main); seq_assert(alignment_name); 
     826    getFirst        = GBT_first_species; 
     827    getNext         = GBT_next_species; 
    872828 
    873829    /* second pass operations */ 
    874     for (gb_species = getFirst(gb_main); gb_species && !error; gb_species 
    875             = getNext(gb_species)) { 
     830    for (gb_species = getFirst(gb_main); gb_species && !error; gb_species = getNext(gb_species)) { 
    876831        gb_name = GB_entry(gb_species, "name"); 
    877832 
     
    884839            } 
    885840            else { 
    886                 GBDATA *gb_quality = GB_search(gb_species, "quality", 
    887                         GB_CREATE_CONTAINER); 
     841                GBDATA *gb_quality = GB_search(gb_species, "quality", GB_CREATE_CONTAINER); 
    888842                if (!gb_quality) 
    889843                    error = GB_get_error(); 
    890844 
    891                 GBDATA *gb_quality_ali = GB_search(gb_quality, alignment_name, 
    892                         GB_CREATE_CONTAINER); 
     845                GBDATA *gb_quality_ali = GB_search(gb_quality, alignment_name, GB_CREATE_CONTAINER); 
    893846                if (!gb_quality_ali) 
    894847                    error = GB_get_error(); 
     
    910863                    double gcp = 0; 
    911864 
    912                     const char *rawSequence = SQ_fetch_filtered_sequence( 
    913                             read_sequence, filter); 
     865                    const char *rawSequence = SQ_fetch_filtered_sequence(read_sequence, filter); 
    914866 
    915867                    /* 
     
    917869                     a single sequence in group from it 
    918870                     */ 
    919                     GBDATA *gb_result1 = GB_search(gb_quality_ali, 
    920                             "number_of_bases", GB_INT); 
     871                    GBDATA *gb_result1 = GB_search(gb_quality_ali, "number_of_bases", GB_INT); 
    921872                    bases = GB_read_int(gb_result1); 
    922873                    avg_bases = globalData->SQ_get_avg_bases(); 
     
    928879                    } 
    929880 
    930                     GBDATA *gb_result2 = GB_search(gb_quality_ali, 
    931                             "percent_base_deviation", GB_INT); 
     881                    GBDATA *gb_result2 = GB_search(gb_quality_ali, "percent_base_deviation", GB_INT); 
    932882                    seq_assert(gb_result2); 
    933883                    GB_write_int(gb_result2, diff_percent); 
     
    937887                     a single sequence in group from it 
    938888                     */ 
    939                     GBDATA *gb_result6 = GB_search(gb_quality_ali, 
    940                             "GC_proportion", GB_FLOAT); 
     889                    GBDATA *gb_result6 = GB_search(gb_quality_ali, "GC_proportion", GB_FLOAT); 
    941890                    gcp = GB_read_float(gb_result6); 
    942891                    avg_gc = globalData->SQ_get_avg_gc(); 
     
    948897                    } 
    949898 
    950                     GBDATA *gb_result7 = GB_search(gb_quality_ali, 
    951                             "percent_GC_difference", GB_INT); 
     899                    GBDATA *gb_result7 = GB_search(gb_quality_ali, "percent_GC_difference", GB_INT); 
    952900                    seq_assert(gb_result7); 
    953901                    GB_write_int(gb_result7, diff_percent); 
     
    958906                     evaluate sequence with group consensus 
    959907                     */ 
    960                     GBDATA *gb_con = GB_search(gb_quality_ali, 
    961                             "consensus_conformity", GB_CREATE_CONTAINER); 
     908                    GBDATA *gb_con = GB_search(gb_quality_ali, "consensus_conformity", GB_CREATE_CONTAINER); 
    962909                    if (!gb_con) 
    963910                        error = GB_get_error(); 
    964                     GBDATA *gb_dev = GB_search(gb_quality_ali, 
    965                             "consensus_deviation", GB_CREATE_CONTAINER); 
     911                    GBDATA *gb_dev = GB_search(gb_quality_ali, "consensus_deviation", GB_CREATE_CONTAINER); 
    966912                    if (!gb_dev) 
    967913                        error = GB_get_error(); 
    968914 
    969                     consensus_result cr = 
    970                             globalData->SQ_calc_consensus(rawSequence); 
     915                    consensus_result cr = globalData->SQ_calc_consensus(rawSequence); 
    971916                    value1 = cr.conformity; 
    972917                    value2 = cr.deviation; 
    973918                    value3 = globalData->SQ_get_nr_sequences(); 
    974919 
    975                     GBDATA *gb_node_entry = GB_search(gb_con, "name", 
    976                             GB_STRING); 
     920                    GBDATA *gb_node_entry = GB_search(gb_con, "name", GB_STRING); 
    977921                    seq_assert(gb_node_entry); 
    978922                    GB_write_string(gb_node_entry, "one global consensus"); 
     
    981925                    GB_write_float(gb_node_entry, value1); 
    982926 
    983                     gb_node_entry = GB_search(gb_con, "num_species", 
    984                             GB_INT); seq_assert(gb_node_entry); 
     927                    gb_node_entry = GB_search(gb_con, "num_species", GB_INT); seq_assert(gb_node_entry); 
    985928                    GB_write_int(gb_node_entry, value3); 
    986929 
     
    991934                    GB_write_float(gb_node_entry, value2); 
    992935 
    993                     gb_node_entry = GB_search(gb_dev, "num_species", 
    994                             GB_INT); seq_assert(gb_node_entry); 
     936                    gb_node_entry = GB_search(gb_dev, "num_species", GB_INT); seq_assert(gb_node_entry); 
    995937                    GB_write_int(gb_node_entry, value3); 
    996938 
     
    1052994                        evaluation = sq_round(eval); 
    1053995                    } 
    1054                     GBDATA *gb_result5 = GB_search(gb_quality_ali, 
    1055                             "consensus_evaluated", GB_INT); 
     996                    GBDATA *gb_result5 = GB_search(gb_quality_ali, "consensus_evaluated", GB_INT); 
    1056997                    seq_assert(gb_result5); 
    1057998                    GB_write_int(gb_result5, evaluation); 
    1058999                    // --------end cut this------- 
    1059                     pass2_counter_notree++; 
    1060                     aw_status((double) pass2_counter_notree 
    1061                             / (double) globalcounter_notree); 
    1062  
    10631000                    delete(rawSequence); 
    10641001                } 
    10651002            } 
    10661003        } 
     1004        progress.inc_and_check_user_abort(error); 
    10671005    } 
    10681006    free(alignment_name); 
     
    10761014} 
    10771015 
    1078 // counts number of named groups in subtree 
    1079 int SQ_count_nr_of_groups(GBT_TREE * node) { 
    1080     if (node->is_leaf) 
    1081         return 0; 
    1082  
    1083     return (node->name != 0) + SQ_count_nr_of_groups(node->leftson) 
    1084             + SQ_count_nr_of_groups(node->rightson); 
    1085 } 
    1086  
    1087 // counts number of species 
    1088 GB_ERROR SQ_count_nr_of_species(GBDATA * gb_main) { 
    1089     char *alignment_name; 
    1090  
    1091     GBDATA *read_sequence = 0; 
    1092     GBDATA *gb_species; 
    1093     GBDATA *gb_species_data; 
    1094     GBDATA *gb_name; 
    1095     GBDATA *(*getFirst)(GBDATA *) = 0; 
    1096     GBDATA *(*getNext)(GBDATA *) = 0; 
    1097     GB_ERROR error = 0; 
    1098  
    1099     GB_push_transaction(gb_main); 
    1100     gb_species_data = GB_search(gb_main, "species_data", GB_CREATE_CONTAINER); 
    1101     alignment_name = GBT_get_default_alignment(gb_main); seq_assert(alignment_name); 
    1102     getFirst = GBT_first_species; 
    1103     getNext = GBT_next_species; 
    1104  
    1105     for (gb_species = getFirst(gb_main); gb_species && !error; gb_species 
    1106             = getNext(gb_species)) { 
    1107  
    1108         gb_name = GB_entry(gb_species, "name"); 
    1109  
    1110         if (!gb_name) 
    1111             error = GB_get_error(); 
    1112         else { 
    1113             GBDATA *gb_ali = GB_entry(gb_species, alignment_name); 
    1114  
    1115             if (!gb_ali) { 
    1116                 error = no_data_error(gb_species, alignment_name); 
    1117             } 
    1118             else { 
    1119                 GBDATA *gb_quality = GB_search(gb_species, "quality", 
    1120                         GB_CREATE_CONTAINER); 
    1121                 if (!gb_quality) 
    1122                     error = GB_get_error(); 
    1123                 read_sequence = GB_entry(gb_ali, "data"); 
    1124  
    1125                 if (read_sequence) { 
    1126                     globalcounter_notree++; 
    1127                 } 
    1128             } 
    1129         } 
    1130     } 
    1131     free(alignment_name); 
    1132  
    1133     if (error) 
    1134         GB_abort_transaction(gb_main); 
    1135     else 
    1136         GB_pop_transaction(gb_main); 
    1137  
    1138     return error; 
    1139 } 
    1140  
    1141 void SQ_reset_counters(GBT_TREE * root) { 
    1142     globalcounter = 0; 
    1143     groupcounter = SQ_count_nr_of_groups(root); 
     1016int SQ_count_nodes(GBT_TREE *node) { 
     1017    // calculate number of nodes in tree 
     1018    return GBT_count_leafs(node)*2-1; 
    11441019} 
    11451020 
     
    11501025} 
    11511026 
    1152 void SQ_calc_and_apply_group_data(GBT_TREE * node, GBDATA * gb_main, 
    1153         SQ_GroupData * data, AP_filter * filter) { 
     1027void SQ_calc_and_apply_group_data(GBT_TREE * node, GBDATA * gb_main, SQ_GroupData * data, AP_filter * filter, arb_progress& progress) { 
    11541028    if (node->is_leaf) { 
    11551029        if (node->gb_node) { 
     
    11671041            if (data->getSize() == 0) { 
    11681042                parentIsEmpty = true; 
    1169                 SQ_calc_and_apply_group_data(node1, gb_main, data, filter); // process left branch with empty data 
     1043                SQ_calc_and_apply_group_data(node1, gb_main, data, filter, progress); // process left branch with empty data 
    11701044                seq_assert(data->getSize()> 0); 
    11711045            } 
    11721046            else { 
    11731047                leftData = data->clone(); // create new empty SQ_GroupData 
    1174                 SQ_calc_and_apply_group_data(node1, gb_main, leftData, filter); // process left branch 
     1048                SQ_calc_and_apply_group_data(node1, gb_main, leftData, filter, progress); // process left branch 
    11751049                seq_assert(leftData->getSize()> 0); 
    11761050            } 
    11771051 
    11781052            rightData = data->clone(); // create new empty SQ_GroupData 
    1179             SQ_calc_and_apply_group_data(node2, gb_main, rightData, filter); // process right branch 
     1053            SQ_calc_and_apply_group_data(node2, gb_main, rightData, filter, progress); // process right branch 
    11801054            seq_assert(rightData->getSize()> 0); 
    11811055 
     
    11891063 
    11901064            create_multi_level_consensus(node, data); 
    1191             globalcounter++; 
    1192             aw_status((double) globalcounter / (double) groupcounter); 
    11931065        } 
    11941066        else { 
    1195             SQ_calc_and_apply_group_data(node1, gb_main, data, filter); // enter left branch 
     1067            SQ_calc_and_apply_group_data(node1, gb_main, data, filter, progress); // enter left branch 
    11961068            seq_assert(data->getSize()> 0); 
    11971069 
    1198             SQ_calc_and_apply_group_data(node2, gb_main, data, filter); // enter right branch 
     1070            SQ_calc_and_apply_group_data(node2, gb_main, data, filter, progress); // enter right branch 
    11991071            seq_assert(data->getSize()> 0); 
    12001072        } 
    12011073    } 
    1202 } 
    1203  
    1204 void SQ_calc_and_apply_group_data2(GBT_TREE * node, GBDATA * gb_main, 
    1205         const SQ_GroupData * data, AP_filter * filter) { 
     1074    progress.inc(); 
     1075} 
     1076 
     1077void SQ_calc_and_apply_group_data2(GBT_TREE * node, GBDATA * gb_main, const SQ_GroupData * data, AP_filter * filter, arb_progress& progress) { 
    12061078    if (node->is_leaf) { 
    12071079        if (node->gb_node) { 
     
    12131085        GBT_TREE *node2 = node->rightson; 
    12141086 
    1215         if (node1) { 
    1216             SQ_calc_and_apply_group_data2(node1, gb_main, data, filter); 
    1217         } 
    1218         if (node2) { 
    1219             SQ_calc_and_apply_group_data2(node2, gb_main, data, filter); 
    1220         } 
    1221         if (node->name) { //  group identified 
    1222             globalcounter++; 
    1223             aw_status((double) globalcounter / (double) groupcounter); 
    1224         } 
    1225     } 
     1087        if (node1) SQ_calc_and_apply_group_data2(node1, gb_main, data, filter, progress); 
     1088        if (node2) SQ_calc_and_apply_group_data2(node2, gb_main, data, filter, progress); 
     1089    } 
     1090    progress.inc(); 
    12261091} 
    12271092 
     
    12521117    } 
    12531118 
    1254     for (gb_species = getFirst(gb_main); gb_species; gb_species 
    1255             = getNext(gb_species)) { 
     1119    for (gb_species = getFirst(gb_main); gb_species; gb_species = getNext(gb_species)) { 
    12561120        GBDATA *gb_ali = GB_entry(gb_species, alignment_name); 
    12571121        bool marked = false; 
    12581122        if (gb_ali) { 
    1259             GBDATA *gb_quality = GB_search(gb_species, "quality", 
    1260                     GB_CREATE_CONTAINER); 
     1123            GBDATA *gb_quality = GB_search(gb_species, "quality", GB_CREATE_CONTAINER); 
    12611124            if (gb_quality) { 
    12621125                read_sequence = GB_entry(gb_ali, "data"); 
    12631126                if (read_sequence) { 
    1264                     GBDATA *gb_quality_ali = GB_search(gb_quality, 
    1265                             alignment_name, GB_CREATE_CONTAINER); 
     1127                    GBDATA *gb_quality_ali = GB_search(gb_quality, alignment_name, GB_CREATE_CONTAINER); 
    12661128                    if (gb_quality_ali) { 
    1267                         GBDATA *gb_result1 = GB_search(gb_quality_ali, 
    1268                                 "evaluation", GB_INT); 
     1129                        GBDATA *gb_result1 = GB_search(gb_quality_ali, "evaluation", GB_INT); 
    12691130                        result = GB_read_int(gb_result1); 
    12701131 
    1271                         if (result < condition) { 
    1272                             marked = true; 
    1273                         } 
    1274                         pass1_counter_notree++; 
    1275                         aw_status((double) pass1_counter_notree 
    1276                                 / (double) globalcounter_notree); 
     1132                        if (result < condition) marked = true; 
    12771133                    } 
    12781134                } 
  • branches/refactor/SEQ_QUALITY/SQ_functions.h

    r6381 r7097  
    3737 
    3838class AP_filter; 
     39class arb_progress; 
    3940struct GBT_TREE; 
    4041 
     
    4849 
    4950GB_ERROR SQ_pass1(SQ_GroupData * globalData, GBDATA * gb_main, GBT_TREE * node, AP_filter * filter); 
    50 GB_ERROR SQ_pass1_no_tree(SQ_GroupData * globalData, GBDATA * gb_main, AP_filter * filter); 
     51GB_ERROR SQ_pass1_no_tree(SQ_GroupData * globalData, GBDATA * gb_main, AP_filter * filter, arb_progress& progress); 
    5152 
    5253GB_ERROR SQ_pass2(const SQ_GroupData * globalData, GBDATA * gb_main, GBT_TREE * node, AP_filter * filter); 
    53 GB_ERROR SQ_pass2_no_tree(const SQ_GroupData * globalData, GBDATA * gb_main, AP_filter * filter); 
     54GB_ERROR SQ_pass2_no_tree(const SQ_GroupData * globalData, GBDATA * gb_main, AP_filter * filter, arb_progress& progress); 
    5455 
    55 GB_ERROR SQ_count_nr_of_species(GBDATA * gb_main); 
     56int SQ_count_nodes(GBT_TREE *node); 
    5657 
    57 void SQ_reset_counters(GBT_TREE * root); // reset counters used by SQ_calc_and_apply_group_data 
    58  
    59 void SQ_calc_and_apply_group_data(GBT_TREE * node, GBDATA * gb_main, SQ_GroupData * data, AP_filter * filter); 
    60 void SQ_calc_and_apply_group_data2(GBT_TREE * node, GBDATA * gb_main, const SQ_GroupData * data, AP_filter * filter); 
     58void SQ_calc_and_apply_group_data(GBT_TREE * node, GBDATA * gb_main, SQ_GroupData * data, AP_filter * filter, arb_progress& progress); 
     59void SQ_calc_and_apply_group_data2(GBT_TREE * node, GBDATA * gb_main, const SQ_GroupData * data, AP_filter * filter, arb_progress& progress); 
    6160 
    6261void create_multi_level_consensus(GBT_TREE * node, SQ_GroupData * data); 
  • branches/refactor/SEQ_QUALITY/SQ_main.cxx

    r6858 r7097  
    2121#include <aw_awars.hxx> 
    2222#include <aw_msg.hxx> 
    23 #include <aw_status.hxx> 
     23#include <arb_progress.h> 
    2424#include <aw_root.hxx> 
    2525#include <arbdbt.h> 
     
    7373    bool      marked_only = (aw_root->awar(AWAR_SQ_MARK_ONLY_FLAG)->read_int() > 0); 
    7474 
     75    arb_progress main_progress("Calculating sequence quality"); 
     76 
    7577    { 
    7678        char *treename = aw_root->awar(AWAR_TREE)->read_string(); // contains "tree_????" if no tree is selected 
     
    123125 
    124126        /* 
    125          SQ_evaluate() generates the final estimation for the quality of an alignment. 
    126          It takes the values from the different containers, which are generated by the other functions, weights them 
    127          and calculates a final value. The final value is stored in "value_of_evaluation" (see options). 
    128          With the values stored in "weights" one can customize how important a value stored in a container becomes 
    129          for the final result. 
    130          */ 
     127          SQ_evaluate() generates the final estimation for the quality of an alignment. 
     128          It takes the values from the different containers, which are generated by the other functions, weights them 
     129          and calculates a final value. The final value is stored in "value_of_evaluation" (see options). 
     130          With the values stored in "weights" one can customize how important a value stored in a container becomes 
     131          for the final result. 
     132        */ 
    131133 
    132134        if (tree == 0) { 
    133135            if (reevaluate) { 
    134                 aw_openstatus("Marking Sequences..."); 
    135136                SQ_mark_species(gb_main, mark_below, marked_only); 
    136                 aw_closestatus(); 
    137137            } 
    138138            else { 
     139                arb_progress  progress(GBT_get_species_count(gb_main)*2); 
    139140                SQ_GroupData *globalData = new SQ_GroupData_RNA; 
    140                 SQ_count_nr_of_species(gb_main); 
    141                 aw_openstatus("Calculating pass 1 of 2 ..."); 
    142                 SQ_pass1_no_tree(globalData, gb_main, filter); 
    143                 aw_closestatus(); 
    144                 aw_openstatus("Calculating pass 2 of 2 ..."); 
    145                 SQ_pass2_no_tree(globalData, gb_main, filter); 
    146                 SQ_evaluate(gb_main, weights, marked_only); 
    147                 aw_closestatus(); 
    148                 if (mark_flag) { 
    149                     aw_openstatus("Marking Sequences..."); 
    150                     SQ_mark_species(gb_main, mark_below, marked_only); 
    151                     aw_closestatus(); 
     141 
     142                progress.subtitle("pass1"); 
     143                error = SQ_pass1_no_tree(globalData, gb_main, filter, progress); 
     144                if (!error) { 
     145                    progress.subtitle("pass2"); 
     146                    error = SQ_pass2_no_tree(globalData, gb_main, filter, progress); 
     147                    if (!error) { 
     148                        error = SQ_evaluate(gb_main, weights, marked_only); 
     149                        if (mark_flag && !error) { 
     150                            SQ_mark_species(gb_main, mark_below, marked_only); 
     151                        } 
     152                    } 
    152153                } 
     154                if (error) progress.done(); 
    153155                delete globalData; 
    154156            } 
    155157        } 
    156158        else { 
    157             aw_openstatus("Checking tree for irregularities..."); 
    158             SQ_TREE_ERROR check = NONE; 
    159             if ((check = SQ_check_tree_structure(tree)) != NONE) { 
     159            SQ_TREE_ERROR check = SQ_check_tree_structure(tree); 
     160            if (check != NONE) { 
    160161                switch (check) { 
    161                 case ZOMBIE: 
    162                     aw_message("Found one or more zombies in the tree.\nPlease remove them or use another tree before running the quality check tool."); 
    163                     break; 
    164                 case MISSING_NODE: 
    165                     aw_message("Missing node(s) or unusable tree structure.\nPlease fix the tree before running the quality check tool."); 
    166                     break; 
    167                 default: 
    168                     aw_message("An error occurred while traversing the tree.\nPlease fix the tree before running the quality check tool."); 
    169                     break; 
     162                    case ZOMBIE: 
     163                        error = "Found one or more zombies in the tree.\n" 
     164                            "Please remove them or use another tree before running the quality check tool."; 
     165                        break; 
     166                    case MISSING_NODE: 
     167                        error = "Missing node(s) or unusable tree structure.\n" 
     168                            "Please fix the tree before running the quality check tool."; 
     169                        break; 
     170                    default: 
     171                        error = "An error occurred while traversing the tree.\n" 
     172                            "Please fix the tree before running the quality check tool."; 
     173                        break; 
    170174                } 
    171                 aw_closestatus(); 
    172                 return; 
    173             } 
    174             aw_closestatus(); 
    175  
    176             if (reevaluate) { 
    177                 aw_openstatus("Marking Sequences..."); 
    178                 SQ_count_nr_of_species(gb_main); 
     175            } 
     176            else if (reevaluate) { 
    179177                SQ_mark_species(gb_main, mark_below, marked_only); 
    180                 aw_closestatus(); 
    181178            } 
    182179            else { 
    183                 aw_openstatus("Calculating pass 1 of 2..."); 
    184                 SQ_reset_counters(tree); 
     180                arb_progress progress(SQ_count_nodes(tree)*2); 
    185181                SQ_GroupData *globalData = new SQ_GroupData_RNA; 
    186                 SQ_calc_and_apply_group_data(tree, gb_main, globalData, filter); 
    187                 aw_closestatus(); 
    188                 SQ_reset_counters(tree); 
    189                 aw_openstatus("Calculating pass 2 of 2..."); 
    190                 SQ_calc_and_apply_group_data2(tree, gb_main, globalData, filter); 
     182 
     183                progress.subtitle("pass1"); 
     184                SQ_calc_and_apply_group_data(tree, gb_main, globalData, filter, progress); 
     185                progress.subtitle("pass2"); 
     186                SQ_calc_and_apply_group_data2(tree, gb_main, globalData, filter, progress); 
    191187                SQ_evaluate(gb_main, weights, marked_only); 
    192                 aw_closestatus(); 
    193                 SQ_reset_counters(tree); 
    194                 if (mark_flag) { 
    195                     aw_openstatus("Marking Sequences..."); 
    196                     SQ_count_nr_of_species(gb_main); 
    197                     SQ_mark_species(gb_main, mark_below, marked_only); 
    198                     aw_closestatus(); 
    199                 } 
     188                if (mark_flag) SQ_mark_species(gb_main, mark_below, marked_only); 
    200189                delete globalData; 
    201190            } 
    202191        } 
    203192    } 
    204  
    205     if (error) { 
    206         aw_message(error); 
    207     } 
     193     
     194    if (error) aw_message(error); 
    208195 
    209196    SQ_clear_group_dictionary(); 
  • branches/refactor/SL/AW_NAME/AW_rename.cxx

    r6871 r7097  
    1515#include <aw_root.hxx> 
    1616#include <aw_msg.hxx> 
    17 #include <aw_status.hxx> 
     17#include <arb_progress.h> 
    1818 
    1919#include <names_client.h> 
     
    201201 
    202202    GB_ERROR connect(GBDATA *gb_main) { 
     203        arb_progress::show_comment("Connecting to name server"); 
     204 
    203205        GB_ERROR err = 0; 
    204206        if (!link) { 
     
    303305// -------------------------------------------------------------------------------- 
    304306 
    305 GB_ERROR AWTC_generate_one_name(GBDATA *gb_main, const char *full_name, const char *acc, const char *addid, char*& new_name, bool openstatus, bool showstatus) { 
     307GB_ERROR AWTC_generate_one_name(GBDATA *gb_main, const char *full_name, const char *acc, const char *addid, char*& new_name) { 
    306308    // create a unique short name for 'full_name' 
    307309    // the result is written into 'new_name' (as malloc-copy) 
     
    312314    if (!acc) acc = ""; 
    313315 
    314     if (openstatus) { 
    315         aw_openstatus(GBS_global_string("Short name for '%s'", full_name)); 
    316         showstatus = true; 
    317     } 
    318  
    319     if (showstatus) { 
    320         aw_status("Connecting to name server"); 
    321         aw_status((double)0); 
    322     } 
     316    arb_progress progress("Generating short name"); 
    323317 
    324318    GB_ERROR err = name_server.connect(gb_main); 
    325319    if (err) return err; 
    326320 
    327     if (showstatus) aw_status("Generating name"); 
    328321    static char *shrt = 0; 
    329322    if (strlen(full_name)) { 
     
    356349    } 
    357350 
    358     if (openstatus) aw_closestatus(); 
    359351    name_server.disconnect(); 
    360352 
     
    362354} 
    363355 
    364 GB_ERROR AWTC_recreate_name(GBDATA *gb_species, bool update_status) { 
    365     GBDATA   *gb_main = GB_get_root(gb_species); 
    366  
    367     if (update_status) { 
    368         aw_status("Connecting to name server"); 
    369         aw_status((double)0); 
    370     } 
    371  
    372     GB_ERROR error = name_server.connect(gb_main); 
     356GB_ERROR AWTC_recreate_name(GBDATA *gb_species) { 
     357    GBDATA       *gb_main = GB_get_root(gb_species); 
     358    arb_progress  progress("Recreating name"); 
     359    GB_ERROR      error   = name_server.connect(gb_main); 
    373360    if (!error) { 
    374         if (update_status) aw_status("Generating name"); 
    375  
    376361        const char *add_field = AW_get_nameserver_addid(gb_main); 
    377362        char       *ali_name  = GBT_get_default_alignment(gb_main); 
     
    429414 
    430415            if (error) GBT_abort_rename_session(); 
    431             else { 
    432                 if (update_status) GBT_commit_rename_session(aw_status, aw_status); 
    433                 else GBT_commit_rename_session(0, 0); 
    434             } 
     416            else error = GBT_commit_rename_session(); 
    435417        } 
    436418 
     
    462444} 
    463445 
    464 GB_ERROR AWTC_pars_names(GBDATA *gb_main, int update_status, bool *isWarningPtr) 
     446GB_ERROR AWTC_pars_names(GBDATA *gb_main, bool *isWarningPtr) 
    465447// rename species according to name_server 
    466448// 'isWarning' is set to true, in case of duplicates-warning 
    467449{ 
    468     GB_ERROR err       = name_server.connect(gb_main); 
     450    arb_progress gen_progress("Generating new names", 2); 
     451    GB_ERROR err = name_server.connect(gb_main); 
    469452    bool     isWarning = false; 
     453 
    470454 
    471455    if (!err) { 
     
    473457        if (!err) { 
    474458            char     *ali_name = GBT_get_default_alignment(gb_main); 
    475             GB_HASH  *hash     = GBS_create_hash(GBT_get_species_count(gb_main), GB_IGNORE_CASE); 
     459            long      spcount  = GBT_get_species_count(gb_main); 
     460            GB_HASH  *hash     = GBS_create_hash(spcount, GB_IGNORE_CASE); 
    476461            GB_ERROR  warning  = 0; 
    477             long      spcount  = 0; 
    478             long      count    = 0; 
    479  
    480             if (update_status) { 
    481                 aw_status("Renaming"); 
    482                 spcount = GBT_get_species_count(gb_main); 
    483             } 
    484  
    485             const char *add_field = AW_get_nameserver_addid(gb_main); 
    486  
    487             for (GBDATA *gb_species = GBT_first_species(gb_main); 
    488                  gb_species && !err; 
    489                  gb_species = GBT_next_species(gb_species)) 
    490462            { 
    491                 if (update_status) aw_status(count++/(double)spcount); 
    492  
    493                 GBDATA *gb_name      = GB_entry(gb_species, "name"); 
    494                 GBDATA *gb_full_name = GB_entry(gb_species, "full_name"); 
    495                 GBDATA *gb_acc       = GBT_gen_accession_number(gb_species, ali_name); 
    496                 GBDATA *gb_addfield  = add_field[0] ? GB_entry(gb_species, add_field) : 0; 
    497  
    498                 char *name      = gb_name      ? GB_read_string   (gb_name)     : strdup(""); 
    499                 char *full_name = gb_full_name ? GB_read_string   (gb_full_name) : strdup(""); 
    500                 char *acc       = gb_acc       ? GB_read_string   (gb_acc)      : strdup(""); 
    501                 char *addid     = gb_addfield  ? GB_read_as_string(gb_addfield) : strdup(""); // empty value will be set to default by nameserver 
    502  
    503                 char *shrt = 0; 
    504  
    505                 if (full_name[0] || acc[0] || addid[0]) { 
    506                     if (aisc_nput(name_server.getLink(), AN_LOCAL, name_server.getLocs(), 
    507                                   LOCAL_FULL_NAME,  full_name, 
    508                                   LOCAL_ACCESSION,  acc, 
    509                                   LOCAL_ADDID,      addid, 
    510                                   LOCAL_ADVICE,     name, 
    511                                   NULL)) { 
    512                         err = "Connection Problems with the NAME_SERVER"; 
    513                     } 
    514                     if (aisc_get(name_server.getLink(), AN_LOCAL, name_server.getLocs(), 
    515                                  LOCAL_GET_SHORT,   &shrt, 
    516                                  NULL)) { 
    517                         err = "Connection Problems with the NAME_SERVER"; 
    518                     } 
     463                arb_progress progress("Renaming species", spcount); 
     464                const char *add_field = AW_get_nameserver_addid(gb_main); 
     465 
     466                for (GBDATA *gb_species = GBT_first_species(gb_main); 
     467                     gb_species && !err; 
     468                     gb_species = GBT_next_species(gb_species)) 
     469                { 
     470                    GBDATA *gb_name      = GB_entry(gb_species, "name"); 
     471                    GBDATA *gb_full_name = GB_entry(gb_species, "full_name"); 
     472                    GBDATA *gb_acc       = GBT_gen_accession_number(gb_species, ali_name); 
     473                    GBDATA *gb_addfield  = add_field[0] ? GB_entry(gb_species, add_field) : 0; 
     474 
     475                    char *name      = gb_name      ? GB_read_string   (gb_name)     : strdup(""); 
     476                    char *full_name = gb_full_name ? GB_read_string   (gb_full_name) : strdup(""); 
     477                    char *acc       = gb_acc       ? GB_read_string   (gb_acc)      : strdup(""); 
     478                    char *addid     = gb_addfield  ? GB_read_as_string(gb_addfield) : strdup(""); // empty value will be set to default by nameserver 
     479 
     480                    char *shrt = 0; 
     481 
     482                    if (full_name[0] || acc[0] || addid[0]) { 
     483                        if (aisc_nput(name_server.getLink(), AN_LOCAL, name_server.getLocs(), 
     484                                      LOCAL_FULL_NAME,  full_name, 
     485                                      LOCAL_ACCESSION,  acc, 
     486                                      LOCAL_ADDID,      addid, 
     487                                      LOCAL_ADVICE,     name, 
     488                                      NULL)) { 
     489                            err = "Connection Problems with the NAME_SERVER"; 
     490                        } 
     491                        if (aisc_get(name_server.getLink(), AN_LOCAL, name_server.getLocs(), 
     492                                     LOCAL_GET_SHORT,   &shrt, 
     493                                     NULL)) { 
     494                            err = "Connection Problems with the NAME_SERVER"; 
     495                        } 
     496                    } 
     497                    else { 
     498                        shrt = strdup(name); 
     499                    } 
     500                    if (!err) { 
     501                        char *newshrt = AWTC_create_numbered_suffix(hash, shrt, warning); 
     502                        if (newshrt) freeset(shrt, newshrt); 
     503 
     504                        GBS_incr_hash(hash, shrt); 
     505                        err = GBT_rename_species(name, shrt, true); 
     506                    } 
     507 
     508                    free(shrt); 
     509                    free(addid); 
     510                    free(acc); 
     511                    free(full_name); 
     512                    free(name); 
     513 
     514                    progress.inc_and_check_user_abort(err); 
    519515                } 
    520                 else { 
    521                     shrt = strdup(name); 
    522                 } 
    523                 if (!err) { 
    524                     char *newshrt = AWTC_create_numbered_suffix(hash, shrt, warning); 
    525                     if (newshrt) freeset(shrt, newshrt); 
    526  
    527                     GBS_incr_hash(hash, shrt); 
    528                     err = GBT_rename_species(name, shrt, true); 
    529                 } 
    530  
    531                 free(shrt); 
    532                 free(addid); 
    533                 free(acc); 
    534                 free(full_name); 
    535                 free(name); 
    536             } 
    537  
    538             if (err) { 
    539                 GBT_abort_rename_session(); 
    540             } 
    541             else { 
    542                 err = GBT_commit_rename_session(aw_status, aw_status); 
    543             } 
     516            } 
     517 
     518            if (err) GBT_abort_rename_session(); 
     519            else err = GBT_commit_rename_session(); 
    544520 
    545521            GBS_free_hash(hash); 
     
    561537 
    562538void awt_rename_cb(AW_window *aww, GBDATA *gb_main) { 
    563     aw_openstatus("Generating new names"); 
    564     aw_status("Contacting name server"); 
    565     GB_ERROR error     = AWTC_pars_names(gb_main, 1); 
    566     aw_closestatus(); 
     539    GB_ERROR error = AWTC_pars_names(gb_main); 
    567540    if (error) aw_message(error); 
    568  
    569541    aww->get_root()->awar(AWAR_TREE_REFRESH)->touch(); 
    570542} 
  • branches/refactor/SL/AW_NAME/AW_rename.hxx

    r6858 r7097  
    4040 
    4141char     *AWTC_create_numbered_suffix(GB_HASH *species_name_hash, const char *shortname, GB_ERROR& warning); 
    42 GB_ERROR  AWTC_pars_names(GBDATA *gb_main, int update_status = 0, bool *isWarning = 0); 
    43 GB_ERROR  AWTC_generate_one_name(GBDATA *gb_main, const char *full_name, const char *acc, const char *addid, char*& new_name, bool openstatus, bool showstatus); 
    44 GB_ERROR  AWTC_recreate_name(GBDATA *gb_main, bool update_status); 
     42GB_ERROR  AWTC_pars_names(GBDATA *gb_main, bool *isWarning = 0); 
     43GB_ERROR  AWTC_generate_one_name(GBDATA *gb_main, const char *full_name, const char *acc, const char *addid, char*& new_name); 
     44GB_ERROR  AWTC_recreate_name(GBDATA *gb_main); 
    4545 
    4646// return name of additional field used for species identification 
  • branches/refactor/SL/AW_NAME/Makefile

    r7089 r7097  
    7474AW_rename.o: $(ARBHOME)/INCLUDE/arb_error.h 
    7575AW_rename.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     76AW_rename.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    7677AW_rename.o: $(ARBHOME)/INCLUDE/arb_string.h 
    7778AW_rename.o: $(ARBHOME)/INCLUDE/arbdb.h 
     
    8687AW_rename.o: $(ARBHOME)/INCLUDE/aw_msg.hxx 
    8788AW_rename.o: $(ARBHOME)/INCLUDE/aw_root.hxx 
    88 AW_rename.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    8989AW_rename.o: $(ARBHOME)/INCLUDE/aw_window.hxx 
    9090AW_rename.o: $(ARBHOME)/INCLUDE/bytestring.h 
  • branches/refactor/SL/DB_SCANNER/Makefile

    r7089 r7097  
    4343db_scanner.o: $(ARBHOME)/INCLUDE/arb_error.h 
    4444db_scanner.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     45db_scanner.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    4546db_scanner.o: $(ARBHOME)/INCLUDE/arb_str.h 
    4647db_scanner.o: $(ARBHOME)/INCLUDE/arb_string.h 
     
    5859db_scanner.o: $(ARBHOME)/INCLUDE/aw_root.hxx 
    5960db_scanner.o: $(ARBHOME)/INCLUDE/aw_select.hxx 
    60 db_scanner.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    6161db_scanner.o: $(ARBHOME)/INCLUDE/aw_window.hxx 
    6262db_scanner.o: $(ARBHOME)/INCLUDE/awt.hxx 
  • branches/refactor/SL/DB_SCANNER/db_scanner.cxx

    r6861 r7097  
    1818#include <aw_select.hxx> 
    1919#include <aw_msg.hxx> 
    20 #include <aw_status.hxx> 
     20#include <arb_progress.h> 
    2121#include <aw_root.hxx> 
    2222 
     
    164164 
    165165                if (selector->type == AWT_QUERY_ITEM_SPECIES) { // species 
     166                    arb_progress progress("Renaming species"); 
    166167                    char *name = nulldup(GBT_read_name(cbs->gb_user)); 
    167                     aw_openstatus("Renaming species"); 
    168168 
    169169                    if (strlen(value)) { 
     
    173173 
    174174                        if (error) GBT_abort_rename_session(); 
    175                         else GBT_commit_rename_session(aw_status, aw_status); 
     175                        else error = GBT_commit_rename_session(); 
    176176                    } 
    177177                    else { 
    178                         error = AWTC_recreate_name(cbs->gb_user, true); 
    179                     } 
    180  
    181                     aw_closestatus(); 
     178                        error = AWTC_recreate_name(cbs->gb_user); 
     179                    } 
     180 
    182181                    free(name); 
    183182                } 
  • branches/refactor/SL/FAST_ALIGNER/Makefile

    r7089 r7097  
    8080fast_aligner.o: $(ARBHOME)/INCLUDE/arb_defs.h 
    8181fast_aligner.o: $(ARBHOME)/INCLUDE/arb_error.h 
    82 fast_aligner.o: $(ARBHOME)/INCLUDE/arb_handlers.h 
    8382fast_aligner.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     83fast_aligner.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    8484fast_aligner.o: $(ARBHOME)/INCLUDE/arb_string.h 
    8585fast_aligner.o: $(ARBHOME)/INCLUDE/arb_unit_test.h 
     
    9595fast_aligner.o: $(ARBHOME)/INCLUDE/aw_msg.hxx 
    9696fast_aligner.o: $(ARBHOME)/INCLUDE/aw_root.hxx 
    97 fast_aligner.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    9897fast_aligner.o: $(ARBHOME)/INCLUDE/aw_window.hxx 
    9998fast_aligner.o: $(ARBHOME)/INCLUDE/awt_sel_boxes.hxx 
  • branches/refactor/SL/FAST_ALIGNER/fast_aligner.cxx

    r7091 r7097  
    2222#include <aw_window.hxx> 
    2323#include <aw_awars.hxx> 
    24 #include <aw_status.hxx> 
    2524#include <aw_root.hxx> 
    2625 
     
    2827 
    2928#include <arb_defs.h> 
    30 #include <arb_handlers.h> 
     29#include <arb_progress.h> 
    3130 
    3231#include <cctype> 
     
    11681167 
    11691168    { 
    1170         const char *to_align_name = read_name(gb_toAlign); 
    1171         const char *align_to_name = read_name(gb_alignTo); 
    1172  
    1173         const char *stat_buf = GBS_global_string("Aligning #%i:%i %s (to %s)", 
    1174                                                  currentSequenceNumber, overallSequenceNumber, 
    1175                                                  to_align_name, align_to_name); 
    1176  
    11771169        static GBDATA *last_gb_toAlign = 0; 
    11781170        if (gb_toAlign!=last_gb_toAlign) { 
     
    11801172            currentSequenceNumber++; 
    11811173        } 
    1182  
    1183         GB_status(stat_buf); 
    11841174    } 
    11851175 
     
    15201510            FamilyFinder *familyFinder = relSearch.getFamilyFinder(); 
    15211511 
    1522             GB_status("Searching relatives"); 
    15231512            error = familyFinder->searchFamily(toAlignExpSequence, FF_FORWARD, relativesToTest+1); 
    15241513 
     
    20652054        case FA_MARKED: { // align all marked sequences 
    20662055            int     count      = GBT_count_marked_species(gb_main); 
    2067             int     done       = 0; 
    20682056            GBDATA *gb_species = GBT_first_marked_species_rel_species_data(gb_species_data); 
     2057 
     2058            arb_progress progress("Aligning marked species", count); 
     2059            progress.auto_subtitles("Species"); 
    20692060 
    20702061            currentSequenceNumber = 1; 
     
    20722063 
    20732064            while (gb_species && !error) { 
    2074                 error = alignToReference(gb_species, ref); 
    2075                 done++; 
    2076                 GB_status(double(done)/double(count)); 
     2065                error      = alignToReference(gb_species, ref); 
     2066                progress.inc_and_check_user_abort(error); 
    20772067                gb_species = GBT_next_marked_species(gb_species); 
    20782068            } 
     
    20812071        case FA_SELECTED: { // align all selected species 
    20822072            int     count; 
    2083             int     done       = 0; 
    20842073            GBDATA *gb_species = get_first_selected_species(&count); 
    20852074 
     2075             
    20862076            currentSequenceNumber = 1; 
    20872077            overallSequenceNumber = count; 
     
    20902080                aw_message("There is no selected species!"); 
    20912081            } 
    2092  
    2093             while (gb_species && !error) { 
    2094                 error = alignToReference(gb_species, ref); 
    2095                 done++; 
    2096                 GB_status(double(done)/double(count)); 
    2097                 gb_species = get_next_selected_species(); 
    2098             } 
    2099  
     2082            else { 
     2083                arb_progress progress("Aligning selected species", count); 
     2084                progress.auto_subtitles("Species"); 
     2085 
     2086                while (gb_species && !error) { 
     2087                    error      = alignToReference(gb_species, ref); 
     2088                    progress.inc_and_check_user_abort(error); 
     2089                    gb_species = get_next_selected_species(); 
     2090                } 
     2091            } 
    21002092            break; 
    21012093        } 
     
    23982390 
    23992391        { 
    2400             aw_openstatus("FastAligner"); 
     2392            arb_progress progress("FastAligner"); 
     2393            progress.allow_title_reuse(); 
     2394 
    24012395            Aligner aligner(gb_main, 
    24022396                            alignWhat, 
     
    24052399                            get_first_selected_species, 
    24062400                            get_next_selected_species, 
    2407                                  
     2401 
    24082402                            reference, 
    24092403                            get_consensus ? data_access->get_group_consensus : NULL, 
     
    24162410                            (FA_errorAction)root->awar(FA_AWAR_ACTION_ON_ERROR)->read_int()); 
    24172411            error = aligner.run(); 
    2418             aw_closestatus(); 
    24192412        } 
    24202413 
     
    29982991} 
    29992992 
    3000 static int fake_status_gauge(double) { return 0; } 
    3001 static int fake_status_msg(const char*) { return 0; } 
    3002  
    30032993void test_install_fakes(GBDATA *gb_main) { 
    30042994    selection_fake_gb_main = gb_main; 
    3005     GB_install_status(fake_status_gauge, fake_status_msg); 
    30062995} 
    30072996 
     
    30423031 
    30433032    test_install_fakes(gb_main); 
     3033    arb_suppress_progress silence; 
    30443034 
    30453035    // bool cont_on_err    = true; 
     
    31753165 
    31763166    test_install_fakes(gb_main); 
     3167    arb_suppress_progress silence; 
    31773168 
    31783169    bool cont_on_err = true; 
  • branches/refactor/SL/SEQIO/Makefile

    r7089 r7097  
    4747seq_export.o: $(ARBHOME)/INCLUDE/arb_error.h 
    4848seq_export.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     49seq_export.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    4950seq_export.o: $(ARBHOME)/INCLUDE/arb_string.h 
    5051seq_export.o: $(ARBHOME)/INCLUDE/arbdb.h 
  • branches/refactor/SL/SEQIO/seq_export.cxx

    r7059 r7097  
    1414#include <arbdbt.h> 
    1515#include <xml.hxx> 
     16#include <arb_progress.h> 
    1617 
    1718#define sio_assert(cond) arb_assert(cond) 
     
    288289        gap_column[gap_columns] = max_ali_len; 
    289290 
    290         size_t spec_count  = count_species(); 
    291         size_t stat_update = spec_count/1000; 
    292  
    293         if (stat_update == 0) stat_update = 1; 
    294  
    295         size_t count         = 0; 
    296         size_t next_stat     = count+stat_update; 
    297  
    298         GB_status("Calculating vertical gaps"); 
    299         GB_status(0.0); 
     291        arb_progress progress("Calculating vertical gaps", count_species()); 
    300292 
    301293        for (GBDATA *gb_species = first_species(); 
     
    321313                gap_columns            -= skipped_columns; 
    322314            } 
    323             ++count; 
    324             if (count >= next_stat) { 
    325                 if (GB_status(count/double(spec_count))) err = "User abort"; 
    326                 next_stat = count+stat_update; 
    327             } 
    328         } 
    329  
    330         GB_status(1.0); 
     315            progress.inc_and_check_user_abort(err); 
     316        } 
    331317 
    332318        if (!err) { 
     
    567553                sio_assert(GB_is_privatefile(intermediate_export, false)); 
    568554 
    569                 GB_status(GBS_global_string("Converting to %s", efo.suffix)); 
     555                GB_informationf("Converting to %s", efo.suffix); 
    570556 
    571557                char *srt = GBS_global_string_copy("$<=%s:$>=%s", intermediate_export, *resulting_outname); 
    572558                char *sys = GBS_string_eval(efo.system, srt, 0); 
    573559 
    574                 GB_status(GBS_global_string("exec '%s'", efo.system)); 
     560                GB_informationf("exec '%s'", efo.system); 
    575561                error = GB_system(sys); 
    576562 
    577563                GB_unlink_or_warn(intermediate_export, &error); 
    578                 GB_status(1 - double(export_depth-1)/export_depth_max); 
    579564 
    580565                free(sys); 
     
    589574                XML_Document *xml = 0; 
    590575 
    591                 GB_status("Saving data"); 
    592576                export_depth_max = export_depth; 
    593  
    594                 if (efo.export_mode == EXPORT_XML) { 
    595                     xml = new XML_Document("ARB_SEQ_EXPORT", "arb_seq_export.dtd", out); 
    596                     { 
    597                         xml->add_attribute("database", db_name); 
    598                     } 
    599                     xml->add_attribute("export_date", GB_date_string()); 
    600                     { 
    601                         XML_Comment rem("There is a basic version of ARB_seq_export.dtd in $ARBHOME/lib/dtd\n" 
    602                                         "but you might need to expand it by yourself,\n" 
    603                                         "because the ARB-database may contain any kind of fields."); 
    604                     } 
    605                 } 
    606577 
    607578                int allCount    = 0; 
     
    613584                } 
    614585 
    615                 int count       = 0; 
     586                arb_progress progress(allCount); 
     587                progress.auto_subtitles("Saving species"); 
     588 
     589                if (efo.export_mode == EXPORT_XML) { 
     590                    xml = new XML_Document("ARB_SEQ_EXPORT", "arb_seq_export.dtd", out); 
     591                    { 
     592                        xml->add_attribute("database", db_name); 
     593                    } 
     594                    xml->add_attribute("export_date", GB_date_string()); 
     595                    { 
     596                        XML_Comment rem("There is a basic version of ARB_seq_export.dtd in $ARBHOME/lib/dtd\n" 
     597                                        "but you might need to expand it by yourself,\n" 
     598                                        "because the ARB-database may contain any kind of fields."); 
     599                    } 
     600                } 
     601 
    616602                for (GBDATA *gb_species = esd->first_species(); 
    617603                     gb_species && !error; 
    618604                     gb_species = esd->next_species(gb_species)) 
    619605                { 
    620                     GB_status(GBS_global_string("Saving species %i/%i", ++count, allCount)); 
    621606                    switch (efo.export_mode) { 
    622607                        case EXPORT_USING_FORM: 
     
    632617                            break; 
    633618                    } 
    634                     GB_status(double(count)/allCount); 
     619                    progress.inc_and_check_user_abort(error); 
    635620                } 
    636621 
     
    656641    GB_ERROR error = 0; 
    657642 
    658     GB_status(0.0); 
    659  
    660643    if (multiple) { 
    661644        char *path, *name, *suffix; 
    662645        GB_split_full_path(outname, &path, NULL, &name, &suffix); 
    663  
    664646        *resulting_outname = NULL; 
    665647 
    666         size_t species_count = esd->count_species(); 
    667         size_t count         = 0; 
     648        arb_progress progress("Exporting data", esd->count_species()); 
    668649 
    669650        for (GBDATA *gb_species = esd->first_species(); 
     
    675656            else { 
    676657                const char *fname = GB_append_suffix(GBS_global_string("%s_%s", name, species_name), suffix); 
    677                 GB_status(fname); 
     658                progress.subtitle(fname); 
    678659 
    679660                char *oname = strdup(GB_concat_path(path, fname)); 
     
    683664                error = export_format_single(dbname, formname, oname, &res_oname); 
    684665                esd->set_single_mode(NULL); 
    685  
    686                 GB_status(++count/double(species_count)); 
    687666 
    688667                if (!*resulting_outname || // not set yet 
     
    695674                free(oname); 
    696675            } 
     676 
     677            progress.inc_and_check_user_abort(error); 
    697678        } 
    698679 
     
    702683    } 
    703684    else { 
     685        arb_progress progress("Exporting data"); 
    704686        error = export_format_single(dbname, formname, outname, resulting_outname); 
    705687    } 
  • branches/refactor/SOURCE_TOOLS/generate_all_links.sh

    r7086 r7097  
    300300symlink_file ../WINDOW/aw_root.hxx INCLUDE/aw_root.hxx && 
    301301symlink_file ../WINDOW/aw_select.hxx INCLUDE/aw_select.hxx && 
    302 symlink_file ../WINDOW/aw_status.hxx INCLUDE/aw_status.hxx && 
    303302symlink_file ../WINDOW/aw_window.hxx INCLUDE/aw_window.hxx && 
    304303symlink_file ../WINDOW/aw_window_Xm_interface.hxx INCLUDE/aw_window_Xm_interface.hxx && 
  • branches/refactor/STAT/Makefile

    r7089 r7097  
    4646ST_ml.o: $(ARBHOME)/INCLUDE/arb_error.h 
    4747ST_ml.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     48ST_ml.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    4849ST_ml.o: $(ARBHOME)/INCLUDE/arb_string.h 
    4950ST_ml.o: $(ARBHOME)/INCLUDE/ARB_Tree.hxx 
     
    5556ST_ml.o: $(ARBHOME)/INCLUDE/aw_base.hxx 
    5657ST_ml.o: $(ARBHOME)/INCLUDE/aw_color_groups.hxx 
    57 ST_ml.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    5858ST_ml.o: $(ARBHOME)/INCLUDE/ColumnStat.hxx 
    5959ST_ml.o: $(ARBHOME)/INCLUDE/downcast.h 
     
    7676ST_quality.o: $(ARBHOME)/INCLUDE/arb_error.h 
    7777ST_quality.o: $(ARBHOME)/INCLUDE/arb_msg.h 
     78ST_quality.o: $(ARBHOME)/INCLUDE/arb_progress.h 
    7879ST_quality.o: $(ARBHOME)/INCLUDE/arb_string.h 
    7980ST_quality.o: $(ARBHOME)/INCLUDE/arbdb.h 
     
    8687ST_quality.o: $(ARBHOME)/INCLUDE/aw_base.hxx 
    8788ST_quality.o: $(ARBHOME)/INCLUDE/aw_keysym.hxx 
    88 ST_quality.o: $(ARBHOME)/INCLUDE/aw_status.hxx 
    8989ST_quality.o: $(ARBHOME)/INCLUDE/aw_window.hxx 
    9090ST_quality.o: $(ARBHOME)/INCLUDE/BI_helix.hxx 
  • branches/refactor/STAT/ST_ml.cxx

    r6920 r7097  
    1515#include <AP_filter.hxx> 
    1616#include <AP_Tree.hxx> 
    17 #include <aw_status.hxx> 
     17#include <arb_progress.h> 
    1818#include <gui_aliview.hxx> 
    1919 
     
    471471GB_ERROR ST_ML::init_st_ml(const char *tree_name, const char *alignment_namei, 
    472472                           const char *species_names, int marked_only, 
    473                            ColumnStat *colstat, bool show_status, const WeightedFilter *weighted_filter) 
     473                           ColumnStat *colstat, const WeightedFilter *weighted_filter) 
    474474{ 
    475475    /*! this is the real constructor, call only once */ 
     
    482482    else { 
    483483        GB_transaction ta(gb_main); 
    484  
    485         if (show_status) aw_openstatus("Activating column statistic"); 
     484        arb_progress progress("Activating column statistic"); 
    486485 
    487486        column_stat                = colstat; 
     
    516515            } 
    517516 
    518             if (show_status) aw_status("load tree"); 
    519517            tree_root->loadFromDB(tree_name);       // tree is not linked! 
    520518 
    521             if (show_status) aw_status("link tree"); 
    522519            { 
    523520                size_t species_in_tree = count_species_in_tree(); 
     
    544541                    GBS_free_hash(keep_species_hash); 
    545542                    keep_species_hash = 0; 
    546                     GBT_link_tree(tree_root->get_root_node()->get_gbt_tree(), gb_main, show_status, 0, 0); 
     543                    GBT_link_tree(tree_root->get_root_node()->get_gbt_tree(), gb_main, true, 0, 0); 
    547544                } 
    548545            } 
    549546            else {                                  // keep marked/all 
    550                 GBT_link_tree(tree_root->get_root_node()->get_gbt_tree(), gb_main, show_status, 0, 0); 
    551                 aw_status("clean tree"); 
     547                GBT_link_tree(tree_root->get_root_node()->get_gbt_tree(), gb_main, true, 0, 0); 
    552548                tree_root->remove_leafs((marked_only ? AWT_REMOVE_NOT_MARKED : 0)|AWT_REMOVE_DELETED); 
    553549 
     
    559555                // calc frequencies 
    560556 
    561                 if (show_status) aw_status("calculating frequencies"); 
     557                progress.subtitle("calculating frequencies"); 
    562558 
    563559                size_t filtered_length = get_filtered_length(); 
     
    597593            error = ta.close(error); 
    598594        } 
    599  
    600         if (show_status) aw_closestatus(); 
    601595    } 
    602596    return error; 
  • branches/refactor/STAT/ST_quality.cxx

    r6858 r7097  
    1717#include <AP_filter.hxx> 
    1818#include <aw_awars.hxx> 
    19 #include <aw_status.hxx> 
     19#include <arb_progress.h> 
    2020#include <arbdbt.h> 
    2121 
     
    244244#endif // DEVEL_RALF 
    245245    ST_ML    st_ml(gb_main); 
    246     GB_ERROR error = st_ml.init_st_ml(tree_name, alignment_name, 0, marked_only, colstat, true, weighted_filter); 
     246    GB_ERROR error = st_ml.init_st_ml(tree_name, alignment_name, 0, marked_only, colstat, weighted_filter); 
     247    arb_progress glob_progress("Sequence Quality Check"); 
    247248 
    248249    if (!error) { 
    249         GB_HASH *species_to_info_hash = GBS_create_dynaval_hash(GBT_get_species_count(gb_main), GB_IGNORE_CASE, destroy_ColumnQualityInfo); 
    250         GB_CSTR *snames               = GBT_get_names_of_species_in_tree(st_ml.get_gbt_tree()); 
    251  
    252         aw_openstatus("Sequence Quality Check"); 
    253         aw_status(0.0); 
    254  
    255         int    seq_len       = st_ml.get_filtered_length(); 
    256         size_t parts         = (seq_len-1)/ST_MAX_SEQ_PART+1; 
    257         size_t species_count = 0; 
    258         while (snames[species_count]) ++species_count; 
    259  
    260         aw_status_counter progress(parts*species_count); 
    261  
    262         for (int pos = 0; pos < seq_len && !progress.aborted_by_user(); pos += ST_MAX_SEQ_PART) { 
    263             int end                = pos + ST_MAX_SEQ_PART - 1; 
    264             if (end > seq_len) end = seq_len; 
    265  
    266             for (GB_CSTR *pspecies_name = snames; *pspecies_name; pspecies_name++) { 
    267                 st_ml_add_sequence_part_to_stat(&st_ml, colstat, *pspecies_name, seq_len, bucket_size, species_to_info_hash, pos, end); 
    268                 progress.inc(); 
    269             } 
    270         } 
    271  
    272         if (!error && !progress.aborted_by_user()) { 
    273             aw_status("Generating Result String"); 
    274             progress.restart(species_count); 
     250        GB_HASH *species2info = GBS_create_dynaval_hash(GBT_get_species_count(gb_main), GB_IGNORE_CASE, destroy_ColumnQualityInfo); 
     251        size_t   species_count; 
     252        GB_CSTR *snames               = GBT_get_names_of_species_in_tree(st_ml.get_gbt_tree(), &species_count); 
     253        int      seq_len              = st_ml.get_filtered_length(); 
     254        size_t   parts                = (seq_len-1)/ST_MAX_SEQ_PART+1; 
     255 
     256        { 
     257            arb_progress add_progress("Calculating stat", parts*species_count); 
     258 
     259            for (int pos = 0; pos < seq_len && !error; pos += ST_MAX_SEQ_PART) { 
     260                int end                = pos + ST_MAX_SEQ_PART - 1; 
     261                if (end > seq_len) end = seq_len; 
     262 
     263                for (GB_CSTR *pspecies_name = snames; *pspecies_name && !error; pspecies_name++) { 
     264                    st_ml_add_sequence_part_to_stat(&st_ml, colstat, *pspecies_name, seq_len, bucket_size, species2info, pos, end); 
     265                    add_progress.inc_and_check_user_abort(error); 
     266                } 
     267            } 
     268        } 
     269 
     270        if (!error) { 
     271            arb_progress     res_progress("Calculating result", species_count); 
    275272            const AP_filter *filter = st_ml.get_filter(); 
    276             for (GB_CSTR *pspecies_name = snames; *pspecies_name && !error && !progress.aborted_by_user(); pspecies_name++) { 
    277                 error = st_ml_add_quality_string_to_species(gb_main, filter, alignment_name, *pspecies_name, bucket_size, species_to_info_hash, report, dest_field); 
    278                 progress.inc(); 
    279             } 
    280         } 
    281  
    282         if (!error && progress.aborted_by_user()) error = "Aborted by user"; 
    283  
    284         aw_closestatus(); 
     273 
     274            for (GB_CSTR *pspecies_name = snames; *pspecies_name && !error; pspecies_name++) { 
     275                error = st_ml_add_quality_string_to_species(gb_main, filter, alignment_name, *pspecies_name, bucket_size, species2info, report, dest_field); 
     276                res_progress.inc_and_check_user_abort(error); 
     277            } 
     278        } 
     279 
    285280        free(snames); 
    286         GBS_free_hash(species_to_info_hash); 
     281        GBS_free_hash(species2info); 
    287282    } 
    288283 
  • branches/refactor/STAT/ST_window.cxx

    r6861 r7097  
    4848    GB_ERROR error = GB_push_transaction(st_ml->get_gb_main()); 
    4949    if (!error) { 
    50         error = st_ml->init_st_ml(tree_name, alignment_name, NULL, marked_only, st_ml->get_column_statistic(), true, NULL); 
     50        error = st_ml->init_st_ml(tree_name, alignment_name, NULL, marked_only, st_ml->get_column_statistic(), NULL); 
    5151        if (!error) st_ml->do_refresh(); 
    5252    } 
  • branches/refactor/STAT/st_ml.hxx

    r7084 r7097  
    174174                        int                   marked_only, 
    175175                        ColumnStat           *colstat, 
    176                         bool                  show_status, 
    177176                        const WeightedFilter *weighted_filter) __ATTR__USERESULT; 
    178177 
  • branches/refactor/TOOLS/Makefile

    r7089 r7097  
    8787arb_2_ascii.o: $(ARBHOME)/INCLUDE/arb_core.h 
    8888arb_2_ascii.o: $(ARBHOME)/INCLUDE/arb_error.h 
    89 arb_2_ascii.o: $(ARBHOME)/INCLUDE/arb_handlers.h 
    9089arb_2_ascii.o: $(ARBHOME)/INCLUDE/arb_msg.h 
    9190arb_2_ascii.o: $(ARBHOME)/INCLUDE/arb_string.h 
  • branches/refactor/TOOLS/arb_2_ascii.cxx

    r7088 r7097  
    1010 
    1111#include <arbdb.h> 
    12 #include <arb_handlers.h> 
    13  
    14 static void to_stderr(const char *msg) { 
    15     fprintf(stderr, "arb_2_ascii: %s\n", msg); 
    16 } 
    1712 
    1813int main(int argc, char **argv) { 
     
    5045 
    5146            if (!out || strcmp(out, "-") == 0) { 
    52                 saveflags      = "aS"; 
    53                 GB_install_information(to_stderr); 
    54                 GB_install_warning(to_stderr); 
     47                saveflags = "aS"; 
    5548            } 
    5649        } 
  • branches/refactor/UNIT_TESTER/Makefile.setup

    r7073 r7097  
    3939#RESTRICT_LIB=NTREE 
    4040#RESTRICT_LIB=SEQIO 
     41#RESTRICT_LIB=CORE 
    4142 
    4243#RESTRICT_LIB=SEQIO:CONVERTALN 
  • branches/refactor/WINDOW/AW_status.cxx

    r6952 r7097  
    5656#endif // DEBUG 
    5757 
    58 enum { 
     58enum StatusCommand { 
    5959    // messages send from status-process to main-process : 
    6060    AW_STATUS_OK    = 0, 
     
    6464    AW_STATUS_CMD_OPEN, 
    6565    AW_STATUS_CMD_CLOSE, 
     66    AW_STATUS_CMD_NEW_TITLE, 
    6667    AW_STATUS_CMD_TEXT, 
    6768    AW_STATUS_CMD_GAUGE, 
     
    7475    int        fd_to[2]; 
    7576    int        fd_from[2]; 
    76     int        mode; 
     77    bool       mode; 
    7778    int        hide; 
    7879    int        hide_delay;                          // in seconds 
     
    281282    if (cmd == AW_STATUS_CMD_TEXT || 
    282283            cmd == AW_STATUS_CMD_OPEN || 
     284            cmd == AW_STATUS_CMD_NEW_TITLE || 
    283285            cmd == AW_STATUS_CMD_MESSAGE) { 
    284286        char *p = buffer; 
     
    635637                break; 
    636638 
     639            case AW_STATUS_CMD_NEW_TITLE: 
     640#if defined(TRACE_STATUS) 
     641                fprintf(stderr, "received AW_STATUS_CMD_NEW_TITLE\n"); fflush(stdout); 
     642#endif // TRACE_STATUS 
     643#if defined(ARB_LOGGING) 
     644                aw_status_append_to_log(str); 
     645#endif // ARB_LOGGING 
     646                awr->awar(AWAR_STATUS_TITLE)->write_string(str); 
     647                break; 
     648 
    637649            case AW_STATUS_CMD_GAUGE: { 
    638650#if defined(TRACE_STATUS) 
     
    752764 
    753765void aw_initstatus() { 
     766    // fork status window. 
     767    // Note: call this function once as early as possible 
     768     
    754769    aw_assert(aw_stg.pid == 0);                     // do not init status twice! 
    755770    aw_assert(!AW_root::SINGLETON);                 // aw_initstatus has to be called before constructing AW_root 
     
    852867} 
    853868 
    854  
    855  
     869static void status_write_cmd_and_text(StatusCommand cmd, const char *text, int textlen) { 
     870    aw_status_write(aw_stg.fd_to[1], cmd); 
     871    safe_write(aw_stg.fd_to[1], text, textlen+1); 
     872} 
     873static void status_write_cmd_and_text(StatusCommand cmd, const char *text) { 
     874    if (!text) text = ""; 
     875    status_write_cmd_and_text(cmd, text, strlen(text)); 
     876} 
    856877 
    857878void aw_openstatus(const char *title) 
     
    862883        aw_status_write(aw_stg.fd_to[1], AW_STATUS_CMD_INIT); 
    863884    } 
    864     aw_status_write(aw_stg.fd_to[1], AW_STATUS_CMD_OPEN); 
    865     safe_write(aw_stg.fd_to[1], title, strlen(title)+1); 
    866 } 
    867  
    868 void aw_closestatus() 
    869 { 
     885    status_write_cmd_and_text(AW_STATUS_CMD_OPEN, title); 
     886} 
     887 
     888void aw_closestatus() { 
    870889    aw_status_write(aw_stg.fd_to[1], AW_STATUS_CMD_CLOSE); 
    871890} 
    872891 
    873 int aw_status(const char *text) { 
    874     if (!text) text = ""; 
    875  
    876     aw_status_write(aw_stg.fd_to[1], AW_STATUS_CMD_TEXT); 
    877     int len = strlen(text)+1; 
    878  
    879     safe_write(aw_stg.fd_to[1], text, len); 
    880  
    881     return aw_status(); 
    882 } 
    883  
    884 int aw_status(double gauge) { 
     892bool AW_status(const char *text) { 
     893    status_write_cmd_and_text(AW_STATUS_CMD_TEXT, text); 
     894    return AW_status(); 
     895} 
     896 
     897bool aw_status_title(const char *new_title) { 
     898    status_write_cmd_and_text(AW_STATUS_CMD_NEW_TITLE, new_title); 
     899    return AW_status(); 
     900} 
     901 
     902bool AW_status(double gauge) { 
    885903    static int last_val = -1; 
    886904    int        val      = (int)(gauge*AW_GAUGE_GRANULARITY); 
     
    894912        last_val = val; 
    895913    } 
    896     return aw_status(); 
    897 } 
    898  
    899 int aw_status() { 
     914    return AW_status(); 
     915} 
     916 
     917bool AW_status() { 
    900918    char *str = 0; 
    901919    int cmd; 
     
    932950            aw_status_write(aw_stg.fd_to[1], AW_STATUS_CMD_INIT); 
    933951        } 
    934         aw_status_write(aw_stg.fd_to[1], AW_STATUS_CMD_MESSAGE); 
    935         int len = strlen(msg)+1; 
    936         safe_write(aw_stg.fd_to[1], msg, len); 
     952        status_write_cmd_and_text(AW_STATUS_CMD_MESSAGE, msg); 
    937953    } 
    938954} 
  • branches/refactor/WINDOW/AW_window.cxx

    r7088 r7097  
    13791379} 
    13801380 
    1381 static void aw_message_dump_stderr(const char *msg) { 
     1381static void dump_stdout(const char *msg) { 
     1382    fprintf(stdout, "ARB: %s\n", msg); 
     1383} 
     1384static void aw_message_and_dump_stderr(const char *msg) { 
     1385    fflush(stdout); 
    13821386    fprintf(stderr, "ARB: %s\n", msg); // print to console as well 
     1387    fflush(stderr); 
    13831388    aw_message(msg); 
    13841389} 
     1390 
     1391static arb_status_implementation AW_status_impl = { 
     1392    AST_RANDOM,  
     1393    aw_openstatus, 
     1394    aw_closestatus, 
     1395    aw_status_title, // set_title 
     1396    AW_status, // set_subtitle 
     1397    AW_status, // set_gauge 
     1398    AW_status, // user_abort 
     1399}; 
     1400 
     1401static arb_handlers aw_handlers = { 
     1402    aw_message_and_dump_stderr, 
     1403    aw_message, 
     1404    dump_stdout, 
     1405    AW_status_impl,  
     1406}; 
    13851407 
    13861408void AW_root::init_root(const char *programname, bool no_exit) { 
     
    14001422    fallback_resources[i] = 0; 
    14011423 
    1402     GB_install_error_handler(aw_message_dump_stderr); 
    1403     GB_install_warning(aw_message); 
    1404     GB_install_information(NULL);                   // NULL means -> write to stdout only 
    1405     GB_install_status(aw_status, aw_status); 
    1406  
     1424    ARB_install_handlers(aw_handlers); 
     1425     
    14071426    // @@@ FIXME: the next line hangs if program runs inside debugger 
    14081427    p_r->toplevel_widget = XtOpenApplication(&(p_r->context), programname, 
  • branches/refactor/WINDOW/aw_root.hxx

    r7084 r7097  
    7474    KEY_RELEASED = 3 
    7575} AW_ProcessEventType; 
     76 
     77void aw_initstatus();  
    7678 
    7779class AW_root { 
  • branches/refactor/WINDOW/aw_status.hxx

    r6858 r7097  
    22//                                                                   // 
    33//   File      : aw_status.hxx                                       // 
    4 //   Purpose   : Provide aw_status and related functions             // 
     4//   Purpose   : Provide AW_status and related functions             // 
    55//                                                                   // 
    66//   Coded by Ralf Westram (coder@reallysoft.de) in September 2010   // 
     
    1313#define AW_STATUS_HXX 
    1414 
    15 #ifndef ARB_ASSERT_H 
    16 #include <arb_assert.h> 
    17 #endif 
    18 #ifndef ARBTOOLS_H 
    19 #include <arbtools.h> 
    20 #endif 
     15bool AW_status(const char *text); // return 1 if exit button is pressed + set statustext 
     16bool AW_status(double gauge);     // return 1 if exit button is pressed + set progress bar 
     17bool AW_status();                 // return 1 if exit button is pressed 
    2118 
    22  
    23 #ifndef aw_assert 
    24 #define aw_assert(bed) arb_assert(bed) 
    25 #endif 
    26  
    27 int aw_status(const char *text); // return 1 if exit button is pressed + set statustext 
    28 int aw_status(double gauge);     // return 1 if exit button is pressed + set progress bar 
    29 int aw_status();                 // return 1 if exit button is pressed 
     19bool aw_status_title(const char *text); // return 1 if exit button is pressed + set status title 
    3020 
    3121// --------------------- 
    3222//      progress bar 
    3323 
    34 void aw_initstatus();                  // call this function only once as early as possible 
    3524void aw_openstatus(const char *title); // show status 
    3625void aw_closestatus();                 // hide status 
    37  
    38 class aw_status_counter : Noncopyable { // progress object 
    39     int counter; 
    40     int maxcount; 
    41     int autoUpdateEvery; 
    42     int nextAutoUpdate; 
    43     bool aborted; 
    44  
    45     void track_abort(int aw_status_result) { if (aw_status_result) aborted = true; } 
    46     void init(int overallCount) { 
    47         counter         = 0; 
    48         maxcount        = overallCount; 
    49         autoUpdateEvery = overallCount <= 250 ? 1 : int(overallCount/250.0+0.5); 
    50         nextAutoUpdate  = counter+autoUpdateEvery; 
    51     } 
    52  
    53 public: 
    54     aw_status_counter(int overallCount) : aborted(false) { 
    55         init(overallCount); 
    56     } 
    57  
    58     void inc(int incr = 1) { 
    59         counter += incr; 
    60         aw_assert(counter <= maxcount); 
    61         if (counter >= nextAutoUpdate) { 
    62             update(); 
    63             nextAutoUpdate += autoUpdateEvery; 
    64         } 
    65     } 
    66     void update() { track_abort(aw_status(counter/double(maxcount))); } 
    67  
    68     bool aborted_by_user() const { return aborted; } 
    69     void restart(int overallCount) { init(overallCount); update(); } 
    70 }; 
    71  
    7226 
    7327#else