本文整理汇总了C++中wnoutrefresh函数的典型用法代码示例。如果您正苦于以下问题:C++ wnoutrefresh函数的具体用法?C++ wnoutrefresh怎么用?C++ wnoutrefresh使用的例子?那么, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了wnoutrefresh函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: dialog_checklist
//.........这里部分代码省略.........
/* create new window for the list */
list = subwin (dialog, list_height, list_width, y+box_y+1, x+box_x+1);
keypad (list, TRUE);
/* draw a box around the list items */
draw_box (dialog, box_y, box_x, list_height + 2, list_width + 2,
menubox_border_attr, menubox_attr);
/* Find length of longest item in order to center checklist */
check_x = 0;
for (i = 0; i < item_no; i++)
check_x = MAX (check_x, + strlen (items[i * 3 + 1]) + 4);
check_x = (list_width - check_x) / 2;
item_x = check_x + 4;
if (choice >= list_height) {
scroll = choice - list_height + 1;
choice -= scroll;
}
/* Print the list */
for (i = 0; i < max_choice; i++) {
print_item (list, items[(scroll+i) * 3 + 1],
status[i+scroll], i, i == choice);
}
print_arrows(dialog, choice, item_no, scroll,
box_y, box_x + check_x + 5, list_height);
print_buttons(dialog, height, width, 0);
wnoutrefresh (list);
wnoutrefresh (dialog);
doupdate ();
while (key != ESC) {
key = wgetch (dialog);
for (i = 0; i < max_choice; i++)
if (toupper(key) == toupper(items[(scroll+i)*3+1][0]))
break;
if ( i < max_choice || key == KEY_UP || key == KEY_DOWN ||
key == '+' || key == '-' ) {
if (key == KEY_UP || key == '-') {
if (!choice) {
if (!scroll)
continue;
/* Scroll list down */
if (list_height > 1) {
/* De-highlight current first item */
print_item (list, items[scroll * 3 + 1],
status[scroll], 0, FALSE);
scrollok (list, TRUE);
wscrl (list, -1);
scrollok (list, FALSE);
}
scroll--;
print_item (list, items[scroll * 3 + 1],
status[scroll], 0, TRUE);
wnoutrefresh (list);
print_arrows(dialog, choice, item_no, scroll,
示例2: wdg_input_redraw
/*
* called to redraw the menu
*/
static int wdg_input_redraw(struct wdg_object *wo)
{
WDG_WO_EXT(struct wdg_input_handle, ww);
size_t c, l, x, y;
WDG_DEBUG_MSG("wdg_input_redraw");
/* center the window on the screen */
wo->x1 = (current_screen.cols - (ww->x + 2)) / 2;
wo->y1 = (current_screen.lines - (ww->y + 2)) / 2;
wo->x2 = -wo->x1;
wo->y2 = -wo->y1;
c = wdg_get_ncols(wo);
l = wdg_get_nlines(wo);
x = wdg_get_begin_x(wo);
y = wdg_get_begin_y(wo);
/* deal with rouding */
if (l != ww->y + 2) l = ww->y + 2;
if (c != ww->x + 2) c = ww->x + 2;
/* the window already exist */
if (ww->win) {
/* erase the border */
wbkgd(ww->win, COLOR_PAIR(wo->screen_color));
werase(ww->win);
/* destroy the internal form */
wdg_input_form_destroy(wo);
touchwin(ww->win);
wnoutrefresh(ww->win);
/* set the form color */
wbkgd(ww->win, COLOR_PAIR(wo->window_color));
/* resize the window */
mvwin(ww->win, y, x);
wresize(ww->win, l, c);
/* redraw the window */
wdg_input_borders(wo);
/* create the internal form */
wdg_input_form_create(wo);
touchwin(ww->win);
/* the first time we have to allocate the window */
} else {
/* create the menu window (fixed dimensions) */
if ((ww->win = newwin(l, c, y, x)) == NULL)
return -WDG_E_FATAL;
/* set the window color */
wbkgd(ww->win, COLOR_PAIR(wo->window_color));
redrawwin(ww->win);
/* draw the titles */
wdg_input_borders(wo);
/* create the internal form */
wdg_input_form_create(wo);
/* no scrolling for menu */
scrollok(ww->win, FALSE);
}
/* refresh the window */
touchwin(ww->win);
wnoutrefresh(ww->win);
touchwin(ww->fwin);
wnoutrefresh(ww->fwin);
wo->flags |= WDG_OBJ_VISIBLE;
return WDG_E_SUCCESS;
}
示例3: processInput
//.........这里部分代码省略.........
// move the following three to functions
if(*pRest == ' ') { // terminal # followed by space then commands to send to it ... send with newline
strcat(pRest, "\n"); // send newline? ... this needs to be optional
}
if(*pRest == ':') { // terminal # followed by colon then commands to send to it ... send without newline
}
pRest++;
for(j = 0; j < targetCounter; j++) {
i = targets[j];
//fprintf(stderr, "#%d\n", i);
//continue;
if(i < 0 || i > 10) // make sure we have a valid number
continue;
// rest of command should be a terminal-specific command
vtSend(i, pRest); // move past space
/*
if(*pRest == '.') {
pRest++;
if(strcmp(pRest, "close") == 0 || strcmp(pRest, "destroy") == 0) { // destroy terminal
}
if(strcmp(pRest, "hide") == 0) {
}
}
*/
/*
if(*pRest == '-') { // range of terminal numbers
pRest++;
j = strtol(pRest, &pRest, 10); // get last target terminal
if(*pRest == ' ') { // terminal # followed by space then commands to send to it ... send with newline
pRest++; // move past space
strcat(pRest, "\n"); // send newline? ... this needs to be optional
for(i; i <= j; i++) {
vtSend(i-1, pRest);
}
}
if(*pRest == ':') { // terminal # followed by colon then commands to send to it ... send without newline
pRest++; // move past colon
vtSend(i, pRest);
for(; i <= j; i++) {
vtSend(i-1, pRest);
}
}
}
if(*pRest == ',') { // list of terminal numbers
}
*/
}
} else { // command doesn't start with digit
pToken = strtok(command, " ");
if(pToken) {
if(strcmp(pToken, "quit") == 0) {
keepRunning = 0;
}
if(strcmp(pToken, "create") == 0) {
pToken = strtok(NULL, " ");
if(pToken && isdigit(*pToken)) { // probably have a number
numberTerminals = strtol(pToken, NULL, 10); // get target terminal
} else
numberTerminals = 1;
for(i = 0; i < 10; i++) {
if(vtGet(i) != NULL)
numberTerminals++;
}
#ifdef DEBUG
fprintf(stderr, "%d existing terminals, creating 1\n", numberTerminals - 1);
#endif
// we're about to resize terminals, clear the background
wclear(ncursesScreen);
wnoutrefresh(ncursesScreen);
// move terms around if not all positions are filled but last one is
// array of terminals needs to reflect the order they are on the screen
vtCoordPointer = vtCoordinates = divideRectangle_favorHeight(screenWidth, screenHeight - 2, numberTerminals, 1);
for(i = 0; i < 10; i++) {
vt = vtGet(i);
if(vt) {
vtMove(i, *vtCoordPointer, *(vtCoordPointer + 1), *(vtCoordPointer + 2), *(vtCoordPointer + 3));
} else // found a spot to put our new terminal(s)
break;
vtCoordPointer += 4;
}
for(; i < numberTerminals; i++) {
vtCreate(*(vtCoordPointer + 2), *(vtCoordPointer + 3), *vtCoordPointer, *(vtCoordPointer + 1), i);
vtCoordPointer += 4;
}
free(vtCoordinates);
// draw separation lines
}
}
}
return terminalIndex;
}
示例4: void
/* Get a string of input at the statusbar prompt. This should only be
* called from do_prompt(). */
const sc *get_prompt_string(int *actual, bool allow_tabs,
#ifndef DISABLE_TABCOMP
bool allow_files,
#endif
const char *curranswer,
bool *meta_key, bool *func_key,
#ifndef NANO_TINY
filestruct **history_list,
#endif
void (*refresh_func)(void), int menu
#ifndef DISABLE_TABCOMP
, bool *list
#endif
)
{
int kbinput = ERR;
bool have_shortcut, ran_func, finished;
size_t curranswer_len;
const sc *s;
#ifndef DISABLE_TABCOMP
bool tabbed = FALSE;
/* Whether we've pressed Tab. */
#endif
#ifndef NANO_TINY
char *history = NULL;
/* The current history string. */
char *magichistory = NULL;
/* The temporary string typed at the bottom of the history, if
* any. */
#ifndef DISABLE_TABCOMP
int last_kbinput = ERR;
/* The key we pressed before the current key. */
size_t complete_len = 0;
/* The length of the original string that we're trying to
* tab complete, if any. */
#endif
#endif /* !NANO_TINY */
answer = mallocstrcpy(answer, curranswer);
curranswer_len = strlen(answer);
/* If reset_statusbar_x is TRUE, restore statusbar_x and
* statusbar_pww to what they were before this prompt. Then, if
* statusbar_x is uninitialized or past the end of curranswer, put
* statusbar_x at the end of the string and update statusbar_pww
* based on it. We do these things so that the cursor position
* stays at the right place if a prompt-changing toggle is pressed,
* or if this prompt was started from another prompt and we cancel
* out of it. */
if (reset_statusbar_x) {
statusbar_x = old_statusbar_x;
statusbar_pww = old_pww;
}
if (statusbar_x == (size_t)-1 || statusbar_x > curranswer_len) {
statusbar_x = curranswer_len;
statusbar_pww = statusbar_xplustabs();
}
currmenu = menu;
#ifdef DEBUG
fprintf(stderr, "get_prompt_string: answer = \"%s\", statusbar_x = %lu\n", answer, (unsigned long) statusbar_x);
#endif
update_statusbar_line(answer, statusbar_x);
/* Refresh the edit window and the statusbar before getting
* input. */
wnoutrefresh(edit);
wnoutrefresh(bottomwin);
/* If we're using restricted mode, we aren't allowed to change the
* name of the current file once it has one, because that would
* allow writing to files not specified on the command line. In
* this case, disable all keys that would change the text if the
* filename isn't blank and we're at the "Write File" prompt. */
while (1) {
kbinput = do_statusbar_input(meta_key, func_key, &have_shortcut,
&ran_func, &finished, TRUE, refresh_func);
assert(statusbar_x <= strlen(answer));
s = get_shortcut(currmenu, &kbinput, meta_key, func_key);
if (s)
if (s->scfunc == do_cancel || s->scfunc == do_enter_void)
break;
#ifndef DISABLE_TABCOMP
if (s && s->scfunc != do_tab)
tabbed = FALSE;
#endif
#ifndef DISABLE_TABCOMP
#ifndef NANO_TINY
if (s && s->scfunc == do_tab) {
if (history_list != NULL) {
if (last_kbinput != sc_seq_or(do_tab, NANO_CONTROL_I))
//.........这里部分代码省略.........
示例5: blocklist_onDraw
static void blocklist_onDraw(ToxWindow *self, Tox *m, int y2, int x2)
{
wattron(self->window, A_BOLD);
wprintw(self->window, " Blocked: ");
wattroff(self->window, A_BOLD);
wprintw(self->window, "%d\n\n", Blocked.num_blocked);
if ((y2 - FLIST_OFST) <= 0) {
return;
}
uint32_t selected_num = 0;
/* Determine which portion of friendlist to draw based on current position */
int page = Blocked.num_selected / (y2 - FLIST_OFST);
int start = (y2 - FLIST_OFST) * page;
int end = y2 - FLIST_OFST + start;
int i;
for (i = start; i < Blocked.num_blocked && i < end; ++i) {
uint32_t f = Blocked.index[i];
bool f_selected = false;
if (i == Blocked.num_selected) {
wattron(self->window, A_BOLD);
wprintw(self->window, " > ");
wattroff(self->window, A_BOLD);
selected_num = f;
f_selected = true;
} else {
wprintw(self->window, " ");
}
wattron(self->window, COLOR_PAIR(RED));
wprintw(self->window, "x");
wattroff(self->window, COLOR_PAIR(RED));
if (f_selected) {
wattron(self->window, COLOR_PAIR(BLUE));
}
wattron(self->window, A_BOLD);
wprintw(self->window, " %s\n", Blocked.list[f].name);
wattroff(self->window, A_BOLD);
if (f_selected) {
wattroff(self->window, COLOR_PAIR(BLUE));
}
}
wprintw(self->window, "\n");
self->x = x2;
if (Blocked.num_blocked) {
wmove(self->window, y2 - 1, 1);
wattron(self->window, A_BOLD);
wprintw(self->window, "Key: ");
wattroff(self->window, A_BOLD);
int i;
for (i = 0; i < TOX_PUBLIC_KEY_SIZE; ++i) {
wprintw(self->window, "%02X", Blocked.list[selected_num].pub_key[i] & 0xff);
}
}
wnoutrefresh(self->window);
draw_del_popup();
if (self->help->active) {
help_onDraw(self);
}
}
示例6: dialog_checklist
/*
* Display a dialog box with a list of options that can be turned on or off
*/
int dialog_checklist(char *title, char *prompt, int height, int width, int list_height, int item_no, char **items)
{
int i, x, y, cur_x, cur_y, box_x, box_y, key = 0, button = 0, choice = 0,
scrolli = 0, max_choice, *status;
WINDOW *dialog, *list;
/* Allocate space for storing item on/off status */
if ((status = malloc(sizeof(int)*item_no)) == NULL) {
endwin();
fprintf(stderr, "\nCan't allocate memory in dialog_checklist().\n");
exit(-1);
}
/* Initializes status */
for (i = 0; i < item_no; i++)
status[i] = !strcasecmp(items[i*3 + 2], "on");
max_choice = MIN(list_height, item_no);
/* center dialog box on screen */
x = (COLS - width)/2;
y = (LINES - height)/2;
#ifdef HAVE_NCURSES
if (use_shadow)
draw_shadow(stdscr, y, x, height, width);
#endif
dialog = newwin(height, width, y, x);
keypad(dialog, TRUE);
draw_box(dialog, 0, 0, height, width, dialog_attr, border_attr);
wattrset(dialog, border_attr);
wmove(dialog, height-3, 0);
waddch(dialog, ACS_LTEE);
for (i = 0; i < width-2; i++)
waddch(dialog, ACS_HLINE);
wattrset(dialog, dialog_attr);
waddch(dialog, ACS_RTEE);
wmove(dialog, height-2, 1);
for (i = 0; i < width-2; i++)
waddch(dialog, ' ');
if (title != NULL) {
wattrset(dialog, title_attr);
wmove(dialog, 0, (width - strlen(title))/2 - 1);
waddch(dialog, ' ');
waddstr(dialog, title);
waddch(dialog, ' ');
}
wattrset(dialog, dialog_attr);
print_autowrap(dialog, prompt, width, 1, 3);
list_width = width-6;
getyx(dialog, cur_y, cur_x);
box_y = cur_y + 1;
box_x = (width - list_width)/2 - 1;
/* create new window for the list */
list = subwin(dialog, list_height, list_width, y + box_y + 1, x + box_x + 1);
keypad(list, TRUE);
/* draw a box around the list items */
draw_box(dialog, box_y, box_x, list_height+2, list_width+2, menubox_border_attr, menubox_attr);
check_x = 0;
item_x = 0;
/* Find length of longest item in order to center checklist */
for (i = 0; i < item_no; i++) {
check_x = MAX(check_x, strlen(items[i*3]) + strlen(items[i*3 + 1]) + 6);
item_x = MAX(item_x, strlen(items[i*3]));
}
check_x = (list_width - check_x) / 2;
item_x = check_x + item_x + 6;
/* Print the list */
for (i = 0; i < max_choice; i++)
print_item(list, items[i*3], items[i*3 + 1], status[i], i, i == choice);
wnoutrefresh(list);
if (list_height < item_no) {
wattrset(dialog, darrow_attr);
wmove(dialog, box_y + list_height + 1, box_x + check_x + 5);
waddch(dialog, ACS_DARROW);
wmove(dialog, box_y + list_height + 1, box_x + check_x + 6);
waddstr(dialog, "(+)");
}
x = width/2-11;
y = height-2;
print_button(dialog, "Cancel", y, x+14, FALSE);
print_button(dialog, " OK ", y, x, TRUE);
wrefresh(dialog);
while (key != ESC) {
key = wgetch(dialog);
/* Check if key pressed matches first character of any item tag in list */
for (i = 0; i < max_choice; i++)
if (toupper(key) == toupper(items[(scrolli+i)*3][0]))
//.........这里部分代码省略.........
示例7: do_prompt
/* Ask a question on the statusbar. The prompt will be stored in the
* static prompt, which should be NULL initially, and the answer will be
* stored in the answer global. Returns -1 on aborted enter, -2 on a
* blank string, and 0 otherwise, the valid shortcut key caught.
* curranswer is any editable text that we want to put up by default,
* and refresh_func is the function we want to call to refresh the edit
* window.
*
* The allow_tabs parameter indicates whether we should allow tabs to be
* interpreted. The allow_files parameter indicates whether we should
* allow all files (as opposed to just directories) to be tab
* completed. */
int do_prompt(bool allow_tabs,
#ifndef DISABLE_TABCOMP
bool allow_files,
#endif
int menu, const char *curranswer,
bool *meta_key, bool *func_key,
#ifndef NANO_TINY
filestruct **history_list,
#endif
void (*refresh_func)(void), const char *msg, ...)
{
va_list ap;
int retval;
const sc *s;
#ifndef DISABLE_TABCOMP
bool list = FALSE;
#endif
/* prompt has been freed and set to NULL unless the user resized
* while at the statusbar prompt. */
if (prompt != NULL)
free(prompt);
prompt = charalloc(((COLS - 4) * mb_cur_max()) + 1);
bottombars(menu);
va_start(ap, msg);
vsnprintf(prompt, (COLS - 4) * mb_cur_max(), msg, ap);
va_end(ap);
null_at(&prompt, actual_x(prompt, COLS - 4));
s = get_prompt_string(&retval, allow_tabs,
#ifndef DISABLE_TABCOMP
allow_files,
#endif
curranswer,
meta_key, func_key,
#ifndef NANO_TINY
history_list,
#endif
refresh_func, menu
#ifndef DISABLE_TABCOMP
, &list
#endif
);
free(prompt);
prompt = NULL;
/* We're done with the prompt, so save the statusbar cursor
* position. */
old_statusbar_x = statusbar_x;
old_pww = statusbar_pww;
/* If we left the prompt via Cancel or Enter, set the return value
* properly. */
if (s && s->scfunc == do_cancel)
retval = -1;
else if (s && s->scfunc == do_enter_void)
retval = (*answer == '\0') ? -2 : 0;
blank_statusbar();
wnoutrefresh(bottomwin);
#ifdef DEBUG
fprintf(stderr, "answer = \"%s\"\n", answer);
#endif
#ifndef DISABLE_TABCOMP
/* If we've done tab completion, there might be a list of filename
* matches on the edit window at this point. Make sure that they're
* cleared off. */
if (list)
refresh_func();
#endif
return retval;
}
示例8: main
int main(int argc, char **argv)
{
struct timeval tv;
#ifndef RETURN_TV_IN_SELECT
struct timeval before;
struct timeval after;
#endif
fd_set rfds;
int retval;
#ifdef HAVE_LIBKVM
if (kvm_init()) can_use_kvm = 1;
#endif
#ifdef DEBUG
if (!(debug_file = fopen("debug", "w"))){
printf("file debug open error\n");
exit(0);
}
#endif
get_boot_time();
get_rows_cols(&screen_rows, &screen_cols);
buf_size = screen_cols + screen_cols/2;
line_buf = malloc(buf_size);
if (!line_buf)
errx(1, "Cannot allocate memory for buffer.");
curses_init();
current = &users_list;
users_init();
procwin_init();
subwin_init();
menu_init();
signal(SIGINT, int_handler);
signal(SIGWINCH, winch_handler);
// signal(SIGSEGV, segv_handler);
print_help();
update_load();
current->redraw();
wnoutrefresh(main_win);
wnoutrefresh(info_win.wd);
wnoutrefresh(help_win.wd);
doupdate();
tv.tv_sec = TIMEOUT;
tv.tv_usec = 0;
for(;;) { /* main loop */
int key;
FD_ZERO(&rfds);
FD_SET(0,&rfds);
#ifdef RETURN_TV_IN_SELECT
retval = select(1, &rfds, 0, 0, &tv);
if(retval > 0) {
key = getkey();
if(key == KBD_MORE) {
usleep(10000);
key = getkey();
}
key_action(key);
}
if (!tv.tv_sec && !tv.tv_usec){
ticks++;
periodic();
tv.tv_sec = TIMEOUT;
}
#else
gettimeofday(&before, 0);
retval = select(1, &rfds, 0, 0, &tv);
gettimeofday(&after, 0);
tv.tv_sec -= (after.tv_sec - before.tv_sec);
if(retval > 0) {
int key = read_key();
key_action(key);
}
if(tv.tv_sec <= 0) {
ticks++;
periodic();
tv.tv_sec = TIMEOUT;
}
#endif
if(size_changed) resize();
}
}
示例9: clear_window
static void *_resize_handler(int sig)
{
int startx = 0, starty = 0;
int height = 40, width = 100;
int check_width = min_screen_width;
main_ycord = 1;
/* clear existing data and update to avoid ghost during resize */
clear_window(text_win);
clear_window(grid_win);
doupdate();
delwin(grid_win);
delwin(text_win);
endwin();
COLS = 0;
LINES = 0;
initscr();
doupdate(); /* update now to make sure we get the new size */
getmaxyx(stdscr, LINES, COLS);
if (params.cluster_dims == 4) {
height = dim_size[2] * dim_size[3] + dim_size[2] + 3;
width = (dim_size[1] + dim_size[3] + 1) * dim_size[0];
check_width += width;
} else if (params.cluster_dims == 3) {
height = dim_size[1] * dim_size[2] + dim_size[1] + 3;
width = dim_size[0] + dim_size[2] + 3;
check_width += width;
} else {
height = 10;
width = COLS;
}
if (COLS < check_width || LINES < height) {
endwin();
error("Screen is too small make sure "
"the screen is at least %dx%d\n"
"Right now it is %dx%d\n", width, height, COLS, LINES);
_smap_exit(0); /* Calls exit(), no return */
}
grid_win = newwin(height, width, starty, startx);
max_display = grid_win->_maxy * grid_win->_maxx;
if (params.cluster_dims == 4) {
startx = width;
COLS -= 2;
width = COLS - width;
height = LINES;
} else if (params.cluster_dims == 3) {
startx = width;
COLS -= 2;
width = COLS - width;
height = LINES;
} else {
startx = 0;
starty = height;
height = LINES - height;
}
text_win = newwin(height, width, starty, startx);
print_date();
switch (params.display) {
case JOBS:
get_job();
break;
case RESERVATIONS:
get_reservation();
break;
case SLURMPART:
get_slurm_part();
break;
case COMMANDS:
if (params.cluster_flags & CLUSTER_FLAG_BG)
get_command();
break;
case BGPART:
if (params.cluster_flags & CLUSTER_FLAG_BG)
get_bg_part();
break;
}
print_grid();
box(text_win, 0, 0);
box(grid_win, 0, 0);
wnoutrefresh(text_win);
wnoutrefresh(grid_win);
doupdate();
resize_screen = 1;
return NULL;
}
示例10: display_calibration
//.........这里部分代码省略.........
if(current_cal == EX)
{
wattron(wcal, COLOR_PAIR(1));
}
if(current_cal == EY)
{
wattron(wcal, COLOR_PAIR(4));
}
waddstr(wcal, " y=");
if(mcal->ey)
{
snprintf(line, COLS, "%.2f", *mcal->ey);
waddstr(wcal, line);
}
else
{
waddstr(wcal, _("N/A"));
}
waddstr(wcal, " (F8)");
if(current_cal == EY)
{
wattron(wcal, COLOR_PAIR(1));
}
wclrtoeol(wcal);
mvwaddstr(wcal, 4, 1, _("Sensitivity:"));
if(current_cal == MX)
{
wattron(wcal, COLOR_PAIR(4));
}
if(mcal->mx)
{
snprintf(line, COLS, " %.2f", *mcal->mx);
waddstr(wcal, line);
}
else
{
waddstr(wcal, _(" N/A"));
}
waddstr(wcal, " (F9)");
if(current_cal == MX)
{
wattron(wcal, COLOR_PAIR(1));
}
wclrtoeol(wcal);
mvwaddstr(wcal, 5, 1, "X/Y:");
if(current_cal == RD || current_cal == VEL)
{
wattron(wcal, COLOR_PAIR(4));
}
waddstr(wcal, _(" circle test"));
if(current_cal == RD || current_cal == VEL)
{
wattron(wcal, COLOR_PAIR(1));
}
waddstr(wcal, ", ");
if(current_cal == RD)
{
wattron(wcal, COLOR_PAIR(4));
}
snprintf(line, COLS, _("radius=%d (F10)"), mcal->rd);
waddstr(wcal, line);
if(current_cal == RD)
{
wattron(wcal, COLOR_PAIR(1));
}
waddstr(wcal, ", ");
if(current_cal == VEL)
{
wattron(wcal, COLOR_PAIR(4));
}
snprintf(line, COLS, _("velocity=%d (F11)"), mcal->vel);
waddstr(wcal, line);
if(current_cal == VEL)
{
wattron(wcal, COLOR_PAIR(1));
}
if(current_cal == MY)
{
wattron(wcal, COLOR_PAIR(4));
}
waddstr(wcal, _(" ratio="));
if(mcal->mx && mcal->my)
{
snprintf(line, COLS, "%.2f", *mcal->my / *mcal->mx);
waddstr(wcal, line);
}
else
{
waddstr(wcal, _("N/A"));
}
waddstr(wcal, " (F12)");
if(current_cal == MY)
{
wattron(wcal, COLOR_PAIR(1));
}
wclrtoeol(wcal);
box(wcal, 0 , 0);
wnoutrefresh(wcal);
doupdate();
}
示例11: dialog_menu
//.........这里部分代码省略.........
}
item_x = (menu_width - item_x) / 2;
/* get the scroll info from the temp file */
if ( (f=fopen("lxdialog.scrltmp","r")) != NULL ) {
if ( (fscanf(f,"%d\n",&scroll) == 1) && (scroll <= choice) &&
(scroll+max_choice > choice) && (scroll >= 0) &&
(scroll+max_choice <= item_no) ) {
first_item = scroll;
choice = choice - scroll;
fclose(f);
} else {
scroll=0;
remove("lxdialog.scrltmp");
fclose(f);
f=NULL;
}
}
if ( (choice >= max_choice) || (f==NULL && choice >= max_choice/2) ) {
if (choice >= item_no-max_choice/2)
scroll = first_item = item_no-max_choice;
else
scroll = first_item = choice - max_choice/2;
choice = choice - scroll;
}
/* Print the menu */
for (i=0; i < max_choice; i++) {
print_item (menu, items[(first_item + i) * 2 + 1], i, i == choice,
(items[(first_item + i)*2][0] != ':'));
}
wnoutrefresh (menu);
print_arrows(dialog, item_no, scroll,
box_y, box_x+item_x+1, menu_height);
print_buttons (dialog, height, width, 0);
while (key != ESC) {
key = wgetch(dialog);
if (key < 256 && isalpha(key)) key = tolower(key);
if (strchr("ynm", key))
i = max_choice;
else {
for (i = choice+1; i < max_choice; i++) {
j = first_alpha(items[(scroll+i)*2+1], "YyNnMm");
if (key == tolower(items[(scroll+i)*2+1][j]))
break;
}
if (i == max_choice)
for (i = 0; i < max_choice; i++) {
j = first_alpha(items[(scroll+i)*2+1], "YyNnMm");
if (key == tolower(items[(scroll+i)*2+1][j]))
break;
}
}
if (i < max_choice ||
key == KEY_UP || key == KEY_DOWN ||
key == '-' || key == '+' ||
key == KEY_PPAGE || key == KEY_NPAGE) {
示例12: display_run
void display_run(e_controller_type type, int axis[])
{
int i;
int d;
char label[BUTTON_LENGTH];
char rate[COLS];
int freq = stats_get_frequency(0);
if(freq >= 0)
{
sprintf(rate, _("Refresh rate: %4dHz "), freq);
mvaddstr(LINES-1, 1, rate);
}
d = 0;
for(i=rel_axis_rstick_y+1; i<AXIS_MAX; ++i)
{
if(axis[i])
{
snprintf(label, sizeof(label), "%8s: %4d", controller_get_axis_name(type, i), axis[i]);
mvwaddstr(wbuttons, 1 + d, 1, label);
d++;
if(d == BUTTON_Y_L - 3)
{
break;
}
}
}
memset(label, ' ', sizeof(label));
label[sizeof(label)-1] = '\0';
for(i=d; i<last_button_nb; ++i)
{
mvwaddstr(wbuttons, 1 + i, 1, label);
}
last_button_nb = d;
wnoutrefresh(wbuttons);
mvwaddch(lstick, cross[0][1], cross[0][0], ' ');
cross[0][0] = STICK_X_L / 2 + (double)axis[rel_axis_lstick_x] / controller_get_max_signed(adapter_get(0)->ctype, rel_axis_lstick_x) * (STICK_X_L / 2 - 1);
cross[0][1] = STICK_Y_L / 2 + (double)axis[rel_axis_lstick_y] / controller_get_max_signed(adapter_get(0)->ctype, rel_axis_lstick_y) * (STICK_Y_L / 2 - 1);
if(cross[0][0] <= 0 || cross[0][0] >= STICK_X_L-1 || cross[0][1] <= 0 || cross[0][1] >= STICK_Y_L-1)
{
mvwaddch(lstick, cross[0][1], cross[0][0], CROSS_CHAR | COLOR_PAIR(3));
}
else
{
mvwaddch(lstick, cross[0][1], cross[0][0], CROSS_CHAR);
}
wnoutrefresh(lstick);
mvwaddch(rstick, cross[1][1], cross[1][0], ' ');
cross[1][0] = STICK_X_L / 2 + (double)axis[rel_axis_rstick_x] / controller_get_max_signed(adapter_get(0)->ctype, rel_axis_rstick_x) * (STICK_X_L / 2 - 1);
cross[1][1] = STICK_Y_L / 2 + (double)axis[rel_axis_rstick_y] / controller_get_max_signed(adapter_get(0)->ctype, rel_axis_rstick_y) * (STICK_Y_L / 2 - 1);
if(cross[1][0] <= 0 || cross[1][0] >= STICK_X_L-1 || cross[1][1] <= 0 || cross[1][1] >= STICK_Y_L-1)
{
mvwaddch(rstick, cross[1][1], cross[1][0], CROSS_CHAR | COLOR_PAIR(3));
}
else
{
mvwaddch(rstick, cross[1][1], cross[1][0], CROSS_CHAR);
}
wnoutrefresh(rstick);
move(LINES-1, COLS-1);
wnoutrefresh(stdscr);
doupdate();
}
示例13: Open
//.........这里部分代码省略.........
assert(priv->blocks_map);
int journal_fd = ((CopyPriv*)actctx->priv)->journal_fd;
lseek(journal_fd, 0, SEEK_SET);
if (((CopyPriv*)actctx->priv)->use_journal) {
priv->unread_count = 0;
uint8_t journal_chunk[1*1024*1024];
int64_t chunklen;
int64_t end_lba = ((CopyPriv*)actctx->priv)->end_lba;
for (int64_t i = 0; i < priv->nb_blocks; i++) {
int64_t lba = i * priv->sectors_per_block;
if (lba % sizeof(journal_chunk) == 0) {
chunklen = (end_lba - lba) < (int64_t)sizeof(journal_chunk) ? (end_lba - lba) : (int64_t)sizeof(journal_chunk);
int ret = read(journal_fd, journal_chunk, chunklen);
if (ret != chunklen)
return 1;
}
char sector_status = journal_chunk[lba % sizeof(journal_chunk)];
priv->blocks_map[i] = sector_status;
int sectors_in_block = priv->sectors_per_block;
if (i == priv->nb_blocks - 1) // Last block may be smaller
sectors_in_block = (actctx->dev->capacity % actctx->blk_size) / 512;
switch ((enum SectorStatus)sector_status) {
case SectorStatus_eUnread:
priv->unread_count += sectors_in_block;
break;
case SectorStatus_eReadOk:
priv->read_ok_count += sectors_in_block;
break;
case SectorStatus_eBlockReadError:
case SectorStatus_eSectorReadError:
priv->errors_count += sectors_in_block;
break;
}
}
}
#define LBA_WIDTH 20
#define LEGEND_WIDTH 20
#define LEGEND_HEIGHT 9
#define LEGEND_VERT_OFFSET 3 /* ETA & SPEED are above, 1 for spacing */
priv->w_cur_lba = derwin(stdscr, 1, LBA_WIDTH, 0 /* at the top */, COLS - LEGEND_WIDTH - 1 - (LBA_WIDTH * 2) );
assert(priv->w_cur_lba);
wbkgd(priv->w_cur_lba, COLOR_PAIR(MY_COLOR_GRAY));
priv->w_end_lba = derwin(stdscr, 1, LBA_WIDTH, 0 /* at the top */, COLS - LEGEND_WIDTH - 1 - LBA_WIDTH);
assert(priv->w_end_lba);
wbkgd(priv->w_end_lba, COLOR_PAIR(MY_COLOR_GRAY));
priv->eta = derwin(stdscr, 1, LEGEND_WIDTH, 0 /* at the top */, COLS-LEGEND_WIDTH);
assert(priv->eta);
wbkgd(priv->eta, COLOR_PAIR(MY_COLOR_GRAY));
priv->avg_speed = derwin(stdscr, 1, LEGEND_WIDTH, 1 /* ETA is above */, COLS-LEGEND_WIDTH);
assert(priv->avg_speed);
wbkgd(priv->avg_speed, COLOR_PAIR(MY_COLOR_GRAY));
priv->legend = derwin(stdscr, LEGEND_HEIGHT, LEGEND_WIDTH, LEGEND_VERT_OFFSET, COLS-LEGEND_WIDTH);
assert(priv->legend);
wbkgd(priv->legend, COLOR_PAIR(MY_COLOR_GRAY));
#define W_STATS_HEIGHT 3
#define W_STATS_VERT_OFFSET ( LEGEND_VERT_OFFSET + LEGEND_HEIGHT + 1 /* spacing */ )
priv->w_stats = derwin(stdscr, W_STATS_HEIGHT, LEGEND_WIDTH, W_STATS_VERT_OFFSET, COLS-LEGEND_WIDTH);
assert(priv->w_stats);
#define SUMMARY_VERT_OFFSET ( W_STATS_VERT_OFFSET + W_STATS_HEIGHT + 1 /* spacing */ )
#define SUMMARY_HEIGHT ( LINES - SUMMARY_VERT_OFFSET - 1 /* don't touch bottom line */ )
priv->summary = derwin(stdscr, SUMMARY_HEIGHT, LEGEND_WIDTH, SUMMARY_VERT_OFFSET, COLS-LEGEND_WIDTH);
assert(priv->summary);
wbkgd(priv->summary, COLOR_PAIR(MY_COLOR_GRAY));
priv->vis_height = LINES - 2; /* LBA is above, version is below */
priv->vis_width = COLS - LEGEND_WIDTH - 1;
int vis_cells_avail = priv->vis_height * priv->vis_width;
priv->blocks_per_vis = priv->nb_blocks / vis_cells_avail;
if (priv->nb_blocks % vis_cells_avail)
priv->blocks_per_vis++;
priv->vis = derwin(stdscr, priv->vis_height, priv->vis_width, 1 /* LBA is above */, 0);
assert(priv->vis);
wrefresh(priv->vis);
whole_space_show_legend(priv);
priv->reports[0].seqno = 1; // anything but zero
char comma_lba_buf[30], *comma_lba_p;
comma_lba_p = commaprint(actctx->dev->capacity / 512, comma_lba_buf, sizeof(comma_lba_buf));
wprintw(priv->w_end_lba, "/ %s", comma_lba_p);
wnoutrefresh(priv->w_end_lba);
wprintw(priv->summary,
"%s %s\n"
"Ctrl+C to abort\n",
actctx->procedure->display_name, actctx->dev->dev_path);
wrefresh(priv->summary);
int r = pthread_create(&priv->render_thread, NULL, render_thread_proc, priv);
if (r)
return r; // FIXME leak
return 0;
}
示例14: init_ui
// inits and draws the actual game screen
void init_ui()
{
/* initialization of windows */
/* naming reference:
mainbw = outer area, "box"
gamebw = main game "box"
gamew = main game area
commandw = command listing window
skillsw = skills listing window
*/
background_win = newwin(y_size, x_size, 0, 0);
draw_background(x_size, y_size);
wnoutrefresh(background_win);
// calculate widths
int remaining_width = x_size;
remaining_width -= 2; // outer borders
int cmdw_width = 17;
remaining_width -= cmdw_width;
remaining_width -= 2; // margins for cmdw
remaining_width -= 1; // vertical line between cmdw and gamew
int skillsw_width = cmdw_width;
skillsw_width -= 2; // margin for index numbers
int gamew_width = remaining_width / 2;
remaining_width -= gamew_width;
remaining_width -= 1; // vertical line between gamew and logw
int logw_width = remaining_width;
int inputw_width = logw_width;
inputw_width -= 2; // margin for prompt
// calculate heights
int skillsw_height = 5;
int cmdw_height = y_size;
cmdw_height -= 2; // outer borders
cmdw_height -= 1; // horiz line between cmdw and skillsw
cmdw_height -= 1; // one line margin at top
cmdw_height -= skillsw_height;
int inputw_height = 1;
int logw_height = y_size;
logw_height -= 2; // outer borders
logw_height -= 1; // horiz line between logw and inputw
logw_height -= inputw_height;
int gamew_height = y_size;
gamew_height -= 2; // outer borders
command_win = newwin(cmdw_height, cmdw_width, 2, 2);
skills_win = newwin(skillsw_height, skillsw_width, y_size-(skillsw_height+1), 4);
game_win = newwin(gamew_height, gamew_width, 1, cmdw_width+4);
log_win = newwin(logw_height, logw_width, 1, (x_size-logw_width)-1);
input_win = newwin(inputw_height, inputw_width, y_size-2, (x_size-inputw_width)-1);
fight_statw_width = (gamew_width/2)-1; // lets leave few characters in the middle
for (int i = 0; i < 3; i++)
{
fight_stat_win[i] = newwin(7, fight_statw_width, 1+(i*7), cmdw_width+4);
fight_stat_win[i+3] = newwin(7, fight_statw_width, y_size - (1+((i+1)*7)), x_size-(logw_width+fight_statw_width+2));
/* debugging: Show windows
wbkgd(fight_stat_win[i], '0' + i);
wbkgd(fight_stat_win[i+3], '3' + i);
box(fight_stat_win[i], 0, 0);
box(fight_stat_win[i+3], 0, 0);
wnoutrefresh(fight_stat_win[i]);
wnoutrefresh(fight_stat_win[i+3]);
*/
}
/* debugging: Show windows
wbkgd(command_win, 'C');
wbkgd(skills_win, 'S');
wbkgd(game_win, 'G');
wbkgd(log_win, 'L');
wbkgd(input_win, 'I');
wnoutrefresh(command_win);
wnoutrefresh(skills_win);
wnoutrefresh(game_win);
wnoutrefresh(log_win);
wnoutrefresh(input_win);
*/
ncurs_skills(); /* for the lack of a better place updated here */
doupdate();
}
示例15: wdg_file_menu_create
//.........这里部分代码省略.........
/* scan the directory */
ww->nlist = scandir(".", &ww->namelist, 0, alphasort);
/* on error display the message in the box */
if (ww->nlist <= 0) {
ww->nitems = 2;
WDG_SAFE_REALLOC(ww->items, ww->nitems * sizeof(ITEM *));
ww->items[ww->nitems - 2] = new_item("/", "root");
ww->items[ww->nitems - 1] = new_item("Cannot open the directory", "");
item_opts_off(ww->items[ww->nitems - 1], O_SELECTABLE);
} else {
/* for each directory in the directory */
for (i = 0; i < ww->nlist; i++) {
/*
* transform the current dir into the root.
* useful to exit from a path whose parent is not readable
*/
if (!strcmp(ww->namelist[i]->d_name, ".")) {
strncpy(ww->namelist[i]->d_name, "/", 1);
ww->nitems++;
WDG_SAFE_REALLOC(ww->items, ww->nitems * sizeof(ITEM *));
ww->items[ww->nitems - 1] = new_item(ww->namelist[i]->d_name, "root");
continue;
}
/* get the file properties */
stat(ww->namelist[i]->d_name, &buf);
if (S_ISDIR(buf.st_mode)) {
ww->nitems++;
WDG_SAFE_REALLOC(ww->items, ww->nitems * sizeof(ITEM *));
ww->items[ww->nitems - 1] = new_item(ww->namelist[i]->d_name, "[...]");
}
// if not readable
//item_opts_off(ww->items[ww->nitems - 1], O_SELECTABLE);
}
/* and now add the files */
for (i = 0; i < ww->nlist; i++) {
/* get the file properties */
stat(ww->namelist[i]->d_name, &buf);
if (!S_ISDIR(buf.st_mode)) {
ww->nitems++;
WDG_SAFE_REALLOC(ww->items, ww->nitems * sizeof(ITEM *));
ww->items[ww->nitems - 1] = new_item(ww->namelist[i]->d_name, "");
}
}
}
/* null terminate the array */
WDG_SAFE_REALLOC(ww->items, (ww->nitems + 1) * sizeof(ITEM *));
ww->items[ww->nitems] = NULL;
/* create the menu */
ww->m = new_menu(ww->items);
/* set the dimensions */
set_menu_format(ww->m, ww->y - 2, 1);
set_menu_spacing(ww->m, 2, 0, 0);
/* get the geometry to make a window */
scale_menu(ww->m, &mrows, &mcols);
/*
* if the menu is larger than the main window
* adapt to the new dimensions
*/
if (mcols > (int)c - 4) {
ww->x = mcols + 4;
wdg_file_redraw(wo);
return;
}
/* create the window for the menu */
ww->mwin = newwin(mrows, MAX(mcols, (int)c - 4), y + 1, x + 2);
/* set the color */
wbkgd(ww->mwin, COLOR_PAIR(wo->window_color));
keypad(ww->mwin, TRUE);
/* associate with the menu */
set_menu_win(ww->m, ww->mwin);
/* the subwin for the menu */
set_menu_sub(ww->m, derwin(ww->mwin, mrows + 1, mcols, 1, 1));
/* menu attributes */
set_menu_mark(ww->m, "");
set_menu_grey(ww->m, COLOR_PAIR(wo->window_color));
set_menu_back(ww->m, COLOR_PAIR(wo->window_color));
set_menu_fore(ww->m, COLOR_PAIR(wo->window_color) | A_REVERSE | A_BOLD);
/* display the menu */
post_menu(ww->m);
wnoutrefresh(ww->mwin);
}