This is TeXviewSwitchBoard.m in view mode; [Download] [Up]
#import "TeXviewSwitchBoard.h"
#import <appkit/appkit.h>
#import "TeXviewObject.h"
#import "dviAccessors.h"
#import "ComScroll.h"
#import "FREE.h"
#include <string.h>
extern TeXviewObject *myTeXviewObject;
TeXviewSwitchBoard *myTeXviewSwitchBoard;
Boolean context_needs_switching = 0 ;
Boolean new_view = 0;
Boolean cloned = 0 ;
extern Window *tvWindow;
const char *legit_types[] = {"dvi", "tex", "latex", "ltx", "texinfo", NULL};
extern NXRect *initsizewindow();
extern float screendpi ;
extern Boolean pagedrawn ;
extern int debugon ;
extern int initWasOnScreen() ;
extern void dviUnzoom() ;
extern void dviZoom() ;
extern void dviZoomUnzoom() ;
extern void dviGotoPage() ;
extern void dviFirstPage() ;
extern void dviReOpenFile() ;
extern void dviinit();
extern void display();
extern void TPSinit(), TPSdefres() ;
extern void TPSgetfontarray() ;
extern void recalculate() ;
extern void reportnewdpi() ;
extern void print_context() ;
extern int relativepage() ;
extern void newdpi() ;
extern void fontinit() ;
extern Boolean mocked;
extern void clear_context() ;
extern void get_context() ;
void reportname() ;
extern id fpageinit();
void display();
id makenewdoc();
void fdrawrule();
void getpagenum();
void previewtofront();
void openfilename();
extern shalfword hh, vv ;
extern shalfword hhoffset, vvoffset ;
extern shalfword hhmin, hhmax, vvmin, vvmax ;
extern shalfword hhsize, vvsize ;
extern shalfword rhhsize, rvvsize ;
extern shalfword hhmarg, vvmarg ;
id ht_highlight_tag ;
id ht_last_clicked_tag ;
extern ht_highlight ;
@implementation TeXviewSwitchBoard
-init
{
self = [super init];
myOpenPanel = nil;
myTeXviewSwitchBoard = self ;
docViewList = [[List alloc] initCount:2];
docViewNum = 0 ;
TPSinit() ;
return self;
}
- free
{
FREE_OBJECT(docViewList) ;
FREE_OBJECT(myOpenPanel) ;
return [super free] ;
}
- 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;
}
- setMockSwitch:anObject
{
mockSwitch = anObject;
[self upMock];
return self;
}
char realnameoffile[255];
- reportName:(char *)name
{
[[currentPageView window] setTitleAsFilename:name];
return self ;
}
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;
[myTeXviewSwitchBoard reportName:oldname];
}
void
upmock(void)
{
[myTeXviewSwitchBoard upMock];
}
- upMock
{
[mockSwitch setState:mocked];
return self;
}
- setPositionText:anObject
{
positionText = anObject;
return self;
}
- getPositionText
{
return positionText ;
}
- setPositionRadio:anObject
{
positionRadio = anObject;
return self;
}
- setCurrentPageForm:anObject
{
currentPageForm = anObject;
return self;
}
-getCurrentPageForm
{
return currentPageForm ;
}
- setCurrentWindow:anObject
{
currentWindow = anObject ;
return self ;
}
- getCurrentWindow
{
return currentWindow ;
}
- setCurrentPageView:anObject
{
currentPageView = (PageView *)anObject ;
return self ;
}
- getCurrentPageView
{
return currentPageView ;
}
- setCurrentSheetView:anObject ;
{
currentSheetView = (SheetView *)anObject ;
return self;
}
- setCurrentZoomed:anObject
{
currentZoomed = anObject ;
return self ;
}
- setCurrentHtags:anObject
{
currentHtags = anObject ;
return self ;
}
- getCurrentHtags
{
return currentHtags ;
}
- setCurrentHtpages:anObject
{
currentHtpages = anObject ;
return self ;
}
- getCurrentHtpages
{
return currentHtpages ;
}
- setCurrent_ht_last_clicked_tag:anObject
{
current_ht_last_clicked_tag = anObject ;
return self ;
}
- getCurrent_ht_last_clicked_tag
{
return current_ht_last_clicked_tag ;
}
- setCurrent_ht_highlight_tag:anObject ;
{
current_ht_highlight_tag = anObject ;
return self ;
}
- getCurrent_ht_highlight_tag
{
return current_ht_highlight_tag ;
}
- zoom:sender ;
{
[currentZoomed setState:1] ;
pagedrawn = 0 ;
dviZoom() ;
return self ;
}
- unzoom:sender ;
{
[currentZoomed setState:0] ;
pagedrawn = 0;
dviUnzoom() ;
return self ;
}
- lastPage:sender
{
[currentPageView lastPage] ;
return self;
}
- openPanel
{
if (!myOpenPanel)
myOpenPanel = [OpenPanel new];
return (myOpenPanel);
}
- openFile:sender
{
if ([[self openPanel] runModalForTypes:legit_types]) {
[self openFilename:(char *)[[self openPanel] filename]] ;
}
return self;
}
void openfilename(char *filename)
{
[myTeXviewSwitchBoard openFilename:filename] ;
return ;
}
-openFilename:(char *)filename
{
NXRect *tr;
if (filename == NULL) return self ;
if (currentPageView) [currentPageView saveDviContext] ;
[self newDocView:-1] ;
[currentPageView setAbsoluteFn:filename] ;
clear_context() ;
dviOpenFile(filename);
if ((tr = initsizewindow(0))) {
[currentWindow placeWindow:tr]; }
tvWindow = currentWindow;
// new_view = 1 ;
[currentWindow makeKeyAndOrderFront:0];
return self;
}
- reOpenFile:sender
{
dviReOpenFile();
return self;
}
- newDocView:(int)master /* -1 if master */
{
if([NXApp loadNibSection:"docview.nib" owner: self] == nil) {
return nil;
}
[currentWindow setDocViewIndex:docViewNum];
[currentWindow setMaster:master];
// [currentWindow setSlave:0]; //now a linked list of slaves
[docViewList insertObject:currentWindow at:docViewNum] ;
docViewNum++;
new_view = 1 ;
return self ;
}
- (int)getDocViewNum
{
return docViewNum ;
}
- clone:sender
{
[self cloneToPage: -1 ToFront: 1] ;
return self ;
}
- cloneToPage:(int)pagenumber ToFront:(int)front
{
NXRect *tr ;
// int slave ;
PageView *pv ;
pagedrawn = 0 ;
pv = currentPageView ;
[pv saveDviContext] ;
[pv setHt_last_clicked_tag:ht_last_clicked_tag] ;
[pv setHt_highlight_tag:ht_highlight_tag] ;
cloned = 1 ;
[self newDocView:[currentWindow getDocViewIndex]] ;
[[pv window] installSlave:[currentWindow getDocViewIndex]] ;
[currentPageView setAbsoluteFn:[pv getAbsoluteFn]] ;
// currentPageForm = [currentPageView getPageForm] ;
// currentZoomed = [currentPageView getZoomed];
clear_context() ;
dviOpenFile([pv getAbsoluteFn]);
if (pagenumber != -1) {
char pn[10] ;
sprintf(pn, "%d", pagenumber) ;
// relativepage(1) ;
// dviGotoPage(pn) ;
}
if ((tr = initsizewindow(4))) {
[currentWindow placeWindow:tr]; }
tvWindow = currentWindow;
if (front) [self currentKeyAndFront] ;
return self ;
}
- currentKeyAndFront
{
[currentWindow makeKeyAndOrderFront:0];
return self ;
}
- slaveToCurrent
{
int slave;
if ((slave = [currentWindow getSlave])) {
[[docViewList objectAt:slave] makeKeyAndOrderFront:0] ;
} else {
[self cloneToPage:1 ToFront:0] ;
}
return self ;
}
- freezeSlave:sender
{
[currentWindow setFrozen:1] ;
return self ;
}
- unfreezeSlave:sender
{
[currentWindow setFrozen:0] ;
return self ;
}
- emancipate:sender
{
[[docViewList objectAt:[currentWindow getMaster]]
removeSlave: [currentWindow getDocViewIndex]] ;
[currentWindow setMaster:-1] ; /* promote to master */
return self ;
}
- emancipateByNumber:(int) num
{
TVWindow *w ;
w = [docViewList objectAt:num] ;
[[docViewList objectAt:[w getMaster]] removeSlave:[w getDocViewIndex]] ;
[w setMaster: -1] ;
return self ;
}
- (int)checkFrozen:(int)win
{
return [[docViewList objectAt:win] getFrozen] ;
}
- windowWillClose:sender
{
// [sender setDelegate:nil] ;
// [docViewList removeObject:currentPageView] ;
// [docViewList removeObjectAt:[currentWindow getDocViewIndex]] ;
[sender emancipateSlaves] ;
[[docViewList objectAt: [currentWindow getMaster]]
removeSlave:[sender getDocViewIndex]];
if([docViewList count] == 0) { /* This won't happen at the moment */
currentPageView = nil ;
currentSheetView = nil ;
currentHtags = nil ;
currentHtpages = nil ;
current_ht_last_clicked_tag = nil ;
current_ht_highlight_tag = nil ;
}
return self ;
}
// The key window gets is context promoted to the global one
// The window's PageView etc. is made the currently active one
- windowDidBecomeKey:sender
{
int num ;
#ifdef DEBUG
if (debugon > 1 ) {
printf("wdbk entered\n");
//print_context() ;
}
#endif
if (!new_view) {
[currentPageView saveDviContext] ;
[currentPageView setHt_last_clicked_tag:ht_last_clicked_tag] ;
[currentPageView setHt_highlight_tag:ht_highlight_tag] ;
} //make this a save method
num = [sender getDocViewIndex] ;
currentWindow = [docViewList objectAt:num];
TPSgetfontarray(num) ; // Change fontarray in global DPS context
currentPageView = [currentWindow getPageView] ;
tvWindow = currentWindow ;
currentSheetView = [currentPageView docView];
currentPageForm = [currentPageView getPageForm] ;
currentZoomed = [currentPageView getZoomed];
currentHtags = [currentPageView getHtags] ;
currentHtpages = [currentPageView getHtpages] ;
ht_highlight_tag = [currentPageView getHt_highlight_tag] ;
#ifdef DEBUG
if (debugon > 1 ) {
printf("ht_highlight_tag is %p\n", ht_highlight_tag) ;
}
#endif
ht_last_clicked_tag = [currentPageView getHt_last_clicked_tag] ;
if (!new_view) {
[currentPageView getDviContext] ;
TPSdefres((double)screendpi) ;
#ifdef DEBUG
if (debugon > 1 ) {
printf("WDBK: getting dvi Context\n") ;
print_context();
}
#endif
}
new_view = 0 ;
#ifdef DEBUG
if (debugon > 1 ) {
printf("wdbk exited\n");
}
#endif
reportnewdpi() ;
return self ;
}
// Context is only saved if it is not resigning because it was cloned or
// a new document is created. This is taken care of in the methods that
// create a new document.
- windowDidResignKey:sender
{
PageView *pv ;
#ifdef DEBUG
if (debugon > 1 ) {
printf("wdrk entered\n");
}
#endif
if (!cloned && !new_view) {
#ifdef DEBUG
if (debugon > 1 ) {
printf("saving because I wasn't cloned\n") ;
print_context() ;
}
#endif
pv = [[docViewList objectAt:[sender getDocViewIndex]] getPageView] ;
[pv saveDviContext] ;
[pv setHt_last_clicked_tag:ht_last_clicked_tag] ;
[pv setHt_highlight_tag:ht_highlight_tag] ;
}
cloned = 0;
#ifdef DEBUG
if (debugon > 1 ) {
printf("wdrk exited\n");
}
#endif
return self ;
}
- nextPage:sender
{
[currentPageView nextPage] ;
return self;
}
- firstPage:sender
{
[currentPageView firstPage] ;
return self;
}
- zoomUnzoom:sender
{
dviZoomUnzoom();
return self;
}
- prevPage:sender
{
[currentPageView prevPage] ;
return self;
}
- fireRandom:sender
{
[currentPageView fireRandom] ;
return self;
}
- closeFile:sender
{
[currentPageView closeFile] ;
return self;
}
- gotoPage:sender
{
dviGotoPage((char *)[sender stringValueAt:0]);
return self;
}
- changeDPI:(id)sender
{
[myTeXviewObject popIt:sender];
return self;
}
- TeXtexit:sender
{
[currentPageView TeXtexit] ;
return self;
}
- TeXlatexit:sender
{
[currentPageView TeXlatexit] ;
return self;
}
- TeXslitexit:sender
{
[currentPageView TeXslitexit] ;
return self;
}
- TeXbibtexit:sender
{
[currentPageView TeXbibtexit] ;
return self;
}
- TeXamstexit:sender
{
[currentPageView TeXamstexit] ;
return self;
}
- TeXlatex209it:sender
{
[currentPageView TeXlatex209it] ;
return self;
}
- TeXeplainit:sender
{
[currentPageView TeXeplainit] ;
return self;
}
- TeXcustomexit:sender
{
[currentPageView TeXcustomexit] ;
return self;
}
- TeXdefaultexit:sender
{
[currentPageView TeXdefaultexit] ;
return self;
}
- TeXmakeit:sender
{
[currentPageView TeXmakeit] ;
return self;
}
- openManual:sender
{
[currentPageView openManual] ;
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;
}
- mockUnmock:sender
{
[currentPageView mockUnmock] ;
return self;
}
- mock:sender
{
[currentPageView mock] ;
return self;
}
- unMock:sender
{
[currentPageView unMock] ;
return self;
}
extern char LastFormat[], CustomFormat[];
- setDefaultformat:sender
{
defaultformat = sender;
[self upDefaultformat:self];
return self;
}
- setCustomformat:sender
{
customformat = sender;
[self upCustomformat:self];
return self;
}
- newDefaultformat:sender
{
char *p = (char *)[sender stringValueAt:0];
while (*p <= ' ' && *p)
p++;
strcpy(LastFormat, p);
p = LastFormat;
while (*p > ' ')
p++;
*p = 0;
return self;
}
- newCustomformat:sender
{
char *p = (char *)[sender stringValueAt:0];
while (*p <= ' ' && *p)
p++;
strcpy(CustomFormat, p);
p = CustomFormat;
while (*p > ' ')
p++;
*p = 0;
return self;
}
- upDefaultformat:sender
{
[(TextField *) defaultformat setStringValue:LastFormat];
return self;
}
- upCustomformat:sender
{
[(TextField *) customformat setStringValue:CustomFormat];
return self;
}
void
upformats(void)
{
[myTeXviewSwitchBoard upDefaultformat:0];
[myTeXviewSwitchBoard upCustomformat:0];
}
- appDidBecomeActive:(id)sender
{
// [currentPageView appDidBecomeActive] ;
return self;
}
- changeUnits:sender
{
[currentPageView changeUnits] ;
return self;
}
- moveBackInHistory:sender
{
[currentPageView moveBackInHistory] ;
return self;
}
- moveForwardInHistory:sender
{
[currentPageView moveForwardInHistory] ;
return self;
}
- saveCurrentContext
{
return [currentPageView saveDviContext] ;
}
- restoreCurrentContext
{
return [currentPageView getDviContext] ;
}
- (int)moveDown:(int)shiftstate
{
return [currentPageView moveDown:shiftstate] ;
}
- (int)moveUp:(int)shiftstate
{
return [currentPageView moveUp:shiftstate] ;
}
- (int)moveRight:(int)shiftstate
{
return [currentPageView moveRight:shiftstate] ;
}
- (int)moveLeft:(int)shiftstate
{
return [currentPageView moveLeft:shiftstate] ;
}
- Bot:(int)quiet
{
return [currentPageView Bot:quiet] ;
}
- Top:(int)quiet
{
return [currentPageView Top:quiet] ;
}
- makeNewDocSheet:(int)hsize:(int)vsize
{
return [currentSheetView makeNewDoc:hsize:vsize] ;
}
- displaySheet
{
[currentSheetView display] ;
return self ;
}
- drawSheetRule:(halfword)xx:(halfword)yy
{
[currentSheetView drawRule:xx:yy] ;
return self ;
}
/* From SheetView.m */
id makenewdoc(hsize, vsize)
int hsize, vsize ;
{
return [myTeXviewSwitchBoard makeNewDocSheet:hsize:vsize] ;
}
static int dontbother = 1 ;
void display()
{
dontbother = 1 ;
(void)fpageinit() ;
dontbother = 0 ;
[myTeXviewSwitchBoard displaySheet] ;
}
void fdrawrule(xx, yy)
halfword xx, yy ;
{
register shalfword hmin, hmax, vmin, vmax ;
if (xx>0 && yy>0) {
hmin = hh+hhoffset ;
hmax = hmin + xx - 1 ;
vmax = vv+vvoffset ;
vmin = vmax - yy + 1 ;
[myTeXviewSwitchBoard drawSheetRule:xx:yy] ;
}
}
- getPageNum:(char *)s
{
[currentPageView getpagenum:s];
return self ;
}
- previewToFront
{
[currentWindow makeKeyAndOrderFront:0];
return self ;
}
void
getpagenum(s)
char *s;
{
[myTeXviewSwitchBoard getPageNum:s];
}
void
previewtofront()
{
[myTeXviewSwitchBoard previewToFront] ;
}
- noScrollUpdates
{
[currentPageView noScrollUpdates] ;
return self;
}
- scrollUpdates
{
[currentPageView scrollUpdates] ;
return self;
}
- cachePosition:(int)x :(int)y
{
[currentPageView cachePosition:x:y] ;
return self;
}
- unCachePosition:(int)x :(int)y
{
[currentPageView unCachePosition:x:y] ;
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.