home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / das_buch / tvision / editor / edit.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1993-05-03  |  6.9 KB  |  249 lines

  1. (* ------------------------------------------------------ *)
  2. (*                     EDIT.PAS                           *)
  3. (*           (c) 1993 te-wi Verlag, München               *)
  4. (* ------------------------------------------------------ *)
  5. PROGRAM Edit;
  6.  
  7. {$A+,B-,D+,E+,F-,G-,I+,L+,N-,O-,P-,Q+,R+,S+,T-,V+,X+,Y+}
  8. {$M 16384,0,655360}
  9.  
  10. USES Objects, Drivers, Memory, Views, Menus, App,
  11.      Dialogs, MsgBox, StdDlg, TxEdit;
  12.  
  13. CONST
  14.   cmAbout       = 100;
  15.   cmClipShow    = 101;
  16.   cmOptionsLoad = 102;
  17.   cmOptionsSave = 103;
  18.   cmGetContext  = 104;
  19.  
  20.   hcAbout       = 100;
  21.   hcGetContext  = 103;
  22.   hcGoto        = 104;
  23.   hcFind        = 105;
  24.   hcReplace     = 106;
  25.  
  26.   PROCEDURE EditStreamError(VAR S : tStream); FAR;
  27.   (* aus TV-Manual S.49 *)
  28.   VAR
  29.     ErrMsg : STRING;
  30.   BEGIN
  31.     CASE S.Status OF
  32.       stError      : ErrMsg := 'Stream access error';
  33.       stInitError  : ErrMsg := 'Cannot initialize stream';
  34.       stReadError  : ErrMsg := 'Read beyond end of stream';
  35.       stWriteError : ErrMsg := 'Cannot expand stream';
  36.       stGetError   : ErrMsg := 'Unregistered type read from stream';
  37.       stPutError   : ErrMsg := 'Unregistered type written to stream';
  38.     END;
  39.     DoneVideo;
  40.     PrintStr('Error: ' + ErrMsg);
  41.     Halt(S.Status);
  42.   END;
  43.  
  44. TYPE
  45.   tEditApp = OBJECT (tApplication)
  46.     ClipboardWindow : pEditWindow;
  47.  
  48.     CONSTRUCTOR Init;
  49.     PROCEDURE   InitStatusLine; VIRTUAL;
  50.     PROCEDURE   InitMenuBar;    VIRTUAL;
  51.     PROCEDURE   DoAboutBox;     VIRTUAL;
  52.     PROCEDURE   HandleEvent(VAR Event : tEvent); VIRTUAL;
  53.     PROCEDURE   NewEditWin;
  54.     PROCEDURE   OpenWindow;
  55.     PROCEDURE   ShowClipBoard;
  56.     PROCEDURE   SaveDesktop;
  57.     PROCEDURE   LoadDesktop;
  58.   END;
  59.  
  60.   PROCEDURE tEditApp.SaveDesktop;
  61.   VAR
  62.     DeskFile : tBufStream;
  63.   BEGIN
  64.     Desktop^.Delete(ClipBoardWindow);
  65.     WITH DeskFile DO BEGIN
  66.       Init('EDIT.DSK', stCreate, 1024);
  67.       Put(Desktop);
  68.       Done;
  69.     END;
  70.     InsertWindow(ClipBoardWindow);
  71.   END;
  72.  
  73.   PROCEDURE tEditApp.LoadDesktop;
  74.   VAR
  75.     DeskFile  : tBufStream;
  76.     TempDesk  : pDesktop;
  77.     R         : tRect;
  78.   BEGIN
  79.     DeskFile.Init('EDIT.DSK', stOpenRead, 1024);
  80.     TempDesk := pDeskTop(DeskFile.Get);
  81.     DeskFile.Done;
  82.     IF ValidView(TempDesk) <> NIL THEN BEGIN
  83.       Desktop^.Delete(ClipboardWindow);
  84.       Delete(Desktop);
  85.       Dispose(Desktop, Done);
  86.       Desktop := TempDesk;
  87.       Insert(Desktop);
  88.       GetExtent(R);
  89.       R.Grow(0, -1);
  90.       Desktop^.Locate(R);
  91.       InsertWindow(ClipboardWindow);
  92.     END;
  93.   END;
  94.  
  95.   PROCEDURE tEditApp.ShowClipBoard;
  96.   BEGIN
  97.     WITH ClipBoardWindow^ DO BEGIN
  98.       Select;
  99.       Show;
  100.     END;
  101.   END;
  102.  
  103.   PROCEDURE tEditApp.OpenWindow;
  104.   VAR
  105.     R : tRect;
  106.     F : pFileDialog;
  107.     N : FNameStr;
  108.   BEGIN
  109.     N := '*.*';
  110.     New(F, Init(N, 'Open File', '~F~ile name',
  111.       fdOkButton OR fdOpenButton, 1));
  112.     IF ExecuteDialog(F, @N) <> cmCancel THEN BEGIN
  113.       GetExtent(R);
  114.       Dec(R.B.Y, 2);
  115.       InsertWindow(New(pEditWindow, Init(R, N, wnNoNumber)));
  116.     END;
  117.   END;
  118.  
  119.   CONSTRUCTOR tEditApp.Init;
  120.   VAR
  121.     R : tRect;
  122.   BEGIN
  123.     MaxHeapSize  := 8192;
  124.     EditorDialog := StdEditorDialog;
  125.     StreamError  := @EditStreamError;
  126.     RegisterObjects;
  127.     RegisterViews;
  128.     RegisterApp;
  129.     RegisterEditors;
  130.     inherited Init;
  131.     Desktop^.GetExtent(R);
  132.     ClipBoardWindow := New(pEditWindow, Init(R, '', wnNoNumber));
  133.     IF ValidView(ClipBoardWindow) <> NIL THEN BEGIN
  134.       ClipBoardWindow^.Hide;
  135.       InsertWindow(ClipboardWindow);
  136.       ClipBoard := ClipBoardWindow^.Editor;
  137.       ClipBoard^.CanUndo := FALSE;
  138.     END;
  139.   END;
  140.  
  141.   PROCEDURE tEditApp.NewEditWin;
  142.   VAR
  143.     R : tRect;
  144.     E : pEditWindow;
  145.   BEGIN
  146.     GetExtent(R);
  147.     Dec(R.B.Y, 2);
  148.     E := New(pEditWindow, Init(R, '', wnNoNumber));
  149.     InsertWindow(E);
  150.   END;
  151.  
  152.   PROCEDURE tEditApp.DoAboutBox;
  153.   BEGIN
  154.     MessageBox(#3'EDIT.PAS'#13+
  155.                #3'Mit Turbo Vision 2.0 erstellter Editor'#13+
  156.                #3'(c) 1993 te-wi Verlag, München'#13#13,
  157.                NIL, mfInformation OR mfOkButton);
  158.   END;
  159.  
  160.   PROCEDURE tEditApp.HandleEvent(VAR Event : tEvent);
  161.   BEGIN
  162.     inherited HandleEvent(Event);
  163.  
  164.     IF Event.What = evCommand THEN BEGIN
  165.       CASE Event.Command OF
  166.         cmAbout       : DoAboutBox;
  167.         cmNew         : NewEditWin;
  168.         cmOpen        : OpenWindow;
  169.         cmClipShow    : ShowClipBoard;
  170.         cmOptionsSave : SaveDesktop;
  171.         cmOptionsLoad : LoadDesktop;
  172.       ELSE
  173.         Exit;
  174.       END;
  175.       ClearEvent(Event);
  176.     END;
  177.   END;
  178.  
  179.   PROCEDURE tEditApp.InitMenuBar;
  180.   VAR
  181.     R : tRect;
  182.   BEGIN
  183.     GetExtent(R);
  184.     R.B.Y := R.A.Y + 1;
  185.     MenuBar := New(pMenuBar, Init(R, NewMenu(
  186.       NewSubMenu('~≡~', hcNoContext, NewMenu(
  187.         NewItem('~A~bout...', '', kbNoKey, cmAbout, hcAbout,
  188.       NIL)),
  189.       NewSubMenu('~F~ile', hcNoContext, NewMenu(
  190.         NewItem('~N~ew', '', kbNoKey, cmNew, hcNew,
  191.         NewItem('~O~pen...', 'F3', kbF3, cmOpen, hcOpen,
  192.         NewItem('~S~ave', 'F2', kbF2, cmSave, hcSave,
  193.         NewItem('Save ~a~s...', '', kbNoKey, cmSaveAs, hcSaveAs,
  194.         NewLine(
  195.         NewItem('E~x~it', 'Alt+X', kbAltX, cmQuit, hcExit,
  196.       NIL))))))),
  197.       NewSubMenu('~E~dit', hcNoContext, NewMenu(
  198.         NewItem('~U~ndo', '', kbAltBack, cmUndo, hcNoContext,
  199.         NewLine(
  200.         NewItem('Cu~t~', 'Shift-Del', kbShiftDel, cmCut, hcNoContext,
  201.         NewItem('~C~opy', 'Ctrl-Ins', kbCtrlIns, cmCopy, hcNoContext,
  202.         NewItem('~P~aste', 'Shift-Ins', kbShiftIns, cmPaste, hcNoContext,
  203.         NewItem('C~l~ear', 'Ctrl-Del', kbCtrlDel, cmClear, hcNoContext,
  204.         NewLine(
  205.         NewItem('~S~how clipboard', '', kbNoKey, cmClipShow,
  206.                 hcNoContext,
  207.       NIL))))))))),
  208.       NewSubMenu('~S~earch', hcNoContext, NewMenu(
  209.         NewItem('~S~earch', '', kbNoKey, cmFind, hcFind,
  210.         NewItem('~R~eplace', '', kbNoKey, cmReplace, hcReplace,
  211.         NewItem('~G~oto', '', kbNoKey, cmGoto, hcGoto,
  212.       NIL)))),
  213.       NewSubMenu('~O~ptions', hcNoContext, NewMenu(
  214.         NewItem('~L~oad desktop', '', kbNoKey, cmOptionsLoad, hcNoContext,
  215.         NewItem('~S~ave desktop', '', kbNoKey, cmOptionsSave, hcNoContext,
  216.       NIL))),
  217.       NewSubMenu('~W~indow', hcNoContext, NewMenu(
  218.         StdWindowMenuItems(NIL)),
  219.     NIL)))))))));
  220.   END;
  221.  
  222.   PROCEDURE tEditApp.InitStatusLine;
  223.   VAR
  224.     R : tRect;
  225.   BEGIN
  226.     GetExtent(R);
  227.     R.A.Y := R.B.Y - 1;
  228.     New(StatusLine, Init(R,
  229.       NewStatusDef(0, $F000,
  230.         NewStatusKey('~Alt-X~ Exit', kbAltX, cmQuit,
  231.         NewStatusKey('~F2~ Save', kbF2, cmSave,
  232.         NewStatusKey('~F3~ Open', kbF3, cmOpen,
  233.         NewStatusKey('', kbCtrlF1, cmGetWord,
  234.         StdStatusKeys(NIL))))),
  235.       NIL)));
  236.   END;
  237.  
  238. VAR
  239.   EditApp : tEditApp;
  240.  
  241. BEGIN
  242.   EditApp.Init;
  243.   EditApp.Run;
  244.   EditApp.Done;
  245. END.
  246. (* ------------------------------------------------------ *)
  247. (*                  Ende von EDIT.PAS                     *)
  248.  
  249.