Show
Ignore:
Timestamp:
21/05/10 19:44:17 (2 years 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
Files:
1 modified

Legend:

Unmodified
Added
Removed
  • 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) {