home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / PRECOM.ZIP / SAMPLE.ZIP / LSTBOX.MOD < prev    next >
Text File  |  1992-12-17  |  6KB  |  279 lines

  1. (*#debug (vid =>off) *)
  2. IMPLEMENTATION MODULE LstBox;
  3.  
  4. (*FROM GenLists IMPORT GenList,GetElmt,DisposeList,
  5.      ListLength,NewList,ListInsert,StrCode,GetElmtAdr,ListDelete; *)
  6. FROM Lists IMPORT Element,GenList,ElmtPntr;
  7. FROM OS2DEF IMPORT HWND;
  8. FROM FIO IMPORT Exists,Open,RdStr,IOresult,Close,File;
  9. FROM Str IMPORT Copy,Append,Pos,Length;
  10.  
  11.  
  12. CLASS IMPLEMENTATION StrElmt;
  13.   PROCEDURE Assign(AString : ARRAY OF CHAR);
  14.   BEGIN
  15.     Copy(TheStr,AString);
  16.   END Assign;
  17.  
  18.   PROCEDURE GetStr(VAR AString : ARRAY OF CHAR);
  19.   BEGIN
  20.     Copy(AString,TheStr);
  21.   END GetStr;
  22. BEGIN
  23. END StrElmt;
  24.  
  25. CLASS IMPLEMENTATION DropDownList;
  26. PROCEDURE AddElmt(VAR TheElmt : Element;Size : CARDINAL);
  27. BEGIN
  28.    ItemList.AddItem(TheElmt,Size);
  29. END AddElmt;
  30.  
  31.  PROCEDURE Initialize(FileName : ARRAY OF CHAR);
  32.  VAR
  33.    Error : CARDINAL;
  34.    F : File;
  35.    Str : ARRAY [0..80] OF CHAR;
  36.    E : StrElmt;
  37.  BEGIN
  38.  (*  NewList(ItemList);*)
  39.    ItemList.InitList;
  40.    IF Exists(FileName)
  41.      THEN
  42.         F := Open(FileName);
  43.         REPEAT
  44.           RdStr(F,Str);
  45.           E.Assign(Str);
  46.           ItemList.AddItem(E,SIZE(E));
  47.         UNTIL Str[0] = 0C;
  48.         Close(F);
  49.         (* Error := TextFileToList(FileName,ItemList); *)
  50.      END;
  51.    init := 12345;
  52.  END Initialize;
  53.  
  54.  
  55.  
  56. PROCEDURE AddScrItem( Str : ARRAY OF CHAR);
  57.  VAR
  58.     Reply : Win.MRESULT;
  59.     P1,P2 : Win.MPARAM;
  60.   BEGIN
  61.      P1 := Win.MAKELONG(Win.LIT_END,0);
  62.      P2 := Win.MPARAM(ADR(Str));
  63.      Reply := Win.SendMsg(hwnd, Win.LM_INSERTITEM,P1,P2);
  64.  
  65.   END AddScrItem;
  66.  
  67. PROCEDURE DeleteScrItem(ItemNbr : CARDINAL);
  68. VAR
  69.     Reply : Win.MRESULT;
  70.     P1,P2 : Win.MPARAM;
  71.   BEGIN
  72.      P1 := Win.MAKELONG(ItemNbr,0);
  73.      P2 := 0;
  74.      Reply := Win.SendMsg(hwnd, Win.LM_DELETEITEM,P1,P2);
  75. END DeleteScrItem;
  76.  
  77. PROCEDURE ClearItemScr();
  78.  VAR
  79.     Reply : Win.MRESULT;
  80.     P1,P2 : Win.MPARAM;
  81.   BEGIN
  82.      P1 := 0;
  83.      P2 := 0;
  84.      Reply := Win.SendMsg(hwnd, Win.LM_DELETEALL,P1,P2);
  85.  
  86. END ClearItemScr;
  87.  
  88.  
  89. PROCEDURE SelectFirst();
  90. VAR
  91.      Reply : Win.MRESULT;
  92.     P1,P2 : Win.MPARAM;
  93. BEGIN
  94.    P1 := 0;
  95.    P2 := Win.MAKELONG(ORD(TRUE),0);
  96.    Reply := Win.SendMsg(hwnd, Win.LM_SELECTITEM,P1,P2);
  97.  
  98. END SelectFirst;
  99.  
  100.  PROCEDURE SetSelected(J : CARDINAL);
  101.  VAR
  102.     Reply : Win.MRESULT;
  103.     P1,P2 : Win.MPARAM;
  104.  BEGIN
  105.    P1 := Win.MAKELONG(J-1,0);
  106.    P2 := Win.MAKELONG(ORD(TRUE),0);
  107.    Reply := Win.SendMsg(hwnd, Win.LM_SELECTITEM,P1,P2);
  108.  
  109.  
  110.  END SetSelected;
  111.  
  112.  PROCEDURE FillBox(ParentHwnd : HWND; ControlID : CARDINAL);
  113.  VAR
  114.    J,Code : CARDINAL;
  115.    Str : ARRAY[0..100] OF CHAR;
  116.    E : POINTER TO StrElmt;
  117.  
  118.  
  119.  BEGIN
  120.    Parent := ParentHwnd;
  121.    Id := ControlID;
  122.    hwnd := Win.WindowFromID(ParentHwnd,ControlID);
  123.    FOR J := 1 TO ItemList.ListLength() DO
  124.      ItemList.GetItemAdr(E,J);
  125.      E^.GetStr(Str);
  126.      AddScrItem(Str);
  127.    END;
  128.    SelectFirst();
  129.  END FillBox;
  130.  
  131.   PROCEDURE GetSelectedAdr(VAR  ObjPnt : ElmtPntr;
  132.                         VAR ItemNbr : CARDINAL);
  133.   VAR
  134.     Reply : Win.MRESULT;
  135.     P1,P2 : Win.MPARAM;
  136.     Size,Code  : CARDINAL;
  137.   BEGIN
  138.     Reply := Win.SendMsg(hwnd,Win.LM_QUERYSELECTION, P1,P2);
  139.     IF Reply <> Win.LIT_NONE
  140.       THEN
  141.         ItemList.GetItemAdr(ObjPnt,CARDINAL(Reply+1));
  142.         ItemNbr := CARDINAL(Reply);
  143.     END;
  144.  
  145.   END GetSelectedAdr;
  146.  
  147.   PROCEDURE GetSelected(VAR  Object : Element;
  148.                         VAR ItemNbr : CARDINAL);
  149.   VAR
  150.     Reply : Win.MRESULT;
  151.     P1,P2 : Win.MPARAM;
  152.     Size,Code  : CARDINAL;
  153.   BEGIN
  154.     Reply := Win.SendMsg(hwnd,Win.LM_QUERYSELECTION, P1,P2);
  155.     IF Reply <> Win.LIT_NONE
  156.       THEN
  157.         ItemList.GetItem(Object,CARDINAL(Reply+1));
  158.         ItemNbr := CARDINAL(Reply);
  159.     END;
  160.  
  161.   END GetSelected;
  162.  
  163.  PROCEDURE GetItemSize(Spot : CARDINAL):CARDINAL;
  164.  BEGIN
  165.    RETURN ItemList.GetItemSize(Spot);
  166.  END GetItemSize;
  167.  
  168.  PROCEDURE ReadBox( VAR Value : ARRAY OF CHAR);
  169.  VAR
  170.    ObjPnt : POINTER TO StrElmt;
  171.    J : CARDINAL;
  172.  BEGIN
  173.    GetSelectedAdr(ObjPnt,J);
  174.    ObjPnt^.GetStr(Value);
  175.  END ReadBox;
  176.  
  177.  PROCEDURE Initialized() : BOOLEAN;
  178.  BEGIN
  179.    RETURN init = 12345;
  180.  END Initialized;
  181.  
  182.  PROCEDURE Dispose();
  183.  BEGIN
  184.    ItemList.DisposeList();
  185.    init := 0;
  186.  END Dispose;
  187.  
  188. BEGIN
  189. END DropDownList;
  190.  
  191. (***********************************************************************)
  192. (*  uses most of the items in the drop down list                       *)
  193. (***********************************************************************)
  194.  
  195. CLASS IMPLEMENTATION ListBox;
  196.  
  197.     (* on double click get the address of the selected *)
  198.  
  199.  PROCEDURE DeleteItem(ItemNbr : CARDINAL);
  200.  
  201.  BEGIN
  202.     ItemList.DeleteItem(ItemNbr);
  203.  END DeleteItem;
  204.  
  205.  
  206.  
  207.       (* on multi select items - return list of selected *)
  208.   PROCEDURE GetSelectedLst( VAR Lst : ListBox);
  209.   BEGIN
  210.  
  211.   END GetSelectedLst;
  212.  
  213.   PROCEDURE GetItemAdr(VAR ItemPnt : ElmtPntr;ItemNbr : CARDINAL);
  214.   VAR
  215.     Code,Size : CARDINAL;
  216.   BEGIN
  217.     ItemList.GetItemAdr(ItemPnt,ItemNbr);
  218.   END GetItemAdr;
  219.  
  220.  PROCEDURE GetItemCnt() : CARDINAL;
  221.  BEGIN
  222.  
  223.    RETURN ItemList.ListLength();
  224.  END GetItemCnt;
  225.  
  226.  
  227.     (* user called routine to fill the genlists with objects *)
  228.   PROCEDURE FillList(VAR TheList : GenList);
  229.   BEGIN
  230.     ItemList := TheList;
  231.   END FillList;
  232.  
  233.  
  234.      (* user called routine to get a display line from an object *)
  235.   VIRTUAL PROCEDURE GetDisplayLine(ObjPnt : ADDRESS; VAR Str : ARRAY OF CHAR);
  236.  
  237.   (* this is the default service if the list is a list of strings *)
  238.  
  239.   TYPE
  240.     StrPnt = POINTER TO ARRAY[0..100] OF CHAR;
  241.   CONST
  242.     CR =  13C;
  243.   BEGIN
  244.  
  245.     Copy(Str, StrPnt(ObjPnt)^);  (* Assume string objects *)
  246.     IF Pos(Str,CR) < Length(Str)  (* was not terminated correct *)
  247.       THEN
  248.         Str[Pos(Str,CR)] := 0C;
  249.       END;
  250.   END GetDisplayLine;
  251.  
  252.  
  253.                            (*  delete an item from the screen list *)
  254. PROCEDURE DeleteItemScr( ItemNbr : CARDINAL);
  255. END DeleteItemScr;
  256.  
  257.  
  258.  
  259. (* redefinition OF dropdown list - TO also delete the item FROM list*)
  260. PROCEDURE DeleteScrItem(ItemNbr : CARDINAL; ListAlso : BOOLEAN);
  261. BEGIN
  262.   DropDownList.DeleteScrItem(ItemNbr);
  263.   ItemList.DeleteItem(ItemNbr + 1);
  264. END DeleteScrItem;
  265.  
  266.  
  267.  
  268.  
  269.  
  270. BEGIN
  271.  
  272. END ListBox;
  273.  
  274.  
  275.  
  276.  
  277. END LstBox.
  278. 
  279.