/* $Id: radio_ex.c,v 1.20 2016/12/04 15:22:16 tom Exp $ */ #include #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 = "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] = "You hit escape. No item selected."; mesg[1] = ""; mesg[2] = "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] = "You selected a directory"; sprintf (temp, "%.*s", (int)(sizeof (temp) - 20), item[selection]); mesg[1] = temp; mesg[2] = ""; mesg[3] = "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] = "You selected the filename"; sprintf (temp, "%.*s", (int)(sizeof (temp) - 20), item[selection]); mesg[1] = temp; mesg[2] = ""; mesg[3] = "Press any key to continue."; popupLabel (cdkscreen, (CDK_CSTRING2)mesg, 4); break; } } } /* Clean up. */ CDKfreeStrings (item); destroyCDKRadio (radio); destroyCDKScreen (cdkscreen); endCDK (); ExitProgram (EXIT_SUCCESS); }