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

FreeBSD Manual Pages

  
 
  

home | help
cdk_binding(3)		   Library Functions Manual		cdk_binding(3)

NAME
       cdk_binding - Curses Development	Kit 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  depcrecated:  use
	    getchCDKObject.

       getchCDKObject
	    reads a keycode from the given widget.  It sets a flag to indicate
	    if the result is a function	key.  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.

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	 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)

								cdk_binding(3)

NAME | SYNOPSIS | DESCRIPTION | EXAMPLE | SEE ALSO

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

home | help