@@ -298,82 +298,82 @@ def _on_replicates_same_changed(self) -> None:
298298 self .flag_replicates_on_different_plates .set (False )
299299
300300 def _on_generate (self ) -> None :
301- """Handle generate button click."""
302- logger .info ("Generate DZN button clicked" )
303-
304- # Collect form data
305- form_data = DznFormData (
306- num_rows = self .num_rows .get (),
307- num_cols = self .num_cols .get (),
308- inner_empty_edge = self .inner_empty_edge .get (),
309- size_empty_edge = self .size_empty_edge .get (),
310- size_corner_empty_wells = self .size_corner_empty_wells .get (),
311- horizontal_cell_lines = self .horizontal_cell_lines .get (),
312- vertical_cell_lines = self .vertical_cell_lines .get (),
313- flag_allow_empty_wells = self .flag_allow_empty_wells .get (),
314- flag_concentrations_on_different_rows = self .flag_concentrations_on_different_rows .get (),
315- flag_concentrations_on_different_columns = self .flag_concentrations_on_different_columns .get (),
316- flag_replicates_on_different_plates = self .flag_replicates_on_different_plates .get (),
317- flag_replicates_on_same_plate = self .flag_replicates_on_same_plate .get (),
318- compounds_dict = self .drugs .get (),
319- controls_dict = self .controls .get ()
320- )
321- self .button_generate .config (state = tk .DISABLED , text = 'Generating...' )
322- self .window .update_idletasks ()
301+ """Handle generate button click."""
302+ logger .info ("Generate DZN button clicked" )
323303
324- try :
325- # Step 1: UI-level validation
326- errors = self .controller .validate_form_data (form_data )
327- if errors :
328- logger .warning (f"DZN validation failed: { len (errors )} errors" )
329- error_message = '\n ' .join ([f"{ i + 1 } . { err } " for i , err in enumerate (errors )])
330- messagebox .showerror ("Input Validation Error" , error_message )
331- return
304+ # Collect form data
305+ form_data = DznFormData (
306+ num_rows = self .num_rows .get (),
307+ num_cols = self .num_cols .get (),
308+ inner_empty_edge = self .inner_empty_edge .get (),
309+ size_empty_edge = self .size_empty_edge .get (),
310+ size_corner_empty_wells = self .size_corner_empty_wells .get (),
311+ horizontal_cell_lines = self .horizontal_cell_lines .get (),
312+ vertical_cell_lines = self .vertical_cell_lines .get (),
313+ flag_allow_empty_wells = self .flag_allow_empty_wells .get (),
314+ flag_concentrations_on_different_rows = self .flag_concentrations_on_different_rows .get (),
315+ flag_concentrations_on_different_columns = self .flag_concentrations_on_different_columns .get (),
316+ flag_replicates_on_different_plates = self .flag_replicates_on_different_plates .get (),
317+ flag_replicates_on_same_plate = self .flag_replicates_on_same_plate .get (),
318+ compounds_dict = self .drugs .get (),
319+ controls_dict = self .controls .get ()
320+ )
321+ self .button_generate .config (state = tk .DISABLED , text = 'Generating...' )
322+ self .window .update_idletasks ()
332323
333- # Step 2: Model compatibility validation
334- verdict = self .controller .validate_model_compat (form_data )
324+ try :
325+ # Step 1: UI-level validation
326+ errors = self .controller .validate_form_data (form_data )
327+ if errors :
328+ logger .warning (f"DZN validation failed: { len (errors )} errors" )
329+ error_message = '\n ' .join ([f"{ i + 1 } . { err } " for i , err in enumerate (errors )])
330+ messagebox .showerror ("Input Validation Error" , error_message )
331+ return
335332
336- if verdict .both_blocked ():
337- msg = _format_verdict_message (verdict )
338- messagebox .showerror ("Incompatible with All Models" , msg )
339- return
333+ # Step 2: Model compatibility validation
334+ verdict = self .controller .validate_model_compat (form_data )
340335
341- if verdict .any_issues ():
342- msg = _format_verdict_message (verdict )
343- proceed = messagebox .askokcancel ("Model Compatibility Warnings" , msg +
344- "\n \n Proceed with file generation?" )
345- if not proceed :
346- return
336+ if verdict .both_blocked ():
337+ msg = _format_verdict_message (verdict )
338+ messagebox .showerror ("Incompatible with All Models" , msg )
339+ return
347340
348- # Step 3: Generate and save
349- dzn_content , control_names = self .controller .generate_dzn_content (form_data , verdict )
350- logger .info (f"DZN content generated: { len (dzn_content )} characters" )
351-
352- # Save via controller
353- file_path = self .controller .save_dzn_file (dzn_content )
341+ if verdict .any_issues ():
342+ msg = _format_verdict_message (verdict )
343+ proceed = messagebox .askokcancel ("Model Compatibility Warnings" , msg +
344+ "\n \n Proceed with file generation?" )
345+ if not proceed :
346+ return
347+
348+ # Step 3: Generate and save
349+ dzn_content , control_names = self .controller .generate_dzn_content (form_data , verdict )
350+ logger .info (f"DZN content generated: { len (dzn_content )} characters" )
351+
352+ # Save via controller
353+ file_path = self .controller .save_dzn_file (dzn_content )
354+
355+ if file_path :
356+ logger .info (f"DZN saved successfully: { file_path } " )
354357
355- if file_path :
356- logger .info (f"DZN saved successfully: { file_path } " )
357-
358- # Notify callback
359- self .on_generation_complete (
360- file_path ,
361- form_data .num_rows ,
362- form_data .num_cols ,
363- str (control_names )
364- )
365-
366- # Hide window
367- self .hide ()
368- self .parent .focus_force ()
369- else :
370- logger .info ("DZN save cancelled by user" )
358+ # Notify callback
359+ self .on_generation_complete (
360+ file_path ,
361+ form_data .num_rows ,
362+ form_data .num_cols ,
363+ str (control_names )
364+ )
371365
372- except Exception as e :
373- logger .error (f"DZN generation failed: { e } " )
374- messagebox .showerror ("Error" , f"DZN generation failed:\n { str (e )} " )
375- finally :
376- self .button_generate .config (state = tk .NORMAL , text = 'Generate *.dzn file' )
366+ # Hide window
367+ self .hide ()
368+ self .parent .focus_force ()
369+ else :
370+ logger .info ("DZN save cancelled by user" )
371+
372+ except Exception as e :
373+ logger .error (f"DZN generation failed: { e } " )
374+ messagebox .showerror ("Error" , f"DZN generation failed:\n { str (e )} " )
375+ finally :
376+ self .button_generate .config (state = tk .NORMAL , text = 'Generate *.dzn file' )
377377
378378 def _on_close (self ) -> None :
379379 """Handle window close button."""
0 commit comments