11from MLC .GUI .Tables .ConfigTableModel import ConfigTableModel
2- from MLC .GUI .util import test_individual_value
2+ from MLC .GUI .util import check_individual_value
33from MLC .Log .log import get_gui_logger
44from MLC .individual .Individual import Individual
55from MLC .mlc_parameters .mlc_parameters import Config
@@ -22,6 +22,10 @@ def __init__(self, parent, experiment_name, autogenerated_object, mlc_local):
2222 self ._mlc_local = mlc_local
2323
2424 def add_individual (self ):
25+ logger .debug ('[EXPERIMENT {0}] [FIRST_INDIVS_MANAGER] - '
26+ 'Executing add_individual function'
27+ .format (self ._experiment_name ))
28+
2529 indiv = QInputDialog .getText (self ._parent , "Add Individual" ,
2630 "Insert the value of the individual to be added." )
2731
@@ -37,11 +41,10 @@ def add_individual(self):
3741 return
3842
3943 indiv_value = indiv [0 ]
40- if test_individual_value (parent = self ._parent ,
41- experiment_name = self ._experiment_name ,
42- log_prefix = "[FIRST_INDIVS_MANAGER]" ,
43- indiv_value = indiv_value ,
44- config = Config .get_instance ()):
44+ if check_individual_value (parent = self ._parent ,
45+ experiment_name = self ._experiment_name ,
46+ log_prefix = "[FIRST_INDIVS_MANAGER]" ,
47+ indiv_value = indiv_value ):
4548 self ._individuals .append (indiv_value )
4649 self ._load_table ()
4750
@@ -53,13 +56,80 @@ def add_individual(self):
5356 .format (self ._experiment_name , indiv_value ))
5457
5558 def add_individuals_from_textfile (self ):
56- pass
57-
58- def modify_individual (self , indiv_index ):
59- pass
60-
61- def remove_individual (self , indiv_index ):
62- pass
59+ logger .debug ('[EXPERIMENT {0}] [FIRST_INDIVS_MANAGER] - '
60+ 'Executing add_individuals_from_textfile function'
61+ .format (self ._experiment_name ))
62+
63+ def modify_individual (self , left , right ):
64+ logger .debug ('[EXPERIMENT {0}] [FIRST_INDIVS_MANAGER] - '
65+ 'Executing modify_individual function'
66+ .format (self ._experiment_name ))
67+
68+ if len (self ._individuals ) == 0 :
69+ return
70+
71+ table_model = self ._first_indivs_table .model ()
72+ indiv_id = left .row ()
73+ old_value = self ._individuals [indiv_id ]
74+ new_value = table_model .get_data (left .row (), left .column ())
75+
76+ # Check if the value of the new individual is valid
77+ valid_indiv = check_individual_value (parent = self ._parent ,
78+ experiment_name = self ._experiment_name ,
79+ log_prefix = "[FIRST_INDIVS_MANAGER]" ,
80+ indiv_value = new_value )
81+ if not valid_indiv :
82+ table_model .set_data (left .row (), left .column (), old_value )
83+ return
84+
85+ response = QMessageBox .information (self ._parent ,
86+ "Editing Individual" ,
87+ "Do you really want to change value of the individual?" ,
88+ QMessageBox .No | QMessageBox .Yes ,
89+ QMessageBox .No )
90+
91+ if response == QMessageBox .No :
92+ # Restore the old value
93+ logger .info ('[EXPERIMENT {0}] [FIRST_INDIVS] - '
94+ 'Edition was canceled. Cell({1}, {2}) - Old value: {3}'
95+ .format (self ._experiment_name , left .row (),
96+ left .column (), old_value ))
97+ table_model .set_data (left .row (), left .column (), old_value )
98+ else :
99+ logger .info ('[EXPERIMENT {0}] [FIRST_INDIVS] - '
100+ 'Individual ({1}. {2}) was modified succesfully.'
101+ .format (self ._experiment_name , left .row (), new_value ))
102+ QMessageBox .information (self ._parent ,
103+ "Individual Edition" ,
104+ 'Individual was modified succesfully.' )
105+
106+ def remove_individual (self ):
107+ logger .debug ('[EXPERIMENT {0}] [FIRST_INDIVS_MANAGER] - '
108+ 'Executing remove_individual function'
109+ .format (self ._experiment_name ))
110+
111+ if len (self ._individuals ) == 0 :
112+ return
113+
114+ indiv_index = self ._first_indivs_table .selectionModel ().currentIndex ().row ()
115+ indiv_value = self ._individuals [indiv_index ]
116+
117+ response = QMessageBox .question (self ._parent ,
118+ "Remove Individual" ,
119+ "Do you really want to remove individual '{0}'"
120+ .format (indiv_value ),
121+ QMessageBox .No | QMessageBox .Yes ,
122+ QMessageBox .No )
123+ if response == QMessageBox .Yes :
124+ # Remove the individual
125+ logger .info ("[FIRST_INDIVS_MANAGER] Experiment {0} - "
126+ "Individual {1} was succesfully removed"
127+ .format (self ._experiment_name , indiv_value ))
128+ QMessageBox .information (self ._parent , "Individual Removed" ,
129+ "Individual {0} was succesfully removed"
130+ .format (indiv_value ))
131+ del self ._individuals [indiv_index ]
132+ self ._load_table ()
63133
64134 def get_gen_creator (self ):
65135 """
@@ -101,6 +171,9 @@ def _load_table(self):
101171 self ._first_indivs_table .resizeColumnsToContents ()
102172 self ._first_indivs_table .setVisible (True )
103173 self ._first_indivs_table .setSortingEnabled (True )
174+ table_model .set_editable_columns ([1 ])
175+ table_model .set_data_changed_callback (self .modify_individual )
176+ table_model .sort_by_col (0 )
104177
105178 def _test_individual_value (self , indiv_value ):
106179 """
0 commit comments