diff --git a/crates/csv_preview/src/csv_preview.rs b/crates/csv_preview/src/csv_preview.rs index 5287a19f9f75039e19873096d09caa7f0082787e..a1b10feea074f6e42974528a65b2b14ff46592bc 100644 --- a/crates/csv_preview/src/csv_preview.rs +++ b/crates/csv_preview/src/csv_preview.rs @@ -60,8 +60,7 @@ impl CsvPreviewView { let cols = self.engine.contents.headers.cols() + 1; let line_number_width = self.calculate_row_identifier_column_width(); - let mut widths: Vec = - vec![AbsoluteLength::Pixels(px(150.)); cols]; + let mut widths: Vec = vec![AbsoluteLength::Pixels(px(150.)); cols]; widths[0] = AbsoluteLength::Pixels(px(line_number_width)); let mut resize_behaviors = vec![TableResizeBehavior::Resizable; cols]; @@ -70,6 +69,12 @@ impl CsvPreviewView { self.column_widths.widths.update(cx, |state, _cx| { if state.cols() != cols { *state = ResizableColumnsState::new(cols, widths, resize_behaviors); + } else { + state.set_column_configuration( + 0, + AbsoluteLength::Pixels(px(line_number_width)), + TableResizeBehavior::None, + ); } }); } @@ -172,8 +177,7 @@ impl CsvPreviewView { column_widths: ColumnWidths::new(cx, 1), parsing_task: None, performance_metrics: PerformanceMetrics::default(), - list_state: gpui::ListState::new(contents.rows.len(), ListAlignment::Top, px(1.)) - .measure_all(), + list_state: gpui::ListState::new(contents.rows.len(), ListAlignment::Top, px(1.)), settings: CsvPreviewSettings::default(), last_parse_end_time: None, engine: TableDataEngine::default(), @@ -201,8 +205,7 @@ impl CsvPreviewView { // Update list state with filtered row count let visible_rows = self.engine.d2d_mapping().visible_row_count(); - self.list_state = gpui::ListState::new(visible_rows, ListAlignment::Top, px(1.)) - .measure_all(); + self.list_state = gpui::ListState::new(visible_rows, ListAlignment::Top, px(100.)); } pub fn resolve_active_item_as_csv_editor( diff --git a/crates/csv_preview/src/settings.rs b/crates/csv_preview/src/settings.rs index e627b3cc994a84f54268a05ba17534789f631fe0..9c64f6e9cfc8ff1cc570ffd9affbce1fd39eba23 100644 --- a/crates/csv_preview/src/settings.rs +++ b/crates/csv_preview/src/settings.rs @@ -1,10 +1,10 @@ #[derive(Default, Clone, Copy)] pub enum RowRenderMechanism { - /// Default behaviour - #[default] - VariableList, - /// More performance oriented, but all rows are same height + /// More correct for multiline content, but slower. #[allow(dead_code)] // Will be used when settings ui is added + VariableList, + /// Default behaviour for now while resizable columns are being stabilized. + #[default] UniformList, } diff --git a/crates/ui/src/components/data_table.rs b/crates/ui/src/components/data_table.rs index 905c6290c1f2caea6b959bc453255854defc7a84..594cc188f5489e2901d1501aca3af36d5273fefd 100644 --- a/crates/ui/src/components/data_table.rs +++ b/crates/ui/src/components/data_table.rs @@ -84,6 +84,18 @@ impl ResizableColumnsState { cx.notify(); } + pub fn set_column_configuration( + &mut self, + col_idx: usize, + width: impl Into, + resize_behavior: TableResizeBehavior, + ) { + let width = width.into(); + self.initial_widths[col_idx] = width; + self.widths[col_idx] = width; + self.resize_behavior[col_idx] = resize_behavior; + } + pub fn reset_column_to_initial_width(&mut self, col_idx: usize) { self.widths[col_idx] = self.initial_widths[col_idx]; }