home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / spezial / 22 / saa / diaboxes.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1991-01-04  |  23.0 KB  |  750 lines

  1. (* ----------------------------------------------------- *)
  2. (*                      DIABOX.PAS                       *)
  3. (*                                                       *)
  4. (* ■ DialogBox: Eine Dialogbox (z.B. à la Works, TC++...)*)
  5. (*   Nach Init werden die Einträge mit Add "hinzugefügt",*)
  6. (*   Run oder RunBy lassen die Eingabe/Wahl laufen, mit  *)
  7. (*   Close muss das Fenster explizit geschlossen werden, *)
  8. (*   damit z.B. nach Wahl von Help oder Fehleingabe Run  *)
  9. (*   nochmal gestartet werden kann.                      *)
  10. (* ■ EndButDialogBox: Hängt automatisch 3 oder 2 End-    *)
  11. (*   buttons an sowie einen Trennstrich; keine Prüfung,  *)
  12. (*   ob sich die andern Einträge am richtigen Ort befin- *)
  13. (*   den.                                                *)
  14. (* ■ SaveBox: Ein Eingabefeld zur Eingabe des Dateinamens*)
  15. (*   und eine Pickliste mit den Verzeichnissen sowie die *)
  16. (*   Anzeige des vollständigen aktuellen Pfads.          *)
  17. (* ■ LoadBox: Das Eingabefeld ist zur Eingabe der Such-  *)
  18. (*   maske da, und eine Pickliste mit den Dateien.       *)
  19. (*   Anwendung und Auswahl: siehe Demo.                  *)
  20. (*                                                       *)
  21. (*          (c) 1991 by R.Reichert & toolbox             *)
  22. (* ----------------------------------------------------- *)
  23. UNIT DiaBoxes;
  24.  
  25. INTERFACE
  26.  
  27. USES Stuff,    MouKey,   Lists,
  28.      WinVSM,   SAAWin,
  29.      SAASched, DBxItems, DBxSched;
  30.  
  31. CONST
  32.   DiaBoxBackCol= $70;                { DialogBoxBackColor }
  33.   SchOk        = 0;  { alles Ok                           }
  34.   SchEvNotMine = 1;  { Event nicht meins                  }
  35.   SchActNext   = 2;  { aktiviere nächsten Scheduler       }
  36.   SchActPrev   = 3;  { aktiviere vorhergehenden Scheduler }
  37.   SchEvAccepted= 4;  { Event akzeptiert                   }
  38.  
  39.   SBSave       = 10; { SaveBox: Speichern                 }
  40.   SBCancel     = 11; { SaveBox: Abbruch                   }
  41.   SBHelp       = 12; { SaveBox: Hilfe verlangt            }
  42.  
  43.   LBLoad       = 13; { LoadBox: Laden                     }
  44.   LBCancel     = 14;
  45.   LBHelp       = 15;
  46.  
  47.  
  48. TYPE
  49.   DialogBoxPtr = ^DialogBox;
  50.   DialogBox = OBJECT (SAAScheduler)
  51.  
  52.     ItemList : DListCollectionPtr;
  53.     Win      : SAAWindowPtr;
  54.     BackColor: BYTE;
  55.     Opened   : BOOLEAN;
  56.  
  57.     CONSTRUCTOR Init (x1, y1, x2, y2 : BYTE;
  58.                       Title : STRING;
  59.                       NewVSM: WExtVSMPtr);
  60.     PROCEDURE Open;                                VIRTUAL;
  61.     PROCEDURE Run;                                 VIRTUAL;
  62.     PROCEDURE RunBy (Nr : BYTE);                   VIRTUAL;
  63.     PROCEDURE SetActiveItem (NewAI : BYTE);        VIRTUAL;
  64.     PROCEDURE Close (QuitRC : BYTE);               VIRTUAL;
  65.     PROCEDURE Add (NewSched : SAASchedulerPtr);    VIRTUAL;
  66.     PROCEDURE SetXY (x1, y1, x2, y2 : BYTE);       VIRTUAL;
  67.     PROCEDURE Display;                             VIRTUAL;
  68.     PROCEDURE DisplayHotKeys;                      VIRTUAL;
  69.     PROCEDURE CheckEvent (VAR Ev : EventObj);      VIRTUAL;
  70.     PROCEDURE SetActive;                           VIRTUAL;
  71.     PROCEDURE SetPassive;                          VIRTUAL;
  72.     PROCEDURE SetBackColor (BC : BYTE);            VIRTUAL;
  73.     PROCEDURE SetXYRel (dx, dy : INTEGER);         VIRTUAL;
  74.  
  75.     FUNCTION GetSchedNr (n:WORD):SAASchedulerPtr;  VIRTUAL;
  76.     FUNCTION GetWinPtr : SAAWindowPtr;             VIRTUAL;
  77.     FUNCTION GetItem (Nr:WORD) : SAASchedulerPtr;  VIRTUAL;
  78.     DESTRUCTOR Done;                               VIRTUAL;
  79.   END;
  80.  
  81.   EndButDialogBoxPtr = ^EndButDialogBox;
  82.   EndButDialogBox = OBJECT (DialogBox)
  83.  
  84.     EndButNum : BYTE;
  85.     EBIns     : BOOLEAN;
  86.     VSM       : WExtVSMPtr;
  87.  
  88.     CONSTRUCTOR Init (x1, y1, x2, y2 : BYTE;
  89.                       Title : STRING;
  90.                       EBNum : BYTE;
  91.                       NewVSM : WExtVSMPtr);
  92.     PROCEDURE Open;                                VIRTUAL;
  93.     PROCEDURE DrawLine;                            VIRTUAL;
  94.   END;
  95.  
  96.   SaveBoxPtr = ^SaveBox;
  97.   SaveBox = OBJECT (SAAScheduler)
  98.  
  99.     RetByFin : BOOLEAN;
  100.     Attr     : BYTE;
  101.     Mask,
  102.     Path     : STRING;
  103.     Result   : STRING;
  104.     Box      : DialogBoxPtr;
  105.     NameF    : InputFieldPtr;
  106.     Dirs     : DirListPtr;
  107.     VSM      : WExtVSMPtr;
  108.  
  109.     CONSTRUCTOR Init (x1, y1    : BYTE;
  110.                       HelpAvail : BOOLEAN;
  111.                       NewVSM    : WExtVSMPtr);
  112.     PROCEDURE DisplayHotKeys;                      VIRTUAL;
  113.     PROCEDURE Open;                                VIRTUAL;
  114.     PROCEDURE Run;                                 VIRTUAL;
  115.     PROCEDURE RunBy (Nr : BYTE);                   VIRTUAL;
  116.     PROCEDURE Close;                               VIRTUAL;
  117.     PROCEDURE ShowPath;                            VIRTUAL;
  118.  
  119.     FUNCTION GetActiveItem : BYTE;                 VIRTUAL;
  120.     FUNCTION GetResult : STRING;                   VIRTUAL;
  121.     DESTRUCTOR Done;                               VIRTUAL;
  122.   END;
  123.  
  124.   LoadBoxPtr = ^LoadBox;
  125.   LoadBox = OBJECT (SaveBox)
  126.  
  127.     Files : FileListPtr;
  128.  
  129.     CONSTRUCTOR Init (x1, y1    : BYTE;
  130.                       HelpAvail : BOOLEAN;
  131.                       NewVSM    : WExtVSMPtr);
  132.     PROCEDURE Open;                                VIRTUAL;
  133.     PROCEDURE Run;                                 VIRTUAL;
  134.   END;
  135.  
  136. IMPLEMENTATION
  137.  
  138. (* ───────────────────────────────────────────────────── *)
  139. (*             Implementation von DialogBox              *)
  140. (* ───────────────────────────────────────────────────── *)
  141. CONSTRUCTOR DialogBox.Init (x1, y1, x2, y2 : BYTE;
  142.                             Title : STRING;
  143.                             NewVSM: WExtVSMPtr);
  144. BEGIN
  145.   SAAScheduler.Init;
  146.   Opened   := FALSE;
  147.   BackColor:= DiaBoxBackCol;
  148.   ItemList := New (DListCollectionPtr, Init);
  149.   Win      := New (SAAWindowPtr, Init (NewVSM));
  150.   IF (ItemList=NIL) OR (Win=NIL) THEN
  151.     Fail
  152.   ELSE BEGIN
  153.     Win^.SetXY (x1, y1, x2, y2);
  154.     Win^.SetClearWin (TRUE);
  155.     Win^.SetBackColor (BackColor);
  156.     Win^.SetColors (BackColor, BackColor, 0, 0);
  157.     Win^.SetShadow (FALSE);
  158.     Win^.SetTitles (Title, '');
  159.     Win^.SetFrame (1);
  160.   END;
  161. END;
  162.  
  163. PROCEDURE DialogBox.Open;
  164. BEGIN
  165.   IF NOT Opened THEN BEGIN
  166.     Win^.Open;
  167.     IF Win^.IsOpened THEN BEGIN
  168.       Opened := TRUE;
  169.       Display;
  170.       ActiveItem := 1;
  171.       ItemList^.SetActNodeTo (ActiveItem);
  172.       SAASchedulerPtr (ItemList^.GetActData)^.SetActive;
  173.     END;
  174.   END;
  175. END;
  176.  
  177. PROCEDURE DialogBox.Run;
  178.   VAR Ev : EventObj;
  179.       OldX, OldY : BYTE;
  180.       WinAnswer : BYTE;
  181. BEGIN
  182.   IF NOT Opened THEN Open;
  183.   ItemList^.SetActNodeTo (ActiveItem);
  184.   SAASchedulerPtr (ItemList^.GetActData)^.SetActive;
  185.   REPEAT
  186.     ReturnCode := SchEvNotMine;
  187.     EvHand^.WaitForEvent (EvAll, Ev);
  188.     IF (Ev.EventType=EvKeyState) AND
  189.        (Ev.StateKey=Alt) THEN BEGIN
  190.       DisplayHotKeys;
  191.       ReturnCode := SchEvAccepted;
  192.     END;
  193.     IF NOT (Ev.EventType=EvKeyUnknown) AND
  194.        NOT ((Ev.EventType=EvMouMove) AND
  195.             (Ev.Buttons=0)) THEN BEGIN
  196.       CheckEvent (Ev);
  197.       { Mausbewegung ohne Betätigung der Tasten
  198.         auszuwerten, wäre Zeitverschwendung }
  199.  
  200.       IF (ReturnCode=SchEvNotMine) THEN BEGIN
  201.         OldX := Win^.GetX1;  OldY := Win^.GetY1;
  202.         Win^.CheckEvent (Ev);
  203.         WinAnswer := Win^.GetReturnCode;
  204.         IF WinAnswer=MovedWin THEN BEGIN
  205.           SetXYRel (Win^.GetX1-OldX, Win^.GetY1-OldY);
  206.           ReturnCode := SchEvAccepted;
  207.         END ELSE IF WinAnswer=ClosedWin THEN BEGIN
  208.           ReturnCode := SchCancel; Close (ReturnCode);
  209.         END;
  210.       END;
  211.     END;
  212.   UNTIL (ReturnCode=SchFinish) OR
  213.         (ReturnCode=SchCancel) OR
  214.         (ReturnCode=SchHelp);
  215. END;
  216.  
  217. PROCEDURE DialogBox.RunBy (Nr : BYTE);
  218. BEGIN
  219.   IF NOT Opened THEN
  220.     Open;
  221.   IF ActiveItem>0 THEN
  222.     SAASchedulerPtr (ItemList^.GetActData)^.SetPassive;
  223.   SetActiveItem (Nr);
  224.   Run;
  225. END;
  226.  
  227. PROCEDURE DialogBox.SetActiveItem (NewAI : BYTE);
  228. BEGIN
  229.   IF NewAI<1 THEN NewAI := 1;
  230.   IF NewAI>ItemNum THEN NewAI := ItemNum;
  231.   ActiveItem := NewAI;
  232. {  ItemList^.SetActNodeTo (ActiveItem); }
  233. END;
  234.  
  235. PROCEDURE DialogBox.Close (QuitRC : BYTE);
  236.   VAR Sched  : SAASchedulerPtr;
  237. BEGIN
  238.   IF Opened THEN BEGIN
  239.     Sched := SAASchedulerPtr (ItemList^.GotoFirstData);
  240.     IF QuitRC=SchCancel THEN
  241.       SAASchedulerPtr (ItemList^.GetActData)^.
  242.         RestoreConfiguration;
  243.     WHILE NOT (ItemList^.IsOnLast) DO BEGIN
  244.       Sched := SAASchedulerPtr (ItemList^.GotoNextData);
  245.       IF QuitRC=SchCancel THEN
  246.         SAASchedulerPtr (ItemList^.GetActData)^.
  247.           RestoreConfiguration;
  248.     END;
  249.     Win^.Close;
  250.     Opened := FALSE;
  251.   END;
  252. END;
  253.  
  254. PROCEDURE DialogBox.Add (NewSched : SAASchedulerPtr);
  255. BEGIN
  256.   IF (NewSched<>NIL) AND (NOT Opened) THEN BEGIN
  257.     ItemList^.Put (NewSched);  Inc (ItemNum);
  258.   END;
  259. END;
  260.  
  261. PROCEDURE DialogBox.SetXY (x1, y1, x2, y2 : BYTE);
  262. BEGIN
  263.   Win^.SetXY (x1, y1, x2, y2);
  264. END;
  265.  
  266. PROCEDURE DialogBox.Display;
  267. BEGIN
  268.   IF (NOT Displayed) AND (Opened) THEN BEGIN
  269.     SAAScheduler.Display;
  270.     SAASchedulerPtr (ItemList^.GotoFirstData)^.Display;
  271.     SAASchedulerPtr (ItemList^.GetActData)^.
  272.       SaveConfiguration;
  273.     WHILE NOT (ItemList^.IsOnLast) DO BEGIN
  274.       SAASchedulerPtr (ItemList^.GotoNextData)^.Display;
  275.       SAASchedulerPtr (ItemList^.GetActData)^.
  276.         SaveConfiguration;
  277.     END;
  278.   END;
  279. END;
  280.  
  281. PROCEDURE DialogBox.DisplayHotKeys;
  282.   VAR p : DListNodePtr;
  283. BEGIN
  284.   IF (NOT HKDisplayed) AND (Opened) THEN BEGIN
  285.     p := ItemList^.GetActNode;
  286.     SAAScheduler.DisplayHotKeys;
  287.     SAASchedulerPtr (ItemList^.GotoFirstData)^.
  288.       DisplayHotKeys;
  289.     WHILE NOT (ItemList^.IsOnLast) DO
  290.       SAASchedulerPtr (ItemList^.GotoNextData)^.
  291.         DisplayHotKeys;
  292.     ItemList^.SetActNode (p);
  293.   END;
  294. END;
  295.  
  296. PROCEDURE DialogBox.CheckEvent (VAR Ev : EventObj);
  297.   VAR i, Answer : WORD;
  298. BEGIN
  299.   ReturnCode := SchEvNotMine;
  300.   WITH SAASchedulerPtr (ItemList^.GetActData)^ DO BEGIN
  301.     CheckEvent (Ev);
  302.     Answer := GetReturnCode;
  303.   END;
  304.   CASE Answer OF
  305.     SchActNext : BEGIN
  306.                    SAASchedulerPtr (ItemList^.
  307.                                     GetActData)^.
  308.                      SetPassive;
  309.                    SAASchedulerPtr (ItemList^.
  310.                                     GotoNextData)^.
  311.                      SetActive;
  312.                    Inc (ActiveItem);
  313.                    IF ActiveItem>ItemNum THEN
  314.                      ActiveItem := 1;
  315.                    ReturnCode := SchEvAccepted;
  316.                  END;
  317.     SchActPrev : BEGIN
  318.                    SAASchedulerPtr (ItemList^.
  319.                                     GetActData)^.
  320.                      SetPassive;
  321.                    SAASchedulerPtr (ItemList^.
  322.                                     GotoPrevData)^.
  323.                      SetActive;
  324.                    Dec (ActiveItem);
  325.                    IF ActiveItem<1 THEN
  326.                      ActiveItem := ItemNum;
  327.                    ReturnCode := SchEvAccepted;
  328.                  END;
  329.   END;
  330.   IF Answer=SchEvNotMine THEN BEGIN
  331.     i := 1; Answer := SchOk;
  332.     WITH ItemList^ DO BEGIN
  333.       SAASchedulerPtr (GotoFirstData)^.CheckEvent (Ev);
  334.       Answer := SAASchedulerPtr (GetActData)^.
  335.                   GetReturnCode;
  336.       WHILE (NOT (IsOnLast)) AND
  337.             (Answer=ItEvNotMine) DO BEGIN
  338.         SAASchedulerPtr (GotoNextData)^.CheckEvent (Ev);
  339.         Answer := SAASchedulerPtr (GetActData)^.
  340.                     GetReturnCode;
  341.         Inc (i);
  342.       END;
  343.       IF (Answer=SchEvAccepted) OR
  344.          (Answer=SchFinish) OR
  345.          (Answer=SchCancel) OR
  346.          (Answer=SchHelp) THEN BEGIN
  347.         GetSchedNr (ActiveItem)^.SetPassive;
  348.         SetActNodeTo (i);
  349.         Self.ActiveItem := i;
  350.         {^^^ sonst fühlt sich ItemList angesprochen }
  351.  
  352.       END ELSE
  353.         SetActNodeTo (ActiveItem);
  354.       SAASchedulerPtr (GetActData)^.SetActive;
  355.     END;
  356.   END;
  357.   ReturnCode := Answer;
  358. END;
  359.  
  360. PROCEDURE DialogBox.SetActive;
  361. BEGIN
  362.   { die Dialogbox ist immer aktiv,
  363.     solange sie geöffnet ist }
  364. END;
  365.  
  366. PROCEDURE DialogBox.SetPassive;
  367. BEGIN
  368.   { daher auch nie passiv }
  369. END;
  370.  
  371. PROCEDURE DialogBox.SetBackColor (BC : BYTE);
  372. BEGIN
  373.   IF NOT Opened THEN BEGIN
  374.     BackColor := BC;
  375.     Win^.SetBackColor (BackColor);
  376.   END;
  377. END;
  378.  
  379. PROCEDURE DialogBox.SetXYRel (dx, dy : INTEGER);
  380.   VAR p : DListNodePtr;
  381. BEGIN
  382.   IF (Displayed) THEN BEGIN
  383.     p := ItemList^.GetActNode;
  384.     SAASchedulerPtr (ItemList^.GotoFirstData)^.
  385.       SetXYRel (dx, dy);
  386.     WHILE NOT (ItemList^.IsOnLast) DO
  387.       SAASchedulerPtr (ItemList^.GotoNextData)^.
  388.         SetXYRel (dx, dy);
  389.     ItemList^.SetActNode (p);
  390.     SAASchedulerPtr (ItemList^.GetActData)^.SetActive;
  391.       { der Aufruf des schon aktiven Items setzt
  392.         den Cursor richtig }
  393.   END;
  394. END;
  395.  
  396.  
  397. FUNCTION DialogBox.GetSchedNr (n:WORD):SAASchedulerPtr;
  398.   VAR i : WORD;
  399. BEGIN
  400.   i := 1;
  401.   GetSchedNr := SAASchedulerPtr (ItemList^.GotoFirstData);
  402.   WHILE (i<ItemNum) AND (i<n) DO BEGIN
  403.     GetSchedNr := SAASchedulerPtr (ItemList^.GotoNextData);
  404.     Inc (i);
  405.   END;
  406. END;
  407.  
  408. FUNCTION DialogBox.GetWinPtr : SAAWindowPtr;
  409. BEGIN
  410.   GetWinPtr := Win;
  411. END;
  412.  
  413. FUNCTION DialogBox.GetItem (Nr : WORD) : SAASchedulerPtr;
  414. BEGIN
  415.   GetItem := GetSchedNr (Nr);
  416. END;
  417.  
  418. DESTRUCTOR DialogBox.Done;
  419. BEGIN
  420.   Dispose (Win, Done);
  421.   Dispose (ItemList, Done)
  422. END;
  423.  
  424. (* ───────────────────────────────────────────────────── *)
  425. (*          Implementation von EndButDialogBox           *)
  426. (* ───────────────────────────────────────────────────── *)
  427. CONSTRUCTOR EndButDialogBox.Init (x1, y1, x2, y2 : BYTE;
  428.                                   Title : STRING;
  429.                                   EBNum : BYTE;
  430.                                   NewVSM : WExtVSMPtr);
  431. BEGIN
  432.   IF DialogBox.Init (x1,y1,x2,y2,Title,NewVSM) THEN BEGIN
  433.     EndButNum := EBNum;  EBIns := FALSE;  VSM := NewVSM;
  434.   END ELSE
  435.     Fail;
  436. END;
  437.  
  438. PROCEDURE EndButDialogBox.Open;
  439.   VAR x, y, dx : BYTE;
  440. BEGIN
  441.   IF NOT EBIns THEN BEGIN
  442.     x := Win^.GetX2;  y := Pred (Win^.GetY2);
  443.     IF EndButNum>2 THEN dx := 32
  444.                    ELSE dx := 22;
  445.     Add (New (EndButtonPtr,
  446.               Init (SchFinish, New (EndButPtr,
  447.                                     Init (x-dx, y,
  448.                                           ' #Ok ',
  449.                                           AltO, Enter,
  450.                                           VSM)))));
  451.     IF EndButNum>2 THEN
  452.       Add (New (EndButtonPtr,
  453.                 Init (SchHelp, New (EndButPtr,
  454.                                     Init (x-24, y,
  455.                                           ' #Hilfe ',
  456.                                           AltH, 59,
  457.                                           VSM)))));
  458.     Add (New (EndButtonPtr,
  459.               Init (SchCancel, New (EndButPtr,
  460.                                     Init (x-13, y,
  461.                                           ' #Abbruch ',
  462.                                           AltA, ESC,
  463.                                           VSM)))));
  464.     EBIns := TRUE;
  465.   END;
  466.   DialogBox.Open;
  467.   DrawLine;
  468. END;
  469.  
  470. PROCEDURE EndButDialogBox.DrawLine;
  471.   VAR i : BYTE;
  472. BEGIN
  473.   FOR i := Succ (Win^.GetX1) TO Pred (Win^.GetX2) DO
  474.     VSM^.WriteChr (i, Win^.GetY2-2,
  475.                    Win^.GetBackColor,
  476.                    '─');
  477. END;
  478.  
  479. (* ───────────────────────────────────────────────────── *)
  480. (*             Implementation von SaveBox                *)
  481. (* ───────────────────────────────────────────────────── *)
  482. CONSTRUCTOR SaveBox.Init (x1, y1    : BYTE;
  483.                           HelpAvail : BOOLEAN;
  484.                           NewVSM    : WExtVSMPtr);
  485.   VAR EndButNum : BYTE;
  486. BEGIN
  487.   IF (SAAScheduler.Init) AND (NewVSM<>NIL) THEN BEGIN
  488.     IF HelpAvail THEN EndButNum := 3
  489.                  ELSE EndButNum := 2;
  490.     VSM := NewVSM;
  491.     GetDir (0, Path);
  492.     Mask := '*.*';
  493.     Attr := Dos.AnyFile;
  494.     Result := '';
  495.     RetByFin := FALSE;
  496.     Box := New (EndButDialogBoxPtr,
  497.                 Init (x1, y1, x1+49, y1+19,
  498.                       '  Datei speichern  ',
  499.                       EndButNum,
  500.                       VSM));
  501.     IF Box<>NIL THEN BEGIN
  502.       NameF := New (InputFieldPtr,
  503.                     Init (New (StringFieldPtr,
  504.                                Init (x1+18, y1+2,
  505.                                      12,    12,
  506.                                      '·',
  507.                                      '',
  508.                                      x1+4,  y1+2,
  509.                                      ' Datei#name: ',
  510.                                      AltN,
  511.                                      VSM))));
  512.       Box^.Add (NameF);
  513.       Dirs := New (DirListPtr,
  514.                           Init (New (PickListPtr,
  515.                                      Init (x1+13, y1+6,
  516.                                            x1+32, y1+15,
  517.                                            ' #Verzeich'+
  518.                                            'nisse ',
  519.                                            AltV,
  520.                                            VSM))));
  521.       Box^.Add (Dirs);
  522.       IF Box^.ItemNum<>2 THEN
  523.         Fail;
  524.     END ELSE
  525.       Fail;
  526.   END ELSE
  527.     Fail;
  528. END;
  529.  
  530. PROCEDURE SaveBox.DisplayHotKeys;
  531. BEGIN
  532.   SAAScheduler.DisplayHotKeys;
  533.   Box^.DisplayHotKeys;
  534. END;
  535.  
  536. PROCEDURE SaveBox.Open;
  537. BEGIN
  538.   IF NOT Displayed THEN BEGIN
  539.     Dirs^.MakeList (Path);
  540.     Box^.Open;
  541.     IF Box^.Win^.IsOpened THEN BEGIN
  542.       Displayed := TRUE;
  543.       ShowPath;
  544.     END;
  545.   END;
  546. END;
  547.  
  548. PROCEDURE SaveBox.Run;
  549.   VAR Answer : BYTE;
  550.       Str    : STRING;
  551.       Drive  : STRING;
  552. BEGIN
  553.   Open;
  554.   IF NOT Displayed THEN Exit;
  555.   REPEAT
  556.     ReturnCode := SchEvNotMine;
  557.     Box^.Run;
  558.     Answer := Box^.GetReturnCode;
  559.     IF Answer=SchFinish THEN BEGIN
  560.       IF Box^.GetActiveItem=2 THEN BEGIN
  561.         Str := KillSpaces (Dirs^.GetResult);
  562.         IF Str='..' THEN
  563.           Path := CutLastPath (Path)
  564.         ELSE
  565.           Path := Path+'\'+Str;
  566.         Dirs^.MakeList (Path);
  567.         Dirs^.Display;
  568.         ShowPath;
  569.         ReturnCode := SchEvAccepted;
  570.       END ELSE
  571.         IF (Box^.GetActiveItem=1) OR
  572.            (Box^.GetActiveItem=3) THEN BEGIN
  573.           Str := NameF^.GetFPtr^.Result;
  574.           Result := Path+'\'+KillSpaces (Str);
  575.           ReturnCode := SBSave;
  576.         END;
  577.     END;
  578.     IF Answer=SchCancel THEN ReturnCode := SBCancel;
  579.     IF Answer=SchHelp THEN   ReturnCode := SBHelp;
  580.   UNTIL (ReturnCode=SBHelp) OR
  581.         (ReturnCode=SBSave) OR
  582.         (ReturnCode=SBCancel) OR
  583.         (RetByFin AND (Answer=SchFinish));
  584. END;
  585.  
  586. PROCEDURE SaveBox.RunBy (Nr : BYTE);
  587. BEGIN
  588.   Box^.SetActiveItem (Nr);
  589.   Run;
  590. END;
  591.  
  592. PROCEDURE SaveBox.Close;
  593. BEGIN
  594.   Box^.Close (Box^.GetReturnCode);
  595. END;
  596.  
  597. PROCEDURE SaveBox.ShowPath;
  598. BEGIN
  599.   IF Displayed THEN
  600.     WITH Box^.Win^ DO BEGIN
  601.       VSM^.FillPart (Succ (GetX1), GetY1+4,
  602.                      Pred (GetX2), GetY1+4,
  603.                      GetBackColor, ' ');
  604.       VSM^.WriteStr (GetX1+2, GetY1+4,
  605.                      GetBackColor,
  606.                      'Verzeichnis: '+Path);
  607.     END;
  608. END;
  609.  
  610. FUNCTION SaveBox.GetActiveItem : BYTE;
  611. BEGIN
  612.   GetActiveItem := Box^.GetActiveItem;
  613. END;
  614.  
  615. FUNCTION SaveBox.GetResult : STRING;
  616. BEGIN
  617.   GetResult := Result;
  618. END;
  619.  
  620. DESTRUCTOR SaveBox.Done;
  621. BEGIN
  622.   Dispose (Box, Done);
  623. END;
  624.  
  625. (* ───────────────────────────────────────────────────── *)
  626. (*             Implementation von LoadBox                *)
  627. (* ───────────────────────────────────────────────────── *)
  628. CONSTRUCTOR LoadBox.Init (x1, y1 : BYTE;
  629.                           HelpAvail  : BOOLEAN;
  630.                           NewVSM     : WExtVSMPtr);
  631.   VAR EndButNum : BYTE;
  632. BEGIN
  633.   IF (SaveBox.Init (x1,y1,HelpAvail,NewVSM)) THEN BEGIN
  634.     IF HelpAvail THEN EndButNum := 3
  635.                  ELSE EndButNum := 2;
  636.     VSM := NewVSM;
  637.     GetDir (0, Path);
  638.     Mask := '*.*';
  639.     Attr := Dos.AnyFile-Dos.Directory;
  640.     Result := '';
  641.     RetByFin := FALSE;
  642.     Box := New (EndButDialogBoxPtr,
  643.                 Init (x1, y1, x1+49, y1+19,
  644.                       '  Datei laden  ',
  645.                       EndButNum,
  646.                       VSM));
  647.     IF Box<>NIL THEN BEGIN
  648.       NameF := New (InputFieldPtr,
  649.                     Init (New (StringFieldPtr,
  650.                                Init (x1+19, y1+2,
  651.                                      12,    12,
  652.                                      '·',
  653.                                      '*.*',
  654.                                      x1+4,  y1+2,
  655.                                      ' Suche #nach: ',
  656.                                      AltN,
  657.                                      VSM))));
  658.       Box^.Add (NameF);
  659.       Dirs := New (DirListPtr,
  660.                           Init (New (PickListPtr,
  661.                                      Init (x1+3, y1+6,
  662.                                            x1+22, y1+15,
  663.                                            ' #Verzeich'+
  664.                                            'nisse ',
  665.                                            AltV,
  666.                                            VSM))));
  667.       Box^.Add (Dirs);
  668.       Files := New (FileListPtr,
  669.                     Init (New (PickListPtr,
  670.                                Init (x1+27, y1+6,
  671.                                      x1+46, y1+15,
  672.                                      ' #Dateien: ',
  673.                                      AltD,
  674.                                      VSM))));
  675.       Box^.Add (Files);
  676.       IF Box^.ItemNum<>3 THEN
  677.         Fail;
  678.     END ELSE
  679.       Fail;
  680.   END ELSE
  681.     Fail;
  682. END;
  683.  
  684. PROCEDURE LoadBox.Open;
  685. BEGIN
  686.   IF NOT Displayed THEN BEGIN
  687.     SaveBox.Open;
  688.     IF Displayed THEN BEGIN
  689.       Files^.MakeList (Path, Mask, Attr);
  690.       Files^.Display;
  691.     END;
  692.   END;
  693. END;
  694.  
  695. PROCEDURE LoadBox.Run;
  696.   VAR Answer : BYTE;
  697.       Str : STRING;
  698. BEGIN
  699.   Open;
  700.   IF NOT Displayed THEN Exit;
  701.   REPEAT
  702.     ReturnCode := SchEvNotMine;
  703.     Box^.Run;
  704.     Answer := Box^.GetReturnCode;
  705.     IF Answer=SchFinish THEN BEGIN
  706.       IF Box^.GetActiveItem=2 THEN BEGIN
  707.         Str := KillSpaces (Dirs^.GetResult);
  708.         IF Str='..' THEN
  709.           Path := CutLastPath (Path)
  710.         ELSE
  711.           Path := Path+'\'+Str;
  712.         Dirs^.MakeList (Path);
  713.         Dirs^.Display;
  714.         Str := KillSpaces (NameF^.GetFPtr^.Result);
  715.         IF Str='' THEN
  716.           Str := Mask;
  717.         Files^.MakeList (Path, Str, Attr);
  718.         Files^.Display;
  719.         ReturnCode := SchEvAccepted;
  720.         ShowPath;
  721.         ReturnCode := SchEvAccepted;
  722.       END;
  723.       IF (Box^.ActiveItem=3) OR
  724.          (Box^.ActiveItem=4) THEN BEGIN
  725.         Str := Files^.GetResult;
  726.         Result := Path+'\'+KillSpaces (Str);
  727.         ReturnCode := LBLoad;
  728.       END;
  729.       IF (Box^.GetActiveItem=1) THEN BEGIN
  730.         Str := KillSpaces (NameF^.GetFPtr^.Result);
  731.         IF Str='' THEN
  732.           Str := Mask;
  733.         Files^.MakeList (Path, Str, Attr);
  734.         Files^.Display;
  735.         ReturnCode := SchEvAccepted;
  736.       END;
  737.     END;
  738.     IF Answer=SchCancel THEN ReturnCode := LBCancel;
  739.     IF Answer=SchHelp THEN   ReturnCode := LBHelp;
  740.   UNTIL (ReturnCode=LBHelp) OR
  741.         (ReturnCode=LBLoad) OR
  742.         (ReturnCode=LBCancel) OR
  743.         (RetByFin AND (Answer=SchFinish));
  744. END;
  745.  
  746. END.
  747. (* ----------------------------------------------------- *)
  748. (*                 Ende von DIABOX.PAS                   *)
  749. (* ----------------------------------------------------- *)
  750.