diff options
-rwxr-xr-x | src/utils.c | 120 |
1 files changed, 11 insertions, 109 deletions
diff --git a/src/utils.c b/src/utils.c index 4d7fa4b..14ec679 100755 --- a/src/utils.c +++ b/src/utils.c @@ -1,4 +1,4 @@ -/* $calcurse: utils.c,v 1.16 2006/12/08 08:36:58 culot Exp $ */ +/* $calcurse: utils.c,v 1.17 2006/12/13 09:34:09 culot Exp $ */ /* * Calcurse - text-based organizer @@ -350,110 +350,6 @@ void border_nocolor(WINDOW * window) wnoutrefresh(window); } - /* prints and scroll text in a window */ -void scroller(WINDOW *win, char *mesg, int x, int y, int nb_row, int nb_col) -{ - int x_offset = 3; - int y_offset = 3; - int text_len = nb_col - 2 * x_offset; - int text_max_row = nb_row - 3; - int nlin, i, j, k; - int last_blank_i, last_blank_j; - char buf[] = " "; - char *next_mesg = _("-- Press 'N' for next page --"); - char *prev_mesg = _("-- Press 'P' for previous page --"); - int ch; - int which_page; //first page : 0, second page : 1 - - i = 0; //position in the message - j = 0; //x position on the current line - nlin = 1; //line number - last_blank_j = 0; - last_blank_i = 0; - which_page = 0; - - while (i <= strlen(mesg)) { - if ((i == strlen(mesg)) & (which_page == 1)) { - // we have finished writing text and we are on second page - custom_apply_attr(win, ATTR_HIGHEST); - mvwprintw(win, nb_row - 2, - nb_col - (strlen(prev_mesg) + 2), "%s", - prev_mesg); - custom_remove_attr(win, ATTR_HIGHEST); - wmove(swin, 0, 0); - wnoutrefresh(win); - wnoutrefresh(swin); - doupdate(); - ch = wgetch(win); - if ( (ch == 'P') | (ch == 'p') ) { - erase_window_part(win, y + 1, x + 3, nb_col - 2, nb_row - 2); - nlin = 1; - j = 0; - i = 0; - which_page = 0; - } else { //erase last line and exit next-prev page mode - for (k = 1; k < nb_col - 2; k++) - mvwprintw(win, nb_row - 2, k, " "); - break; - } - } - if (nlin == text_max_row - 2) { // we reach the last line - custom_apply_attr(win, ATTR_HIGHEST); - mvwprintw(win, nb_row - 2, - nb_col - (strlen(next_mesg) + 2), "%s", - next_mesg); - custom_remove_attr(win, ATTR_HIGHEST); - wmove(swin, 0, 0); - wnoutrefresh(win); - wnoutrefresh(swin); - doupdate(); - ch = wgetch(win); - if ( (ch == 'N') | (ch == 'n') ) { - erase_window_part(win, y + 1, x + 3, nb_col - 2, nb_row - 2); - nlin = 1; - j = 0; - which_page = 1; - } else { - for (k = 1; k < nb_col - 2; k++) - mvwprintw(win, nb_row - 2, k, " "); - break; - } - } - //write text - strncpy(buf, mesg + i, 1); - i++; - j++; - if ((strncmp(buf, "§", 1) == 0)) { //§ is the character for a new line - buf[0] = '\0'; - mvwprintw(win, x + x_offset + nlin, y + y_offset + j, - "%s", buf); - nlin++; - j = 0; - } else { - if (j == text_len - 1) { // if we reach the terminal border - for (k = last_blank_j; k <= text_len - 1; - k++) - mvwprintw(win, x + x_offset + nlin, - y + y_offset + k, " "); - nlin++; - i = last_blank_i; - j = 0; - } else { - if ((strncmp(buf, " ", 1) == 0)) //space between words - { - last_blank_j = j; //save position - last_blank_i = i; - } - mvwprintw(win, x + x_offset + nlin, - y + y_offset + j, "%s", buf); - } - } - } - wmove(swin, 0, 0); - wnoutrefresh(win); - wnoutrefresh(swin); -} - /* * Draws the status bar. * To add a keybinding, insert a new binding_t item, add it in the *binding @@ -720,17 +616,23 @@ void draw_scrollbar(WINDOW *win, int y, int x, int length, void item_in_popup(char *saved_a_start, char *saved_a_end, char *msg, char *pop_title) { - WINDOW *popup_win; + WINDOW *popup_win, *pad; + const int margin_left = 4, margin_top = 4; + const int winl = row - 5, winw = col - margin_left; + const int padl = winl - 2, padw = winw - margin_left; - popup_win = popup(row - 4, col - 2, 1, 1, pop_title); + pad = newpad(padl, padw); + popup_win = popup(winl, winw, 1, 2, pop_title); if (strncmp(pop_title, _("Appointment"), 11) == 0) { - mvwprintw(popup_win, 4, 4, " - %s -> %s", + mvwprintw(popup_win, margin_top, margin_left, "- %s -> %s", saved_a_start, saved_a_end); } - scroller(popup_win, msg, 1, 1, row - 4, col - 2); + mvwprintw(pad, 0, margin_left, "%s", msg); wmove(swin, 0, 0); + pnoutrefresh(pad, 0, 0, margin_top + 2, margin_left, padl, winw); doupdate(); wgetch(popup_win); + delwin(pad); delwin(popup_win); } |