This is PageView.m in view mode; [Download] [Up]
/* Generated by Interface Builder */
#import "PageView.h"
#import "SheetView.h"
#import "appkit/Scroller.h"
#import "TeXviewObject.h"
#import "TVWindow.h"
#import <dpsclient/wraps.h>
#import "dviAccessors.h"
#import <strings.h>
#import <appkit/Application.h>
#import "ComScroll.h"
#import <appkit/TextField.h>
extern real screendpi ;
extern PageView *myPageView ;
extern Window *tvWindow ;
extern SheetView *myView ;
extern TeXviewObject *myTeXviewObject ;
extern shalfword rvvsize, rhhsize ;
extern Boolean mocked ;
extern Boolean startHidden ;
extern integer autostat ;
extern NXRect *initsizewindow() ;
extern initWasOnScreen() ;
extern void reportname() ;
extern void recalculate() ;
extern void PSflush(), TPSinit() ;
extern void makenewdoc() ;
const char *legit_types[] = { "dvi", "tex", "latex", "ltx", NULL } ;
@implementation PageView
+ newFrame:(const NXRect *)theFrame
{
NXRect tempRect ;
self = [super newFrame:theFrame];
[self setHorizScrollerRequired:YES];
[self setVertScrollerRequired:YES];
/* [self setDynamicScrolling:YES];
[self setBackgroundGray:0.433];
[self setAutoresizeSubviews:YES];
[self setBorderType:NX_NOBORDER]; */
myPageView = self ;
myOpenPanel = nil ;
NX_X(&tempRect) = 0 ;
NX_Y(&tempRect) = 0 ;
NX_WIDTH(&tempRect) = 1036 ;
NX_HEIGHT(&tempRect) = 1336 ;
myView = [SheetView newFrame:&tempRect] ;
[self setDocView:myView] ;
reportname(NOFILETITLE) ;
[[self window] setExcludedFromWindowsMenu:YES] ;
TPSinit() ;
recalculate() ;
return self;
}
- drawSelf:(NXRect *)rects :(int)rectCount
{
[super drawSelf:rects:rectCount] ;
return self ;
}
- setPageNum:anObject
{
pageNum = anObject ;
return self;
}
- setConsole:anObject
{
NXRect *tr ;
console = anObject ;
[[console window] setExcludedFromWindowsMenu:YES] ;
if (tr=initsizewindow(1)) {
[[(ComScroll *)console window] placeWindow:tr] ;
if (initWasOnScreen()) {
[[console window] orderFront:self] ;
} else {
[[console window] orderOut:self] ;
}
}
return self;
}
- getConsole
{
return console ;
}
- setTex:anObject
{
NXRect *tr ;
tex = anObject ;
[[tex window] setExcludedFromWindowsMenu:YES] ;
if (tr=initsizewindow(2)) {
[[(ComScroll *)tex window] placeWindow:tr] ;
if (initWasOnScreen()) {
[[tex window] orderFront:self] ;
} else {
[[tex window] orderOut:self] ;
}
}
return self;
}
- getTeX
{
return tex ;
}
- setCommand:anObject
{
NXRect *tr ;
command = anObject ;
[command setExcludedFromWindowsMenu:YES] ;
[command removeFromEventMask:(NX_KEYDOWNMASK | NX_KEYUPMASK)] ;
if (tr=initsizewindow(3)) {
[command moveTo:tr->origin.x:tr->origin.y] ;
if (initWasOnScreen()) {
[command orderFront:self] ;
} else {
[command orderOut:self] ;
}
}
return self;
}
- getCommand
{
return command ;
}
- setPageStuff:anObject
{
pageStuff = anObject ;
pageStuff = [pageStuff setContentView:nil] ;
[self addSubview:pageStuff] ;
[self tile] ;
return self ;
}
- getPageStuff;
{
return pageStuff ;
}
- setIconStuff:anObject
{
iconStuff = anObject ;
iconStuff = [iconStuff setContentView:nil] ;
return self ;
}
- getIconStuff;
{
return iconStuff ;
}
- tile
{
NXRect r1, r2 ;
Scroller *h ;
[super tile] ;
if (pageStuff == 0)
return self ;
h = [self horizScroller] ;
[h getFrame:&r2] ;
[pageStuff getFrame:&r1] ;
r2.size.width -= r1.size.width ;
r1.origin.x = r2.size.width + r2.origin.x ;
r1.origin.y = r2.origin.y ;
[h setFrame:&r2] ;
[pageStuff setFrame:&r1] ;
return self ;
}
- lastPage:sender
{
dviLastPage() ;
return self;
}
- openPanel
{
if (!myOpenPanel) myOpenPanel = [OpenPanel new];
return (myOpenPanel);
}
- update
{
if ([self needsDisplay])
[self display] ;
return self ;
}
- openFile:sender
{
if ([[self openPanel] runModalForTypes:legit_types])
dviOpenFile((char *)[[self openPanel] filename]) ;
return self;
}
- reOpenFile:sender
{
dviReOpenFile() ;
return self;
}
- nextPage:sender
{
dviNextPage() ;
return self;
}
- firstPage:sender
{
dviFirstPage() ;
return self;
}
- zoomUnzoom:sender
{
dviZoomUnzoom() ;
return self;
}
- mockUnmock:sender
{
dviMock(-1) ;
return self;
}
- hidUnhid:sender
{
dviHid([sender state]) ;
return self ;
}
- setHid:anObject
{
hid = anObject ;
[self upHid] ;
return self ;
}
- getHid
{
return hid ;
}
- upHid
{
[hid setState:startHidden] ;
return self ;
}
void uphid(void) {
[myPageView upHid] ;
}
- statUnstat:sender
{
dviStat([sender selectedRow]) ;
return self;
}
- mock:sender
{
dviMock(1) ;
return self ;
}
- unMock:sender
{
dviMock(0) ;
return self ;
}
- setMockSwitch:anObject
{
mockSwitch = anObject ;
[self upMock] ;
return self ;
}
- setStatSwitch:anObject
{
statSwitch = anObject ;
[self upStat] ;
return self ;
}
void upmock(void) {
[myPageView upMock] ;
}
- upMock {
[mockSwitch setState:mocked] ;
return self ;
}
void upstat(void) {
[myPageView upStat] ;
}
- upStat {
[statSwitch selectCellAt:autostat :0] ;
return self ;
}
- unzoom:sender
{
[myTeXviewObject unzoom] ;
dviUnzoom() ;
return self;
}
- prevPage:sender
{
dviPrevPage() ;
return self;
}
- zoom:sender
{
[myTeXviewObject zoom] ;
dviZoom() ;
return self;
}
- closeFile:sender
{
dviCloseFile() ;
return self;
}
- gotoPage:sender
{
dviGotoPage((char *)[sender stringValueAt:0]) ;
return self;
}
- fireRandom:sender
{
[myTeXviewObject firePage] ;
return self ;
}
void pagereport(pagenum, seq)
integer pagenum, seq ;
{
char str[30] ;
if (seq == 0)
sprintf(str, "%d", pagenum) ;
else
sprintf(str, "%d.%d", pagenum, seq) ;
[myTeXviewObject setPageNum:str] ;
PSflush() ;
}
char realnameoffile[255] ;
void reportname(s)
char *s ;
{
static char *oldname ;
if (s) {
oldname = s ;
if (*s != '*' || s[1] != ' ')
strcpy(realnameoffile, s) ;
else
realnameoffile[0] = 0 ;
} else
realnameoffile[0] = 0 ;
[[myPageView window] setTitleAsFilename:oldname] ;
}
- changeDPI:(id)sender
{
[myTeXviewObject popIt:sender] ;
return self ;
}
#define MILLION 1000000
static int lastxsize = MILLION, lastysize = MILLION ;
- noScrollUpdates
{
[myPageView setDisplayOnScroll:NO] ;
[myPageView setCopyOnScroll:NO] ;
return self ;
}
- scrollUpdates
{
[myPageView setDisplayOnScroll:YES] ;
[myPageView setCopyOnScroll:YES] ;
return self ;
}
- cachePosition:(int)x:(int)y
{
NXSize s ;
[self getContentSize:&s] ;
if (s.width + 16 > lastxsize)
xcache = 0.5 ;
else
xcache = [[self horizScroller] floatValue] ;
if (s.height + 16 > lastysize)
ycache = 0.5 ;
else
ycache = [[self vertScroller] floatValue] ;
if (lastxsize == MILLION) { /* cheat these values in */
xcache = 0.5 ;
ycache = 0.0 ;
}
return self ;
}
static float scroller_to_pos(float x1, float x2, float s) {
if (x2 < x1)
return s * (x1 - x2) ;
else
return 0 ;
}
- unCachePosition:(int)x:(int)y
{
NXSize size ;
NXPoint t ;
[self getContentSize:&size] ;
t.x = scroller_to_pos((float)x, size.width, xcache) ;
t.y = scroller_to_pos((float)y, size.height, 1.0-ycache) ;
[myView scrollPoint:&t] ;
lastxsize = x ;
lastysize = y ;
return self ;
}
/* moves down about a screenful. */
- (int)moveDown:(int)shiftstate;
{
NXSize s ;
NXPoint t ;
float ypos = [[self vertScroller] floatValue] ;
float xpos = [[self horizScroller] floatValue] ;
float f ;
shiftstate = 1 << (2 * shiftstate) ;
[self getContentSize:&s] ;
if (ypos > 0.95 || s.height + 16 >= rvvsize)
return 0 ;
if (2 * s.height < rvvsize)
f = s.height / (rvvsize - s.height) - 0.02 ;
else
f = 1.0 ;
if (f < 0.02)
f = 0.02 ;
f /= shiftstate ;
ypos += f ;
if (ypos > 1.0)
ypos = 1.0 ;
t.y = scroller_to_pos((float)rvvsize, s.height, 1.0 - ypos) ;
t.x = scroller_to_pos((float)rhhsize, s.width, xpos) ;
[myView scrollPoint:&t] ;
return 1 ;
}
/* moves up about a screenful. */
- (int)moveUp:(int)shiftstate;
{
NXSize s ;
NXPoint t ;
float ypos = [[self vertScroller] floatValue] ;
float xpos = [[self horizScroller] floatValue] ;
float f ;
shiftstate = 1 << (2 * shiftstate) ;
[self getContentSize:&s] ;
if (ypos < 0.05 || s.height + 16 >= rvvsize)
return 0 ;
if (2 * s.height < rvvsize)
f = s.height / (rvvsize - s.height) - 0.02 ;
else
f = 1.0 ;
if (f < 0.02)
f = 0.02 ;
f /= shiftstate ;
ypos -= f ;
if (ypos < 0.0)
ypos = 0.0 ;
t.y = scroller_to_pos((float)rvvsize, s.height, 1.0 - ypos) ;
t.x = scroller_to_pos((float)rhhsize, s.width, xpos) ;
[myView scrollPoint:&t] ;
return 1 ;
}
- (int)moveRight:(int)shiftstate
{
NXSize s ;
NXPoint t ;
float ypos = [[self vertScroller] floatValue] ;
float xpos = [[self horizScroller] floatValue] ;
float f ;
shiftstate = 1 << (2 * shiftstate) ;
[self getContentSize:&s] ;
if (s.width + 16 >= rhhsize)
return 0 ;
if (2 * s.width < rhhsize)
f = s.width / (rhhsize - s.width) - 0.02 ;
else
f = 1.0 ;
if (f < 0.02)
f = 0.02 ;
f /= shiftstate ;
xpos += f ;
if (xpos > 1.0)
xpos = 1.0 ;
t.y = scroller_to_pos((float)rvvsize, s.height, 1.0 - ypos) ;
t.x = scroller_to_pos((float)rhhsize, s.width, xpos) ;
[myView scrollPoint:&t] ;
return 1 ;
}
- (int)moveLeft:(int)shiftstate
{
NXSize s ;
NXPoint t ;
float ypos = [[self vertScroller] floatValue] ;
float xpos = [[self horizScroller] floatValue] ;
float f ;
shiftstate = 1 << (2 * shiftstate) ;
[self getContentSize:&s] ;
if (s.width + 16 >= rhhsize)
return 0 ;
if (2 * s.width < rhhsize)
f = s.width / (rhhsize - s.width) - 0.02 ;
else
f = 1.0 ;
if (f < 0.02)
f = 0.02 ;
f /= shiftstate ;
xpos -= f ;
if (xpos < 0.0)
xpos = 0.0 ;
t.y = scroller_to_pos((float)rvvsize, s.height, 1.0 - ypos) ;
t.x = scroller_to_pos((float)rhhsize, s.width, xpos) ;
[myView scrollPoint:&t] ;
return 1 ;
}
- Bot:(int)quiet;
{
NXSize s ;
NXPoint t ;
float xpos = [[self horizScroller] floatValue] ;
if (quiet)
[self noScrollUpdates] ;
[self getContentSize:&s] ;
t.y = scroller_to_pos((float)rvvsize, s.height, 0.0) ;
t.x = scroller_to_pos((float)rhhsize, s.width, xpos) ;
[myView scrollPoint:&t] ;
if (quiet)
[self scrollUpdates] ;
return self ;
}
- Top:(int)quiet;
{
NXSize s ;
NXPoint t ;
float xpos = [[self horizScroller] floatValue] ;
if (quiet)
[self noScrollUpdates] ;
[self getContentSize:&s] ;
t.y = scroller_to_pos((float)rvvsize, s.height, 1.0) ;
t.x = scroller_to_pos((float)rhhsize, s.width, xpos) ;
[myView scrollPoint:&t] ;
if (quiet)
[self scrollUpdates] ;
return self ;
}
void bringupwindow(void) {
NXRect *tr ;
if (tr = initsizewindow(0))
[[myPageView window] placeWindow:tr] ;
tvWindow = [myPageView window] ;
}
void upwindow(void) {
[[myPageView window] makeKeyAndOrderFront:0] ;
}
- setPositionText:anObject
{
positionText = anObject ;
return self ;
}
- setPositionRadio:anObject
{
positionRadio = anObject ;
return self ;
}
static float units[] = { 1.0, 2.54, 72.27, 72.0, 84.666667 } ;
static int curunits = 0 ;
static NXPoint posevent = {0.0, 0.0}, prevposevent = {0.0, 0.0} ;
static char *unitnames[] = { "inches", "centimeters", "points",
"PostScript units", "pico-light-seconds", 0 } ;
- changeUnits:sender
{
curunits = (curunits + 1) ;
if (unitnames[curunits] == 0)
curunits = 0 ;
[self updatePosition] ;
return self ;
}
- updatePosition
{
NXPoint pagepos ;
NXPoint deltapos ;
char tempbuf[300] ;
if (positionText && screendpi > 1.0) {
pagepos = posevent ;
deltapos = prevposevent ;
pagepos.x *= units[curunits] / screendpi ;
pagepos.y *= units[curunits] / screendpi ;
deltapos.x *= units[curunits] / screendpi ;
deltapos.y *= units[curunits] / screendpi ;
sprintf(tempbuf,
"Click at (%.3g,%.3g) is (%.3g,%.3g) from previous click in %s.",
pagepos.x, pagepos.y, pagepos.x - deltapos.x, pagepos.y - deltapos.y,
unitnames[curunits]) ;
[(TextField *)positionText setStringValue:tempbuf] ;
}
return self ;
}
- reportPosition:(NXEvent *)event
{
if (myView && positionText && screendpi > 1.0) {
prevposevent = posevent ;
posevent = (event->location) ;
posevent.x -= 8.0 ;
posevent.y -= 8.0 ;
[myView convertPoint:&posevent fromView:nil] ;
[self updatePosition] ;
}
return self ;
}
- mouseDown: (NXEvent *) ptr
{
NXPoint newLoc, oldLoc;
NXEvent *nextEvent;
int oldMask;
NXRect myRect;
int numdrags = 0 ;
oldMask =
[window addToEventMask:(NX_LMOUSEUPMASK | NX_LMOUSEDRAGGEDMASK)];
[self lockFocus];
oldLoc = ptr->location;
[self convertPoint:&oldLoc fromView:nil];
nextEvent =
[NXApp getNextEvent:(NX_LMOUSEUPMASK | NX_LMOUSEDRAGGEDMASK)];
while (nextEvent->type == NX_LMOUSEDRAGGED){
numdrags++ ;
newLoc = nextEvent->location;
[self convertPoint:&newLoc fromView:nil];
[myView getVisibleRect:&myRect];
myRect.origin.x -= newLoc.x - oldLoc.x;
myRect.origin.y += newLoc.y - oldLoc.y;
[myView scrollRectToVisible: &myRect];
oldLoc = newLoc;
nextEvent =
[NXApp getNextEvent:(NX_LMOUSEUPMASK | NX_LMOUSEDRAGGEDMASK)];
}
[self unlockFocus];
[window setEventMask:oldMask];
if (numdrags == 0)
[self reportPosition:nextEvent] ;
return self;
}
void writeconsole(const char *s) {
static char wcbuf[1024] ;
strcpy(wcbuf, s) ;
strcat(wcbuf, "\n") ;
[((ComScroll *)[myPageView getConsole]) addText:wcbuf] ;
}
void mysystem(const char *s) {
[((ComScroll *)[myPageView getConsole]) logCommand:s inBack:0] ;
}
void consoletofront() {
[[((ComScroll *)[myPageView getConsole]) window] makeKeyAndOrderFront:0] ;
}
void textofront() {
[[((ComScroll *)[myPageView getTeX]) window] makeKeyAndOrderFront:0] ;
}
void commandup() {
[[myPageView getCommand] orderFront:0] ;
}
void previewtofront() {
[[myPageView window] makeKeyAndOrderFront:0] ;
}
void myasyncsystem(const char *s) {
textofront() ;
[((ComScroll *)[myPageView getTeX]) logCommand:s inBack:1] ;
}
extern void reTeXit() ;
- TeXtexit:sender {
reTeXit("tex -v \"%s\"") ;
return self ;
}
- TeXlatexit:sender {
reTeXit("latex -v \"%s\"") ;
return self ;
}
- TeXslitexit:sender {
reTeXit("slitex -v \"%s\"") ;
return self ;
}
- TeXbibtexit:sender {
reTeXit("bibtex \"%s\"") ;
return self ;
}
- TeXamstexit:sender {
reTeXit("amstex -v \"%s\"") ;
return self ;
}
- TeXmakeit:sender {
reTeXit("make \"%s.dvi\"") ;
return self ;
}
- clearBuffer:sender {
ComScroll *c = 0 ;
if (console && [[(ComScroll *)console window] isKeyWindow])
c = console ;
else if (tex && [[(ComScroll *)tex window] isKeyWindow])
c = tex ;
if (c)
[c clear] ;
return self ;
}
- appDidBecomeActive:(id)sender;
{
[tvWindow makeKeyAndOrderFront:self] ;
[[NXApp appIcon] setContentView:iconStuff] ;
[[NXApp appIcon] display] ;
return self ;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.