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

  1. (* ----------------------------------------------------- *)
  2. (*                    DBXSCHED.PAS                       *)
  3. (*                                                       *)
  4. (* ■ RadioButtons: "Sammelt" Einträge vom Type "RadioBut"*)
  5. (*   da diese nur in Gruppe Sinn machen. Daher ist aber  *)
  6. (*   auch die Eventprüfung komplexer ausgefallen, kann   *)
  7. (*   der aktive Item das Event nicht auswerten, müssen   *)
  8. (*   alle anderen durchlaufen werden.                    *)
  9. (* ■ WinRadioButtons: Noch ein Fenster rundherum, dessen *)
  10. (*   Koordinaten allerdings explizit angegeben werden    *)
  11. (*   müssen (in Init).                                   *)
  12. (* ■ PushButton: Erweiterung von PushBut zu Scheduler.   *)
  13. (* ■ EndButton: Erweiterung für EndBut, da sie beide von *)
  14. (*   vno SAAScheduler erben, enthalten sie viele "Um-    *)
  15. (*   leitungen". EndBut liefert bei Wahl den an Init über*)
  16. (*   gebenen ReturnCode.                                 *)
  17. (* ■ InputField: Ebenfalls Erweiterung.                  *)
  18. (* ■ WinInputField: Wie InputField, mit aktivem Fenster  *)
  19. (*   und ohne HotKey; einmal geöffnet, muss es beendet   *)
  20. (*   werden.                                             *)
  21. (* ■ PickList: Erweiterung von PickList.                 *)
  22. (* ■ FileList: Erstellt automatisch den Inhalt der       *)
  23. (*   PickList: Eine Liste von allen Dateien im angege-   *)
  24. (*   benen Verzeichnis.                                  *)
  25. (* ■ DirList: Eine Liste mit allen Directories.          *)
  26. (*                                                       *)
  27. (*           (c) 1991 by R.Reichert & toolbox            *)
  28. (* ----------------------------------------------------- *)
  29. UNIT DBXSched;
  30.  
  31. INTERFACE
  32.  
  33. USES crt,Dos,      Stuff,
  34.      MouKey,   WinVSM,   Lists,
  35.      FrameWin, SAAWin,
  36.      SAASched, DBXItems;
  37.  
  38. CONST
  39.   WinRFrCol = $70;              { WinRadioButtonsFrameCol }
  40.  
  41.   SchOk        = 0;  { alles Ok                           }
  42.   SchEvNotMine = 1;  { Event nicht meins                  }
  43.   SchActNext   = 2;  { aktiviere nächsten Scheduler       }
  44.   SchActPrev   = 3;  { aktiviere vorhergehenden Scheduler }
  45.   SchEvAccepted= 4;  { Event akzeptiert                   }
  46.  
  47.   SchFinish    = 5;  { beendet, "Ok"                      }
  48.   SchCancel    = 6;  { beendet, "Cancel"                  }
  49.   SchHelp      = 7;  { beendet, "Help"                    }
  50.  
  51.  
  52. TYPE
  53.   RadioButtonsPtr = ^RadioButtons;
  54.   RadioButtons = OBJECT (SAAScheduler)
  55.  
  56.     ItemList : DListCollectionPtr;
  57.  
  58.     CONSTRUCTOR Init;
  59.     PROCEDURE Add (NewItem : RadioButPtr);         VIRTUAL;
  60.     PROCEDURE Display;                             VIRTUAL;
  61.     PROCEDURE DisplayHotKeys;                      VIRTUAL;
  62.     PROCEDURE CheckEvent (VAR Ev : EventObj);      VIRTUAL;
  63.     PROCEDURE SetActive;                           VIRTUAL;
  64.     PROCEDURE SetPassive;                          VIRTUAL;
  65.     PROCEDURE SetXYRel (dx, dy : INTEGER);         VIRTUAL;
  66.     PROCEDURE SaveConfiguration;                   VIRTUAL;
  67.  
  68.     FUNCTION GetRadioButNr (n:WORD) : RadioButPtr; VIRTUAL;
  69.     FUNCTION GetResult : BYTE;
  70.     DESTRUCTOR Done;                               VIRTUAL;
  71.   END;
  72.  
  73.   WinRadioButtonsPtr = ^WinRadioButtons;
  74.   WinRadioButtons = OBJECT (RadioButtons)
  75.  
  76.     FrCol : BYTE;
  77.     Win   : FrameWindowPtr;
  78.  
  79.     CONSTRUCTOR Init (x1, y1, x2, y2 : BYTE;
  80.                       Title : STRING;
  81.                       NewVSM : WextVSMPtr);
  82.     PROCEDURE Display;                             VIRTUAL;
  83.     PROCEDURE SetXYRel (dx, dy : INTEGER);         VIRTUAL;
  84.     PROCEDURE SetFrameColor (NC : BYTE);           VIRTUAL;
  85.  
  86.     FUNCTION GetWinPtr : FrameWindowPtr;           VIRTUAL;
  87.     DESTRUCTOR Done;                               VIRTUAL;
  88.   END;
  89.  
  90.   PushButtonPtr = ^PushButton;
  91.   PushButton = OBJECT (SAAScheduler)
  92.  
  93.     PushB : PushButPtr;
  94.  
  95.     CONSTRUCTOR Init (PBPtr : PushButPtr);
  96.     PROCEDURE Display;                             VIRTUAL;
  97.     PROCEDURE DisplayHotKeys;                      VIRTUAL;
  98.     PROCEDURE CheckEvent (VAR Ev : EventObj);      VIRTUAL;
  99.     PROCEDURE SetActive;                           VIRTUAL;
  100.     PROCEDURE SetPassive;                          VIRTUAL;
  101.     PROCEDURE SetXYRel (dx, dy : INTEGER);         VIRTUAL;
  102.     PROCEDURE SaveConfiguration;                   VIRTUAL;
  103.     PROCEDURE RestoreConfiguration;                VIRTUAL;
  104.  
  105.     FUNCTION GetState : BOOLEAN;                   VIRTUAL;
  106.     FUNCTION GetResult : BOOLEAN;
  107.     DESTRUCTOR Done;                               VIRTUAL;
  108.   END;
  109.  
  110.   EndButtonPtr = ^EndButton;
  111.   EndButton = OBJECT (SAAScheduler)
  112.  
  113.     EndB   : EndButPtr;
  114.     QuitRC : BYTE;
  115.  
  116.     CONSTRUCTOR Init (QRC : BYTE; EndBPtr : EndButPtr);
  117.     PROCEDURE Display;                             VIRTUAL;
  118.     PROCEDURE DisplayHotKeys;                      VIRTUAL;
  119.     PROCEDURE CheckEvent (VAR Ev : EventObj);      VIRTUAL;
  120.     PROCEDURE SetActive;                           VIRTUAL;
  121.     PROCEDURE SetPassive;                          VIRTUAL;
  122.     PROCEDURE SetXYRel (dx, dy : INTEGER);         VIRTUAL;
  123.     DESTRUCTOR Done;                               VIRTUAL;
  124.   END;
  125.  
  126.   InputFieldPtr = ^InputField;
  127.   InputField = OBJECT (SAAScheduler)
  128.  
  129.     Field : StringFieldPtr;
  130.  
  131.     CONSTRUCTOR Init (FPtr : StringFieldPtr);
  132.     PROCEDURE Display;                             VIRTUAL;
  133.     PROCEDURE DisplayHotKeys;                      VIRTUAL;
  134.     PROCEDURE SetActive;                           VIRTUAL;
  135.     PROCEDURE SetPassive;                          VIRTUAL;
  136.     PROCEDURE CheckEvent (VAR Ev : EventObj);      VIRTUAL;
  137.     PROCEDURE SetXYRel (dx, dy : INTEGER);         VIRTUAL;
  138.  
  139.     FUNCTION GetFPtr : StringFieldPtr;
  140.     DESTRUCTOR Done;                               VIRTUAL;
  141.   END;
  142.  
  143.   WinInputFieldPtr = ^WinInputField;
  144.   WinInputField = OBJECT (InputField)
  145.  
  146.     Win : SAAWindowPtr;
  147.  
  148.     CONSTRUCTOR Init (FPtr: StringFieldPtr;
  149.                       VSM : WExtVSMPtr);
  150.     PROCEDURE Display;                             VIRTUAL;
  151.     PROCEDURE DisplayHotKeys;                      VIRTUAL;
  152.     PROCEDURE CheckEvent (VAR Ev : EventObj);      VIRTUAL;
  153.     DESTRUCTOR Done;                               VIRTUAL;
  154.   END;
  155.  
  156.   PickListSchedPtr = ^PickListSched;
  157.   PickListSched = OBJECT (SAAScheduler)
  158.  
  159.     PickL : PickListPtr;
  160.  
  161.     CONSTRUCTOR Init (PLPtr : PickListPtr);
  162.     PROCEDURE Display;                             VIRTUAL;
  163.     PROCEDURE DisplayHotKeys;                      VIRTUAL;
  164.     PROCEDURE Add (Item : StringPtr);              VIRTUAL;
  165.     PROCEDURE CheckEvent (VAR Ev : EventObj);      VIRTUAL;
  166.     PROCEDURE SetActive;                           VIRTUAL;
  167.     PROCEDURE SetPassive;                          VIRTUAL;
  168.     PROCEDURE SetXYRel (dx, dy : INTEGER);         VIRTUAL;
  169.     PROCEDURE SaveConfiguration;                   VIRTUAL;
  170.     PROCEDURE RestoreConfiguration;                VIRTUAL;
  171.     PROCEDURE ClearList;                           VIRTUAL;
  172.     PROCEDURE MakeList;
  173.  
  174.     FUNCTION GetResult : STRING;
  175.     DESTRUCTOR Done;                               VIRTUAL;
  176.   END;
  177.  
  178.   FileListPtr = ^FileList;
  179.   FileList = OBJECT (PickListSched)
  180.     PROCEDURE MakeList (Path, Mask : STRING; Attr : BYTE);
  181.     FUNCTION FormatFileName (Name:STRING):STRING;  VIRTUAL;
  182.   END;
  183.  
  184.   DirListPtr = ^DirList;
  185.   DirList = OBJECT (FileList)
  186.     PROCEDURE MakeList (Path : STRING);
  187.   END;
  188.  
  189. IMPLEMENTATION
  190.  
  191. (* ───────────────────────────────────────────────────── *)
  192. (*           Implementation von RadioButtons             *)
  193. (* ───────────────────────────────────────────────────── *)
  194. CONSTRUCTOR RadioButtons.Init;
  195. BEGIN
  196.   SAAScheduler.Init;
  197.   ItemList := New (DListCollectionPtr, Init);
  198.   IF ItemList=NIL THEN
  199.     Fail;
  200. END;
  201.  
  202. PROCEDURE RadioButtons.Add (NewItem : RadioButPtr);
  203. BEGIN
  204.   IF (NewItem<>NIL) AND (NOT Displayed) THEN BEGIN
  205.     ItemList^.Put (NewItem);
  206.     Inc (ItemNum);
  207.   END;
  208. END;
  209.  
  210. PROCEDURE RadioButtons.Display;
  211. BEGIN
  212.   IF NOT Displayed THEN BEGIN
  213.     SAAScheduler.Display;
  214.     RadioButPtr (ItemList^.GotoFirstData)^.Display;
  215.     WHILE NOT (ItemList^.IsOnLast) DO
  216.       RadioButPtr (ItemList^.GotoNextData)^.Display;
  217.   END;
  218. END;
  219.  
  220. PROCEDURE RadioButtons.DisplayHotKeys;
  221.   VAR p : DListNodePtr;
  222. BEGIN
  223.   IF (NOT HKDisplayed) AND (Displayed) THEN BEGIN
  224.     p := ItemList^.GetActNode;
  225.     SAAScheduler.DisplayHotKeys;
  226.     RadioButPtr (ItemList^.GotoFirstData)^.DisplayHotKey;
  227.     WHILE NOT (ItemList^.IsOnLast) DO
  228.       RadioButPtr (ItemList^.GotoNextData)^.DisplayHotKey;
  229.     ItemList^.SetActNode (p);
  230.   END;
  231. END;
  232.  
  233. PROCEDURE RadioButtons.CheckEvent (VAR Ev : EventObj);
  234.   VAR i, Answer : WORD;
  235.       SearchAct : BOOLEAN;
  236. BEGIN
  237.   ReturnCode := SchEvNotMine;
  238.   IF (NOT Displayed) THEN Exit;
  239.   SAAScheduler.CheckEvent (Ev);
  240.   SearchAct := FALSE;
  241.   IF (ReturnCode=SchEvNotMine) THEN BEGIN
  242.     IF (ActiveItem>0) THEN BEGIN
  243.       WITH RadioButPtr (ItemList^.GetActData)^ DO BEGIN
  244.         CheckEvent (Ev);
  245.         Answer := GetReturnCode;
  246.       END;
  247.       IF Answer<>ItEvNotMine THEN
  248.         CASE Answer OF
  249.           ItEvAccepted : ReturnCode := SchEvAccepted;
  250.           ItActNext : BEGIN
  251.                         RadioButPtr (ItemList^.
  252.                                      GotoNextData)^.
  253.                           SetActive;
  254.                         Inc (ActiveItem);
  255.                         IF ActiveItem>ItemNum THEN
  256.                           ActiveItem := 1;
  257.                           ReturnCode := SchEvAccepted;
  258.                         END;
  259.           ItActPrev : BEGIN
  260.                         RadioButPtr (ItemList^.
  261.                                      GotoPrevData)^.
  262.                           SetActive;
  263.                         Dec (ActiveItem);
  264.                         IF ActiveItem<1 THEN
  265.                           ActiveItem := ItemNum;
  266.                         ReturnCode := SchEvAccepted;
  267.                       END;
  268.         END
  269.       ELSE
  270.         SearchAct := TRUE;
  271.     END;
  272.  
  273.     IF (ActiveItem=0) OR (SearchAct) THEN BEGIN
  274.       i := 1; Answer := 0;
  275.       WITH ItemList^ DO BEGIN
  276.         RadioButPtr (GotoFirstData)^.CheckEvent (Ev);
  277.         Answer := RadioButPtr (GetActData)^.GetReturnCode;
  278.         WHILE (NOT (IsOnLast)) AND
  279.               (Answer=ItEvNotMine) DO BEGIN
  280.           RadioButPtr (GotoNextData)^.CheckEvent (Ev);
  281.           Answer := RadioButPtr (GetActData)^.GetReturnCode;
  282.           Inc (i);
  283.         END;
  284.         IF Answer=ItEvAccepted THEN BEGIN
  285.           IF SearchAct THEN
  286.             GetRadioButNr (ActiveItem)^.SetPassive;
  287.           SetActNodeTo (i);
  288.           ActiveItem := i;
  289.           Self.ReturnCode := SchEvAccepted;
  290.           {^^^ sonst wird der von ItemList gesetzt }
  291.           RadioButPtr (GetActData)^.SetActive;
  292.           SetActive;
  293.         END ELSE
  294.           SetActNodeTo (ActiveItem);
  295.       END;
  296.     END;
  297.   END;
  298. END;
  299.  
  300. PROCEDURE RadioButtons.SetActive;
  301. BEGIN
  302.   IF Displayed THEN BEGIN
  303.     SAAScheduler.SetActive;
  304.     IF ActiveItem=0 THEN BEGIN
  305.       RadioButPtr (ItemList^.GotoFirstData)^.SetActive;
  306.       ActiveItem := 1;
  307.     END ELSE
  308.       RadioButPtr (ItemList^.GetActData)^.SetActive;
  309.   END;
  310. END;
  311.  
  312. PROCEDURE RadioButtons.SetPassive;
  313. BEGIN
  314.   IF Active AND Displayed THEN
  315.     SAAScheduler.SetPassive;
  316. END;
  317.  
  318. PROCEDURE RadioButtons.SetXYRel (dx, dy : INTEGER);
  319.   VAR p : DListNodePtr;
  320. BEGIN
  321.   IF (Displayed) THEN BEGIN
  322.     p := ItemList^.GetActNode;
  323.     RadioButPtr (ItemList^.GotoFirstData)^.
  324.       SetXYRel (dx, dy);
  325.     WHILE NOT (ItemList^.IsOnLast) DO
  326.       RadioButPtr (ItemList^.GotoNextData)^.
  327.         SetXYRel (dx, dy);
  328.     ItemList^.SetActNode (p);
  329.   END;
  330. END;
  331.  
  332. PROCEDURE RadioButtons.SaveConfiguration;
  333. BEGIN
  334.   IF ActiveItem=0 THEN SaveActItem := 1
  335.                   ELSE SaveActItem := ActiveItem;
  336. END;
  337.  
  338. FUNCTION RadioButtons.GetRadioButNr (n:WORD) : RadioButPtr;
  339.   VAR i : WORD;
  340. BEGIN
  341.   i := 1;
  342.   GetRadioButNr := RadioButPtr (ItemList^.GotoFirstData);
  343.   WHILE (i<ItemNum) AND (i<n) DO BEGIN
  344.     GetRadioButNr := RadioButPtr (ItemList^.GotoNextData);
  345.     Inc (i);
  346.   END;
  347. END;
  348.  
  349. FUNCTION RadioButtons.GetResult;
  350. BEGIN
  351.   GetResult := GetActiveItem;
  352. END;
  353.  
  354. DESTRUCTOR RadioButtons.Done;
  355. BEGIN
  356.   SAAScheduler.Done;
  357.   Dispose (ItemList, Done);
  358. END;
  359.  
  360. (* ───────────────────────────────────────────────────── *)
  361. (*           Implementation von WinRadioButton           *)
  362. (* ───────────────────────────────────────────────────── *)
  363. CONSTRUCTOR WinRadioButtons.Init
  364.               (x1, y1, x2, y2 : BYTE;
  365.                Title : STRING;
  366.                NewVSM: WExtVSMPtr);
  367. BEGIN
  368.   IF RadioButtons.Init THEN BEGIN
  369.     Win := New (FrameWindowPtr, Init (NewVSM));
  370.     FrCol := WinRFrCol;
  371.     IF Win<>NIL THEN BEGIN
  372.       Win^.SetTitles (Title, '');
  373.       Win^.SetXY (x1, y1, x2, y2);
  374.       Win^.SetShadow (FALSE);
  375.       Win^.SetColors (FrCol, FrCol, 0, 0);
  376.     END  ELSE
  377.       Fail;
  378.   END ELSE
  379.     Fail;
  380. END;
  381.  
  382. PROCEDURE WinRadioButtons.Display;
  383. BEGIN
  384.   Mouse^.Hide;
  385.   Win^.Show;
  386.   Mouse^.Show;
  387.   IF Win^.IsOpened THEN
  388.     RadioButtons.Display;
  389. END;
  390.  
  391. PROCEDURE WinRadioButtons.SetXYRel (dx, dy : INTEGER);
  392. BEGIN
  393.   IF (Displayed) THEN BEGIN
  394.     WITH Win^ DO BEGIN
  395.       Mouse^.Hide;
  396.       Hide;
  397.       SetXY (GetX1+dx, GetY1+dy,
  398.              GetX2+dx, GetY2+dy);
  399.       Show;
  400.       Mouse^.Show;
  401.     END;
  402.     RadioButtons.SetXYRel (dx, dy);
  403.   END;
  404. END;
  405.  
  406. PROCEDURE WinRadioButtons.SetFrameColor (NC : BYTE);
  407. BEGIN
  408.   IF NOT Displayed THEN BEGIN
  409.     FrCol := NC;
  410.     Win^.SetColors (FrCol, FrCol, 0, 0);
  411.   END;
  412. END;
  413.  
  414. FUNCTION WinRadioButtons.GetWinPtr : FrameWindowPtr;
  415. BEGIN
  416.   GetWinPtr := Win;
  417. END;
  418.  
  419. DESTRUCTOR WinRadioButtons.Done;
  420. BEGIN
  421.   RadioButtons.Done;
  422.   Dispose (Win, Done);
  423. END;
  424.  
  425. (* ───────────────────────────────────────────────────── *)
  426. (*             Implementation von PushButton             *)
  427. (* ───────────────────────────────────────────────────── *)
  428. CONSTRUCTOR PushButton.Init (PBPtr : PushButPtr);
  429. BEGIN
  430.   IF PBPtr<>NIL THEN BEGIN
  431.     SAAScheduler.Init;
  432.     PushB := PBPtr;   ItemNum := 1;
  433.   END ELSE
  434.     Fail;
  435. END;
  436.  
  437. PROCEDURE PushButton.Display;
  438. BEGIN
  439.   SAAScheduler.Display;
  440.   PushB^.Display;
  441. END;
  442.  
  443. PROCEDURE PushButton.DisplayHotKeys;
  444. BEGIN
  445.   SAAScheduler.DisplayHotKeys;
  446.   PushB^.DisplayHotKey;
  447. END;
  448.  
  449. PROCEDURE PushButton.CheckEvent (VAR Ev : EventObj);
  450.   VAR Answer : BYTE;
  451. BEGIN
  452.   ReturnCode := SchEvNotMine;
  453.   IF (NOT Displayed) THEN
  454.     Exit;
  455.   SAAScheduler.CheckEvent (Ev);
  456.   IF ReturnCode=SchEvNotMine THEN BEGIN
  457.     PushB^.CheckEvent (Ev);
  458.     Answer := PushB^.GetReturnCode;
  459.     IF (Answer=ItEvAccepted) THEN
  460.       ReturnCode := SchEvAccepted;
  461.   END;
  462. END;
  463.  
  464. PROCEDURE PushButton.SetActive;
  465. BEGIN
  466.   SAAScheduler.SetActive;
  467.   PushB^.SetActive;
  468. END;
  469.  
  470. PROCEDURE PushButton.SetPassive;
  471. BEGIN
  472.   SAAScheduler.SetPassive;
  473.   PushB^.SetPassive;
  474. END;
  475.  
  476. PROCEDURE PushButton.SetXYRel (dx, dy : INTEGER);
  477. BEGIN
  478.   PushB^.SetXYRel (dx, dy);
  479. END;
  480.  
  481. PROCEDURE PushButton.SaveConfiguration;
  482. BEGIN
  483.   PushB^.SaveConfiguration;
  484. END;
  485.  
  486. PROCEDURE PushButton.RestoreConfiguration;
  487. BEGIN
  488.   PushB^.RestoreConfiguration;
  489. END;
  490.  
  491. FUNCTION PushButton.GetState : BOOLEAN;
  492. BEGIN
  493.   GetState := PushB^.GetState;
  494. END;
  495.  
  496. FUNCTION PushButton.GetResult : BOOLEAN;
  497. BEGIN
  498.   GetResult := GetState;
  499. END;
  500.  
  501. DESTRUCTOR PushButton.Done;
  502. BEGIN
  503.   SAAScheduler.Done;
  504.   Dispose (PushB, Done);
  505. END;
  506.  
  507. (* ───────────────────────────────────────────────────── *)
  508. (*             Implementation von EndButton              *)
  509. (* ───────────────────────────────────────────────────── *)
  510. CONSTRUCTOR EndButton.Init (QRC:BYTE; EndBPtr : EndButPtr);
  511. BEGIN
  512.   IF EndBPtr<>NIL THEN BEGIN
  513.     SAAScheduler.Init;
  514.     EndB := EndBPtr;  ItemNum := 1;  QuitRC := QRC;
  515.   END ELSE
  516.     Fail;
  517. END;
  518.  
  519. PROCEDURE EndButton.Display;
  520. BEGIN
  521.   SAAScheduler.Display;
  522.   EndB^.Display;
  523. END;
  524.  
  525. PROCEDURE EndButton.DisplayHotKeys;
  526. BEGIN
  527.   SAAScheduler.DisplayHotKeys;
  528.   EndB^.DisplayHotKey;
  529. END;
  530.  
  531.  
  532. PROCEDURE EndButton.CheckEvent (VAR Ev : EventObj);
  533.   VAR Answer : BYTE;
  534. BEGIN
  535.   ReturnCode := SchEvNotMine;
  536.   IF (NOT Displayed) THEN
  537.     Exit;
  538.   SAAScheduler.CheckEvent (Ev);
  539.   IF ReturnCode=SchEvNotMine THEN BEGIN
  540.     EndB^.CheckEvent (Ev);
  541.     Answer := EndB^.GetReturnCode;
  542.     IF (Answer=ItFinish) THEN
  543.       ReturnCode := QuitRC
  544.     ELSE
  545.       IF Answer=ItEvAccepted THEN
  546.         ReturnCode := SchEvAccepted;
  547.   END;
  548. END;
  549.  
  550. PROCEDURE EndButton.SetActive;
  551. BEGIN
  552.   SAAScheduler.SetActive;
  553.   EndB^.SetActive;
  554. END;
  555.  
  556. PROCEDURE EndButton.SetPassive;
  557. BEGIN
  558.   SAAScheduler.SetPassive;
  559.   EndB^.SetPassive;
  560. END;
  561.  
  562. PROCEDURE EndButton.SetXYRel (dx, dy : INTEGER);
  563. BEGIN
  564.   EndB^.SetXYRel (dx, dy);
  565. END;
  566.  
  567. DESTRUCTOR EndButton.Done;
  568. BEGIN
  569.   SAAScheduler.Done;
  570.   Dispose (EndB, Done);
  571. END;
  572.  
  573. (* ───────────────────────────────────────────────────── *)
  574. (*             Implementation von InputField             *)
  575. (* ───────────────────────────────────────────────────── *)
  576. CONSTRUCTOR InputField.Init (FPtr : StringFieldPtr);
  577. BEGIN
  578.   IF (SAAScheduler.Init) AND (FPtr<>NIL) THEN BEGIN
  579.     Field := FPtr;
  580.   END ELSE
  581.     Fail;
  582. END;
  583.  
  584. PROCEDURE InputField.Display;
  585. BEGIN
  586.   SAAScheduler.Display;
  587.   Field^.Display;
  588.   Mouse^.Hide;
  589.   WITH Field^ DO BEGIN
  590.     VSM^.WriteChr (GetFieldX-2, GetFieldY,
  591.                    GetCol, '[');
  592.     VSM^.WriteChr (Succ (GetFieldX+GetFieldLen),
  593.                    GetFieldY,
  594.                    GetCol, ']');
  595.   END;
  596.   Mouse^.Show;
  597. END;
  598.  
  599. PROCEDURE InputField.DisplayHotKeys;
  600. BEGIN
  601.   SAAScheduler.DisplayHotKeys;
  602.   Field^.DisplayHotKey;
  603. END;
  604.  
  605. PROCEDURE InputField.CheckEvent (VAR Ev : EventObj);
  606.   VAR Answer : BYTE;
  607. BEGIN
  608.   SAAScheduler.CheckEvent (Ev);
  609.   IF ReturnCode=SchEvNotMine THEN BEGIN
  610.     Field^.CheckEvent (Ev);
  611.     Answer := Field^.GetReturnCode;
  612.     IF Answer=ItEvNotMine THEN
  613.       SAAScheduler.CheckEvent (Ev);
  614.     { es könnte sein, dass nach Field^.CheckEvent
  615.       editiert worden ist, dann "Tab" betätigt wurde, und
  616.       das kann ja noch von SAAScheduler ausgewertet
  617.       werden. }
  618.  
  619.     IF Answer=ItEvAccepted THEN
  620.       ReturnCode := SchEvAccepted;
  621.     IF Answer=ItFinish THEN
  622.       ReturnCode := SchFinish;
  623.   END;
  624. END;
  625.  
  626. PROCEDURE InputField.SetActive;
  627. BEGIN
  628.   SAAScheduler.SetActive;
  629.   Field^.SetActive;
  630. END;
  631.  
  632. PROCEDURE InputField.SetPassive;
  633. BEGIN
  634.   SAAScheduler.SetPassive;
  635.   Field^.SetPassive;
  636. END;
  637.  
  638. PROCEDURE InputField.SetXYRel (dx, dy : INTEGER);
  639. BEGIN
  640.   Field^.SetXYRel (dx, dy);
  641. END;
  642.  
  643. FUNCTION InputField.GetFPtr : StringFieldPtr;
  644. BEGIN
  645.   GetFPtr := Field;
  646. END;
  647.  
  648. DESTRUCTOR InputField.Done;
  649. BEGIN
  650.   SAAScheduler.Done;
  651.   Dispose (Field, Done);
  652. END;
  653.  
  654. (* ───────────────────────────────────────────────────── *)
  655. (*           Implementation von WinInputField            *)
  656. (* ───────────────────────────────────────────────────── *)
  657. CONSTRUCTOR WinInputField.Init (FPtr : StringFieldPtr;
  658.                                 VSM : WExtVSMPtr);
  659. BEGIN
  660.   IF (InputField.Init (FPtr)) AND (VSM<>NIL) THEN BEGIN
  661.     Field^.SetName ('');
  662.     Field^.SetXY (Field^.GetFieldX, Field^.GetFieldY);
  663.     Win := New (SAAWindowPtr, Init (VSM));
  664.     IF Win<>NIL THEN BEGIN
  665.       WITH Field^ DO
  666.         Win^.SetXY (GetFieldX-2, Pred (GetFieldY),
  667.                     GetFieldX+GetFieldLen+1,
  668.                     Succ (GetFieldY));
  669.       Win^.SetTitles (Field^.GetName, '');
  670.       Win^.SetShadow (FALSE);
  671.       Win^.SetFrame (2);
  672.     END ELSE
  673.       Fail;
  674.   END ELSE
  675.     Fail;
  676. END;
  677.  
  678. PROCEDURE WinInputField.Display;
  679. BEGIN
  680.   IF NOT Displayed THEN
  681.     Win^.Open;
  682.   IF Win^.IsOpened THEN
  683.     Field^.Display;
  684. END;
  685.  
  686. PROCEDURE WinInputField.DisplayHotKeys;
  687. BEGIN
  688.   { gibt's hier nicht mehr }
  689. END;
  690.  
  691. PROCEDURE WinInputField.CheckEvent (VAR Ev : EventObj);
  692.   VAR WinAnswer, OldX, OldY : BYTE;
  693. BEGIN
  694.   InputField.CheckEvent (Ev);
  695.   IF (ReturnCode=SchEvNotMine) THEN BEGIN
  696.     HideCursor;
  697.     OldX := Win^.GetX1;  OldY := Win^.GetY1;
  698.     Win^.CheckEvent (Ev);
  699.     WinAnswer := Win^.GetReturnCode;
  700.     IF WinAnswer=MovedWin THEN BEGIN
  701.       SetXYRel (Win^.GetX1-OldX, Win^.GetY1-OldY);
  702.       ReturnCode := SchEvAccepted;
  703.     END;
  704.     IF WinAnswer=ClosedWin THEN
  705.       ReturnCode := SchCancel;
  706.     ShowCursor;
  707.   END;
  708. END;
  709.  
  710. DESTRUCTOR WinInputField.Done;
  711. BEGIN
  712.   InputField.Done;
  713.   Dispose (Win, Done);
  714. END;
  715.  
  716. (* ───────────────────────────────────────────────────── *)
  717. (*             Implementation von PickListSched          *)
  718. (* ───────────────────────────────────────────────────── *)
  719. CONSTRUCTOR PickListSched.Init (PLPtr : PickListPtr);
  720. BEGIN
  721.   IF (SAAScheduler.Init) AND (PLPtr<>NIL) THEN
  722.     PickL := PLPtr
  723.   ELSE
  724.     Fail;
  725. END;
  726.  
  727. PROCEDURE PickListSched.Display;
  728. BEGIN
  729.   SAAScheduler.Display;
  730.   PickL^.Display;
  731. END;
  732.  
  733. PROCEDURE PickListSched.DisplayHotKeys;
  734. BEGIN
  735.   SAAScheduler.Display;
  736.   PickL^.DisplayHotKey;
  737. END;
  738.  
  739. PROCEDURE PickListSched.Add (Item : StringPtr);
  740. BEGIN
  741.   PickL^.Add (Item);
  742.   ItemNum := PickL^.GetItemNum;
  743. END;
  744.  
  745. PROCEDURE PickListSched.CheckEvent (VAR Ev : EventObj);
  746.   VAR Answer : BYTE;
  747. BEGIN
  748.   SAAScheduler.CheckEvent (Ev);
  749.   IF ReturnCode=SchEvNotMine THEN BEGIN
  750.     PickL^.CheckEvent (Ev);
  751.     Answer := PickL^.GetReturnCode;
  752.     IF Answer=ItSelected THEN
  753.       ReturnCode := SchFinish;
  754.     IF Answer=ItEvAccepted THEN
  755.       ReturnCode := SchEvAccepted;
  756.   END;
  757. END;
  758.  
  759. PROCEDURE PickListSched.SetActive;
  760. BEGIN
  761.   SAAScheduler.SetActive;
  762.   PickL^.SetActive;
  763. END;
  764.  
  765. PROCEDURE PickListSched.SetPassive;
  766. BEGIN
  767.   SAAScheduler.SetPassive;
  768.   PickL^.SetPassive;
  769. END;
  770.  
  771. PROCEDURE PickListSched.SetXYRel (dx, dy : INTEGER);
  772. BEGIN
  773.   PickL^.SetXYRel (dx, dy);
  774. END;
  775.  
  776. PROCEDURE PickListSched.SaveConfiguration;
  777. BEGIN
  778.   PickL^.SaveConfiguration;
  779. END;
  780.  
  781. PROCEDURE PickListSched.RestoreConfiguration;
  782. BEGIN
  783.   PickL^.RestoreConfiguration;
  784. END;
  785.  
  786. PROCEDURE PickListSched.ClearList;
  787. BEGIN
  788.   PickL^.ClearList;
  789. END;
  790.  
  791. PROCEDURE PickListSched.MakeList;
  792. BEGIN
  793. END;
  794.  
  795. FUNCTION PickListSched.GetResult : STRING;
  796. BEGIN
  797.   GetResult := PickL^.GetResult;
  798. END;
  799.  
  800. DESTRUCTOR PickListSched.Done;
  801. BEGIN
  802.   SAAScheduler.Done;
  803.   Dispose (PickL, Done);
  804. END;
  805.  
  806. (* ───────────────────────────────────────────────────── *)
  807. (*             Implementation von FileList               *)
  808. (* ───────────────────────────────────────────────────── *)
  809. PROCEDURE FileList.MakeList (Path, Mask : STRING;
  810.                              Attr : BYTE);
  811.   VAR FileInfo : SearchRec;
  812. BEGIN
  813.   ClearList;
  814.   Dos.FindFirst (Path+'\'+Mask, Attr, FileInfo);
  815.   WHILE Dos.DosError=0 DO BEGIN
  816.     IF (FileInfo.Name<>'.') THEN
  817.       IF FileInfo.Name='..' THEN
  818.         Add (New (StringPtr,
  819.                   Init ('  ..')))
  820.       ELSE BEGIN
  821.         Add (New (StringPtr,
  822.                   Init (FormatFileName
  823.                          (FileInfo.Name))));
  824.       END;
  825.     Dos.FindNext (FileInfo);
  826.   END;
  827. END;
  828.  
  829. FUNCTION FileList.FormatFileName (Name:STRING):STRING;
  830.   VAR FDir : DirStr;
  831.       FName: NameStr;
  832.       FExt : ExtStr;
  833. BEGIN
  834.   Dos.FSplit (Name, FDir, FName, FExt);
  835.   WHILE Length (FName)<8 DO
  836.     FName := FName+' ';
  837.   Delete (FExt, 1, 1);
  838.   IF FExt<>'' THEN
  839.     FormatFileName := '  '+FName+' . '+FExt
  840.   ELSE
  841.     FormatFileName := '  '+FName+'   '+FExt;
  842. END;
  843.  
  844. (* ───────────────────────────────────────────────────── *)
  845. (*                Implementation von DirList             *)
  846. (* ───────────────────────────────────────────────────── *)
  847. PROCEDURE DirList.MakeList (Path  : STRING);
  848.   VAR FileInfo : SearchRec;
  849. BEGIN
  850.   ClearList;
  851.   Dos.FindFirst (Path+'\*.*', Directory, FileInfo);
  852.   WHILE Dos.DosError=0 DO BEGIN
  853.     IF (FileInfo.Attr AND Directory)>0 THEN
  854.       IF (FileInfo.Name<>'.') THEN
  855.         IF FileInfo.Name='..' THEN
  856.           Add (New (StringPtr,
  857.                     Init ('  ..')))
  858.         ELSE BEGIN
  859.           Add (New (StringPtr,
  860.                     Init (FormatFileName
  861.                            (FileInfo.Name))));
  862.         END;
  863.     Dos.FindNext (FileInfo);
  864.   END;
  865. END;
  866.  
  867. END.
  868. (* ----------------------------------------------------- *)
  869. (*                 Ende von DBXSCHED.PAS                 *)
  870. (* ----------------------------------------------------- *)
  871.