Lines Matching refs:lo

369 DrawNames(ListObj *lo)
377 x = lo->x + 1;
378 y = lo->y + 2;
379 h = lo->h - 2;
380 for (i=lo->scroll; i<lo->n && i<lo->scroll+h; i++) {
381 wmove(lo->win, y+i-lo->scroll, x);
382 if (lo->seld[i]) {
383 wattrset(lo->win, A_BOLD);
385 wattrset(lo->win, item_attr);
387 if (strlen(lo->name[i]) > lo->w-2) {
388 strncpy(tmp, lo->name[i], lo->w-2);
389 tmp[lo->w - 2] = 0;
390 waddstr(lo->win, tmp);
392 waddstr(lo->win, lo->name[i]);
393 for (j=strlen(lo->name[i]); j<lo->w-2; j++) waddstr(lo->win, " ");
396 wattrset(lo->win, item_attr);
397 while (i<lo->scroll+h) {
398 wmove(lo->win, y+i-lo->scroll, x);
399 for (j=0; j<lo->w-2; j++) waddstr(lo->win, " ");
407 RefreshListObj(ListObj *lo)
415 wmove(lo->win, lo->y, lo->x+1);
416 wattrset(lo->win, dialog_attr);
417 waddstr(lo->win, lo->title);
418 draw_box(lo->win, lo->y+1, lo->x, lo->h, lo->w, dialog_attr, border_attr);
421 DrawNames(lo);
424 sprintf(perc, "(%3d%%)", MIN(100, (int) (100 * (lo->sel+lo->h-2) / MAX(1, lo->n))));
425 wmove(lo->win, lo->y + lo->h, lo->x + lo->w - 8);
426 wattrset(lo->win, dialog_attr);
427 waddstr(lo->win, perc);
440 ListObj *lo;
444 lo = (ListObj *) malloc( sizeof(ListObj) );
445 if (!lo) {
449 lo->title = (char *) malloc( strlen(title) + 1);
450 if (!lo->title) {
451 fprintf(stderr, "NewListObj: Error malloc'ing lo->title\n");
454 strcpy(lo->title, title);
455 lo->name = list;
457 lo->seld = (int *) malloc( n * sizeof(int) );
458 if (!lo->seld) {
459 fprintf(stderr, "NewListObj: Error malloc'ing lo->seld\n");
463 lo->seld[i] = FALSE;
466 lo->seld = NULL;
468 lo->y = y;
469 lo->x = x;
470 lo->w = w;
471 lo->h = h;
472 lo->n = n;
473 lo->scroll = 0;
474 lo->sel = 0;
475 lo->elt = listelt;
476 lo->win = win;
479 RefreshListObj(lo);
481 return(lo);
485 UpdateListObj(ListObj *lo, char **list, int n)
488 * Pre: lo->name "has been freed"
489 * "(A i: 0<=i<lo->n: "lo->name[i] has been freed")"
494 if (lo->seld) {
495 free(lo->seld);
499 lo->name = list;
501 lo->seld = (int *) malloc( n * sizeof(int) );
502 if (!lo->seld) {
503 fprintf(stderr, "UpdateListObj: Error malloc'ing lo->seld\n");
507 lo->seld[i] = FALSE;
510 lo->seld = NULL;
512 lo->n = n;
513 lo->scroll = 0;
514 lo->sel = 0;
517 RefreshListObj(lo);
523 SelectListObj(ListObj *lo)
526 * Pre: lo->n >= 1
533 sel_x = lo->x+1;
534 sel_y = lo->y + 2 + lo->sel - lo->scroll;
536 if (lo->n == 0) return(SEL_TAB);
538 keypad(lo->win, TRUE);
541 wmove(lo->win, sel_y, sel_x);
542 wattrset(lo->win, item_selected_attr);
543 waddstr(lo->win, lo->name[lo->sel]);
545 key = wgetch(lo->win);
550 wmove(lo->win, sel_y, sel_x);
551 if (lo->seld[lo->sel]) {
552 wattrset(lo->win, A_BOLD);
554 wattrset(lo->win, item_attr);
556 if (strlen(lo->name[lo->sel]) > lo->w - 2) {
557 strncpy(tmp, lo->name[lo->sel], lo->w - 2);
558 tmp[lo->w - 2] = 0;
559 waddstr(lo->win, tmp);
561 waddstr(lo->win, lo->name[lo->sel]);
567 if (sel_y < lo->y + lo->h-1) {
568 if (lo->sel < lo->n-1) {
570 lo->sel++;
573 if (lo->sel < lo->n-1) {
574 lo->sel++;
575 lo->scroll++;
576 DrawNames(lo);
577 wrefresh(lo->win);
583 if (sel_y > lo->y+2) {
584 if (lo->sel > 0) {
586 lo->sel--;
589 if (lo->sel > 0) {
590 lo->sel--;
591 lo->scroll--;
592 DrawNames(lo);
593 wrefresh(lo->win);
599 lo->sel = 0;
600 lo->scroll = 0;
601 sel_y = lo->y + 2;
602 DrawNames(lo);
603 wrefresh(lo->win);
607 if (lo->n < lo->h - 3) {
608 lo->sel = lo->n-1;
609 lo->scroll = 0;
610 sel_y = lo->y + 2 + lo->sel - lo->scroll;
613 lo->sel = lo->n-1;
614 lo->scroll = lo->n-1 - (lo->h-3);
615 sel_y = lo->y + 2 + lo->sel - lo->scroll;
616 DrawNames(lo);
617 wrefresh(lo->win);
622 lo->sel += lo->h - 2;
623 if (lo->sel >= lo->n) lo->sel = lo->n - 1;
624 lo->scroll += lo->h - 2;
625 if (lo->scroll >= lo->n - 1) lo->scroll = lo->n - 1;
626 if (lo->scroll < 0) lo->scroll = 0;
627 sel_y = lo->y + 2 + lo->sel - lo->scroll;
628 DrawNames(lo);
629 wrefresh(lo->win);
633 lo->sel -= lo->h - 2;
634 if (lo->sel < 0) lo->sel = 0;
635 lo->scroll -= lo->h - 2;
636 if (lo->scroll < 0) lo->scroll = 0;
637 sel_y = lo->y + 2 + lo->sel - lo->scroll;
638 DrawNames(lo);
639 wrefresh(lo->win);
647 (100 * (lo->sel+lo->h - 2) / MAX(1, lo->n))));
648 wmove(lo->win, lo->y + lo->h, lo->x + lo->w - 8);
649 wattrset(lo->win, dialog_attr);
650 waddstr(lo->win, perc);
653 wmove(lo->win, sel_y, sel_x);
654 wattrset(lo->win, item_selected_attr);
655 if (strlen(lo->name[lo->sel]) > lo->w - 2) {
659 lo->name[lo->sel] + strlen(lo->name[lo->sel]) - (lo->w - 2),
660 lo->w - 2);
661 tmp[lo->w - 2] = 0;
662 waddstr(lo->win, tmp);
664 waddstr(lo->win, lo->name[lo->sel]);
666 if (!quit) key = wgetch(lo->win);
679 strcpy(lo->elt, lo->name[lo->sel]);
686 DelListObj(ListObj *lo)
691 free(lo->title);
692 if (lo->seld != NULL) free(lo->seld);
693 free(lo);
699 MarkCurrentListObj(ListObj *lo)
704 lo->seld[lo->sel] = !(lo->seld[lo->sel]);
705 DrawNames(lo);
711 MarkAllListObj(ListObj *lo)
718 for (i=0; i<lo->n; i++) {
719 lo->seld[i] = TRUE;
721 DrawNames(lo);
727 UnMarkAllListObj(ListObj *lo)
734 for (i=0; i<lo->n; i++) {
735 lo->seld[i] = FALSE;
737 DrawNames(lo);