Home Tutorial Win32 API Reference Projects

Stony Brook Modula-2Stony Brook Modula-2 archive


(***************************************************************************)
(*                                                                         *)
(*                     Copyright (C) 1992-2003                             *)
(*                        by Stony Brook Software                          *)
(*                                                                         *)
(*                          All rights reserved.                           *)
(*                                                                         *)
(***************************************************************************)
DEFINITION MODULE BasicDialogs;
(* This module provides a host of basic dialogs common for various
   simple tasks where it would be useful to have something that is
   ready to go without the need for writing code.

   The parent window of all dialogs is the value returned by
   DlgShell.GetDialogParent()
*)
(* about threads
   Win32 - you may use the GUI features in a fully multi threaded
           manner.

   Gtk - Only one thread, the main thread, may use the GUI features.
*)
<*IF StonyBrook THEN*>
    <*/NOPACK*>

    (* a hack so we can do editing and compiling for syntax of Mac code
       using our compiler. *)
    <*/VALIDVERSION:MAC*>
    %IF p1 %THEN(*how we signal compiling Mac code*)
        <*/NOVERSION:WIN32*>
        <*/VERSION:MAC*>
    %END
<*ELSIF p1 THEN*>
    <*ASSIGN (AlignModelPPC, TRUE)*>
    <*DEFINE (MAC, TRUE)*>
<*ELSE*>
    fix me
<*END*>

FROM WinShell IMPORT
    FontInfo, PrintDriverInfo;

TYPE
    MessageTypes        = (MsgInfo,
                           MsgQuestion,
                           MsgWarning,
                           MsgAppError,
                           MsgException);

    PromptListWidth     = (NormalListWidth, WideListWidth);

VAR
    MessageTitle        : ARRAY [0..79] OF CHAR;
    (* The title bar for all basic dialogs not specifically specifying a title *)

(* the parent of all basic dialogs is DlgShell.GetDialogParent() *)

<*IF StonyBrook THEN*>
%IF DLL %THEN
<*/EXPORTALL/PROPAGATEEXCEPTIONALL/COPYATTRIBUTES*>
%END
<*END*>

PROCEDURE MessageBox(mess : ARRAY OF CHAR; msgType : MessageTypes);
(* displays mess in a system message box
   the message box will have a single "ok" button
   carriage return/line feeds are allowed in the string and are
   correctly processed.
   msgType determines what type of ICON and sound are used when the
   message box is displayed.
   The MsgException type also displays the exception address in the dialog.
*)

PROCEDURE MessageBoxId(mess : CARDINAL; msgType : MessageTypes);
(* mess is a string resource identifier specifying the string
   to load from the resource and display in the message box.
   See MessageBox
*)

PROCEDURE YesNo(prompt : ARRAY OF CHAR; default : CHAR) : CHAR;
(* displays the prompt in a message box
   the message box will have a "yes" and "no" buttons
   if default = "Y" then the yes button will be the default button when
   the dialog opens otherwise the no button will be the default
   upon return the function will return "Y" or "N"
   "Y" is returned if the yes button is pressed
   "N" is returned if the no button is pressed
*)

PROCEDURE YesNoId(prompt : CARDINAL; default : CHAR) : CHAR;
(* prompt is a string resource identifier specifying the string
   to load from the resource and display in the message box.
   See YesNo
*)

PROCEDURE YesNoCancel(prompt : ARRAY OF CHAR;
                      default : CHAR) : CHAR;
(* displays the prompt in a message box
   the message box will have a "yes", "no" and "cancel" buttons
   if default = "Y" then the yes button will be the default button when
   the dialog opens, if default = "N" then the no button will be the default
   otherwise the cancel button will be the default button
   upon return the function will return "Y", "N" or "C"
   "Y" is returned if the yes button is pressed
   "N" is returned if the no button is pressed
   "C" is returned if the cancel button is pressed
*)

PROCEDURE YesNoCancelId(prompt : CARDINAL; default : CHAR) : CHAR;
(* prompt is a string resource identifier specifying the string
   to load from the resource and display in the message box.
   See YesNoCancel
*)

PROCEDURE OkCancel(prompt : ARRAY OF CHAR;
                   default : CHAR;
                   msgType : MessageTypes) : CHAR;
(* displays the prompt in a message box
   the message box will have a "ok" and "cancel" buttons
   if default = "O" then the ok button will be the default button when
   the dialog opens otherwise the cancel button will be the default button
   upon return the function will return "O" or "C"
   "O" is returned if the ok button is pressed
   "C" is returned if the cancel button is pressed
   msgType determines what type of ICON and sound are used when the
   message box is displayed.
*)

PROCEDURE OkCancelId(prompt : CARDINAL;
                     default : CHAR;
                     msgType : MessageTypes) : CHAR;
(* prompt is a string resource identifier specifying the string
   to load from the resource and display in the message box.
   See OkCancel
*)

PROCEDURE OpenBusyBox(prompt : ARRAY OF CHAR) : BOOLEAN;
(* opens a modeless dialog box.
   A return value of FALSE signifies failure.
   the dialog can display a single line of text, prompt, of a limited length.
   this is generally used when your application is performing a lengthy
   operation.
*)

PROCEDURE OpenBusyBoxId(prompt : CARDINAL) : BOOLEAN;
(* prompt identifies a string resource to retrieve the text to be
   displayed in the dialog.
   See OpenBusyBox
*)

PROCEDURE CloseBusyBox;
(* close a previously opened busy box dialog *)

PROCEDURE PromptString(prompt : ARRAY OF CHAR;
                       VAR INOUT response : ARRAY OF CHAR) : BOOLEAN;
(* open a modal dialog with a single edit field and a text label
   for the edit field contained in "prompt".
   the string value in "response" will be preloaded into the edit field on entry.
   RETURNs TRUE if the user clicked "OK" to close the dialog, ottherwise FALSE.
   on return "response" contains the users entered text.
*)

PROCEDURE PromptStringId(prompt : CARDINAL;
                         VAR INOUT response : ARRAY OF CHAR) : BOOLEAN;
(* prompt identifies a string resource to retrieve the text to be
   displayed in the dialog.
   See PromptString
*)

PROCEDURE PromptPassword(prompt : ARRAY OF CHAR;
                         VAR INOUT response : ARRAY OF CHAR) : BOOLEAN;
(* same as the PromptString dialog except the text the user enters
   will be "greeked" and not be visible to anyone to looking at the screen.
   the string value in "response" will be preloaded into the edit field on entry.
   RETURNs TRUE if the user clicked "OK" to close the dialog, ottherwise FALSE.
*)

PROCEDURE PromptPasswordId(prompt : CARDINAL;
                           VAR INOUT response : ARRAY OF CHAR) : BOOLEAN;
(* prompt identifies a string resource to retrieve the text to be
   displayed in the dialog.
   See PromptPassword
*)

PROCEDURE PromptCard(prompt : ARRAY OF CHAR;
                     min, max : CARDINAL;
                     allowZero : BOOLEAN;
                     VAR INOUT response : CARDINAL) : BOOLEAN;
(* open a modal dialog with a single edit field and a text label
   for the edit field contained in "prompt".
   returns TRUE if the user enters a valid number and presses OK
   otherwise FALSE
   the edit field is preloaded with the number in response on entry.
   the number entered is contained in response on return of TRUE.
   min and max provide range checking for the number entered.
   if allowZero = TRUE then the number zero will be allowed even if outside
   the allowed number range. This can be used to allow the user to enter a
   "null" value.
*)

PROCEDURE PromptCardId(prompt : CARDINAL;
                       min, max : CARDINAL;
                       allowZero : BOOLEAN;
                       VAR INOUT response : CARDINAL) : BOOLEAN;
(* prompt identifies a string resource to retrieve the text to be
   displayed in the dialog.
   See PromptCard
*)

PROCEDURE PromptListStr(prompt : ARRAY OF CHAR;
                        VAR INOUT list : ARRAY OF CHAR;
                        listSep : CHAR;
                        VAR INOUT selStr : ARRAY OF CHAR;
                        listWidth : PromptListWidth) : BOOLEAN;
(* open a modal dialog with a single list box and a text label
   for the list field contained in prompt.
   returns TRUE if the user selects an item in the list and presses OK,
   or double clicks a list item.
   otherwise FALSE is returned.
   the item selected is contained in selStr. The value is the text of
   the item in the list.
   the list of items is contained in the parameter 'list'. Each item in the
   list is separated by the character listSep. The parameter list must be
   null terminated.
   If on entry selStr contains a value that matches an item in the list
   then that item will initially be selected, otherwise no item will be
   initially selected.
   listWidth specifies the size of the list box. Choose an appropriate size
   depending on the length of the list item strings.
   The list box will display a scroll bar when necessary.
*)

PROCEDURE PromptListStrId(prompt : CARDINAL;
                          VAR INOUT list : ARRAY OF CHAR;
                          listSep : CHAR;
                          VAR INOUT selStr : ARRAY OF CHAR;
                          listWidth : PromptListWidth) : BOOLEAN;
(* prompt identifies a string resource to retrieve the text to be
   displayed in the dialog.
   See PromptListStr
*)

PROCEDURE PromptListIndex(prompt : ARRAY OF CHAR;
                          VAR INOUT list : ARRAY OF CHAR;
                          listSep : CHAR;
                          VAR INOUT selIndex : CARDINAL;
                          listWidth : PromptListWidth) : BOOLEAN;
(* as PromptListStr except you specify the selection by position in the
   list starting with the value zero. Therefore the first item in the
   list has a value of zero and the second one, and so on.
   MAX(CARDINAL) signifies no selection
*)

PROCEDURE PromptListIndexId(prompt : CARDINAL;
                            VAR INOUT list : ARRAY OF CHAR;
                            listSep : CHAR;
                            VAR INOUT selIndex : CARDINAL;
                            listWidth : PromptListWidth) : BOOLEAN;
(* prompt identifies a string resource to retrieve the text to be
   displayed in the dialog.
   See PromptListIndex
*)

PROCEDURE PromptOpenFile(VAR INOUT name : ARRAY OF CHAR;
                         filters : ARRAY OF CHAR;
                         VAR INOUT defFilter : CARDINAL;
                         defDir : ARRAY OF CHAR;
                         defExt : ARRAY OF CHAR;
                         title : ARRAY OF CHAR;
                         createable : BOOLEAN) : BOOLEAN;
(* Opens an operating system common dialog for opening  a file.
   filters specifies a list of file extension filters.
   The format for filters is as follows.

   Title,null,filters,null {Title,null,filters,null} null

   where filters can be one or more file filters each separated by semicolons.
   Example...
       assume the '|' character is the null character.
       "Reports|*.rpt|Html|*.htm;*.html|All|*||"

   defFilter = the filter to initially display, 1 based.
               on return this is the index of the filter the user selected.

   defDir = the default directory to start the dialog in
       an empty string "" means use the current directory.
       Mac - this parameter is not supported. the system remembers the last directory
             used in an application.

   defExt = the default file extension to use if the user does not
       provide an extension. "" means no default extension.
       the extension should *not* have a leading '.' character.

   title = the caption text of the dialog. title can be empty "".
       in this case the default operating system title is used.

   If createable = TRUE then the file need not already exist, otherwise
       the file must exist for the dialog to return successful.
       Mac - this parameter is not supported. createable is always FALSE.
             the file choosen must always exist.


   RETURNs TRUE if successful and name will contain the file specification
   for the file the user has given.
*)

<*IF MAC THEN*>
PROCEDURE SetSaveFileCreatorAndType(fileCreator, fileType : ARRAY OF CHAR);
(* The systeem File Save As common dialog wants the file type and creator
   fields. use this API to set those values before calling PromptSaveAsFile *)
<*END*>

PROCEDURE PromptSaveAsFile(VAR INOUT name : ARRAY OF CHAR;
                           filters : ARRAY OF CHAR;
                           VAR INOUT defFilter : CARDINAL;
                           defDir : ARRAY OF CHAR;
                           defExt : ARRAY OF CHAR;
                           title : ARRAY OF CHAR) : BOOLEAN;
(* As PromptOpenFile except this dialog is for saving a file. *)

TYPE
    FontOptions = (FixedPitchOnly, ScalableOnly, NoStyle, NoSize);
    FontOptionSet = PACKEDSET OF FontOptions;

PROCEDURE PromptChooseFont(VAR INOUT font : FontInfo;
                           opt : FontOptionSet) : BOOLEAN;
(* opens an operating system common dialog for selecting a font.
   RETURNs TRUE if successful and font will then contain the information
   describing the font the user selected. otherwise returns FALSE
   FixedPitchOnly if set will limit the font selections to fixed pitch
   fonts.
   ScalableOnly if set will limit the font selections to scalable fonts. No bitmap fonts.
   NoStyle if set will not allow the user to select a font style
   such as Bold, Italic, etc..
   NoSize if set will not all the user to select a font point size
*)

TYPE
    PrintInfo =
        RECORD
        fromPage        : CARDINAL; (* in out *)
        toPage          : CARDINAL; (* in out *)
        minPage         : CARDINAL; (* in *)
        maxPage         : CARDINAL; (* in *)
        copies          : CARDINAL; (* in out *)
        selected        : BOOLEAN; (* in out *)
        duplex          : BOOLEAN; (* out *)
        collate         : BOOLEAN; (* in out *)
        driverInfo      : PrintDriverInfo; (* in out *)
        END;

PROCEDURE PromptPrint(VAR INOUT info : PrintInfo) : BOOLEAN;
(* opens an operating system common dialog for selecting a printer and
   various printer options for a specific print job.
   info contains the information to initialize the dialog fields
   an to also return the user entered information.
   Returns TRUE if the user does not cancel the dialog. In this case you
   continue by performing the print action the user has specified.
*)
(*
fromPage - initializes the dialog with the starting page to print, and upon
           return contains the starting page to print entered by the user.
           Normally initialized with 1. See toPage.
toPage - initializes the dialog with the ending page to print, and upon
         return contains the ending page to print entered by the user.
         If this value is initialized with 0 then the user will not be allowed
         to select a page range to print and no value is returned.
minPage - Only valid if toPage is initialized with a non zero value.
          The minimum page number the user will be allowed to enter in
          fromPage and toPage.
maxPage - Only valid if toPage is initialized with a non zero value.
          The maximum page number the user will be allowed to enter in
          fromPage and toPage.
copies - The number of copies to be printed. Normally initialized with a value
         of 1. Upon return the number of copies the user wants printed.
         If the printer driver supports multiple copies you will never
         reveive a value other than 1 upon return.
selected - If TRUE the user will be allowed to select if the current
           "selection" is to be printed, otherwise the entire document is
           assumed. Upon return TRUE means that the user wants only the
           selection to be printed.
duplex - Upon return if TRUE the document is to be printed two sided. This
         value can only be true if the printer supports duplex printing.
collate - If initialized with TRUE then the user will be allowed to select
          collated printing when printing multiple copies, otherwise they
          will not be allowed to make such a selection. Upon return the
          multiple copies of the document must be printed in a collated manner.
          It is up to you to do this since the printer driver does not have
          support doing this. If the printer driver supports collation you
          will never receive a value of TRUE.
driverInfo - This value may be initialized with NIL or a previously obtained
             value from PromptPrintSetup or this procedure.
             See PromptPrintSetup
*)

PROCEDURE PromptPrintSetup(VAR INOUT info : PrintDriverInfo) : BOOLEAN;
(* opens an operating system common dialog for setting up a printer and
   various custom printer options.
   Normally you will have a global variable that is initialized with a value
   of NIL and thereafter use that value. In this way your application will
   remember settings the user has made and not force them to reenter them
   every time they want to print.
   This value is usually passed to PromptPrint, although the user generally
   also has access to printer setup from the print dialog as well.
*)

PROCEDURE GetPrintDriverInfo(printerName : ARRAY OF CHAR;
                             VAR OUT info : PrintInfo) : BOOLEAN;
(* this procedure allows you to get print information if you know the
   system information detailing a printer driver
   this procedure exists for an application to support the operating system
   Print and PrintTo shell commands (right click and drag and drop). These
   commands are for files that are registered with the operating system.
   The operating system provides the first three parameters to you
   in the Print and PrintTo commands.
   If printerName = "" then the information for the default printer
   is returned.
   The function returns TRUE is successful
*)

END BasicDialogs.



© Norman Black, Stony Brook Software. Reproduced with permission.