Skip to content

Commit 993610a

Browse files
committed
support rendering without buttons
1 parent 05ebda8 commit 993610a

File tree

1 file changed

+54
-43
lines changed

1 file changed

+54
-43
lines changed

src/backends/fltk_dialog.rs

Lines changed: 54 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -97,50 +97,53 @@ impl CustomFltkDialog {
9797
// End Icon row
9898
flex_icon_row.end();
9999

100-
// Start Button background
101-
let mut flex_button_background = Flex::default().column();
102-
flex_button_background.set_frame(FrameType::ThinUpBox);
100+
let mut btn_vec = Vec::new();
101+
102+
if !data.buttons.is_empty() {
103+
// Start Button background
104+
let mut flex_button_background = Flex::default().column();
105+
flex_button_background.set_frame(FrameType::ThinUpBox);
103106

104-
// Start Button row
105-
let mut flex_button_row = Flex::default().row();
106-
flex_button_row.set_spacing(theme.button_panel_spacing);
107-
flex_button_row.set_margin(theme.button_panel_margin);
107+
// Start Button row
108+
let mut flex_button_row = Flex::default().row();
109+
flex_button_row.set_spacing(theme.button_panel_spacing);
110+
flex_button_row.set_margin(theme.button_panel_margin);
108111

109-
// Padding frame
110-
let _ = Frame::default();
112+
// Padding frame
113+
let _ = Frame::default();
111114

112-
let mut btn_vec = Vec::new();
113115

114-
// Buttons
115-
let button_iter: Vec<(usize, &String)> = if theme.button_order_reversed {
116-
data.buttons.iter().enumerate().rev().collect()
117-
} else {
118-
data.buttons.iter().enumerate().collect()
119-
};
120-
for (index, button_text) in button_iter {
121-
let mut wnd_btn_click = wind.clone();
122-
let mut flex_button_wrapper = Flex::default().column();
123-
let mut button = CustomButton::new(theme);
124-
button.set_label(button_text.as_str());
125-
button.set_label_size(get_body_size());
126-
button.set_label_font(get_body_font());
127-
button.set_callback(move |_| {
128-
wnd_btn_click.hide();
129-
insert_result(id, XDialogResult::ButtonPressed(index));
130-
});
131-
flex_button_wrapper.end();
132-
let (w, _) = button.measure_label();
133-
flex_button_row.fixed(&mut flex_button_wrapper, w + (theme.button_text_padding * 2));
134-
135-
btn_vec.push(button);
136-
}
116+
// Buttons
117+
let button_iter: Vec<(usize, &String)> = if theme.button_order_reversed {
118+
data.buttons.iter().enumerate().rev().collect()
119+
} else {
120+
data.buttons.iter().enumerate().collect()
121+
};
122+
for (index, button_text) in button_iter {
123+
let mut wnd_btn_click = wind.clone();
124+
let mut flex_button_wrapper = Flex::default().column();
125+
let mut button = CustomButton::new(theme);
126+
button.set_label(button_text.as_str());
127+
button.set_label_size(get_body_size());
128+
button.set_label_font(get_body_font());
129+
button.set_callback(move |_| {
130+
wnd_btn_click.hide();
131+
insert_result(id, XDialogResult::ButtonPressed(index));
132+
});
133+
flex_button_wrapper.end();
134+
let (w, _) = button.measure_label();
135+
flex_button_row.fixed(&mut flex_button_wrapper, w + (theme.button_text_padding * 2));
136+
137+
btn_vec.push(button);
138+
}
137139

138-
// End Button row
139-
flex_button_row.end();
140+
// End Button row
141+
flex_button_row.end();
140142

141-
// End Button background
142-
flex_button_background.end();
143-
flex_root_col.fixed(&mut flex_button_background, theme.button_panel_height);
143+
// End Button background
144+
flex_button_background.end();
145+
flex_root_col.fixed(&mut flex_button_background, theme.button_panel_height);
146+
}
144147

145148
// End Root column
146149
flex_root_col.end();
@@ -149,10 +152,18 @@ impl CustomFltkDialog {
149152
wind.end();
150153

151154
// Before showing the window, try and compute the optimal window size.
152-
let icon_width = if has_icon { theme.main_icon_size + theme.default_content_margin } else { 0 };
153-
let progress_height = if has_progress { 5 + theme.default_content_margin } else { 0 };
154-
let pad_x = icon_width + (theme.default_content_margin * 2);
155-
let pad_y = (theme.default_content_margin * 2) + theme.button_panel_height + theme.main_icon_size + progress_height;
155+
let mut pad_y = theme.default_content_margin * 2 + theme.main_icon_size;
156+
if !data.buttons.is_empty() {
157+
pad_y += theme.button_panel_height;
158+
}
159+
if has_progress {
160+
pad_y += 10;
161+
}
162+
163+
let mut pad_x = theme.default_content_margin * 2;
164+
if has_icon {
165+
pad_x += theme.main_icon_size + theme.default_content_margin;
166+
}
156167

157168
let mut ret = Self {
158169
id,
@@ -252,6 +263,6 @@ fn calculate_ideal_window_size(body_text: &str, pad_x: i32, pad_y: i32) -> (i32,
252263

253264
let final_window_width = (window_width + extra_width).min(600).min(initial_width + pad_y).max(350);
254265
let (_, wrapped_height) = draw::wrap_measure(body_text, final_window_width - pad_x, true);
255-
let final_window_height = (wrapped_height + pad_y + line_height).max(130);
266+
let final_window_height = (wrapped_height + pad_y + line_height).max(110);
256267
(final_window_width, final_window_height)
257268
}

0 commit comments

Comments
 (0)