Improve GUI configuration and plotting tooling
This commit is contained in:
@@ -1,16 +1,21 @@
|
||||
use crate::app::ConnectionStatus;
|
||||
use egui::{Color32, RichText, Ui};
|
||||
|
||||
pub struct SessionListItem {
|
||||
pub id: u64,
|
||||
pub status: ConnectionStatus,
|
||||
pub transport_summary: String,
|
||||
}
|
||||
|
||||
pub fn render(
|
||||
ui: &mut Ui,
|
||||
sessions: &[(u64, ConnectionStatus)], // (id, 连接状态)
|
||||
active: &mut usize, // 当前选中的会话索引
|
||||
on_new: &mut bool, // 点击了"新建"
|
||||
on_delete: &mut Option<usize>, // 点击了"删除"
|
||||
sessions: &[SessionListItem],
|
||||
active: &mut usize,
|
||||
on_new: &mut bool,
|
||||
on_delete: &mut Option<usize>,
|
||||
) {
|
||||
ui.heading("Sessions");
|
||||
|
||||
// 新建按钮 — 绿色文字
|
||||
if ui
|
||||
.button(RichText::new("+ New Session").color(Color32::GREEN))
|
||||
.clicked()
|
||||
@@ -20,17 +25,18 @@ pub fn render(
|
||||
|
||||
ui.separator();
|
||||
|
||||
// 会话列表
|
||||
for (i, (id, status)) in sessions.iter().enumerate() {
|
||||
let (color, icon) = match status {
|
||||
ConnectionStatus::Connected => (Color32::GREEN, "●"),
|
||||
ConnectionStatus::Disconnected => (Color32::GRAY, "○"),
|
||||
ConnectionStatus::Connecting => (Color32::YELLOW, "◌"),
|
||||
ConnectionStatus::Error(_) => (Color32::RED, "⨉"),
|
||||
for (i, session) in sessions.iter().enumerate() {
|
||||
let (color, status_tag) = match &session.status {
|
||||
ConnectionStatus::Connected => (Color32::GREEN, "[connected]"),
|
||||
ConnectionStatus::Disconnected => (Color32::GRAY, "[disconnected]"),
|
||||
ConnectionStatus::Connecting => (Color32::YELLOW, "[connecting]"),
|
||||
ConnectionStatus::Error(_) => (Color32::RED, "[error]"),
|
||||
};
|
||||
|
||||
// selectable_label: 点击高亮,clicked() 判断是否被点击
|
||||
let label = format!("{} Session {}", icon, id);
|
||||
let label = format!(
|
||||
"{} Session {}\n{}",
|
||||
status_tag, session.id, session.transport_summary
|
||||
);
|
||||
if ui
|
||||
.selectable_label(*active == i, RichText::new(label).color(color))
|
||||
.clicked()
|
||||
@@ -41,7 +47,6 @@ pub fn render(
|
||||
|
||||
ui.separator();
|
||||
|
||||
// 删除按钮 — 红色文字
|
||||
if ui
|
||||
.button(RichText::new("Delete").color(Color32::RED))
|
||||
.clicked()
|
||||
|
||||
Reference in New Issue
Block a user