<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>menu_driver</STRONG> - command-processing loop of the menu system
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
int menu_driver(MENU *menu, int c);
<H2>DESCRIPTION</H2><PRE>
Once a menu has been posted (displayed), you should funnel
input events to it through <STRONG>menu_driver</STRONG>. This routine has
- two major input cases; either the input is a menu naviga-
- tion request or it's a printable ASCII character. The
- menu driver requests are as follows:
+ three major input cases; either the input is a menu navi-
+ gation request, it's a printable ASCII character or it is
+ the KEY_MOUSE special key associated with an mouse event.
+ The menu driver requests are as follows:
REQ_LEFT_ITEM
Move left to an item.
REQ_TOGGLE_ITEM
Select/deselect an item.
-
Clear the menu pattern buffer.
REQ_BACK_PATTERN
- Delete the previous character from the pattern
+ Delete the previous character from the pattern
buffer.
REQ_NEXT_MATCH
such match, <STRONG>menu_driver</STRONG> returns <STRONG>E_NO_MATCH</STRONG> and deletes the
appended character from the buffer.
- If the second argument is one of the above pre-defined
+ If the second argument is one of the above pre-defined
requests, the corresponding action is performed.
- If the second argument is neither printable ASCII nor one
- of the above pre-defined menu requests, the drive assumes
- it is an application-specific command and returns
- <STRONG>E_UNKNOWN_COMMAND</STRONG>. Application-defined commands should be
- defined relative to <STRONG>MAX_COMMAND</STRONG>, the maximum value of
- these pre-defined requests.
-
+ If the second argument is the KEY_MOUSE special key, the
+ associated mouse event is translated into one of the above
+ pre-defined requests. Currently only clicks in the user
+ window (e.g. inside the menu display area or the decora-
+ tion window) are handled. If you click above the display
+ region of the menu, a REQ_SCR_ULINE is generated, if you
+ doubleclick a REQ_SCR_UPAGE is generated and if you
+ tripleclick a REQ_FIRST_ITEM is generated. If you click
+ below the display region of the menu, a REQ_SCR_DLINE is
+ generated, if you doubleclick a REQ_SCR_DPAGE is generated
+ and if you tripleclick a REQ_LAST_ITEM is generated. If
+ you click at an item inside the display area of the menu,
+ the menu cursor is positioned to that item. If you double-
+ click at an item a REQ_TOGGLE_ITEM is generated and
+ <STRONG>E_UNKNOWN_COMMAND</STRONG> is returned. This return value makes
+ sense, because a double click usually means that an item-
+ specific action should be returned. It's exactly the pur-
+ pose of this return value to signal that an application
+ specific command should be executed. If a translation into
+ a request was done, <STRONG>menu_driver</STRONG> returns the result of this
+ request. If you clicked outside the user window or the
+ mouse event couldn't be translated into a menu request an
+ <STRONG>E_REQUEST_DENIED</STRONG> is returned.
+
+ If the second argument is neither printable ASCII nor one
+ of the above pre-defined menu requests or KEY_MOUSE, the
+ drive assumes it is an application-specific command and
+ returns <STRONG>E_UNKNOWN_COMMAND</STRONG>. Application-defined commands
+ should be defined relative to <STRONG>MAX_COMMAND</STRONG>, the maximum
+ value of these pre-defined requests.
-</PRE>
-<H2>RETURN VALUE</H2><PRE>
<STRONG>menu_driver</STRONG> return one of the following error codes:
<STRONG>E_OK</STRONG> The routine succeeded.
System error occurred (see <STRONG>errno</STRONG>).
<STRONG>E_BAD_ARGUMENT</STRONG>
- Routine detected an incorrect or out-of-range argu-
+ Routine detected an incorrect or out-of-range argu-
ment.
<STRONG>E_BAD_STATE</STRONG>
<STRONG>E_NO_MATCH</STRONG>
Character failed to match.
+
+ <STRONG>E_REQUEST_DENIED</STRONG>
The menu driver could not process the request.
</PRE>
<H2>NOTES</H2><PRE>
- The header file <STRONG><menu.h></STRONG> automatically includes the header
- files <STRONG><curses.h></STRONG>.
+ The header file <STRONG><menu.h></STRONG> automatically includes the header
+ files <STRONG><curses.h></STRONG>.
</PRE>
<H2>PORTABILITY</H2><PRE>
- These routines emulate the System V menu library. They
- were not supported on Version 7 or BSD versions.
+ These routines emulate the System V menu library. They
+ were not supported on Version 7 or BSD versions. The sup-
+ port for mouse events is ncurses specific.
</PRE>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
</PRE>
</BODY>
</HTML>