Skip to content

Commit 8aa514b

Browse files
committed
added scroll for side panels
1 parent b5ff4ab commit 8aa514b

2 files changed

Lines changed: 57 additions & 36 deletions

File tree

src/app/layout.rs

Lines changed: 35 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,7 @@ impl eframe::App for CurveFitApp {
5757
.frame(Self::side_panel_frame(panel_style))
5858
.show_inside(ui, |ui| {
5959
let language = self.ui_language;
60-
ui.spacing_mut().item_spacing = egui::vec2(10.0, 8.0);
61-
ui.set_width(ui.available_width());
60+
Self::setup_side_panel_content(ui);
6261
Self::panel_card_collapsible(
6362
ui,
6463
"left_section_tools",
@@ -86,40 +85,40 @@ impl eframe::App for CurveFitApp {
8685
.frame(Self::side_panel_frame(panel_style))
8786
.show_inside(ui, |ui| {
8887
let language = self.ui_language;
89-
ui.spacing_mut().item_spacing = egui::vec2(10.0, 8.0);
90-
ui.set_width(ui.available_width());
91-
Self::panel_card_collapsible_with_collapsed_trailing(
92-
self,
93-
ui,
94-
"right_section_model",
95-
tr(language, "Model", "Модель"),
96-
CurveFitApp::ui_family_and_params,
97-
CurveFitApp::ui_model_selector_compact,
98-
);
99-
Self::panel_card_collapsible_with_collapsed_trailing(
100-
self,
101-
ui,
102-
"right_section_metric",
103-
tr(language, "Optimization metric", "Метрика оптимизации"),
104-
CurveFitApp::ui_optimization_metric,
105-
CurveFitApp::ui_optimization_metric_selector_compact,
106-
);
107-
Self::panel_card_collapsible_with_collapsed_trailing(
108-
self,
109-
ui,
110-
"right_section_optimizer",
111-
tr(language, "Optimizer", "Оптимизатор"),
112-
CurveFitApp::ui_optimizer,
113-
CurveFitApp::ui_optimizer_action_button_compact,
114-
);
115-
Self::panel_card_collapsible(
116-
ui,
117-
"right_section_result",
118-
tr(language, "Result", "Результат"),
119-
|ui| {
120-
self.ui_result(ui);
121-
},
122-
);
88+
Self::right_side_panel_scroll_area(ui, |ui| {
89+
Self::panel_card_collapsible_with_collapsed_trailing(
90+
self,
91+
ui,
92+
"right_section_model",
93+
tr(language, "Model", "Модель"),
94+
CurveFitApp::ui_family_and_params,
95+
CurveFitApp::ui_model_selector_compact,
96+
);
97+
Self::panel_card_collapsible_with_collapsed_trailing(
98+
self,
99+
ui,
100+
"right_section_metric",
101+
tr(language, "Optimization metric", "Метрика оптимизации"),
102+
CurveFitApp::ui_optimization_metric,
103+
CurveFitApp::ui_optimization_metric_selector_compact,
104+
);
105+
Self::panel_card_collapsible_with_collapsed_trailing(
106+
self,
107+
ui,
108+
"right_section_optimizer",
109+
tr(language, "Optimizer", "Оптимизатор"),
110+
CurveFitApp::ui_optimizer,
111+
CurveFitApp::ui_optimizer_action_button_compact,
112+
);
113+
Self::panel_card_collapsible(
114+
ui,
115+
"right_section_result",
116+
tr(language, "Result", "Результат"),
117+
|ui| {
118+
self.ui_result(ui);
119+
},
120+
);
121+
});
123122
});
124123
self.track_right_panel_fit_changes_and_maybe_refit();
125124
}

src/app/ui.rs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,13 @@ const PANEL_CARD_CORNER_RADIUS: u8 = 7;
1616
const PANEL_CARD_OUTER_MARGIN_Y: i8 = 4;
1717
const PANEL_CARD_INNER_MARGIN_X: i8 = 10;
1818
const PANEL_CARD_INNER_MARGIN_Y: i8 = 8;
19+
const SIDE_PANEL_ITEM_SPACING_X: f32 = 10.0;
20+
const SIDE_PANEL_ITEM_SPACING_Y: f32 = 8.0;
1921
const SPLINE_KNOT_INPUTS_MAX_HEIGHT: f32 = 180.0;
2022
const RESULT_PARAMS_MAX_HEIGHT: f32 = 190.0;
2123
const COLLAPSING_ICON_SCALE: f32 = 1.5;
2224
const COLLAPSING_HEADER_TEXT_OFFSET_X: f32 = 4.0;
25+
const SETTINGS_PANEL_SCROLL_ID: &str = "settings_panel_scroll";
2326
const DIAGNOSTICS_SERIES_ID_LOSS: &str = "diagnostics_series_loss";
2427
const DIAGNOSTICS_SERIES_ID_MSE: &str = "diagnostics_series_mse";
2528
const DIAGNOSTICS_SERIES_ID_RMSE: &str = "diagnostics_series_rmse";
@@ -33,6 +36,25 @@ const DIAGNOSTICS_SELECTED_ITERATION_MARKER_ID_PARAMS: &str =
3336
"diagnostics_selected_iteration_marker_params";
3437

3538
impl CurveFitApp {
39+
pub(super) fn setup_side_panel_content(ui: &mut egui::Ui) {
40+
ui.spacing_mut().item_spacing =
41+
egui::vec2(SIDE_PANEL_ITEM_SPACING_X, SIDE_PANEL_ITEM_SPACING_Y);
42+
ui.set_width(ui.available_width());
43+
}
44+
45+
pub(super) fn right_side_panel_scroll_area(
46+
ui: &mut egui::Ui,
47+
add_contents: impl FnOnce(&mut egui::Ui),
48+
) {
49+
egui::ScrollArea::vertical()
50+
.id_salt(SETTINGS_PANEL_SCROLL_ID)
51+
.auto_shrink([false, false])
52+
.show(ui, |ui| {
53+
Self::setup_side_panel_content(ui);
54+
add_contents(ui);
55+
});
56+
}
57+
3658
pub(super) fn panel_card_frame(ui: &egui::Ui) -> egui::Frame {
3759
egui::Frame::group(ui.style())
3860
.inner_margin(egui::Margin::symmetric(

0 commit comments

Comments
 (0)