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.