]> git.sesse.net Git - vlc/blobdiff - lxdialog/checklist.c
Fix [10fcb9f9c3c73d13340c0bd4153fc4c9c87b7186] (win doesn't have setenv).
[vlc] / lxdialog / checklist.c
index 6abf30132bcd1224bd21b37fc6db96d6aea6d627..4f78688ed28a18443993b4dbac1741d1905bcc06 100644 (file)
@@ -30,7 +30,7 @@ static int list_width, check_x, item_x, checkflag;
  */
 static void
 print_item (WINDOW * win, const char *item, int status,
-        int choice, int selected)
+           int choice, int selected)
 {
     int i;
 
@@ -38,22 +38,22 @@ print_item (WINDOW * win, const char *item, int status,
     wattrset (win, menubox_attr);
     wmove (win, choice, 0);
     for (i = 0; i < list_width; i++)
-    waddch (win, ' ');
+       waddch (win, ' ');
 
     wmove (win, choice, check_x);
     wattrset (win, selected ? check_selected_attr : check_attr);
     if (checkflag == FLAG_CHECK)
-    wprintw (win, "[%c]", status ? 'X' : ' ');
+       wprintw (win, "[%c]", status ? 'X' : ' ');
     else
-    wprintw (win, "(%c)", status ? 'X' : ' ');
+       wprintw (win, "(%c)", status ? 'X' : ' ');
 
     wattrset (win, selected ? tag_selected_attr : tag_attr);
     mvwaddch(win, choice, item_x, item[0]);
     wattrset (win, selected ? item_selected_attr : item_attr);
     waddstr (win, (char *)item+1);
     if (selected) {
-        wmove (win, choice, check_x+1);
-        wrefresh (win);
+       wmove (win, choice, check_x+1);
+       wrefresh (win);
     }
 }
 
@@ -62,37 +62,37 @@ print_item (WINDOW * win, const char *item, int status,
  */
 static void
 print_arrows (WINDOW * win, int choice, int item_no, int scroll,
-        int y, int x, int height)
+               int y, int x, int height)
 {
     wmove(win, y, x);
 
     if (scroll > 0) {
-    wattrset (win, uarrow_attr);
-    waddch (win, ACS_UARROW);
-    waddstr (win, "(-)");
+       wattrset (win, uarrow_attr);
+       waddch (win, ACS_UARROW);
+       waddstr (win, "(-)");
     }
     else {
-    wattrset (win, menubox_attr);
-    waddch (win, ACS_HLINE);
-    waddch (win, ACS_HLINE);
-    waddch (win, ACS_HLINE);
-    waddch (win, ACS_HLINE);
+       wattrset (win, menubox_attr);
+       waddch (win, ACS_HLINE);
+       waddch (win, ACS_HLINE);
+       waddch (win, ACS_HLINE);
+       waddch (win, ACS_HLINE);
     }
 
    y = y + height + 1;
    wmove(win, y, x);
 
    if ((height < item_no) && (scroll + choice < item_no - 1)) {
-    wattrset (win, darrow_attr);
-    waddch (win, ACS_DARROW);
-    waddstr (win, "(+)");
+       wattrset (win, darrow_attr);
+       waddch (win, ACS_DARROW);
+       waddstr (win, "(+)");
     }
     else {
-    wattrset (win, menubox_border_attr);
-    waddch (win, ACS_HLINE);
-    waddch (win, ACS_HLINE);
-    waddch (win, ACS_HLINE);
-    waddch (win, ACS_HLINE);
+       wattrset (win, menubox_border_attr);
+       waddch (win, ACS_HLINE);
+       waddch (win, ACS_HLINE);
+       waddch (win, ACS_HLINE);
+       waddch (win, ACS_HLINE);
    }
 }
 
@@ -118,8 +118,8 @@ print_buttons( WINDOW *dialog, int height, int width, int selected)
  */
 int
 dialog_checklist (const char *title, const char *prompt, int height, int width,
-    int list_height, int item_no, const char * const * items, int flag)
-    
+       int list_height, int item_no, const char * const * items, int flag)
+       
 {
     int i, x, y, box_x, box_y;
     int key = 0, button = 0, choice = 0, scroll = 0, max_choice, *status;
@@ -129,16 +129,16 @@ dialog_checklist (const char *title, const char *prompt, int height, int width,
 
     /* 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);
+       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");
-    if (!choice && status[i])
+       status[i] = !strcasecmp (items[i * 3 + 2], "on");
+       if (!choice && status[i])
             choice = i;
     }
 
@@ -157,23 +157,23 @@ dialog_checklist (const char *title, const char *prompt, int height, int width,
     wattrset (dialog, border_attr);
     mvwaddch (dialog, height-3, 0, ACS_LTEE);
     for (i = 0; i < width - 2; i++)
-    waddch (dialog, ACS_HLINE);
+       waddch (dialog, ACS_HLINE);
     wattrset (dialog, dialog_attr);
     waddch (dialog, ACS_RTEE);
 
     if (title != NULL && strlen(title) >= width-2 ) {
-    /* truncate long title -- mec */
-    char * title2 = malloc(width-2+1);
-    memcpy( title2, title, width-2 );
-    title2[width-2] = '\0';
-    title = title2;
+       /* truncate long title -- mec */
+       char * title2 = malloc(width-2+1);
+       memcpy( title2, title, width-2 );
+       title2[width-2] = '\0';
+       title = title2;
     }
 
     if (title != NULL) {
-    wattrset (dialog, title_attr);
-    mvwaddch (dialog, 0, (width - strlen(title))/2 - 1, ' ');
-    waddstr (dialog, (char *)title);
-    waddch (dialog, ' ');
+       wattrset (dialog, title_attr);
+       mvwaddch (dialog, 0, (width - strlen(title))/2 - 1, ' ');
+       waddstr (dialog, (char *)title);
+       waddch (dialog, ' ');
     }
 
     wattrset (dialog, dialog_attr);
@@ -190,29 +190,29 @@ dialog_checklist (const char *title, const char *prompt, int height, int width,
 
     /* 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);
+             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);
+    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;
+       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_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);
+                       box_y, box_x + check_x + 5, list_height);
 
     print_buttons(dialog, height, width, 0);
 
@@ -221,149 +221,149 @@ dialog_checklist (const char *title, const char *prompt, int height, int width,
     doupdate ();
 
     while (key != ESC) {
-    key = wgetch (dialog);
+       key = wgetch (dialog);
 
-        for (i = 0; i < max_choice; i++)
+       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);
+       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,
+                               box_y, box_x + check_x + 5, list_height);
+
+                   wrefresh (dialog);
+
+                   continue;   /* wait for another key press */
+               } else
+                   i = choice - 1;
+           } else if (key == KEY_DOWN || key == '+') {
+               if (choice == max_choice - 1) {
+                   if (scroll + choice >= item_no - 1)
+                       continue;
+                   /* Scroll list up */
+                   if (list_height > 1) {
+                       /* De-highlight current last item before scrolling up */
+                       print_item (list, items[(scroll + max_choice - 1) * 3 + 1],
+                                   status[scroll + max_choice - 1],
+                                   max_choice - 1, FALSE);
+                       scrollok (list, TRUE);
+                       scroll (list);
+                       scrollok (list, FALSE);
+                   }
+                   scroll++;
+                   print_item (list, items[(scroll + max_choice - 1) * 3 + 1],
+                               status[scroll + max_choice - 1],
+                               max_choice - 1, TRUE);
+                   wnoutrefresh (list);
+
+                   print_arrows(dialog, choice, item_no, scroll,
+                               box_y, box_x + check_x + 5, list_height);
+
+                   wrefresh (dialog);
+
+                   continue;   /* wait for another key press */
+               } else
+                   i = choice + 1;
+           }
+           if (i != choice) {
+               /* De-highlight current item */
+               print_item (list, items[(scroll + choice) * 3 + 1],
+                           status[scroll + choice], choice, FALSE);
+               /* Highlight new item */
+               choice = i;
+               print_item (list, items[(scroll + choice) * 3 + 1],
+                           status[scroll + choice], choice, TRUE);
+               wnoutrefresh (list);
+               wrefresh (dialog);
+           }
+           continue;           /* wait for another key press */
+       }
+       switch (key) {
+       case 'H':
+       case 'h':
+       case '?':
+           delwin (dialog);
+           free (status);
+           return 1;
+       case TAB:
+       case KEY_LEFT:
+       case KEY_RIGHT:
+           button = ((key == KEY_LEFT ? --button : ++button) < 0)
+                       ? 1 : (button > 1 ? 0 : button);
+
+           print_buttons(dialog, height, width, button);
+           wrefresh (dialog);
+           break;
+       case 'S':
+       case 's':
+       case ' ':
+       case '\n':
+           if (!button) {
+               if (flag == FLAG_CHECK) {
+                   status[scroll + choice] = !status[scroll + choice];
+                   wmove (list, choice, check_x);
+                   wattrset (list, check_selected_attr);
+                   wprintw (list, "[%c]", status[scroll + choice] ? 'X' : ' ');
+               } else {
+                   if (!status[scroll + choice]) {
+                       for (i = 0; i < item_no; i++)
+                           status[i] = 0;
+                       status[scroll + choice] = 1;
+                       for (i = 0; i < max_choice; i++)
+                           print_item (list, items[(scroll + i) * 3 + 1],
+                                       status[scroll + i], i, i == choice);
+                   }
+               }
+               wnoutrefresh (list);
+               wrefresh (dialog);
+            
+               for (i = 0; i < item_no; i++) {
+                   if (status[i]) {
+                       if (flag == FLAG_CHECK) {
+                           fprintf (stderr, "\"%s\" ", items[i * 3]);
+                       } else {
+                           fprintf (stderr, "%s", items[i * 3]);
+                       }
+
+                   }
+               }
             }
-            scroll--;
-            print_item (list, items[scroll * 3 + 1],
-                status[scroll], 0, TRUE);
-            wnoutrefresh (list);
-
-                print_arrows(dialog, choice, item_no, scroll,
-                box_y, box_x + check_x + 5, list_height);
-
-            wrefresh (dialog);
-
-            continue;    /* wait for another key press */
-        } else
-            i = choice - 1;
-        } else if (key == KEY_DOWN || key == '+') {
-        if (choice == max_choice - 1) {
-            if (scroll + choice >= item_no - 1)
-            continue;
-            /* Scroll list up */
-            if (list_height > 1) {
-            /* De-highlight current last item before scrolling up */
-            print_item (list, items[(scroll + max_choice - 1) * 3 + 1],
-                    status[scroll + max_choice - 1],
-                    max_choice - 1, FALSE);
-            scrollok (list, TRUE);
-            scroll (list);
-            scrollok (list, FALSE);
-            }
-            scroll++;
-            print_item (list, items[(scroll + max_choice - 1) * 3 + 1],
-                status[scroll + max_choice - 1],
-                max_choice - 1, TRUE);
-            wnoutrefresh (list);
-
-                print_arrows(dialog, choice, item_no, scroll,
-                box_y, box_x + check_x + 5, list_height);
-
-            wrefresh (dialog);
-
-            continue;    /* wait for another key press */
-        } else
-            i = choice + 1;
-        }
-        if (i != choice) {
-        /* De-highlight current item */
-        print_item (list, items[(scroll + choice) * 3 + 1],
-                status[scroll + choice], choice, FALSE);
-        /* Highlight new item */
-        choice = i;
-        print_item (list, items[(scroll + choice) * 3 + 1],
-                status[scroll + choice], choice, TRUE);
-        wnoutrefresh (list);
-        wrefresh (dialog);
-        }
-        continue;        /* wait for another key press */
+           delwin (dialog);
+           free (status);
+           return button;
+       case 'X':
+       case 'x':
+           key = ESC;
+       case ESC:
+           break;
+       }
+
+       /* Now, update everything... */
+       doupdate ();
     }
-    switch (key) {
-    case 'H':
-    case 'h':
-    case '?':
-        delwin (dialog);
-        free (status);
-        return 1;
-    case TAB:
-    case KEY_LEFT:
-    case KEY_RIGHT:
-        button = ((key == KEY_LEFT ? --button : ++button) < 0)
-            ? 1 : (button > 1 ? 0 : button);
-
-        print_buttons(dialog, height, width, button);
-        wrefresh (dialog);
-        break;
-    case 'S':
-    case 's':
-    case ' ':
-    case '\n':
-        if (!button) {
-        if (flag == FLAG_CHECK) {
-            status[scroll + choice] = !status[scroll + choice];
-            wmove (list, choice, check_x);
-            wattrset (list, check_selected_attr);
-            wprintw (list, "[%c]", status[scroll + choice] ? 'X' : ' ');
-        } else {
-            if (!status[scroll + choice]) {
-            for (i = 0; i < item_no; i++)
-                status[i] = 0;
-            status[scroll + choice] = 1;
-            for (i = 0; i < max_choice; i++)
-                print_item (list, items[(scroll + i) * 3 + 1],
-                    status[scroll + i], i, i == choice);
-            }
-        }
-        wnoutrefresh (list);
-        wrefresh (dialog);
-        for (i = 0; i < item_no; i++) {
-            if (status[i]) {
-            if (flag == FLAG_CHECK) {
-                fprintf (stderr, "\"%s\" ", items[i * 3]);
-            } else {
-                fprintf (stderr, "%s", items[i * 3]);
-            }
-
-            }
-        }
-            }
-        delwin (dialog);
-        free (status);
-        return button;
-    case 'X':
-    case 'x':
-        key = ESC;
-    case ESC:
-        break;
-    }
-
-    /* Now, update everything... */
-    doupdate ();
-    }
+    
 
     delwin (dialog);
     free (status);
-    return -1;            /* ESC pressed */
+    return -1;                 /* ESC pressed */
 }