man cdk_binding (Fonctions bibliothèques) - bindCDKObject, unbindCDKObject, checkCDKObjectBind, cleanCDKObjectBindings - Curses Development Kit Character Binding Capabilities.
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?n"); 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>.