/* $Id: matrix_ex.c,v 1.19 2016/12/10 13:29:08 tom Exp $ */ #include #ifdef HAVE_XCURSES char *XCursesProgramName = "matrix_ex"; #endif #define MY_COLS 10 /* * This program demonstrates the Cdk matrix widget. */ int main (int argc, char **argv) { /* *INDENT-EQLS* */ CDKSCREEN *cdkscreen = 0; CDKMATRIX *courseList = 0; const char *title = 0; int rows = 8; int cols = 5; int vrows = 3; int vcols = 5; bool use_coltitles; bool use_rowtitles; const char *coltitle[MY_COLS]; const char *rowtitle[MY_COLS]; const char *mesg[MY_COLS]; int colwidth[MY_COLS]; int colvalue[MY_COLS]; int col_spacing; int row_spacing; CDK_PARAMS params; CDKparseParams (argc, argv, ¶ms, "trcT:C:R:" CDK_MIN_PARAMS); /* invert, so giving -S causes the shadow to turn off */ params.Shadow = !params.Shadow; /* cancel the default title, or supply a new one */ if (CDKparamValue (¶ms, 't', FALSE)) { title = 0; } else if ((title = CDKparamString (¶ms, 'T')) == 0) { title = "This is the CDK\nmatrix widget.\n<#LT><#HL(30)><#RT>"; } /* allow cancelling of column and/or row titles with -c and/or -r */ use_coltitles = !CDKparamValue (¶ms, 'c', FALSE); use_rowtitles = !CDKparamValue (¶ms, 'r', FALSE); col_spacing = CDKparamNumber2 (¶ms, 'C', -1); row_spacing = CDKparamNumber2 (¶ms, 'R', -1); cdkscreen = initCDKScreen (NULL); /* Start CDK Colors. */ initCDKColor (); /* Create the horizontal and vertical matrix labels. */ #define set_col(n, width, string) \ coltitle[n] = use_coltitles ? string : 0 ;\ colwidth[n] = width ;\ colvalue[n] = vUMIXED set_col (1, 7, "Course"); set_col (2, 7, "Lec 1"); set_col (3, 7, "Lec 2"); set_col (4, 7, "Lec 3"); set_col (5, 1, "Flag"); #define set_row(n, string) \ rowtitle[n] = use_rowtitles ? "" string : 0 set_row (1, "Course 1"); set_row (2, "Course 2"); set_row (3, "Course 3"); set_row (4, "Course 4"); set_row (5, "Course 5"); set_row (6, "Course 6"); set_row (7, "Course 7"); set_row (8, "Course 8"); /* Create the matrix object. */ courseList = newCDKMatrix (cdkscreen, CDKparamValue (¶ms, 'X', CENTER), CDKparamValue (¶ms, 'Y', CENTER), rows, cols, vrows, vcols, title, (CDK_CSTRING2)rowtitle, (CDK_CSTRING2)coltitle, colwidth, colvalue, col_spacing, row_spacing, '.', COL, params.Box, params.Box, params.Shadow); /* Check to see if the matrix is null. */ if (courseList == 0) { /* Clean up. */ destroyCDKScreen (cdkscreen); endCDK (); printf ("Cannot create the matrix widget.\n"); printf ("Is the window too small ?\n"); ExitProgram (EXIT_FAILURE); } /* Activate the matrix. */ activateCDKMatrix (courseList, 0); /* Check if the user hit escape or not. */ if (courseList->exitType == vESCAPE_HIT) { mesg[0] = "You hit escape. No information passed back."; mesg[1] = ""; mesg[2] = "Press any key to continue."; popupLabel (cdkscreen, (CDK_CSTRING2)mesg, 3); } else if (courseList->exitType == vNORMAL) { char temp[80]; sprintf (temp, "Current cell (%d,%d)", courseList->crow, courseList->ccol); mesg[0] = "You exited the matrix normally."; mesg[1] = temp; mesg[2] = "To get the contents of the matrix cell, you can"; mesg[3] = "use getCDKMatrixCell():"; mesg[4] = getCDKMatrixCell (courseList, courseList->crow, courseList->ccol); mesg[5] = ""; mesg[6] = "Press any key to continue."; popupLabel (cdkscreen, (CDK_CSTRING2)mesg, 7); } /* Clean up. */ destroyCDKMatrix (courseList); destroyCDKScreen (cdkscreen); endCDK (); ExitProgram (EXIT_SUCCESS); }