bug-ncurses
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Passing FIELD Object To Function


From: TW
Subject: Passing FIELD Object To Function
Date: Tue, 17 Mar 2009 18:48:09 -0600

        I have a function (populate_edit_form) declared in a header as such:
                
           /* recmanip.h */
           
           #ifndef RECMANIP_H
           #define RECMANIP_H
           
           #include <ncurses.h>
           #include <form.h>
           #include <string.h>
           #include "winmanip.h"
           #include "dhandler.h"
           #include "sqlite.h"
           
           #define NFIELDS 31 
           #define FORM_WIDTH 30
           #define FORM_STARTY 2
           #define FORM_STARTX 1
           #define CAPTION_WIDTH 15
           
           struct form {
           const char title[15];
           char value[30];
           };
           
           int add_record(void);
           int populate_edit_form(FIELD *field[NFIELDS], FORM *, WINDOW *);
           int print_in_middle(WINDOW *, int, int, int, char *, chtype);
           
           #endif /* RECMANIP_H */

        In one of my files, I call this function like this:

           /* recmanip.c */
           
           #include "recmanip.h"
           
           int add_record(void)
           {
           FIELD *field[NFIELDS];
           FORM *myform;
           WINDOW *form_win;
           int ch, i=0, j=0; 
           struct form form_data[] = {
           {"id", "" }, {"title", "" }, {"artist", "" }, {"hd", "" },
           {"bank", "" }, {"bookmark", "" }, {"active", "" }, {"digitalinput", 
"" },
           {"genre", "" }, {"price", "" }, {"year", "" }, {"remixer", "" },
           {"labelid", "" }, {"class", "" }, {"classnumber", "" }
           };
           
           ===> populate_edit_form(field, myform, form_win);
           
           <snip>

           }

           int populate_edit_form(FIELD *field[NFIELDS], FORM *myform, WINDOW 
*form_win)
           {
           int i=0, j = 0, rows = 0, cols =0;
           int maxy, maxx;
           int form_win_height, form_win_width;
           int form_win_starty, form_win_startx;
           char *hd_choices[] = { "A", "B", NULL };
           char *active_choices[] = { "Y", "N", NULL };
           char *digital_choices[] = { "Yes", "No", NULL };
           char *field_names[] = {
           "ID", "Title", "Artist", "HD", "Bank", "Bookmark", "Active", 
           "Digital Input", "Genre", "Price", "Year", "Remixer", "Label",
           "Class Type", "Class Number"
           };
           
           /* Initialize the fields */
           /* num rows, num cols, start row, start col, off-screen rows, num 
buffers */
           for(i=0; i<NFIELDS-1; i=i+2, j++) {
           field[i] = new_field(1, CAPTION_WIDTH, FORM_STARTY+j, FORM_STARTX, 
0, 0);
           field[i+1] = new_field(1, FORM_WIDTH, FORM_STARTY+j, 
CAPTION_WIDTH+3, 0, 0);
           }
           field[NFIELDS-1] = NULL;
           
           /* Set field options */
           for(i=0, j=0; i<NFIELDS-1; i++) {
           if(i == 0 || i%2 == 0) {
                   field_opts_off(field[i], O_ACTIVE);
                   set_field_buffer(field[i], 0, field_names[j]);
                   j++;
           }
           else if (i%2 != 0) {
                   set_field_back(field[i], A_UNDERLINE);
                   field_opts_off(field[i], O_AUTOSKIP);
           
                   if(i == 1) {
                   field_opts_off(field[i], O_ACTIVE);
                   set_field_buffer(field[i], 0, "ID auto-generated");
                   }
                   else if(i==3 || i==5 || i==7 || i==15 || i==23) {
                   set_field_buffer(field[i], 0, "Unknown");
                   }
                   else if(i==9 || i==11 || i==25 || i==29) {
                   set_field_buffer(field[i], 0, "0");
                   }
                   else if(i==13) {
                   set_field_buffer(field[i], 0, "Inactive");
                   }
                   else if(i==17 || i==27) {
                   set_field_buffer(field[i], 0, "Unclassified");
                   }
                   else if(i==19) {
                   set_field_buffer(field[i], 0, "9.99");
                   }
                   else if(i==21) {
                   set_field_buffer(field[i], 0, "1900");
                   }
           
                   if(i == 7) /* HD */
                   set_field_type(field[i], TYPE_ENUM, hd_choices, 0, 0);
                   if(i == 9) /* Bank */
                   set_field_type(field[i], TYPE_INTEGER, 0, 0, 25);
                   if(i == 11) /* Bookmark */
                   set_field_type(field[i], TYPE_INTEGER, 0, 0, 11);
                   if(i == 13) /* Active */
                   set_field_type(field[i], TYPE_ENUM, active_choices, 0, 0);
                   if(i == 15) /* Digital Input */
                   set_field_type(field[i], TYPE_ENUM, digital_choices, 0, 0);
                   if(i == 19) /* Price */
                   set_field_type(field[i], TYPE_NUMERIC, 2, 0, 0);
                   if(i == 21) /* Year */
                   set_field_type(field[i], TYPE_INTEGER, 0, 1900, 2100);
                   if(i == 29) /* Class Number */
                   set_field_type(field[i], TYPE_INTEGER, 0, 1, 24);
           }
           }
           
           /* Create the form */
           myform = new_form(field);
           
           /* Calculate the smallest area required for the form */
           scale_form(myform, &rows, &cols);
           
           /* Create form window */
           getmaxyx(stdscr, maxy, maxx);
           form_win_height = rows+5;
           form_win_width = cols+5;
           form_win_starty = (maxy - form_win_height)/2;
           form_win_startx = (maxx - form_win_width)/2;
           
           form_win = create_newwin(form_win_height, form_win_width, 
form_win_starty, form_win_startx);
           keypad(form_win, TRUE);
           
           /* Set main & sub window */
           set_form_win(myform, form_win);
           set_form_sub(myform, derwin(form_win, rows, cols, 2, 1)); /* x, y 
relative to form_win */

              print_in_middle(form_win, 1, 0, form_win_width, "Add Record (F1 
to exit)", COLOR_PAIR(1));
           
           /* Post form */
           post_form(myform);
           refresh();
           curs_set(1);
           }

        I'm getting a blank form.  I could put all of this in one block, but, 
when I want to delete a record, 
I don't want to write duplicate code, hence, passing the FIELD, FORM, & WINDOW 
objects.  The address for the form 
is being passed to the function, but, I'm not sure if I'm declaring it right.  
I'm still getting used to pointers 
and array-pointers.  Thanks.

-- 
VR~
        TW
        Email: address@hidden




reply via email to

[Prev in Thread] Current Thread [Next in Thread]