|
|
|
|
@@ -2,6 +2,9 @@
|
|
|
|
|
#include "../../conf/global_config.h"
|
|
|
|
|
#include "../../core/data_setup.h"
|
|
|
|
|
#include "../ui_utils.h"
|
|
|
|
|
#include "../../core/lv_setup.h"
|
|
|
|
|
#include <stdio.h>
|
|
|
|
|
#include "../nav_buttons.h"
|
|
|
|
|
|
|
|
|
|
const char * printer_status[] = {
|
|
|
|
|
"Error",
|
|
|
|
|
@@ -12,6 +15,16 @@ const char * printer_status[] = {
|
|
|
|
|
|
|
|
|
|
const static lv_point_t line_points[] = { {0, 0}, {(short int)((CYD_SCREEN_PANEL_WIDTH_PX - CYD_SCREEN_GAP_PX * 2) * 0.85f), 0} };
|
|
|
|
|
|
|
|
|
|
static void update_printer_name_text(lv_event_t * e)
|
|
|
|
|
{
|
|
|
|
|
lv_obj_t * label = lv_event_get_target(e);
|
|
|
|
|
PRINTER_CONFIG * config = (PRINTER_CONFIG*)lv_event_get_user_data(e);
|
|
|
|
|
int index = config - global_config.printer_config;
|
|
|
|
|
PrinterMinimal * printer = &printer_minimal[index];
|
|
|
|
|
|
|
|
|
|
lv_label_set_text(label, config->printer_name[0] == 0 ? config->klipper_host : config->printer_name);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void update_printer_status_text(lv_event_t * e)
|
|
|
|
|
{
|
|
|
|
|
lv_obj_t * label = lv_event_get_target(e);
|
|
|
|
|
@@ -49,27 +62,124 @@ static void update_printer_percentage_text(lv_event_t * e)
|
|
|
|
|
int index = config - global_config.printer_config;
|
|
|
|
|
PrinterMinimal * printer = &printer_minimal[index];
|
|
|
|
|
|
|
|
|
|
if (printer->online && (printer->state == PRINTER_STATE_PRINTING || printer->state == PRINTER_STATE_PAUSED)){
|
|
|
|
|
lv_label_set_text_fmt(label, "%.2f%%", printer->print_progress * 100);
|
|
|
|
|
if (printer->online && (printer->state == PRINTER_STATE_PRINTING || printer->state == PRINTER_STATE_PAUSED))
|
|
|
|
|
{
|
|
|
|
|
char percentage_buffer[12];
|
|
|
|
|
sprintf(percentage_buffer, "%.2f%%", printer->print_progress * 100);
|
|
|
|
|
lv_label_set_text(label, percentage_buffer);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
lv_label_set_text(label, "-");
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
lv_label_set_text(label, "-%");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void btn_disable_if_controlled(lv_event_t * e)
|
|
|
|
|
{
|
|
|
|
|
lv_obj_t * btn = lv_event_get_target(e);
|
|
|
|
|
PRINTER_CONFIG * config = (PRINTER_CONFIG*)lv_event_get_user_data(e);
|
|
|
|
|
|
|
|
|
|
if (config == get_current_printer_config())
|
|
|
|
|
{
|
|
|
|
|
lv_obj_add_state(btn, LV_STATE_DISABLED);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
lv_obj_clear_state(btn, LV_STATE_DISABLED);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void btn_disable_if_controlled_or_offline(lv_event_t * e)
|
|
|
|
|
{
|
|
|
|
|
lv_obj_t * btn = lv_event_get_target(e);
|
|
|
|
|
PRINTER_CONFIG * config = (PRINTER_CONFIG*)lv_event_get_user_data(e);
|
|
|
|
|
int index = config - global_config.printer_config;
|
|
|
|
|
PrinterMinimal * printer = &printer_minimal[index];
|
|
|
|
|
|
|
|
|
|
if (config == get_current_printer_config() || !printer->online)
|
|
|
|
|
{
|
|
|
|
|
lv_obj_add_state(btn, LV_STATE_DISABLED);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
lv_obj_clear_state(btn, LV_STATE_DISABLED);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
PRINTER_CONFIG * keyboard_config = NULL;
|
|
|
|
|
|
|
|
|
|
static void keyboard_callback(lv_event_t * e){
|
|
|
|
|
lv_event_code_t code = lv_event_get_code(e);
|
|
|
|
|
lv_obj_t * ta = lv_event_get_target(e);
|
|
|
|
|
lv_obj_t * kb = (lv_obj_t *)lv_event_get_user_data(e);
|
|
|
|
|
|
|
|
|
|
if (code == LV_EVENT_READY) {
|
|
|
|
|
const char * text = lv_textarea_get_text(ta);
|
|
|
|
|
strcpy(keyboard_config->printer_name, text);
|
|
|
|
|
write_global_config();
|
|
|
|
|
lv_msg_send(DATA_PRINTER_MINIMAL, NULL);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(code == LV_EVENT_DEFOCUSED || code == LV_EVENT_CANCEL || code == LV_EVENT_READY) {
|
|
|
|
|
lv_keyboard_set_textarea(kb, NULL);
|
|
|
|
|
lv_obj_del(lv_obj_get_parent(kb));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void btn_printer_delete(lv_event_t * e)
|
|
|
|
|
{
|
|
|
|
|
lv_obj_t * btn = lv_event_get_target(e);
|
|
|
|
|
PRINTER_CONFIG * config = (PRINTER_CONFIG*)lv_event_get_user_data(e);
|
|
|
|
|
|
|
|
|
|
if (config == get_current_printer_config())
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
config->ip_configured = false;
|
|
|
|
|
write_global_config();
|
|
|
|
|
|
|
|
|
|
nav_buttons_setup(6);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// TODO: Extract this from temp/print panel and combine
|
|
|
|
|
static void btn_printer_rename(lv_event_t * e)
|
|
|
|
|
{
|
|
|
|
|
keyboard_config = (PRINTER_CONFIG*)lv_event_get_user_data(e);
|
|
|
|
|
|
|
|
|
|
lv_obj_t * parent = lv_create_empty_panel(lv_scr_act());
|
|
|
|
|
lv_obj_set_style_bg_opa(parent, LV_OPA_50, 0);
|
|
|
|
|
lv_obj_set_size(parent, CYD_SCREEN_WIDTH_PX, CYD_SCREEN_HEIGHT_PX);
|
|
|
|
|
lv_layout_flex_column(parent, LV_FLEX_ALIGN_SPACE_BETWEEN);
|
|
|
|
|
|
|
|
|
|
lv_obj_t * empty_panel = lv_create_empty_panel(parent);
|
|
|
|
|
lv_obj_set_flex_grow(empty_panel, 1);
|
|
|
|
|
|
|
|
|
|
lv_obj_t * ta = lv_textarea_create(parent);
|
|
|
|
|
lv_obj_t * keyboard = lv_keyboard_create(parent);
|
|
|
|
|
|
|
|
|
|
lv_obj_set_width(ta, CYD_SCREEN_WIDTH_PX * 0.75);
|
|
|
|
|
lv_textarea_set_max_length(ta, 16);
|
|
|
|
|
lv_textarea_set_one_line(ta, true);
|
|
|
|
|
lv_textarea_set_text(ta, keyboard_config->printer_name);
|
|
|
|
|
lv_obj_add_event_cb(ta, keyboard_callback, LV_EVENT_ALL, keyboard);
|
|
|
|
|
lv_keyboard_set_textarea(keyboard, ta);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void btn_printer_activate(lv_event_t * e)
|
|
|
|
|
{
|
|
|
|
|
lv_obj_t * label = lv_event_get_target(e);
|
|
|
|
|
PRINTER_CONFIG * config = (PRINTER_CONFIG*)lv_event_get_user_data(e);
|
|
|
|
|
int index = config - global_config.printer_config;
|
|
|
|
|
|
|
|
|
|
set_printer_config_index(index);
|
|
|
|
|
set_color_scheme();
|
|
|
|
|
lv_msg_send(DATA_PRINTER_MINIMAL, NULL);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void btn_printer_add(lv_event_t * e)
|
|
|
|
|
{
|
|
|
|
|
set_printer_config_index(get_printer_config_free_index());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void create_printer_ui(PRINTER_CONFIG * config, lv_obj_t * root)
|
|
|
|
|
@@ -82,7 +192,8 @@ void create_printer_ui(PRINTER_CONFIG * config, lv_obj_t * root)
|
|
|
|
|
lv_obj_set_size(data_row_name, width, LV_SIZE_CONTENT);
|
|
|
|
|
|
|
|
|
|
lv_obj_t * label = lv_label_create(data_row_name);
|
|
|
|
|
lv_label_set_text(label, config->printer_name[0] == 0 ? config->klipper_host : config->printer_name);
|
|
|
|
|
lv_obj_add_event_cb(label, update_printer_name_text, LV_EVENT_MSG_RECEIVED, config);
|
|
|
|
|
lv_msg_subsribe_obj(DATA_PRINTER_MINIMAL, label, config);
|
|
|
|
|
|
|
|
|
|
label = lv_label_create(data_row_name);
|
|
|
|
|
lv_obj_add_event_cb(label, update_printer_status_text, LV_EVENT_MSG_RECEIVED, config);
|
|
|
|
|
@@ -109,6 +220,8 @@ void create_printer_ui(PRINTER_CONFIG * config, lv_obj_t * root)
|
|
|
|
|
lv_obj_t * btn = lv_btn_create(button_row);
|
|
|
|
|
lv_obj_set_flex_grow(btn, 1);
|
|
|
|
|
lv_obj_add_event_cb(btn, btn_printer_delete, LV_EVENT_CLICKED, config);
|
|
|
|
|
lv_obj_add_event_cb(btn, btn_disable_if_controlled, LV_EVENT_MSG_RECEIVED, config);
|
|
|
|
|
lv_msg_subsribe_obj(DATA_PRINTER_MINIMAL, btn, config);
|
|
|
|
|
|
|
|
|
|
label = lv_label_create(btn);
|
|
|
|
|
lv_label_set_text(label, LV_SYMBOL_TRASH);
|
|
|
|
|
@@ -125,9 +238,11 @@ void create_printer_ui(PRINTER_CONFIG * config, lv_obj_t * root)
|
|
|
|
|
btn = lv_btn_create(button_row);
|
|
|
|
|
lv_obj_set_flex_grow(btn, 2);
|
|
|
|
|
lv_obj_add_event_cb(btn, btn_printer_activate, LV_EVENT_CLICKED, config);
|
|
|
|
|
lv_obj_add_event_cb(btn, btn_disable_if_controlled_or_offline, LV_EVENT_MSG_RECEIVED, config);
|
|
|
|
|
lv_msg_subsribe_obj(DATA_PRINTER_MINIMAL, btn, config);
|
|
|
|
|
|
|
|
|
|
label = lv_label_create(btn);
|
|
|
|
|
lv_label_set_text(label, "Activate");
|
|
|
|
|
lv_label_set_text(label, "Control");
|
|
|
|
|
lv_obj_center(label);
|
|
|
|
|
|
|
|
|
|
lv_obj_t * line = lv_line_create(root);
|
|
|
|
|
@@ -139,11 +254,13 @@ void create_printer_ui(PRINTER_CONFIG * config, lv_obj_t * root)
|
|
|
|
|
void printer_panel_init(lv_obj_t* panel)
|
|
|
|
|
{
|
|
|
|
|
lv_obj_t * inner_panel = lv_create_empty_panel(panel);
|
|
|
|
|
lv_obj_align(inner_panel, LV_ALIGN_TOP_LEFT, CYD_SCREEN_GAP_PX, CYD_SCREEN_GAP_PX);
|
|
|
|
|
lv_obj_set_size(inner_panel, CYD_SCREEN_PANEL_WIDTH_PX - CYD_SCREEN_GAP_PX * 2, CYD_SCREEN_PANEL_HEIGHT_PX - CYD_SCREEN_GAP_PX * 2);
|
|
|
|
|
lv_obj_align(inner_panel, LV_ALIGN_TOP_LEFT, CYD_SCREEN_GAP_PX, 0);
|
|
|
|
|
lv_obj_set_size(inner_panel, CYD_SCREEN_PANEL_WIDTH_PX - CYD_SCREEN_GAP_PX * 2, CYD_SCREEN_PANEL_HEIGHT_PX);
|
|
|
|
|
lv_layout_flex_column(inner_panel);
|
|
|
|
|
lv_obj_set_scrollbar_mode(inner_panel, LV_SCROLLBAR_MODE_OFF);
|
|
|
|
|
|
|
|
|
|
lv_obj_set_size(lv_create_empty_panel(inner_panel), 0, 0);
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < PRINTER_CONFIG_COUNT; i++){
|
|
|
|
|
PRINTER_CONFIG * config = &global_config.printer_config[i];
|
|
|
|
|
if (config->ip_configured) {
|
|
|
|
|
@@ -151,5 +268,18 @@ void printer_panel_init(lv_obj_t* panel)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Add Printer Button
|
|
|
|
|
if (get_printer_config_free_index() != -1){
|
|
|
|
|
lv_obj_t * btn = lv_btn_create(inner_panel);
|
|
|
|
|
lv_obj_set_size(btn, CYD_SCREEN_PANEL_WIDTH_PX - CYD_SCREEN_GAP_PX * 2, CYD_SCREEN_MIN_BUTTON_HEIGHT_PX);
|
|
|
|
|
lv_obj_add_event_cb(btn, btn_printer_add, LV_EVENT_CLICKED, NULL);
|
|
|
|
|
|
|
|
|
|
lv_obj_t * label = lv_label_create(btn);
|
|
|
|
|
lv_label_set_text(label, "Add Printer");
|
|
|
|
|
lv_obj_center(label);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
lv_obj_set_size(lv_create_empty_panel(inner_panel), 0, 0);
|
|
|
|
|
|
|
|
|
|
lv_msg_send(DATA_PRINTER_MINIMAL, NULL);
|
|
|
|
|
}
|