@@ -25,7 +25,8 @@ module treemap_renderer |
| 25 | get_node_center_by_index, find_node_in_direction, register_progress_callback, & | 25 | get_node_center_by_index, find_node_in_direction, register_progress_callback, & |
| 26 | scan_directory, invalidate_layout, get_current_view_node, remove_selected_node_from_view, & | 26 | scan_directory, invalidate_layout, get_current_view_node, remove_selected_node_from_view, & |
| 27 | clear_cache, toggle_file_extensions, toggle_age_based_coloring, toggle_size_display_mode, & | 27 | clear_cache, toggle_file_extensions, toggle_age_based_coloring, toggle_size_display_mode, & |
| 28 | - toggle_hidden_files, toggle_render_mode, set_redraw_widget, register_scan_completion_callback | 28 | + toggle_hidden_files, toggle_render_mode, set_redraw_widget, register_scan_completion_callback, & |
| | 29 | + set_renderer_state_from_tab |
| 29 | | 30 | |
| 30 | ! Callback interfaces for progress updates | 31 | ! Callback interfaces for progress updates |
| 31 | abstract interface | 32 | abstract interface |
@@ -209,6 +210,33 @@ contains |
| 209 | node_ptr => current_view_node | 210 | node_ptr => current_view_node |
| 210 | end function get_current_view_node | 211 | end function get_current_view_node |
| 211 | | 212 | |
| | 213 | + ! Set renderer state from tab (for tab switching) |
| | 214 | + subroutine set_renderer_state_from_tab(tab_root, tab_current_view, tab_has_data) |
| | 215 | + type(file_node), pointer, intent(in) :: tab_root, tab_current_view |
| | 216 | + logical, intent(in) :: tab_has_data |
| | 217 | + |
| | 218 | + print *, "=== SET_RENDERER_STATE_FROM_TAB ===" |
| | 219 | + print *, " tab_has_data: ", tab_has_data |
| | 220 | + |
| | 221 | + ! Update global renderer state to match the tab |
| | 222 | + has_data = tab_has_data |
| | 223 | + |
| | 224 | + if (tab_has_data .and. associated(tab_root)) then |
| | 225 | + ! Copy tab's tree data to renderer globals |
| | 226 | + root_node = tab_root |
| | 227 | + current_view_node => tab_current_view |
| | 228 | + print *, " Synced renderer to tab's tree data" |
| | 229 | + else |
| | 230 | + ! Empty tab - nullify current view |
| | 231 | + current_view_node => null() |
| | 232 | + has_data = .false. |
| | 233 | + print *, " Tab is empty - cleared renderer state" |
| | 234 | + end if |
| | 235 | + |
| | 236 | + ! Invalidate layout to force recalculation |
| | 237 | + layout_calculated = .false. |
| | 238 | + end subroutine set_renderer_state_from_tab |
| | 239 | + |
| 212 | ! Scan directory and prepare for rendering | 240 | ! Scan directory and prepare for rendering |
| 213 | subroutine scan_directory(path) | 241 | subroutine scan_directory(path) |
| 214 | use, intrinsic :: iso_c_binding | 242 | use, intrinsic :: iso_c_binding |