1- """Data conversion widget displayed inside the LoopStructural dock ."""
1+ """Data conversion widgets and dialog for LoopStructural."""
22
33from __future__ import annotations
44
88from PyQt5 .QtCore import Qt
99from PyQt5 .QtWidgets import (
1010 QComboBox ,
11+ QDialog ,
12+ QDialogButtonBox ,
1113 QFormLayout ,
1214 QHBoxLayout ,
1315 QLabel ,
@@ -290,16 +292,16 @@ def _collect_data_sources(self) -> Dict[Datatype | str, str]:
290292 data_sources [data_type ] = path
291293 return data_sources
292294
293- def _handle_run_conversion (self ) -> None :
295+ def _handle_run_conversion (self ) -> bool :
294296 converter_option = self .current_converter ()
295297 if converter_option is None :
296298 self ._update_status ("Please select a converter before running." , error = True )
297- return
299+ return False
298300
299301 sources = self ._collect_data_sources ()
300302 if not sources :
301303 self ._update_status ("Select at least one data source layer before running." , error = True )
302- return
304+ return False
303305
304306 loop_converter : Any = None
305307 result : Any = None
@@ -314,7 +316,7 @@ def _handle_run_conversion(self) -> None:
314316 added_layers = self ._add_layers_to_project_group (layers )
315317 except Exception as exc : # pragma: no cover - UI feedback
316318 self ._update_status (f"Conversion failed: { exc } " , error = True )
317- return
319+ return False
318320
319321 if added_layers :
320322 message = (
@@ -325,6 +327,7 @@ def _handle_run_conversion(self) -> None:
325327 else :
326328 message = "Conversion completed successfully."
327329 self ._update_status (message )
330+ return True
328331
329332 def _update_status (self , message : str , * , error : bool = False ) -> None :
330333 color = "#c00000" if error else "#006400"
@@ -572,37 +575,38 @@ def _default_converter_options(self) -> List[ConverterOption]:
572575 return options
573576
574577
575- class DataConversionWidget ( QWidget ):
576- """High level widget that exposes automatic conversion."""
578+ class AutomaticConversionDialog ( QDialog ):
579+ """Dialog wrapper for the automatic conversion workflow ."""
577580
578581 def __init__ (
579582 self ,
580583 parent : Optional [QWidget ] = None ,
581584 * ,
582- data_manager : Any = None ,
583585 converters : Optional [Iterable [Any ]] = None ,
584586 project : Optional [QgsProject ] = None ,
585587 ):
586588 super ().__init__ (parent )
587- self .data_manager = data_manager
589+ self .setWindowTitle ( "Data Converter" )
588590 self .project = project or QgsProject .instance ()
589591
590592 layout = QVBoxLayout (self )
591593 description = QLabel ("Convert geological datasets for use within LoopStructural." )
592594 description .setWordWrap (True )
593595 layout .addWidget (description )
594596
595- self .automatic_widget = AutomaticConversionWidget (self , converters = converters , project = self .project )
596- layout .addWidget (self .automatic_widget )
597+ self .widget = AutomaticConversionWidget (self , converters = converters , project = self .project )
598+ layout .addWidget (self .widget )
599+ self .widget .run_button .hide ()
597600
598- def set_converters (self , converters : Iterable [Any ]) -> None :
599- """Update the converter options displayed in the automatic tab."""
600- self .automatic_widget .set_converters (converters )
601+ self .button_box = QDialogButtonBox (QDialogButtonBox .Ok | QDialogButtonBox .Cancel , self )
602+ self .button_box .accepted .connect (self ._run_and_accept )
603+ self .button_box .rejected .connect (self .reject )
604+ layout .addWidget (self .button_box )
601605
602- def get_active_configuration (self ) -> Dict [ str , Any ] :
603- """Return a serialisable summary of the current tab selection."""
604- converter = self .automatic_widget . current_converter ()
605- return {
606- "mode" : "automatic" ,
607- "converter" : converter . to_dict () if converter else None ,
608- }
606+ def _run_and_accept (self ) -> None :
607+ if self . widget . _handle_run_conversion ():
608+ self .accept ()
609+
610+ def set_converters ( self , converters : Iterable [ Any ]) -> None :
611+ """Update the converter options displayed in the dialog."""
612+ self . widget . set_converters ( converters )
0 commit comments