@@ -162,13 +162,25 @@ def toggle_export_all(self, checked):
162162 self .parent .set_export_all_series (self .current_file , checked )
163163 if not checked :
164164 self .series_selected (self .series_selector .currentIndex ())
165+ else :
166+ # When export all is enabled, ensure selected_series is also set
167+ self .parent .set_selected_series (self .current_file , 0 )
165168
166169 def set_file (self , filepath : str ):
167170 """Set the current file and update series list"""
168171 self .current_file = filepath
169172 self .series_selector .clear ()
170- self .export_all_checkbox .setChecked (False )
171- self .series_selector .setEnabled (True )
173+
174+ # Block signals to avoid triggering toggle_export_all during initialization
175+ self .export_all_checkbox .blockSignals (True )
176+
177+ # Check if this file already has export_all flag set
178+ export_all = self .parent .export_all_series .get (filepath , False )
179+ self .export_all_checkbox .setChecked (export_all )
180+ self .series_selector .setEnabled (not export_all )
181+
182+ # Re-enable signals
183+ self .export_all_checkbox .blockSignals (False )
172184
173185 try :
174186 file_loader = self .parent .get_file_loader (filepath )
@@ -2158,18 +2170,98 @@ def handle_format_toggle(self, checked: bool):
21582170 self .updating_format_buttons = False
21592171
21602172 def convert_files (self ):
2161- """Convert selected files"""
2173+ """Convert selected files - only converts the currently displayed file """
21622174 try :
2163- # Prepare conversion list
2164- if not self .selected_series :
2165- all_files = list (self .files_table .file_data .keys ())
2166- if not all_files :
2167- self .status_label .setText (
2168- "No files available for conversion"
2169- )
2170- return
2171- for filepath in all_files :
2172- self .selected_series [filepath ] = 0
2175+ # Get the currently displayed file from series_widget
2176+ current_file = self .series_widget .current_file
2177+
2178+ if not current_file :
2179+ self .status_label .setText (
2180+ "Please select a file from the table first"
2181+ )
2182+ return
2183+
2184+ # Ensure the current file is in selected_series
2185+ if current_file not in self .selected_series :
2186+ self .selected_series [current_file ] = 0
2187+
2188+ # Validate output folder
2189+ output_folder = self .output_edit .text ()
2190+ if not output_folder :
2191+ output_folder = os .path .join (
2192+ self .folder_edit .text (), "converted"
2193+ )
2194+
2195+ if not self ._validate_output_folder (output_folder ):
2196+ return
2197+
2198+ # Build conversion list - only for the current file
2199+ files_to_convert = []
2200+ filepath = current_file
2201+ series_index = self .selected_series .get (filepath , 0 )
2202+
2203+ if self .export_all_series .get (filepath , False ):
2204+ loader = self .get_file_loader (filepath )
2205+ if loader :
2206+ try :
2207+ series_count = loader .get_series_count (filepath )
2208+ for i in range (series_count ):
2209+ files_to_convert .append ((filepath , i ))
2210+ except (OSError , FileFormatError , ValueError ) as e :
2211+ self .status_label .setText (
2212+ f"Error getting series count: { str (e )} "
2213+ )
2214+ return
2215+ else :
2216+ files_to_convert .append ((filepath , series_index ))
2217+
2218+ if not files_to_convert :
2219+ self .status_label .setText ("No valid files to convert" )
2220+ return
2221+
2222+ # Start conversion
2223+ self ._start_conversion_worker (files_to_convert , output_folder )
2224+
2225+ except (OSError , PermissionError , ValueError ) as e :
2226+ QMessageBox .critical (
2227+ self ,
2228+ "Conversion Error" ,
2229+ f"Failed to start conversion: { str (e )} " ,
2230+ )
2231+
2232+ def _start_conversion_worker (
2233+ self , files_to_convert : List [Tuple [str , int ]], output_folder : str
2234+ ):
2235+ """Start the conversion worker thread"""
2236+ self .conversion_worker = ConversionWorker (
2237+ files_to_convert = files_to_convert ,
2238+ output_folder = output_folder ,
2239+ use_zarr = self .zarr_radio .isChecked (),
2240+ file_loader_func = self .get_file_loader ,
2241+ )
2242+
2243+ self .conversion_worker .progress .connect (
2244+ self .update_conversion_progress
2245+ )
2246+ self .conversion_worker .file_done .connect (self .handle_conversion_result )
2247+ self .conversion_worker .finished .connect (self .conversion_completed )
2248+
2249+ self .conversion_progress .setVisible (True )
2250+ self .conversion_progress .setValue (0 )
2251+ self .cancel_button .setVisible (True )
2252+ self .status_label .setText (
2253+ f"Converting { len (files_to_convert )} files/series..."
2254+ )
2255+
2256+ self .conversion_worker .start ()
2257+
2258+ def convert_all_files (self ):
2259+ """Convert all files with default settings"""
2260+ try :
2261+ all_files = list (self .files_table .file_data .keys ())
2262+ if not all_files :
2263+ self .status_label .setText ("No files available for conversion" )
2264+ return
21732265
21742266 # Validate output folder
21752267 output_folder = self .output_edit .text ()
@@ -2181,10 +2273,12 @@ def convert_files(self):
21812273 if not self ._validate_output_folder (output_folder ):
21822274 return
21832275
2184- # Build conversion list
2276+ # Build conversion list for all files
21852277 files_to_convert = []
2186- for filepath , series_index in self .selected_series .items ():
2187- if self .export_all_series .get (filepath , False ):
2278+ for filepath in all_files :
2279+ file_info = self .files_table .file_data .get (filepath )
2280+ if file_info and file_info .get ("series_count" , 0 ) > 1 :
2281+ # For files with multiple series, export all
21882282 loader = self .get_file_loader (filepath )
21892283 if loader :
21902284 try :
@@ -2197,36 +2291,15 @@ def convert_files(self):
21972291 )
21982292 return
21992293 else :
2200- files_to_convert .append ((filepath , series_index ))
2294+ # For single image files
2295+ files_to_convert .append ((filepath , 0 ))
22012296
22022297 if not files_to_convert :
22032298 self .status_label .setText ("No valid files to convert" )
22042299 return
22052300
22062301 # Start conversion
2207- self .conversion_worker = ConversionWorker (
2208- files_to_convert = files_to_convert ,
2209- output_folder = output_folder ,
2210- use_zarr = self .zarr_radio .isChecked (),
2211- file_loader_func = self .get_file_loader ,
2212- )
2213-
2214- self .conversion_worker .progress .connect (
2215- self .update_conversion_progress
2216- )
2217- self .conversion_worker .file_done .connect (
2218- self .handle_conversion_result
2219- )
2220- self .conversion_worker .finished .connect (self .conversion_completed )
2221-
2222- self .conversion_progress .setVisible (True )
2223- self .conversion_progress .setValue (0 )
2224- self .cancel_button .setVisible (True )
2225- self .status_label .setText (
2226- f"Converting { len (files_to_convert )} files/series..."
2227- )
2228-
2229- self .conversion_worker .start ()
2302+ self ._start_conversion_worker (files_to_convert , output_folder )
22302303
22312304 except (OSError , PermissionError , ValueError ) as e :
22322305 QMessageBox .critical (
@@ -2235,24 +2308,6 @@ def convert_files(self):
22352308 f"Failed to start conversion: { str (e )} " ,
22362309 )
22372310
2238- def convert_all_files (self ):
2239- """Convert all files with default settings"""
2240- self .selected_series .clear ()
2241- self .export_all_series .clear ()
2242-
2243- all_files = list (self .files_table .file_data .keys ())
2244- if not all_files :
2245- self .status_label .setText ("No files available for conversion" )
2246- return
2247-
2248- for filepath in all_files :
2249- self .selected_series [filepath ] = 0
2250- file_info = self .files_table .file_data .get (filepath )
2251- if file_info and file_info .get ("series_count" , 0 ) > 1 :
2252- self .export_all_series [filepath ] = True
2253-
2254- self .convert_files ()
2255-
22562311 def _validate_output_folder (self , folder : str ) -> bool :
22572312 """Validate output folder"""
22582313 if not folder :
0 commit comments