
/*
    (C) 1999 - 2000 AROS - The Amiga Research OS
    $Id: rtscreenmoderequesta.c,v 1.3 2000/11/26 16:53:49 stegerg Exp $

    Desc:
    Lang: English
*/

#include <exec/types.h>
#include <proto/exec.h>
#include <proto/reqtools.h>
#include <proto/intuition.h>
#include <exec/libraries.h>
#include <exec/memory.h>
#include <aros/libcall.h>

#include "reqtools_intern.h"

/*****************************************************************************

    NAME */

    AROS_LH3(ULONG, rtScreenModeRequestA,

/*  SYNOPSIS */

	AROS_LHA(struct rtScreenModeRequester *, screenmodereq, A1),
	AROS_LHA(char *, title, A3),
	AROS_LHA(struct TagItem *, taglist, A0),

/*  LOCATION */

	struct ReqToolsBase *, ReqToolsBase, 24, ReqTools)

/*  FUNCTION
	*IMPORTANT* THIS REQUESTER IS ONLY AVAILABLE FROM KICKSTART 2.0
	    ONWARDS! The 1.3 version of ReqTools also contains the
	    screenmode requester, but unless you are running 2.0 or higher
	    it will not come up. So what you essentially have to do is NOT
	    call rtScreenModeRequestA() if your program is running on a
	    machine with Kickstart 1.2/1.3. You can safely call
	    rtScreenModeRequestA() if you are running on a 2.0 machine,
	    even if the user has installed the 1.3 version of ReqTools.

	Get a screen mode from the user.

	The user will be able to pick a screen mode by name, enter the size
	and the number of colors (bitplane depth).

	rtScreenModeRequestA() will call the appropriate 2.0 functions to
	get all the mode's information. If no name has been assigned to the
	mode one will be constructed automatically.

    INPUTS
	screenmodereq - pointer to a struct rtScreenModeRequester allocated
	    with rtAllocRequestA().
	title - pointer to requester window title (null terminated).
	taglist - pointer to a TagItem array.

    TAGS
	RT_Window - see rtEZRequestA()

	RT_ReqPos - see rtEZRequestA()

	RT_LeftOffset - see rtEZRequestA()

	RT_TopOffset - see rtEZRequestA()

	RT_PubScrName - see rtEZRequestA()

	RT_Screen - see rtEZRequestA()

	RT_ReqHandler - see rtEZRequestA()

	RT_WaitPointer - see rtEZRequestA()

	RT_LockWindow - see rtEZRequestA()

	RT_ScreenToFront - see rtEZRequestA()

	RT_ShareIDCMP - see rtEZRequestA()

	RT_Locale - see rtEZRequestA()

	RT_IntuiMsgFunc - (struct Hook *) [V38] The requester will call
	    this hook for each IDCMP message it gets that doesn't belong to
	    its window. Only applies if you used the RT_ShareIDCMP tag to
	    share the IDCMP port with the parent window. Parameters are as
	    follows:

	    A0 - (struct Hook *) your hook
	    A2 - (struct rtScreenModeRequester *) your req
	    A1 - (struct IntuiMessage *) the message

	    After you have finished examining the message and your hook
	    returns, ReqTools will reply the message. So do not reply the
	    message yourself!

	RT_Underscore - (char) [V38] Indicates the symbol that precedes the
	    character in a gadget's label to be underscored. This will also
	    define the keyboard shortcut for this gadget. Currently only
	    needed for RTSC_OkText. Usually set to '_'.

	RT_DefaultFont - (struct TextFont *) This tag allows you to specify
	    the font to be used in the requester when the screen font is
	    proportional. Default is GfxBase->DefaultFont. This tag is
	    obsolete in ReqTools 2.2 and higher.

	RT_TextAttr - [V38] see rtFileRequestA()

	RTSC_Flags - (ULONG) Several flags:

	    SCREQF_OVERSCANGAD - Add an overscan cycle gadget to the
	        requester. After the requester returns you may read the
	        overscan type in 'rq->OverscanType' If this is 0 no
	        overscan is selected (Regular Size), if non-zero it holds
	        one of the OSCAN_... values defined in the include file
	        'intuition/screens.[h|i]'.

	    SCREQF_AUTOSCROLLGAD - Add an autoscroll checkbox gadget to the
	        requester. After the requester returns read
	        'smreq->AutoScroll' to see if the user prefers autoscroll
	        to be on or off.

	    SCREQF_SIZEGADS - Add width and height gadgets to the
	        requester. If you do not add these gadgets the width and
	        height returned will be the default width and height for
	        the selected overscan type.

	    SCREQF_DEPTHGAD - Add a depth slider gadget to the requester.
	        If you do not add a depth gadget, the depth returned will
	        be the maximum depth this mode can be opened in.

	    SCREQF_NONSTDMODES - Include all modes. Unless this flag is set
	        rtScreenModeRequestA() will exclude nonstandard modes.
	        Nonstandard modes are presently HAM and EHB
	        (ExtraHalfBrite). So unless you are picking a mode to do
	        some rendering in leave this flag unset. Without this flag
	        set the mode returned will be a normal bitplaned mode.

	    SCREQF_GUIMODES - Set this flag if you are getting a screen
	        mode to open a user interface screen in. The modes shown
	        will be standard modes with a high enough resolution
	        (minumum 640 pixels). If this flag is set the
	        SCREQF_NONSTDMODES flag is ignored.

	RTSC_Height - (ULONG) Suggested height of screenmode requester
	    window.

	RTSC_OkText - (char *) Replacement text for "Ok" gadget, max 6
	    chars long.

	RTSC_MinWidth - (UWORD) The minimum display width allowed.

	RTSC_MaxWidth - (UWORD) The maximum display width allowed.

	RTSC_MinHeight - (UWORD) The minimum display height allowed.

	RTSC_MaxHeight - (UWORD) The maximum display height allowed.

	RTSC_MinDepth - (UWORD) The minimum display depth allowed. Modes
	    with a minimum display depth lower than this value will not be
	    included in the list.

	RTSC_MaxDepth - (UWORD) The maximum display depth allowed.

	RTSC_PropertyFlags - (ULONG) A mode must have these property flags
	    to be included. Only bits set in RTSC_PropertyMask are
	    considered.

	RTSC_PropertyMask - (ULONG) Mask to apply to RTSC_PropertyFlags to
	    determine which bits to consider. See use of 'newsignals' and
	    'signalmask' in exec.library/SetSignal(). Default is to
	    consider all bits in RTSC_PropertyFlags as significant.

	RTSC_FilterFunc - (struct Hook *) Call this hook for each display
	    mode id in the system's list. Parameters are as follows:

	    A0 - (struct Hook *) your hook
	    A2 - (struct rtScreenModeRequester *) your req
	    A1 - (ULONG) 32-bit extended mode id

	    If your hook returns TRUE the mode will be accepted. If it
	    returns FALSE the mode will be skipped and will not appear in
	    the requester.

    RESULT
	ret - FALSE if the requester was canceled or TRUE if the user
	    selected a screen mode (check 'smreq->DisplayID' for the 32-bit
	    extended display mode, 'smreq->DisplayWidth' and
	    'smreq->DisplayHeight' for the display size,
	    'smreq->DisplayDepth' for the screen's depth).

    NOTES
	Automatically adjusts the requester to the screen font.

	If the requester got too big for the screen because of a very large
	font, the topaz.font will be used.

	rtScreenModeRequest() checks the pr_WindowPtr of your process to
	find the screen to put the requester on.

    EXAMPLE

    BUGS
	none known

    SEE ALSO
	graphics/GetDisplayInfoData(), graphics/displayinfo.h,
	exec.library/SetSignal(), Intuition/SA_DisplayID screen tag

    INTERNALS

    HISTORY

******************************************************************************/
{
    AROS_LIBFUNC_INIT

    return (ULONG)FileRequestA((struct RealFileRequester *)screenmodereq, NULL, title, taglist); /* in filereq.c */
    
    AROS_LIBFUNC_EXIT
    
} /* rtScreenModeRequestA */
