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
|
/* $Id: radio_ex.c,v 1.20 2016/12/04 15:22:16 tom Exp $ */
#include <cdk_test.h>
#ifdef HAVE_XCURSES
char *XCursesProgramName = "radio_ex";
#endif
/*
* This program demonstrates the Cdk radio widget.
*
* Options (in addition to normal CLI parameters):
* -c create the data after the widget
* -s SPOS location for the scrollbar
* -t TEXT title for the widget
*
*/
int main (int argc, char **argv)
{
/* *INDENT-EQLS* */
CDKSCREEN *cdkscreen = 0;
CDKRADIO *radio = 0;
const char *title = "<C></5>Select a filename";
char **item = 0;
const char *mesg[5];
char temp[256];
int count;
CDK_PARAMS params;
CDKparseParams (argc, argv, ¶ms, "cs:t:" CDK_CLI_PARAMS);
/* Use the current diretory list to fill the radio list. */
count = CDKgetDirectoryContents (".", &item);
if (count <= 0)
{
fprintf (stderr, "Cannot get directory list\n");
ExitProgram (EXIT_FAILURE);
}
cdkscreen = initCDKScreen (NULL);
/* Set up CDK Colors. */
initCDKColor ();
/* Create the radio list. */
radio = newCDKRadio (cdkscreen,
CDKparamValue (¶ms, 'X', CENTER),
CDKparamValue (¶ms, 'Y', CENTER),
CDKparsePosition (CDKparamString2 (¶ms,
's',
"RIGHT")),
CDKparamValue (¶ms, 'H', 10),
CDKparamValue (¶ms, 'W', 40),
CDKparamString2 (¶ms, 't', title),
CDKparamNumber (¶ms, 'c') ? 0 : (CDK_CSTRING2)item,
CDKparamNumber (¶ms, 'c') ? 0 : count,
'#' | A_REVERSE, 1,
A_REVERSE,
CDKparamValue (¶ms, 'N', TRUE),
CDKparamValue (¶ms, 'S', FALSE));
/* Check if the radio list is null. */
if (radio == 0)
{
/* Exit CDK. */
destroyCDKScreen (cdkscreen);
endCDK ();
printf ("Cannot create the radio widget. Is the window too small?\n");
ExitProgram (EXIT_FAILURE);
}
if (CDKparamNumber (¶ms, 'c'))
{
setCDKRadioItems (radio, (CDK_CSTRING2)item, count);
}
/* loop until user selects a file, or cancels */
for (;;)
{
/* Activate the radio list. */
int selection = activateCDKRadio (radio, 0);
/* Check the exit status of the widget. */
if (radio->exitType == vESCAPE_HIT)
{
mesg[0] = "<C>You hit escape. No item selected.";
mesg[1] = "";
mesg[2] = "<C>Press any key to continue.";
popupLabel (cdkscreen, (CDK_CSTRING2)mesg, 3);
break;
}
else if (radio->exitType == vNORMAL)
{
struct stat sb;
if (stat (item[selection], &sb) == 0
&& (sb.st_mode & S_IFMT) == S_IFDIR)
{
char **nitem = 0;
mesg[0] = "<C>You selected a directory";
sprintf (temp, "<C>%.*s", (int)(sizeof (temp) - 20), item[selection]);
mesg[1] = temp;
mesg[2] = "";
mesg[3] = "<C>Press any key to continue.";
popupLabel (cdkscreen, (CDK_CSTRING2)mesg, 4);
count = CDKgetDirectoryContents (item[selection], &nitem);
if (count > 0)
{
CDKfreeStrings (item);
item = nitem;
if (chdir (item[selection]) == 0)
setCDKRadioItems (radio, (CDK_CSTRING2)item, count);
}
}
else
{
mesg[0] = "<C>You selected the filename";
sprintf (temp, "<C>%.*s", (int)(sizeof (temp) - 20), item[selection]);
mesg[1] = temp;
mesg[2] = "";
mesg[3] = "<C>Press any key to continue.";
popupLabel (cdkscreen, (CDK_CSTRING2)mesg, 4);
break;
}
}
}
/* Clean up. */
CDKfreeStrings (item);
destroyCDKRadio (radio);
destroyCDKScreen (cdkscreen);
endCDK ();
ExitProgram (EXIT_SUCCESS);
}
|