bindCDKObject, unbindCDKObject, checkCDKObjectBind,
cleanCDKObjectBindings - Curses Development Kit Character
Binding Capabilities.
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);
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 cdk-
Type 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.
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?0);
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);
}
________________________________________
cdk(3), cdk_display(3), cdk_screen(3)
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>.
05 Dec 1995 cdk_display(3)
[ Back ] |