feat: 优化三栏结果显示布局
This commit is contained in:
@@ -288,79 +288,78 @@ impl FlomoAiApp {
|
|||||||
ui.add_space(6.0);
|
ui.add_space(6.0);
|
||||||
|
|
||||||
let available_width = ui.available_width();
|
let available_width = ui.available_width();
|
||||||
let column_width = (available_width - 10.0) / 3.0;
|
let column_width = (available_width - 16.0) / 3.0;
|
||||||
|
|
||||||
ui.horizontal(|ui| {
|
ui.horizontal(|ui| {
|
||||||
|
ui.set_height(200.0);
|
||||||
for (i, display) in self.model_displays.iter().enumerate() {
|
for (i, display) in self.model_displays.iter().enumerate() {
|
||||||
if i > 0 {
|
if i > 0 {
|
||||||
ui.add_space(5.0);
|
ui.add_space(8.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
ui.set_min_width(column_width);
|
ui.set_min_width(column_width);
|
||||||
ui.set_max_width(column_width);
|
|
||||||
|
|
||||||
ui.vertical(|ui| {
|
|
||||||
ui.set_width(column_width);
|
|
||||||
|
|
||||||
let bg_color = if display.enabled {
|
|
||||||
ui.style().visuals.widgets.inactive.bg_fill
|
|
||||||
} else {
|
|
||||||
egui::Color32::from_rgb(240, 240, 240)
|
|
||||||
};
|
|
||||||
|
|
||||||
egui::Frame::none()
|
egui::Frame::none()
|
||||||
.fill(bg_color)
|
.fill(ui.style().visuals.widgets.inactive.bg_fill)
|
||||||
.stroke(egui::Stroke::new(1.0, egui::Color32::from_rgb(200, 200, 210)))
|
.stroke(egui::Stroke::new(1.0, egui::Color32::from_rgb(180, 180, 200)))
|
||||||
.rounding(6.0)
|
.rounding(8.0)
|
||||||
.inner_margin(egui::Margin::same(8.0))
|
.inner_margin(egui::Margin::same(10.0))
|
||||||
.show(ui, |ui| {
|
.show(ui, |ui| {
|
||||||
let status_color = match &display.status {
|
ui.set_min_width(column_width - 20.0);
|
||||||
ModelStatus::Waiting => egui::Color32::GRAY,
|
|
||||||
ModelStatus::Loading => egui::Color32::from_rgb(255, 165, 0),
|
let enabled_color = if display.enabled {
|
||||||
ModelStatus::Completed => egui::Color32::from_rgb(0, 180, 0),
|
egui::Color32::from_rgb(80, 80, 220)
|
||||||
ModelStatus::Error(_) => egui::Color32::RED,
|
} else {
|
||||||
|
egui::Color32::GRAY
|
||||||
};
|
};
|
||||||
|
|
||||||
let enabled_dot = if display.enabled { "●" } else { "○" };
|
let enabled_dot = if display.enabled { "●" } else { "○" };
|
||||||
ui.label(egui::RichText::new(format!("{} {}", enabled_dot, display.name))
|
ui.label(egui::RichText::new(format!("{} {}", enabled_dot, display.name))
|
||||||
.size(12.0).strong()
|
.size(13.0).strong().color(enabled_color));
|
||||||
.color(if display.enabled { egui::Color32::from_rgb(100, 100, 255) } else { egui::Color32::GRAY }));
|
|
||||||
|
|
||||||
ui.label(egui::RichText::new(&display.model).size(10.0).color(egui::Color32::GRAY));
|
ui.label(egui::RichText::new(&display.model).size(10.0).color(egui::Color32::GRAY));
|
||||||
|
|
||||||
ui.add_space(4.0);
|
ui.add_space(6.0);
|
||||||
ui.add_sized([ui.available_width(), 1.0], egui::Separator::default());
|
ui.add_sized([ui.available_width(), 1.0], egui::Separator::default());
|
||||||
|
|
||||||
|
ui.add_space(6.0);
|
||||||
|
|
||||||
|
let status_color = match &display.status {
|
||||||
|
ModelStatus::Waiting => egui::Color32::GRAY,
|
||||||
|
ModelStatus::Loading => egui::Color32::from_rgb(255, 140, 0),
|
||||||
|
ModelStatus::Completed => egui::Color32::from_rgb(0, 160, 0),
|
||||||
|
ModelStatus::Error(_) => egui::Color32::RED,
|
||||||
|
};
|
||||||
|
|
||||||
|
ui.label(egui::RichText::new(match &display.status {
|
||||||
|
ModelStatus::Waiting => "● 就绪",
|
||||||
|
ModelStatus::Loading => "◐ 生成中...",
|
||||||
|
ModelStatus::Completed => "✓ 完成",
|
||||||
|
ModelStatus::Error(_) => "✗ 错误",
|
||||||
|
}).size(10.0).color(status_color));
|
||||||
|
|
||||||
ui.add_space(4.0);
|
ui.add_space(4.0);
|
||||||
|
|
||||||
if display.result.is_empty() {
|
if display.result.is_empty() {
|
||||||
ui.label(egui::RichText::new("等待结果...").size(11.0).color(egui::Color32::GRAY));
|
ui.label(egui::RichText::new("等待结果...").size(11.0).color(egui::Color32::GRAY));
|
||||||
} else {
|
} else {
|
||||||
|
let mut result_text = display.result.clone();
|
||||||
ui.add_sized(
|
ui.add_sized(
|
||||||
[ui.available_width(), 120.0],
|
[ui.available_width(), 120.0],
|
||||||
egui::TextEdit::multiline(&mut display.result.clone())
|
egui::TextEdit::multiline(&mut result_text)
|
||||||
.desired_rows(5)
|
.desired_rows(5)
|
||||||
.frame(false),
|
.frame(false),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
ui.add_space(4.0);
|
ui.add_space(6.0);
|
||||||
ui.add_sized([ui.available_width(), 1.0], egui::Separator::default());
|
|
||||||
ui.add_space(4.0);
|
|
||||||
|
|
||||||
ui.horizontal(|ui| {
|
ui.horizontal(|ui| {
|
||||||
ui.label(egui::RichText::new(match &display.status {
|
|
||||||
ModelStatus::Waiting => "就绪",
|
|
||||||
ModelStatus::Loading => "生成中...",
|
|
||||||
ModelStatus::Completed => "完成",
|
|
||||||
ModelStatus::Error(_) => "错误",
|
|
||||||
}).size(10.0).color(status_color));
|
|
||||||
|
|
||||||
if ui.small_button("复制").clicked() && !display.result.is_empty() {
|
if ui.small_button("复制").clicked() && !display.result.is_empty() {
|
||||||
self.copy_to_clipboard(&display.result);
|
self.copy_to_clipboard(&display.result);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user