This is Inspector.m in view mode; [Download] [Up]
/* (c) 1992 Dirk Schwarzhans, Matthias Braun
Use under the terms of the GNU General Public License */
#import "Inspector.h"
#import <appkit/Application.h>
#import <appkit/Button.h>
#import <appkit/Form.h>
#import <appkit/FormCell.h>
#import <appkit/Matrix.h>
#import <appkit/Panel.h>
#import <appkit/Text.h>
#import <appkit/View.h>
#import <objc/List.h>
#define STATE2BOOL(a) (a ? YES : NO)
#define BOOL2STATE(a) (a ? 1 : 0)
@implementation Inspector
// **********************************************************
// Dummy-Methoden för den Fall, daû kein delegate bekannt ist
// **********************************************************
- requestPage:(int)page subpage:(int)subpage forWindow:(Window *)window
{ return self; }
- subpageBrowse:(int)direction
{ return self; }
- clearPageMemoryRequested
{ return self; }
- holdPage:(BOOL)mode
{ return self; }
- setIVTRegisters:(unsigned char)mode :(unsigned char)normDispCtrl
:(unsigned char)newsDispCtrl :(unsigned char)dispMode
{ return self; }
// ************************************************************
// interne Methoden, die nach auûen nicht bekanntgegeben werden
// ************************************************************
- getColorsFromView
{
const NXColor *colors;
int i;
colors = [inspectedView colorTab];
for (i = 0; i < VT_COLORS; i++)
[colorWells[i] setColor:colors[i]];
return self;
}
- updatePageControlBox
{
if ([inspectedView isFlashing] == YES)
[flashSwitch setState:1];
else
[flashSwitch setState:0];
if ([inspectedView textHidden] == YES)
[showHiddenSwitch setState:1];
else
[showHiddenSwitch setState:0];
[fontSizeForm setIntValue:[inspectedView fontSize]];
return self;
}
// *******************************************************************
// Methoden öber die der Inspektor initialisiert und konfiguriert wird
// *******************************************************************
- initAndEnable:(BOOL)mode;
{
[super init];
[NXApp loadNibSection:"Inspector.nib" owner:self];
menuMatrix = [[[inspectorMenuButton cell] target] itemList];
[menuMatrix selectCellAt:0:0];
inspectedView = nil;
delegate = self;
activeBox = idleBox;
[self setEnabled:mode];
[inspectorPanel makeKeyAndOrderFront:self];
[self ivtSwitchesChanged:self];
// Muû leider sein, da man im IB keine Matrix mit NXColorWells bekommt.
colorWells[0] = colorWellBlack;
colorWells[1] = colorWellRed;
colorWells[2] = colorWellGreen;
colorWells[3] = colorWellYellow;
colorWells[4] = colorWellBlue;
colorWells[5] = colorWellMagenta;
colorWells[6] = colorWellCyan;
colorWells[7] = colorWellWhite;
// Man könnte natörlich eine Klasse 'NXColorWellCell' als Unterklasse von 'Cell'
// schreiben und den Interface-Builder öber ladbare Paletten erweitern, damit
// er Matrizen von 'NXColorWell' unterstötzt.
return self;
}
- init
{
return [self initAndEnable:NO];
}
- inspectView:(VideoTextView *)view
{
inspectedView = view;
[self getColorsFromView];
[self updatePageControlBox];
[inspectorPanel display];
return self;
}
- setDelegate:object
{
delegate = object;
return self;
}
- setEnabled:(BOOL)mode
{
[inspectorMenuButton setEnabled:mode];
[[menuMatrix cellList] makeObjectsPerform:@selector(setEnabled:) with:(id)mode];
if (mode == YES)
[self menuEntrySelected:menuMatrix];
else
{
[[inspectorPanel contentView] replaceSubview:activeBox with:idleBox];
activeBox = [idleBox display];
}
enabled = mode;
return self;
}
- (BOOL)isEnabled
{
return enabled;
}
- makeKeyAndOrderFront:sender;
{
[inspectorPanel makeKeyAndOrderFront:self];
return self;
}
// ************************************************************************
// Methoden mit denen von 'Auûen' ZustÙnde der Schalter oder der Inhalt der
// Textfelder im InspectorPanel verÙndert werden
// ************************************************************************
- setIncomingPage:(const char *)number
{
[incomingPagesText setStringValue:number];
return self;
}
- setHoldPageSwitch:(BOOL)mode
{
[holdSwitch setState:BOOL2STATE(mode)];
return self;
}
- setCareSubpage:(BOOL)mode
{
[subpageSwitch setState:BOOL2STATE(mode)];
[[requestDataForm cellAt:1:0] setEnabled:mode];
return self;
}
- setRequestPage:(int)page
{
[requestDataForm setIntValue:page at:0];
return self;
}
- setRequestSubpage:(int)subpage
{
[requestDataForm setIntValue:subpage at:1];
return self;
}
// *************************************************************************
// Methoden die öber Schalter, etc. aus dem InspectorPanel aufgerufen werden
// *************************************************************************
- menuEntrySelected:sender
{
Box *newBox;
switch([sender selectedRow])
{
case 0:
newBox = pageDataBox;
break;
case 1:
newBox = displayControlBox;
break;
case 2:
newBox = colorControlBox;
break;
case 3:
newBox = ivtControlBox;
break;
default:
newBox = idleBox;
break;
}
[inspectorMenuButton setTitleNoCopy:[[sender selectedCell] title]];
[[inspectorPanel contentView] replaceSubview:activeBox with:newBox];
[activeBox = newBox display];
return self;
}
- resetColorPanel:sender
{
[inspectedView resetColorTab];
[self getColorsFromView];
return self;
}
- setColors:sender
{
NXColor colors[VT_COLORS];
int i;
for (i = 0; i < VT_COLORS; i++)
colors[i] = [colorWells[i] color];
[inspectedView setColorTab:colors];
return self;
}
- displaySwitchChanged:sender
{
[inspectedView allowFlashing:STATE2BOOL([flashSwitch state])];
[inspectedView showHiddenText:STATE2BOOL([showHiddenSwitch state])];
return self;
}
- newPageRequested:sender
{
int page, subpage;
page = [requestDataForm intValueAt:0];
if ([subpageSwitch state] == 1)
subpage = [requestDataForm intValueAt:1];
else
subpage = 0;
[delegate requestPage:page subpage:subpage forWindow:[inspectedView window]];
return self;
}
- holdSwitchChanged:sender
{
[delegate holdPage:STATE2BOOL([sender state])];
return self;
}
- subpageForwardBackward:sender
{
[delegate subpageBrowse:(2 * [sender selectedCol] - 1)];
return self;
}
- clearPageMemory:sender
{
[delegate clearPageMemoryRequested];
return self;
}
- subpageSwitchChanged:sender
{
[self setCareSubpage:STATE2BOOL([sender state])];
return self;
}
- newPageNumberEntered:sender
{
if ([sender selectedRow] == 1 || [subpageSwitch state] == 0)
[pageRequestButton performClick:self];
else
[sender selectTextAt:1];
return self;
}
- ivtSwitchesChanged:sender
{
unsigned char mode, normDispCtrl, newsDispCtrl, dispMode;
int i;
static const unsigned char regBit[] = {64, 4, 1};
dispMode = normDispCtrl = newsDispCtrl = 0;
// flimmerfrei
if ([[teleDisplaySwitches cellAt:0 :0] state])
mode = 6;
else
mode = 0;
// Einblendefeld in Zeile
for (i = 0; i < 3; i++)
{
if ([[boxPositionSwitches cellAt:0 :i] state])
dispMode |= (1 << i);
}
// Textfreigabe
if ([[teleDisplaySwitches cellAt:1 :0] state])
dispMode |= 32;
// doppelteHöhe, untere HÙlfte
if ([[teleDisplaySwitches cellAt:0 :1] state])
{
dispMode |= 8;
[[teleDisplaySwitches cellAt:1 :1] setEnabled:YES];
if ([[teleDisplaySwitches cellAt:1 :1] state])
dispMode |= 16;
}
else
{
[[teleDisplaySwitches cellAt:1 :1] setState:0];
[[teleDisplaySwitches cellAt:1 :1] setEnabled:NO];
}
// Anzeige in Einblendefeldern
for (i = 0; i < 3; i++)
{
if ([[normpageInBoxSwitches cellAt:i :0] state])
normDispCtrl |= regBit[i];
if ([[normpageOutBoxSwitches cellAt:i :0] state])
normDispCtrl |= (regBit[i] << 1);
if ([[newspageInBoxSwitches cellAt:i :0] state])
newsDispCtrl |= regBit[i];
if ([[newspageOutBoxSwitches cellAt:i :0] state])
newsDispCtrl |= (regBit[i] << 1);
}
[delegate setIVTRegisters:mode :normDispCtrl :newsDispCtrl :dispMode];
return self;
}
// als 'delegate' von Text (fontSizeForm)
- textDidEnd:sender endChar:(unsigned short)whyEnd
{
if (whyEnd == NX_RETURN)
{
[inspectedView setFontSize:[fontSizeForm intValueAt:0]];
[inspectedView display];
}
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.