1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
|
/* $Id: matrix_ex.c,v 1.19 2016/12/10 13:29:08 tom Exp $ */
#include <cdk_test.h>
#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 = "<C>This is the CDK\n<C>matrix widget.\n<C><#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, "</B/5>Course");
set_col (2, 7, "</B/33>Lec 1");
set_col (3, 7, "</B/33>Lec 2");
set_col (4, 7, "</B/33>Lec 3");
set_col (5, 1, "</B/7>Flag");
#define set_row(n, string) \
rowtitle[n] = use_rowtitles ? "<C></B/6>" 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] = "<C>You hit escape. No information passed back.";
mesg[1] = "";
mesg[2] = "<C>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] = "<L>You exited the matrix normally.";
mesg[1] = temp;
mesg[2] = "<L>To get the contents of the matrix cell, you can";
mesg[3] = "<L>use getCDKMatrixCell():";
mesg[4] = getCDKMatrixCell (courseList, courseList->crow, courseList->ccol);
mesg[5] = "";
mesg[6] = "<C>Press any key to continue.";
popupLabel (cdkscreen, (CDK_CSTRING2)mesg, 7);
}
/* Clean up. */
destroyCDKMatrix (courseList);
destroyCDKScreen (cdkscreen);
endCDK ();
ExitProgram (EXIT_SUCCESS);
}
|