1 line
5.9 KiB
C
1 line
5.9 KiB
C
// ===========================================================================
|
|
// UAMDLOGText.c Š 1997 Microsoft Corp. All rights reserved.
|
|
// ===========================================================================
|
|
// Utilities for maintaining a scrolling text field in a dialog.
|
|
//
|
|
// ===========================================================================
|
|
|
|
#include <ControlDefinitions.h>
|
|
|
|
#include "UAMDLOGUtils.h"
|
|
#include "UAMDLOGText.h"
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// Ľ UAM_AdjustText()
|
|
// ---------------------------------------------------------------------------
|
|
|
|
void UAM_AdjustText(ControlHandle theScrollBar)
|
|
{
|
|
DialogPtr dialog;
|
|
TEHandle dTE;
|
|
short scrollValue;
|
|
char saveState;
|
|
|
|
dialog = (*theScrollBar)->contrlOwner;
|
|
dTE = UAM_DLOG(dialog).dialogTE;
|
|
|
|
saveState = HGetState((Handle)dTE);
|
|
HLock((Handle)dTE);
|
|
|
|
scrollValue = GetControlValue( theScrollBar);
|
|
UAM_DLOG(dialog).deltaV = Abs(UAM_DLOG(dialog).vOffset) - scrollValue;
|
|
UAM_DLOG(dialog).vOffset = scrollValue;
|
|
|
|
if (UAM_DLOG(dialog).deltaV)
|
|
TEScroll(0, UAM_DLOG(dialog).deltaV, dTE);
|
|
|
|
UAM_DLOG(dialog).deltaV = 0;
|
|
|
|
HSetState((Handle)dTE, saveState);
|
|
}
|
|
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// Ľ UAM_ScrollText()
|
|
// ---------------------------------------------------------------------------
|
|
|
|
pascal void UAM_ScrollText(ControlHandle theControl, short thePart)
|
|
{
|
|
short delta, newValue;
|
|
short ctlMin, ctlMax;
|
|
UInt32 tix;
|
|
DialogPtr dialog;
|
|
Rect r;
|
|
|
|
dialog = (*theControl)->contrlOwner;
|
|
r = (*(UAM_DLOG(dialog).dialogTE))->viewRect;
|
|
|
|
switch(thePart)
|
|
{
|
|
case kControlUpButtonPart:
|
|
delta = -16;
|
|
break;
|
|
case kControlDownButtonPart:
|
|
delta = 16;
|
|
break;
|
|
case kControlPageUpPart:
|
|
delta = Min(-(r.bottom - r.top) / 2, -1);
|
|
Delay(10, &tix);
|
|
break;
|
|
case kControlPageDownPart:
|
|
delta = Max((r.bottom - r.top) / 2, 1);
|
|
Delay(10, &tix);
|
|
break;
|
|
default:
|
|
return;
|
|
break;
|
|
}
|
|
|
|
newValue = GetControlValue( theControl) + delta;
|
|
|
|
ctlMax = GetControlMaximum( theControl);
|
|
ctlMin = GetControlMinimum( theControl);
|
|
|
|
if (newValue > ctlMax)
|
|
newValue = ctlMax;
|
|
else if (newValue < ctlMin)
|
|
newValue = ctlMin;
|
|
|
|
SetControlValue( theControl, newValue);
|
|
UAM_AdjustText( theControl);
|
|
}
|
|
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// Ľ UAM_SetScrollBar()
|
|
// ---------------------------------------------------------------------------
|
|
|
|
void UAM_SetScrollBar(ControlHandle theScrollBar)
|
|
{
|
|
short theHeight;
|
|
DialogPtr dialog;
|
|
Rect winRect;
|
|
TEHandle dTE;
|
|
|
|
dialog = (*theScrollBar)->contrlOwner;
|
|
dTE = UAM_DLOG(dialog).dialogTE;
|
|
winRect = UAM_DLOG(dialog).dialogTERect;
|
|
|
|
theHeight = TEGetHeight( (*dTE)->nLines, 0, dTE);
|
|
|
|
if (theHeight > (winRect.bottom - winRect.top))
|
|
SetControlMaximum( theScrollBar, (theHeight - (winRect.bottom - winRect.top)));
|
|
else {
|
|
SetControlValue( theScrollBar, 0);
|
|
SetControlMaximum( theScrollBar, 0);
|
|
}
|
|
}
|
|
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// Ľ UAM_UpdateText()
|
|
// ---------------------------------------------------------------------------
|
|
|
|
void UAM_UpdateText(DialogPtr dialog)
|
|
{
|
|
Rect r;
|
|
|
|
r = UAM_DLOG(dialog).dialogTERect;
|
|
InsetRect(&r, textMargin, textMargin);
|
|
TEUpdate(&r, UAM_DLOG(dialog).dialogTE);
|
|
FrameRect(&UAM_DLOG(dialog).dialogTERect);
|
|
}
|
|
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// Ľ UAM_FixText()
|
|
// ---------------------------------------------------------------------------
|
|
|
|
void UAM_FixText(DialogPtr dialog)
|
|
{
|
|
TEHandle dTE;
|
|
char saveState;
|
|
|
|
dTE = UAM_DLOG(dialog).dialogTE;
|
|
|
|
saveState = HGetState((Handle)dTE);
|
|
HLock((Handle)dTE);
|
|
|
|
(*dTE)->viewRect = UAM_DLOG(dialog).dialogTERect;
|
|
|
|
(*dTE)->viewRect.right = (*dTE)->viewRect.right;
|
|
(*dTE)->viewRect.bottom = (*dTE)->viewRect.bottom;
|
|
|
|
InsetRect( &((*dTE)->viewRect), textMargin, textMargin);
|
|
(*dTE)->destRect = (*dTE)->viewRect;
|
|
|
|
TECalText( dTE);
|
|
|
|
HSetState((Handle)dTE, saveState);
|
|
}
|
|
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// Ľ UAM_SetSText()
|
|
// ---------------------------------------------------------------------------
|
|
|
|
void UAM_SetSText(DialogPtr dialog, short textID)
|
|
{
|
|
Handle textHndl;
|
|
Rect r;
|
|
StScrpHandle hST;
|
|
|
|
textHndl = Get1Resource('TEXT', textID);
|
|
|
|
if (textHndl != NULL)
|
|
{
|
|
HLock((Handle)UAM_DLOG(dialog).dialogTE);
|
|
HLock(textHndl);
|
|
|
|
r = UAM_DLOG(dialog).dialogTERect;
|
|
InsetRect(&r, textMargin, textMargin);
|
|
EraseRect(&r);
|
|
InvalRect(&r);
|
|
|
|
TESetText(*textHndl, GetHandleSize(textHndl), UAM_DLOG(dialog).dialogTE);
|
|
|
|
hST = (StScrpHandle)Get1Resource('styl', textID);
|
|
if (hST != NULL) {
|
|
HidePen();
|
|
TEUseStyleScrap( 0, 32767, hST, TRUE, UAM_DLOG(dialog).dialogTE);
|
|
ShowPen();
|
|
}
|
|
|
|
UAM_DLOG(dialog).vOffset = 0;
|
|
UAM_DLOG(dialog).deltaV = 0;
|
|
|
|
SetControlValue(UAM_DLOG(dialog).scrollBar, 0);
|
|
UAM_FixText(dialog);
|
|
UAM_AdjustText(UAM_DLOG(dialog).scrollBar);
|
|
|
|
UAM_SetScrollBar( UAM_DLOG(dialog).scrollBar);
|
|
|
|
HUnlock((Handle)UAM_DLOG(dialog).dialogTE);
|
|
HUnlock(textHndl);
|
|
|
|
ReleaseResource(textHndl);
|
|
ReleaseResource((Handle)hST);
|
|
}
|
|
}
|
|
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// Ľ UAM_MakeText()
|
|
// ---------------------------------------------------------------------------
|
|
|
|
void UAM_MakeText(DialogPtr dialog, short textItem, short scrollItem, short textID)
|
|
{
|
|
Rect textRect, r;
|
|
|
|
UAM_DLOG(dialog).dialogTERect = UAM_GetItemRect(dialog, textItem);
|
|
textRect = UAM_DLOG(dialog).dialogTERect;
|
|
|
|
UAM_DLOG(dialog).hasScrollBar = TRUE;
|
|
|
|
InsetRect(&textRect, textMargin, textMargin);
|
|
UAM_DLOG(dialog).dialogTE = TEStyleNew(&textRect, &textRect);
|
|
|
|
r = UAM_GetItemRect(dialog, scrollItem);
|
|
UAM_DLOG(dialog).scrollBar = NewControl(dialog, &r, "\p", TRUE, 0, 0, 0, 16, 0);
|
|
UAM_SetUpUserItem(dialog, scrollItem, (UserItemUPP)UAM_DLOG(dialog).scrollBar, ctrlItem);
|
|
|
|
UAM_SetSText(dialog, textID);
|
|
} |