void demo_init_gui(void) { InitBMPINFO(&icon); LoadBmp(&icon, "icon.bmp"); load_fonts(); gui_desktop_enable(); gui_desktop_set_color(CLRSCR_COLOR2); form = gui_create_widget(GUI_WIDGET_FORM, 180, 120, 632, 500, 0, 0, 0, FORM_STYLE_XP_BORDER|FORM_STYLE_TITLE); if(!form) goto err; gui_form_init_private(form, 128); gui_form_set_caption(form, "控件演示"); gui_form_set_icon(form, &icon); edit = gui_create_widget(GUI_WIDGET_EDIT, 80, 270, 460, 48, color, bkcolor, 0, style); if(!edit) goto err; gui_edit_init_private(edit, 128); gui_edit_set_text(edit, "这是一个文本框"); button = gui_create_widget(GUI_WIDGET_BUTTON, 235+156, 142+100, 236, 32, COLOR_YELLOW, 64, font16, 0); /*BUTTON_STYLE_CLIENT_BDR*/ if(!edit) goto err; gui_button_init_private(button, 128); gui_button_set_caption(button, "将那个Label盖住"); test = gui_create_widget(GUI_WIDGET_EDIT, 80, 330, 460, 32, 0, 0, 0, 0); if(!test) goto err; gui_edit_init_private(test, 128); gui_edit_set_text(test, ""); label = gui_create_widget(GUI_WIDGET_LABEL, 80, 380, 460, 64, COLOR_WHITE, 66, font48, LABEL_STYLE_SUBSIDE); if(!edit) goto err; gui_label_init_private(label, 128); gui_label_set_text(label, "Startting..."); view = gui_create_widget(GUI_WIDGET_VIEW, 80, 48, 460, 200, 0, 0, 0, VIEW_STYLE_NONE_FIRST|VIEW_STYLE_FIELDS_TITLE|VIEW_STYLE_STATISTIC_BAR); if(!view) goto err; init_view(view); progress1 = gui_create_widget(GUI_WIDGET_PROGRESS, 80, 251, 460, 14, 0, 0, 0, PROGRESS_STYLE_BORDER); if(!progress1) goto err; gui_progress_init_private(progress1, 100); dialog = input_dialog_initialize(&abcde); if(!dialog) goto err; gui_widget_link(NULL, form); gui_widget_link(form, view); gui_widget_link(form, edit); gui_widget_link(form, label); gui_widget_link(form, progress1); gui_widget_link(form, test); gui_widget_link(NULL, dialog); gui_widget_link(NULL, button); window1 = gui_create_window(form); gui_show_window(window1); window2 = gui_create_window(dialog); gui_show_window(window2); window3 = gui_create_window(button); gui_show_window(window3); gui_form_set_caption(form, os_get_description()); StartGUI(); err: return; }
/*------------------------------------------------------------------------------------ * 函数: start() * * 描述: 应用程序启始例程 **----------------------------------------------------------------------------------*/ void __task start(void * data) { data = data; /* TaskCreate(demo_task, (void *)1, "demo1", NULL, 512, 1, TASK_CREATE_OPT_NONE); TaskCreate(demo_task, (void *)2, "demo2", NULL, 512, 2, TASK_CREATE_OPT_NONE); TaskCreate(demo_task, (void *)3, "demo3", NULL, 512, 3, TASK_CREATE_OPT_NONE); TaskCreate(demo_task, (void *)4, "demo4", NULL, 512, 4, TASK_CREATE_OPT_NONE); TaskCreate(demo_task, (void *)5, "demo5", NULL, 512, 5, TASK_CREATE_OPT_NONE); TaskCreate(demo_task, (void *)6, "demo6", NULL, 512, 6, TASK_CREATE_OPT_NONE); TaskCreate(demo_task, (void *)7, "demo7", NULL, 512, 7, TASK_CREATE_OPT_NONE); TaskCreate(demo_task, (void *)8, "demo8", NULL, 512, 8, TASK_CREATE_OPT_NONE); */ demo_init_gui(); TaskCreate(refresh_task, NULL, "refresh", NULL, 2048, 8, TASK_CREATE_OPT_NONE); OpenConsole(); RegisterSpecialKey('x', move_button); for(;;){ KEYCODE key; char buf[64] = {0, }; key = gui_edit_input(test, buf, 32, 0); /* use superkey alt-x-k to quit! */ switch(key){ case UP: gui_view_move_up(view); break; case DOWN: gui_view_move_down(view); break; case PGUP: gui_view_page_up(view); break; case PGDN: gui_view_page_down(view); break; } switch(buf[0]){ default: break; case 'c': case 'C': color = atoi(&buf[1]); gui_set_widget_color(edit, color); break; case 'b': case 'B': bkcolor = atoi(&buf[1]); gui_set_widget_bkcolor(edit, bkcolor); break; case 's': case 'S': style = STRtoINT16(&buf[1], 0); gui_set_widget_style(edit, style); break; case 'p': case 'P': /* gui_progress_set_value(progress1, atoi(&buf[1])); */ break; case 'a': case 'A': { struct student * t; t = mem_alloc(sizeof(*t)); if(!t) break; sprintf(t->name, "Name"); t->sex = '-'; t->old = 0; sprintf(t->comment, ""); lock_kernel(); t->next = all_students; all_students = t; unlock_kernel(); } break; case 'd': case 'D': /*gui_show_window(window2);*/ input_dialog_method(&abcde, dialog_prepare, dialog_finish, NULL, 1); { static COLOR tmp = 67; gui_desktop_set_color(tmp); tmp += 77; } TaskSleep(10); /*gui_hide_window(window2);*/ break; case 'h': case 'H': gui_hide_window(window3); break; case 'f': case 'F': gui_show_window(window3); break; case 'm': case 'M': while (1) { gui_window_t * w; KEYCODE move; if (buf[0] == 'm') w = window2; else w = window3; move = getkey(); switch (move) { case ESC: goto out_while; case LEFT: gui_window_move(w, -23, 0); break; case RIGHT: gui_window_move(w, 13, 0); break; case UP: gui_window_move(w, 0, -11); break; case DOWN: gui_window_move(w, 0, 23); break; case CTRL_LEFT: gui_window_resize(w, -23, 0); break; case CTRL_RIGHT: gui_window_resize(w, 13, 0); break; case CTRL_UP: gui_window_resize(w, 0, -11); break; case CTRL_DOWN: gui_window_resize(w, 0, 23); break; } } out_while: break; case 'e': case 'E': while(1){ key = gui_view_editing(view, 0); if(key == ESC) break; switch(key){ case UP: gui_view_move_up(view); break; case DOWN: gui_view_move_down(view); break; default: break; } } break; } } }
int window_sessions_list_run_command(gui_t* gui, int c) { int busylines[MAX_SIPUA_LINES]; int nbusy; ogmp_curses_t* ocui = gui->topui; nbusy = ocui->sipua->busylines(ocui->sipua, busylines, MAX_SIPUA_LINES); curseson(); cbreak(); noecho(); nonl(); keypad(stdscr, TRUE); switch (c) { sipua_call_t* call; case KEY_DOWN: { int n = 0; if(nbusy == 0) { beep(); break; } while(busylines[n] != calllist_line) n++; if(n+1==nbusy) { beep(); break; } calllist_line = busylines[++n]; break; } case KEY_UP: { int n = 0; if(nbusy == 0) { beep(); break; } while(busylines[n] != calllist_line) n++; if(n==0) { beep(); break; } calllist_line = busylines[--n]; break; } case 'n': { if(ocui->sipua->session(ocui->sipua)) { beep(); break; } gui_show_window(gui, GUI_NEWCALL, GUI_SESSION); break; } case 'c': { int n = 0; call = ocui->sipua->session(ocui->sipua); ocui->sipua->bye(ocui->sipua, call); while(busylines[n] != calllist_line) n++; if(n > 0) calllist_line = busylines[--n]; else { if(nbusy > 1) calllist_line = busylines[++n]; else calllist_line = -1; } gui->gui_print(gui, gui->parent); break; } case 'a': { call = ocui->sipua->pick(ocui->sipua, calllist_line); if (!call) { beep(); break; } ocui->sipua->answer(ocui->sipua, call, SIP_STATUS_CODE_OK, NULL); break; } case 'z': { call = ocui->sipua->pick(ocui->sipua, calllist_line); if (!call) { beep(); break; } ocui->sipua->queue(ocui->sipua, call); break; } case 'r': { int n = 0; call = ocui->sipua->pick(ocui->sipua, calllist_line); if (!call) { beep(); break; } ocui->sipua->answer(ocui->sipua, call, SIP_STATUS_CODE_TEMPORARILYUNAVAILABLE, NULL); while(busylines[n] != calllist_line) n++; if(n > 0) calllist_line = busylines[--n]; else { if(nbusy > 1) calllist_line = busylines[++n]; else calllist_line = -1; } gui->gui_print(gui, gui->parent); break; } case 'd': { int n = 0; call = ocui->sipua->pick(ocui->sipua, calllist_line); if (!call) { beep(); break; } ocui->sipua->answer(ocui->sipua, call, SIP_STATUS_CODE_DECLINE, NULL); while(busylines[n] != calllist_line) n++; if(n > 0) calllist_line = busylines[--n]; else { if(nbusy > 1) calllist_line = busylines[++n]; else calllist_line = -1; } gui->gui_print(gui, gui->parent); break; } case 'b': { int n = 0; call = ocui->sipua->pick(ocui->sipua, calllist_line); if (!call) { beep(); break; } ocui->sipua->answer(ocui->sipua, call, SIP_STATUS_CODE_BUSYHERE, NULL); while(busylines[n] != calllist_line) n++; if(n > 0) calllist_line = busylines[--n]; else { if(nbusy > 1) calllist_line = busylines[++n]; else calllist_line = -1; } gui->gui_print(gui, gui->parent); break; } case 'h': { if(ocui->sipua->session(ocui->sipua)) calllist_line = ocui->sipua->hold(ocui->sipua); else { call = ocui->sipua->pick(ocui->sipua, calllist_line); if (!call) { beep(); break; } /* Issue: hold call signal to participant, may release bandwidth or something. * can not simple annswer that cause reestablish call. * ocui->sipua->answer(ocui->sipua, call, SIPUA_STATUS_ANSWER); */ } break; } case 'o': { call = ocui->sipua->pick(ocui->sipua, calllist_line); if (!call) { beep(); break; } ocui->sipua->options_call(ocui->sipua, call); break; } case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '#': case '*': { char dtmf_body[1000]; call = ocui->sipua->pick(ocui->sipua, calllist_line); if (!call) { beep(); break; } snprintf(dtmf_body, 999, "Signal=%c\r\nDuration=250\r\n", c); ocui->sipua->info_call(ocui->sipua, call, "application/dtmf-relay", dtmf_body); break; } default: beep(); return -1; } gui_update(gui); return 0; }