home *** CD-ROM | disk | FTP | other *** search
/ Gold Fish 2 / goldfish_vol2_cd1.bin / files / dev / obero / oberon-a / source / fpe / tooldlg.mod < prev    next >
Text File  |  1994-08-08  |  6KB  |  228 lines

  1. (***************************************************************************
  2.  
  3.      $RCSfile: ToolDlg.mod $
  4.   Description: Defines and implements the tool editor dialog.
  5.  
  6.    Created by: fjc (Frank Copeland)
  7.     $Revision: 1.8 $
  8.       $Author: fjc $
  9.         $Date: 1994/08/08 16:14:16 $
  10.  
  11.   Copyright © 1993-1994, Frank Copeland.
  12.   This file is part of FPE.
  13.   See FPE.doc for conditions of use and distribution.
  14.  
  15.   Log entries are at the end of the file.
  16.  
  17. ***************************************************************************)
  18.  
  19. MODULE ToolDlg;
  20.  
  21. (*
  22. ** $C= CaseChk       $I= IndexChk  $L+ LongAdr   $N- NilChk
  23. ** $P= PortableCode  $R= RangeChk  $S= StackChk  $T= TypeChk
  24. ** $V= OvflChk       $Z= ZeroVars
  25. **
  26. ** Compiler NIL checking is replaced by ASSERTs at the appropriate places.
  27. *)
  28.  
  29. IMPORT
  30.   E := Exec, I := Intuition, Events, ISup := IntuiSup,
  31.   ISU := IntuiSupUtil, ISE := ISupEvents, Data, TDTpl := ToolDlgTpl,
  32.   SYS := SYSTEM;
  33.  
  34.  
  35. (* ===== Dialog ===== *)
  36.  
  37. TYPE
  38.  
  39.   Dialog *= POINTER TO DialogRec;
  40.   DialogRec = RECORD (ISE.ISupDialogRec)
  41.     accepted *: BOOLEAN;
  42.     template  : TDTpl.Template;
  43.     toolInfo  : Data.ToolInfo;
  44.   END; (* Dialog *)
  45.  
  46.   DialogPort = POINTER TO DialogPortRec;
  47.   DialogPortRec = RECORD (ISE.ISupPortRec)
  48.     dlg : Dialog
  49.   END; (* DialogPortRec *)
  50.  
  51. CONST
  52.  
  53.   (* Gadget ID's *)
  54.  
  55.   ButtonID     =  0;
  56.   CommandID    =  1;
  57.   ArgumentsID  =  2;
  58.   IsActiveID   =  3;
  59.   HasConsoleID =  4;
  60.   ConsoleID    =  5;
  61.   StackID      =  6;
  62.   AcceptID     =  7;
  63.   CancelID     =  8;
  64.  
  65.   (* Requester definitions *)
  66.  
  67.   RequesterTitle = "Tool information";
  68.  
  69. (*------------------------------------*)
  70. PROCEDURE (dp : DialogPort) HandleISup
  71.   ( msg : I.IntuiMessagePtr )
  72.   : INTEGER;
  73.  
  74.   VAR gadget : INTEGER; string : E.STRPTR; value : LONGINT;
  75.       gadgetList : ISup.GadgetList; result : INTEGER;
  76.  
  77. BEGIN (* HandleISup *)
  78.   result := Events.Continue;
  79.   gadget := msg.code;
  80.   string := msg.iAddress;
  81.   value := SYS.VAL (LONGINT, msg.iAddress);
  82.   gadgetList := SYS.VAL (ISup.GadgetList, msg.specialLink);
  83.  
  84.   CASE gadget OF
  85.     ButtonID: COPY (string^, dp.dlg.toolInfo.title);
  86.     |
  87.     CommandID: COPY (string^, dp.dlg.toolInfo.command);
  88.     |
  89.     ArgumentsID: COPY (string^, dp.dlg.toolInfo.arguments);
  90.     |
  91.     IsActiveID:
  92.       IF value = 0 THEN dp.dlg.toolInfo.isActive := FALSE
  93.       ELSE dp.dlg.toolInfo.isActive := TRUE
  94.       END
  95.     |
  96.     HasConsoleID:
  97.       IF value = 0 THEN
  98.         dp.dlg.toolInfo.hasConsole := FALSE;
  99.         dp.dlg.toolInfo.console := "";
  100.         ISU.DisableGadget (gadgetList, ConsoleID, TRUE);
  101.       ELSE
  102.         dp.dlg.toolInfo.hasConsole := TRUE;
  103.         ISU.DisableGadget (gadgetList, ConsoleID, FALSE);
  104.       END
  105.     |
  106.     ConsoleID: COPY (string^, dp.dlg.toolInfo.console);
  107.     |
  108.     StackID: dp.dlg.toolInfo.stack := value;
  109.     |
  110.     AcceptID: dp.dlg.accepted := TRUE; result := Events.Stop
  111.     |
  112.     CancelID: dp.dlg.accepted := FALSE; result := Events.Stop
  113.     |
  114.   END; (* CASE gadget *)
  115.  
  116.   ISup.base.ReplyMsg (msg);
  117.   RETURN result
  118. END HandleISup;
  119.  
  120. (*------------------------------------*)
  121. PROCEDURE MakeDialog * (VAR toolDlg : Dialog);
  122.  
  123.   VAR dp : DialogPort;
  124.  
  125. BEGIN (* MakeDialog *)
  126.   NEW (toolDlg); TDTpl.InitTemplate (toolDlg.template);
  127.   toolDlg.title := SYS.ADR (RequesterTitle);
  128.   toolDlg.width := TDTpl.Width;
  129.   toolDlg.height := TDTpl.Height;
  130.   toolDlg.flags := {};
  131.   toolDlg.template.GadgetData.g0.default :=
  132.     SYS.ADR(toolDlg.toolInfo.title);
  133.   toolDlg.template.GadgetData.g1.default :=
  134.     SYS.ADR(toolDlg.toolInfo.command);
  135.   toolDlg.template.GadgetData.g2.default :=
  136.     SYS.ADR(toolDlg.toolInfo.arguments);
  137.   toolDlg.template.GadgetData.g6.default :=
  138.     SYS.ADR(toolDlg.toolInfo.console);
  139.   EXCL (toolDlg.flags, ISup.rdCenterWindow);
  140.   toolDlg.leftEdge := 40;
  141.   toolDlg.topEdge := 20;
  142.   toolDlg.gadgets :=
  143.     SYS.VAL (ISup.GadgetDataPtr, toolDlg.template.GadgetData);
  144.   NEW (dp); ASSERT (dp # NIL, 137);
  145.   dp.Init(); dp.dlg := toolDlg;
  146.   toolDlg.iSupPort := dp;
  147. END MakeDialog;
  148.  
  149. (*------------------------------------*)
  150. PROCEDURE FreeDialog * (VAR toolDlg : Dialog);
  151.  
  152. BEGIN (* FreeDialog *)
  153.   TDTpl.CleanupTemplate (toolDlg.template);
  154.   SYS.DISPOSE (toolDlg.iSupPort); SYS.DISPOSE (toolDlg)
  155. END FreeDialog;
  156.  
  157. (*------------------------------------*)
  158. PROCEDURE Activate *
  159.   ( toolDlg      : Dialog;
  160.     VAR toolInfo : Data.ToolInfo;
  161.     window       : I.WindowPtr);
  162.  
  163.   (*------------------------------------*)
  164.   PROCEDURE SetupGadgets ();
  165.  
  166.   BEGIN (* SetupGadgets *)
  167.     IF toolInfo.isActive THEN
  168.       toolDlg.template.GadgetData.g3.selected := 1;
  169.     ELSE
  170.       toolDlg.template.GadgetData.g3.selected := 0;
  171.     END; (* ELSE *)
  172.     IF toolInfo.hasConsole THEN
  173.       toolDlg.template.GadgetData.g4.selected := 1;
  174.       EXCL (toolDlg.template.GadgetData.g6.flags, ISup.gdDisabled);
  175.     ELSE
  176.       toolDlg.template.GadgetData.g4.selected := 0;
  177.       INCL (toolDlg.template.GadgetData.g6.flags, ISup.gdDisabled);
  178.       toolInfo.console := "";
  179.     END; (* ELSE *)
  180.     toolDlg.template.GadgetData.g8.default :=
  181.       SYS.VAL (E.APTR, toolDlg.toolInfo.stack);
  182.   END SetupGadgets;
  183.  
  184. BEGIN (* Activate *)
  185.   ASSERT (toolDlg # NIL, 137);
  186.   toolDlg.toolInfo := toolInfo; toolDlg.accepted := FALSE;
  187.   SetupGadgets ();
  188.   IF ISE.Activate (toolDlg, window) THEN
  189.     IF toolDlg.accepted THEN toolInfo := toolDlg.toolInfo END
  190.   ELSE
  191.     ISU.DoNotice (NIL, SYS.ADR ("ToolDlg"), "Failed to open dialog")
  192.   END
  193. END Activate;
  194.  
  195. END ToolDlg.
  196.  
  197. (***************************************************************************
  198.  
  199.   $Log: ToolDlg.mod $
  200.   Revision 1.8  1994/08/08  16:14:16  fjc
  201.   Release 1.4
  202.  
  203.   Revision 1.7  1994/06/21  22:06:36  fjc
  204.   - HandleISup was RETURNing without calling ReplyIMsg().
  205.  
  206.   Revision 1.6  1994/06/17  17:26:27  fjc
  207.   - Updated for release
  208.  
  209.   Revision 1.5  1994/06/09  13:46:29  fjc
  210.   - [bug] Event handler was using the cooked message from
  211.     IntuiSup *after* replying to it.
  212.  
  213.   Revision 1.4  1994/06/04  23:49:52  fjc
  214.   - Changed to use new Amiga interface
  215.  
  216.   Revision 1.3  1994/05/12  21:26:09  fjc
  217.   - Prepared for release
  218.  
  219.   Revision 1.2  1994/01/24  14:33:33  fjc
  220.   Changed to conform with changes in Module Handlers:
  221.     Handler procedures now reply to any messages they handle
  222.  
  223.   Revision 1.1  1994/01/15  17:32:38  fjc
  224.   Start of revision control
  225.  
  226. ***************************************************************************)
  227.  
  228.