Add alarm details and only rerender status when it changes
This commit is contained in:
@@ -34,6 +34,7 @@
|
||||
#include <nanogui/graph.h>
|
||||
#include <nanogui/tabwidget.h>
|
||||
#include <nanogui/texture.h>
|
||||
#include <nanogui/textarea.h>
|
||||
#include <nanogui/shader.h>
|
||||
#include <nanogui/renderpass.h>
|
||||
#include <iostream>
|
||||
@@ -52,6 +53,7 @@
|
||||
#include <gtest/gtest.h>
|
||||
#include "grbl_communication.h"
|
||||
#include "machine.h"
|
||||
#include "string_utils.h"
|
||||
|
||||
using namespace nanogui;
|
||||
|
||||
@@ -64,7 +66,7 @@ public:
|
||||
Window *window;
|
||||
grbl::jog_state jog;
|
||||
Label *m_pos_x, *m_pos_y, *m_pos_z;
|
||||
TextBox *lblStatus, *lblSubstatus;
|
||||
TextArea *lblStatus, *lblSubstatus;
|
||||
nanogui::Color red = nanogui::Color(255, 0, 0, 255);
|
||||
int last_alarm = 0;
|
||||
|
||||
@@ -80,8 +82,13 @@ public:
|
||||
Widget *status_holder = new Widget(window);
|
||||
status_holder->set_layout(new GridLayout());
|
||||
|
||||
lblStatus = new TextBox(window, grbl::status_to_string(cnc.get_status().status));
|
||||
lblSubstatus = new TextBox(window, cnc.get_status().sub_status);
|
||||
lblStatus = new TextArea(window);
|
||||
lblStatus->set_fixed_height(20);
|
||||
lblStatus->set_font("sans");
|
||||
|
||||
lblSubstatus = new TextArea(window);
|
||||
lblSubstatus->set_font("sans");
|
||||
lblSubstatus->set_fixed_height(50);
|
||||
|
||||
// Machine pos
|
||||
new Label(window, "Machine pos", "sans-bold");
|
||||
@@ -282,17 +289,34 @@ public:
|
||||
void on_disconnected() override {
|
||||
}
|
||||
|
||||
|
||||
grbl::realtime_status_report last_report;
|
||||
|
||||
void on_realtime_status_report(grbl::realtime_status_report report) override {
|
||||
lblStatus->set_value(grbl::status_to_string(cnc.get_status().status) + " ");
|
||||
if (cnc.get_status().status == grbl::machine_status::alarm) {
|
||||
lblSubstatus->set_value(grbl::alarm_to_string(last_alarm));
|
||||
} else {
|
||||
lblSubstatus->set_value(cnc.get_status().sub_status);
|
||||
if (report == last_report) return;
|
||||
|
||||
if (last_report.status != report.status) {
|
||||
lblStatus->clear();
|
||||
lblStatus->append(grbl::status_to_string(cnc.get_status().status));
|
||||
|
||||
lblSubstatus->clear();
|
||||
if (cnc.get_status().status == grbl::machine_status::alarm) {
|
||||
lblSubstatus->append(grbl::alarm_to_string(last_alarm));
|
||||
// auto lines = split_string(grbl::alarm_to_string(last_alarm), "\n");
|
||||
// for (auto& l: lines) {
|
||||
// lblSubstatus->append_line(trim(l));
|
||||
// }
|
||||
} else {
|
||||
lblSubstatus->append(cnc.get_status().sub_status);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
m_pos_x->set_caption(std::to_string(cnc.get_status().machine_pos[0]));
|
||||
m_pos_y->set_caption(std::to_string(cnc.get_status().machine_pos[1]));
|
||||
m_pos_z->set_caption(std::to_string(cnc.get_status().machine_pos[2]));
|
||||
|
||||
last_report = report;
|
||||
}
|
||||
|
||||
void on_banner(std::string line) override {
|
||||
|
||||
Reference in New Issue
Block a user