82 lines
3.9 KiB
C
82 lines
3.9 KiB
C
|
#include "../Inc/error.h"
|
|||
|
#include "../Inc/widgets.h"
|
|||
|
|
|||
|
ErrorInfo error_list[ERROR_COUNT] = {
|
|||
|
{0x01, "Нет данных от эталонного датчика"},
|
|||
|
{0x02, "Недостаточное давление компрессора"},
|
|||
|
{0x04, "Утечка давления (датчик травит)"},
|
|||
|
{0x08, "Нет ответа от испытуемого датчика"}
|
|||
|
};
|
|||
|
void set_error_text_color(GtkTreeViewColumn *column, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer data) {
|
|||
|
uint8_t error_code;
|
|||
|
gtk_tree_model_get(model, iter, 0, &error_code, -1); // Получаем код ошибки из модели
|
|||
|
|
|||
|
const char *status;
|
|||
|
gtk_tree_model_get(model, iter, 2, &status, -1); // Получаем состояние ошибки ("Произошла" или "Нет")
|
|||
|
|
|||
|
GdkRGBA color;
|
|||
|
if (g_strcmp0(status, "Произошла") == 0) {
|
|||
|
gdk_rgba_parse(&color, "red");
|
|||
|
} else {
|
|||
|
gdk_rgba_parse(&color, "black");
|
|||
|
}
|
|||
|
g_object_set(renderer, "foreground-rgba", &color, NULL); // Устанавливаем цвет текста
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
void initialize_error_table() {
|
|||
|
// Создаём модель данных с тремя столбцами: Код, Описание, Состояние
|
|||
|
widgets.ErrorListStore = gtk_list_store_new(3, G_TYPE_UINT, G_TYPE_STRING, G_TYPE_STRING);
|
|||
|
|
|||
|
// Создаём GtkTreeView и связываем его с моделью
|
|||
|
widgets.ErrorTreeView = gtk_tree_view_new_with_model(GTK_TREE_MODEL(widgets.ErrorListStore));
|
|||
|
|
|||
|
// Добавляем колонку для кода ошибки
|
|||
|
GtkCellRenderer *renderer = gtk_cell_renderer_text_new();
|
|||
|
GtkTreeViewColumn *column = gtk_tree_view_column_new_with_attributes("Код ошибки", renderer, "text", 0, NULL);
|
|||
|
gtk_tree_view_column_set_cell_data_func(column, renderer, set_error_text_color, NULL, NULL);
|
|||
|
gtk_tree_view_append_column(GTK_TREE_VIEW(widgets.ErrorTreeView), column);
|
|||
|
|
|||
|
// Добавляем колонку для описания ошибки
|
|||
|
renderer = gtk_cell_renderer_text_new();
|
|||
|
column = gtk_tree_view_column_new_with_attributes("Описание ошибки", renderer, "text", 1, NULL);
|
|||
|
gtk_tree_view_column_set_cell_data_func(column, renderer, set_error_text_color, NULL, NULL);
|
|||
|
gtk_tree_view_append_column(GTK_TREE_VIEW(widgets.ErrorTreeView), column);
|
|||
|
|
|||
|
// Добавляем колонку для состояния ошибки
|
|||
|
renderer = gtk_cell_renderer_text_new();
|
|||
|
column = gtk_tree_view_column_new_with_attributes("Состояние", renderer, "text", 2, NULL);
|
|||
|
gtk_tree_view_append_column(GTK_TREE_VIEW(widgets.ErrorTreeView), column);
|
|||
|
|
|||
|
// Устанавливаем функцию для изменения цвета текста
|
|||
|
gtk_tree_view_column_set_cell_data_func(column, renderer, set_error_text_color, NULL, NULL);
|
|||
|
|
|||
|
// Добавляем GtkTreeView в основной контейнер
|
|||
|
gtk_box_pack_start(GTK_BOX(widgets.GridBox), widgets.ErrorTreeView, TRUE, TRUE, 0);
|
|||
|
|
|||
|
// Обновляем отображение
|
|||
|
gtk_widget_show_all(widgets.ErrorTreeView);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
void update_error_table(uint8_t error_code) {
|
|||
|
if (widgets.ErrorListStore == NULL) {
|
|||
|
g_warning("ErrorListStore не инициализирован. Вызовите initialize_error_table() сначала.");
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
gtk_list_store_clear(widgets.ErrorListStore);
|
|||
|
|
|||
|
GtkTreeIter iter;
|
|||
|
for (int i = 0; i < ERROR_COUNT; i++) {
|
|||
|
gtk_list_store_append(widgets.ErrorListStore, &iter);
|
|||
|
const char *status = (error_code & error_list[i].code) ? "Произошла" : "Нет";
|
|||
|
gtk_list_store_set(widgets.ErrorListStore, &iter,
|
|||
|
0, error_list[i].code,
|
|||
|
1, error_list[i].description,
|
|||
|
2, status,
|
|||
|
-1);
|
|||
|
}
|
|||
|
|
|||
|
gtk_widget_queue_draw(GTK_WIDGET(widgets.ErrorTreeView));
|
|||
|
}
|