Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
cdk_binding(3)			 Library calls			cdk_binding(3)

NAME
       cdk_binding - Cdk character binding capabilities

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

       #include	<cdk.h>

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

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

       void cleanCDKObjectBindings (
		      EObjectType cdkType,
		      void *object);

       bool isCDKObjectBind (
		      EObjectType cdkType,
		      void *object,
		      chtype key);

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

       int getcCDKObject (
		      CDKOBJS *object);

       int getchCDKObject (
		      CDKOBJS *object,
		      boolean *functionKey);

DESCRIPTION
       Cdk  has	the ability to create user definable key bindings.  This abil-
       ity makes Cdk more dynamic and usable for a wide	variety	of tasks.  The
       following section outlines the binding functions, their use, and	 their
       purpose.

       bindCDKObject
	    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)
	vBUTTON		    Button Widget		 cdk_button(3)
	vBUTTONBOX	    Buttonbox Widget		 cdk_buttonbox(3)
	vCALENDAR	    Calendar Widget		 cdk_calendar(3)
	vDIALOG		    Dialog Widget		 cdk_dialog(3)
	vDSCALE		    DoubleFloat	Widget		 cdk_dscale(3)
	vENTRY		    Entry Widget		 cdk_entry(3)
	vFSCALE		    Floating Scale Widget	 cdk_fscale(3)
	vFSELECT	    File Selector Widget	 cdk_fselect(3)
	vFSLIDER	    Floating Slider Widget	 cdk_fslider(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		    Integer 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)
	vUSCALE		    Unsigned Scale Widget	 cdk_uscale(3)
	vUSLIDER	    Unsigned Slider Widget	 cdk_uslider(3)
	vVIEWER		    Viewer Widget		 cdk_viewer(3)
	----------------------------------------------------------------------
	  The parameter	function is the	callback function.  The	parameter data
	  points to data passed	to the callback	function.  The	parameter  key
	  is the key hit which triggered this callback.

       checkCDKObjectBind
	    check  to  see if a	binding	for the	given key exists.  If it does,
	    Cdk	runs the associated command and	returns	 its  value,  normally
	    TRUE.  If no binding exists, return	FALSE.

	    The	 widgets  which	 accept	input, e.g., via "inject" methods, use
	    this to check if the injected character is bound  to  a  function.
	    If that returns TRUE, the widget may update	its exitType value: if
	    earlyExit value is set (not	equal to vNEVER_ACTIVATED), the	widget
	    sets exitType to that value.

       cleanCDKObjectBindings
	    removes all	user defined key bindings from the given widget.

       isCDKObjectBind
	    check  to  see  if a binding for the given key exists.  If it does
	    return TRUE.  If no	binding	exists,	return FALSE.

       unbindCDKObject
	    removes a specific binding to an object.  The  parameter  are  the
	    same as for	bindCDKObject.

       getcCDKObject
	    reads  a  keycode  from the	given widget.  This is deprecated: use
	    getchCDKObject.

       getchCDKObject
	    reads a keycode from the given widget, and sets  a	flag  via  the
	    functionKey	parameter to indicate if the result is a function key.
	    The	 functionKey  parameter	 may  be null; the keycode is returned
	    whether or not the flag can	be set.

	    If the keycode has been bound to the special function getcCDKBind,
	    then it will be translated to the value which was  given  for  the
	    binding data.  Otherwise, a	few special cases are performed:
		+-------------------------------------------------------+
		| Key			      Result			|
		+-------------------------------------------------------+
		| CTRL-A		      KEY_HOME			|
		| CTRL-B		      KEY_LEFT			|
		| CTRL-E		      KEY_END			|
		| CTRL-F		      KEY_RIGHT			|
		| CTRL-N		      tab			|
		| CTRL-P		      KEY_BTAB			|
		| DEL			      KEY_DC			|
		| backspace		      KEY_BACKSPACE		|
		| carriage return	      KEY_ENTER			|
		| newline		      KEY_ENTER			|
		+-------------------------------------------------------+

       All of the widgets use getchCDKObject internally	for consistency.

EXAMPLES
       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	callback  function  named  di-
       alogHelpCB.

		      ________________________________________

       #include	<cdk.h>

       #ifdef HAVE_XCURSES
       char *XCursesProgramName="bind_ex";
       #endif

       static int dialogHelpCB (EObjectType cdktype GCC_UNUSED,	void *object, void *clientData GCC_UNUSED, chtype key GCC_UNUSED)
       {
	  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	popup window.";
	     popupLabel	(ScreenOf(dialog), 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	popup window.";
	     popupLabel	(ScreenOf(dialog), 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	popup window.";
	     popupLabel	(ScreenOf(dialog), 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	(ScreenOf(dialog), mesg, 2);
	  }
	  return (FALSE);
       }

       int main	(void)
       {
	  /* Declare variables.	*/
	  CDKSCREEN	   *cdkscreen;
	  CDKDIALOG	   *question;
	  char		   *buttons[40];
	  char		   *message[40], *info[5], *loginName;
	  char		   temp[256];
	  int		   selection;
	  time_t   clck;
	  struct tm	   *currentTime;

	  cdkscreen = initCDKScreen (NULL);

	  /* 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 *)0)
	  {
	     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, 0);

	  /* Activate the dialog box. */
	  selection = 0;
	  while	(selection != 3)
	  {
	     /*	Get the	users button selection.	*/
	     selection = activateCDKDialog (question, (chtype *)0);

	     /*	Check the results. */
	     if	(selection == 0)
	     {
		 /* Get	the users login	name. */
		 info[0] = "<C>	    </U>Login Name<!U>	   ";
		 loginName = getlogin();
		 if (loginName == (char	*)0)
		 {
		    strcpy (temp, "<C></R>Unknown");
		 }
		 else
		 {
		     sprintf (temp, "<C><%s>", loginName);
		 }
		 info[1] = copyChar (temp);
		 popupLabel (ScreenOf(question), info, 2);
		 freeChar (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] = copyChar (temp);
		 popupLabel (ScreenOf(question), info, 2);
		 freeChar (info[1]);
	     }
	     else if (selection	== 2)
	     {
		 /* Print out the date.	*/
		 time(&clck);
		 currentTime = localtime(&clck);
		 sprintf (temp,	"<C>%d/%d/%02d", currentTime->tm_mday,
						currentTime->tm_mon,
						currentTime->tm_year % 100);
		 info[0] = "<C>	  </U>Current Date<!U>	 ";
		 info[1] = copyChar (temp);
		 popupLabel (ScreenOf(question), info, 2);
		 freeChar (info[1]);
	     }
	  }

	  /* Clean up. */
	  destroyCDKDialog (question);
	  destroyCDKScreen (cdkscreen);
	  endCDK();
	  exit (0);
       }
		      ________________________________________

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

				  2025-01-14			cdk_binding(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=getcCDKObject&sektion=3&manpath=FreeBSD+Ports+15.0>

home | help