/* Copyright (c) 2017, Computer History Museum All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted (subject to the limitations in the disclaimer below) provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Computer History Museum nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "boxact.h" #define FILE_NUM 5 /* Copyright (c) 1990-1992 by the University of Illinois Board of Trustees */ #pragma segment Boxes /********************************************************************** * Private prototypes **********************************************************************/ // Drawing void InvertSum(TOCHandle tocH,short sumNum,Boolean forActivate); void BoxCenter(MyWindowPtr win, short mNum); void BoxSizeBox(MyWindowPtr win,Rect *r,TOCHandle tocH); short BoxPreviewHeightWish(TOCHandle tocH); void BoxZoomSize(MyWindowPtr win,Rect *zoom); void InvertSumByColumns(TOCHandle tocH,Rect *r); Boolean BoxDrawerUseless(MyWindowPtr win, short *left, short *right); // Clicking void BoxTrack(TOCHandle tocH,int anchor,Boolean shift); Boolean BoxDragDividers(Point pt, MyWindowPtr win); Boolean BoxFindDivider(Point pt,short *which); TOCHandle TOCHUnder(Point pt); void BoxSetPreview(MyWindowPtr win,Boolean openIt); void BoxDragPreviewDivider(TOCHandle tocH,Point pt); Boolean BoxListKey(MyWindowPtr win, EventRecord *event); Boolean BoxPreviewKey(MyWindowPtr win, EventRecord *event); void BoxConConProfControl(TOCHandle tocH,ControlHandle cntl,Point pt); // Dragging OSErr BoxDrop(MyWindowPtr win, DragReference drag); RgnHandle BoxBuildDragRgn(TOCHandle tocH); void BoxDroppedOn(TOCHandle origTocH,MessHandle messH,Point pt); OSErr BoxMessDragSendLo(FlavorType flavor, void *dragSendRefCon, DragReference drag, TOCHandle tocH,short sumNum); // Menus void BoxPriorMenu(TOCHandle tocH,short mNum,Point pt); void BoxServerMenu(TOCHandle tocH,short mNum,Point pt); void BoxStateMenu(TOCHandle tocH,short mNum,Point pt); void BoxMailboxMenu(TOCHandle tocH,short mNum,Point pt); void BoxAttachMenu(TOCHandle tocH,short mNum,Point pt); void BoxBuildConConProfMenu(TOCHandle tocH,ControlHandle cntl); // Misc void DoSaveSelectedAs(TOCHandle tocH); void SizeBoxClick(MyWindowPtr win,short modifiers); OSErr CopySummary(TOCHandle tocH, short sumNum, Handle into); void BoxType2Select(TOCHandle tocH,PStr string); OSErr CopySelectedSummaries(TOCHandle tocH); short BoxCountSelected(TOCHandle tocH); void SetTAEScoreLo(TOCHandle tocH,short sumNum,short score); void OneAnalMess(TOCHandle tocH,short sumNum); OSErr BoxReply(TOCHandle tocH,short menu,short item,short modifiers); void BoxRefreshPreview(TOCHandle tocH); Boolean BoxRequestFocus(MyWindowPtr win, PETEHandle pte); PStr BoxCurAddr(MyWindowPtr win, PStr addr); // Sorting #define DisplayLength(sum) ((sum)->length-(sum)->bodyOffset+1023) #define EffectiveLength(sum) ((sum->flags&FLAG_SKIPPED) ? -1 K : ((sum->opts&OPT_JUSTSUB) ? -2 K : DisplayLength(sum))) void BoxToggleLaurence(TOCHandle tocH); void BoxCustomSort(TOCHandle tocH,short i); void SortTOCMenu(TOCHandle tocH, short item, Boolean reverse); void SortTOC(TOCHandle tocH, Boolean reverse, int (*compare)()); void SwapSum(MSumPtr sum1, MSumPtr sum2); short BoxLine2Item(short line); short BoxItem2Line(short item); void MBRemoveSort(TOCHandle tocH,short index); void MBAddSort(TOCHandle tocH,short index,Byte sortOrder); #define MBGetSort(tocH,index) (*tocH)->sorts[index-1] int (*FindMBSort(short item,Boolean reverse))(); int MBResortCompare(MSumPtr s1, MSumPtr s2); void MBResort(TOCHandle tocH); void MBSortHit(TOCHandle tocH, short index, Boolean reverse, Boolean extend); Boolean MBIsSticky(TOCHandle tocH); int SumSubjIdCompare(MSumPtr sum1, MSumPtr sum2); void BoxMakePreview(MyWindowPtr win); short BoxSizeWidth(TOCHandle tocH); void SetPriorityLo(TOCHandle tocH,short sumNum,short priority); long MyPopupMenuSelect(MyWindowPtr win,MenuHandle mh,Point where,short item); #define NSORT (sizeof((*tocH)->sorts)/sizeof(Byte)) #define SORTER(what) int Sum##what##Compare(MSumPtr,MSumPtr); int RevSum##what##Compare(MSumPtr,MSumPtr) SORTER(Time); SORTER(Stat); SORTER(Junk); SORTER(Att); SORTER(Size); SORTER(Prior); SORTER(Subj); SORTER(SubjTimed); SORTER(From); SORTER(Offset); SORTER(Label); SORTER(SizeK); SORTER(TimeFuzz); SORTER(Select); SORTER(Mailbox); SORTER(Anal); #define SORT_BUTTON_WIDE 11 #define kHeaderButtonHeight (GROW_SIZE+5) #define kTabHeight 25 #define kTabGap 2 #define kLargeUniqueValue 0x7f7f7f7f short BoxPreviewHeight(TOCHandle tocH); pascal OSErr MessDragSend(FlavorType flavor, void *dragSendRefCon, ItemReference theItemRef, DragReference drag); pascal OSErr BoxDragSend(FlavorType flavor, void *dragSendRefCon, ItemReference theItemRef, DragReference drag); void HitTab(MyWindowPtr win,ControlHandle tabCntl,TOCHandle tocH); // globals TOCHandle gSortTOC; MyWindowPtr gDrawerOpenedWin; /************************************************************************ * BoxLimits - return the left and right sides of a particular mailbox * column. Values are NOT shifted according to scroll bars. Values are * in pixels, not character widths ************************************************************************/ short BoxLimits(BoxLinesEnum which,short *left,short *right,TOCHandle tocH) { short column; short wi; short i; *right = 0; for (i=1;;i++) { column = TOCInversionMatrix[0][i]; if (!BoxColumnShowing(column,tocH)) wi = 0; else { ASSERT(column > 0 && column