@@ -257,6 +257,18 @@ def _config_table_edited(self, left, right):
257257 .format (self ._experiment_name , section , parameter , value ))
258258 self ._autogenerated_object .save_config_button .setDisabled (False )
259259
260+ def _get_db_view_stored_value (self , model_index , table_model , indiv_id ):
261+ indiv_data = self ._mlc_local .get_individual (self ._experiment_name , indiv_id )
262+ old_value = None
263+
264+ if model_index .column () == 4 :
265+ # Cost modified
266+ old_value = indiv_data .get_cost_history ()[self ._current_gen ][0 ][0 ]
267+ elif model_index .column () == 5 :
268+ # Value modified
269+ old_value = indiv_data .get_value ()
270+ return old_value
271+
260272 def _db_view_edited (self , left , right ):
261273 db_view = self ._autogenerated_object .db_view
262274 table_model = db_view .model ()
@@ -269,24 +281,31 @@ def _db_view_edited(self, left, right):
269281 indiv_id = int (table_model .get_data (left .row (), 1 ))
270282 if response == QMessageBox .No :
271283 # Get the value stored in the database
272- indiv_data = self ._mlc_local .get_individual (self ._experiment_name , indiv_id )
273-
274- if left .column () == 4 :
275- # Cost modified
276- old_value = indiv_data .get_cost_history ()[self ._current_gen ][0 ][0 ]
277- logger .info ('[EXPERIMENT {0}] [DB_VIEW_EDITED] - '
278- 'Edition was canceled. Cell({1}, {2}) - Old value: {3}'
279- .format (self ._experiment_name , left .row (),
280- left .column (), old_value ))
281- table_model .set_data (left .row (), left .column (), str (old_value ))
282- elif left .column () == 5 :
283- # Value modified
284- # TODO:
285- pass
284+ old_value = self ._get_db_view_stored_value (model_index = left ,
285+ table_model = table_model ,
286+ indiv_id = indiv_id )
287+ logger .info ('[EXPERIMENT {0}] [DB_VIEW_EDITED] - '
288+ 'Edition was canceled. Cell({1}, {2}) - Old value: {3}'
289+ .format (self ._experiment_name , left .row (),
290+ left .column (), old_value ))
291+ table_model .set_data (left .row (), left .column (), str (old_value ))
286292 else :
287293 value = table_model .get_data (left .row (), left .column ())
288294
289295 if left .column () == 4 :
296+ try :
297+ float (value )
298+ except ValueError :
299+ logger .info ("[EXPERIMENT {0}] [DB_VIEW_EDITED] - "
300+ "Cost inserted is not valid. Individual won't be updated)" )
301+ QMessageBox .critical (self , "Invalid cost" ,
302+ "Cost inserted is not valid. Individual won't be updated " )
303+ old_value = self ._get_db_view_stored_value (model_index = left ,
304+ table_model = table_model ,
305+ indiv_id = indiv_id )
306+ table_model .set_data (left .row (), left .column (), str (old_value ))
307+ return
308+
290309 logger .info ('[EXPERIMENT {0}] [DB_VIEW_EDITED] - '
291310 'Updating database. Cell ({1}, {2}) - Value: {3}'
292311 .format (self ._experiment_name , left .row (),
@@ -296,6 +315,8 @@ def _db_view_edited(self, left, right):
296315 new_cost = float (value ),
297316 new_ev_time = time .time (),
298317 generation = self ._current_gen )
318+ QMessageBox .information (self , "Experiment updated" ,
319+ "Individual was succesfully updated" )
299320 elif left .column () == 5 :
300321 # TODO
301322 pass
@@ -382,7 +403,10 @@ def _update_experiment_info(self):
382403 self ._current_gen = 1
383404
384405 header = ['Population Index' , 'Individual Index' , 'Gen Method' , 'Appearences' , 'Cost' , 'Value' ]
385- editable_columns = [4 , 5 ]
406+ # TODO: Add support for value edition
407+ # editable_columns = [4, 5]
408+ editable_columns = [4 ]
409+
386410 table_model = ConfigTableModel ("DB TABLE" , self ._individuals_per_generation [self ._current_gen - 1 ],
387411 header , self )
388412 db_view = self ._autogenerated_object .db_view
0 commit comments