****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
/***************************************************************************
#include "menu.priv.h"
-MODULE_ID("$Id: m_cursor.c,v 1.9 1998/02/11 12:13:50 tom Exp $")
+MODULE_ID("$Id: m_cursor.c,v 1.13 1999/05/16 17:24:43 juergen Exp $")
/*---------------------------------------------------------------------------
-| Facility : libnmenu
-| Function : pos_menu_cursor
-|
-| Description : Position logical cursor to current item in menu
+| Facility : libnmenu
+| Function : _nc_menu_cursor_pos
+|
+| Description : Return position of logical cursor to current item
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - invalid menu
| E_NOT_POSTED - Menu is not posted
+--------------------------------------------------------------------------*/
-int pos_menu_cursor(const MENU * menu)
+int _nc_menu_cursor_pos(const MENU* menu,
+ const ITEM* item,
+ int* pY, int* pX)
{
- if (!menu)
- RETURN(E_BAD_ARGUMENT);
+ if (!menu || !pX || !pY)
+ return(E_BAD_ARGUMENT);
else
{
- ITEM *item;
- int x, y;
- WINDOW *win, *sub;
-
+ if ((ITEM*)0 == item)
+ item = menu->curitem;
+ assert(item!=(ITEM*)0);
+
if ( !( menu->status & _POSTED ) )
- RETURN(E_NOT_POSTED);
-
- item = menu->curitem;
- assert(item);
-
- x = item->x * (menu->spc_cols + menu->itemlen);
- y = (item->y - menu->toprow) * menu->spc_rows;
+ return(E_NOT_POSTED);
+
+ *pX = item->x * (menu->spc_cols + menu->itemlen);
+ *pY = (item->y - menu->toprow) * menu->spc_rows;
+ }
+ return(E_OK);
+}
+
+/*---------------------------------------------------------------------------
+| Facility : libnmenu
+| Function : pos_menu_cursor
+|
+| Description : Position logical cursor to current item in menu
+|
+| Return Values : E_OK - success
+| E_BAD_ARGUMENT - invalid menu
+| E_NOT_POSTED - Menu is not posted
++--------------------------------------------------------------------------*/
+int pos_menu_cursor(const MENU * menu)
+{
+ WINDOW *win, *sub;
+ int x, y;
+ int err = _nc_menu_cursor_pos(menu,(ITEM*)0,&y,&x);
+
+ if (E_OK==err)
+ {
win = menu->userwin ? menu->userwin : stdscr;
sub = menu->usersub ? menu->usersub : win;
assert(win && sub);
-
+
if ((menu->opt & O_SHOWMATCH) && (menu->pindex > 0))
x += ( menu->pindex + menu->marklen - 1);
-
+
wmove(sub,y,x);
-
+
if ( win != sub )
{
wcursyncup(sub);
wsyncup(sub);
untouchwin(sub);
- }
+ }
}
- RETURN(E_OK);
+ RETURN(err);
}
/* m_cursor.c ends here */