ftp.nice.ch/pub/next/graphics/video/VideoTeXT.1.1a.N.bs.tar.gz#/VideoTeXT1.1a/Quelltexte/VideoTextView.h

This is VideoTextView.h in view mode; [Download] [Up]

/* (c) 1992 Dirk Schwarzhans, Matthias Braun
   Use under the terms of the GNU General Public License */
   
#import <appkit/View.h>

#import <appkit/NXImage.h>
#import <appkit/Pasteboard.h>
#import <dpsclient/wraps.h>
#import <dpsclient/psops.h>
#import <dpsclient/dpsNeXT.h>
#import <objc/Storage.h>

#define ROWS 24				// Anzahl der Textzeilen und -spalten
#define COLUMNS 40
#define INFO_OFFSET 1000 	// Beginn der Status-Informationen

// Video-Text Steuerzeichen
typedef enum {ALPHABLACK = 0, ALPHARED = 1, ALPHAGREEN = 2, ALPHAYELLOW = 3,
			  ALPHABLUE = 4, ALPHAMAGENTA = 5, ALPHACYAN = 6, ALPHAWHITE = 7,
			  FLASH = 8, STEADY = 9, ENDBOX = 10, STARTBOX = 11, NORMAL = 12,
			  DOUBLE = 13, SO = 14, SI = 15, 
			  GRAPHBLACK = 16, GRAPHRED = 17, GRAPHGREEN = 18, GRAPHYELLOW = 19,
			  GRAPHBLUE = 20, GRAPHMAGENTA = 21, GRAPHCYAN = 22, GRAPHWHITE = 23,
			  HIDE = 24, CONGRAPH = 25, SEPGRAPH = 26, ESC = 27, BLACKBGND = 28,
			  NEWBGND = 29, HOLDGRAPH = 30, RELEASEGRAPH = 31} VTCtrl;

#define ISCTRL(c) ((c) < 32)			// pröft auf Steuerzeichen		
#define CTRL2COLOR(a) ((a) & 7)		// berechnet die Farbe aus einen Steuerzeichen
#define VALIDBITS(a) ((a) & 0x7F)		// relevante Bits för Video-Text-Daten
#define ISGRAPHICCHAR(a) ((a) & 0x20) // Zeichen ist Grafikzeichen

// Video-Text Farben
typedef enum {VT_BLACK = 0, VT_RED = 1, VT_GREEN = 2, VT_YELLOW = 3,
			  VT_BLUE = 4, VT_MAGENTA = 5, VT_CYAN = 6, VT_WHITE = 7} VTColor;
#define VT_COLORS 8

// mögliche ZeichensÙtze: Text, zusammenhÙngende Grafik, separierte Grafik
typedef enum {TEXTFONT = 0, CONGRAPHFONT = 1, SEPGRAPHFONT = 2}	VTFont;

// mögliche Schriftgröûen
typedef enum {NORMALSIZE, DOUBLESIZE} VTFontSize;

// Video-Text ZeichensÙtze
typedef enum {ENGLISH = 0, GERMAN = 4, SWEDISH = 2,
			 ITALIAN = 5, FRENCH = 1, SPANISH = 3}VTCharSet;
#define VT_CHARSETS 6

// View-interne Darstellung eines Zeichens einer Video-Text-Seite
// nach Auswertung aller Steuerzeichen
typedef struct
{
	VTColor			bgndColor;			// Hintergrundfarbe
	VTColor			charColor;			// (*) Zeichenfarbe
	VTFont			font;				// (*) Zeichentyp
	VTFontSize		fontSize;			// (*) Zeichenhöhe
	BOOL			flashing;			// blinkend
	BOOL			hidden;				// versteckt
	BOOL			textBreak;			// einer der (*)-Parameter hat gewechselt
	unsigned char	charCode;			// Zeichenkode
}VTChar;


typedef struct
{
	short row, column;
}Position;	// för Zeichenpositionen

typedef struct
{
	BOOL		empty;
	BOOL		appendCR;
	Position	start;		// Startposition
	Position	end;		// Endposition
}CharSeq;	// Sequenz von Zeichen z.B. aktuelle Selektion

typedef enum {FLASH_HIDE, FLASH_SHOW} FlashAction;

@interface VideoTextView:View
{
	id				delegate;

	float			line0_y;					// y-Koordinate von Zeile 0
	float			lineHeight;					// Höhe einer Zeile
	float			charWidth;					// Breite eines Zeichens

	NXImage			*background;				// Bitmap mit den Hintergrundfarben
	NXImage			*foreground;				// Bitmap mit dem Text

	Storage			*hiddenList;				// Liste aller versteckten Bereiche
	Storage			*flashingList;				// Liste aller blinkenden Bereiche
	BOOL			showHiddenText;				// versteckte Texte zeigen oder nicht
	BOOL			allowFlashing;				// blinkende Texte blinken lassen
	double			flashDelay;					// Zeit [s] zwischen Zustandwechseln
	FlashAction		nextAction;					// nÙchster auszuföhrender Wechsel
	DPSTimedEntry	flashTimedEntry;			// Identifikationsnummer

	BOOL			dataValid;					// Flag:Speicher enthÙlt göltige Seite
	VTChar			decodedPage[ROWS][COLUMNS];	// Daten aller Zeichen
	char			doubleTab[ROWS];			// Verzeichnis doppelt hoher Zeilen
	VTCharSet		language;					// Zeichensatz der aktuellen Seite

	float			fontSize;					// Schriftgröûe der PostScript-Fonts
	unsigned char 	convtab[128];				// Zeichenkonvertierung VT -> NeXT
	NXColor			colorTab[VT_COLORS];		// Liste zur Farbumsetzung

	CharSeq			selection;					// selektierter Bereich (z.B. för COPY)	
	BOOL			searchOn2Click;				// Verhalten bei Doppel-Klick
	Position		draggPos;					// för Koordinaten wÙhrend des Draggens
	Position		draggStart;					// Start-Koordinaten des Draggens
	unsigned char	clickCount;					// wichtig förs Draggen
	BOOL			pageRequested;				// Seitenanforderung ausgelöst
}

- initFrame:(const NXRect *)frameRect;
- free;
- drawSelf:(const NXRect *)rects :(int)rectCount;

- setPageData:(const unsigned char *)data;

- setFontSize:(float)points;
- (float)fontSize;
- setDelegate:object;
- delegate;
- setColorTab:(NXColor *)newColors;
- (const NXColor *)colorTab;
- resetColorTab;
- showHiddenText:(BOOL)mode;
- (BOOL)textHidden;
- allowFlashing:(BOOL)mode;
- (BOOL)isFlashing;
- setSearchOn2Click:(BOOL)mode;
- (BOOL)searchOn2Click;
- (BOOL)hasSelection;

- clearSelection;
- selectAll:sender;
- (BOOL)acceptsFirstResponder;
- copy:sender;
- cut:sender;
- paste:sender;
- validRequestorForSendType:(NXAtom)sendType andReturnType:(NXAtom)returnType;
- (BOOL)writeSelectionToPasteboard:pboard types:(NXAtom *)types;

// Delegate-Methoden
- requestPage:(int)page subpage:(int)subpage forWindow:(Window *)window;
- dontDisturb:(BOOL)mode;

// private Methoden: nicht benutzen
- mouseDown:(NXEvent *)event;
- mouseDragged:(NXEvent *)event;
- mouseUp:(NXEvent *)event;
- makeTextVisible:(BOOL)mode useList:(Storage *)list;
- flashText;
- startFlashing;
- stopFlashing;
- generateImages:foregroundFocus :backgroundFocus hasAlpha:(BOOL)alphaMode;
- drawSelection:(CharSeq *)sequence mode:(BOOL)show;
- (float)bottomOfLine:(int)row;
- (float)topOfLine:(int)row;
- (float)heightOfLine:(int)row;
- (int)rowCol2Offset:(Position *)pos;
@end

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.