static cb_ret_t configure_callback (Dlg_head * h, Widget * sender, dlg_msg_t msg, int parm, void *data) { switch (msg) { case DLG_ACTION: /* message from "Single press" checkbutton */ if (sender != NULL && sender->id == 17) { const gboolean not_single = !(((WCheck *) sender)->state & C_BOOL); Widget *w; /* label */ w = dlg_find_by_id (h, sender->id - 1); widget_disable (*w, not_single); send_message (w, WIDGET_DRAW, 0); /* input */ w = dlg_find_by_id (h, sender->id - 2); widget_disable (*w, not_single); send_message (w, WIDGET_DRAW, 0); return MSG_HANDLED; } return MSG_NOT_HANDLED; default: return default_dlg_callback (h, sender, msg, parm, data); } }
static cb_ret_t panel_listing_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data) { WDialog *h = DIALOG (w); switch (msg) { case MSG_NOTIFY: if (sender != NULL && sender->id == panel_listing_types_id) { WCheck *ch; WInput *in1, *in2, *in3; in1 = INPUT (dlg_find_by_id (h, panel_user_format_id)); in2 = INPUT (dlg_find_by_id (h, panel_brief_cols_id)); ch = CHECK (dlg_find_by_id (h, mini_user_status_id)); in3 = INPUT (dlg_find_by_id (h, mini_user_format_id)); if (!(ch->state & C_BOOL)) input_assign_text (in3, status_format[RADIO (sender)->sel]); input_update (in1, FALSE); input_update (in2, FALSE); input_update (in3, FALSE); widget_disable (WIDGET (in1), RADIO (sender)->sel != panel_listing_user_idx); widget_disable (WIDGET (in2), RADIO (sender)->sel != panel_listing_brief_idx); return MSG_HANDLED; } if (sender != NULL && sender->id == mini_user_status_id) { WInput *in; in = INPUT (dlg_find_by_id (h, mini_user_format_id)); if (CHECK (sender)->state & C_BOOL) { widget_disable (WIDGET (in), FALSE); input_assign_text (in, status_format[3]); } else { WRadio *r; r = RADIO (dlg_find_by_id (h, panel_listing_types_id)); widget_disable (WIDGET (in), TRUE); input_assign_text (in, status_format[r->sel]); } /* input_update (in, FALSE); */ return MSG_HANDLED; } return MSG_NOT_HANDLED; default: return dlg_default_callback (w, sender, msg, parm, data); } }
void b_open_autowin( ) { int y, yi, w, h, mpos; int btn_w; w = 650; h = 200; yi = 30; mpos = 120; if ( autowin == 0 ) { bounds_t *b = new_bounds( -1, -1, w, h ); layout_t *lt; autowin = window_widget_create( bersirc->mainwin, b, cWindowModalDialog | cWindowCenterParent ); window_set_icon( autowin, b_icon( "bersirc" ) ); window_set_title( autowin, lang_phrase_quick( "autoconnectwin" ) ); object_addhandler( autowin, "destroy", b_autowin_killed ); object_addhandler( autowin, "closing", b_autowin_closing ); lt = layout_create( autowin, "[][_<|list|<][][{25}<|btnadd|<|btnedit|<|btndelete|<|btncancel|<][]", *b, 10, 10 ); y = 10; autowin_servlist = listview_widget_create( autowin, lt_bounds(lt,"list"), 3, 0, "", cListViewTypeCheckBox, lang_phrase_quick( "serveraddy" ), cListViewTypeText, lang_phrase_quick( "channels" ), cListViewTypeText ); btn_w = ((w-20-20)/4); btnadd = button_widget_create_with_label( autowin, lt_bounds(lt,"btnadd"), 0, lang_phrase_quick( "addserver" ) ); btnedit = button_widget_create_with_label( autowin, lt_bounds(lt,"btnedit"), 0, lang_phrase_quick( "editserver" ) ); btndelete = button_widget_create_with_label( autowin, lt_bounds(lt,"btndelete"), 0, lang_phrase_quick( "deleteserver" ) ); btncancel = button_widget_create_with_label( autowin, lt_bounds(lt,"btncancel"), 0, lang_phrase_quick( "close" ) ); // no edit or delete until selected widget_disable( OBJECT( btndelete ) ); widget_disable( OBJECT( btnedit ) ); object_addhandler( autowin_servlist, "selected", b_autowin_serversel ); object_addhandler( btnadd, "pushed", b_autowin_add ); object_addhandler( btnedit, "pushed", b_autowin_edit ); object_addhandler( btndelete, "pushed", b_autowin_delete ); object_addhandler( btncancel, "pushed", b_autowin_close ); window_show( autowin ); b_autowin_gui_init( ); } else { widget_focus( OBJECT( autowin ) ); } }
static cb_ret_t confvfs_callback (Dlg_head * h, Widget * sender, dlg_msg_t msg, int parm, void *data) { switch (msg) { case DLG_ACTION: if (sender->id == 6) { /* message from "Always use ftp proxy" checkbutton */ const gboolean not_use = !(((WCheck *) sender)->state & C_BOOL); Widget *w; /* input */ w = dlg_find_by_id (h, sender->id - 1); widget_disable (*w, not_use); send_message (w, WIDGET_DRAW, 0); return MSG_HANDLED; } return MSG_NOT_HANDLED; default: return default_dlg_callback (h, sender, msg, parm, data); } }
static void Inputs_CFG_Layout(t_app_inputs_config *app, bool setup) { t_frame frame; // Clear clear_to_color(app->box->gfx_buffer, COLOR_SKIN_WINDOW_BACKGROUND); if (setup) { // Add closebox widget widget_closebox_add(app->box, Inputs_CFG_Switch); // Peripheral change button frame.pos.x = 10; frame.pos.y = 18; frame.size.x = Graphics.Inputs.InputsBase->w; frame.size.y = 80-2; widget_button_add(app->box, &frame, 1, Inputs_CFG_Peripheral_Change_Handler, WIDGET_BUTTON_STYLE_INVISIBLE, NULL); // Input source change button frame.pos.x = 170; frame.pos.y = 10-Font_Height(F_MIDDLE)/2; frame.size.x = INPUTS_CFG_FRAME_X - 5; frame.size.y = Font_Height(F_MIDDLE); widget_button_add(app->box, &frame, 1|2, Inputs_CFG_Current_Source_Change, WIDGET_BUTTON_STYLE_INVISIBLE, NULL); // Input map change button frame.pos.x = 170 /* + (INPUTS_CFG_FRAME_X / 2)*/; frame.pos.y = 48; frame.size.x = (INPUTS_CFG_FRAME_X /* / 2 */) - 10; frame.size.y = INPUT_MAP_MAX * (Font_Height(F_SMALL) + GUI_LOOK_LINES_SPACING_Y); widget_button_add(app->box, &frame, 1, Inputs_CFG_Map_Change_Handler, WIDGET_BUTTON_STYLE_INVISIBLE, NULL); // 'Enabled' checkbox frame.pos.x = 170; frame.pos.y = 19; frame.size.x = INPUTS_CFG_CHECK_X; frame.size.y = INPUTS_CFG_CHECK_Y; app->CheckBox_Enabled = widget_checkbox_add(app->box, &frame, &Inputs.Sources [app->Current_Source]->enabled, NULL); // Emulate Digital check need to be added before drawing source // because currently it is drawn on the box before having the chance // to be disabled... so anyway drawing source will clear it. frame.pos.x = 170; frame.pos.y = 19 + (7 * 2) + (2 + 6) * (Font_Height(F_SMALL) + GUI_LOOK_LINES_SPACING_Y); frame.size.x = INPUTS_CFG_CHECK_X; frame.size.y = INPUTS_CFG_CHECK_Y; app->CheckBox_Emulate_Digital = widget_checkbox_add(app->box, &frame, &app->CheckBox_Emulate_Digital_Value, Inputs_CFG_Emulate_Digital_Handler); widget_disable(app->CheckBox_Emulate_Digital); } // Draw input base draw_sprite(app->box->gfx_buffer, Graphics.Inputs.InputsBase, 10, 34); // Draw current peripheral Inputs_CFG_Peripherals_Draw(); // Draw current input source Inputs_CFG_Current_Source_Draw (); }
void listview_set_show_scrollbar ( listview *lv, gboolean enabled ) { if ( lv ) { if ( enabled ) { widget_enable ( WIDGET ( lv->scrollbar ) ); } else { widget_disable ( WIDGET ( lv->scrollbar ) ); } listview_recompute_elements ( lv ); } }
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); } }
static cb_ret_t confvfs_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data) { switch (msg) { case MSG_ACTION: /* message from "Always use ftp proxy" checkbutton */ if (sender != NULL && sender->id == ftpfs_always_use_proxy_id) { const gboolean not_use = !(CHECK (sender)->state & C_BOOL); Widget *wi; /* input */ wi = dlg_find_by_id (DIALOG (w), ftpfs_proxy_host_id); widget_disable (wi, not_use); return MSG_HANDLED; } return MSG_NOT_HANDLED; default: return dlg_default_callback (w, sender, msg, parm, data); } }
void Inputs_CFG_Current_Source_Change (t_widget *w) { t_app_inputs_config *app = &Inputs_CFG; // Global instance if (w->mouse_buttons_activation & 1) { app->Current_Source++; if (app->Current_Source == Inputs.Sources_Max) app->Current_Source = 0; } else if (w->mouse_buttons_activation & 2) { if (app->Current_Source == 0) app->Current_Source = Inputs.Sources_Max; app->Current_Source--; } Inputs_CFG_Current_Source_Draw (); widget_checkbox_set_pvalue (app->CheckBox_Enabled, &Inputs.Sources [app->Current_Source]->enabled); widget_checkbox_redraw (app->CheckBox_Enabled); if (app->Current_Map != -1) Inputs_CFG_Map_Change_End (); // a bit crap... { t_input_src *input_src = Inputs.Sources [app->Current_Source]; if (input_src->flags & INPUT_SRC_FLAGS_ANALOG) { app->CheckBox_Emulate_Digital_Value = (input_src->flags & INPUT_SRC_FLAGS_EMULATE_DIGITAL) ? TRUE : FALSE; widget_enable (app->CheckBox_Emulate_Digital); widget_checkbox_redraw (app->CheckBox_Emulate_Digital); } else { widget_disable (app->CheckBox_Emulate_Digital); } } }
static cb_ret_t configure_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data) { switch (msg) { case MSG_ACTION: /* message from "Single press" checkbutton */ if (sender != NULL && sender->id == configure_old_esc_mode_id) { const gboolean not_single = !(CHECK (sender)->state & C_BOOL); Widget *ww; /* input line */ ww = dlg_find_by_id (DIALOG (w), configure_time_out_id); widget_disable (ww, not_single); return MSG_HANDLED; } return MSG_NOT_HANDLED; default: return dlg_default_callback (w, sender, msg, parm, data); } }
int main ( G_GNUC_UNUSED int argc, G_GNUC_UNUSED char **argv ) { // box 20 by 40 widget *wid= (widget*)g_malloc0(sizeof(widget)); widget_resize ( wid, 20, 40); widget_move ( wid, 10, 10); // Getter, setter x pos // TASSERT( widget_get_x_pos ( wid ) == 10 ); TASSERT( widget_get_y_pos ( wid ) == 10 ); // Left of box TASSERT ( widget_intersect ( wid, 0, 0) == 0 ); TASSERT ( widget_intersect ( wid, 0, 10) == 0 ); TASSERT ( widget_intersect ( wid, 0, 25) == 0 ); TASSERT ( widget_intersect ( wid, 0, 40) == 0 ); TASSERT ( widget_intersect ( wid, 0, 50) == 0 ); TASSERT ( widget_intersect ( wid, 9, 0) == 0 ); TASSERT ( widget_intersect ( wid, 9, 10) == 0 ); TASSERT ( widget_intersect ( wid, 9, 25) == 0 ); TASSERT ( widget_intersect ( wid, 9, 40) == 0 ); TASSERT ( widget_intersect ( wid, 9, 50) == 0 ); TASSERT ( widget_intersect ( wid, 10, 0) == 0 ); TASSERT ( widget_intersect ( wid, 10, 10) == 1 ); TASSERT ( widget_intersect ( wid, 10, 25) == 1 ); TASSERT ( widget_intersect ( wid, 10, 40) == 1 ); TASSERT ( widget_intersect ( wid, 10, 50) == 0 ); // Middle TASSERT ( widget_intersect ( wid, 25, 0) == 0 ); TASSERT ( widget_intersect ( wid, 25, 10) == 1 ); TASSERT ( widget_intersect ( wid, 25, 25) == 1 ); TASSERT ( widget_intersect ( wid, 25, 40) == 1 ); TASSERT ( widget_intersect ( wid, 25, 50) == 0 ); // Right TASSERT ( widget_intersect ( wid, 29, 0) == 0 ); TASSERT ( widget_intersect ( wid, 29, 10) == 1 ); TASSERT ( widget_intersect ( wid, 29, 25) == 1 ); TASSERT ( widget_intersect ( wid, 29, 40) == 1 ); TASSERT ( widget_intersect ( wid, 29, 50) == 0 ); TASSERT ( widget_intersect ( wid, 30, 0) == 0 ); TASSERT ( widget_intersect ( wid, 30, 10) == 0 ); TASSERT ( widget_intersect ( wid, 30, 25) == 0 ); TASSERT ( widget_intersect ( wid, 30, 40) == 0 ); TASSERT ( widget_intersect ( wid, 30, 50) == 0 ); widget_move ( wid, 30, 30); // Left of box TASSERT ( widget_intersect ( wid, 10, 20) == 0 ); TASSERT ( widget_intersect ( wid, 10, 30) == 0 ); TASSERT ( widget_intersect ( wid, 10, 45) == 0 ); TASSERT ( widget_intersect ( wid, 10, 60) == 0 ); TASSERT ( widget_intersect ( wid, 10, 70) == 0 ); TASSERT ( widget_intersect ( wid, 19, 20) == 0 ); TASSERT ( widget_intersect ( wid, 19, 30) == 0 ); TASSERT ( widget_intersect ( wid, 19, 45) == 0 ); TASSERT ( widget_intersect ( wid, 19, 60) == 0 ); TASSERT ( widget_intersect ( wid, 19, 70) == 0 ); TASSERT ( widget_intersect ( wid, 30, 20) == 0 ); TASSERT ( widget_intersect ( wid, 30, 30) == 1 ); TASSERT ( widget_intersect ( wid, 30, 45) == 1 ); TASSERT ( widget_intersect ( wid, 30, 60) == 1 ); TASSERT ( widget_intersect ( wid, 30, 70) == 0 ); // Middle TASSERT ( widget_intersect ( wid, 20+25,20+ 0) == 0 ); TASSERT ( widget_intersect ( wid, 20+25,20+ 10) == 1 ); TASSERT ( widget_intersect ( wid, 20+25,20+ 25) == 1 ); TASSERT ( widget_intersect ( wid, 20+25,20+ 40) == 1 ); TASSERT ( widget_intersect ( wid, 20+25,20+ 50) == 0 ); TASSERT ( widget_intersect ( wid, 20+29, 20+0) == 0 ); TASSERT ( widget_intersect ( wid, 20+29, 20+10) == 1 ); TASSERT ( widget_intersect ( wid, 20+29, 20+25) == 1 ); TASSERT ( widget_intersect ( wid, 20+29, 20+40) == 1 ); TASSERT ( widget_intersect ( wid, 20+29, 20+50) == 0 ); TASSERT ( widget_intersect ( wid, 20+30, 20+0) == 0 ); TASSERT ( widget_intersect ( wid, 20+30, 20+10) == 0 ); TASSERT ( widget_intersect ( wid, 20+30, 20+25) == 0 ); TASSERT ( widget_intersect ( wid, 20+30, 20+40) == 0 ); TASSERT ( widget_intersect ( wid, 20+30, 20+50) == 0 ); // Right TASSERT ( widget_intersect ( wid, 20+29, 20+0) == 0 ); TASSERT ( widget_intersect ( wid, 20+29, 20+10) == 1 ); TASSERT ( widget_intersect ( wid, 20+29, 20+25) == 1 ); TASSERT ( widget_intersect ( wid, 20+29, 20+40) == 1 ); TASSERT ( widget_intersect ( wid, 20+29, 20+50) == 0 ); TASSERT ( widget_intersect ( wid, 20+30, 20+0) == 0 ); TASSERT ( widget_intersect ( wid, 20+30, 20+10) == 0 ); TASSERT ( widget_intersect ( wid, 20+30, 20+25) == 0 ); TASSERT ( widget_intersect ( wid, 20+30, 20+40) == 0 ); TASSERT ( widget_intersect ( wid, 20+30, 20+50) == 0 ); TASSERT ( widget_intersect ( wid, -100, -100) == 0); TASSERT ( widget_intersect ( wid, INT_MIN, INT_MIN) == 0); TASSERT ( widget_intersect ( wid, INT_MAX, INT_MAX) == 0); // Other wrappers. TASSERT ( widget_get_height ( wid ) == wid->h); TASSERT ( widget_get_width ( wid ) == wid->w); TASSERT ( widget_enabled ( wid ) == FALSE ); widget_enable ( wid ); TASSERT ( widget_enabled ( wid ) == TRUE ); widget_disable ( wid ); TASSERT ( widget_enabled ( wid ) == FALSE ); // Null pointer tests. TASSERT ( widget_intersect ( NULL, 0, 0) == 0 ); widget_move ( NULL, 0, 0 ); TASSERT ( widget_get_height ( NULL ) == 0); TASSERT ( widget_get_width ( NULL ) == 0); TASSERT ( widget_enabled ( NULL ) == 0); widget_disable ( NULL ); widget_enable ( NULL ); widget_draw ( NULL, NULL ); widget_free ( NULL ); widget_resize ( NULL, 0, 0); widget_update ( NULL ); widget_queue_redraw ( NULL ); TASSERT (widget_need_redraw ( NULL ) == FALSE); widget_clicked ( NULL, NULL ); widget_set_clicked_handler ( NULL, NULL, NULL ); g_free(wid); }
widget_t* home_screen_create() { home_screen_t* s = calloc(1, sizeof(home_screen_t)); s->sample_timestamp = chTimeNow(); s->screen = widget_create(NULL, &home_widget_class, s, display_rect); widget_set_background(s->screen, BLACK); rect_t rect = { .x = TILE_X(0), .y = TILE_Y(0), .width = TILE_SPAN(3), .height = TILE_SPAN(2), }; s->stage_widget = widget_create(s->screen, NULL, NULL, rect); widget_set_background(s->stage_widget, GREEN); rect.x = TILE_X(3); rect.width = TILE_SPAN(1); rect.height = TILE_SPAN(1); s->sensors[SENSOR_1].button = button_create(s->screen, rect, img_temp_med, WHITE, STEEL, click_sensor_button); rect.y = TILE_Y(1); s->sensors[SENSOR_2].button = button_create(s->screen, rect, img_temp_med, WHITE, STEEL, click_sensor_button); rect.x = TILE_X(0); rect.y = TILE_Y(2); s->outputs[OUTPUT_1].button = button_create(s->screen, rect, img_plug, WHITE, STEEL, click_output_button); rect.x = TILE_X(1); s->outputs[OUTPUT_2].button = button_create(s->screen, rect, img_plug, WHITE, STEEL, click_output_button); rect.x = TILE_X(2); s->conn_button = button_create(s->screen, rect, img_signal, RED, STEEL, click_conn_button); rect.x = TILE_X(3); s->settings_button = button_create(s->screen, rect, img_settings, WHITE, COBALT, click_settings_button); rect.x = 0; rect.width = TILE_SPAN(3); s->sensors[SENSOR_1].quantity_widget = quantity_widget_create(s->stage_widget, rect, app_cfg_get_temp_unit()); widget_disable(s->sensors[SENSOR_1].quantity_widget); s->sensors[SENSOR_2].quantity_widget = quantity_widget_create(s->stage_widget, rect, app_cfg_get_temp_unit()); widget_disable(s->sensors[SENSOR_2].quantity_widget); place_quantity_widgets(s); set_output_settings(s, OUTPUT_1, temp_control_get_output_function(OUTPUT_1)); set_output_settings(s, OUTPUT_2, temp_control_get_output_function(OUTPUT_2)); gui_msg_subscribe(MSG_SENSOR_SAMPLE, s->screen); gui_msg_subscribe(MSG_SENSOR_TIMEOUT, s->screen); gui_msg_subscribe(MSG_OUTPUT_STATUS, s->screen); gui_msg_subscribe(MSG_TEMP_UNIT, s->screen); gui_msg_subscribe(MSG_NET_STATUS, s->screen); gui_msg_subscribe(MSG_API_STATUS, s->screen); gui_msg_subscribe(MSG_CONTROLLER_SETTINGS, s->screen); gui_msg_subscribe(MSG_API_CONTROLLER_SETTINGS, s->screen); return s->screen; } void home_screen_destroy(widget_t* w) { home_screen_t* s = widget_get_instance_data(w); gui_msg_unsubscribe(MSG_SENSOR_SAMPLE, s->screen); gui_msg_unsubscribe(MSG_SENSOR_TIMEOUT, s->screen); gui_msg_unsubscribe(MSG_OUTPUT_STATUS, s->screen); gui_msg_unsubscribe(MSG_TEMP_UNIT, s->screen); gui_msg_unsubscribe(MSG_NET_STATUS, s->screen); gui_msg_unsubscribe(MSG_API_STATUS, s->screen); gui_msg_unsubscribe(MSG_CONTROLLER_SETTINGS, s->screen); gui_msg_unsubscribe(MSG_API_CONTROLLER_SETTINGS, s->screen); free(s); }
static cb_ret_t display_callback (Dlg_head * h, Widget * sender, dlg_msg_t msg, int parm, void *data) { switch (msg) { case DLG_KEY: if (parm == '\n') { if (dlg_widget_active (display_radio)) { input_assign_text (display_mini_status, displays_status[display_radio->sel]); dlg_stop (h); return MSG_HANDLED; } if (dlg_widget_active (display_user_format)) { h->ret_value = B_USER + 6; dlg_stop (h); return MSG_HANDLED; } if (dlg_widget_active (display_mini_status)) { h->ret_value = B_USER + 7; dlg_stop (h); return MSG_HANDLED; } } if ((g_ascii_tolower (parm) == display_user_hotkey) && dlg_widget_active (display_user_format) && dlg_widget_active (display_mini_status)) { display_radio->pos = display_radio->sel = 3; dlg_select_widget (display_radio); /* force redraw */ h->callback (h, (Widget *) display_radio, DLG_ACTION, 0, NULL); return MSG_HANDLED; } return MSG_NOT_HANDLED; case DLG_ACTION: if (sender == (Widget *) display_radio) { if (!(display_check_status->state & C_BOOL)) input_assign_text (display_mini_status, displays_status[display_radio->sel]); input_update (display_mini_status, FALSE); input_update (display_user_format, FALSE); widget_disable (display_user_format->widget, display_radio->sel != 3); return MSG_HANDLED; } if (sender == (Widget *) display_check_status) { if (display_check_status->state & C_BOOL) { widget_disable (display_mini_status->widget, FALSE); input_assign_text (display_mini_status, displays_status[3]); } else { widget_disable (display_mini_status->widget, TRUE); input_assign_text (display_mini_status, displays_status[display_radio->sel]); } input_update (display_mini_status, FALSE); return MSG_HANDLED; } return MSG_NOT_HANDLED; default: return default_dlg_callback (h, sender, msg, parm, data); } }
static cb_ret_t panel_listing_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data) { WDialog *h = DIALOG (w); switch (msg) { case MSG_KEY: if (parm == '\n') { Widget *wi; wi = dlg_find_by_id (h, panel_listing_types_id); if (widget_is_active (wi)) { WInput *in; in = INPUT (dlg_find_by_id (h, mini_user_format_id)); input_assign_text (in, status_format[RADIO (wi)->sel]); dlg_stop (h); return MSG_HANDLED; } wi = dlg_find_by_id (h, panel_user_format_id); if (widget_is_active (wi)) { h->ret_value = B_USER + 6; dlg_stop (h); return MSG_HANDLED; } wi = dlg_find_by_id (h, mini_user_format_id); if (widget_is_active (wi)) { h->ret_value = B_USER + 7; dlg_stop (h); return MSG_HANDLED; } } if (g_ascii_tolower (parm) == listing_user_hotkey) { Widget *wi; wi = dlg_find_by_id (h, panel_user_format_id); if (widget_is_active (wi)) { wi = dlg_find_by_id (h, mini_user_format_id); if (widget_is_active (wi)) { WRadio *r; r = RADIO (dlg_find_by_id (h, panel_listing_types_id)); r->pos = r->sel = panel_listing_user_idx; dlg_select_widget (WIDGET (r)); /* force redraw */ send_message (h, r, MSG_ACTION, 0, NULL); return MSG_HANDLED; } } } return MSG_NOT_HANDLED; case MSG_ACTION: if (sender != NULL && sender->id == panel_listing_types_id) { WCheck *ch; WInput *in1, *in2, *in3; in1 = INPUT (dlg_find_by_id (h, panel_user_format_id)); in2 = INPUT (dlg_find_by_id (h, panel_brief_cols_id)); ch = CHECK (dlg_find_by_id (h, mini_user_status_id)); in3 = INPUT (dlg_find_by_id (h, mini_user_format_id)); if (!(ch->state & C_BOOL)) input_assign_text (in3, status_format[RADIO (sender)->sel]); input_update (in1, FALSE); input_update (in2, FALSE); input_update (in3, FALSE); widget_disable (WIDGET (in1), RADIO (sender)->sel != panel_listing_user_idx); widget_disable (WIDGET (in2), RADIO (sender)->sel != panel_listing_brief_idx); return MSG_HANDLED; } if (sender != NULL && sender->id == mini_user_status_id) { WInput *in; in = INPUT (dlg_find_by_id (h, mini_user_format_id)); if (CHECK (sender)->state & C_BOOL) { widget_disable (WIDGET (in), FALSE); input_assign_text (in, status_format[3]); } else { WRadio *r; r = RADIO (dlg_find_by_id (h, panel_listing_types_id)); widget_disable (WIDGET (in), TRUE); input_assign_text (in, status_format[r->sel]); } /* input_update (in, FALSE); */ return MSG_HANDLED; } return MSG_NOT_HANDLED; default: return dlg_default_callback (w, sender, msg, parm, data); } }
static WDialog * init_layout (void) { WDialog *layout_dlg; int l1 = 0, width; int b1, b2, b; size_t i; const char *title1 = N_("Panel split"); const char *title2 = N_("Console output"); const char *title3 = N_("Other options"); const char *s_split_direction[2] = { N_("&Vertical"), N_("&Horizontal") }; const char *ok_button = N_("&OK"); const char *cancel_button = N_("&Cancel"); output_lines_label = _("Output lines:"); /* save old params */ _menubar_visible = menubar_visible; _command_prompt = command_prompt; _keybar_visible = mc_global.keybar_visible; _message_visible = mc_global.message_visible; _xterm_title = xterm_title; _free_space = free_space; old_output_lines = -1; _output_lines = output_lines; #ifdef ENABLE_NLS { static gboolean i18n = FALSE; title1 = _(title1); title2 = _(title2); title3 = _(title3); i = G_N_ELEMENTS (s_split_direction); while (i-- != 0) s_split_direction[i] = _(s_split_direction[i]); if (!i18n) { for (i = 0; i < (size_t) LAYOUT_OPTIONS_COUNT; i++) check_options[i].text = _(check_options[i].text); i18n = TRUE; } ok_button = _(ok_button); cancel_button = _(cancel_button); } #endif /* radiobuttons */ i = G_N_ELEMENTS (s_split_direction); while (i-- != 0) l1 = max (l1, str_term_width1 (s_split_direction[i]) + 7); /* checkboxes */ for (i = 0; i < (size_t) LAYOUT_OPTIONS_COUNT; i++) l1 = max (l1, str_term_width1 (check_options[i].text) + 7); /* groupboxes */ l1 = max (l1, str_term_width1 (title1) + 4); l1 = max (l1, str_term_width1 (title2) + 4); l1 = max (l1, str_term_width1 (title3) + 4); /* label + "+"/"-" buttons */ output_lines_label_len = str_term_width1 (output_lines_label); l1 = max (l1, output_lines_label_len + 12); /* buttons */ b1 = str_term_width1 (ok_button) + 5; /* default button */ b2 = str_term_width1 (cancel_button) + 3; b = b1 + b2 + 1; /* dialog width */ width = max (l1 * 2 + 7, b); layout_dlg = dlg_create (TRUE, 0, 0, 15, width, dialog_colors, layout_callback, NULL, "[Layout]", _("Layout"), DLG_CENTER); #define XTRACT(i) *check_options[i].variable, check_options[i].text /* "Panel split" groupbox */ add_widget (layout_dlg, groupbox_new (2, 3, 6, l1, title1)); radio_widget = radio_new (3, 5, 2, s_split_direction); radio_widget->sel = panels_layout.horizontal_split; add_widget (layout_dlg, radio_widget); check_options[0].widget = check_new (5, 5, XTRACT (0)); add_widget (layout_dlg, check_options[0].widget); equal_split = panels_layout.horizontal_split ? panels_layout.horizontal_equal : panels_layout.vertical_equal; bleft_widget = button_new (6, 8, B_2LEFT, NARROW_BUTTON, "&<", b_left_right_cback); widget_disable (WIDGET (bleft_widget), equal_split); add_widget (layout_dlg, bleft_widget); bright_widget = button_new (6, 14, B_2RIGHT, NARROW_BUTTON, "&>", b_left_right_cback); widget_disable (WIDGET (bright_widget), equal_split); add_widget (layout_dlg, bright_widget); /* "Console output" groupbox */ { const int disabled = mc_global.tty.console_flag != '\0' ? 0 : W_DISABLED; Widget *w; w = WIDGET (groupbox_new (8, 3, 3, l1, title2)); w->options |= disabled; add_widget (layout_dlg, w); w = WIDGET (button_new (9, output_lines_label_len + 5, B_PLUS, NARROW_BUTTON, "&+", bplus_cback)); w->options |= disabled; add_widget (layout_dlg, w); w = WIDGET (button_new (9, output_lines_label_len + 5 + 5, B_MINUS, NARROW_BUTTON, "&-", bminus_cback)); w->options |= disabled; add_widget (layout_dlg, w); } /* "Other options" groupbox */ add_widget (layout_dlg, groupbox_new (2, 4 + l1, 9, l1, title3)); for (i = 1; i < (size_t) LAYOUT_OPTIONS_COUNT; i++) { check_options[i].widget = check_new (i + 2, 6 + l1, XTRACT (i)); add_widget (layout_dlg, check_options[i].widget); } #undef XTRACT add_widget (layout_dlg, hline_new (11, -1, -1)); /* buttons */ add_widget (layout_dlg, button_new (12, (width - b) / 2, B_ENTER, DEFPUSH_BUTTON, ok_button, 0)); add_widget (layout_dlg, button_new (12, (width - b) / 2 + b1 + 1, B_CANCEL, NORMAL_BUTTON, cancel_button, 0)); dlg_select_widget (radio_widget); return layout_dlg; }
static cb_ret_t layout_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data) { WDialog *h = DIALOG (w); switch (msg) { case MSG_DRAW: /* When repainting the whole dialog (e.g. with C-l) we have to update everything */ dlg_default_repaint (h); old_output_lines = -1; update_split (h); if (old_output_lines != _output_lines) { old_output_lines = _output_lines; tty_setcolor (mc_global.tty.console_flag != '\0' ? COLOR_NORMAL : DISABLED_COLOR); widget_move (h, 9, 5); tty_print_string (output_lines_label); widget_move (h, 9, 5 + 3 + output_lines_label_len); tty_printf ("%02d", _output_lines); } return MSG_HANDLED; case MSG_POST_KEY: _menubar_visible = check_options[1].widget->state & C_BOOL; _command_prompt = (check_options[2].widget->state & C_BOOL) != 0; _keybar_visible = check_options[3].widget->state & C_BOOL; _message_visible = check_options[4].widget->state & C_BOOL; _xterm_title = (check_options[5].widget->state & C_BOOL) != 0; _free_space = check_options[6].widget->state & C_BOOL; if (mc_global.tty.console_flag != '\0') { int minimum; if (_output_lines < 0) _output_lines = 0; height = LINES - _keybar_visible - (_command_prompt ? 1 : 0) - _menubar_visible - _output_lines - _message_visible; minimum = MINHEIGHT * (1 + panels_layout.horizontal_split); if (height < minimum) { _output_lines -= minimum - height; height = minimum; } } else height = LINES - _keybar_visible - (_command_prompt ? 1 : 0) - _menubar_visible - _output_lines - _message_visible; if (old_output_lines != _output_lines) { old_output_lines = _output_lines; tty_setcolor (mc_global.tty.console_flag != '\0' ? COLOR_NORMAL : DISABLED_COLOR); widget_move (h, 9, 5 + 3 + output_lines_label_len); tty_printf ("%02d", _output_lines); } return MSG_HANDLED; case MSG_ACTION: if (sender == WIDGET (radio_widget)) { if (panels_layout.horizontal_split != radio_widget->sel) { int eq; panels_layout.horizontal_split = radio_widget->sel; if (panels_layout.horizontal_split) { eq = panels_layout.horizontal_equal; if (eq) panels_layout.top_panel_size = height / 2; } else { eq = panels_layout.vertical_equal; if (eq) panels_layout.left_panel_size = COLS / 2; } widget_disable (WIDGET (bleft_widget), eq); widget_disable (WIDGET (bright_widget), eq); update_split (h); layout_change (); do_refresh (); } else update_split (h); return MSG_HANDLED; } if (sender == WIDGET (check_options[0].widget)) { int eq; if (panels_layout.horizontal_split) { panels_layout.horizontal_equal = check_options[0].widget->state & C_BOOL; eq = panels_layout.horizontal_equal; } else { panels_layout.vertical_equal = check_options[0].widget->state & C_BOOL; eq = panels_layout.vertical_equal; } widget_disable (WIDGET (bleft_widget), eq); widget_disable (WIDGET (bright_widget), eq); update_split (h); layout_change (); do_refresh (); return MSG_HANDLED; } return MSG_NOT_HANDLED; default: return dlg_default_callback (w, sender, msg, parm, data); } }
int main ( G_GNUC_UNUSED int argc, G_GNUC_UNUSED char **argv ) { { box *b = box_create ( "box", BOX_HORIZONTAL ); //box_set_padding ( b, 5 ); widget_resize ( WIDGET (b), 100, 20); widget *wid1 = g_malloc0(sizeof(widget)); box_add ( b , WIDGET( wid1 ), TRUE, 0 ); // Widget not enabled. no width allocated. TASSERTE ( wid1->h, 0); TASSERTE ( wid1->w, 0 ); widget_enable ( WIDGET ( wid1 ) ); widget_update ( WIDGET ( b ) ) ; // Widget enabled. so width allocated. TASSERTE ( wid1->h, 20); TASSERTE ( wid1->w, 100 ); widget *wid2 = g_malloc0(sizeof(widget)); widget_enable ( WIDGET ( wid2 ) ); box_add ( b , WIDGET( wid2 ), TRUE, 1 ); TASSERTE ( wid1->h, 20); TASSERTE ( wid1->w, 49); TASSERTE ( wid2->h, 20); TASSERTE ( wid2->w, 49); widget *wid3 = g_malloc0(sizeof(widget)); widget_enable ( WIDGET ( wid3 ) ); box_add ( b , WIDGET( wid3 ), FALSE, 2 ); TASSERTE ( wid1->h, 20); TASSERTE ( wid1->w, 48); TASSERTE ( wid2->h, 20); TASSERTE ( wid2->w, 48); widget_resize ( WIDGET (wid3) , 20, 10 ); // TODO should this happen automagically? widget_update ( WIDGET ( b ) ) ; TASSERTE ( wid1->h, 20); TASSERTE ( wid1->w, 38); TASSERTE ( wid2->h, 20); TASSERTE ( wid2->w, 38); TASSERTE ( wid3->h, 20); TASSERTE ( wid3->w, 20); widget_resize ( WIDGET (b ), 200, 20 ); TASSERTE ( wid1->h, 20); TASSERTE ( wid1->w, 88); TASSERTE ( wid2->h, 20); TASSERTE ( wid2->w, 88); TASSERTE ( wid3->h, 20); TASSERTE ( wid3->w, 20); // TASSERTE ( box_get_fixed_pixels ( b ) , 24 ); widget *wid4 = g_malloc0(sizeof(widget)); widget_enable ( WIDGET ( wid4 ) ); widget_resize ( WIDGET ( wid4 ), 20, 20 ); box_add ( b , WIDGET( wid4 ), FALSE, 5 ); TASSERTE ( wid4->x, 200-20); widget *wid5 = g_malloc0(sizeof(widget)); widget_enable ( WIDGET ( wid5 ) ); widget_resize ( WIDGET ( wid5 ), 20, 20 ); box_add ( b , WIDGET( wid5 ), TRUE, 6 ); TASSERTE ( wid5->x, 149); widget_free ( WIDGET ( b ) ); } { box *b = box_create ( "box", BOX_VERTICAL ); widget_resize ( WIDGET (b), 20, 100); //box_set_padding ( b, 5 ); widget *wid1 = g_malloc0(sizeof(widget)); box_add ( b , WIDGET( wid1 ), TRUE, 0 ); // Widget not enabled. no width allocated. TASSERTE ( wid1->h, 0); TASSERTE ( wid1->w, 0 ); widget_enable ( WIDGET ( wid1 ) ); widget_update ( WIDGET ( b ) ) ; // Widget enabled. so width allocated. TASSERTE ( wid1->h, 100); TASSERTE ( wid1->w, 20 ); widget *wid2 = g_malloc0(sizeof(widget)); widget_enable ( WIDGET ( wid2 ) ); box_add ( b , WIDGET( wid2 ), TRUE, 1 ); TASSERTE ( wid1->w, 20); TASSERTE ( wid1->h, 49); TASSERTE ( wid2->w, 20); TASSERTE ( wid2->h, 49); widget *wid3 = g_malloc0(sizeof(widget)); widget_enable ( WIDGET ( wid3 ) ); box_add ( b , WIDGET( wid3 ), FALSE, 2 ); TASSERTE ( wid1->w, 20); TASSERTE ( wid1->h, 48); TASSERTE ( wid2->w, 20); TASSERTE ( wid2->h, 48); widget_resize ( WIDGET (wid3) , 10, 20 ); // TODO should this happen automagically? widget_update ( WIDGET ( b ) ) ; TASSERTE ( wid1->w, 20); TASSERTE ( wid1->h, 48); TASSERTE ( wid2->w, 20); TASSERTE ( wid2->h, 48); TASSERTE ( wid3->w, 20); TASSERTE ( wid3->h, 0); widget_resize ( WIDGET (b ), 20, 200 ); TASSERTE ( wid1->w, 20); TASSERTE ( wid1->h, 98); TASSERTE ( wid2->w, 20); TASSERTE ( wid2->h, 98); TASSERTE ( wid3->w, 20); // has no height, gets no height. TASSERTE ( wid3->h, 0); // TASSERTE ( box_get_fixed_pixels ( b ) , 4 ); widget *wid4 = g_malloc0(sizeof(widget)); widget_enable ( WIDGET ( wid4 ) ); widget_resize ( WIDGET ( wid4 ), 20, 20 ); box_add ( b , WIDGET( wid4 ), FALSE, 5 ); TASSERTE ( wid4->y, 200); widget *wid5 = g_malloc0(sizeof(widget)); widget_enable ( WIDGET ( wid5 ) ); widget_resize ( WIDGET ( wid5 ), 20, 20 ); box_add ( b , WIDGET( wid5 ), TRUE, 6 ); TASSERTE ( wid5->y, 136); widget_free ( WIDGET ( b ) ); } { box *b = box_create ( "box", BOX_VERTICAL ); widget_resize ( WIDGET (b), 20, 100); //box_set_padding ( b, 5 ); widget *wid1 = g_malloc0(sizeof(widget)); widget_enable(wid1); wid1->clicked = test_widget_clicked; box_add ( b , WIDGET( wid1 ), TRUE, 0 ); widget *wid2 = g_malloc0(sizeof(widget)); widget_enable(wid2); box_add ( b , WIDGET( wid2 ), TRUE, 1 ); xcb_button_press_event_t xce; xce.event_x = 10; xce.event_y = 60; TASSERTE ( widget_clicked ( WIDGET(b), &xce ), 0); xce.event_y = 50; TASSERTE ( widget_clicked ( WIDGET(b), &xce ), 0); xce.event_y = 48; TASSERTE ( widget_clicked ( WIDGET(b), &xce ), 1); widget_disable ( wid2 ); xce.event_y = 60; TASSERTE ( widget_clicked ( WIDGET(b), &xce ), 1); widget_disable ( wid1 ); widget_enable ( wid2 ); TASSERTE ( widget_clicked ( WIDGET(b), &xce ), 0); widget_free ( WIDGET ( b ) ); } }
static cb_ret_t layout_callback (Dlg_head * h, Widget * sender, dlg_msg_t msg, int parm, void *data) { switch (msg) { case DLG_DRAW: /*When repainting the whole dialog (e.g. with C-l) we have to update everything */ common_dialog_repaint (h); old_first_panel_size = -1; old_horizontal_split = -1; old_output_lines = -1; update_split (h); if (old_output_lines != _output_lines) { old_output_lines = _output_lines; tty_setcolor (mc_global.tty.console_flag ? COLOR_NORMAL : DISABLED_COLOR); dlg_move (h, 9, 5); tty_print_string (output_lines_label); dlg_move (h, 9, 5 + 3 + output_lines_label_len); tty_printf ("%02d", _output_lines); } return MSG_HANDLED; case DLG_POST_KEY: _menubar_visible = check_options[5].widget->state & C_BOOL; _command_prompt = check_options[4].widget->state & C_BOOL; _keybar_visible = check_options[3].widget->state & C_BOOL; _message_visible = check_options[2].widget->state & C_BOOL; _xterm_title = check_options[1].widget->state & C_BOOL; _free_space = check_options[0].widget->state & C_BOOL; if (mc_global.tty.console_flag) { int minimum; if (_output_lines < 0) _output_lines = 0; height = LINES - _keybar_visible - _command_prompt - _menubar_visible - _output_lines - _message_visible; minimum = MINHEIGHT * (1 + _horizontal_split); if (height < minimum) { _output_lines -= minimum - height; height = minimum; } } else height = LINES - _keybar_visible - _command_prompt - _menubar_visible - _output_lines - _message_visible; if (old_output_lines != _output_lines) { old_output_lines = _output_lines; tty_setcolor (mc_global.tty.console_flag ? COLOR_NORMAL : DISABLED_COLOR); dlg_move (h, 9, 5 + 3 + output_lines_label_len); tty_printf ("%02d", _output_lines); } return MSG_HANDLED; case DLG_ACTION: if (sender == (Widget *) radio_widget) { if (_horizontal_split != radio_widget->sel) { _horizontal_split = radio_widget->sel; if (_equal_split) { if (_horizontal_split) _first_panel_size = height / 2; else _first_panel_size = COLS / 2; } } update_split (h); return MSG_HANDLED; } if (sender == (Widget *) check_options[6].widget) { _equal_split = check_options[6].widget->state & C_BOOL; widget_disable (bleft_widget->widget, _equal_split); send_message ((Widget *) bleft_widget, WIDGET_DRAW, 0); widget_disable (bright_widget->widget, _equal_split); send_message ((Widget *) bright_widget, WIDGET_DRAW, 0); update_split (h); return MSG_HANDLED; } return MSG_NOT_HANDLED; default: return default_dlg_callback (h, sender, msg, parm, data); } }
void create_autoeditwin( list_item_t *item ) { int w, h, btn_w; char *srv_title, *chan_title, *srv_text, *chn_text; int text_w, c; object_t *aew_lbl_server, *aew_lbl_channels; layout_t *lt; bounds_t *b; char lt_str[512]; int enable = 1; aew_edit_item = item; w = 400; h = 150; btn_w = (w-20-(10*(2-1))) / 2; b = new_bounds( -1, -1, w, h ); autoeditwin = window_widget_create( bersirc->mainwin, b, cWindowModalDialog | cWindowCenterParent ); window_set_icon( autoeditwin, b_icon("bersirc") ); window_set_title( autoeditwin, lang_phrase_quick( (item==0?"addserver_t":"editserver_t") ) ); object_addhandler( autoeditwin, "destroy", b_autoeditwin_killed ); // input srv_title = lang_phrase_quick( "serveraddy_inp" ); chan_title = lang_phrase_quick( "channels_inp" ); srv_text = ""; chn_text = ""; if ( item != 0 ) { int *ip = item->data[0]; enable = *ip; srv_text = item->data[1]; chn_text = item->data[2]; } text_w = widget_font_string_width( bersirc->mainwin, srv_title, strlen( srv_title ) ); c = widget_font_string_width( bersirc->mainwin, chan_title, strlen( chan_title ) ); if ( c > text_w ) text_w = c; sprintf( lt_str, "[][{25}<|(%d)lblserver|<|txtserver|<][][{25}<|(%d)lblchannels|<|txtchannels|<]" "[][{25}<|enabled|<][][{25}<|btnsave|<|btncancel|<]", text_w, text_w ); lt = layout_create( autoeditwin, lt_str, *b, 10, 10 ); aew_lbl_server = label_widget_create_with_text( autoeditwin, lt_bounds(lt,"lblserver"), 0, srv_title ); aew_txt_server = textbox_widget_create( autoeditwin, lt_bounds(lt,"txtserver"), 0 ); textbox_set_text( aew_txt_server, srv_text ); aew_lbl_channels = label_widget_create_with_text( autoeditwin, lt_bounds(lt,"lblchannels"), 0, chan_title ); aew_txt_channels = textbox_widget_create( autoeditwin, lt_bounds(lt,"txtchannels"), 0 ); textbox_set_text( aew_txt_channels, chn_text ); object_addhandler( autoeditwin, "dialog_ok", b_autoeditwin_save ); object_addhandler( aew_txt_server, "changed", b_autoeditwin_txtchanged ); widget_focus( aew_txt_server ); aew_cbx_enabled = checkbox_widget_create_with_label( autoeditwin, lt_bounds(lt,"enabled"), 0, lang_phrase_quick( "autoitemenable" ) ); checkbox_set_checked( aew_cbx_enabled, enable ); // buttons aw_btnsave = button_widget_create_with_label( autoeditwin, lt_bounds(lt,"btnsave"), 0, lang_phrase_quick( "save" ) ); aw_btncancel = button_widget_create_with_label( autoeditwin, lt_bounds(lt,"btncancel"), 0, lang_phrase_quick( "cancel" ) ); object_addhandler( aw_btnsave, "pushed", b_autoeditwin_save ); object_addhandler( aw_btncancel, "pushed", b_autoeditwin_close ); if ( item == 0 ) widget_disable( OBJECT( aw_btnsave ) ); window_show( autoeditwin ); }