ua-client 0.1.0

Native OPC UA browser/inspector GUI built on async-opcua and egui
use crate::model::AppModel;

pub fn draw(model: &AppModel, ui: &mut egui::Ui) {
    ui.heading("Node");
    ui.separator();

    let Some(summary) = model.node_summary.as_ref() else {
        ui.label(egui::RichText::new("Select a node in the tree").italics().weak());
        return;
    };

    egui::Grid::new("node_summary_grid")
        .num_columns(2)
        .spacing([12.0, 4.0])
        .show(ui, |ui| {
            row(ui, "NodeId", &summary.node_id.to_string());
            row(ui, "BrowseName", &summary.browse_name);
            row(ui, "DisplayName", &summary.display_name);
            row(ui, "NodeClass", &format!("{:?}", summary.node_class));
            row(ui, "Description", summary.description.as_deref().unwrap_or(""));
            if let Some(value) = summary.value.as_deref() {
                row(ui, "Value", value);
            }
        });
}

fn row(ui: &mut egui::Ui, key: &str, value: &str) {
    ui.label(egui::RichText::new(key).strong());
    ui.label(value);
    ui.end_row();
}