home *** CD-ROM | disk | FTP | other *** search
- 18-Jun-88 14:34:31-MDT,17678;000000000000
- Return-Path: <u-lchoqu%sunset@cs.utah.edu>
- Received: from cs.utah.edu by SIMTEL20.ARPA with TCP; Sat, 18 Jun 88 14:34:03 MDT
- Received: by cs.utah.edu (5.54/utah-2.0-cs)
- id AA22333; Sat, 18 Jun 88 14:34:05 MDT
- Received: by sunset.utah.edu (5.54/utah-2.0-leaf)
- id AA24673; Sat, 18 Jun 88 14:34:01 MDT
- Date: Sat, 18 Jun 88 14:34:01 MDT
- From: u-lchoqu%sunset@cs.utah.edu (Lee Choquette)
- Message-Id: <8806182034.AA24673@sunset.utah.edu>
- To: rthum@simtel20.arpa
- Subject: ListMgrExample.p.shar
-
- #! /bin/sh
- #
- # This is a shell archive. Save this into a file, edit it
- # and delete all lines above this comment. Then give this
- # file to sh by executing the command "sh file". The files
- # will be extracted into the current directory owned by
- # you with default permissions.
- #
- # The files contained herein are:
- #
- # 15 ListMgrExample.p
- # 2 ListMgrExample.r
- #
- echo 'Extracting ListMgrExample.p'
- if test -f ListMgrExample.p; then echo 'shar: will not overwrite ListMgrExample.p'; else
- cat << '________This_Is_The_END________' > ListMgrExample.p
- {$X-}
- {This is list/Test.text, an example program which uses the List Manager}
- PROGRAM Test;
-
- USES {$U-}
- {$U Obj/Memtypes } Memtypes,
- {$U Obj/QuickDraw } QuickDraw,
- {$U Obj/OSIntf } OSIntf,
- {$U Obj/ToolIntf } ToolIntf,
- {$U Obj/PackIntf } PackIntf,
- {$U Obj/ListIntf } ListIntf;
-
- CONST
- appleMenu = 1; { menu ID for desk accessory menu }
- fileMenu = 256; { menu ID for File menu }
- editMenu = 257; { menu ID for Edit menu }
- mungeMenu = 258; { munu for rows and columns }
- selectMenu = 259;
- MakeNewMenu = 260; { menu to set up new window }
- lastMenu = 6; { the number of menus }
-
- len255 = 255;
-
- VAR
- myMenus: ARRAY [1..lastMenu] OF MenuHandle;
- dragRect,r,b,sizeLimits: Rect;
- doneFlag,temp,sHoriz,sVert,groBox,drawIt: BOOLEAN;
- myEvent: EventRecord;
- code,refNum,i,j: INTEGER;
- wRecord: WindowRecord;
- myWindow,whichWindow: WindowPtr;
- theMenu,theItem: INTEGER;
- myList: ListHandle;
- c,cc: Cell;
- CellName,cutStr,iStr,jStr: str255;
- cutStrLen :INTEGER;
- h1,h2: handle;
- x: OSErr;
- cSize: Point;
- theMark: char;
- tFlag: INTEGER;
- tempFlags, newSize: LONGINT;
-
-
- PROCEDURE CellValue( var c: Cell; h,v: INTEGER);
- BEGIN
- c.h := h;
- c.v := v;
- END;
-
- PROCEDURE ClrAllCells;
- VAR c: cell;
- BEGIN CellValue(c,0,0);
- WHILE LGetSelect(TRUE,c,myList) DO { get next selected cell }
- LSetSelect(FALSE,c,myList); { and deselect it }
- END;
-
- PROCEDURE SetCell( c: Cell );
- VAR iStr,jStr: str255;
- BEGIN
- NumToString(c.h,iStr);
- NumToString(c.v,jStr);
- cellName:= concat('Cell ',jStr,',',iStr);
- LSetCell(POINTER(ORD(@CellName)+1),LENGTH(cellName),c,myList);
- END;
-
- PROCEDURE SetCellValues; { number all the cells in the array}
- VAR c: cell;
- BEGIN
- CellValue(c,0,0);
- REPEAT SetCell(c);
- UNTIL NOT LNextCell(TRUE,TRUE,c,myList); { increment v and h }
- END;
-
- FUNCTION CountSelections: INTEGER;
- VAR c: cell;
- i: INTEGER;
- BEGIN CellValue(c,0,0); i := 0;
- REPEAT IF LGetSelect(TRUE,c,myList) THEN i:=i+1;
- UNTIL NOT LNextCell(TRUE,TRUE,c,myList);
- countSelections := i;
- END;
-
- PROCEDURE FlipSelections;
- { A little razzle-dazzle to test double-click }
- VAR c: cell;
- i,flipStrLen: INTEGER;
- flipStr: Str255;
- a: char;
- b: BOOLEAN;
- BEGIN CellValue(c,0,0);
- {WHILE LGetSelect(TRUE,c,myList) DO}
- c:=LLastClick(myList);
- BEGIN flipStrLen := 255;
- LGetCell(POINTER(ORD(@flipStr)+1),flipStrLen,c,myList);
- FOR i := 1 TO flipStrLen DIV 2 DO BEGIN
- a := flipStr[i];
- flipStr[i] := flipStr[flipStrLen-i+1];
- flipStr[flipStrLen-i+1] := a;
- END;
- LSetCell(POINTER(ORD(@flipStr)+1),flipStrLen,c,myList);
- b := LNextCell(TRUE,TRUE,c,myList);
- END; { while }
- END;
-
- PROCEDURE SetUpMenus;
- { Once-only initialization for menus }
-
- VAR
- i: INTEGER;
-
- BEGIN
- InitMenus; { initialize Menu Manager }
- myMenus[1] := GetMenu(appleMenu);
- AddResMenu(myMenus[1],'DRVR'); { desk accessories }
- myMenus[2] := GetMenu(fileMenu);
- myMenus[3] := GetMenu(editMenu);
- myMenus[4] := GetMenu(mungeMenu);
- myMenus[5] := GetMenu(selectMenu);
- myMenus[6] := GetMenu(makeNewMenu);
- FOR i := 1 TO lastMenu DO InsertMenu(myMenus[i],0);
- DrawMenuBar;
- END; { of SetUpMenus }
-
- PROCEDURE CloseTheList;
- BEGIN
- IF myList^ <> NIL THEN BEGIN
- LDispose(myList);
- CloseWindow(myWindow);
- myList^ := NIL;
- myWindow := NIL;
- END;
- END; { closeTheList }
-
- PROCEDURE OpenNewList;
- BEGIN
- myWindow := GetNewWindow(256,@wRecord,POINTER(-1));
- SetPort(myWindow);
- r := myWindow^.portRect;
- { because drawGrowIcon draws lines for both scrollbars, we must leave room }
- { for both of them if we have a grow box (oh well...) }
- IF sVert OR groBox THEN r.right := r.right-15; { room for vert scroll bar }
- IF sHoriz OR groBox THEN r.bottom := r.bottom-15; { leave room for horiz scroll bar }
- SetRect(b,0,0,10,50); { make room for 10*50 items }
- csize.v := (r.bottom-r.top) DIV 16; { 16 rows }
- csize.h := (r.right-r.left) DIV 5; { and 5 columns }
- { make a list with content r, bounds b, proc 0, and two scrollbars; drawing false}
- myList := LNew(r,b,cSize,0,myWindow,FALSE,groBox,sHoriz,sVert);
- SetCellValues; { number all the cells }
- LDoDraw(drawIt,MyList); { set draw state for update }
- END;
-
- PROCEDURE DoCommand(mResult: LongInt);
-
- VAR
- name: STR255;
- i,temp: INTEGER;
- c: cell;
- b: BOOLEAN;
-
- BEGIN
- theMenu := HiWord(mResult); theItem := LoWord(mResult);
- CASE theMenu OF
-
- appleMenu:
- BEGIN
- GetItem(myMenus[1],theItem,name);
- refNum := OpenDeskAcc(name);
- END;
-
- fileMenu: doneFlag := TRUE; { Quit }
-
- editMenu:
- IF NOT SystemEdit(theItem-1) THEN
- BEGIN
- SetPort(myWindow);
- CellValue(cc,0,0);
- CASE theItem OF
- {cut}
- 3: WHILE LGetSelect(TRUE,cc,myList) DO
- BEGIN cutStrLen := len255; {cut up to 255 chars}
- LGetCell(POINTER(ORD(@cutStr)+1),cutStrLen,cc,myList);
- LClrCell(cc,myList);
- b := LNextCell(TRUE,TRUE,cc,myList);
- END;
- {copy}
- 4: IF LGetSelect(TRUE,cc,myList)
- THEN BEGIN cutStrLen := len255; {copy up to 255 chars}
- LGetCell(POINTER(ORD(@cutStr)+1),cutStrLen,cc,myList);
- END;
- {paste}
- 5: WHILE LGetSelect(TRUE,cc,myList) DO
- BEGIN LSetCell(POINTER(ORD(@cutStr)+1),cutStrLen,cc,myList);
- b := LNextCell(TRUE,TRUE,cc,myList);
- END;
- 6: IF LSearch(POINTER(ORD(@cutStr)+1),cutStrLen,NIL,cc,myList)
- THEN BEGIN ClrAllCells;
- LSetSelect(TRUE,cc,myList);
- LAutoScroll(myList);
- END;
- 7: BEGIN ClrAllCells;
- WHILE LSearch(POINTER(ORD(@cutStr)+1),cutStrLen,NIL,cc,myList) DO
- BEGIN LSetSelect(TRUE,cc,myList);
- b := LNextCell(TRUE,TRUE,cc,myList);
- END;
- END;
- END; { of item case }
- END; { of editMenu }
-
- mungeMenu:
- BEGIN
- CellValue(c,0,0); {search for first selected cell}
- IF NOT LGetSelect(TRUE,c,myList) THEN
- CellValue(c,myList^^.dataBounds.right, myList^^.dataBounds.bottom);
- CASE theItem OF
- 1: BEGIN c.h := countSelections; IF c.h = 0 THEN c.h := 1;
- c.v:=LAddRow(c.h,c.v,myList);
- c.h := 0;
- REPEAT SetCell(c);
- UNTIL NOT LNextCell(TRUE,FALSE,c,myList); { increment h }
- END;
- 2: LDelRow(CountSelections,c.v,myList);
- 3: BEGIN c.v := countSelections; IF c.v = 0 THEN c.v := 1;
- c.h:=LAddColumn(c.v,c.h,myList);
- c.v := 0;
- REPEAT SetCell(c);
- UNTIL NOT LNextCell(FALSE,TRUE,c,myList); { increment v }
- END;
- 4: LDelColumn(CountSelections,c.h,myList);
- 5: ClrAllCells;
- 6: BEGIN LDoDraw(FALSE,myList); SetCellValues; LDoDraw(drawIt,myList);
- InvalRect(myWindow^.portRect) END;
- 7: InvalRect(myWindow^.portRect);
- END; {of case}
- END; { of mungeMenu }
-
- selectMenu:
- BEGIN GetItemMark(myMenus[5],theItem,theMark);
- tempFlags := ORD(myList^^.selFlags);
- IF ORD(theMark) = checkMark
- THEN BEGIN theMark := CHR(0);
- ClearBit(tempFlags,theItem-1) END
- ELSE BEGIN theMark := CHR(checkMark);
- SetBit(tempFlags,theItem-1) END;
- SetItemMark(myMenus[5],theItem,theMark);
- tFlag := loWord(tempFlags);
- myList^^.selFlags := BYTE(tFlag);
- END; { of selectMenu }
-
- makeNewMenu:
- BEGIN GetItemMark(myMenus[6],theItem,theMark);
- CASE theItem OF
- 1: BEGIN closeTheList; openNewList END;
- 2: IF ORD(theMark) = checkMark
- THEN BEGIN theMark := CHR(0); SHoriz:=FALSE END
- ELSE BEGIN theMark := CHR(checkMark); SHoriz:=TRUE END;
- 3: IF ORD(theMark) = checkMark
- THEN BEGIN theMark := CHR(0); SVert:= FALSE END
- ELSE BEGIN theMark := CHR(checkMark); SVert:=TRUE END;
- 4: IF ORD(theMark) = checkMark
- THEN BEGIN theMark := CHR(0); GroBox:=FALSE END
- ELSE BEGIN theMark := CHR(checkMark); GroBox:=TRUE END;
- 5: IF ORD(theMark) = checkMark
- THEN BEGIN theMark := CHR(0); drawIt:=FALSE; LDoDraw(drawIt,myList) END
- ELSE BEGIN theMark := CHR(checkMark); drawIt:=TRUE; LDoDraw(drawIt,myList) END;
- END; {case}
- SetItemMark(myMenus[6],theItem,theMark)
- END; {newMenu}
-
- END; { of menu case }
-
- HiliteMenu(0);
-
- END; { of DoCommand }
-
- BEGIN { main program }
- InitGraf(@thePort);
- InitFonts;
- FlushEvents(everyEvent,0);
- InitWindows;
- SetUpMenus;
- TEInit;
- InitDialogs(NIL);
- InitCursor;
-
- InitPack(0); { so list manager package gets initialized }
- h1 := GetResource('PACK',0);
- { x := MoveHHi(h1); HLock(h1); if you want to move it out of the way }
-
- sizeLimits.left := 60; { set minimum window size to 60x40}
- sizeLimits.top := 40;
- sizeLimits.right := 500; { and max size to 500x300 }
- sizeLimits.bottom := 300;
-
- doneFlag := FALSE; groBox:=FALSE; sHoriz:=FALSE; sVert:=FALSE; drawIt:=FALSE;
- cutStr := ''; cutStrLen := 0; { init string for cut/copy/paste }
- SetRect(dragRect,4,24,screenBits.bounds.right-4,screenBits.bounds.bottom-4);
-
- OpenNewList; { make a new window (myWindow) and a new list (myList) }
-
- REPEAT
- SystemTask;
- IF GetNextEvent(everyEvent,myEvent) THEN
- CASE myEvent.what OF
-
- mouseDown:
- BEGIN
- code := FindWindow(myEvent.where,whichWindow);
- CASE code OF
-
- inMenuBar: DoCommand(MenuSelect(myEvent.where));
-
- inSysWindow: SystemClick(myEvent,whichWindow);
-
- inDrag: DragWindow(whichWindow,myEvent.where,dragRect);
-
- inGoAway: IF TrackGoAway(myWindow,myEvent.where) THEN CloseTheList;
-
- inContent,inGrow:
- IF (code = inGrow) AND (groBox = TRUE) THEN BEGIN
- newSize := GrowWindow(whichWindow,myEvent.where,sizeLimits);
- IF newSize <> 0 THEN BEGIN
- SizeWindow(whichWindow,LoWord(newSize),HiWord(newSize),TRUE);
- i:=LoWord(newSize); IF sHoriz OR groBox THEN i:= i-15;
- j:=HiWord(newSize); IF sVert OR groBox THEN j:=j-15;
- LSize(i,j,myList);
- IF groBox THEN DrawGrowIcon(myWindow);
- END;
- END
- ELSE BEGIN
- IF whichWindow<>FrontWindow THEN
- SelectWindow(whichWindow)
- ELSE BEGIN
- GlobalToLocal(myEvent.where);
- IF LClick(myEvent.where, myEvent.Modifiers, myList)
- THEN BEGIN FlipSelections; {and invalidate next dclick }
- myList^^.clikTime := myList^^.clikTime - GetDblTime;
- END;
- END;
- END;
-
- END; { of code case }
- END; { of mouseDown }
-
- keyDown,autoKey:
- IF MyWindow = FrontWindow THEN;
-
- activateEvt:
- BEGIN LActivate(ODD(myEvent.modifiers),myList);
- IF groBox THEN DrawGrowIcon(myWindow);
- END;
-
- updateEvt:
- BEGIN
- IF myWindow <> NIL THEN BEGIN
- SetPort(myWindow);
- BeginUpdate(myWindow);
- IF groBox THEN DrawGrowIcon(myWindow);
- LUpdate(thePort^.visRgn,myList);
- EndUpdate(myWindow);
- END;
- END; { of updateEvt }
-
- END; { of event case }
-
- UNTIL doneFlag;
-
- CloseTheList;
- ExitToShell;
- END.
- ________This_Is_The_END________
- if test `wc -l < ListMgrExample.p` -ne 370; then
- echo 'shar: ListMgrExample.p was damaged during transit'
- echo ' (should have been 370 bytes)'
- fi
- fi ; : end of overwriting check
- echo 'Extracting ListMgrExample.r'
- if test -f ListMgrExample.r; then echo 'shar: will not overwrite ListMgrExample.r'; else
- cat << '________This_Is_The_END________' > ListMgrExample.r
- *
- *
- * TestR -- Resource input for List Manager Testing
- * EHB March 85
- *
- List/test.Rsrc
-
- Type MENU
- ,1
- \14
-
- ,256
- File
- Quit
-
- ,257
- Edit
- Undo
- (-
- Cut
- Copy
- Paste
- Find First
- Find All
-
- ,258
- Munge
- Add Row
- Delete Row
- Add Column
- Delete Column
- Clear Selections
- Renumber Cells
- Update List
-
- ,259
- Selections
- Unused Bit
- Don't Hilite Empty Cells
- Use Cell Sense
- No Rect Extend
- No Extend Select
- No Disjoint
- Drag Extend
- No Multiple Selections
-
- ,260
- New List
- New List
- Horiz. Scroll
- Vert. Scroll
- Grow Box
- Drawing On
- (Bounds Rect
- (View Rect
-
-
-
- Type WIND
- ,256
- A Sample
- 50 40 321 500
- Visible GoAway
- 0
- 0
-
-
- Type LDEF = WDEF
- obj/ldproc0,0
-
-
- Type TEST = STR
- ,0
- Test Version 1.0 - 4 June 85
-
- Type CODE
- List/testL,0
-
- Type DLOG
- ,128
- 100 100 190 400
- visible 1 nogoaway 0
- 200
-
-
- Type DITL
- ,200
- 3
- BtnItem Enabled
- 60 230 80 290
- OK
-
- StatText Disabled
- 15 20 36 300
- Enter the string to search for:
-
- EditText Enabled
- 35 20 56 300
-
-
-
-
-
- ________This_Is_The_END________
- if test `wc -l < ListMgrExample.r` -ne 103; then
- echo 'shar: ListMgrExample.r was damaged during transit'
- echo ' (should have been 103 bytes)'
- fi
- fi ; : end of overwriting check
- exit 0
-