PathEntry PathEntry_new() { GtkFrame* frame = GTK_FRAME(gtk_frame_new(NULL)); gtk_widget_show(GTK_WIDGET(frame)); gtk_frame_set_shadow_type(frame, GTK_SHADOW_IN); // path entry GtkHBox* hbox = GTK_HBOX(gtk_hbox_new(FALSE, 0)); gtk_widget_show(GTK_WIDGET(hbox)); GtkEntry* entry = GTK_ENTRY(gtk_entry_new()); gtk_entry_set_has_frame(entry, FALSE); gtk_widget_show(GTK_WIDGET(entry)); gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(entry), TRUE, TRUE, 0); // browse button GtkButton* button = GTK_BUTTON(gtk_button_new()); button_set_icon(button, "ellipsis.bmp"); gtk_widget_show(GTK_WIDGET(button)); gtk_box_pack_end(GTK_BOX(hbox), GTK_WIDGET(button), FALSE, FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), GTK_WIDGET(hbox)); return PathEntry(frame, entry, button); }
static void dispatch_sensor_timeout(home_screen_t* s, sensor_timeout_msg_t* msg) { widget_t* w = s->sensors[msg->sensor].quantity_widget; s->sensors[msg->sensor].enabled = false; if (widget_is_enabled(s->sensors[msg->sensor].button)) { button_set_icon(s->sensors[msg->sensor].button, img_temp_low); button_set_up_bg_color(s->sensors[msg->sensor].button, STEEL); widget_disable(w); place_quantity_widgets(s); } }
void textentry_screen_show(textentry_format_t format, text_handler_t text_handler, void* user_data) { int i; textentry_screen_t* screen = calloc(1, sizeof(textentry_screen_t)); screen->text_handler = text_handler; screen->user_data = user_data; switch (format) { case TXT_FMT_IP: screen->btn_layout = btn_layout_numeric; screen->num_rows = NUM_ROWS_NUMERIC; break; default: case TXT_FMT_ANY: screen->btn_layout = btn_layout_all; screen->num_rows = NUM_ROWS_ALL; break; } screen->widget = widget_create(NULL, &textentry_screen_widget_class, screen, display_rect); rect_t rect = { .x = 7, .y = 5, .width = 48, .height = 48, }; widget_t* back_btn = button_create(screen->widget, rect, img_cancel, WHITE, BLACK, back_button_clicked); button_set_up_bg_color(back_btn, BLACK); button_set_up_icon_color(back_btn, WHITE); button_set_down_bg_color(back_btn, BLACK); button_set_down_icon_color(back_btn, LIGHT_GRAY); button_set_disabled_bg_color(back_btn, BLACK); button_set_disabled_icon_color(back_btn, DARK_GRAY); rect.x = 7; rect.y = 65; for (i = 0; i < NUM_VISIBLE_ROWS; ++i) { int j; for (j = 0; j < NUM_BUTTONS_PER_ROW; ++j) { widget_t* b = button_create(screen->widget, rect, img_circle, WHITE, BLACK, char_button_clicked); button_set_font(b, font_opensans_regular_22); button_set_up_bg_color(b, BLACK); button_set_up_icon_color(b, WHITE); button_set_down_bg_color(b, BLACK); button_set_down_icon_color(b, LIGHT_GRAY); button_set_disabled_bg_color(b, BLACK); button_set_disabled_icon_color(b, DARK_GRAY); screen->buttons[i][j] = b; rect.x += 52; } rect.y += 58; rect.x = 7; } rect.x = 268; rect.y = 5; widget_t* b = button_create(screen->widget, rect, img_check, WHITE, BLACK, ok_button_clicked); button_set_up_bg_color(b, BLACK); button_set_up_icon_color(b, WHITE); button_set_down_bg_color(b, BLACK); button_set_down_icon_color(b, LIGHT_GRAY); button_set_disabled_bg_color(b, BLACK); button_set_disabled_icon_color(b, DARK_GRAY); rect.y = 65; b = button_create(screen->widget, rect, img_backspace, WHITE, BLACK, backspace_button_clicked); button_set_up_bg_color(b, BLACK); button_set_up_icon_color(b, WHITE); button_set_down_bg_color(b, BLACK); button_set_down_icon_color(b, LIGHT_GRAY); button_set_disabled_bg_color(b, BLACK); button_set_disabled_icon_color(b, DARK_GRAY); rect.y += 58; b = button_create(screen->widget, rect, img_up, WHITE, BLACK, up_button_clicked); button_set_up_bg_color(b, BLACK); button_set_up_icon_color(b, WHITE); button_set_down_bg_color(b, BLACK); button_set_down_icon_color(b, LIGHT_GRAY); button_set_disabled_bg_color(b, BLACK); button_set_disabled_icon_color(b, DARK_GRAY); rect.y += 58; b = button_create(screen->widget, rect, img_down, WHITE, BLACK, down_button_clicked); button_set_up_bg_color(b, BLACK); button_set_up_icon_color(b, WHITE); button_set_down_bg_color(b, BLACK); button_set_down_icon_color(b, LIGHT_GRAY); button_set_disabled_bg_color(b, BLACK); button_set_disabled_icon_color(b, DARK_GRAY); update_input_buttons(screen); rect.x = 60; rect.y = 8; rect.width = 200; screen->text_label = label_create(screen->widget, rect, "", font_opensans_regular_22, WHITE, 2); widget_set_background(screen->text_label, LIGHT_GRAY); gui_push_screen(screen->widget); } static void update_input_buttons(textentry_screen_t* screen) { int i; for (i = 0; i < NUM_VISIBLE_ROWS; ++i) { btn_row_t* row = &screen->btn_layout[screen->row_idx + i]; int j; for (j = 0; j < NUM_BUTTONS_PER_ROW; ++j) { widget_t* btn = screen->buttons[i][j]; const char* btn_text = (*row)[j]; if (btn_text == NULL) widget_hide(btn); else { if (*btn_text == ' ') button_set_icon(btn, img_space); else button_set_icon(btn, img_circle); button_set_text(btn, btn_text); widget_show(btn); } } } }