int call_raw_set_msg(sip_msg_t *msg) { ui_t *raw_panel; PANEL *panel; call_raw_info_t *info; if (!msg) return -1; if (!(raw_panel = ui_find_by_type(PANEL_CALL_RAW))) return -1; if (!(panel = raw_panel->panel)) return -1; if (!(info = call_raw_info(panel))) return -1; // Set call raw message info->group = NULL; info->msg = msg; // Initialize internal pad info->padline = 0; wclear(info->pad); // Print the message in the pad call_raw_print_msg(panel, msg); return 0; }
int call_raw_set_group(sip_call_group_t *group) { ui_t *raw_panel; PANEL *panel; call_raw_info_t *info; if (!group) return -1; if (!(raw_panel = ui_find_by_type(PANEL_CALL_RAW))) return -1; if (!(panel = raw_panel->panel)) return -1; if (!(info = call_raw_info(panel))) return -1; // Set call raw call group info->group = group; info->msg = NULL; // Initialize internal pad info->padline = 0; wclear(info->pad); return 0; }
void column_select_update_columns(ui_t *ui) { int column, attr_id; // Get panel information column_select_info_t *info = column_select_info(ui); // Set enabled fields ui_t *ui_list = ui_find_by_type(PANEL_CALL_LIST); call_list_info_t *list_info = call_list_info(ui_list); // Reset column count list_info->columncnt = 0; // Add all selected columns for (column = 0; column < item_count(info->menu); column++) { // If column is active if (!strncmp(item_name(info->items[column]), "[ ]", 3)) continue; // Get column attribute attr_id = sip_attr_from_name(item_userptr(info->items[column])); // Add a new column to the list call_list_add_column(ui_list, attr_id, sip_attr_get_name(attr_id), sip_attr_get_title(attr_id), sip_attr_get_width(attr_id)); } }
void column_select_create(ui_t *ui) { int attr_id, column; MENU *menu; column_select_info_t *info; // Cerate a new indow for the panel and form ui_panel_create(ui, 20, 60); // Initialize Filter panel specific data info = sng_malloc(sizeof(column_select_info_t)); // Store it into panel userptr set_panel_userptr(ui->panel, (void*) info); // Initialize the fields info->fields[FLD_COLUMNS_ACCEPT] = new_field(1, 10, ui->height - 2, 13, 0, 0); info->fields[FLD_COLUMNS_SAVE] = new_field(1, 10, ui->height - 2, 25, 0, 0); info->fields[FLD_COLUMNS_CANCEL] = new_field(1, 10, ui->height - 2, 37, 0, 0); info->fields[FLD_COLUMNS_COUNT] = NULL; // Field Labels set_field_buffer(info->fields[FLD_COLUMNS_ACCEPT], 0, "[ Accept ]"); set_field_buffer(info->fields[FLD_COLUMNS_SAVE], 0, "[ Save ]"); set_field_buffer(info->fields[FLD_COLUMNS_CANCEL], 0, "[ Cancel ]"); // Create the form and post it info->form = new_form(info->fields); set_form_sub(info->form, ui->win); post_form(info->form); // Create a subwin for the menu area info->menu_win = derwin(ui->win, 10, ui->width - 2, 7, 0); // Initialize one field for each attribute for (attr_id = 0; attr_id < SIP_ATTR_COUNT; attr_id++) { // Create a new field for this column info->items[attr_id] = new_item("[ ]", sip_attr_get_description(attr_id)); set_item_userptr(info->items[attr_id], (void*) sip_attr_get_name(attr_id)); } info->items[SIP_ATTR_COUNT] = NULL; // Create the columns menu and post it info->menu = menu = new_menu(info->items); // Set current enabled fields // FIXME Stealing Call list columns :/ call_list_info_t *list_info = call_list_info(ui_find_by_type(PANEL_CALL_LIST)); // Enable current enabled fields and move them to the top for (column = 0; column < list_info->columncnt; column++) { const char *attr = list_info->columns[column].attr; for (attr_id = 0; attr_id < item_count(menu); attr_id++) { if (!strcmp(item_userptr(info->items[attr_id]), attr)) { column_select_toggle_item(ui, info->items[attr_id]); column_select_move_item(ui, info->items[attr_id], column); break; } } } // Set main window and sub window set_menu_win(menu, ui->win); set_menu_sub(menu, derwin(ui->win, 10, ui->width - 5, 7, 2)); set_menu_format(menu, 10, 1); set_menu_mark(menu, ""); set_menu_fore(menu, COLOR_PAIR(CP_DEF_ON_BLUE)); menu_opts_off(menu, O_ONEVALUE); post_menu(menu); // Draw a scrollbar to the right info->scroll = ui_set_scrollbar(info->menu_win, SB_VERTICAL, SB_RIGHT); info->scroll.max = item_count(menu) - 1; ui_scrollbar_draw(info->scroll); // Set the window title and boxes mvwprintw(ui->win, 1, ui->width / 2 - 14, "Call List columns selection"); wattron(ui->win, COLOR_PAIR(CP_BLUE_ON_DEF)); title_foot_box(ui->panel); mvwhline(ui->win, 6, 1, ACS_HLINE, ui->width - 1); mvwaddch(ui->win, 6, 0, ACS_LTEE); mvwaddch(ui->win, 6, ui->width - 1, ACS_RTEE); wattroff(ui->win, COLOR_PAIR(CP_BLUE_ON_DEF)); // Some brief explanation abotu what window shows wattron(ui->win, COLOR_PAIR(CP_CYAN_ON_DEF)); mvwprintw(ui->win, 3, 2, "This windows show the list of columns displayed on Call"); mvwprintw(ui->win, 4, 2, "List. You can enable/disable using Space Bar and reorder"); mvwprintw(ui->win, 5, 2, "them using + and - keys."); wattroff(ui->win, COLOR_PAIR(CP_CYAN_ON_DEF)); info->form_active = 0; }
ui_t * ui_create_panel(enum panel_types type) { // Find the panel of given type and create it return ui_create(ui_find_by_type(type)); }
void filter_save_options(PANEL *panel) { char field_value[30]; char *expr; int field_id; char method_expr[256]; // Initialize variables memset(method_expr, 0, sizeof(method_expr)); // Get panel information filter_info_t *info = filter_info(panel); for (field_id = 0; field_id < FLD_FILTER_COUNT; field_id++) { // Get current field value. // We trim spaces with sscanf because and empty field is stored as // space characters memset(field_value, 0, sizeof(field_value)); strcpy(field_value, field_buffer(info->fields[field_id], 0)); strtrim(field_value); // Set filter expression expr = strlen(field_value) ? field_value : NULL; switch (field_id) { case FLD_FILTER_SIPFROM: filter_set(FILTER_SIPFROM, expr); break; case FLD_FILTER_SIPTO: filter_set(FILTER_SIPTO, expr); break; case FLD_FILTER_SRC: filter_set(FILTER_SOURCE, expr); break; case FLD_FILTER_DST: filter_set(FILTER_DESTINATION, expr); break; case FLD_FILTER_PAYLOAD: filter_set(FILTER_PAYLOAD, expr); break; case FLD_FILTER_REGISTER: case FLD_FILTER_INVITE: case FLD_FILTER_SUBSCRIBE: case FLD_FILTER_NOTIFY: case FLD_FILTER_OPTIONS: case FLD_FILTER_PUBLISH: case FLD_FILTER_MESSAGE: if (!strcmp(field_value, "*")) { if (strlen(method_expr)) { sprintf(method_expr + strlen(method_expr), ",%s", filter_field_method(field_id)); } else { strcpy(method_expr, filter_field_method(field_id)); } } break; default: break; } } // Set Method filter filter_method_from_setting(method_expr); // Force filter evaluation filter_reset_calls(); // TODO FIXME Refresh call list FIXME call_list_clear(ui_get_panel(ui_find_by_type(PANEL_CALL_LIST))); }