cdk_display(3)

NAME
bindCDKObject, unbindCDKObject, checkCDKObjectBind, cleanCDKObjectBindings - Curses Development Kit Character Binding Capabilities.

SYNOPSIS

cc [ flag ... ] file ... -lcdk [ library ... ]

#include <cdk.h>

void bindCDKObject (EObjectTypecdkType, void *object, chtype key, BINDFN function, void *data);

void unbindCDKObject (EObjectType cdkType, void *object, chtype key);

void checkCDKObjectBind (EObjectType cdkType, void *object, chtype key);

void cleanCDKObjectBindings (EObjectType cdkType, void *object);

DESCRIPTION
Cdk has the ability to create user definable key bindings. This ability makes Cdk more dynamic and usable for a wide variety of tasks. The following section outlines the binding functions, their use, and their purpose. void bindCDKObject (EObjectType cdkType, void *object, chtype key, BINDFN function, void *data);
    This function creates a key binding between a specific Cdk widget (object) given key (key). The parameter cdkType is of type EObjectType which is one of the following values.

    EObjectType_Value   Corresponding_Widget         Widget_Manual_Page
    vALPHALIST          Alphalist Widget             cdk_alphalist (3)
    vCALENDAR           Calendar Widget              cdk_calendar (3)
    vDIALOG             Dialog Widget                cdk_dialog (3)
    vENTRY              Entry Widget                 cdk_entry (3)
    vFSELECT            File Selector Widget         cdk_fselect (3)
    vGRAPH              Graph Widget                 cdk_graph (3)
    vHISTOGRAM          Histogram Widget             cdk_histogram (3)
    vITEMLIST           Item List Widget             cdk_itemlist (3)
    vLABEL              Label Widget                 cdk_label (3)
    vMARQUEE            Marquee Widget               cdk_marquee (3)
    vMATRIX             Matrix Widget                cdk_matrix (3)
    vMENTRY             Multiple Line Entry Widget   cdk_mentry (3)
    vMENU               Menu Widget                  cdk_menu (3)
    vRADIO              Radio List Widget            cdk_radio (3)
    vSCALE              Numeric Scale Widget         cdk_scale (3)
    vSCROLL             Scrolling List Widget        cdk_scroll (3)
    vSELECTION          Selection List Widget        cdk_selection (3)
    vSLIDER             Slider Widget                cdk_slider (3)
    vSWINDOW            Scrolling Window Widget      cdk_swindow (3)
    vTEMPLATE           Template Entry Widget        cdk_template (3)
    vVIEWER             Viewer Widget                cdk_viewer (3)
        The parameter function is of type BINDFN which has the following prototype:
    void function (EObjectType cdktype, void *object, void *clientData, chtype key);
        The parameter data is a void * pointer to whatever data the call-back function may need. The parameter key is the key hit which triggered this call-back.
    void unbindCDKObject (EObjectType cdkType, void *object, chtype key);
        This function removes a specific binding to an object. The parameter names are the same as the description of the function bindCDKObject.
    int checkCDKObjectBind (EObjectType cdkType, void *object, chtype key);
        This function returns an integer value stating whether the key key has been bound to the given widget, object.
    void cleanCDKObjectBindings (EObjectType cdkType, void *object);
        This function removes all user defined key bindings from the given widget.

EXAMPLE
To help demonstrate how to use the key bindings I will demonstrate a simple dialog box widget with help for each button. The following code segment creates a dialog box and a call-back function named dialogHelpCB.

________________________________________

#include "cdk.h"
void dialogHelpCB (EObjectType cdktype, void *object, void *clientData)
{
   CDKDIALOG *dialog = (CDKDIALOG *)object;
   char *mesg[5];
   /* Check which button we are on.		*/
   if (dialog->currentButton == 0)
   {
      mesg[0] = "<C></U>Help for </U>Who<!U>.";
      mesg[1] = "<C>When this button is picked the name of the current";
      mesg[2] = "<C>user is displayed on the screen in a pop-up window.";
      popupLabel (dialog->screen, mesg, 3);
   }
   else if (dialog->currentButton == 1)
   {
      mesg[0] = "<C></U>Help for </U>Time<!U>.";
      mesg[1] = "<C>When this button is picked the current time is";
      mesg[2] = "<C>displayed on the screen in a pop-up window.";
      popupLabel (dialog->screen, mesg, 3);
   }
   else if (dialog->currentButton == 2)
   {
      mesg[0] = "<C></U>Help for </U>Date<!U>.";
      mesg[1] = "<C>When this button is picked the current date is";
      mesg[2] = "<C>displayed on the screen in a pop-up window.";
      popupLabel (dialog->screen, mesg, 3);
   }
   else if (dialog->currentButton == 3)
   {
      mesg[0] = "<C></U>Help for </U>Quit<!U>.";
      mesg[1] = "<C>When this button is picked the dialog box is exited.";
      popupLabel (dialog->screen, mesg, 2);
   }
}
void main()
{
   /* Declare variables.			*/
   CDKSCREEN	*cdkscreen;
   CDKDIALOG	*question;
   WINDOW	*cursesWin;
   char		*buttons[40];
   char		*message[40], *info[5], *loginName;
   char		temp[256];
   int		selection;
   int		x;
   time_t	clck;
   struct tm	*currentTime;
   /* Set up CDK 				*/
   cursesWin = initscr();
   cdkscreen = initCDKScreen (cursesWin);
   /* Start color.              		*/
   initCDKColor();
   /* Set up the dialog box.			*/
   message[0] = "<C></U>Simple Command Interface";
   message[1] = "Pick the command you wish to run.";
   message[2] = "<C>Press </R>?<!R> for help.";
   buttons[0] = "Who";
   buttons[1] = "Time";
   buttons[2] = "Date";
   buttons[3] = "Quit";
   /* Create the dialog box.			*/
   question	= newCDKDialog (cdkscreen, CENTER, CENTER,
				message, 3, buttons, 4, A_REVERSE,
				TRUE, TRUE, FALSE);
   /* Check if we got a null value back.	*/
   if (question == (CDKDIALOG *)NULL)
   {
      destroyCDKScreen (cdkscreen);
      /* End curses...				*/
      endCDK();
      /* Spit out a message.			*/
      printf ("Oops. Can't seem to create the dialog box. Is the window too small?);
      exit (1);
   }
   /* Create the key binding.			*/
   bindCDKObject (vDIALOG, question, '?', dialogHelpCB, NULL);
   /* Activate the dialog box.			*/
   selection = 0;
   while (selection != 3)
   {
      /* Get the users button selection.	*/
      selection = activateCDKDialog (question, (chtype *)NULL);
      /* Check the results.			*/
      if (selection == 0)
      {
         /* Get the users login name.		*/
         info[0] = "<C>     </U>Login Name<!U>     ";
         loginName = getlogin();
         if (loginName == (char *)NULL)
         {
            info[1] = "<C></R>Unknown";
         }
         else
         {
             sprintf (temp, "<C><%s>", loginName); info[1] = strdup (temp);
         }
         popupLabel (question->screen, info, 2);
         free (info[1]);
      }
      else if (selection == 1)
      {
         /* Print out the time.			*/
         time(&clck);
         currentTime = localtime(&clck);
         sprintf (temp, "<C>%d:%d:%d", currentTime->tm_hour,
					currentTime->tm_min,
					currentTime->tm_sec);
         info[0] = "<C>   </U>Current Time<!U>   ";
         info[1] = strdup (temp);
         popupLabel (question->screen, info, 2);
         free (info[1]);
      }
      else if (selection == 2)
      {
         /* Print out the date.			*/
         time(&clck);
         currentTime = localtime(&clck);
         sprintf (temp, "<C>%d/%d/%d", currentTime->tm_mday,
					currentTime->tm_mon,
					currentTime->tm_year);
         info[0] = "<C>   </U>Current Date<!U>   ";
         info[1] = strdup (temp);
         popupLabel (question->screen, info, 2);
         free (info[1]);
      }
   }
   /* Clean up					*/
   destroyCDKDialog (question);
   destroyCDKScreen (cdkscreen);
   endCDK();
   delwin (cursesWin);
}
________________________________________

SEE ALSO
cdk(3), cdk_display(3), cdk_screen(3)

NOTES
The header file <cdk.h> automatically includes the header files <curses.h>, <stdlib.h>, <string.h>, <ctype.h>, <unistd.h>, <dirent.h>, <time.h>, <errno.h>, <pwd.h>, <grp.h>, <sys/stat.h>, and <sys/types.h>. The <curses.h> header file includes <stdio.h> and <unctrl.h>.