#include <cdk_int.h>
/*
* $Author: tom $
* $Date: 2004/08/22 21:28:55 $
* $Revision: 1.10 $
*/
#undef ObjOf
#define ObjOf(ptr) (ptr)
/*
* This allows the user to use the cursor keys to adjust the
* position of the widget.
*/
void positionCDKObject (CDKOBJS *obj, WINDOW *win)
{
CDKSCREEN *screen = ScreenOf(obj);
WINDOW *parent = screen->window;
int origX = getbegx(win);
int origY = getbegy(win);
chtype key = 0;
int begX = getbegx(parent);
int begY = getbegy(parent);
int endX = begX + getmaxx(WindowOf(obj));
int endY = begY + getmaxy(WindowOf(obj));
/* Let them move the widget around until they hit return. */
while ((key = getcCDKObject(obj)) != KEY_ENTER)
{
switch (key)
{
case KEY_UP:
case '8':
if (getbegy(win) > begY)
{
moveCDKObject (obj, 0, -1, TRUE, TRUE);
}
else
{
Beep();
}
break;
case KEY_DOWN:
case '2':
if (getendy(win) < endY)
{
moveCDKObject (obj, 0, 1, TRUE, TRUE);
}
else
{
Beep();
}
break;
case KEY_LEFT:
case '4':
if (getbegx(win) > begX)
{
moveCDKObject (obj, -1, 0, TRUE, TRUE);
}
else
{
Beep();
}
break;
case KEY_RIGHT:
case '6':
if (getendx(win) < endX)
{
moveCDKObject (obj, 1, 0, TRUE, TRUE);
}
else
{
Beep();
}
break;
case '7':
if (getbegy(win) > begY && getbegx(win) > begX)
{
moveCDKObject (obj, -1, -1, TRUE, TRUE);
}
else
{
Beep();
}
break;
case '9':
if (getendx(win) < endX && getbegy(win) > begY)
{
moveCDKObject (obj, 1, -1, TRUE, TRUE);
}
else
{
Beep();
}
break;
case '1':
if (getbegx(win) > begX && getendy(win) < endY)
{
moveCDKObject (obj, -1, 1, TRUE, TRUE);
}
else
{
Beep();
}
break;
case '3':
if (getendx(win) < endX && getendy(win) < endY)
{
moveCDKObject (obj, 1, 1, TRUE, TRUE);
}
else
{
Beep();
}
break;
case '5':
moveCDKObject (obj, CENTER, CENTER, FALSE, TRUE);
break;
case 't':
moveCDKObject (obj, getbegx(win), TOP, FALSE, TRUE);
break;
case 'b':
moveCDKObject (obj, getbegx(win), BOTTOM, FALSE, TRUE);
break;
case 'l':
moveCDKObject (obj, LEFT, getbegy(win), FALSE, TRUE);
break;
case 'r':
moveCDKObject (obj, RIGHT, getbegy(win), FALSE, TRUE);
break;
case 'c':
moveCDKObject (obj, CENTER, getbegy(win), FALSE, TRUE);
break;
case 'C':
moveCDKObject (obj, getbegx(win), CENTER, FALSE, TRUE);
break;
case CDK_REFRESH:
eraseCDKScreen (ScreenOf(obj));
refreshCDKScreen (ScreenOf(obj));
break;
case KEY_ESC:
moveCDKObject (obj, origX, origY, FALSE, TRUE);
break;
default:
Beep();
break;
}
}
}
syntax highlighted by Code2HTML, v. 0.9.1