home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 17 / CD_ASCQ_17_101194.iso / vrac / ptgenr2.zip / PREAPP.PAS < prev    next >
Pascal/Delphi Source File  |  1994-08-01  |  10KB  |  409 lines

  1. { Created : 1991-09-05
  2.  
  3. Functions and procedures used by the PtGen created application
  4.  
  5. $Author: Berend_de_Boer $
  6. $Date: 93/05/20 23:00:55 $
  7. $Revision: 1.1 $
  8.  
  9. Last changes :
  10. 93-02-01  Made completely TV2.0 aware
  11. 93-03-06  Renamed to PREAPP.PAS
  12.           Internationalized by making use of string resources
  13. 93-12-21  Added support for the Clock and HeapViewer from the Gadgets unit in
  14.           /bp/examples/dos/tvdemo
  15. 94-06-28  Added support for TVToys when compiler switch TVToys is defined
  16. }
  17.  
  18. {$I DEFINES.DEF}
  19.  
  20. {$F+,O+,X+,R-,Q-,S-,V-,D+}
  21. unit PreApp;
  22.  
  23. interface
  24.  
  25. uses Objects, Drivers, Views, Menus,
  26.      {$IFDEF Editor}
  27.      Editors,
  28.      {$ENDIF}
  29.  
  30.      {$IFDEF TVTool}         {* if TVTool is defined in DEFINES.DEF then   *}
  31.      TVApp,                  {* you can only compile PreApp if you have    *}
  32.      {$ENDIF}                {* the shareware TVTool pack of               *}
  33.                              {* Richard Hansen <70242.3367@compuserve.com> *}
  34.  
  35.      {$IFDEF TVToys}         {* if TVToys is defined in DEFINES.DEF then   *}
  36.      ToyApp,                 {* you can only compile PreApp if you have    *}
  37.      {$ENDIF}                {* the shareware TVToys package of            *}
  38.                              {* Peter Brandström <d91-pbr@nada.kth.se>     *}
  39.  
  40.      {$IFDEF Clock}
  41.      Gadgets,                {* use the clock in /bp/examples/dos/tvdemo   *}
  42.      {$ELSE}
  43.      {$IFDEF HeapViewer}
  44.      Gadgets,                {* use heapviewer in /bp/examples/dos/tvdemo  *}
  45.      {$ENDIF}
  46.      {$ENDIF}
  47.  
  48.      App;
  49.  
  50.  
  51. {$IFDEF Editor}
  52. const
  53.   hcEditor = 2700;
  54. {$ENDIF}
  55.  
  56. type
  57.   PPreAppStatusLine = ^TPreAppStatusLine;
  58.   TPreAppStatusLine = object(TStatusLine)
  59.     function Hint(AHelpCtx : word) : string;  virtual;
  60.   end;
  61.  
  62.   PPreApp = ^TPreApp;
  63. {$IFDEF TVTool}
  64.   TPreApp = object(TbxApplication)
  65. {$ELSE}
  66. {$IFDEF TVToys}
  67.   TPreApp = object(TToyApp)
  68. {$ELSE}
  69.   TPreApp = object(TApplication)
  70. {$ENDIF}
  71. {$ENDIF}
  72. {$IFDEF Clock}
  73.     Clock : PClockView;
  74. {$ENDIF}
  75. {$IFDEF HeapViewer}
  76.     Heap : PHeapView;
  77. {$ENDIF}
  78.     constructor Init;
  79. {$IFDEF BufferedPrinter}
  80.     procedure Idle;  virtual;
  81. {$ELSE}
  82. {$IFDEF Clock}
  83.     procedure Idle;  virtual;
  84. {$ELSE}
  85. {$IFDEF HeapViewer}
  86.     procedure Idle;  virtual;
  87. {$ENDIF}
  88. {$ENDIF}
  89. {$ENDIF}
  90. {$IFDEF Help}
  91. {$IFNDEF TVToys}
  92.     procedure GetEvent(var Event : TEvent);  virtual;
  93. {$IFNDEF TVTool}
  94.     function  GetPalette : PPalette;  virtual;
  95. {$ENDIF}
  96. {$ENDIF}
  97. {$ENDIF Help}
  98.     procedure OutOfMemory;  virtual;
  99.   end;
  100.  
  101. {$IFDEF Help}
  102. {$IFNDEF TVToys}
  103. var
  104.   HFileName : FNameStr;
  105. {$ENDIF}
  106. {$ENDIF}
  107.  
  108. {$IFDEF Editor}
  109. var
  110.   ClipWindow : PEditWindow;
  111.  
  112. function OpenEditor(FileName: FNameStr; Visible: Boolean) : PEditWindow;
  113. {$ENDIF}
  114.  
  115.  
  116. implementation
  117.  
  118. uses Dialogs,
  119.      {$IFDEF Editor}
  120.      StdDlg,
  121.      {$ENDIF}
  122.      {$IFDEF Help}
  123.      HelpFile,
  124.      {$ENDIF}
  125.      {$IFDEF BufferedPrinter}
  126.      BufPrinter,
  127.      {$ENDIF}
  128.      Dos, BBFile, BBUtil, BBDlg, BBStrRes;
  129.  
  130.  
  131. {$I STRINGS.INC}
  132.  
  133.  
  134. function TPreAppStatusLine.Hint(AHelpCtx : word) : string;
  135. begin
  136.   Hint := Strings^.Get(AHelpCtx);
  137. end;
  138.  
  139.  
  140. {$IFDEF Editor}
  141. function CreateFindDialog: PDialog;
  142. var
  143.   D: PDialog;
  144.   Control: PView;
  145.   R: TRect;
  146. begin
  147.   R.Assign(0, 0, 38, 12);
  148.   D := New(PDialog, Init(R, rsGet(seFind)));
  149.   with D^ do
  150.   begin
  151.     Options := Options or ofCentered;
  152.  
  153.     R.Assign(3, 3, 32, 4);
  154.     Control := New(PInputLine, Init(R, 80));
  155.     Insert(Control);
  156.     R.Assign(2, 2, 15, 3);
  157.     Insert(New(PLabel, Init(R, rsGet(seTextToFind), Control)));
  158.     R.Assign(32, 3, 35, 4);
  159.     Insert(New(PHistory, Init(R, PInputLine(Control), 10)));
  160.  
  161.     R.Assign(3, 5, 35, 7);
  162.     Insert(New(PCheckBoxes, Init(R,
  163.       NewSItem(rsGet(seCase),
  164.       NewSItem(rsGet(seWholeWords), nil)))));
  165.  
  166.     R.Assign(14, 9, 24, 11);
  167.     Insert(New(PButton, Init(R, 'O~K~', cmOk, bfDefault)));
  168.     Inc(R.A.X, 12); Inc(R.B.X, 12);
  169.     Insert(New(PButton, Init(R, 'Cancel', cmCancel, bfNormal)));
  170.  
  171.     SelectNext(False);
  172.   end;
  173.   CreateFindDialog := D;
  174. end;
  175.  
  176.  
  177. function CreateReplaceDialog: PDialog;
  178. var
  179.   D: PDialog;
  180.   Control: PView;
  181.   R: TRect;
  182. begin
  183.   R.Assign(0, 0, 40, 16);
  184.   D := New(PDialog, Init(R, rsGet(seReplace)));
  185.   with D^ do
  186.   begin
  187.     Options := Options or ofCentered;
  188.  
  189.     R.Assign(3, 3, 34, 4);
  190.     Control := New(PInputLine, Init(R, 80));
  191.     Insert(Control);
  192.     R.Assign(2, 2, 15, 3);
  193.     Insert(New(PLabel, Init(R, rsGet(seTextToFind), Control)));
  194.     R.Assign(34, 3, 37, 4);
  195.     Insert(New(PHistory, Init(R, PInputLine(Control), 10)));
  196.  
  197.     R.Assign(3, 6, 34, 7);
  198.     Control := New(PInputLine, Init(R, 80));
  199.     Insert(Control);
  200.     R.Assign(2, 5, 12, 6);
  201.     Insert(New(PLabel, Init(R, rsGet(seNewText), Control)));
  202.     R.Assign(34, 6, 37, 7);
  203.     Insert(New(PHistory, Init(R, PInputLine(Control), 11)));
  204.  
  205.     R.Assign(3, 8, 37, 12);
  206.     Insert(New(PCheckBoxes, Init(R,
  207.       NewSItem(rsGet(seCase),
  208.       NewSItem(rsGet(seWholeWords),
  209.       NewSItem(rsGet(sePromptOnReplace),
  210.       NewSItem(rsGet(seReplaceAll), nil)))))));
  211.  
  212.     R.Assign(17, 13, 27, 15);
  213.     Insert(New(PButton, Init(R, 'O~K~', cmOk, bfDefault)));
  214.     R.Assign(28, 13, 38, 15);
  215.     Insert(New(PButton, Init(R, 'Cancel', cmCancel, bfNormal)));
  216.  
  217.     SelectNext(False);
  218.   end;
  219.   CreateReplaceDialog := D;
  220. end;
  221.  
  222.  
  223. function DoEditDialog(Dialog: Integer; Info: Pointer): Word; far;
  224. var
  225.   R: TRect;
  226.   T: TPoint;
  227. begin
  228.   case Dialog of
  229.     edOutOfMemory:
  230.       DoEditDialog := MessageBox(rsGet(sMemory),
  231.         nil, mfError + mfOkButton, hcNoContext);
  232.     edReadError:
  233.       DoEditDialog := MessageBox(rsGet(seErrReading),
  234.         @Info, mfError + mfOkButton, hcNoContext);
  235.     edWriteError:
  236.       DoEditDialog := MessageBox(rsGet(seErrWriting),
  237.         @Info, mfError + mfOkButton, hcNoContext);
  238.     edCreateError:
  239.       DoEditDialog := MessageBox(rsGet(seErrCreating),
  240.         @Info, mfError + mfOkButton, hcNoContext);
  241.     edSaveModify:
  242.       DoEditDialog := MessageBox(rsGet(seSave),
  243.         @Info, mfInformation + mfYesNoCancel, hcNoContext);
  244.     edSaveUntitled:
  245.       DoEditDialog := MessageBox(rsGet(seSaveUntitled),
  246.         nil, mfInformation + mfYesNoCancel, hcNoContext);
  247.     edSaveAs:
  248.       DoEditDialog := ExecDialog(New(PFileDialog, Init('*.*',
  249.         rsGet(seSaveAs), rsGet(sName), fdOkButton, 101)), Info);
  250.     edFind:
  251.       DoEditDialog := ExecDialog(CreateFindDialog, Info);
  252.     edSearchFailed:
  253.       DoEditDialog := MessageBox(rsGet(seStringNotFound),
  254.         nil, mfError + mfOkButton, hcNoContext);
  255.     edReplace:
  256.       DoEditDialog := ExecDialog(CreateReplaceDialog, Info);
  257.     edReplacePrompt:
  258.       begin
  259.         { Avoid placing the dialog on the same line as the cursor }
  260.         R.Assign(0, 1, 40, 8);
  261.         R.Move((Desktop^.Size.X - R.B.X) div 2, 0);
  262.         Desktop^.MakeGlobal(R.B, T);
  263.         Inc(T.Y);
  264.         if TPoint(Info).Y <= T.Y then
  265.           R.Move(0, Desktop^.Size.Y - R.B.Y - 2);
  266.         DoEditDialog := MessageBoxRect(R, rsGet(seReplaceThis),
  267.           nil, mfYesNoCancel + mfInformation, hcNoContext);
  268.       end;
  269.   end;
  270. end;
  271.  
  272.  
  273. function OpenEditor(FileName: FNameStr; Visible: Boolean): PEditWindow;
  274. var
  275.   P: PView;
  276.   R: TRect;
  277. begin
  278.   DeskTop^.GetExtent(R);
  279.   P := Application^.ValidView(New(PEditWindow,
  280.     Init(R, FileName, wnNoNumber)));
  281.   P^.HelpCtx := hcEditor;
  282.   if not Visible then P^.Hide;
  283.   DeskTop^.Insert(P);
  284.   OpenEditor := PEditWindow(P);
  285. end;
  286. {$ENDIF}
  287.  
  288. constructor TPreApp.Init;
  289. var
  290.   R : TRect;
  291. begin
  292.   if Strings = nil then  begin
  293.     PrintStr('You should load the resource strings first using BBStrRes.LoadStrings. Program halts.');
  294.     Halt(1);
  295.   end;
  296.   inherited Init;
  297.  
  298. {$IFDEF Clock}
  299.   GetExtent(R);
  300.   R.A.X := R.B.X - 9; R.B.Y := R.A.Y + 1;
  301.   Clock := New(PClockView, Init(R));
  302.   Insert(Clock);
  303. {$ENDIF}
  304.  
  305. {$IFDEF HeapViewer}
  306.   GetExtent(R);
  307.   Dec(R.B.X);
  308.   R.A.X := R.B.X - 9; R.A.Y := R.B.Y - 1;
  309.   Heap := New(PHeapView, Init(R));
  310.   Insert(Heap);
  311. {$ENDIF}
  312.  
  313. {$IFDEF Editor}
  314.   DisableCommands([cmSave, cmSaveAs, cmCut, cmCopy, cmPaste, cmClear,
  315.     cmUndo, cmFind, cmReplace, cmSearchAgain]);
  316.   EditorDialog := DoEditDialog;
  317.   ClipWindow := OpenEditor('', False);
  318.   if ClipWindow <> nil then
  319.   begin
  320.     Clipboard := ClipWindow^.Editor;
  321.     Clipboard^.CanUndo := False;
  322.   end;
  323. {$ENDIF}
  324.  
  325. end;
  326.  
  327.  
  328. {$IFNDEF TVToys}
  329. {$IFDEF Help}
  330. procedure TPreApp.GetEvent(var Event : TEvent);
  331. var
  332.   W : PWindow;
  333.   HFile : PHelpFile;
  334.   HelpStrm : PBufStream;
  335.   D : DirStr;
  336.   N : NameStr;
  337.   E : ExtStr;
  338.   FileName : string;
  339. const
  340.   HelpInUse: Boolean = False;
  341. begin
  342.   inherited GetEvent(Event);
  343.   case Event.What of
  344.     evCommand : if (Event.Command = cmHelp) and not HelpInUse then  begin
  345.         HelpInUse := TRUE;
  346.         FSplit(ParamStr(0), D,N,E);
  347.         FileName := FSearch(HFileName, D+';'+';'+GetEnv('PATH'));
  348.         if FileName = ''
  349.          then  PrintError(rsGet1(sHelpFileNotFound, longint(@HFileName)), hcNoContext)
  350.          else  ShowHelpWindow(FileName, GetHelpCtx);
  351.         ClearEvent(Event);
  352.         HelpInUse := FALSE;
  353.       end;
  354.   end; { of case }
  355. end;
  356.  
  357. {$IFNDEF TVTool}
  358. {$IFNDEF TVToys}
  359. function TPreApp.GetPalette: PPalette;
  360. const
  361.   CNewColor = CAppColor + CHelpColor;
  362.   CNewBlackWhite = CAppBlackWhite + CHelpBlackWhite;
  363.   CNewMonochrome = CAppMonochrome + CHelpMonochrome;
  364.   P: array[apColor..apMonochrome] of string[Length(CNewColor)] =
  365.     (CNewColor, CNewBlackWhite, CNewMonochrome);
  366. begin
  367.   GetPalette := @P[AppPalette];
  368. end;
  369. {$ENDIF TVToys}
  370. {$ENDIF TVTool}
  371. {$ENDIF Help}
  372. {$ENDIF TVToys}
  373.  
  374.  
  375. {$IFDEF BufferedPrinter}
  376. procedure TPreApp.Idle;
  377. begin
  378.   inherited Idle;
  379.   if StandardPrinter <> nil then  StandardPrinter^.PrintFromBuffer;
  380. end;
  381. {$ENDIF}
  382. {$IFDEF Clock}
  383. procedure TPreApp.Idle;
  384. begin
  385.   inherited Idle;
  386.   Clock^.Update;
  387. {$IFDEF HeapViewer}
  388.   Heap^.Update;
  389. {$ENDIF}
  390. end;
  391. {$ELSE}
  392. {$IFDEF HeapViewer}
  393. procedure TPreApp.Idle;
  394. begin
  395.   inherited Idle;
  396.   Heap^.Update;
  397. end;
  398. {$ENDIF}
  399. {$ENDIF}
  400.  
  401.  
  402. procedure TPreApp.OutOfMemory;
  403. begin
  404.   PrintError(rsGet(sMemory), hcNoContext);
  405. end;
  406.  
  407.  
  408. end.  { of unit PreApp }
  409.