Changeset 6666 for trunk

Show
Ignore:
Timestamp:
21/05/10 19:44:17 (21 months ago)
Author:
westram
Message:
  • AW_root
    • ctor initializes AWAR subsystem
    • made more clear that AW_root is a singleton
    • call dtor atexit; unlink AWARs from prop-DB and free memory (AW_window instances and releated mem still remain)
    • close properties DB
    • renamed some functions
  • AW_awar
    • added dtor
  • added AWT_create_root (necessary to add properties DB to DB-browser)
  • removed AWT_open_properties (done inside AW_root-ctor now)
  • EDIT properties
    • detect existing properties before constructing AW_root
  • removed AW_config_struct
Location:
trunk
Files:
29 modified

Legend:

Unmodified
Added
Removed
  • trunk/AWT/AWT_db_browser.cxx

    r6592 r6666  
    955955#endif // DEBUG 
    956956 
    957 AW_default AWT_open_properties(AW_root *aw_root, const char *default_name) { 
    958     AW_default aw_def = aw_root->open_default(default_name); 
     957AW_root *AWT_create_root(const char *properties, const char *program) { 
     958    AW_root *aw_root = new AW_root(properties, program, false); 
    959959#if defined(DEBUG) 
    960     if (aw_def) AWT_announce_properties_to_browser(aw_def, default_name); 
     960    AWT_announce_properties_to_browser(AW_ROOT_DEFAULT, properties); 
    961961#endif // DEBUG 
    962     return aw_def; 
    963 } 
    964  
     962    return aw_root; 
     963} 
    965964 
    966965// ------------------------ 
  • trunk/AWT/awt.hxx

    r6656 r6666  
    198198#endif // DEBUG 
    199199 
    200 AW_default AWT_open_properties(AW_root *aw_root, const char *default_name); 
     200AW_root *AWT_create_root(const char *properties, const char *program); 
    201201 
    202202void AWT_install_cb_guards(); 
  • trunk/DIST/DI_main.cxx

    r6656 r6666  
    5151    aw_initstatus(); 
    5252 
    53     AW_root    *aw_root    = new AW_root; 
    54     AW_default  aw_default = AWT_open_properties(aw_root, ".arb_prop/dist.arb"); 
    55  
    56     aw_root->init_variables(aw_default); 
    57     aw_root->init_root("ARB_DIST", false); 
     53    AW_root *aw_root = AWT_create_root(".arb_prop/dist.arb", "ARB_DIST"); 
    5854 
    5955    { 
     
    7571    } 
    7672 
    77     DI_create_matrix_variables(aw_root, aw_default, GLOBAL_gb_main); 
     73    DI_create_matrix_variables(aw_root, AW_ROOT_DEFAULT, GLOBAL_gb_main); 
    7874#ifdef FINDCORR 
    79     bc_create_bc_variables(aw_root, aw_default); 
     75    bc_create_bc_variables(aw_root, AW_ROOT_DEFAULT); 
    8076#endif 
    81     ARB_init_global_awars(aw_root, aw_default, GLOBAL_gb_main); 
     77    ARB_init_global_awars(aw_root, AW_ROOT_DEFAULT, GLOBAL_gb_main); 
    8278 
    83     AWT_graphic *awd = (AWT_graphic *)0; 
    84     AW_window   *aww = DI_create_matrix_window(aw_root); 
     79    AW_window *aww = DI_create_matrix_window(aw_root); 
    8580    aww->show(); 
    8681 
  • trunk/DIST/DI_matr.cxx

    r6659 r6666  
    110110    aw_root->awar_int(AWAR_DIST_MATRIX_DNA_ENABLED, 0)->add_callback(delete_matrix_cb); // user matrix disabled by default 
    111111    { 
    112         GBDATA *gbd = GB_search((GBDATA *)aw_root->application_database, AWAR_DIST_MATRIX_DNA_BASE, GB_FIND); 
     112        GBDATA *gbd = GB_search(AW_ROOT_DEFAULT, AWAR_DIST_MATRIX_DNA_BASE, GB_FIND); 
    113113        GB_add_callback(gbd, GB_CB_CHANGED, (GB_CB)delete_matrix_cb, 0); 
    114114    } 
     
    15221522    aws->create_menu("Properties", "P", AWM_ALL); 
    15231523    aws->insert_menu_topic("frame_props", "Frame ...",                                 "F", "props_frame.hlp", AWM_ALL, AW_POPUP, (AW_CL)AW_preset_window, 0); 
    1524     aws->insert_menu_topic("save_props",  "Save Properties (in ~/.arb_prop/dist.arb)", "S", "savedef.hlp",     AWM_ALL, (AW_CB)AW_save_defaults, 0, 0); 
     1524    aws->insert_menu_topic("save_props",  "Save Properties (in ~/.arb_prop/dist.arb)", "S", "savedef.hlp",     AWM_ALL, (AW_CB)AW_save_properties, 0, 0); 
    15251525 
    15261526    aws->insert_help_topic("help ...", "h", "dist.hlp", AWM_ALL, (AW_CB)AW_POPUP_HELP, (AW_CL)"dist.hlp", 0); 
  • trunk/EDIT4/ED4_main.cxx

    r6513 r6666  
    482482} 
    483483 
    484  
    485 static void openProperties() { 
    486     for (int mode = 0; mode <= 2; ++mode) { // search for defaults-database 
    487         const char *name  = ED4_propertyName(mode); 
    488         AW_default  found = ED4_ROOT->aw_root->open_default(name, mode == 2); // if mode == 2 -> create if missing 
    489  
    490         if (found) { 
    491             ED4_ROOT->props_db = found; 
    492             ED4_ROOT->db_name  = strdup(name); 
    493             break; 
    494         } 
    495     } 
    496  
    497     GB_informationf("Using properties from '%s'", ED4_ROOT->db_name); 
    498 #if defined(DEBUG) 
    499     AWT_announce_properties_to_browser(ED4_ROOT->props_db, ED4_ROOT->db_name); 
    500 #endif // DEBUG 
    501     ED4_ROOT->aw_root->init_variables(ED4_ROOT->props_db); // pass defaults 
    502 } 
    503  
    504484int main(int argc, char **argv) 
    505485{ 
     
    542522    } 
    543523 
     524    aw_initstatus(); 
     525 
    544526    GLOBAL_gb_main = GB_open(data_path, "rwt"); 
    545527    if (!GLOBAL_gb_main) 
     
    552534    AWT_announce_db_to_browser(GLOBAL_gb_main, GBS_global_string("ARB database (%s)", data_path)); 
    553535#endif // DEBUG 
     536 
    554537    ED4_ROOT = new ED4_root; 
    555  
    556     openProperties(); // open properties database 
    557  
    558     ED4_ROOT->aw_root->init_root("ARB_EDIT4", false); // initialize window-system 
    559538 
    560539    ED4_ROOT->database = new EDB_root_bact; 
     
    563542 
    564543    ED4_ROOT->st_ml = STAT_create_ST_ML(GLOBAL_gb_main); 
    565     ED4_ROOT->sequence_colors = new AWT_seq_colors((GBDATA *)ED4_ROOT->aw_root->application_database, (int)ED4_G_SEQUENCES, ED4_refresh_window, 0, 0); 
     544    ED4_ROOT->sequence_colors = new AWT_seq_colors(AW_ROOT_DEFAULT, ED4_G_SEQUENCES, ED4_refresh_window, 0, 0); 
    566545 
    567546    ED4_ROOT->edk = new ed_key; 
  • trunk/EDIT4/ED4_naligner.cxx

    r6422 r6666  
    151151} 
    152152 
    153 void ed_nalign_save(AW_window *aww) 
    154 { 
    155     AW_root *root = aww->get_root(); 
    156     root->save_default("naligner/aa"); 
    157 } 
    158  
    159153AW_window *create_expert_naligner_window(AW_root *root) 
    160154{ 
     
    168162    aws->create_button("CLOSE", "CLOSE", "C"); 
    169163 
    170     aws->at("save"); 
    171     aws->callback(ed_nalign_save); 
    172     aws->create_button("SAVE", "SAVE", "S"); 
    173  
    174164    aws->at("minw"); aws->create_input_field("naligner/minw", mwidth); 
    175165    aws->at("maxew"); aws->create_input_field("naligner/maxew", mwidth); 
     
    228218    aws->create_button("EXPERT_OPTIONS", "EXPERT2", "E"); 
    229219 
    230     aws->at("save"); 
    231     aws->callback(ed_nalign_save); 
    232     aws->create_button("SAAVE", "SAVE", "S"); 
    233  
    234220    return (AW_window *)aws; 
    235221} 
  • trunk/EDIT4/ED4_root.cxx

    r6513 r6666  
    12811281} 
    12821282 
    1283 static void ED4_save_defaults(AW_window *aw, AW_CL cl_mode, AW_CL) { 
     1283static void ED4_save_properties(AW_window *aw, AW_CL cl_mode, AW_CL) { 
    12841284    int mode = (int)cl_mode; 
    12851285 
    1286     AW_save_specific_defaults(aw, ED4_propertyName(mode)); 
     1286    AW_save_specific_properties(aw, ED4_propertyName(mode)); 
    12871287} 
    12881288 
     
    15891589 
    15901590        const char *entry = GBS_global_string("Save loaded Properties (~/%s)", db_name); 
    1591         awmm->insert_menu_topic("save_loaded_props", entry, "l", "e4_defaults.hlp", AWM_ALL, ED4_save_defaults, (AW_CL)default_mode, 0); 
     1591        awmm->insert_menu_topic("save_loaded_props", entry, "l", "e4_defaults.hlp", AWM_ALL, ED4_save_properties, (AW_CL)default_mode, 0); 
    15921592        SEP________________________SEP; 
    15931593 
     
    15961596            hotkey[0]     = "Pta"[mode]; 
    15971597            entry         = GBS_global_string("Save %sProperties (~/%s)", entry_type[mode], ED4_propertyName(mode)); 
    1598             awmm->insert_menu_topic(tag[mode], entry, hotkey, "e4_defaults.hlp", AWM_ALL, ED4_save_defaults, (AW_CL)mode, 0); 
     1598            awmm->insert_menu_topic(tag[mode], entry, hotkey, "e4_defaults.hlp", AWM_ALL, ED4_save_properties, (AW_CL)mode, 0); 
    15991599        } 
    16001600    } 
     
    18871887} 
    18881888 
    1889 ED4_root::ED4_root() 
    1890 { 
     1889static char *detectProperties() { 
     1890    char *propname = NULL; 
     1891 
     1892    for (int mode = 0; !propname && mode <= 2; ++mode) { // search for properties-database 
     1893        const char *fullprop = AW_root::property_DB_fullname(ED4_propertyName(mode)); 
     1894        if (mode == 2 || GB_is_regularfile(fullprop)) { 
     1895            freedup(propname, fullprop); 
     1896        } 
     1897    } 
     1898 
     1899    GB_informationf("Using properties from '%s'", propname); 
     1900    return propname; 
     1901} 
     1902 
     1903ED4_root::ED4_root() { 
    18911904    memset((char *)this, 0, sizeof(*this)); 
    18921905 
    1893     aw_root      = new AW_root; 
    1894     first_window = NULL; 
    1895     main_manager = NULL; 
    1896     database     = NULL; 
    1897     tmp_ed4w     = NULL; 
    1898     tmp_aww      = NULL; 
    1899     tmp_device   = NULL; 
    1900     temp_gc      = 0; 
    1901  
    1902     scroll_links.link_for_hor_slider = NULL; 
    1903     scroll_links.link_for_ver_slider = NULL; 
    1904  
    1905     folding_action = 0; 
    1906  
    1907     species_mode            = ED4_SM_MOVE; 
    1908     scroll_picture.scroll   = 0; 
    1909     scroll_picture.old_x    = 0; 
    1910     scroll_picture.old_y    = 0; 
    1911     middle_area_man         = NULL; 
    1912     top_area_man            = NULL; 
    1913     root_group_man          = NULL; 
    1914     ecoli_ref               = NULL; 
    1915     protstruct              = NULL; 
    1916     protstruct_len          = 0; 
    1917     column_stat_activated   = 0; 
    1918     column_stat_initialized = 0; 
    1919     visualizeSAI            = 0; 
    1920     visualizeSAI_allSpecies = 0; 
    1921  
    1922     aw_initstatus(); 
    1923 } 
    1924  
    1925  
    1926 ED4_root::~ED4_root() 
    1927 { 
     1906    db_name  = detectProperties(); 
     1907    aw_root  = AWT_create_root(db_name, "ARB_EDIT4"); 
     1908    props_db = AW_ROOT_DEFAULT; 
     1909 
     1910    species_mode = ED4_SM_MOVE; 
     1911} 
     1912 
     1913 
     1914ED4_root::~ED4_root() { 
    19281915    delete aw_root; 
    19291916    delete first_window; 
     
    19331920    delete database; 
    19341921    delete ecoli_ref; 
    1935     if (protstruct) free(protstruct); 
    1936 } 
     1922 
     1923    free(protstruct); 
     1924    free(db_name); 
     1925} 
  • trunk/EDIT4/ed4_class.hxx

    r6512 r6666  
    10401040    AW_root                 *aw_root;               // Points to 'AW-Window-Controller' 
    10411041    AW_default               props_db;              // Default Properties database 
    1042     const char              *db_name;               // name of Default Properties database 
     1042    char                    *db_name;               // name of Default Properties database 
    10431043    ED4_window              *first_window;          // Points to List of Main Windows of ED4 
    10441044    ED4_main_manager        *main_manager;          // Points to Main manager of ED4 
  • trunk/GENOM/GEN_map.cxx

    r6490 r6666  
    16321632    insert_menu_topic("gene_options",      "Options",  "O", "gene_options.hlp", AWM_ALL, AW_POPUP, (AW_CL)GEN_create_options_window, 0); 
    16331633    insert_menu_topic("gene_nds",          "NDS ( Select Gene Information ) ...",      "N", "props_nds.hlp",   AWM_ALL, AW_POPUP, (AW_CL)GEN_open_nds_window, (AW_CL)gb_main); 
    1634     insert_menu_topic("gene_save_props",   "Save Defaults (in ~/.arb_prop/ntree.arb)", "D", "savedef.hlp", AWM_ALL, (AW_CB) AW_save_defaults, 0, 0); 
     1634    insert_menu_topic("gene_save_props",   "Save Defaults (in ~/.arb_prop/ntree.arb)", "D", "savedef.hlp", AWM_ALL, (AW_CB) AW_save_properties, 0, 0); 
    16351635 
    16361636    // --------------------- 
  • trunk/MERGE/MG_main.cxx

    r6639 r6666  
    228228        } 
    229229 
    230         awm->insert_menu_topic("save_props", "Save properties (to ~/.arb_prop/ntree.arb)",              "p", "savedef.hlp", AWM_ALL,      (AW_CB)AW_save_defaults, 0, 0); 
     230        awm->insert_menu_topic("save_props", "Save properties (to ~/.arb_prop/ntree.arb)",              "p", "savedef.hlp", AWM_ALL,      (AW_CB)AW_save_properties, 0, 0); 
    231231 
    232232        awm->button_length(30); 
     
    418418} 
    419419 
    420 AW_window *create_MG_main_window(AW_root *aw_root) 
    421 { 
     420AW_window *create_MG_main_window(AW_root *aw_root) { 
    422421    MG_create_all_awars(aw_root, AW_ROOT_DEFAULT); 
    423422    AW_window *aww=create_merge_init_window(aw_root); 
  • trunk/NTREE/NT_extern.cxx

    r6639 r6666  
    399399void NT_save_as_cb(AW_window *aww) { 
    400400    char *filename = aww->get_root()->awar(AWAR_DB_PATH)->read_string(); 
    401     char *filetype = aww->get_root()->awar(AWAR_DB"type")->read_string(); 
     401    char *filetype = aww->get_root()->awar(AWAR_DB_TYPE)->read_string(); 
    402402 
    403403    GB_ERROR error = GB_save(GLOBAL_gb_main, filename, filetype); 
     
    431431    aws->at("type"); 
    432432    aws->label("Type "); 
    433     aws->create_option_menu(AWAR_DB"type"); 
     433    aws->create_option_menu(AWAR_DB_TYPE); 
    434434    aws->insert_option("Binary", "B", "b"); 
    435435    aws->insert_option("Bin (with FastLoad File)", "f", "bm"); 
     
    15381538            AWMIMT("!toggle_expert", "Toggle expert mode",                          "x", 0,           AWM_ALL, NT_toggle_expert_mode, 0, 0); 
    15391539            SEP________________________SEP(); 
    1540             AWMIMT("save_props",     "Save properties (in ~/.arb_prop/ntree.arb)",  "S", "savedef.hlp", AWM_ALL, (AW_CB) AW_save_defaults, 0, 0); 
     1540            AWMIMT("save_props",     "Save properties (in ~/.arb_prop/ntree.arb)",  "S", "savedef.hlp", AWM_ALL, (AW_CB) AW_save_properties, 0, 0); 
    15411541        } 
    15421542    } 
  • trunk/NTREE/NT_main.cxx

    r6428 r6666  
    248248            } 
    249249            else { 
    250                 aww->get_root()->awar(AWAR_DB"filter")->touch(); 
     250                aww->get_root()->awar(AWAR_DB_FILTER)->touch(); 
    251251            } 
    252252        } 
     
    389389    GB_set_verbose(); 
    390390 
    391     AW_root *aw_root = new AW_root; 
    392     GLOBAL_NT.awr    = aw_root; 
     391    AW_root *aw_root = AWT_create_root(".arb_prop/ntree.arb", "ARB_NT"); 
     392 
     393    GLOBAL_NT.awr = aw_root; 
    393394    MapViewer_set_default_root(aw_root);            // set default for launch_MapViewer_cb (as long as no info-box was opened) 
    394  
    395     AW_default aw_default = AWT_open_properties(aw_root, ".arb_prop/ntree.arb"); 
    396     aw_root->init_variables(aw_default); 
    397     aw_root->init_root("ARB_NT", false); 
    398395 
    399396    // create some early awars 
    400397    // Note: normally you don't like to add your awar-init-function here, but into nt_create_all_awars() 
    401398 
    402     AW_create_fileselection_awars(aw_root, AWAR_DB, "", ".arb", "noname.arb", aw_default); 
    403     aw_root->awar_string(AWAR_DB"type", "b", aw_default); 
    404  
    405     aw_root->awar_int(AWAR_EXPERT, 0, aw_default); 
    406  
    407     aw_root->awar_string(AWAR_DB_NAME, "noname.arb", aw_default); 
     399    AW_create_fileselection_awars(aw_root, AWAR_DB, "", ".arb", "noname.arb"); 
     400    aw_root->awar_string(AWAR_DB_TYPE, "b"); 
     401    aw_root->awar_string(AWAR_DB_NAME, "noname.arb"); 
    408402    aw_root->awar(AWAR_DB_PATH)->add_callback(AWAR_DB_PATH_changed_cb); 
    409403 
    410     init_Advisor(aw_root, aw_default); 
     404    aw_root->awar_int(AWAR_EXPERT, 0); 
     405     
     406    init_Advisor(aw_root); 
    411407    AWT_install_cb_guards(); 
    412408 
    413409    if (argc==3) {                                  // looks like merge 
    414410        if (argv[1][0] != '-') { // not if first argument is a switch 
    415             MG_create_all_awars(aw_root, aw_default, argv[1], argv[2]); 
     411            MG_create_all_awars(aw_root, AW_ROOT_DEFAULT, argv[1], argv[2]); 
    416412            nt_intro_start_merge(0, aw_root); 
    417413            aw_root->main_loop(); 
     
    454450 
    455451        if (strcmp(argv[1], "-export")==0) { 
    456             MG_create_all_awars(aw_root, aw_default, ":", "noname.arb"); 
     452            MG_create_all_awars(aw_root, AW_ROOT_DEFAULT, ":", "noname.arb"); 
    457453            GLOBAL_gb_merge = GBT_open(":", "rw", 0); 
    458454            if (!GLOBAL_gb_merge) { 
  • trunk/PARSIMONY/PARS_main.cxx

    r6592 r6666  
    14361436        awm->insert_menu_topic("props_tree2", "Tree: Settings ...",                      "T", "nt_tree_settings.hlp", AWM_ALL, AW_POPUP, (AW_CL)NT_create_tree_setting, (AW_CL)ntw); 
    14371437        awm->insert_menu_topic("props_kl",    "KERN. LIN ...",                           "K", "kernlin.hlp",          AWM_ALL, AW_POPUP, (AW_CL)create_kernighan_window, 0); 
    1438         awm->insert_menu_topic("save_props",  "Save Defaults (in ~/.arb_prop/pars.arb)", "D", "savedef.hlp",          AWM_ALL, (AW_CB)AW_save_defaults, 0, 0); 
     1438        awm->insert_menu_topic("save_props",  "Save Defaults (in ~/.arb_prop/pars.arb)", "D", "savedef.hlp",          AWM_ALL, (AW_CB)AW_save_properties, 0, 0); 
    14391439    } 
    14401440    awm->button_length(5); 
     
    17071707    aw_initstatus(); 
    17081708 
    1709     AW_root    *aw_root    = new AW_root; 
    1710     AW_default  aw_default = AWT_open_properties(aw_root, ".arb_prop/pars.arb"); 
    1711     aw_root->init_variables(aw_default); 
    1712     aw_root->init_root("ARB_PARS", false); 
    1713  
     1709    AW_root *aw_root      = AWT_create_root(".arb_prop/pars.arb", "ARB_PARS"); 
    17141710    AD_map_viewer_aw_root = aw_root; 
    17151711 
     
    17591755#endif // DEBUG 
    17601756 
    1761     pars_create_all_awars(aw_root, aw_default); 
     1757    pars_create_all_awars(aw_root, AW_ROOT_DEFAULT); 
    17621758 
    17631759    AW_window *aww = create_pars_init_window(aw_root, &cmds); 
  • trunk/PHYLO/PH_main.cxx

    r6501 r6666  
    483483    awm->insert_menu_topic("props_menu", "Menu: Colors and Fonts ...",                 "M", "props_frame.hlp",   AWM_ALL, AW_POPUP, (AW_CL)AW_preset_window,   0); 
    484484    awm->insert_menu_topic("props_data", "Data: Colors and Fonts ...",                 "D", "ph_props_data.hlp", AWM_ALL, AW_POPUP, (AW_CL)AW_create_gc_window, (AW_CL)gcmiddle); 
    485     awm->insert_menu_topic("save_props", "Save Properties (in ~/.arb_prop/phylo.arb)", "S", "savedef.hlp",       AWM_ALL,          (AW_CB)AW_save_defaults,    0, 0); 
     485    awm->insert_menu_topic("save_props", "Save Properties (in ~/.arb_prop/phylo.arb)", "S", "savedef.hlp",       AWM_ALL,          (AW_CB)AW_save_properties,    0, 0); 
    486486 
    487487 
     
    555555    aw_initstatus(); 
    556556 
    557     AW_root    *aw_root    = new AW_root; 
    558     AW_default  aw_default = AWT_open_properties(aw_root, ".arb_prop/phylo.arb"); 
    559     aw_root->init_variables(aw_default); 
    560     aw_root->init_root("ARB_PHYLO", false); 
    561  
    562  
     557    AW_root  *aw_root = AWT_create_root(".arb_prop/phylo.arb", "ARB_PHYLO"); 
    563558    PH_root  *ph_root = new PH_root; 
    564559    GB_ERROR  error   = ph_root->open(db_server); 
     
    569564 
    570565    // create arb_phylo awars : 
    571     PH_create_filter_variables(aw_root, aw_default); 
    572     PH_create_matrix_variables(aw_root, aw_default); 
    573     ARB_init_global_awars(aw_root, aw_default, GLOBAL_gb_main); 
     566    PH_create_filter_variables(aw_root, AW_ROOT_DEFAULT); 
     567    PH_create_matrix_variables(aw_root, AW_ROOT_DEFAULT); 
     568    ARB_init_global_awars(aw_root, AW_ROOT_DEFAULT, GLOBAL_gb_main); 
    574569#if defined(DEBUG) 
    575     AWT_create_db_browser_awars(aw_root, aw_default); 
     570    AWT_create_db_browser_awars(aw_root, AW_ROOT_DEFAULT); 
    576571#endif // DEBUG 
    577572 
  • trunk/PROBE_DESIGN/probe_design.cxx

    r6656 r6666  
    12231223} 
    12241224 
    1225 void probe_design_save_default(AW_window *aw, AW_default aw_def) 
    1226 { 
    1227     AW_root *aw_root = aw->get_root(); 
    1228     aw_root->save_default(aw_def, 0); 
    1229 } 
    1230  
    1231  
    12321225AW_window *create_probe_design_window(AW_root *root, AW_CL cl_gb_main) { 
    12331226    AW_window_simple *aws     = new AW_window_simple; 
  • trunk/SECEDIT/SEC_main.cxx

    r6422 r6666  
    704704} 
    705705 
    706 static void SEC_exit(GBDATA *gb_main, void *cl_sec_root) { 
     706#if defined(DEVEL_RALF) 
     707#warning use popdown callback for SEC_exit and valgrind open/close/open secedit  
     708#endif // DEVEL_RALF 
     709 
     710static void SEC_exit(GBDATA *, void *cl_sec_root) { 
    707711    SEC_root *sec_root = static_cast<SEC_root*>(cl_sec_root); 
    708712 
    709713    delete sec_root; 
     714    sec_root = NULL; 
    710715} 
    711716 
  • trunk/SL/GUI_ALIVIEW/AWT_filter.cxx

    r6490 r6666  
    194194    struct adfiltercbstruct *acbs   = new adfiltercbstruct; 
    195195    acbs->gb_main                   = gb_main; 
     196    AW_default               aw_def = AW_ROOT_DEFAULT; 
     197 
    196198    GB_push_transaction(acbs->gb_main); 
    197     AW_default               aw_def = aw_root->get_default(def_name); 
    198199 
    199200#if defined(DEBUG) 
  • trunk/WETC/WETC_main.cxx

    r6490 r6666  
    1616 
    1717int main(int argc, char **argv) { 
    18     if (argc <1) { 
    19         GB_export_error("Syntax: arb_wetc [-fileedit]"); 
    20         GB_print_error(); 
    21         exit(-1); 
     18    GB_ERROR error = NULL; 
     19 
     20    if (argc != 3) { 
     21        error = "Missing arguments"; 
     22    } 
     23    else { 
     24        const char *com  = argv[1]; 
     25        const char *file = argv[2]; 
     26 
     27        if (strcmp(com, "-fileedit") != 0) { 
     28            error = GBS_global_string("Unexpected parameter '%s'", com); 
     29        } 
     30        else { 
     31            AW_root *aw_root = AWT_create_root(".arb_prop/ntree.arb", "ARB_WETC"); 
     32 
     33            AWT_show_file(aw_root, file); 
     34            aw_root->window_hide(); 
     35            AWT_install_cb_guards(); 
     36            aw_root->main_loop(); 
     37 
     38        } 
    2239    } 
    2340 
    24     const char *com        = argv[1]; 
    25     AW_root    *aw_root    = new AW_root; 
    26     AW_default  aw_default = AWT_open_properties(aw_root, ".arb_prop/ntree.arb"); 
    27      
    28     aw_root->init_variables(aw_default); 
    29     aw_root->init_root("ARB_WETC", false); 
    30  
    31     if (!strcmp(com, "-fileedit")) { 
    32         AWT_show_file(aw_root, argv[2]); 
     41    if (error) { 
     42        fprintf(stderr, 
     43                "Syntax: arb_wetc -fileedit filename\n" 
     44                "Error: %s\n", 
     45                error); 
     46        return EXIT_FAILURE; 
    3347    } 
    34     else { 
    35         GB_export_error("wrong parameter, allowed: [-fileedit] file"); 
    36         GB_print_error(); 
    37         exit(-1); 
    38     } 
    39     aw_root->window_hide(); 
    40     AWT_install_cb_guards(); 
    41     aw_root->main_loop(); 
    42     return 0; 
     48    return EXIT_SUCCESS; 
    4349} 
    4450 
  • trunk/WINDOW/AW_advice.cxx

    r6490 r6666  
    3131// ------------------------- 
    3232 
    33 static bool        initialized  = false; 
    34 static AW_root    *advice_root  = 0; 
    35 static AW_default  advice_props = 0; 
     33static bool     initialized = false; 
     34static AW_root *advice_root = 0; 
    3635 
    3736// -------------------------------------------------------- 
    3837 
    39 void init_Advisor(AW_root *awr, AW_default def) 
    40 { 
     38void init_Advisor(AW_root *awr) { 
    4139    aw_assert(!initialized);   // can't init twice 
    4240 
    4341    advice_root  = awr; 
    44     advice_props = def; 
    4542 
    46     advice_root->awar_string(AWAR_ADVICE_TEXT, "<no advice>", advice_props); 
    47     advice_root->awar_int(AWAR_ADVICE_UNDERSTOOD, 0, advice_props); 
     43    advice_root->awar_string(AWAR_ADVICE_TEXT, "<no advice>"); 
     44    advice_root->awar_int(AWAR_ADVICE_UNDERSTOOD, 0); 
    4845 
    4946    initialized = true; 
     
    5552 
    5653static AW_awar *get_disabled_advices() { 
    57     return advice_root->awar_string(AWAR_ADVICE_DISABLED, "", advice_props); 
     54    return advice_root->awar_string(AWAR_ADVICE_DISABLED, ""); 
    5855} 
    5956 
  • trunk/WINDOW/AW_modal.cxx

    r6580 r6666  
    6969    aw_assert(buttons); 
    7070 
    71     AW_root *root = AW_root::THIS; 
     71    AW_root *root = AW_root::SINGLETON; 
    7272 
    7373    AW_window_message *aw_msg; 
     
    448448    static AW_window_message *aw_msg = 0; 
    449449 
    450     AW_root *root = AW_root::THIS; 
     450    AW_root *root = AW_root::SINGLETON; 
    451451    if (!aw_msg) create_input_awars(root); // first call -> create awars 
    452452 
     
    491491 
    492492char *aw_input2awar(const char *title, const char *prompt, const char *awar_name) { 
    493     AW_root *aw_root       = AW_root::THIS; 
     493    AW_root *aw_root       = AW_root::SINGLETON; 
    494494    AW_awar *awar          = aw_root->awar(awar_name); 
    495495    char    *default_value = awar->read_string(); 
     
    542542    AW_selection_list *& sel    = sd->sel; 
    543543 
    544     AW_root *root = AW_root::THIS; 
     544    AW_root *root = AW_root::SINGLETON; 
    545545    if (!aw_msg) create_input_awars(root); // first call -> create awars 
    546546 
     
    633633    // default_value is taken from and result is written back to awar 'awar_name' 
    634634 
    635     AW_root *aw_root       = AW_root::THIS; 
     635    AW_root *aw_root       = AW_root::SINGLETON; 
    636636    AW_awar *awar          = aw_root->awar(awar_name); 
    637637    char    *default_value = awar->read_string(); 
     
    648648 
    649649char *aw_file_selection(const char *title, const char *dir, const char *def_name, const char *suffix) { 
    650     AW_root *root = AW_root::THIS; 
     650    AW_root *root = AW_root::SINGLETON; 
    651651 
    652652    static AW_window_simple *aw_msg = 0; 
  • trunk/WINDOW/AW_nawar.cxx

    r6422 r6666  
    153153} 
    154154 
    155 AW_default aw_main_root_default = (AW_default) "this is a dummy text asfasf asfd"; 
    156  
    157 AW_default aw_check_default_file(AW_default root_default, AW_default default_file, const char *varname) 
    158 { 
    159     if (default_file == aw_main_root_default)  return root_default; 
    160     if (default_file == NULL) { 
    161         AW_ERROR("Creating variable '%s' with zero default file\n", varname); 
    162         return root_default; 
    163     } 
    164     return default_file; 
    165 } 
    166  
    167  
    168155// for string 
    169156AW_awar *AW_root::awar_string(const char *var_name, const char *default_value, AW_default default_file) { 
    170157    AW_awar *vs = (AW_awar *)GBS_read_hash(hash_table_for_variables, (char *)var_name); 
    171158    if (!vs) { 
    172         default_file = aw_check_default_file(this->application_database, default_file, var_name); 
     159        default_file = check_properties(default_file); 
    173160        vs           = new AW_awar(AW_STRING, var_name, default_value, 0, default_file, this); 
    174161        GBS_write_hash(hash_table_for_variables, (char *)var_name, (long)vs); 
     
    182169    AW_awar *vs = (AW_awar *)GBS_read_hash(hash_table_for_variables, (char *)var_name); 
    183170    if (!vs) { 
    184         default_file = aw_check_default_file(this->application_database, default_file, var_name); 
     171        default_file = check_properties(default_file); 
    185172        vs           = new AW_awar(AW_INT, var_name, (char *)default_value, 0, default_file, this); 
    186173        GBS_write_hash(hash_table_for_variables, (char *)var_name, (long)vs); 
     
    194181    AW_awar *vs = (AW_awar *)GBS_read_hash(hash_table_for_variables, (char *)var_name); 
    195182    if (!vs) { 
    196         default_file = aw_check_default_file(this->application_database, default_file, var_name); 
     183        default_file = check_properties(default_file); 
    197184        vs           = new AW_awar(AW_FLOAT, var_name, "", (double)default_value, default_file, this); 
    198185        GBS_write_hash(hash_table_for_variables, (char *)var_name, (long)vs); 
     
    204191    AW_awar *vs = (AW_awar *)GBS_read_hash(hash_table_for_variables, (char *)var_name); 
    205192    if (!vs) { 
    206         default_file = aw_check_default_file(this->application_database, default_file, var_name); 
     193        default_file = check_properties(default_file); 
    207194        vs           = new AW_awar(AW_POINTER, var_name, (const char *)default_value, NULL, default_file, this); 
    208195        GBS_write_hash(hash_table_for_variables, (char *)var_name, (long)vs); 
     
    641628} 
    642629 
    643  
    644  
    645 AW_default AW_root::open_default(const char *default_name, bool create_if_missing) 
    646 { 
    647     if (!create_if_missing) { // used to check for existing specific properties 
    648         const char *home   = GB_getenvHOME(); 
    649         char       *buffer = (char *)GB_calloc(sizeof(char), strlen(home) + strlen(default_name) + 2); 
    650  
    651         sprintf(buffer, "%s/%s", home, default_name); 
    652  
    653         struct stat st; 
    654         bool        found = stat(buffer, &st) == 0; 
    655  
    656         free(buffer); 
    657  
    658         if (!found) return 0; 
    659     } 
    660  
    661 #if defined(DEVEL_RALF) 
    662 #warning gb_default is never closed 
    663     // close it somewhere and call AWT_browser_forget_db as well 
    664 #endif // DEVEL_RALF 
    665  
     630AW_awar::~AW_awar() { 
     631    remove_all_target_vars(); 
     632    unlink(); 
     633    free(awar_name); 
     634} 
     635 
     636const char *AW_root::property_DB_fullname(const char *default_name) { 
     637    const char *home = GB_getenvHOME(); 
     638    return GBS_global_string("%s/%s", home, default_name); 
     639} 
     640 
     641bool AW_root::property_DB_exists(const char *default_name) { 
     642    return GB_is_regularfile(property_DB_fullname(default_name)); 
     643} 
     644 
     645AW_default AW_root::load_properties(const char *default_name) { 
    666646    GBDATA *gb_default = GB_open(default_name, "rwcD"); 
    667647 
     
    682662} 
    683663 
    684  
    685 AW_error *AW_root::save_default(const char *var_name) { 
    686     return save_default(var_name, NULL); 
    687 } 
    688  
    689 AW_error *AW_root::save_default(const char *var_name, const char *file_name) { 
    690     AW_awar *vs; 
    691     if ((vs = this->awar(var_name))) { 
    692         AW_root::save_default((AW_default)vs->gb_var, file_name); 
    693         return 0; 
    694     } 
    695     else { 
    696         AW_ERROR("AW_root::save_default: Variable %s not defined", var_name); 
    697     } 
    698     return 0; 
    699  
    700 } 
    701  
    702 AW_error *AW_root::save_default(AW_default aw_default, const char *file_name) 
    703 { 
    704     GBDATA *gb_main = GB_get_root((GBDATA *)aw_default); 
    705     GB_push_transaction(gb_main); 
    706     aw_update_awar_window_geometry(this); 
    707     GB_pop_transaction(gb_main); 
    708     GB_save_in_home(gb_main, file_name, "a"); 
    709     return 0; 
    710 } 
    711  
    712 AW_default AW_root::get_default(const char *varname) { 
    713     GBDATA      *gbd; 
    714     AW_awar *vs; 
    715     if ((vs = this->awar(varname))) { 
    716         gbd = vs->gb_var; 
    717         return (AW_default)GB_get_root(gbd); 
    718     } 
    719     else { 
    720         AW_ERROR("AW_root::get_default: Variable %s not defined", varname); 
    721     } 
    722     return 0; 
    723 } 
     664GB_ERROR AW_root::save_properties(const char *filename) { 
     665    GB_ERROR  error   = NULL; 
     666    GBDATA   *gb_main = application_database; 
     667 
     668    if (!gb_main) { 
     669        error = "No properties loaded - won't save"; 
     670    } 
     671    else { 
     672        error = GB_push_transaction(gb_main); 
     673        if (!error) { 
     674            aw_update_awar_window_geometry(this); 
     675            error = GB_pop_transaction(gb_main); 
     676            if (!error) error = GB_save_in_home(gb_main, filename, "a"); 
     677        } 
     678    } 
     679 
     680    return error; 
     681} 
     682 
    724683 
    725684AW_default AW_root::get_gbdata(const char *varname) { 
  • trunk/WINDOW/AW_preset.cxx

    r6422 r6666  
    2222#include <cstdarg> 
    2323 
    24 void AW_save_defaults(AW_window *aw) { 
    25     aw->get_root()->save_default("window/font"); 
    26 } 
    27  
    28 void AW_save_specific_defaults(AW_window *aw, const char *filename) {  // special version for EDIT4 
    29     aw->get_root()->save_default("window/font", filename); 
    30 } 
     24void AW_save_specific_properties(AW_window *aw, const char *filename) {  // special version for EDIT4 
     25    GB_ERROR error = aw->get_root()->save_properties(filename); 
     26    if (error) aw_message(error); 
     27} 
     28void AW_save_properties(AW_window *aw) { 
     29    AW_save_specific_properties(aw, NULL); 
     30} 
     31 
    3132 
    3233void aw_message_reload(AW_root *) { 
  • trunk/WINDOW/AW_status.cxx

    r6406 r6666  
    740740} 
    741741 
    742 void aw_initstatus() 
    743 { 
    744     int error; 
    745  
    746     aw_assert(aw_stg.pid == 0); // do not init status twice! 
    747  
    748     error = pipe(aw_stg.fd_to); 
     742static void create_status_awars(AW_root *aw_root) { 
     743    aw_root->awar_string(AWAR_STATUS_TITLE,   "------------------------------------"); 
     744    aw_root->awar_string(AWAR_STATUS_TEXT,    ""); 
     745    aw_root->awar_string(AWAR_STATUS_GAUGE,   "------------------------------------"); 
     746    aw_root->awar_string(AWAR_STATUS_ELAPSED, ""); 
     747    aw_root->awar_string(AWAR_ERROR_MESSAGES, ""); 
     748} 
     749 
     750void aw_initstatus() { 
     751    aw_assert(aw_stg.pid == 0);                     // do not init status twice! 
     752    aw_assert(!AW_root::SINGLETON);                 // aw_initstatus has to be called before constructing AW_root 
     753    aw_assert(GB_open_DBs() == 0);                  // aw_initstatus has to be called before opening the first ARB-DB 
     754 
     755    int error = pipe(aw_stg.fd_to); 
    749756    if (error) { 
    750757        printf("Cannot create socketpair\n"); 
     
    776783        aw_stg.is_child = true; // mark as child 
    777784 
    778         AW_root *aw_root; 
    779         aw_root = new AW_root; 
    780  
    781  
    782         AW_default aw_default = aw_root->open_default(".arb_prop/status.arb"); 
    783         aw_root->init_variables(aw_default); 
    784         aw_root->awar_string(AWAR_STATUS_TITLE, "------------------------------------", aw_default); 
    785         aw_root->awar_string(AWAR_STATUS_TEXT, "", aw_default); 
    786         aw_root->awar_string(AWAR_STATUS_GAUGE, "------------------------------------", aw_default); 
    787         aw_root->awar_string(AWAR_STATUS_ELAPSED, "", aw_default); 
    788         aw_root->awar_string(AWAR_ERROR_MESSAGES, "", aw_default); 
    789         aw_root->init_root("ARB_STATUS", true); 
     785        AW_root *aw_root = new AW_root(".arb_prop/status.arb", "ARB_STATUS", true); 
     786        create_status_awars(aw_root); 
    790787 
    791788        AW_window_simple *aws = new AW_window_simple; 
     
    924921#endif // DEBUG 
    925922    if (aw_stg.local_message) { 
    926         aw_insert_message_in_tmp_message(AW_root::THIS, msg); 
     923        aw_insert_message_in_tmp_message(AW_root::SINGLETON, msg); 
    927924    } 
    928925    else { 
  • trunk/WINDOW/AW_window.cxx

    r6549 r6666  
    5050#include <unistd.h> 
    5151 
    52 AW_root *AW_root::THIS = NULL; 
     52AW_root *AW_root::SINGLETON = NULL; 
    5353 
    5454AW_cb_struct::AW_cb_struct(AW_window *awi, void (*g)(AW_window*, AW_CL, AW_CL), AW_CL cd1i, AW_CL cd2i, 
     
    127127    return removed; 
    128128} 
    129  
    130 AW_config_struct::AW_config_struct(const char *idi, AW_active maski, Widget w, 
    131                                    const char *variable_namei, const char *variable_valuei, 
    132                                    AW_config_struct *nexti) 
    133 { 
    134     aw_assert(legal_mask(maski)); 
    135  
    136     id             = strdup(idi); 
    137     mask           = maski; 
    138     widget         = w; 
    139     variable_name  = strdup(variable_namei); 
    140     variable_value = strdup(variable_valuei); 
    141     next           = nexti; 
    142 } 
    143  
    144129 
    145130AW_option_struct::AW_option_struct(const char *variable_valuei, 
     
    269254} 
    270255 
    271 AW_root::AW_root() { 
     256static void destroy_AW_root() { 
     257    delete AW_root::SINGLETON; 
     258} 
     259 
     260AW_root::AW_root(const char *propertyFile, const char *program, bool no_exit) { 
     261    aw_assert(!AW_root::SINGLETON);                 // only one instance allowed 
     262    AW_root::SINGLETON = this; 
     263 
    272264    memset((char *)this, 0, sizeof(AW_root)); 
    273     this->THIS = this; 
    274     this->prvt = (AW_root_Motif *)GB_calloc(sizeof(AW_root_Motif), 1); 
     265 
     266    prvt = new AW_root_Motif; 
     267 
     268    init_variables(load_properties(propertyFile)); 
     269    init_root(program, no_exit); 
     270 
     271    atexit(destroy_AW_root); // do not call this before opening properties DB! 
    275272} 
    276273 
    277274AW_root::~AW_root() { 
     275    exit_variables(); 
     276    aw_assert(this == AW_root::SINGLETON); 
     277 
     278     
    278279    delete prvt; 
     280 
     281    free(program_name); 
     282 
     283    AW_root::SINGLETON = NULL; 
    279284} 
    280285 
     
    814819} 
    815820 
     821AW_root_Motif::AW_root_Motif() { 
     822    memset((char*)this, 0, sizeof(*this)); 
     823} 
     824 
     825AW_root_Motif::~AW_root_Motif() { 
     826    GBS_free_hash(action_hash); 
     827    XmFontListFree(fontlist); 
     828} 
     829 
    816830void AW_root_Motif::set_cursor(Display *d, Window w, Cursor c) { 
    817831    XSetWindowAttributes attrs; 
     
    12671281 
    12681282static struct fallbacks aw_fb[] = { 
    1269 // fallback awarname    init 
    1270  
    1271         { "FontList", "window/font", "8x13bold" }, { "background", 
    1272                 "window/background", "grey" }, { "foreground", 
    1273                 "window/foreground", "Black", } 
    1274 , { 0, "window/color_1", "red", } 
    1275 , { 0, "window/color_2", "green", } 
    1276 , { 0, "window/color_3", "blue", } 
    1277 , { 0, 0, 0 } 
     1283    // Name         fallback awarname    default value 
     1284    { "FontList",   "window/font",       "8x13bold" }, 
     1285    { "background", "window/background", "grey" }, 
     1286    { "foreground", "window/foreground", "Black", }, 
     1287    { 0,            "window/color_1",    "red", }, 
     1288    { 0,            "window/color_2",    "green", }, 
     1289    { 0,            "window/color_3",    "blue", }, 
     1290    { 0,            0,                   0 } 
    12781291}; 
    12791292 
    1280 static const char *aw_awar_2_color[] = { "window/background", 
    1281         "window/foreground", "window/color_1", "window/color_2", 
    1282         "window/color_3", 0 }; 
     1293static const char *aw_awar_2_color[] = { 
     1294    "window/background", 
     1295    "window/foreground", 
     1296    "window/color_1", 
     1297    "window/color_2", 
     1298    "window/color_3", 
     1299    0 
     1300}; 
     1301 
    12831302 
    12841303void AW_root::init_variables(AW_default database) { 
    1285     application_database = database; 
    1286  
     1304    application_database     = database; 
    12871305    hash_table_for_variables = GBS_create_hash(1000, GB_MIND_CASE); 
    12881306    hash_for_windows         = GBS_create_hash(100, GB_MIND_CASE); 
    12891307    prvt->action_hash        = GBS_create_hash(1000, GB_MIND_CASE); 
    1290     int i; 
    1291     for (i=0; i<1000; i++) { 
    1292         if (aw_fb[i].awar == 0) 
    1293             break; 
     1308 
     1309    for (int i=0; aw_fb[i].awar; ++i) { 
    12941310        awar_string(aw_fb[i].awar, aw_fb[i].init, application_database); 
     1311    } 
     1312} 
     1313 
     1314static long destroy_awar(const char *, long val, void *) { 
     1315    AW_awar *awar = (AW_awar*)val; 
     1316    delete   awar; 
     1317    return 0; // remove from hash 
     1318} 
     1319 
     1320void AW_root::exit_variables() { 
     1321    if (hash_table_for_variables) { 
     1322        GBS_hash_do_loop(hash_table_for_variables, destroy_awar, NULL); 
     1323        GBS_free_hash(hash_table_for_variables); 
     1324        hash_table_for_variables = NULL; 
     1325    } 
     1326 
     1327    if (hash_for_windows) { 
     1328        GBS_free_hash(hash_for_windows); 
     1329        hash_for_windows = NULL; 
     1330    } 
     1331 
     1332    if (application_database) { 
     1333        GBDATA *prop_main    = application_database; 
     1334        application_database = NULL; 
     1335        GB_close(prop_main); 
    12951336    } 
    12961337} 
     
    13131354    int i; 
    13141355    XColor xcolor_returned, xcolor_exakt; 
    1315     GBDATA *gbd = (GBDATA*)root->application_database; 
     1356    GBDATA *gbd = root->check_properties(NULL); 
    13161357    p_global->color_table = (unsigned long *)GB_calloc(sizeof(unsigned long), AW_COLOR_MAX); 
    13171358 
     
    14241465    p_r->button_list = 0; 
    14251466 
    1426     p_r->config_list = new AW_config_struct("", AWM_ALL, NULL, "Programmer Name", "SH", NULL); 
    1427     p_r->last_config = p_r->config_list; 
    1428  
    14291467    p_r->last_option_menu = p_r->current_option_menu = p_r->option_menu_list = NULL; 
    14301468    p_r->last_toggle_field = p_r->toggle_field_list = NULL; 
     
    15121550    memset(buffer, 0, 200); 
    15131551    sprintf(buffer, "window/%s/horizontal_page_increment", window_defaults_name); 
    1514     get_root()->awar_int(buffer, 50, get_root()->application_database); 
     1552    get_root()->awar_int(buffer, 50); 
    15151553    get_root()->awar(buffer)->add_callback( 
    15161554            (AW_RCB)horizontal_scrollbar_redefinition_cb, (AW_CL)this, 
     
    15181556 
    15191557    sprintf(buffer, "window/%s/vertical_page_increment", window_defaults_name); 
    1520     get_root()->awar_int(buffer, 50, get_root()->application_database); 
     1558    get_root()->awar_int(buffer, 50); 
    15211559    get_root()->awar(buffer)->add_callback((AW_RCB)vertical_scrollbar_redefinition_cb, 
    15221560            (AW_CL)this, (AW_CL)p_w->scroll_bar_vertical); 
    15231561 
    15241562    sprintf(buffer, "window/%s/scroll_delay_vertical", window_defaults_name); 
    1525     get_root()->awar_int(buffer, 20, get_root()->application_database); 
     1563    get_root()->awar_int(buffer, 20); 
    15261564    get_root()->awar(buffer)->add_callback((AW_RCB)vertical_scrollbar_redefinition_cb, 
    15271565            (AW_CL)this, (AW_CL)p_w->scroll_bar_vertical); 
    15281566 
    15291567    sprintf(buffer, "window/%s/scroll_delay_horizontal", window_defaults_name); 
    1530     get_root()->awar_int(buffer, 20, get_root()->application_database); 
     1568    get_root()->awar_int(buffer, 20); 
    15311569    get_root()->awar(buffer)->add_callback( 
    15321570            (AW_RCB)horizontal_scrollbar_redefinition_cb, (AW_CL)this, 
     
    15341572 
    15351573    sprintf(buffer, "window/%s/scroll_width_horizontal", window_defaults_name); 
    1536     get_root()->awar_int(buffer, 9, get_root()->application_database); 
     1574    get_root()->awar_int(buffer, 9); 
    15371575    get_root()->awar(buffer)->add_callback( 
    15381576            (AW_RCB)horizontal_scrollbar_redefinition_cb, (AW_CL)this, 
     
    15401578 
    15411579    sprintf(buffer, "window/%s/scroll_width_vertical", window_defaults_name); 
    1542     get_root()->awar_int(buffer, 20, get_root()->application_database); 
     1580    get_root()->awar_int(buffer, 20); 
    15431581    get_root()->awar(buffer)->add_callback((AW_RCB)vertical_scrollbar_redefinition_cb, 
    15441582            (AW_CL)this, (AW_CL)p_w->scroll_bar_vertical); 
     
    34593497{ 
    34603498 
    3461     AW_root *root = AW_root::THIS; 
     3499    AW_root *root = AW_root::SINGLETON; 
    34623500    char buffer[10000]; 
    34633501    { 
  • trunk/WINDOW/aw_advice.hxx

    r6408 r6666  
    3333 
    3434//! has to be called one time (before calling AW_advice) 
    35 void init_Advisor(AW_root *awr, AW_default def); 
     35void init_Advisor(AW_root *awr); 
    3636 
    3737/*! @brief Show a message box with an advice for the user 
  • trunk/WINDOW/aw_awars.hxx

    r6366 r6666  
    22#define AW_AWARS_HXX 
    33 
    4 #define AWAR_DB                "tmp/nt/arbdb/" 
    5 #define AWAR_DB_PATH           AWAR_DB "file_name" 
    6 #define AWAR_DB_NAME           AWAR_DB_PATH "_without_path" //  awar is automatically updated when AWAR_DB_PATH changes 
     4#define AWAR_DB        "tmp/nt/arbdb/" 
     5#define AWAR_DB_PATH   AWAR_DB "file_name" 
     6#define AWAR_DB_TYPE   AWAR_DB "type" 
     7#define AWAR_DB_FILTER AWAR_DB "filter" 
     8#define AWAR_DB_NAME   AWAR_DB_PATH "_without_path" //  awar is automatically updated when AWAR_DB_PATH changes 
     9 
    710#define AWAR_DEFAULT_ALIGNMENT "presets/use" 
    811 
  • trunk/WINDOW/aw_preset.hxx

    r6411 r6666  
    2121#define AWP_FONTSIZE_TEMPLATE "GCS/%s/MANAGE_GCS/%s/size" 
    2222 
    23 void AW_save_defaults(AW_window *aw);   // use this if you're unsure 
    24 void AW_save_specific_defaults(AW_window *aw, const char *filename); 
     23void AW_save_properties(AW_window *aw);   // use this if you're unsure 
     24void AW_save_specific_properties(AW_window *aw, const char *filename); 
    2525 
    2626AW_window *AW_preset_window(AW_root *root); 
  • trunk/WINDOW/aw_root.hxx

    r6508 r6666  
    1616#endif 
    1717 
    18  
    19 #define AW_ROOT_DEFAULT (aw_main_root_default) 
     18#define AW_ROOT_DEFAULT AW_root::SINGLETON->check_properties(NULL) 
     19 
    2020class        AW_root; 
    2121class        AW_window; 
    22 typedef long AW_CL;             // generic client data type (void *) 
     22typedef long AW_CL;                                 // generic client data type (void *) 
    2323 
    2424typedef void (*AW_RCB)(AW_root*, AW_CL, AW_CL); 
     
    3636typedef int         AW_font; 
    3737 
    38 extern AW_default aw_main_root_default; 
    39  
    4038typedef struct _WidgetRec *Widget; 
    4139 
    42 // #define AWUSE(variable) variable = variable 
    4340#if defined(DEBUG) && defined(DEVEL_RALF) && 0 
    4441#define AWUSE(variable) (void)variable; int DONT_USE_AWUSE_FOR_##variable 
     
    180177 
    181178class AW_root { 
     179    AW_default application_database; 
     180     
     181    void init_variables(AW_default database); 
     182    void exit_variables(); 
     183 
     184    void init_root(const char *programname, bool no_exit); 
     185    AW_default load_properties(const char *default_name); 
     186 
    182187public: 
    183     static  AW_root *THIS; 
    184     AW_root_Motif   *prvt;                          // Do not use !!! 
    185     bool             value_changed; 
    186     long             changer_of_variable; 
    187     int              y_correction_for_input_labels; 
    188     AW_active        global_mask; 
    189     GB_HASH         *hash_table_for_variables; 
    190     bool             variable_set_by_toggle_field; 
    191     int              number_of_toggle_fields; 
    192     int              number_of_option_menus; 
    193     char            *program_name; 
     188    static AW_root *SINGLETON; 
     189 
     190    AW_root_Motif *prvt;                            // Do not use !!! 
     191    bool           value_changed; 
     192    long           changer_of_variable; 
     193    int            y_correction_for_input_labels; 
     194    AW_active      global_mask; 
     195    GB_HASH       *hash_table_for_variables; 
     196    bool           variable_set_by_toggle_field; 
     197    int            number_of_toggle_fields; 
     198    int            number_of_option_menus; 
     199    char          *program_name; 
    194200 
    195201    void            *get_aw_var_struct(char *awar); 
     
    204210 
    205211    // the read only public section: 
    206     AW_default  application_database; 
    207212    short       font_width; 
    208213    short       font_height; 
     
    211216 
    212217    // the real public section: 
    213     AW_root(); 
     218    AW_root(const char *properties, const char *program, bool no_exit); 
    214219    ~AW_root(); 
     220 
    215221    enum { AW_MONO_COLOR, AW_RGB_COLOR }    color_mode; 
    216222 
    217     void init_variables(AW_default database); 
    218     void init_root(const char *programname, bool no_exit); 
    219223    void main_loop(); 
    220     void process_events();     // might block 
    221     void process_pending_events();     // non-blocking 
     224     
     225    void                process_events();           // might block 
     226    void                process_pending_events();   // non-blocking 
    222227    AW_ProcessEventType peek_key_event(AW_window *); 
    223228 
     
    245250    void unlink_awars_from_DB(GBDATA *gb_main);     // use before calling GB_close for 'gb_main', if you have AWARs in DB 
    246251 
    247     AW_default  open_default(const char *default_name, bool create_if_missing = true); 
    248     AW_error   *save_default(const char *awar_name); 
    249     AW_error   *save_default(const char *awar_name, const char *file_name); 
    250     AW_error   *save_default(AW_default aw_default, const char *file_name); 
    251     AW_default  get_default(const char *varname); 
    252     AW_default  get_gbdata(const char *varname); 
     252    static const char *property_DB_fullname(const char *default_name); 
     253    static bool        property_DB_exists(const char *default_name); 
     254 
     255    AW_default check_properties(AW_default aw_props) { 
     256        return aw_props ? aw_props : application_database; 
     257    } 
     258 
     259    GB_ERROR save_properties(const char *filename = NULL) __ATTR__USERESULT; 
     260 
     261    AW_default get_gbdata(const char *varname) __ATTR__DEPRECATED; // replace by awar + gb_var 
     262 
    253263 
    254264    // Control sensitivity of buttons etc.: 
     
    330340 
    331341    AW_awar(AW_VARIABLE_TYPE var_type, const char *var_name, const char *var_value, double var_double_value, AW_default default_file, AW_root *root); 
     342    ~AW_awar(); 
    332343 
    333344    AW_awar *add_callback(Awar_CB2 f, AW_CL cd1, AW_CL cd2); 
  • trunk/WINDOW/aw_window_Xm.hxx

    r6383 r6666  
    7474    AW_buttons_struct *next; 
    7575}; 
    76  
    77 struct AW_config_struct { 
    78     AW_config_struct(const char *idi, AW_active maski, Widget w, const char *variable_namei, const char *variable_valuei, AW_config_struct *nexti); 
    79  
    80     const char       *id; 
    81     AW_active         mask; 
    82     Widget            widget; 
    83     const char       *variable_name; 
    84     const char       *variable_value; 
    85     AW_config_struct *next; 
    86 }; 
    87  
    8876 
    8977struct AW_option_struct { 
     
    248236    AW_buttons_struct *button_list; 
    249237 
    250     AW_config_struct *config_list; 
    251     AW_config_struct *last_config; 
    252  
    253238    AW_option_menu_struct *option_menu_list; 
    254239    AW_option_menu_struct *last_option_menu; 
     
    279264    GB_HASH *action_hash; 
    280265 
    281     AW_root_Motif() {}; 
    282     ~AW_root_Motif() {}; 
     266    AW_root_Motif(); 
     267    ~AW_root_Motif(); 
    283268 
    284269    Widget get_last_widget() const { return last_widget; }